ARM: head-common.S: use PC-relative insn sequence for __proc_info
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>
This commit is contained in:
parent
67e3f828bd
commit
62c4a2e202
@ -170,11 +170,12 @@ ENDPROC(lookup_processor_type)
|
|||||||
* r9 = cpuid (preserved)
|
* r9 = cpuid (preserved)
|
||||||
*/
|
*/
|
||||||
__lookup_processor_type:
|
__lookup_processor_type:
|
||||||
adr r3, __lookup_processor_type_data
|
/*
|
||||||
ldmia r3, {r4 - r6}
|
* Look in <asm/procinfo.h> for information about the __proc_info
|
||||||
sub r3, r3, r4 @ get offset between virt&phys
|
* structure.
|
||||||
add r5, r5, r3 @ convert virt addresses to
|
*/
|
||||||
add r6, r6, r3 @ physical address space
|
adr_l r5, __proc_info_begin
|
||||||
|
adr_l r6, __proc_info_end
|
||||||
1: ldmia r5, {r3, r4} @ value, mask
|
1: ldmia r5, {r3, r4} @ value, mask
|
||||||
and r4, r4, r9 @ mask wanted bits
|
and r4, r4, r9 @ mask wanted bits
|
||||||
teq r3, r4
|
teq r3, r4
|
||||||
@ -186,17 +187,6 @@ __lookup_processor_type:
|
|||||||
2: ret lr
|
2: ret lr
|
||||||
ENDPROC(__lookup_processor_type)
|
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:
|
__error_lpae:
|
||||||
#ifdef CONFIG_DEBUG_LL
|
#ifdef CONFIG_DEBUG_LL
|
||||||
adr r0, str_lpae
|
adr r0, str_lpae
|
||||||
|
Loading…
x
Reference in New Issue
Block a user