diff options
author | Dan Carpenter <dan.carpenter@oracle.com> | 2012-06-27 05:07:58 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2012-06-27 08:08:40 -0400 |
commit | f58d0dee07fe6328f775669eb6aa3a123efad6c2 (patch) | |
tree | 1d330e6db0495cbe033d761feb3686a7de790dea /drivers/edac/i5400_edac.c | |
parent | 38ced28b21efff18fd5e5c98a92830e8f0031cee (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/i5400_edac.c')
-rw-r--r-- | drivers/edac/i5400_edac.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/drivers/edac/i5400_edac.c b/drivers/edac/i5400_edac.c index 50069c62c8d4..277246998b80 100644 --- a/drivers/edac/i5400_edac.c +++ b/drivers/edac/i5400_edac.c | |||
@@ -327,7 +327,13 @@ struct i5400_pvt { | |||
327 | struct pci_dev *branch_1; /* 22.0 */ | 327 | struct pci_dev *branch_1; /* 22.0 */ |
328 | 328 | ||
329 | u16 tolm; /* top of low memory */ | 329 | u16 tolm; /* top of low memory */ |
330 | u64 ambase; /* AMB BAR */ | 330 | union { |
331 | u64 ambase; /* AMB BAR */ | ||
332 | struct { | ||
333 | u32 ambase_bottom; | ||
334 | u32 ambase_top; | ||
335 | } u __packed; | ||
336 | }; | ||
331 | 337 | ||
332 | u16 mir0, mir1; | 338 | u16 mir0, mir1; |
333 | 339 | ||
@@ -1055,9 +1061,9 @@ static void i5400_get_mc_regs(struct mem_ctl_info *mci) | |||
1055 | pvt = mci->pvt_info; | 1061 | pvt = mci->pvt_info; |
1056 | 1062 | ||
1057 | pci_read_config_dword(pvt->system_address, AMBASE, | 1063 | pci_read_config_dword(pvt->system_address, AMBASE, |
1058 | (u32 *) &pvt->ambase); | 1064 | &pvt->u.ambase_bottom); |
1059 | pci_read_config_dword(pvt->system_address, AMBASE + sizeof(u32), | 1065 | pci_read_config_dword(pvt->system_address, AMBASE + sizeof(u32), |
1060 | ((u32 *) &pvt->ambase) + sizeof(u32)); | 1066 | &pvt->u.ambase_top); |
1061 | 1067 | ||
1062 | maxdimmperch = pvt->maxdimmperch; | 1068 | maxdimmperch = pvt->maxdimmperch; |
1063 | maxch = pvt->maxch; | 1069 | maxch = pvt->maxch; |