SPL: Move the omap SPL framework to common/spl

Add 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.

Signed-off-by: Tom Rini <trini@ti.com>
This commit is contained in:
Tom Rini 2012-08-13 12:03:19 -07:00
parent d7cb93b28a
commit 47f7bcae8c
28 changed files with 138 additions and 59 deletions

5
README
View File

@ -2597,6 +2597,11 @@ FIT uImage format:
CONFIG_SYS_SPL_MALLOC_SIZE CONFIG_SYS_SPL_MALLOC_SIZE
The size of the malloc pool used in SPL. 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 CONFIG_SPL_DISPLAY_PRINT
For ARM, enable an optional function to print more information For ARM, enable an optional function to print more information
about the running system. about the running system.

View File

@ -18,6 +18,7 @@
#include <common.h> #include <common.h>
#include <errno.h> #include <errno.h>
#include <spl.h>
#include <asm/arch/cpu.h> #include <asm/arch/cpu.h>
#include <asm/arch/hardware.h> #include <asm/arch/hardware.h>
#include <asm/arch/omap.h> #include <asm/arch/omap.h>
@ -29,7 +30,6 @@
#include <asm/io.h> #include <asm/io.h>
#include <asm/emif.h> #include <asm/emif.h>
#include <asm/gpio.h> #include <asm/gpio.h>
#include <asm/spl.h>
#include <i2c.h> #include <i2c.h>
#include <miiphy.h> #include <miiphy.h>
#include <cpsw.h> #include <cpsw.h>

View File

@ -43,16 +43,9 @@ SOBJS += lowlevel_init.o
endif endif
ifdef CONFIG_SPL_BUILD ifdef CONFIG_SPL_BUILD
COBJS += spl.o
ifdef CONFIG_SPL_NAND_SUPPORT ifdef CONFIG_SPL_NAND_SUPPORT
COBJS += spl_nand.o COBJS += spl_nand.o
endif endif
ifdef CONFIG_SPL_MMC_SUPPORT
COBJS += spl_mmc.o
endif
ifdef CONFIG_SPL_YMODEM_SUPPORT
COBJS += spl_ymodem.o
endif
endif endif
ifndef CONFIG_SPL_BUILD ifndef CONFIG_SPL_BUILD

View File

@ -17,7 +17,7 @@
*/ */
#include <common.h> #include <common.h>
#include <asm/spl.h> #include <spl.h>
#include <asm/omap_common.h> #include <asm/omap_common.h>
#include <asm/arch/omap.h> #include <asm/arch/omap.h>
#include <asm/arch/mmc_host_def.h> #include <asm/arch/mmc_host_def.h>

View File

@ -28,10 +28,10 @@
* MA 02111-1307 USA * MA 02111-1307 USA
*/ */
#include <common.h> #include <common.h>
#include <spl.h>
#include <asm/arch/sys_proto.h> #include <asm/arch/sys_proto.h>
#include <asm/sizes.h> #include <asm/sizes.h>
#include <asm/emif.h> #include <asm/emif.h>
#include <asm/spl.h>
DECLARE_GLOBAL_DATA_PTR; DECLARE_GLOBAL_DATA_PTR;

View File

@ -21,7 +21,7 @@
* MA 02111-1307 USA * MA 02111-1307 USA
*/ */
#include <common.h> #include <common.h>
#include <asm/spl.h> #include <spl.h>
#include <asm/u-boot.h> #include <asm/u-boot.h>
#include <asm/utils.h> #include <asm/utils.h>
#include <asm/io.h> #include <asm/io.h>

View File

@ -33,13 +33,13 @@
* MA 02111-1307 USA * MA 02111-1307 USA
*/ */
#include <common.h> #include <common.h>
#include <spl.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/arch/sys_proto.h> #include <asm/arch/sys_proto.h>
#include <asm/arch/mem.h> #include <asm/arch/mem.h>
#include <asm/cache.h> #include <asm/cache.h>
#include <asm/armv7.h> #include <asm/armv7.h>
#include <asm/arch/gpio.h> #include <asm/arch/gpio.h>
#include <asm/spl.h>
#include <asm/omap_common.h> #include <asm/omap_common.h>
#include <asm/arch/mmc_host_def.h> #include <asm/arch/mmc_host_def.h>
#include <i2c.h> #include <i2c.h>

