Commit 3aab5403 authored by Olof Johansson's avatar Olof Johansson

Merge tag 'samsung-soc-4.21' of...

Merge tag 'samsung-soc-4.21' of https://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux into next/soc

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: default avatarOlof Johansson <olof@lixom.net>
parents abd488c0 cafbc79e
...@@ -114,8 +114,6 @@ bool __init exynos_secure_firmware_available(void); ...@@ -114,8 +114,6 @@ bool __init exynos_secure_firmware_available(void);
void exynos_set_boot_flag(unsigned int cpu, unsigned int mode); void exynos_set_boot_flag(unsigned int cpu, unsigned int mode);
void exynos_clear_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 #ifdef CONFIG_PM_SLEEP
extern void __init exynos_pm_init(void); extern void __init exynos_pm_init(void);
#else #else
......
...@@ -397,38 +397,12 @@ static int exynos_boot_secondary(unsigned int cpu, struct task_struct *idle) ...@@ -397,38 +397,12 @@ static int exynos_boot_secondary(unsigned int cpu, struct task_struct *idle)
static void __init exynos_smp_prepare_cpus(unsigned int max_cpus) static void __init exynos_smp_prepare_cpus(unsigned int max_cpus)
{ {
int i;
exynos_sysram_init(); exynos_sysram_init();
exynos_set_delayed_reset_assertion(true); exynos_set_delayed_reset_assertion(true);
if (read_cpuid_part() == ARM_CPU_PART_CORTEX_A9) if (read_cpuid_part() == ARM_CPU_PART_CORTEX_A9)
exynos_scu_enable(); 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 #ifdef CONFIG_HOTPLUG_CPU
......
...@@ -30,8 +30,6 @@ ...@@ -30,8 +30,6 @@
#include <asm/smp_scu.h> #include <asm/smp_scu.h>
#include <asm/suspend.h> #include <asm/suspend.h>
#include <plat/pm-common.h>
#include "common.h" #include "common.h"
#define REG_TABLE_END (-1U) #define REG_TABLE_END (-1U)
...@@ -93,6 +91,11 @@ static const struct exynos_wkup_irq exynos5250_wkup_irq[] = { ...@@ -93,6 +91,11 @@ static const struct exynos_wkup_irq exynos5250_wkup_irq[] = {
{ /* sentinel */ }, { /* 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) static int exynos_irq_set_wake(struct irq_data *data, unsigned int state)
{ {
const struct exynos_wkup_irq *wkup_irq; const struct exynos_wkup_irq *wkup_irq;
...@@ -277,8 +280,10 @@ static int exynos5420_cpu_suspend(unsigned long arg) ...@@ -277,8 +280,10 @@ static int exynos5420_cpu_suspend(unsigned long arg)
static void exynos_pm_set_wakeup_mask(void) 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); pmu_raw_writel(exynos_irqwake_intmask & ~(1 << 31), S5P_WAKEUP_MASK);
} }
...@@ -488,27 +493,24 @@ static void exynos5420_pm_resume(void) ...@@ -488,27 +493,24 @@ static void exynos5420_pm_resume(void)
static int exynos_suspend_enter(suspend_state_t state) static int exynos_suspend_enter(suspend_state_t state)
{ {
u32 eint_wakeup_mask = exynos_read_eint_wakeup_mask();
int ret; int ret;
s3c_pm_debug_init(); pr_debug("%s: suspending the system...\n", __func__);
S3C_PMDBG("%s: suspending the system...\n", __func__);
S3C_PMDBG("%s: wakeup masks: %08x,%08x\n", __func__, pr_debug("%s: wakeup masks: %08x,%08x\n", __func__,
exynos_irqwake_intmask, exynos_get_eint_wake_mask()); exynos_irqwake_intmask, eint_wakeup_mask);
if (exynos_irqwake_intmask == -1U 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: No wake-up sources!\n", __func__);
pr_err("%s: Aborting sleep\n", __func__); pr_err("%s: Aborting sleep\n", __func__);
return -EINVAL; return -EINVAL;
} }
s3c_pm_save_uarts();
if (pm_data->pm_prepare) if (pm_data->pm_prepare)
pm_data->pm_prepare(); pm_data->pm_prepare();
flush_cache_all(); flush_cache_all();
s3c_pm_check_store();
ret = call_firmware_op(suspend); ret = call_firmware_op(suspend);
if (ret == -ENOSYS) if (ret == -ENOSYS)
...@@ -518,14 +520,11 @@ static int exynos_suspend_enter(suspend_state_t state) ...@@ -518,14 +520,11 @@ static int exynos_suspend_enter(suspend_state_t state)
if (pm_data->pm_resume_prepare) if (pm_data->pm_resume_prepare)
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)); pmu_raw_readl(S5P_WAKEUP_STAT));
s3c_pm_check_restore(); pr_debug("%s: resuming the system...\n", __func__);
S3C_PMDBG("%s: resuming the system...\n", __func__);
return 0; return 0;
} }
...@@ -548,8 +547,6 @@ static int exynos_suspend_prepare(void) ...@@ -548,8 +547,6 @@ static int exynos_suspend_prepare(void)
return ret; return ret;
} }
s3c_pm_check_prepare();
return 0; return 0;
} }
...@@ -557,8 +554,6 @@ static void exynos_suspend_finish(void) ...@@ -557,8 +554,6 @@ static void exynos_suspend_finish(void)
{ {
int ret; int ret;
s3c_pm_check_cleanup();
ret = regulator_suspend_finish(); ret = regulator_suspend_finish();
if (ret) if (ret)
pr_warn("Failed to resume regulators from suspend (%d)\n", ret); pr_warn("Failed to resume regulators from suspend (%d)\n", ret);
......
...@@ -10,7 +10,6 @@ ...@@ -10,7 +10,6 @@
#define __ARCH_ARM_MACH_S5PV210_COMMON_H #define __ARCH_ARM_MACH_S5PV210_COMMON_H
#ifdef CONFIG_PM_SLEEP #ifdef CONFIG_PM_SLEEP
u32 exynos_get_eint_wake_mask(void);
void s5pv210_cpu_resume(void); void s5pv210_cpu_resume(void);
void s5pv210_pm_init(void); void s5pv210_pm_init(void);
#else #else
......
...@@ -32,6 +32,11 @@ static struct sleep_save s5pv210_core_save[] = { ...@@ -32,6 +32,11 @@ static struct sleep_save s5pv210_core_save[] = {
*/ */
static u32 s5pv210_irqwake_intmask = 0xffffffff; static u32 s5pv210_irqwake_intmask = 0xffffffff;
static u32 s5pv210_read_eint_wakeup_mask(void)
{
return __raw_readl(S5P_EINT_WAKEUP_MASK);
}
/* /*
* Suspend helpers. * Suspend helpers.
*/ */
...@@ -59,8 +64,10 @@ static void s5pv210_pm_prepare(void) ...@@ -59,8 +64,10 @@ static void s5pv210_pm_prepare(void)
{ {
unsigned int tmp; 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); __raw_writel(s5pv210_irqwake_intmask, S5P_WAKEUP_MASK);
/* ensure at least INFORM0 has the resume address */ /* ensure at least INFORM0 has the resume address */
...@@ -89,6 +96,7 @@ static void s5pv210_pm_prepare(void) ...@@ -89,6 +96,7 @@ static void s5pv210_pm_prepare(void)
*/ */
static int s5pv210_suspend_enter(suspend_state_t state) static int s5pv210_suspend_enter(suspend_state_t state)
{ {
u32 eint_wakeup_mask = s5pv210_read_eint_wakeup_mask();
int ret; int ret;
s3c_pm_debug_init(); s3c_pm_debug_init();
...@@ -96,10 +104,10 @@ static int s5pv210_suspend_enter(suspend_state_t state) ...@@ -96,10 +104,10 @@ static int s5pv210_suspend_enter(suspend_state_t state)
S3C_PMDBG("%s: suspending the system...\n", __func__); S3C_PMDBG("%s: suspending the system...\n", __func__);
S3C_PMDBG("%s: wakeup masks: %08x,%08x\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 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: No wake-up sources!\n", __func__);
pr_err("%s: Aborting sleep\n", __func__); pr_err("%s: Aborting sleep\n", __func__);
return -EINVAL; return -EINVAL;
......
...@@ -239,6 +239,7 @@ comment "Power management" ...@@ -239,6 +239,7 @@ comment "Power management"
config SAMSUNG_PM_DEBUG config SAMSUNG_PM_DEBUG
bool "Samsung PM Suspend debug" bool "Samsung PM Suspend debug"
depends on PM && DEBUG_KERNEL depends on PM && DEBUG_KERNEL
depends on PLAT_S3C24XX || ARCH_S3C64XX || ARCH_S5PV210
depends on DEBUG_EXYNOS_UART || DEBUG_S3C24XX_UART || DEBUG_S3C2410_UART depends on DEBUG_EXYNOS_UART || DEBUG_S3C24XX_UART || DEBUG_S3C2410_UART
help help
Say Y here if you want verbose debugging from the PM Suspend and Say Y here if you want verbose debugging from the PM Suspend and
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment