summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Chou <thomas@wytron.com.tw>2015-09-07 08:57:14 +0800
committerThomas Chou <thomas@wytron.com.tw>2015-10-23 07:28:37 +0800
commit4192b8c35851afd2ac0731b851711fc12ffe888d (patch)
treebb66ea99156c693a7f0dc2ad9bd548e1318dd34a
parentb6c180928c3c7c9efbdc5eb1b468c450c877abdf (diff)
downloadu-boot-4192b8c35851afd2ac0731b851711fc12ffe888d.tar.gz
u-boot-4192b8c35851afd2ac0731b851711fc12ffe888d.tar.bz2
u-boot-4192b8c35851afd2ac0731b851711fc12ffe888d.zip
nios2: BSS should be cleared only after board_init_f
As dtb in u-boot-dtb.bin overlapped the BSS section, we should delay the clearing of BSS until dtb is relocated in board_init_f(). Signed-off-by: Thomas Chou <thomas@wytron.com.tw> Acked-by: Marek Vasut <marex@denx.de>
-rw-r--r--arch/nios2/cpu/start.S30
1 files changed, 16 insertions, 14 deletions
diff --git a/arch/nios2/cpu/start.S b/arch/nios2/cpu/start.S
index 6af9b4e943..9e440c2136 100644
--- a/arch/nios2/cpu/start.S
+++ b/arch/nios2/cpu/start.S
@@ -82,20 +82,6 @@ _cur: movhi r5, %hi(_cur - _start)
bne r5, r6, 2b
3:
- /* ZERO BSS/SBSS -- bss and sbss are assumed to be adjacent
- * and between __bss_start and __bss_end.
- */
- movhi r5, %hi(__bss_start)
- ori r5, r5, %lo(__bss_start)
- movhi r6, %hi(__bss_end)
- ori r6, r6, %lo(__bss_end)
- beq r5, r6, 5f
-
-4: stwio r0, 0(r5)
- addi r5, r5, 4
- bne r5, r6, 4b
-5:
-
/* JUMP TO RELOC ADDR */
movhi r4, %hi(_reloc)
ori r4, r4, %lo(_reloc)
@@ -167,6 +153,22 @@ _reloc:
relocate_code:
mov sp, r4 /* Set the new sp */
mov r4, r5
+
+ /*
+ * ZERO BSS/SBSS -- bss and sbss are assumed to be adjacent
+ * and between __bss_start and __bss_end.
+ */
+ movhi r5, %hi(__bss_start)
+ ori r5, r5, %lo(__bss_start)
+ movhi r6, %hi(__bss_end)
+ ori r6, r6, %lo(__bss_end)
+ beq r5, r6, 5f
+
+4: stwio r0, 0(r5)
+ addi r5, r5, 4
+ bne r5, r6, 4b
+5:
+
movhi r8, %hi(board_init_r@h)
ori r8, r8, %lo(board_init_r@h)
callr r8