Fixup register handling in aarch32 reset_handler
authorHeiko Stuebner <heiko@sntech.de>
Tue, 5 Mar 2019 23:29:13 +0000 (00:29 +0100)
committerDimitris Papastamos <dimitris.papastamos@arm.com>
Fri, 8 Mar 2019 15:35:30 +0000 (15:35 +0000)
The BL handover interface stores the bootloader arguments in
registers r9-r12, so when the reset_handler stores the lr pointer
in r10 it clobers one of the arguments.

Adapt to use r8 and adapt the comment about registers allowed
to clober.

I've checked aarch32 reset_handlers and none seem to use higher
registers as far as I can tell.

Fixes: a6f340fe58b9 ("Introduce the new BL handover interface")
Cc: Soby Mathew <soby.mathew@arm.com>
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
lib/cpus/aarch32/cpu_helpers.S

index f37a33d0b57e65a9c3743e9e96b14d8f6b22f3e9..9b5d787ed72b7aee85074157d4115024b84d4c9b 100644 (file)
@@ -22,9 +22,9 @@
         */
        .globl  reset_handler
 func reset_handler
-       mov     r10, lr
+       mov     r8, lr
 
-       /* The plat_reset_handler can clobber r0 - r9 */
+       /* The plat_reset_handler can clobber r0 - r7 */
        bl      plat_reset_handler
 
        /* Get the matching cpu_ops pointer (clobbers: r0 - r5) */
@@ -38,7 +38,7 @@ func reset_handler
        /* Get the cpu_ops reset handler */
        ldr     r1, [r0, #CPU_RESET_FUNC]
        cmp     r1, #0
-       mov     lr, r10
+       mov     lr, r8
        bxne    r1
        bx      lr
 endfunc reset_handler