J-Alves | bec49a1 | 2023-10-18 13:27:41 +0100 | [diff] [blame] | 1 | # Change Log |
Olivier Deprez | 55b74f8 | 2021-11-10 11:32:31 +0100 | [diff] [blame] | 2 | |
J-Alves | 946fde9 | 2023-11-03 17:34:20 +0000 | [diff] [blame] | 3 | ## v2.10 |
| 4 | ### Highlights |
| 5 | |
| 6 | * FF-A v1.2 (continued adoption): |
| 7 | * `FFA_YIELD` interface: |
| 8 | * Allow to be invoked while endpoint's partition runtime model is |
| 9 | either direct message request or secure interrupt handling. |
| 10 | * Allow an endpoint to specify an optional timeout such that it can be |
| 11 | rescheduled after appropriate time to avoid busy wait. |
| 12 | * Handle the `FFA_ERROR` interface at the SPs initialisation runtime model |
| 13 | to put the SP in an aborted state. |
| 14 | * Support for Logical Secure Partitions at EL3, managed by the SPMD: |
| 15 | * Direct messaging request from LSPs to SPs at the virtual FF-A instance. |
| 16 | * Discovery of LSPs via `FFA_PARTITION_INFO_GET(_REGS)` interfaces. |
| 17 | * Support flag to bypass multiple borrower checks as part of `FFA_MEM_RETRIEVE_REQ` |
| 18 | handling. |
| 19 | * Memory region nodes support addresses relative to partition's load address. |
| 20 | * Hardware architecture support: |
| 21 | * Fix to SMCCC use on Hafnium, to support use of extended register set as per |
| 22 | SMCCCv1.2 for FF-A v1.2 and above. |
| 23 | * GICv3: Enable platforms to leverage Shared Peripheral Interrupts extended ranges. |
| 24 | * New paravirtualized interfaces to reconfigure a physical interrupt at runtime: |
| 25 | target CPU, disabling/enabling the secure interrupt, and changing interrupt's |
| 26 | security state. |
| 27 | * Leverage support of secure and non-secure set of page tables for SMMUv3 streams. |
| 28 | * Platform description of secure and non-secure memory is mandatory in the SPMC |
| 29 | manifest. |
| 30 | * Use security state information in the S2 page tables to invalidate SP's TLB. |
| 31 | * Tests, scripts and testing framework: |
| 32 | * Test framework improved to add tests into the SP's intialisation, via means of |
| 33 | a helper macro. |
| 34 | * Removed duplicated set of tests that were used to enable support of EL0 |
| 35 | partitions. |
| 36 | * Hypervisor build refactored to track the state of memory sharing operations. |
| 37 | * Few memory sharing related tests to run on EL3 SPMC, and serve as an indicator |
| 38 | about feature parity. |
| 39 | * Added ability to perform test coverage analysis, via Hafnium's testing scripts. |
| 40 | * Increased test coverage of memory sharing functionality. |
| 41 | * Bug fixes: |
| 42 | * Various fixes to memory sharing functionality: |
| 43 | * Clear memory operations retrieve security state from S2 translation |
| 44 | attributes. |
| 45 | * Validation to page count field in the composite memory descriptor. |
| 46 | * No overlapping of memory constituents. |
| 47 | * Restrict SP from doing lend/share/donate targeting a normal world borrower. |
| 48 | * Processing of instruction permissions specified in the lend/share/donate |
| 49 | and by the borrower in the memory retrieve operation. |
| 50 | * Use the NS bit in the `FFA_MEM_RETRIEVE_RESP` from SPMC to SP. |
| 51 | * Force uniqueness of boot order field in the partition's manifest. |
| 52 | * Added `FFA_RUN` interface restriction towards vCPU cores migration. |
| 53 | * Refactor use of locked vCPU structures in few identified scenarios, that |
| 54 | were prone to creating deadlocks. |
| 55 | * Fixed the version compatibility rules in handling of the `FFA_VERSION` |
| 56 | interface. |
| 57 | * Misc: |
| 58 | * Migration of Hafnium documentation as the reference Secure Partition Manager |
| 59 | into its own pages, leveraging the sphinx documentation framework. |
| 60 | * Free resources allocated to SP if it gets to an aborted state, including |
| 61 | disabling any physical interrupts that might trigger. |
| 62 | * Deprecation of legacy hypervisor calls `HF_MAILBOX_*_GET`. |
| 63 | * Simplified code path in the handling of secure interrupts. |
| 64 | * Added build option to specify build target, which allows for faster builds, |
| 65 | e.g. `make PLATFORM=secure_aem_v8a_fvp_vhe`. |
| 66 | |
Olivier Deprez | 0715b8e | 2023-05-11 12:28:03 +0200 | [diff] [blame] | 67 | ## v2.9 |
Olivier Deprez | 28c95f4 | 2023-05-22 14:28:39 +0200 | [diff] [blame] | 68 | ### Highlights |
Olivier Deprez | 0715b8e | 2023-05-11 12:28:03 +0200 | [diff] [blame] | 69 | |
| 70 | * FF-A v1.2 (early adoption) |
| 71 | * Implemented `FFA_PARTITION_INFO_GET_REGS` ABI permitting discovery of |
| 72 | secure partitions by the use of general purpose registers instead of RX/TX |
| 73 | buffers. |
| 74 | * `FFA_CONSOLE_LOG` ABI support is improved from earlier release. It permits |
| 75 | handling multiple characters passed through general purpose registers. |
| 76 | The intent is to deprecate the legacy `HF_DEBUG_LOG` hypercall in a next |
| 77 | release. |
| 78 | * Introduced `FFA_EL3_INTR_HANDLE` ABI permitting the delegation of Group0 |
| 79 | physical secure interrupt handling to EL3. A G0 interrupt triggered while |
| 80 | an SP is running traps to S-EL2 and is routed to the SPMD by the use of |
| 81 | this ABI. Conversely, a G0 interrupt triggered while the normal world runs |
| 82 | traps to EL3. |
| 83 | * FF-A v1.1 interrupt handling |
| 84 | * Added support for secure interrupt signalling to S-EL0 partitions. |
| 85 | * Increased the maximum number of virtual interrupts supported by an SP to a |
| 86 | platform defined value (default 1024). This lifts a limitation in which |
| 87 | SPs were allowed to declare only the first 64 physical interrupt IDs. |
| 88 | * Added the impdef 'other-s-interrupts-action' field to SP manifests |
| 89 | specifying the action to be taken (queued or signaled) in response to a |
| 90 | secure interrupt targetted to an SP that is not the currently running SP. |
| 91 | * For S-EL1 SP vCPUs, enable the notification pending and managed exit |
| 92 | virtual interrupts if requested in the manifest. |
| 93 | For S-EL0 SP vCPUs, enable virtual interrupts IDs matching the secure |
| 94 | physical interrupt IDs declared in device regions. |
| 95 | * Allow a physical interrupt declared in a SP manifest device region to be |
| 96 | routed to any PE specified by its MPIDR. Introduce the 'interrupts-target' |
| 97 | manifest field for this purpose. |
| 98 | * FF-A v1.1 memory sharing |
| 99 | * Implemented changes to memory sharing structures to support FF-A backwards |
| 100 | compatibility updates in the specification. The SPMC implementation caters |
| 101 | for the case of existing FF-A v1.0 endpoints on top of the FF-A v1.1 SPMC. |
| 102 | The latter performs the necessary conversions in the memory sharing |
| 103 | structures. |
| 104 | * Implemented capability to share/lend/donate memory to multiple borrowers |
| 105 | including VMs or SPs. |
| 106 | * Fragmented memory sharing is supported between normal world and secure |
| 107 | world endpoints. |
| 108 | * FF-A v1.1 power management |
| 109 | * Added the impdef 'power-management-messages' field to SP manifests |
| 110 | specifying the type of power management events relayed to the SPMC. |
| 111 | * Removed the limitation in which the first SP must be a MP SP. |
| 112 | The configuration where all deployed SPs are S-EL0 SPs is now supported. |
| 113 | * FF-A v1.1 Indirect messaging |
| 114 | * Updated mailbox internal state structures to align with RX/TX buffer |
| 115 | synchronization rules (buffer state and ownership transfer). |
| 116 | * Misc and bug fixes |
| 117 | * Introduced SPMC manifest memory region nodes specifying the system address |
| 118 | ranges for secure and non-secure memory. This permits further hardening in |
| 119 | which the SPMC needs to know the security state of a memory range. This |
| 120 | helps boot time validation of SP manifests, and run-time checks in the |
| 121 | memory sharing protocol. |
| 122 | * SP manifest memory regions validation is hardened such that one SP cannot |
| 123 | declare a memory region overlapping another SP's memory region. |
| 124 | * Drop dynamic allocation of memory region base address. The option for |
| 125 | declaring a memory region without its base address (and let the SPMC |
| 126 | choose it) is removed. |
| 127 | * Fixed handling of FEAT_LPA/FEAT_LPA2. |
| 128 | * SMMUv3: fix SIDSIZE field usage. |
| 129 | * GIC: fixed interrupt type configuration (edge/level). |
| 130 | * CI and test infrastructure |
| 131 | * Migration to LLVM/clang 15.0.6 |
| 132 | * Removal of non-VHE configurations. Keep only configurations assuming |
| 133 | Armv8.1 Virtualization Host Extensions is implemented. This implies |
| 134 | HCR_EL2.E2H is always set. This change is transparent for the end user as |
| 135 | configurations supported with VHE enabled are a superset of legacy non-VHE |
| 136 | configurations. |
| 137 | * EL3 SPMC: added test configurations to permit testing TF-A's EL3 SPMC |
| 138 | by the use of Hafnium's CI test and infrastructure. The goal is to improve |
| 139 | the test coverage for this alternative SPMC configuration and maintain a |
| 140 | feature set parity with the S-EL2 SPMC. |
| 141 | * Added debug capabilities to hftest script. |
| 142 | |
Olivier Deprez | 28c95f4 | 2023-05-22 14:28:39 +0200 | [diff] [blame] | 143 | ### Known limitations: |
Olivier Deprez | 0715b8e | 2023-05-11 12:28:03 +0200 | [diff] [blame] | 144 | * Power management support limits to cpu on and cpu off events. Only S-EL1 |
| 145 | partitions can opt in for power management events. A power management |
| 146 | event is forwarded from the SPMD to the SPMC and isn't forwarded to a SP. |
| 147 | |
Olivier Deprez | b7d27ac | 2022-11-14 09:49:50 +0100 | [diff] [blame] | 148 | ## v2.8 |
Olivier Deprez | 28c95f4 | 2023-05-22 14:28:39 +0200 | [diff] [blame] | 149 | ### Highlights |
Olivier Deprez | b7d27ac | 2022-11-14 09:49:50 +0100 | [diff] [blame] | 150 | |
| 151 | * FF-A v1.1 partition runtime model and CPU cycle allocation modes |
| 152 | * Implemented partition runtime models for secure partitions entered at |
| 153 | initialization, processing a secure interrupt or as a result of allocation |
Demi Marie Obenour | 1a55b77 | 2023-02-15 10:38:26 -0500 | [diff] [blame] | 154 | of CPU cycles by `FFA_RUN` and `FFA_MSG_SEND_DIRECT_REQ` ABIs invocations. |
Olivier Deprez | b7d27ac | 2022-11-14 09:49:50 +0100 | [diff] [blame] | 155 | * Added state machine checks related to above, in which a partition has a |
| 156 | set of allowed transitions to enter and exit a partition runtime model. |
| 157 | * Implemented CPU cycle allocation modes and winding/unwinding of call |
| 158 | chains. |
| 159 | * Refactored managed exit field in manifests to use one of the possible |
| 160 | "Action for a non-secure interrupt" defined by the specification. |
| 161 | * Added support for preferred managed exit signal (among vIRQ or vFIQ). |
| 162 | * Support for precedence of the NS interrupt action in unwinding a normal |
| 163 | world scheduled call chain. |
| 164 | * FF-A v1.1 memory sharing |
| 165 | * Preparation changes for multiple borrowers and fragmented memory |
| 166 | sharing support. |
| 167 | * Fixed memory attributes checks as they are passed to memory sharing |
Demi Marie Obenour | 1a55b77 | 2023-02-15 10:38:26 -0500 | [diff] [blame] | 168 | primitives (`FFA_MEM_SHARE/LEND/DONATE` and `FFA_MEM_RETRIEVE_REQ`). |
Olivier Deprez | b7d27ac | 2022-11-14 09:49:50 +0100 | [diff] [blame] | 169 | * Memory sharing support for S-EL0 partitions. |
| 170 | * FF-A v1.1 notifications |
| 171 | * Added framework notifications support. |
| 172 | The supported use case is for indirect messaging to notify a partition |
| 173 | about a message pending in its RX buffer (or 'RX buffer full' framework |
| 174 | notification). |
| 175 | * Added support for notification pending interrupt injection on a RX buffer |
| 176 | full event. |
| 177 | * FF-A v1.1 Indirect messaging |
| 178 | * Added support for VM-VM, VM-SP, SP-SP indirect messaging scenarios. |
| 179 | * Added partition message header structures. |
Demi Marie Obenour | 1a55b77 | 2023-02-15 10:38:26 -0500 | [diff] [blame] | 180 | * Implemented `FFA_MSG_SEND2` and `FFA_RX_ACQUIRE` ABIs. |
Olivier Deprez | b7d27ac | 2022-11-14 09:49:50 +0100 | [diff] [blame] | 181 | * Refactored VM internal state tracking in the SPMC to support forwarding |
| 182 | of RX/TX buffer mapping/unmapping, notifications creation/destruction, |
| 183 | RX buffer acquire/release. |
| 184 | * Refactored VM mailbox states to support the RX buffer full event. |
| 185 | * FF-A console log ABI |
Demi Marie Obenour | 1a55b77 | 2023-02-15 10:38:26 -0500 | [diff] [blame] | 186 | * Added the `FFA_CONSOLE_LOG` ABI as a simple and standardized means to print |
Olivier Deprez | b7d27ac | 2022-11-14 09:49:50 +0100 | [diff] [blame] | 187 | characters without depending on an MMIO device mapped into the VM. |
| 188 | This allows a VM to print debug or information strings through an |
| 189 | hypervisor call service using general-purpose registers rather than a |
| 190 | shared buffer. Multiple VMs can use the ABI concurrently as the SPMC |
| 191 | buffers data per VM and serializes output to the physical serial device. |
| 192 | * FF-A v1.1 Setup & Discovery |
Demi Marie Obenour | 1a55b77 | 2023-02-15 10:38:26 -0500 | [diff] [blame] | 193 | * Updated the `PARTITION_INFO_GET` ABI to return the partition UUID in the |
Olivier Deprez | b7d27ac | 2022-11-14 09:49:50 +0100 | [diff] [blame] | 194 | partition information descriptors. Additionaly the partition information |
| 195 | descriptor size is returned as part of the response. |
Demi Marie Obenour | 1a55b77 | 2023-02-15 10:38:26 -0500 | [diff] [blame] | 196 | * Added `FFA_MEM_FRAG_RX/TX` as supported interface in `FFA_FEATURE` response. |
Olivier Deprez | b7d27ac | 2022-11-14 09:49:50 +0100 | [diff] [blame] | 197 | * Image footprint optimization |
| 198 | * The following updates were made with the general idea of reducing the |
| 199 | flash and RAM footprints. They are also means to adjust the memory |
| 200 | utilization based on the target market segment. |
| 201 | * Added platform defines to state the per-VM maximum number of memory and |
| 202 | device regions, interrupts and SMMU streams per device. |
| 203 | * Dynamically allocate per vCPU notifications. |
| 204 | * Allocate vCPU structures from heap. |
| 205 | * Manifest data allocation from page pool. |
| 206 | * Fixed core stacks section with noload attribute. |
| 207 | * GIC |
| 208 | * Added support for GICv3.1 extended SPI / PPI INTID ranges. |
| 209 | * Add build options to extend the number of supported virtual interrupt IDs. |
| 210 | * SVE |
| 211 | * Detect the platform supported SVE vector length or set the limit for the |
| 212 | lower ELs. |
| 213 | * Increased the SVE NS context to support the maximum vector length |
| 214 | permitted by the architecture. |
| 215 | * Above changes lift the limit about a fixed sized SVE vector length (of |
| 216 | 512 bits) used in earlier releases. |
| 217 | * Misc |
| 218 | * Partition manifest parsing: |
| 219 | * Added checks forbidding SPs to declare overlapping memory regions and |
| 220 | conflicting device interrupt ID resources. |
| 221 | * Add ability to specify the security state of a memory region |
| 222 | for S-EL0 partitions. |
| 223 | * Fixed system register trap exception injection. |
| 224 | * Removed hypervisor tables defragmentation. |
| 225 | * Add ability to define a log level per platform. |
| 226 | * Disable alignment check for EL0 partitions (when VHE is enabled). |
| 227 | |
Olivier Deprez | 28c95f4 | 2023-05-22 14:28:39 +0200 | [diff] [blame] | 228 | ### Known limitations: |
Olivier Deprez | b7d27ac | 2022-11-14 09:49:50 +0100 | [diff] [blame] | 229 | * S-EL0 partitions interrupt handling is work in progress. |
| 230 | * Normal world to secure world fragmented memory sharing and sharing to multiple |
| 231 | borrowers is work in progress. |
| 232 | |
Olivier Deprez | 79e9522 | 2022-05-09 17:21:08 +0200 | [diff] [blame] | 233 | ## v2.7 |
Olivier Deprez | 28c95f4 | 2023-05-22 14:28:39 +0200 | [diff] [blame] | 234 | ### Highlights |
Olivier Deprez | 79e9522 | 2022-05-09 17:21:08 +0200 | [diff] [blame] | 235 | |
| 236 | * Boot protocol (FF-A v1.1 EAC0) |
| 237 | * The SPMC primarily supports passing the SP manifest address at boot time. |
| 238 | * In a secure partition package, partition manifest and image offsets are |
| 239 | configurable. |
| 240 | * Allows for larger partition manifest sizes. |
| 241 | * Setup and discovery (FF-A v1.1 EAC0) |
Demi Marie Obenour | 1a55b77 | 2023-02-15 10:38:26 -0500 | [diff] [blame] | 242 | * `FFA_VERSION` is forwarded from SPMD to SPMC. SPMC records the version of |
Olivier Deprez | 79e9522 | 2022-05-09 17:21:08 +0200 | [diff] [blame] | 243 | a normal world endpoint. |
| 244 | * Added UUID to partition info descriptors. |
Demi Marie Obenour | 1a55b77 | 2023-02-15 10:38:26 -0500 | [diff] [blame] | 245 | * Introduced count flag to `FFA_PARTITION_INFO_GET`. |
Olivier Deprez | 79e9522 | 2022-05-09 17:21:08 +0200 | [diff] [blame] | 246 | * Interrupt handling (FF-A v1.1 Beta0) |
| 247 | * Physical GIC registers trapped when accessed from secure partitions. |
| 248 | * Priority mask register saved/restored on world switches. |
| 249 | * Interrupts masked before resuming a pre-empted vCPU. |
| 250 | * Implemented implicit secure interrupt completion signal. |
| 251 | * Allow unused GICR frame for non-existent PEs. |
| 252 | * Notifications (FF-A v1.1 EAC0) |
| 253 | * Implemented notification pending interrupt and additional test coverage. |
| 254 | * MTE stack tagging |
Demi Marie Obenour | 1a55b77 | 2023-02-15 10:38:26 -0500 | [diff] [blame] | 255 | * Implemented `FEAT_MTE2` stack tagging support at S-EL2. |
Olivier Deprez | 79e9522 | 2022-05-09 17:21:08 +0200 | [diff] [blame] | 256 | * Core stacks marked as normal tagged memory. A synchronous abort triggers |
| 257 | on a load/store tag check failure. |
| 258 | * This permits detection of wrong operations affecting buffers allocated |
| 259 | from the stack. |
| 260 | * FF-A v1.0 compliance |
| 261 | * Check composite memory region offset is defined in FF-A memory sharing. |
| 262 | * Check sender and receiver memory attributes in a FF-A memory sharing |
| 263 | operation match the attributes expected in the Hafnium implementation. |
| 264 | * Fix clear memory bit use in FF-A memory sharing from NWd to SWd. |
| 265 | * Prevent FF-A memory sharing from a SP to a NS endpoint. |
| 266 | * Reject a FF-A memory retrieve operation with the 'Address Range Alignment |
| 267 | Hint' bit set (not supported by the implementation). |
| 268 | * Refine usage of FF-A memory sharing 'clear memory flag'. |
| 269 | * Misc |
| 270 | * Improved extended memory address ranges support: |
Demi Marie Obenour | 1a55b77 | 2023-02-15 10:38:26 -0500 | [diff] [blame] | 271 | * 52 bits PA (`FEAT_LPA`/`FEAT_LPA2`) architecture extension detected |
Olivier Deprez | 79e9522 | 2022-05-09 17:21:08 +0200 | [diff] [blame] | 272 | results in limiting the EL2 Stage-1 physical address range to 48 bits. |
| 273 | * In the FF-A memory sharing operations, harden address width checks on |
| 274 | buffer mapping. |
| 275 | * Improved MP SP and S-EL0 partitions support |
| 276 | * The physical core index is passed to a SP vCPU0 on booting. |
| 277 | * Added MP SP and S-EL0 partitions boot test coverage. |
| 278 | * Emulate SMCCC VERSION to the primary VM. |
| 279 | * Memory config registers (non-secure and secure virtualization control and |
| 280 | translation table base) moved to the vCPU context. |
| 281 | * EL2 stage 1 mapping extended to 1TB to support systems with physical |
| 282 | address space larger than 512GB. |
Demi Marie Obenour | 1a55b77 | 2023-02-15 10:38:26 -0500 | [diff] [blame] | 283 | * `FFA_RUN` ABI hardened to check the vCPU index matches the PE index onto |
Olivier Deprez | 79e9522 | 2022-05-09 17:21:08 +0200 | [diff] [blame] | 284 | which a vCPU is requested to run. |
Demi Marie Obenour | 1a55b77 | 2023-02-15 10:38:26 -0500 | [diff] [blame] | 285 | * Fixed missing ISB after `CPTR_EL2` update upon PE initialization. |
Olivier Deprez | 79e9522 | 2022-05-09 17:21:08 +0200 | [diff] [blame] | 286 | * Fixed stage 2 default shareability to inner shareable (from non-shareable) |
| 287 | to better support vCPU migration. |
| 288 | * Fixed manifest structure allocation from BSS rather than stack |
| 289 | at initialization. |
| 290 | * Fixed an issue with FF-A memory reclaim executed after memory donate |
| 291 | resulting in a returned error code. |
| 292 | * Build and test environment |
| 293 | * Add the ability to use an out-of-tree toolchain. |
| 294 | * Primary intent is to permit building Hafnium on Aarch64 hosts. |
| 295 | * CI runs using the toolchain versioned in prebuilts submodule. |
| 296 | A developer can still use this version as well. |
| 297 | * Introduce an assert macro enabled by a build option on the command line. |
| 298 | Assertions are checked by default. Production builds can optionally |
| 299 | disable assertions. |
| 300 | * Added manifest options to permit loading VMs using an FF-A manifest. |
| 301 | * CI |
| 302 | * Added job running the Hypervisor + SPMC configuration on patch |
| 303 | submissions. |
| 304 | * FVP |
| 305 | * Enable secure memory option. |
| 306 | * Remove restriction on speculative execution options. |
| 307 | * Updated to use model version 11.17 build 21. |
| 308 | * Updated linux submodule to v5.10. |
| 309 | * VHE EL0 partitions tests automated through jenkins. |
| 310 | |
Olivier Deprez | 28c95f4 | 2023-05-22 14:28:39 +0200 | [diff] [blame] | 311 | ### Known limitations: |
Olivier Deprez | 79e9522 | 2022-05-09 17:21:08 +0200 | [diff] [blame] | 312 | * FF-A v1.1 EAC0 implementation is partial mainly on interrupt handling and |
| 313 | memory sharing. |
| 314 | * Hafnium limits physical interrupt IDs to 64. The legacy virtual interrupt |
| 315 | controller driver limits to 64. The recent addition of physical interrupt |
| 316 | handling in the SPMC through the GIC assumes a 1:1 mapping of a physical |
| 317 | interrupt ID to a virtual interrupt ID. |
| 318 | * Secure timer virtualization is not supported. |
| 319 | * The security state of memory or device region cannot be specified in a SP |
| 320 | manifest. |
| 321 | |
Olivier Deprez | 55b74f8 | 2021-11-10 11:32:31 +0100 | [diff] [blame] | 322 | ## v2.6 |
Olivier Deprez | 28c95f4 | 2023-05-22 14:28:39 +0200 | [diff] [blame] | 323 | ### Highlights |
Olivier Deprez | 55b74f8 | 2021-11-10 11:32:31 +0100 | [diff] [blame] | 324 | * FF-A Setup and discovery |
| 325 | * FF-A build time version updated to v1.1. |
| 326 | * Managed exit and notifications feature support enabled in SP manifests. |
Demi Marie Obenour | 1a55b77 | 2023-02-15 10:38:26 -0500 | [diff] [blame] | 327 | * Updated `FFA_FEATURES` to permit discovery of managed exit, schedule receiver, |
Olivier Deprez | 55b74f8 | 2021-11-10 11:32:31 +0100 | [diff] [blame] | 328 | and notification pending interrupt IDs. |
Demi Marie Obenour | 1a55b77 | 2023-02-15 10:38:26 -0500 | [diff] [blame] | 329 | * `FFA_PARTITION_INFO_GET` updated to permit managed exit and notification |
Olivier Deprez | 55b74f8 | 2021-11-10 11:32:31 +0100 | [diff] [blame] | 330 | support discovery. |
Demi Marie Obenour | 1a55b77 | 2023-02-15 10:38:26 -0500 | [diff] [blame] | 331 | * `FFA_SPM_ID_GET` added to permit discovering the SPMC endpoint ID (or the |
Olivier Deprez | 55b74f8 | 2021-11-10 11:32:31 +0100 | [diff] [blame] | 332 | SPMD ID at the secure physical FF-A instance). |
Demi Marie Obenour | 1a55b77 | 2023-02-15 10:38:26 -0500 | [diff] [blame] | 333 | * `FFA_RXTX_UNMAP` implementation added. |
Olivier Deprez | 55b74f8 | 2021-11-10 11:32:31 +0100 | [diff] [blame] | 334 | * FF-A v1.1 notifications |
| 335 | * Added ABIs permitting VM (or OS kernel) to SP, and SP to SP asynchronous |
| 336 | signaling. |
| 337 | * Added generation of scheduler receiver (NS physical) and notification |
| 338 | pending (secure virtual) interrupts. |
| 339 | * The schedule receiver interrupt is donated from the secure world SGI |
| 340 | interrupt ID range. |
| 341 | * FF-A v1.1 interrupt handling |
| 342 | * Added a GIC driver at S-EL2 permitting to trap and handle non-secure and |
| 343 | secure interrupts while the secure world runs. |
| 344 | * Added forwarding and handling of a secure interrupt while the normal world |
| 345 | runs. |
| 346 | * Added secure interrupt forwarding to the secure partition that had the |
| 347 | interrupt registered in its partition manifest. |
| 348 | * The interrupt deactivation happens through the Hafnium para-virtualized |
| 349 | interrupt controller interface. |
| 350 | * vCPU states, run time models and SP scheduling model are revisited as per |
| 351 | FF-A v1.1 Beta0 specification (see 'Known limitations' section below). |
| 352 | * S-EL0 partitions support |
| 353 | * Added support for VHE architecture extension in the secure world (through |
| 354 | a build option). |
| 355 | * A partition bootstraps as an S-EL0 partition based on the exception-level |
| 356 | field in the FF-A manifest. |
| 357 | * It permits the implementation of applications on top of Hafnium without |
| 358 | relying on an operating system at S-EL1. |
| 359 | * It leverages the EL2&0 Stage-1 translation regime. Apps use FF-A |
| 360 | ABIs through the SVC conduit. |
Demi Marie Obenour | 1a55b77 | 2023-02-15 10:38:26 -0500 | [diff] [blame] | 361 | * Added FF-A v1.1 `FFA_MEM_PERM_GET/SET` ABIs permitting run-time update of |
Olivier Deprez | 55b74f8 | 2021-11-10 11:32:31 +0100 | [diff] [blame] | 362 | memory region permissions. |
| 363 | * It supersedes the existing S-EL1 shim architecture (without removing its |
| 364 | support). |
| 365 | * S-EL1 SP, S-EL0 SP or former S-EL0 SP+shim can all co-exist in the same |
| 366 | system. |
| 367 | * SVE |
| 368 | * Support for saving/restoring the SVE live state such that S-EL2/Hafnium |
| 369 | preserves the normal world state on world switches. |
| 370 | * Secure partitions are permitted to use FP/SIMD while normal world uses |
| 371 | SVE/SIMD/FP on the same core. |
| 372 | * The SVE NS live state comprises FPCR/FPSR/FFR/p[16]/Z[32] registers. |
| 373 | * LLVM/Clang 12 |
| 374 | * The toolchain stored in prebuilts submodule is updated to LLVM 12.0.5. |
| 375 | * Build/static analyzer fixes done in the top and third party projects. |
| 376 | * Linux sources (used by the test infrastructure) are updated to 5.4.148. |
| 377 | The linux test kernel module build is updated to only depend on LLVM |
| 378 | toolchain. |
| 379 | * Hafnium CI improvements |
| 380 | * Added two configurations permitting Hafnium testing in the secure world. |
| 381 | * First configuration launches both the Hypervisor in the normal world |
| 382 | and the SPMC in the secure world. This permits thorough FF-A ABI testing |
| 383 | among normal and secure world endpoints. |
| 384 | * The second configuration launches the SPMC alone for component testing |
| 385 | or SP to SP ABI testing. |
Demi Marie Obenour | 1a55b77 | 2023-02-15 10:38:26 -0500 | [diff] [blame] | 386 | * Hafnium CI Qemu version updated to v6.0.0 (implements VHE and `FEAT_SEL2` |
Olivier Deprez | 55b74f8 | 2021-11-10 11:32:31 +0100 | [diff] [blame] | 387 | extensions). |
| 388 | * FF-A compliance fixes |
| 389 | * Added checks for valid memory permissions values in manifest memory and |
| 390 | device regions declarations. |
Demi Marie Obenour | 1a55b77 | 2023-02-15 10:38:26 -0500 | [diff] [blame] | 391 | * `FFA_FEATURES` fixed to state indirect messages are not supported by |
Olivier Deprez | 55b74f8 | 2021-11-10 11:32:31 +0100 | [diff] [blame] | 392 | the SPMC. |
| 393 | * Limit an SP to emit a direct request to another SP only. |
| 394 | * Memory sharing: fixed input validation and return values. |
Demi Marie Obenour | 1a55b77 | 2023-02-15 10:38:26 -0500 | [diff] [blame] | 395 | * `FFA_RXTX_MAP` fixed returned error codes. |
| 396 | * `FFA_MSG_WAIT` input parameters check hardened. |
Olivier Deprez | 55b74f8 | 2021-11-10 11:32:31 +0100 | [diff] [blame] | 397 | |
Olivier Deprez | 28c95f4 | 2023-05-22 14:28:39 +0200 | [diff] [blame] | 398 | ### Known limitations: |
Olivier Deprez | 55b74f8 | 2021-11-10 11:32:31 +0100 | [diff] [blame] | 399 | * S-EL0 partitions/VHE: the feature is in an experimental stage and not all use |
| 400 | cases have been implemented or tested. Normal world to SP and SP to SP memory |
| 401 | sharing is not tested. Interrupt handling is not tested. |
| 402 | * The current implementation does not support handling a secure interrupt that |
| 403 | is triggered while currently handling a secure interrupt. This restricts to |
| 404 | scenarios described in Table 8.13 and Table 8.14 of the FF-A v1.1 Beta0 |
| 405 | specification. Priority Mask Register is not saved/restored during context |
| 406 | switching while handling secure interrupt. |
| 407 | * Hafnium CI: scenarios involving the Hypervisor are left as test harness |
| 408 | purposes only, not meant for production use cases. |
Daniel Boulby | ccb7068 | 2021-04-28 19:40:39 +0100 | [diff] [blame] | 409 | |
| 410 | ## v2.5 |
Olivier Deprez | 28c95f4 | 2023-05-22 14:28:39 +0200 | [diff] [blame] | 411 | ### Highlights |
Daniel Boulby | ccb7068 | 2021-04-28 19:40:39 +0100 | [diff] [blame] | 412 | * BTI/Pointer authentication support |
Demi Marie Obenour | 1a55b77 | 2023-02-15 10:38:26 -0500 | [diff] [blame] | 413 | * Add branch protection build option for `FEAT_PAuth` and `FEAT_BTI` to the |
Daniel Boulby | ccb7068 | 2021-04-28 19:40:39 +0100 | [diff] [blame] | 414 | clang command line. This only affects the S-EL2 image. |
| 415 | * Enable pointer authentication by supplying a platform defined pseudo |
| 416 | random key. |
| 417 | * Enable BTI by setting the guarded page bit in MMU descriptors for |
| 418 | executable pages. |
| 419 | * SMMUv3.2 S-EL2 support |
| 420 | * Add support for SMMUv3 driver to perform stage 2 translation, protection |
| 421 | and isolation of upstream peripheral device's DMA transactions. |
| 422 | * FF-A v1.0 Non-secure interrupt handling |
| 423 | * Trap physical interrupts to S-EL2 when running a SP. |
| 424 | * Handle non secure interrupts that occur while an SP is executing, |
| 425 | performing managed exit if supported. |
| 426 | * Add basic support for the GICv3 interrupt controller for the AArch64 |
| 427 | platform. |
| 428 | * FF-A power management support at boot time |
| 429 | * Provide platform-independent power management implementations for the |
| 430 | Hypervisor and SPMC. |
Demi Marie Obenour | 1a55b77 | 2023-02-15 10:38:26 -0500 | [diff] [blame] | 431 | * Implement the `FFA_SECONDARY_EP_REGISTER` interface for an MP SP or SPMC |
Daniel Boulby | ccb7068 | 2021-04-28 19:40:39 +0100 | [diff] [blame] | 432 | to register the secondary core cold boot entry point for each of their |
| 433 | execution contexts. |
| 434 | * Introduce a generic "SPMD handler" to process the power management events |
| 435 | that may be conveyed from SPMD to SPMC, such as core off. |
| 436 | * FF-A Direct message interfaces |
| 437 | * Introduce SP to SP direct messaging. |
| 438 | * Fix bug in the MP SP to UP SP direct response handling. |
| 439 | * FF-A Memory sharing interfaces |
| 440 | * Introduce SP to SP memory sharing. |
| 441 | * When a sender of a memory management operation reclaims memory, set the |
| 442 | memory regions permissions back to it's original configuration. |
| 443 | * Require default permissions to be supplied to the function |
Demi Marie Obenour | 1a55b77 | 2023-02-15 10:38:26 -0500 | [diff] [blame] | 444 | `ffa_memory_permissions_to_mode`, so in the case where no permissions are |
Daniel Boulby | ccb7068 | 2021-04-28 19:40:39 +0100 | [diff] [blame] | 445 | specified for a memory operation, the data and instruction permissions can |
| 446 | be set to the default. |
| 447 | * Encode Bit[63] of the memory region handle according to if the handle is |
| 448 | allocated by the Hypervisor or SPMC. |
| 449 | * FF-A v1.0 spec compliance |
Demi Marie Obenour | 1a55b77 | 2023-02-15 10:38:26 -0500 | [diff] [blame] | 450 | * Return `INVALID_PARAMETER` error code instead of `NOT_SUPPORTED` for direct |
Daniel Boulby | ccb7068 | 2021-04-28 19:40:39 +0100 | [diff] [blame] | 451 | messaging interfaces when an invalid sender or receiver id is given. |
| 452 | * Check that reserved parameter registers are 0 when invoking direct |
| 453 | messaging ABI interfaces. |
| 454 | * For SMC32 compliant direct message interfaces, only copy 32-bits |
| 455 | parameter values. |
| 456 | * Change the FF-A error codes to 32-bit to match the FF-A specification. |
| 457 | * Fix consistency with maintaining the calling convention bit of the |
Demi Marie Obenour | 1a55b77 | 2023-02-15 10:38:26 -0500 | [diff] [blame] | 458 | func id between the `ffa_handler` and the `FFA_FEATURES` function. |
Daniel Boulby | ccb7068 | 2021-04-28 19:40:39 +0100 | [diff] [blame] | 459 | * Remove primary VM dependencies in the SPMC |
| 460 | * Treat normal world as primary VM when running in the secure world. |
| 461 | * Create an SPMC boot flow. |
| 462 | * Hafnium CI |
| 463 | * Enable Hafnium CI to include tests for Hafnium SPMC. |
| 464 | * Add basic exception handler to service VM's. |
| 465 | * SIMD support |
| 466 | * Add saving/restoring of other world FP/NEON/SIMD state when entering and |
| 467 | exiting the SPMC. |
| 468 | * SPMC early boot cache fix |
| 469 | * Import data cache clean and invalidation helpers from TF-A project and |
| 470 | provide an arch module for cache operations. |
| 471 | * Invalidate the SPMC image in the data cache at boot time to prevent |
| 472 | potential access to stale cache entries left by earlier boots stages. |
| 473 | * Misc and bug fixes |
| 474 | * Complete vCPU state save prior to normal world exit. |
| 475 | * Update S-EL2 Stage-1 page table shareability from outer to inner. |
| 476 | * Add PL011 UART initialization code to set the IDRD and FBRD registers |
| 477 | according to the UART clock and baud rate specified at build time. |
| 478 | * License script checker fixes. |
| 479 | |
Olivier Deprez | 28c95f4 | 2023-05-22 14:28:39 +0200 | [diff] [blame] | 480 | ### Known limitations: |
Daniel Boulby | ccb7068 | 2021-04-28 19:40:39 +0100 | [diff] [blame] | 481 | * Secure interrupts not supported. |
| 482 | * FF-A indirect message interface not supported in the secure world. |
| 483 | * Only supporting models of MultiProcessor SP (vCPUs pinned to physical |
| 484 | CPUs) or UniProcessor SP (single vCPU). |
| 485 | * The first secure partition booted must be a MP SP. |
Demi Marie Obenour | 1a55b77 | 2023-02-15 10:38:26 -0500 | [diff] [blame] | 486 | * `FFA_RXTX_UNMAP` not implemented. |
Daniel Boulby | ccb7068 | 2021-04-28 19:40:39 +0100 | [diff] [blame] | 487 | * Use of an alternate caller provided buffer from RX/TX buffers for memory |
| 488 | sharing operations is not implemented. |
| 489 | * A memory retrieve request to SPMC does not support the caller endpoint to |
| 490 | provide the range of IPA addresses to map the region to. |
Olivier Deprez | 62405ad | 2020-10-26 18:51:49 +0100 | [diff] [blame] | 491 | |
| 492 | ## v2.4 |
| 493 | |
| 494 | This is the first drop to implement the TrustZone secure side S-EL2 firmware |
Olivier Deprez | 410a3ac | 2020-11-04 13:54:15 +0100 | [diff] [blame] | 495 | (SPM Core component) complying with FF-A v1.0. |
Olivier Deprez | 62405ad | 2020-10-26 18:51:49 +0100 | [diff] [blame] | 496 | It is a companion to the broader TF-A v2.4 release. |
| 497 | The normal world Hypervisor is maintained functional along with the |
| 498 | Hafnium CI test suite. |
| 499 | |
Olivier Deprez | 28c95f4 | 2023-05-22 14:28:39 +0200 | [diff] [blame] | 500 | ### Highlights |
Olivier Deprez | 62405ad | 2020-10-26 18:51:49 +0100 | [diff] [blame] | 501 | * FF-A v1.0 Setup and discovery interface |
| 502 | * Hypervisor implementation re-used and extended to the SPMC and SPs. |
| 503 | * Added partition info get ABI and appropriate properties response depending |
| 504 | on partition capabilities (PVM, Secondary VM or Secure Partitions). |
| 505 | * FF-A device-tree manifest parsing. |
| 506 | * FF-A partitions can declare memory/device regions, and RX/TX buffers that |
| 507 | the SPMC sets up in the SP EL1&0 Stage-2 translation regime at boot time. |
| 508 | * FF-A IDs normal and secure world split ranges. |
| 509 | * The SPMC maps the Hypervisor (or OS kernel) RX/TX buffers as non-secure |
Demi Marie Obenour | 1a55b77 | 2023-02-15 10:38:26 -0500 | [diff] [blame] | 510 | buffers in its EL2 Stage-1 translation regime on `FFA_RXTX_MAP` ABI |
Olivier Deprez | 62405ad | 2020-10-26 18:51:49 +0100 | [diff] [blame] | 511 | invocation from the non-secure physical FF-A instance. |
| 512 | * FF-A v1.0 Direct message interface |
| 513 | * Added implementation for the normal world Hypervisor and test cases. |
| 514 | * Implementation extended to the SPMC and SPs. |
| 515 | * Direct message requests emitted from the PVM to a Secondary VM or a |
| 516 | Secure Partition (or OS Kernel to a Secure Partition). Direct message |
| 517 | responses emitted from Secondary VMs and Secure Partitions to the PVM. |
| 518 | * The secure world represents the "other world" (normal world Hypervisor |
| 519 | or OS kernel) vCPUs in an abstract "Hypervisor VM". |
| 520 | * FF-A v1.0 memory sharing |
| 521 | * Hypervisor implementation re-used and extended to the SPMC and SPs. |
| 522 | * A NS buffer can be shared/lent/donated by a VM to a SP (or OS Kernel |
| 523 | to a SP). |
| 524 | * The secure world configures Stage-1 NS IPA output to access the NS PA |
| 525 | space. |
| 526 | * The secure world represents the "other world" (normal world Hypervisor |
| 527 | or OS kernel) memory pages in an abstract "Hypervisor VM" and tracks |
| 528 | memory sharing permissions from incoming normal world requests. |
| 529 | * Secure world enablement |
Olivier Deprez | 410a3ac | 2020-11-04 13:54:15 +0100 | [diff] [blame] | 530 | * Secure Partitions booted in sequence on their primary execution context, |
| 531 | according to the boot order field in their partition manifest. |
| 532 | This happens during the secure boot process before the normal world |
| 533 | actually runs. |
Olivier Deprez | 62405ad | 2020-10-26 18:51:49 +0100 | [diff] [blame] | 534 | * The SPMC implements the logic to receive FF-A messages through the EL3 |
| 535 | SPMD, process them, and either return to the SPMD (and normal world) or |
| 536 | resume a Secure Partition. |
Demi Marie Obenour | 1a55b77 | 2023-02-15 10:38:26 -0500 | [diff] [blame] | 537 | * Extract NS bit from `HPFAR_EL2` on Stage-2 page fault. |
Olivier Deprez | 62405ad | 2020-10-26 18:51:49 +0100 | [diff] [blame] | 538 | * Prevent setup of LOR regions in SWd. |
| 539 | * Avoid direct PSCI calls down to EL3. |
| 540 | * Platforms |
| 541 | * Added Arm FVP secure Hafnium build support. |
| 542 | * Added Arm TC0 "Total Compute" secure Hafnium build support. |
| 543 | * Other improvements |
| 544 | * Re-hosting to trustedfirmware.org |
Demi Marie Obenour | 1a55b77 | 2023-02-15 10:38:26 -0500 | [diff] [blame] | 545 | * `busy_secondary` timer increased to improve CI stability. |
Olivier Deprez | 62405ad | 2020-10-26 18:51:49 +0100 | [diff] [blame] | 546 | * Removed legacy Hypervisor calls. |
Demi Marie Obenour | 1a55b77 | 2023-02-15 10:38:26 -0500 | [diff] [blame] | 547 | * Fix `CPTR_EL2` TTA bit position. |
| 548 | * Report `FAR_EL2` on injecting EL1 exception. |
Olivier Deprez | 28c95f4 | 2023-05-22 14:28:39 +0200 | [diff] [blame] | 549 | ### Known limitations: |
Daniel Boulby | ccb7068 | 2021-04-28 19:40:39 +0100 | [diff] [blame] | 550 | * Not all fields of the FF-A manifest are actually processed by the Hafnium |
| 551 | device-tree parser. |
| 552 | * SP to SP communication not supported. |
| 553 | * SP to SP memory sharing not supported. |
| 554 | * S-EL1 and SIMD contexts shall be saved/restored by EL3. |
| 555 | * Multi-endpoint memory sharing not supported. |
| 556 | * Interrupt management limited to trapping physical interrupts to |
| 557 | the first S-EL1 SP. Physical interrupt trapping at S-EL2 planned as |
| 558 | next release improvement. |
| 559 | * Validation mostly performed using first SP Execution Context (vCPU0). More |
| 560 | comprehensive multicore enablement planned as next release improvement. |