arm, OMAP2: Use WFI for omap2_pm_idle()
authorPeter Zijlstra <peterz@infradead.org>
Thu, 12 Jan 2023 19:43:53 +0000 (20:43 +0100)
committerIngo Molnar <mingo@kernel.org>
Fri, 13 Jan 2023 10:48:17 +0000 (11:48 +0100)
arch_cpu_idle() is a very simple idle interface and exposes only a
single idle state and is expected to not require RCU and not do any
tracing/instrumentation.

As such, omap2_pm_idle() is not a valid implementation. Replace it
with a simple (shallow) omap2_do_wfi() call.

Omap2 doesn't have a cpuidle driver; but adding one would be the
recourse to (re)gain the other idle states.

Suggested-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Tested-by: Tony Lindgren <tony@atomide.com>
Tested-by: Ulf Hansson <ulf.hansson@linaro.org>
Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Acked-by: Frederic Weisbecker <frederic@kernel.org>
Link: https://lore.kernel.org/r/20230112195541.721697850@infradead.org
arch/arm/mach-omap2/pm24xx.c

index 6953c47d8dc6816042999650ec0d53c7a792d4ee..d52cf7300db1883215d7cc897e95a503a032424e 100644 (file)
@@ -116,50 +116,12 @@ no_sleep:
 
 static int sti_console_enabled;
 
-static int omap2_allow_mpu_retention(void)
-{
-       if (!omap2xxx_cm_mpu_retention_allowed())
-               return 0;
-       if (sti_console_enabled)
-               return 0;
-
-       return 1;
-}
-
-static void omap2_enter_mpu_retention(void)
+static void omap2_do_wfi(void)
 {
        const int zero = 0;
 
-       /* The peripherals seem not to be able to wake up the MPU when
-        * it is in retention mode. */
-       if (omap2_allow_mpu_retention()) {
-               /* REVISIT: These write to reserved bits? */
-               omap_prm_clear_mod_irqs(CORE_MOD, PM_WKST1, ~0);
-               omap_prm_clear_mod_irqs(CORE_MOD, OMAP24XX_PM_WKST2, ~0);
-               omap_prm_clear_mod_irqs(WKUP_MOD, PM_WKST, ~0);
-
-               /* Try to enter MPU retention */
-               pwrdm_set_next_pwrst(mpu_pwrdm, PWRDM_POWER_RET);
-
-       } else {
-               /* Block MPU retention */
-               pwrdm_set_next_pwrst(mpu_pwrdm, PWRDM_POWER_ON);
-       }
-
        /* WFI */
        asm("mcr p15, 0, %0, c7, c0, 4" : : "r" (zero) : "memory", "cc");
-
-       pwrdm_set_next_pwrst(mpu_pwrdm, PWRDM_POWER_ON);
-}
-
-static int omap2_can_sleep(void)
-{
-       if (omap2xxx_cm_fclks_active())
-               return 0;
-       if (__clk_is_enabled(osc_ck))
-               return 0;
-
-       return 1;
 }
 
 static void omap2_pm_idle(void)
@@ -169,16 +131,7 @@ static void omap2_pm_idle(void)
        if (omap_irq_pending())
                return;
 
-       error = cpu_cluster_pm_enter();
-       if (error || !omap2_can_sleep()) {
-               omap2_enter_mpu_retention();
-               goto out_cpu_cluster_pm;
-       }
-
-       omap2_enter_full_retention();
-
-out_cpu_cluster_pm:
-       cpu_cluster_pm_exit();
+       omap2_do_wfi();
 }
 
 static void __init prcm_setup_regs(void)