ARM: imx6: Warn when an old DT is detected
authorMarc Zyngier <marc.zyngier@arm.com>
Fri, 13 Mar 2015 16:05:37 +0000 (16:05 +0000)
committerShawn Guo <shawn.guo@linaro.org>
Mon, 30 Mar 2015 08:43:51 +0000 (16:43 +0800)
Now that the GPC has been converted to be a full blown irqchip
(and not a mole on the side of the GIC), booting a new kernel
with an old DT is likely to result in a rough ride for the user.

This patch makes sure such a situation is promptly detected and
the user made aware that a DT update is in order.

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Acked-by: Jason Cooper <jason@lakedaemon.net>
Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
arch/arm/mach-imx/common.h
arch/arm/mach-imx/gpc.c
arch/arm/mach-imx/mach-imx6q.c
arch/arm/mach-imx/mach-imx6sl.c
arch/arm/mach-imx/mach-imx6sx.c

index 2fbdc283bc996625c0876004461e4b2c65a404a0..0f04e30b726d22e43ad725427bf2731295a705e7 100644 (file)
@@ -66,6 +66,7 @@ unsigned int imx_get_soc_revision(void);
 void imx_init_revision_from_anatop(void);
 struct device *imx_soc_device_init(void);
 void imx6_enable_rbc(bool enable);
+void imx_gpc_check_dt(void);
 void imx_gpc_set_arm_power_in_lpm(bool power_off);
 void imx_gpc_set_arm_power_up_timing(u32 sw2iso, u32 sw);
 void imx_gpc_set_arm_power_down_timing(u32 sw2iso, u32 sw);
index 5d32e35fbe4747d7e657a2975b8e12c37dd2b03f..4d60005e9277ce8f33307f411dd5c0baa8a6ac7a 100644 (file)
@@ -275,6 +275,16 @@ static int __init imx_gpc_init(struct device_node *node,
  */
 OF_DECLARE_2(irqchip, imx_gpc, "fsl,imx6q-gpc", imx_gpc_init);
 
+void __init imx_gpc_check_dt(void)
+{
+       struct device_node *np;
+
+       np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-gpc");
+       if (WARN_ON(!np ||
+                   !of_find_property(np, "interrupt-controller", NULL)))
+               pr_warn("Outdated DT detected, system is about to crash!!!\n");
+}
+
 #ifdef CONFIG_PM_GENERIC_DOMAINS
 
 static void _imx6q_pm_pu_power_off(struct generic_pm_domain *genpd)
index 6fc2b7e89c6b20de7e430b9b5c8c0479760db442..e21a693fc984960a67adcd4d9ba4b2da060f4ee7 100644 (file)
@@ -387,6 +387,7 @@ static void __init imx6q_map_io(void)
 
 static void __init imx6q_init_irq(void)
 {
+       imx_gpc_check_dt();
        imx_init_revision_from_anatop();
        imx_init_l2cache();
        imx_src_init();
index d39c274910c5c23afc03b99479d7c4b64c94440d..12a1b098fc6a98bd80de68161b94ae6377f04e37 100644 (file)
@@ -61,6 +61,7 @@ static void __init imx6sl_init_machine(void)
 
 static void __init imx6sl_init_irq(void)
 {
+       imx_gpc_check_dt();
        imx_init_revision_from_anatop();
        imx_init_l2cache();
        imx_src_init();
index 8595f9ea30a0e2b0ceed1d820f897dd40b0b14d6..f17b7004c24ba809caf27186c56cded060682586 100644 (file)
@@ -81,6 +81,7 @@ static void __init imx6sx_init_machine(void)
 
 static void __init imx6sx_init_irq(void)
 {
+       imx_gpc_check_dt();
        imx_init_revision_from_anatop();
        imx_init_l2cache();
        imx_src_init();