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

Commit 310cbb72 authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab
Browse files

i7core: fix probing on Xeon55xx



Xeon55xx fails to probe with this error message:

EDAC DEBUG: in drivers/edac/i7core_edac.c, line at 1660: MC: drivers/edac/i7core_edac.c: i7core_init()
EDAC i7core: Device not found: dev 00:00.0 PCI ID 8086:2c41
i7core_edac: probe of 0000:00:14.0 failed with error -22

This is due to the fact that, on Xeon35xx (and i7core), device 00.0 has
PCI ID 8086:2c40.

Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent f237fcf2
Loading
Loading
Loading
Loading
+20 −3
Original line number Original line Diff line number Diff line
@@ -227,9 +227,6 @@ struct i7core_dev_info {
	.dev_id = (device_id)
	.dev_id = (device_id)


struct pci_id_descr pci_devs[] = {
struct pci_id_descr pci_devs[] = {
		/* Generic Non-core registers */
	{ PCI_DESCR(0, 0, PCI_DEVICE_ID_INTEL_I7_NOCORE)  },

		/* Memory controller */
		/* Memory controller */
	{ PCI_DESCR(3, 0, PCI_DEVICE_ID_INTEL_I7_MCR)     },
	{ PCI_DESCR(3, 0, PCI_DEVICE_ID_INTEL_I7_MCR)     },
	{ PCI_DESCR(3, 1, PCI_DEVICE_ID_INTEL_I7_MC_TAD)  },
	{ PCI_DESCR(3, 1, PCI_DEVICE_ID_INTEL_I7_MC_TAD)  },
@@ -253,6 +250,16 @@ struct pci_id_descr pci_devs[] = {
	{ PCI_DESCR(6, 1, PCI_DEVICE_ID_INTEL_I7_MC_CH2_ADDR) },
	{ PCI_DESCR(6, 1, PCI_DEVICE_ID_INTEL_I7_MC_CH2_ADDR) },
	{ PCI_DESCR(6, 2, PCI_DEVICE_ID_INTEL_I7_MC_CH2_RANK) },
	{ PCI_DESCR(6, 2, PCI_DEVICE_ID_INTEL_I7_MC_CH2_RANK) },
	{ PCI_DESCR(6, 3, PCI_DEVICE_ID_INTEL_I7_MC_CH2_TC)   },
	{ PCI_DESCR(6, 3, PCI_DEVICE_ID_INTEL_I7_MC_CH2_TC)   },

		/* Generic Non-core registers */
	/*
	 * This is the PCI device on i7core and on Xeon 35xx (8086:2c41)
	 * On Xeon 55xx, however, it has a different id (8086:2c40). So,
	 * the probing code needs to test for the other address in case of
	 * failure of this one
	 */
	{ PCI_DESCR(0, 0, PCI_DEVICE_ID_INTEL_I7_NOCORE)  },

};
};
#define N_DEVS ARRAY_SIZE(pci_devs)
#define N_DEVS ARRAY_SIZE(pci_devs)


@@ -1138,6 +1145,16 @@ static int i7core_get_devices(void)
						pci_devs[i].dev_id, NULL);
						pci_devs[i].dev_id, NULL);
		}
		}


		/*
		 * On Xeon 55xx, the Intel Quckpath Arch Generic Non-core regs
		 * is at addr 8086:2c40, instead of 8086:2c41. So, we need
		 * to probe for the alternate address in case of failure
		 */
		if (pci_devs[i].dev_id == PCI_DEVICE_ID_INTEL_I7_NOCORE
								    && !pdev)
			pdev = pci_get_device(PCI_VENDOR_ID_INTEL,
				PCI_DEVICE_ID_INTEL_I7_NOCORE_ALT, NULL);

		if (likely(pdev)) {
		if (likely(pdev)) {
			bus = pdev->bus->number;
			bus = pdev->bus->number;


+1 −0
Original line number Original line Diff line number Diff line
@@ -2549,6 +2549,7 @@
#define PCI_DEVICE_ID_INTEL_I7_MC_CH2_RANK  0x2c32
#define PCI_DEVICE_ID_INTEL_I7_MC_CH2_RANK  0x2c32
#define PCI_DEVICE_ID_INTEL_I7_MC_CH2_TC    0x2c33
#define PCI_DEVICE_ID_INTEL_I7_MC_CH2_TC    0x2c33
#define PCI_DEVICE_ID_INTEL_I7_NOCORE	0x2c41
#define PCI_DEVICE_ID_INTEL_I7_NOCORE	0x2c41
#define PCI_DEVICE_ID_INTEL_I7_NOCORE_ALT 0x2c40
#define PCI_DEVICE_ID_INTEL_82855PM_HB	0x3340
#define PCI_DEVICE_ID_INTEL_82855PM_HB	0x3340
#define PCI_DEVICE_ID_INTEL_IOAT_TBG4	0x3429
#define PCI_DEVICE_ID_INTEL_IOAT_TBG4	0x3429
#define PCI_DEVICE_ID_INTEL_IOAT_TBG5	0x342a
#define PCI_DEVICE_ID_INTEL_IOAT_TBG5	0x342a