[PATCH 1/3] arm64: Convert core type check macros into inline functions

Biju Das biju.das.jz at bp.renesas.com
Mon Dec 16 09:54:32 CET 2024


Hi Marek,

Thanks for the patch.

> -----Original Message-----
> From: Marek Vasut <marek.vasut+renesas at mailbox.org>
> Sent: 14 December 2024 22:43
> Subject: [PATCH 1/3] arm64: Convert core type check macros into inline functions
> 
> Turn the core type check macros into inline functions to perform better type checking on them. The
> inline functions get optimized out in case they are not used. Indent the MIDR_PARTNUM_CORTEX_An macros
> in preparation for addition of future three-digit cores and use MIDR_PARTNUM_SHIFT in
> MIDR_PARTNUM_MASK to be consistent.
> 
> Signed-off-by: Marek Vasut <marek.vasut+renesas at mailbox.org>
> ---
> Cc: Biju Das <biju.das.jz at bp.renesas.com>
> Cc: Chris Paterson <chris.paterson2 at renesas.com>
> Cc: Lad Prabhakar <prabhakar.mahadev-lad.rj at bp.renesas.com>
> Cc: Nobuhiro Iwamatsu <iwamatsu at nigauri.org>
> Cc: Paul Barker <paul.barker.ct at bp.renesas.com>
> Cc: Tom Rini <trini at konsulko.com>
> Cc: u-boot at lists.denx.de
> ---
>  arch/arm/include/asm/armv8/cpu.h | 28 +++++++++++++++++-----------
>  1 file changed, 17 insertions(+), 11 deletions(-)
> 
> diff --git a/arch/arm/include/asm/armv8/cpu.h b/arch/arm/include/asm/armv8/cpu.h
> index 40d54dc85ab..aa1470bb72d 100644
> --- a/arch/arm/include/asm/armv8/cpu.h
> +++ b/arch/arm/include/asm/armv8/cpu.h
> @@ -3,11 +3,11 @@
>   * Copyright 2018 NXP
>   */
> 
> -#define MIDR_PARTNUM_CORTEX_A35	0xD04
> -#define MIDR_PARTNUM_CORTEX_A53	0xD03
> -#define MIDR_PARTNUM_CORTEX_A72	0xD08
> -#define MIDR_PARTNUM_SHIFT	0x4
> -#define MIDR_PARTNUM_MASK	(0xFFF << 0x4)
> +#define MIDR_PARTNUM_CORTEX_A35		0xD04
> +#define MIDR_PARTNUM_CORTEX_A53		0xD03
> +#define MIDR_PARTNUM_CORTEX_A72		0xD08
> +#define MIDR_PARTNUM_SHIFT		0x4
> +#define MIDR_PARTNUM_MASK		(0xFFF << MIDR_PARTNUM_SHIFT)
> 
>  static inline unsigned int read_midr(void)  { @@ -18,9 +18,15 @@ static inline unsigned int
> read_midr(void)
>  	return val;
>  }
> 
> -#define is_cortex_a35() (((read_midr() & MIDR_PARTNUM_MASK) >> \
> -			 MIDR_PARTNUM_SHIFT) == MIDR_PARTNUM_CORTEX_A35)
> -#define is_cortex_a53() (((read_midr() & MIDR_PARTNUM_MASK) >> \
> -			 MIDR_PARTNUM_SHIFT) == MIDR_PARTNUM_CORTEX_A53)
> -#define is_cortex_a72() (((read_midr() & MIDR_PARTNUM_MASK) >>\
> -			 MIDR_PARTNUM_SHIFT) == MIDR_PARTNUM_CORTEX_A72)
> +#define is_cortex_a(__n)					\
> +	static inline int is_cortex_a##__n(void)		\
> +	{							\
> +		unsigned int midr = read_midr();		\

Maybe unsigned int midr = read_midr() & MIDR_PARTNUM_MASK, to reduce one store 
Operation???

Cheers,
Biju

> +		midr &= MIDR_PARTNUM_MASK;			\
> +		midr >>= MIDR_PARTNUM_SHIFT;			\
> +		return midr == MIDR_PARTNUM_CORTEX_A##__n;	\
> +	}
> +
> +is_cortex_a(35)
> +is_cortex_a(53)
> +is_cortex_a(72)
> --
> 2.45.2



More information about the U-Boot mailing list