summaryrefslogtreecommitdiff
path: root/arch/mips/cpu/xburst
diff options
context:
space:
mode:
authorDaniel Schwierzeck <daniel.schwierzeck@gmail.com>2013-02-12 22:22:13 +0100
committerDaniel Schwierzeck <daniel.schwierzeck@gmail.com>2013-02-12 22:22:13 +0100
commit696a3b2a5368360c149335e2a35b8900a78f47fa (patch)
treeebad9e8ee6bfd035c5b9b10a965ae77f129df305 /arch/mips/cpu/xburst
parenteea8a320e1299cbd76d3ffd9a1fe0e0d3313268b (diff)
downloadu-boot-imx-696a3b2a5368360c149335e2a35b8900a78f47fa.zip
u-boot-imx-696a3b2a5368360c149335e2a35b8900a78f47fa.tar.gz
u-boot-imx-696a3b2a5368360c149335e2a35b8900a78f47fa.tar.bz2
MIPS: start.S: optimize BSS initialization
Get the start and end address for clearing BSS from the newly introduced symbols __bss_start and __bss_end. After GOT is relocated, those symbols are already pointing to the correct addresses. Also optimize the loop by moving the address incrementation to the delay slot to avoid the initial sub instruction. Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
Diffstat (limited to 'arch/mips/cpu/xburst')
-rw-r--r--arch/mips/cpu/xburst/start.S23
1 files changed, 13 insertions, 10 deletions
diff --git a/arch/mips/cpu/xburst/start.S b/arch/mips/cpu/xburst/start.S
index 50b7fb1..bd9390a 100644
--- a/arch/mips/cpu/xburst/start.S
+++ b/arch/mips/cpu/xburst/start.S
@@ -143,16 +143,19 @@ in_ram:
blt t2, t3, 1b
addi t4, 4
- /* Clear BSS */
- lw t1, -12(t0) # t1 <-- uboot_end_data
- lw t2, -8(t0) # t2 <-- uboot_end
- add t1, t6 # adjust pointers
- add t2, t6
-
- sub t1, 4
-1: addi t1, 4
- bltl t1, t2, 1b
- sw zero, 0(t1)
+ /*
+ * Clear BSS
+ *
+ * GOT is now relocated. Thus __bss_start and __bss_end can be
+ * accessed directly via $gp.
+ */
+ la t1, __bss_start # t1 <-- __bss_start
+ la t2, __bss_end # t2 <-- __bss_end
+
+1:
+ sw zero, 0(t1)
+ blt t1, t2, 1b
+ addi t1, 4
move a0, a1 # a0 <-- gd
la t9, board_init_r