blob: 08844186c1731f52bf19585a97437129e7fe59a3 [file] [log] [blame]
######################
Floating-Point Support
######################
TF-M adds several configuration flags to control Floating point (FP) [1]_
support in TF-M Secure Processing Environment (SPE).
Non Secure Processing Environment (NSPE) is not allowed to access Floating
Point Unit (FPU) [2]_ when FP support is enabled in SPE at current stage.
* Support GNU Arm Embedded Toolchain [3]_.
* Support FP Application Binary Interface (ABI) [4]_ types: software, hybird,
hardware.
* Support lazy stacking on/off.
* Support Inter-Process Communication (IPC) [5]_ model in TF-M, and doesn't
support LIBRARY or SFN model.
* Support Armv8-M [6]_ mainline or later.
* Support isolation level 1,2,3.
* Does not support use FPU in First-Level Interrupt Handling (FLIH) [7]_ at
current stage.
Please refer to Arm musca S1 [8]_ platform as a reference implementation when
you enable FP support on your platforms.
Secure libraries are compiled with ``COMPILER_CP_FLAG`` and linked with
``LINKER_CP_OPTION`` for different FP ABI types. All those libraries shall be
built with the same FP ABI type. Otherwise, linking errors may occur due to FP
ABI type conflicts.
If FP ABI types mismatch error is generated during build, pleae check whether
the library is compiled with ``COMPILER_CP_FLAG``.
Example:
.. code-block:: cmake
target_compile_options(lib
PRIVATE
${COMPILER_CP_FLAG}
)
===================================
CMake configurations for FP support
===================================
The following CMake configurations configure ``COMPILER_CP_FLAG`` in TF-M SPE.
* ``CONFIG_TFM_SPE_FP`` are used to configure FP ABI type for secure side.
+-------------------+---------------------------+
| CONFIG_TFM_SPE_FP | FP ABI type [2]_ [3]_ |
+===================+===========================+
| 0 (default) | Software |
+-------------------+---------------------------+
| 1 | Hybird |
+-------------------+---------------------------+
| 2 | Hardware |
+-------------------+---------------------------+
FP software ABI type is default for secure side in TF-M (mfloat-abi=soft).
* ``CONFIG_TFM_LAZY_STACKING_SPE`` is used to enable/disable lazy stacking
feature from secure side. This feature is only valid for FP hardware or
hybird option.
+------------------------------+---------------------------+
| CONFIG_TFM_LAZY_STACKING_SPE | Description |
+==============================+===========================+
| 0FF | Disable lazy stacking |
+------------------------------+---------------------------+
| ON (default) | Enable lazy stacking |
+------------------------------+---------------------------+
* ``CONFIG_TFM_FP_ARCH`` specifies which FP architecture is available on the
target, valid for FP hardware or hybird option.
FP architecture is processor dependent. For GNUARM compiler, example value
are: auto, fpv5-d16, fpv5-sp-d16, etc.
Default value of ``CONFIG_TFM_FP_ARCH`` for GNUARM compiler is fpv5-sp-d16.
This parameter shall be specified by platform. Please check compiler
reference manual and processor hardware manual for more details to set
correct FPU configuration for platform.
*********
Reference
*********
.. [1] `High-Performance Hardware Support for Floating-Point Operations <https://www.arm.com/why-arm/technologies/floating-point>`_
.. [2] `Cortex-M4 Technical Reference Manual <https://developer.arm.com/documentation/ddi0439/b/Floating-Point-Unit/About-the-FPU>`_
.. [3] `GNU Arm Embedded Toolchain <https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm>`_
.. [4] `Float Point ABI <https://www.keil.com/support/man/docs/armclang_ref/armclang_ref_chr1417451577871.htm>`_
.. [5] :doc:`TF-M Inter-Process Communication </docs/technical_references/design_docs/tfm_psa_inter_process_communication>`
.. [6] `Armv8-M Architecture Reference Manual <https://developer.arm.com/documentation/ddi0553/latest>`_
.. [7] :doc:`Secure Interrupt Integration Guide </docs/integration_guide/tfm_secure_irq_integration_guide>`
.. [8] `Musca-S1 Test Chip Board <https://developer.arm.com/tools-and-software/development-boards/iot-test-chips-and-boards/musca-s1-test-chip-board>`_
--------------
*Copyright (c) 2021, Arm Limited. All rights reserved.*