Merge tag 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost
[linux-2.6-microblaze.git] / arch / arm / boot / compressed / head.S
index caa2732..d9cce72 100644 (file)
 
 #include "efi-header.S"
 
+#ifdef __ARMEB__
+#define OF_DT_MAGIC 0xd00dfeed
+#else
+#define OF_DT_MAGIC 0xedfe0dd0
+#endif
+
  AR_CLASS(     .arch   armv7-a )
  M_CLASS(      .arch   armv7-m )
 
                /*
                 * Debug print of the final appended DTB location
                 */
-               .macro dbgadtb, begin, end
+               .macro dbgadtb, begin, size
 #ifdef DEBUG
                kputc   #'D'
                kputc   #'T'
                kputc   #'('
                kputc   #'0'
                kputc   #'x'
-               kphex   \end, 8         /* End of appended DTB */
+               kphex   \size, 8        /* Size of appended DTB */
                kputc   #')'
                kputc   #'\n'
 #endif
                orr     \res, \res, \tmp1, lsl #24
                .endm
 
+               .macro  be32tocpu, val, tmp
+#ifndef __ARMEB__
+               /* convert to little endian */
+               eor     \tmp, \val, \val, ror #16
+               bic     \tmp, \tmp, #0x00ff0000
+               mov     \val, \val, ror #8
+               eor     \val, \val, \tmp, lsr #8
+#endif
+               .endm
+
                .section ".start", "ax"
 /*
  * sort out different calling conventions
@@ -325,11 +341,7 @@ restart:   adr     r0, LC1
  */
 
                ldr     lr, [r6, #0]
-#ifndef __ARMEB__
-               ldr     r1, =0xedfe0dd0         @ sig is 0xd00dfeed big endian
-#else
-               ldr     r1, =0xd00dfeed
-#endif
+               ldr     r1, =OF_DT_MAGIC
                cmp     lr, r1
                bne     dtb_check_done          @ not found
 
@@ -345,13 +357,7 @@ restart:   adr     r0, LC1
 
                /* Get the initial DTB size */
                ldr     r5, [r6, #4]
-#ifndef __ARMEB__
-               /* convert to little endian */
-               eor     r1, r5, r5, ror #16
-               bic     r1, r1, #0x00ff0000
-               mov     r5, r5, ror #8
-               eor     r5, r5, r1, lsr #8
-#endif
+               be32tocpu r5, r1
                dbgadtb r6, r5
                /* 50% DTB growth should be good enough */
                add     r5, r5, r5, lsr #1
@@ -403,13 +409,7 @@ restart:   adr     r0, LC1
 
                /* Get the current DTB size */
                ldr     r5, [r6, #4]
-#ifndef __ARMEB__
-               /* convert r5 (dtb size) to little endian */
-               eor     r1, r5, r5, ror #16
-               bic     r1, r1, #0x00ff0000
-               mov     r5, r5, ror #8
-               eor     r5, r5, r1, lsr #8
-#endif
+               be32tocpu r5, r1
 
                /* preserve 64-bit alignment */
                add     r5, r5, #7
@@ -468,15 +468,10 @@ dtb_check_done:
 
                /*
                 * Compute the address of the hyp vectors after relocation.
-                * This requires some arithmetic since we cannot directly
-                * reference __hyp_stub_vectors in a PC-relative way.
                 * Call __hyp_set_vectors with the new address so that we
                 * can HVC again after the copy.
                 */
-0:             adr     r0, 0b
-               movw    r1, #:lower16:__hyp_stub_vectors - 0b
-               movt    r1, #:upper16:__hyp_stub_vectors - 0b
-               add     r0, r0, r1
+               adr_l   r0, __hyp_stub_vectors
                sub     r0, r0, r5
                add     r0, r0, r10
                bl      __hyp_set_vectors
@@ -627,17 +622,11 @@ not_relocated:    mov     r0, #0
                cmp     r0, #HYP_MODE           @ if not booted in HYP mode...
                bne     __enter_kernel          @ boot kernel directly
 
-               adr     r12, .L__hyp_reentry_vectors_offset
-               ldr     r0, [r12]
-               add     r0, r0, r12
-
+               adr_l   r0, __hyp_reentry_vectors
                bl      __hyp_set_vectors
                __HVC(0)                        @ otherwise bounce to hyp mode
 
                b       .                       @ should never be reached
-
-               .align  2
-.L__hyp_reentry_vectors_offset:        .long   __hyp_reentry_vectors - .
 #else
                b       __enter_kernel
 #endif
@@ -1440,8 +1429,7 @@ ENTRY(efi_enter_kernel)
                mov     r4, r0                  @ preserve image base
                mov     r8, r1                  @ preserve DT pointer
 
- ARM(          adrl    r0, call_cache_fn       )
- THUMB(                adr     r0, call_cache_fn       )
+               adr_l   r0, call_cache_fn
                adr     r1, 0f                  @ clean the region of code we
                bl      cache_clean_flush       @ may run with the MMU off