diff options
| author | Jim Snow <jim.m.snow@intel.com> | 2014-11-18 08:51:09 -0500 |
|---|---|---|
| committer | Mauro Carvalho Chehab <mchehab@osg.samsung.com> | 2014-12-02 09:06:51 -0500 |
| commit | 8c009100295597f23978c224aec5751a365bc965 (patch) | |
| tree | c33035d5c67f363309420158722c2b17a7e41c13 /drivers/edac | |
| parent | 50043e257cedb54af8e1545de38f1289d0a52bc4 (diff) | |
sb_edac: Fix erroneous bytes->gigabytes conversion
Signed-off-by: Jim Snow <jim.snow@intel.com>
Signed-off-by: Lukasz Anaczkowski <lukasz.anaczkowski@intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Diffstat (limited to 'drivers/edac')
| -rw-r--r-- | drivers/edac/sb_edac.c | 38 |
1 files changed, 20 insertions, 18 deletions
diff --git a/drivers/edac/sb_edac.c b/drivers/edac/sb_edac.c index e9bb1af67c8d..f37d01f3bb17 100644 --- a/drivers/edac/sb_edac.c +++ b/drivers/edac/sb_edac.c | |||
| @@ -909,7 +909,7 @@ static void get_memory_layout(const struct mem_ctl_info *mci) | |||
| 909 | u32 reg; | 909 | u32 reg; |
| 910 | u64 limit, prv = 0; | 910 | u64 limit, prv = 0; |
| 911 | u64 tmp_mb; | 911 | u64 tmp_mb; |
| 912 | u32 mb, kb; | 912 | u32 gb, mb; |
| 913 | u32 rir_way; | 913 | u32 rir_way; |
| 914 | 914 | ||
| 915 | /* | 915 | /* |
| @@ -919,15 +919,17 @@ static void get_memory_layout(const struct mem_ctl_info *mci) | |||
| 919 | pvt->tolm = pvt->info.get_tolm(pvt); | 919 | pvt->tolm = pvt->info.get_tolm(pvt); |
| 920 | tmp_mb = (1 + pvt->tolm) >> 20; | 920 | tmp_mb = (1 + pvt->tolm) >> 20; |
| 921 | 921 | ||
| 922 | mb = div_u64_rem(tmp_mb, 1000, &kb); | 922 | gb = div_u64_rem(tmp_mb, 1024, &mb); |
| 923 | edac_dbg(0, "TOLM: %u.%03u GB (0x%016Lx)\n", mb, kb, (u64)pvt->tolm); | 923 | edac_dbg(0, "TOLM: %u.%03u GB (0x%016Lx)\n", |
| 924 | gb, (mb*1000)/1024, (u64)pvt->tolm); | ||
| 924 | 925 | ||
| 925 | /* Address range is already 45:25 */ | 926 | /* Address range is already 45:25 */ |
| 926 | pvt->tohm = pvt->info.get_tohm(pvt); | 927 | pvt->tohm = pvt->info.get_tohm(pvt); |
| 927 | tmp_mb = (1 + pvt->tohm) >> 20; | 928 | tmp_mb = (1 + pvt->tohm) >> 20; |
| 928 | 929 | ||
| 929 | mb = div_u64_rem(tmp_mb, 1000, &kb); | 930 | gb = div_u64_rem(tmp_mb, 1024, &mb); |
| 930 | edac_dbg(0, "TOHM: %u.%03u GB (0x%016Lx)\n", mb, kb, (u64)pvt->tohm); | 931 | edac_dbg(0, "TOHM: %u.%03u GB (0x%016Lx)\n", |
| 932 | gb, (mb*1000)/1024, (u64)pvt->tohm); | ||
| 931 | 933 | ||
| 932 | /* | 934 | /* |
| 933 | * Step 2) Get SAD range and SAD Interleave list | 935 | * Step 2) Get SAD range and SAD Interleave list |
| @@ -949,11 +951,11 @@ static void get_memory_layout(const struct mem_ctl_info *mci) | |||
| 949 | break; | 951 | break; |
| 950 | 952 | ||
| 951 | tmp_mb = (limit + 1) >> 20; | 953 | tmp_mb = (limit + 1) >> 20; |
| 952 | mb = div_u64_rem(tmp_mb, 1000, &kb); | 954 | gb = div_u64_rem(tmp_mb, 1024, &mb); |
| 953 | edac_dbg(0, "SAD#%d %s up to %u.%03u GB (0x%016Lx) Interleave: %s reg=0x%08x\n", | 955 | edac_dbg(0, "SAD#%d %s up to %u.%03u GB (0x%016Lx) Interleave: %s reg=0x%08x\n", |
| 954 | n_sads, | 956 | n_sads, |
| 955 | get_dram_attr(reg), | 957 | get_dram_attr(reg), |
| 956 | mb, kb, | 958 | gb, (mb*1000)/1024, |
| 957 | ((u64)tmp_mb) << 20L, | 959 | ((u64)tmp_mb) << 20L, |
| 958 | INTERLEAVE_MODE(reg) ? "8:6" : "[8:6]XOR[18:16]", | 960 | INTERLEAVE_MODE(reg) ? "8:6" : "[8:6]XOR[18:16]", |
| 959 | reg); | 961 | reg); |
| @@ -984,9 +986,9 @@ static void get_memory_layout(const struct mem_ctl_info *mci) | |||
| 984 | break; | 986 | break; |
| 985 | tmp_mb = (limit + 1) >> 20; | 987 | tmp_mb = (limit + 1) >> 20; |
| 986 | 988 | ||
| 987 | mb = div_u64_rem(tmp_mb, 1000, &kb); | 989 | gb = div_u64_rem(tmp_mb, 1024, &mb); |
| 988 | edac_dbg(0, "TAD#%d: up to %u.%03u GB (0x%016Lx), socket interleave %d, memory interleave %d, TGT: %d, %d, %d, %d, reg=0x%08x\n", | 990 | edac_dbg(0, "TAD#%d: up to %u.%03u GB (0x%016Lx), socket interleave %d, memory interleave %d, TGT: %d, %d, %d, %d, reg=0x%08x\n", |
| 989 | n_tads, mb, kb, | 991 | n_tads, gb, (mb*1000)/1024, |
| 990 | ((u64)tmp_mb) << 20L, | 992 | ((u64)tmp_mb) << 20L, |
| 991 | (u32)TAD_SOCK(reg), | 993 | (u32)TAD_SOCK(reg), |
| 992 | (u32)TAD_CH(reg), | 994 | (u32)TAD_CH(reg), |
| @@ -1009,10 +1011,10 @@ static void get_memory_layout(const struct mem_ctl_info *mci) | |||
| 1009 | tad_ch_nilv_offset[j], | 1011 | tad_ch_nilv_offset[j], |
| 1010 | ®); | 1012 | ®); |
| 1011 | tmp_mb = TAD_OFFSET(reg) >> 20; | 1013 | tmp_mb = TAD_OFFSET(reg) >> 20; |
| 1012 | mb = div_u64_rem(tmp_mb, 1000, &kb); | 1014 | gb = div_u64_rem(tmp_mb, 1024, &mb); |
| 1013 | edac_dbg(0, "TAD CH#%d, offset #%d: %u.%03u GB (0x%016Lx), reg=0x%08x\n", | 1015 | edac_dbg(0, "TAD CH#%d, offset #%d: %u.%03u GB (0x%016Lx), reg=0x%08x\n", |
| 1014 | i, j, | 1016 | i, j, |
| 1015 | mb, kb, | 1017 | gb, (mb*1000)/1024, |
| 1016 | ((u64)tmp_mb) << 20L, | 1018 | ((u64)tmp_mb) << 20L, |
| 1017 | reg); | 1019 | reg); |
| 1018 | } | 1020 | } |
| @@ -1034,10 +1036,10 @@ static void get_memory_layout(const struct mem_ctl_info *mci) | |||
| 1034 | 1036 | ||
| 1035 | tmp_mb = pvt->info.rir_limit(reg) >> 20; | 1037 | tmp_mb = pvt->info.rir_limit(reg) >> 20; |
| 1036 | rir_way = 1 << RIR_WAY(reg); | 1038 | rir_way = 1 << RIR_WAY(reg); |
| 1037 | mb = div_u64_rem(tmp_mb, 1000, &kb); | 1039 | gb = div_u64_rem(tmp_mb, 1024, &mb); |
| 1038 | edac_dbg(0, "CH#%d RIR#%d, limit: %u.%03u GB (0x%016Lx), way: %d, reg=0x%08x\n", | 1040 | edac_dbg(0, "CH#%d RIR#%d, limit: %u.%03u GB (0x%016Lx), way: %d, reg=0x%08x\n", |
| 1039 | i, j, | 1041 | i, j, |
| 1040 | mb, kb, | 1042 | gb, (mb*1000)/1024, |
| 1041 | ((u64)tmp_mb) << 20L, | 1043 | ((u64)tmp_mb) << 20L, |
| 1042 | rir_way, | 1044 | rir_way, |
| 1043 | reg); | 1045 | reg); |
| @@ -1048,10 +1050,10 @@ static void get_memory_layout(const struct mem_ctl_info *mci) | |||
| 1048 | ®); | 1050 | ®); |
| 1049 | tmp_mb = RIR_OFFSET(reg) << 6; | 1051 | tmp_mb = RIR_OFFSET(reg) << 6; |
| 1050 | 1052 | ||
| 1051 | mb = div_u64_rem(tmp_mb, 1000, &kb); | 1053 | gb = div_u64_rem(tmp_mb, 1024, &mb); |
| 1052 | edac_dbg(0, "CH#%d RIR#%d INTL#%d, offset %u.%03u GB (0x%016Lx), tgt: %d, reg=0x%08x\n", | 1054 | edac_dbg(0, "CH#%d RIR#%d INTL#%d, offset %u.%03u GB (0x%016Lx), tgt: %d, reg=0x%08x\n", |
| 1053 | i, j, k, | 1055 | i, j, k, |
| 1054 | mb, kb, | 1056 | gb, (mb*1000)/1024, |
| 1055 | ((u64)tmp_mb) << 20L, | 1057 | ((u64)tmp_mb) << 20L, |
| 1056 | (u32)RIR_RNK_TGT(reg), | 1058 | (u32)RIR_RNK_TGT(reg), |
| 1057 | reg); | 1059 | reg); |
| @@ -1089,7 +1091,7 @@ static int get_memory_error_data(struct mem_ctl_info *mci, | |||
| 1089 | u8 ch_way, sck_way, pkg, sad_ha = 0; | 1091 | u8 ch_way, sck_way, pkg, sad_ha = 0; |
| 1090 | u32 tad_offset; | 1092 | u32 tad_offset; |
| 1091 | u32 rir_way; | 1093 | u32 rir_way; |
| 1092 | u32 mb, kb; | 1094 | u32 mb, gb; |
| 1093 | u64 ch_addr, offset, limit = 0, prv = 0; | 1095 | u64 ch_addr, offset, limit = 0, prv = 0; |
| 1094 | 1096 | ||
| 1095 | 1097 | ||
| @@ -1358,10 +1360,10 @@ static int get_memory_error_data(struct mem_ctl_info *mci, | |||
| 1358 | continue; | 1360 | continue; |
| 1359 | 1361 | ||
| 1360 | limit = pvt->info.rir_limit(reg); | 1362 | limit = pvt->info.rir_limit(reg); |
| 1361 | mb = div_u64_rem(limit >> 20, 1000, &kb); | 1363 | gb = div_u64_rem(limit >> 20, 1024, &mb); |
| 1362 | edac_dbg(0, "RIR#%d, limit: %u.%03u GB (0x%016Lx), way: %d\n", | 1364 | edac_dbg(0, "RIR#%d, limit: %u.%03u GB (0x%016Lx), way: %d\n", |
| 1363 | n_rir, | 1365 | n_rir, |
| 1364 | mb, kb, | 1366 | gb, (mb*1000)/1024, |
| 1365 | limit, | 1367 | limit, |
| 1366 | 1 << RIR_WAY(reg)); | 1368 | 1 << RIR_WAY(reg)); |
| 1367 | if (ch_addr <= limit) | 1369 | if (ch_addr <= limit) |
