diff options
Diffstat (limited to 'arch/arm/kernel/head-common.S')
-rw-r--r-- | arch/arm/kernel/head-common.S | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/arch/arm/kernel/head-common.S b/arch/arm/kernel/head-common.S index 991952c644d1..93ad576b2d74 100644 --- a/arch/arm/kernel/head-common.S +++ b/arch/arm/kernel/head-common.S | |||
@@ -14,6 +14,7 @@ | |||
14 | #define ATAG_CORE 0x54410001 | 14 | #define ATAG_CORE 0x54410001 |
15 | #define ATAG_CORE_SIZE ((2*4 + 3*4) >> 2) | 15 | #define ATAG_CORE_SIZE ((2*4 + 3*4) >> 2) |
16 | 16 | ||
17 | .align 2 | ||
17 | .type __switch_data, %object | 18 | .type __switch_data, %object |
18 | __switch_data: | 19 | __switch_data: |
19 | .long __mmap_switched | 20 | .long __mmap_switched |
@@ -51,7 +52,9 @@ __mmap_switched: | |||
51 | strcc fp, [r6],#4 | 52 | strcc fp, [r6],#4 |
52 | bcc 1b | 53 | bcc 1b |
53 | 54 | ||
54 | 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] ) | ||
55 | str r9, [r4] @ Save processor ID | 58 | str r9, [r4] @ Save processor ID |
56 | str r1, [r5] @ Save machine type | 59 | str r1, [r5] @ Save machine type |
57 | str r2, [r6] @ Save atags pointer | 60 | str r2, [r6] @ Save atags pointer |
@@ -155,7 +158,8 @@ ENDPROC(__error) | |||
155 | */ | 158 | */ |
156 | __lookup_processor_type: | 159 | __lookup_processor_type: |
157 | adr r3, 3f | 160 | adr r3, 3f |
158 | ldmda r3, {r5 - r7} | 161 | ldmia r3, {r5 - r7} |
162 | add r3, r3, #8 | ||
159 | sub r3, r3, r7 @ get offset between virt&phys | 163 | sub r3, r3, r7 @ get offset between virt&phys |
160 | add r5, r5, r3 @ convert virt addresses to | 164 | add r5, r5, r3 @ convert virt addresses to |
161 | add r6, r6, r3 @ physical address space | 165 | add r6, r6, r3 @ physical address space |
@@ -185,9 +189,10 @@ ENDPROC(lookup_processor_type) | |||
185 | * Look in <asm/procinfo.h> and arch/arm/kernel/arch.[ch] for | 189 | * Look in <asm/procinfo.h> and arch/arm/kernel/arch.[ch] for |
186 | * more information about the __proc_info and __arch_info structures. | 190 | * more information about the __proc_info and __arch_info structures. |
187 | */ | 191 | */ |
188 | .long __proc_info_begin | 192 | .align 2 |
193 | 3: .long __proc_info_begin | ||
189 | .long __proc_info_end | 194 | .long __proc_info_end |
190 | 3: .long . | 195 | 4: .long . |
191 | .long __arch_info_begin | 196 | .long __arch_info_begin |
192 | .long __arch_info_end | 197 | .long __arch_info_end |
193 | 198 | ||
@@ -203,7 +208,7 @@ ENDPROC(lookup_processor_type) | |||
203 | * r5 = mach_info pointer in physical address space | 208 | * r5 = mach_info pointer in physical address space |
204 | */ | 209 | */ |
205 | __lookup_machine_type: | 210 | __lookup_machine_type: |
206 | adr r3, 3b | 211 | adr r3, 4b |
207 | ldmia r3, {r4, r5, r6} | 212 | ldmia r3, {r4, r5, r6} |
208 | sub r3, r3, r4 @ get offset between virt&phys | 213 | sub r3, r3, r4 @ get offset between virt&phys |
209 | add r5, r5, r3 @ convert virt addresses to | 214 | add r5, r5, r3 @ convert virt addresses to |