xref: /arm-trusted-firmware/docs/components/ffa-manifest-binding.rst (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700SchasingluluFF-A manifest binding to device tree
2*91f16700Schasinglulu========================================
3*91f16700Schasinglulu
4*91f16700SchasingluluThis document defines the nodes and properties used to define a partition,
5*91f16700Schasingluluaccording to the FF-A specification.
6*91f16700Schasinglulu
7*91f16700SchasingluluPartition Properties
8*91f16700Schasinglulu--------------------
9*91f16700Schasinglulu
10*91f16700Schasinglulu- compatible [mandatory]
11*91f16700Schasinglulu   - value type: <string>
12*91f16700Schasinglulu   - Must be the string "arm,ffa-manifest-X.Y" which specifies the major and
13*91f16700Schasinglulu     minor versions of the device tree binding for the FFA manifest represented
14*91f16700Schasinglulu     by this node. The minor number is incremented if the binding changes in a
15*91f16700Schasinglulu     backwards compatible manner.
16*91f16700Schasinglulu
17*91f16700Schasinglulu      - X is an integer representing the major version number of this document.
18*91f16700Schasinglulu      - Y is an integer representing the minor version number of this document.
19*91f16700Schasinglulu
20*91f16700Schasinglulu- ffa-version [mandatory]
21*91f16700Schasinglulu   - value type: <u32>
22*91f16700Schasinglulu   - Must be two 16 bits values (X, Y), concatenated as 31:16 -> X,
23*91f16700Schasinglulu     15:0 -> Y, where:
24*91f16700Schasinglulu
25*91f16700Schasinglulu      - X is the major version of FF-A expected by the partition at the FFA
26*91f16700Schasinglulu        instance it will execute.
27*91f16700Schasinglulu      - Y is the minor version of FF-A expected by the partition at the FFA
28*91f16700Schasinglulu        instance it will execute.
29*91f16700Schasinglulu
30*91f16700Schasinglulu- uuid [mandatory]
31*91f16700Schasinglulu   - value type: <prop-encoded-array>
32*91f16700Schasinglulu   - An array consisting of 4 <u32> values, identifying the UUID of the service
33*91f16700Schasinglulu     implemented by this partition. The UUID format is described in RFC 4122.
34*91f16700Schasinglulu
35*91f16700Schasinglulu- id
36*91f16700Schasinglulu   - value type: <u32>
37*91f16700Schasinglulu   - Pre-allocated partition ID.
38*91f16700Schasinglulu
39*91f16700Schasinglulu- auxiliary-id
40*91f16700Schasinglulu   - value type: <u32>
41*91f16700Schasinglulu   - Pre-allocated ID that could be used in memory management transactions.
42*91f16700Schasinglulu
43*91f16700Schasinglulu- description
44*91f16700Schasinglulu   - value type: <string>
45*91f16700Schasinglulu   - Name of the partition e.g. for debugging purposes.
46*91f16700Schasinglulu
47*91f16700Schasinglulu- execution-ctx-count [mandatory]
48*91f16700Schasinglulu   - value type: <u32>
49*91f16700Schasinglulu   - Number of vCPUs that a VM or SP wants to instantiate.
50*91f16700Schasinglulu
51*91f16700Schasinglulu      - In the absence of virtualization, this is the number of execution
52*91f16700Schasinglulu        contexts that a partition implements.
53*91f16700Schasinglulu      - If value of this field = 1 and number of PEs > 1 then the partition is
54*91f16700Schasinglulu        treated as UP & migrate capable.
55*91f16700Schasinglulu      - If the value of this field > 1 then the partition is treated as a MP
56*91f16700Schasinglulu        capable partition irrespective of the number of PEs.
57*91f16700Schasinglulu
58*91f16700Schasinglulu- exception-level [mandatory]
59*91f16700Schasinglulu   - value type: <u32>
60*91f16700Schasinglulu   - The target exception level for the partition:
61*91f16700Schasinglulu
62*91f16700Schasinglulu      - 0x0: EL1
63*91f16700Schasinglulu      - 0x1: S_EL0
64*91f16700Schasinglulu      - 0x2: S_EL1
65*91f16700Schasinglulu
66*91f16700Schasinglulu- execution-state [mandatory]
67*91f16700Schasinglulu   - value type: <u32>
68*91f16700Schasinglulu   - The target execution state of the partition:
69*91f16700Schasinglulu
70*91f16700Schasinglulu      - 0: AArch64
71*91f16700Schasinglulu      - 1: AArch32
72*91f16700Schasinglulu
73*91f16700Schasinglulu- load-address
74*91f16700Schasinglulu   - value type: <u64>
75*91f16700Schasinglulu   - Physical base address of the partition in memory. Absence of this field
76*91f16700Schasinglulu     indicates that the partition is position independent and can be loaded at
77*91f16700Schasinglulu     any address chosen at boot time.
78*91f16700Schasinglulu
79*91f16700Schasinglulu- entrypoint-offset
80*91f16700Schasinglulu   - value type: <u64>
81*91f16700Schasinglulu   - Offset from the base of the partition's binary image to the entry point of
82*91f16700Schasinglulu     the partition. Absence of this field indicates that the entry point is at
83*91f16700Schasinglulu     offset 0x0 from the base of the partition's binary.
84*91f16700Schasinglulu
85*91f16700Schasinglulu- xlat-granule [mandatory]
86*91f16700Schasinglulu   - value type: <u32>
87*91f16700Schasinglulu   - Translation granule used with the partition:
88*91f16700Schasinglulu
89*91f16700Schasinglulu      - 0x0: 4k
90*91f16700Schasinglulu      - 0x1: 16k
91*91f16700Schasinglulu      - 0x2: 64k
92*91f16700Schasinglulu
93*91f16700Schasinglulu- boot-order
94*91f16700Schasinglulu   - value type: <u16>
95*91f16700Schasinglulu   - A unique number amongst all partitions that specifies if this partition
96*91f16700Schasinglulu     must be booted before others. The partition with the smaller number will be
97*91f16700Schasinglulu     booted first.
98*91f16700Schasinglulu
99*91f16700Schasinglulu- rx-tx-buffer
100*91f16700Schasinglulu   - value type: "memory-regions" node
101*91f16700Schasinglulu   - Specific "memory-regions" nodes that describe the RX/TX buffers expected
102*91f16700Schasinglulu     by the partition.
103*91f16700Schasinglulu     The "compatible" must be the string "arm,ffa-manifest-rx_tx-buffer".
104*91f16700Schasinglulu
105*91f16700Schasinglulu- messaging-method [mandatory]
106*91f16700Schasinglulu   - value type: <u8>
107*91f16700Schasinglulu   - Specifies which messaging methods are supported by the partition, set bit
108*91f16700Schasinglulu     means the feature is supported, clear bit - not supported:
109*91f16700Schasinglulu
110*91f16700Schasinglulu      - Bit[0]: partition can receive direct requests if set
111*91f16700Schasinglulu      - Bit[1]: partition can send direct requests if set
112*91f16700Schasinglulu      - Bit[2]: partition can send and receive indirect messages
113*91f16700Schasinglulu
114*91f16700Schasinglulu- managed-exit
115*91f16700Schasinglulu   - value type: <empty>
116*91f16700Schasinglulu   - Specifies if managed exit is supported.
117*91f16700Schasinglulu   - This field is deprecated in favor of ns-interrupts-action field in the FF-A
118*91f16700Schasinglulu     v1.1 EAC0 spec.
119*91f16700Schasinglulu
120*91f16700Schasinglulu- ns-interrupts-action [mandatory]
121*91f16700Schasinglulu   - value type: <u32>
122*91f16700Schasinglulu   - Specifies the action that the SPMC must take in response to a Non-secure
123*91f16700Schasinglulu     physical interrupt.
124*91f16700Schasinglulu
125*91f16700Schasinglulu      - 0x0: Non-secure interrupt is queued
126*91f16700Schasinglulu      - 0x1: Non-secure interrupt is signaled after a managed exit
127*91f16700Schasinglulu      - 0x2: Non-secure interrupt is signaled
128*91f16700Schasinglulu
129*91f16700Schasinglulu   - This field supersedes the managed-exit field in the FF-A v1.0 spec.
130*91f16700Schasinglulu
131*91f16700Schasinglulu- other-s-interrupts-action
132*91f16700Schasinglulu   - value type: <u32>
133*91f16700Schasinglulu   - Specifies the action that the SPMC must take in response to a Other-Secure
134*91f16700Schasinglulu     physical interrupt.
135*91f16700Schasinglulu
136*91f16700Schasinglulu      - 0x0: Other-Secure interrupt is queued
137*91f16700Schasinglulu      - 0x1: Other-Secure interrupt is signaled
138*91f16700Schasinglulu
139*91f16700Schasinglulu- has-primary-scheduler
140*91f16700Schasinglulu   - value type: <empty>
141*91f16700Schasinglulu   - Presence of this field indicates that the partition implements the primary
142*91f16700Schasinglulu     scheduler. If so, run-time EL must be EL1.
143*91f16700Schasinglulu
144*91f16700Schasinglulu- time-slice-mem
145*91f16700Schasinglulu   - value type: <empty>
146*91f16700Schasinglulu   - Presence of this field indicates that the partition doesn't expect the
147*91f16700Schasinglulu     partition manager to time slice long running memory management functions.
148*91f16700Schasinglulu
149*91f16700Schasinglulu- gp-register-num
150*91f16700Schasinglulu   - value type: <u32>
151*91f16700Schasinglulu   - The field specifies the general purpose register number but not its width.
152*91f16700Schasinglulu     The width is derived from the partition's execution state, as specified in
153*91f16700Schasinglulu     the partition properties. For example, if the number value is 1 then the
154*91f16700Schasinglulu     general-purpose register used will be x1 in AArch64 state and w1 in AArch32
155*91f16700Schasinglulu     state.
156*91f16700Schasinglulu     Presence of this field indicates that the partition expects the address of
157*91f16700Schasinglulu     the FF-A boot information blob to be passed in the specified general purpose
158*91f16700Schasinglulu     register.
159*91f16700Schasinglulu
160*91f16700Schasinglulu- stream-endpoint-ids
161*91f16700Schasinglulu   - value type: <prop-encoded-array>
162*91f16700Schasinglulu   - List of <u32> tuples, identifying the IDs this partition is acting as
163*91f16700Schasinglulu     proxy for.
164*91f16700Schasinglulu
165*91f16700Schasinglulu- power-management-messages
166*91f16700Schasinglulu   - value type: <u32>
167*91f16700Schasinglulu   - Specifies which power management messages a partition subscribes to.
168*91f16700Schasinglulu     A set bit means the partition should be informed of the power event, clear
169*91f16700Schasinglulu     bit - should not be informed of event:
170*91f16700Schasinglulu
171*91f16700Schasinglulu      - Bit[0]: CPU_OFF
172*91f16700Schasinglulu      - Bit[1]: CPU_SUSPEND
173*91f16700Schasinglulu      - Bit[2]: CPU_SUSPEND_RESUME
174*91f16700Schasinglulu
175*91f16700SchasingluluMemory Regions
176*91f16700Schasinglulu--------------
177*91f16700Schasinglulu
178*91f16700Schasinglulu- compatible [mandatory]
179*91f16700Schasinglulu   - value type: <string>
180*91f16700Schasinglulu   - Must be the string "arm,ffa-manifest-memory-regions".
181*91f16700Schasinglulu
182*91f16700Schasinglulu- description
183*91f16700Schasinglulu   - value type: <string>
184*91f16700Schasinglulu   - Name of the memory region e.g. for debugging purposes.
185*91f16700Schasinglulu
186*91f16700Schasinglulu- pages-count [mandatory]
187*91f16700Schasinglulu   - value type: <u32>
188*91f16700Schasinglulu   - Count of pages of memory region as a multiple of the translation granule
189*91f16700Schasinglulu     size
190*91f16700Schasinglulu
191*91f16700Schasinglulu- attributes [mandatory]
192*91f16700Schasinglulu   - value type: <u32>
193*91f16700Schasinglulu   - Mapping modes: ORed to get required permission
194*91f16700Schasinglulu
195*91f16700Schasinglulu      - 0x1: Read
196*91f16700Schasinglulu      - 0x2: Write
197*91f16700Schasinglulu      - 0x4: Execute
198*91f16700Schasinglulu      - 0x8: Security state
199*91f16700Schasinglulu
200*91f16700Schasinglulu- base-address
201*91f16700Schasinglulu   - value type: <u64>
202*91f16700Schasinglulu   - Base address of the region. The address must be aligned to the translation
203*91f16700Schasinglulu     granule size.
204*91f16700Schasinglulu     The address given may be a Physical Address (PA), Virtual Address (VA), or
205*91f16700Schasinglulu     Intermediate Physical Address (IPA). Refer to the FF-A specification for
206*91f16700Schasinglulu     more information on the restrictions around the address type.
207*91f16700Schasinglulu     If the base address is omitted then the partition manager must map a memory
208*91f16700Schasinglulu     region of the specified size into the partition's translation regime and
209*91f16700Schasinglulu     then communicate the region properties (including the base address chosen
210*91f16700Schasinglulu     by the partition manager) to the partition.
211*91f16700Schasinglulu
212*91f16700SchasingluluDevice Regions
213*91f16700Schasinglulu--------------
214*91f16700Schasinglulu
215*91f16700Schasinglulu- compatible [mandatory]
216*91f16700Schasinglulu   - value type: <string>
217*91f16700Schasinglulu   - Must be the string "arm,ffa-manifest-device-regions".
218*91f16700Schasinglulu
219*91f16700Schasinglulu- description
220*91f16700Schasinglulu   - value type: <string>
221*91f16700Schasinglulu   - Name of the device region e.g. for debugging purposes.
222*91f16700Schasinglulu
223*91f16700Schasinglulu- pages-count [mandatory]
224*91f16700Schasinglulu   - value type: <u32>
225*91f16700Schasinglulu   - Count of pages of memory region as a multiple of the translation granule
226*91f16700Schasinglulu     size
227*91f16700Schasinglulu
228*91f16700Schasinglulu- attributes [mandatory]
229*91f16700Schasinglulu   - value type: <u32>
230*91f16700Schasinglulu   - Mapping modes: ORed to get required permission
231*91f16700Schasinglulu
232*91f16700Schasinglulu     - 0x1: Read
233*91f16700Schasinglulu     - 0x2: Write
234*91f16700Schasinglulu     - 0x4: Execute
235*91f16700Schasinglulu     - 0x8: Security state
236*91f16700Schasinglulu
237*91f16700Schasinglulu- base-address [mandatory]
238*91f16700Schasinglulu   - value type: <u64>
239*91f16700Schasinglulu   - Base address of the region. The address must be aligned to the translation
240*91f16700Schasinglulu     granule size.
241*91f16700Schasinglulu     The address given may be a Physical Address (PA), Virtual Address (VA), or
242*91f16700Schasinglulu     Intermediate Physical Address (IPA). Refer to the FF-A specification for
243*91f16700Schasinglulu     more information on the restrictions around the address type.
244*91f16700Schasinglulu
245*91f16700Schasinglulu- smmu-id
246*91f16700Schasinglulu   - value type: <u32>
247*91f16700Schasinglulu   - On systems with multiple System Memory Management Units (SMMUs) this
248*91f16700Schasinglulu     identifier is used to inform the partition manager which SMMU the device is
249*91f16700Schasinglulu     upstream of. If the field is omitted then it is assumed that the device is
250*91f16700Schasinglulu     not upstream of any SMMU.
251*91f16700Schasinglulu
252*91f16700Schasinglulu- stream-ids
253*91f16700Schasinglulu   - value type: <prop-encoded-array>
254*91f16700Schasinglulu   - A list of (id, mem-manage) pair, where:
255*91f16700Schasinglulu
256*91f16700Schasinglulu      - id: A unique <u32> value amongst all devices assigned to the partition.
257*91f16700Schasinglulu
258*91f16700Schasinglulu- interrupts [mandatory]
259*91f16700Schasinglulu   - value type: <prop-encoded-array>
260*91f16700Schasinglulu   - A list of (id, attributes) pair describing the device interrupts, where:
261*91f16700Schasinglulu
262*91f16700Schasinglulu      - id: The <u32> interrupt IDs.
263*91f16700Schasinglulu      - attributes: A <u32> value, containing attributes for each interrupt ID:
264*91f16700Schasinglulu
265*91f16700Schasinglulu        +----------------------+----------+
266*91f16700Schasinglulu        |Field                 | Bit(s)   |
267*91f16700Schasinglulu        +----------------------+----------+
268*91f16700Schasinglulu        | Priority	       | 7:0      |
269*91f16700Schasinglulu        +----------------------+----------+
270*91f16700Schasinglulu        | Security state       | 8        |
271*91f16700Schasinglulu        +----------------------+----------+
272*91f16700Schasinglulu        | Config(Edge/Level)   | 9        |
273*91f16700Schasinglulu        +----------------------+----------+
274*91f16700Schasinglulu        | Type(SPI/PPI/SGI)    | 11:10    |
275*91f16700Schasinglulu        +----------------------+----------+
276*91f16700Schasinglulu
277*91f16700Schasinglulu        Security state:
278*91f16700Schasinglulu          - Secure:       1
279*91f16700Schasinglulu          - Non-secure:   0
280*91f16700Schasinglulu
281*91f16700Schasinglulu        Configuration:
282*91f16700Schasinglulu          - Edge triggered:       0
283*91f16700Schasinglulu          - Level triggered:      1
284*91f16700Schasinglulu
285*91f16700Schasinglulu        Type:
286*91f16700Schasinglulu          - SPI:  0b10
287*91f16700Schasinglulu          - PPI:  0b01
288*91f16700Schasinglulu          - SGI:  0b00
289*91f16700Schasinglulu
290*91f16700Schasinglulu- interrupts-target
291*91f16700Schasinglulu   - value type: <prop-encoded-array>
292*91f16700Schasinglulu   - A list of (id, mpdir upper bits, mpidr lower bits) tuples describing which
293*91f16700Schasinglulu     mpidr the interrupt is routed to, where:
294*91f16700Schasinglulu
295*91f16700Schasinglulu      - id: The <u32> interrupt ID. Must be one of those specified in the
296*91f16700Schasinglulu            "interrupts" field.
297*91f16700Schasinglulu      - mpidr upper bits: The <u32> describing the upper bits of the 64 bits
298*91f16700Schasinglulu                          mpidr
299*91f16700Schasinglulu      - mpidr lower bits: The <u32> describing the lower bits of the 64 bits
300*91f16700Schasinglulu                          mpidr
301*91f16700Schasinglulu
302*91f16700Schasinglulu- exclusive-access
303*91f16700Schasinglulu   - value type: <empty>
304*91f16700Schasinglulu   - Presence of this field implies that this endpoint must be granted exclusive
305*91f16700Schasinglulu     access and ownership of this device's MMIO region.
306*91f16700Schasinglulu
307*91f16700Schasinglulu--------------
308*91f16700Schasinglulu
309*91f16700Schasinglulu*Copyright (c) 2019-2022, Arm Limited and Contributors. All rights reserved.*
310