diff options
author | Mauro Carvalho Chehab <mchehab@redhat.com> | 2009-07-16 23:09:10 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2010-05-10 10:44:52 -0400 |
commit | 310cbb7284fab9fc9cbb6bb893e51c414e15bba3 (patch) | |
tree | 5015d8944d58fad62693aca1676d4b88693ef630 /drivers/edac | |
parent | f237fcf2b7560be33386255042dc11167ca486d5 (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>
Diffstat (limited to 'drivers/edac')
-rw-r--r-- | drivers/edac/i7core_edac.c | 23 |
1 files changed, 20 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 | ||
229 | struct pci_id_descr pci_devs[] = { | 229 | struct 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 | ||