diff options
Diffstat (limited to 'drivers/edac/i82975x_edac.c')
-rw-r--r-- | drivers/edac/i82975x_edac.c | 11 |
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 | } |