ARM: head-common.S: use PC-relative insn sequence for __proc_info
authorArd Biesheuvel <ardb@kernel.org>
Mon, 14 Sep 2020 08:25:06 +0000 (11:25 +0300)
committerArd Biesheuvel <ardb@kernel.org>
Wed, 28 Oct 2020 16:05:39 +0000 (17:05 +0100)
Replace the open coded PC relative offset calculations 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-common.S

index 4a39828..9a5ab6c 100644 (file)
@@ -170,11 +170,12 @@ ENDPROC(lookup_processor_type)
  *     r9 = cpuid (preserved)
  */
 __lookup_processor_type:
-       adr     r3, __lookup_processor_type_data
-       ldmia   r3, {r4 - r6}
-       sub     r3, r3, r4                      @ get offset between virt&phys
-       add     r5, r5, r3                      @ convert virt addresses to
-       add     r6, r6, r3                      @ physical address space
+       /*
+        * Look in <asm/procinfo.h> for information about the __proc_info
+        * structure.
+        */
+       adr_l   r5, __proc_info_begin
+       adr_l   r6, __proc_info_end
 1:     ldmia   r5, {r3, r4}                    @ value, mask
        and     r4, r4, r9                      @ mask wanted bits
        teq     r3, r4
@@ -186,17 +187,6 @@ __lookup_processor_type:
 2:     ret     lr
 ENDPROC(__lookup_processor_type)
 
-/*
- * Look in <asm/procinfo.h> for information about the __proc_info structure.
- */
-       .align  2
-       .type   __lookup_processor_type_data, %object
-__lookup_processor_type_data:
-       .long   .
-       .long   __proc_info_begin
-       .long   __proc_info_end
-       .size   __lookup_processor_type_data, . - __lookup_processor_type_data
-
 __error_lpae:
 #ifdef CONFIG_DEBUG_LL
        adr     r0, str_lpae