: ARM: SPL: Make more generic, merge DaVinci and OMAP
Subsystems (5)
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 #ifndef CONFIG_SPL_BUILD in random places.
--
Tom
PATCH 1/17 spl_mmc: Make FAT checks / calls guarded with CONFIG_SPL_FAT_SUPPORT
--- 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 1/17 spl_mmc: Make FAT checks / calls guarded with CONFIG_SPL_FAT_SUPPORT
Quoted 28 lines · Tom Rini
Signed-off-by Tom Rini <[email protected]>--- arch/arm/cpu/armv7/omap-common/spl_mmc.c | 4 ++++ 1 file changed, 4 insertions(+)arch/arm/cpu/armv7/omap-common/spl_mmc.c +2
-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 ) {
arch/arm/cpu/armv7/omap-common/spl_mmc.c void spl_mmc_load_image(void) · line 152
Quoted 10 lines
arch/arm/cpu/armv7/omap-common/spl_mmc.c +2
-0debug ("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 ();
Right, this should be done !
Regards,
Stefano
Signature · 5 lines
===================================================================== DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de =====================================================================
PATCH 2/17 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 3/17 ARM: SPL: Move the omap SPL framework to arch/arm/lib
In reply to Tom RiniAdd a new flag, CONFIG_SPL_FRAMEWORK to opt into the arch/arm/lib SPL framework, enable on all of the previously using boards.
--- README | 5 + arch/arm/cpu/armv7/omap-common/Makefile | 13 -- arch/arm/cpu/armv7/omap-common/spl.c | 225 --------------------------- arch/arm/cpu/armv7/omap-common/spl_mmc.c | 154 ------------------ arch/arm/cpu/armv7/omap-common/spl_nand.c | 111 ------------- arch/arm/cpu/armv7/omap-common/spl_ymodem.c | 76 --------- arch/arm/lib/Makefile | 9 +- arch/arm/lib/spl.c | 225 +++++++++++++++++++++++++++ arch/arm/lib/spl_mmc.c | 154 ++++++++++++++++++ arch/arm/lib/spl_nand.c | 111 +++++++++++++ arch/arm/lib/spl_ymodem.c | 76 +++++++++ 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 + 23 files changed, 591 insertions(+), 580 deletions(-) delete mode 100644 arch/arm/cpu/armv7/omap-common/spl.c delete mode 100644 arch/arm/cpu/armv7/omap-common/spl_mmc.c delete mode 100644 arch/arm/cpu/armv7/omap-common/spl_nand.c delete mode 100644 arch/arm/cpu/armv7/omap-common/spl_ymodem.c create mode 100644 arch/arm/lib/spl.c create mode 100644 arch/arm/lib/spl_mmc.c create mode 100644 arch/arm/lib/spl_nand.c create mode 100644 arch/arm/lib/spl_ymodem.c
README +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 + For ARM, enable the SPL framework under arch/arm/lib, which + 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/omap-common/Makefile +0 -13
@@ -45,19 +45,6 @@ COBJS += boot-common.o 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 ifneq ($(CONFIG_OMAP44XX)$(CONFIG_OMAP54XX),) COBJS += mem-common.o
arch/arm/cpu/armv7/omap-common/spl.c deleted +0 -225
225 lines not on this page · raw message
arch/arm/cpu/armv7/omap-common/spl_mmc.c deleted +0 -154
154 lines not on this page · raw message
arch/arm/cpu/armv7/omap-common/spl_nand.c deleted +0 -111
111 lines not on this page · raw message
arch/arm/cpu/armv7/omap-common/spl_ymodem.c deleted +0 -76
76 lines not on this page · raw message
arch/arm/lib/Makefile +8 -1
@@ -26,7 +26,14 @@ include $(TOPDIR)/config.mk LIB = $(obj)lib$(ARCH).o LIBGCC = $(obj)libgcc.o -ifndef CONFIG_SPL_BUILD +ifdef CONFIG_SPL_BUILD +ifdef CONFIG_SPL_FRAMEWORK +COBJS-$(CONFIG_SPL_FRAMEWORK) += spl.o +COBJS-$(CONFIG_SPL_NAND_SUPPORT) += spl_nand.o +COBJS-$(CONFIG_SPL_MMC_SUPPORT) += spl_mmc.o +COBJS-$(CONFIG_SPL_YMODEM_SUPPORT) += spl_ymodem.o +endif +else GLSOBJS += _ashldi3.o GLSOBJS += _ashrdi3.o GLSOBJS += _divsi3.o
arch/arm/lib/spl.c new file +225 -0
225 lines not on this page · raw message
arch/arm/lib/spl_mmc.c new file +154 -0
154 lines not on this page · raw message
arch/arm/lib/spl_nand.c new file +111 -0
111 lines not on this page · raw message
arch/arm/lib/spl_ymodem.c new file +76 -0
76 lines not on this page · raw message
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_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_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/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_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_CONSOLE #define CONFIG_SPL_NAND_SIMPLE #define CONFIG_SPL_NAND_SOFTECC
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
Signature · 1 line
1.7.9.5
PATCH 3/17 ARM: SPL: Move the omap SPL framework to arch/arm/lib
Quoted 5 lines · Tom Rini
Add a new flag,
CONFIG_SPL_FRAMEWORKto opt into thearch/arm/libSPL framework, enable on all of the previously using boards.Signed-off-by Tom Rini <[email protected]>---
Hi Tom,
Quoted 24 lines
README | 5 + arch/arm/cpu/armv7/omap-common/Makefile | 13 -- arch/arm/cpu/armv7/omap-common/spl.c | 225 --------------------------- arch/arm/cpu/armv7/omap-common/spl_mmc.c | 154 ------------------ arch/arm/cpu/armv7/omap-common/spl_nand.c | 111 ------------- arch/arm/cpu/armv7/omap-common/spl_ymodem.c | 76 --------- arch/arm/lib/Makefile | 9 +- arch/arm/lib/spl.c | 225 +++++++++++++++++++++++++++ arch/arm/lib/spl_mmc.c | 154 ++++++++++++++++++ arch/arm/lib/spl_nand.c | 111 +++++++++++++ arch/arm/lib/spl_ymodem.c | 76 +++++++++ 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 + 23 files changed, 591 insertions(+), 580 deletions(-)
Quoted 9 lines
delete mode 100644 arch/arm/cpu/armv7/omap-common/spl.c delete mode 100644 arch/arm/cpu/armv7/omap-common/spl_mmc.c delete mode 100644 arch/arm/cpu/armv7/omap-common/spl_nand.c delete mode 100644 arch/arm/cpu/armv7/omap-common/spl_ymodem.c create mode 100644 arch/arm/lib/spl.c create mode 100644 arch/arm/lib/spl_mmc.c create mode 100644 arch/arm/lib/spl_nand.c create mode 100644 arch/arm/lib/spl_ymodem.c
In my attempt I moved files from arch/arm/cpu/armv7/omap-common/ to common. This is because to make it available to all SOCs, not only armv7. What do you think about ? I would like to add an example with an arm1136 (MX35).
Quoted 665 lines
arch/arm/cpu/armv7/omap-common/Makefile +0
-13@@ -45,19 +45,6 @@ COBJS += boot-common.o 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 ifneq ($(CONFIG_OMAP44XX)$(CONFIG_OMAP54XX),) COBJS += mem-common.oarch/arm/cpu/armv7/omap-common/spl.c deleted +0
-225@@ -1,225 +0,0 @@ -/* -* (C) Copyright 2010 -* Texas Instruments, <www.ti.com> -* -* Aneesh V <[email protected]> -* -* See file CREDITS for list of people who contributed to this -* project. -* -* This program is free software; you can redistribute it and/or -* modify it under the terms of the GNU General Public License as -* published by the Free Software Foundation; either version 2 of -* the License, or (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program; if not, write to the Free Software -* Foundation, Inc., 59 Temple Place, Suite 330, Boston, -* MA 02111-1307 USA -*/ -#include <common.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/omap_common.h> -#include <asm/arch/mmc_host_def.h> -#include <i2c.h> -#include <image.h> -#include <malloc.h> -#include <linux/compiler.h> - -DECLARE_GLOBAL_DATA_PTR ; - -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"))); -static bd_t bdata __attribute__ ((section(".data"))); - -inline void hang (void ) -{ -puts ("### ERROR ### Please RESET the board ###\n" ); -for (;;) - ; -} - -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. -* -* Please implement your own board specific funcion to do this. -* -* RETURN -* 0 to not start u-boot -* positive if u-boot should start -*/ -#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" ); -return 1 ; -} -#endif - -void spl_parse_image_header (const struct image_header *header) -{ -u32 header_size =sizeof (struct image_header ); - -if (__be32_to_cpu (header->ih_magic) ==IH_MAGIC ) { - spl_image.size =__be32_to_cpu (header->ih_size) + header_size; - spl_image.entry_point =__be32_to_cpu (header->ih_load); -/* Load including the header */ - spl_image.load_addr = spl_image.entry_point - header_size; - spl_image.os = header->ih_os; - spl_image.name = (const char *)&header->ih_name; -debug ("spl: payload image: %s load addr: 0x%x size: %d\n" , - 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" , - 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 ; - spl_image.load_addr =CONFIG_SYS_TEXT_BASE ; - spl_image.os =IH_OS_U_BOOT ; - spl_image.name ="U-Boot" ; - } -} - -/* -* 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 *); -image_entry_noargs_t image_entry = - (image_entry_noargs_t ) spl_image.entry_point; - -debug ("image entry point: 0x%X\n" , spl_image.entry_point); -/* Pass the saved boot_params from rom code */ -#if defined(CONFIG_VIRTIO ) || defined(CONFIG_ZEBU ) - image_entry = (image_entry_noargs_t )0x80100000 ; -#endif -u32 boot_params_ptr_addr = (u32)&boot_params_ptr; -image_entry ((u32 *)boot_params_ptr_addr); -} - -void board_init_r (gd_t *id,ulong dummy) -{ -u32 boot_device; -debug (">>spl:board_init_r()\n" ); - -mem_malloc_init (CONFIG_SYS_SPL_MALLOC_START , -CONFIG_SYS_SPL_MALLOC_SIZE ); - -#ifdef CONFIG_SPL_BOARD_INIT -spl_board_init (); -#endif - - boot_device =omap_boot_device (); -debug ("boot device - %d\n" , boot_device); -switch (boot_device) { -#ifdef CONFIG_SPL_MMC_SUPPORT -case BOOT_DEVICE_MMC1 : -case BOOT_DEVICE_MMC2 : -case BOOT_DEVICE_MMC2_2 : -spl_mmc_load_image (); -break ; -#endif -#ifdef CONFIG_SPL_NAND_SUPPORT -case BOOT_DEVICE_NAND : -spl_nand_load_image (); -break ; -#endif -#ifdef CONFIG_SPL_YMODEM_SUPPORT -case BOOT_DEVICE_UART : -spl_ymodem_load_image (); -break ; -#endif -default : -printf ("SPL: Un-supported Boot Device - %d!!!\n" , boot_device); -hang (); -break ; - } - -switch (spl_image.os) { -case IH_OS_U_BOOT : -debug ("Jumping to U-Boot\n" ); -jump_to_image_no_args (); -break ; -#ifdef CONFIG_SPL_OS_BOOT -case IH_OS_LINUX : -debug ("Jumping to Linux\n" ); -spl_board_prepare_for_linux (); -jump_to_image_linux ((void *)CONFIG_SYS_SPL_ARGS_ADDR ); -break ; -#endif -default : -puts ("Unsupported OS image.. Jumping nevertheless..\n" ); -jump_to_image_no_args (); - } -} - -/* 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 ; - gd->baudrate =CONFIG_BAUDRATE ; - -serial_init ();/* serial communications setup */ - - 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 ); -#ifdef CONFIG_SPL_DISPLAY_PRINT -spl_display_print (); -#endif -}arch/arm/cpu/armv7/omap-common/spl_mmc.c deleted +0
-154@@ -1,154 +0,0 @@ -/* -* (C) Copyright 2010 -* Texas Instruments, <www.ti.com> -* -* Aneesh V <[email protected]> -* -* See file CREDITS for list of people who contributed to this -* project. -* -* This program is free software; you can redistribute it and/or -* modify it under the terms of the GNU General Public License as -* published by the Free Software Foundation; either version 2 of -* the License, or (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program; if not, write to the Free Software -* Foundation, Inc., 59 Temple Place, Suite 330, Boston, -* MA 02111-1307 USA -*/ -#include <common.h> -#include <asm/u-boot.h> -#include <asm/utils.h> -#include <asm/arch/sys_proto.h> -#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 (omap_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; -const struct image_header *header; - - header = (struct image_header *)(CONFIG_SYS_TEXT_BASE - -sizeof (struct image_header )); - -/* read image header to find the image size & load address */ - err = mmc->block_dev.block_read (0 , -CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR ,1 , - (void *)header); - -if (err <=0 ) - goto end; - -spl_parse_image_header (header); - -/* convert size to sectors - round up */ - image_size_sectors = (spl_image.size +MMCSD_SECTOR_SIZE -1 ) / -MMCSD_SECTOR_SIZE ; - -/* Read the header too to avoid extra memcpy */ - err = mmc->block_dev.block_read (0 , -CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR , - image_size_sectors, (void *)spl_image.load_addr); - -end: -if (err <=0 ) { -printf ("spl: mmc blk read err - %d\n" , err); -hang (); - } -} - -#ifdef CONFIG_SPL_FAT_SUPPORT -static void mmc_load_image_fat (struct mmc *mmc) -{ -s32 err; -struct image_header *header; - - header = (struct image_header *)(CONFIG_SYS_TEXT_BASE - -sizeof (struct image_header )); - - err =fat_register_device (&mmc->block_dev, -CONFIG_SYS_MMC_SD_FAT_BOOT_PARTITION ); -if (err) { -printf ("spl: fat register err - %d\n" , err); -hang (); - } - - err =file_fat_read (CONFIG_SPL_FAT_LOAD_PAYLOAD_NAME , - (u8 *)header,sizeof (struct image_header )); -if (err <=0 ) - goto end; - -spl_parse_image_header (header); - - err =file_fat_read (CONFIG_SPL_FAT_LOAD_PAYLOAD_NAME , - (u8 *)spl_image.load_addr,0 ); - -end: -if (err <=0 ) { -printf ("spl: error reading image %s, err - %d\n" , -CONFIG_SPL_FAT_LOAD_PAYLOAD_NAME , err); -hang (); - } -} -#endif - -void spl_mmc_load_image (void ) -{ -struct mmc *mmc; -int err; -u32 boot_mode; - -mmc_initialize (gd->bd); -/* We register only one device. So, the dev id is always 0 */ - mmc =find_mmc_device (0 ); -if (!mmc) { -puts ("spl: mmc device not found!!\n" ); -hang (); - } - - err =mmc_init (mmc); -if (err) { -printf ("spl: mmc init failed: err - %d\n" , err); -hang (); - } - boot_mode =omap_boot_mode (); -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 (); - } -}arch/arm/cpu/armv7/omap-common/spl_nand.c deleted +0
-111@@ -1,111 +0,0 @@ -/* -* Copyright (C) 2011 -* Corscience GmbH & Co. KG - Simon Schwarz <[email protected]> -* -* See file CREDITS for list of people who contributed to this -* project. -* -* This program is free software; you can redistribute it and/or -* modify it under the terms of the GNU General Public License as -* published by the Free Software Foundation; either version 2 of -* the License, or (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program; if not, write to the Free Software -* Foundation, Inc., 59 Temple Place, Suite 330, Boston, -* MA 02111-1307 USA -*/ -#include <common.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 ) -{ -struct image_header *header; - int *src __attribute__((unused)); - int *dst __attribute__((unused)); - -switch (omap_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 (); - } - -/*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 { -printf ("The Expected Linux image was not" -"found. Please check your NAND" -"configuration.\n" ); -printf ("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 , - spl_image.size, (void *)spl_image.load_addr); -nand_deselect (); -}arch/arm/cpu/armv7/omap-common/spl_ymodem.c deleted +0
-76@@ -1,76 +0,0 @@ -/* -* (C) Copyright 2000-2004 -* Wolfgang Denk, DENX Software Engineering, wd at denx.de. -* -* (C) Copyright 2011 -* Texas Instruments, <www.ti.com> -* -* Matt Porter <[email protected]> -* -* See file CREDITS for list of people who contributed to this -* project. -* -* This program is free software; you can redistribute it and/or -* modify it under the terms of the GNU General Public License as -* published by the Free Software Foundation; either version 2 of -* the License, or (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program; if not, write to the Free Software -* Foundation, Inc., 59 Temple Place, Suite 330, Boston, -* MA 02111-1307 USA -*/ -#include <common.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 - -static int getcymodem (void ) { -if (tstc ()) -return (getc ()); -return -1 ; -} - -void spl_ymodem_load_image (void ) -{ -int size =0 ; -int err; -int res; -int ret; -connection_info_t info; -char buf[BUF_SIZE ]; -ulong store_addr = ~0 ; -ulong addr =0 ; - - info.mode = xyzModem_ymodem; - ret =xyzModem_stream_open (&info, &err); - -if (!ret) { -while ((res = -xyzModem_stream_read (buf,BUF_SIZE , &err)) >0 ) { -if (addr ==0 ) -spl_parse_image_header ((struct image_header *)buf); - store_addr = addr + spl_image.load_addr; - size += res; - addr += res; -memcpy ((char *)(store_addr), buf, res); - } - }else { -printf ("spl: ymodem err - %s\n" ,xyzModem_error (err)); -hang (); - } - -xyzModem_stream_close (&err); -xyzModem_stream_terminate (false, &getcymodem); - -printf ("Loaded %d bytes\n" , size); -}arch/arm/lib/Makefile +8
-1@@ -26,7 +26,14 @@ include $(TOPDIR)/config.mk LIB = $(obj)lib$(ARCH).o LIBGCC = $(obj)libgcc.o -ifndef CONFIG_SPL_BUILD +ifdef CONFIG_SPL_BUILD +ifdef CONFIG_SPL_FRAMEWORK +COBJS-$(CONFIG_SPL_FRAMEWORK) += spl.o +COBJS-$(CONFIG_SPL_NAND_SUPPORT) += spl_nand.o +COBJS-$(CONFIG_SPL_MMC_SUPPORT) += spl_mmc.o +COBJS-$(CONFIG_SPL_YMODEM_SUPPORT) += spl_ymodem.o +endif +else GLSOBJS += _ashldi3.o GLSOBJS += _ashrdi3.o GLSOBJS += _divsi3.oarch/arm/lib/spl.c new file +23
-0@@ -0,0 +1,225 @@ +/* +* (C) Copyright 2010 +* Texas Instruments, <www.ti.com> +* +* Aneesh V <[email protected]> +* +* See file CREDITS for list of people who contributed to this +* project. +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License as +* published by the Free Software Foundation; either version 2 of +* the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place, Suite 330, Boston, +* MA 02111-1307 USA
arch/arm/lib/spl.c line 33
Quoted 10 lines
arch/arm/lib/spl.c new file +10
-0+*/ +#include <common.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/omap_common.h>
This is a conflict I got. This file should be generic code, and should not have reference to a specific SOC or SOC family, as omap here. So I have added a include/spl.h with only the SPL relevant part, dropping other OMAP specific from this file (I see you did the same with omap_boot_device and omap_boot_mode).
arch/arm/lib/spl.c line 34
Quoted 1 line
arch/arm/lib/spl.c new file +1
-0+#include <asm/arch/mmc_host_def.h>
As far as I have understood, this is only for MMCSD_SECTOR_SIZE, that can be moved into another header file. Not all SOCs have asm/arch/mmc_host_def.h
arch/arm/lib/spl.c line 34
Quoted 9 lines
arch/arm/lib/spl.c new file +9
-0+#include <common.h> +#include <asm/u-boot.h> +#include <asm/utils.h> +#include <asm/arch/sys_proto.h> +#include <mmc.h> +#include <fat.h> +#include <version.h> +#include <asm/omap_common.h> +#include <asm/arch/mmc_host_def.h>
Both files are OMAP specific
arch/arm/lib/spl.c line 50
Quoted 7 lines
arch/arm/lib/spl.c new file +7
-0+ +DECLARE_GLOBAL_DATA_PTR ; + +#ifdef CONFIG_GENERIC_MMC +int board_mmc_init (bd_t *bis) +{ +switch (omap_boot_device ()) {
And this is also omap specific. Replaced by soc_boot_device ?
Cheers,
Stefano
Signature · 5 lines
===================================================================== DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de =====================================================================
PATCH 3/17 ARM: SPL: Move the omap SPL framework to arch/arm/lib
Quoted 43 lines · Stefano Babic
Quoted 5 lines · Tom Rini
Add a new flag,
CONFIG_SPL_FRAMEWORKto opt into thearch/arm/libSPL framework, enable on all of the previously using boards.Signed-off-by Tom Rini <[email protected]>---
Hi Tom,
Quoted 24 lines
README | 5 + arch/arm/cpu/armv7/omap-common/Makefile | 13 -- arch/arm/cpu/armv7/omap-common/spl.c | 225 --------------------------- arch/arm/cpu/armv7/omap-common/spl_mmc.c | 154 ------------------ arch/arm/cpu/armv7/omap-common/spl_nand.c | 111 ------------- arch/arm/cpu/armv7/omap-common/spl_ymodem.c | 76 --------- arch/arm/lib/Makefile | 9 +- arch/arm/lib/spl.c | 225 +++++++++++++++++++++++++++ arch/arm/lib/spl_mmc.c | 154 ++++++++++++++++++ arch/arm/lib/spl_nand.c | 111 +++++++++++++ arch/arm/lib/spl_ymodem.c | 76 +++++++++ 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 + 23 files changed, 591 insertions(+), 580 deletions(-)Quoted 9 lines
delete mode 100644 arch/arm/cpu/armv7/omap-common/spl.c delete mode 100644 arch/arm/cpu/armv7/omap-common/spl_mmc.c delete mode 100644 arch/arm/cpu/armv7/omap-common/spl_nand.c delete mode 100644 arch/arm/cpu/armv7/omap-common/spl_ymodem.c create mode 100644 arch/arm/lib/spl.c create mode 100644 arch/arm/lib/spl_mmc.c create mode 100644 arch/arm/lib/spl_nand.c create mode 100644 arch/arm/lib/spl_ymodem.c
Quoted 4 lines
In my attempt I moved files from
arch/arm/cpu/armv7/omap-common/to common. This is because to make it available to all SOCs, not only armv7. What do you think about ? I would like to add an example with an arm1136 (MX35).
Second request so yes, for v2 I'll move things to common/
[snip]
Quoted 9 lines
Quoted 1 line
+#include <
asm/omap_common.h>This is a conflict I got. This file should be generic code, and should not have reference to a specific SOC or SOC family, as omap here. So I have added a
include/spl.hwith only the SPL relevant part, dropping other OMAP specific from this file (I see you did the same withomap_boot_deviceandomap_boot_mode).
Quoted 5 lines
Quoted 1 line
+#include <
asm/arch/mmc_host_def.h>As far as I have understood, this is only for
MMCSD_SECTOR_SIZE, that can be moved into another header file. Not all SOCs haveasm/arch/mmc_host_def.h
Yes, mandating what the asm/ mmc header file names should be is something I've thought about but not had to step on, yet.
Quoted 12 lines
arch/arm/lib/spl.c line 34
Quoted 9 lines
arch/arm/lib/spl.c new file +9
-0+#include <common.h> +#include <asm/u-boot.h> +#include <asm/utils.h> +#include <asm/arch/sys_proto.h> +#include <mmc.h> +#include <fat.h> +#include <version.h> +#include <asm/omap_common.h> +#include <asm/arch/mmc_host_def.h> Both files are OMAP specific
Quoted 9 lines
arch/arm/lib/spl_mmc.c line 40
Quoted 7 lines
arch/arm/lib/spl_mmc.c new file +7
-0+ +DECLARE_GLOBAL_DATA_PTR ; + +#ifdef CONFIG_GENERIC_MMC +int board_mmc_init (bd_t *bis) +{ +switch (omap_boot_device ()) {And this is also omap specific. Replaced by
soc_boot_device?
My goal with this series, and part of why I added CONFIG_SPL_FRAMEWORK was that indeed, there's a lot of omap-isms in the code at the start. I believe by the end of the series they're all removed and the code is common. If it's a concern I can re-work things so that the move is one of the last steps.
Signature · 1 line
Tom
PATCH 3/17 ARM: SPL: Move the omap SPL framework to arch/arm/lib
Quoted 8 lines · Tom Rini
Quoted 7 lines · Stefano Babic
Quoted 5 lines · Tom Rini
Add a new flag,
CONFIG_SPL_FRAMEWORKto opt into thearch/arm/libSPL framework, enable on all of the previously using boards.Signed-off-by Tom Rini <[email protected]>---
Hi Tom,
Quoted 6 lines
My goal with this series, and part of why I added
CONFIG_SPL_FRAMEWORKwas that indeed, there's a lot of omap-isms in the code at the start. I believe by the end of the series they're all removed and the code is common. If it's a concern I can re-work things so that the move is one of the last steps.
No, it is not a problem. I am setting on top of your tree and it looks great.
Regards,
Stefano
Signature · 5 lines
===================================================================== DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de =====================================================================
PATCH 4/17 Makefile: Move SPL files to clobber, remove from clean
In reply to Tom RiniThe '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 5/17 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/omap3/board.c | 4 ++-- arch/arm/include/asm/omap_common.h | 2 +- arch/arm/lib/spl.c | 2 +- arch/arm/lib/spl_mmc.c | 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/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*/
arch/arm/lib/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/lib/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 ;
Signature · 1 line
1.7.9.5
PATCH 6/17 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/omap3/board.c | 2 +- arch/arm/include/asm/omap_common.h | 2 +- arch/arm/lib/spl_mmc.c | 2 +- arch/arm/lib/spl_nand.c | 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/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);
arch/arm/lib/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/lib/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 ();
Signature · 1 line
1.7.9.5
PATCH 7/17 omap-common: Fix typo in lowlevel_init.S::save_boot_params
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 8/17 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/omap3/board.c | 3 --- arch/arm/include/asm/omap_common.h | 1 - arch/arm/lib/spl_nand.c | 13 +++---------- 3 files changed, 3 insertions(+), 14 deletions(-)
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;
arch/arm/lib/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 );
Signature · 1 line
1.7.9.5
PATCH 8/17 ARM: SPL: Remove NAND_MODE_HW_ECC from spl_nand.c
Quoted 48 lines · Tom Rini
This detection code doesn't (and can't) do anything currently, so remove.
Signed-off-by Tom Rini <[email protected]>--- arch/arm/cpu/armv7/omap3/board.c | 3 --- arch/arm/include/asm/omap_common.h | 1 - arch/arm/lib/spl_nand.c | 13 +++---------- 3 files changed, 3 insertions(+), 14 deletions(-)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;arch/arm/lib/spl_nand.c +0
-4@@ -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 ();
arch/arm/lib/spl_nand.c void spl_nand_load_image(void) · line 41
Quoted 10 lines
arch/arm/lib/spl_nand.c +3
-6-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 ();
This also does not work with other SOCs, where there is not a gpmc init. My idea was to add here a soc specific function, where gpmc_init and nand_init can be called.
Regards,
Stefano
Signature · 5 lines
===================================================================== DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de =====================================================================
PATCH 9/17 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/lib/spl.c | 2 ++ 1 file changed, 2 insertions(+)
arch/arm/lib/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 9/17 ARM: SPL: Only call mem_malloc_init if configured
Quoted 15 lines · Tom Rini
We can only attempt to setup a malloc pool if
CONFIG_SYS_SPL_MALLOC_STARTis defined, and not all boards require it. Make the call depend on the define.Signed-off-by Tom Rini <[email protected]>--- arch/arm/lib/spl.c | 2 ++ 1 file changed, 2 insertions(+)arch/arm/lib/spl.c +0
-0
arch/arm/lib/spl.c void board_init_r(gd_t *id, ulong dummy) · line 158
Quoted 10 lines
arch/arm/lib/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 ();
Agree, mem_malloc_init should be not always called. However, how are the dependencies with other SPL configuration ? I think (but I can be wrong) that we need it if CONFIG_SPL_LIBDISK_SUPPORT or CONFIG_SPL_FAT_SUPPORT are set. Should we add them to your #ifdef case ?
Regards,
Stefano
Signature · 5 lines
===================================================================== DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de =====================================================================
PATCH 9/17 ARM: SPL: Only call mem_malloc_init if configured
Quoted 23 lines · Stefano Babic
Quoted 22 lines · Tom Rini
We can only attempt to setup a malloc pool if
CONFIG_SYS_SPL_MALLOC_STARTis defined, and not all boards require it. Make the call depend on the define.Signed-off-by Tom Rini <[email protected]>--- arch/arm/lib/spl.c | 2 ++ 1 file changed, 2 insertions(+)arch/arm/lib/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
Quoted 8 lines
arch/arm/lib/spl.c void board_init_r(gd_t *id, ulong dummy) · line 158
Quoted 3 lines
arch/arm/lib/spl.c +0
-0#ifdef CONFIG_SPL_BOARD_INIT spl_board_init ();Agree,
mem_malloc_initshould be not always called. However, how are the dependencies with other SPL configuration ? I think (but I can be wrong) that we need it ifCONFIG_SPL_LIBDISK_SUPPORTorCONFIG_SPL_FAT_SUPPORTare set. Should we add them to your #ifdef case ?
I think until we have Kconfig-style dependencies available, there's going to be a certain amount of pain here. We should probably add to docs/README.SPL that SPL_FAT_SUPPORT depends on the malloc pool and the defines that calls for (since there's a few of them not referenced right were we call mem_malloc_init).
Signature · 1 line
Tom
PATCH 10/17 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.
--- arch/arm/cpu/armv7/am33xx/board.c | 2 +- arch/arm/cpu/armv7/omap-common/hwinit-common.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 ++++++++++++++++++++ arch/arm/lib/spl.c | 2 +- arch/arm/lib/spl_mmc.c | 1 + arch/arm/lib/spl_nand.c | 2 +- arch/arm/lib/spl_ymodem.c | 2 +- 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/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
arch/arm/lib/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/lib/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/lib/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/lib/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
Signature · 1 line
1.7.9.5
PATCH 11/17 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/omap3/board.c | 15 +++++++++++++++ arch/arm/include/asm/omap_common.h | 5 ----- arch/arm/include/asm/spl.h | 5 +++++ arch/arm/lib/spl_mmc.c | 17 ----------------- 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/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;
arch/arm/lib/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;
Signature · 1 line
1.7.9.5
PATCH 12/17 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/lib/spl.c | 23 ++++++++--------------- arch/arm/lib/spl_nand.c | 1 - 2 files changed, 8 insertions(+), 16 deletions(-)
arch/arm/lib/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/lib/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 13/17 ARM: SPL: Start hooking in the current SPI SPL support
In reply to Tom Rini--- arch/arm/include/asm/spl.h | 3 +++ arch/arm/lib/spl.c | 5 +++++ 2 files changed, 8 insertions(+)
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
arch/arm/lib/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);
Signature · 1 line
1.7.9.5
PATCH 14/17 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/omap3/board.c | 3 +++ arch/arm/lib/spl_nand.c | 1 - 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/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
arch/arm/lib/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 */
include/configs/am3517_crane.h +1 -0
@@ -323,6 +323,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#define CONFIG_SPL_MAX_SIZE (54 * 1024)/* 8 KB for stack */
include/configs/am3517_evm.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#define CONFIG_SPL_MAX_SIZE (54 * 1024)/* 8 KB for stack */
include/configs/mcx.h +1 -0
@@ -310,6 +310,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/tam3517-common.h +1 -0
@@ -242,6 +242,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 #define CONFIG_SPL_NAND_SOFTECC
Signature · 1 line
1.7.9.5
PATCH 14/17 ARM: SPL: Move gpmc_init() to spl_board_init()
Quoted 20 lines · Tom Rini
This is an OMAP/related-specific function, move calling it to
spl_board_init()and turn onCONFIG_SPL_BOARD_INITon the boards that enabled NAND and didn't enable this already.Signed-off-by Tom Rini <[email protected]>--- arch/arm/cpu/armv7/omap-common/boot-common.c | 7 +++++++ arch/arm/cpu/armv7/omap3/board.c | 3 +++ arch/arm/lib/spl_nand.c | 1 - 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 +0
-0
arch/arm/cpu/armv7/omap-common/boot-common.c u32 spl_boot_mode(void) · line 56
Quoted 8 lines
arch/arm/cpu/armv7/omap-common/boot-common.c +5
-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
Ok, I was not so far when I commented the previous patch ;-)
Stefano
Signature · 5 lines
===================================================================== DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de =====================================================================
PATCH 15/17 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.
--- arch/arm/cpu/arm926ejs/davinci/spl.c | 45 +++++++------------------------ arch/arm/include/asm/arch-davinci/spl.h | 28 +++++++++++++++++++ include/configs/cam_enc_4xx.h | 2 ++ include/configs/da850evm.h | 2 ++ include/configs/hawkboard.h | 2 ++ 5 files changed, 44 insertions(+), 35 deletions(-) create mode 100644 arch/arm/include/asm/arch-davinci/spl.h
arch/arm/cpu/arm926ejs/davinci/spl.c +10 -35
@@ -21,6 +21,7 @@* MA 02111-1307 USA */ #include <common.h> +#include <asm/spl.h> #include <asm/u-boot.h> #include <asm/utils.h> #include <nand.h>
@@ -29,14 +30,7 @@#include <malloc.h> #include <spi_flash.h> -#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT - -DECLARE_GLOBAL_DATA_PTR ; -/* Define global data structure pointer to it*/ -static gd_t gdata __attribute__ ((section(".data"))); -static bd_t bdata __attribute__ ((section(".data"))); - -#else +#ifndef CONFIG_SPL_LIBCOMMON_SUPPORT void puts (const char *str) {
@@ -54,14 +48,7 @@ void putc(char c)#endif /* CONFIG_SPL_LIBCOMMON_SUPPORT */ -inline void hang (void ) -{ -puts ("### ERROR ### Please RESET the board ###\n" ); -for (;;) - ; -} - -void board_init_f (ulong dummy) +void spl_board_init (void ) {#ifdef CONFIG_SOC_DM365 dm36x_lowlevel_init (0 );
@@ -69,28 +56,16 @@ void board_init_f(ulong dummy)#ifdef CONFIG_SOC_DA8XX arch_cpu_init ();#endif -relocate_code (CONFIG_SPL_STACK ,NULL ,CONFIG_SPL_TEXT_BASE ); } -void board_init_r (gd_t *id,ulong dummy) +u32 spl_boot_device (void ) {#ifdef CONFIG_SPL_NAND_LOAD -nand_init (); -puts ("Nand boot...\n" ); -nand_boot (); -#endif -#ifdef CONFIG_SPL_SPI_LOAD -mem_malloc_init (CONFIG_SYS_TEXT_BASE -CONFIG_SYS_MALLOC_LEN , -CONFIG_SYS_MALLOC_LEN ); - - gd = &gdata; - gd->bd = &bdata; - gd->flags |=GD_FLG_RELOC ; - gd->baudrate =CONFIG_BAUDRATE ; -serial_init ();/* serial communications setup */ - gd->have_console =1 ; - -puts ("SPI boot...\n" ); -spi_boot (); +return BOOT_DEVICE_NAND ; +#elif defined(CONFIG_SPL_SPI_LOAD ) +return BOOT_DEVICE_SPI ; +#else +puts ("Unknown boot device\n" ); +hang ();#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 +2 -0
@@ -313,6 +313,8 @@/* defines for SPL */ #define CONFIG_SPL +#define CONFIG_SPL_FRAMEWORK +#define CONFIG_SPL_BOARD_INIT #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 15/17 ARM: SPL: Convert davinci to CONFIG_SPL_FRAMEWORK
Hi Tom,
I tested the entire patchset with the da850evm booting from SPI flash with SPL (make da850evm_config && make u-boot.ais).
I had to add defines for mem_malloc_init to make it work, please see my comment below.
Quoted 14 lines · Tom Rini
- Convert the non-relocation part of
board_init_ftospl_board_init, turn onCONFIG_SPL_BOARD_INITin the configs.
- Remove duplicated code.
- Addspl_boot_device()that returns the statically chosen boot device.Signed-off-by Tom Rini <[email protected]>--- arch/arm/cpu/arm926ejs/davinci/spl.c | 45 +++++++------------------------ arch/arm/include/asm/arch-davinci/spl.h | 28 +++++++++++++++++++ include/configs/cam_enc_4xx.h | 2 ++ include/configs/da850evm.h | 2 ++ include/configs/hawkboard.h | 2 ++ 5 files changed, 44 insertions(+), 35 deletions(-) create mode 100644 arch/arm/include/asm/arch-davinci/spl.h
[...]
include/configs/da850evm.h line 320
Quoted 13 lines
include/configs/da850evm.h +2
-0@@ -313,6 +313,8 @@/* defines for SPL */ #define CONFIG_SPL +#define CONFIG_SPL_FRAMEWORK +#define CONFIG_SPL_BOARD_INIT #define CONFIG_SPL_SPI_SUPPORT #define CONFIG_SPL_SPI_FLASH_SUPPORT #define CONFIG_SPL_SPI_LOAD
Please add
#define CONFIG_SYS_SPL_MALLOC_START (CONFIG_SYS_TEXT_BASE - CONFIG_SYS_MALLOC_LEN)
#define CONFIG_SYS_SPL_MALLOC_SIZE CONFIG_SYS_MALLOC_LEN
here, booting from SPI requires malloc.
Apart from that it works great, I like it :-)
Thank you!
Regards, Christian
PATCH 16/17 SPL: Enhance drivers/mtd/nand/nand_spl_load.c
In reply to Tom RiniTakes the load function from arch/arm/lib/spl_nand.c instead. This will allow for easier integration of SPL-boots-Linux code on other arches. Kill off CONFIG_SPL_NAND_LOAD as a separate option.
--- arch/arm/cpu/arm926ejs/davinci/spl.c | 2 +- arch/arm/lib/Makefile | 1 - arch/arm/lib/spl_nand.c | 102 ---------------------------------- doc/README.SPL | 1 - drivers/mtd/nand/Makefile | 7 +-- drivers/mtd/nand/nand_spl_load.c | 89 +++++++++++++++++++++-------- include/configs/cam_enc_4xx.h | 1 - include/configs/hawkboard.h | 1 - 8 files changed, 67 insertions(+), 137 deletions(-) delete mode 100644 arch/arm/lib/spl_nand.c
arch/arm/cpu/arm926ejs/davinci/spl.c +1 -1
@@ -60,7 +60,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/lib/Makefile +0 -1
@@ -29,7 +29,6 @@ LIBGCC = $(obj)libgcc.o ifdef CONFIG_SPL_BUILD ifdef CONFIG_SPL_FRAMEWORK COBJS-$(CONFIG_SPL_FRAMEWORK) += spl.o -COBJS-$(CONFIG_SPL_NAND_SUPPORT) += spl_nand.o COBJS-$(CONFIG_SPL_MMC_SUPPORT) += spl_mmc.o COBJS-$(CONFIG_SPL_YMODEM_SUPPORT) += spl_ymodem.o endif
arch/arm/lib/spl_nand.c deleted +0 -102
102 lines not on this page · raw message
doc/README.SPL +0 -1
@@ -64,7 +64,6 @@ CONFIG_SPL_POWER_SUPPORT (drivers/power/libpower.o) CONFIG_SPL_NAND_SUPPORT (drivers/mtd/nand/libnand.o) CONFIG_SPL_DMA_SUPPORT (drivers/dma/libdma.o) CONFIG_SPL_POST_MEM_SUPPORT (post/drivers/memory.o) -CONFIG_SPL_NAND_LOAD (drivers/mtd/nand/nand_spl_load.o) CONFIG_SPL_SPI_LOAD (drivers/mtd/spi/spi_spl_load.o)
drivers/mtd/nand/Makefile +1 -6
@@ -27,12 +27,7 @@ LIB := $(obj)libnand.o ifdef CONFIG_CMD_NAND ifdef CONFIG_SPL_BUILD -ifdef CONFIG_SPL_NAND_SIMPLE -COBJS-y += nand_spl_simple.o -endif -ifdef CONFIG_SPL_NAND_LOAD -COBJS-y += nand_spl_load.o -endif +COBJS-$(CONFIG_SPL_NAND_SIMPLE) += nand_spl_simple.o nand_spl_load.o else COBJS-y += nand.o COBJS-y += nand_bbt.o
drivers/mtd/nand/nand_spl_load.c +65 -24
101 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 16/17 SPL: Enhance drivers/mtd/nand/nand_spl_load.c
Quoted 3 lines · Tom Rini
Takes the load function from
arch/arm/lib/spl_nand.cinstead. This will allow for easier integration of SPL-boots-Linux code on other arches. Kill offCONFIG_SPL_NAND_LOADas a separate option.
I would have complained about the loss of a small CONFIG_SPL_NAND_LOAD, if I hadn't found that moving it into the equivalent of nand_spl_simple.c resulted in a smaller binary. :-P
-Scott
PATCH 17/17 ARM: SPL: Enhance spi_spl_load to match the other load functions
In reply to Tom Rini--- arch/arm/include/asm/spl.h | 2 +- arch/arm/lib/spl.c | 4 ++-- drivers/mtd/spi/spi_spl_load.c | 23 ++++++++++++----------- 3 files changed, 15 insertions(+), 14 deletions(-)
arch/arm/include/asm/spl.h +1 -1
@@ -61,7 +61,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 );
arch/arm/lib/spl.c +2 -2
@@ -177,8 +177,8 @@ void board_init_r(gd_t *id, ulong dummy)#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 <asm/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); }
Signature · 1 line
1.7.9.5
cover : ARM: SPL: Make more generic, merge DaVinci and OMAP
In reply to Tom RiniHi Tom,
Quoted 13 lines · Tom Rini
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 8 lines
To make this series easier to test I've placed it on
http://github.com/trini/u-boot WIP/spl-improvementsI'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 #ifndef
CONFIG_SPL_BUILDin random places.
Making SPL more generic is great. So moving these files out of the omap-common directory is the way to go. But your approach moves them to arch/arm/lib, restricting it only to ARM. Wouldn't it be possible to move it into an even more common location, so that other archs may also benefit from it?
I'm asking, since I'm currently working on an PowerPC based board which shall also use the SPL OS booting feature (Falcon boot).
Are the files ARM specific (I'm just starting looking into them right now)?
Thanks,
Stefan
cover : ARM: SPL: Make more generic, merge DaVinci and OMAP
Quoted 31 lines · Stefan Roese
Hi Tom,
Quoted 13 lines · Tom Rini
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 8 lines
To make this series easier to test I've placed it on
http://github.com/trini/u-boot WIP/spl-improvementsI'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 #ifndef
CONFIG_SPL_BUILDin random places.Making SPL more generic is great. So moving these files out of the omap-common directory is the way to go. But your approach moves them to
arch/arm/lib, restricting it only to ARM. Wouldn't it be possible to move it into an even more common location, so that other archs may also benefit from it?
Quoted 4 lines
I'm asking, since I'm currently working on an PowerPC based board which shall also use the SPL OS booting feature (Falcon boot).
Are the files ARM specific (I'm just starting looking into them right now)?
In theory, these should be fine on other arches. I'm just hesitant to call these common and put them in common/ without someone else doing the work of making sure they really are usable elsewhere. Sounds like about now would be the time to try, so for v2 I can move them to common/spl.c common/spl_ymodem.c and drivers/mmc/spl_mmc.c (to match drivers/mtd/nand/nand_spl* and drivers/mtd/spi/spi_spl*).
Signature · 1 line
Tom
cover : ARM: SPL: Make more generic, merge DaVinci and OMAP
Quoted 11 lines · Tom Rini
Quoted 4 lines
I'm asking, since I'm currently working on an PowerPC based board which shall also use the SPL OS booting feature (Falcon boot).
Are the files ARM specific (I'm just starting looking into them right now)?
In theory, these should be fine on other arches. I'm just hesitant to call these common and put them in common/ without someone else doing the work of making sure they really are usable elsewhere. Sounds like about now would be the time to try, so for v2 I can move them to
common/spl.ccommon/spl_ymodem.canddrivers/mmc/spl_mmc.c(to matchdrivers/mtd/nand/nand_spl*anddrivers/mtd/spi/spi_spl*).
Yes, please do. I'll work on the powerpc integration of this SPL stuff then.
Thanks,
Stefan
cover : ARM: SPL: Make more generic, merge DaVinci and OMAP
In reply to Tom RiniQuoted 2 lines · Tom Rini
Hey all,
Hi Tom,
Quoted 13 lines
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 9 lines
To make this series easier to test I've placed it on
http://github.com/trini/u-boot WIP/spl-improvementsI'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 #ifndef
CONFIG_SPL_BUILDin random places.
Oh, I was working on the same concept to make SPL available for other SOCs. I can get through your patches, we get surely the same conflict between architecture.
Stefano
Signature · 5 lines
===================================================================== DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de =====================================================================