summaryrefslogtreecommitdiff
path: root/arch/powerpc/boot/opal-calls.S
diff options
context:
space:
mode:
authorOliver O'Halloran <oohall@gmail.com>2016-11-23 05:55:13 +0300
committerMichael Ellerman <mpe@ellerman.id.au>2016-11-24 09:34:01 +0300
commita1ff57416af9a7971a801d553cd53edd8afb28d6 (patch)
tree531cebbcf7a6788ca1e140a93e5923ec117ffd5c /arch/powerpc/boot/opal-calls.S
parent9e5f68842276672a05737c23e407250f776cbf35 (diff)
downloadlinux-a1ff57416af9a7971a801d553cd53edd8afb28d6.tar.xz
powerpc/boot: Fix the early OPAL console wrappers
When configured with CONFIG_PPC_EARLY_DEBUG_OPAL=y the kernel expects the OPAL entry and base addresses to be passed in r8 and r9 respectively. Currently the wrapper does not attempt to restore these values before entering the decompressed kernel which causes the kernel to branch into whatever happens to be in r9 when doing a write to the OPAL console in early boot. This patch adds a platform_ops hook that can be used to branch into the new kernel. The OPAL console driver patches this at runtime so that if the console is used it will be restored just prior to entering the kernel. Fixes: 656ad58ef19e ("powerpc/boot: Add OPAL console to epapr wrappers") Cc: stable@vger.kernel.org # v4.8+ Signed-off-by: Oliver O'Halloran <oohall@gmail.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Diffstat (limited to 'arch/powerpc/boot/opal-calls.S')
-rw-r--r--arch/powerpc/boot/opal-calls.S13
1 files changed, 13 insertions, 0 deletions
diff --git a/arch/powerpc/boot/opal-calls.S b/arch/powerpc/boot/opal-calls.S
index ff2f1b97bc53..2a99fc9a3ccf 100644
--- a/arch/powerpc/boot/opal-calls.S
+++ b/arch/powerpc/boot/opal-calls.S
@@ -12,6 +12,19 @@
.text
+ .globl opal_kentry
+opal_kentry:
+ /* r3 is the fdt ptr */
+ mtctr r4
+ li r4, 0
+ li r5, 0
+ li r6, 0
+ li r7, 0
+ ld r11,opal@got(r2)
+ ld r8,0(r11)
+ ld r9,8(r11)
+ bctr
+
#define OPAL_CALL(name, token) \
.globl name; \
name: \