powerpc/powernv: abstraction for saving SPRs before entering deep idle states
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> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
Родитель
4eae2c9ae5
Коммит
0dfffb48ce
|
@ -52,6 +52,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.
|
||||
|
@ -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)
|
||||
|
|
Загрузка…
Ссылка в новой задаче