ARM: head-common.S: use PC-relative insn sequence for idmap creation
authorArd Biesheuvel <ardb@kernel.org>
Mon, 14 Sep 2020 08:25:16 +0000 (11:25 +0300)
committerPhil Elwell <phil@raspberrypi.com>
Thu, 28 Oct 2021 11:20:34 +0000 (12:20 +0100)
commit 172c34c9ff0144c3e1d96a9b54d6fecfe5d17c3c upstream.

Replace the open coded PC relative offset calculations involving
__turn_mmu_on and __turn_mmu_on_end with a pair of adr_l invocations.
This removes some open coded arithmetic involving virtual addresses,
avoids literal pools on v7+, and slightly reduces the footprint of the
code.

Reviewed-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
arch/arm/kernel/head.S

index dbc409a..205881b 100644 (file)
@@ -224,11 +224,8 @@ __create_page_tables:
         * Create identity mapping to cater for __enable_mmu.
         * This identity mapping will be removed by paging_init().
         */
-       adr     r0, __turn_mmu_on_loc
-       ldmia   r0, {r3, r5, r6}
-       sub     r0, r0, r3                      @ virt->phys offset
-       add     r5, r5, r0                      @ phys __turn_mmu_on
-       add     r6, r6, r0                      @ phys __turn_mmu_on_end
+       adr_l   r5, __turn_mmu_on               @ _pa(__turn_mmu_on)
+       adr_l   r6, __turn_mmu_on_end           @ _pa(__turn_mmu_on_end)
        mov     r5, r5, lsr #SECTION_SHIFT
        mov     r6, r6, lsr #SECTION_SHIFT
 
@@ -350,11 +347,6 @@ __create_page_tables:
        ret     lr
 ENDPROC(__create_page_tables)
        .ltorg
-       .align
-__turn_mmu_on_loc:
-       .long   .
-       .long   __turn_mmu_on
-       .long   __turn_mmu_on_end
 
 #if defined(CONFIG_SMP)
        .text