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