Dear Marek,

> From: Marek Vasut <ma...@denx.de>
> Sent: mercredi 1 avril 2020 01:48
> 
> The AV96 board does exist in multiple variants. To cater for all of them, 
> implement
> board code handling. There are two GPIOs which code the type of the board, 
> read
> them out and use the value to pick the correct device tree from an fitImage.

Nice.
 
> Signed-off-by: Marek Vasut <ma...@denx.de>
> Cc: Manivannan Sadhasivam <manivannan.sadhasi...@linaro.org>
> Cc: Patrick Delaunay <patrick.delau...@st.com>
> Cc: Patrice Chotard <patrice.chot...@st.com>
> ---
>  arch/arm/dts/stm32mp15xx-dhcor-u-boot.dtsi |  9 +++
>  arch/arm/mach-stm32mp/spl.c                |  2 +-
>  board/dhelectronics/dh_stm32mp1/board.c    | 84 ++++++++++++++++++++++
>  board/dhelectronics/dh_stm32mp1/u-boot.its | 39 ++++++++++
>  configs/stm32mp15_dhcor_basic_defconfig    |  3 +
>  5 files changed, 136 insertions(+), 1 deletion(-)  create mode 100644
> board/dhelectronics/dh_stm32mp1/u-boot.its
> 

[...]

> diff --git a/arch/arm/mach-stm32mp/spl.c b/arch/arm/mach-stm32mp/spl.c index
> ca4231cd0d..5461572090 100644
> --- a/arch/arm/mach-stm32mp/spl.c
> +++ b/arch/arm/mach-stm32mp/spl.c
> @@ -76,7 +76,7 @@ void spl_display_print(void)  }  #endif
> 
> -void board_init_f(ulong dummy)
> +__weak void board_init_f(ulong dummy)
>  {
>       struct udevice *dev;
>       int ret;
> diff --git a/board/dhelectronics/dh_stm32mp1/board.c
> b/board/dhelectronics/dh_stm32mp1/board.c
> index a3458a2623..36b8652521 100644
> --- a/board/dhelectronics/dh_stm32mp1/board.c
> +++ b/board/dhelectronics/dh_stm32mp1/board.c
> @@ -133,6 +133,90 @@ int checkboard(void)
>       return 0;
>  }

It is really need to add weak and duplicate all this function ?

Is it possible to define a weak function called just before DDR init ?

As board_early_init_f for example....done in mach-rockchip/spl.c
Or at91_spl_board_init() in mach-at91/spl_at91.c

In ./arch/arm/mach-stm32mp/spl.c

+__weak int board_early_init_f(void)
+{
+       return 0;
+}

void board_init_f(ulong dummy)
{
        struct udevice *dev;
        int ret;

        arch_cpu_init();

[....]
        /* enable console uart printing */
        preloader_console_init();

+       board_early_init_f();

        ret = uclass_get_device(UCLASS_RAM, 0, &dev);
        if (ret) {
                printf("DRAM init failed: %d\n", ret);
                hang();
        }
}

[....]

> +
> +void board_init_f(ulong dummy)
> +{
> +     struct udevice *dev;
> +     int ret;
> +
> +     arch_cpu_init();

[....]

> +
> +     /* enable console uart printing */
> +     preloader_console_init();
> +
> +     board_get_coding_straps();
> +
> +     ret = uclass_get_device(UCLASS_RAM, 0, &dev);
> +     if (ret) {
> +             printf("DRAM init failed: %d\n", ret);
> +             hang();
> +     }
> +}

With my proposal:


__weak int board_early_init_f(void)
{
        board_get_coding_straps();

        return 0;
}

> +#ifdef CONFIG_SPL_LOAD_FIT
> +int board_fit_config_name_match(const char *name) {
> +     if (somcode == 0 && !strcmp(name, "586-100"))
> +             return 0;
> +
> +     return -EINVAL;
> +}
> +#endif
> +#endif
> +
>  static void board_key_check(void)
>  {
>  #if defined(CONFIG_FASTBOOT) || defined(CONFIG_CMD_STM32PROG) diff --
> git a/board/dhelectronics/dh_stm32mp1/u-boot.its
> b/board/dhelectronics/dh_stm32mp1/u-boot.its
> new file mode 100644
> index 0000000000..3ca3036f7e
> --- /dev/null
> +++ b/board/dhelectronics/dh_stm32mp1/u-boot.its

[...]

> diff --git a/configs/stm32mp15_dhcor_basic_defconfig
> b/configs/stm32mp15_dhcor_basic_defconfig
> index 97e95bde7d..6c5ca31f40 100644
> --- a/configs/stm32mp15_dhcor_basic_defconfig
> +++ b/configs/stm32mp15_dhcor_basic_defconfig
> @@ -11,7 +11,10 @@ CONFIG_SPL_SPI_SUPPORT=y
>  CONFIG_SPL_TEXT_BASE=0x2FFC2500
>  CONFIG_DISTRO_DEFAULTS=y
>  CONFIG_FIT=y
> +CONFIG_SPL_LOAD_FIT=y
> +CONFIG_SPL_FIT_SOURCE="board/dhelectronics/dh_stm32mp1/u-boot.its"
>  CONFIG_BOOTCOMMAND="run bootcmd_stm32mp"
> +CONFIG_SPL_LEGACY_IMAGE_SUPPORT=y
>  CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION=y
>  CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION=3
>  CONFIG_SPL_I2C_SUPPORT=y

To include the needed target in "make all" you can also add

+ CONFIG_BUILD_TARGET="u-boot.itb"

Or change default in Kconfig (add ARCH_STM32MP for SPL_LOAD_FIT case)

> --
> 2.25.1

Regards

Patrick

Reply via email to