Merge tag 'imx-soc-4.21' of git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo...
authorOlof Johansson <olof@lixom.net>
Wed, 12 Dec 2018 21:52:48 +0000 (13:52 -0800)
committerOlof Johansson <olof@lixom.net>
Wed, 12 Dec 2018 21:52:48 +0000 (13:52 -0800)
i.MX SoC changes for 4.21:
 - An improvement on i.MX debugging options that only defines
   DEBUG_IMX_UART_PORT if needed, so that the option will not be present
   in the kernel config when DEBUG_LL is disabled.
 - Adds the necessary platform support for i.MX7ULP SoC and configures
   power mode to Partial Stop mode 3 with system/bus clock enabled.
   Otherwise the default STOP mode will gate off system/bus clock when
   WFI gets executed on i.MX7ULP.
 - A fix from Arnd on SOC_IMX7ULP option dependency.

* tag 'imx-soc-4.21' of git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux:
  ARM: imx: fix dependencies on imx7ulp
  ARM: imx: add initial support for imx7ulp
  ARM: debug-imx: only define DEBUG_IMX_UART_PORT if needed

Signed-off-by: Olof Johansson <olof@lixom.net>
arch/arm/Kconfig.debug
arch/arm/mach-imx/Kconfig
arch/arm/mach-imx/Makefile
arch/arm/mach-imx/common.h
arch/arm/mach-imx/cpu.c
arch/arm/mach-imx/mach-imx7ulp.c [new file with mode: 0644]
arch/arm/mach-imx/mxc.h
arch/arm/mach-imx/pm-imx7ulp.c [new file with mode: 0644]

index e2afacba6bc2f78870017c6687d8fe8a0b7aca8f..6d6e0330930b52f7369a46536473fa7174fad2d9 100644 (file)
@@ -1469,21 +1469,21 @@ config DEBUG_OMAP2PLUS_UART
        depends on ARCH_OMAP2PLUS
 
 config DEBUG_IMX_UART_PORT
-       int "i.MX Debug UART Port Selection" if DEBUG_IMX1_UART || \
-                                               DEBUG_IMX25_UART || \
-                                               DEBUG_IMX21_IMX27_UART || \
-                                               DEBUG_IMX31_UART || \
-                                               DEBUG_IMX35_UART || \
-                                               DEBUG_IMX50_UART || \
-                                               DEBUG_IMX51_UART || \
-                                               DEBUG_IMX53_UART || \
-                                               DEBUG_IMX6Q_UART || \
-                                               DEBUG_IMX6SL_UART || \
-                                               DEBUG_IMX6SX_UART || \
-                                               DEBUG_IMX6UL_UART || \
-                                               DEBUG_IMX7D_UART
+       int "i.MX Debug UART Port Selection"
+       depends on DEBUG_IMX1_UART || \
+                  DEBUG_IMX25_UART || \
+                  DEBUG_IMX21_IMX27_UART || \
+                  DEBUG_IMX31_UART || \
+                  DEBUG_IMX35_UART || \
+                  DEBUG_IMX50_UART || \
+                  DEBUG_IMX51_UART || \
+                  DEBUG_IMX53_UART || \
+                  DEBUG_IMX6Q_UART || \
+                  DEBUG_IMX6SL_UART || \
+                  DEBUG_IMX6SX_UART || \
+                  DEBUG_IMX6UL_UART || \
+                  DEBUG_IMX7D_UART
        default 1
-       depends on ARCH_MXC
        help
          Choose UART port on which kernel low-level debug messages
          should be output.
index abc337111eff2e59c63dd898313b45092ba53a7f..9b8d4d6aa76362a3ddb91749cb4af559b887529b 100644 (file)
@@ -558,6 +558,15 @@ config SOC_IMX7D
        help
                This enables support for Freescale i.MX7 Dual processor.
 
+config SOC_IMX7ULP
+       bool "i.MX7ULP support"
+       select CLKSRC_IMX_TPM
+       select PINCTRL_IMX7ULP
+       select SOC_IMX7D_CA7 if ARCH_MULTI_V7
+       select SOC_IMX7D_CM4 if ARM_SINGLE_ARMV7M
+       help
+         This enables support for Freescale i.MX7 Ultra Low Power processor.
+
 config SOC_VF610
        bool "Vybrid Family VF610 support"
        select ARM_GIC if ARCH_MULTI_V7
