[PATCH] Report support for optional ARMv8.2 half-precision floating point extension

Robin Murphy robin.murphy at arm.com
Fri Sep 9 05:46:41 PDT 2022


On 2022-09-01 15:13, george pee wrote:
> Report as fphp to be consistent with arm64

Wasn't the original problem that the VFP support code doesn't understand 
the new FP16 instruction encodings, so in practice they don't actually 
work reliably? Exposing a hwcap to say they're functional doesn't 
inherently make them functional - if there is already another patch 
somewhere for that, it should be made clear that this depends on it.

Robin.

> Signed-off-by: george pee <georgepee at gmail.com>
> ---
>   arch/arm/include/uapi/asm/hwcap.h | 1 +
>   arch/arm/kernel/setup.c           | 1 +
>   arch/arm/vfp/vfpmodule.c          | 2 ++
>   3 files changed, 4 insertions(+)
> 
> diff --git a/arch/arm/include/uapi/asm/hwcap.h b/arch/arm/include/uapi/asm/hwcap.h
> index 990199d8b7c6..f975845ce5d3 100644
> --- a/arch/arm/include/uapi/asm/hwcap.h
> +++ b/arch/arm/include/uapi/asm/hwcap.h
> @@ -28,6 +28,7 @@
>   #define HWCAP_IDIV	(HWCAP_IDIVA | HWCAP_IDIVT)
>   #define HWCAP_LPAE	(1 << 20)
>   #define HWCAP_EVTSTRM	(1 << 21)
> +#define HWCAP_FPHP	(1 << 22)
>   
>   /*
>    * HWCAP2 flags - for elf_hwcap2 (in kernel) and AT_HWCAP2
> diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
> index 1e8a50a97edf..6694ced0552a 100644
> --- a/arch/arm/kernel/setup.c
> +++ b/arch/arm/kernel/setup.c
> @@ -1249,6 +1249,7 @@ static const char *hwcap_str[] = {
>   	"vfpd32",
>   	"lpae",
>   	"evtstrm",
> +	"fphp",
>   	NULL
>   };
>   
> diff --git a/arch/arm/vfp/vfpmodule.c b/arch/arm/vfp/vfpmodule.c
> index 2cb355c1b5b7..cef8c64ce8bd 100644
> --- a/arch/arm/vfp/vfpmodule.c
> +++ b/arch/arm/vfp/vfpmodule.c
> @@ -831,6 +831,8 @@ static int __init vfp_init(void)
>   
>   			if ((fmrx(MVFR1) & 0xf0000000) == 0x10000000)
>   				elf_hwcap |= HWCAP_VFPv4;
> +			if ((fmrx(MVFR1) & 0x0f000000) == 0x03000000)
> +				elf_hwcap |= HWCAP_FPHP;
>   		}
>   	/* Extract the architecture version on pre-cpuid scheme */
>   	} else {



More information about the linux-arm-kernel mailing list