]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - arch/arm/mach-exynos/suspend.c
Merge branch 'for-linus' of git://git.armlinux.org.uk/~rmk/linux-arm
[karo-tx-linux.git] / arch / arm / mach-exynos / suspend.c
index 97765be2cc12018cc131a05d8499f3d9f6753b9d..748cfb8d521247c2073b8cc064d963c1f7ab9eeb 100644 (file)
@@ -57,7 +57,6 @@ struct exynos_wkup_irq {
 struct exynos_pm_data {
        const struct exynos_wkup_irq *wkup_irq;
        unsigned int wake_disable_mask;
-       unsigned int *release_ret_regs;
 
        void (*pm_prepare)(void);
        void (*pm_resume_prepare)(void);
@@ -66,7 +65,7 @@ struct exynos_pm_data {
        int (*cpu_suspend)(unsigned long);
 };
 
-static const struct exynos_pm_data *pm_data;
+static const struct exynos_pm_data *pm_data __ro_after_init;
 
 static int exynos5420_cpu_state;
 static unsigned int exynos_pmu_spare3;
@@ -95,47 +94,6 @@ static const struct exynos_wkup_irq exynos5250_wkup_irq[] = {
        { /* sentinel */ },
 };
 
-static unsigned int exynos_release_ret_regs[] = {
-       S5P_PAD_RET_MAUDIO_OPTION,
-       S5P_PAD_RET_GPIO_OPTION,
-       S5P_PAD_RET_UART_OPTION,
-       S5P_PAD_RET_MMCA_OPTION,
-       S5P_PAD_RET_MMCB_OPTION,
-       S5P_PAD_RET_EBIA_OPTION,
-       S5P_PAD_RET_EBIB_OPTION,
-       REG_TABLE_END,
-};
-
-static unsigned int exynos3250_release_ret_regs[] = {
-       S5P_PAD_RET_MAUDIO_OPTION,
-       S5P_PAD_RET_GPIO_OPTION,
-       S5P_PAD_RET_UART_OPTION,
-       S5P_PAD_RET_MMCA_OPTION,
-       S5P_PAD_RET_MMCB_OPTION,
-       S5P_PAD_RET_EBIA_OPTION,
-       S5P_PAD_RET_EBIB_OPTION,
-       S5P_PAD_RET_MMC2_OPTION,
-       S5P_PAD_RET_SPI_OPTION,
-       REG_TABLE_END,
-};
-
-static unsigned int exynos5420_release_ret_regs[] = {
-       EXYNOS_PAD_RET_DRAM_OPTION,
-       EXYNOS_PAD_RET_MAUDIO_OPTION,
-       EXYNOS_PAD_RET_JTAG_OPTION,
-       EXYNOS5420_PAD_RET_GPIO_OPTION,
-       EXYNOS5420_PAD_RET_UART_OPTION,
-       EXYNOS5420_PAD_RET_MMCA_OPTION,
-       EXYNOS5420_PAD_RET_MMCB_OPTION,
-       EXYNOS5420_PAD_RET_MMCC_OPTION,
-       EXYNOS5420_PAD_RET_HSI_OPTION,
-       EXYNOS_PAD_RET_EBIA_OPTION,
-       EXYNOS_PAD_RET_EBIB_OPTION,
-       EXYNOS5420_PAD_RET_SPI_OPTION,
-       EXYNOS5420_PAD_RET_DRAM_COREBLK_OPTION,
-       REG_TABLE_END,
-};
-
 static int exynos_irq_set_wake(struct irq_data *data, unsigned int state)
 {
        const struct exynos_wkup_irq *wkup_irq;
@@ -270,7 +228,6 @@ 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(exynos4415_pmu_irq, "samsung,exynos4415-pmu");
 EXYNOS_PMU_IRQ(exynos5250_pmu_irq, "samsung,exynos5250-pmu");
 EXYNOS_PMU_IRQ(exynos5420_pmu_irq, "samsung,exynos5420-pmu");
 
@@ -388,9 +345,9 @@ static void exynos5420_pm_prepare(void)
        if (IS_ENABLED(CONFIG_EXYNOS5420_MCPM))
                pmu_raw_writel(__pa_symbol(mcpm_entry_point), S5P_INFORM0);
 
-       tmp = pmu_raw_readl(EXYNOS5_ARM_L2_OPTION);
-       tmp &= ~EXYNOS5_USE_RETENTION;
-       pmu_raw_writel(tmp, EXYNOS5_ARM_L2_OPTION);
+       tmp = pmu_raw_readl(EXYNOS_L2_OPTION(0));
+       tmp &= ~EXYNOS_L2_USE_RETENTION;
+       pmu_raw_writel(tmp, EXYNOS_L2_OPTION(0));
 
        tmp = pmu_raw_readl(EXYNOS5420_SFR_AXI_CGDIS1);
        tmp |= EXYNOS5420_UFS;
@@ -442,15 +399,6 @@ static int exynos5420_pm_suspend(void)
        return 0;
 }
 
-static void exynos_pm_release_retention(void)
-{
-       unsigned int i;
-
-       for (i = 0; (pm_data->release_ret_regs[i] != REG_TABLE_END); i++)
-               pmu_raw_writel(EXYNOS_WAKEUP_FROM_LOWPWR,
-                               pm_data->release_ret_regs[i]);
-}
-
 static void exynos_pm_resume(void)
 {
        u32 cpuid = read_cpuid_part();
@@ -458,9 +406,6 @@ static void exynos_pm_resume(void)
        if (exynos_pm_central_resume())
                goto early_wakeup;
 
-       /* For release retention */
-       exynos_pm_release_retention();
-
        if (cpuid == ARM_CPU_PART_CORTEX_A9)
                scu_enable(S5P_VA_SCU);
 
@@ -482,9 +427,6 @@ static void exynos3250_pm_resume(void)
        if (exynos_pm_central_resume())
                goto early_wakeup;
 
-       /* For release retention */
-       exynos_pm_release_retention();
-
        pmu_raw_writel(S5P_USE_STANDBY_WFI_ALL, S5P_CENTRAL_SEQ_OPTION);
 
        if (call_firmware_op(resume) == -ENOSYS
@@ -522,9 +464,6 @@ static void exynos5420_pm_resume(void)
        if (exynos_pm_central_resume())
                goto early_wakeup;
 
-       /* For release retention */
-       exynos_pm_release_retention();
-
        pmu_raw_writel(exynos_pmu_spare3, S5P_PMU_SPARE3);
 
 early_wakeup:
@@ -637,7 +576,6 @@ static const struct platform_suspend_ops exynos_suspend_ops = {
 static const struct exynos_pm_data exynos3250_pm_data = {
        .wkup_irq       = exynos3250_wkup_irq,
        .wake_disable_mask = ((0xFF << 8) | (0x1F << 1)),
-       .release_ret_regs = exynos3250_release_ret_regs,
        .pm_suspend     = exynos_pm_suspend,
        .pm_resume      = exynos3250_pm_resume,
        .pm_prepare     = exynos3250_pm_prepare,
@@ -647,7 +585,6 @@ static const struct exynos_pm_data exynos3250_pm_data = {
 static const struct exynos_pm_data exynos4_pm_data = {
        .wkup_irq       = exynos4_wkup_irq,
        .wake_disable_mask = ((0xFF << 8) | (0x1F << 1)),
-       .release_ret_regs = exynos_release_ret_regs,
        .pm_suspend     = exynos_pm_suspend,
        .pm_resume      = exynos_pm_resume,
        .pm_prepare     = exynos_pm_prepare,
@@ -657,7 +594,6 @@ static const struct exynos_pm_data exynos4_pm_data = {
 static const struct exynos_pm_data exynos5250_pm_data = {
        .wkup_irq       = exynos5250_wkup_irq,
        .wake_disable_mask = ((0xFF << 8) | (0x1F << 1)),
-       .release_ret_regs = exynos_release_ret_regs,
        .pm_suspend     = exynos_pm_suspend,
        .pm_resume      = exynos_pm_resume,
        .pm_prepare     = exynos_pm_prepare,
@@ -667,7 +603,6 @@ static const struct exynos_pm_data exynos5250_pm_data = {
 static const struct exynos_pm_data exynos5420_pm_data = {
        .wkup_irq       = exynos5250_wkup_irq,
        .wake_disable_mask = (0x7F << 7) | (0x1F << 1),
-       .release_ret_regs = exynos5420_release_ret_regs,
        .pm_resume_prepare = exynos5420_prepare_pm_resume,
        .pm_resume      = exynos5420_pm_resume,
        .pm_suspend     = exynos5420_pm_suspend,