Factorize ARM startup code as mush as possible.
Subsystems (2)
cover Factorize ARM startup code as mush as possible.
File crt0.S is introduced which contains the C runtime framework, that is, the assembly code responsible for setting up the C environments needed by board_init_*() and relocate_code(). Corresponding code is removed from all start.S files in arch/arm.
This precedes further factorization, e.g. relocate_code() and possibly also the exception handlers.
This has the nice side effect of turning board_init_*() and relocate_code() into normal C functions, too.
Albert ARIBAUD (1):
arm: move generic startup code in crt0.S
arch/arm/cpu/arm1136/start.S | 62 ++-------- arch/arm/cpu/arm1176/start.S | 62 ++-------- arch/arm/cpu/arm720t/start.S | 53 ++------- arch/arm/cpu/arm920t/start.S | 61 ++-------- arch/arm/cpu/arm925t/start.S | 61 ++-------- arch/arm/cpu/arm926ejs/start.S | 80 ++----------- arch/arm/cpu/arm946es/start.S | 56 ++------- arch/arm/cpu/arm_intcm/start.S | 63 ++-------- arch/arm/cpu/armv7/start.S | 58 +++------- arch/arm/cpu/ixp/start.S | 55 ++------- arch/arm/cpu/pxa/start.S | 63 ++-------- arch/arm/cpu/s3c44b0/start.S | 55 ++------- arch/arm/cpu/sa1100/start.S | 50 ++------ arch/arm/lib/Makefile | 2 + arch/arm/lib/board.c | 11 -- arch/arm/lib/crt0.S | 179 +++++++++++++++++++++++++++++ include/common.h | 2 +- lib/asm-offsets.c | 10 ++ nand_spl/board/freescale/mx31pdk/Makefile | 6 +- nand_spl/board/karo/tx25/Makefile | 6 +- 20 files changed, 322 insertions(+), 673 deletions(-) create mode 100644 arch/arm/lib/crt0.S
Signature · 1 line
1.7.9.5
PATCH 1/1 arm: move generic startup code in crt0.S
--- arch/arm/cpu/arm1136/start.S | 62 ++-------- arch/arm/cpu/arm1176/start.S | 62 ++-------- arch/arm/cpu/arm720t/start.S | 53 ++------- arch/arm/cpu/arm920t/start.S | 61 ++-------- arch/arm/cpu/arm925t/start.S | 61 ++-------- arch/arm/cpu/arm926ejs/start.S | 80 ++----------- arch/arm/cpu/arm946es/start.S | 56 ++------- arch/arm/cpu/arm_intcm/start.S | 63 ++-------- arch/arm/cpu/armv7/start.S | 58 +++------- arch/arm/cpu/ixp/start.S | 55 ++------- arch/arm/cpu/pxa/start.S | 63 ++-------- arch/arm/cpu/s3c44b0/start.S | 55 ++------- arch/arm/cpu/sa1100/start.S | 50 ++------ arch/arm/lib/Makefile | 2 + arch/arm/lib/board.c | 11 -- arch/arm/lib/crt0.S | 179 +++++++++++++++++++++++++++++ include/common.h | 2 +- lib/asm-offsets.c | 10 ++ nand_spl/board/freescale/mx31pdk/Makefile | 6 +- nand_spl/board/karo/tx25/Makefile | 6 +- 20 files changed, 322 insertions(+), 673 deletions(-) create mode 100644 arch/arm/lib/crt0.S
arch/arm/cpu/arm1136/start.S +9 -53
@@ -161,13 +161,7 @@ next: bl cpu_init_crit #endif -/* 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 + bl _main /*------------------------------------------------------------------------------*/
@@ -184,14 +178,10 @@ relocate_code: mov r5, r1 /* save addr of gd */ mov r6, r2 /* save addr of destination */ - /* Set up the stack */ -stack_setup: - mov sp, r4 - adr r0, _start cmp r0, r6 moveq r9, #0 /* no relocation. relocation offset(r9) = 0 */ - beq clear_bss /* skip relocation */ + beq relocate_done /* skip relocation */ mov r1, r6 /* r1 <- scratch for copy_loop */ ldr r3, _bss_start_ofs add r2, r0, r3 /* r2 <- source end address */
@@ -243,48 +233,9 @@ fixnext: blo fixloop #endif -clear_bss: -#ifndef CONFIG_SPL_BUILD - ldr r0, _bss_start_ofs - ldr r1, _bss_end_ofs - mov r4, r6 /* reloc addr */ - add r0, r0, r4 - add r1, r1, r4 - mov r2, #0x00000000 /* clear */ - -clbss_l:cmp r0, r1 /* clear loop... */ - bhs clbss_e /* if reached end of bss, exit */ - str r2, [r0] - add r0, r0, #4 - b clbss_l -clbss_e: -#endif /* #ifndef CONFIG_SPL_BUILD */ - -/* - * We are done. Do not return, instead branch to second part of board - * initialization, now running from RAM. - */ -#ifdef CONFIG_NAND_SPL - ldr r0, _nand_boot_ofs - mov pc, r0 +relocate_done: -_nand_boot_ofs: - .word nand_boot -#else -jump_2_ram: - ldr r0, _board_init_r_ofs - ldr r1, _TEXT_BASE - add lr, r0, r1 - add lr, lr, r9 - /* setup parameters for board_init_r */ - mov r0, r5 /* gd_t */ - mov r1, r6 /* dest_addr */ - /* jump to it ... */ - mov pc, lr - -_board_init_r_ofs: - .word board_init_r - _start -#endif + bx lr _rel_dyn_start_ofs: .word __rel_dyn_start - _start
@@ -293,6 +244,11 @@ _rel_dyn_end_ofs: _dynsym_start_ofs: .word __dynsym_start - _start + .globl c_runtime_cpu_setup +c_runtime_cpu_setup: + + bx lr + /* ************************************************************************* *
arch/arm/cpu/arm1176/start.S +9 -53
90 lines not on this page · raw message
arch/arm/cpu/arm720t/start.S +8 -45
83 lines not on this page · raw message
arch/arm/cpu/arm920t/start.S +8 -53
91 lines not on this page · raw message
arch/arm/cpu/arm925t/start.S +8 -53
91 lines not on this page · raw message
arch/arm/cpu/arm926ejs/start.S +11 -69
110 lines not on this page · raw message
arch/arm/cpu/arm946es/start.S +8 -48
86 lines not on this page · raw message
arch/arm/cpu/arm_intcm/start.S +9 -54
91 lines not on this page · raw message
arch/arm/cpu/armv7/start.S +13 -45
93 lines not on this page · raw message
arch/arm/cpu/ixp/start.S +9 -46
83 lines not on this page · raw message
arch/arm/cpu/pxa/start.S +11 -52
95 lines not on this page · raw message
arch/arm/cpu/s3c44b0/start.S +9 -46
83 lines not on this page · raw message
arch/arm/cpu/sa1100/start.S +8 -42
80 lines not on this page · raw message
arch/arm/lib/Makefile +2 -0
@@ -36,6 +36,8 @@ GLSOBJS += _umodsi3.o GLCOBJS += div0.o +SOBJS-y += crt0.o + ifndef CONFIG_SPL_BUILD COBJS-y += board.o COBJS-y += bootm.o
arch/arm/lib/board.c +0 -11
@@ -272,11 +272,6 @@ void board_init_f(ulong bootflag)bootstage_mark_name (BOOTSTAGE_ID_START_UBOOT_F ,"board_init_f" ); -/* Pointer is writable since we allocated a register for it */ - gd = (gd_t *) ((CONFIG_SYS_INIT_SP_ADDR ) & ~0x07 ); -/* compiler optimization barrier needed for GCC >= 3.4 */ - __asm__ __volatile__("" : : :"memory" ); -memset ((void *)gd,0 ,sizeof (gd_t)); gd->mon_len = _bss_end_ofs;
@@ -458,10 +453,6 @@ void board_init_f(ulong bootflag) gd->fdt_blob = new_fdt; }memcpy (id, (void *)gd,sizeof (gd_t)); - -relocate_code (addr_sp, id, addr); - -/* NOTREACHED - relocate_code() does not return */ }#if !defined(CONFIG_SYS_NO_FLASH )
@@ -486,8 +477,6 @@ void board_init_r(gd_t *id, ulong dest_addr)ulong flash_size;#endif - gd = id; - gd->flags |=GD_FLG_RELOC ;/* tell others: relocation done */ bootstage_mark_name (BOOTSTAGE_ID_START_UBOOT_R ,"board_init_r" );
arch/arm/lib/crt0.S new file +179 -0
179 lines not on this page · raw message
include/common.h +1 -1
@@ -300,7 +300,7 @@ int abortboot(int bootdelay);extern char console_buffer[];/* arch/$(ARCH)/lib/board.c */ -void board_init_f (ulong ) __attribute__ ((noreturn)); +void board_init_f (ulong );void board_init_r (gd_t *,ulong ) __attribute__ ((noreturn));int checkboard (void );int checkflash (void );
lib/asm-offsets.c +10 -0
@@ -28,5 +28,15 @@ int main(void)DEFINE (GENERATED_BD_INFO_SIZE , (sizeof (struct bd_info ) +15 ) & ~15 ); +DEFINE (GD_SIZE ,sizeof (struct global_data )); + +DEFINE (GD_BD , offsetof(struct global_data , bd)); + +DEFINE (GD_RELOCADDR , offsetof(struct global_data , relocaddr)); + +DEFINE (GD_RELOC_OFF , offsetof(struct global_data , reloc_off)); + +DEFINE (GD_START_ADDR_SP , offsetof(struct global_data , start_addr_sp)); +return 0 ; }
nand_spl/board/freescale/mx31pdk/Makefile +5 -1
@@ -12,11 +12,12 @@ LDFLAGS := -T $(nandobj)u-boot.lds -Ttext $(CONFIG_SYS_TEXT_BASE) $(LDFLAGS) \ AFLAGS += -DCONFIG_SPL_BUILD -DCONFIG_NAND_SPL CFLAGS += -DCONFIG_SPL_BUILD -DCONFIG_NAND_SPL -SOBJS = start.o lowlevel_init.o +SOBJS = start.o crt0.o lowlevel_init.o COBJS = nand_boot_fsl_nfc.o SRCS := $(SRCTREE)/nand_spl/nand_boot_fsl_nfc.c SRCS += $(SRCTREE)/arch/arm/cpu/arm1136/start.S +SRCS += $(SRCTREE)/arch/arm/lib/crt0.S SRCS += $(SRCTREE)/board/freescale/mx31pdk/lowlevel_init.S OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS)) __OBJS := $(SOBJS) $(COBJS)
@@ -49,6 +50,9 @@ $(nandobj)u-boot.lds: $(LDSCRIPT) $(LSTSCRIPT) $(obj)%.o: $(SRCTREE)/arch/arm/cpu/arm1136/%.S $(CC) $(AFLAGS) -c -o $@ $< +$(obj)%.o: $(SRCTREE)/arch/arm/lib/%.S + $(CC) $(AFLAGS) -c -o $@ $< + $(obj)%.o: $(SRCTREE)/board/freescale/mx31pdk/%.S $(CC) $(AFLAGS) -c -o $@ $<
nand_spl/board/karo/tx25/Makefile +5 -1
@@ -33,11 +33,12 @@ LDFLAGS := -T $(nandobj)u-boot.lds -Ttext $(CONFIG_SYS_TEXT_BASE) $(LDFLAGS) \ AFLAGS += -DCONFIG_SPL_BUILD -DCONFIG_NAND_SPL CFLAGS += -DCONFIG_SPL_BUILD -DCONFIG_NAND_SPL -SOBJS = start.o lowlevel_init.o +SOBJS = start.o crt0.o lowlevel_init.o COBJS = nand_boot_fsl_nfc.o SRCS := $(SRCTREE)/nand_spl/nand_boot_fsl_nfc.c SRCS += $(SRCTREE)/arch/arm/cpu/arm926ejs/start.S +SRCS += $(SRCTREE)/arch/arm/lib/crt0.S SRCS += $(SRCTREE)/board/karo/tx25/lowlevel_init.S OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS)) __OBJS := $(SOBJS) $(COBJS)
@@ -70,6 +71,9 @@ $(nandobj)u-boot.lds: $(LDSCRIPT) $(LSTSCRIPT) $(obj)%.o: $(SRCTREE)/arch/arm/cpu/arm926ejs/%.S $(CC) $(AFLAGS) -c -o $@ $< +$(obj)%.o: $(SRCTREE)/arch/arm/lib/%.S + $(CC) $(AFLAGS) -c -o $@ $< + $(obj)%.o: $(SRCTREE)/board/karo/tx25/%.S $(CC) $(AFLAGS) -c -o $@ $<
Signature · 1 line
1.7.9.5
PATCH 1/1 arm: move generic startup code in crt0.S
Dear Albert ARIBAUD,
Quoted 2 lines · In message <[email protected]> you…
Signed-off-by Albert ARIBAUD <[email protected]>---
Please move the patch description from the cover letter to this commit message.
Best regards,
Wolfgang Denk
Signature · 8 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
I wrote my name at the top of the page. I wrote down the number of
the question ``1''. After much reflection I put a bracket round it
thus ``(1)''. But thereafter I could not think of anything connected
with it that was either relevant or true.
- Sir Winston Churchill _My Early Life_ ch. 2PATCH 1/1 arm: move generic startup code in crt0.S
Hi Wolfgang,
Quoted 8 lines · Wolfgang Denk
Dear Albert ARIBAUD,
Quoted 2 lines · In message <[email protected]> you…
Signed-off-by Albert ARIBAUD <[email protected]>---
Please move the patch description from the cover letter to this commit message.
Will do. Also, V2 will have a second patch for some start.S scrubbing and will have fixes for a few targets.
Quoted 3 lines
Best regards,
Wolfgang Denk
Amicalement,
Signature · 1 line
Albert.
v2 cover Factorize ARM startup code as mush as possible.
In reply to Albert ARIBAUDThe goal of this series is to scrub the start.S files which have proliferated across arch/arm and eliminate code redundancy.
Currently this series only factorizes the C runtime framework, that is, the assembly code responsible for setting up the C environments needed by board_init_*() and relocate_code().
Further factorization is possible: relocate_code() can be moved out and possibly rewritten in C now that it has plain C function semantics; exception handlers should also be pretty much cpu-independent.
Eventually, start.S files should disappear or contain CPU-specific code only.
The new C runtime setup sequence has been validated step by step on target versatileqemu using toolchain ELDK4.2.
The whole changes have been build-tested across all ARM targets using MAKEALL -a arm.
Changes in v2:
- moved description from cover letter to patch commit msg
- added note about tests in the cover letter
- fixed baords with CONFIG_SPL but not CONFIG_SPL_STACK
- introduced in V2
Albert ARIBAUD (2):
arm: move C runtime setup code in crt0.S
arm: remove useless code in start.S files
arch/arm/cpu/arm1136/start.S | 62 ++-------- arch/arm/cpu/arm1176/start.S | 62 ++-------- arch/arm/cpu/arm720t/start.S | 53 ++------- arch/arm/cpu/arm920t/start.S | 61 ++-------- arch/arm/cpu/arm925t/start.S | 65 ++--------- arch/arm/cpu/arm926ejs/start.S | 86 ++------------ arch/arm/cpu/arm946es/start.S | 56 ++------- arch/arm/cpu/arm_intcm/start.S | 63 ++-------- arch/arm/cpu/armv7/start.S | 58 +++------- arch/arm/cpu/ixp/start.S | 55 ++------- arch/arm/cpu/pxa/start.S | 63 ++-------- arch/arm/cpu/s3c44b0/start.S | 55 ++------- arch/arm/cpu/sa1100/start.S | 50 ++------ arch/arm/lib/Makefile | 2 + arch/arm/lib/board.c | 11 -- arch/arm/lib/crt0.S | 180 +++++++++++++++++++++++++++++ include/common.h | 2 +- include/configs/socfpga_cyclone5.h | 2 +- lib/asm-offsets.c | 10 ++ nand_spl/board/freescale/mx31pdk/Makefile | 6 +- nand_spl/board/karo/tx25/Makefile | 6 +- 21 files changed, 324 insertions(+), 684 deletions(-) create mode 100644 arch/arm/lib/crt0.S
Signature · 1 line
1.7.9.5
PATCH v2 1/2 arm: move C runtime setup code in crt0.S
Move all the C runtime setup code from every start.S in arch/arm into arch/arm/lib/crt0.S. This covers the code sequence from isetting up the initial stack to calling into board_init_r().
Also, rewrite the C runtime setup and make functions board_init_*() and relocate_code() behave according to normal C semantics (no jumping across the C stack any more, etc).
Some SPL targets had to be touched because they use start.S exolicitly or for some reason; the relevant maintainers and custodians are cc:ed.
---
Changes in v2:
- moved description from cover letter to patch commit msg
- added note about tests in the cover letter
- fixed baords with CONFIG_SPL but not CONFIG_SPL_STACK
arch/arm/cpu/arm1136/start.S | 62 ++-------- arch/arm/cpu/arm1176/start.S | 62 ++-------- arch/arm/cpu/arm720t/start.S | 53 ++------- arch/arm/cpu/arm920t/start.S | 61 ++-------- arch/arm/cpu/arm925t/start.S | 61 ++-------- arch/arm/cpu/arm926ejs/start.S | 80 ++----------- arch/arm/cpu/arm946es/start.S | 56 ++------- arch/arm/cpu/arm_intcm/start.S | 63 ++-------- arch/arm/cpu/armv7/start.S | 58 +++------- arch/arm/cpu/ixp/start.S | 55 ++------- arch/arm/cpu/pxa/start.S | 63 ++-------- arch/arm/cpu/s3c44b0/start.S | 55 ++------- arch/arm/cpu/sa1100/start.S | 50 ++------ arch/arm/lib/Makefile | 2 + arch/arm/lib/board.c | 11 -- arch/arm/lib/crt0.S | 180 +++++++++++++++++++++++++++++ include/common.h | 2 +- include/configs/socfpga_cyclone5.h | 2 +- lib/asm-offsets.c | 10 ++ nand_spl/board/freescale/mx31pdk/Makefile | 6 +- nand_spl/board/karo/tx25/Makefile | 6 +- 21 files changed, 324 insertions(+), 674 deletions(-) create mode 100644 arch/arm/lib/crt0.S
arch/arm/cpu/arm1136/start.S +9 -53
@@ -161,13 +161,7 @@ next: bl cpu_init_crit #endif -/* 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 + bl _main /*------------------------------------------------------------------------------*/
@@ -184,14 +178,10 @@ relocate_code: mov r5, r1 /* save addr of gd */ mov r6, r2 /* save addr of destination */ - /* Set up the stack */ -stack_setup: - mov sp, r4 - adr r0, _start cmp r0, r6 moveq r9, #0 /* no relocation. relocation offset(r9) = 0 */ - beq clear_bss /* skip relocation */ + beq relocate_done /* skip relocation */ mov r1, r6 /* r1 <- scratch for copy_loop */ ldr r3, _bss_start_ofs add r2, r0, r3 /* r2 <- source end address */
@@ -243,48 +233,9 @@ fixnext: blo fixloop #endif -clear_bss: -#ifndef CONFIG_SPL_BUILD - ldr r0, _bss_start_ofs - ldr r1, _bss_end_ofs - mov r4, r6 /* reloc addr */ - add r0, r0, r4 - add r1, r1, r4 - mov r2, #0x00000000 /* clear */ - -clbss_l:cmp r0, r1 /* clear loop... */ - bhs clbss_e /* if reached end of bss, exit */ - str r2, [r0] - add r0, r0, #4 - b clbss_l -clbss_e: -#endif /* #ifndef CONFIG_SPL_BUILD */ - -/* - * We are done. Do not return, instead branch to second part of board - * initialization, now running from RAM. - */ -#ifdef CONFIG_NAND_SPL - ldr r0, _nand_boot_ofs - mov pc, r0 +relocate_done: -_nand_boot_ofs: - .word nand_boot -#else -jump_2_ram: - ldr r0, _board_init_r_ofs - ldr r1, _TEXT_BASE - add lr, r0, r1 - add lr, lr, r9 - /* setup parameters for board_init_r */ - mov r0, r5 /* gd_t */ - mov r1, r6 /* dest_addr */ - /* jump to it ... */ - mov pc, lr - -_board_init_r_ofs: - .word board_init_r - _start -#endif + bx lr _rel_dyn_start_ofs: .word __rel_dyn_start - _start
@@ -293,6 +244,11 @@ _rel_dyn_end_ofs: _dynsym_start_ofs: .word __dynsym_start - _start + .globl c_runtime_cpu_setup +c_runtime_cpu_setup: + + bx lr + /* ************************************************************************* *
arch/arm/cpu/arm1176/start.S +9 -53
90 lines not on this page · raw message
arch/arm/cpu/arm720t/start.S +8 -45
83 lines not on this page · raw message
arch/arm/cpu/arm920t/start.S +8 -53
91 lines not on this page · raw message
arch/arm/cpu/arm925t/start.S +8 -53
91 lines not on this page · raw message
arch/arm/cpu/arm926ejs/start.S +11 -69
110 lines not on this page · raw message
arch/arm/cpu/arm946es/start.S +8 -48
86 lines not on this page · raw message
arch/arm/cpu/arm_intcm/start.S +9 -54
91 lines not on this page · raw message
arch/arm/cpu/armv7/start.S +13 -45
93 lines not on this page · raw message
arch/arm/cpu/ixp/start.S +9 -46
83 lines not on this page · raw message
arch/arm/cpu/pxa/start.S +11 -52
95 lines not on this page · raw message
arch/arm/cpu/s3c44b0/start.S +9 -46
83 lines not on this page · raw message
arch/arm/cpu/sa1100/start.S +8 -42
80 lines not on this page · raw message
arch/arm/lib/Makefile +2 -0
@@ -36,6 +36,8 @@ GLSOBJS += _umodsi3.o GLCOBJS += div0.o +SOBJS-y += crt0.o + ifndef CONFIG_SPL_BUILD COBJS-y += board.o COBJS-y += bootm.o
arch/arm/lib/board.c +0 -11
@@ -272,11 +272,6 @@ void board_init_f(ulong bootflag)bootstage_mark_name (BOOTSTAGE_ID_START_UBOOT_F ,"board_init_f" ); -/* Pointer is writable since we allocated a register for it */ - gd = (gd_t *) ((CONFIG_SYS_INIT_SP_ADDR ) & ~0x07 ); -/* compiler optimization barrier needed for GCC >= 3.4 */ - __asm__ __volatile__("" : : :"memory" ); -memset ((void *)gd,0 ,sizeof (gd_t)); gd->mon_len = _bss_end_ofs;
@@ -458,10 +453,6 @@ void board_init_f(ulong bootflag) gd->fdt_blob = new_fdt; }memcpy (id, (void *)gd,sizeof (gd_t)); - -relocate_code (addr_sp, id, addr); - -/* NOTREACHED - relocate_code() does not return */ }#if !defined(CONFIG_SYS_NO_FLASH )
@@ -486,8 +477,6 @@ void board_init_r(gd_t *id, ulong dest_addr)ulong flash_size;#endif - gd = id; - gd->flags |=GD_FLG_RELOC ;/* tell others: relocation done */ bootstage_mark_name (BOOTSTAGE_ID_START_UBOOT_R ,"board_init_r" );
arch/arm/lib/crt0.S new file +180 -0
180 lines not on this page · raw message
include/common.h +1 -1
@@ -300,7 +300,7 @@ int abortboot(int bootdelay);extern char console_buffer[];/* arch/$(ARCH)/lib/board.c */ -void board_init_f (ulong ) __attribute__ ((noreturn)); +void board_init_f (ulong );void board_init_r (gd_t *,ulong ) __attribute__ ((noreturn));int checkboard (void );int checkflash (void );
include/configs/socfpga_cyclone5.h +1 -1
@@ -65,7 +65,7 @@#define CONFIG_SYS_BOOTMAPSZ ((256*1024*1024) - (4*1024))#define CONFIG_SPL_RAM_DEVICE -#define CONFIG_SPL_STACK (&__stack_start) +#define CONFIG_SPL_STACK CONFIG_SYS_INIT_SP_ADDR#define CONFIG_SYS_SPL_MALLOC_START ((unsigned long) (&__malloc_start))#define CONFIG_SYS_SPL_MALLOC_SIZE (&__malloc_end - &__malloc_start)
lib/asm-offsets.c +10 -0
@@ -28,5 +28,15 @@ int main(void)DEFINE (GENERATED_BD_INFO_SIZE , (sizeof (struct bd_info ) +15 ) & ~15 ); +DEFINE (GD_SIZE ,sizeof (struct global_data )); + +DEFINE (GD_BD , offsetof(struct global_data , bd)); + +DEFINE (GD_RELOCADDR , offsetof(struct global_data , relocaddr)); + +DEFINE (GD_RELOC_OFF , offsetof(struct global_data , reloc_off)); + +DEFINE (GD_START_ADDR_SP , offsetof(struct global_data , start_addr_sp)); +return 0 ; }
nand_spl/board/freescale/mx31pdk/Makefile +5 -1
@@ -12,11 +12,12 @@ LDFLAGS := -T $(nandobj)u-boot.lds -Ttext $(CONFIG_SYS_TEXT_BASE) $(LDFLAGS) \ AFLAGS += -DCONFIG_SPL_BUILD -DCONFIG_NAND_SPL CFLAGS += -DCONFIG_SPL_BUILD -DCONFIG_NAND_SPL -SOBJS = start.o lowlevel_init.o +SOBJS = start.o crt0.o lowlevel_init.o COBJS = nand_boot_fsl_nfc.o SRCS := $(SRCTREE)/nand_spl/nand_boot_fsl_nfc.c SRCS += $(SRCTREE)/arch/arm/cpu/arm1136/start.S +SRCS += $(SRCTREE)/arch/arm/lib/crt0.S SRCS += $(SRCTREE)/board/freescale/mx31pdk/lowlevel_init.S OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS)) __OBJS := $(SOBJS) $(COBJS)
@@ -49,6 +50,9 @@ $(nandobj)u-boot.lds: $(LDSCRIPT) $(LSTSCRIPT) $(obj)%.o: $(SRCTREE)/arch/arm/cpu/arm1136/%.S $(CC) $(AFLAGS) -c -o $@ $< +$(obj)%.o: $(SRCTREE)/arch/arm/lib/%.S + $(CC) $(AFLAGS) -c -o $@ $< + $(obj)%.o: $(SRCTREE)/board/freescale/mx31pdk/%.S $(CC) $(AFLAGS) -c -o $@ $<
nand_spl/board/karo/tx25/Makefile +5 -1
@@ -33,11 +33,12 @@ LDFLAGS := -T $(nandobj)u-boot.lds -Ttext $(CONFIG_SYS_TEXT_BASE) $(LDFLAGS) \ AFLAGS += -DCONFIG_SPL_BUILD -DCONFIG_NAND_SPL CFLAGS += -DCONFIG_SPL_BUILD -DCONFIG_NAND_SPL -SOBJS = start.o lowlevel_init.o +SOBJS = start.o crt0.o lowlevel_init.o COBJS = nand_boot_fsl_nfc.o SRCS := $(SRCTREE)/nand_spl/nand_boot_fsl_nfc.c SRCS += $(SRCTREE)/arch/arm/cpu/arm926ejs/start.S +SRCS += $(SRCTREE)/arch/arm/lib/crt0.S SRCS += $(SRCTREE)/board/karo/tx25/lowlevel_init.S OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS)) __OBJS := $(SOBJS) $(COBJS)
@@ -70,6 +71,9 @@ $(nandobj)u-boot.lds: $(LDSCRIPT) $(LSTSCRIPT) $(obj)%.o: $(SRCTREE)/arch/arm/cpu/arm926ejs/%.S $(CC) $(AFLAGS) -c -o $@ $< +$(obj)%.o: $(SRCTREE)/arch/arm/lib/%.S + $(CC) $(AFLAGS) -c -o $@ $< + $(obj)%.o: $(SRCTREE)/board/karo/tx25/%.S $(CC) $(AFLAGS) -c -o $@ $<
Signature · 1 line
1.7.9.5
PATCH v2 1/2 arm: move C runtime setup code in crt0.S
Hi Albert,
Quoted 1 line · Albert ARIBAUD
the code sequence from isetting up the initial stack
Argh. s/isetting/setting/ in V3...
Amicalement,
Signature · 1 line
Albert.
PATCH v2 1/2 arm: move C runtime setup code in crt0.S
In reply to Albert ARIBAUDReviewing myself:
arch/arm/lib/crt0.S line 153
Quoted 9 lines · Albert ARIBAUD
arch/arm/lib/crt0.S new file +3
-0+clbss_l:cmp r0, r1 /* while not at end of BSS */ + strlo r2, [r0] /* clear 32-bit BSS word */ + addlo r0, r0, #4 /* move to next
Unclosed comment here. This causes the following code to be ignored:
arch/arm/lib/crt0.S line 163
Quoted 10 lines
arch/arm/lib/crt0.S new file +10
-0+ bhs clbss_l + +#ifdef CONFIG_SPL_BUILD + + bl coloured_LED_init + bl red_led_on + +#endif + + /* call board_init_r(gd_t *id, ulong dest_addr) */
Which might explain why SPL builds did not complain about LED calls and why some boards failed.
Also:
arch/arm/lib/crt0.S line 178
Quoted 12 lines
arch/arm/lib/crt0.S new file +12
-0+#if defined(CONFIG_NAND_SPL) + ldr pc, _nand_boot + +#elif ! defined(CONFIG_SPL_BUILD) + + /* setup parameters for board_init_r */ + mov r0, r8 /* gd_t */ + ldr r1, [r8, #GD_RELOCADDR] /* dest_addr */ + /* call board_init_r */ + ldr pc, _board_init_r /* this is auto-relocated! */ + +#endif
The #elif is wrong, as it causes CONFIG_SPL_BUILD builds to not call board_init_f() at all; actually, they overrun into whatever follows. This might have been what Sughosh (Cc:) hit with the hawkboard.
Amicalement,
Signature · 1 line
Albert.
PATCH v2 1/2 arm: move C runtime setup code in crt0.S
In reply to Albert ARIBAUDHello Albert,
Quoted 20 lines · Albert ARIBAUD
Move all the C runtime setup code from every
start.Sinarch/armintoarch/arm/lib/crt0.S. This covers the code sequence from isetting up the initial stack to calling intoboard_init_r().Also, rewrite the C runtime setup and make functions board_init_*() and
relocate_code()behave according to normal C semantics (no jumping across the C stack any more, etc).Some SPL targets had to be touched because they use
start.Sexolicitly or for some reason; the relevant maintainers and custodians are cc:ed.Signed-off-by Albert ARIBAUD<[email protected]>---
Changes in v2:
- moved description from cover letter to patch commit msg
- added note about tests in the cover letter
- fixed baords withCONFIG_SPLbut notCONFIG_SPL_STACK
<snip>
Quoted 59 lines
arch/arm/lib/crt0.S new file +53
-0@@ -0,0 +1,180 @@ +/* + * crt0 - C-runtime startup Code for ARM U-Boot + * + * Copyright (c) 2012 Albert ARIBAUD<[email protected]> + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#include<config.h> +#include<asm-offsets.h> + +/* + * This file handles the target-independent stages of the U-Boot + * start-up where a C runtime environment is needed. Its entry point + * is _main and is branched into from the target's start.S file. + * + * _main execution sequence is: + * + * 1. Set up initial environment for calling board_init_f(). + * This environment only provides a stack and a place to store + * the GD ('global data') structure. In this context, VARIABLE + * global data, initialized or not (BSS), are UNAVAILABLE; only + * CONSTANT initialized data are available. + * + * 2. Call board_init_f(). This function prepares the hardware for + * execution from DDR. As DDR may not be available, board_init_f() + * must use GD to store any data which must be passed on to later, + * stages, including the reloction destination and the new stack + * pointer address, below which the stack resides and above it the + * new GD resides. + * + * 3. Set up intermediate environment where the stack and GD are the + * ones allocated by board_init_f() in DDR, but BSS and initialized + * non-const data are still not available. + * + * 4. Call relocate_code(). This function relocates U-Boot from its + * current location into the relocation destination computed by
arch/arm/lib/crt0.S line 63
Quoted 10 lines
arch/arm/lib/crt0.S new file +10
-0+ * board_init_f(). + * + * 5. Set up final environment for calling board_init_r(). This + * environment has BSS (initialized to 0), initialized non-const + * data (initialized to their intended value), and stack in DDR. + * GD has but retained values set by board_init_f(). Some CPUs + * have some work to do at this point, so call c_runtime_cpu_setup. + * + * 6. Call noard_init_r(). If the function returns, reset the board. + */
s/noard_init_r/board_init_r
Quoted 56 lines
arch/arm/lib/crt0.S new file +56
-0+ +/* + * offset of the nand_boot() function for SPL crt + */ + +#if defined(CONFIG_NAND_SPL) + +.globl nand_boot +_nand_boot: + .word nand_boot + +#elif ! defined(CONFIG_SPL_BUILD) + +/* + * offset of the board_init_r() function for non-SPL crt + */ + +.globl board_init_r +_board_init_r: + .word board_init_r + +#endif + +/* + * start and end of BSS + */ + +.globl __bss_start +.globl __bss_end__ + +/* + * entry point of crt0 sequence + */ + +.global _main + +_main: + +/* + * Set up initial C runtime environment and call board_init_f(0). + */ + +#if defined(CONFIG_NAND_SPL) + /* deprecated, use instead CONFIG_SPL_BUILD */ + ldr sp, =(CONFIG_SYS_INIT_SP_ADDR) +#elif defined(CONFIG_SPL_BUILD)&& defined(CONFIG_SPL_STACK) + ldr sp, =(CONFIG_SPL_STACK) +#else + ldr sp, =(CONFIG_SYS_INIT_SP_ADDR) +#endif + bic sp, sp, #7 /* 8-byte alignment for ABI compliance */ + mov r8, sp /* GD is above SP */ + mov r0, #0 + bl board_init_f + +/*
arch/arm/lib/crt0.S line 129
Quoted 10 lines
arch/arm/lib/crt0.S new file +10
-0+ * Set up intermediate environment (new sp and gd) and call + * relocate_code(addr_sp, gd, addr_moni). Trick here is that + * we'll return 'here' but relocated. + */ + + ldr sp, [r8, #GD_START_ADDR_SP] /* r8 = gd->start_addr_sp */ + ldr r8, [r8, #GD_BD] /* r8 = gd->bd */ + sub r8, r8, #GD_SIZE /* new GD is below bd */ + +#ifndef CONFIG_SPL_BUILD
In some places the other style is used. "!(defined)". Any particular reasons for switching b/w these two styles?
Quoted 8 lines
arch/arm/lib/crt0.S new file +8
-0+ + adr lr, here + ldr r0, [r8, #GD_RELOC_OFF] /* lr = gd->start_addr_sp */ + add lr, lr, r0 + ldr r0, [r8, #GD_START_ADDR_SP] /* r0 = gd->start_addr_sp */ + mov r1, r8 /* r1 = gd */ + ldr r2, [r8, #GD_RELOCADDR] /* r2 = gd->relocaddr */ + b relocate_code
arch/arm/lib/crt0.S line 147
Quoted 10 lines
arch/arm/lib/crt0.S new file +10
-0+here: + +#endif + +/* Set up final (full) environment */ + + bl c_runtime_cpu_setup /* we still call old routine here */ + + ldr r0, =__bss_start /* this is auto-relocated! */ + ldr r1, =__bss_end__ /* this is aotu-relocated! */
s/aotu/auto
Regards,
Vikram
PATCH v2 1/2 arm: move C runtime setup code in crt0.S
Hi Vikram,
Quoted 8 lines · Vikram Narayanan
Hello Albert,
arch/arm/lib/crt0.S
Quoted 3 lines
arch/arm/lib/crt0.S +1
-0+#ifndef CONFIG_SPL_BUILDIn some places the other style is used. "!(defined)". Any particular reasons for switching b/w these two styles?
None except heterogeneity. In V3 I'll make sure 'defined()' is used everywhere in the new files or added code.
Quoted 4 lines
arch/arm/lib/crt0.S line 147
Quoted 2 lines
arch/arm/lib/crt0.S +2
-0+ ldr r0, =__bss_start /* this is auto-relocated! */ + ldr r1, =__bss_end__ /* this is aotu-relocated! */s/aotu/auto
Thanks for spotting this. Will fix in V3.
Quoted 2 lines
Regards,
Vikram
Amicalement,
Signature · 1 line
Albert.
PATCH v2 1/2 arm: move C runtime setup code in crt0.S
In reply to Albert ARIBAUDDear Albert Aribaud,
Quoted 45 lines · Albert ARIBAUD
Move all the C runtime setup code from every
start.Sinarch/armintoarch/arm/lib/crt0.S. This covers the code sequence from isetting up the initial stack to calling intoboard_init_r().Also, rewrite the C runtime setup and make functions board_init_*() and
relocate_code()behave according to normal C semantics (no jumping across the C stack any more, etc).Some SPL targets had to be touched because they use
start.Sexolicitly or for some reason; the relevant maintainers and custodians are cc:ed.Signed-off-by Albert ARIBAUD <[email protected]>---
Changes in v2:
- moved description from cover letter to patch commit msg
- added note about tests in the cover letter
- fixed baords withCONFIG_SPLbut notCONFIG_SPL_STACKarch/arm/cpu/arm1136/start.S | 62 ++-------- arch/arm/cpu/arm1176/start.S | 62 ++-------- arch/arm/cpu/arm720t/start.S | 53 ++------- arch/arm/cpu/arm920t/start.S | 61 ++-------- arch/arm/cpu/arm925t/start.S | 61 ++-------- arch/arm/cpu/arm926ejs/start.S | 80 ++----------- arch/arm/cpu/arm946es/start.S | 56 ++------- arch/arm/cpu/arm_intcm/start.S | 63 ++-------- arch/arm/cpu/armv7/start.S | 58 +++------- arch/arm/cpu/ixp/start.S | 55 ++------- arch/arm/cpu/pxa/start.S | 63 ++-------- arch/arm/cpu/s3c44b0/start.S | 55 ++------- arch/arm/cpu/sa1100/start.S | 50 ++------ arch/arm/lib/Makefile | 2 + arch/arm/lib/board.c | 11 -- arch/arm/lib/crt0.S | 180 +++++++++++++++++++++++++++++ include/common.h | 2 +- include/configs/socfpga_cyclone5.h | 2 +- lib/asm-offsets.c | 10 ++ nand_spl/board/freescale/mx31pdk/Makefile | 6 +- nand_spl/board/karo/tx25/Makefile | 6 +- 21 files changed, 324 insertions(+), 674 deletions(-) create mode 100644 arch/arm/lib/crt0.S
<snip>
Quoted 38 lines
arch/arm/lib/crt0.S new file +32
-0@@ -0,0 +1,180 @@ +/* + * crt0 - C-runtime startup Code for ARM U-Boot + * + * Copyright (c) 2012 Albert ARIBAUD <[email protected]> + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#include <config.h> +#include <asm-offsets.h> + +/* + * This file handles the target-independent stages of the U-Boot + * start-up where a C runtime environment is needed. Its entry point + * is _main and is branched into from the target's start.S file. + *
arch/arm/lib/crt0.S line 42
Quoted 10 lines
arch/arm/lib/crt0.S new file +10
-0+ * _main execution sequence is: + * + * 1. Set up initial environment for calling board_init_f(). + * This environment only provides a stack and a place to store + * the GD ('global data') structure. In this context, VARIABLE + * global data, initialized or not (BSS), are UNAVAILABLE; only + * CONSTANT initialized data are available. + * + * 2. Call board_init_f(). This function prepares the hardware for + * execution from DDR. As DDR may not be available, board_init_f()
DDR means DRAM in general?
arch/arm/lib/crt0.S line 43
Quoted 1 line
arch/arm/lib/crt0.S new file +1
-0+ * must use GD to store any data which must be passed on to later,
-----------------------------------------------------------------------^
arch/arm/lib/crt0.S line 45
Quoted 2 lines
arch/arm/lib/crt0.S new file +2
-0+ * stages, including the reloction destination and the new stack + * pointer address, below which the stack resides and above it the
------------------------^
Full stop? The rest of the sentence makes no sense to me.
Quoted 52 lines
arch/arm/lib/crt0.S new file +52
-0+ * new GD resides. + * + * 3. Set up intermediate environment where the stack and GD are the + * ones allocated by board_init_f() in DDR, but BSS and initialized + * non-const data are still not available. + * + * 4. Call relocate_code(). This function relocates U-Boot from its + * current location into the relocation destination computed by + * board_init_f(). + * + * 5. Set up final environment for calling board_init_r(). This + * environment has BSS (initialized to 0), initialized non-const + * data (initialized to their intended value), and stack in DDR. + * GD has but retained values set by board_init_f(). Some CPUs + * have some work to do at this point, so call c_runtime_cpu_setup. + * + * 6. Call noard_init_r(). If the function returns, reset the board. + */ + +/* + * offset of the nand_boot() function for SPL crt + */ + +#if defined(CONFIG_NAND_SPL) + +.globl nand_boot +_nand_boot: + .word nand_boot + +#elif ! defined(CONFIG_SPL_BUILD) + +/* + * offset of the board_init_r() function for non-SPL crt + */ + +.globl board_init_r +_board_init_r: + .word board_init_r + +#endif + +/* + * start and end of BSS + */ + +.globl __bss_start +.globl __bss_end__ + +/* + * entry point of crt0 sequence + */ +
arch/arm/lib/crt0.S line 107
Quoted 10 lines
arch/arm/lib/crt0.S new file +10
-0+.global _main + +_main: + +/* + * Set up initial C runtime environment and call board_init_f(0). + */ + +#if defined(CONFIG_NAND_SPL) + /* deprecated, use instead CONFIG_SPL_BUILD */
I wonder if we can emit a #warning here
Quoted 39 lines
arch/arm/lib/crt0.S new file +39
-0+ ldr sp, =(CONFIG_SYS_INIT_SP_ADDR) +#elif defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_STACK) + ldr sp, =(CONFIG_SPL_STACK) +#else + ldr sp, =(CONFIG_SYS_INIT_SP_ADDR) +#endif + bic sp, sp, #7 /* 8-byte alignment for ABI compliance */ + mov r8, sp /* GD is above SP */ + mov r0, #0 + bl board_init_f + +/* + * Set up intermediate environment (new sp and gd) and call + * relocate_code(addr_sp, gd, addr_moni). Trick here is that + * we'll return 'here' but relocated. + */ + + ldr sp, [r8, #GD_START_ADDR_SP] /* r8 = gd->start_addr_sp */ + ldr r8, [r8, #GD_BD] /* r8 = gd->bd */ + sub r8, r8, #GD_SIZE /* new GD is below bd */ + +#ifndef CONFIG_SPL_BUILD + + adr lr, here + ldr r0, [r8, #GD_RELOC_OFF] /* lr = gd->start_addr_sp */ + add lr, lr, r0 + ldr r0, [r8, #GD_START_ADDR_SP] /* r0 = gd->start_addr_sp */ + mov r1, r8 /* r1 = gd */ + ldr r2, [r8, #GD_RELOCADDR] /* r2 = gd->relocaddr */ + b relocate_code +here: + +#endif + +/* Set up final (full) environment */ + + bl c_runtime_cpu_setup /* we still call old routine here */ + + ldr r0, =__bss_start /* this is auto-relocated! */
arch/arm/lib/crt0.S line 156
Quoted 10 lines
arch/arm/lib/crt0.S new file +10
-0+ ldr r1, =__bss_end__ /* this is aotu-relocated! */ + + mov r2, #0x00000000 /* prepare zero to clear BSS */ + +clbss_l:cmp r0, r1 /* while not at end of BSS */ + strlo r2, [r0] /* clear 32-bit BSS word */ + addlo r0, r0, #4 /* move to next + bhs clbss_l + +#ifdef CONFIG_SPL_BUILD
I think this should be negated. The coloured LED stuff was enabled for non SPL builds before!
arch/arm/lib/crt0.S line 163
Quoted 7 lines
arch/arm/lib/crt0.S new file +7
-0+ + bl coloured_LED_init + bl red_led_on + +#endif + + /* call board_init_r(gd_t *id, ulong dest_addr) */
Shouldn't this move down in the #elif path?
Quoted 7 lines
arch/arm/lib/crt0.S new file +7
-0+ + mov lr, pc + +#if defined(CONFIG_NAND_SPL) + ldr pc, _nand_boot + +#elif ! defined(CONFIG_SPL_BUILD)
arch/arm/lib/crt0.S line 180
Quoted 10 lines
arch/arm/lib/crt0.S new file +10
-0+ + /* setup parameters for board_init_r */ + mov r0, r8 /* gd_t */ + ldr r1, [r8, #GD_RELOCADDR] /* dest_addr */ + /* call board_init_r */ + ldr pc, _board_init_r /* this is auto-relocated! */ + +#endif + + /* we should not return. */
Best regards
Andreas Bie?mann
PATCH v2 1/2 arm: move C runtime setup code in crt0.S
Hi Andreas,
Quoted 3 lines · Andreas Bie?mann
Dear Albert Aribaud,
DDR means DRAM in general?
Yes -- but DRAM is no better, as it still describes a technology (class). I'm going tu use "system RAM" to describe it.
Quoted 2 lines
Quoted 1 line
+ * must use GD to store any data which must be passed on to later,
-----------------------------------------------------------------------^
Fixed.
Quoted 4 lines
Quoted 2 lines
+ * stages, including the reloction destination and the new stack
+ * pointer address, below which the stack resides and above it the------------------------^
Full stop? The rest of the sentence makes no sense to me.
Rewritten.
Quoted 3 lines
Review
Quoted 2 lines
(quoted diff) +2
-0+#if defined(CONFIG_NAND_SPL) + /* deprecated, use instead CONFIG_SPL_BUILD */I wonder if we can emit a #warning here
Hmm... Will test and let people know how many boards stop compiling cleanly.
Quoted 4 lines
Quoted 1 line
+#ifdef
CONFIG_SPL_BUILDI think this should be negated. The coloured LED stuff was enabled for non SPL builds before!
Correct.
Quoted 8 lines
arch/arm/lib/crt0.S line 163
Quoted 7 lines
arch/arm/lib/crt0.S new file +7
-0+ + bl coloured_LED_init + bl red_led_on + +#endif + + /* call board_init_r(gd_t *id, ulong dest_addr) */Shouldn't this move down in the #elif path?
Moved.
Quoted 3 lines
Best regards
Andreas Bie?mann
Thanks a lot for your review!
Amicalement,
Signature · 1 line
Albert.
PATCH v2 2/2 arm: remove useless code in start.S files
In reply to Albert ARIBAUDRemove code such as unneeded includes or labels.
These removals have no functional effect.
---
Changes in v2:
- introduced in V2
arch/arm/cpu/arm925t/start.S | 4 ---- arch/arm/cpu/arm926ejs/start.S | 6 ------ 2 files changed, 10 deletions(-)
arch/arm/cpu/arm925t/start.S +0 -4
@@ -34,10 +34,6 @@ #include <config.h> #include <version.h> -#if defined(CONFIG_OMAP1510) -#include <./configs/omap1510.h> -#endif - /* ************************************************************************* *
arch/arm/cpu/arm926ejs/start.S +0 -6
@@ -36,12 +36,6 @@ #include <common.h> #include <version.h> -#if defined(CONFIG_OMAP1610) -#include <./configs/omap1510.h> -#elif defined(CONFIG_OMAP730) -#include <./configs/omap730.h> -#endif - /* ************************************************************************* *
Signature · 1 line
1.7.9.5
v2 cover Factorize ARM startup code as mush as possible.
In reply to Albert ARIBAUDHi Tom,
Quoted 3 lines · Albert ARIBAUD
The goal of this series is to scrub the
start.Sfiles which have proliferated acrossarch/armand eliminate code redundancy.
I know this came a bit late in early nov 4th, but I really would like it to be considered for 2013.01. Would you agree to make an exception for it? Thanks in advance.
Amicalement,
Signature · 1 line
Albert.
v2 cover Factorize ARM startup code as mush as possible.
Quoted 5 lines · Albert ARIBAUD
Hi Tom,
On Sun, 4 Nov 2012 12:32:03 +0100, Albert ARIBAUD <[email protected]> wrote:
Quoted 7 lines
Quoted 3 lines
The goal of this series is to scrub the
start.Sfiles which have proliferated acrossarch/armand eliminate code redundancy.I know this came a bit late in early nov 4th, but I really would like it to be considered for 2013.01. Would you agree to make an exception for it? Thanks in advance.
If you can collect a diverse set of Tested-by's, yes.
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20121104/191c58ba/attachment.pgp>
v2 cover Factorize ARM startup code as mush as possible.
Quoted 11 lines · Tom Rini
Quoted 9 lines · Albert ARIBAUD
Hi Tom,
Quoted 3 lines · Albert ARIBAUD
The goal of this series is to scrub the
start.Sfiles which have proliferated acrossarch/armand eliminate code redundancy.
Quoted 5 lines
Quoted 3 lines
I know this came a bit late in early nov 4th, but I really would like it to be considered for 2013.01. Would you agree to make an exception for it? Thanks in advance.
If you can collect a diverse set of Tested-by's, yes.
I have not gone through the patch, but will test it in a day or two on the hawkboard, and report the findings.
The hawkboard comes with the arm926ejs core, so that part of the code would be tested.
-sughosh
v2 cover Factorize ARM startup code as mush as possible.
hi Albert,
Quoted 16 lines · Sughosh Ganu
Quoted 15 lines · Tom Rini
Quoted 12 lines · Albert ARIBAUD
Hi Tom,
Quoted 3 lines · Albert ARIBAUD
The goal of this series is to scrub the
start.Sfiles which have proliferated acrossarch/armand eliminate code redundancy.I know this came a bit late in early nov 4th, but I really would like it to be considered for 2013.01. Would you agree to make an exception for it? Thanks in advance.
Quoted 7 lines
Quoted 1 line
If you can collect a diverse set of Tested-by's, yes.
I have not gone through the patch, but will test it in a day or two on the hawkboard, and report the findings.
The hawkboard comes with the arm926ejs core, so that part of the code would be tested.
I tried the 1st patch of the series, and with that u-boot does not come up on the board. It is also printing out some random values for the dram and nand sizes.
The patch was applied on top of commit 1cc619be8b7. Also, with the mentioned commit, u-boot boots up fine on the board. Also to be noted is that the spl image compiled with these changes is booting up fine, loading the main u-boot image, and jumping to it -- the issue is with booting the main u-boot image.
-sughosh
v2 cover Factorize ARM startup code as mush as possible.
Hi Sughosh,
Quoted 31 lines · Sughosh Ganu
hi Albert,
Quoted 16 lines · Sughosh Ganu
Quoted 15 lines · Tom Rini
Quoted 12 lines · Albert ARIBAUD
Hi Tom,
Quoted 3 lines · Albert ARIBAUD
The goal of this series is to scrub the
start.Sfiles which have proliferated acrossarch/armand eliminate code redundancy.I know this came a bit late in early nov 4th, but I really would like it to be considered for 2013.01. Would you agree to make an exception for it? Thanks in advance.
Quoted 7 lines
Quoted 1 line
If you can collect a diverse set of Tested-by's, yes.
I have not gone through the patch, but will test it in a day or two on the hawkboard, and report the findings.
The hawkboard comes with the arm926ejs core, so that part of the code would be tested.
I tried the 1st patch of the series, and with that u-boot does not come up on the board. It is also printing out some random values for the dram and nand sizes.
Quoted 5 lines
The patch was applied on top of commit
1cc619be8b7. Also, with the mentioned commit, u-boot boots up fine on the board. Also to be noted is that the spl image compiled with these changes is booting up fine, loading the main u-boot image, and jumping to it -- the issue is with booting the main u-boot image.
Thanks Sughosh. Can you build an U-Boot with the following defined in the hawkboard.h config file?
#define DEBUG
#if defined(CONFIG_SPL_BUILD) && ! defined (__ASSEMBLY__) static inline int printf(const char *fmt, ...)
{
return 0;
}#endif
Note: only the #define DEBUG matter to me, but with it alone, SPL build fails due to some code now requiring printf(). This is why I add a dummy printf definition for C code during SPL build -- ASM code does not need printf() and actually chokes on the definition, hence the condition on __ASSEMBLY__.
This debug U-Boot should print a lot more info. Can you please try it and copy/paste its output here? Thanks in advance.
Amicalement,
Signature · 1 line
Albert.
v2 cover Factorize ARM startup code as mush as possible.
hi Albert,
Quoted 55 lines · Albert ARIBAUD
Hi Sughosh,
Quoted 16 lines · Sughosh Ganu
hi Albert,
Quoted 13 lines · Sughosh Ganu
Quoted 12 lines · Tom Rini
Quoted 10 lines · Albert ARIBAUD
Hi Tom,
Quoted 3 lines · Albert ARIBAUD
The goal of this series is to scrub the
start.Sfiles which have proliferated acrossarch/armand eliminate code redundancy.I know this came a bit late in early nov 4th, but I really would
like
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
it to be considered for 2013.01. Would you agree to make an
exception
Quoted 14 lines
Quoted 9 lines
Quoted 3 lines
Quoted 1 line
for it? Thanks in advance.
If you can collect a diverse set of Tested-by's, yes.
I have not gone through the patch, but will test it in a day or two on the hawkboard, and report the findings.
The hawkboard comes with the arm926ejs core, so that part of the code would be tested.
I tried the 1st patch of the series, and with that u-boot does not come up on the board. It is also printing out some random values for the dram and nand sizes.
Quoted 5 lines
The patch was applied on top of commit
1cc619be8b7. Also, with the mentioned commit, u-boot boots up fine on the board. Also to be noted is that the spl image compiled with these changes is booting up fine, loading the main u-boot image, and jumping to it -- the issue is with booting the main u-boot image.Thanks Sughosh. Can you build an U-Boot with the following defined in the
hawkboard.hconfig file?#define DEBUG
#ifdefined(CONFIG_SPL_BUILD)&& ! defined (__ASSEMBLY__) static inline intprintf(const char *fmt, ...){ return 0; }#endif
Quoted 9 lines
Note: only the #define DEBUG matter to me, but with it alone, SPL build fails due to some code now requiring
printf(). This is why I add a dummy printf definition for C code during SPL build -- ASM code does not needprintf()and actually chokes on the definition, hence the condition on__ASSEMBLY__.This debug U-Boot should print a lot more info. Can you please try it and copy/paste its output here? Thanks in advance.
Unfortunately i am currently on vacation, with no access to the board, and
would be able to try out your suggested changes only after i am back, by
the end of next week. In the meantime, i am also trying to get myself a jtag debugger -- it is quite frustrating to provide half baked information.
I had tried enabling DEBUG in the board.c file, and with that, i saw that board_init_f completes, and the board hangs after returning from the function. Now i really need a debugger to figure out where exactly is the problem, as it could be in the relocation part, or while trying to jump to the board_init_r after having relocated the code. Hopefully, with a jtag debugger, i will be able to provide you a lot more info.
-sughosh
v2 cover Factorize ARM startup code as mush as possible.
Hi Sughosh,
Quoted 75 lines · Sughosh Ganu
hi Albert,
Quoted 55 lines · Albert ARIBAUD
Hi Sughosh,
Quoted 16 lines · Sughosh Ganu
hi Albert,
Quoted 13 lines · Sughosh Ganu
Quoted 12 lines · Tom Rini
Quoted 10 lines · Albert ARIBAUD
Hi Tom,
Quoted 3 lines · Albert ARIBAUD
The goal of this series is to scrub the
start.Sfiles which have proliferated acrossarch/armand eliminate code redundancy.I know this came a bit late in early nov 4th, but I really would
like
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
it to be considered for 2013.01. Would you agree to make an
exception
Quoted 14 lines
Quoted 9 lines
Quoted 3 lines
Quoted 1 line
for it? Thanks in advance.
If you can collect a diverse set of Tested-by's, yes.
I have not gone through the patch, but will test it in a day or two on the hawkboard, and report the findings.
The hawkboard comes with the arm926ejs core, so that part of the code would be tested.
I tried the 1st patch of the series, and with that u-boot does not come up on the board. It is also printing out some random values for the dram and nand sizes.
Quoted 5 lines
The patch was applied on top of commit
1cc619be8b7. Also, with the mentioned commit, u-boot boots up fine on the board. Also to be noted is that the spl image compiled with these changes is booting up fine, loading the main u-boot image, and jumping to it -- the issue is with booting the main u-boot image.Thanks Sughosh. Can you build an U-Boot with the following defined in the
hawkboard.hconfig file?#define DEBUG
#ifdefined(CONFIG_SPL_BUILD)&& ! defined (__ASSEMBLY__) static inline intprintf(const char *fmt, ...){ return 0; }#endif
Quoted 9 lines
Note: only the #define DEBUG matter to me, but with it alone, SPL build fails due to some code now requiring
printf(). This is why I add a dummy printf definition for C code during SPL build -- ASM code does not needprintf()and actually chokes on the definition, hence the condition on__ASSEMBLY__.This debug U-Boot should print a lot more info. Can you please try it and copy/paste its output here? Thanks in advance.
Unfortunately i am currently on vacation, with no access to the board, and
would be able to try out your suggested changes only after i am back, by
the end of next week. In the meantime, i am also trying to get myself a jtag debugger -- it is quite frustrating to provide half baked information.
Quoted 8 lines
I had tried enabling DEBUG in the
board.cfile, and with that, i saw thatboard_init_fcompletes, and the board hangs after returning from the function. Now i really need a debugger to figure out where exactly is the problem, as it could be in the relocation part, or while trying to jump to theboard_init_rafter having relocated the code. Hopefully, with a jtag debugger, i will be able to provide you a lot more info.-sughosh
Thanks for the feedback. Meanwhile, I have found two ugly bugs which would certainly affect execution past board_init_f(), so maybe your hawkboard was bitten by theses; next time please try v3, which fixes these bugs, or the latest patch version if v3 is obsolete by the time you come back.
Enjoy your vacation!
Amicalement,
Signature · 1 line
Albert.
v2 cover Factorize ARM startup code as mush as possible.
hi Albert,
On Tue Nov 13, 2012 at 08:55:23PM +0100, Albert ARIBAUD wrote:
<snip>
Quoted 36 lines
Quoted 27 lines
Quoted 27 lines
Quoted 9 lines
I tried the 1st patch of the series, and with that u-boot does not come up on the board. It is also printing out some random values for the dram and nand sizes.
The patch was applied on top of commit
1cc619be8b7. Also, with the mentioned commit, u-boot boots up fine on the board. Also to be noted is that the spl image compiled with these changes is booting up fine, loading the main u-boot image, and jumping to it -- the issue is with booting the main u-boot image.Thanks Sughosh. Can you build an U-Boot with the following defined in the
hawkboard.hconfig file?#define DEBUG
#ifdefined(CONFIG_SPL_BUILD)&& ! defined (__ASSEMBLY__) static inline intprintf(const char *fmt, ...){ return 0; }#endif
Note: only the #define DEBUG matter to me, but with it alone, SPL build fails due to some code now requiring
printf(). This is why I add a dummy printf definition for C code during SPL build -- ASM code does not needprintf()and actually chokes on the definition, hence the condition on__ASSEMBLY__.Quoted 9 lines
Quoted 3 lines
This debug U-Boot should print a lot more info. Can you please try it and copy/paste its output here? Thanks in advance.
Unfortunately i am currently on vacation, with no access to the board, and
would be able to try out your suggested changes only after i am back, by
the end of next week. In the meantime, i am also trying to get myself a jtag debugger -- it is quite frustrating to provide half baked information.
Quoted 5 lines
Thanks for the feedback. Meanwhile, I have found two ugly bugs which would certainly affect execution past
board_init_f(), so maybe your hawkboard was bitten by theses; next time please try v3, which fixes these bugs, or the latest patch version if v3 is obsolete by the time you come back.
I tested the v4 of your patches on hawkboard, and now the board boots up fine. Sorry, i took a little longer than i had expected to be back, so this got a bit delayed.
-sughosh
v3 cover Factorize ARM startup code as mush as possible.
In reply to Albert ARIBAUDThe goal of this series is to scrub the start.S files which have proliferated across arch/arm and eliminate code redundancy.
Currently this series only factorizes the C runtime framework, that is, the assembly code responsible for setting up the C environments needed by board_init_*() and relocate_code().
Further factorization is possible: relocate_code() can be moved out and possibly rewritten in C now that it has plain C function semantics; exception handlers should also be pretty much cpu-independent.
Eventually, start.S files should disappear or contain CPU-specific code only.
The new C runtime setup sequence has been validated step by step on target versatileqemu using toolchain ELDK4.2.
The whole changes have been build-tested across all ARM targets using MAKEALL -a arm.
Changes in v3:
- various clarifications and typo fixes
- fixed wrong LED calls conditional
- fixed open comment eating some code
- fixed code overrun in SPL case
Series-changes: 2
- moved description from cover letter to patch commit msg
- added note about tests in the cover letter
- fixed baords with CONFIG_SPL but not CONFIG_SPL_STACK
- no change
Changes in v2:
- introduced in V2
Albert ARIBAUD (2):
arm: move C runtime setup code in crt0.S
arm: remove useless code in start.S files
arch/arm/cpu/arm1136/start.S | 69 +++-------- arch/arm/cpu/arm1176/start.S | 62 ++-------- arch/arm/cpu/arm720t/start.S | 53 ++------- arch/arm/cpu/arm920t/start.S | 61 ++-------- arch/arm/cpu/arm925t/start.S | 65 ++--------- arch/arm/cpu/arm926ejs/start.S | 86 ++------------ arch/arm/cpu/arm946es/start.S | 56 ++------- arch/arm/cpu/arm_intcm/start.S | 63 ++-------- arch/arm/cpu/armv7/start.S | 58 +++------- arch/arm/cpu/ixp/start.S | 55 ++------- arch/arm/cpu/pxa/start.S | 63 ++-------- arch/arm/cpu/s3c44b0/start.S | 55 ++------- arch/arm/cpu/sa1100/start.S | 50 ++------ arch/arm/lib/Makefile | 2 + arch/arm/lib/board.c | 11 -- arch/arm/lib/crt0.S | 180 +++++++++++++++++++++++++++++ include/common.h | 2 +- include/configs/socfpga_cyclone5.h | 2 +- lib/asm-offsets.c | 10 ++ nand_spl/board/freescale/mx31pdk/Makefile | 6 +- nand_spl/board/karo/tx25/Makefile | 6 +- 21 files changed, 329 insertions(+), 686 deletions(-) create mode 100644 arch/arm/lib/crt0.S
Signature · 1 line
1.7.9.5
PATCH v3 1/2 arm: move C runtime setup code in crt0.S
Move all the C runtime setup code from every start.S in arch/arm into arch/arm/lib/crt0.S. This covers the code sequence from isetting up the initial stack to calling into board_init_r().
Also, rewrite the C runtime setup and make functions board_init_*() and relocate_code() behave according to normal C semantics (no jumping across the C stack any more, etc).
Some SPL targets had to be touched because they use start.S exolicitly or for some reason; the relevant maintainers and custodians are cc:ed.
---
Changes in v3:
- various clarifications and typo fixes
- fixed wrong LED calls conditional
- fixed open comment eating some code
- fixed code overrun in SPL case
Series-changes: 2
- moved description from cover letter to patch commit msg
- added note about tests in the cover letter
- fixed baords with CONFIG_SPL but not CONFIG_SPL_STACK
arch/arm/cpu/arm1136/start.S | 69 +++-------- arch/arm/cpu/arm1176/start.S | 62 ++-------- arch/arm/cpu/arm720t/start.S | 53 ++------- arch/arm/cpu/arm920t/start.S | 61 ++-------- arch/arm/cpu/arm925t/start.S | 61 ++-------- arch/arm/cpu/arm926ejs/start.S | 80 ++----------- arch/arm/cpu/arm946es/start.S | 56 ++------- arch/arm/cpu/arm_intcm/start.S | 63 ++-------- arch/arm/cpu/armv7/start.S | 58 +++------- arch/arm/cpu/ixp/start.S | 55 ++------- arch/arm/cpu/pxa/start.S | 63 ++-------- arch/arm/cpu/s3c44b0/start.S | 55 ++------- arch/arm/cpu/sa1100/start.S | 50 ++------ arch/arm/lib/Makefile | 2 + arch/arm/lib/board.c | 11 -- arch/arm/lib/crt0.S | 180 +++++++++++++++++++++++++++++ include/common.h | 2 +- include/configs/socfpga_cyclone5.h | 2 +- lib/asm-offsets.c | 10 ++ nand_spl/board/freescale/mx31pdk/Makefile | 6 +- nand_spl/board/karo/tx25/Makefile | 6 +- 21 files changed, 329 insertions(+), 676 deletions(-) create mode 100644 arch/arm/lib/crt0.S
arch/arm/cpu/arm1136/start.S +14 -55
@@ -165,13 +165,7 @@ next: bl cpu_init_crit #endif -/* 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 + bl _main /*------------------------------------------------------------------------------*/
@@ -188,14 +182,10 @@ relocate_code: mov r5, r1 /* save addr of gd */ mov r6, r2 /* save addr of destination */ - /* Set up the stack */ -stack_setup: - mov sp, r4 - adr r0, _start cmp r0, r6 moveq r9, #0 /* no relocation. relocation offset(r9) = 0 */ - beq clear_bss /* skip relocation */ + beq relocate_done /* skip relocation */ mov r1, r6 /* r1 <- scratch for copy_loop */ ldr r3, _image_copy_end_ofs add r2, r0, r3 /* r2 <- source end address */
@@ -255,52 +245,21 @@ _dynsym_start_ofs: .word __dynsym_start - _start #endif -clear_bss: -#ifdef CONFIG_SPL_BUILD - /* No relocation for SPL */ - ldr r0, =__bss_start - ldr r1, =__bss_end__ -#else - ldr r0, _bss_start_ofs - ldr r1, _bss_end_ofs - mov r4, r6 /* reloc addr */ - add r0, r0, r4 - add r1, r1, r4 -#endif - mov r2, #0x00000000 /* clear */ +relocate_done: -clbss_l:cmp r0, r1 /* clear loop... */ - bhs clbss_e /* if reached end of bss, exit */ - str r2, [r0] - add r0, r0, #4 - b clbss_l -clbss_e: + bx lr -/* - * We are done. Do not return, instead branch to second part of board - * initialization, now running from RAM. - */ -#ifdef CONFIG_NAND_SPL - ldr r0, _nand_boot_ofs - mov pc, r0 +_rel_dyn_start_ofs: + .word __rel_dyn_start - _start +_rel_dyn_end_ofs: + .word __rel_dyn_end - _start +_dynsym_start_ofs: + .word __dynsym_start - _start -_nand_boot_ofs: - .word nand_boot -#else -jump_2_ram: - ldr r0, _board_init_r_ofs - adr r1, _start - add lr, r0, r1 - add lr, lr, r9 - /* setup parameters for board_init_r */ - mov r0, r5 /* gd_t */ - mov r1, r6 /* dest_addr */ - /* jump to it ... */ - mov pc, lr - -_board_init_r_ofs: - .word board_init_r - _start -#endif + .globl c_runtime_cpu_setup +c_runtime_cpu_setup: + + bx lr /* *************************************************************************
arch/arm/cpu/arm1176/start.S +9 -53
90 lines not on this page · raw message
arch/arm/cpu/arm720t/start.S +8 -45
83 lines not on this page · raw message
arch/arm/cpu/arm920t/start.S +8 -53
91 lines not on this page · raw message
arch/arm/cpu/arm925t/start.S +8 -53
91 lines not on this page · raw message
arch/arm/cpu/arm926ejs/start.S +11 -69
110 lines not on this page · raw message
arch/arm/cpu/arm946es/start.S +8 -48
86 lines not on this page · raw message
arch/arm/cpu/arm_intcm/start.S +9 -54
91 lines not on this page · raw message
arch/arm/cpu/armv7/start.S +13 -45
93 lines not on this page · raw message
arch/arm/cpu/ixp/start.S +9 -46
83 lines not on this page · raw message
arch/arm/cpu/pxa/start.S +11 -52
95 lines not on this page · raw message
arch/arm/cpu/s3c44b0/start.S +9 -46
83 lines not on this page · raw message
arch/arm/cpu/sa1100/start.S +8 -42
80 lines not on this page · raw message
arch/arm/lib/Makefile +2 -0
@@ -36,6 +36,8 @@ GLSOBJS += _umodsi3.o GLCOBJS += div0.o +SOBJS-y += crt0.o + ifndef CONFIG_SPL_BUILD COBJS-y += board.o COBJS-y += bootm.o
arch/arm/lib/board.c +0 -11
@@ -272,11 +272,6 @@ void board_init_f(ulong bootflag)bootstage_mark_name (BOOTSTAGE_ID_START_UBOOT_F ,"board_init_f" ); -/* Pointer is writable since we allocated a register for it */ - gd = (gd_t *) ((CONFIG_SYS_INIT_SP_ADDR ) & ~0x07 ); -/* compiler optimization barrier needed for GCC >= 3.4 */ - __asm__ __volatile__("" : : :"memory" ); -memset ((void *)gd,0 ,sizeof (gd_t)); gd->mon_len = _bss_end_ofs;
@@ -458,10 +453,6 @@ void board_init_f(ulong bootflag) gd->fdt_blob = new_fdt; }memcpy (id, (void *)gd,sizeof (gd_t)); - -relocate_code (addr_sp, id, addr); - -/* NOTREACHED - relocate_code() does not return */ }#if !defined(CONFIG_SYS_NO_FLASH )
@@ -486,8 +477,6 @@ void board_init_r(gd_t *id, ulong dest_addr)ulong flash_size;#endif - gd = id; - gd->flags |=GD_FLG_RELOC ;/* tell others: relocation done */ bootstage_mark_name (BOOTSTAGE_ID_START_UBOOT_R ,"board_init_r" );
arch/arm/lib/crt0.S new file +180 -0
180 lines not on this page · raw message
include/common.h +1 -1
@@ -300,7 +300,7 @@ int abortboot(int bootdelay);extern char console_buffer[];/* arch/$(ARCH)/lib/board.c */ -void board_init_f (ulong ) __attribute__ ((noreturn)); +void board_init_f (ulong );void board_init_r (gd_t *,ulong ) __attribute__ ((noreturn));int checkboard (void );int checkflash (void );
include/configs/socfpga_cyclone5.h +1 -1
@@ -65,7 +65,7 @@#define CONFIG_SYS_BOOTMAPSZ ((256*1024*1024) - (4*1024))#define CONFIG_SPL_RAM_DEVICE -#define CONFIG_SPL_STACK (&__stack_start) +#define CONFIG_SPL_STACK CONFIG_SYS_INIT_SP_ADDR#define CONFIG_SYS_SPL_MALLOC_START ((unsigned long) (&__malloc_start))#define CONFIG_SYS_SPL_MALLOC_SIZE (&__malloc_end - &__malloc_start)
lib/asm-offsets.c +10 -0
@@ -28,5 +28,15 @@ int main(void)DEFINE (GENERATED_BD_INFO_SIZE , (sizeof (struct bd_info ) +15 ) & ~15 ); +DEFINE (GD_SIZE ,sizeof (struct global_data )); + +DEFINE (GD_BD , offsetof(struct global_data , bd)); + +DEFINE (GD_RELOCADDR , offsetof(struct global_data , relocaddr)); + +DEFINE (GD_RELOC_OFF , offsetof(struct global_data , reloc_off)); + +DEFINE (GD_START_ADDR_SP , offsetof(struct global_data , start_addr_sp)); +return 0 ; }
nand_spl/board/freescale/mx31pdk/Makefile +5 -1
@@ -12,11 +12,12 @@ LDFLAGS := -T $(nandobj)u-boot.lds -Ttext $(CONFIG_SYS_TEXT_BASE) $(LDFLAGS) \ AFLAGS += -DCONFIG_SPL_BUILD -DCONFIG_NAND_SPL CFLAGS += -DCONFIG_SPL_BUILD -DCONFIG_NAND_SPL -SOBJS = start.o lowlevel_init.o +SOBJS = start.o crt0.o lowlevel_init.o COBJS = nand_boot_fsl_nfc.o SRCS := $(SRCTREE)/nand_spl/nand_boot_fsl_nfc.c SRCS += $(SRCTREE)/arch/arm/cpu/arm1136/start.S +SRCS += $(SRCTREE)/arch/arm/lib/crt0.S SRCS += $(SRCTREE)/board/freescale/mx31pdk/lowlevel_init.S OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS)) __OBJS := $(SOBJS) $(COBJS)
@@ -49,6 +50,9 @@ $(nandobj)u-boot.lds: $(LDSCRIPT) $(LSTSCRIPT) $(obj)%.o: $(SRCTREE)/arch/arm/cpu/arm1136/%.S $(CC) $(AFLAGS) -c -o $@ $< +$(obj)%.o: $(SRCTREE)/arch/arm/lib/%.S + $(CC) $(AFLAGS) -c -o $@ $< + $(obj)%.o: $(SRCTREE)/board/freescale/mx31pdk/%.S $(CC) $(AFLAGS) -c -o $@ $<
nand_spl/board/karo/tx25/Makefile +5 -1
@@ -33,11 +33,12 @@ LDFLAGS := -T $(nandobj)u-boot.lds -Ttext $(CONFIG_SYS_TEXT_BASE) $(LDFLAGS) \ AFLAGS += -DCONFIG_SPL_BUILD -DCONFIG_NAND_SPL CFLAGS += -DCONFIG_SPL_BUILD -DCONFIG_NAND_SPL -SOBJS = start.o lowlevel_init.o +SOBJS = start.o crt0.o lowlevel_init.o COBJS = nand_boot_fsl_nfc.o SRCS := $(SRCTREE)/nand_spl/nand_boot_fsl_nfc.c SRCS += $(SRCTREE)/arch/arm/cpu/arm926ejs/start.S +SRCS += $(SRCTREE)/arch/arm/lib/crt0.S SRCS += $(SRCTREE)/board/karo/tx25/lowlevel_init.S OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS)) __OBJS := $(SOBJS) $(COBJS)
@@ -70,6 +71,9 @@ $(nandobj)u-boot.lds: $(LDSCRIPT) $(LSTSCRIPT) $(obj)%.o: $(SRCTREE)/arch/arm/cpu/arm926ejs/%.S $(CC) $(AFLAGS) -c -o $@ $< +$(obj)%.o: $(SRCTREE)/arch/arm/lib/%.S + $(CC) $(AFLAGS) -c -o $@ $< + $(obj)%.o: $(SRCTREE)/board/karo/tx25/%.S $(CC) $(AFLAGS) -c -o $@ $<
Signature · 1 line
1.7.9.5
PATCH v3 2/2 arm: remove useless code in start.S files
Remove code such as unneeded includes or labels.
These removals have no functional effect.
---
Changes in v3:
- no change
Changes in v2:
- introduced in V2
arch/arm/cpu/arm925t/start.S | 4 ---- arch/arm/cpu/arm926ejs/start.S | 6 ------ 2 files changed, 10 deletions(-)
arch/arm/cpu/arm925t/start.S +0 -4
@@ -34,10 +34,6 @@ #include <config.h> #include <version.h> -#if defined(CONFIG_OMAP1510) -#include <./configs/omap1510.h> -#endif - /* ************************************************************************* *
arch/arm/cpu/arm926ejs/start.S +0 -6
@@ -36,12 +36,6 @@ #include <common.h> #include <version.h> -#if defined(CONFIG_OMAP1610) -#include <./configs/omap1510.h> -#elif defined(CONFIG_OMAP730) -#include <./configs/omap730.h> -#endif - /* ************************************************************************* *
Signature · 1 line
1.7.9.5
PATCH v3 1/2 arm: move C runtime setup code in crt0.S
In reply to Albert ARIBAUDHi Albert,
Quoted 10 lines · Albert ARIBAUD
Move all the C runtime setup code from every
start.Sinarch/armintoarch/arm/lib/crt0.S. This covers the code sequence from isetting up the initial stack to calling intoboard_init_r().Also, rewrite the C runtime setup and make functions board_init_*() and
relocate_code()behave according to normal C semantics (no jumping across the C stack any more, etc).
Quoted 5 lines
Some SPL targets had to be touched because they use
start.Sexolicitly or for some reason; the relevant maintainers and custodians are cc:ed.Signed-off-by Albert ARIBAUD <[email protected]>
I am very pleased to see this. My generic relocation series from some time ago is still hanging around. Your series tidies up some things which would make that series easier to do. I'm happy to take another look at it.
I have tested your series on a Tegra seaboard, and got it running with a few changes. Please see comments below.
Quoted 35 lines
---
Changes in v3:
- various clarifications and typo fixes
- fixed wrong LED calls conditional
- fixed open comment eating some code
- fixed code overrun in SPL case
Series-changes: 2
- moved description from cover letter to patch commit msg
- added note about tests in the cover letter
- fixed baords withCONFIG_SPLbut notCONFIG_SPL_STACKarch/arm/cpu/arm1136/start.S | 69 +++-------- arch/arm/cpu/arm1176/start.S | 62 ++-------- arch/arm/cpu/arm720t/start.S | 53 ++------- arch/arm/cpu/arm920t/start.S | 61 ++-------- arch/arm/cpu/arm925t/start.S | 61 ++-------- arch/arm/cpu/arm926ejs/start.S | 80 ++----------- arch/arm/cpu/arm946es/start.S | 56 ++------- arch/arm/cpu/arm_intcm/start.S | 63 ++-------- arch/arm/cpu/armv7/start.S | 58 +++------- arch/arm/cpu/ixp/start.S | 55 ++------- arch/arm/cpu/pxa/start.S | 63 ++-------- arch/arm/cpu/s3c44b0/start.S | 55 ++------- arch/arm/cpu/sa1100/start.S | 50 ++------ arch/arm/lib/Makefile | 2 + arch/arm/lib/board.c | 11 -- arch/arm/lib/crt0.S | 180 +++++++++++++++++++++++++++++ include/common.h | 2 +- include/configs/socfpga_cyclone5.h | 2 +- lib/asm-offsets.c | 10 ++ nand_spl/board/freescale/mx31pdk/Makefile | 6 +- nand_spl/board/karo/tx25/Makefile | 6 +- 21 files changed, 329 insertions(+), 676 deletions(-) create mode 100644 arch/arm/lib/crt0.S
[snip]
Quoted 145 lines
arch/arm/lib/crt0.S new file +139
-0@@ -0,0 +1,180 @@ +/* + * crt0 - C-runtime startup Code for ARM U-Boot + * + * Copyright (c) 2012 Albert ARIBAUD <[email protected]> + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#include <config.h> +#include <asm-offsets.h> + +/* + * This file handles the target-independent stages of the U-Boot + * start-up where a C runtime environment is needed. Its entry point + * is _main and is branched into from the target's start.S file. + * + * _main execution sequence is: + * + * 1. Set up initial environment for calling board_init_f(). + * This environment only provides a stack and a place to store + * the GD ('global data') structure, both located in some readily + * available RAM (SRAM, locked cache...). In this context, VARIABLE + * global data, initialized or not (BSS), are UNAVAILABLE; only + * CONSTANT initialized data are available. + * + * 2. Call board_init_f(). This function prepares the hardware for + * execution from system RAM (DRAM, DDR...) As system RAM may not + * be available yet, , board_init_f() must use the current GD to + * store any data which must be passed on to later stages. These + * data include the relocation destination, the future stack, and + * the future GD location. + * + * 3. Set up intermediate environment where the stack and GD are the + * ones allocated by board_init_f() in system RAM, but BSS and + * initialized non-const data are still not available. + * + * 4. Call relocate_code(). This function relocates U-Boot from its + * current location into the relocation destination computed by + * board_init_f(). + * + * 5. Set up final environment for calling board_init_r(). This + * environment has BSS (initialized to 0), initialized non-const + * data (initialized to their intended value), and stack in system + * RAM. GD has retained values set by board_init_f(). Some CPUs + * have some work left to do at this point regarding memory, so + * call c_runtime_cpu_setup. + * + * 6. Branch to either _nand_boot() or board_init_r(). + */ + +/* + * offset of the nand_boot() function for SPL crt + */ + +#if defined(CONFIG_NAND_SPL) + +.globl nand_boot +_nand_boot: + .word nand_boot + +#elif ! defined(CONFIG_SPL_BUILD) + +/* + * offset of the board_init_r() function for non-SPL crt + */ + +.globl board_init_r +_board_init_r: + .word board_init_r + +#endif + +/* + * start and end of BSS + */ + +.globl __bss_start +.globl __bss_end__ + +/* + * entry point of crt0 sequence + */ + +.global _main + +_main: + +/* + * Set up initial C runtime environment and call board_init_f(0). + */ + +#if defined(CONFIG_NAND_SPL) + /* deprecated, use instead CONFIG_SPL_BUILD */ + ldr sp, =(CONFIG_SYS_INIT_SP_ADDR) +#elif defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_STACK) + ldr sp, =(CONFIG_SPL_STACK) +#else + ldr sp, =(CONFIG_SYS_INIT_SP_ADDR) +#endif + bic sp, sp, #7 /* 8-byte alignment for ABI compliance */ + mov r8, sp /* GD is above SP */ + mov r0, #0 + bl board_init_f + +/* + * Set up intermediate environment (new sp and gd) and call + * relocate_code(addr_sp, gd, addr_moni). Trick here is that + * we'll return 'here' but relocated. + */ + + ldr sp, [r8, #GD_START_ADDR_SP] /* r8 = gd->start_addr_sp */ + ldr r8, [r8, #GD_BD] /* r8 = gd->bd */ + sub r8, r8, #GD_SIZE /* new GD is below bd */ + +#if ! defined(CONFIG_SPL_BUILD) + + adr lr, here + ldr r0, [r8, #GD_RELOC_OFF] /* lr = gd->start_addr_sp */ + add lr, lr, r0 + ldr r0, [r8, #GD_START_ADDR_SP] /* r0 = gd->start_addr_sp */ + mov r1, r8 /* r1 = gd */ + ldr r2, [r8, #GD_RELOCADDR] /* r2 = gd->relocaddr */ + b relocate_code
arch/arm/lib/crt0.S line 149
Quoted 10 lines
arch/arm/lib/crt0.S new file +10
-0+here: + +#endif + +/* Set up final (full) environment */ + + bl c_runtime_cpu_setup /* we still call old routine here */ + + ldr r0, =__bss_start /* this is auto-relocated! */ + ldr r1, =__bss_end__ /* this is auto-relocated! */
I noticed this last time around - really we should have __bss_end__, not __bss_end. Something to look at in future work, perhaps.
arch/arm/lib/crt0.S line 156
Quoted 7 lines
arch/arm/lib/crt0.S new file +7
-0+ + mov r2, #0x00000000 /* prepare zero to clear BSS */ + +clbss_l:cmp r0, r1 /* while not at end of BSS */ + strlo r2, [r0] /* clear 32-bit BSS word */ + addlo r0, r0, #4 /* move to next */ + bhs clbss_l
I think this should be blo, not bhs. Otherwise the BSS does not get cleared and my seaboard doesn't boot properly.
Quoted 10 lines
arch/arm/lib/crt0.S new file +10
-0+ +#if ! defined(CONFIG_SPL_BUILD) + + bl coloured_LED_init + bl red_led_on + +#endif + +#if defined(CONFIG_NAND_SPL) +
arch/arm/lib/crt0.S line 176
Quoted 10 lines
arch/arm/lib/crt0.S new file +10
-0+ /* call _nand_boot() */ + ldr pc, _nand_boot + +#else + + /* call board_init_r(gd_t *id, ulong dest_addr) */ + mov r0, r8 /* gd_t */ + ldr r1, [r8, #GD_RELOCADDR] /* dest_addr */ + /* call board_init_r */ + ldr pc, _board_init_r /* this is auto-relocated! */
For my toolchain I need:
ldr pc, =board_init_r
otherwise I get:
crt0.S: Assembler messages:
crt0.S:176: Error: internal_relocation (type: OFFSET_IMM) not fixed up
Also _board_init_r seems to be the wrong symbol name for me:
arch/arm/lib/libarm.o: In function `clbss_l':/home/sjg/trunk/src/third_party/u-boot/files/arch/arm/lib/crt0.S:176:
undefined reference to `_board_init_r'
arch/arm/lib/crt0.S line 180
Quoted 4 lines
arch/arm/lib/crt0.S new file +4
-0+ +#endif + + /* we should not return here. */
[snip]
Regards,
Simon
PATCH v3 1/2 arm: move C runtime setup code in crt0.S
Hi Simon,
Quoted 18 lines · Simon Glass
Hi Albert,
Quoted 14 lines · Albert ARIBAUD
Move all the C runtime setup code from every
start.Sinarch/armintoarch/arm/lib/crt0.S. This covers the code sequence from isetting up the initial stack to calling intoboard_init_r().Also, rewrite the C runtime setup and make functions board_init_*() and
relocate_code()behave according to normal C semantics (no jumping across the C stack any more, etc).Some SPL targets had to be touched because they use
start.Sexolicitly or for some reason; the relevant maintainers and custodians are cc:ed.
Quoted 6 lines
Quoted 1 line
Signed-off-by Albert ARIBAUD <[email protected]>I am very pleased to see this. My generic relocation series from some time ago is still hanging around. Your series tidies up some things which would make that series easier to do. I'm happy to take another look at it.
I do remember your series -- it is part of what gave me the incentive toput this patch series together. :)
Quoted 8 lines
I have tested your series on a Tegra seaboard, and got it running with a few changes. Please see comments below.
arch/arm/lib/crt0.S line 149
Quoted 2 lines
arch/arm/lib/crt0.S new file +2
-0+ ldr r0, =__bss_start /* this is auto-relocated! */ + ldr r1, =__bss_end__ /* this is auto-relocated! */I noticed this last time around - really we should have
__bss_end__, not__bss_end. Something to look at in future work, perhaps.
Noted.
Quoted 4 lines
Quoted 1 line
+ bhs
clbss_lI think this should be blo, not bhs. Otherwise the BSS does not get cleared and my seaboard doesn't boot properly.
Thanks -- not the first time I see these... I'll have a go at checking all loops.
Quoted 11 lines
arch/arm/lib/crt0.S line 176
Quoted 2 lines
arch/arm/lib/crt0.S new file +2
-0+ /* call board_init_r */ + ldr pc, _board_init_r /* this is auto-relocated! */For my toolchain I need:
ldr pc, =board_init_r
otherwise I get:
crt0.S: Assembler messages:
crt0.S:176: Error:internal_relocation(type:OFFSET_IMM) not fixed up
Thanks -- this could well cure errors that Tom Warren reported to me for various toolchains.
Quoted 5 lines
Also
_board_init_rseems to be the wrong symbol name for me:
arch/arm/lib/libarm.o: In function `clbss_l':/home/sjg/trunk/src/third_party/u-boot/files/arch/arm/lib/crt0.S:176:
undefined reference to `_board_init_r'
Thanks a lot for the feedback and analysis! This should make V4 work on a much wider range of ARM boards.
Quoted 2 lines
Regards,
Simon
Amicalement,
Signature · 1 line
Albert.
v3 cover Factorize ARM startup code as mush as possible.
In reply to Albert ARIBAUDHi Albert,
Quoted 20 lines · Albert ARIBAUD
The goal of this series is to scrub the
start.Sfiles which have proliferated acrossarch/armand eliminate code redundancy.Currently this series only factorizes the C runtime framework, that is, the assembly code responsible for setting up the C environments needed by board_init_*() and
relocate_code().Further factorization is possible:
relocate_code()can be moved out and possibly rewritten in C now that it has plain C function semantics; exception handlers should also be pretty much cpu-independent.Eventually,
start.Sfiles should disappear or contain CPU-specific code only.The new C runtime setup sequence has been validated step by step on target versatileqemu using toolchain ELDK4.2.
Quoted 8 lines
The whole changes have been build-tested across all ARM targets using MAKEALL -a arm.
Changes in v3:
- various clarifications and typo fixes
- fixed wrong LED calls conditional
- fixed open comment eating some code
- fixed code overrun in SPL case
Note there is no warning for using 'deprecated' NAND_SPL yet. I'm running full MAKEALL -a arm on this and it'll be added in v4 depending on results.
Amicalement,
Signature · 1 line
Albert.
v4 cover Factorize ARM startup code as mush as possible.
In reply to Albert ARIBAUDThe goal of this series is to scrub the start.S files which have proliferated across arch/arm and eliminate code redundancy.
This series only factorizes the C runtime framework, that is, the assembly code responsible for setting up the C environments needed by board_init_*() and relocate_code().
Further factorization is possible: relocate_code() can be moved out and possibly rewritten in C now that it has plain C function semantics; exception handlers should also be pretty much cpu-independent.
Also, SPL currently makes board_init_f() perform all of the setting up, including BSS clearing and chain- loading. This could be streamlined by only putting basic inits in board_init_f(), letting crt0 do the BSS initialization and chain-loading U-Boot from inside board_init_r().
Eventually, start.S files should disappear or contain CPU-specific code only.
The new C runtime setup sequence has been validated step by step on targets versatileqemu using gcc version 4.2.2 from the ELDK4.2 toolchain, and wireless_space using gcc version 4.7.2 (Ubuntu/Linaro 4.7.2-1ubuntu1).
The whole changes have been build-tested across all ARM targets using MAKEALL -a arm.
Changes in v4:
- fixed bhs into blo in BSS init loop
- switched from explicit literals to '=target' notation
- fixed location of GD in initial environment
- stopped SPL boot sequence at calling board_init_f
Changes in v3:
- various clarifications and typo fixes
- fixed wrong LED calls conditional
- fixed open comment eating some code
- fixed code overrun in SPL case
Changes in v2:
- moved description from cover letter to patch commit msg
- added note about tests in the cover letter
- fixed baords with CONFIG_SPL but not CONFIG_SPL_STACK
- removed useless includes in arm926ejs and arm925t
Albert ARIBAUD (2):
arm: move C runtime setup code in crt0.S
arm: remove useless code in start.S files
arch/arm/cpu/arm1136/start.S | 71 +++--------- arch/arm/cpu/arm1176/start.S | 62 ++--------- arch/arm/cpu/arm720t/start.S | 53 ++------- arch/arm/cpu/arm920t/start.S | 61 ++-------- arch/arm/cpu/arm925t/start.S | 65 ++--------- arch/arm/cpu/arm926ejs/start.S | 86 ++------------ arch/arm/cpu/arm946es/start.S | 56 ++-------- arch/arm/cpu/arm_intcm/start.S | 63 ++--------- arch/arm/cpu/armv7/start.S | 58 +++------- arch/arm/cpu/ixp/start.S | 55 ++------- arch/arm/cpu/pxa/start.S | 63 ++--------- arch/arm/cpu/s3c44b0/start.S | 55 ++------- arch/arm/cpu/sa1100/start.S | 50 ++------- arch/arm/lib/Makefile | 2 + arch/arm/lib/board.c | 11 -- arch/arm/lib/crt0.S | 173 +++++++++++++++++++++++++++++ include/common.h | 2 +- include/configs/socfpga_cyclone5.h | 2 +- lib/asm-offsets.c | 10 ++ nand_spl/board/freescale/mx31pdk/Makefile | 6 +- nand_spl/board/karo/tx25/Makefile | 6 +- 21 files changed, 322 insertions(+), 688 deletions(-) create mode 100644 arch/arm/lib/crt0.S
Signature · 1 line
1.7.10.4
PATCH v4 1/2 arm: move C runtime setup code in crt0.S
Move all the C runtime setup code from every start.S in arch/arm into arch/arm/lib/crt0.S. This covers the code sequence from setting up the initial stack to calling into board_init_r().
Also, rewrite the C runtime setup and make functions board_init_*() and relocate_code() behave according to normal C semantics (no jumping across the C stack any more, etc).
Some SPL targets had to be touched because they use start.S explicitly or for some reason; the relevant maintainers and custodians are cc:ed.
---
Changes in v4:
- fixed bhs into blo in BSS init loop
- switched from explicit literals to '=target' notation
- fixed location of GD in initial environment
- stopped SPL boot sequence at calling board_init_f
Changes in v3:
- various clarifications and typo fixes
- fixed wrong LED calls conditional
- fixed open comment eating some code
- fixed code overrun in SPL case
Changes in v2:
- moved description from cover letter to patch commit msg
- added note about tests in the cover letter
- fixed baords with CONFIG_SPL but not CONFIG_SPL_STACK
arch/arm/cpu/arm1136/start.S | 71 +++--------- arch/arm/cpu/arm1176/start.S | 62 ++--------- arch/arm/cpu/arm720t/start.S | 53 ++------- arch/arm/cpu/arm920t/start.S | 61 ++-------- arch/arm/cpu/arm925t/start.S | 61 ++-------- arch/arm/cpu/arm926ejs/start.S | 80 ++----------- arch/arm/cpu/arm946es/start.S | 56 ++-------- arch/arm/cpu/arm_intcm/start.S | 63 ++--------- arch/arm/cpu/armv7/start.S | 58 +++------- arch/arm/cpu/ixp/start.S | 55 ++------- arch/arm/cpu/pxa/start.S | 63 ++--------- arch/arm/cpu/s3c44b0/start.S | 55 ++------- arch/arm/cpu/sa1100/start.S | 50 ++------- arch/arm/lib/Makefile | 2 + arch/arm/lib/board.c | 11 -- arch/arm/lib/crt0.S | 173 +++++++++++++++++++++++++++++ include/common.h | 2 +- include/configs/socfpga_cyclone5.h | 2 +- lib/asm-offsets.c | 10 ++ nand_spl/board/freescale/mx31pdk/Makefile | 6 +- nand_spl/board/karo/tx25/Makefile | 6 +- 21 files changed, 322 insertions(+), 678 deletions(-) create mode 100644 arch/arm/lib/crt0.S
arch/arm/cpu/arm1136/start.S +14 -57
@@ -165,13 +165,7 @@ next: bl cpu_init_crit #endif -/* 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 + bl _main /*------------------------------------------------------------------------------*/
@@ -188,14 +182,10 @@ relocate_code: mov r5, r1 /* save addr of gd */ mov r6, r2 /* save addr of destination */ - /* Set up the stack */ -stack_setup: - mov sp, r4 - adr r0, _start cmp r0, r6 moveq r9, #0 /* no relocation. relocation offset(r9) = 0 */ - beq clear_bss /* skip relocation */ + beq relocate_done /* skip relocation */ mov r1, r6 /* r1 <- scratch for copy_loop */ ldr r3, _image_copy_end_ofs add r2, r0, r3 /* r2 <- source end address */
@@ -245,7 +235,15 @@ fixnext: add r2, r2, #8 /* each rel.dyn entry is 8 bytes */ cmp r2, r3 blo fixloop - b clear_bss + bx lr + +#endif + +relocate_done: + + bx lr + +#ifndef CONFIG_SPL_BUILD _rel_dyn_start_ofs: .word __rel_dyn_start - _start
@@ -253,54 +251,13 @@ _rel_dyn_end_ofs: .word __rel_dyn_end - _start _dynsym_start_ofs: .word __dynsym_start - _start -#endif -clear_bss: -#ifdef CONFIG_SPL_BUILD - /* No relocation for SPL */ - ldr r0, =__bss_start - ldr r1, =__bss_end__ -#else - ldr r0, _bss_start_ofs - ldr r1, _bss_end_ofs - mov r4, r6 /* reloc addr */ - add r0, r0, r4 - add r1, r1, r4 #endif - mov r2, #0x00000000 /* clear */ - -clbss_l:cmp r0, r1 /* clear loop... */ - bhs clbss_e /* if reached end of bss, exit */ - str r2, [r0] - add r0, r0, #4 - b clbss_l -clbss_e: -/* - * We are done. Do not return, instead branch to second part of board - * initialization, now running from RAM. - */ -#ifdef CONFIG_NAND_SPL - ldr r0, _nand_boot_ofs - mov pc, r0 + .globl c_runtime_cpu_setup +c_runtime_cpu_setup: -_nand_boot_ofs: - .word nand_boot -#else -jump_2_ram: - ldr r0, _board_init_r_ofs - adr r1, _start - add lr, r0, r1 - add lr, lr, r9 - /* setup parameters for board_init_r */ - mov r0, r5 /* gd_t */ - mov r1, r6 /* dest_addr */ - /* jump to it ... */ - mov pc, lr - -_board_init_r_ofs: - .word board_init_r - _start -#endif + bx lr /* *************************************************************************
arch/arm/cpu/arm1176/start.S +9 -53
90 lines not on this page · raw message
arch/arm/cpu/arm720t/start.S +8 -45
83 lines not on this page · raw message
arch/arm/cpu/arm920t/start.S +8 -53
91 lines not on this page · raw message
arch/arm/cpu/arm925t/start.S +8 -53
91 lines not on this page · raw message
arch/arm/cpu/arm926ejs/start.S +11 -69
110 lines not on this page · raw message
arch/arm/cpu/arm946es/start.S +8 -48
86 lines not on this page · raw message
arch/arm/cpu/arm_intcm/start.S +9 -54
91 lines not on this page · raw message
arch/arm/cpu/armv7/start.S +13 -45
93 lines not on this page · raw message
arch/arm/cpu/ixp/start.S +9 -46
83 lines not on this page · raw message
arch/arm/cpu/pxa/start.S +11 -52
95 lines not on this page · raw message
arch/arm/cpu/s3c44b0/start.S +9 -46
83 lines not on this page · raw message
arch/arm/cpu/sa1100/start.S +8 -42
80 lines not on this page · raw message
arch/arm/lib/Makefile +2 -0
@@ -36,6 +36,8 @@ GLSOBJS += _umodsi3.o GLCOBJS += div0.o +SOBJS-y += crt0.o + ifndef CONFIG_SPL_BUILD COBJS-y += board.o COBJS-y += bootm.o
arch/arm/lib/board.c +0 -11
@@ -272,11 +272,6 @@ void board_init_f(ulong bootflag)bootstage_mark_name (BOOTSTAGE_ID_START_UBOOT_F ,"board_init_f" ); -/* Pointer is writable since we allocated a register for it */ - gd = (gd_t *) ((CONFIG_SYS_INIT_SP_ADDR ) & ~0x07 ); -/* compiler optimization barrier needed for GCC >= 3.4 */ - __asm__ __volatile__("" : : :"memory" ); -memset ((void *)gd,0 ,sizeof (gd_t)); gd->mon_len = _bss_end_ofs;
@@ -458,10 +453,6 @@ void board_init_f(ulong bootflag) gd->fdt_blob = new_fdt; }memcpy (id, (void *)gd,sizeof (gd_t)); - -relocate_code (addr_sp, id, addr); - -/* NOTREACHED - relocate_code() does not return */ }#if !defined(CONFIG_SYS_NO_FLASH )
@@ -486,8 +477,6 @@ void board_init_r(gd_t *id, ulong dest_addr)ulong flash_size;#endif - gd = id; - gd->flags |=GD_FLG_RELOC ;/* tell others: relocation done */ bootstage_mark_name (BOOTSTAGE_ID_START_UBOOT_R ,"board_init_r" );
arch/arm/lib/crt0.S new file +173 -0
173 lines not on this page · raw message
include/common.h +1 -1
@@ -300,7 +300,7 @@ int abortboot(int bootdelay);extern char console_buffer[];/* arch/$(ARCH)/lib/board.c */ -void board_init_f (ulong ) __attribute__ ((noreturn)); +void board_init_f (ulong );void board_init_r (gd_t *,ulong ) __attribute__ ((noreturn));int checkboard (void );int checkflash (void );
include/configs/socfpga_cyclone5.h +1 -1
@@ -65,7 +65,7 @@#define CONFIG_SYS_BOOTMAPSZ ((256*1024*1024) - (4*1024))#define CONFIG_SPL_RAM_DEVICE -#define CONFIG_SPL_STACK (&__stack_start) +#define CONFIG_SPL_STACK CONFIG_SYS_INIT_SP_ADDR#define CONFIG_SYS_SPL_MALLOC_START ((unsigned long) (&__malloc_start))#define CONFIG_SYS_SPL_MALLOC_SIZE (&__malloc_end - &__malloc_start)
lib/asm-offsets.c +10 -0
@@ -28,5 +28,15 @@ int main(void)DEFINE (GENERATED_BD_INFO_SIZE , (sizeof (struct bd_info ) +15 ) & ~15 ); +DEFINE (GD_SIZE ,sizeof (struct global_data )); + +DEFINE (GD_BD , offsetof(struct global_data , bd)); + +DEFINE (GD_RELOCADDR , offsetof(struct global_data , relocaddr)); + +DEFINE (GD_RELOC_OFF , offsetof(struct global_data , reloc_off)); + +DEFINE (GD_START_ADDR_SP , offsetof(struct global_data , start_addr_sp)); +return 0 ; }
nand_spl/board/freescale/mx31pdk/Makefile +5 -1
@@ -12,11 +12,12 @@ LDFLAGS := -T $(nandobj)u-boot.lds -Ttext $(CONFIG_SYS_TEXT_BASE) $(LDFLAGS) \ AFLAGS += -DCONFIG_SPL_BUILD -DCONFIG_NAND_SPL CFLAGS += -DCONFIG_SPL_BUILD -DCONFIG_NAND_SPL -SOBJS = start.o lowlevel_init.o +SOBJS = start.o crt0.o lowlevel_init.o COBJS = nand_boot_fsl_nfc.o SRCS := $(SRCTREE)/nand_spl/nand_boot_fsl_nfc.c SRCS += $(SRCTREE)/arch/arm/cpu/arm1136/start.S +SRCS += $(SRCTREE)/arch/arm/lib/crt0.S SRCS += $(SRCTREE)/board/freescale/mx31pdk/lowlevel_init.S OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS)) __OBJS := $(SOBJS) $(COBJS)
@@ -49,6 +50,9 @@ $(nandobj)u-boot.lds: $(LDSCRIPT) $(LSTSCRIPT) $(obj)%.o: $(SRCTREE)/arch/arm/cpu/arm1136/%.S $(CC) $(AFLAGS) -c -o $@ $< +$(obj)%.o: $(SRCTREE)/arch/arm/lib/%.S + $(CC) $(AFLAGS) -c -o $@ $< + $(obj)%.o: $(SRCTREE)/board/freescale/mx31pdk/%.S $(CC) $(AFLAGS) -c -o $@ $<
nand_spl/board/karo/tx25/Makefile +5 -1
@@ -33,11 +33,12 @@ LDFLAGS := -T $(nandobj)u-boot.lds -Ttext $(CONFIG_SYS_TEXT_BASE) $(LDFLAGS) \ AFLAGS += -DCONFIG_SPL_BUILD -DCONFIG_NAND_SPL CFLAGS += -DCONFIG_SPL_BUILD -DCONFIG_NAND_SPL -SOBJS = start.o lowlevel_init.o +SOBJS = start.o crt0.o lowlevel_init.o COBJS = nand_boot_fsl_nfc.o SRCS := $(SRCTREE)/nand_spl/nand_boot_fsl_nfc.c SRCS += $(SRCTREE)/arch/arm/cpu/arm926ejs/start.S +SRCS += $(SRCTREE)/arch/arm/lib/crt0.S SRCS += $(SRCTREE)/board/karo/tx25/lowlevel_init.S OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS)) __OBJS := $(SOBJS) $(COBJS)
@@ -70,6 +71,9 @@ $(nandobj)u-boot.lds: $(LDSCRIPT) $(LSTSCRIPT) $(obj)%.o: $(SRCTREE)/arch/arm/cpu/arm926ejs/%.S $(CC) $(AFLAGS) -c -o $@ $< +$(obj)%.o: $(SRCTREE)/arch/arm/lib/%.S + $(CC) $(AFLAGS) -c -o $@ $< + $(obj)%.o: $(SRCTREE)/board/karo/tx25/%.S $(CC) $(AFLAGS) -c -o $@ $<
Signature · 1 line
1.7.10.4
PATCH v4 2/2 arm: remove useless code in start.S files
Remove code such as unneeded includes or labels.
These removals have no functional effect.
---
Changes in v2:
- removed useless includes in arm926ejs and arm925t
arch/arm/cpu/arm925t/start.S | 4 ---- arch/arm/cpu/arm926ejs/start.S | 6 ------ 2 files changed, 10 deletions(-)
arch/arm/cpu/arm925t/start.S +0 -4
@@ -34,10 +34,6 @@ #include <config.h> #include <version.h> -#if defined(CONFIG_OMAP1510) -#include <./configs/omap1510.h> -#endif - /* ************************************************************************* *
arch/arm/cpu/arm926ejs/start.S +0 -6
@@ -36,12 +36,6 @@ #include <common.h> #include <version.h> -#if defined(CONFIG_OMAP1610) -#include <./configs/omap1510.h> -#elif defined(CONFIG_OMAP730) -#include <./configs/omap730.h> -#endif - /* ************************************************************************* *
Signature · 1 line
1.7.10.4
PATCH v4 2/2 arm: remove useless code in start.S files
Quoted 7 lines · Albert ARIBAUD
Remove code such as unneeded includes or labels.
These removals have no functional effect.Signed-off-by Albert ARIBAUD <[email protected]>---
Changes in v2:
- removed useless includes in arm926ejs and arm925t
On beaglebone Rev A5
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20130107/830ae3df/attachment.pgp>
PATCH v4 1/2 arm: move C runtime setup code in crt0.S
In reply to Albert ARIBAUDHi Albert,
Quoted 10 lines · Albert ARIBAUD
Move all the C runtime setup code from every
start.Sinarch/armintoarch/arm/lib/crt0.S. This covers the code sequence from setting up the initial stack to calling intoboard_init_r().Also, rewrite the C runtime setup and make functions board_init_*() and
relocate_code()behave according to normal C semantics (no jumping across the C stack any more, etc).
Quoted 5 lines
Some SPL targets had to be touched because they use
start.Sexplicitly or for some reason; the relevant maintainers and custodians are cc:ed.Signed-off-by Albert ARIBAUD <[email protected]>
I tested this on Seaboard (Tegra 20).
I tried to test it on a snow (exynos5250) but couldn't really sync up with our tree, so gave up. I am not completely sure about how the CONFIG_SPL_BUILD stuff fits together in start.S and I got a build error I wasn't sure how to correct (arch/arm/cpu/armv7/start.S:179:
undefined reference to `relocate_done')
Regards,
Simon
PATCH v4 1/2 arm: move C runtime setup code in crt0.S
Hi Simon,
Quoted 22 lines · Simon Glass
Hi Albert,
Quoted 10 lines · Albert ARIBAUD
Move all the C runtime setup code from every
start.Sinarch/armintoarch/arm/lib/crt0.S. This covers the code sequence from setting up the initial stack to calling intoboard_init_r().Also, rewrite the C runtime setup and make functions board_init_*() and
relocate_code()behave according to normal C semantics (no jumping across the C stack any more, etc).Quoted 5 lines
Some SPL targets had to be touched because they use
start.Sexplicitly or for some reason; the relevant maintainers and custodians are cc:ed.Signed-off-by Albert ARIBAUD <[email protected]>I tested this on Seaboard (Tegra 20).
Quoted 7 lines
Tested-by Simon Glass <[email protected]>I tried to test it on a snow (exynos5250) but couldn't really sync up with our tree, so gave up. I am not completely sure about how the
CONFIG_SPL_BUILDstuff fits together instart.Sand I got a build error I wasn't sure how to correct (arch/arm/cpu/armv7/start.S:179:
undefined reference to `relocate_done')
Thansk Simon.
In file arch/arm/cpu/armv7/start.S, line 179 uses relocate_done and line 228 provides it, and there is no preprocessor conditional in-between, so I fail to see how you could get this error.
Is your tree (and branch) available so that I can try and see the issue for myself? Either it'll uncover a problem in my patch series, or it'll help you merge it (or both).
Quoted 2 lines
Regards,
Simon
Amicalement,
Signature · 1 line
Albert.
PATCH v4 1/2 arm: move C runtime setup code in crt0.S
Hi Albert,
Quoted 37 lines · Albert ARIBAUD
Hi Simon,
Quoted 22 lines · Simon Glass
Hi Albert,
Quoted 10 lines · Albert ARIBAUD
Move all the C runtime setup code from every
start.Sinarch/armintoarch/arm/lib/crt0.S. This covers the code sequence from setting up the initial stack to calling intoboard_init_r().Also, rewrite the C runtime setup and make functions board_init_*() and
relocate_code()behave according to normal C semantics (no jumping across the C stack any more, etc).Quoted 5 lines
Some SPL targets had to be touched because they use
start.Sexplicitly or for some reason; the relevant maintainers and custodians are cc:ed.Signed-off-by Albert ARIBAUD <[email protected]>I tested this on Seaboard (Tegra 20).
Quoted 7 lines
Tested-by Simon Glass <[email protected]>I tried to test it on a snow (exynos5250) but couldn't really sync up with our tree, so gave up. I am not completely sure about how the
CONFIG_SPL_BUILDstuff fits together instart.Sand I got a build error I wasn't sure how to correct (arch/arm/cpu/armv7/start.S:179:
undefined reference to `relocate_done')Thansk Simon.
Quoted 7 lines
In file
arch/arm/cpu/armv7/start.S, line 179 usesrelocate_doneand line 228 provides it, and there is no preprocessor conditional in-between, so I fail to see how you could get this error.Is your tree (and branch) available so that I can try and see the issue for myself? Either it'll uncover a problem in my patch series, or it'll help you merge it (or both).
OK I will try a bit harder and come back to you. Sorry I can't do that immediately but will be soon...
Regards,
Simon
Quoted 7 lines
Quoted 3 lines
Regards,
SimonAmicalement,
--
Albert.
PATCH v4 1/2 arm: move C runtime setup code in crt0.S
Hi Simon,
Quoted 12 lines · Simon Glass
Quoted 12 lines
Quoted 5 lines
I tried to test it on a snow (exynos5250) but couldn't really sync up with our tree, so gave up. I am not completely sure about how the
CONFIG_SPL_BUILDstuff fits together instart.Sand I got a build error I wasn't sure how to correct (arch/arm/cpu/armv7/start.S:179:
undefined reference to `relocate_done')Thansk Simon.
In file
arch/arm/cpu/armv7/start.S, line 179 usesrelocate_doneand line 228 provides it, and there is no preprocessor conditional in-between, so I fail to see how you could get this error.
Quoted 6 lines
Quoted 3 lines
Is your tree (and branch) available so that I can try and see the issue for myself? Either it'll uncover a problem in my patch series, or it'll help you merge it (or both).
OK I will try a bit harder and come back to you. Sorry I can't do that immediately but will be soon...
Did you manage to reproduce or sort out this issue?
Quoted 2 lines
Regards,
Simon
Amicalement,
Signature · 1 line
Albert.
PATCH v4 1/2 arm: move C runtime setup code in crt0.S
Hi Albert,
Quoted 17 lines · Albert ARIBAUD
Hi Simon,
Quoted 12 lines · Simon Glass
Quoted 12 lines
Quoted 5 lines
I tried to test it on a snow (exynos5250) but couldn't really sync up with our tree, so gave up. I am not completely sure about how the
CONFIG_SPL_BUILDstuff fits together instart.Sand I got a build error I wasn't sure how to correct (arch/arm/cpu/armv7/start.S:179:
undefined reference to `relocate_done')Thansk Simon.
In file
arch/arm/cpu/armv7/start.S, line 179 usesrelocate_doneand line 228 provides it, and there is no preprocessor conditional in-between, so I fail to see how you could get this error.
Quoted 8 lines
Quoted 6 lines
Quoted 3 lines
Is your tree (and branch) available so that I can try and see the issue for myself? Either it'll uncover a problem in my patch series, or it'll help you merge it (or both).
OK I will try a bit harder and come back to you. Sorry I can't do that immediately but will be soon...
Did you manage to reproduce or sort out this issue?
No, I was hoping that I would be able to test upstream U-Boot on snow (waiting on some memory patches to appear), but that hasn't happened. I will have another go at working out the problem - either this week or next depending on when I can set aside the time for it. However, please don't hold up the series for it.
Quoted 7 lines
Quoted 3 lines
Regards,
SimonAmicalement,
--
Albert.
Regards,
Simon
PATCH v4 1/2 arm: move C runtime setup code in crt0.S
Hi Albert,
Quoted 28 lines · Simon Glass
Hi Albert,
Quoted 24 lines · Albert ARIBAUD
Hi Simon,
Quoted 18 lines · Simon Glass
Quoted 8 lines
Quoted 5 lines
I tried to test it on a snow (exynos5250) but couldn't really sync up with our tree, so gave up. I am not completely sure about how the
CONFIG_SPL_BUILDstuff fits together instart.Sand I got a build error I wasn't sure how to correct (arch/arm/cpu/armv7/start.S:179:
undefined reference to `relocate_done')Thansk Simon.
Quoted 7 lines
In file
arch/arm/cpu/armv7/start.S, line 179 usesrelocate_doneand line 228 provides it, and there is no preprocessor conditional in-between, so I fail to see how you could get this error.Is your tree (and branch) available so that I can try and see the issue for myself? Either it'll uncover a problem in my patch series, or it'll help you merge it (or both).
OK I will try a bit harder and come back to you. Sorry I can't do that immediately but will be soon...
Quoted 7 lines
Quoted 1 line
Did you manage to reproduce or sort out this issue?
No, I was hoping that I would be able to test upstream U-Boot on snow (waiting on some memory patches to appear), but that hasn't happened. I will have another go at working out the problem - either this week or next depending on when I can set aside the time for it. However, please don't hold up the series for it.
I have tested this on snow at last. My problem was basically the distance between our tree and upstream - we are just coming up to a rebase so are at the furthest point.
Quoted 11 lines
Quoted 8 lines
Quoted 4 lines
Regards,
SimonAmicalement,
--
Albert.Regards,
Simon
PATCH v4 1/2 arm: move C runtime setup code in crt0.S
In reply to Albert ARIBAUDQuoted 10 lines · Albert ARIBAUD
Move all the C runtime setup code from every
start.Sinarch/armintoarch/arm/lib/crt0.S. This covers the code sequence from setting up the initial stack to calling intoboard_init_r().Also, rewrite the C runtime setup and make functions board_init_*() and
relocate_code()behave according to normal C semantics (no jumping across the C stack any more, etc).
Quoted 6 lines
Some SPL targets had to be touched because they use
start.Sexplicitly or for some reason; the relevant maintainers and custodians are cc:ed.Signed-off-by Albert ARIBAUD <[email protected]>---
Tested on hawkboard. Spl and u-boot images boot up fine with these changes.
-sughosh
PATCH v4 1/2 arm: move C runtime setup code in crt0.S
In reply to Albert ARIBAUDQuoted 10 lines · Albert ARIBAUD
Move all the C runtime setup code from every
start.Sinarch/armintoarch/arm/lib/crt0.S. This covers the code sequence from setting up the initial stack to calling intoboard_init_r().Also, rewrite the C runtime setup and make functions board_init_*() and
relocate_code()behave according to normal C semantics (no jumping across the C stack any more, etc).
Quoted 5 lines
Some SPL targets had to be touched because they use
start.Sexplicitly or for some reason; the relevant maintainers and custodians are cc:ed.Signed-off-by Albert ARIBAUD <[email protected]>
On beaglebone Rev A5
Signature · 1 line
Tom
PATCH v4 1/2 arm: move C runtime setup code in crt0.S
In reply to Albert ARIBAUDQuoted 28 lines · Albert ARIBAUD
Move all the C runtime setup code from every
start.Sinarch/armintoarch/arm/lib/crt0.S. This covers the code sequence from setting up the initial stack to calling intoboard_init_r().Also, rewrite the C runtime setup and make functions board_init_*() and
relocate_code()behave according to normal C semantics (no jumping across the C stack any more, etc).Some SPL targets had to be touched because they use
start.Sexplicitly or for some reason; the relevant maintainers and custodians are cc:ed.Signed-off-by Albert ARIBAUD <[email protected]>---
Changes in v4:
- fixed bhs into blo in BSS init loop
- switched from explicit literals to '=target' notation
- fixed location of GD in initial environment
- stopped SPL boot sequence at callingboard_init_fChanges in v3:
- various clarifications and typo fixes
- fixed wrong LED calls conditional
- fixed open comment eating some code
- fixed code overrun in SPL case
Quoted 4 lines
Changes in v2:
- moved description from cover letter to patch commit msg
- added note about tests in the cover letter
- fixed baords withCONFIG_SPLbut notCONFIG_SPL_STACK
This change breaks sandbox, powerpc, mips and m68k. I suspect fixing sandbox will be the easiest test-case and catch all of the others.
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20130108/e9d871df/attachment.pgp>
PATCH v4 1/2 arm: move C runtime setup code in crt0.S
Hi Tom,
Quoted 30 lines · Tom Rini
Quoted 28 lines · Albert ARIBAUD
Move all the C runtime setup code from every
start.Sinarch/armintoarch/arm/lib/crt0.S. This covers the code sequence from setting up the initial stack to calling intoboard_init_r().Also, rewrite the C runtime setup and make functions board_init_*() and
relocate_code()behave according to normal C semantics (no jumping across the C stack any more, etc).Some SPL targets had to be touched because they use
start.Sexplicitly or for some reason; the relevant maintainers and custodians are cc:ed.Signed-off-by Albert ARIBAUD <[email protected]>---
Changes in v4:
- fixed bhs into blo in BSS init loop
- switched from explicit literals to '=target' notation
- fixed location of GD in initial environment
- stopped SPL boot sequence at callingboard_init_fChanges in v3:
- various clarifications and typo fixes
- fixed wrong LED calls conditional
- fixed open comment eating some code
- fixed code overrun in SPL case
Quoted 10 lines
Quoted 4 lines
Changes in v2:
- moved description from cover letter to patch commit msg
- added note about tests in the cover letter
- fixed baords withCONFIG_SPLbut notCONFIG_SPL_STACKThis change breaks sandbox, powerpc, mips and m68k. I suspect fixing sandbox will be the easiest test-case and catch all of the others.
Signature · 1 line
Tom
Ok, then, rolling back ARM and pushing v5 to fix breakage on non-ARM arches.
Amicalement,
Signature · 1 line
Albert.
v5 cover Factorize ARM startup code as much as possible.
In reply to Albert ARIBAUDThe goal of this series is to scrub the start.S files which have proliferated across arch/arm and eliminate code redundancy.
This series only factorizes the C runtime framework, that is, the assembly code responsible for setting up the C environments needed by board_init_*() and relocate_code().
Further factorization is possible: relocate_code() can be moved out and possibly rewritten in C now that it has plain C function semantics; exception handlers should also be pretty much cpu-independent.
Also, SPL currently makes board_init_f() perform all of the setting up, including BSS clearing and chain- loading. This could be streamlined by only putting basic inits in board_init_f(), letting crt0 do the BSS initialization and chain-loading U-Boot from inside board_init_r().
Eventually, start.S files should disappear or contain CPU-specific code only.
The new C runtime setup sequence has been validated step by step on targets versatileqemu using gcc version 4.2.2 from the ELDK4.2 toolchain, and wireless_space using gcc version 4.7.2 (Ubuntu/Linaro 4.7.2-1ubuntu1).
The whole changes have been build-tested across all ARM targets using MAKEALL -a arm.
Changes in v5:
- Fixed build on non-ARM architectures
Changes in v4:
- fixed bhs into blo in BSS init loop
- switched from explicit literals to '=target' notation
- fixed location of GD in initial environment
- stopped SPL boot sequence at calling board_init_f
Changes in v3:
- various clarifications and typo fixes
- fixed wrong LED calls conditional
- fixed open comment eating some code
- fixed code overrun in SPL case
Changes in v2:
- moved description from cover letter to patch commit msg
- added note about tests in the cover letter
- fixed baords with CONFIG_SPL but not CONFIG_SPL_STACK
- removed useless includes in arm926ejs and arm925t
Albert ARIBAUD (2):
arm: move C runtime setup code in crt0.S
arm: remove useless code in start.S files
arch/arm/cpu/arm1136/start.S | 71 +++--------- arch/arm/cpu/arm1176/start.S | 62 ++--------- arch/arm/cpu/arm720t/start.S | 53 ++------- arch/arm/cpu/arm920t/start.S | 61 ++-------- arch/arm/cpu/arm925t/start.S | 65 ++--------- arch/arm/cpu/arm926ejs/start.S | 86 ++------------ arch/arm/cpu/arm946es/start.S | 56 ++-------- arch/arm/cpu/arm_intcm/start.S | 63 ++--------- arch/arm/cpu/armv7/start.S | 58 +++------- arch/arm/cpu/ixp/start.S | 55 ++------- arch/arm/cpu/pxa/start.S | 63 ++--------- arch/arm/cpu/s3c44b0/start.S | 55 ++------- arch/arm/cpu/sa1100/start.S | 50 ++------- arch/arm/lib/Makefile | 2 + arch/arm/lib/board.c | 11 -- arch/arm/lib/crt0.S | 173 +++++++++++++++++++++++++++++ include/common.h | 2 +- include/configs/socfpga_cyclone5.h | 2 +- lib/asm-offsets.c | 14 +++ nand_spl/board/freescale/mx31pdk/Makefile | 6 +- nand_spl/board/karo/tx25/Makefile | 6 +- 21 files changed, 326 insertions(+), 688 deletions(-) create mode 100644 arch/arm/lib/crt0.S
Signature · 1 line
1.7.10.4
PATCH v5 1/2 arm: move C runtime setup code in crt0.S
Move all the C runtime setup code from every start.S in arch/arm into arch/arm/lib/crt0.S. This covers the code sequence from setting up the initial stack to calling into board_init_r().
Also, rewrite the C runtime setup and make functions board_init_*() and relocate_code() behave according to normal C semantics (no jumping across the C stack any more, etc).
Some SPL targets had to be touched because they use start.S explicitly or for some reason; the relevant maintainers and custodians are cc:ed.
---
Changes in v5:
- Fixed build on non-ARM architectures
Changes in v4:
- fixed bhs into blo in BSS init loop
- switched from explicit literals to '=target' notation
- fixed location of GD in initial environment
- stopped SPL boot sequence at calling board_init_f
Changes in v3:
- various clarifications and typo fixes
- fixed wrong LED calls conditional
- fixed open comment eating some code
- fixed code overrun in SPL case
Changes in v2:
- moved description from cover letter to patch commit msg
- added note about tests in the cover letter
- fixed baords with CONFIG_SPL but not CONFIG_SPL_STACK
arch/arm/cpu/arm1136/start.S | 71 +++--------- arch/arm/cpu/arm1176/start.S | 62 ++--------- arch/arm/cpu/arm720t/start.S | 53 ++------- arch/arm/cpu/arm920t/start.S | 61 ++-------- arch/arm/cpu/arm925t/start.S | 61 ++-------- arch/arm/cpu/arm926ejs/start.S | 80 ++----------- arch/arm/cpu/arm946es/start.S | 56 ++-------- arch/arm/cpu/arm_intcm/start.S | 63 ++--------- arch/arm/cpu/armv7/start.S | 58 +++------- arch/arm/cpu/ixp/start.S | 55 ++------- arch/arm/cpu/pxa/start.S | 63 ++--------- arch/arm/cpu/s3c44b0/start.S | 55 ++------- arch/arm/cpu/sa1100/start.S | 50 ++------- arch/arm/lib/Makefile | 2 + arch/arm/lib/board.c | 11 -- arch/arm/lib/crt0.S | 173 +++++++++++++++++++++++++++++ include/common.h | 2 +- include/configs/socfpga_cyclone5.h | 2 +- lib/asm-offsets.c | 14 +++ nand_spl/board/freescale/mx31pdk/Makefile | 6 +- nand_spl/board/karo/tx25/Makefile | 6 +- 21 files changed, 326 insertions(+), 678 deletions(-) create mode 100644 arch/arm/lib/crt0.S
arch/arm/cpu/arm1136/start.S +14 -57
@@ -165,13 +165,7 @@ next: bl cpu_init_crit #endif -/* 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 + bl _main /*------------------------------------------------------------------------------*/
@@ -188,14 +182,10 @@ relocate_code: mov r5, r1 /* save addr of gd */ mov r6, r2 /* save addr of destination */ - /* Set up the stack */ -stack_setup: - mov sp, r4 - adr r0, _start cmp r0, r6 moveq r9, #0 /* no relocation. relocation offset(r9) = 0 */ - beq clear_bss /* skip relocation */ + beq relocate_done /* skip relocation */ mov r1, r6 /* r1 <- scratch for copy_loop */ ldr r3, _image_copy_end_ofs add r2, r0, r3 /* r2 <- source end address */
@@ -245,7 +235,15 @@ fixnext: add r2, r2, #8 /* each rel.dyn entry is 8 bytes */ cmp r2, r3 blo fixloop - b clear_bss + bx lr + +#endif + +relocate_done: + + bx lr + +#ifndef CONFIG_SPL_BUILD _rel_dyn_start_ofs: .word __rel_dyn_start - _start
@@ -253,54 +251,13 @@ _rel_dyn_end_ofs: .word __rel_dyn_end - _start _dynsym_start_ofs: .word __dynsym_start - _start -#endif -clear_bss: -#ifdef CONFIG_SPL_BUILD - /* No relocation for SPL */ - ldr r0, =__bss_start - ldr r1, =__bss_end__ -#else - ldr r0, _bss_start_ofs - ldr r1, _bss_end_ofs - mov r4, r6 /* reloc addr */ - add r0, r0, r4 - add r1, r1, r4 #endif - mov r2, #0x00000000 /* clear */ - -clbss_l:cmp r0, r1 /* clear loop... */ - bhs clbss_e /* if reached end of bss, exit */ - str r2, [r0] - add r0, r0, #4 - b clbss_l -clbss_e: -/* - * We are done. Do not return, instead branch to second part of board - * initialization, now running from RAM. - */ -#ifdef CONFIG_NAND_SPL - ldr r0, _nand_boot_ofs - mov pc, r0 + .globl c_runtime_cpu_setup +c_runtime_cpu_setup: -_nand_boot_ofs: - .word nand_boot -#else -jump_2_ram: - ldr r0, _board_init_r_ofs - adr r1, _start - add lr, r0, r1 - add lr, lr, r9 - /* setup parameters for board_init_r */ - mov r0, r5 /* gd_t */ - mov r1, r6 /* dest_addr */ - /* jump to it ... */ - mov pc, lr - -_board_init_r_ofs: - .word board_init_r - _start -#endif + bx lr /* *************************************************************************
arch/arm/cpu/arm1176/start.S +9 -53
90 lines not on this page · raw message
arch/arm/cpu/arm720t/start.S +8 -45
83 lines not on this page · raw message
arch/arm/cpu/arm920t/start.S +8 -53
91 lines not on this page · raw message
arch/arm/cpu/arm925t/start.S +8 -53
91 lines not on this page · raw message
arch/arm/cpu/arm926ejs/start.S +11 -69
110 lines not on this page · raw message
arch/arm/cpu/arm946es/start.S +8 -48
86 lines not on this page · raw message
arch/arm/cpu/arm_intcm/start.S +9 -54
91 lines not on this page · raw message
arch/arm/cpu/armv7/start.S +13 -45
93 lines not on this page · raw message
arch/arm/cpu/ixp/start.S +9 -46
83 lines not on this page · raw message
arch/arm/cpu/pxa/start.S +11 -52
95 lines not on this page · raw message
arch/arm/cpu/s3c44b0/start.S +9 -46
83 lines not on this page · raw message
arch/arm/cpu/sa1100/start.S +8 -42
80 lines not on this page · raw message
arch/arm/lib/Makefile +2 -0
@@ -36,6 +36,8 @@ GLSOBJS += _umodsi3.o GLCOBJS += div0.o +SOBJS-y += crt0.o + ifndef CONFIG_SPL_BUILD COBJS-y += board.o COBJS-y += bootm.o
arch/arm/lib/board.c +0 -11
@@ -279,11 +279,6 @@ void board_init_f(ulong bootflag)bootstage_mark_name (BOOTSTAGE_ID_START_UBOOT_F ,"board_init_f" ); -/* Pointer is writable since we allocated a register for it */ - gd = (gd_t *) ((CONFIG_SYS_INIT_SP_ADDR ) & ~0x07 ); -/* compiler optimization barrier needed for GCC >= 3.4 */ - __asm__ __volatile__("" : : :"memory" ); -memset ((void *)gd,0 ,sizeof (gd_t)); gd->mon_len = _bss_end_ofs;
@@ -465,10 +460,6 @@ void board_init_f(ulong bootflag) gd->fdt_blob = new_fdt; }memcpy (id, (void *)gd,sizeof (gd_t)); - -relocate_code (addr_sp, id, addr); - -/* NOTREACHED - relocate_code() does not return */ }#if !defined(CONFIG_SYS_NO_FLASH )
@@ -493,8 +484,6 @@ void board_init_r(gd_t *id, ulong dest_addr)ulong flash_size;#endif - gd = id; - gd->flags |=GD_FLG_RELOC ;/* tell others: relocation done */ bootstage_mark_name (BOOTSTAGE_ID_START_UBOOT_R ,"board_init_r" );
arch/arm/lib/crt0.S new file +173 -0
173 lines not on this page · raw message
include/common.h +1 -1
@@ -300,7 +300,7 @@ int abortboot(int bootdelay);extern char console_buffer[];/* arch/$(ARCH)/lib/board.c */ -void board_init_f (ulong ) __attribute__ ((noreturn)); +void board_init_f (ulong );void board_init_r (gd_t *,ulong ) __attribute__ ((noreturn));int checkboard (void );int checkflash (void );
include/configs/socfpga_cyclone5.h +1 -1
@@ -65,7 +65,7 @@#define CONFIG_SYS_BOOTMAPSZ ((256*1024*1024) - (4*1024))#define CONFIG_SPL_RAM_DEVICE -#define CONFIG_SPL_STACK (&__stack_start) +#define CONFIG_SPL_STACK CONFIG_SYS_INIT_SP_ADDR#define CONFIG_SYS_SPL_MALLOC_START ((unsigned long) (&__malloc_start))#define CONFIG_SYS_SPL_MALLOC_SIZE (&__malloc_end - &__malloc_start)
lib/asm-offsets.c +14 -0
@@ -28,5 +28,19 @@ int main(void)DEFINE (GENERATED_BD_INFO_SIZE , (sizeof (struct bd_info ) +15 ) & ~15 ); +DEFINE (GD_SIZE ,sizeof (struct global_data )); + +DEFINE (GD_BD , offsetof(struct global_data , bd)); + +#if defined(CONFIG_ARM ) + +DEFINE (GD_RELOCADDR , offsetof(struct global_data , relocaddr)); + +DEFINE (GD_RELOC_OFF , offsetof(struct global_data , reloc_off)); + +DEFINE (GD_START_ADDR_SP , offsetof(struct global_data , start_addr_sp)); + +#endif +return 0 ; }
nand_spl/board/freescale/mx31pdk/Makefile +5 -1
@@ -12,11 +12,12 @@ LDFLAGS := -T $(nandobj)u-boot.lds -Ttext $(CONFIG_SYS_TEXT_BASE) $(LDFLAGS) \ AFLAGS += -DCONFIG_SPL_BUILD -DCONFIG_NAND_SPL CFLAGS += -DCONFIG_SPL_BUILD -DCONFIG_NAND_SPL -SOBJS = start.o lowlevel_init.o +SOBJS = start.o crt0.o lowlevel_init.o COBJS = nand_boot_fsl_nfc.o SRCS := $(SRCTREE)/nand_spl/nand_boot_fsl_nfc.c SRCS += $(SRCTREE)/arch/arm/cpu/arm1136/start.S +SRCS += $(SRCTREE)/arch/arm/lib/crt0.S SRCS += $(SRCTREE)/board/freescale/mx31pdk/lowlevel_init.S OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS)) __OBJS := $(SOBJS) $(COBJS)
@@ -50,6 +51,9 @@ $(nandobj)u-boot.lds: $(LDSCRIPT) $(LSTSCRIPT) $(obj)%.o: $(SRCTREE)/arch/arm/cpu/arm1136/%.S $(CC) $(AFLAGS) -c -o $@ $< +$(obj)%.o: $(SRCTREE)/arch/arm/lib/%.S + $(CC) $(AFLAGS) -c -o $@ $< + $(obj)%.o: $(SRCTREE)/board/freescale/mx31pdk/%.S $(CC) $(AFLAGS) -c -o $@ $<
nand_spl/board/karo/tx25/Makefile +5 -1
@@ -33,11 +33,12 @@ LDFLAGS := -T $(nandobj)u-boot.lds -Ttext $(CONFIG_SYS_TEXT_BASE) $(LDFLAGS) \ AFLAGS += -DCONFIG_SPL_BUILD -DCONFIG_NAND_SPL CFLAGS += -DCONFIG_SPL_BUILD -DCONFIG_NAND_SPL -SOBJS = start.o lowlevel_init.o +SOBJS = start.o crt0.o lowlevel_init.o COBJS = nand_boot_fsl_nfc.o SRCS := $(SRCTREE)/nand_spl/nand_boot_fsl_nfc.c SRCS += $(SRCTREE)/arch/arm/cpu/arm926ejs/start.S +SRCS += $(SRCTREE)/arch/arm/lib/crt0.S SRCS += $(SRCTREE)/board/karo/tx25/lowlevel_init.S OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS)) __OBJS := $(SOBJS) $(COBJS)
@@ -71,6 +72,9 @@ $(nandobj)u-boot.lds: $(LDSCRIPT) $(LSTSCRIPT) $(obj)%.o: $(SRCTREE)/arch/arm/cpu/arm926ejs/%.S $(CC) $(AFLAGS) -c -o $@ $< +$(obj)%.o: $(SRCTREE)/arch/arm/lib/%.S + $(CC) $(AFLAGS) -c -o $@ $< + $(obj)%.o: $(SRCTREE)/board/karo/tx25/%.S $(CC) $(AFLAGS) -c -o $@ $<
Signature · 1 line
1.7.10.4
PATCH v5 2/2 arm: remove useless code in start.S files
Remove code such as unneeded includes or labels.
These removals have no functional effect.
---
Changes in v5: None
Changes in v4: None
Changes in v3: None
Changes in v2:
- removed useless includes in arm926ejs and arm925t
arch/arm/cpu/arm925t/start.S | 4 ---- arch/arm/cpu/arm926ejs/start.S | 6 ------ 2 files changed, 10 deletions(-)
arch/arm/cpu/arm925t/start.S +0 -4
@@ -34,10 +34,6 @@ #include <config.h> #include <version.h> -#if defined(CONFIG_OMAP1510) -#include <./configs/omap1510.h> -#endif - /* ************************************************************************* *
arch/arm/cpu/arm926ejs/start.S +0 -6
@@ -36,12 +36,6 @@ #include <common.h> #include <version.h> -#if defined(CONFIG_OMAP1610) -#include <./configs/omap1510.h> -#elif defined(CONFIG_OMAP730) -#include <./configs/omap730.h> -#endif - /* ************************************************************************* *
Signature · 1 line
1.7.10.4
v5 cover Factorize ARM startup code as much as possible.
In reply to Albert ARIBAUDHi Albert,
Quoted 72 lines · Albert ARIBAUD
The goal of this series is to scrub the
start.Sfiles which have proliferated acrossarch/armand eliminate code redundancy.This series only factorizes the C runtime framework, that is, the assembly code responsible for setting up the C environments needed by board_init_*() and
relocate_code().Further factorization is possible:
relocate_code()can be moved out and possibly rewritten in C now that it has plain C function semantics; exception handlers should also be pretty much cpu-independent.Also, SPL currently makes
board_init_f()perform all of the setting up, including BSS clearing and chain- loading. This could be streamlined by only putting basic inits inboard_init_f(), letting crt0 do the BSS initialization and chain-loading U-Boot from insideboard_init_r().Eventually,
start.Sfiles should disappear or contain CPU-specific code only.The new C runtime setup sequence has been validated step by step on targets versatileqemu using gcc version 4.2.2 from the ELDK4.2 toolchain, and
wireless_spaceusing gcc version 4.7.2 (Ubuntu/Linaro 4.7.2-1ubuntu1).The whole changes have been build-tested across all ARM targets using MAKEALL -a arm.
Changes in v5:
- Fixed build on non-ARM architecturesChanges in v4:
- fixed bhs into blo in BSS init loop
- switched from explicit literals to '=target' notation
- fixed location of GD in initial environment
- stopped SPL boot sequence at callingboard_init_fChanges in v3:
- various clarifications and typo fixes
- fixed wrong LED calls conditional
- fixed open comment eating some code
- fixed code overrun in SPL caseChanges in v2:
- moved description from cover letter to patch commit msg
- added note about tests in the cover letter
- fixed baords withCONFIG_SPLbut notCONFIG_SPL_STACK
- removed useless includes in arm926ejs and arm925tAlbert ARIBAUD (2):
arm: move C runtime setup code incrt0.S
arm: remove useless code instart.Sfilesarch/arm/cpu/arm1136/start.S | 71 +++--------- arch/arm/cpu/arm1176/start.S | 62 ++--------- arch/arm/cpu/arm720t/start.S | 53 ++------- arch/arm/cpu/arm920t/start.S | 61 ++-------- arch/arm/cpu/arm925t/start.S | 65 ++--------- arch/arm/cpu/arm926ejs/start.S | 86 ++------------ arch/arm/cpu/arm946es/start.S | 56 ++-------- arch/arm/cpu/arm_intcm/start.S | 63 ++--------- arch/arm/cpu/armv7/start.S | 58 +++------- arch/arm/cpu/ixp/start.S | 55 ++------- arch/arm/cpu/pxa/start.S | 63 ++--------- arch/arm/cpu/s3c44b0/start.S | 55 ++------- arch/arm/cpu/sa1100/start.S | 50 ++------- arch/arm/lib/Makefile | 2 + arch/arm/lib/board.c | 11 --
Quoted 9 lines
arch/arm/lib/crt0.S | 173 +++++++++++++++++++++++++++++ include/common.h | 2 +- include/configs/socfpga_cyclone5.h | 2 +- lib/asm-offsets.c | 14 +++ nand_spl/board/freescale/mx31pdk/Makefile | 6 +- nand_spl/board/karo/tx25/Makefile | 6 +- 21 files changed, 326 insertions(+), 688 deletions(-) create mode 100644 arch/arm/lib/crt0.S
Applied to u-boot-arm/master with a rollback from the Marvell PR and v4 of this patch series.
Amicalement,
Signature · 1 line
Albert.
v4 cover Factorize ARM startup code as mush as possible.
In reply to Albert ARIBAUDQuoted 69 lines · Albert ARIBAUD
The goal of this series is to scrub the
start.Sfiles which have proliferated acrossarch/armand eliminate code redundancy.This series only factorizes the C runtime framework, that is, the assembly code responsible for setting up the C environments needed by board_init_*() and
relocate_code().Further factorization is possible:
relocate_code()can be moved out and possibly rewritten in C now that it has plain C function semantics; exception handlers should also be pretty much cpu-independent.Also, SPL currently makes
board_init_f()perform all of the setting up, including BSS clearing and chain- loading. This could be streamlined by only putting basic inits inboard_init_f(), letting crt0 do the BSS initialization and chain-loading U-Boot from insideboard_init_r().Eventually,
start.Sfiles should disappear or contain CPU-specific code only.The new C runtime setup sequence has been validated step by step on targets versatileqemu using gcc version 4.2.2 from the ELDK4.2 toolchain, and
wireless_spaceusing gcc version 4.7.2 (Ubuntu/Linaro 4.7.2-1ubuntu1).The whole changes have been build-tested across all ARM targets using MAKEALL -a arm.
Changes in v4:
- fixed bhs into blo in BSS init loop
- switched from explicit literals to '=target' notation
- fixed location of GD in initial environment
- stopped SPL boot sequence at callingboard_init_fChanges in v3:
- various clarifications and typo fixes
- fixed wrong LED calls conditional
- fixed open comment eating some code
- fixed code overrun in SPL caseChanges in v2:
- moved description from cover letter to patch commit msg
- added note about tests in the cover letter
- fixed baords withCONFIG_SPLbut notCONFIG_SPL_STACK
- removed useless includes in arm926ejs and arm925tAlbert ARIBAUD (2):
arm: move C runtime setup code incrt0.S
arm: remove useless code instart.Sfilesarch/arm/cpu/arm1136/start.S | 71 +++--------- arch/arm/cpu/arm1176/start.S | 62 ++--------- arch/arm/cpu/arm720t/start.S | 53 ++------- arch/arm/cpu/arm920t/start.S | 61 ++-------- arch/arm/cpu/arm925t/start.S | 65 ++--------- arch/arm/cpu/arm926ejs/start.S | 86 ++------------ arch/arm/cpu/arm946es/start.S | 56 ++-------- arch/arm/cpu/arm_intcm/start.S | 63 ++--------- arch/arm/cpu/armv7/start.S | 58 +++------- arch/arm/cpu/ixp/start.S | 55 ++------- arch/arm/cpu/pxa/start.S | 63 ++--------- arch/arm/cpu/s3c44b0/start.S | 55 ++------- arch/arm/cpu/sa1100/start.S | 50 ++------- arch/arm/lib/Makefile | 2 + arch/arm/lib/board.c | 11 --
Quoted 11 lines
arch/arm/lib/crt0.S | 173 +++++++++++++++++++++++++++++ include/common.h | 2 +- include/configs/socfpga_cyclone5.h | 2 +- lib/asm-offsets.c | 10 ++ nand_spl/board/freescale/mx31pdk/Makefile | 6 +- nand_spl/board/karo/tx25/Makefile | 6 +- 21 files changed, 322 insertions(+), 688 deletions(-) create mode 100644 arch/arm/lib/crt0.SSignature · 1 line
1.7.10.4
Tom,
These have been tested on several boards. Can it go in? If it can, then I would like to take it in u-boot-arm/master with your Acked-By.
Amicalement,
Signature · 1 line
Albert.
v4 cover Factorize ARM startup code as mush as possible.
In reply to Albert ARIBAUDQuoted 69 lines · Albert ARIBAUD
The goal of this series is to scrub the
start.Sfiles which have proliferated acrossarch/armand eliminate code redundancy.This series only factorizes the C runtime framework, that is, the assembly code responsible for setting up the C environments needed by board_init_*() and
relocate_code().Further factorization is possible:
relocate_code()can be moved out and possibly rewritten in C now that it has plain C function semantics; exception handlers should also be pretty much cpu-independent.Also, SPL currently makes
board_init_f()perform all of the setting up, including BSS clearing and chain- loading. This could be streamlined by only putting basic inits inboard_init_f(), letting crt0 do the BSS initialization and chain-loading U-Boot from insideboard_init_r().Eventually,
start.Sfiles should disappear or contain CPU-specific code only.The new C runtime setup sequence has been validated step by step on targets versatileqemu using gcc version 4.2.2 from the ELDK4.2 toolchain, and
wireless_spaceusing gcc version 4.7.2 (Ubuntu/Linaro 4.7.2-1ubuntu1).The whole changes have been build-tested across all ARM targets using MAKEALL -a arm.
Changes in v4:
- fixed bhs into blo in BSS init loop
- switched from explicit literals to '=target' notation
- fixed location of GD in initial environment
- stopped SPL boot sequence at callingboard_init_fChanges in v3:
- various clarifications and typo fixes
- fixed wrong LED calls conditional
- fixed open comment eating some code
- fixed code overrun in SPL caseChanges in v2:
- moved description from cover letter to patch commit msg
- added note about tests in the cover letter
- fixed baords withCONFIG_SPLbut notCONFIG_SPL_STACK
- removed useless includes in arm926ejs and arm925tAlbert ARIBAUD (2):
arm: move C runtime setup code incrt0.S
arm: remove useless code instart.Sfilesarch/arm/cpu/arm1136/start.S | 71 +++--------- arch/arm/cpu/arm1176/start.S | 62 ++--------- arch/arm/cpu/arm720t/start.S | 53 ++------- arch/arm/cpu/arm920t/start.S | 61 ++-------- arch/arm/cpu/arm925t/start.S | 65 ++--------- arch/arm/cpu/arm926ejs/start.S | 86 ++------------ arch/arm/cpu/arm946es/start.S | 56 ++-------- arch/arm/cpu/arm_intcm/start.S | 63 ++--------- arch/arm/cpu/armv7/start.S | 58 +++------- arch/arm/cpu/ixp/start.S | 55 ++------- arch/arm/cpu/pxa/start.S | 63 ++--------- arch/arm/cpu/s3c44b0/start.S | 55 ++------- arch/arm/cpu/sa1100/start.S | 50 ++------- arch/arm/lib/Makefile | 2 + arch/arm/lib/board.c | 11 --
Quoted 9 lines
arch/arm/lib/crt0.S | 173 +++++++++++++++++++++++++++++ include/common.h | 2 +- include/configs/socfpga_cyclone5.h | 2 +- lib/asm-offsets.c | 10 ++ nand_spl/board/freescale/mx31pdk/Makefile | 6 +- nand_spl/board/karo/tx25/Makefile | 6 +- 21 files changed, 322 insertions(+), 688 deletions(-) create mode 100644 arch/arm/lib/crt0.S
Applied to u-boot-arm/master.
Amicalement,
Signature · 1 line
Albert.