diff options
author | Simon Glass <sjg@chromium.org> | 2011-12-19 15:25:49 -0800 |
---|---|---|
committer | Simon Glass <sjg@chromium.org> | 2012-01-05 19:18:44 -0800 |
commit | a7f64ee81c0b4701a0286be4ea8cd5e0474b5f9c (patch) | |
tree | 38596091a9e021e461b6a21d7920b99965679039 | |
parent | 18ecb1a6e855e3f14ae6dce036497b14efb94ade (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>
-rw-r--r-- | arch/arm/cpu/armv7/start.S | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/arch/arm/cpu/armv7/start.S b/arch/arm/cpu/armv7/start.S index 644337ebf64..94fa8498807 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 */ /* |