arm: add 8-byte alignment for ABI compliance before board_init_f
authorHeiko Schocher <hs@denx.de>
Fri, 12 Nov 2010 06:53:55 +0000 (07:53 +0100)
committerWolfgang Denk <wd@denx.de>
Wed, 8 Dec 2010 22:50:09 +0000 (23:50 +0100)
suggested from Daniel Hobi<daniel.hobi@schmid-telecom.ch>

Tested on following boards:
arm1136: qong
armv7: omap3_beagle
arm926ejs: magnesium, tx25

Signed-off-by: Heiko Schocher <hs@denx.de>
cc: Daniel Hobi <daniel.hobi@schmid-telecom.ch>
cc: Albert ARIBAUD <albert.aribaud@free.fr>

15 files changed:
arch/arm/cpu/arm1136/start.S
arch/arm/cpu/arm1176/start.S
arch/arm/cpu/arm720t/start.S
arch/arm/cpu/arm920t/start.S
arch/arm/cpu/arm925t/start.S
arch/arm/cpu/arm926ejs/start.S
arch/arm/cpu/arm946es/start.S
arch/arm/cpu/arm_intcm/start.S
arch/arm/cpu/armv7/start.S
arch/arm/cpu/ixp/start.S
arch/arm/cpu/lh7a40x/start.S
arch/arm/cpu/pxa/start.S
arch/arm/cpu/s3c44b0/start.S
arch/arm/cpu/sa1100/start.S
arch/arm/lib/board.c

index eec8bee7eb2c8c5c55ee1a4a7de1a489548c292c..7b59619c1790b4c587cc72350808731a57b5e806 100644 (file)
@@ -160,6 +160,7 @@ next:
 /* Set stackpointer in internal RAM to call board_init_f */
 call_board_init_f:
        ldr     sp, =(CONFIG_SYS_INIT_SP_ADDR)
+       bic     sp, sp, #7 /* 8-byte alignment for ABI compliance */
        ldr     r0,=0x00000000
 
 #ifdef CONFIG_NAND_SPL
index cd8f01637af621d292bedc0ee2ea1807ecf974fe..ddfefd441cd59c272e6ffea68c5b03288fec4f40 100644 (file)
@@ -223,6 +223,7 @@ skip_tcmdisable:
 /* Set stackpointer in internal RAM to call board_init_f */
 call_board_init_f:
        ldr     sp, =(CONFIG_SYS_INIT_SP_ADDR)
+       bic     sp, sp, #7 /* 8-byte alignment for ABI compliance */
        ldr     r0,=0x00000000
        bl      board_init_f
 
index 46050dab6e9bca9f4b2435274b81725afdabb568..da0e61e6daa559494f9d712b443359bb4d0e24bc 100644 (file)
@@ -138,6 +138,7 @@ reset:
 /* Set stackpointer in internal RAM to call board_init_f */
 call_board_init_f:
        ldr     sp, =(CONFIG_SYS_INIT_SP_ADDR)
+       bic     sp, sp, #7 /* 8-byte alignment for ABI compliance */
        ldr     r0,=0x00000000
        bl      board_init_f
 
index 01edb9bdcbeaf04336a0a0c477c7da986f39221d..69a54cb91f50096090cef591fcddf1cfad39be9e 100644 (file)
@@ -184,6 +184,7 @@ copyex:
 /* Set stackpointer in internal RAM to call board_init_f */
 call_board_init_f:
        ldr     sp, =(CONFIG_SYS_INIT_SP_ADDR)
+       bic     sp, sp, #7 /* 8-byte alignment for ABI compliance */
        ldr     r0,=0x00000000
        bl      board_init_f
 
index ce590a703823fc3e64e8c2658f7dc5aaf7f72552..a9b5e48f8eb0e894a6a636319d51eb2a87718a4b 100644 (file)
@@ -175,6 +175,7 @@ poll1:
 /* Set stackpointer in internal RAM to call board_init_f */
 call_board_init_f:
        ldr     sp, =(CONFIG_SYS_INIT_SP_ADDR)
+       bic     sp, sp, #7 /* 8-byte alignment for ABI compliance */
        ldr     r0,=0x00000000
        bl      board_init_f
 
index 6dcc9b4d6749455382ebb122a67334a950c4c9b8..bf4988d42a24bc7a23d17606e2f05650b8e2697a 100644 (file)
@@ -174,6 +174,7 @@ reset:
 /* Set stackpointer in internal RAM to call board_init_f */
 call_board_init_f:
        ldr     sp, =(CONFIG_SYS_INIT_SP_ADDR)
+       bic     sp, sp, #7 /* 8-byte alignment for ABI compliance */
        ldr     r0,=0x00000000
        bl      board_init_f
 
