[U-Boot] [PATCH] powerpc/p1022ds: nand: introduce the TPL based on the SPL

Zhang Ying-B40530 B40530 at freescale.com
Thu Jun 13 09:27:44 CEST 2013



-----Original Message-----
From: Wood Scott-B07421 
Sent: Thursday, June 13, 2013 6:29 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] powerpc/p1022ds: nand: introduce the TPL based on the SPL

On 06/09/2013 12:54:43 AM, ying.zhang at freescale.com wrote:
> From: Ying Zhang <b40530 at freescale.com>
> 
> Due to the nand SPL on the board 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 runs in the L2  
> SRAM,
> after being loaded by the code from the SPL. It initializes the DDR  
> with
> the SPD.
> 
> The TPL'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 three stage uboot images:
> 	* spl_boot, 4KB size, pad to 128K byte.
> 	* tpl_boot, 88K size, pad to 128K 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  
> 256KB.
> 	* final uboot image, size is variable depends on the functions
>         enabled.
> 
> This patch is on top of the patch:
> powerpc/p1022ds: boot from SD Card with SPL
> 
> Signed-off-by: Ying Zhang <b40530 at freescale.com>
> ---
>  Makefile                                           |   25 +++-
>  README                                             |   55 ++++++-
>  arch/powerpc/config.mk                             |    2 +
>  arch/powerpc/cpu/mpc85xx/spl_minimal.c             |   16 ++
>  arch/powerpc/cpu/mpc85xx/u-boot-tpl.lds            |   80 +++++++++
>  .../cpu/mpc8xxx/ddr/lc_common_dimm_params.c        |    4 +-
>  arch/powerpc/lib/Makefile                          |    2 +
>  board/freescale/p1022ds/Makefile                   |    3 +
>  board/freescale/p1022ds/spl_minimal.c              |   56 +------
>  board/freescale/p1022ds/tlb.c                      |    4 +-
>  board/freescale/p1022ds/tpl.c                      |  101  
> ++++++++++++
>  common/Makefile                                    |    9 +
>  common/cmd_nvedit.c                                |    8 +-
>  config.mk                                          |   32 ++++
>  doc/README.TPL                                     |   93 +++++++++++
>  drivers/mtd/nand/Makefile                          |    8 +
>  drivers/mtd/nand/fsl_elbc_tpl.c                    |  168  
> ++++++++++++++++++++
>  drivers/serial/serial.c                            |    2 +-
>  include/bootstage.h                                |    3 +-
>  include/configs/P1022DS.h                          |   75 +++++++--
>  tpl/Makefile                                       |  161  
> +++++++++++++++++++
>  21 files changed, 824 insertions(+), 83 deletions(-)
>  create mode 100644 arch/powerpc/cpu/mpc85xx/u-boot-tpl.lds
>  create mode 100644 board/freescale/p1022ds/tpl.c
>  create mode 100644 doc/README.TPL
>  create mode 100644 drivers/mtd/nand/fsl_elbc_tpl.c
>  create mode 100644 tpl/Makefile
> 
> diff --git a/README b/README
> index 7add6d4..04f9aa5 100644
> --- a/README
> +++ b/README
> @@ -2985,9 +2985,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
> +		CONFIG_COMMON_INIT_DDR
>  		Set for common ddr init with serial presence detect in
> -		SPL binary.
> +		SPL binary or TPL 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,
> @@ -3058,6 +3059,56 @@ 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.
> +
> +		CONFIG_TPL_LDSCRIPT
> +		LDSCRIPT for linking the TPL binary.
> +
> +		CONFIG_TPL_MAX_SIZE
> +		Maximum size of the TPL image (text, data, rodata, and
> +		linker lists sections), BSS excluded.
> +		When defined, the linker checks that the actual size  
> does
> +		not exceed it.
> +
> +		CONFIG_SPL_TEXT_BASE
> +		TEXT_BASE for linking the TPL binary.
> +
> +		CONFIG_TPL_LIBCOMMON_SUPPORT
> +		Support for common/libcommon.o in TPL binary
> +
> +		CONFIG_TPL_LIBDISK_SUPPORT
> +		Support for disk/libdisk.o in TPL binary
> +
> +		CONFIG_TPL_I2C_SUPPORT
> +		Support for drivers/i2c/libi2c.o in TPL binary
> +
> +		CONFIG_TPL_MPC8XXX_INIT_DDR_SUPPORT
> +		Set for the TPL on PPC mpc8xxx targets, support for
> +		arch/powerpc/cpu/mpc8xxx/ddr/libddr.o in TPL binary.
> +
> +		CONFIG_TPL_SERIAL_SUPPORT
> +		Support for drivers/serial/libserial.o in TPL binary
> +
> +		CONFIG_TPL_LIBGENERIC_SUPPORT
> +		Support for lib/libgeneric.o in TPL binary
> +
> +		CONFIG_TPL_ENV_SUPPORT
> +		Support for the environment operating in TPL binary
> +
> +		CONFIG_TPL_PAD_TO
> +		Image offset to which the TPL should be padded before  
> appending
> +		the TPL payload. By default, this is defined as
> +		CONFIG_TPL_MAX_SIZE, or 0 if CONFIG_TPL_MAX_SIZE is  
> undefined.
> +		CONFIG_TPL_PAD_TO must be either 0, meaning to append  
> the TPL
> +		payload without any padding, or >= CONFIG_TPL_MAX_SIZE.
> +
> +		CONFIG_TPL_TARGET
> +		Final target image containing SPL and payload.  Some  
> TPLs
> +		use an arch-specific makefile fragment instead, for
> +		example if more than one image needs to be produced.

