arch/arm: introduce generic FPU internal option

Currently, we consider that any VFP FPU is a superset of VFPv2, and thus
we use VFPv2 as a way to detect that a VFP is used.

However, for Cortex-M cores, the optional FPU is not a superset of
VFPv2; it is even not a VFP [0].

As a consequence, we can no longer consider VFPv2 as a indication that
an FPU is present.

So, we introduce two new internal options, BR2_ARM_CPU_MAYBE_HAS_FPU and
BR2_ARM_CPU_HAS_FPU, which we use to consider the presence of an FPU.

[0] https://en.wikipedia.org/wiki/ARM_Cortex-M#Cortex-M4

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
This commit is contained in:
Yann E. MORIN 2018-02-25 21:18:14 +01:00 committed by Thomas Petazzoni
parent 6edfa3bf78
commit 7f7701301e

View File

@ -6,12 +6,21 @@ config BR2_ARM_CPU_HAS_NEON
config BR2_ARM_CPU_MAYBE_HAS_NEON config BR2_ARM_CPU_MAYBE_HAS_NEON
bool bool
# For some cores, the FPU is optional
config BR2_ARM_CPU_MAYBE_HAS_FPU
bool
config BR2_ARM_CPU_HAS_FPU
bool
# for some cores, VFPv2 is optional # for some cores, VFPv2 is optional
config BR2_ARM_CPU_MAYBE_HAS_VFPV2 config BR2_ARM_CPU_MAYBE_HAS_VFPV2
bool bool
select BR2_ARM_CPU_MAYBE_HAS_FPU
config BR2_ARM_CPU_HAS_VFPV2 config BR2_ARM_CPU_HAS_VFPV2
bool bool
select BR2_ARM_CPU_HAS_FPU
# for some cores, VFPv3 is optional # for some cores, VFPv3 is optional
config BR2_ARM_CPU_MAYBE_HAS_VFPV3 config BR2_ARM_CPU_MAYBE_HAS_VFPV3
@ -450,7 +459,7 @@ config BR2_ARM_ENABLE_NEON
config BR2_ARM_ENABLE_VFP config BR2_ARM_ENABLE_VFP
bool "Enable VFP extension support" bool "Enable VFP extension support"
depends on BR2_ARM_CPU_MAYBE_HAS_VFPV2 depends on BR2_ARM_CPU_MAYBE_HAS_FPU
select BR2_ARM_CPU_HAS_VFPV4 if BR2_ARM_CPU_MAYBE_HAS_VFPV4 select BR2_ARM_CPU_HAS_VFPV4 if BR2_ARM_CPU_MAYBE_HAS_VFPV4
select BR2_ARM_CPU_HAS_VFPV3 if BR2_ARM_CPU_MAYBE_HAS_VFPV3 select BR2_ARM_CPU_HAS_VFPV3 if BR2_ARM_CPU_MAYBE_HAS_VFPV3
select BR2_ARM_CPU_HAS_VFPV2 if BR2_ARM_CPU_MAYBE_HAS_VFPV2 select BR2_ARM_CPU_HAS_VFPV2 if BR2_ARM_CPU_MAYBE_HAS_VFPV2
@ -461,7 +470,7 @@ config BR2_ARM_ENABLE_VFP
choice choice
prompt "Target ABI" prompt "Target ABI"
default BR2_ARM_EABIHF if BR2_ARM_CPU_HAS_VFPV2 default BR2_ARM_EABIHF if BR2_ARM_CPU_HAS_FPU
default BR2_ARM_EABI default BR2_ARM_EABI
depends on BR2_arm || BR2_armeb depends on BR2_arm || BR2_armeb
help help
@ -496,7 +505,7 @@ config BR2_ARM_EABI
config BR2_ARM_EABIHF config BR2_ARM_EABIHF
bool "EABIhf" bool "EABIhf"
depends on BR2_ARM_CPU_HAS_VFPV2 depends on BR2_ARM_CPU_HAS_FPU
help help
The EABIhf is an extension of EABI which supports the 'hard' The EABIhf is an extension of EABI which supports the 'hard'
floating point model. This model uses the floating point floating point model. This model uses the floating point
@ -520,7 +529,7 @@ choice
default BR2_ARM_FPU_VFPV4D16 if BR2_ARM_CPU_HAS_VFPV4 default BR2_ARM_FPU_VFPV4D16 if BR2_ARM_CPU_HAS_VFPV4
default BR2_ARM_FPU_VFPV3D16 if BR2_ARM_CPU_HAS_VFPV3 default BR2_ARM_FPU_VFPV3D16 if BR2_ARM_CPU_HAS_VFPV3
default BR2_ARM_FPU_VFPV2 if BR2_ARM_CPU_HAS_VFPV2 default BR2_ARM_FPU_VFPV2 if BR2_ARM_CPU_HAS_VFPV2
default BR2_ARM_SOFT_FLOAT if !BR2_ARM_CPU_HAS_VFPV2 default BR2_ARM_SOFT_FLOAT if !BR2_ARM_CPU_HAS_FPU
config BR2_ARM_SOFT_FLOAT config BR2_ARM_SOFT_FLOAT
bool "Soft float" bool "Soft float"