ARM: imx: deconstruct mxc_rnga initialization
authorArnd Bergmann <arnd@arndb.de>
Fri, 24 Jun 2016 10:49:57 +0000 (12:49 +0200)
committerShawn Guo <shawnguo@kernel.org>
Tue, 28 Jun 2016 02:26:34 +0000 (10:26 +0800)
The rnga platform device is initialized for all imx31 machines
from its own initcall, but is never initialized anywhere else.

This moves the platform device creation into both the imx31
dt and non-dt machine init sequences, which has basically the
exact same effect as before, but makes it more obvious what
is going on, while reducing the amount of code and removing
the last user of cpu_is_mx31().

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Shawn Guo <shawnguo@kernel.org>
arch/arm/mach-imx/Kconfig
arch/arm/mach-imx/devices/Kconfig
arch/arm/mach-imx/devices/platform-mxc_rnga.c [deleted file]
arch/arm/mach-imx/imx31-dt.c
arch/arm/mach-imx/mm-imx3.c

index dd905b9602a02d53ebe86764aaf00dbbc4dbe1da..7816321d7a9969bef8f651dfb546a90c3a95afb6 100644 (file)
@@ -44,9 +44,6 @@ config MXC_USE_EPIT
          uses the same clocks as the GPT. Anyway, on some systems the GPT
          may be in use for other purposes.
 
-config ARCH_HAS_RNGA
-       bool
-
 config HAVE_IMX_ANATOP
        bool
 
@@ -90,7 +87,6 @@ config SOC_IMX27
 config SOC_IMX31
        bool
        select CPU_V6
-       select IMX_HAVE_PLATFORM_MXC_RNGA
        select MXC_AVIC
        select SMP_ON_UP if SMP
 
index 3a552989248ed309020a0c159480f8c569f71dc9..6ffe57267233c969d5116aeb6876ea126f76944e 100644 (file)
@@ -57,10 +57,6 @@ config IMX_HAVE_PLATFORM_MXC_MMC
 config IMX_HAVE_PLATFORM_MXC_NAND
        bool
 
-config IMX_HAVE_PLATFORM_MXC_RNGA
-       bool
-       select ARCH_HAS_RNGA
-
 config IMX_HAVE_PLATFORM_MXC_RTC
        bool
 
diff --git a/arch/arm/mach-imx/devices/platform-mxc_rnga.c b/arch/arm/mach-imx/devices/platform-mxc_rnga.c
deleted file mode 100644 (file)
index 851fbc8..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2010 Pengutronix
- * Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License version 2 as published by the
- * Free Software Foundation.
- */
-#include "../hardware.h"
-#include "devices-common.h"
-
-struct imx_mxc_rnga_data {
-       resource_size_t iobase;
-};
-
-#define imx_mxc_rnga_data_entry_single(soc)                            \
-       {                                                               \
-               .iobase = soc ## _RNGA_BASE_ADDR,                       \
-       }
-
-#ifdef CONFIG_SOC_IMX31
-static const struct imx_mxc_rnga_data imx31_mxc_rnga_data __initconst =
-       imx_mxc_rnga_data_entry_single(MX31);
-#endif /* ifdef CONFIG_SOC_IMX31 */
-
-static struct platform_device *__init imx_add_mxc_rnga(
-               const struct imx_mxc_rnga_data *data)
-{
-       struct resource res[] = {
-               {
-                       .start = data->iobase,
-                       .end = data->iobase + SZ_16K - 1,
-                       .flags = IORESOURCE_MEM,
-               },
-       };
-       return imx_add_platform_device("mxc_rnga", -1,
-                       res, ARRAY_SIZE(res), NULL, 0);
-}
-
-static int __init imxXX_add_mxc_rnga(void)
-{
-       struct platform_device *ret;
-
-#if defined(CONFIG_SOC_IMX31)
-       if (cpu_is_mx31())
-               ret = imx_add_mxc_rnga(&imx31_mxc_rnga_data);
-       else
-#endif /* if defined(CONFIG_SOC_IMX31) */
-               ret = ERR_PTR(-ENODEV);
-
-       return PTR_ERR_OR_ZERO(ret);
-}
-arch_initcall(imxXX_add_mxc_rnga);
index 32100222a01779ab697f27ec0f00d01e18d19ef7..62e6b4fb5370091a1c0005f6c35269f8e71adabb 100644 (file)
@@ -28,10 +28,22 @@ static void __init imx31_dt_timer_init(void)
        mx31_clocks_init_dt();
 }
 
+/* FIXME: replace with DT binding */
+static const struct resource imx31_rnga_res[] __initconst = {
+       DEFINE_RES_MEM(MX31_RNGA_BASE_ADDR, SZ_16K),
+};
+
+static void __init imx31_dt_mach_init(void)
+{
+       platform_device_register_simple("mxc_rnga", -1, imx31_rnga_res,
+                                       ARRAY_SIZE(imx31_rnga_res));
+}
+
 DT_MACHINE_START(IMX31_DT, "Freescale i.MX31 (Device Tree Support)")
        .map_io         = mx31_map_io,
        .init_early     = imx31_init_early,
        .init_irq       = mx31_init_irq,
        .init_time      = imx31_dt_timer_init,
+       .init_machine   = imx31_dt_mach_init,
        .dt_compat      = imx31_dt_board_compat,
 MACHINE_END
index 0884ca90d15a309eab1a33af6cfc68c95db82b75..3b135cd4b043ae6cb51c02f5bf87dff35440a7ce 100644 (file)
@@ -167,6 +167,10 @@ static const struct resource imx31_audmux_res[] __initconst = {
        DEFINE_RES_MEM(MX31_AUDMUX_BASE_ADDR, SZ_16K),
 };
 
+static const struct resource imx31_rnga_res[] __initconst = {
+       DEFINE_RES_MEM(MX31_RNGA_BASE_ADDR, SZ_16K),
+};
+
 void __init imx31_soc_init(void)
 {
        int to_version = mx31_revision() >> 4;
@@ -195,6 +199,8 @@ void __init imx31_soc_init(void)
 
        platform_device_register_simple("imx31-audmux", 0, imx31_audmux_res,
                                        ARRAY_SIZE(imx31_audmux_res));
+       platform_device_register_simple("mxc_rnga", -1, imx31_rnga_res,
+                                       ARRAY_SIZE(imx31_rnga_res));
 }
 #endif /* ifdef CONFIG_SOC_IMX31 */