The next change will load the kernels at different addresses depending
on test options, so this needs to be reverted back to dynamic
discovery.

Acked-by: Thomas Huth <th...@redhat.com>
Signed-off-by: Nicholas Piggin <npig...@gmail.com>
---
 powerpc/cstart64.S | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/powerpc/cstart64.S b/powerpc/cstart64.S
index b7514100..e18ae9a2 100644
--- a/powerpc/cstart64.S
+++ b/powerpc/cstart64.S
@@ -33,9 +33,14 @@ start:
         * We were loaded at QEMU's kernel load address, but we're not
         * allowed to link there due to how QEMU deals with linker VMAs,
         * so we just linked at zero. This means the first thing to do is
-        * to find our stack and toc, and then do a relocate.
+        * to find our stack and toc, and then do a relocate. powernv and
+        * pseries load addresses are not the same, so find the address
+        * dynamically:
         */
-       LOAD_REG_IMMEDIATE(r31, SPAPR_KERNEL_LOAD_ADDR)
+       bl      0f
+0:     mflr    r31
+       subi    r31, r31, 0b - start    /* QEMU's kernel load address */
+
        ld      r1, (p_stack - start)(r31)
        ld      r2, (p_toc - start)(r31)
        add     r1, r1, r31
@@ -114,8 +119,11 @@ p_toc:             .llong  tocptr
 p_dyn:         .llong  dynamic_start
 
 .text
+start_text:
 .align 3
+p_toc_text:    .llong  tocptr
 
+.align 3
 .globl hcall
 hcall:
        sc      1
@@ -185,9 +193,10 @@ call_handler:
        std     r0,_CCR(r1)
 
        /* restore TOC pointer */
-
-       LOAD_REG_IMMEDIATE(r31, SPAPR_KERNEL_LOAD_ADDR)
-       ld      r2, (p_toc - start)(r31)
+       bl      0f
+0:     mflr    r31
+       subi    r31, r31, 0b - start_text
+       ld      r2, (p_toc_text - start_text)(r31)
 
        /* FIXME: build stack frame */
 
-- 
2.40.1

Reply via email to