View File

@ -26,44 +26,4 @@
/* Platform-specific defines */ /* Platform-specific defines */
#include <asm/arch/spl.h> #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 #endif

37
common/spl/Makefile Normal file
View File

@ -0,0 +1,37 @@
#
# (C) Copyright 2012
# Texas Instruments Incorporated - http://www.ti.com/
# Aneesh V <aneesh@ti.com>
#
# 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
#########################################################################

View File

@ -23,9 +23,8 @@
* MA 02111-1307 USA * MA 02111-1307 USA
*/ */
#include <common.h> #include <common.h>
#include <asm/spl.h> #include <spl.h>
#include <asm/u-boot.h> #include <asm/u-boot.h>
#include <asm/utils.h>
#include <nand.h> #include <nand.h>
#include <fat.h> #include <fat.h>
#include <version.h> #include <version.h>
@ -36,7 +35,7 @@
DECLARE_GLOBAL_DATA_PTR; DECLARE_GLOBAL_DATA_PTR;
u32* boot_params_ptr = NULL; u32 *boot_params_ptr = NULL;
struct spl_image_info spl_image; struct spl_image_info spl_image;
/* Define global data structure pointer to it*/ /* Define global data structure pointer to it*/

View File

@ -26,11 +26,10 @@
* MA 02111-1307 USA * MA 02111-1307 USA
*/ */
#include <common.h> #include <common.h>
#include <asm/spl.h> #include <spl.h>
#include <xyzModem.h> #include <xyzModem.h>
#include <asm/u-boot.h> #include <asm/u-boot.h>
#include <asm/utils.h> #include <asm/utils.h>
#include <asm/arch/sys_proto.h>
#define BUF_SIZE 1024 #define BUF_SIZE 1024

View File

@ -25,8 +25,11 @@ include $(TOPDIR)/config.mk
LIB := $(obj)libmmc.o LIB := $(obj)libmmc.o
ifdef CONFIG_SPL_MMC_LOAD ifdef CONFIG_SPL_BUILD
COBJS-$(CONFIG_SPL_MMC_LOAD) += spl_mmc_load.o COBJS-$(CONFIG_SPL_MMC_LOAD) += spl_mmc_load.o
ifdef CONFIG_SPL_FRAMEWORK
COBJS-$(CONFIG_SPL_MMC_SUPPORT) += spl_mmc.o
endif
endif endif
COBJS-$(CONFIG_BFIN_SDH) += bfin_sdh.o COBJS-$(CONFIG_BFIN_SDH) += bfin_sdh.o

View File

@ -23,7 +23,7 @@
* MA 02111-1307 USA * MA 02111-1307 USA
*/ */
#include <common.h> #include <common.h>
#include <asm/spl.h> #include <spl.h>
#include <asm/u-boot.h> #include <asm/u-boot.h>
#include <asm/utils.h> #include <asm/utils.h>
#include <mmc.h> #include <mmc.h>

View File

@ -193,6 +193,7 @@
/* Defines for SPL */ /* Defines for SPL */
#define CONFIG_SPL #define CONFIG_SPL
#define CONFIG_SPL_FRAMEWORK
#define CONFIG_SPL_TEXT_BASE 0x402F0400 #define CONFIG_SPL_TEXT_BASE 0x402F0400
#define CONFIG_SPL_MAX_SIZE (46 * 1024) #define CONFIG_SPL_MAX_SIZE (46 * 1024)
#define CONFIG_SPL_STACK CONFIG_SYS_INIT_SP_ADDR #define CONFIG_SPL_STACK CONFIG_SYS_INIT_SP_ADDR

View File

