aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/edac/i82975x_edac.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/edac/i82975x_edac.c')
-rw-r--r--drivers/edac/i82975x_edac.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/edac/i82975x_edac.c b/drivers/edac/i82975x_edac.c
index b8ec8719e2f5..014a9483fccc 100644
--- a/drivers/edac/i82975x_edac.c
+++ b/drivers/edac/i82975x_edac.c
@@ -370,7 +370,7 @@ static void i82975x_init_csrows(struct mem_ctl_info *mci,
370 struct csrow_info *csrow; 370 struct csrow_info *csrow;
371 unsigned long last_cumul_size; 371 unsigned long last_cumul_size;
372 u8 value; 372 u8 value;
373 u32 cumul_size; 373 u32 cumul_size, nr_pages;
374 int index, chan; 374 int index, chan;
375 struct dimm_info *dimm; 375 struct dimm_info *dimm;
376 enum dev_type dtype; 376 enum dev_type dtype;
@@ -402,6 +402,7 @@ static void i82975x_init_csrows(struct mem_ctl_info *mci,
402 debugf3("%s(): (%d) cumul_size 0x%x\n", __func__, index, 402 debugf3("%s(): (%d) cumul_size 0x%x\n", __func__, index,
403 cumul_size); 403 cumul_size);
404 404
405 nr_pages = cumul_size - last_cumul_size;
405 /* 406 /*
406 * Initialise dram labels 407 * Initialise dram labels
407 * index values: 408 * index values:
@@ -411,6 +412,11 @@ static void i82975x_init_csrows(struct mem_ctl_info *mci,
411 dtype = i82975x_dram_type(mch_window, index); 412 dtype = i82975x_dram_type(mch_window, index);
412 for (chan = 0; chan < csrow->nr_channels; chan++) { 413 for (chan = 0; chan < csrow->nr_channels; chan++) {
413 dimm = mci->csrows[index].channels[chan].dimm; 414 dimm = mci->csrows[index].channels[chan].dimm;
415
416 if (!nr_pages)
417 continue;
418
419 dimm->nr_pages = nr_pages / csrow->nr_channels;
414 strncpy(csrow->channels[chan].dimm->label, 420 strncpy(csrow->channels[chan].dimm->label,
415 labels[(index >> 1) + (chan * 2)], 421 labels[(index >> 1) + (chan * 2)],
416 EDAC_MC_LABEL_LEN); 422 EDAC_MC_LABEL_LEN);
@@ -420,12 +426,11 @@ static void i82975x_init_csrows(struct mem_ctl_info *mci,
420 dimm->edac_mode = EDAC_SECDED; /* only supported */ 426 dimm->edac_mode = EDAC_SECDED; /* only supported */
421 } 427 }
422 428
423 if (cumul_size == last_cumul_size) 429 if (!nr_pages)
424 continue; /* not populated */ 430 continue; /* not populated */
425 431
426 csrow->first_page = last_cumul_size; 432 csrow->first_page = last_cumul_size;
427 csrow->last_page = cumul_size - 1; 433 csrow->last_page = cumul_size - 1;
428 csrow->nr_pages = cumul_size - last_cumul_size;
429 last_cumul_size = cumul_size; 434 last_cumul_size = cumul_size;
430 } 435 }
431} 436}