[PATCH v1 15/19] ARM: tegra: board2: add generic late init

Simon Glass sjg at google.com
Thu Aug 24 01:57:34 CEST 2023


Hi Svyatoslav,

On Tue, 22 Aug 2023 at 05:25, Svyatoslav Ryhel <clamor95 at 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 <hedmoo at yahoo.com> # ASUS Transformers
> Tested-by: Svyatoslav Ryhel <clamor95 at gmail.com> # Nvidia Tegratab
> Signed-off-by: Svyatoslav Ryhel <clamor95 at 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


More information about the U-Boot mailing list