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:

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

2(1,2)

Cortex-M4 Technical Reference Manual

3(1,2)

GNU Arm Embedded Toolchain

4

Float Point ABI

5

TF-M Inter-Process Communication

6

Armv8-M Architecture Reference Manual

7

Secure Interrupt Integration Guide

8

Musca-S1 Test Chip Board


Copyright (c) 2021, Arm Limited. All rights reserved.