aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/edac/i82975x_edac.c
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@redhat.com>2012-01-28 07:09:38 -0500
committerMauro Carvalho Chehab <mchehab@redhat.com>2012-05-28 18:10:58 -0400
commita895bf8b1e1ea4c032a8fa8a09475a2ce09fe77a (patch)
tree79a1110d0f4a6f2d50d870fa77d11a5311fee4fc /drivers/edac/i82975x_edac.c
parent5e2af0c09e60d11dd8297e259a9ca2b3d92d2cf4 (diff)
edac: move nr_pages to dimm struct
The number of pages is a dimm property. Move it to the dimm struct. After this change, it is possible to add sysfs nodes for the DIMM's that will properly represent the DIMM stick properties, including its size. A TODO fix here is to properly represent dual-rank/quad-rank DIMMs when the memory controller represents the memory via chip select rows. Reviewed-by: Aristeu Rozanski <arozansk@redhat.com> Acked-by: Borislav Petkov <borislav.petkov@amd.com> Acked-by: Chris Metcalf <cmetcalf@tilera.com> Cc: Doug Thompson <norsk5@yahoo.com> Cc: Mark Gross <mark.gross@intel.com> Cc: Jason Uhlenkott <juhlenko@akamai.com> Cc: Tim Small <tim@buttersideup.com> Cc: Ranganathan Desikan <ravi@jetztechnologies.com> Cc: "Arvind R." <arvino55@gmail.com> Cc: Olof Johansson <olof@lixom.net> Cc: Egor Martovetsky <egor@pasemi.com> Cc: Michal Marek <mmarek@suse.cz> Cc: Jiri Kosina <jkosina@suse.cz> Cc: Joe Perches <joe@perches.com> Cc: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Hitoshi Mitake <h.mitake@gmail.com> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: "Niklas Söderlund" <niklas.soderlund@ericsson.com> Cc: Shaohui Xie <Shaohui.Xie@freescale.com> Cc: Josh Boyer <jwboyer@gmail.com> Cc: linuxppc-dev@lists.ozlabs.org Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
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}