summaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kernel/idle_book3s.S
diff options
context:
space:
mode:
authorNicholas Piggin <npiggin@gmail.com>2017-04-19 23:05:51 +1000
committerMichael Ellerman <mpe@ellerman.id.au>2017-04-23 20:32:23 +1000
commit9cba253df42f6138b48ea88f1fa35ae8a7fd5225 (patch)
treeb681b7165d1f4fdbf16ced4d24fbe101b3b91a0b /arch/powerpc/kernel/idle_book3s.S
parent0d7720a24234cefa8b318b1a3cf0b302a51faec9 (diff)
downloadlinux-stable-9cba253df42f6138b48ea88f1fa35ae8a7fd5225.tar.gz
linux-stable-9cba253df42f6138b48ea88f1fa35ae8a7fd5225.tar.bz2
linux-stable-9cba253df42f6138b48ea88f1fa35ae8a7fd5225.zip
powerpc/64s: Simplify POWER9 DD1 idle workaround code
The idle workaround does not need to load PACATOC, and it does not need to be called within a nested function that requires LR to be saved. Load the PACATOC at entry to the idle wakeup. It does not matter which PACA this comes from, so it's okay to call before the workaround. Then apply the workaround to get the right PACA. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Diffstat (limited to 'arch/powerpc/kernel/idle_book3s.S')
-rw-r--r--arch/powerpc/kernel/idle_book3s.S16
1 files changed, 5 insertions, 11 deletions
diff --git a/arch/powerpc/kernel/idle_book3s.S b/arch/powerpc/kernel/idle_book3s.S
index 570163715107..0cdee271dd93 100644
--- a/arch/powerpc/kernel/idle_book3s.S
+++ b/arch/powerpc/kernel/idle_book3s.S
@@ -411,7 +411,6 @@ power9_dd1_recover_paca:
/* Load paca->thread_sibling_pacas[i] into r13 */
ldx r13, r4, r5
SET_PACA(r13)
- ld r2, PACATOC(r13)
/*
* Indicate that we have lost NVGPR state
* which needs to be restored from the stack.
@@ -451,7 +450,12 @@ pnv_powersave_wakeup_mce:
*/
.global pnv_powersave_wakeup
pnv_powersave_wakeup:
+ ld r2, PACATOC(r13)
+
BEGIN_FTR_SECTION
+BEGIN_FTR_SECTION_NESTED(70)
+ bl power9_dd1_recover_paca
+END_FTR_SECTION_NESTED_IFSET(CPU_FTR_POWER9_DD1, 70)
bl pnv_restore_hyp_resource_arch300
FTR_SECTION_ELSE
bl pnv_restore_hyp_resource_arch207
@@ -488,14 +492,6 @@ pnv_restore_hyp_resource_arch300:
* POWER ISA 3. Use PSSCR to determine if we
* are waking up from deep idle state
*/
-BEGIN_FTR_SECTION
- mflr r6
- bl power9_dd1_recover_paca
- mtlr r6
-FTR_SECTION_ELSE
- ld r2, PACATOC(r13)
-ALT_FTR_SECTION_END_IFSET(CPU_FTR_POWER9_DD1)
-
LOAD_REG_ADDRBASE(r5,pnv_first_deep_stop_state)
ld r4,ADDROFF(pnv_first_deep_stop_state)(r5)
@@ -516,8 +512,6 @@ pnv_restore_hyp_resource_arch207:
* POWER ISA 2.07 or less.
* Check if we slept with sleep or winkle.
*/
- ld r2,PACATOC(r13);
-
lbz r4,PACA_THREAD_IDLE_STATE(r13)
cmpwi cr2,r4,PNV_THREAD_NAP
bgt cr2,pnv_wakeup_tb_loss /* Either sleep or Winkle */