aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/kernel/head-common.S
diff options
context:
space:
mode:
authorCatalin Marinas <catalin.marinas@arm.com>2009-07-24 07:32:54 -0400
committerCatalin Marinas <catalin.marinas@arm.com>2009-07-24 07:32:54 -0400
commitb86040a59feb255a8193173caa4d5199464433d5 (patch)
tree89c07450eabc2abb88bb4d6e32d61fd3855f000e /arch/arm/kernel/head-common.S
parent0becb088501886f37ade38762c8eaaf4263572cc (diff)
Thumb-2: Implementation of the unified start-up and exceptions code
This patch implements the ARM/Thumb-2 unified kernel start-up and exception handling code. Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Diffstat (limited to 'arch/arm/kernel/head-common.S')
-rw-r--r--arch/arm/kernel/head-common.S13
1 files changed, 8 insertions, 5 deletions
diff --git a/arch/arm/kernel/head-common.S b/arch/arm/kernel/head-common.S
index dbfaef07a1f4..93ad576b2d74 100644
--- a/arch/arm/kernel/head-common.S
+++ b/arch/arm/kernel/head-common.S
@@ -52,7 +52,9 @@ __mmap_switched:
52 strcc fp, [r6],#4 52 strcc fp, [r6],#4
53 bcc 1b 53 bcc 1b
54 54
55 ldmia r3, {r4, r5, r6, r7, sp} 55 ARM( ldmia r3, {r4, r5, r6, r7, sp})
56 THUMB( ldmia r3, {r4, r5, r6, r7} )
57 THUMB( ldr sp, [r3, #16] )
56 str r9, [r4] @ Save processor ID 58 str r9, [r4] @ Save processor ID
57 str r1, [r5] @ Save machine type 59 str r1, [r5] @ Save machine type
58 str r2, [r6] @ Save atags pointer 60 str r2, [r6] @ Save atags pointer
@@ -156,7 +158,8 @@ ENDPROC(__error)
156 */ 158 */
157__lookup_processor_type: 159__lookup_processor_type:
158 adr r3, 3f 160 adr r3, 3f
159 ldmda r3, {r5 - r7} 161 ldmia r3, {r5 - r7}
162 add r3, r3, #8
160 sub r3, r3, r7 @ get offset between virt&phys 163 sub r3, r3, r7 @ get offset between virt&phys
161 add r5, r5, r3 @ convert virt addresses to 164 add r5, r5, r3 @ convert virt addresses to
162 add r6, r6, r3 @ physical address space 165 add r6, r6, r3 @ physical address space
@@ -187,9 +190,9 @@ ENDPROC(lookup_processor_type)
187 * more information about the __proc_info and __arch_info structures. 190 * more information about the __proc_info and __arch_info structures.
188 */ 191 */
189 .align 2 192 .align 2
190 .long __proc_info_begin 1933: .long __proc_info_begin
191 .long __proc_info_end 194 .long __proc_info_end
1923: .long . 1954: .long .
193 .long __arch_info_begin 196 .long __arch_info_begin
194 .long __arch_info_end 197 .long __arch_info_end
195 198
@@ -205,7 +208,7 @@ ENDPROC(lookup_processor_type)
205 * r5 = mach_info pointer in physical address space 208 * r5 = mach_info pointer in physical address space
206 */ 209 */
207__lookup_machine_type: 210__lookup_machine_type:
208 adr r3, 3b 211 adr r3, 4b
209 ldmia r3, {r4, r5, r6} 212 ldmia r3, {r4, r5, r6}
210 sub r3, r3, r4 @ get offset between virt&phys 213 sub r3, r3, r4 @ get offset between virt&phys
211 add r5, r5, r3 @ convert virt addresses to 214 add r5, r5, r3 @ convert virt addresses to