diff options
Diffstat (limited to 'drivers/edac/amd64_edac.c')
-rw-r--r-- | drivers/edac/amd64_edac.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/drivers/edac/amd64_edac.c b/drivers/edac/amd64_edac.c index 7ef73c919c5..8126db0c898 100644 --- a/drivers/edac/amd64_edac.c +++ b/drivers/edac/amd64_edac.c | |||
@@ -2187,7 +2187,9 @@ static int init_csrows(struct mem_ctl_info *mci) | |||
2187 | struct amd64_pvt *pvt = mci->pvt_info; | 2187 | struct amd64_pvt *pvt = mci->pvt_info; |
2188 | u64 input_addr_min, input_addr_max, sys_addr, base, mask; | 2188 | u64 input_addr_min, input_addr_max, sys_addr, base, mask; |
2189 | u32 val; | 2189 | u32 val; |
2190 | int i, empty = 1; | 2190 | int i, j, empty = 1; |
2191 | enum mem_type mtype; | ||
2192 | enum edac_type edac_mode; | ||
2191 | 2193 | ||
2192 | amd64_read_pci_cfg(pvt->F3, NBCFG, &val); | 2194 | amd64_read_pci_cfg(pvt->F3, NBCFG, &val); |
2193 | 2195 | ||
@@ -2224,7 +2226,7 @@ static int init_csrows(struct mem_ctl_info *mci) | |||
2224 | csrow->page_mask = ~mask; | 2226 | csrow->page_mask = ~mask; |
2225 | /* 8 bytes of resolution */ | 2227 | /* 8 bytes of resolution */ |
2226 | 2228 | ||
2227 | csrow->mtype = amd64_determine_memory_type(pvt, i); | 2229 | mtype = amd64_determine_memory_type(pvt, i); |
2228 | 2230 | ||
2229 | debugf1(" for MC node %d csrow %d:\n", pvt->mc_node_id, i); | 2231 | debugf1(" for MC node %d csrow %d:\n", pvt->mc_node_id, i); |
2230 | debugf1(" input_addr_min: 0x%lx input_addr_max: 0x%lx\n", | 2232 | debugf1(" input_addr_min: 0x%lx input_addr_max: 0x%lx\n", |
@@ -2241,11 +2243,15 @@ static int init_csrows(struct mem_ctl_info *mci) | |||
2241 | * determine whether CHIPKILL or JUST ECC or NO ECC is operating | 2243 | * determine whether CHIPKILL or JUST ECC or NO ECC is operating |
2242 | */ | 2244 | */ |
2243 | if (pvt->nbcfg & NBCFG_ECC_ENABLE) | 2245 | if (pvt->nbcfg & NBCFG_ECC_ENABLE) |
2244 | csrow->edac_mode = | 2246 | edac_mode = (pvt->nbcfg & NBCFG_CHIPKILL) ? |
2245 | (pvt->nbcfg & NBCFG_CHIPKILL) ? | 2247 | EDAC_S4ECD4ED : EDAC_SECDED; |
2246 | EDAC_S4ECD4ED : EDAC_SECDED; | ||
2247 | else | 2248 | else |
2248 | csrow->edac_mode = EDAC_NONE; | 2249 | edac_mode = EDAC_NONE; |
2250 | |||
2251 | for (j = 0; j < pvt->channel_count; j++) { | ||
2252 | csrow->channels[j].dimm->mtype = mtype; | ||
2253 | csrow->channels[j].dimm->edac_mode = edac_mode; | ||
2254 | } | ||
2249 | } | 2255 | } |
2250 | 2256 | ||
2251 | return empty; | 2257 | return empty; |