]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - arch/arm/kernel/head-common.S
Thumb-2: Implementation of the unified start-up and exceptions code
[net-next-2.6.git] / arch / arm / kernel / head-common.S
index dbfaef07a1f432eb523c877e3df93dac8d62e358..93ad576b2d74b311331542f6a79fc4054a0306d8 100644 (file)
@@ -52,7 +52,9 @@ __mmap_switched:
        strcc   fp, [r6],#4
        bcc     1b
 
-       ldmia   r3, {r4, r5, r6, r7, sp}
+ ARM(  ldmia   r3, {r4, r5, r6, r7, sp})
+ THUMB(        ldmia   r3, {r4, r5, r6, r7}    )
+ THUMB(        ldr     sp, [r3, #16]           )
        str     r9, [r4]                        @ Save processor ID
        str     r1, [r5]                        @ Save machine type
        str     r2, [r6]                        @ Save atags pointer
@@ -156,7 +158,8 @@ ENDPROC(__error)
  */
 __lookup_processor_type:
        adr     r3, 3f
-       ldmda   r3, {r5 - r7}
+       ldmia   r3, {r5 - r7}
+       add     r3, r3, #8
        sub     r3, r3, r7                      @ get offset between virt&phys
        add     r5, r5, r3                      @ convert virt addresses to
        add     r6, r6, r3                      @ physical address space
@@ -187,9 +190,9 @@ ENDPROC(lookup_processor_type)
  * more information about the __proc_info and __arch_info structures.
  */
        .align  2
-       .long   __proc_info_begin
+3:     .long   __proc_info_begin
        .long   __proc_info_end
-3:     .long   .
+4:     .long   .
        .long   __arch_info_begin
        .long   __arch_info_end
 
@@ -205,7 +208,7 @@ ENDPROC(lookup_processor_type)
  *  r5 = mach_info pointer in physical address space
  */
 __lookup_machine_type:
-       adr     r3, 3b
+       adr     r3, 4b
        ldmia   r3, {r4, r5, r6}
        sub     r3, r3, r4                      @ get offset between virt&phys
        add     r5, r5, r3                      @ convert virt addresses to