]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* grub-core/kern/arm/cache.S: Don't switch back to ARM mode when
authorVladimir Serbinenko <phcoder@gmail.com>
Sat, 16 Nov 2013 16:37:06 +0000 (17:37 +0100)
committerVladimir Serbinenko <phcoder@gmail.com>
Sat, 16 Nov 2013 16:37:06 +0000 (17:37 +0100)
compiling to thumb2.
* grub-core/kern/arm/cache_armv7.S: Likewise.
* grub-core/lib/arm/setjmp.S: Likewise.

ChangeLog
grub-core/kern/arm/cache.S
grub-core/kern/arm/cache_armv7.S
grub-core/lib/arm/setjmp.S

index 7e09c4d1285fbcae91000b302a9c94f916561bd1..9b0a85937939959c156d0704d8d78f15092ac740 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2013-11-16  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * grub-core/kern/arm/cache.S: Don't switch back to ARM mode when
+       compiling to thumb2.
+       * grub-core/kern/arm/cache_armv7.S: Likewise.
+       * grub-core/lib/arm/setjmp.S: Likewise.
+
 2013-11-16  Leif Lindholm <leif.lindholm@linaro.org>
 
        * grub-core/kern/arm/uboot/startup.S: delete superflouous save of r8
index 8522d24705b3cb147b85aba7d7b758ec40ee3778..2ad774d9009362a8bbccb2cc30dcf6226e1ab5b8 100644 (file)
        .file   "cache.S"
        .text
        .syntax unified
+#if !defined (__thumb2__) || !defined (ARMV7)
        .arm
+#else
+       .thumb
+#endif
+
 #if !defined (ARMV6) && !defined (ARMV7)
 # error Unsupported architecture version!
 #endif
index 0c16b1047134efd146229eed26a7754329f4ae09..aa42fad81ea71fcacda63ea5022a327549cda823 100644 (file)
        .file   "cache_armv7.S"
        .text
        .syntax unified
-       .arm
+#if !defined (__thumb2__)
        .arch   armv7a
+       .arm
+#else
+       .arch   armv7
+       .thumb
+#endif
 # define DMB   dmb
 # define DSB   dsb
 # define ISB   isb
@@ -58,11 +63,17 @@ clean_invalidate_dcache:
        @ read current cache information
        mrc     p15, 1, r8, c0, c0, 0   @ Read CCSIDR
        lsr     r3, r8, #13             @ Number of sets -1
-       ldr     r9, =0x3fff
-       and     r3, r3, r9
+
+       @ Keep only 14 bits of r3
+       lsl     r3, r3, #18
+       lsr     r3, r3, #18
+
        lsr     r4, r8, #3              @ Number of ways -1
-       ldr     r9, =0x1ff
-       and     r4, r4, r9
+
+       @ Keep only 9  bits of r4
+       lsl     r4, r4, #23
+       lsr     r4, r4, #23
+
        and     r7, r8, #7              @ log2(line size in words) - 2
        add     r7, r7, #2              @  adjust
        mov     r8, #1
index 4f15679461bd1bb5b8443b530f2c5ca996a708b2..a5373d3a9352bf67ca6d16e6a4ef57c5cb5f530d 100644 (file)
 GRUB_MOD_LICENSE "GPLv3+"
 
        .syntax unified
+#if !defined (__thumb2__)
        .arm
+#else
+       .thumb
+#endif
 
        .text
 
@@ -32,7 +36,8 @@ GRUB_MOD_LICENSE "GPLv3+"
  * int grub_setjmp (grub_jmp_buf env)
  */
 FUNCTION(grub_setjmp)
-       stm     r0, { r4-r11, sp, lr }
+       mov     r12, sp
+       stm     r0, { r4-r12, lr }
        mov     r0, #0
        bx      lr
 
@@ -40,7 +45,9 @@ FUNCTION(grub_setjmp)
  * int grub_longjmp (grub_jmp_buf env, int val)
  */
 FUNCTION(grub_longjmp)
-       ldm     r0, { r4-r11, sp, lr }
+       ldm     r0, { r4-r12, lr }
+       mov     sp, r12
        movs    r0, r1
+       it      eq
        moveq   r0, #1
        bx      lr