Commit 12ebe5ca authored by Stefan Agner's avatar Stefan Agner Committed by Greg Kroah-Hartman

ARM: 8383/1: nommu: avoid deprecated source register on mov

commit 970d96f9 upstream.

In Thumb2 mode, the stack register r13 is deprecated if the
destination register is the program counter (r15). Similar to
head.S, head-nommu.S uses r13 to store the return address used
after configuring the CPU's CP15 register. However, since we do
not enable a MMU, there will be no address switch and it is
possible to use branch with link instruction to call
__after_proc_init.

Avoid using r13 completely by using bl to call __after_proc_init
and get rid of __secondary_switched.

Beside removing unnecessary complexity, this also fixes a
compiler warning when compiling a !MMU kernel:
Warning: Use of r13 as a source register is deprecated when r15
is the destination register.
Tested-by: default avatarMaxime Coquelin <mcoquelin.stm32@gmail.com>
Signed-off-by: default avatarStefan Agner <stefan@agner.ch>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 39541d00
...@@ -77,13 +77,12 @@ ENTRY(stext) ...@@ -77,13 +77,12 @@ ENTRY(stext)
orr r6, r6, #(1 << MPU_RSR_EN) @ Set region enabled bit orr r6, r6, #(1 << MPU_RSR_EN) @ Set region enabled bit
bl __setup_mpu bl __setup_mpu
#endif #endif
ldr r13, =__mmap_switched @ address to jump to after
@ initialising sctlr
adr lr, BSYM(1f) @ return (PIC) address adr lr, BSYM(1f) @ return (PIC) address
ARM( add pc, r10, #PROCINFO_INITFUNC ) ARM( add pc, r10, #PROCINFO_INITFUNC )
THUMB( add r12, r10, #PROCINFO_INITFUNC ) THUMB( add r12, r10, #PROCINFO_INITFUNC )
THUMB( ret r12 ) THUMB( ret r12 )
1: b __after_proc_init 1: bl __after_proc_init
b __mmap_switched
ENDPROC(stext) ENDPROC(stext)
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
...@@ -106,8 +105,7 @@ ENTRY(secondary_startup) ...@@ -106,8 +105,7 @@ ENTRY(secondary_startup)
movs r10, r5 @ invalid processor? movs r10, r5 @ invalid processor?
beq __error_p @ yes, error 'p' beq __error_p @ yes, error 'p'
adr r4, __secondary_data ldr r7, __secondary_data
ldmia r4, {r7, r12}
#ifdef CONFIG_ARM_MPU #ifdef CONFIG_ARM_MPU
/* Use MPU region info supplied by __cpu_up */ /* Use MPU region info supplied by __cpu_up */
...@@ -115,23 +113,19 @@ ENTRY(secondary_startup) ...@@ -115,23 +113,19 @@ ENTRY(secondary_startup)
bl __setup_mpu @ Initialize the MPU bl __setup_mpu @ Initialize the MPU
#endif #endif
adr lr, BSYM(__after_proc_init) @ return address adr lr, BSYM(1f) @ return (PIC) address
mov r13, r12 @ __secondary_switched address
ARM( add pc, r10, #PROCINFO_INITFUNC ) ARM( add pc, r10, #PROCINFO_INITFUNC )
THUMB( add r12, r10, #PROCINFO_INITFUNC ) THUMB( add r12, r10, #PROCINFO_INITFUNC )
THUMB( ret r12 ) THUMB( ret r12 )
ENDPROC(secondary_startup) 1: bl __after_proc_init
ENTRY(__secondary_switched)
ldr sp, [r7, #8] @ set up the stack pointer ldr sp, [r7, #8] @ set up the stack pointer
mov fp, #0 mov fp, #0
b secondary_start_kernel b secondary_start_kernel
ENDPROC(__secondary_switched) ENDPROC(secondary_startup)
.type __secondary_data, %object .type __secondary_data, %object
__secondary_data: __secondary_data:
.long secondary_data .long secondary_data
.long __secondary_switched
#endif /* CONFIG_SMP */ #endif /* CONFIG_SMP */
/* /*
...@@ -164,7 +158,7 @@ __after_proc_init: ...@@ -164,7 +158,7 @@ __after_proc_init:
#endif #endif
mcr p15, 0, r0, c1, c0, 0 @ write control reg mcr p15, 0, r0, c1, c0, 0 @ write control reg
#endif /* CONFIG_CPU_CP15 */ #endif /* CONFIG_CPU_CP15 */
ret r13 ret lr
ENDPROC(__after_proc_init) ENDPROC(__after_proc_init)
.ltorg .ltorg
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment