Merge tag 'samsung-soc-4.21' of https://git.kernel.org/pub/scm/linux/kernel/git/krzk...
authorOlof Johansson <olof@lixom.net>
Wed, 12 Dec 2018 21:52:15 +0000 (13:52 -0800)
committerOlof Johansson <olof@lixom.net>
Wed, 12 Dec 2018 21:52:15 +0000 (13:52 -0800)
Samsung mach/soc changes for v4.21

Just cleanups of: legacy way of setting external wakeup interrupts, old
power management debugging functions and duplicated secondary startup
initialization.

* tag 'samsung-soc-4.21' of https://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux:
  ARM: exynos: Remove secondary startup initialization from smp_prepare_cpus
  ARM: samsung: Limit SAMSUNG_PM_DEBUG config option to non-Exynos platforms
  ARM: exynos: Remove no longer needed s3c_pm_check_*() calls
  ARM: exynos: Remove legacy setting of external wakeup interrupts
  ARM: s5pv210: Remove legacy setting of external wakeup interrupts

Signed-off-by: Olof Johansson <olof@lixom.net>
arch/arm/mach-exynos/common.h
arch/arm/mach-exynos/platsmp.c
arch/arm/mach-exynos/suspend.c
arch/arm/mach-s5pv210/common.h
arch/arm/mach-s5pv210/pm.c
arch/arm/plat-samsung/Kconfig

index f96730cce6e82c48e9f2d2c0b2be58bd55ff93ee..1b8699e940989b5e9f45e26650da0811f0a2e812 100644 (file)
@@ -114,8 +114,6 @@ bool __init exynos_secure_firmware_available(void);
 void exynos_set_boot_flag(unsigned int cpu, unsigned int mode);
 void exynos_clear_boot_flag(unsigned int cpu, unsigned int mode);
 
-extern u32 exynos_get_eint_wake_mask(void);
-
 #ifdef CONFIG_PM_SLEEP
 extern void __init exynos_pm_init(void);
 #else
index 6a1e682371b32c400041fb2aa0db1698a19a63d3..c39ffd2e2fe697b9f3ffe5539f7b925f2081fa47 100644 (file)
@@ -397,38 +397,12 @@ fail:
 
 static void __init exynos_smp_prepare_cpus(unsigned int max_cpus)
 {
-       int i;
-
        exynos_sysram_init();
 
        exynos_set_delayed_reset_assertion(true);
 
        if (read_cpuid_part() == ARM_CPU_PART_CORTEX_A9)
                exynos_scu_enable();
-
-       /*
-        * Write the address of secondary startup into the
-        * system-wide flags register. The boot monitor waits
-        * until it receives a soft interrupt, and then the
-        * secondary CPU branches to this address.
-        *
-        * Try using firmware operation first and fall back to
-        * boot register if it fails.
-        */
-       for (i = 1; i < max_cpus; ++i) {
-               unsigned long boot_addr;
-               u32 mpidr;
-               u32 core_id;
-               int ret;
-
-               mpidr = cpu_logical_map(i);
-               core_id = MPIDR_AFFINITY_LEVEL(mpidr, 0);
-               boot_addr = __pa_symbol(exynos4_secondary_startup);
-
-               ret = exynos_set_boot_addr(core_id, boot_addr);
-               if (ret)
-                       break;
-       }
 }
 
 #ifdef CONFIG_HOTPLUG_CPU
index bb8e3985acdb30f5f568a340f1ceaf3c39e43bb7..0850505ac78b2c52c42c6eed6b4d2e8b8ee841db 100644 (file)
@@ -30,8 +30,6 @@
 #include <asm/smp_scu.h>
 #include <asm/suspend.h>
 
-#include <plat/pm-common.h>
-
 #include "common.h"
 
 #define REG_TABLE_END (-1U)
@@ -93,6 +91,11 @@ static const struct exynos_wkup_irq exynos5250_wkup_irq[] = {
        { /* sentinel */ },
 };
 