@ -314,6 +314,7 @@
/* Defines for SPL */ /* Defines for SPL */
#define CONFIG_SPL #define CONFIG_SPL
#define CONFIG_SPL_FRAMEWORK
#define CONFIG_SPL_BOARD_INIT #define CONFIG_SPL_BOARD_INIT
#define CONFIG_SPL_NAND_SIMPLE #define CONFIG_SPL_NAND_SIMPLE
#define CONFIG_SPL_TEXT_BASE 0x40200800 #define CONFIG_SPL_TEXT_BASE 0x40200800

View File

@ -313,6 +313,7 @@
/* Defines for SPL */ /* Defines for SPL */
#define CONFIG_SPL #define CONFIG_SPL
#define CONFIG_SPL_FRAMEWORK
#define CONFIG_SPL_BOARD_INIT #define CONFIG_SPL_BOARD_INIT
#define CONFIG_SPL_NAND_SIMPLE #define CONFIG_SPL_NAND_SIMPLE
#define CONFIG_SPL_TEXT_BASE 0x40200800 #define CONFIG_SPL_TEXT_BASE 0x40200800

View File

@ -303,6 +303,7 @@
/* Defines for SPL */ /* Defines for SPL */
#define CONFIG_SPL #define CONFIG_SPL
#define CONFIG_SPL_FRAMEWORK
#define CONFIG_SPL_NAND_SIMPLE #define CONFIG_SPL_NAND_SIMPLE
#define CONFIG_SPL_LIBCOMMON_SUPPORT #define CONFIG_SPL_LIBCOMMON_SUPPORT

View File

@ -295,6 +295,7 @@
/* SPL */ /* SPL */
#define CONFIG_SPL #define CONFIG_SPL
#define CONFIG_SPL_FRAMEWORK
#define CONFIG_SPL_NAND_SIMPLE #define CONFIG_SPL_NAND_SIMPLE
#define CONFIG_SPL_TEXT_BASE 0x40200800 #define CONFIG_SPL_TEXT_BASE 0x40200800
#define CONFIG_SPL_MAX_SIZE (54 * 1024) #define CONFIG_SPL_MAX_SIZE (54 * 1024)

View File

@ -359,6 +359,7 @@
/* Defines for SPL */ /* Defines for SPL */
#define CONFIG_SPL #define CONFIG_SPL
#define CONFIG_SPL_FRAMEWORK
#define CONFIG_SPL_BOARD_INIT #define CONFIG_SPL_BOARD_INIT
#define CONFIG_SPL_NAND_SIMPLE #define CONFIG_SPL_NAND_SIMPLE
#define CONFIG_SPL_NAND_SOFTECC #define CONFIG_SPL_NAND_SOFTECC

View File

@ -391,6 +391,7 @@
/* Defines for SPL */ /* Defines for SPL */
#define CONFIG_SPL #define CONFIG_SPL
#define CONFIG_SPL_FRAMEWORK
#define CONFIG_SPL_NAND_SIMPLE #define CONFIG_SPL_NAND_SIMPLE
#define CONFIG_SPL_TEXT_BASE 0x40200800 #define CONFIG_SPL_TEXT_BASE 0x40200800
#define CONFIG_SPL_MAX_SIZE (54 * 1024) /* 8 KB for stack */ #define CONFIG_SPL_MAX_SIZE (54 * 1024) /* 8 KB for stack */

View File

@ -273,6 +273,7 @@
/* Defines for SPL */ /* Defines for SPL */
#define CONFIG_SPL #define CONFIG_SPL
#define CONFIG_SPL_FRAMEWORK
#define CONFIG_SPL_TEXT_BASE 0x40200800 #define CONFIG_SPL_TEXT_BASE 0x40200800
#define CONFIG_SPL_MAX_SIZE (54 * 1024) /* 8 KB for stack */ #define CONFIG_SPL_MAX_SIZE (54 * 1024) /* 8 KB for stack */
#define CONFIG_SPL_STACK LOW_LEVEL_SRAM_STACK #define CONFIG_SPL_STACK LOW_LEVEL_SRAM_STACK

