[PATCH v3 2/4] ARM: stm32: Factor out save_boot_params
Patrice CHOTARD
patrice.chotard at foss.st.com
Thu Jan 12 16:06:31 CET 2023
Hi Marek
I am preparing the next STM32 U-Boot pull request, during testing, buidlman is complaining with the following warning:
03: ARM: stm32: Factor out save_boot_params
arm: + stm32mp13
+../arch/arm/mach-stm32mp/boot_params.c: In function 'board_fdt_blob_setup':
+../arch/arm/mach-stm32mp/boot_params.c:20:35: error: implicit declaration of function 'get_stm32mp_bl2_dtb' [-Werror=implicit-function-declaration]
+ 20 | unsigned long nt_fw_dtb = get_stm32mp_bl2_dtb();
+ | ^~~~~~~~~~~~~~~~~~~
+cc1: all warnings being treated as errors
Same issue with stm32mp15_defconfig and stm32mp15_trusted_defconfig.
Regards
Patrice
On 1/4/23 10:00, Patrice CHOTARD wrote:
> Hi Marek
>
> On 12/7/22 20:24, Marek Vasut wrote:
>> The STM32MP15xx platform currently comes with two incompatible
>> implementations of save_boot_params() weak function override.
>> Factor the save_boot_params() implementation into common cpu.c
>> code and provide accessors to read out both ROM API table address
>> and DT address from any place in the code instead.
>>
>> Signed-off-by: Marek Vasut <marex at denx.de>
>> ---
>> Cc: Alexandru Gagniuc <mr.nuke.me at gmail.com>
>> Cc: Patrice Chotard <patrice.chotard at foss.st.com>
>> Cc: Patrick Delaunay <patrick.delaunay at foss.st.com>
>> ---
>> V2: Avoid #if CONFIG... , use if (CONFIG... instead
>> V3: No change
>> ---
>> arch/arm/mach-stm32mp/boot_params.c | 20 ++---------
>> arch/arm/mach-stm32mp/cpu.c | 35 +++++++++++++++++++
>> arch/arm/mach-stm32mp/ecdsa_romapi.c | 20 ++---------
>> .../arm/mach-stm32mp/include/mach/sys_proto.h | 3 ++
>> 4 files changed, 42 insertions(+), 36 deletions(-)
>>
>> diff --git a/arch/arm/mach-stm32mp/boot_params.c b/arch/arm/mach-stm32mp/boot_params.c
>> index e91ef1b2fc7..e40cca938ef 100644
>> --- a/arch/arm/mach-stm32mp/boot_params.c
>> +++ b/arch/arm/mach-stm32mp/boot_params.c
>> @@ -11,30 +11,14 @@
>> #include <asm/sections.h>
>> #include <asm/system.h>
>>
>> -/*
>> - * Force data-section, as .bss will not be valid
>> - * when save_boot_params is invoked.
>> - */
>> -static unsigned long nt_fw_dtb __section(".data");
>> -
>> -/*
>> - * Save the FDT address provided by TF-A in r2 at boot time
>> - * This function is called from start.S
>> - */
>> -void save_boot_params(unsigned long r0, unsigned long r1, unsigned long r2,
>> - unsigned long r3)
>> -{
>> - nt_fw_dtb = r2;
>> -
>> - save_boot_params_ret();
>> -}
>> -
>> /*
>> * Use the saved FDT address provided by TF-A at boot time (NT_FW_CONFIG =
>> * Non Trusted Firmware configuration file) when the pointer is valid
>> */
>> void *board_fdt_blob_setup(int *err)
>> {
>> + unsigned long nt_fw_dtb = get_stm32mp_bl2_dtb();
>> +
>> log_debug("%s: nt_fw_dtb=%lx\n", __func__, nt_fw_dtb);
>>
>> *err = 0;
>> diff --git a/arch/arm/mach-stm32mp/cpu.c b/arch/arm/mach-stm32mp/cpu.c
>> index 855fc755fe0..ee59866bb73 100644
>> --- a/arch/arm/mach-stm32mp/cpu.c
>> +++ b/arch/arm/mach-stm32mp/cpu.c
>> @@ -378,3 +378,38 @@ int arch_misc_init(void)
>>
>> return 0;
>> }
>> +
>> +/*
>> + * Without forcing the ".data" section, this would get saved in ".bss". BSS
>> + * will be cleared soon after, so it's not suitable.
>> + */
>> +static uintptr_t rom_api_table __section(".data");
>> +static uintptr_t nt_fw_dtb __section(".data");
>> +
>> +/*
>> + * The ROM gives us the API location in r0 when starting. This is only available
>> + * during SPL, as there isn't (yet) a mechanism to pass this on to u-boot. Save
>> + * the FDT address provided by TF-A in r2 at boot time. This function is called
>> + * from start.S
>> + */
>> +void save_boot_params(unsigned long r0, unsigned long r1, unsigned long r2,
>> + unsigned long r3)
>> +{
>> + if (IS_ENABLED(CONFIG_STM32_ECDSA_VERIFY))
>> + rom_api_table = r0;
>> +
>> + if (IS_ENABLED(CONFIG_TFABOOT))
>> + nt_fw_dtb = r2;
>> +
>> + save_boot_params_ret();
>> +}
>> +
>> +uintptr_t get_stm32mp_rom_api_table(void)
>> +{
>> + return rom_api_table;
>> +}
>> +
>> +uintptr_t get_stm32mp_bl2_dtb(void)
>> +{
>> + return nt_fw_dtb;
>> +}
>> diff --git a/arch/arm/mach-stm32mp/ecdsa_romapi.c b/arch/arm/mach-stm32mp/ecdsa_romapi.c
>> index 6156526253c..12b42b9d59c 100644
>> --- a/arch/arm/mach-stm32mp/ecdsa_romapi.c
>> +++ b/arch/arm/mach-stm32mp/ecdsa_romapi.c
>> @@ -24,26 +24,10 @@ struct ecdsa_rom_api {
>> uint32_t ecc_algo);
>> };
>>
>> -/*
>> - * Without forcing the ".data" section, this would get saved in ".bss". BSS
>> - * will be cleared soon after, so it's not suitable.
>> - */
>> -static uintptr_t rom_api_loc __section(".data");
>> -
>> -/*
>> - * The ROM gives us the API location in r0 when starting. This is only available
>> - * during SPL, as there isn't (yet) a mechanism to pass this on to u-boot.
>> - */
>> -void save_boot_params(unsigned long r0, unsigned long r1, unsigned long r2,
>> - unsigned long r3)
>> -{
>> - rom_api_loc = r0;
>> - save_boot_params_ret();
>> -}
>> -
>> static void stm32mp_rom_get_ecdsa_functions(struct ecdsa_rom_api *rom)
>> {
>> - uintptr_t verify_ptr = rom_api_loc + ROM_API_OFFSET_ECDSA_VERIFY;
>> + uintptr_t verify_ptr = get_stm32mp_rom_api_table() +
>> + ROM_API_OFFSET_ECDSA_VERIFY;
>>
>> rom->ecdsa_verify_signature = *(void **)verify_ptr;
>> }
>> diff --git a/arch/arm/mach-stm32mp/include/mach/sys_proto.h b/arch/arm/mach-stm32mp/include/mach/sys_proto.h
>> index f19a70e53e0..0d39b67178e 100644
>> --- a/arch/arm/mach-stm32mp/include/mach/sys_proto.h
>> +++ b/arch/arm/mach-stm32mp/include/mach/sys_proto.h
>> @@ -77,3 +77,6 @@ void stm32mp_misc_init(void);
>>
>> /* helper function: read data from OTP */
>> u32 get_otp(int index, int shift, int mask);
>> +
>> +uintptr_t get_stm32mp_rom_api_table(void);
>> +uintptr_t get_stm32mp_bl2_dtb(void);
>
> Reviewed-by: Patrice Chotard <patrice.chotard at foss.st.com>
>
> Thanks
> Patrice
More information about the U-Boot
mailing list