Let's please not just duplicate all the SPL stuff with s/SPL/TPL/.  Now  
that the concept of a separate autoconf.mk is apparently less  
controversial than when I suggested it a while back, let's generalize  
it into multiple U-Boot phases, each of which has its own autoconf.mk.   
The same set of symbols would be used to build any phase (ideally  
including the main phase) -- the symbols would just be declared under  
different ifdefs.
[Zhang Ying] 
I know the concept of a separate autoconf.mk for multiple U-Boot phases.
If these symbols are only used in the C files, should do as you say.
But most of these symbols were used in the Makefile to contain the
Library. The patch "separate autoconf.mk" has not be merged, in this
case, they can only declared separately.


> diff --git a/arch/powerpc/cpu/mpc85xx/u-boot-tpl.lds  
> b/arch/powerpc/cpu/mpc85xx/u-boot-tpl.lds
> new file mode 100644
> index 0000000..344c325
> --- /dev/null
> +++ b/arch/powerpc/cpu/mpc85xx/u-boot-tpl.lds

What is different about this compared to every other 85xx linker script  
that justifies a separate copy?
[Zhang Ying] 
It was a little different from the u-boot-spl.lds:
There is no .resetvec in u-boot-tpl.lds and the start address of .text
is different.
if share, need to change the file name. It will be used by SPL and TPL.
I don't know whether someone will put forward different opinions.

> diff --git a/drivers/mtd/nand/fsl_elbc_tpl.c  
> b/drivers/mtd/nand/fsl_elbc_tpl.c
> new file mode 100644
> index 0000000..09868c4
> --- /dev/null
> +++ b/drivers/mtd/nand/fsl_elbc_tpl.c

...and here you duplicated an entire driver!
[Zhang Ying] 
There are two purposes to do so:
1. As mentioned above that u-boot-tpl.lds, if share, need to change 
the file name.
2. Make the functionality "nand_load" to non-static, because it will
be called by the external function to get the environment from the
nand flash.
Why use this? Because the common nand drivers need malloc the large
memory that large than the size of L2 SRAM(256K). There was unable
to use common nand drivers in the TPL.






More information about the U-Boot mailing list