lkml.org 
[lkml]   [2023]   [Jan]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip: sched/core] arm, OMAP2: Use WFI for omap2_pm_idle()
    The following commit has been merged into the sched/core branch of tip:

    Commit-ID: 259c95afac6f2758760f158537e1d28358b4639c
    Gitweb: https://git.kernel.org/tip/259c95afac6f2758760f158537e1d28358b4639c
    Author: Peter Zijlstra <peterz@infradead.org>
    AuthorDate: Thu, 12 Jan 2023 20:43:53 +01:00
    Committer: Ingo Molnar <mingo@kernel.org>
    CommitterDate: Fri, 13 Jan 2023 11:48:17 +01:00

    arm, OMAP2: Use WFI for omap2_pm_idle()

    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 | 51 +----------------------------------
    1 file changed, 2 insertions(+), 49 deletions(-)

    diff --git a/arch/arm/mach-omap2/pm24xx.c b/arch/arm/mach-omap2/pm24xx.c
    index 6953c47..d52cf73 100644
    --- a/arch/arm/mach-omap2/pm24xx.c
    +++ b/arch/arm/mach-omap2/pm24xx.c
    @@ -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)
    \
     
     \ /
      Last update: 2023-03-26 23:39    [W:2.077 / U:0.292 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site