View File

@ -293,6 +293,7 @@
/* Defines for SPL */ /* Defines for SPL */
#define CONFIG_SPL #define CONFIG_SPL
#define CONFIG_SPL_FRAMEWORK
#define CONFIG_SPL_NAND_SIMPLE #define CONFIG_SPL_NAND_SIMPLE
#define CONFIG_SPL_TEXT_BASE 0x40200800 #define CONFIG_SPL_TEXT_BASE 0x40200800
#define CONFIG_SPL_MAX_SIZE (54 * 1024) /* 8 KB for stack */ #define CONFIG_SPL_MAX_SIZE (54 * 1024) /* 8 KB for stack */

View File

@ -232,6 +232,7 @@
/* Defines for SPL */ /* Defines for SPL */
#define CONFIG_SPL #define CONFIG_SPL
#define CONFIG_SPL_FRAMEWORK
#define CONFIG_SPL_TEXT_BASE 0x40304350 #define CONFIG_SPL_TEXT_BASE 0x40304350
#define CONFIG_SPL_MAX_SIZE (38 * 1024) #define CONFIG_SPL_MAX_SIZE (38 * 1024)
#define CONFIG_SPL_STACK CONFIG_SYS_INIT_SP_ADDR #define CONFIG_SPL_STACK CONFIG_SYS_INIT_SP_ADDR

View File

@ -229,6 +229,7 @@
/* Defines for SPL */ /* Defines for SPL */
#define CONFIG_SPL #define CONFIG_SPL
#define CONFIG_SPL_FRAMEWORK
#define CONFIG_SPL_TEXT_BASE 0x40300350 #define CONFIG_SPL_TEXT_BASE 0x40300350
#define CONFIG_SPL_MAX_SIZE 0x19000 /* 100K */ #define CONFIG_SPL_MAX_SIZE 0x19000 /* 100K */
#define CONFIG_SPL_STACK CONFIG_SYS_INIT_SP_ADDR #define CONFIG_SPL_STACK CONFIG_SYS_INIT_SP_ADDR

View File

@ -239,6 +239,7 @@
/* Defines for SPL */ /* Defines for SPL */
#define CONFIG_SPL #define CONFIG_SPL
#define CONFIG_SPL_FRAMEWORK
#define CONFIG_SPL_BOARD_INIT #define CONFIG_SPL_BOARD_INIT
#define CONFIG_SPL_CONSOLE #define CONFIG_SPL_CONSOLE
#define CONFIG_SPL_NAND_SIMPLE #define CONFIG_SPL_NAND_SIMPLE

View File

@ -271,6 +271,7 @@
/* Defines for SPL */ /* Defines for SPL */
#define CONFIG_SPL #define CONFIG_SPL
#define CONFIG_SPL_FRAMEWORK
#define CONFIG_SPL_NAND_SIMPLE #define CONFIG_SPL_NAND_SIMPLE
#define CONFIG_SPL_BOARD_INIT #define CONFIG_SPL_BOARD_INIT

69
include/spl.h Normal file
View File

@ -0,0 +1,69 @@
/*
* (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 _SPL_H_
#define _SPL_H_
/* Platform-specific defines */
#include <asm/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

View File

@ -41,6 +41,7 @@ endif
LIBS-y += board/$(BOARDDIR)/lib$(BOARD).o LIBS-y += board/$(BOARDDIR)/lib$(BOARD).o
LIBS-$(HAVE_VENDOR_COMMON_LIB) += board/$(VENDOR)/common/lib$(VENDOR).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_LIBCOMMON_SUPPORT) += common/libcommon.o
LIBS-$(CONFIG_SPL_LIBDISK_SUPPORT) += disk/libdisk.o LIBS-$(CONFIG_SPL_LIBDISK_SUPPORT) += disk/libdisk.o
LIBS-$(CONFIG_SPL_I2C_SUPPORT) += drivers/i2c/libi2c.o LIBS-$(CONFIG_SPL_I2C_SUPPORT) += drivers/i2c/libi2c.o