ARM: imx: Add basic msl support for imx6sll
authorBai Ping <ping.bai@nxp.com>
Thu, 8 Mar 2018 09:34:55 +0000 (17:34 +0800)
committerShawn Guo <shawnguo@kernel.org>
Fri, 9 Mar 2018 01:22:06 +0000 (09:22 +0800)
Add basic MSL support for i.MX6SLL.

The i.MX 6SoloLiteLite application processors are NXP's latest
additions to a growing family of multimedia-focused products
offering high-performance processing optimized for lowest power
consumption. The i.MX 6SoloLiteLite processors feature NXP's advanced
implementation of the ARM Cortex-A9 core, which can be interfaced
with LPDDR3 and LPDDR2 DRAM memory devices.

Signed-off-by: Bai Ping <ping.bai@nxp.com>
Signed-off-by: Shawn Guo <shawnguo@kernel.org>
arch/arm/mach-imx/Kconfig
arch/arm/mach-imx/Makefile
arch/arm/mach-imx/cpu.c
arch/arm/mach-imx/cpuidle-imx6sl.c
arch/arm/mach-imx/mach-imx6sl.c
arch/arm/mach-imx/mxc.h

index 1831319..f53ec31 100644 (file)
@@ -499,6 +499,13 @@ config SOC_IMX6SL
        help
          This enables support for Freescale i.MX6 SoloLite processor.
 
+config SOC_IMX6SLL
+       bool "i.MX6 SoloLiteLite support"
+       select SOC_IMX6
+
+       help
+         This enables support for Freescale i.MX6 SoloLiteLite processor.
+
 config SOC_IMX6SX
        bool "i.MX6 SoloX support"
        select PINCTRL_IMX6SX
index 04ba789..78fa86a 100644 (file)
@@ -77,6 +77,7 @@ obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o
 endif
 obj-$(CONFIG_SOC_IMX6Q) += mach-imx6q.o
 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
index d4e55f2..32969f3 100644 (file)
@@ -135,6 +135,9 @@ struct device * __init imx_soc_device_init(void)
        case MXC_CPU_IMX6ULL:
                soc_id = "i.MX6ULL";
                break;
+       case MXC_CPU_IMX6SLL:
+               soc_id = "i.MX6SLL";
+               break;
        case MXC_CPU_IMX7D:
                soc_id = "i.MX7D";
                break;
index 8d866fb..fa8ead1 100644 (file)
@@ -12,6 +12,7 @@
 
 #include "common.h"
 #include "cpuidle.h"
+#include "hardware.h"
 
 static int imx6sl_enter_wait(struct cpuidle_device *dev,
                            struct cpuidle_driver *drv, int index)
@@ -21,9 +22,11 @@ static int imx6sl_enter_wait(struct cpuidle_device *dev,
         * Software workaround for ERR005311, see function
         * description for details.
         */
-       imx6sl_set_wait_clk(true);
+       if (cpu_is_imx6sl())
+               imx6sl_set_wait_clk(true);
        cpu_do_idle();
-       imx6sl_set_wait_clk(false);
+       if (cpu_is_imx6sl())
+               imx6sl_set_wait_clk(false);
        imx6_set_lpm(WAIT_CLOCKED);
 
        return index;
index 0408490..c7a1ef1 100644 (file)
@@ -18,6 +18,7 @@
 
 #include "common.h"
 #include "cpuidle.h"
+#include "hardware.h"
 
 static void __init imx6sl_fec_init(void)
 {
@@ -54,7 +55,8 @@ static void __init imx6sl_init_machine(void)
 
        of_platform_default_populate(NULL, NULL, parent);
 
-       imx6sl_fec_init();
+       if (cpu_is_imx6sl())
+               imx6sl_fec_init();
        imx_anatop_init();
        imx6sl_pm_init();
 }
@@ -66,11 +68,15 @@ static void __init imx6sl_init_irq(void)
        imx_init_l2cache();
        imx_src_init();
        irqchip_init();
-       imx6_pm_ccm_init("fsl,imx6sl-ccm");
+       if (cpu_is_imx6sl())
+               imx6_pm_ccm_init("fsl,imx6sl-ccm");
+       else
+               imx6_pm_ccm_init("fsl,imx6sll-ccm");
 }
 
 static const char * const imx6sl_dt_compat[] __initconst = {
        "fsl,imx6sl",
+       "fsl,imx6sll",
        NULL,
 };
 
index e00d626..026e2ca 100644 (file)
@@ -40,6 +40,7 @@
 #define MXC_CPU_IMX6Q          0x63
 #define MXC_CPU_IMX6UL         0x64
 #define MXC_CPU_IMX6ULL                0x65
+#define MXC_CPU_IMX6SLL                0x67
 #define MXC_CPU_IMX7D          0x72
 
 #define IMX_DDR_TYPE_LPDDR2            1
@@ -79,6 +80,11 @@ static inline bool cpu_is_imx6ull(void)
        return __mxc_cpu_type == MXC_CPU_IMX6ULL;
 }
 
+static inline bool cpu_is_imx6sll(void)
+{
+       return __mxc_cpu_type == MXC_CPU_IMX6SLL;
+}
+
 static inline bool cpu_is_imx6q(void)
 {
        return __mxc_cpu_type == MXC_CPU_IMX6Q;