index f4950f70729a832d58df9150dc0134a8f2678e54..80fee310752c1e5cb28bb0b096d5d78ca581c6c3 100644 (file)
@@ -146,6 +146,7 @@ reset:
 /* Set stackpointer in internal RAM to call board_init_f */
 call_board_init_f:
        ldr     sp, =(CONFIG_SYS_INIT_SP_ADDR)
+       bic     sp, sp, #7 /* 8-byte alignment for ABI compliance */
        ldr     r0,=0x00000000
        bl      board_init_f
 
index fcaba30f586b6896b472eeff5ab4b4f3e2592010..0e8a21b3d9f2c02b1bc17da75f78487c5b605d2c 100644 (file)
@@ -142,6 +142,7 @@ reset:
 /* Set stackpointer in internal RAM to call board_init_f */
 call_board_init_f:
        ldr     sp, =(CONFIG_SYS_INIT_SP_ADDR)
+       bic     sp, sp, #7 /* 8-byte alignment for ABI compliance */
        ldr     r0,=0x00000000
        bl      board_init_f
 
index 2dfdafe9826e9a54b6ad305c8e3878261156af59..de9d1e2f364bf463cdb46d6977cb1d55d5bdf22a 100644 (file)
@@ -142,6 +142,7 @@ next:
 /* Set stackpointer in internal RAM to call board_init_f */
 call_board_init_f:
        ldr     sp, =(CONFIG_SYS_INIT_SP_ADDR)
+       bic     sp, sp, #7 /* 8-byte alignment for ABI compliance */
        ldr     r0,=0x00000000
        bl      board_init_f
 
index d1ab19bf5da25cb4904c5de6a33786bd760f8b4b..75ee6775e283fe1c72ceb9c10cc452c081c580f7 100644 (file)
@@ -268,6 +268,7 @@ reset:
 /* Set stackpointer in internal RAM to call board_init_f */
 call_board_init_f:
        ldr     sp, =(CONFIG_SYS_INIT_SP_ADDR)
+       bic     sp, sp, #7 /* 8-byte alignment for ABI compliance */
        ldr     r0,=0x00000000
        bl      board_init_f
 
index 5cf477b1a36459b614ffe405743ca3b685ea6150..2fa36141940ebc20dc996292b67ef7683f9669ea 100644 (file)
@@ -155,6 +155,7 @@ reset:
 /* Set stackpointer in internal RAM to call board_init_f */
 call_board_init_f:
        ldr     sp, =(CONFIG_SYS_INIT_SP_ADDR)
+       bic     sp, sp, #7 /* 8-byte alignment for ABI compliance */
        ldr     r0,=0x00000000
        bl      board_init_f
 
index ae358a56e61f816d4c87930a022f07c5e7ba48e8..66479cb9574d3bfffd136b77a41feff618f8d956 100644 (file)
@@ -220,6 +220,7 @@ zerojmp:
 /* Set stackpointer in internal RAM to call board_init_f */
 call_board_init_f:
        ldr     sp, =(CONFIG_SYS_INIT_SP_ADDR)
+       bic     sp, sp, #7 /* 8-byte alignment for ABI compliance */
        ldr     r0,=0x00000000
        bl      board_init_f
 
index 8c7100c2bf756c49c86ceb053bb1fe6d25320a3b..5559431551dea5ca74e6b4f804c4470107e5026f 100644 (file)
@@ -127,6 +127,7 @@ reset:
 /* Set stackpointer in internal RAM to call board_init_f */
 call_board_init_f:
        ldr     sp, =(CONFIG_SYS_INIT_SP_ADDR)
+       bic     sp, sp, #7 /* 8-byte alignment for ABI compliance */
        ldr     r0,=0x00000000
        bl      board_init_f
 
index 36d44da1f83819d6695bdb396d8b356b13a1ca2f..4fb0b8b415c9db9cfa4987931320bb511b742917 100644 (file)
@@ -131,6 +131,7 @@ reset:
 /* Set stackpointer in internal RAM to call board_init_f */
 call_board_init_f:
        ldr     sp, =(CONFIG_SYS_INIT_SP_ADDR)
+       bic     sp, sp, #7 /* 8-byte alignment for ABI compliance */
        ldr     r0,=0x00000000
        bl      board_init_f
 
index 1fd5f8362f7a3e1a076c44e9f554e6c0297dfdb0..96c0e301616e4ff8c3e64dbfa3bbe1e7c371187f 100644 (file)
@@ -276,7 +276,7 @@ void board_init_f (ulong bootflag)
        ulong addr, addr_sp;
 
        /* Pointer is writable since we allocated a register for it */
-       gd = (gd_t *) (CONFIG_SYS_INIT_SP_ADDR);
+       gd = (gd_t *) ((CONFIG_SYS_INIT_SP_ADDR) & ~0x07);
        /* compiler optimization barrier needed for GCC >= 3.4 */
        __asm__ __volatile__("": : :"memory");