lkml.org 
[lkml]   [2016]   [Jun]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v6 06/11] powerpc/powernv: abstraction for saving SPRs before entering deep idle states
    Date
    Create a function for saving SPRs before entering deep idle states.
    This function can be reused for POWER9 deep idle states.

    Reviewed-by: Gautham R. Shenoy <ego@linux.vnet.ibm.com>
    Signed-off-by: Shreyas B. Prabhu <shreyas@linux.vnet.ibm.com>
    ---
    - No changes since v3

    Changes in v3:
    =============
    - Newly added in v3

    arch/powerpc/kernel/idle_power_common.S | 54 +++++++++++++++++++--------------
    1 file changed, 32 insertions(+), 22 deletions(-)

    diff --git a/arch/powerpc/kernel/idle_power_common.S b/arch/powerpc/kernel/idle_power_common.S
    index a8397e3..2f909a1 100644
    --- a/arch/powerpc/kernel/idle_power_common.S
    +++ b/arch/powerpc/kernel/idle_power_common.S
    @@ -53,6 +53,36 @@
    .text

    /*
    + * Used by threads before entering deep idle states. Saves SPRs
    + * in interrupt stack frame
    + */
    +save_sprs_to_stack:
    + /*
    + * Note all register i.e per-core, per-subcore or per-thread is saved
    + * here since any thread in the core might wake up first
    + */
    + mfspr r3,SPRN_SDR1
    + std r3,_SDR1(r1)
    + mfspr r3,SPRN_RPR
    + std r3,_RPR(r1)
    + mfspr r3,SPRN_SPURR
    + std r3,_SPURR(r1)
    + mfspr r3,SPRN_PURR
    + std r3,_PURR(r1)
    + mfspr r3,SPRN_TSCR
    + std r3,_TSCR(r1)
    + mfspr r3,SPRN_DSCR
    + std r3,_DSCR(r1)
    + mfspr r3,SPRN_AMOR
    + std r3,_AMOR(r1)
    + mfspr r3,SPRN_WORT
    + std r3,_WORT(r1)
    + mfspr r3,SPRN_WORC
    + std r3,_WORC(r1)
    +
    + blr
    +
    +/*
    * Used by threads when the lock bit of core_idle_state is set.
    * Threads will spin in HMT_LOW until the lock bit is cleared.
    * r14 - pointer to core_idle_state
    @@ -209,28 +239,8 @@ fastsleep_workaround_at_entry:
    b common_enter

    enter_winkle:
    - /*
    - * Note all register i.e per-core, per-subcore or per-thread is saved
    - * here since any thread in the core might wake up first
    - */
    - mfspr r3,SPRN_SDR1
    - std r3,_SDR1(r1)
    - mfspr r3,SPRN_RPR
    - std r3,_RPR(r1)
    - mfspr r3,SPRN_SPURR
    - std r3,_SPURR(r1)
    - mfspr r3,SPRN_PURR
    - std r3,_PURR(r1)
    - mfspr r3,SPRN_TSCR
    - std r3,_TSCR(r1)
    - mfspr r3,SPRN_DSCR
    - std r3,_DSCR(r1)
    - mfspr r3,SPRN_AMOR
    - std r3,_AMOR(r1)
    - mfspr r3,SPRN_WORT
    - std r3,_WORT(r1)
    - mfspr r3,SPRN_WORC
    - std r3,_WORC(r1)
    + bl save_sprs_to_stack
    +
    IDLE_STATE_ENTER_SEQ(PPC_WINKLE)

    _GLOBAL(power7_idle)
    --
    2.1.4
    \
     
     \ /
      Last update: 2016-06-08 19:21    [W:3.144 / U:0.056 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site