[PATCH 07/12] stm32mp: add setup_serial_number for stm32mp25

Patrice CHOTARD patrice.chotard at foss.st.com
Mon Jan 15 14:07:13 CET 2024



On 1/15/24 13:46, Patrick Delaunay wrote:
> From: Patrice Chotard <patrice.chotard at foss.st.com>
> 
> Add support of serial number for stm32mp25, gets from OTP with BSEC driver.
> 
> Signed-off-by: Patrice Chotard <patrice.chotard at foss.st.com>
> Signed-off-by: Patrick Delaunay <patrick.delaunay at foss.st.com>
> ---
> 
>  .../arm/mach-stm32mp/include/mach/sys_proto.h |  1 +
>  arch/arm/mach-stm32mp/soc.c                   | 31 +++++++++++++++++++
>  arch/arm/mach-stm32mp/stm32mp1/cpu.c          | 27 ----------------
>  arch/arm/mach-stm32mp/stm32mp2/cpu.c          |  2 ++
>  4 files changed, 34 insertions(+), 27 deletions(-)
> 
> diff --git a/arch/arm/mach-stm32mp/include/mach/sys_proto.h b/arch/arm/mach-stm32mp/include/mach/sys_proto.h
> index 83388fdb7371..2a65efc0a50a 100644
> --- a/arch/arm/mach-stm32mp/include/mach/sys_proto.h
> +++ b/arch/arm/mach-stm32mp/include/mach/sys_proto.h
> @@ -97,6 +97,7 @@ u32 get_bootauth(void);
>  
>  int get_eth_nb(void);
>  int setup_mac_address(void);
> +int setup_serial_number(void);
>  
>  /* board power management : configure vddcore according OPP */
>  void board_vddcore_init(u32 voltage_mv);
> diff --git a/arch/arm/mach-stm32mp/soc.c b/arch/arm/mach-stm32mp/soc.c
> index 8d5fa474ccaf..ff70ebe97464 100644
> --- a/arch/arm/mach-stm32mp/soc.c
> +++ b/arch/arm/mach-stm32mp/soc.c
> @@ -3,7 +3,11 @@
>   * Copyright (C) 2024, STMicroelectronics - All Rights Reserved
>   */
>  
> +#include <env.h>
> +#include <misc.h>
>  #include <asm/arch/sys_proto.h>
> +#include <dm/device.h>
> +#include <dm/uclass.h>
>  
>  /* used when CONFIG_DISPLAY_CPUINFO is activated */
>  int print_cpuinfo(void)
> @@ -15,3 +19,30 @@ int print_cpuinfo(void)
>  
>  	return 0;
>  }
> +
> +int setup_serial_number(void)
> +{
> +	char serial_string[25];
> +	u32 otp[3] = {0, 0, 0 };
> +	struct udevice *dev;
> +	int ret;
> +
> +	if (env_get("serial#"))
> +		return 0;
> +
> +	ret = uclass_get_device_by_driver(UCLASS_MISC,
> +					  DM_DRIVER_GET(stm32mp_bsec),
> +					  &dev);
> +	if (ret)
> +		return ret;
> +
> +	ret = misc_read(dev, STM32_BSEC_SHADOW(BSEC_OTP_SERIAL),
> +			otp, sizeof(otp));
> +	if (ret < 0)
> +		return ret;
> +
> +	sprintf(serial_string, "%08X%08X%08X", otp[0], otp[1], otp[2]);
> +	env_set("serial#", serial_string);
> +
> +	return 0;
> +}
> diff --git a/arch/arm/mach-stm32mp/stm32mp1/cpu.c b/arch/arm/mach-stm32mp/stm32mp1/cpu.c
> index 00fea7929b2f..f84cb26fa565 100644
> --- a/arch/arm/mach-stm32mp/stm32mp1/cpu.c
> +++ b/arch/arm/mach-stm32mp/stm32mp1/cpu.c
> @@ -336,33 +336,6 @@ __weak int setup_mac_address(void)
>  	return 0;
>  }
>  
> -static int setup_serial_number(void)
> -{
> -	char serial_string[25];
> -	u32 otp[3] = {0, 0, 0 };
> -	struct udevice *dev;
> -	int ret;
> -
> -	if (env_get("serial#"))
> -		return 0;
> -
> -	ret = uclass_get_device_by_driver(UCLASS_MISC,
> -					  DM_DRIVER_GET(stm32mp_bsec),
> -					  &dev);
> -	if (ret)
> -		return ret;
> -
> -	ret = misc_read(dev, STM32_BSEC_SHADOW(BSEC_OTP_SERIAL),
> -			otp, sizeof(otp));
> -	if (ret < 0)
> -		return ret;
> -
> -	sprintf(serial_string, "%08X%08X%08X", otp[0], otp[1], otp[2]);
> -	env_set("serial#", serial_string);
> -
> -	return 0;
> -}
> -
>  __weak void stm32mp_misc_init(void)
>  {
>  }
> diff --git a/arch/arm/mach-stm32mp/stm32mp2/cpu.c b/arch/arm/mach-stm32mp/stm32mp2/cpu.c
> index c0f6519e8d7c..301e365cf4f4 100644
> --- a/arch/arm/mach-stm32mp/stm32mp2/cpu.c
> +++ b/arch/arm/mach-stm32mp/stm32mp2/cpu.c
> @@ -69,6 +69,8 @@ void enable_caches(void)
>  
>  int arch_misc_init(void)
>  {
> +	setup_serial_number();
> +
>  	return 0;
>  }
>  
Reviewed-by: Patrice Chotard <patrice.chotard at foss.st.com>

Thanks
Patrice


More information about the U-Boot mailing list