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