aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/sysdev
diff options
context:
space:
mode:
authorScott Wood <scottwood@freescale.com>2008-01-14 11:29:35 -0500
committerKumar Gala <galak@kernel.crashing.org>2008-01-23 20:34:33 -0500
commit6c7e072b1682eeb7c17ed5fdec0672fcf3ccb205 (patch)
tree1a7175d20473fb8d7b861267589315e28337d8e2 /arch/powerpc/sysdev
parentc7d24a2dd02b9fe736e13931ee3e4a1f4f89cb47 (diff)
[POWERPC] fsl_soc: Fix get_immrbase() to use ranges, rather than reg.
Don't depend on the reg property as a way to determine the base of the immr space. The reg property might be defined differently for different SoC families. Signed-off-by: Scott Wood <scottwood@freescale.com> Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/sysdev')
-rw-r--r--arch/powerpc/sysdev/fsl_soc.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/arch/powerpc/sysdev/fsl_soc.c b/arch/powerpc/sysdev/fsl_soc.c
index 474cb8e22f64..f2c0988a03b8 100644
--- a/arch/powerpc/sysdev/fsl_soc.c
+++ b/arch/powerpc/sysdev/fsl_soc.c
@@ -55,10 +55,18 @@ phys_addr_t get_immrbase(void)
55 soc = of_find_node_by_type(NULL, "soc"); 55 soc = of_find_node_by_type(NULL, "soc");
56 if (soc) { 56 if (soc) {
57 int size; 57 int size;
58 const void *prop = of_get_property(soc, "reg", &size); 58 u32 naddr;
59 const u32 *prop = of_get_property(soc, "#address-cells", &size);
59 60
61 if (prop && size == 4)
62 naddr = *prop;
63 else
64 naddr = 2;
65
66 prop = of_get_property(soc, "ranges", &size);
60 if (prop) 67 if (prop)
61 immrbase = of_translate_address(soc, prop); 68 immrbase = of_translate_address(soc, prop + naddr);
69
62 of_node_put(soc); 70 of_node_put(soc);
63 } 71 }
64 72