summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2011-12-19 15:25:49 -0800
committerSimon Glass <sjg@chromium.org>2012-01-05 19:18:44 -0800
commita7f64ee81c0b4701a0286be4ea8cd5e0474b5f9c (patch)
tree38596091a9e021e461b6a21d7920b99965679039 /arch
parent18ecb1a6e855e3f14ae6dce036497b14efb94ade (diff)
hack: Change relocation over to use memset/memcpy
While we wait for the new relocation stuff to come down from upstream, this uses memset/memcpy() to do the business. Saves about 20ms on boot. BUG=chromium-os:22938 TEST=build and boot on Kaen Change-Id: I958b9f53f27c67d4da2fa0f7a2148c59ed48f7aa Reviewed-on: https://gerrit.chromium.org/gerrit/13215 Commit-Ready: Simon Glass <sjg@chromium.org> Reviewed-by: Simon Glass <sjg@chromium.org> Tested-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/cpu/armv7/start.S16
1 files changed, 16 insertions, 0 deletions
diff --git a/arch/arm/cpu/armv7/start.S b/arch/arm/cpu/armv7/start.S
index 644337ebf6..94fa849880 100644
--- a/arch/arm/cpu/armv7/start.S
+++ b/arch/arm/cpu/armv7/start.S
@@ -182,11 +182,20 @@ stack_setup:
ldr r3, _bss_start_ofs
add r2, r0, r3 /* r2 <- source end address */
+#if 0
copy_loop:
ldmia r0!, {r9-r10} /* copy from source address [r0] */
stmia r1!, {r9-r10} /* copy to target address [r1] */
cmp r0, r2 /* until source end address [r2] */
blo copy_loop
+#else
+ mov r7, r4
+ mov r0, r1
+ adr r1, _start
+ ldr r2, _bss_start_ofs
+ bl memcpy
+ mov r4, r7
+#endif
#ifndef CONFIG_PRELOADER
/*
@@ -236,10 +245,17 @@ clear_bss:
add r1, r1, r4
mov r2, #0x00000000 /* clear */
+#if 0
clbss_l:str r2, [r0] /* clear loop... */
add r0, r0, #4
cmp r0, r1
bne clbss_l
+#else
+ sub r2, r1, r0
+ mov r1, #0
+ bl memset
+#endif
+
#endif /* #ifndef CONFIG_PRELOADER */
/*