aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/edac/cell_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/cell_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/cell_edac.c')
-rw-r--r--drivers/edac/cell_edac.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/edac/cell_edac.c b/drivers/edac/cell_edac.c
index 94fbb127215a..09e1b5d3df70 100644
--- a/drivers/edac/cell_edac.c
+++ b/drivers/edac/cell_edac.c
@@ -128,6 +128,7 @@ static void __devinit cell_edac_init_csrows(struct mem_ctl_info *mci)
128 struct cell_edac_priv *priv = mci->pvt_info; 128 struct cell_edac_priv *priv = mci->pvt_info;
129 struct device_node *np; 129 struct device_node *np;
130 int j; 130 int j;
131 u32 nr_pages;
131 132
132 for (np = NULL; 133 for (np = NULL;
133 (np = of_find_node_by_name(np, "memory")) != NULL;) { 134 (np = of_find_node_by_name(np, "memory")) != NULL;) {
@@ -142,19 +143,20 @@ static void __devinit cell_edac_init_csrows(struct mem_ctl_info *mci)
142 if (of_node_to_nid(np) != priv->node) 143 if (of_node_to_nid(np) != priv->node)
143 continue; 144 continue;
144 csrow->first_page = r.start >> PAGE_SHIFT; 145 csrow->first_page = r.start >> PAGE_SHIFT;
145 csrow->nr_pages = resource_size(&r) >> PAGE_SHIFT; 146 nr_pages = resource_size(&r) >> PAGE_SHIFT;
146 csrow->last_page = csrow->first_page + csrow->nr_pages - 1; 147 csrow->last_page = csrow->first_page + nr_pages - 1;
147 148
148 for (j = 0; j < csrow->nr_channels; j++) { 149 for (j = 0; j < csrow->nr_channels; j++) {
149 dimm = csrow->channels[j].dimm; 150 dimm = csrow->channels[j].dimm;
150 dimm->mtype = MEM_XDR; 151 dimm->mtype = MEM_XDR;
151 dimm->edac_mode = EDAC_SECDED; 152 dimm->edac_mode = EDAC_SECDED;
153 dimm->nr_pages = nr_pages / csrow->nr_channels;
152 } 154 }
153 dev_dbg(mci->dev, 155 dev_dbg(mci->dev,
154 "Initialized on node %d, chanmask=0x%x," 156 "Initialized on node %d, chanmask=0x%x,"
155 " first_page=0x%lx, nr_pages=0x%x\n", 157 " first_page=0x%lx, nr_pages=0x%x\n",
156 priv->node, priv->chanmask, 158 priv->node, priv->chanmask,
157 csrow->first_page, csrow->nr_pages); 159 csrow->first_page, dimm->nr_pages);
158 break; 160 break;
159 } 161 }
160} 162}