ARM: SPL: Make more generic, merge DaVinci and OMAP
Subsystems (6)
v4 cover ARM: SPL: Make more generic, merge DaVinci and OMAP
Hey all,
The following patch series merges the davinci and omap-common SPL frameworks into a single framework, CONFIG_SPL_FRAMEWORK along with a few small cleanups to the code to make it a little smaller and more flexible. The end result is that davinci can now opt in on SPL-boots-Linux by just setting the right defines and other platforms would just need to adapt to this framework. In my testing, davinci gains between 300 and 700 bytes for this (not enabling the SPL OS feature) and omap4/5/etc lose just a little bit (from the printf->puts changes). I've tested this on omap3_beagle (xM and classic) and omap4_panda. I don't have any davinci platforms that were previously using SPL so I can't boot-test those changes but since everyone sets CONFIG_SPL_MAX_SIZE, we're OK in that department.
To make this series easier to test I've placed it on
http://github.com/trini/u-boot WIP/spl-improvements
I've looked a little into re-reducing the size and the biggest problem I see is that SPI a lot of informational prints that we don't need, strictly speaking, but are nice in a normal U-Boot context. I'm unsure of the best way to quiet these as I don't like the idea of sprinkling
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54303 and I'm sending another email to discuss that.
--
Tom
Changes in v2:
- Add CONFIG_SYS_SPL_MALLOC_START / SIZE defines from Christian Riesch
- Add README.da850_am18xxevm
- Add arch/arm/cpu/arm926ejs/davinci/config.mk to build u-boot.ais
- Fix checkpatch warning (u32* boot_params_ptr -> u32 *boot_params_ptr)
- Place files into common/spl (due to gcc bug #54303) and include/spl.h
- Reorder all of the patches that used to follow this to precede.
Changes in v3:
CONFIG_SPL_FRAMEWORK
perform early init. Fixes the cannot reset problem.
- Fix checkpatch.pl warning
- Fix thinko, Nand -> SPI (spotted by Prabhakar Lad)
- Make u-boot.ais use u-boot.img not u-boot.bin, now that it uses
- Make use of board_init_f being a weak function now so that we can
- Rename to README.da850, add more direct recovery method (Christian Riesch)
Changes in v4:
- Adapt davinci to new board_init_f requirements
- Add Stefano's patch for CONFIG_SYS_MONITOR_LEN
- Based on PowerPC, use memset to clear BSS rather than relocate_code
- Document what board_init_f must do
- Further re-word README.da850 based on feedback from Christian Riesch
- Leave nand_spl_load.c alone, move the new load into nand_spl_simple.c
- Make board_init_f setup the global data pointer, after clearing BSS.
- Move board_init_f / jump_to_image_linux to arch/arm/lib/spl.c
Stefano Babic (1):
SPL: do not use fix value for u-boot size
Tom Rini (19):
Makefile: Move SPL files to clobber, remove from clean
spl_mmc: Make FAT checks / calls guarded with CONFIG_SPL_FAT_SUPPORT
omap-common: SPL: Add CONFIG_SPL_DISPLAY_PRINT / spl_display_print()
omap-common: Fix typo in save_boot_params() in lowlevel_init.S
ARM: SPL: Rename omap_boot_device to spl_boot_device
ARM: SPL: Rename omap_boot_mode to spl_boot_mode()
ARM: SPL: Remove NAND_MODE_HW_ECC from spl_nand.c
ARM: SPL: Only call mem_malloc_init if configured
ARM: SPL: Add <asm/spl.h> and <asm/arch/spl.h>
ARM: SPL: Make spl_mmc.c more generic
ARM: SPL: Clean up spl.c / spl_nand.c slightly
ARM: SPL: Start hooking in the current SPI SPL support
ARM: SPL: Move gpmc_init() to spl_board_init()
SPL: Move the omap SPL framework to common/spl
SPL: Create arch/arm/lib/spl.c for board_init_f and
jump_to_image_linux
ARM: SPL: Convert davinci to CONFIG_SPL_FRAMEWORK
da850: Add README.da850
SPL: NAND: Enhance drivers/mtd/nand/nand_spl_simple.c
SPL: SPI: Enhance spi_spl_load to match the other load functions
Makefile | 16 +--
README | 9 ++
arch/arm/cpu/arm926ejs/davinci/Makefile | 2 +-
arch/arm/cpu/arm926ejs/davinci/config.mk | 16 +++
arch/arm/cpu/arm926ejs/davinci/spl.c | 60 +++++------
arch/arm/cpu/arm926ejs/start.S | 20 +---
arch/arm/cpu/armv7/am33xx/board.c | 2 +-
arch/arm/cpu/armv7/omap-common/Makefile | 13 ---
arch/arm/cpu/armv7/omap-common/boot-common.c | 27 ++++-
arch/arm/cpu/armv7/omap-common/hwinit-common.c | 7 +-
arch/arm/cpu/armv7/omap-common/lowlevel_init.S | 6 +-
arch/arm/cpu/armv7/omap-common/spl_nand.c | 111 --------------------
arch/arm/cpu/armv7/omap3/board.c | 28 +++--
arch/arm/cpu/armv7/start.S | 13 +--
arch/arm/include/asm/arch-am33xx/spl.h | 31 ++++++
arch/arm/include/asm/arch-davinci/spl.h | 28 +++++
arch/arm/include/asm/arch-omap3/spl.h | 34 ++++++
arch/arm/include/asm/arch-omap4/spl.h | 35 ++++++
arch/arm/include/asm/arch-omap4/sys_proto.h | 1 -
arch/arm/include/asm/arch-omap5/spl.h | 35 ++++++
arch/arm/include/asm/arch-omap5/sys_proto.h | 1 -
arch/arm/include/asm/omap_common.h | 77 --------------
arch/arm/include/asm/spl.h | 29 +++++
arch/arm/lib/Makefile | 2 +
arch/arm/lib/spl.c | 72 +++++++++++++
board/davinci/da8xxevm/README.da850 | 68 ++++++++++++
board/overo/overo.c | 10 --
common/spl/Makefile | 37 +++++++
.../arm/cpu/armv7/omap-common => common/spl}/spl.c | 86 +++++----------
.../armv7/omap-common => common/spl}/spl_ymodem.c | 3 +-
drivers/mmc/Makefile | 5 +
.../armv7/omap-common => drivers/mmc}/spl_mmc.c | 24 ++---
drivers/mtd/nand/nand_spl_simple.c | 76 ++++++++++++++
drivers/mtd/spi/spi_spl_load.c | 23 ++--
include/configs/am335x_evm.h | 1 +
include/configs/am3517_crane.h | 2 +
include/configs/am3517_evm.h | 2 +
include/configs/cam_enc_4xx.h | 3 +-
include/configs/da850evm.h | 5 +
include/configs/devkit8000.h | 1 +
include/configs/hawkboard.h | 3 +-
include/configs/mcx.h | 2 +
include/configs/omap3_beagle.h | 1 +
include/configs/omap3_evm_common.h | 1 +
include/configs/omap3_overo.h | 1 +
include/configs/omap4_common.h | 2 +
include/configs/omap5_evm.h | 2 +
include/configs/tam3517-common.h | 2 +
include/configs/tricorder.h | 1 +
include/spl.h | 72 +++++++++++++
spl/Makefile | 1 +
51 files changed, 721 insertions(+), 388 deletions(-)
create mode 100644 arch/arm/cpu/arm926ejs/davinci/config.mk
delete mode 100644 arch/arm/cpu/armv7/omap-common/spl_nand.c
create mode 100644 arch/arm/include/asm/arch-am33xx/spl.h
create mode 100644 arch/arm/include/asm/arch-davinci/spl.h
create mode 100644 arch/arm/include/asm/arch-omap3/spl.h
create mode 100644 arch/arm/include/asm/arch-omap4/spl.h
create mode 100644 arch/arm/include/asm/arch-omap5/spl.h
create mode 100644 arch/arm/include/asm/spl.h
create mode 100644 arch/arm/lib/spl.c
create mode 100644 board/davinci/da8xxevm/README.da850
create mode 100644 common/spl/Makefile
rename {arch/arm/cpu/armv7/omap-common => common/spl}/spl.c (71%)
rename {arch/arm/cpu/armv7/omap-common => common/spl}/spl_ymodem.c (96%)
rename {arch/arm/cpu/armv7/omap-common => drivers/mmc}/spl_mmc.c (91%)
create mode 100644 include/spl.hSignature · 1 line
1.7.9.5
PATCH v4 1/20 Makefile: Move SPL files to clobber, remove from clean
The 'clean' target has been removing all of spl but not u-boot itself. For consistency and ease of testing, only remove SPL binaries / maps in the clobber target, just like for full U-Boot
---
Makefile | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
Makefile +6 -6
@@ -763,12 +763,6 @@ clean: @rm -f $(obj)lib/asm-offsets.s @rm -f $(obj)include/generated/asm-offsets.h @rm -f $(obj)$(CPUDIR)/$(SOC)/asm-offsets.s - @rm -f $(obj)nand_spl/{u-boot.lds,u-boot-nand_spl.lds,u-boot-spl,u-boot-spl.map,System.map} - @rm -f $(obj)onenand_ipl/onenand-{ipl,ipl.bin,ipl.map} - @rm -f $(ONENAND_BIN) - @rm -f $(obj)onenand_ipl/u-boot.lds - @rm -f $(obj)spl/{u-boot-spl,u-boot-spl.bin,u-boot-spl.lds,u-boot-spl.map} - @rm -f $(obj)MLO @rm -f $(TIMESTAMP_FILE) $(VERSION_FILE) @find $(OBJTREE) -type f \ \( -name 'core' -o -name '*.bak' -o -name '*~' -o -name '*.su' \
@@ -793,6 +787,12 @@ clobber: tidy @rm -f $(obj)u-boot.dtb @rm -f $(obj)u-boot.sb @rm -f $(obj)u-boot.spr + @rm -f $(obj)nand_spl/{u-boot.lds,u-boot-nand_spl.lds,u-boot-spl,u-boot-spl.map,System.map} + @rm -f $(obj)onenand_ipl/onenand-{ipl,ipl.bin,ipl.map} + @rm -f $(ONENAND_BIN) + @rm -f $(obj)onenand_ipl/u-boot.lds + @rm -f $(obj)spl/{u-boot-spl,u-boot-spl.bin,u-boot-spl.lds,u-boot-spl.map} + @rm -f $(obj)MLO @rm -f $(obj)tools/xway-swap-bytes @rm -f $(obj)arch/powerpc/cpu/mpc824x/bedbug_603e.c @rm -f $(obj)arch/powerpc/cpu/mpc83xx/ddr-gen?.c
Signature · 1 line
1.7.9.5
PATCH v4 2/20 spl_mmc: Make FAT checks / calls guarded with CONFIG_SPL_FAT_SUPPORT
In reply to Tom Rini---
arch/arm/cpu/armv7/omap-common/spl_mmc.c | 4 ++++ 1 file changed, 4 insertions(+)
arch/arm/cpu/armv7/omap-common/spl_mmc.c +4 -0
@@ -84,6 +84,7 @@ end: } } +#ifdef CONFIG_SPL_FAT_SUPPORT static void mmc_load_image_fat (struct mmc *mmc) {s32 err;
@@ -116,6 +117,7 @@ end: hang(); } } +#endif void spl_mmc_load_image (void ) {
@@ -140,9 +142,11 @@ void spl_mmc_load_image(void)if (boot_mode ==MMCSD_MODE_RAW ) {debug ("boot mode - RAW\n" );mmc_load_image_raw (mmc); +#ifdef CONFIG_SPL_FAT_SUPPORT }else if (boot_mode ==MMCSD_MODE_FAT ) {debug ("boot mode - FAT\n" );mmc_load_image_fat (mmc); +#endif }else {puts ("spl: wrong MMC boot mode\n" );hang ();
Signature · 1 line
1.7.9.5
PATCH v4 3/20 omap-common: SPL: Add CONFIG_SPL_DISPLAY_PRINT / spl_display_print()
In reply to Tom RiniOnly omap4/5 currently have a meaningful set of display text and overo had been adding a function to display nothing. Change how this works to be opt-in and only turned on for omap4/5 now.
---
README | 4 ++++ arch/arm/cpu/armv7/omap-common/hwinit-common.c | 5 +++++ arch/arm/cpu/armv7/omap-common/spl.c | 9 +++------ arch/arm/include/asm/arch-omap4/sys_proto.h | 1 - arch/arm/include/asm/arch-omap5/sys_proto.h | 1 - arch/arm/include/asm/omap_common.h | 2 +- board/overo/overo.c | 10 ---------- include/configs/omap4_common.h | 1 + include/configs/omap5_evm.h | 1 + 9 files changed, 15 insertions(+), 19 deletions(-)
README +4 -0
@@ -2564,6 +2564,10 @@ FIT uImage format: CONFIG_SYS_SPL_MALLOC_SIZE The size of the malloc pool used in SPL. + CONFIG_SPL_DISPLAY_PRINT + For ARM, enable an optional function to print more information + about the running system. + CONFIG_SPL_LIBCOMMON_SUPPORT Support for common/libcommon.o in SPL binary
arch/arm/cpu/armv7/omap-common/hwinit-common.c +5 -0
@@ -92,6 +92,11 @@ static void init_boot_params(void) { boot_params_ptr = (u32 *) &boot_params; } + +void spl_display_print (void ) +{ +omap_rev_string (); +}#endif /*
arch/arm/cpu/armv7/omap-common/spl.c +3 -6
@@ -219,10 +219,7 @@ void preloader_console_init(void)printf ("\nU-Boot SPL %s (%s - %s)\n" , u_boot_rev,U_BOOT_DATE ,U_BOOT_TIME ); -omap_rev_string (); -} - -void __weak omap_rev_string () -{ -printf ("Texas Instruments Revision detection unimplemented\n" ); +#ifdef CONFIG_SPL_DISPLAY_PRINT +spl_display_print (); +#endif }
arch/arm/include/asm/arch-omap4/sys_proto.h +0 -1
@@ -42,7 +42,6 @@ void sr32(void *, u32, u32, u32);u32 wait_on_value (u32 ,u32 ,void *,u32 );void sdelay (unsigned long );void set_pl310_ctrl_reg (u32 val); -void omap_rev_string (void );void setup_clocks_for_console (void );void prcm_init (void );void bypass_dpll (u32 *const base);
arch/arm/include/asm/arch-omap5/sys_proto.h +0 -1
@@ -42,7 +42,6 @@ void set_muxconf_regs_non_essential(void);void sr32 (void *,u32 ,u32 ,u32 );u32 wait_on_value (u32 ,u32 ,void *,u32 );void sdelay (unsigned long ); -void omap_rev_string (void );void setup_clocks_for_console (void );void prcm_init (void );void bypass_dpll (u32 *const base);
arch/arm/include/asm/omap_common.h +1 -1
@@ -94,9 +94,9 @@ u32 omap_boot_mode(void);/* SPL common function s*/ void spl_parse_image_header (const struct image_header *header); -void omap_rev_string (void );void spl_board_prepare_for_linux (void );int spl_start_uboot (void ); +void spl_display_print (void );/* NAND SPL functions */ void spl_nand_load_image (void );
board/overo/overo.c +0 -10
@@ -101,16 +101,6 @@ int board_init(void) }/* -* Routine: omap_rev_string -* Description: For SPL builds output board rev -*/ -#ifdef CONFIG_SPL_BUILD -void omap_rev_string (void ) -{ -} -#endif - -/* * Routine: get_board_revision * Description: Returns the board revision */
include/configs/omap4_common.h +1 -0
@@ -249,6 +249,7 @@#define CONFIG_SPL_TEXT_BASE 0x40304350#define CONFIG_SPL_MAX_SIZE (38 * 1024)#define CONFIG_SPL_STACK LOW_LEVEL_SRAM_STACK +#define CONFIG_SPL_DISPLAY_PRINT /* * 64 bytes before this address should be set aside for u-boot.img's
include/configs/omap5_evm.h +1 -0
@@ -246,6 +246,7 @@#define CONFIG_SPL_TEXT_BASE 0x40300350#define CONFIG_SPL_MAX_SIZE 0x19000/* 100K */ #define CONFIG_SPL_STACK LOW_LEVEL_SRAM_STACK +#define CONFIG_SPL_DISPLAY_PRINT #define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR 0x300/* address 0x60000 */ #define CONFIG_SYS_U_BOOT_MAX_SIZE_SECTORS 0x200/* 256 KB */
Signature · 1 line
1.7.9.5
PATCH v4 4/20 omap-common: Fix typo in save_boot_params() in lowlevel_init.S
In reply to Tom Rini---
arch/arm/cpu/armv7/omap-common/lowlevel_init.S | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm/cpu/armv7/omap-common/lowlevel_init.S +1 -1
@@ -63,7 +63,7 @@ ENTRY(save_boot_params) blt 2f cmp r2, #7 bgt 2f - /* Store the boot mode (raw/FAT) in omap_boot_mode */ + /* Store the boot mode (raw/FAT) in omap_bootmode */ ldr r2, [r0, #DEV_DESC_PTR_OFFSET] @ get the device descriptor ptr ldr r2, [r2, #DEV_DATA_PTR_OFFSET] @ get the pDeviceData ptr ldr r2, [r2, #BOOT_MODE_OFFSET] @ get the boot mode
Signature · 1 line
1.7.9.5
PATCH v4 5/20 ARM: SPL: Rename omap_boot_device to spl_boot_device
In reply to Tom Rini---
arch/arm/cpu/armv7/omap-common/boot-common.c | 2 +- arch/arm/cpu/armv7/omap-common/lowlevel_init.S | 4 ++-- arch/arm/cpu/armv7/omap-common/spl.c | 2 +- arch/arm/cpu/armv7/omap-common/spl_mmc.c | 2 +- arch/arm/cpu/armv7/omap3/board.c | 4 ++-- arch/arm/include/asm/omap_common.h | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-)
arch/arm/cpu/armv7/omap-common/boot-common.c +1 -1
@@ -37,7 +37,7 @@ struct omap_boot_parameters boot_params __attribute__ ((section(".data")));*/ u32 omap_bootmode =MMCSD_MODE_FAT ; -u32 omap_boot_device (void ) +u32 spl_boot_device (void ) {return (u32) (boot_params.omap_bootdevice); }
arch/arm/cpu/armv7/omap-common/lowlevel_init.S +2 -2
@@ -52,11 +52,11 @@ ENTRY(save_boot_params) ldr r1, =boot_params str r0, [r1] #ifdef CONFIG_SPL_BUILD - /* Store the boot device in omap_boot_device */ + /* Store the boot device in spl_boot_device */ ldrb r2, [r0, #BOOT_DEVICE_OFFSET] @ r1 <- value of boot device and r2, #BOOT_DEVICE_MASK ldr r3, =boot_params - strb r2, [r3, #BOOT_DEVICE_OFFSET] @ omap_boot_device <- r1 + strb r2, [r3, #BOOT_DEVICE_OFFSET] @ spl_boot_device <- r1 /* boot mode is passed only for devices that can raw/fat mode */ cmp r2, #2
arch/arm/cpu/armv7/omap-common/spl.c +1 -1
@@ -156,7 +156,7 @@ void board_init_r(gd_t *id, ulong dummy)spl_board_init ();#endif - boot_device =omap_boot_device (); + boot_device =spl_boot_device ();debug ("boot device - %d\n" , boot_device);switch (boot_device) {#ifdef CONFIG_SPL_MMC_SUPPORT
arch/arm/cpu/armv7/omap-common/spl_mmc.c +1 -1
@@ -37,7 +37,7 @@ DECLARE_GLOBAL_DATA_PTR;#ifdef CONFIG_GENERIC_MMC int board_mmc_init (bd_t *bis) { -switch (omap_boot_device ()) { +switch (spl_boot_device ()) {case BOOT_DEVICE_MMC1 :omap_mmc_init (0 ,0 ,0 );break ;
arch/arm/cpu/armv7/omap3/board.c +2 -2
@@ -71,7 +71,7 @@ u32 omap3_boot_device = BOOT_DEVICE_NAND;/* auto boot mode detection is not possible for OMAP3 - hard code */ u32 omap_boot_mode (void ) { -switch (omap_boot_device ()) { +switch (spl_boot_device ()) {case BOOT_DEVICE_MMC2 :return MMCSD_MODE_RAW ;case BOOT_DEVICE_MMC1 :
@@ -86,7 +86,7 @@ u32 omap_boot_mode(void) } } -u32 omap_boot_device (void ) +u32 spl_boot_device (void ) {return omap3_boot_device; }
arch/arm/include/asm/omap_common.h +1 -1
@@ -89,7 +89,7 @@ struct spl_image_info {extern struct spl_image_info spl_image;extern u32 * boot_params_ptr; -u32 omap_boot_device (void ); +u32 spl_boot_device (void );u32 omap_boot_mode (void );/* SPL common function s*/
Signature · 1 line
1.7.9.5
PATCH v4 6/20 ARM: SPL: Rename omap_boot_mode to spl_boot_mode()
In reply to Tom Rini---
arch/arm/cpu/armv7/omap-common/boot-common.c | 2 +- arch/arm/cpu/armv7/omap-common/spl_mmc.c | 2 +- arch/arm/cpu/armv7/omap-common/spl_nand.c | 2 +- arch/arm/cpu/armv7/omap3/board.c | 2 +- arch/arm/include/asm/omap_common.h | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-)
arch/arm/cpu/armv7/omap-common/boot-common.c +1 -1
@@ -42,7 +42,7 @@ u32 spl_boot_device(void)return (u32) (boot_params.omap_bootdevice); } -u32 omap_boot_mode (void ) +u32 spl_boot_mode (void ) {return omap_bootmode; }
arch/arm/cpu/armv7/omap-common/spl_mmc.c +1 -1
@@ -138,7 +138,7 @@ void spl_mmc_load_image(void)printf ("spl: mmc init failed: err - %d\n" , err);hang (); } - boot_mode =omap_boot_mode (); + boot_mode =spl_boot_mode ();if (boot_mode ==MMCSD_MODE_RAW ) {debug ("boot mode - RAW\n" );mmc_load_image_raw (mmc);
arch/arm/cpu/armv7/omap-common/spl_nand.c +1 -1
@@ -35,7 +35,7 @@ void spl_nand_load_image(void) int *src __attribute__((unused)); int *dst __attribute__((unused)); -switch (omap_boot_mode ()) { +switch (spl_boot_mode ()) {case NAND_MODE_HW_ECC :debug ("spl: nand - using hw ecc\n" );gpmc_init ();
arch/arm/cpu/armv7/omap3/board.c +1 -1
@@ -69,7 +69,7 @@ const struct gpio_bank *const omap_gpio_bank = gpio_bank_34xx;u32 omap3_boot_device =BOOT_DEVICE_NAND ;/* auto boot mode detection is not possible for OMAP3 - hard code */ -u32 omap_boot_mode (void ) +u32 spl_boot_mode (void ) {switch (spl_boot_device ()) {case BOOT_DEVICE_MMC2 :
arch/arm/include/asm/omap_common.h +1 -1
@@ -90,7 +90,7 @@ extern struct spl_image_info spl_image;extern u32 * boot_params_ptr;u32 spl_boot_device (void ); -u32 omap_boot_mode (void ); +u32 spl_boot_mode (void );/* SPL common function s*/ void spl_parse_image_header (const struct image_header *header);
Signature · 1 line
1.7.9.5
PATCH v4 7/20 ARM: SPL: Remove NAND_MODE_HW_ECC from spl_nand.c
In reply to Tom RiniThis detection code doesn't (and can't) do anything currently, so remove.
---
arch/arm/cpu/armv7/omap-common/spl_nand.c | 13 +++---------- arch/arm/cpu/armv7/omap3/board.c | 3 --- arch/arm/include/asm/omap_common.h | 1 - 3 files changed, 3 insertions(+), 14 deletions(-)
arch/arm/cpu/armv7/omap-common/spl_nand.c +3 -10
@@ -35,16 +35,9 @@ void spl_nand_load_image(void) int *src __attribute__((unused)); int *dst __attribute__((unused)); -switch (spl_boot_mode ()) { -case NAND_MODE_HW_ECC : -debug ("spl: nand - using hw ecc\n" ); -gpmc_init (); -nand_init (); -break ; -default : -puts ("spl: ERROR: This bootmode is not implemented - hanging" ); -hang (); - } +debug ("spl: nand - using hw ecc\n" ); +gpmc_init (); +nand_init ();/*use CONFIG_SYS_TEXT_BASE as temporary storage area */ header = (struct image_header *)(CONFIG_SYS_TEXT_BASE );
arch/arm/cpu/armv7/omap3/board.c +0 -3
@@ -77,9 +77,6 @@ u32 spl_boot_mode(void)case BOOT_DEVICE_MMC1 :return MMCSD_MODE_FAT ;break ; -case BOOT_DEVICE_NAND : -return NAND_MODE_HW_ECC ; -break ;default :puts ("spl: ERROR: unknown device - can't select boot mode\n" );hang ();
arch/arm/include/asm/omap_common.h +0 -1
@@ -76,7 +76,6 @@ void preloader_console_init(void);#define MMCSD_MODE_UNDEFINED 0#define MMCSD_MODE_RAW 1#define MMCSD_MODE_FAT 2 -#define NAND_MODE_HW_ECC 3struct spl_image_info {const char *name;
Signature · 1 line
1.7.9.5
PATCH v4 8/20 ARM: SPL: Only call mem_malloc_init if configured
In reply to Tom RiniWe can only attempt to setup a malloc pool if CONFIG_SYS_SPL_MALLOC_START is defined, and not all boards require it. Make the call depend on the define.
---
arch/arm/cpu/armv7/omap-common/spl.c | 2 ++ 1 file changed, 2 insertions(+)
arch/arm/cpu/armv7/omap-common/spl.c +2 -0
@@ -149,8 +149,10 @@ void board_init_r(gd_t *id, ulong dummy)u32 boot_device;debug (">>spl:board_init_r()\n" ); +#ifdef CONFIG_SYS_SPL_MALLOC_START mem_malloc_init (CONFIG_SYS_SPL_MALLOC_START ,CONFIG_SYS_SPL_MALLOC_SIZE ); +#endif #ifdef CONFIG_SPL_BOARD_INIT spl_board_init ();
Signature · 1 line
1.7.9.5
PATCH v4 9/20 ARM: SPL: Add <asm/spl.h> and <asm/arch/spl.h>
In reply to Tom RiniMove the SPL prototypes from <asm/omap_common.h> into <asm/spl.h> and add <asm/arch/spl.h> for arch specific portions of CONFIG_SPL_FRAMEWORK.
---
Changes in v2:
- Fix checkpatch warning (u32* boot_params_ptr -> u32 *boot_params_ptr)
arch/arm/cpu/armv7/am33xx/board.c | 2 +- arch/arm/cpu/armv7/omap-common/hwinit-common.c | 2 +- arch/arm/cpu/armv7/omap-common/spl.c | 2 +- arch/arm/cpu/armv7/omap-common/spl_mmc.c | 1 + arch/arm/cpu/armv7/omap-common/spl_nand.c | 2 +- arch/arm/cpu/armv7/omap-common/spl_ymodem.c | 2 +- arch/arm/cpu/armv7/omap3/board.c | 1 + arch/arm/include/asm/arch-am33xx/spl.h | 31 +++++++++++ arch/arm/include/asm/arch-omap3/spl.h | 34 ++++++++++++ arch/arm/include/asm/arch-omap4/spl.h | 35 ++++++++++++ arch/arm/include/asm/arch-omap5/spl.h | 35 ++++++++++++ arch/arm/include/asm/omap_common.h | 71 ------------------------ arch/arm/include/asm/spl.h | 61 ++++++++++++++++++++ 13 files changed, 203 insertions(+), 76 deletions(-) create mode 100644 arch/arm/include/asm/arch-am33xx/spl.h create mode 100644 arch/arm/include/asm/arch-omap3/spl.h create mode 100644 arch/arm/include/asm/arch-omap4/spl.h create mode 100644 arch/arm/include/asm/arch-omap5/spl.h create mode 100644 arch/arm/include/asm/spl.h
arch/arm/cpu/armv7/am33xx/board.c +1 -1
@@ -25,7 +25,7 @@#include <asm/arch/mmc_host_def.h> #include <asm/arch/common_def.h> #include <asm/io.h> -#include <asm/omap_common.h> +#include <asm/spl.h> DECLARE_GLOBAL_DATA_PTR ;
arch/arm/cpu/armv7/omap-common/hwinit-common.c +1 -1
@@ -31,7 +31,7 @@#include <asm/arch/sys_proto.h> #include <asm/sizes.h> #include <asm/emif.h> -#include <asm/omap_common.h> +#include <asm/spl.h> DECLARE_GLOBAL_DATA_PTR ;
arch/arm/cpu/armv7/omap-common/spl.c +1 -1
@@ -23,6 +23,7 @@* MA 02111-1307 USA */ #include <common.h> +#include <asm/spl.h> #include <asm/u-boot.h> #include <asm/utils.h> #include <asm/arch/sys_proto.h>
@@ -30,7 +31,6 @@#include <mmc.h> #include <fat.h> #include <version.h> -#include <asm/omap_common.h> #include <asm/arch/mmc_host_def.h> #include <i2c.h> #include <image.h>
arch/arm/cpu/armv7/omap-common/spl_mmc.c +1 -0
@@ -23,6 +23,7 @@* MA 02111-1307 USA */ #include <common.h> +#include <asm/spl.h> #include <asm/u-boot.h> #include <asm/utils.h> #include <asm/arch/sys_proto.h>
arch/arm/cpu/armv7/omap-common/spl_nand.c +1 -1
@@ -21,13 +21,13 @@* MA 02111-1307 USA */ #include <common.h> +#include <asm/spl.h> #include <asm/u-boot.h> #include <asm/utils.h> #include <asm/arch/sys_proto.h> #include <asm/io.h> #include <nand.h> #include <version.h> -#include <asm/omap_common.h> void spl_nand_load_image (void ) {
arch/arm/cpu/armv7/omap-common/spl_ymodem.c +1 -1
@@ -26,11 +26,11 @@* MA 02111-1307 USA */ #include <common.h> +#include <asm/spl.h> #include <xyzModem.h> #include <asm/u-boot.h> #include <asm/utils.h> #include <asm/arch/sys_proto.h> -#include <asm/omap_common.h> #define BUF_SIZE 1024
arch/arm/cpu/armv7/omap3/board.c +1 -0
@@ -39,6 +39,7 @@#include <asm/cache.h> #include <asm/armv7.h> #include <asm/arch/gpio.h> +#include <asm/spl.h> #include <asm/omap_common.h> #include <i2c.h> #include <linux/compiler.h>
arch/arm/include/asm/arch-am33xx/spl.h new file +31 -0
@@ -0,0 +1,31 @@ +/* +* (C) Copyright 2012 +* Texas Instruments, <www.ti.com> +* +* 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 +*/ +#ifndef _ASM_ARCH_SPL_H_ +#define _ASM_SPL_H_ + +#define BOOT_DEVICE_NAND 5 +#define BOOT_DEVICE_MMC1 8 +#define BOOT_DEVICE_MMC2 0 +#define BOOT_DEVICE_UART 65 +#define BOOT_DEVICE_MMC2_2 0xFF +#endif
arch/arm/include/asm/arch-omap3/spl.h new file +34 -0
@@ -0,0 +1,34 @@ +/* +* (C) Copyright 2012 +* Texas Instruments, <www.ti.com> +* +* 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 +*/ +#ifndef _ASM_ARCH_SPL_H_ +#define _ASM_SPL_H_ + +#define BOOT_DEVICE_NONE 0 +#define BOOT_DEVICE_XIP 1 +#define BOOT_DEVICE_NAND 2 +#define BOOT_DEVICE_ONE_NAND 3 +#define BOOT_DEVICE_MMC2 5/*emmc*/ +#define BOOT_DEVICE_MMC1 6 +#define BOOT_DEVICE_XIPWAIT 7 +#define BOOT_DEVICE_MMC2_2 0xFF +#endif
arch/arm/include/asm/arch-omap4/spl.h new file +35 -0
@@ -0,0 +1,35 @@ +/* +* (C) Copyright 2012 +* Texas Instruments, <www.ti.com> +* +* 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 +*/ +#ifndef _ASM_ARCH_SPL_H_ +#define _ASM_SPL_H_ + +#define BOOT_DEVICE_NONE 0 +#define BOOT_DEVICE_XIP 1 +#define BOOT_DEVICE_XIPWAIT 2 +#define BOOT_DEVICE_NAND 3 +#define BOOT_DEVICE_ONE_NAND 4 +#define BOOT_DEVICE_MMC1 5 +#define BOOT_DEVICE_MMC2 6 +#define BOOT_DEVICE_MMC2_2 0xFF + +#endif
arch/arm/include/asm/arch-omap5/spl.h new file +35 -0
@@ -0,0 +1,35 @@ +/* +* (C) Copyright 2012 +* Texas Instruments, <www.ti.com> +* +* 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 +*/ +#ifndef _ASM_ARCH_SPL_H_ +#define _ASM_SPL_H_ + +#define BOOT_DEVICE_NONE 0 +#define BOOT_DEVICE_XIP 1 +#define BOOT_DEVICE_XIPWAIT 2 +#define BOOT_DEVICE_NAND 3 +#define BOOT_DEVICE_ONE_NAND 4 +#define BOOT_DEVICE_MMC1 5 +#define BOOT_DEVICE_MMC2 6 +#define BOOT_DEVICE_MMC2_2 7 + +#endif
arch/arm/include/asm/omap_common.h +0 -71
82 lines not on this page · raw message
arch/arm/include/asm/spl.h new file +61 -0
61 lines not on this page · raw message
Signature · 1 line
1.7.9.5
PATCH v4 10/20 ARM: SPL: Make spl_mmc.c more generic
In reply to Tom RiniMove the default omap/related-centric board_mmc_init to arch/arm/cpu/armv7/omap-common/boot-common.c and move the type defines to <asm/spl.h>
---
arch/arm/cpu/armv7/omap-common/boot-common.c | 16 ++++++++++++++++ arch/arm/cpu/armv7/omap-common/spl_mmc.c | 17 ----------------- arch/arm/cpu/armv7/omap3/board.c | 15 +++++++++++++++ arch/arm/include/asm/omap_common.h | 5 ----- arch/arm/include/asm/spl.h | 5 +++++ 5 files changed, 36 insertions(+), 22 deletions(-)
arch/arm/cpu/armv7/omap-common/boot-common.c +16 -0
@@ -17,8 +17,10 @@*/ #include <common.h> +#include <asm/spl.h> #include <asm/omap_common.h> #include <asm/arch/omap.h> +#include <asm/arch/mmc_host_def.h> /* * This is used to verify if the configuration header
@@ -46,4 +48,18 @@ u32 spl_boot_mode(void) {return omap_bootmode; } + +int board_mmc_init (bd_t *bis) +{ +switch (spl_boot_device ()) { +case BOOT_DEVICE_MMC1 : +omap_mmc_init (0 ,0 ,0 ); +break ; +case BOOT_DEVICE_MMC2 : +case BOOT_DEVICE_MMC2_2 : +omap_mmc_init (1 ,0 ,0 ); +break ; + } +return 0 ; +}#endif
arch/arm/cpu/armv7/omap-common/spl_mmc.c +0 -17
@@ -30,27 +30,10 @@#include <mmc.h> #include <fat.h> #include <version.h> -#include <asm/omap_common.h> #include <asm/arch/mmc_host_def.h> DECLARE_GLOBAL_DATA_PTR ; -#ifdef CONFIG_GENERIC_MMC -int board_mmc_init (bd_t *bis) -{ -switch (spl_boot_device ()) { -case BOOT_DEVICE_MMC1 : -omap_mmc_init (0 ,0 ,0 ); -break ; -case BOOT_DEVICE_MMC2 : -case BOOT_DEVICE_MMC2_2 : -omap_mmc_init (1 ,0 ,0 ); -break ; - } -return 0 ; -} -#endif -static void mmc_load_image_raw (struct mmc *mmc) {u32 image_size_sectors, err;
arch/arm/cpu/armv7/omap3/board.c +15 -0
@@ -41,6 +41,7 @@#include <asm/arch/gpio.h> #include <asm/spl.h> #include <asm/omap_common.h> +#include <asm/arch/mmc_host_def.h> #include <i2c.h> #include <linux/compiler.h>
@@ -89,6 +90,20 @@ u32 spl_boot_device(void)return omap3_boot_device; } +int board_mmc_init (bd_t *bis) +{ +switch (spl_boot_device ()) { +case BOOT_DEVICE_MMC1 : +omap_mmc_init (0 ,0 ,0 ); +break ; +case BOOT_DEVICE_MMC2 : +case BOOT_DEVICE_MMC2_2 : +omap_mmc_init (1 ,0 ,0 ); +break ; + } +return 0 ; +} +void spl_board_init (void ) {#ifdef CONFIG_SPL_I2C_SUPPORT
arch/arm/include/asm/omap_common.h +0 -5
@@ -34,11 +34,6 @@#define OMAP_INIT_CONTEXT_UBOOT_AFTER_SPL 2#define OMAP_INIT_CONTEXT_UBOOT_AFTER_CH 3 -/* Boot type */ -#define MMCSD_MODE_UNDEFINED 0 -#define MMCSD_MODE_RAW 1 -#define MMCSD_MODE_FAT 2 -static inline u32 omap_revision (void ) {extern u32 *const omap_si_rev;
arch/arm/include/asm/spl.h +5 -0
@@ -26,6 +26,11 @@/* Platform-specific defines */ #include <asm/arch/spl.h> +/* Boot type */ +#define MMCSD_MODE_UNDEFINED 0 +#define MMCSD_MODE_RAW 1 +#define MMCSD_MODE_FAT 2 +struct spl_image_info {const char *name;u8 os;
Signature · 1 line
1.7.9.5
PATCH v4 11/20 ARM: SPL: Clean up spl.c / spl_nand.c slightly
In reply to Tom Rini- Remove includes we don't need
- Switch some printf statements to puts
- Convert some printf statements to debug, introduce new puts statements
- In most cases saying just "No mkimage signature, assuming u-boot.bin" or similar is sufficient. This also means the non-DEBUG case doesn't need printf, in the core of SPL.
- The other case here is that PLAIN_VERSION provided what we wanted already, so just use it.
---
arch/arm/cpu/armv7/omap-common/spl.c | 23 ++++++++--------------- arch/arm/cpu/armv7/omap-common/spl_nand.c | 1 - 2 files changed, 8 insertions(+), 16 deletions(-)
arch/arm/cpu/armv7/omap-common/spl.c +8 -15
@@ -26,12 +26,9 @@#include <asm/spl.h> #include <asm/u-boot.h> #include <asm/utils.h> -#include <asm/arch/sys_proto.h> #include <nand.h> -#include <mmc.h> #include <fat.h> #include <version.h> -#include <asm/arch/mmc_host_def.h> #include <i2c.h> #include <image.h> #include <malloc.h>
@@ -78,8 +75,8 @@ void board_init_f(ulong dummy)#ifdef CONFIG_SPL_OS_BOOT __weak int spl_start_uboot (void ) { -printf ("SPL: Please implement spl_start_uboot() for your board\n" ); -printf ("SPL: Direct Linux boot not active!\n" ); +puts ("SPL: Please implement spl_start_uboot() for your board\n" ); +puts ("SPL: Direct Linux boot not active!\n" );return 1 ; }#endif
@@ -99,9 +96,9 @@ void spl_parse_image_header(const struct image_header *header) spl_image.name, spl_image.load_addr, spl_image.size); }else {/* Signature not found - assume u-boot.bin */ -printf ("mkimage signature not found - ih_magic = %x\n" , +puts ("mkimage signature not found, assuming u-boot.bin ..\n" ); +debug ("mkimage signature not found - ih_magic = %x\n" , header->ih_magic); -debug ("Assuming u-boot.bin ..\n" );/* Let's assume U-Boot will not be more than 200 KB */ spl_image.size =200 *1024 ; spl_image.entry_point =CONFIG_SYS_TEXT_BASE ;
@@ -179,7 +176,8 @@ void board_init_r(gd_t *id, ulong dummy)break ;#endif default : -printf ("SPL: Un-supported Boot Device - %d!!!\n" , boot_device); +puts ("SPL: Un-supported Boot Device\n" ); +debug ("Found: %d\n" , boot_device);hang ();break ; }
@@ -205,8 +203,6 @@ void board_init_r(gd_t *id, ulong dummy)/* This requires UART clocks to be enabled */ void preloader_console_init (void ) { -const char *u_boot_rev =U_BOOT_VERSION ; - gd = &gdata; gd->bd = &bdata; gd->flags |=GD_FLG_RELOC ;
@@ -216,11 +212,8 @@ void preloader_console_init(void) gd->have_console =1 ; -/* Avoid a second "U-Boot" coming from this string */ - u_boot_rev = &u_boot_rev[7 ]; - -printf ("\nU-Boot SPL %s (%s - %s)\n" , u_boot_rev,U_BOOT_DATE , -U_BOOT_TIME ); +puts ("\nU-Boot SPL " PLAIN_VERSION " (" U_BOOT_DATE " - " \ +U_BOOT_TIME ")\n" );#ifdef CONFIG_SPL_DISPLAY_PRINT spl_display_print ();#endif
arch/arm/cpu/armv7/omap-common/spl_nand.c +0 -1
@@ -24,7 +24,6 @@#include <asm/spl.h> #include <asm/u-boot.h> #include <asm/utils.h> -#include <asm/arch/sys_proto.h> #include <asm/io.h> #include <nand.h> #include <version.h>
Signature · 1 line
1.7.9.5
PATCH v4 11/20 ARM: SPL: Clean up spl.c / spl_nand.c slightly
Quoted 11 lines · Tom Rini
- Remove includes we don't need
- Switch some printf statements to puts
- Convert some printf statements to debug, introduce new puts statements
- In most cases saying just "No mkimage signature, assuming u-boot.bin" or similar is sufficient. This also means the non-DEBUG case doesn't need printf, in the core of SPL.
- The other case here is thatPLAIN_VERSIONprovided what we wanted already, so just use it.Signed-off-by Tom Rini <[email protected]>---
<snip>
arch/arm/cpu/armv7/omap-common/spl.c void spl_parse_image_header(const struct image_header *header) · line 99
Quoted 6 lines
arch/arm/cpu/armv7/omap-common/spl.c +1
-1@@ -99,9 +96,9 @@ void spl_parse_image_header(const struct image_header *header) spl_image.name, spl_image.load_addr, spl_image.size); }else {/* Signature not found - assume u-boot.bin */ - printf("mkimage signature not found - ih_magic = %x\n", +puts ("mkimage signature not found, assuming u-boot.bin ..\n" );
Just a nit. Can the above be made a debug statement instead, like how it was earlier. I guess it's a bit superfluous -- also the other case just has a debug. Don't have a strong opinion about this though, just find it a bit annoying that this gets printed at every boot :).
arch/arm/cpu/armv7/omap-common/spl.c void spl_parse_image_header(const struct image_header *header) · line 104
Quoted 6 lines
arch/arm/cpu/armv7/omap-common/spl.c +1
-1+debug ("mkimage signature not found - ih_magic = %x\n" , header->ih_magic); -debug ("Assuming u-boot.bin ..\n" );/* Let's assume U-Boot will not be more than 200 KB */ spl_image.size =200 *1024 ; spl_image.entry_point =CONFIG_SYS_TEXT_BASE ;
-sughosh
PATCH v4 11/20 ARM: SPL: Clean up spl.c / spl_nand.c slightly
Quoted 15 lines · Sughosh Ganu
Quoted 11 lines · Tom Rini
- Remove includes we don't need
- Switch some printf statements to puts
- Convert some printf statements to debug, introduce new puts statements
- In most cases saying just "No mkimage signature, assuming u-boot.bin" or similar is sufficient. This also means the non-DEBUG case doesn't need printf, in the core of SPL.
- The other case here is thatPLAIN_VERSIONprovided what we wanted already, so just use it.Signed-off-by Tom Rini <[email protected]>---
<snip>
Quoted 11 lines
arch/arm/cpu/armv7/omap-common/spl.c void spl_parse_image_header(const struct image_header *header) · line 99
Quoted 6 lines
arch/arm/cpu/armv7/omap-common/spl.c +1
-1@@ -99,9 +96,9 @@ void spl_parse_image_header(const struct image_header *header) spl_image.name, spl_image.load_addr, spl_image.size); }else {/* Signature not found - assume u-boot.bin */ - printf("mkimage signature not found - ih_magic = %x\n", +puts ("mkimage signature not found, assuming u-boot.bin ..\n" );Just a nit. Can the above be made a debug statement instead, like how it was earlier. I guess it's a bit superfluous -- also the other case just has a debug. Don't have a strong opinion about this though, just find it a bit annoying that this gets printed at every boot :).
I've of two minds here. On the one hand, in the omap-common version we always had a print here and part of the point is that you ought to be writing u-boot.img. On the other hand, making this a debug saves us space :)
Signature · 1 line
Tom
PATCH v4 12/20 ARM: SPL: Start hooking in the current SPI SPL support
In reply to Tom Rini---
arch/arm/cpu/armv7/omap-common/spl.c | 5 +++++ arch/arm/include/asm/spl.h | 3 +++ 2 files changed, 8 insertions(+)
arch/arm/cpu/armv7/omap-common/spl.c +5 -0
@@ -175,6 +175,11 @@ void board_init_r(gd_t *id, ulong dummy)spl_ymodem_load_image ();break ;#endif +#ifdef CONFIG_SPL_SPI_SUPPORT +case BOOT_DEVICE_SPI : +spi_boot (); +break ; +#endif default :puts ("SPL: Un-supported Boot Device\n" );debug ("Found: %d\n" , boot_device);
arch/arm/include/asm/spl.h +3 -0
@@ -60,6 +60,9 @@ void spl_mmc_load_image(void);/* YMODEM SPL functions */ void spl_ymodem_load_image (void ); +/* SPI SPL functions */ +void spi_boot (void ); +#ifdef CONFIG_SPL_BOARD_INIT void spl_board_init (void );#endif
Signature · 1 line
1.7.9.5
PATCH v4 13/20 ARM: SPL: Move gpmc_init() to spl_board_init()
In reply to Tom RiniThis is an OMAP/related-specific function, move calling it to spl_board_init() and turn on CONFIG_SPL_BOARD_INIT on the boards that enabled NAND and didn't enable this already.
---
arch/arm/cpu/armv7/omap-common/boot-common.c | 7 +++++++ arch/arm/cpu/armv7/omap-common/spl_nand.c | 1 - arch/arm/cpu/armv7/omap3/board.c | 3 +++ include/configs/am3517_crane.h | 1 + include/configs/am3517_evm.h | 1 + include/configs/mcx.h | 1 + include/configs/tam3517-common.h | 1 + 7 files changed, 14 insertions(+), 1 deletion(-)
arch/arm/cpu/armv7/omap-common/boot-common.c +7 -0
@@ -49,6 +49,13 @@ u32 spl_boot_mode(void)return omap_bootmode; } +void spl_board_init (void ) +{ +#ifdef CONFIG_SPL_NAND_SUPPORT +gpmc_init (); +#endif +} +int board_mmc_init (bd_t *bis) {switch (spl_boot_device ()) {
arch/arm/cpu/armv7/omap-common/spl_nand.c +0 -1
@@ -35,7 +35,6 @@ void spl_nand_load_image(void) int *dst __attribute__((unused));debug ("spl: nand - using hw ecc\n" ); -gpmc_init ();nand_init ();/*use CONFIG_SYS_TEXT_BASE as temporary storage area */
arch/arm/cpu/armv7/omap3/board.c +3 -0
@@ -106,6 +106,9 @@ int board_mmc_init(bd_t *bis)void spl_board_init (void ) { +#ifdef CONFIG_SPL_NAND_SUPPORT +gpmc_init (); +#endif #ifdef CONFIG_SPL_I2C_SUPPORT i2c_init (CONFIG_SYS_I2C_SPEED ,CONFIG_SYS_I2C_SLAVE );#endif
include/configs/am3517_crane.h +1 -0
@@ -322,6 +322,7 @@/* Defines for SPL */ #define CONFIG_SPL +#define CONFIG_SPL_BOARD_INIT #define CONFIG_SPL_NAND_SIMPLE #define CONFIG_SPL_TEXT_BASE 0x40200800#define CONFIG_SPL_MAX_SIZE (54 * 1024)/* 8 KB for stack */
include/configs/am3517_evm.h +1 -0
@@ -321,6 +321,7 @@/* Defines for SPL */ #define CONFIG_SPL +#define CONFIG_SPL_BOARD_INIT #define CONFIG_SPL_NAND_SIMPLE #define CONFIG_SPL_TEXT_BASE 0x40200800#define CONFIG_SPL_MAX_SIZE (54 * 1024)/* 8 KB for stack */
include/configs/mcx.h +1 -0
@@ -309,6 +309,7 @@/* Defines for SPL */ #define CONFIG_SPL +#define CONFIG_SPL_BOARD_INIT #define CONFIG_SPL_NAND_SIMPLE #define CONFIG_SPL_NAND_SOFTECC
include/configs/tam3517-common.h +1 -0
@@ -241,6 +241,7 @@/* Defines for SPL */ #define CONFIG_SPL +#define CONFIG_SPL_BOARD_INIT #define CONFIG_SPL_CONSOLE #define CONFIG_SPL_NAND_SIMPLE #define CONFIG_SPL_NAND_SOFTECC
Signature · 1 line
1.7.9.5
PATCH v4 14/20 SPL: Move the omap SPL framework to common/spl
In reply to Tom RiniAdd a new flag, CONFIG_SPL_FRAMEWORK to opt into the common/spl SPL framework, enable on all of the previously using boards. We move the spl_ymodem.c portion to common/ and spl_mmc.c to drivers/mmc/. We leave the NAND one in-place as we plan to replace it later in this series.
We use common/spl to avoid linker problems with respect to merging
constant strings in objects. Otherwise all strings in common/ will be
linked in and kept which grows SPL in size too much.
---
Changes in v2:
- Place files into common/spl (due to gcc bug #54303) and include/spl.h
- Reorder all of the patches that used to follow this to precede.
Changes in v3:
- Fix checkpatch.pl warning
README | 5 ++
arch/arm/cpu/armv7/am33xx/board.c | 2 +-
arch/arm/cpu/armv7/omap-common/Makefile | 7 --
arch/arm/cpu/armv7/omap-common/boot-common.c | 2 +-
arch/arm/cpu/armv7/omap-common/hwinit-common.c | 2 +-
arch/arm/cpu/armv7/omap-common/spl_nand.c | 2 +-
arch/arm/cpu/armv7/omap3/board.c | 2 +-
arch/arm/include/asm/spl.h | 40 ------------
common/spl/Makefile | 37 +++++++++++
.../arm/cpu/armv7/omap-common => common/spl}/spl.c | 4 +-
.../armv7/omap-common => common/spl}/spl_ymodem.c | 3 +-
drivers/mmc/Makefile | 5 ++
.../armv7/omap-common => drivers/mmc}/spl_mmc.c | 2 +-
include/configs/am335x_evm.h | 1 +
include/configs/am3517_crane.h | 1 +
include/configs/am3517_evm.h | 1 +
include/configs/devkit8000.h | 1 +
include/configs/mcx.h | 1 +
include/configs/omap3_beagle.h | 1 +
include/configs/omap3_evm_common.h | 1 +
include/configs/omap3_overo.h | 1 +
include/configs/omap4_common.h | 1 +
include/configs/omap5_evm.h | 1 +
include/configs/tam3517-common.h | 1 +
include/configs/tricorder.h | 1 +
include/spl.h | 69 ++++++++++++++++++++
spl/Makefile | 1 +
27 files changed, 138 insertions(+), 57 deletions(-)
create mode 100644 common/spl/Makefile
rename {arch/arm/cpu/armv7/omap-common => common/spl}/spl.c (99%)
rename {arch/arm/cpu/armv7/omap-common => common/spl}/spl_ymodem.c (97%)
rename {arch/arm/cpu/armv7/omap-common => drivers/mmc}/spl_mmc.c (99%)
create mode 100644 include/spl.hREADME +5 -0
@@ -2564,6 +2564,11 @@ FIT uImage format: CONFIG_SYS_SPL_MALLOC_SIZE The size of the malloc pool used in SPL. + CONFIG_SPL_FRAMEWORK + Enable the SPL framework under common/. This framework + supports MMC, NAND and YMODEM loading of U-Boot and NAND + NAND loading of the Linux Kernel. + CONFIG_SPL_DISPLAY_PRINT For ARM, enable an optional function to print more information about the running system.
arch/arm/cpu/armv7/am33xx/board.c +1 -1
@@ -17,6 +17,7 @@*/ #include <common.h> +#include <spl.h> #include <asm/arch/cpu.h> #include <asm/arch/hardware.h> #include <asm/arch/omap.h>
@@ -25,7 +26,6 @@#include <asm/arch/mmc_host_def.h> #include <asm/arch/common_def.h> #include <asm/io.h> -#include <asm/spl.h> DECLARE_GLOBAL_DATA_PTR ;
arch/arm/cpu/armv7/omap-common/Makefile +0 -7
@@ -46,16 +46,9 @@ SOBJS += lowlevel_init.o endif ifdef CONFIG_SPL_BUILD -COBJS += spl.o ifdef CONFIG_SPL_NAND_SUPPORT COBJS += spl_nand.o endif -ifdef CONFIG_SPL_MMC_SUPPORT -COBJS += spl_mmc.o -endif -ifdef CONFIG_SPL_YMODEM_SUPPORT -COBJS += spl_ymodem.o -endif endif ifndef CONFIG_SPL_BUILD
arch/arm/cpu/armv7/omap-common/boot-common.c +1 -1
@@ -17,7 +17,7 @@*/ #include <common.h> -#include <asm/spl.h> +#include <spl.h> #include <asm/omap_common.h> #include <asm/arch/omap.h> #include <asm/arch/mmc_host_def.h>
arch/arm/cpu/armv7/omap-common/hwinit-common.c +1 -1
@@ -28,10 +28,10 @@* MA 02111-1307 USA */ #include <common.h> +#include <spl.h> #include <asm/arch/sys_proto.h> #include <asm/sizes.h> #include <asm/emif.h> -#include <asm/spl.h> DECLARE_GLOBAL_DATA_PTR ;
arch/arm/cpu/armv7/omap-common/spl_nand.c +1 -1
@@ -21,7 +21,7 @@* MA 02111-1307 USA */ #include <common.h> -#include <asm/spl.h> +#include <spl.h> #include <asm/u-boot.h> #include <asm/utils.h> #include <asm/io.h>
arch/arm/cpu/armv7/omap3/board.c +1 -1
@@ -33,13 +33,13 @@* MA 02111-1307 USA */ #include <common.h> +#include <spl.h> #include <asm/io.h> #include <asm/arch/sys_proto.h> #include <asm/arch/mem.h> #include <asm/cache.h> #include <asm/armv7.h> #include <asm/arch/gpio.h> -#include <asm/spl.h> #include <asm/omap_common.h> #include <asm/arch/mmc_host_def.h> #include <i2c.h>
arch/arm/include/asm/spl.h +0 -40
@@ -26,44 +26,4 @@/* Platform-specific defines */ #include <asm/arch/spl.h> -/* Boot type */ -#define MMCSD_MODE_UNDEFINED 0 -#define MMCSD_MODE_RAW 1 -#define MMCSD_MODE_FAT 2 - -struct spl_image_info { -const char *name; -u8 os; -u32 load_addr; -u32 entry_point; -u32 size; -}; - -extern struct spl_image_info spl_image; -extern u32 *boot_params_ptr; - -/* SPL common functions */ -void preloader_console_init (void ); -u32 spl_boot_device (void ); -u32 spl_boot_mode (void ); -void spl_parse_image_header (const struct image_header *header); -void spl_board_prepare_for_linux (void ); -int spl_start_uboot (void ); -void spl_display_print (void ); - -/* NAND SPL functions */ -void spl_nand_load_image (void ); - -/* MMC SPL functions */ -void spl_mmc_load_image (void ); - -/* YMODEM SPL functions */ -void spl_ymodem_load_image (void ); - -/* SPI SPL functions */ -void spi_boot (void ); - -#ifdef CONFIG_SPL_BOARD_INIT -void spl_board_init (void ); -#endif #endif
common/spl/Makefile new file +37 -0
@@ -0,0 +1,37 @@ +# +# (C) Copyright 2012 +# Texas Instruments Incorporated - http://www.ti.com/ +# Aneesh V <[email protected]> +# +# This file is released under the terms of GPL v2 and any later version. +# See the file COPYING in the root directory of the source tree for details. +# +# Based on common/Makefile. +# + +include $(TOPDIR)/config.mk + +LIB = $(obj)libspl.o + +ifdef CONFIG_SPL_BUILD +COBJS-$(CONFIG_SPL_FRAMEWORK) += spl.o +COBJS-$(CONFIG_SPL_YMODEM_SUPPORT) += spl_ymodem.o +endif + +COBJS := $(sort $(COBJS-y)) +SRCS := $(COBJS:.o=.c) +OBJS := $(addprefix $(obj),$(COBJS-y)) + +all: $(obj).depend $(LIB) + +$(LIB): $(OBJS) + $(call cmd_link_o_target, $(OBJS)) + +######################################################################### + +# defines $(obj).depend target +include $(SRCTREE)/rules.mk + +sinclude $(obj).depend + +#########################################################################
common/spl/spl.c renamed from arch/arm/cpu/armv7/omap-common/spl.c +2 -2
@@ -23,7 +23,7 @@* MA 02111-1307 USA */ #include <common.h> -#include <asm/spl.h> +#include <spl.h> #include <asm/u-boot.h> #include <asm/utils.h> #include <nand.h>
@@ -36,7 +36,7 @@DECLARE_GLOBAL_DATA_PTR ; -u32 * boot_params_ptr =NULL ; +u32 *boot_params_ptr =NULL ;struct spl_image_info spl_image;/* Define global data structure pointer to it*/
common/spl/spl_ymodem.c renamed from arch/arm/cpu/armv7/omap-common/spl_ymodem.c +1 -2
@@ -26,11 +26,10 @@* MA 02111-1307 USA */ #include <common.h> -#include <asm/spl.h> +#include <spl.h> #include <xyzModem.h> #include <asm/u-boot.h> #include <asm/utils.h> -#include <asm/arch/sys_proto.h> #define BUF_SIZE 1024
drivers/mmc/Makefile +5 -0
@@ -25,6 +25,11 @@ include $(TOPDIR)/config.mk LIB := $(obj)libmmc.o +ifdef CONFIG_SPL_BUILD +ifdef CONFIG_SPL_FRAMEWORK +COBJS-$(CONFIG_SPL_MMC_SUPPORT) += spl_mmc.o +endif +endif COBJS-$(CONFIG_BFIN_SDH) += bfin_sdh.o COBJS-$(CONFIG_DAVINCI_MMC) += davinci_mmc.o COBJS-$(CONFIG_FSL_ESDHC) += fsl_esdhc.o
drivers/mmc/spl_mmc.c renamed from arch/arm/cpu/armv7/omap-common/spl_mmc.c +1 -1
@@ -23,7 +23,7 @@* MA 02111-1307 USA */ #include <common.h> -#include <asm/spl.h> +#include <spl.h> #include <asm/u-boot.h> #include <asm/utils.h> #include <asm/arch/sys_proto.h>
include/configs/am335x_evm.h +1 -0
@@ -126,6 +126,7 @@/* Defines for SPL */ #define CONFIG_SPL +#define CONFIG_SPL_FRAMEWORK #define CONFIG_SPL_TEXT_BASE 0x402F0400#define CONFIG_SPL_MAX_SIZE (46 * 1024)#define CONFIG_SPL_STACK LOW_LEVEL_SRAM_STACK
include/configs/am3517_crane.h +1 -0
@@ -322,6 +322,7 @@/* Defines for SPL */ #define CONFIG_SPL +#define CONFIG_SPL_FRAMEWORK #define CONFIG_SPL_BOARD_INIT #define CONFIG_SPL_NAND_SIMPLE #define CONFIG_SPL_TEXT_BASE 0x40200800
include/configs/am3517_evm.h +1 -0
@@ -321,6 +321,7 @@/* Defines for SPL */ #define CONFIG_SPL +#define CONFIG_SPL_FRAMEWORK #define CONFIG_SPL_BOARD_INIT #define CONFIG_SPL_NAND_SIMPLE #define CONFIG_SPL_TEXT_BASE 0x40200800
include/configs/devkit8000.h +1 -0
@@ -305,6 +305,7 @@/* Defines for SPL */ #define CONFIG_SPL +#define CONFIG_SPL_FRAMEWORK #define CONFIG_SPL_NAND_SIMPLE #define CONFIG_SPL_LIBCOMMON_SUPPORT
include/configs/mcx.h +1 -0
@@ -309,6 +309,7 @@/* Defines for SPL */ #define CONFIG_SPL +#define CONFIG_SPL_FRAMEWORK #define CONFIG_SPL_BOARD_INIT #define CONFIG_SPL_NAND_SIMPLE #define CONFIG_SPL_NAND_SOFTECC
include/configs/omap3_beagle.h +1 -0
@@ -398,6 +398,7 @@/* Defines for SPL */ #define CONFIG_SPL +#define CONFIG_SPL_FRAMEWORK #define CONFIG_SPL_NAND_SIMPLE #define CONFIG_SPL_TEXT_BASE 0x40200800#define CONFIG_SPL_MAX_SIZE (54 * 1024)/* 8 KB for stack */
include/configs/omap3_evm_common.h +1 -0
@@ -280,6 +280,7 @@/* Defines for SPL */ #define CONFIG_SPL +#define CONFIG_SPL_FRAMEWORK #define CONFIG_SPL_TEXT_BASE 0x40200800#define CONFIG_SPL_MAX_SIZE (54 * 1024)/* 8 KB for stack */ #define CONFIG_SPL_STACK LOW_LEVEL_SRAM_STACK
include/configs/omap3_overo.h +1 -0
@@ -300,6 +300,7 @@/* Defines for SPL */ #define CONFIG_SPL +#define CONFIG_SPL_FRAMEWORK #define CONFIG_SPL_NAND_SIMPLE #define CONFIG_SPL_TEXT_BASE 0x40200800#define CONFIG_SPL_MAX_SIZE (54 * 1024)/* 8 KB for stack */
include/configs/omap4_common.h +1 -0
@@ -246,6 +246,7 @@/* Defines for SPL */ #define CONFIG_SPL +#define CONFIG_SPL_FRAMEWORK #define CONFIG_SPL_TEXT_BASE 0x40304350#define CONFIG_SPL_MAX_SIZE (38 * 1024)#define CONFIG_SPL_STACK LOW_LEVEL_SRAM_STACK
include/configs/omap5_evm.h +1 -0
@@ -243,6 +243,7 @@/* Defines for SPL */ #define CONFIG_SPL +#define CONFIG_SPL_FRAMEWORK #define CONFIG_SPL_TEXT_BASE 0x40300350#define CONFIG_SPL_MAX_SIZE 0x19000/* 100K */ #define CONFIG_SPL_STACK LOW_LEVEL_SRAM_STACK
include/configs/tam3517-common.h +1 -0
@@ -241,6 +241,7 @@/* Defines for SPL */ #define CONFIG_SPL +#define CONFIG_SPL_FRAMEWORK #define CONFIG_SPL_BOARD_INIT #define CONFIG_SPL_CONSOLE #define CONFIG_SPL_NAND_SIMPLE
include/configs/tricorder.h +1 -0
@@ -275,6 +275,7 @@/* Defines for SPL */ #define CONFIG_SPL +#define CONFIG_SPL_FRAMEWORK #define CONFIG_SPL_NAND_SIMPLE #define CONFIG_SPL_BOARD_INIT
include/spl.h new file +69 -0
69 lines not on this page · raw message
spl/Makefile +1 -0
@@ -42,6 +42,7 @@ endif LIBS-y += board/$(BOARDDIR)/lib$(BOARD).o LIBS-$(HAVE_VENDOR_COMMON_LIB) += board/$(VENDOR)/common/lib$(VENDOR).o +LIBS-$(CONFIG_SPL_FRAMEWORK) += common/spl/libspl.o LIBS-$(CONFIG_SPL_LIBCOMMON_SUPPORT) += common/libcommon.o LIBS-$(CONFIG_SPL_LIBDISK_SUPPORT) += disk/libdisk.o LIBS-$(CONFIG_SPL_I2C_SUPPORT) += drivers/i2c/libi2c.o
Signature · 1 line
1.7.9.5
PATCH v4 15/20 SPL: Create arch/arm/lib/spl.c for board_init_f and jump_to_image_linux
In reply to Tom RiniIn SPL (CONFIG_SPL_FRAMEWORK) board_init_f must setup the stack pointer, clear the BSS and call board_init_r. We mark this as weak as some platforms may need to perform additional initalization at this point. We provide a gd that we know will be in a usable location, once the BSS has been cleared to help with this as well. Finally, we no longer call relocate_code so remove that from the armv7 version.
Next, both board_init_f and jump_to_image_linux are going to be inherently arch-specific, so move these versions to arch/arm/lib/spl.c
---
Changes in v4:
- Based on PowerPC, use memset to clear BSS rather than relocate_code
- Document what board_init_f must do
- Make board_init_f setup the global data pointer, after clearing BSS.
- Move board_init_f / jump_to_image_linux to arch/arm/lib/spl.c
arch/arm/cpu/armv7/start.S | 13 ++------ arch/arm/lib/Makefile | 2 ++ arch/arm/lib/spl.c | 72 ++++++++++++++++++++++++++++++++++++++++++++ common/spl/spl.c | 35 ++------------------- include/spl.h | 3 ++ 5 files changed, 81 insertions(+), 44 deletions(-) create mode 100644 arch/arm/lib/spl.c
arch/arm/cpu/armv7/start.S +2 -11
@@ -166,6 +166,7 @@ call_board_init_f: /*------------------------------------------------------------------------------*/ +#ifndef CONFIG_SPL_BUILD /* * void relocate_code (addr_sp, gd, addr_moni) *
@@ -196,7 +197,6 @@ copy_loop: cmp r0, r2 /* until source end address [r2] */ blo copy_loop -#ifndef CONFIG_SPL_BUILD /* * fix .rel.dyn relocations */
@@ -243,20 +243,12 @@ _rel_dyn_end_ofs: _dynsym_start_ofs: .word __dynsym_start - _start -#endif /* #ifndef CONFIG_SPL_BUILD */ - 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... */
@@ -283,12 +275,10 @@ jump_2_ram: * Move vector table */ #if !defined(CONFIG_TEGRA2) -#if !(defined(CONFIG_OMAP44XX) && defined(CONFIG_SPL_BUILD)) /* Set vector address in CP15 VBAR register */ ldr r0, =_start add r0, r0, r9 mcr p15, 0, r0, c12, c0, 0 @Set VBAR -#endif #endif /* !Tegra2 */ ldr r0, _board_init_r_ofs
@@ -304,6 +294,7 @@ jump_2_ram: _board_init_r_ofs: .word board_init_r - _start ENDPROC(relocate_code) +#endif /************************************************************************* *
arch/arm/lib/Makefile +2 -0
@@ -44,6 +44,8 @@ COBJS-y += interrupts.o COBJS-y += reset.o SOBJS-$(CONFIG_USE_ARCH_MEMSET) += memset.o SOBJS-$(CONFIG_USE_ARCH_MEMCPY) += memcpy.o +else +COBJS-$(CONFIG_SPL_FRAMEWORK) += spl.o endif COBJS-y += cache.o
arch/arm/lib/spl.c new file +72 -0
72 lines not on this page · raw message
common/spl/spl.c +2 -33
@@ -40,7 +40,7 @@ u32 *boot_params_ptr = NULL;struct spl_image_info spl_image;/* Define global data structure pointer to it*/ -static gd_t gdata __attribute__ ((section(".data"))); +gd_t gdata __attribute__ ((section(".data"))); static bd_t bdata __attribute__ ((section(".data")));inline void hang (void )
@@ -50,18 +50,6 @@ inline void hang(void) ; } -void board_init_f (ulong dummy) -{ -/* -* We call relocate_code() with relocation target same as the -* CONFIG_SYS_SPL_TEXT_BASE. This will result in relocation getting -* skipped. Instead, only .bss initialization will happen. That's -* all we need -*/ -debug (">>board_init_f()\n" ); -relocate_code (CONFIG_SPL_STACK , &gdata,CONFIG_SPL_TEXT_BASE ); -} -/* * Default function to determine if u-boot or the OS should * be started. This implementation always returns 1.
@@ -108,24 +96,6 @@ void spl_parse_image_header(const struct image_header *header) } } -/* -* This function jumps to an image with argument. Normally an FDT or ATAGS -* image. -* arg: Pointer to paramter image in RAM -*/ -#ifdef CONFIG_SPL_OS_BOOT -static void __noreturn jump_to_image_linux (void *arg) -{ -debug ("Entering kernel arg pointer: 0x%p\n" , arg); -typedef void (*image_entry_arg_t )(int ,int ,void *) - __attribute__ ((noreturn)); -image_entry_arg_t image_entry = - (image_entry_arg_t ) spl_image.entry_point; -cleanup_before_linux (); -image_entry (0 ,CONFIG_MACH_TYPE , arg); -} -#endif -static void __noreturn jump_to_image_no_args (void ) {typedef void __noreturn (*image_entry_noargs_t )(u32 *);
@@ -141,7 +111,7 @@ static void __noreturn jump_to_image_no_args(void)image_entry ((u32 *)boot_params_ptr_addr); } -void board_init_r (gd_t *id,ulong dummy) +void board_init_r (gd_t *dummy1,ulong dummy2) {u32 boot_device;debug (">>spl:board_init_r()\n" );
@@ -208,7 +178,6 @@ void board_init_r(gd_t *id, ulong dummy)/* This requires UART clocks to be enabled */ void preloader_console_init (void ) { - gd = &gdata; gd->bd = &bdata; gd->flags |=GD_FLG_RELOC ; gd->baudrate =CONFIG_BAUDRATE ;
include/spl.h +3 -0
@@ -24,6 +24,7 @@#define _SPL_H_/* Platform-specific defines */ +#include <linux/compiler.h> #include <asm/spl.h> /* Boot type */
@@ -41,6 +42,7 @@ struct spl_image_info {extern struct spl_image_info spl_image;extern u32 *boot_params_ptr; +extern gd_t gdata;/* SPL common functions */ void preloader_console_init (void );
@@ -48,6 +50,7 @@ u32 spl_boot_device(void);u32 spl_boot_mode (void );void spl_parse_image_header (const struct image_header *header);void spl_board_prepare_for_linux (void ); +void __noreturn jump_to_image_linux (void *arg);int spl_start_uboot (void );void spl_display_print (void );
Signature · 1 line
1.7.9.5
PATCH v4 16/20 SPL: do not use fix value for u-boot size
In reply to Tom RiniFrom: Stefano Babic <[email protected]>
If an u-boot image is not found, SPL thinks to load a bare u-boot.bin image with a maximum size of 200KB. Use CONFIG_SYS_MONITOR_LEN instead.
---
Changes in v4:
- Add Stefano's patch for CONFIG_SYS_MONITOR_LEN
common/spl/spl.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
common/spl/spl.c +5 -1
@@ -36,6 +36,10 @@DECLARE_GLOBAL_DATA_PTR ; +#ifndef CONFIG_SYS_MONITOR_LEN +#define CONFIG_SYS_MONITOR_LEN (200 * 1024) +#endif +u32 *boot_params_ptr =NULL ;struct spl_image_info spl_image;
@@ -88,7 +92,7 @@ void spl_parse_image_header(const struct image_header *header)debug ("mkimage signature not found - ih_magic = %x\n" , header->ih_magic);/* Let's assume U-Boot will not be more than 200 KB */ - spl_image.size =200 *1024 ; + spl_image.size =CONFIG_SYS_MONITOR_LEN ; spl_image.entry_point =CONFIG_SYS_TEXT_BASE ; spl_image.load_addr =CONFIG_SYS_TEXT_BASE ; spl_image.os =IH_OS_U_BOOT ;
Signature · 1 line
1.7.9.5
PATCH v4 16/20 SPL: do not use fix value for u-boot size
Quoted 21 lines · Tom Rini
From: Stefano Babic <[email protected]>
If an u-boot image is not found, SPL thinks to load a bare u-boot.bin image with a maximum size of 200KB. Use
CONFIG_SYS_MONITOR_LENinstead.Signed-off-by Stefan Roese <[email protected]>Signed-off-by Stefano Babic <[email protected]>Signed-off-by Tom Rini <[email protected]>---
Changes in v4:
- Add Stefano's patch forCONFIG_SYS_MONITOR_LENcommon/spl/spl.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)common/spl/spl.c +0
-0
common/spl/spl.c line 41
Quoted 6 lines
common/spl/spl.c +3
-0@@ -36,6 +36,10 @@DECLARE_GLOBAL_DATA_PTR ; +#ifndef CONFIG_SYS_MONITOR_LEN +#define CONFIG_SYS_MONITOR_LEN (200 * 1024) +#endif
The u-boot size on hawkboard is a bit more than this. I will send a patch to update hawkboard's config file. Can you include it in your patch series.
-sughosh
PATCH v4 16/20 SPL: do not use fix value for u-boot size
Quoted 25 lines · Sughosh Ganu
Quoted 24 lines · Tom Rini
From: Stefano Babic <[email protected]>
If an u-boot image is not found, SPL thinks to load a bare u-boot.bin image with a maximum size of 200KB. Use
CONFIG_SYS_MONITOR_LENinstead.Signed-off-by Stefan Roese <[email protected]>Signed-off-by Stefano Babic <[email protected]>Signed-off-by Tom Rini <[email protected]>---
Changes in v4:
- Add Stefano's patch forCONFIG_SYS_MONITOR_LENcommon/spl/spl.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)common/spl/spl.c +0
-0@@ -36,6 +36,10 @@DECLARE_GLOBAL_DATA_PTR ;
Quoted 7 lines
common/spl/spl.c line 41
Quoted 3 lines
common/spl/spl.c +3
-0+#ifndef CONFIG_SYS_MONITOR_LEN +#define CONFIG_SYS_MONITOR_LEN (200 * 1024) +#endif The u-boot size on hawkboard is a bit more than this. I will send a patch to update hawkboard's config file. Can you include it in your patch series.
Yes, but do we really need it? On am1808evm I can just write the u-boot.ais file which includes u-boot.img and the header is read and used. Thanks!
Signature · 1 line
Tom
PATCH v4 17/20 ARM: SPL: Convert davinci to CONFIG_SPL_FRAMEWORK
In reply to Tom Rini- Convert the non-relocation part of board_init_f to spl_board_init, turn on CONFIG_SPL_BOARD_INIT in the configs.
- Remove duplicated code.
- Add spl_boot_device() that returns the statically chosen boot device.
---
Changes in v2:
- Add CONFIG_SYS_SPL_MALLOC_START / SIZE defines from Christian Riesch
- Add arch/arm/cpu/arm926ejs/davinci/config.mk to build u-boot.ais
Changes in v3:
CONFIG_SPL_FRAMEWORK
perform early init. Fixes the cannot reset problem.
- Make u-boot.ais use u-boot.img not u-boot.bin, now that it uses
- Make use of board_init_f being a weak function now so that we can
Changes in v4:
- Adapt davinci to new board_init_f requirements
Makefile | 4 +- arch/arm/cpu/arm926ejs/davinci/Makefile | 2 +- arch/arm/cpu/arm926ejs/davinci/config.mk | 16 ++++++++ arch/arm/cpu/arm926ejs/davinci/spl.c | 60 ++++++++++++++---------------- arch/arm/cpu/arm926ejs/start.S | 20 +--------- arch/arm/include/asm/arch-davinci/spl.h | 28 ++++++++++++++ include/configs/cam_enc_4xx.h | 2 + include/configs/da850evm.h | 5 +++ include/configs/hawkboard.h | 2 + 9 files changed, 85 insertions(+), 54 deletions(-) create mode 100644 arch/arm/cpu/arm926ejs/davinci/config.mk create mode 100644 arch/arm/include/asm/arch-davinci/spl.h
Makefile +2 -2
@@ -441,7 +441,7 @@ $(obj)u-boot.ubl: $(obj)spl/u-boot-spl.bin $(obj)u-boot.bin rm $(obj)u-boot-ubl.bin rm $(obj)spl/u-boot-spl-pad.bin -$(obj)u-boot.ais: $(obj)spl/u-boot-spl.bin $(obj)u-boot.bin +$(obj)u-boot.ais: $(obj)spl/u-boot-spl.bin $(obj)u-boot.img $(obj)tools/mkimage -s -n /dev/null -T aisimage \ -e $(CONFIG_SPL_TEXT_BASE) \ -d $(obj)spl/u-boot-spl.bin \
@@ -449,7 +449,7 @@ $(obj)u-boot.ais: $(obj)spl/u-boot-spl.bin $(obj)u-boot.bin $(OBJCOPY) ${OBJCFLAGS} -I binary \ --pad-to=$(CONFIG_SPL_MAX_SIZE) -O binary \ $(obj)spl/u-boot-spl.ais $(obj)spl/u-boot-spl-pad.ais - cat $(obj)spl/u-boot-spl-pad.ais $(obj)u-boot.bin > \ + cat $(obj)spl/u-boot-spl-pad.ais $(obj)u-boot.img > \ $(obj)u-boot.ais rm $(obj)spl/u-boot-spl{,-pad}.ais
arch/arm/cpu/arm926ejs/davinci/Makefile +1 -1
@@ -37,7 +37,7 @@ COBJS-$(CONFIG_SOC_DA850) += da850_pinmux.o COBJS-$(CONFIG_DRIVER_TI_EMAC) += lxt972.o dp83848.o et1011c.o ksz8873.o ifdef CONFIG_SPL_BUILD -COBJS-y += spl.o +COBJS-$(CONFIG_SPL_FRAMEWORK) += spl.o COBJS-$(CONFIG_SOC_DM365) += dm365_lowlevel.o COBJS-$(CONFIG_SOC_DA8XX) += da850_lowlevel.o endif
arch/arm/cpu/arm926ejs/davinci/config.mk new file +16 -0
@@ -0,0 +1,16 @@ +# +# Copyright (C) 2012, Texas Instruments, Incorporated - http://www.ti.com/ +# +# 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 "as is" WITHOUT ANY WARRANTY of any +# kind, whether express or implied; without even the implied warranty +# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +ifndef CONFIG_SPL_BUILD +ALL-$(CONFIG_SPL_FRAMEWORK) += $(obj)u-boot.ais +endif
arch/arm/cpu/arm926ejs/davinci/spl.c +27 -33
94 lines not on this page · raw message
arch/arm/cpu/arm926ejs/start.S +2 -18
@@ -215,6 +215,7 @@ call_board_init_f: /*------------------------------------------------------------------------------*/ +#ifndef CONFIG_SPL_BUILD /* * void relocate_code (addr_sp, gd, addr_moni) *
@@ -246,7 +247,6 @@ copy_loop: cmp r0, r2 /* until source end address [r2] */ blo copy_loop -#ifndef CONFIG_SPL_BUILD /* * fix .rel.dyn relocations */
@@ -285,20 +285,13 @@ fixnext: add r2, r2, #8 /* each rel.dyn entry is 8 bytes */ cmp r2, r3 blo fixloop -#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... */
@@ -308,22 +301,13 @@ clbss_l:cmp r0, r1 /* clear loop... */ b clbss_l clbss_e: -#ifndef CONFIG_SPL_BUILD bl coloured_LED_init bl red_led_on -#endif /* * 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 - -_nand_boot_ofs: - .word nand_boot -#else ldr r0, _board_init_r_ofs ldr r1, _TEXT_BASE add lr, r0, r1
@@ -336,7 +320,6 @@ _nand_boot_ofs: _board_init_r_ofs: .word board_init_r - _start -#endif _rel_dyn_start_ofs: .word __rel_dyn_start - _start
@@ -344,6 +327,7 @@ _rel_dyn_end_ofs: .word __rel_dyn_end - _start _dynsym_start_ofs: .word __dynsym_start - _start +#endif /* *************************************************************************
arch/arm/include/asm/arch-davinci/spl.h new file +28 -0
@@ -0,0 +1,28 @@ +/* +* (C) Copyright 2012 +* Texas Instruments, <www.ti.com> +* +* 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 +*/ +#ifndef _ASM_ARCH_SPL_H_ +#define _ASM_SPL_H_ + +#define BOOT_DEVICE_NAND 1 +#define BOOT_DEVICE_SPI 2 +#endif
include/configs/cam_enc_4xx.h +2 -0
@@ -217,6 +217,8 @@/* Defines for SPL */ #define CONFIG_SPL +#define CONFIG_SPL_FRAMEWORK +#define CONFIG_SPL_BOARD_INIT #define CONFIG_SPL_LIBGENERIC_SUPPORT #define CONFIG_SPL_NAND_SUPPORT #define CONFIG_SPL_NAND_SIMPLE
include/configs/da850evm.h +5 -0
@@ -313,6 +313,11 @@/* defines for SPL */ #define CONFIG_SPL +#define CONFIG_SPL_FRAMEWORK +#define CONFIG_SPL_BOARD_INIT +#define CONFIG_SYS_SPL_MALLOC_START (CONFIG_SYS_TEXT_BASE - \ + CONFIG_SYS_MALLOC_LEN) +#define CONFIG_SYS_SPL_MALLOC_SIZE CONFIG_SYS_MALLOC_LEN#define CONFIG_SPL_SPI_SUPPORT #define CONFIG_SPL_SPI_FLASH_SUPPORT #define CONFIG_SPL_SPI_LOAD
include/configs/hawkboard.h +2 -0
@@ -59,6 +59,8 @@/* Spl */ #define CONFIG_SPL +#define CONFIG_SPL_FRAMEWORK +#define CONFIG_SPL_BOARD_INIT #define CONFIG_SPL_NAND_SUPPORT #define CONFIG_SPL_NAND_SIMPLE #define CONFIG_SPL_NAND_LOAD
Signature · 1 line
1.7.9.5
PATCH v4 18/20 da850: Add README.da850
In reply to Tom RiniThis file documents when to build for da850evm and when to build for da850_am18xxevm. It also documents how to write the u-boot.ais file to persistent storage (such as SPI), in some cases as well as how to write a recovery image.
---
Changes in v2:
- Add README.da850_am18xxevm
Changes in v3:
- Fix thinko, Nand -> SPI (spotted by Prabhakar Lad)
- Rename to README.da850, add more direct recovery method (Christian Riesch)
Changes in v4:
- Further re-word README.da850 based on feedback from Christian Riesch
board/davinci/da8xxevm/README.da850 | 68 +++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 board/davinci/da8xxevm/README.da850
board/davinci/da8xxevm/README.da850 new file +68 -0
@@ -0,0 +1,68 @@ +Summary +======= +The README is for the boot procedure used for various DA850 (or compatible +parts such as the AM1808) based boards. + +In the context of U-Boot, the board is booted in three stages. The initial +bootloader which executes upon reset is the ROM Boot Loader (RBL) and sits +in the internal ROM. The RBL initializes the internal memory and then +depending on the exact board and pin configurations will initialize another +controller (such as SPI or NAND) to continue the boot process by loading +the secondary program loader (SPL). The SPL will initialize the system +further (some clocks, SDRAM) and then load the full u-boot from a +predefined location in persistent storage to DDR and jumps to the u-boot +entry point. + +AIS is an image format defined by TI for the images that are to be loaded +to memory by the RBL. The image is divided into a series of sections and +the image's entry point is specified. Each section comes with meta data +like the target address the section is to be copied to and the size of the +section, which is used by the RBL to load the image. At the end of the +image the RBL jumps to the image entry point. The AIS format allows for +other things such as programming the clocks and SDRAM if the header is +programmed for it. We do not take advantage of this and instead use SPL as +it allows for additional flexibility (run-time detect of board revision, +loading the next image from a different media, etc). + + +Compilation +=========== +The exact build target you need will depend on the board you have. For +Logic PD boards, or other boards which store the ethernet MAC address at +the end of SPI flash, run 'make da850evm'. For boards which store the +ethernet MAC address in the i2c EEPROM located at 0x50, run +'make da850_am18xxevm'. Once this build completes you will have a +u-boot.ais file that needs to be written to the correct persistent +storage. + + +Flashing the images to SPI +========================== +The AIS image can be written to SPI flash using the following commands. +Assuming that the network is configured and enabled and the u-boot.ais file +is tftp'able. + +U-Boot > sf probe 0 +U-Boot > sf erase 0 +320000 +U-Boot > tftp u-boot.ais +U-Boot > sf write c0700000 0 $filesize + + +Recovery +======== + +In the case of a "bricked" board, you need to use the TI tools found +here[1] to write the u-boot.ais file. An example of recovering to the SPI +flash of an AM1808 would be: + +$ mono sfh_OMAP-L138.exe -targetType AM1808 -p /dev/ttyUSB0 \ + -flash_noubl /path/to/u-boot.ais + +For other target types and flash locations: + +$ mono sfh_OMAP-L138.exe -h + +Links +===== +[1] + http://processors.wiki.ti.com/index.php/Serial_Boot_and_Flash_Loading_Utility_for_OMAP-L137
Signature · 1 line
1.7.9.5
PATCH v4 19/20 SPL: NAND: Enhance drivers/mtd/nand/nand_spl_simple.c
In reply to Tom RiniTakes the load function from arch/arm/cpu/armv7/omap-common/spl_nand.c instead. This will allow for easier integration of SPL-boots-Linux code on other arches.
---
Changes in v4:
- Leave nand_spl_load.c alone, move the new load into nand_spl_simple.c
arch/arm/cpu/arm926ejs/davinci/spl.c | 2 +- arch/arm/cpu/armv7/omap-common/Makefile | 6 -- arch/arm/cpu/armv7/omap-common/spl_nand.c | 102 ----------------------------- drivers/mtd/nand/nand_spl_simple.c | 76 +++++++++++++++++++++ include/configs/cam_enc_4xx.h | 1 - include/configs/hawkboard.h | 1 - 6 files changed, 77 insertions(+), 111 deletions(-) delete mode 100644 arch/arm/cpu/armv7/omap-common/spl_nand.c
arch/arm/cpu/arm926ejs/davinci/spl.c +1 -1
@@ -79,7 +79,7 @@ void spl_board_init(void)u32 spl_boot_device (void ) { -#ifdef CONFIG_SPL_NAND_LOAD +#ifdef CONFIG_SPL_NAND_SIMPLE return BOOT_DEVICE_NAND ;#elif defined(CONFIG_SPL_SPI_LOAD )return BOOT_DEVICE_SPI ;
arch/arm/cpu/armv7/omap-common/Makefile +0 -6
@@ -45,12 +45,6 @@ COBJS += boot-common.o SOBJS += lowlevel_init.o endif -ifdef CONFIG_SPL_BUILD -ifdef CONFIG_SPL_NAND_SUPPORT -COBJS += spl_nand.o -endif -endif - ifndef CONFIG_SPL_BUILD ifneq ($(CONFIG_OMAP44XX)$(CONFIG_OMAP54XX),) COBJS += mem-common.o
arch/arm/cpu/armv7/omap-common/spl_nand.c deleted +0 -102
102 lines not on this page · raw message
drivers/mtd/nand/nand_spl_simple.c +76 -0
91 lines not on this page · raw message
include/configs/cam_enc_4xx.h +0 -1
@@ -222,7 +222,6 @@#define CONFIG_SPL_LIBGENERIC_SUPPORT #define CONFIG_SPL_NAND_SUPPORT #define CONFIG_SPL_NAND_SIMPLE -#define CONFIG_SPL_NAND_LOAD #define CONFIG_SYS_NAND_HW_ECC_OOBFIRST #define CONFIG_SPL_SERIAL_SUPPORT #define CONFIG_SPL_POST_MEM_SUPPORT
include/configs/hawkboard.h +0 -1
@@ -63,7 +63,6 @@#define CONFIG_SPL_BOARD_INIT #define CONFIG_SPL_NAND_SUPPORT #define CONFIG_SPL_NAND_SIMPLE -#define CONFIG_SPL_NAND_LOAD #define CONFIG_SPL_LIBGENERIC_SUPPORT /* for udelay and __div64_32 for NAND */ #define CONFIG_SPL_SERIAL_SUPPORT #define CONFIG_SPL_LDSCRIPT "board/$(BOARDDIR)/u-boot-spl-hawk.lds"
Signature · 1 line
1.7.9.5
PATCH v4 19/20 SPL: NAND: Enhance drivers/mtd/nand/nand_spl_simple.c
Quoted 8 lines · Tom Rini
Takes the load function from
arch/arm/cpu/armv7/omap-common/spl_nand.cinstead. This will allow for easier integration of SPL-boots-Linux code on other arches.Signed-off-by Tom Rini <[email protected]>---
Changes in v4:
- Leavenand_spl_load.calone, move the new load intonand_spl_simple.c
[snip]
Quoted 61 lines
drivers/mtd/nand/nand_spl_simple.c +61
-0+void spl_nand_load_image (void ) +{ +struct image_header *header; + int *src __attribute__((unused)); + int *dst __attribute__((unused)); + +nand_init (); + +/* use CONFIG_SYS_TEXT_BASE as temporary storage area */ + header = (struct image_header *)(CONFIG_SYS_TEXT_BASE ); +#ifdef CONFIG_SPL_OS_BOOT +if (!spl_start_uboot ()) { +/* +* load parameter image +* load to temp position since nand_spl_load_image reads +* a whole block which is typically larger than +* CONFIG_CMD_SPL_WRITE_SIZE therefore may overwrite +* following sections like BSS +*/ +nand_spl_load_image (CONFIG_CMD_SPL_NAND_OFS , +CONFIG_CMD_SPL_WRITE_SIZE , + (void *)CONFIG_SYS_TEXT_BASE ); +/* copy to destintion */ +for (dst = (int *)CONFIG_SYS_SPL_ARGS_ADDR , + src = (int *)CONFIG_SYS_TEXT_BASE ; + src < (int *)(CONFIG_SYS_TEXT_BASE + +CONFIG_CMD_SPL_WRITE_SIZE ); + src++, dst++) { +writel (readl (src), dst); + } + +/* load linux */ +nand_spl_load_image (CONFIG_SYS_NAND_SPL_KERNEL_OFFS , +CONFIG_SYS_NAND_PAGE_SIZE , (void *)header); +spl_parse_image_header (header); +if (header->ih_os ==IH_OS_LINUX ) { +/* happy - was a linux */ +nand_spl_load_image (CONFIG_SYS_NAND_SPL_KERNEL_OFFS , + spl_image.size, (void *)spl_image.load_addr); +nand_deselect (); +return ; + }else { +puts ("The Expected Linux image was not " +"found. Please check your NAND " +"configuration.\n" ); +puts ("Trying to start u-boot now...\n" ); + } + } +#endif +#ifdef CONFIG_NAND_ENV_DST +nand_spl_load_image (CONFIG_ENV_OFFSET , +CONFIG_SYS_NAND_PAGE_SIZE , (void *)header); +spl_parse_image_header (header); +nand_spl_load_image (CONFIG_ENV_OFFSET , spl_image.size, + (void *)spl_image.load_addr); +#ifdef CONFIG_ENV_OFFSET_REDUND +nand_spl_load_image (CONFIG_ENV_OFFSET_REDUND , +CONFIG_SYS_NAND_PAGE_SIZE , (void *)header); +spl_parse_image_header (header); +nand_spl_load_image (CONFIG_ENV_OFFSET_REDUND , spl_image.size, + (void *)spl_image.load_addr);
drivers/mtd/nand/nand_spl_simple.c void nand_deselect(void) · line 359
Quoted 10 lines
drivers/mtd/nand/nand_spl_simple.c +10
-0+#endif +#endif +/* Load u-boot */ +nand_spl_load_image (CONFIG_SYS_NAND_U_BOOT_OFFS , +CONFIG_SYS_NAND_PAGE_SIZE , (void *)header); +spl_parse_image_header (header); +nand_spl_load_image (CONFIG_SYS_NAND_U_BOOT_OFFS , + spl_image.size, (void *)spl_image.load_addr); +nand_deselect (); +}
Will this refuse to link if spl_parse_image_header is not present, or will gc-sections remove it before the error is given? Does this function leave any anonymous data that isn't cleaned up by gc-sections? Again, this file must not grow for users that don't need the new features.
What is the benefit of putting this in nand_spl_simple.c versus another file? What if someone wants to use this with a different NAND boot implementation?
-Scott
PATCH v4 19/20 SPL: NAND: Enhance drivers/mtd/nand/nand_spl_simple.c
Quoted 78 lines · Scott Wood
Quoted 8 lines · Tom Rini
Takes the load function from
arch/arm/cpu/armv7/omap-common/spl_nand.cinstead. This will allow for easier integration of SPL-boots-Linux code on other arches.Signed-off-by Tom Rini <[email protected]>---
Changes in v4:
- Leavenand_spl_load.calone, move the new load intonand_spl_simple.c[snip]
Quoted 68 lines
drivers/mtd/nand/nand_spl_simple.c +68
-0+void spl_nand_load_image (void ) +{ +struct image_header *header; + int *src __attribute__((unused)); + int *dst __attribute__((unused)); + +nand_init (); + +/* use CONFIG_SYS_TEXT_BASE as temporary storage area */ + header = (struct image_header *)(CONFIG_SYS_TEXT_BASE ); +#ifdef CONFIG_SPL_OS_BOOT +if (!spl_start_uboot ()) { +/* +* load parameter image +* load to temp position since nand_spl_load_image reads +* a whole block which is typically larger than +* CONFIG_CMD_SPL_WRITE_SIZE therefore may overwrite +* following sections like BSS +*/ +nand_spl_load_image (CONFIG_CMD_SPL_NAND_OFS , +CONFIG_CMD_SPL_WRITE_SIZE , + (void *)CONFIG_SYS_TEXT_BASE ); +/* copy to destintion */ +for (dst = (int *)CONFIG_SYS_SPL_ARGS_ADDR , + src = (int *)CONFIG_SYS_TEXT_BASE ; + src < (int *)(CONFIG_SYS_TEXT_BASE + +CONFIG_CMD_SPL_WRITE_SIZE ); + src++, dst++) { +writel (readl (src), dst); + } + +/* load linux */ +nand_spl_load_image (CONFIG_SYS_NAND_SPL_KERNEL_OFFS , +CONFIG_SYS_NAND_PAGE_SIZE , (void *)header); +spl_parse_image_header (header); +if (header->ih_os ==IH_OS_LINUX ) { +/* happy - was a linux */ +nand_spl_load_image (CONFIG_SYS_NAND_SPL_KERNEL_OFFS , + spl_image.size, (void *)spl_image.load_addr); +nand_deselect (); +return ; + }else { +puts ("The Expected Linux image was not " +"found. Please check your NAND " +"configuration.\n" ); +puts ("Trying to start u-boot now...\n" ); + } + } +#endif +#ifdef CONFIG_NAND_ENV_DST +nand_spl_load_image (CONFIG_ENV_OFFSET , +CONFIG_SYS_NAND_PAGE_SIZE , (void *)header); +spl_parse_image_header (header); +nand_spl_load_image (CONFIG_ENV_OFFSET , spl_image.size, + (void *)spl_image.load_addr); +#ifdef CONFIG_ENV_OFFSET_REDUND +nand_spl_load_image (CONFIG_ENV_OFFSET_REDUND , +CONFIG_SYS_NAND_PAGE_SIZE , (void *)header); +spl_parse_image_header (header); +nand_spl_load_image (CONFIG_ENV_OFFSET_REDUND , spl_image.size, + (void *)spl_image.load_addr); +#endif +#endif +/* Load u-boot */ +nand_spl_load_image (CONFIG_SYS_NAND_U_BOOT_OFFS , +CONFIG_SYS_NAND_PAGE_SIZE , (void *)header); +spl_parse_image_header (header); + nand_spl_load_image(CONFIG_SYS_NAND_U_BOOT_OFFS,
Quoted 8 lines
drivers/mtd/nand/nand_spl_simple.c void nand_deselect(void) · line 335
Quoted 3 lines
drivers/mtd/nand/nand_spl_simple.c +3
-0+ spl_image.size, (void *)spl_image.load_addr); +nand_deselect (); +}Will this refuse to link if
spl_parse_image_headeris not present, or will gc-sections remove it before the error is given? Does this function leave any anonymous data that isn't cleaned up by gc-sections? Again, this file must not grow for users that don't need the new features.
Yes, spl_nand_load_image will be garbage collected and not link-error if not called. But note that all users of this file have been converted to CONFIG_SPL_FRAMEWORK and would be using this function.
Quoted 3 lines
What is the benefit of putting this in
nand_spl_simple.cversus another file? What if someone wants to use this with a different NAND boot implementation?
I would start by questioning the need of a 3rd SPL framework. We need to be able to support the 4KB case, and we do (by not touching anything). We need to be able to support the 16KB case (cam_4xx_enc, others) and we do in CONFIG_SPL_FRAMEWORK. We also fit in the 8KB case (hawkboard) with CONFIG_SPL_FRAMEWORK. And of course, we fit in the "lots" of space and big feature case.
Signature · 1 line
Tom
PATCH v4 19/20 SPL: NAND: Enhance drivers/mtd/nand/nand_spl_simple.c
Quoted 88 lines · Tom Rini
Quoted 78 lines · Scott Wood
Quoted 8 lines · Tom Rini
Takes the load function from
arch/arm/cpu/armv7/omap-common/spl_nand.cinstead. This will allow for easier integration of SPL-boots-Linux code on other arches.Signed-off-by Tom Rini <[email protected]>---
Changes in v4:
- Leavenand_spl_load.calone, move the new load intonand_spl_simple.c[snip]
Quoted 68 lines
drivers/mtd/nand/nand_spl_simple.c +68
-0+void spl_nand_load_image (void ) +{ +struct image_header *header; + int *src __attribute__((unused)); + int *dst __attribute__((unused)); + +nand_init (); + +/* use CONFIG_SYS_TEXT_BASE as temporary storage area */ + header = (struct image_header *)(CONFIG_SYS_TEXT_BASE ); +#ifdef CONFIG_SPL_OS_BOOT +if (!spl_start_uboot ()) { +/* +* load parameter image +* load to temp position since nand_spl_load_image reads +* a whole block which is typically larger than +* CONFIG_CMD_SPL_WRITE_SIZE therefore may overwrite +* following sections like BSS +*/ +nand_spl_load_image (CONFIG_CMD_SPL_NAND_OFS , +CONFIG_CMD_SPL_WRITE_SIZE , + (void *)CONFIG_SYS_TEXT_BASE ); +/* copy to destintion */ +for (dst = (int *)CONFIG_SYS_SPL_ARGS_ADDR , + src = (int *)CONFIG_SYS_TEXT_BASE ; + src < (int *)(CONFIG_SYS_TEXT_BASE + +CONFIG_CMD_SPL_WRITE_SIZE ); + src++, dst++) { +writel (readl (src), dst); + } + +/* load linux */ +nand_spl_load_image (CONFIG_SYS_NAND_SPL_KERNEL_OFFS , +CONFIG_SYS_NAND_PAGE_SIZE , (void *)header); +spl_parse_image_header (header); +if (header->ih_os ==IH_OS_LINUX ) { +/* happy - was a linux */ +nand_spl_load_image (CONFIG_SYS_NAND_SPL_KERNEL_OFFS , + spl_image.size, (void *)spl_image.load_addr); +nand_deselect (); +return ; + }else { +puts ("The Expected Linux image was not " +"found. Please check your NAND " +"configuration.\n" ); +puts ("Trying to start u-boot now...\n" ); + } + } +#endif +#ifdef CONFIG_NAND_ENV_DST +nand_spl_load_image (CONFIG_ENV_OFFSET , +CONFIG_SYS_NAND_PAGE_SIZE , (void *)header); +spl_parse_image_header (header); +nand_spl_load_image (CONFIG_ENV_OFFSET , spl_image.size, + (void *)spl_image.load_addr); +#ifdef CONFIG_ENV_OFFSET_REDUND +nand_spl_load_image (CONFIG_ENV_OFFSET_REDUND , +CONFIG_SYS_NAND_PAGE_SIZE , (void *)header); +spl_parse_image_header (header); +nand_spl_load_image (CONFIG_ENV_OFFSET_REDUND , spl_image.size, + (void *)spl_image.load_addr); +#endif +#endif +/* Load u-boot */ +nand_spl_load_image (CONFIG_SYS_NAND_U_BOOT_OFFS , +CONFIG_SYS_NAND_PAGE_SIZE , (void *)header); +spl_parse_image_header (header); + nand_spl_load_image(CONFIG_SYS_NAND_U_BOOT_OFFS,Quoted 8 lines
drivers/mtd/nand/nand_spl_simple.c void nand_deselect(void) · line 335
Quoted 3 lines
drivers/mtd/nand/nand_spl_simple.c +3
-0+ spl_image.size, (void *)spl_image.load_addr); +nand_deselect (); +}Will this refuse to link if
spl_parse_image_headeris not present, or will gc-sections remove it before the error is given? Does this function leave any anonymous data that isn't cleaned up by gc-sections? Again, this file must not grow for users that don't need the new features.
Quoted 3 lines
Yes,
spl_nand_load_imagewill be garbage collected and not link-error if not called. But note that all users of this file have been converted toCONFIG_SPL_FRAMEWORKand would be using this function.
There are still a lot of nand_spl targets that have not yet been converted, some of which will be future users of this file (such as ppc 4xx). This file is a replacement for nand_spl/nand_boot.c and will be used by the same SPLs.
Quoted 5 lines
Quoted 3 lines
What is the benefit of putting this in
nand_spl_simple.cversus another file? What if someone wants to use this with a different NAND boot implementation?I would start by questioning the need of a 3rd SPL framework.
The "simple" driver does not work for all hardware. This is why we have nand_spl/nand_boot_fsl_elbc.c and others in addition to nand_spl/nand_boot.c. It's not a "3rd SPL framework", just a different NAND implementation.
-Scott
PATCH v4 19/20 SPL: NAND: Enhance drivers/mtd/nand/nand_spl_simple.c
Quoted 102 lines · Scott Wood
Quoted 88 lines · Tom Rini
Quoted 78 lines · Scott Wood
Quoted 8 lines · Tom Rini
Takes the load function from
arch/arm/cpu/armv7/omap-common/spl_nand.cinstead. This will allow for easier integration of SPL-boots-Linux code on other arches.Signed-off-by Tom Rini <[email protected]>---
Changes in v4:
- Leavenand_spl_load.calone, move the new load intonand_spl_simple.c[snip]
Quoted 68 lines
drivers/mtd/nand/nand_spl_simple.c +68
-0+void spl_nand_load_image (void ) +{ +struct image_header *header; + int *src __attribute__((unused)); + int *dst __attribute__((unused)); + +nand_init (); + +/* use CONFIG_SYS_TEXT_BASE as temporary storage area */ + header = (struct image_header *)(CONFIG_SYS_TEXT_BASE ); +#ifdef CONFIG_SPL_OS_BOOT +if (!spl_start_uboot ()) { +/* +* load parameter image +* load to temp position since nand_spl_load_image reads +* a whole block which is typically larger than +* CONFIG_CMD_SPL_WRITE_SIZE therefore may overwrite +* following sections like BSS +*/ +nand_spl_load_image (CONFIG_CMD_SPL_NAND_OFS , +CONFIG_CMD_SPL_WRITE_SIZE , + (void *)CONFIG_SYS_TEXT_BASE ); +/* copy to destintion */ +for (dst = (int *)CONFIG_SYS_SPL_ARGS_ADDR , + src = (int *)CONFIG_SYS_TEXT_BASE ; + src < (int *)(CONFIG_SYS_TEXT_BASE + +CONFIG_CMD_SPL_WRITE_SIZE ); + src++, dst++) { +writel (readl (src), dst); + } + +/* load linux */ +nand_spl_load_image (CONFIG_SYS_NAND_SPL_KERNEL_OFFS , +CONFIG_SYS_NAND_PAGE_SIZE , (void *)header); +spl_parse_image_header (header); +if (header->ih_os ==IH_OS_LINUX ) { +/* happy - was a linux */ +nand_spl_load_image (CONFIG_SYS_NAND_SPL_KERNEL_OFFS , + spl_image.size, (void *)spl_image.load_addr); +nand_deselect (); +return ; + }else { +puts ("The Expected Linux image was not " +"found. Please check your NAND " +"configuration.\n" ); +puts ("Trying to start u-boot now...\n" ); + } + } +#endif +#ifdef CONFIG_NAND_ENV_DST +nand_spl_load_image (CONFIG_ENV_OFFSET , +CONFIG_SYS_NAND_PAGE_SIZE , (void *)header); +spl_parse_image_header (header); +nand_spl_load_image (CONFIG_ENV_OFFSET , spl_image.size, + (void *)spl_image.load_addr); +#ifdef CONFIG_ENV_OFFSET_REDUND +nand_spl_load_image (CONFIG_ENV_OFFSET_REDUND , +CONFIG_SYS_NAND_PAGE_SIZE , (void *)header); +spl_parse_image_header (header); +nand_spl_load_image (CONFIG_ENV_OFFSET_REDUND , spl_image.size, + (void *)spl_image.load_addr); +#endif +#endif +/* Load u-boot */ +nand_spl_load_image (CONFIG_SYS_NAND_U_BOOT_OFFS , +CONFIG_SYS_NAND_PAGE_SIZE , (void *)header); +spl_parse_image_header (header); + nand_spl_load_image(CONFIG_SYS_NAND_U_BOOT_OFFS,Quoted 8 lines
drivers/mtd/nand/nand_spl_simple.c void nand_deselect(void) · line 335
Quoted 3 lines
drivers/mtd/nand/nand_spl_simple.c +3
-0+ spl_image.size, (void *)spl_image.load_addr); +nand_deselect (); +}Will this refuse to link if
spl_parse_image_headeris not present, or will gc-sections remove it before the error is given? Does this function leave any anonymous data that isn't cleaned up by gc-sections? Again, this file must not grow for users that don't need the new features.Quoted 3 lines
Yes,
spl_nand_load_imagewill be garbage collected and not link-error if not called. But note that all users of this file have been converted toCONFIG_SPL_FRAMEWORKand would be using this function.There are still a lot of
nand_spltargets that have not yet been converted, some of which will be future users of this file (such as ppc 4xx). This file is a replacement fornand_spl/nand_boot.cand will be used by the same SPLs.Quoted 4 lines
Quoted 3 lines
What is the benefit of putting this in
nand_spl_simple.cversus another file? What if someone wants to use this with a different NAND boot implementation?
Quoted 6 lines
Quoted 1 line
I would start by questioning the need of a 3rd SPL framework.
The "simple" driver does not work for all hardware. This is why we have
nand_spl/nand_boot_fsl_elbc.cand others in addition tonand_spl/nand_boot.c. It's not a "3rd SPL framework", just a different NAND implementation.
The question boils down to, what are your size constraints? I guess what I'm saying is, if it's <4kb, it's not using this file nor the framework. If we've got more than 4kb to work with, it's using the framework (with changes if needed, of course) and I guess we could move the function to common/spl/spl_nand.c and add drivers/mtd/nand/nand_spl_fsl_elbc.c and so on. Now that I've had more coffee, do I follow your suggestion right?
Signature · 1 line
Tom
PATCH v4 19/20 SPL: NAND: Enhance drivers/mtd/nand/nand_spl_simple.c
Quoted 9 lines · Tom Rini
Quoted 8 lines · Scott Wood
Quoted 6 lines · Tom Rini
Quoted 3 lines · Scott Wood
What is the benefit of putting this in
nand_spl_simple.cversus another file? What if someone wants to use this with a different NAND boot implementation?I would start by questioning the need of a 3rd SPL framework.
Quoted 8 lines
Quoted 4 lines
The "simple" driver does not work for all hardware. This is why we have
nand_spl/nand_boot_fsl_elbc.cand others in addition tonand_spl/nand_boot.c. It's not a "3rd SPL framework", just a different NAND implementation.The question boils down to, what are your size constraints? I guess what I'm saying is, if it's <4kb, it's not using this file nor the framework.
4K SPLs will use nand_spl_simple.c. It is pretty much a copy of nand_spl/nand_boot.c which 4K SPLs use, and Wolfgang is insisting that no new boards be added to nand_spl, so they must use the new SPL (even if there are no new 4xx boards, presumably such a stance by Wolfgang indicates a desire to see nand_spl go away entirely at some point).
Quoted 5 lines
If we've got more than 4kb to work with, it's using the framework (with changes if needed, of course) and I guess we could move the function to
common/spl/spl_nand.cand adddrivers/mtd/nand/nand_spl_fsl_elbc.cand so on. Now that I've had more coffee, do I follow your suggestion right?
I think so. eLBC is 4K-limited, but IFC is similar and can do an 8K SPL (though we currently don't), and who knows what controllers will come along in the future.
-Scott
PATCH v4 19/20 SPL: NAND: Enhance drivers/mtd/nand/nand_spl_simple.c
Quoted 31 lines · Scott Wood
Quoted 9 lines · Tom Rini
Quoted 8 lines · Scott Wood
Quoted 6 lines · Tom Rini
Quoted 3 lines · Scott Wood
What is the benefit of putting this in
nand_spl_simple.cversus another file? What if someone wants to use this with a different NAND boot implementation?I would start by questioning the need of a 3rd SPL framework.
Quoted 8 lines
Quoted 4 lines
The "simple" driver does not work for all hardware. This is why we have
nand_spl/nand_boot_fsl_elbc.cand others in addition tonand_spl/nand_boot.c. It's not a "3rd SPL framework", just a different NAND implementation.The question boils down to, what are your size constraints? I guess what I'm saying is, if it's <4kb, it's not using this file nor the framework.
4K SPLs will use
nand_spl_simple.c. It is pretty much a copy ofnand_spl/nand_boot.cwhich 4K SPLs use, and Wolfgang is insisting that no new boards be added tonand_spl, so they must use the new SPL (even if there are no new 4xx boards, presumably such a stance by Wolfgang indicates a desire to seenand_splgo away entirely at some point).Quoted 5 lines
If we've got more than 4kb to work with, it's using the framework (with changes if needed, of course) and I guess we could move the function to
common/spl/spl_nand.cand adddrivers/mtd/nand/nand_spl_fsl_elbc.cand so on. Now that I've had more coffee, do I follow your suggestion right?
Quoted 3 lines
I think so. eLBC is 4K-limited, but IFC is similar and can do an 8K SPL (though we currently don't), and who knows what controllers will come along in the future.
When do you plan to try and do the conversion? :) I kludged (but think it would still work) hawkboard to 887 bytes over 4kb and I see bamboo is 736 bytes under, leaving a 151 byte gap (in this very quick and somewhat silly SWAG). So maybe we can use this framework for 4KB systems.
And, I'll split things out for now so we can move past this.
Signature · 1 line
Tom
PATCH v4 19/20 SPL: NAND: Enhance drivers/mtd/nand/nand_spl_simple.c
Quoted 32 lines · Tom Rini
Quoted 31 lines · Scott Wood
Quoted 9 lines · Tom Rini
Quoted 8 lines · Scott Wood
Quoted 6 lines · Tom Rini
Quoted 3 lines · Scott Wood
What is the benefit of putting this in
nand_spl_simple.cversus another file? What if someone wants to use this with a different NAND boot implementation?I would start by questioning the need of a 3rd SPL framework.
Quoted 8 lines
Quoted 4 lines
The "simple" driver does not work for all hardware. This is why we have
nand_spl/nand_boot_fsl_elbc.cand others in addition tonand_spl/nand_boot.c. It's not a "3rd SPL framework", just a different NAND implementation.The question boils down to, what are your size constraints? I guess what I'm saying is, if it's <4kb, it's not using this file nor the framework.
4K SPLs will use
nand_spl_simple.c. It is pretty much a copy ofnand_spl/nand_boot.cwhich 4K SPLs use, and Wolfgang is insisting that no new boards be added tonand_spl, so they must use the new SPL (even if there are no new 4xx boards, presumably such a stance by Wolfgang indicates a desire to seenand_splgo away entirely at some point).Quoted 5 lines
If we've got more than 4kb to work with, it's using the framework (with changes if needed, of course) and I guess we could move the function to
common/spl/spl_nand.cand adddrivers/mtd/nand/nand_spl_fsl_elbc.cand so on. Now that I've had more coffee, do I follow your suggestion right?
Quoted 5 lines
Quoted 3 lines
I think so. eLBC is 4K-limited, but IFC is similar and can do an 8K SPL (though we currently don't), and who knows what controllers will come along in the future.
When do you plan to try and do the conversion? :)
I started a conversion of an eLBC board recently, but ran into some bugs that I couldn't squash by the end of the merge window -- at which point the timeslice expiration hit and its priority dropped.
I may be able to resume next week (this week is Linux Plumbers).
Quoted 3 lines
I kludged (but think it would still work) hawkboard to 887 bytes over 4kb and I see bamboo is 736 bytes under, leaving a 151 byte gap (in this very quick and somewhat
silly SWAG). So maybe we can use this framework for 4KB systems.
Perhaps for some of them. How much does the framework add?
Quoted 1 line
And, I'll split things out for now so we can move past this.
OK, thanks.
-Scott
PATCH v4 19/20 SPL: NAND: Enhance drivers/mtd/nand/nand_spl_simple.c
Quoted 43 lines · Scott Wood
Quoted 32 lines · Tom Rini
Quoted 31 lines · Scott Wood
Quoted 9 lines · Tom Rini
Quoted 8 lines · Scott Wood
Quoted 6 lines · Tom Rini
Quoted 3 lines · Scott Wood
What is the benefit of putting this in
nand_spl_simple.cversus another file? What if someone wants to use this with a different NAND boot implementation?I would start by questioning the need of a 3rd SPL framework.
Quoted 8 lines
Quoted 4 lines
The "simple" driver does not work for all hardware. This is why we have
nand_spl/nand_boot_fsl_elbc.cand others in addition tonand_spl/nand_boot.c. It's not a "3rd SPL framework", just a different NAND implementation.The question boils down to, what are your size constraints? I guess what I'm saying is, if it's <4kb, it's not using this file nor the framework.
4K SPLs will use
nand_spl_simple.c. It is pretty much a copy ofnand_spl/nand_boot.cwhich 4K SPLs use, and Wolfgang is insisting that no new boards be added tonand_spl, so they must use the new SPL (even if there are no new 4xx boards, presumably such a stance by Wolfgang indicates a desire to seenand_splgo away entirely at some point).Quoted 5 lines
If we've got more than 4kb to work with, it's using the framework (with changes if needed, of course) and I guess we could move the function to
common/spl/spl_nand.cand adddrivers/mtd/nand/nand_spl_fsl_elbc.cand so on. Now that I've had more coffee, do I follow your suggestion right?Quoted 5 lines
Quoted 3 lines
I think so. eLBC is 4K-limited, but IFC is similar and can do an 8K SPL (though we currently don't), and who knows what controllers will come along in the future.
When do you plan to try and do the conversion? :)
I started a conversion of an eLBC board recently, but ran into some bugs that I couldn't squash by the end of the merge window -- at which point the timeslice expiration hit and its priority dropped.
Quoted 7 lines
I may be able to resume next week (this week is Linux Plumbers).
Quoted 3 lines
I kludged (but think it would still work) hawkboard to 887 bytes over 4kb and I see bamboo is 736 bytes under, leaving a 151 byte gap (in this very quick and somewhat
silly SWAG). So maybe we can use this framework for 4KB systems.Perhaps for some of them. How much does the framework add?
For hawkboard (davinci and NAND) we grew by 894 bytes. Doing some re-organization of the code just now I've got that growth down to 766 bytes. Some of that reduction I had in the other quick swag I was doing however.
Signature · 1 line
Tom
PATCH v4 19/20 SPL: NAND: Enhance drivers/mtd/nand/nand_spl_simple.c
Quoted 50 lines · Tom Rini
Quoted 49 lines · Scott Wood
Quoted 32 lines · Tom Rini
Quoted 31 lines · Scott Wood
Quoted 9 lines · Tom Rini
Quoted 8 lines · Scott Wood
Quoted 6 lines · Tom Rini
Quoted 3 lines · Scott Wood
What is the benefit of putting this in
nand_spl_simple.cversus another file? What if someone wants to use this with a different NAND boot implementation?I would start by questioning the need of a 3rd SPL framework.
Quoted 8 lines
Quoted 4 lines
The "simple" driver does not work for all hardware. This is why we have
nand_spl/nand_boot_fsl_elbc.cand others in addition tonand_spl/nand_boot.c. It's not a "3rd SPL framework", just a different NAND implementation.The question boils down to, what are your size constraints? I guess what I'm saying is, if it's <4kb, it's not using this file nor the framework.
4K SPLs will use
nand_spl_simple.c. It is pretty much a copy ofnand_spl/nand_boot.cwhich 4K SPLs use, and Wolfgang is insisting that no new boards be added tonand_spl, so they must use the new SPL (even if there are no new 4xx boards, presumably such a stance by Wolfgang indicates a desire to seenand_splgo away entirely at some point).Quoted 5 lines
If we've got more than 4kb to work with, it's using the framework (with changes if needed, of course) and I guess we could move the function to
common/spl/spl_nand.cand adddrivers/mtd/nand/nand_spl_fsl_elbc.cand so on. Now that I've had more coffee, do I follow your suggestion right?Quoted 5 lines
Quoted 3 lines
I think so. eLBC is 4K-limited, but IFC is similar and can do an 8K SPL (though we currently don't), and who knows what controllers will come along in the future.
When do you plan to try and do the conversion? :)
I started a conversion of an eLBC board recently, but ran into some bugs that I couldn't squash by the end of the merge window -- at which point the timeslice expiration hit and its priority dropped.
I may be able to resume next week (this week is Linux Plumbers).
Quoted 3 lines
I kludged (but think it would still work) hawkboard to 887 bytes over 4kb and I see bamboo is 736 bytes under, leaving a 151 byte gap (in this very quick and somewhat
silly SWAG). So maybe we can use this framework for 4KB systems.
Quoted 6 lines
Quoted 1 line
Perhaps for some of them. How much does the framework add?
For hawkboard (davinci and NAND) we grew by 894 bytes. Doing some re-organization of the code just now I've got that growth down to 766 bytes. Some of that reduction I had in the other quick swag I was doing however.
Whack out a few more prints (enabled still for debug) and we're at 711 byte growth now. Will be part of v5.
Signature · 1 line
Tom
PATCH v4 20/20 SPL: SPI: Enhance spi_spl_load to match the other load functions
In reply to Tom Rini---
common/spl/spl.c | 4 ++-- drivers/mtd/spi/spi_spl_load.c | 23 ++++++++++++----------- include/spl.h | 2 +- 3 files changed, 15 insertions(+), 14 deletions(-)
common/spl/spl.c +2 -2
@@ -151,8 +151,8 @@ void board_init_r(gd_t *dummy1, ulong dummy2)#endif #ifdef CONFIG_SPL_SPI_SUPPORT case BOOT_DEVICE_SPI : -spi_boot (); -break ; +spl_spi_load_image (); +break ;#endif default :puts ("SPL: Un-supported Boot Device\n" );
drivers/mtd/spi/spi_spl_load.c +12 -11
@@ -24,16 +24,17 @@#include <common.h> #include <spi_flash.h> +#include <spl.h> /* * The main entry for SPI booting. It's necessary that SDRAM is already * configured and available since this code loads the main U-Boot image * from SPI into SDRAM and starts it from there. */ -void spi_boot (void ) +void spl_spi_load_image (void ) {struct spi_flash *flash; -void (*uboot)(void )__noreturn ; +struct image_header *header;/* * Load U-Boot image from SPI flash into RAM
@@ -42,17 +43,17 @@ void spi_boot(void) flash =spi_flash_probe (CONFIG_SPL_SPI_BUS ,CONFIG_SPL_SPI_CS ,CONFIG_SF_DEFAULT_SPEED ,SPI_MODE_3 );if (!flash) { -puts ("failed.\n" ); +puts ("SPI probe failed.\n" );hang (); } -spi_flash_read (flash,CONFIG_SYS_SPI_U_BOOT_OFFS , -CONFIG_SYS_SPI_U_BOOT_SIZE , - (void *)CONFIG_SYS_TEXT_BASE ); +/* use CONFIG_SYS_TEXT_BASE as temporary storage area */ + header = (struct image_header *)(CONFIG_SYS_TEXT_BASE ); -/* -* Jump to U-Boot image -*/ - uboot = (void *)CONFIG_SYS_TEXT_BASE ; - (*uboot)(); +/* Load u-boot, mkimage header is 64 bytes. */ +spi_flash_read (flash,CONFIG_SYS_SPI_U_BOOT_OFFS ,0x40 , + (void *) header); +spl_parse_image_header (header); +spi_flash_read (flash,CONFIG_SYS_SPI_U_BOOT_OFFS , + spl_image.size, (void *)spl_image.load_addr); }
include/spl.h +1 -1
@@ -64,7 +64,7 @@ void spl_mmc_load_image(void);void spl_ymodem_load_image (void );/* SPI SPL functions */ -void spi_boot (void ); +void spl_spi_load_image (void );#ifdef CONFIG_SPL_BOARD_INIT void spl_board_init (void );
Signature · 1 line
1.7.9.5
v4 cover ARM: SPL: Make more generic, merge DaVinci and OMAP
In reply to Tom RiniQuoted 15 lines · Tom Rini
Hey all,
The following patch series merges the davinci and omap-common SPL frameworks into a single framework,
CONFIG_SPL_FRAMEWORKalong with a few small cleanups to the code to make it a little smaller and more flexible. The end result is that davinci can now opt in on SPL-boots-Linux by just setting the right defines and other platforms would just need to adapt to this framework. In my testing, davinci gains between 300 and 700 bytes for this (not enabling the SPL OS feature) and omap4/5/etc lose just a little bit (from theprintf->putschanges). I've tested this onomap3_beagle(xM and classic) andomap4_panda. I don't have any davinci platforms that were previously using SPL so I can't boot-test those changes but since everyone setsCONFIG_SPL_MAX_SIZE, we're OK in that department.
Quoted 2 lines
To make this series easier to test I've placed it on
http://github.com/trini/u-boot WIP/spl-improvements
Tested the patch series on hawkboard with new spl image. Spl boots up the u-boot image fine. Nice work :)
-sughosh