Skip to content

Commit

Permalink
i7core_edac: Probe on Xeons eariler
Browse files Browse the repository at this point in the history
On the Xeon 55XX series cpus the pci deives are not exposed via acpi so
we much explicitly probe them to make the usable as a Linux PCI device.

This moves the detection of this state to before pci_register_driver is
called.  Its present position was not working on my systems, the driver
would complain about not finding a specific device.

This patch allows the driver to load on my systems.

Signed-off-by: Keith Mannthey <kmannth@us.ibm.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Keith Mannthey authored and Mauro Carvalho Chehab committed May 10, 2010
1 parent 14d2c08 commit bc2d724
Showing 1 changed file with 19 additions and 13 deletions.
32 changes: 19 additions & 13 deletions drivers/edac/i7core_edac.c
Original file line number Diff line number Diff line change
Expand Up @@ -1158,6 +1158,23 @@ static void i7core_put_devices(void)
pci_dev_put(pci_devs[j].pdev[i]);
}

static void i7core_xeon_pci_fixup(void)
{
struct pci_dev *pdev = NULL;
int i;
/*
* On Xeon 55xx, the Intel Quckpath Arch Generic Non-core pci buses
* aren't announced by acpi. So, we need to use a legacy scan probing
* to detect them
*/
pdev = pci_get_device(PCI_VENDOR_ID_INTEL,
pci_devs[0].dev_id, NULL);
if (unlikely(!pdev)) {
for (i = 0; i < NUM_SOCKETS; i ++)
pcibios_scan_specific_bus(255-i);
}
}

/*
* i7core_get_devices Find and perform 'get' operation on the MCH's
* device/functions we want to reference for this driver
Expand All @@ -1173,19 +1190,6 @@ int i7core_get_onedevice(struct pci_dev **prev, int devno)
pdev = pci_get_device(PCI_VENDOR_ID_INTEL,
pci_devs[devno].dev_id, *prev);

/*
* On Xeon 55xx, the Intel Quckpath Arch Generic Non-core pci buses
* aren't announced by acpi. So, we need to use a legacy scan probing
* to detect them
*/
if (unlikely(!pdev && !devno && !prev)) {
pcibios_scan_specific_bus(254);
pcibios_scan_specific_bus(255);

pdev = pci_get_device(PCI_VENDOR_ID_INTEL,
pci_devs[devno].dev_id, *prev);
}

/*
* On Xeon 55xx, the Intel Quckpath Arch Generic Non-core regs
* is at addr 8086:2c40, instead of 8086:2c41. So, we need
Expand Down Expand Up @@ -1896,6 +1900,8 @@ static int __init i7core_init(void)
/* Ensure that the OPSTATE is set correctly for POLL or NMI */
opstate_init();

i7core_xeon_pci_fixup();

pci_rc = pci_register_driver(&i7core_driver);

if (pci_rc >= 0)
Expand Down

0 comments on commit bc2d724

Please sign in to comment.