Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bc2d7245 authored by Keith Mannthey's avatar Keith Mannthey Committed by Mauro Carvalho Chehab
Browse files

i7core_edac: Probe on Xeons eariler



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: default avatarKeith Mannthey <kmannth@us.ibm.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 14d2c083
Loading
Loading
Loading
Loading
+19 −13
Original line number Diff line number Diff line
@@ -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
@@ -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
@@ -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)