[PATCH 1/4] [RFC] ARM: stm32: Implement board coding on AV96
Patrick DELAUNAY
patrick.delaunay at st.com
Tue Apr 7 09:51:19 CEST 2020
Dear Marek,
> From: Marek Vasut <marex at 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 <marex at denx.de>
> Cc: Manivannan Sadhasivam <manivannan.sadhasivam at linaro.org>
> Cc: Patrick Delaunay <patrick.delaunay at st.com>
> Cc: Patrice Chotard <patrice.chotard at 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
More information about the U-Boot
mailing list