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 | |
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>
-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) |