diff options
author | Chris Packham <chris.packham@alliedtelesis.co.nz> | 2017-06-06 19:54:59 -0400 |
---|---|---|
committer | Borislav Petkov <bp@suse.de> | 2017-06-14 07:49:25 -0400 |
commit | ff0abed4922ffbd40dc4e5a78b8ea56a5eb68ec7 (patch) | |
tree | 1a97df13f1d384c0660cf115dcc53bb49bf0019e | |
parent | 133e4455c9b49071906775319e2e6d083a4f024d (diff) |
EDAC, altera: Simplify calculation of total memory
Use of_address_to_resource() and resource_size() instead of manually
parsing the "reg" property from the "memory" node(s).
Signed-off-by: Chris Packham <chris.packham@alliedtelesis.co.nz>
Tested-by: Thor Thayer <thor.thayer@linux.intel.com>
Cc: linux-edac <linux-edac@vger.kernel.org>
Link: http://lkml.kernel.org/r/20170606235500.22772-3-chris.packham@alliedtelesis.co.nz
Signed-off-by: Borislav Petkov <bp@suse.de>
-rw-r--r-- | drivers/edac/altera_edac.c | 24 |
1 files changed, 8 insertions, 16 deletions
diff --git a/drivers/edac/altera_edac.c b/drivers/edac/altera_edac.c index 122637530b15..db75d4b614f7 100644 --- a/drivers/edac/altera_edac.c +++ b/drivers/edac/altera_edac.c | |||
@@ -214,24 +214,16 @@ static void altr_sdr_mc_create_debugfs_nodes(struct mem_ctl_info *mci) | |||
214 | static unsigned long get_total_mem(void) | 214 | static unsigned long get_total_mem(void) |
215 | { | 215 | { |
216 | struct device_node *np = NULL; | 216 | struct device_node *np = NULL; |
217 | const unsigned int *reg, *reg_end; | 217 | struct resource res; |
218 | int len, sw, aw; | 218 | int ret; |
219 | unsigned long start, size, total_mem = 0; | 219 | unsigned long total_mem = 0; |
220 | 220 | ||
221 | for_each_node_by_type(np, "memory") { | 221 | for_each_node_by_type(np, "memory") { |
222 | aw = of_n_addr_cells(np); | 222 | ret = of_address_to_resource(np, 0, &res); |
223 | sw = of_n_size_cells(np); | 223 | if (ret) |
224 | reg = (const unsigned int *)of_get_property(np, "reg", &len); | 224 | continue; |
225 | reg_end = reg + (len / sizeof(u32)); | 225 | |
226 | 226 | total_mem += resource_size(&res); | |
227 | total_mem = 0; | ||
228 | do { | ||
229 | start = of_read_number(reg, aw); | ||
230 | reg += aw; | ||
231 | size = of_read_number(reg, sw); | ||
232 | reg += sw; | ||
233 | total_mem += size; | ||
234 | } while (reg < reg_end); | ||
235 | } | 227 | } |
236 | edac_dbg(0, "total_mem 0x%lx\n", total_mem); | 228 | edac_dbg(0, "total_mem 0x%lx\n", total_mem); |
237 | return total_mem; | 229 | return total_mem; |