[PATCH 1/2] ARM: stm32mp: revision: make CPU type accessible to PBL

Sascha Hauer s.hauer at pengutronix.de
Fri Oct 2 00:33:26 EDT 2020


On Thu, Oct 01, 2020 at 11:48:20AM +0200, Ahmad Fatoum wrote:
> There is nothing holding holding us back from reading SoC type in
> the PBL. Migrate the necessary definitions to the header to allow
> for this.
> 
> Signed-off-by: Ahmad Fatoum <a.fatoum at pengutronix.de>
> ---
>  arch/arm/mach-stm32mp/include/mach/revision.h | 51 ++++++++++++++++++
>  arch/arm/mach-stm32mp/init.c                  | 53 +------------------
>  2 files changed, 53 insertions(+), 51 deletions(-)

Applied, thanks

Sascha

> 
> diff --git a/arch/arm/mach-stm32mp/include/mach/revision.h b/arch/arm/mach-stm32mp/include/mach/revision.h
> index 2eb4d44b3368..2ef8ef30c3ae 100644
> --- a/arch/arm/mach-stm32mp/include/mach/revision.h
> +++ b/arch/arm/mach-stm32mp/include/mach/revision.h
> @@ -6,6 +6,9 @@
>  #ifndef __MACH_CPUTYPE_H__
>  #define __MACH_CPUTYPE_H__
>  
> +#include <mach/bsec.h>
> +#include <asm/io.h>
> +#include <mach/stm32.h>
>  
>  /* ID = Device Version (bit31:16) + Device Part Number (RPN) (bit7:0)
>   * 157X: 2x Cortex-A7, Cortex-M4, CAN FD, GPU, DSI
> @@ -45,4 +48,52 @@ int stm32mp_package(void);
>  #define cpu_is_stm32mp151c() (stm32mp_cputype() == CPU_STM32MP151Cxx)
>  #define cpu_is_stm32mp151a() (stm32mp_cputype() == CPU_STM32MP151Axx)
>  
> +/* DBGMCU register */
> +#define DBGMCU_APB4FZ1		(STM32_DBGMCU_BASE + 0x2C)
> +#define DBGMCU_IDC		(STM32_DBGMCU_BASE + 0x00)
> +#define DBGMCU_IDC_DEV_ID_MASK	GENMASK(11, 0)
> +#define DBGMCU_IDC_DEV_ID_SHIFT	0
> +#define DBGMCU_IDC_REV_ID_MASK	GENMASK(31, 16)
> +#define DBGMCU_IDC_REV_ID_SHIFT	16
> +
> +#define RCC_DBGCFGR		(STM32_RCC_BASE + 0x080C)
> +#define RCC_DBGCFGR_DBGCKEN	BIT(8)
> +
> +/* BSEC OTP index */
> +#define BSEC_OTP_RPN	1
> +#define BSEC_OTP_PKG	16
> +
> +/* Device Part Number (RPN) = OTP_DATA1 lower 8 bits */
> +#define RPN_SHIFT	0
> +#define RPN_MASK	GENMASK(7, 0)
> +
> +static inline u32 stm32mp_read_idc(void)
> +{
> +	setbits_le32(RCC_DBGCFGR, RCC_DBGCFGR_DBGCKEN);
> +	return readl(IOMEM(DBGMCU_IDC));
> +}
> +
> +/* Get Device Part Number (RPN) from OTP */
> +static inline int __stm32mp_get_cpu_rpn(u32 *rpn)
> +{
> +	int ret = bsec_read_field(BSEC_OTP_RPN, rpn);
> +	if (ret)
> +		return ret;
> +
> +	*rpn = (*rpn >> RPN_SHIFT) & RPN_MASK;
> +	return 0;
> +}
> +
> +static inline int __stm32mp_get_cpu_type(u32 *type)
> +{
> +	u32 id;
> +	int ret = __stm32mp_get_cpu_rpn(type);
> +	if (ret)
> +		return ret;
> +
> +	id = (stm32mp_read_idc() & DBGMCU_IDC_DEV_ID_MASK) >> DBGMCU_IDC_DEV_ID_SHIFT;
> +	*type |= id << 16;
> +	return 0;
> +}
> +
>  #endif /* __MACH_CPUTYPE_H__ */
> diff --git a/arch/arm/mach-stm32mp/init.c b/arch/arm/mach-stm32mp/init.c
> index 7094e0e7dd08..5d8d111f9f5a 100644
> --- a/arch/arm/mach-stm32mp/init.c
> +++ b/arch/arm/mach-stm32mp/init.c
> @@ -15,26 +15,6 @@
>  #include <bootsource.h>
>  #include <dt-bindings/pinctrl/stm32-pinfunc.h>
>  
> -/* DBGMCU register */
> -#define DBGMCU_IDC		(STM32_DBGMCU_BASE + 0x00)
> -#define DBGMCU_APB4FZ1		(STM32_DBGMCU_BASE + 0x2C)
> -#define DBGMCU_APB4FZ1_IWDG2	BIT(2)
> -#define DBGMCU_IDC_DEV_ID_MASK	GENMASK(11, 0)
> -#define DBGMCU_IDC_DEV_ID_SHIFT	0
> -#define DBGMCU_IDC_REV_ID_MASK	GENMASK(31, 16)
> -#define DBGMCU_IDC_REV_ID_SHIFT	16
> -
> -#define RCC_DBGCFGR		(STM32_RCC_BASE + 0x080C)
> -#define RCC_DBGCFGR_DBGCKEN	BIT(8)
> -
> -/* BSEC OTP index */
> -#define BSEC_OTP_RPN	1
> -#define BSEC_OTP_PKG	16
> -
> -/* Device Part Number (RPN) = OTP_DATA1 lower 8 bits */
> -#define RPN_SHIFT	0
> -#define RPN_MASK	GENMASK(7, 0)
> -
>  /* Package = bit 27:29 of OTP16
>   * - 100: LBGA448  (FFI) => AA = LFBGA 18x18mm 448 balls p. 0.8mm
>   * - 011: LBGA354  (LCI) => AB = LFBGA 16x16mm 359 balls p. 0.8mm
> @@ -140,38 +120,9 @@ int stm32mp_package(void)
>  	return __stm32mp_package;
>  }
>  
> -static inline u32 read_idc(void)
> -{
> -	setbits_le32(RCC_DBGCFGR, RCC_DBGCFGR_DBGCKEN);
> -	return readl(IOMEM(DBGMCU_IDC));
> -}
> -
> -/* Get Device Part Number (RPN) from OTP */
> -static int get_cpu_rpn(u32 *rpn)
> -{
> -	int ret = bsec_read_field(BSEC_OTP_RPN, rpn);
> -	if (ret)
> -		return ret;
> -
> -	*rpn = (*rpn >> RPN_SHIFT) & RPN_MASK;
> -	return 0;
> -}
> -
>  static u32 get_cpu_revision(void)
>  {
> -	return (read_idc() & DBGMCU_IDC_REV_ID_MASK) >> DBGMCU_IDC_REV_ID_SHIFT;
> -}
> -
> -static int get_cpu_type(u32 *type)
> -{
> -	u32 id;
> -	int ret = get_cpu_rpn(type);
> -	if (ret)
> -		return ret;
> -
> -	id = (read_idc() & DBGMCU_IDC_DEV_ID_MASK) >> DBGMCU_IDC_DEV_ID_SHIFT;
> -	*type |= id << 16;
> -	return 0;
> +	return (stm32mp_read_idc() & DBGMCU_IDC_REV_ID_MASK) >> DBGMCU_IDC_REV_ID_SHIFT;
>  }
>  
>  static int get_cpu_package(u32 *pkg)
> @@ -238,7 +189,7 @@ static int setup_cpu_type(void)
>  	u32 pkg;
>  	int ret;
>  
> -	get_cpu_type(&__stm32mp_cputype);
> +	__stm32mp_get_cpu_type(&__stm32mp_cputype);
>  	switch (__stm32mp_cputype) {
>  	case CPU_STM32MP157Fxx:
>  		cputypestr = "157F";
> -- 
> 2.28.0
> 
> 
> _______________________________________________
> barebox mailing list
> barebox at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/barebox
> 

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |



More information about the barebox mailing list