mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-16 17:23:55 +08:00
sb_edac: Fix detection on SNB machines
d0585cd815
("sb_edac: Claim a different PCI device") changed the probing of sb_edac to look for PCI device 0x3ca0: 3f:0e.0 System peripheral: Intel Corporation Xeon E5/Core i7 Processor Home Agent (rev 07) 00: 86 80 a0 3c 00 00 00 00 07 00 80 08 00 00 80 00 ... but we're matching for 0x3ca8, i.e. PCI_DEVICE_ID_INTEL_SBRIDGE_IMC_TA in sbridge_probe() therefore the probing fails. Changing it to probe for 0x3ca0 (PCI_DEVICE_ID_INTEL_SBRIDGE_IMC_HA0), .i.e., the 14.0 device, fixes the issue and driver loads successfully again: [ 2449.013120] EDAC DEBUG: sbridge_init: [ 2449.017029] EDAC sbridge: Seeking for: PCI ID 8086:3ca0 [ 2449.022368] EDAC DEBUG: sbridge_get_onedevice: Detected 8086:3ca0 [ 2449.028498] EDAC sbridge: Seeking for: PCI ID 8086:3ca0 [ 2449.033768] EDAC sbridge: Seeking for: PCI ID 8086:3ca8 [ 2449.039028] EDAC DEBUG: sbridge_get_onedevice: Detected 8086:3ca8 [ 2449.045155] EDAC sbridge: Seeking for: PCI ID 8086:3ca8 ... Add a debug printk while at it to be able to catch the failure in the future and dump driver version on successful load. Fixes:d0585cd815
("sb_edac: Claim a different PCI device") Cc: stable@vger.kernel.org # 3.18 Acked-by: Aristeu Rozanski <aris@redhat.com> Cc: Tony Luck <tony.luck@intel.com> Acked-by: Andy Lutomirski <luto@amacapital.net> Acked-by: Mauro Carvalho Chehab <m.chehab@samsung.com> Signed-off-by: Borislav Petkov <bp@suse.de>
This commit is contained in:
parent
bfa76d4957
commit
11249e7399
@ -2447,7 +2447,7 @@ static int sbridge_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
rc = sbridge_get_all_devices(&num_mc, pci_dev_descr_ibridge_table);
|
||||
type = IVY_BRIDGE;
|
||||
break;
|
||||
case PCI_DEVICE_ID_INTEL_SBRIDGE_IMC_TA:
|
||||
case PCI_DEVICE_ID_INTEL_SBRIDGE_IMC_HA0:
|
||||
rc = sbridge_get_all_devices(&num_mc, pci_dev_descr_sbridge_table);
|
||||
type = SANDY_BRIDGE;
|
||||
break;
|
||||
@ -2460,8 +2460,11 @@ static int sbridge_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
type = BROADWELL;
|
||||
break;
|
||||
}
|
||||
if (unlikely(rc < 0))
|
||||
if (unlikely(rc < 0)) {
|
||||
edac_dbg(0, "couldn't get all devices for 0x%x\n", pdev->device);
|
||||
goto fail0;
|
||||
}
|
||||
|
||||
mc = 0;
|
||||
|
||||
list_for_each_entry(sbridge_dev, &sbridge_edac_list, list) {
|
||||
@ -2474,7 +2477,7 @@ static int sbridge_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
goto fail1;
|
||||
}
|
||||
|
||||
sbridge_printk(KERN_INFO, "Driver loaded.\n");
|
||||
sbridge_printk(KERN_INFO, "%s\n", SBRIDGE_REVISION);
|
||||
|
||||
mutex_unlock(&sbridge_edac_lock);
|
||||
return 0;
|
||||
|
Loading…
Reference in New Issue
Block a user