.cprestore is removed as we don't except Position Independent
zboot ELF.

.noreorder is also removed and rest instructions is massaged
to improve readability.

t9 register is used to indirect jump as MIPS ABI requirement.

Reported-by: Paul Cercueil <p...@crapouillou.net>
Signed-off-by: Jiaxun Yang <jiaxun.y...@flygoat.com>
---
 arch/mips/boot/compressed/head.S | 17 +++++++----------
 1 file changed, 7 insertions(+), 10 deletions(-)

diff --git a/arch/mips/boot/compressed/head.S b/arch/mips/boot/compressed/head.S
index 409cb483a9ff..977218c90bc8 100644
--- a/arch/mips/boot/compressed/head.S
+++ b/arch/mips/boot/compressed/head.S
@@ -15,8 +15,6 @@
 #include <asm/asm.h>
 #include <asm/regdef.h>
 
-       .set noreorder
-       .cprestore
        LEAF(start)
 start:
        /* Save boot rom start args */
@@ -35,21 +33,20 @@ start:
        PTR_LA  a0, (.heap)          /* heap address */
        PTR_LA  sp, (.stack + 8192)  /* stack address */
 
-       PTR_LA  ra, 2f
-       PTR_LA  k0, decompress_kernel
-       jr      k0
-        nop
+       PTR_LA  t9, decompress_kernel
+       jalr    t9
+
 2:
        move    a0, s0
        move    a1, s1
        move    a2, s2
        move    a3, s3
-       PTR_LI  k0, KERNEL_ENTRY
-       jr      k0
-        nop
+       PTR_LI  t9, KERNEL_ENTRY
+       jalr    t9
+
 3:
        b       3b
-        nop
+
        END(start)
 
        .comm .heap,BOOT_HEAP_SIZE,4
-- 
2.29.2

Reply via email to