ARM: imx: Provide support for NXP i.MX7D Cortex-M4
authorOleksij Rempel <o.rempel@pengutronix.de>
Tue, 3 Jul 2018 07:12:47 +0000 (09:12 +0200)
committerShawn Guo <shawnguo@kernel.org>
Tue, 3 Jul 2018 07:17:57 +0000 (15:17 +0800)
Cortex M4 part can be started from a boot loader or over
Linux remoteproc framework.

Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
Signed-off-by: Shawn Guo <shawnguo@kernel.org>
arch/arm/mach-imx/Kconfig
arch/arm/mach-imx/Makefile
arch/arm/mach-imx/mach-imx7d-cm4.c [new file with mode: 0644]

index 6f42323..abc3371 100644 (file)
@@ -523,18 +523,6 @@ config SOC_IMX6UL
        help
          This enables support for Freescale i.MX6 UltraLite processor.
 
-config SOC_IMX7D
-       bool "i.MX7 Dual support"
-       select PINCTRL_IMX7D
-       select ARM_GIC
-       select HAVE_ARM_ARCH_TIMER
-       select HAVE_IMX_ANATOP
-       select HAVE_IMX_MMDC
-       select HAVE_IMX_SRC
-       select IMX_GPCV2
-       help
-               This enables support for Freescale i.MX7 Dual processor.
-
 config SOC_LS1021A
        bool "Freescale LS1021A support"
        select ARM_GIC
@@ -549,6 +537,27 @@ comment "Cortex-A/Cortex-M asymmetric multiprocessing platforms"
 
 if ARCH_MULTI_V7 || ARM_SINGLE_ARMV7M
 
+config SOC_IMX7D_CA7
+       bool
+       select ARM_GIC
+       select HAVE_ARM_ARCH_TIMER
+       select HAVE_IMX_ANATOP
+       select HAVE_IMX_MMDC
+       select HAVE_IMX_SRC
+       select IMX_GPCV2
+
+config SOC_IMX7D_CM4
+       bool
+       select ARMV7M_SYSTICK
+
+config SOC_IMX7D
+       bool "i.MX7 Dual support"
+       select PINCTRL_IMX7D
+       select SOC_IMX7D_CA7 if ARCH_MULTI_V7
+       select SOC_IMX7D_CM4 if ARM_SINGLE_ARMV7M
+       help
+               This enables support for Freescale i.MX7 Dual processor.
+
 config SOC_VF610
        bool "Vybrid Family VF610 support"
        select ARM_GIC if ARCH_MULTI_V7
index 127fdf3..146ebf9 100644 (file)
@@ -81,7 +81,8 @@ obj-$(CONFIG_SOC_IMX6SL) += mach-imx6sl.o
 obj-$(CONFIG_SOC_IMX6SLL) += mach-imx6sl.o
 obj-$(CONFIG_SOC_IMX6SX) += mach-imx6sx.o
 obj-$(CONFIG_SOC_IMX6UL) += mach-imx6ul.o
-obj-$(CONFIG_SOC_IMX7D) += mach-imx7d.o
+obj-$(CONFIG_SOC_IMX7D_CA7) += mach-imx7d.o
+obj-$(CONFIG_SOC_IMX7D_CM4) += mach-imx7d-cm4.o
 
 ifeq ($(CONFIG_SUSPEND),y)
 AFLAGS_suspend-imx6.o :=-Wa,-march=armv7-a
diff --git a/arch/arm/mach-imx/mach-imx7d-cm4.c b/arch/arm/mach-imx/mach-imx7d-cm4.c
new file mode 100644 (file)
index 0000000..0800b58
--- /dev/null
@@ -0,0 +1,18 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (c) 2018 Pengutronix, Oleksij Rempel <o.rempel@pengutronix.de>
+ */
+
+#include <linux/kernel.h>
+#include <asm/v7m.h>
+#include <asm/mach/arch.h>
+
+static const char * const imx7d_cm4_dt_compat[] __initconst = {
+       "fsl,imx7d-cm4",
+       NULL,
+};
+
+DT_MACHINE_START(IMX7D, "Freescale i.MX7 Dual Cortex-M4 (Device Tree)")
+       .dt_compat = imx7d_cm4_dt_compat,
+       .restart = armv7m_restart,
+MACHINE_END