[POWERPC] fsl_soc: Fix get_immrbase() to use ranges, rather than reg.
authorScott Wood <scottwood@freescale.com>
Mon, 14 Jan 2008 16:29:35 +0000 (10:29 -0600)
committerKumar Gala <galak@kernel.crashing.org>
Thu, 24 Jan 2008 01:34:33 +0000 (19:34 -0600)
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>
arch/powerpc/sysdev/fsl_soc.c

index 474cb8e..f2c0988 100644 (file)
@@ -55,10 +55,18 @@ phys_addr_t get_immrbase(void)
        soc = of_find_node_by_type(NULL, "soc");
        if (soc) {
                int size;
-               const void *prop = of_get_property(soc, "reg", &size);
+               u32 naddr;
+               const u32 *prop = of_get_property(soc, "#address-cells", &size);
 
+               if (prop && size == 4)
+                       naddr = *prop;
+               else
+                       naddr = 2;
+
+               prop = of_get_property(soc, "ranges", &size);
                if (prop)
-                       immrbase = of_translate_address(soc, prop);
+                       immrbase = of_translate_address(soc, prop + naddr);
+
                of_node_put(soc);
        }