diff mbox series

asm/head: fix power save wakeup register corruption

Message ID 20200909162946.3428010-1-npiggin@gmail.com
State Accepted
Headers show
Series asm/head: fix power save wakeup register corruption | expand

Commit Message

Nicholas Piggin Sept. 9, 2020, 4:29 p.m. UTC
Power save wakeup handlers can clobber r30 before testing for state
loss and avoiding restoring non-volatile GPRs. Fix this by using r5
instead (and move the register usage to one place, for clarity).

Cc: skiboot-stable@lists.ozlabs.org
Fixes: 8a43bf86b7 ("core/exceptions: implement an exception handler for non-powersave sresets")
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
 asm/head.S | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
diff mbox series

Patch

diff --git a/asm/head.S b/asm/head.S
index 0b81bb51a..7058f734d 100644
--- a/asm/head.S
+++ b/asm/head.S
@@ -114,7 +114,6 @@  hdat_entry:
 	li	%r4,0x200
 	b	_exception
 1:
-	LOAD_IMM64(%r30, SKIBOOT_BASE)
 	cmpdi	%r3,0x1
 	bne	2f		/* state loss */
 	LOAD_IMM32(%r3, reset_resume - __head)
@@ -122,7 +121,8 @@  hdat_entry:
 2:
 	LOAD_IMM32(%r3, reset_wakeup - __head)
 3:
-	add	%r3,%r30,%r3
+	LOAD_IMM64(%r5, SKIBOOT_BASE)
+	add	%r3,%r5,%r3
 	mtctr	%r3
 	li	%r3,0x200
 	bctr
@@ -582,7 +582,6 @@  reset_patch_start:
 	li	%r4,0x100
 	b	_exception + (reset_patch_start - sreset_vector)
 1:
-	LOAD_IMM64(%r30, SKIBOOT_BASE)
 	cmpdi	%r3,0x1
 	bne	2f		/* state loss */
 	LOAD_IMM32(%r3, reset_resume - __head)
@@ -590,7 +589,8 @@  reset_patch_start:
 2:
 	LOAD_IMM32(%r3, reset_wakeup - __head)
 3:
-	add	%r3,%r30,%r3
+	LOAD_IMM64(%r5, SKIBOOT_BASE)
+	add	%r3,%r5,%r3
 	mtctr	%r3
 	li	%r3,0x100
 	bctr