index bae179af21f6dc211ea656264d6aa10192de84f6..8af2f7e91d13c667806d16a021ac10866078e4f9 100644 (file)
@@ -83,6 +83,7 @@ obj-$(CONFIG_SOC_IMX6SX) += mach-imx6sx.o
 obj-$(CONFIG_SOC_IMX6UL) += mach-imx6ul.o
 obj-$(CONFIG_SOC_IMX7D_CA7) += mach-imx7d.o
 obj-$(CONFIG_SOC_IMX7D_CM4) += mach-imx7d-cm4.o
+obj-$(CONFIG_SOC_IMX7ULP) += mach-imx7ulp.o pm-imx7ulp.o
 
 ifeq ($(CONFIG_SUSPEND),y)
 AFLAGS_suspend-imx6.o :=-Wa,-march=armv7-a
index 423dd76bb6b812e408f106e2367386820b13a8a4..bc915e5b4d56d8e8ed69c941081c226c3530185f 100644 (file)
@@ -120,6 +120,7 @@ void imx6dl_pm_init(void);
 void imx6sl_pm_init(void);
 void imx6sx_pm_init(void);
 void imx6ul_pm_init(void);
+void imx7ulp_pm_init(void);
 
 #ifdef CONFIG_PM
 void imx51_pm_init(void);
index c73593e0912161a906c57568ff93e42fc75ca270..0b137eeffb61628a851f075c7c1fb2e4789ef4f0 100644 (file)
@@ -145,6 +145,9 @@ struct device * __init imx_soc_device_init(void)
        case MXC_CPU_IMX7D:
                soc_id = "i.MX7D";
                break;
+       case MXC_CPU_IMX7ULP:
+               soc_id = "i.MX7ULP";
+               break;
        default:
                soc_id = "Unknown";
        }
diff --git a/arch/arm/mach-imx/mach-imx7ulp.c b/arch/arm/mach-imx/mach-imx7ulp.c
new file mode 100644 (file)
index 0000000..33937eb
--- /dev/null
@@ -0,0 +1,31 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2016 Freescale Semiconductor, Inc.
+ * Copyright 2017-2018 NXP
+ *   Author: Dong Aisheng <aisheng.dong@nxp.com>
+ */
+
+#include <linux/irqchip.h>
+#include <linux/of_platform.h>
+#include <asm/mach/arch.h>
+
+#include "common.h"
+#include "hardware.h"
+
+static void __init imx7ulp_init_machine(void)
+{
+       imx7ulp_pm_init();
+
+       mxc_set_cpu_type(MXC_CPU_IMX7ULP);
+       of_platform_default_populate(NULL, NULL, imx_soc_device_init());
+}
+
+static const char *const imx7ulp_dt_compat[] __initconst = {
+       "fsl,imx7ulp",
+       NULL,
+};
+
+DT_MACHINE_START(IMX7ulp, "Freescale i.MX7ULP (Device Tree)")
+       .init_machine   = imx7ulp_init_machine,
+       .dt_compat      = imx7ulp_dt_compat,
+MACHINE_END
index b130a53ff62a8bc8389e967661b5912d8e0ff61d..8e72d4e080aff20a60a92a081717e5e4eae1a950 100644 (file)
@@ -44,6 +44,7 @@
 #define MXC_CPU_IMX6ULZ                0x6b
 #define MXC_CPU_IMX6SLL                0x67
 #define MXC_CPU_IMX7D          0x72
+#define MXC_CPU_IMX7ULP                0xff
 
 #define IMX_DDR_TYPE_LPDDR2            1
 
diff --git a/arch/arm/mach-imx/pm-imx7ulp.c b/arch/arm/mach-imx/pm-imx7ulp.c
new file mode 100644 (file)
index 0000000..cf6a380
--- /dev/null
@@ -0,0 +1,29 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2016 Freescale Semiconductor, Inc.
+ * Copyright 2017-2018 NXP
+ *   Author: Dong Aisheng <aisheng.dong@nxp.com>
+ */
+
+#include <linux/io.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
+
+#define SMC_PMCTRL             0x10
+#define BP_PMCTRL_PSTOPO        16
+#define PSTOPO_PSTOP3          0x3
+
+void __init imx7ulp_pm_init(void)
+{
+       struct device_node *np;
+       void __iomem *smc1_base;
+
+       np = of_find_compatible_node(NULL, NULL, "fsl,imx7ulp-smc1");
+       smc1_base = of_iomap(np, 0);
+       WARN_ON(!smc1_base);
+
+       /* Partial Stop mode 3 with system/bus clock enabled */
+       writel_relaxed(PSTOPO_PSTOP3 << BP_PMCTRL_PSTOPO,
+                      smc1_base + SMC_PMCTRL);
+       iounmap(smc1_base);
+}