arch/arm: introduce generic FPU internal option
authorYann E. MORIN <yann.morin.1998@free.fr>
Sun, 25 Feb 2018 20:18:14 +0000 (21:18 +0100)
committerThomas Petazzoni <thomas.petazzoni@bootlin.com>
Sun, 20 May 2018 17:01:34 +0000 (19:01 +0200)
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>
arch/Config.in.arm

index 7651d109276d1242af8ee0d723a89a2145900c8a..c2f3f8d9a36f6ecc56d7da3bdcce9937e101daad 100644 (file)
@@ -6,12 +6,21 @@ config BR2_ARM_CPU_HAS_NEON
 config BR2_ARM_CPU_MAYBE_HAS_NEON
        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
 config BR2_ARM_CPU_MAYBE_HAS_VFPV2
        bool
+       select BR2_ARM_CPU_MAYBE_HAS_FPU
 
 config BR2_ARM_CPU_HAS_VFPV2
        bool
+       select BR2_ARM_CPU_HAS_FPU
 
 # for some cores, VFPv3 is optional
 config BR2_ARM_CPU_MAYBE_HAS_VFPV3
@@ -450,7 +459,7 @@ config BR2_ARM_ENABLE_NEON
 
 config BR2_ARM_ENABLE_VFP
        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_VFPV3 if BR2_ARM_CPU_MAYBE_HAS_VFPV3
        select BR2_ARM_CPU_HAS_VFPV2 if BR2_ARM_CPU_MAYBE_HAS_VFPV2
@@ -461,7 +470,7 @@ config BR2_ARM_ENABLE_VFP
 
 choice
        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
        depends on BR2_arm || BR2_armeb
        help
@@ -496,7 +505,7 @@ config BR2_ARM_EABI
 
 config BR2_ARM_EABIHF
        bool "EABIhf"
-       depends on BR2_ARM_CPU_HAS_VFPV2
+       depends on BR2_ARM_CPU_HAS_FPU
        help
          The EABIhf is an extension of EABI which supports the 'hard'
          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_VFPV3D16 if BR2_ARM_CPU_HAS_VFPV3
        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
        bool "Soft float"