Hi,
i am porting u-boot to a new device:
https://handhelds.wiki/R36S_Handheld_Wiki

Given the similarity with ODROID_GO2, i've based my efforts on it and
all goes fine up to the very last step: jumping from u-boot to linux.

In the file arch/arm/cpu/armv8/transition.S there is a call to
armv8_switch_to_el2_m which is supposed to jump into linux, but it
doesn't.

I've added some debug prints around it (see patch below) and it prints
the first message:
"before switch from EL3 to EL2"
but it does not print either of the messages after.

As another test, i've tried to replace
armv8_switch_to_el2_m x4, x5, x6
to
br x4
and then it indeed switches to linux, but then linux crashes, prints a
trace and reboots, that is, it doesn't like running from EL3.

Please, can somebody help here?

Regards,
  Vicente.

--- a/arch/arm/include/asm/macro.h
+++ b/arch/arm/include/asm/macro.h
@@ -209,6 +209,7 @@
     msr    spsr_el3, \tmp
     msr    elr_el3, \ep
     eret
+    b    2f

 1:
     /*
@@ -228,6 +229,7 @@
     msr    spsr_el3, \tmp
     msr     elr_el3, \ep
     eret
+2:
 .endm

 /*
--- a/arch/arm/cpu/armv8/transition.S
+++ b/arch/arm/cpu/armv8/transition.S
@@ -36,8 +36,46 @@
      * address saved in x4.
      */
     br x4
-1:    armv8_switch_to_el2_m x4, x5, x6
+1:
+
+    adr x8, msg_before
+    bl uart5_asciiz
+
+    adr x8, switch_to_el2_ok
+    armv8_switch_to_el2_m x8, x5, x6
+
+    adr x8, msg_aft_ko
+    bl uart5_asciiz
+
+switch_to_el2_ko:
+    b switch_to_el2_ko
+
+switch_to_el2_ok:
+    adr x8, msg_aft_ok
+    bl uart5_asciiz
+
+    br x4
+
+msg_before: .asciz "before switch from EL3 to EL2\n"
+msg_aft_ko: .asciz "switch to EL2 failed\n"
+msg_aft_ok: .asciz "now running in EL2\n"
 ENDPROC(armv8_switch_to_el2)
+
+ENTRY(uart5_asciiz)
+    mov  x10, #0x8000
+    movk x10, #0xFF17, lsl #16
+2:
+    ldrb w9, [x8]
+    cbnz w9, 3f
+    ret
+3:
+    add  x8, x8, #1
+4:
+    ldr  w11, [x10, #20] // [UART5_LSR]
+    tbz  w11, #5, 4b     // while (!trans_hold_reg_empty)
+    str  w9, [x10]       // [UART5_THR] <= *str++;
+    b    2b
+ENDPROC(uart5_asciiz)
 .popsection

 .pushsection .text.armv8_switch_to_el1, "ax"

Reply via email to