+static u32 exynos_read_eint_wakeup_mask(void)
+{
+       return pmu_raw_readl(EXYNOS_EINT_WAKEUP_MASK);
+}
+
 static int exynos_irq_set_wake(struct irq_data *data, unsigned int state)
 {
        const struct exynos_wkup_irq *wkup_irq;
@@ -277,8 +280,10 @@ static int exynos5420_cpu_suspend(unsigned long arg)
 
 static void exynos_pm_set_wakeup_mask(void)
 {
-       /* Set wake-up mask registers */
-       pmu_raw_writel(exynos_get_eint_wake_mask(), EXYNOS_EINT_WAKEUP_MASK);
+       /*
+        * Set wake-up mask registers
+        * EXYNOS_EINT_WAKEUP_MASK is set by pinctrl driver in late suspend.
+        */
        pmu_raw_writel(exynos_irqwake_intmask & ~(1 << 31), S5P_WAKEUP_MASK);
 }
 
@@ -488,27 +493,24 @@ early_wakeup:
 
 static int exynos_suspend_enter(suspend_state_t state)
 {
+       u32 eint_wakeup_mask = exynos_read_eint_wakeup_mask();
        int ret;
 
-       s3c_pm_debug_init();
-
-       S3C_PMDBG("%s: suspending the system...\n", __func__);
+       pr_debug("%s: suspending the system...\n", __func__);
 
-       S3C_PMDBG("%s: wakeup masks: %08x,%08x\n", __func__,
-                       exynos_irqwake_intmask, exynos_get_eint_wake_mask());
+       pr_debug("%s: wakeup masks: %08x,%08x\n", __func__,
+                 exynos_irqwake_intmask, eint_wakeup_mask);
 
        if (exynos_irqwake_intmask == -1U
-           && exynos_get_eint_wake_mask() == -1U) {
+           && eint_wakeup_mask == EXYNOS_EINT_WAKEUP_MASK_DISABLED) {
                pr_err("%s: No wake-up sources!\n", __func__);
                pr_err("%s: Aborting sleep\n", __func__);
                return -EINVAL;
        }
 
-       s3c_pm_save_uarts();
        if (pm_data->pm_prepare)
                pm_data->pm_prepare();
        flush_cache_all();
-       s3c_pm_check_store();
 
        ret = call_firmware_op(suspend);
        if (ret == -ENOSYS)
@@ -518,14 +520,11 @@ static int exynos_suspend_enter(suspend_state_t state)
 
        if (pm_data->pm_resume_prepare)
                pm_data->pm_resume_prepare();
-       s3c_pm_restore_uarts();
 
-       S3C_PMDBG("%s: wakeup stat: %08x\n", __func__,
+       pr_debug("%s: wakeup stat: %08x\n", __func__,
                        pmu_raw_readl(S5P_WAKEUP_STAT));
 
-       s3c_pm_check_restore();
-
-       S3C_PMDBG("%s: resuming the system...\n", __func__);
+       pr_debug("%s: resuming the system...\n", __func__);
 
        return 0;
 }
@@ -548,8 +547,6 @@ static int exynos_suspend_prepare(void)
                return ret;
        }
 
-       s3c_pm_check_prepare();
-
        return 0;
 }
 
@@ -557,8 +554,6 @@ static void exynos_suspend_finish(void)
 {
        int ret;
 
-       s3c_pm_check_cleanup();
-
        ret = regulator_suspend_finish();
        if (ret)
                pr_warn("Failed to resume regulators from suspend (%d)\n", ret);
index 0a188134deaed9c5f420f24b2d34223216ef906e..cb36058bc35ed0a9dee5fa3354c7ff46e6e65279 100644 (file)
@@ -10,7 +10,6 @@
 #define __ARCH_ARM_MACH_S5PV210_COMMON_H
 
 #ifdef CONFIG_PM_SLEEP
-u32 exynos_get_eint_wake_mask(void);
 void s5pv210_cpu_resume(void);
 void s5pv210_pm_init(void);
 #else
index f491249ab65857660b444d004cb2664623e16770..b336df0c57f393ef72045e2dcfc5fb82ddffbe09 100644 (file)
@@ -32,6 +32,11 @@ static struct sleep_save s5pv210_core_save[] = {
  */
 static u32 s5pv210_irqwake_intmask = 0xffffffff;
 
+static u32 s5pv210_read_eint_wakeup_mask(void)
+{
+       return __raw_readl(S5P_EINT_WAKEUP_MASK);
+}
+
 /*
  * Suspend helpers.
  */
@@ -59,8 +64,10 @@ static void s5pv210_pm_prepare(void)
 {
        unsigned int tmp;
 
-       /* Set wake-up mask registers */
-       __raw_writel(exynos_get_eint_wake_mask(), S5P_EINT_WAKEUP_MASK);
+       /*
+        * Set wake-up mask registers
+        * S5P_EINT_WAKEUP_MASK is set by pinctrl driver in late suspend.
+        */
        __raw_writel(s5pv210_irqwake_intmask, S5P_WAKEUP_MASK);
 
        /* ensure at least INFORM0 has the resume address */
@@ -89,6 +96,7 @@ static void s5pv210_pm_prepare(void)
  */
 static int s5pv210_suspend_enter(suspend_state_t state)
 {
+       u32 eint_wakeup_mask = s5pv210_read_eint_wakeup_mask();
        int ret;
 
        s3c_pm_debug_init();
@@ -96,10 +104,10 @@ static int s5pv210_suspend_enter(suspend_state_t state)
        S3C_PMDBG("%s: suspending the system...\n", __func__);
 
        S3C_PMDBG("%s: wakeup masks: %08x,%08x\n", __func__,
-                       s5pv210_irqwake_intmask, exynos_get_eint_wake_mask());
+                       s5pv210_irqwake_intmask, eint_wakeup_mask);
 
        if (s5pv210_irqwake_intmask == -1U
-           && exynos_get_eint_wake_mask() == -1U) {
+           && eint_wakeup_mask == -1U) {
                pr_err("%s: No wake-up sources!\n", __func__);
                pr_err("%s: Aborting sleep\n", __func__);
                return -EINVAL;
index 377ff9cda667a11135fef4f12d84d160a3b08aaa..53da57fba39c663ec5d60d586efea3bcb0c8ba6e 100644 (file)
@@ -239,6 +239,7 @@ comment "Power management"
 config SAMSUNG_PM_DEBUG
        bool "Samsung PM Suspend debug"
        depends on PM && DEBUG_KERNEL
+       depends on PLAT_S3C24XX || ARCH_S3C64XX || ARCH_S5PV210
        depends on DEBUG_EXYNOS_UART || DEBUG_S3C24XX_UART || DEBUG_S3C2410_UART
        help
          Say Y here if you want verbose debugging from the PM Suspend and