summaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-imx/imx.c
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2012-10-09 22:36:39 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2013-06-25 11:52:05 +0200
commita4daf503059d05b5275bd12cade6bcb54e9d4e03 (patch)
tree82681fd4fe3b20f4e8ce1979338c6d614ac520f1 /arch/arm/mach-imx/imx.c
parentf887536147ac892751a18752f34764daf7267845 (diff)
downloadbarebox-a4daf503059d05b5275bd12cade6bcb54e9d4e03.tar.gz
barebox-a4daf503059d05b5275bd12cade6bcb54e9d4e03.tar.xz
ARM: i.MX: adopt cpu_is_* for multiple SoCs
This makes cpu_is_* functions when necessary for upcoming multisoc support. When only one SoC type is compiled in cpu_is_* still expand to static values. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch/arm/mach-imx/imx.c')
-rw-r--r--arch/arm/mach-imx/imx.c38
1 files changed, 37 insertions, 1 deletions
diff --git a/arch/arm/mach-imx/imx.c b/arch/arm/mach-imx/imx.c
index d6e30a8aa0..be44339f7d 100644
--- a/arch/arm/mach-imx/imx.c
+++ b/arch/arm/mach-imx/imx.c
@@ -32,9 +32,45 @@ void imx_set_silicon_revision(const char *soc, int revision)
revision & 0xf);
}
+unsigned int __imx_cpu_type;
+
+static int imx_soc_from_dt(void)
+{
+ if (of_machine_is_compatible("fsl,imx1"))
+ return IMX_CPU_IMX1;
+ if (of_machine_is_compatible("fsl,imx21"))
+ return IMX_CPU_IMX21;
+ if (of_machine_is_compatible("fsl,imx25"))
+ return IMX_CPU_IMX25;
+ if (of_machine_is_compatible("fsl,imx27"))
+ return IMX_CPU_IMX27;
+ if (of_machine_is_compatible("fsl,imx31"))
+ return IMX_CPU_IMX31;
+ if (of_machine_is_compatible("fsl,imx35"))
+ return IMX_CPU_IMX35;
+ if (of_machine_is_compatible("fsl,imx51"))
+ return IMX_CPU_IMX51;
+ if (of_machine_is_compatible("fsl,imx53"))
+ return IMX_CPU_IMX53;
+ if (of_machine_is_compatible("fsl,imx6q"))
+ return IMX_CPU_IMX6;
+ if (of_machine_is_compatible("fsl,imx6dl"))
+ return IMX_CPU_IMX6;
+
+ return 0;
+}
+
static int imx_init(void)
{
int ret;
+ struct device_node *root;
+
+ root = of_get_root_node();
+ if (root) {
+ __imx_cpu_type = imx_soc_from_dt();
+ if (!__imx_cpu_type)
+ hang();
+ }
if (cpu_is_mx1())
ret = imx1_init();
@@ -57,7 +93,7 @@ static int imx_init(void)
else
return -EINVAL;
- if (of_get_root_node())
+ if (root)
return ret;
if (cpu_is_mx1())