blob: 6ebf7ce70513329a81a77be11adb7cc311cd9299 [file] [log] [blame]
Feder Liang4f7c75b2021-09-14 16:15:15 +08001######################
2Floating-Point Support
3######################
4
5TF-M adds several configuration flags to control Floating point (FP) [1]_
Feder Liang8ac672f2021-12-09 15:03:04 +08006support in TF-M Secure Processing Environment (SPE) and Non Secure Processing
7Environment (NSPE).
Feder Liang4f7c75b2021-09-14 16:15:15 +08008
Feder Liang8ac672f2021-12-09 15:03:04 +08009* Support FP in SPE or NSPE.
10* Support FP Application Binary Interface (ABI) [2]_ types: software, hardware.
11 SPE and NSPE shall use the same FP ABI type.
12* Support lazy stacking enable/disable in SPE only, NSPE is not allowed to
13 enable/disable this feature.
14* Support GNU Arm Embedded Toolchain [3]_. ``GNU Arm Embedded Toolchain 10.3-
15 2021.10`` and later version shall be used to mitigate VLLDM instruction
16 security vulnerability [4]_.
Feder Liang4f7c75b2021-09-14 16:15:15 +080017* Support Inter-Process Communication (IPC) [5]_ model in TF-M, and doesn't
Summer Qin2db78c82022-10-10 17:17:44 +080018 support SFN model.
Gabor Toth4d414112021-11-10 17:44:50 +010019* Support Armv8-M mainline.
Feder Liang4f7c75b2021-09-14 16:15:15 +080020* Support isolation level 1,2,3.
Feder Liang8ac672f2021-12-09 15:03:04 +080021* Does not support use FPU in First-Level Interrupt Handling (FLIH) [6]_ at
Feder Liang98e77a82021-11-25 14:34:23 +080022 current stage.
Feder Liang4f7c75b2021-09-14 16:15:15 +080023
Jianliang Shen47d21e52022-08-02 14:36:00 +080024Please refer to Arm AN521 or AN552 platform as a reference implementation when
Feder Liang98e77a82021-11-25 14:34:23 +080025you enable FP support on your platforms.
Feder Liang4f7c75b2021-09-14 16:15:15 +080026
Lingkai Dong181c00c2022-04-25 11:36:34 +010027.. Note::
28 Alternatively, if you intend to use FP in your own NSPE application but the
29 TF-M SPE services that you enable do not require FP, you can set the CMake
Gabor Toth4d414112021-11-10 17:44:50 +010030 configuration ``CONFIG_TFM_ENABLE_CP10CP11`` to ``ON`` and **ignore** any
Lingkai Dong181c00c2022-04-25 11:36:34 +010031 configurations described below.
32
Xinyu Zhang8ec30632022-06-30 18:03:31 +080033.. Note::
Jianliang Shen47d21e52022-08-02 14:36:00 +080034 FPU test issue has not been fixed yet on Musca-S1 [7]_. When running FPU
35 tests on Musca-S1, secure thread fails to trigger secure interrupt. FPU test
36 is disabled by default on Musca-S1 until the issue is fixed.
37
38.. Note::
Xinyu Zhang8ec30632022-06-30 18:03:31 +080039 ``GNU Arm Embedded Toolchain 10.3-2021.10`` may have issue that reports
40 ``'-mcpu=cortex-m55' conflicts with '-march=armv8.1-m.main'`` warning [8]_.
41 This issue has been fixed in the later version.
42
Feder Liang8ac672f2021-12-09 15:03:04 +080043============================
44FP ABI type for SPE and NSPE
45============================
Xinyu Zhang8ec30632022-06-30 18:03:31 +080046FP design in Armv8.0-M [9]_ architecture requires consistent FP ABI types
Feder Liang8ac672f2021-12-09 15:03:04 +080047between SPE and NSPE. Furthermore, both sides shall set up CPACR individually
48when FPU is used. Otherwise, No Coprocessor (NOCP) usage fault will be asserted
49during FP context switch between security states.
50
51Secure and non-secure libraries are compiled with ``COMPILER_CP_FLAG`` and
52linked with ``LINKER_CP_OPTION`` for different FP ABI types. All those
53libraries shall be built with ``COMPLIER_CP_FLAG``.
Feder Liang4f7c75b2021-09-14 16:15:15 +080054
55If FP ABI types mismatch error is generated during build, pleae check whether
56the library is compiled with ``COMPILER_CP_FLAG``.
57Example:
58
59.. code-block:: cmake
60
61 target_compile_options(lib
62 PRIVATE
63 ${COMPILER_CP_FLAG}
64 )
65
66===================================
67CMake configurations for FP support
68===================================
69The following CMake configurations configure ``COMPILER_CP_FLAG`` in TF-M SPE.
70
Gabor Toth4d414112021-11-10 17:44:50 +010071* ``CONFIG_TFM_ENABLE_FP`` is used to enable/disable FPU usage.
Feder Liang4f7c75b2021-09-14 16:15:15 +080072
Gabor Toth4d414112021-11-10 17:44:50 +010073 +--------------------------+---------------------------+
74 | CONFIG_TFM_ENABLE_FP | FP support |
75 +==========================+===========================+
76 | off (default) | FP diasabled |
77 +--------------------------+---------------------------+
78 | on | FP enabled |
79 +--------------------------+---------------------------+
Feder Liang4f7c75b2021-09-14 16:15:15 +080080
Lingkai Dong181c00c2022-04-25 11:36:34 +010081.. Note::
Gabor Toth4d414112021-11-10 17:44:50 +010082 ``CONFIG_TFM_FLOAT_ABI`` depends on ``CONFIG_TFM_ENABLE_FP``. If
83 ``CONFIG_TFM_ENABLE_FP is set ``CONFIG_TFM_FLOAT_ABI`` is automatically
84 set to ``hard``.
85
86.. Note::
87 If you build TF-M SPE with ``CONFIG_TFM_ENABLE_FP=on`` and provide your own
88 NSPE application, your own NSPE **must** take care of enabling floating point
Lingkai Dong181c00c2022-04-25 11:36:34 +010089 coprocessors CP10 and CP11 on the NS side to avoid aforementioned NOCP usage
90 fault.
91
Feder Liang8ac672f2021-12-09 15:03:04 +080092* ``CONFIG_TFM_LAZY_STACKING`` is used to enable/disable lazy stacking
93 feature. This feature is only valid for FP hardware ABI type.
94 NSPE is not allowed to enable/disable this feature. Let SPE decide the
95 secure/non-secure shared setting of lazy stacking to avoid the possible
96 side-path brought by flexibility.
Feder Liang4f7c75b2021-09-14 16:15:15 +080097
98 +------------------------------+---------------------------+
Feder Liang8ac672f2021-12-09 15:03:04 +080099 | CONFIG_TFM_LAZY_STACKING | Description |
Feder Liang4f7c75b2021-09-14 16:15:15 +0800100 +==============================+===========================+
101 | 0FF | Disable lazy stacking |
102 +------------------------------+---------------------------+
103 | ON (default) | Enable lazy stacking |
104 +------------------------------+---------------------------+
105
106* ``CONFIG_TFM_FP_ARCH`` specifies which FP architecture is available on the
Feder Liang8ac672f2021-12-09 15:03:04 +0800107 target, valid for FP hardware ABI type.
Feder Liang4f7c75b2021-09-14 16:15:15 +0800108
109 FP architecture is processor dependent. For GNUARM compiler, example value
110 are: auto, fpv5-d16, fpv5-sp-d16, etc.
111
112 Default value of ``CONFIG_TFM_FP_ARCH`` for GNUARM compiler is fpv5-sp-d16.
113
114 This parameter shall be specified by platform. Please check compiler
115 reference manual and processor hardware manual for more details to set
116 correct FPU configuration for platform.
117
118
119*********
120Reference
121*********
122.. [1] `High-Performance Hardware Support for Floating-Point Operations <https://www.arm.com/why-arm/technologies/floating-point>`_
123
Feder Liang8ac672f2021-12-09 15:03:04 +0800124.. [2] `Float Point ABI <https://www.keil.com/support/man/docs/armclang_ref/armclang_ref_chr1417451577871.htm>`_
Feder Liang4f7c75b2021-09-14 16:15:15 +0800125
126.. [3] `GNU Arm Embedded Toolchain <https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm>`_
127
Feder Liang8ac672f2021-12-09 15:03:04 +0800128.. [4] `VLLDM instruction Security Vulnerability <https://developer.arm.com/support/arm-security-updates/vlldm-instruction-security-vulnerability>`_
Feder Liang4f7c75b2021-09-14 16:15:15 +0800129
Feder Liang8ac672f2021-12-09 15:03:04 +0800130.. [5] `ArmĀ® Platform Security Architecture Firmware Framework 1.0 <https://armkeil.blob.core.windows.net/developer/Files/pdf/PlatformSecurityArchitecture/Architect/DEN0063-PSA_Firmware_Framework-1.0.0-2.pdf>`_
Feder Liang4f7c75b2021-09-14 16:15:15 +0800131
Anton Komlev3356ba32022-03-31 22:02:11 +0100132.. [6] :doc:`Secure Interrupt Integration Guide </integration_guide/tfm_secure_irq_integration_guide>`
Feder Liang4f7c75b2021-09-14 16:15:15 +0800133
Feder Liang8ac672f2021-12-09 15:03:04 +0800134.. [7] `Musca-S1 Test Chip Board <https://developer.arm.com/tools-and-software/development-boards/iot-test-chips-and-boards/musca-s1-test-chip-board>`_
Feder Liang98e77a82021-11-25 14:34:23 +0800135
Xinyu Zhang8ec30632022-06-30 18:03:31 +0800136.. [8] `GCC Issue on '-mcpu=cortex-m55' conflicts with '-march=armv8.1-m.main' Warning <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97327>`_
137
138.. [9] `Armv8-M Architecture Reference Manual <https://developer.arm.com/documentation/ddi0553/latest>`_
Feder Liang4f7c75b2021-09-14 16:15:15 +0800139
140--------------
141
Xinyu Zhang8ec30632022-06-30 18:03:31 +0800142*Copyright (c) 2021-2022, Arm Limited. All rights reserved.*