aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/edac/i5000_edac.c
diff options
context:
space:
mode:
authorDan Carpenter <dan.carpenter@oracle.com>2012-06-27 05:07:58 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2012-06-27 08:08:40 -0400
commitf58d0dee07fe6328f775669eb6aa3a123efad6c2 (patch)
tree1d330e6db0495cbe033d761feb3686a7de790dea /drivers/edac/i5000_edac.c
parent38ced28b21efff18fd5e5c98a92830e8f0031cee (diff)
edac i5000, i5400: fix pointer math in i5000_get_mc_regs()
"pvt->ambase" is a u64 datatype. The intent here is to fill the first half in the first call to pci_read_config_dword() and the other half in the second. Unfortunately the pointer math is wrong so we set the wrong data. Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/edac/i5000_edac.c')
-rw-r--r--drivers/edac/i5000_edac.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/drivers/edac/i5000_edac.c b/drivers/edac/i5000_edac.c
index a5c33df520ac..39c63757c2a1 100644
--- a/drivers/edac/i5000_edac.c
+++ b/drivers/edac/i5000_edac.c
@@ -328,7 +328,13 @@ struct i5000_pvt {
328 struct pci_dev *branch_1; /* 22.0 */ 328 struct pci_dev *branch_1; /* 22.0 */
329 329
330 u16 tolm; /* top of low memory */ 330 u16 tolm; /* top of low memory */
331 u64 ambase; /* AMB BAR */ 331 union {
332 u64 ambase; /* AMB BAR */
333 struct {
334 u32 ambase_bottom;
335 u32 ambase_top;
336 } u __packed;
337 };
332 338
333 u16 mir0, mir1, mir2; 339 u16 mir0, mir1, mir2;
334 340
@@ -1131,9 +1137,9 @@ static void i5000_get_mc_regs(struct mem_ctl_info *mci)
1131 pvt = mci->pvt_info; 1137 pvt = mci->pvt_info;
1132 1138
1133 pci_read_config_dword(pvt->system_address, AMBASE, 1139 pci_read_config_dword(pvt->system_address, AMBASE,
1134 (u32 *) & pvt->ambase); 1140 &pvt->u.ambase_bottom);
1135 pci_read_config_dword(pvt->system_address, AMBASE + sizeof(u32), 1141 pci_read_config_dword(pvt->system_address, AMBASE + sizeof(u32),
1136 ((u32 *) & pvt->ambase) + sizeof(u32)); 1142 &pvt->u.ambase_top);
1137 1143
1138 maxdimmperch = pvt->maxdimmperch; 1144 maxdimmperch = pvt->maxdimmperch;
1139 maxch = pvt->maxch; 1145 maxch = pvt->maxch;