aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@redhat.com>2009-07-16 23:09:10 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2010-05-10 10:44:52 -0400
commit310cbb7284fab9fc9cbb6bb893e51c414e15bba3 (patch)
tree5015d8944d58fad62693aca1676d4b88693ef630
parentf237fcf2b7560be33386255042dc11167ca486d5 (diff)
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: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r--drivers/edac/i7core_edac.c23
-rw-r--r--include/linux/pci_ids.h1
2 files changed, 21 insertions, 3 deletions
diff --git a/drivers/edac/i7core_edac.c b/drivers/edac/i7core_edac.c
index 67822976992e..e2f6dfdca841 100644
--- a/drivers/edac/i7core_edac.c
+++ b/drivers/edac/i7core_edac.c
@@ -227,9 +227,6 @@ struct i7core_dev_info {
227 .dev_id = (device_id) 227 .dev_id = (device_id)
228 228
229struct pci_id_descr pci_devs[] = { 229struct pci_id_descr pci_devs[] = {
230 /* Generic Non-core registers */
231 { PCI_DESCR(0, 0, PCI_DEVICE_ID_INTEL_I7_NOCORE) },
232
233 /* Memory controller */ 230 /* Memory controller */
234 { PCI_DESCR(3, 0, PCI_DEVICE_ID_INTEL_I7_MCR) }, 231 { PCI_DESCR(3, 0, PCI_DEVICE_ID_INTEL_I7_MCR) },
235 { PCI_DESCR(3, 1, PCI_DEVICE_ID_INTEL_I7_MC_TAD) }, 232 { PCI_DESCR(3, 1, PCI_DEVICE_ID_INTEL_I7_MC_TAD) },
@@ -253,6 +250,16 @@ struct pci_id_descr pci_devs[] = {
253 { PCI_DESCR(6, 1, PCI_DEVICE_ID_INTEL_I7_MC_CH2_ADDR) }, 250 { PCI_DESCR(6, 1, PCI_DEVICE_ID_INTEL_I7_MC_CH2_ADDR) },
254 { PCI_DESCR(6, 2, PCI_DEVICE_ID_INTEL_I7_MC_CH2_RANK) }, 251 { PCI_DESCR(6, 2, PCI_DEVICE_ID_INTEL_I7_MC_CH2_RANK) },
255 { PCI_DESCR(6, 3, PCI_DEVICE_ID_INTEL_I7_MC_CH2_TC) }, 252 { PCI_DESCR(6, 3, PCI_DEVICE_ID_INTEL_I7_MC_CH2_TC) },
253
254 /* Generic Non-core registers */
255 /*
256 * This is the PCI device on i7core and on Xeon 35xx (8086:2c41)
257 * On Xeon 55xx, however, it has a different id (8086:2c40). So,
258 * the probing code needs to test for the other address in case of
259 * failure of this one
260 */
261 { PCI_DESCR(0, 0, PCI_DEVICE_ID_INTEL_I7_NOCORE) },
262
256}; 263};
257#define N_DEVS ARRAY_SIZE(pci_devs) 264#define N_DEVS ARRAY_SIZE(pci_devs)
258 265
@@ -1138,6 +1145,16 @@ static int i7core_get_devices(void)
1138 pci_devs[i].dev_id, NULL); 1145 pci_devs[i].dev_id, NULL);
1139 } 1146 }
1140 1147
1148 /*
1149 * On Xeon 55xx, the Intel Quckpath Arch Generic Non-core regs
1150 * is at addr 8086:2c40, instead of 8086:2c41. So, we need
1151 * to probe for the alternate address in case of failure
1152 */
1153 if (pci_devs[i].dev_id == PCI_DEVICE_ID_INTEL_I7_NOCORE
1154 && !pdev)
1155 pdev = pci_get_device(PCI_VENDOR_ID_INTEL,
1156 PCI_DEVICE_ID_INTEL_I7_NOCORE_ALT, NULL);
1157
1141 if (likely(pdev)) { 1158 if (likely(pdev)) {
1142 bus = pdev->bus->number; 1159 bus = pdev->bus->number;
1143 1160
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
index 12c3da6ef14d..bf6db4814c27 100644
--- a/include/linux/pci_ids.h
+++ b/include/linux/pci_ids.h
@@ -2549,6 +2549,7 @@
2549#define PCI_DEVICE_ID_INTEL_I7_MC_CH2_RANK 0x2c32 2549#define PCI_DEVICE_ID_INTEL_I7_MC_CH2_RANK 0x2c32
2550#define PCI_DEVICE_ID_INTEL_I7_MC_CH2_TC 0x2c33 2550#define PCI_DEVICE_ID_INTEL_I7_MC_CH2_TC 0x2c33
2551#define PCI_DEVICE_ID_INTEL_I7_NOCORE 0x2c41 2551#define PCI_DEVICE_ID_INTEL_I7_NOCORE 0x2c41
2552#define PCI_DEVICE_ID_INTEL_I7_NOCORE_ALT 0x2c40
2552#define PCI_DEVICE_ID_INTEL_82855PM_HB 0x3340 2553#define PCI_DEVICE_ID_INTEL_82855PM_HB 0x3340
2553#define PCI_DEVICE_ID_INTEL_IOAT_TBG4 0x3429 2554#define PCI_DEVICE_ID_INTEL_IOAT_TBG4 0x3429
2554#define PCI_DEVICE_ID_INTEL_IOAT_TBG5 0x342a 2555#define PCI_DEVICE_ID_INTEL_IOAT_TBG5 0x342a