Hi Svyatoslav, On Tue, 22 Aug 2023 at 05:25, Svyatoslav Ryhel <clamo...@gmail.com> wrote: > > Board specific late init allows vendors to set up different device > or board specific env variables (like serial number, platform name). > In case this information is missing, u-boot will lack info regards > serial or platform. > > To avoid this prior nvidia_board_late_init internal generic function > is called which fills required data. In this case platform name is > obtained from get_chip and serialno is filled with SoC id. > > Though SoC id is not dedicated to be devices serial but it fits well > in case of restriction of data about device and since SoC is basically > a main chip of the device. > > Tested-by: Andreas Westman Dorcsak <hed...@yahoo.com> # ASUS Transformers > Tested-by: Svyatoslav Ryhel <clamo...@gmail.com> # Nvidia Tegratab > Signed-off-by: Svyatoslav Ryhel <clamo...@gmail.com> > --- > arch/arm/mach-tegra/board2.c | 43 ++++++++++++++++++++++++++++++++++++ > 1 file changed, 43 insertions(+) > > diff --git a/arch/arm/mach-tegra/board2.c b/arch/arm/mach-tegra/board2.c > index 981768bb0e..ee69cb657a 100644 > --- a/arch/arm/mach-tegra/board2.c > +++ b/arch/arm/mach-tegra/board2.c > @@ -26,6 +26,10 @@ > #include <asm/arch-tegra/gpu.h> > #include <asm/arch-tegra/usb.h> > #include <asm/arch-tegra/xusb-padctl.h> > +#ifndef CONFIG_TEGRA186 > +#include <asm/arch-tegra/fuse.h> > +#include <asm/arch/gp_padctrl.h> > +#endif > #if IS_ENABLED(CONFIG_TEGRA_CLKRST) > #include <asm/arch/clock.h> > #endif > @@ -256,6 +260,37 @@ int board_early_init_f(void) > } > #endif /* EARLY_INIT */ > > +#ifndef CONFIG_TEGRA186 > +static void nvidia_board_late_init_generic(void) > +{ > + char serialno_str[17]; > + > + /* Set chip id as serialno */ > + sprintf(serialno_str, "%016llx", tegra_chip_uid()); > + env_set("serial#", serialno_str); > + > + switch (tegra_get_chip()) { > + case CHIPID_TEGRA20: > + env_set("platform", "Tegra 2 T20"); > + break; > + case CHIPID_TEGRA30: > + env_set("platform", "Tegra 3 T30"); > + break; > + case CHIPID_TEGRA114: > + env_set("platform", "Tegra 4 T114"); > + break; > + case CHIPID_TEGRA124: > + env_set("platform", "Tegra K1 T124"); > + break; > + case CHIPID_TEGRA210: > + env_set("platform", "Tegra X1 T210"); > + break; > + default: > + return; > + } > +} > +#endif > + > int board_late_init(void) > { > #if defined(CONFIG_TEGRA_SUPPORT_NON_SECURE) > @@ -268,6 +303,14 @@ int board_late_init(void) > #endif > start_cpu_fan(); > cboot_late_init(); > + > + /* > + * Perform generic env setup in case > + * vendor does not provide it. > + */ > +#ifndef CONFIG_TEGRA186 > + nvidia_board_late_init_generic(); > +#endif > nvidia_board_late_init(); > > return 0; > -- > 2.39.2 >
This would be better done with events. I just sent a series that converts board_late_init() to use events [1] and with that you can add as many 'spy' functions as you like [2]. Regards, Simon [1] https://patchwork.ozlabs.org/project/uboot/list/?series=369742 [2] https://u-boot.readthedocs.io/en/latest/develop/event.html