[PATCH v1 15/19] ARM: tegra: board2: add generic late init
Svyatoslav Ryhel
clamor95 at gmail.com
Thu Aug 24 07:41:46 CEST 2023
24 серпня 2023 р. 02:57:34 GMT+03:00, Simon Glass <sjg at google.com> написав(-ла):
>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].
This is definitely a nice suggestion, but I would rather dedicate this convertion a separate patchset since it will affect multiple files and functions across all mach-terga.
Best regards,
Svyatoslav R.
>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