powerpc: deleted unused symbol CONFIG_SPL_NAND_MINIMAL and enabled some functionality for common SPL
Subsystems (5)
PATCH v8 1/7 powerpc: deleted unused symbol CONFIG_SPL_NAND_MINIMAL and enabled some functionality for common SPL
From: Ying Zhang <[email protected]>
1. The symbol CONFIG_SPL_NAND_MINIMAL is unused, so deleted it.
2. Some functions were unused in the minimal SPL, but it is useful in the common SPL. So, enabled some functionality for common SPL.
---
Change from v7:
- No change.
Change from v6:
- No change.
Change from v5:
- No change.
Change from v4:
- Use !defined(CONFIG_SPL_BUILD) || !defined(CONFIG_SPL_INIT_MINIMAL)
- to replace to new symbols.
Change from v3:
- Give up new symbol and delete the line
- ifndef CONFIG_SPL_BUILD in common/env_common.c
Change from v2:
- Split from "Add the symbol for the minimal SPL used to eliminate unused
- code"
Change from v1:
- Split from "boot from SD card/SPI flash with SPL".
arch/powerpc/cpu/mpc85xx/tlb.c | 3 ++- arch/powerpc/cpu/mpc8xxx/law.c | 6 ++++-- include/configs/MPC8313ERDB.h | 1 - include/configs/P1022DS.h | 1 - include/configs/p1_p2_rdb_pc.h | 1 - 5 files changed, 6 insertions(+), 6 deletions(-)
arch/powerpc/cpu/mpc85xx/tlb.c +2 -1
@@ -55,7 +55,8 @@ void init_tlbs(void)return ; } -#if !defined(CONFIG_NAND_SPL ) && !defined(CONFIG_SPL_BUILD ) +#if !defined(CONFIG_NAND_SPL ) && \ + (!defined(CONFIG_SPL_BUILD ) || !defined(CONFIG_SPL_INIT_MINIMAL ))void read_tlbcam_entry (int idx,u32 *valid,u32 *tsize,unsigned long *epn,phys_addr_t *rpn) {
arch/powerpc/cpu/mpc8xxx/law.c +4 -2
@@ -92,7 +92,8 @@ void disable_law(u8 idx)return ; } -#if !defined(CONFIG_NAND_SPL ) && !defined(CONFIG_SPL_BUILD ) +#if !defined(CONFIG_NAND_SPL ) && \ + (!defined(CONFIG_SPL_BUILD ) || !defined(CONFIG_SPL_INIT_MINIMAL ))static int get_law_entry (u8 i,struct law_entry *e) {u32 lawar;
@@ -122,7 +123,8 @@ int set_next_law(phys_addr_t addr, enum law_size sz, enum law_trgt_if id)return idx; } -#if !defined(CONFIG_NAND_SPL ) && !defined(CONFIG_SPL_BUILD ) +#if !defined(CONFIG_NAND_SPL ) && \ + (!defined(CONFIG_SPL_BUILD ) || !defined(CONFIG_SPL_INIT_MINIMAL ))int set_last_law (phys_addr_t addr,enum law_size sz,enum law_trgt_if id) {u32 idx;
include/configs/MPC8313ERDB.h +0 -1
@@ -40,7 +40,6 @@#define CONFIG_SPL_INIT_MINIMAL #define CONFIG_SPL_SERIAL_SUPPORT #define CONFIG_SPL_NAND_SUPPORT -#define CONFIG_SPL_NAND_MINIMAL #define CONFIG_SPL_FLUSH_IMAGE #define CONFIG_SPL_TARGET "u-boot-with-spl.bin"#define CONFIG_SPL_MPC83XX_WAIT_FOR_NAND
include/configs/P1022DS.h +0 -1
@@ -41,7 +41,6 @@#define CONFIG_SPL_INIT_MINIMAL #define CONFIG_SPL_SERIAL_SUPPORT #define CONFIG_SPL_NAND_SUPPORT -#define CONFIG_SPL_NAND_MINIMAL #define CONFIG_SPL_FLUSH_IMAGE #define CONFIG_SPL_TARGET "u-boot-with-spl.bin"
include/configs/p1_p2_rdb_pc.h +0 -1
@@ -159,7 +159,6 @@#define CONFIG_SPL_INIT_MINIMAL #define CONFIG_SPL_SERIAL_SUPPORT #define CONFIG_SPL_NAND_SUPPORT -#define CONFIG_SPL_NAND_MINIMAL #define CONFIG_SPL_FLUSH_IMAGE #define CONFIG_SPL_TARGET "u-boot-with-spl.bin"
Signature · 1 line
1.7.0.4
PATCH v8 2/7 powerpc: mpc85xx: Support booting from SD Card with SPL
From: Ying Zhang <[email protected]>
This patch introduces SPL to enable a loader stub that being loaded by the code from the internal on-chip ROM. It loads the final uboot image into DDR, then jump to it to begin execution.
The SPL's size is sizeable, the maximum size must not exceed the size of L2 SRAM. It initializes the DDR through SPD code, and copys final uboot image to DDR. So there are two stage uboot images:
* spl_boot, 96KB size. The env variables are copied to L2 SRAM, so that ddr spd code can get the interleaving mode setting in env. It loads final uboot image from offset 96KB.
* final uboot image, size is variable depends on the functions enabled.
This patch is on top of the patch:
SPL: Makefile: Build a separate autoconf.mk for SPL.
---
Change from v7:
- No change.
Change from v6:
- Split to the patch "Support booting from SD Card with SPL" and the patch
- "Enable P1022DS to boot from SD Card with SPL". this patch only support
- booting from SD Card with SPL
Change from v5:
- Add new symbol CONFIG_SPL_ENV_IMPORT for contain the functionality
- env_import.
Change from v4:
- No change.
Change from v3:
- No change.
Change from v2:
- No change.
Change from v1:
- Split from "boot from SD card/SPI flash with SPL".
README | 4 + arch/powerpc/cpu/mpc85xx/u-boot-spl.lds | 5 + .../cpu/mpc8xxx/ddr/lc_common_dimm_params.c | 4 + doc/README.mpc85xx-sd-spi-boot | 81 ++++++++++++ drivers/mmc/Makefile | 3 + drivers/mmc/fsl_esdhc_spl.c | 131 ++++++++++++++++++++ drivers/mmc/mmc.c | 2 + include/fsl_esdhc.h | 1 + spl/Makefile | 3 + 9 files changed, 234 insertions(+), 0 deletions(-) create mode 100644 doc/README.mpc85xx-sd-spi-boot create mode 100644 drivers/mmc/fsl_esdhc_spl.c
README +4 -0
@@ -3015,6 +3015,10 @@ FIT uImage format: Support for NAND boot using simple NAND drivers that expose the cmd_ctrl() interface. + CONFIG_SPL_MPC8XXX_INIT_DDR_SUPPORT + Set for the SPL on PPC mpc8xxx targets, support for + arch/powerpc/cpu/mpc8xxx/ddr/libddr.o in SPL binary. + CONFIG_SYS_NAND_5_ADDR_CYCLE, CONFIG_SYS_NAND_PAGE_COUNT, CONFIG_SYS_NAND_PAGE_SIZE, CONFIG_SYS_NAND_OOBSIZE, CONFIG_SYS_NAND_BLOCK_SIZE, CONFIG_SYS_NAND_BAD_BLOCK_POS,
arch/powerpc/cpu/mpc85xx/u-boot-spl.lds +5 -0
@@ -60,6 +60,11 @@ SECTIONS } _edata = .; + . = .; + __start___ex_table = .; + __ex_table : { *(__ex_table) } + __stop___ex_table = .; + . = ALIGN(8); __init_begin = .; __init_end = .;
arch/powerpc/cpu/mpc8xxx/ddr/lc_common_dimm_params.c +4 -0
@@ -218,12 +218,16 @@ compute_lowest_common_dimm_parameters(const dimm_params_t *dimm_params,if (dimm_params[i].n_ranks) {if (dimm_params[i].registered_dimm) { temp1 =1 ; +#ifndef CONFIG_SPL_BUILD printf ("Detected RDIMM %s\n" , dimm_params[i].mpart); +#endif }else { temp2 =1 ; +#ifndef CONFIG_SPL_BUILD printf ("Detected UDIMM %s\n" , dimm_params[i].mpart); +#endif } } }
doc/README.mpc85xx-sd-spi-boot new file +81 -0
81 lines not on this page · raw message
drivers/mmc/Makefile +3 -0
@@ -48,6 +48,9 @@ COBJS-$(CONFIG_TEGRA_MMC) += tegra_mmc.o COBJS-$(CONFIG_DWMMC) += dw_mmc.o COBJS-$(CONFIG_EXYNOS_DWMMC) += exynos_dw_mmc.o COBJS-$(CONFIG_ZYNQ_SDHCI) += zynq_sdhci.o +ifdef CONFIG_SPL_BUILD +COBJS-$(CONFIG_SPL_MMC_BOOT) += fsl_esdhc_spl.o +endif COBJS := $(COBJS-y) SRCS := $(COBJS:.o=.c)
drivers/mmc/fsl_esdhc_spl.c new file +131 -0
131 lines not on this page · raw message
drivers/mmc/mmc.c +2 -0
@@ -1499,7 +1499,9 @@ int mmc_initialize(bd_t *bis)if (board_mmc_init (bis) <0 )cpu_mmc_init (bis); +#ifndef CONFIG_SPL_BUILD print_mmc_devices (',' ); +#endif do_preinit ();return 0 ;
include/fsl_esdhc.h +1 -0
@@ -198,5 +198,6 @@ void fdt_fixup_esdhc(void *blob, bd_t *bd);static inline int fsl_esdhc_mmc_init (bd_t *bis) {return -ENOSYS ; }static inline void fdt_fixup_esdhc (void *blob,bd_t *bd) {}#endif /* CONFIG_FSL_ESDHC */ +void mmc_boot (void );#endif /* __FSL_ESDHC_H__ */
spl/Makefile +3 -0
@@ -51,6 +51,9 @@ LIBS-y += arch/powerpc/cpu/mpc8xxx/lib8xxx.o endif ifeq ($(CPU),mpc85xx) LIBS-y += arch/powerpc/cpu/mpc8xxx/lib8xxx.o +ifdef CONFIG_SPL_MPC8XXX_INIT_DDR_SUPPORT +LIBS-y += arch/powerpc/cpu/mpc8xxx/ddr/libddr.o +endif endif ifeq ($(CPU),mpc86xx) LIBS-y += arch/powerpc/cpu/mpc8xxx/lib8xxx.o
Signature · 1 line
1.7.0.4
PATCH v8 3/7 powerpc: p1022ds: Enable P1022DS to boot from SD Card with SPL
In reply to ying.zhang at freescale.comFrom: Ying Zhang <[email protected]>
Enable p1022ds to start from eSDHC with SPL.
---
Change from v7:
- No change.
Change from v6:
- Split from the patch "powerpc/p1022ds: boot from SD Card with SPL",
- this patch only enables p1022ds to boot from SD Card with SPL. Change from v5:
- No change.
Change from v4:
- No change.
Change from v3:
- No change.
Change from v2:
- No change.
Change from v1:
- No change.
README | 4 ++ board/freescale/common/Makefile | 2 - board/freescale/p1022ds/Makefile | 3 + board/freescale/p1022ds/spl.c | 111 ++++++++++++++++++++++++++++++++++++++ board/freescale/p1022ds/tlb.c | 9 +++- include/configs/P1022DS.h | 54 ++++++++++++++++--- 6 files changed, 173 insertions(+), 10 deletions(-) create mode 100644 board/freescale/p1022ds/spl.c
README +4 -0
@@ -3019,6 +3019,10 @@ FIT uImage format: Set for the SPL on PPC mpc8xxx targets, support for arch/powerpc/cpu/mpc8xxx/ddr/libddr.o in SPL binary. + CONFIG_SPL_COMMON_INIT_DDR + Set for common ddr init with serial presence detect in + SPL binary. + CONFIG_SYS_NAND_5_ADDR_CYCLE, CONFIG_SYS_NAND_PAGE_COUNT, CONFIG_SYS_NAND_PAGE_SIZE, CONFIG_SYS_NAND_OOBSIZE, CONFIG_SYS_NAND_BLOCK_SIZE, CONFIG_SYS_NAND_BAD_BLOCK_POS,
board/freescale/common/Makefile +0 -2
@@ -61,9 +61,7 @@ COBJS-$(CONFIG_MPC8555CDS) += cds_pci_ft.o COBJS-$(CONFIG_MPC8536DS) += ics307_clk.o COBJS-$(CONFIG_MPC8572DS) += ics307_clk.o -ifndef CONFIG_SPL_BUILD COBJS-$(CONFIG_P1022DS) += ics307_clk.o -endif COBJS-$(CONFIG_P2020DS) += ics307_clk.o COBJS-$(CONFIG_P3041DS) += ics307_clk.o COBJS-$(CONFIG_P4080DS) += ics307_clk.o
board/freescale/p1022ds/Makefile +3 -0
@@ -24,6 +24,9 @@ ifdef MINIMAL COBJS-y += spl_minimal.o tlb.o law.o else +ifdef CONFIG_SPL_BUILD +COBJS-y += spl.o +endif COBJS-y += $(BOARD).o COBJS-y += ddr.o COBJS-y += law.o
board/freescale/p1022ds/spl.c new file +111 -0
111 lines not on this page · raw message
board/freescale/p1022ds/tlb.c +8 -1
@@ -74,7 +74,8 @@ struct fsl_e_tlb_entry tlb_table[] = { MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G, 0, 7, BOOKE_PAGESZ_4K, 1), -#if defined(CONFIG_SYS_RAMBOOT ) || defined(CONFIG_SPL ) +#if defined(CONFIG_SYS_RAMBOOT ) || \ + (defined(CONFIG_SPL ) && !defined(CONFIG_SPL_COMMON_INIT_DDR ))/* **** - eSDHC/eSPI/NAND boot */ SET_TLB_ENTRY(1, CONFIG_SYS_DDR_SDRAM_BASE, CONFIG_SYS_DDR_SDRAM_BASE, MAS3_SX|MAS3_SW|MAS3_SR, 0,
@@ -93,6 +94,12 @@ struct fsl_e_tlb_entry tlb_table[] = { 0, 10, BOOKE_PAGESZ_16K, 1),#endif +#ifdef CONFIG_SYS_INIT_L2_ADDR +/* *I*G - L2SRAM */ +SET_TLB_ENTRY (1 ,CONFIG_SYS_INIT_L2_ADDR ,CONFIG_SYS_INIT_L2_ADDR_PHYS , +MAS3_SX |MAS3_SW |MAS3_SR ,MAS2_G , + 0, 11, BOOKE_PAGESZ_256K, 1) +#endif };int num_tlb_entries =ARRAY_SIZE (tlb_table);
include/configs/P1022DS.h +47 -7
79 lines not on this page · raw message
Signature · 1 line
1.7.0.4
PATCH v8 4/7 powerpc : spi flash : Support to start from eSPI with SPL
In reply to ying.zhang at freescale.comFrom: Ying Zhang <[email protected]>
This patch introduces SPL to enable a loader stub that being loaded by the code from the internal on-chip ROM. It loads the final uboot image into DDR, then jump to it to begin execution.
The SPL's size is sizeable, the maximum size must not exceed the size of L2 SRAM. It initializes the DDR through SPD code, and copys final uboot image to DDR. So there are two stage uboot images:
* spl_boot, 96KB size. The env variables are copied to L2 SRAM, so that ddr spd code can get the interleaving mode setting in env. It loads final uboot image from offset 96KB.
* final uboot image, size is variable depends on the functions enabled.
---
Change from v7:
- No change.
Change from v6:
- No change.
Change from v5:
- Split from "powerpc/p1022ds: boot from spi flash with SPL"
- this patch add the capability starting from eSPI with SPL. Change from v4:
- No change.
Change from v3:
- No change.
Change from v2:
- No change.
Change from v1:
- Split from "boot from SD card/SPI flash with SPL".
drivers/mtd/spi/Makefile | 1 + drivers/mtd/spi/fsl_espi_spl.c | 78 ++++++++++++++++++++++++++++++++++++++++ drivers/mtd/spi/spi_flash.c | 2 + 3 files changed, 81 insertions(+), 0 deletions(-) create mode 100644 drivers/mtd/spi/fsl_espi_spl.c
drivers/mtd/spi/Makefile +1 -0
@@ -27,6 +27,7 @@ LIB := $(obj)libspi_flash.o ifdef CONFIG_SPL_BUILD COBJS-$(CONFIG_SPL_SPI_LOAD) += spi_spl_load.o +COBJS-$(CONFIG_SPL_SPI_BOOT) += fsl_espi_spl.o endif COBJS-$(CONFIG_SPI_FLASH) += spi_flash.o
drivers/mtd/spi/fsl_espi_spl.c new file +78 -0
78 lines not on this page · raw message
drivers/mtd/spi/spi_flash.c +2 -0
@@ -554,12 +554,14 @@ struct spi_flash *spi_flash_probe(unsigned int bus, unsigned int cs, goto err_manufacturer_probe; }#endif +#ifndef CONFIG_SPL_BUILD printf ("SF: Detected %s with page size " , flash->name);print_size (flash->sector_size,", total " );print_size (flash->size,"" );if (flash->memory_map)printf (", mapped at %p" , flash->memory_map);puts ("\n" ); +#endif #ifndef CONFIG_SPI_FLASH_BAR if (flash->size >SPI_FLASH_16MB_BOUN ) {puts ("SF: Warning - Only lower 16MiB accessible," );
Signature · 1 line
1.7.0.4
PATCH v8 5/7 powerpc : p1022ds : enable p1022ds to start from eSPI with SPL
In reply to ying.zhang at freescale.comFrom: Ying Zhang <[email protected]>
Enable p1022ds to start from eSPI with SPL.
---
Change from v7:
- No change.
Change from v6:
- No longer changes the header file included by the file
- "board/freescale/p1022ds/spl.c"
Change from v5:
- Split from "powerpc/p1022ds: boot from spi flash with SPL"
- this patch enable P1022DS to start from eSPI with SPL. Change from v4:
- No change.
Change from v3:
- No change.
Change from v2:
- No change.
Change from v1:
- Split from "boot from SD card/SPI flash with SPL".
board/freescale/p1022ds/spl.c | 10 ++++++++++ include/configs/P1022DS.h | 36 +++++++++++++++++++++++++++++------- 2 files changed, 39 insertions(+), 7 deletions(-)
board/freescale/p1022ds/spl.c +10 -0
@@ -27,6 +27,7 @@#include <i2c.h> #include "../common/ngpixis.h" #include <fsl_esdhc.h> +#include <spi_flash.h> DECLARE_GLOBAL_DATA_PTR ;
@@ -53,6 +54,11 @@ void board_init_f(ulong bootflag)setbits_be32 (&gur->pmuxcr,in_be32 (&gur->pmuxcr) | MPC85xx_PMUXCR_SD_DATA); +#ifdef CONFIG_SPL_SPI_BOOT +/* Enable the SPI */ +clrsetbits_8 (&pixis->brdcfg0,PIXIS_ELBC_SPI_MASK ,PIXIS_SPI ); +#endif +/* Read back the register to synchronize the write. */ in_be32 (&gur->pmuxcr);
@@ -66,6 +72,8 @@ void board_init_f(ulong bootflag) bus_clk / 16 / CONFIG_BAUDRATE);#ifdef CONFIG_SPL_MMC_BOOT puts ("\nSD boot...\n" ); +#elif defined(CONFIG_SPL_SPI_BOOT ) +puts ("\nSPI Flash boot...\n" );#endif /* copy code to RAM and jump to it - this should not return */
@@ -107,5 +115,7 @@ void board_init_r(gd_t *gd, ulong dest_addr)#ifdef CONFIG_SPL_MMC_BOOT mmc_boot (); +#elif defined(CONFIG_SPL_SPI_BOOT ) +spi_boot ();#endif }
include/configs/P1022DS.h +29 -7
@@ -48,11 +48,33 @@#endif #ifdef CONFIG_SPIFLASH -#define CONFIG_RAMBOOT_SPIFLASH -#define CONFIG_SYS_RAMBOOT -#define CONFIG_SYS_EXTRA_ENV_RELOC -#define CONFIG_SYS_TEXT_BASE 0x11000000 -#define CONFIG_RESET_VECTOR_ADDRESS 0x1107fffc +#define CONFIG_SPL +#define CONFIG_SPL_MPC8XXX_INIT_DDR_SUPPORT +#define CONFIG_SPL_ENV_SUPPORT +#define CONFIG_SPL_SERIAL_SUPPORT +#define CONFIG_SPL_SPI_SUPPORT +#define CONFIG_SPL_SPI_FLASH_SUPPORT +#define CONFIG_SPL_SPI_FLASH_MINIMAL +#define CONFIG_SPL_FLUSH_IMAGE +#define CONFIG_SPL_TARGET "u-boot-with-spl.bin" +#define CONFIG_SPL_LIBGENERIC_SUPPORT +#define CONFIG_SPL_LIBCOMMON_SUPPORT +#define CONFIG_SPL_I2C_SUPPORT +#define CONFIG_FSL_LAW /* Use common FSL init code */ +#define CONFIG_SYS_TEXT_BASE 0x11001000 +#define CONFIG_SPL_TEXT_BASE 0xf8f81000 +#define CONFIG_SPL_PAD_TO 0x18000 +#define CONFIG_SPL_MAX_SIZE (96 * 1024) +#define CONFIG_SYS_SPI_FLASH_U_BOOT_SIZE (512 << 10) +#define CONFIG_SYS_SPI_FLASH_U_BOOT_DST (0x11000000) +#define CONFIG_SYS_SPI_FLASH_U_BOOT_START (0x11000000) +#define CONFIG_SYS_SPI_FLASH_U_BOOT_OFFS (96 << 10) +#define CONFIG_SYS_MPC85XX_NO_RESETVEC +#define CONFIG_SYS_LDSCRIPT "arch/powerpc/cpu/mpc85xx/u-boot.lds" +#define CONFIG_SPL_SPI_BOOT +#ifdef CONFIG_SPL_BUILD +#define CONFIG_SPL_COMMON_INIT_DDR +#endif #endif #define CONFIG_NAND_FSL_ELBC
@@ -318,7 +340,7 @@* Config the L2 Cache as L2 SRAM */ #if defined(CONFIG_SPL_BUILD ) -#if defined(CONFIG_SDCARD ) +#if defined(CONFIG_SDCARD ) || defined(CONFIG_SPIFLASH )#define CONFIG_SYS_INIT_L2_ADDR 0xf8f80000#define CONFIG_SYS_INIT_L2_ADDR_PHYS CONFIG_SYS_INIT_L2_ADDR#define CONFIG_SYS_L2_SIZE (256 << 10)
@@ -562,7 +584,7 @@/* * Environment */ -#ifdef CONFIG_RAMBOOT_SPIFLASH +#ifdef CONFIG_SPIFLASH #define CONFIG_ENV_IS_IN_SPI_FLASH #define CONFIG_ENV_SPI_BUS 0#define CONFIG_ENV_SPI_CS 0
Signature · 1 line
1.7.0.4
PATCH v8 6/7 NAND: TPL : introduce the TPL based on the SPL
In reply to ying.zhang at freescale.comFrom: Ying Zhang <[email protected]>
Due to the nand SPL on some board(e.g. P1022DS)has a size limit, it can not be more than 4K. So, the SPL cannot initialize the DDR with the SPD code. This patch introduces TPL to enable a loader stub that is loaded by the code from the SPL. It initializes the DDR with the SPD or other operations.
The TPL's size is sizeable, the maximum size is decided by the memory's size that TPL runs. It initializes the DDR through SPD code, and copys final uboot image to DDR. So there are three stage uboot images:
* spl_boot, * tpl_boot, * final uboot image
This patch is on top of the patch:
SPL: Makefile: Build a separate autoconf.mk for SPL
---
Change from v7:
- Modify the doc/README.TPL
- Modify the spl/Makefile.
Change from v6:
- Modify the description of the patch.
- Add the separate the autoconf.mk for TPL.
- Delete the file tpl/Makefile and the directory tpl.
- Reuse the spl/Makefie in TPL.
Change from v5:
- Use ifdef to define "nand_load_image" to non-static for non-SPL. Change from v4:
- No change.
Change from v3:
- No change.
Change from v2:
- No change.
Change from v1:
- Split from "powerpc/p1022ds: nand: introduce the TPL based on the SPL".
Makefile | 44 +++++++++++++++++++++--- README | 9 +++++ config.mk | 17 +++++++++ doc/README.TPL | 71 +++++++++++++++++++++++++++++++++++++++ drivers/mtd/nand/Makefile | 1 + drivers/mtd/nand/fsl_elbc_spl.c | 5 ++- include/nand.h | 3 ++ spl/Makefile | 25 +++++++++++--- 8 files changed, 164 insertions(+), 11 deletions(-) create mode 100644 doc/README.TPL
Makefile +39 -5
@@ -413,6 +413,7 @@ ALL-y += $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map ALL-$(CONFIG_NAND_U_BOOT) += $(obj)u-boot-nand.bin ALL-$(CONFIG_ONENAND_U_BOOT) += $(obj)u-boot-onenand.bin ALL-$(CONFIG_SPL) += $(obj)spl/u-boot-spl.bin +ALL-$(CONFIG_TPL) += $(obj)spl/u-boot-tpl.bin ALL-$(CONFIG_OF_SEPARATE) += $(obj)u-boot.dtb $(obj)u-boot-dtb.bin ifneq ($(CONFIG_SPL_TARGET),) ALL-$(CONFIG_SPL) += $(obj)$(subst ",,$(CONFIG_SPL_TARGET))
@@ -492,12 +493,25 @@ $(obj)u-boot.dis: $(obj)u-boot $(OBJDUMP) -d $< > $@ - +ifdef CONFIG_TPL +$(obj)u-boot-with-spl.bin: $(obj)spl/u-boot-spl.bin $(obj)spl/u-boot-tpl.bin \ + $(obj)u-boot.bin + $(OBJCOPY) ${OBJCFLAGS} --pad-to=$(CONFIG_SPL_PAD_TO) \ + -I binary -O binary \ + $(obj)spl/u-boot-spl.bin $(obj)spl/u-boot-spl-pad.bin + $(OBJCOPY) ${OBJCFLAGS} --pad-to=$(CONFIG_SPL_PAD_TO) \ + -I binary -O binary \ + $(obj)spl/u-boot-tpl.bin $(obj)spl/u-boot-tpl-pad.bin + cat $(obj)spl/u-boot-spl-pad.bin $(obj)spl/u-boot-tpl-pad.bin \ + $(obj)u-boot.bin > $@ + rm $(obj)spl/u-boot-spl-pad.bin $(obj)spl/u-boot-tpl-pad.bin +else $(obj)u-boot-with-spl.bin: $(obj)spl/u-boot-spl.bin $(obj)u-boot.bin $(OBJCOPY) ${OBJCFLAGS} --pad-to=$(CONFIG_SPL_PAD_TO) \ -I binary -O binary $< $(obj)spl/u-boot-spl-pad.bin cat $(obj)spl/u-boot-spl-pad.bin $(obj)u-boot.bin > $@ rm $(obj)spl/u-boot-spl-pad.bin +endif $(obj)u-boot-with-spl.imx: $(obj)spl/u-boot-spl.bin $(obj)u-boot.bin $(MAKE) -C $(SRCTREE)/arch/arm/imx-common \
@@ -621,7 +635,12 @@ $(obj)u-boot-nand.bin: nand_spl $(obj)u-boot.bin cat $(obj)nand_spl/u-boot-spl-16k.bin $(obj)u-boot.bin > $(obj)u-boot-nand.bin $(obj)spl/u-boot-spl.bin: $(SUBDIR_TOOLS) depend - $(MAKE) -C spl all + $(MAKE) -C spl clean + $(MAKE) -C spl all CONFIG_SPL_BUILD=y + +$(obj)spl/u-boot-tpl.bin: $(SUBDIR_TOOLS) depend + $(MAKE) -C spl clean + $(MAKE) -C spl all CONFIG_TPL_BUILD=y CONFIG_SPL_BUILD=y updater: $(MAKE) -C tools/updater all
@@ -630,6 +649,7 @@ updater: # parallel sub-makes creating .depend files simultaneously. depend dep: $(TIMESTAMP_FILE) $(VERSION_FILE) \ $(obj)include/spl-autoconf.mk \ + $(obj)include/tpl-autoconf.mk \ $(obj)include/autoconf.mk \ $(obj)include/generated/generic-asm-offsets.h \ $(obj)include/generated/asm-offsets.h
@@ -704,8 +724,16 @@ $(obj)include/autoconf.mk: $(obj)include/config.h $(CPP) $(CFLAGS) -DDO_DEPS_ONLY -dM include/common.h | \ sed -n -f tools/scripts/define2mk.sed > [email protected] && \ mv [email protected] $@ - # Auto-generate the spl-autoconf.mk file (which is included by all makefiles for SPL) +$(obj)include/tpl-autoconf.mk: $(obj)include/config.h + @$(XECHO) Generating $@ ; \ + set -e ; \ + : Extract the config macros ; \ + $(CPP) $(CFLAGS) -DCONFIG_TPL_BUILD -DCONFIG_SPL_BUILD\ + -DDO_DEPS_ONLY -dM include/common.h | \ + sed -n -f tools/scripts/define2mk.sed > [email protected] && \ + mv [email protected] $@ + $(obj)include/spl-autoconf.mk: $(obj)include/config.h @$(XECHO) Generating $@ ; \ set -e ; \
@@ -716,12 +744,14 @@ $(obj)include/spl-autoconf.mk: $(obj)include/config.h $(obj)include/generated/generic-asm-offsets.h: $(obj)include/autoconf.mk.dep \ $(obj)include/spl-autoconf.mk \ + $(obj)include/tpl-autoconf.mk \ $(obj)lib/asm-offsets.s @$(XECHO) Generating $@ tools/scripts/make-asm-offsets $(obj)lib/asm-offsets.s $@ $(obj)lib/asm-offsets.s: $(obj)include/autoconf.mk.dep \ $(obj)include/spl-autoconf.mk \ + $(obj)include/tpl-autoconf.mk \ $(src)lib/asm-offsets.c @mkdir -p $(obj)lib $(CC) -DDO_DEPS_ONLY \
@@ -730,12 +760,14 @@ $(obj)lib/asm-offsets.s: $(obj)include/autoconf.mk.dep \ $(obj)include/generated/asm-offsets.h: $(obj)include/autoconf.mk.dep \ $(obj)include/spl-autoconf.mk \ + $(obj)include/tpl-autoconf.mk \ $(obj)$(CPUDIR)/$(SOC)/asm-offsets.s @$(XECHO) Generating $@ tools/scripts/make-asm-offsets $(obj)$(CPUDIR)/$(SOC)/asm-offsets.s $@ $(obj)$(CPUDIR)/$(SOC)/asm-offsets.s: $(obj)include/autoconf.mk.dep \ - $(obj)include/spl-autoconf.mk + $(obj)include/spl-autoconf.mk \ + $(obj)include/tpl-autoconf.mk @mkdir -p $(obj)$(CPUDIR)/$(SOC) if [ -f $(src)$(CPUDIR)/$(SOC)/asm-offsets.c ];then \ $(CC) -DDO_DEPS_ONLY \
@@ -808,7 +840,8 @@ unconfig: @rm -f $(obj)include/config.h $(obj)include/config.mk \ $(obj)board/*/config.tmp $(obj)board/*/*/config.tmp \ $(obj)include/autoconf.mk $(obj)include/autoconf.mk.dep \ - $(obj)include/spl-autoconf.mk + $(obj)include/spl-autoconf.mk \ + $(obj)include/tpl-autoconf.mk %_config:: unconfig @$(MKCONFIG) -A $(@:_config=)
@@ -894,6 +927,7 @@ clobber: tidy @rm -f $(obj)nand_spl/{u-boot-nand_spl.lds,u-boot-spl,u-boot-spl.map} @rm -f $(obj)spl/{u-boot-spl,u-boot-spl.bin,u-boot-spl.map} @rm -f $(obj)spl/u-boot-spl.lds + @rm -f $(obj)spl/{u-boot-tpl,u-boot-tpl.bin,u-boot-tpl.map} @rm -f $(obj)MLO MLO.byteswap @rm -f $(obj)SPL @rm -f $(obj)tools/xway-swap-bytes
README +9 -0
@@ -3092,6 +3092,10 @@ FIT uImage format: option to re-enable it. This will affect the output of the bootm command when booting a FIT image. +- TPL framework + CONFIG_TPL + Enable building of TPL globally. + Modem Support: --------------
@@ -4129,6 +4133,11 @@ Low Level (hardware related) configuration options: that is executed before the actual U-Boot. E.g. when compiling a NAND SPL. +- CONFIG_TPL_BUILD + Modifies the behaviour of start.S when compiling a loader + that is executed after the SPL and before the actual U-Boot. + It is loaded by the SPL. + - CONFIG_SYS_MPC85XX_NO_RESETVEC Only for 85xx systems. If this variable is specified, the section .resetvec is not kept and the section .bootpg is placed in the
config.mk +17 -0
@@ -161,6 +161,10 @@ CHECK = sparse ######################################################################### # Load generated board configuration +ifeq ($(CONFIG_TPL_BUILD),y) +# Include TPL autoconf +sinclude $(OBJTREE)/include/tpl-autoconf.mk +else ifeq ($(CONFIG_SPL_BUILD),y) # Include SPL autoconf sinclude $(OBJTREE)/include/spl-autoconf.mk
@@ -168,6 +172,7 @@ else # Include normal autoconf sinclude $(OBJTREE)/include/autoconf.mk endif +endif sinclude $(OBJTREE)/include/config.mk # Some architecture config.mk files need to know what CPUDIR is set to,
@@ -239,6 +244,9 @@ endif ifeq ($(CONFIG_SPL_BUILD),y) CPPFLAGS += -DCONFIG_SPL_BUILD +ifeq ($(CONFIG_TPL_BUILD),y) +CPPFLAGS += -DCONFIG_TPL_BUILD +endif endif # Does this architecture support generic board init?
@@ -310,10 +318,19 @@ ifneq ($(CONFIG_SYS_TEXT_BASE),) LDFLAGS_u-boot += -Ttext $(CONFIG_SYS_TEXT_BASE) endif +ifeq ($(CONFIG_TPL_BUILD),y) +LDFLAGS_u-boot-tpl += -T $(obj)u-boot-spl.lds $(LDFLAGS_FINAL) +ifneq ($(CONFIG_SPL_TEXT_BASE),) +LDFLAGS_u-boot-tpl += -Ttext $(CONFIG_SPL_TEXT_BASE) +endif +else +ifeq ($(CONFIG_SPL_BUILD),y) LDFLAGS_u-boot-spl += -T $(obj)u-boot-spl.lds $(LDFLAGS_FINAL) ifneq ($(CONFIG_SPL_TEXT_BASE),) LDFLAGS_u-boot-spl += -Ttext $(CONFIG_SPL_TEXT_BASE) endif +endif +endif # Linus' kernel sanity checking tool CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \
doc/README.TPL new file +71 -0
71 lines not on this page · raw message
drivers/mtd/nand/Makefile +1 -0
@@ -39,6 +39,7 @@ COBJS-$(CONFIG_SPL_NAND_SIMPLE) += nand_spl_simple.o COBJS-$(CONFIG_SPL_NAND_LOAD) += nand_spl_load.o COBJS-$(CONFIG_SPL_NAND_ECC) += nand_ecc.o COBJS-$(CONFIG_SPL_NAND_BASE) += nand_base.o +COBJS-$(CONFIG_SPL_NAND_INIT) += nand.o else # not spl
drivers/mtd/nand/fsl_elbc_spl.c +4 -1
@@ -47,7 +47,10 @@ static void nand_wait(void) } } -static int nand_load_image (uint32_t offs,unsigned int uboot_size,void *vdst) +#ifndef CONFIG_TPL_BUILD +static +#endif +int nand_load_image (uint32_t offs,unsigned int uboot_size,void *vdst) {fsl_lbc_t *regs =LBC_BASE_ADDR ;uchar *buf = (uchar *)CONFIG_SYS_NAND_BASE ;
include/nand.h +3 -0
@@ -153,6 +153,9 @@ int nand_unlock(nand_info_t *meminfo, loff_t start, size_t length,int nand_get_lock_status (nand_info_t *meminfo,loff_t offset);int nand_spl_load_image (uint32_t offs,unsigned int size,void *dst); +#ifdef CONFIG_TPL_BUILD +int nand_load_image (uint32_t offs,unsigned int uboot_size,void *vdst); +#endif void nand_deselect (void );#ifdef CONFIG_SYS_NAND_SELECT_DEVICE
spl/Makefile +20 -5
@@ -15,14 +15,27 @@ # Based on top-level Makefile. # -CONFIG_SPL_BUILD := y +ifeq ($(CONFIG_SPL_BUILD),y) export CONFIG_SPL_BUILD +endif +ifeq ($(CONFIG_TPL_BUILD),y) +export CONFIG_TPL_BUILD +FILENAME := u-boot-tpl +else +FILENAME := u-boot-spl +endif include $(TOPDIR)/config.mk # We want the final binaries in this directory obj := $(OBJTREE)/spl/ +clean: + @find $(obj) -type f \ + \( -name 'core' -o -name '*.bak' -o -name '*~' \ + -o -name '*.o' -o -name '*.a' \) -print \ + | xargs rm -f + HAVE_VENDOR_COMMON_LIB = $(if $(wildcard $(SRCTREE)/board/$(VENDOR)/common/Makefile),y,n) ifdef CONFIG_SPL_START_S_PATH
@@ -150,6 +163,7 @@ LDPPFLAGS += \ $(shell $(LD) --version | \ sed -ne 's/GNU ld version \([0-9][0-9]*\)\.\([0-9][0-9]*\).*/-DLD_MAJOR=\1 -DLD_MINOR=\2/p') +ifndef CONFIG_TPL_BUILD $(OBJTREE)/MLO: $(obj)u-boot-spl.bin $(OBJTREE)/tools/mkimage -T omapimage \ -a $(CONFIG_SPL_TEXT_BASE) -d $< $@
@@ -157,11 +171,12 @@ $(OBJTREE)/MLO: $(obj)u-boot-spl.bin $(OBJTREE)/MLO.byteswap: $(obj)u-boot-spl.bin $(OBJTREE)/tools/mkimage -T omapimage -n byteswap \ -a $(CONFIG_SPL_TEXT_BASE) -d $< $@ +endif $(OBJTREE)/SPL : $(obj)u-boot-spl.bin depend $(MAKE) -C $(SRCTREE)/arch/arm/imx-common $@ -ALL-y += $(obj)u-boot-spl.bin +ALL-y += $(obj)$(FILENAME).bin ifdef CONFIG_SAMSUNG ALL-y += $(obj)$(BOARD)-spl.bin
@@ -175,15 +190,15 @@ $(obj)$(BOARD)-spl.bin: $(obj)u-boot-spl.bin $(obj)u-boot-spl.bin $(obj)$(BOARD)-spl.bin endif -$(obj)u-boot-spl.bin: $(obj)u-boot-spl +$(obj)$(FILENAME).bin: $(obj)$(FILENAME) $(OBJCOPY) $(OBJCFLAGS) -O binary $< $@ GEN_UBOOT = \ cd $(obj) && $(LD) $(LDFLAGS) $(LDFLAGS_$(@F)) $(__START) \ --start-group $(__LIBS) --end-group $(PLATFORM_LIBS) \ - -Map u-boot-spl.map -o u-boot-spl + -Map $(FILENAME).map -o $(FILENAME) -$(obj)u-boot-spl: depend $(START) $(LIBS) $(obj)u-boot-spl.lds +$(obj)$(FILENAME): depend $(START) $(LIBS) $(obj)u-boot-spl.lds $(GEN_UBOOT) $(START): depend
Signature · 1 line
1.7.0.4
PATCH v8 6/7 NAND: TPL : introduce the TPL based on the SPL
Quoted 22 lines · ying.zhang at freescale.com
+ifdef
CONFIG_TPL+$(obj)u-boot-with-spl.bin: $(obj)spl/u-boot-spl.bin $(obj)spl/u-boot-tpl.bin \Makefile +4
-0+ $(obj)u-boot.bin + $(OBJCOPY) ${OBJCFLAGS} --pad-to=$(CONFIG_SPL_PAD_TO) \ + -I binary -O binary \ + $(obj)spl/u-boot-spl.bin$(obj)spl/u-boot-spl-pad.bin
Makefile +3
-0+ $(OBJCOPY) ${OBJCFLAGS} --pad-to=$(CONFIG_SPL_PAD_TO) \ + -I binary -O binary \ + $(obj)spl/u-boot-tpl.bin$(obj)spl/u-boot-tpl-pad.bin
(quoted diff) +1
-0+ cat $(obj)spl/u-boot-spl-pad.bin$(obj)spl/u-boot-tpl-pad.bin \
(quoted diff) +2
-0+ $(obj)u-boot.bin > $@ + rm $(obj)spl/u-boot-spl-pad.bin$(obj)spl/u-boot-tpl-pad.bin
Makefile +1
-0+else $(obj)u-boot-with-spl.bin: $(obj)spl/u-boot-spl.bin $(obj)u-boot.bin $(OBJCOPY) ${OBJCFLAGS} --pad-to=$(CONFIG_SPL_PAD_TO) \ -I binary -O binary $<$(obj)spl/u-boot-spl-pad.bin
Makefile $(obj)u-boot.dis: $(obj)u-boot · line 514
Quoted 3 lines
Makefile +1
-0cat $(obj)spl/u-boot-spl-pad.bin $(obj)u-boot.bin > $@ rm $(obj)spl/u-boot-spl-pad.bin +endif
Are you sure CONFIG_SPL_PAD_TO will always be the same for both stages?
How about something like:
# $@ is output, $(1) and $(2) are inputs, $(3) is padded intermediate, $(4) is pad-to
SPL_PAD_APPEND = \
$(OBJCOPY) ${OBJCFLAGS} --pad-to=$(4) -I binary -O
binary \
$(1) $(obj)$(3); \
cat $(obj)$(3) $(obj)$(2) > $@; \
rm $(obj)$(3)$(obj)u-boot-with-spl.bin: $(obj)spl/u-boot-spl.bin $(obj)tpl/u-boot-with-tpl.bin
$(call
SPL_PAD_APPEND,$<,u-boot-with-tpl.bin,spl/u-boot-spl-pad.bin,$(CONFIG_SPL_PAD_TO))
$(obj)u-boot-with-tpl.bin: $(obj)tpl/u-boot-tpl.bin $(obj)u-boot.bin
$(call
SPL_PAD_APPEND,$<,u-boot.bin,tpl/u-boot-tpl-pad.bin,$(CONFIG_TPL_PAD_TO))
Makefile $(obj)u-boot-nand.bin: nand_spl $(obj)u-boot.bin · line 643
Quoted 13 lines
(quoted diff) +0
-0@@ -621,7 +635,12 @@ $(obj)u-boot-nand.bin: nand_spl$(obj)u-boot.bin
cat $(obj)nand_spl/u-boot-spl-16k.bin
$(obj)u-boot.bin > $(obj)u-boot-nand.bin$(obj)spl/u-boot-spl.bin: $(SUBDIR_TOOLS) depend
Makefile +6
-1- $(MAKE) -C spl all + $(MAKE) -C spl clean + $(MAKE) -C spl all CONFIG_SPL_BUILD=y + +$(obj)spl/u-boot-tpl.bin: $(SUBDIR_TOOLS) depend + $(MAKE) -C spl clean + $(MAKE) -C spl all CONFIG_TPL_BUILD=y CONFIG_SPL_BUILD=y
This will break in a parallel build, among other problems. Please use a separate tpl directory.
Quoted 4 lines
config.mk +3
-0+ifeq ($(CONFIG_TPL_BUILD),y) +LDFLAGS_u-boot-tpl += -T $(obj)u-boot-spl.lds $(LDFLAGS_FINAL) +ifneq ($(CONFIG_SPL_TEXT_BASE),)
config.mk ifneq ($(CONFIG_SYS_TEXT_BASE),) · line 333
Quoted 10 lines
config.mk +6
-0+LDFLAGS_u-boot-tpl += -Ttext $(CONFIG_SPL_TEXT_BASE) +endif +else +ifeq ($(CONFIG_SPL_BUILD),y) LDFLAGS_u-boot-spl += -T $(obj)u-boot-spl.lds $(LDFLAGS_FINAL) ifneq ($(CONFIG_SPL_TEXT_BASE),) LDFLAGS_u-boot-spl += -Ttext $(CONFIG_SPL_TEXT_BASE) endif +endif +endif
Why do we need separate LDFLAGS for SPL and TPL? It doesn't look like you define them any differently. Can you use $(SPL_BIN) (a.k.a. $(FILENAME)) here? Making sure to ifdef CONFIG_SPL_BUILD so that we don't define $(LDFLAGS_) in other contexts.
Quoted 86 lines
# Linus' kernel sanity checking tool
CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \doc/README.TPL new file +9
-0@@ -0,0 +1,71 @@ +Generic TPL framework +===================== + +Overview +-------- + +TPL---Third Program Loader. + +Due to the SPL on some boards(powerpc mpc85xx) has a size limit andcannot
+be compatible with all the external device(e.g. DDR). So add a tertiary
+program loader (TPL) to enable a loader stub loaded by the code from the
+SPL. It loads the final uboot image into DDR, then jump to it to begin
+execution. Now, only the powerpc mpc85xx has this requirement and willdoc/README.TPL new file +3
-0+implemente it. + +Keep consistent with SPL, with this framework almost all sourcefiles for a
+board can be reused. No code duplication or symlinking is necessary anymore.doc/README.TPL new file +5
-0+ +How it works +------------ + +There has been a directory TOPDIR/spl which contains only a
Makefile. It is
+shared by SPL and TPL. By the way, TPL will share something with SPL, suchdoc/README.TPL new file +4
-0+as options defined in the board config files. + +The object files are built separately for SPL/TPL and placed in this +directory. The final binaries which are generated areu-boot-{spl|tpl},
doc/README.TPL new file +3
-0+u-boot-{spl|tpl}.bin and u-boot-{spl|tpl}.map. + +During the TPL build a variable named CONFIG_TPL_BUILD is exportedin the
doc/README.TPL new file +2
-1+make environment and also appended to CPPFLAGS with -DCONFIG_TPL_BUILD. +Source files can be compiled for TPL with options choosed in theboard
doc/README.TPL new file +18
-0+config file, based on whether CONFIG_TPL_BUILD is set. + +For example: + +drivers/mtd/nand/Makefile: +COBJS-$(CONFIG_SPL_NAND_INIT) += nand.o + +CONFIG_SPL_NAND_INIT is set in the include/configs/P1022DS.h: +#ifdef CONFIG_TPL_BUILD +#define CONFIG_SPL_NAND_INIT +#endif + +The building of TPL images can be with: + +#define CONFIG_TPL + +Because TPL images normally have a different text base, one has to be +configured by defining CONFIG_SPL_TEXT_BASE. The linker script hasto be
+defined withCONFIG_SPL_LDSCRIPT. Likewise, these symbols are all shared
+with SPL, base on whetherCONFIG_SPL_BUILDorCONFIG_TPL_BUILDis set.doc/README.TPL new file +2
-0+ +To support generic U-Boot libraries and drivers in the TPL binaryone can
doc/README.TPL new file +7
-0+optionally define CONFIG_SPL_XXX_SUPPORT. Currently following options +are supported: + +CONFIG_SPL_SLIBCOMMON_SUPPORT (common/libcommon.o) +CONFIG_SPL_LIBDISK_SUPPORT (disk/libdisk.o) +CONFIG_SPL_I2C_SUPPORT (drivers/i2c/libi2c.o) +CONFIG_SPL_GPIO_SUPPORT (drivers/gpio/libgpio.o)
doc/README.TPL line 71
Quoted 10 lines
doc/README.TPL new file +10
-0+CONFIG_SPL_MMC_SUPPORT (drivers/mmc/libmmc.o) +CONFIG_SPL_SERIAL_SUPPORT (drivers/serial/libserial.o) +CONFIG_SPL_SPI_FLASH_SUPPORT (drivers/mtd/spi/libspi_flash.o) +CONFIG_SPL_SPI_SUPPORT (drivers/spi/libspi.o) +CONFIG_SPL_FAT_SUPPORT (fs/fat/libfat.o) +CONFIG_SPL_LIBGENERIC_SUPPORT (lib/libgeneric.o) +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)
Please don't duplicate all this. Only talk about what's different from normal SPL.
drivers/mtd/nand/Makefile COBJS-$(CONFIG_SPL_NAND_SIMPLE) += nand_spl_simple.o · line 42
Quoted 9 lines
drivers/mtd/nand/Makefile +1
-0@@ -39,6 +39,7 @@ COBJS-$(CONFIG_SPL_NAND_SIMPLE) += nand_spl_simple.o COBJS-$(CONFIG_SPL_NAND_LOAD) += nand_spl_load.o COBJS-$(CONFIG_SPL_NAND_ECC) += nand_ecc.o COBJS-$(CONFIG_SPL_NAND_BASE) += nand_base.o +COBJS-$(CONFIG_SPL_NAND_INIT) += nand.o
Thank you for not reorganizing the makefile, but could you explain why you need nand.o when none of the other SPLs (even non-minimal) do? Why can't platform code call board_nand_init() directly? Where is nand_init() being called from?
Quoted 6 lines
include/nand.h +0
-0
include/nand.h int nand_unlock(nand_info_t *meminfo, loff_t · line 161
Quoted 9 lines
include/nand.h +3
-0@@ -153,6 +153,9 @@ int nand_unlock(nand_info_t *meminfo, loff_t start, size_t length, int nand_get_lock_status(nand_info_t *meminfo, loff_t offset);int nand_spl_load_image (uint32_t offs,unsigned int size,void *dst); +#ifdef CONFIG_TPL_BUILD +int nand_load_image (uint32_t offs,unsigned int uboot_size,void *vdst); +#endif void nand_deselect (void );
Don't ifdef prototypes. Plus, some other platforms may want this in other configurations.
include/nand.h
Quoted 3 lines
include/nand.h +2
-0+ifeq ($(CONFIG_SPL_BUILD),y) export CONFIG_SPL_BUILD +endif
Why is this conditional? Remember, we set CONFIG_SPL_BUILD regardless of whether we have CONFIG_TPL_BUILD.
In any case, is there any problem exporting variables that aren't defined? Isn't that a no-op (at most, affecting the behavior if the variable is defined in the future)?
include/nand.h
Quoted 8 lines
# We want the final binaries in this directory
obj := $(OBJTREE)/spl/include/nand.h +5
-0+clean: + @find $(obj) -type f \ + \( -name 'core' -o -name '*.bak' -o -name '*~' \ + -o -name '*.o' -o -name '*.a' \) -print \ + | xargs rm -f
What does this have to do with TPL?
include/nand.h $(OBJTREE)/MLO: $(obj)u-boot-spl.bin · line 174
Quoted 9 lines
include/nand.h +2
-0+ifndef CONFIG_TPL_BUILD $(OBJTREE)/MLO: $(obj)u-boot-spl.bin $(OBJTREE)/tools/mkimage -T omapimage \ -a $(CONFIG_SPL_TEXT_BASE) -d $< $@@@ -157,11 +171,12 @@ $(OBJTREE)/MLO: $(obj)u-boot-spl.bin $(OBJTREE)/MLO.byteswap: $(obj)u-boot-spl.bin $(OBJTREE)/tools/mkimage -T omapimage -n byteswap \ -a $(CONFIG_SPL_TEXT_BASE) -d $< $@ +endif
Is the ifndef really needed?
include/nand.h $(OBJTREE)/MLO: $(obj)u-boot-spl.bin · line 178
Quoted 5 lines
include/nand.h +1
-1$(OBJTREE)/SPL : $(obj)u-boot-spl.bin depend $(MAKE) -C $(SRCTREE)/arch/arm/imx-common $@ -ALL-y += $(obj)u-boot-spl.bin +ALL-y += $(obj)$(FILENAME).bin
The makefile deals with many filenames... could you be more specific with something like $(SPL_NAME)?
-Scott
PATCH v8 6/7 NAND: TPL : introduce the TPL based on the SPL
-----Original Message-----
From: Wood Scott-B07421
Sent: Tuesday, July 16, 2013 7:56 AM
To: Zhang Ying-B40530
Cc: u-boot at lists.denx.de; afleming at gmail.com; Xie Xiaobo-R63061; Zhang Ying-B40530
Subject: Re: [PATCH 6/7 v8] NAND: TPL : introduce the TPL based on the SPL
Quoted 22 lines · ying.zhang at freescale.com
+ifdef
CONFIG_TPL+$(obj)u-boot-with-spl.bin: $(obj)spl/u-boot-spl.bin $(obj)spl/u-boot-tpl.bin \Makefile +4
-0+ $(obj)u-boot.bin + $(OBJCOPY) ${OBJCFLAGS} --pad-to=$(CONFIG_SPL_PAD_TO) \ + -I binary -O binary \ + $(obj)spl/u-boot-spl.bin$(obj)spl/u-boot-spl-pad.bin
Makefile +3
-0+ $(OBJCOPY) ${OBJCFLAGS} --pad-to=$(CONFIG_SPL_PAD_TO) \ + -I binary -O binary \ + $(obj)spl/u-boot-tpl.bin$(obj)spl/u-boot-tpl-pad.bin
(quoted diff) +1
-0+ cat $(obj)spl/u-boot-spl-pad.bin$(obj)spl/u-boot-tpl-pad.bin \
(quoted diff) +2
-0+ $(obj)u-boot.bin > $@ + rm $(obj)spl/u-boot-spl-pad.bin$(obj)spl/u-boot-tpl-pad.bin
Makefile +1
-0+else $(obj)u-boot-with-spl.bin: $(obj)spl/u-boot-spl.bin $(obj)u-boot.bin $(OBJCOPY) ${OBJCFLAGS} --pad-to=$(CONFIG_SPL_PAD_TO) \ -I binary -O binary $<$(obj)spl/u-boot-spl-pad.bin
Makefile $(obj)u-boot.dis: $(obj)u-boot · line 514
Quoted 3 lines
Makefile +1
-0cat $(obj)spl/u-boot-spl-pad.bin $(obj)u-boot.bin > $@ rm $(obj)spl/u-boot-spl-pad.bin +endif
Are you sure CONFIG_SPL_PAD_TO will always be the same for both stages? [Zhang Ying]
It is not necessarily the same. Same here, because the nand block size is 128K. It doesn't matter that is not the same because CONFIG_SPL_PAD_TO is defined based on the CONFIG_TPL_BUILD.
How about something like:
# $@ is output, $(1) and $(2) are inputs, $(3) is padded intermediate, $(4) is pad-to
SPL_PAD_APPEND = \
$(OBJCOPY) ${OBJCFLAGS} --pad-to=$(4) -I binary -O binary \
$(1) $(obj)$(3); \
cat $(obj)$(3) $(obj)$(2) > $@; \
rm $(obj)$(3)$(obj)u-boot-with-spl.bin: $(obj)spl/u-boot-spl.bin $(obj)tpl/u-boot-with-tpl.bin
$(call
SPL_PAD_APPEND,$<,u-boot-with-tpl.bin,spl/u-boot-spl-pad.bin,$(CONFIG_SPL_PAD_TO))
$(obj)u-boot-with-tpl.bin: $(obj)tpl/u-boot-tpl.bin $(obj)u-boot.bin
$(call
SPL_PAD_APPEND,$<,u-boot.bin,tpl/u-boot-tpl-pad.bin,$(CONFIG_TPL_PAD_TO)) [Zhang Ying]
According to your advice, how to do for those don't have TPL?
Makefile $(obj)u-boot-nand.bin: nand_spl $(obj)u-boot.bin · line 643
Quoted 13 lines
(quoted diff) +0
-0@@ -621,7 +635,12 @@ $(obj)u-boot-nand.bin: nand_spl$(obj)u-boot.bin
cat $(obj)nand_spl/u-boot-spl-16k.bin $(obj)u-boot.bin >
$(obj)u-boot-nand.bin$(obj)spl/u-boot-spl.bin: $(SUBDIR_TOOLS) depend
Makefile +6
-1- $(MAKE) -C spl all + $(MAKE) -C spl clean + $(MAKE) -C spl all CONFIG_SPL_BUILD=y + +$(obj)spl/u-boot-tpl.bin: $(SUBDIR_TOOLS) depend + $(MAKE) -C spl clean + $(MAKE) -C spl all CONFIG_TPL_BUILD=y CONFIG_SPL_BUILD=y
This will break in a parallel build, among other problems. Please use a separate tpl directory. [Zhang Ying]
Ok.
Review
Quoted 10 lines
(quoted diff) +4
-0+ifeq ($(CONFIG_TPL_BUILD),y) +LDFLAGS_u-boot-tpl += -T $(obj)u-boot-spl.lds $(LDFLAGS_FINAL) ifneq +($(CONFIG_SPL_TEXT_BASE),) LDFLAGS_u-boot-tpl += -Ttext +$(CONFIG_SPL_TEXT_BASE) endif else ifeq ($(CONFIG_SPL_BUILD),y) LDFLAGS_u-boot-spl += -T $(obj)u-boot-spl.lds $(LDFLAGS_FINAL) ifneq($(CONFIG_SPL_TEXT_BASE),) LDFLAGS_u-boot-spl += -Ttext $(CONFIG_SPL_TEXT_BASE) endif
(quoted diff) +2
-0+endif +endif
Why do we need separate LDFLAGS for SPL and TPL? It doesn't look like you define them any differently. Can you use $(SPL_BIN) (a.k.a. $(FILENAME)) here? Making sure to ifdef CONFIG_SPL_BUILD so that we don't define $(LDFLAGS_) in other contexts. [Zhang Ying]
I think best to separate, even if they are the same. I can use $(SPL_BIN) or $(SPL_NAME) to rename it.
Quoted 84 lines
# Linus' kernel sanity checking tool
CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \doc/README.TPL new file +9
-0@@ -0,0 +1,71 @@ +Generic TPL framework +===================== + +Overview +-------- + +TPL---Third Program Loader. + +Due to the SPL on some boards(powerpc mpc85xx) has a size limit andcannot
+be compatible with all the external device(e.g. DDR). So add a tertiary
+program loader (TPL) to enable a loader stub loaded by the code from the
+SPL. It loads the final uboot image into DDR, then jump to it to begin
+execution. Now, only the powerpc mpc85xx has this requirement and willdoc/README.TPL new file +3
-0+implemente it. + +Keep consistent with SPL, with this framework almost all sourcefiles for a
+board can be reused. No code duplication or symlinking is necessary anymore.doc/README.TPL new file +5
-0+ +How it works +------------ + +There has been a directory TOPDIR/spl which contains only a
Makefile. It is
+shared by SPL and TPL. By the way, TPL will share something with SPL, suchdoc/README.TPL new file +4
-0+as options defined in the board config files. + +The object files are built separately for SPL/TPL and placed in this +directory. The final binaries which are generated areu-boot-{spl|tpl},
doc/README.TPL new file +3
-0+u-boot-{spl|tpl}.bin and u-boot-{spl|tpl}.map. + +During the TPL build a variable named CONFIG_TPL_BUILD is exportedin the
doc/README.TPL new file +2
-1+make environment and also appended to CPPFLAGS with -DCONFIG_TPL_BUILD. +Source files can be compiled for TPL with options choosed in theboard
doc/README.TPL new file +18
-0+config file, based on whether CONFIG_TPL_BUILD is set. + +For example: + +drivers/mtd/nand/Makefile: +COBJS-$(CONFIG_SPL_NAND_INIT) += nand.o + +CONFIG_SPL_NAND_INIT is set in the include/configs/P1022DS.h: +#ifdef CONFIG_TPL_BUILD +#define CONFIG_SPL_NAND_INIT +#endif + +The building of TPL images can be with: + +#define CONFIG_TPL + +Because TPL images normally have a different text base, one has to be +configured by defining CONFIG_SPL_TEXT_BASE. The linker script hasto be
+defined withCONFIG_SPL_LDSCRIPT. Likewise, these symbols are all shared
+with SPL, base on whetherCONFIG_SPL_BUILDorCONFIG_TPL_BUILDis set.doc/README.TPL new file +2
-0+ +To support generic U-Boot libraries and drivers in the TPL binaryone can
doc/README.TPL new file +6
-0+optionally define CONFIG_SPL_XXX_SUPPORT. Currently following options +are supported: + +CONFIG_SPL_SLIBCOMMON_SUPPORT (common/libcommon.o) +CONFIG_SPL_LIBDISK_SUPPORT (disk/libdisk.o) CONFIG_SPL_I2C_SUPPORT +(drivers/i2c/libi2c.o) CONFIG_SPL_GPIO_SUPPORT
doc/README.TPL line 71
Quoted 10 lines
doc/README.TPL new file +10
-0+(drivers/gpio/libgpio.o) CONFIG_SPL_MMC_SUPPORT +(drivers/mmc/libmmc.o) CONFIG_SPL_SERIAL_SUPPORT +(drivers/serial/libserial.o) CONFIG_SPL_SPI_FLASH_SUPPORT +(drivers/mtd/spi/libspi_flash.o) CONFIG_SPL_SPI_SUPPORT +(drivers/spi/libspi.o) CONFIG_SPL_FAT_SUPPORT (fs/fat/libfat.o) +CONFIG_SPL_LIBGENERIC_SUPPORT (lib/libgeneric.o) +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)
Please don't duplicate all this. Only talk about what's different from normal SPL. [Zhang Ying]
Refers to the CONFIG_SPL_*?
drivers/mtd/nand/Makefile COBJS-$(CONFIG_SPL_NAND_SIMPLE) += nand_spl_simple.o · line 42
Quoted 9 lines
drivers/mtd/nand/Makefile +1
-0@@ -39,6 +39,7 @@ COBJS-$(CONFIG_SPL_NAND_SIMPLE) += nand_spl_simple.o COBJS-$(CONFIG_SPL_NAND_LOAD) += nand_spl_load.o COBJS-$(CONFIG_SPL_NAND_ECC) += nand_ecc.o COBJS-$(CONFIG_SPL_NAND_BASE) += nand_base.o +COBJS-$(CONFIG_SPL_NAND_INIT) += nand.o
Thank you for not reorganizing the makefile, but could you explain why you need nand.o when none of the other SPLs (even non-minimal) do? Why can't platform code call board_nand_init() directly? Where is nand_init() being called from?
[Zhang Ying]
This can be deleted.
Quoted 6 lines
include/nand.h index 228d871..2aa7238 renamed from include/nand.h +0
-0100644
include/nand.h int nand_unlock(nand_info_t *meminfo, loff_t · line 161
Quoted 9 lines
include/nand.h +3
-0@@ -153,6 +153,9 @@ int nand_unlock(nand_info_t *meminfo, loff_t start, size_t length, int nand_get_lock_status(nand_info_t *meminfo,loff_t offset);int nand_spl_load_image (uint32_t offs,unsigned int size,void *dst); +#ifdef CONFIG_TPL_BUILD +int nand_load_image (uint32_t offs,unsigned int uboot_size,void *vdst); +#endif void nand_deselect (void );
Don't ifdef prototypes. Plus, some other platforms may want this in other configurations. [Zhang Ying]
Remove ifdef? If remove, there was error:
cmd_nand.c:889:12: error: conflicting types for 'nand_load_image'.
The function nand_load_image is defined in two files:
1. /common/cmd_nand.c:
static int nand_load_image(cmd_tbl_t *cmdtp, nand_info_t *nand,
ulong offset, ulong addr, char *cmd)
2. drivers/mtd/nand/fsl_elbc_spl.c
#ifndef CONFIG_TPL_BUILD
static
#endif
int nand_load_image(uint32_t offs, unsigned int uboot_size, void *vdst)
This function only is called by outside in TPL. So, there should ifdef.
include/nand.h
Quoted 3 lines
include/nand.h +2
-0+ifeq ($(CONFIG_SPL_BUILD),y) export CONFIG_SPL_BUILD +endif
Why is this conditional? Remember, we set CONFIG_SPL_BUILD regardless of whether we have CONFIG_TPL_BUILD.
In any case, is there any problem exporting variables that aren't defined? Isn't that a no-op (at most, affecting the behavior if the variable is defined in the future)? [Zhang Ying]
Ok, remove this ifeq.
include/nand.h
Quoted 8 lines
# We want the final binaries in this directory obj :=
$(OBJTREE)/spl/include/nand.h +5
-0+clean: + @find $(obj) -type f \ + \( -name 'core' -o -name '*.bak' -o -name '*~' \ + -o -name '*.o' -o -name '*.a' \) -print \ + | xargs rm -f
What does this have to do with TPL?
[Zhang Ying]
If share the directory spl, it is necessary. If create the new directory tpl, this is not useful.
include/nand.h $(OBJTREE)/MLO: $(obj)u-boot-spl.bin · line 174
Quoted 9 lines
include/nand.h +2
-0+ifndef CONFIG_TPL_BUILD $(OBJTREE)/MLO: $(obj)u-boot-spl.bin $(OBJTREE)/tools/mkimage -T omapimage \ -a $(CONFIG_SPL_TEXT_BASE) -d $< $@@@ -157,11 +171,12 @@ $(OBJTREE)/MLO: $(obj)u-boot-spl.bin $(OBJTREE)/MLO.byteswap: $(obj)u-boot-spl.bin $(OBJTREE)/tools/mkimage -T omapimage -n byteswap \ -a $(CONFIG_SPL_TEXT_BASE) -d $< $@ +endif
Is the ifndef really needed?
[Zhang Ying]
To be honest, this I don't know. But you said before: there's not even a user of MLO with TPL.
include/nand.h $(OBJTREE)/MLO: $(obj)u-boot-spl.bin · line 178
Quoted 5 lines
include/nand.h +1
-1$(OBJTREE)/SPL : $(obj)u-boot-spl.bin depend $(MAKE) -C $(SRCTREE)/arch/arm/imx-common $@ -ALL-y += $(obj)u-boot-spl.bin +ALL-y += $(obj)$(FILENAME).bin
The makefile deals with many filenames... could you be more specific with something like $(SPL_NAME)? [Zhang Ying]
OK.
-Scott
PATCH v8 6/7 NAND: TPL : introduce the TPL based on the SPL
Quoted 39 lines · On 07/16/2013 05:04:55 AM, Zhang Ying-B40530 wrote:
-----Original Message-----
From: Wood Scott-B07421
Sent: Tuesday, July 16, 2013 7:56 AM
To: Zhang Ying-B40530
Cc: u-boot at lists.denx.de; afleming at gmail.com; Xie Xiaobo-R63061; Zhang Ying-B40530
Subject: Re: [PATCH 6/7 v8] NAND: TPL : introduce the TPL based on the SPLQuoted 16 lines · ying.zhang at freescale.com
+ifdef
CONFIG_TPL+$(obj)u-boot-with-spl.bin: $(obj)spl/u-boot-spl.bin $(obj)spl/u-boot-tpl.bin \Makefile +4
-0+ $(obj)u-boot.bin + $(OBJCOPY) ${OBJCFLAGS} --pad-to=$(CONFIG_SPL_PAD_TO) \ + -I binary -O binary \ + $(obj)spl/u-boot-spl.bin$(obj)spl/u-boot-spl-pad.bin
Makefile +3
-0+ $(OBJCOPY) ${OBJCFLAGS} --pad-to=$(CONFIG_SPL_PAD_TO) \ + -I binary -O binary \ + $(obj)spl/u-boot-tpl.bin$(obj)spl/u-boot-tpl-pad.bin
(quoted diff) +1
-0+ cat $(obj)spl/u-boot-spl-pad.bin$(obj)spl/u-boot-tpl-pad.bin \
(quoted diff) +2
-0+ $(obj)u-boot.bin > $@ + rm $(obj)spl/u-boot-spl-pad.binQuoted 3 lines
$(obj)spl/u-boot-tpl-pad.bin
+else
$(obj)u-boot-with-spl.bin: $(obj)spl/u-boot-spl.bin$(obj)u-boot.bin
Makefile $(obj)u-boot.dis: $(obj)u-boot · line 514
Quoted 6 lines
(quoted diff) +0
-0$(OBJCOPY) ${OBJCFLAGS} --pad-to=$(CONFIG_SPL_PAD_TO) \ -I binary -O binary $<$(obj)spl/u-boot-spl-pad.bin
Makefile +1
-0cat $(obj)spl/u-boot-spl-pad.bin $(obj)u-boot.bin > $@ rm $(obj)spl/u-boot-spl-pad.bin +endif
Quoted 7 lines
Are you sure
CONFIG_SPL_PAD_TOwill always be the same for both stages?
[Zhang Ying]
It is not necessarily the same. Same here, because the nand block size is 128K. It doesn't matter that is not the same becauseCONFIG_SPL_PAD_TO
is defined based on theCONFIG_TPL_BUILD.
That doesn't work here, because we're not in spl/Makefile. How would the value of CONFIG_SPL_PAD_TO change between the rule for
Quoted 13 lines
How about something like:
# $@ is output, $(1) and $(2) are inputs, $(3) is padded intermediate, $(4) is pad-to
SPL_PAD_APPEND = \ $(OBJCOPY) ${OBJCFLAGS} --pad-to=$(4) -I binary -O binary \ $(1) $(obj)$(3); \ cat $(obj)$(3) $(obj)$(2) > $@; \ rm $(obj)$(3)$(obj)u-boot-with-spl.bin: $(obj)spl/u-boot-spl.bin $(obj)tpl/u-boot-with-tpl.bin
Quoted 8 lines
$(callSPL_PAD_APPEND,$<,u-boot-with-tpl.bin,spl/u-boot-spl-pad.bin,$(CONFIG_SPL_PAD_TO))
$(obj)u-boot-with-tpl.bin: $(obj)tpl/u-boot-tpl.bin $(obj)u-boot.bin
$(callSPL_PAD_APPEND,$<,u-boot.bin,tpl/u-boot-tpl-pad.bin,$(CONFIG_TPL_PAD_TO)) [Zhang Ying]
According to your advice, how to do for those don't have TPL?
They would use the rule for u-boot-with-spl.bin, and the TPL rule would be ignored. No ifdef needed.
Quoted 96 lines
Quoted 2 lines
# Linus' kernel sanity checking tool
CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__\
Quoted 14 lines
doc/README.TPL new file +9
-0@@ -0,0 +1,71 @@ +Generic TPL framework +===================== + +Overview +-------- + +TPL---Third Program Loader. + +Due to the SPL on some boards(powerpc mpc85xx) has a size limit andQuoted 4 lines
cannot
+be compatible with all the external device(e.g. DDR). So add a tertiary
+program loader (TPL) to enable a loader stub loaded by the codefrom
Quoted 19 lines
the
+SPL. It loads the final uboot image into DDR, then jump to it to begin
+execution. Now, only the powerpc mpc85xx has this requirement and willdoc/README.TPL new file +3
-0+implemente it. + +Keep consistent with SPL, with this framework almost all sourcefiles for a
+board can be reused. No code duplication or symlinking is necessary anymore.doc/README.TPL new file +5
-0+ +How it works +------------ + +There has been a directory TOPDIR/spl which contains only a
Makefile. It is
+shared by SPL and TPL. By the way, TPL will share something with SPL, suchdoc/README.TPL
Quoted 3 lines
doc/README.TPL new file +3
-0+as options defined in the board config files. + +The object files are built separately for SPL/TPL and placed inthis
Quoted 17 lines
+directory. The final binaries which are generated are u-boot-{spl|tpl},
doc/README.TPL new file +3
-0+u-boot-{spl|tpl}.bin and u-boot-{spl|tpl}.map. + +During the TPL build a variable named CONFIG_TPL_BUILD is exportedin the
doc/README.TPL new file +2
-1+make environment and also appended to CPPFLAGS with -DCONFIG_TPL_BUILD. +Source files can be compiled for TPL with options choosed in theboard
doc/README.TPL new file +7
-0+config file, based on whether CONFIG_TPL_BUILD is set. + +For example: + +drivers/mtd/nand/Makefile: +COBJS-$(CONFIG_SPL_NAND_INIT) += nand.o +doc/README.TPL
Quoted 10 lines
doc/README.TPL new file +10
-0+CONFIG_SPL_NAND_INIT is set in the include/configs/P1022DS.h: +#ifdef CONFIG_TPL_BUILD +#define CONFIG_SPL_NAND_INIT +#endif + +The building of TPL images can be with: + +#define CONFIG_TPL + +Because TPL images normally have a different text base, one has tobe
Quoted 10 lines
+configured by defining
CONFIG_SPL_TEXT_BASE. The linker script has to be
+defined withCONFIG_SPL_LDSCRIPT. Likewise, these symbols are all shared
+with SPL, base on whetherCONFIG_SPL_BUILDorCONFIG_TPL_BUILDis set.doc/README.TPL new file +2
-0+ +To support generic U-Boot libraries and drivers in the TPL binaryone can
+optionally defineCONFIG_SPL_XXX_SUPPORT. Currently followingoptions
Quoted 12 lines
doc/README.TPL new file +12
-0+are supported: + +CONFIG_SPL_SLIBCOMMON_SUPPORT (common/libcommon.o) +CONFIG_SPL_LIBDISK_SUPPORT (disk/libdisk.o) CONFIG_SPL_I2C_SUPPORT +(drivers/i2c/libi2c.o) CONFIG_SPL_GPIO_SUPPORT +(drivers/gpio/libgpio.o) CONFIG_SPL_MMC_SUPPORT +(drivers/mmc/libmmc.o) CONFIG_SPL_SERIAL_SUPPORT +(drivers/serial/libserial.o) CONFIG_SPL_SPI_FLASH_SUPPORT +(drivers/mtd/spi/libspi_flash.o) CONFIG_SPL_SPI_SUPPORT +(drivers/spi/libspi.o) CONFIG_SPL_FAT_SUPPORT (fs/fat/libfat.o) +CONFIG_SPL_LIBGENERIC_SUPPORT (lib/libgeneric.o) +CONFIG_SPL_POWER_SUPPORT (drivers/power/libpower.o)
Quoted 8 lines
doc/README.TPL line 71
Quoted 3 lines
doc/README.TPL new file +3
-0+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)Please don't duplicate all this. Only talk about what's different from normal SPL.
[Zhang Ying]
Refers to the CONFIG_SPL_*?
Mainly yes, but also to anything that is duplicated really. In fact, TPL should probably just be another paragraph in README.SPL that explains the additional mechanism.
Quoted 11 lines
Quoted 6 lines
include/nand.h index 228d871..2aa7238 renamed from include/nand.h +0
-0100644
include/nand.h +0
-0@@ -153,6 +153,9 @@ int nand_unlock(nand_info_t *meminfo, loff_tstart,
size_tlength, int nand_get_lock_status(nand_info_t*meminfo,
Quoted 3 lines
loff_toffset);int nand_spl_load_image(uint32_t offs, unsigned int size, void
*dst);
Quoted 12 lines
Quoted 6 lines
include/nand.h +2
-0+#ifdef CONFIG_TPL_BUILD +int nand_load_image(uint32_t offs, unsigned int uboot_size, void*vdst);
+#endif
voidnand_deselect(void);Don't ifdef prototypes. Plus, some other platforms may want this in other configurations.
[Zhang Ying]
Remove ifdef? If remove, there was error:
cmd_nand.c:889:12: error: conflicting types for 'nand_load_image'.
Hmm... In that case, please rename the function when built static.
Quoted 11 lines
The function
nand_load_imageis defined in two files:
1. /common/cmd_nand.c:
static int nand_load_image(cmd_tbl_t *cmdtp,nand_info_t*nand,
ulong offset, ulong addr, char *cmd)
2.drivers/mtd/nand/fsl_elbc_spl.c
#ifndefCONFIG_TPL_BUILD
static
#endif
intnand_load_image(uint32_t offs, unsigned int uboot_size, void *vdst)
Quoted 2 lines
This function only is called by outside in TPL. So, there should ifdef.
You're defining a function called "nand_load_image" ind include/nand.h. There's nothing eLBC-specific about that. It is entirely possible that another implementation will want to export that function in an ordinary SPL -- or even possibly in the main U-Boot image.
In fact, there's already a common definition for this, which is nand_spl_load_image(). Use that.
Quoted 6 lines
Quoted 6 lines
include/nand.h +1
-0+ifndef CONFIG_TPL_BUILD $(OBJTREE)/MLO: $(obj)u-boot-spl.bin $(OBJTREE)/tools/mkimage -T omapimage \ -a $(CONFIG_SPL_TEXT_BASE) -d $< $@@@ -157,11 +171,12 @@ $(OBJTREE)/MLO: $(obj)u-boot-spl.bin $(OBJTREE)/MLO.byteswap: $(obj)u-boot-spl.bin
Quoted 8 lines
include/nand.h $(OBJTREE)/MLO: $(obj)u-boot-spl.bin · line 174
Quoted 3 lines
include/nand.h +1
-0$(OBJTREE)/tools/mkimage -T omapimage -n byteswap \ -a $(CONFIG_SPL_TEXT_BASE) -d $< $@ +endifIs the ifndef really needed?
[Zhang Ying]
To be honest, this I don't know. But you said before: there's not even a user of MLO with TPL.
There's no harm in letting the rules sit there unused. There are a lot of other config symbols as well that MLO is not used with -- should we ifndef them all? :-)
-Scott
PATCH v8 6/7 NAND: TPL : introduce the TPL based on the SPL
-----Original Message-----
From: Wood Scott-B07421
Sent: Wednesday, July 17, 2013 2:07 AM
To: Zhang Ying-B40530
Cc: Wood Scott-B07421; u-boot at lists.denx.de; afleming at gmail.com; Xie Xiaobo-R63061
Subject: Re: [PATCH 6/7 v8] NAND: TPL : introduce the TPL based on the SPL
Quoted 25 lines · On 07/16/2013 05:04:55 AM, Zhang Ying-B40530 wrote:
-----Original Message-----
From: Wood Scott-B07421
Sent: Tuesday, July 16, 2013 7:56 AM
To: Zhang Ying-B40530
Cc: u-boot at lists.denx.de; afleming at gmail.com; Xie Xiaobo-R63061; Zhang Ying-B40530
Subject: Re: [PATCH 6/7 v8] NAND: TPL : introduce the TPL based on the SPLHow about something like:
# $@ is output, $(1) and $(2) are inputs, $(3) is padded intermediate, $(4) is pad-to
SPL_PAD_APPEND = \ $(OBJCOPY) ${OBJCFLAGS} --pad-to=$(4) -I binary -O binary \ $(1) $(obj)$(3); \ cat $(obj)$(3) $(obj)$(2) > $@; \ rm $(obj)$(3)$(obj)u-boot-with-spl.bin: $(obj)spl/u-boot-spl.bin $(obj)tpl/u-boot-with-tpl.bin
Quoted 8 lines
$(callSPL_PAD_APPEND,$<,u-boot-with-tpl.bin,spl/u-boot-spl-pad.bin,$(CONFIG_SPL_PAD_TO))
$(obj)u-boot-with-tpl.bin: $(obj)tpl/u-boot-tpl.bin $(obj)u-boot.bin
$(callSPL_PAD_APPEND,$<,u-boot.bin,tpl/u-boot-tpl-pad.bin,$(CONFIG_TPL_PAD_TO)) [Zhang Ying]
According to your advice, how to do for those don't have TPL?
They would use the rule for u-boot-with-spl.bin, and the TPL rule would be ignored. No ifdef needed.
[Zhang Ying]
But, Don't u-boot-with-spl.bin contain tpl/u-boot-with-tpl.bin in the following rule?
$(obj)u-boot-with-spl.bin: $(obj)spl/u-boot-spl.bin $(obj)tpl/u-boot-with-tpl.bin
$(call SPL_PAD_APPEND,$<,u-boot-with-tpl.bin,spl/u-boot-spl-pad.bin,$(CONFIG_SPL_PAD_TO))
Quoted 11 lines
Quoted 6 lines
include/nand.h index 228d871..2aa7238 renamed from include/nand.h +0
-0100644
include/nand.h +0
-0@@ -153,6 +153,9 @@ int nand_unlock(nand_info_t *meminfo, loff_tstart,
size_tlength, int nand_get_lock_status(nand_info_t*meminfo,
Quoted 3 lines
loff_toffset);int nand_spl_load_image(uint32_t offs, unsigned int size, void
*dst);
Quoted 12 lines
Quoted 6 lines
include/nand.h +2
-0+#ifdef CONFIG_TPL_BUILD +int nand_load_image(uint32_t offs, unsigned int uboot_size, void*vdst);
+#endif
voidnand_deselect(void);Don't ifdef prototypes. Plus, some other platforms may want this in other configurations.
[Zhang Ying]
Remove ifdef? If remove, there was error:
cmd_nand.c:889:12: error: conflicting types for 'nand_load_image'.
Hmm... In that case, please rename the function when built static.
Quoted 11 lines
The function
nand_load_imageis defined in two files:
1. /common/cmd_nand.c:
static int nand_load_image(cmd_tbl_t *cmdtp,nand_info_t*nand,
ulong offset, ulong addr, char *cmd)
2.drivers/mtd/nand/fsl_elbc_spl.c
#ifndefCONFIG_TPL_BUILD
static
#endif
intnand_load_image(uint32_t offs, unsigned int uboot_size, void *vdst)
Quoted 2 lines
This function only is called by outside in TPL. So, there should ifdef.
You're defining a function called "nand_load_image" ind include/nand.h. There's nothing eLBC-specific about that. It is entirely possible that another implementation will want to export that function in an ordinary SPL -- or even possibly in the main U-Boot image.
In fact, there's already a common definition for this, which is nand_spl_load_image(). Use that.
[Zhang Ying]
There has a prolem:nand_spl_simple.c: In function 'nand_init':
nand_spl_simple.c:265:2: error: too many arguments to function 'board_nand_init'
This because the functionality "board_nand_init" is called and parameter is not null, but board_nand_init prototype is declared to "void board_nand_init(void)".
In "include/nand.h":
#ifdef CONFIG_SYS_NAND_SELF_INIT
void board_nand_init(void);
int nand_register(int devnum);
#else
extern int board_nand_init(struct nand_chip *nand); #endif
There need ifdef CONFIG_SYS_NAND_SELF_INIT in nand_init(), it's ok?
#ifdef CONFIG_SYS_NAND_SELF_INIT
board_nand_init();
#else
board_nand_init(&nand_chip);#endif
PATCH v8 6/7 NAND: TPL : introduce the TPL based on the SPL
Quoted 56 lines · On 07/18/2013 04:48:58 AM, Zhang Ying-B40530 wrote:
-----Original Message-----
From: Wood Scott-B07421
Sent: Wednesday, July 17, 2013 2:07 AM
To: Zhang Ying-B40530
Cc: Wood Scott-B07421; u-boot at lists.denx.de; afleming at gmail.com; Xie Xiaobo-R63061
Subject: Re: [PATCH 6/7 v8] NAND: TPL : introduce the TPL based on the SPLQuoted 12 lines · On 07/16/2013 05:04:55 AM, Zhang Ying-B40530 wrote:
-----Original Message-----
From: Wood Scott-B07421
Sent: Tuesday, July 16, 2013 7:56 AM
To: Zhang Ying-B40530
Cc: u-boot at lists.denx.de; afleming at gmail.com; Xie Xiaobo-R63061; Zhang Ying-B40530
Subject: Re: [PATCH 6/7 v8] NAND: TPL : introduce the TPL based on the SPLQuoted 3 lines
How about something like:
# $@ is output, $(1) and $(2) are inputs, $(3) is padded
intermediate,
Quoted 8 lines
$(4) is pad-to
SPL_PAD_APPEND = \ $(OBJCOPY) ${OBJCFLAGS} --pad-to=$(4) -I binary -O binary \ $(1) $(obj)$(3); \ cat $(obj)$(3) $(obj)$(2) > $@; \ rm $(obj)$(3)Quoted 4 lines
$(obj)u-boot-with-spl.bin: $(obj)spl/u-boot-spl.bin $(obj)tpl/u-boot-with-tpl.bin
$(callSPL_PAD_APPEND,$<,u-boot-with-tpl.bin,spl/u-boot-spl-pad.bin,$(CONFIG_SPL_PAD_TO))
Quoted 4 lines
$(obj)u-boot-with-tpl.bin: $(obj)tpl/u-boot-tpl.bin $(obj)u-boot.bin
$(callSPL_PAD_APPEND,$<,u-boot.bin,tpl/u-boot-tpl-pad.bin,$(CONFIG_TPL_PAD_TO))
Quoted 2 lines
[Zhang Ying]
According to your advice, how to do for those don't have TPL?They would use the rule for u-boot-with-spl.bin, and the TPL rule would
be ignored. No ifdef needed.
[Zhang Ying]
But, Don't u-boot-with-spl.bin contain tpl/u-boot-with-tpl.bin in the following rule?
Quoted 4 lines
$(obj)u-boot-with-spl.bin: $(obj)spl/u-boot-spl.bin $(obj)tpl/u-boot-with-tpl.bin
$(callSPL_PAD_APPEND,$<,u-boot-with-tpl.bin,spl/u-boot-spl-pad.bin,$(CONFIG_SPL_PAD_TO))
Oh, right -- replace that with a variable that says what the SPL payload should be.
Quoted 14 lines
You're defining a function called "
nand_load_image" indinclude/nand.h. There's nothing eLBC-specific about that. It is entirely possible that another implementation will want to export that function in an ordinary SPL -- or even possibly in the main U-Boot image.In fact, there's already a common definition for this, which is
nand_spl_load_image(). Use that.
[Zhang Ying]
There has a prolem:nand_spl_simple.c: In function 'nand_init':
nand_spl_simple.c:265:2: error: too many arguments to function 'board_nand_init'
Quoted 4 lines
This because the functionality "
board_nand_init" is called and parameter is not null,
butboard_nand_initprototype is declared to "voidboard_nand_init(void)".
Whether board_nand_init() takes a parameter depends on whether CONFIG_SYS_NAND_SELF_INIT is defined. Apparently nand_spl_simple.c doesn't support CONFIG_SYS_NAND_SELF_INIT.
But I wasn't saying to use nand_spl_simple.c -- I was saying to use the same function name and arguments for nand_spl_load_image(). This would mean the caller of nand_spl_load_image() would be the same regardless of whether nand_spl_simple.c or fsl_elbc_spl.c is used.
Note that fsl_ifc_spl.c also uses nand_spl_load_image().
-Scott
PATCH v8 7/7 powerpc: p1022ds: add TPL for p1022ds nand boot
In reply to ying.zhang at freescale.comFrom: Ying Zhang <[email protected]>
TPL is introduced in the patch "NAND: TPL : introduce the TPL based on the SPL", here enable TPL for p1022ds nand boot.
---
Change from v7:
- No change.
Change from v6:
- Delete the file "board/freescale/p1022ds/tpl.c".
- Reuse the file "board/freescale/p1022ds/spl.c" in the TPL. Change from v5:
- Change functionality nand_load_image to nand_load, it is called in TPL. Change from v4:
- No change.
Change from v3:
- No change.
Change from v2:
- No change.
Change from v1:
- Split from "powerpc/p1022ds: nand: introduce the TPL based on the SPL".
board/freescale/p1022ds/spl.c | 15 +++++++ board/freescale/p1022ds/spl_minimal.c | 53 ++---------------------- include/configs/P1022DS.h | 70 ++++++++++++++++++++++++++------ 3 files changed, 77 insertions(+), 61 deletions(-)
board/freescale/p1022ds/spl.c +15 -0
@@ -101,21 +101,36 @@ void board_init_r(gd_t *gd, ulong dest_addr)get_clocks ();mem_malloc_init (CONFIG_SPL_RELOC_MALLOC_ADDR , \CONFIG_SPL_RELOC_MALLOC_SIZE ); +#ifndef CONFIG_SPL_NAND_BOOT env_init (); +#endif #ifdef CONFIG_SPL_MMC_BOOT mmc_initialize (bd);#endif /* relocate environment function pointers etc. */ +#ifdef CONFIG_SPL_NAND_BOOT +nand_load_image (CONFIG_ENV_OFFSET ,CONFIG_ENV_SIZE , + (uchar *)CONFIG_ENV_ADDR ); + gd->env_addr = (ulong)(CONFIG_ENV_ADDR ); + gd->env_valid =1 ; +#else env_relocate (); +#endif i2c_init (CONFIG_SYS_I2C_SPEED ,CONFIG_SYS_I2C_SLAVE ); gd->ram_size =initdram (0 ); +#ifdef CONFIG_SPL_NAND_BOOT +puts ("Tertiary program loader running in sram..." ); +#else puts ("Second program loader running in sram...\n" ); +#endif #ifdef CONFIG_SPL_MMC_BOOT mmc_boot ();#elif defined(CONFIG_SPL_SPI_BOOT )spi_boot (); +#elif defined(CONFIG_SPL_NAND_BOOT ) +nand_boot ();#endif }
board/freescale/p1022ds/spl_minimal.c +5 -48
77 lines not on this page · raw message
include/configs/P1022DS.h +57 -13
93 lines not on this page · raw message
Signature · 1 line
1.7.0.4