Hi Simon,

On 2025-02-05 02:55, Simon Glass wrote:
> Add support for this new phase, which runs after TPL. It determines the
> state of the machine, then selects which SPL image to use. SDRAM init is
> then done in SPL, so that it is updatable.

I am still unsure how this makes it more updatable, what happen when
DRAM init fails and board freezes? Are we relying on e.g. a watchdog to
properly reset a frozen board and try next image?

> 
> Signed-off-by: Simon Glass <s...@chromium.org>
> ---
> 
>  arch/arm/include/asm/spl.h               |   1 +
>  arch/arm/mach-rockchip/Kconfig           |  25 +++++-
>  arch/arm/mach-rockchip/Makefile          |   6 +-
>  arch/arm/mach-rockchip/rk3399/Kconfig    |   9 ++
>  arch/arm/mach-rockchip/spl-boot-order.c  |   3 +-
>  arch/arm/mach-rockchip/spl.c             |   3 +
>  arch/arm/mach-rockchip/tpl.c             |   2 +-
>  arch/arm/mach-rockchip/u-boot-vpl-v8.lds | 107 +++++++++++++++++++++++
>  arch/arm/mach-rockchip/vpl.c             |  53 +++++++++++
>  common/spl/Kconfig                       |   1 +
>  10 files changed, 203 insertions(+), 7 deletions(-)
>  create mode 100644 arch/arm/mach-rockchip/u-boot-vpl-v8.lds
>  create mode 100644 arch/arm/mach-rockchip/vpl.c
> 

[snip]

> diff --git a/arch/arm/mach-rockchip/Kconfig b/arch/arm/mach-rockchip/Kconfig
> index 269c219a6f8..7e6e9411e79 100644
> --- a/arch/arm/mach-rockchip/Kconfig
> +++ b/arch/arm/mach-rockchip/Kconfig

[snip]

> @@ -455,7 +459,7 @@ config SPL_ROCKCHIP_BACK_TO_BROM
>  
>  config TPL_ROCKCHIP_BACK_TO_BROM
>       bool "TPL returns to bootrom"
> -     default y
> +     default y if !VPL
>       select ROCKCHIP_BROM_HELPER if !ROCKCHIP_RK3066
>       select TPL_BOOTROM_SUPPORT
>       depends on TPL
> @@ -496,6 +500,16 @@ config ROCKCHIP_EXTERNAL_TPL
>         Enable this option and build with ROCKCHIP_TPL=/path/to/ddr.bin to
>         include the external TPL in the image built by binman.
>  
> +config VPL_ROCKCHIP_COMMON_BOARD
> +     bool "Rockchip VPL common board file"
> +     depends on VPL
> +     default y
> +     help
> +       Rockchip SoCs have similar boot process, prefer to use TPL to start
> +       VPL, then ATF for DRAM init and back to bootrom, and SPL as Trust
> +       ATF/U-Boot loader. VPL common board is a basic VPL board init which
> +       can be shared for most SoCs to avoid copy-paste for different SoCs.

This help text is not correct, with VPL=y back to bootrom is not used
and TF-A is never used for DRAM init, only TPL/SPL or Rockchip TPL.

> +
>  config ROCKCHIP_BOOT_MODE_REG
>       hex "Rockchip boot mode flag register address"
>       help

[snip]

> diff --git a/arch/arm/mach-rockchip/spl-boot-order.c 
> b/arch/arm/mach-rockchip/spl-boot-order.c
> index 3dce9b30898..d580d4fc84c 100644
> --- a/arch/arm/mach-rockchip/spl-boot-order.c
> +++ b/arch/arm/mach-rockchip/spl-boot-order.c
> @@ -99,7 +99,8 @@ __weak const char *board_spl_was_booted_from(void)
>  void board_boot_order(u32 *spl_boot_list)
>  {
>       /* In case of no fdt (or only plat), use spl_boot_device() */
> -     if (!CONFIG_IS_ENABLED(OF_CONTROL) || CONFIG_IS_ENABLED(OF_PLATDATA)) {
> +     if (IS_ENABLED(CONFIG_VPL) || !CONFIG_IS_ENABLED(OF_CONTROL) ||
> +         CONFIG_IS_ENABLED(OF_PLATDATA)) {
>               spl_boot_list[0] = spl_boot_device();
>               return;
>       }

Another option could be to just skip spl-boot-order.o for VPL, the
default implementation should work as-is, not sure what is best.

Regards,
Jonas

> diff --git a/arch/arm/mach-rockchip/spl.c b/arch/arm/mach-rockchip/spl.c
> index f4d29bbdd17..305373a161c 100644
> --- a/arch/arm/mach-rockchip/spl.c
> +++ b/arch/arm/mach-rockchip/spl.c
> @@ -61,6 +61,9 @@ u32 spl_boot_device(void)
>  {
>       u32 boot_device = BOOT_DEVICE_MMC1;
>  
> +     if (IS_ENABLED(CONFIG_VPL))
> +             return BOOT_DEVICE_VBE;
> +
>  #if defined(CONFIG_TARGET_CHROMEBOOK_JERRY) || \
>               defined(CONFIG_TARGET_CHROMEBIT_MICKEY) || \
>               defined(CONFIG_TARGET_CHROMEBOOK_MINNIE) || \
> diff --git a/arch/arm/mach-rockchip/tpl.c b/arch/arm/mach-rockchip/tpl.c
> index 6b880f19f84..cc794a7dca2 100644
> --- a/arch/arm/mach-rockchip/tpl.c
> +++ b/arch/arm/mach-rockchip/tpl.c
> @@ -84,5 +84,5 @@ int board_return_to_bootrom(struct spl_image_info 
> *spl_image,
>  
>  u32 spl_boot_device(void)
>  {
> -     return BOOT_DEVICE_BOOTROM;
> +     return IS_ENABLED(CONFIG_VPL) ? BOOT_DEVICE_VBE : BOOT_DEVICE_BOOTROM;
>  }

[snip]

Reply via email to