Hi Patrick

On 9/6/22 18:53, Patrick Delaunay wrote:
> As the SMC is only supported in SP-MIN for STM32MP15x, the associated
> partition should be absent when the TA NVMEM is not available in OPT-TEE
> in STM32MP13x.
> 
> Signed-off-by: Patrick Delaunay <patrick.delau...@foss.st.com>
> ---
> 
>  .../mach-stm32mp/cmd_stm32prog/stm32prog.c    | 25 +++++++++++++------
>  .../mach-stm32mp/cmd_stm32prog/stm32prog.h    |  5 ++++
>  2 files changed, 22 insertions(+), 8 deletions(-)
> 
> diff --git a/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog.c 
> b/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog.c
> index 67be1ac7ff8..b151ce10475 100644
> --- a/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog.c
> +++ b/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog.c
> @@ -1342,10 +1342,22 @@ static int dfu_init_entities(struct stm32prog_data 
> *data)
>       struct stm32prog_part_t *part;
>       struct dfu_entity *dfu;
>       int alt_nb;
> +     u32 otp_size = 0;
>  
>       alt_nb = 1; /* number of virtual = CMD*/
> -     if (IS_ENABLED(CONFIG_CMD_STM32PROG_OTP))
> -             alt_nb++; /* OTP*/
> +
> +     if (IS_ENABLED(CONFIG_CMD_STM32PROG_OTP)) {
> +             /* OTP_SIZE_SMC = 0 if SMC is not supported */
> +             otp_size = OTP_SIZE_SMC;
> +             /* check if PTA BSEC is supported */
> +             ret = optee_ta_open(data);
> +             log_debug("optee_ta_open(PTA_NVMEM) result %d\n", ret);
> +             if (!ret && data->tee)
> +                     otp_size = OTP_SIZE_TA;
> +             if (otp_size)
> +                     alt_nb++; /* OTP*/
> +     }
> +
>       if (CONFIG_IS_ENABLED(DM_PMIC))
>               alt_nb++; /* PMIC NVMEM*/
>  
> @@ -1363,6 +1375,7 @@ static int dfu_init_entities(struct stm32prog_data 
> *data)
>       puts("DFU alt info setting: ");
>       if (data->part_nb) {
>               alt_id = 0;
> +             ret = 0;
>               for (phase = 1;
>                    (phase <= PHASE_LAST_USER) &&
>                    (alt_id < alt_nb) && !ret;
> @@ -1396,12 +1409,8 @@ static int dfu_init_entities(struct stm32prog_data 
> *data)
>       if (!ret)
>               ret = stm32prog_alt_add_virt(dfu, "virtual", PHASE_CMD, 
> CMD_SIZE);
>  
> -     if (!ret && IS_ENABLED(CONFIG_CMD_STM32PROG_OTP)) {
> -             ret = optee_ta_open(data);
> -             log_debug("optee_ta result %d\n", ret);
> -             ret = stm32prog_alt_add_virt(dfu, "OTP", PHASE_OTP,
> -                                          data->tee ? OTP_SIZE_TA : 
> OTP_SIZE_SMC);
> -     }
> +     if (!ret && IS_ENABLED(CONFIG_CMD_STM32PROG_OTP) && otp_size)
> +             ret = stm32prog_alt_add_virt(dfu, "OTP", PHASE_OTP, otp_size);
>  
>       if (!ret && CONFIG_IS_ENABLED(DM_PMIC))
>               ret = stm32prog_alt_add_virt(dfu, "PMIC", PHASE_PMIC, 
> PMIC_SIZE);
> diff --git a/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog.h 
> b/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog.h
> index 397506ac47c..58f4b96fa75 100644
> --- a/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog.h
> +++ b/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog.h
> @@ -20,7 +20,12 @@
>  #define DEFAULT_ADDRESS              0xFFFFFFFF
>  
>  #define CMD_SIZE             512
> +/* SMC is only supported in SPMIN for STM32MP15x */
> +#ifdef CONFIG_STM32MP15x
>  #define OTP_SIZE_SMC         1024
> +#else
> +#define OTP_SIZE_SMC         0
> +#endif
>  #define OTP_SIZE_TA          776
>  #define PMIC_SIZE            8
>  
Reviewed-by: Patrice Chotard <patrice.chot...@foss.st.com>

Thanks
Patrice

Reply via email to