blob: fb6590bd7b28757055cd942e530591a3d355ea1f [file] [log] [blame] [view]
Edison Ai1c266ae2019-03-20 11:21:21 +08001# Non-Secure Identity Manager
2
3The ID of the current application/thread is known by TF-M, and the SST service
4queries the ID of the currently running client via a dedicated API.
5
6The identity of secure clients can be tracked by TF-M core, because it also
7manages the contexts of the partitions. However to differentiate NS clients, it
8relies on the services provided by the NS OS.
9
10Tracking of context changes are possible by relying on the NS OS calling the
11Thread Context Management for Armv8-M TrustZone APIs, as described
12[here](https://www.keil.com/pack/doc/CMSIS/Core/html/group__context__trustzone__functions.html)
13
14However TF-M needs an extra API, to assign a client ID to the TZ context created
15as a result of the
16`TZ_MemoryId_t TZ_AllocModuleContext_S (TZ_ModuleId_t module)` call.
17
18To do this, the
19`enum tfm_status_e tfm_register_client_id (int32_t ns_client_id)` have to be
20called from an SVC handler, with the client ID of the currently running client.
21
22In the current implementation of TF-M, an SVC call is provided for the NS
23clients to be called at the beginning of their main function.
24
25```SVC(SVC_TFM_NSPM_REGISTER_CLIENT_ID);```
26
27The SVC call handler of the above SVC maps the name of the current thread to a
28hardcoded client id, and sends it to the TF-M core via the earlier discussed
29API.
30
31The mapping is implemented in `interface/src/tfm_nspm_svc_handler.c`.
32
33The system integrators **may** implement the non-secure ID mapping based on
34their application/threat model.
35
36In case the NS OS doesn't use the Thread Context Management for Armv8-M TrustZone
37APIs, then TF-M considers the NS SW as a single client, and assigns a client ID
38to it automatically.
39
40--------------
41
42*Copyright (c) 2018, Arm Limited. All rights reserved.*