ARM: exynos: Re-introduce Exynos4212 support
authorArtur Weber <aweber.kernel@gmail.com>
Mon, 1 May 2023 19:55:15 +0000 (21:55 +0200)
committerKrzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Tue, 9 May 2023 17:44:30 +0000 (19:44 +0200)
Support for the Exynos4212 SoC was originally dropped as there were
no boards using it. We will be adding a device that uses it, so add
back the relevant code.

This reverts commit 9e43eca3c87476f75680f472ff3ebcd85f357b86.

Signed-off-by: Artur Weber <aweber.kernel@gmail.com>
Link: https://lore.kernel.org/r/20230501195525.6268-4-aweber.kernel@gmail.com
Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
arch/arm/mach-exynos/Kconfig
arch/arm/mach-exynos/common.h
arch/arm/mach-exynos/exynos.c
arch/arm/mach-exynos/firmware.c
arch/arm/mach-exynos/pm.c
arch/arm/mach-exynos/suspend.c

index 4d3b40e4049ab09462969b45173b427206b78fbe..b3d5df5225fe6ff80e78857041006744517833ce 100644 (file)
@@ -78,6 +78,11 @@ config CPU_EXYNOS4210
        default y
        depends on ARCH_EXYNOS4
 
+config SOC_EXYNOS4212
+       bool "Samsung Exynos4212"
+       default y
+       depends on ARCH_EXYNOS4
+
 config SOC_EXYNOS4412
        bool "Samsung Exynos4412"
        default y
index 29eb075b24a4ee0350b9d20be2c4cb12bcb03ea3..c9e85d33c30918fc4b16050587208b0a2e8eb62f 100644 (file)
@@ -15,6 +15,7 @@
 #define EXYNOS3_SOC_MASK       0xFFFFF000
 
 #define EXYNOS4210_CPU_ID      0x43210000
+#define EXYNOS4212_CPU_ID      0x43220000
 #define EXYNOS4412_CPU_ID      0xE4412200
 #define EXYNOS4_CPU_MASK       0xFFFE0000
 
@@ -34,6 +35,7 @@ static inline int is_samsung_##name(void)     \
 
 IS_SAMSUNG_CPU(exynos3250, EXYNOS3250_SOC_ID, EXYNOS3_SOC_MASK)
 IS_SAMSUNG_CPU(exynos4210, EXYNOS4210_CPU_ID, EXYNOS4_CPU_MASK)
+IS_SAMSUNG_CPU(exynos4212, EXYNOS4212_CPU_ID, EXYNOS4_CPU_MASK)
 IS_SAMSUNG_CPU(exynos4412, EXYNOS4412_CPU_ID, EXYNOS4_CPU_MASK)
 IS_SAMSUNG_CPU(exynos5250, EXYNOS5250_SOC_ID, EXYNOS5_SOC_MASK)
 IS_SAMSUNG_CPU(exynos5410, EXYNOS5410_SOC_ID, EXYNOS5_SOC_MASK)
@@ -52,6 +54,12 @@ IS_SAMSUNG_CPU(exynos5800, EXYNOS5800_SOC_ID, EXYNOS5_SOC_MASK)
 # define soc_is_exynos4210()   0
 #endif
 
+#if defined(CONFIG_SOC_EXYNOS4212)
+# define soc_is_exynos4212()   is_samsung_exynos4212()
+#else
+# define soc_is_exynos4212()   0
+#endif
+
 #if defined(CONFIG_SOC_EXYNOS4412)
 # define soc_is_exynos4412()   is_samsung_exynos4412()
 #else
index 966a0995e0475636cfbd1f706251a3ee2f30cbd2..2e8099479ffab9bb59e3a2a896b72c680b247e8f 100644 (file)
@@ -180,6 +180,7 @@ static void __init exynos_dt_machine_init(void)
                exynos_cpuidle.dev.platform_data = &cpuidle_coupled_exynos_data;
 #endif
        if (of_machine_is_compatible("samsung,exynos4210") ||
+           of_machine_is_compatible("samsung,exynos4212") ||
            (of_machine_is_compatible("samsung,exynos4412") &&
             (of_machine_is_compatible("samsung,trats2") ||
                  of_machine_is_compatible("samsung,midas") ||
@@ -194,6 +195,7 @@ static char const *const exynos_dt_compat[] __initconst = {
        "samsung,exynos3250",
        "samsung,exynos4",
        "samsung,exynos4210",
+       "samsung,exynos4212",
        "samsung,exynos4412",
        "samsung,exynos5",
        "samsung,exynos5250",
index 2da5b60b59e29a82d291ccb8c2a517f8c8055fab..a5e22678e27becd53765150c3d7d8d9198045dd0 100644 (file)
@@ -63,12 +63,18 @@ static int exynos_cpu_boot(int cpu)
         *
         * On Exynos5 devices the call is ignored by trustzone firmware.
         */
-       if (!soc_is_exynos4210() && !soc_is_exynos4412())
+       if (!soc_is_exynos4210() && !soc_is_exynos4212() &&
+           !soc_is_exynos4412())
                return 0;
 
        /*
         * The second parameter of SMC_CMD_CPU1BOOT command means CPU id.
+        * But, Exynos4212 has only one secondary CPU so second parameter
+        * isn't used for informing secure firmware about CPU id.
         */
+       if (soc_is_exynos4212())
+               cpu = 0;
+
        exynos_smc(SMC_CMD_CPU1BOOT, cpu, 0, 0);
        return 0;
 }
index 30f4e55bf39e640c8ab2f4549623faf1c9436b67..0019d21bff90c36345c1c4d7d0b29132d907ea7f 100644 (file)
@@ -161,7 +161,7 @@ void exynos_enter_aftr(void)
 
        exynos_pm_central_suspend();
 
-       if (soc_is_exynos4412()) {
+       if (soc_is_exynos4212() || soc_is_exynos4412()) {
                /* Setting SEQ_OPTION register */
                pmu_raw_writel(S5P_USE_STANDBY_WFI0 | S5P_USE_STANDBY_WFE0,
                               S5P_CENTRAL_SEQ_OPTION);
index 6d5d7696aaf71c3684196eb8505db8b6bc0c8e61..cac4e82f6c824f45d80a7c00db1ef8db2c3f49ec 100644 (file)
@@ -231,6 +231,7 @@ static int __init exynos_pmu_irq_init(struct device_node *node,
 
 EXYNOS_PMU_IRQ(exynos3250_pmu_irq, "samsung,exynos3250-pmu");
 EXYNOS_PMU_IRQ(exynos4210_pmu_irq, "samsung,exynos4210-pmu");
+EXYNOS_PMU_IRQ(exynos4212_pmu_irq, "samsung,exynos4212-pmu");
 EXYNOS_PMU_IRQ(exynos4412_pmu_irq, "samsung,exynos4412-pmu");
 EXYNOS_PMU_IRQ(exynos5250_pmu_irq, "samsung,exynos5250-pmu");
 EXYNOS_PMU_IRQ(exynos5420_pmu_irq, "samsung,exynos5420-pmu");
@@ -640,6 +641,9 @@ static const struct of_device_id exynos_pmu_of_device_ids[] __initconst = {
        }, {
                .compatible = "samsung,exynos4210-pmu",
                .data = &exynos4_pm_data,
+       }, {
+               .compatible = "samsung,exynos4212-pmu",
+               .data = &exynos4_pm_data,
        }, {
                .compatible = "samsung,exynos4412-pmu",
                .data = &exynos4_pm_data,