blob: a61077f5e29e7ce80840de067549eabc8c496319 [file] [log] [blame]
Imre Kis03433542024-01-16 17:28:15 +01001OP-TEE SPMC tests
2=================
3
4Build and run
5-------------
6
7Please follow the instructions of :ref:`build-spmc-tests`.
8
9Structure
10---------
11
12* `xtest`_ is the |NWd| test application which is used to send multiple |FF-A| messages to the SPMC and to the test SPs in
13 the |SWd|. It is part of the `optee_test`_ repository.
14* The ``arm-ffa-user`` driver provides access to the FF-A layer from the |NWd| user space. ``xtest`` uses it to send |FF-A|
15 messages.
16* The test SPs implement various testing functions which can be invoked from ``xtest``.
17
18.. uml:: uml/SpmcTestStructure.puml
19
20Implementation
21--------------
22
23* |TS|
24 * ``components/service/spm_test`` implements the common code of the test SPs.
25 * ``deployments/spm-test*`` are the test SP deployments. There are currently four test SPs to cover various test
26 scenarios. SPM test SPs use |FF-A| v1.1 except SPM test SP 2 which uses v1.0 to cover the backwards compatibility test
27 of the SPMC.
28* `optee_test`_
29 * `ffa_spmc_1000.c`_ contains the SPMC test cases of ``xtest``.
30
31SPMC test RPC protocol
32----------------------
33
34Tests can invoke the functions of the test SPs via an SPMC test specific RPC interface which is built on top of FF-A direct
35messages.
36
37.. list-table:: Test RPC protocol
38 :header-rows: 1
39
40 * - Message ID
41 - Description
42 - ``args[0]``
43 - ``args[1]``
44 - ``args[2]``
45 - ``args[3]``
46 - ``args[4]``
47 * - EP_TEST_SP
48 - Run internal SP tests
49 - ``0x00000000``
50 - ``0x00000000``
51 - ``0x00000000``
52 - ``0x00000000``
53 - ``0x00000000``
54 * - EP_TEST_SP_COMMUNICATION
55 - Test FF-A direct message request
56 - ``0x00000001``
57 - The destination SP's FF-A endpoint ID
58 - ``0x00000000``
59 - ``0x00000000``
60 - ``0x00000000``
61 * - EP_TEST_SP_INCREASE
62 - Increase each ``param`` value by one and return response
63 - ``0x00000002``
64 - ``param[0]``
65 - ``param[1]``
66 - ``param[2]``
67 - ``param[3]``
68 * - EP_TRY_R_ACCESS
69 - Test shared buffer read access
70 - ``0x00000003``
71 - ``0x00000000``
72 - ``0x00000000``
73 - ``0x00000000``
74 - ``0x00000000``
75 * - EP_TRY_W_ACCESS
76 - Test shared buffer write access
77 - ``0x00000004``
78 - ``0x00000000``
79 - ``0x00000000``
80 - ``0x00000000``
81 - ``0x00000000``
82 * - EP_RETRIEVE
83 - Do FF-A memory retrieve
84 - ``0x00000005``
85 - Memory handle LSW
86 - Memory handle MSW
87 - Sender endpoint ID
88 - ``0x00000000``
89 * - EP_RELINQUISH
90 - Do FF-A memory relinquish
91 - ``0x00000006``
92 - Memory handle LSW
93 - Memory handle MSW
94 - Flags
95 - ``0x00000000``
96 * - EP_SP_MEM_SHARING
97 - Test FF-A memory sharing
98 - ``0x00000007``
99 - Target endpoint's FF-A ID
100 - ``0x00000000``
101 - ``0x00000000``
102 - ``0x00000000``
103 * - EP_SP_MEM_SHARING_MULTI
104 - Test FF-A memory sharing with multiple endpoints
105 - ``0x00000008``
106 - Target endpoint 1 FF-A ID
107 - Target endpoint 2 FF-A ID
108 - ``0x00000000``
109 - ``0x00000000``
110 * - EP_SP_MEM_SHARING_EXC
111 - Test exclusive FF-A memory sharing
112 - ``0x00000009``
113 - Target endpoint's FF-A ID
114 - ``0x00000000``
115 - ``0x00000000``
116 - ``0x00000000``
117 * - EP_SP_MEM_INCORRECT_ACCESS
118 - Negative FF-A memory sharing test
119 - ``0x0000000a``
120 - Target endpoint's FF-A ID
121 - ``0x00000000``
122 - ``0x00000000``
123 - ``0x00000000``
124 * - EP_SP_NOP
125 - No operation
126 - ``0x0000000b``
127 - ``0x00000000``
128 - ``0x00000000``
129 - ``0x00000000``
130 - ``0x00000000``
131 * - EP_TEST_SP_COMMUNICATION_RESPONSE
132 - Test FF-A direct message response
133 - ``0x0000000c``
134 - ``0x00000000``
135 - ``0x00000000``
136 - ``0x00000000``
137 - ``0x00000000``
138 * - SP_TEST_OK
139 - Successful test response
140 - ``0x000000aa``
141 - Request specific parameter
142 - Request specific parameter
143 - Request specific parameter
144 - Request specific parameter
145 * - SP_TEST_ERROR
146 - Error test response
147 - ``0x000000ff``
148 - Error code
149 - ``0x00000000``
150 - ``0x00000000``
151 - ``0x00000000``
152
153Test cases
154----------
155
156The following test cases are defined in ``ffa_spmc_1000.c``:
157
158* 1001: Test basic FF-A communication
159 * Try to connect to multiple SPs
160 * Have different SPs sending messages to each other
161 * Test standard SP messages (partition_info_get, get_own_id, ...)
162* 1002: Test FF-A memory
163 * Test memory sharing between the |NWd| and the |SWd|
164* 1003: Test FF-A memory: SP to SP
165 * Test memory sharing between to SPs
166* 1004: Test FF-A memory: Access and flags
167 * Test the different access modifiers and flags when sharing memory
168* 1005: Test FF-A memory: multiple receiver
169 * Share a memory region with multiple SPs
170
171--------------
172
173.. _`xtest`: https://optee.readthedocs.io/en/latest/building/gits/optee_test.html
174.. _`optee_test`: https://github.com/OP-TEE/optee_test
175.. _`ffa_spmc_1000.c`: https://github.com/OP-TEE/optee_test/blob/master/host/xtest/ffa_spmc_1000.c
176
177
178*Copyright (c) 2024, Arm Limited and Contributors. All rights reserved.*
179
180SPDX-License-Identifier: BSD-3-Clause