aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJim Snow <jim.m.snow@intel.com>2014-11-18 08:51:09 -0500
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>2014-12-02 09:06:51 -0500
commit8c009100295597f23978c224aec5751a365bc965 (patch)
treec33035d5c67f363309420158722c2b17a7e41c13
parent50043e257cedb54af8e1545de38f1289d0a52bc4 (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.c38
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 &reg); 1012 &reg);
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 &reg); 1050 &reg);
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)