blob: 7db65a0e01be72dd03dcad860002b4c3a0c6b7a7 [file] [log] [blame]
Galanakis, Minos41f85972019-09-30 15:56:40 +01001#################
2Integration guide
3#################
Gyorgy Szingdb9783c2019-04-17 21:08:48 +02004The purpose of this document is to provide a guide on how to integrate TF-M
5with other hardware platforms and operating systems.
6
7*****************
8How to build TF-M
9*****************
10Follow the :doc:`Build instructions <tfm_build_instruction>`.
11
12********************************************************
13How to export files for building non-secure applications
14********************************************************
15Explained in the :doc:`Build instructions <tfm_build_instruction>`.
16
17*************************
18How to add a new platform
19*************************
20The hardware platforms currently supported are:
21
22- Soft Macro Model (SMM) Cortex-M33 SSE-200 subsystem for MPS2+ (AN521)
23- Cortex-M23 IoT Kit subsystem for MPS2+ (AN519)
Jamie Foxb8a92702019-06-05 17:19:31 +010024- Musca-A test chip board (Cortex-M33 SSE-200 subsystem)
Gyorgy Szingdb9783c2019-04-17 21:08:48 +020025- Musca-B1 test chip board (Cortex-M33 SSE-200 subsystem)
Kevin Peng0a142112018-09-21 10:42:22 +080026- CoreLink SSE-200 Subsystem for MPS3 (AN524)
Gyorgy Szingdb9783c2019-04-17 21:08:48 +020027
28The files related to the supported platforms are contained under the
29``platform`` subfolder. The platform specific files are under
30``platform/ext/target``, which is organised by boards
31(e.g. ``platform/ext/target/mps2``), while the folder ``platform/ext/common``
32is used to store source and header files which are platform generic.
33
34More information about subsystems supported by the MPS2+ board can be found in:
35`MPS2+ homepage <https://developer.arm.com/products/system-design/development-boards/fpga-prototyping-boards/mps2>`__
36
Jamie Foxb8a92702019-06-05 17:19:31 +010037More information about the Musca-A test chip board can be found in:
Gyorgy Szingdb9783c2019-04-17 21:08:48 +020038`Musca-A homepage <https://developer.arm.com/products/system-design/development-boards/iot-test-chips-and-boards/musca-a-test-chip-board>`__
39
40More information about the Musca-B1 test chip board can be found in:
41`Musca-B1 homepage <https://www.arm.com/products/development-tools/development-boards/musca-b1-iot>`__
42
Kevin Peng0a142112018-09-21 10:42:22 +080043More information about subsystems supported by the MPS3 board can be found in:
44`MPS3 homepage <https://www.arm.com/products/development-tools/development-boards/mps3>`__
45
Gyorgy Szingdb9783c2019-04-17 21:08:48 +020046Generic drivers and startup/scatter files
47=========================================
48The addition of a new platform means the creation of a new subfolder inside
49``target/<board_name>`` to provide an implementation of the drivers currently
50used by TF-M, in particular MPC, PPC, and USART drivers. In addition to the
51drivers, startup and scatter files need to be provided for the supported
52toolchains.
53
54There are also board specific drivers which are used by the board
55platform to interact with the external world, for example during tests, that
56have to be provided, e.g. to blink LEDs or count time in the MPS2 board.
57
58.. Note::
59
60 Currently SST and BL2 bootloader use different flash interface
61
62Target configuration files
63==========================
64Inside the base root folder of the selected target, each implementation has to
65provide its own copy of ``target_cfg.c/.h``. This file has target specific
66configuration functions and settings that are called by the TF-M during the
67platform configuration step during TF-M boot. Examples of the configurations
68performed during this phase are the MPC configuration, the SAU configuration,
69or eventually PPC configuration if supported by the hardware platform.
70Similarly, the ``uart_stdout.c`` is used to provide functions needed to redirect
71the stdout on UART (this is currently used by TF-M to log messages).
72
73Platform retarget files
74=======================
75An important part that each new platform has to provide is the set of retarget
76files which are contained inside the ``retarget`` folder. These files define the
77peripheral base addresses for the platform, both for the secure and non-secure
78aliases (when available), and bind those addresses to the base addresses used by
79the devices available in the hardware platform.
80
81***************************
82How to integrate another OS
83***************************
84To work with TF-M, the OS needs to support the Armv8-M architecture and, in
85particular, it needs to be able to run in the non-secure world. More
86information about OS migration to the Armv8-M architecture can be found in the
87:doc:`OS requirements <os_migration_guide_armv8m>`. Depending upon the system
88configuration this may require configuring drivers to use appropriate address
89ranges.
90
91Interface with TF-M
92===================
93The files needed for the interface with TF-M are exported at the
94``<build_dir>/install/export/tfm`` path. The NS side is only allowed to call
95TF-M secure functions (veneers) from the NS Thread mode. For this reason, the
96API is a collection of functions in the ``<build_dir>/install/export/tfm/inc``
97directory. For example, the interface for the Secure STorage (SST) service
98is described in the file ``psa_sst_api.h`` as a collection of functions that
99call service veneer functions. This API is a wrapper for the secure veneers,
100and returns the return value from the service to the caller.
101
102The secure storage service uses a numerical ID, to identify the clients that use
103the service. For details see
104:doc:`ns client identification documentation <tfm_ns_client_identification>`.
105
106Interface with non-secure world regression tests
107================================================
108A non-secure application that wants to run the non-secure regression tests
109needs to call the ``tfm_non_secure_client_run_tests()``. This function is
110exported into the header file ``test_framework_integ_test.h`` inside the
111``<build_dir>/install`` folder structure in the test specific files,
112i.e. ``<build_dir>/install/export/tfm/test/inc``. The non-secure regression
113tests are precompiled and delivered as a static library which is available in
114``<build_dir>/install/export/tfm/test/lib``, so that the non-secure application
115needs to link against the library to be able to invoke the
116``tfm_non_secure_client_run_tests()`` function. The SST non-secure side
117regression tests rely on some OS functionality e.g. threads, mutexes etc. These
118functions comply with CMSIS RTOS2 standard and have been exported as thin
119wrappers defined in ``os_wrapper.h`` contained in
120``<build_dir>/install/export/tfm/test/inc``. OS needs to provide the
121implementation of these wrappers to be able to run the tests.
122
123NS client Identification
124========================
125See
126:doc:`ns client identification documentation <tfm_ns_client_identification>`.
127
Mate Toth-Pal12d7a182019-04-28 14:05:21 +0200128*********************
129Non-secure interrupts
130*********************
131Non-secure interrupts are allowed to preempt Secure thread mode.
132With the current implementation, a NSPE task can spoof the identity of another
133NSPE task. This is an issue only when NSPE has provisions for task isolation.
134Note, that ``AIRCR.PRIS`` is still set to restrict the priority range available
135to NS interrupts to the lower half of available priorities so that it wouldn't
136be possible for any non-secure interrupt to preempt a higher-priority secure
137interrupt.
138
Gyorgy Szingdb9783c2019-04-17 21:08:48 +0200139--------------
140
141*Copyright (c) 2017-2019, Arm Limited. All rights reserved.*