[PATCH 1/5] powerpc/64s: move remaining system reset idle code into idle_book3s.S
Gautham R Shenoy
ego.lkml at gmail.com
Tue Feb 28 22:40:23 AEDT 2017
Hi Nick,
This patch is fine by me.
Reviewed-by: Gautham R. Shenoy <ego at linux.vnet.ibm.com>
On Fri, Feb 17, 2017 at 12:08 AM, Nicholas Piggin <npiggin at gmail.com> wrote:
> Should be no functional change.
>
> Signed-off-by: Nicholas Piggin <npiggin at gmail.com>
> ---
> arch/powerpc/kernel/exceptions-64s.S | 26 +-----------------------
> arch/powerpc/kernel/idle_book3s.S | 39 +++++++++++++++++++++++++++++++-----
> 2 files changed, 35 insertions(+), 30 deletions(-)
>
> diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S
> index 0e1350b30160..d0d89047befe 100644
> --- a/arch/powerpc/kernel/exceptions-64s.S
> +++ b/arch/powerpc/kernel/exceptions-64s.S
> @@ -130,31 +130,7 @@ EXC_VIRT_NONE(0x4100, 0x4200)
>
> #ifdef CONFIG_PPC_P7_NAP
> EXC_COMMON_BEGIN(system_reset_idle_common)
> -BEGIN_FTR_SECTION
> - GET_PACA(r13) /* Restore HSPRG0 to get the winkle bit in r13 */
> -END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_300)
> - bl pnv_restore_hyp_resource
> -
> - li r0,PNV_THREAD_RUNNING
> - stb r0,PACA_THREAD_IDLE_STATE(r13) /* Clear thread state */
> -
> -#ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
> - li r0,KVM_HWTHREAD_IN_KERNEL
> - stb r0,HSTATE_HWTHREAD_STATE(r13)
> - /* Order setting hwthread_state vs. testing hwthread_req */
> - sync
> - lbz r0,HSTATE_HWTHREAD_REQ(r13)
> - cmpwi r0,0
> - beq 1f
> - b kvm_start_guest
> -1:
> -#endif
> -
> - /* Return SRR1 from power7_nap() */
> - mfspr r3,SPRN_SRR1
> - blt cr3,2f
> - b pnv_wakeup_loss
> -2: b pnv_wakeup_noloss
> + b pnv_powersave_wakeup
> #endif
>
> EXC_COMMON_BEGIN(system_reset_common)
> diff --git a/arch/powerpc/kernel/idle_book3s.S b/arch/powerpc/kernel/idle_book3s.S
> index 72dac0b58061..ea3562f83c57 100644
> --- a/arch/powerpc/kernel/idle_book3s.S
> +++ b/arch/powerpc/kernel/idle_book3s.S
> @@ -115,7 +115,7 @@ core_idle_lock_held:
> *
> * Address to 'rfid' to in r5
> */
> -_GLOBAL(pnv_powersave_common)
> +pnv_powersave_common:
> /* Use r3 to pass state nap/sleep/winkle */
> /* NAP is a state loss, we create a regs frame on the
> * stack, fill it up with the state we care about and
> @@ -365,6 +365,34 @@ _GLOBAL(power9_idle_stop)
> LOAD_REG_ADDR(r5,power_enter_stop)
> b pnv_powersave_common
> /* No return */
> +
> +.global pnv_powersave_wakeup
> +pnv_powersave_wakeup:
> +BEGIN_FTR_SECTION
> + GET_PACA(r13) /* Restore HSPRG0 to get the winkle bit in r13 */
> +END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_300)
> + bl pnv_restore_hyp_resource
> +
> + li r0,PNV_THREAD_RUNNING
> + stb r0,PACA_THREAD_IDLE_STATE(r13) /* Clear thread state */
> +
> +#ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
> + li r0,KVM_HWTHREAD_IN_KERNEL
> + stb r0,HSTATE_HWTHREAD_STATE(r13)
> + /* Order setting hwthread_state vs. testing hwthread_req */
> + sync
> + lbz r0,HSTATE_HWTHREAD_REQ(r13)
> + cmpwi r0,0
> + beq 1f
> + b kvm_start_guest
> +1:
> +#endif
> +
> + /* Return SRR1 from power7_nap() */
> + mfspr r3,SPRN_SRR1
> + blt cr3,pnv_wakeup_noloss
> + b pnv_wakeup_loss
> +
> /*
> * Called from reset vector. Check whether we have woken up with
> * hypervisor state loss. If yes, restore hypervisor state and return
> @@ -373,7 +401,7 @@ _GLOBAL(power9_idle_stop)
> * r13 - Contents of HSPRG0
> * cr3 - set to gt if waking up with partial/complete hypervisor state loss
> */
> -_GLOBAL(pnv_restore_hyp_resource)
> +pnv_restore_hyp_resource:
> BEGIN_FTR_SECTION
> ld r2,PACATOC(r13);
> /*
> @@ -436,7 +464,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_300)
> * cr3 - gt if waking up with partial/complete hypervisor state loss
> * cr4 - gt or eq if waking up from complete hypervisor state loss.
> */
> -_GLOBAL(pnv_wakeup_tb_loss)
> +pnv_wakeup_tb_loss:
> ld r1,PACAR1(r13)
> /*
> * Before entering any idle state, the NVGPRs are saved in the stack
> @@ -640,7 +668,8 @@ fastsleep_workaround_at_exit:
> * R3 here contains the value that will be returned to the caller
> * of power7_nap.
> */
> -_GLOBAL(pnv_wakeup_loss)
> +.global pnv_wakeup_loss
> +pnv_wakeup_loss:
> ld r1,PACAR1(r13)
> BEGIN_FTR_SECTION
> CHECK_HMI_INTERRUPT
> @@ -660,7 +689,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_HVMODE)
> * R3 here contains the value that will be returned to the caller
> * of power7_nap.
> */
> -_GLOBAL(pnv_wakeup_noloss)
> +pnv_wakeup_noloss:
> lbz r0,PACA_NAPSTATELOST(r13)
> cmpwi r0,0
> bne pnv_wakeup_loss
> --
> 2.11.0
>
--
Thanks and Regards
gautham.
More information about the Linuxppc-dev
mailing list