1.. SPDX-License-Identifier: BSD-3-Clause 2.. SPDX-FileCopyrightText: Copyright TF-RMM Contributors. 3 4############################ 5Change-log and Release notes 6############################ 7 8****** 9v0.7.0 10****** 11 12The following sections have the details on the release. This release has been 13verified with `TF-A v2.13`_ release. 14 15============================ 16New features in this release 17============================ 18 19- Deprivileging RMM code via EL0 App support 20 21 * Introduced a framework for building, packaging, and executing EL0 apps. 22 * Restructured the RMM code base to build certain components as separate 23 EL0 applications. 24 * Moved the Attestation and pseudo-random number generator functionality 25 to EL0 Apps. 26 * Added `fake-host` support to run EL0 applications. 27 * Added a supporting design document. 28 29- Added some RMMv1.1 APIs 30 31 * Implemented ``RMI_DEV_MEM_(UN)MAP`` commands. 32 * Added support for device granules in ``RMI_GRANULE_DELEGATE`` and 33 ``RMI_GRANULE_UNDELEGATE`` commands. 34 35====================================== 36Bug fixes/improvements in this release 37====================================== 38 39- EL0 App framework fixes and improvements 40 41 * Collected app artifacts in a single location. 42 * Fixed the path to the EL0 apps linker script. 43 * Refactored the host-common layer to separate El2-EL0 shared and 44 EL2-specific code. 45 * Enforced 64KB alignment for the RMM Core to meet ELF loader requirements. 46 * Forced lld to apply link time reloc values - this is to resolve issue 47 with App execution when linked using LLD. 48 49- Enable Generic PL011 UART config - This reduces the PL011 driver 50 to operate on the SBSA Generic UART register subset. 51 52- Enabled ``-fstack-protector-strong`` compiler flag for stack protection. 53 54- Added support to read device memory info from the Boot manifest at EL3 and 55 handle DEV granules in RMM. 56 57- Fixed various ``clang-tidy-18`` errors. 58 59- Hid MPAM from Realms and trap access to MPAM registers from Realm. Since RMM 60 does not support configuring MPAM for Realms, disabled FEAT_MPAM for Realms. 61 62- Disabled BRBE at R-EL2 and R-EL1. 63 64- Modified ``handle_sysreg_access_trap`` to skip advancing PC to allow injecting 65 UNDEF abort back into Realms. 66 67- Added -Wstrict-aliasing compiler flag. 68 69- Fixed PMU save/restore register sequence in RMM. 70 71 * RMM now saves/restores all NS event counters, even if realm is not 72 using all counters. 73 * Removed pmxevcntr_el0 and pmxevtyper_el0 registers from 74 saving/restoring as they are aliases for pmevcntrN_el0 and pmevtyperN_el0, 75 selected by pmselr_el0.sel. 76 * Removed saving pmcntenclr_el0, pmintenclr_el1 and pmovsclr_el0. These 77 registers are restored with inverted values of pmcntenset_el0, 78 pmintenset_el1 and pmovsset_el0. 79 80- Improved performance by clearing granule memory after MMU is enabled. 81 82- Updated default cases for handling SEAs and SEIs so that they call 83 system_abort() instead of asserting. 84 85- Corrected the DFSC macro value for asynchronous SError exceptions 86 from ``0x1`` to ``0x11``. 87 88- Fixed missing ``break`` in ``fake_host`` when processing monitor call ID. 89 90- Added ``-fno-delete-null-pointer-checks`` to disable optimization that can 91 remove such checks. 92 93- Added -Wextra compile flag for more warnings. 94 95- Introduced additional compiler options: `-Wstrict-overflow` and 96 ``-D_FORTIFY_SOURCE=2``. Note: `FORTIFY_SOURCE` is added for 97 future-proofing; RMM does not currently link against ``glibc``. 98 99- Added the `-Wnull-dereference` compile option to Debug build of RMM. 100 It is added only to Debug build as it shows false positives for Release 101 build. 102 103- Removed the redundant granule_unlock() in smc_rec_create error path 104 when Aux granule is not found. 105 106- Fixed Coverity MISRA compliance issues. 107 108- Correctly configured PSTATE flags (``TCO``, ``DIT``, ``UAO``, ``PAN``, 109 ``SSBS``, ``BTYPE``) during abort injection to R-EL1. 110 111- Added missing `top_gran_align` check to `RMI_RTT_SET_RIPAS` ABI. 112 113- Added support in RMI_VERSION and RSI_VERSION commands to report lower and 114 higher supported interface revisions. 115 116- Fixed a missing call to release the shared buffer between EL3 and RMM in 117 one of the error code paths of the EL3_TOKEN_SIGN attestation flow. 118 119================================== 120Build/Testing/Tooling improvements 121================================== 122 123- Updated minimum CMake version requirement to 3.20. This is needed 124 to support the build for EL0 app framework. 125 126- Upgraded jinja2 from 3.1.5 to 3.1.6 for document generation 127 128- Explicitly set C++ standard for Unit tests (which are written in C++). 129 130- Removed variable size arrays in some unittests. 131 132- Added support for updating git submodules during configuration of RMM. 133 This ensures updated dependencies are automatically integrated during 134 builds, particularly after project rebases. This also ties in with the 135 patching mechanism in RMM wherein a particular SHA is assumed for the 136 submodules. 137 138- Updated Shrinkwrap overlay to add PCIE DOE and IDE parameters for 139 the FVP to facilitate CCA DA development. 140 141- Switched to importing `libspdm` via git submodules instead of a custom 142 CMake mechanism. 143 144- Moved git utils cmake helpers to ``cmake/`` folder. 145 146========= 147Platforms 148========= 149 150- Added initial platform support for RD-V3-R1. RD-V3-R1 and 151 RD-V3-R1-Cfg1 Fixed Virtual Platforms are Arm Neoverse Reference Design 152 platforms with ARMv9 RME enabled CPUs. 153 154============================ 155Known issues and limitations 156============================ 157 158- Some capabilities mentioned in `RMM v1.0 REL0 specification`_ are 159 restricted or absent in TF-RMM as listed below: 160 161 * The support for Self-hosted debug in Realms is not implemented (`issue#23`_). 162 163================= 164Upcoming features 165================= 166 167- Prototype new features as described in `RMM v1.1 Alpha 13 specification`_. 168 169 * Realm Device Assignment - A feature which allows devices to be assigned to Realms, 170 attested and granted permission to access Realm owned memory. 171 * Planes - A feature which allows a Realm to be divided into multiple 172 mutually isolated execution environments, called Planes. 173 * Support FEAT_MEC in the Realm world. 174 175- Continue to enhance CBMC analysis to support more RMI commands. 176 177- Fuzz testing for RMM utilizing the `fake_host` architecture. 178 179- Implement support for Self-hosted debug in Realms. 180 181- Support Live Firmware Activation of RMM. 182 183 184.. _TF-A v2.13: https://git.trustedfirmware.org/TF-A/trusted-firmware-a/+/refs/tags/v2.13.0 185.. _RMM v1.1 Alpha 13 specification: https://developer.arm.com/-/cdn-downloads/permalink/Architectures/Armv9/DEN0137_1.1-alp13.zip 186 187****** 188v0.6.0 189****** 190 191The following sections have the details on the release. This release has been 192verified with `TF-A v2.12`_ release. 193 194============================ 195New features in this release 196============================ 197 198- Changes to align to `RMM v1.0 REL0 specification`_. 199 200- Support for alternative attestation token signing via EL3 which includes: 201 202 * A new config flag, ``ATTEST_EL3_TOKEN_SIGN``, is introduced. 203 * New RMM-EL3 interface APIs to query EL3_FEATURES, push and pull 204 EL3 Attest token sign requests and retrieve Realm attestation 205 public key from EL3. 206 * Add support in fake_host architecture for validating the attestation 207 flow. 208 * Patch to enable EL3 based signing flow in t_cose. 209 210====================================== 211Bug fixes/improvements in this release 212====================================== 213 214- Reduce memory footprint of RMM : redefine granule structure to reduce granule 215 struct from 4 bytes to 2 bytes. 216 217- Add support for FEAT_DoubleFault2 for Realms. 218 219- Improve RMM performance : remove broadcast invalidates when mapping and 220 unmapping slot buffers. 221 222- RMM hardening : invalidate caches during boot. 223 224- Add libspdm version 3.4.0 as an external dependency to TF-RMM. 225 226- Enable FEAT_DIT on a fine-grained basis in RMM. 227 228- Upgrade Mbed TLS to v3.6.0. 229 230- Add binary search algorithm to improve DRAM bank lookup. As a result, 231 the platform API implementation can be made common for all platforms. 232 233- Add capability to `xlat` library to map UNPRIV memory in preparation 234 for EL0 app support. 235 236- Refactor attestation component to allow RMM to continue functioning even 237 if attestation initialization fails. 238 239- Enhance lib/attestation component to handle platform token request in 240 hunks. This allows to transfer tokens larger than 4KB from EL3 241 (`issue#24`_). 242 243- Rename previous build option RMM_CCA_DA to RMM_V1_1. Some base 244 support patches related to `RMM v1.1 Alpha 9 specification`_ are also 245 merged, which includes: 246 247 * Update RMI feature register0 with Device Assignment(DA) fields. 248 * Add aarch64_stub libraries required by libspdm. 249 * Define PDEV AUX granules map/unmap helpers. 250 * Add DA specific granule state. 251 252- Fix checksum calculation of `console_info` data structure in RMM-EL3 boot 253 manifest. 254 255 * Note that this is a breaking change and EL3 firmware needs to be updated 256 to send the correct checksum. 257 258- Fix RTT_READ_ENTRY to set x3 correctly. 259 260- Fix deadlock in RMI_REC_CREATE. 261 262 * An error when aux granules are locked during REC_CREATE would have 263 resulted in a deadlock in RMM. This is fixed. 264 265- Fix error handling in attest key init sequence. 266 267- Fix checks on s2tte_get_ripas() in lib/s2tt. 268 269- Fix simd_context_init() call for SIMD_OWNER_NWD in unit tests. 270 271- Fix rmm-runtime to add `sb` instruction on realm_exit(). 272 273- Fix outstanding Misra C 2012 issues in the source code. 274 275- Refactor `lib/attestation` to manage token state within the component. 276 277- Fix runtime to unlock RTT if the RTT walk succeeds in a corner case. 278 279- Add build option for plat token buffer size. 280 281- Fix calculation of VMPIDR_EL2 value to align with the specification. 282 283- Fix to ensure that physical address <= 48 bits for LPA2 disabled Realm 284 when running on a LPA2 capable hardware. 285 286- Remove hard-coded configuration of VTRC_EL2.PS. 287 288- Add workaround for Clang 18.x failure. 289 290- Fix usage of psa_hash_finish() in lib/measurement component. 291 292- Clear ISV bit for non emulatable data abort in rec->last_run_info.esr. 293 294- Fix to adjust heap size based on MAX_CPUS. 295 296- Revert setting of TSW bit in Realm HCR_EL2 flags. 297 298- Fix error handling in attest_init_realm_attestation_key() sequence 299 (`issue#25`_). 300 301================================== 302Build/Testing/Tooling improvements 303================================== 304 305- Add shrinkwrap overlays to facilitate RMM development and testing. 306 307- Add git helper to apply patches in submodule. 308 309- Add unittests for the s2tt library. 310 311- Enhance Cppcheck build target to fail the build if static 312 analysis errors are detected. 313 314========= 315Platforms 316========= 317 318- Rename the Rdfremont platform config to RD-V3. 319 320- Add support for QEMU SBSA platform. 321 322============================ 323Known issues and limitations 324============================ 325 326- Some capabilities mentioned in `RMM v1.0 REL0 specification`_ are 327 restricted or absent in TF-RMM as listed below: 328 329 * The support for Self-hosted debug in Realms is not implemented (`issue#23`_). 330 331================= 332Upcoming features 333================= 334 335- Prototype new features as described in `RMM v1.1 Alpha 9 specification`_. 336 337 * Realm Device Assignment - A feature which allows devices to be assigned to Realms, 338 attested and granted permission to access Realm owned memory. 339 * Planes - A feature which allows a Realm to be divided into multiple 340 mutually isolated execution environments, called Planes. 341 * Support FEAT_MEC in the Realm world. 342 343- Continue to enhance CBMC analysis to support more RMI commands. 344 345- Fuzz testing for RMM utilizing the `fake_host` architecture. 346 347- Implement support for Self-hosted debug in Realms. 348 349- Support Live Firmware Activation of RMM. 350 351- EL0 app support to run parts of RMM at EL0. 352 353.. _TF-A v2.12: https://git.trustedfirmware.org/TF-A/trusted-firmware-a/+/refs/tags/v2.12.0 354.. _RMM v1.0 REL0 specification: https://developer.arm.com/documentation/den0137/1-0rel0/?lang=en 355.. _RMM v1.1 Alpha 9 specification: https://developer.arm.com/-/cdn-downloads/permalink/Architectures/Armv9/DEN0137_1.1-alp9.zip 356 357****** 358v0.5.0 359****** 360 361The following sections have the details on the release. This release has been 362verified with `TF-A v2.11`_ release. 363 364============================ 365New features in this release 366============================ 367 368- Enabled FEAT_DIT for RMM execution. 369 370- Added support for FEAT_LPA2 to S2TT component. 371 372 * This enables creating Realms with LPA2 support. 373 374- Introduced the dynamic console framework for RMM. 375 376 * This framework allows EL3 to dynamically describe the console for use by 377 RMM and configure the console during boot. 378 379- Introduced the ``arm`` platform layer. 380 381 * The common ``arm`` platform is added which can be used 382 by any compatible SoC. This allows reuse of code across multiple 383 SoCs and possibly a single binary across them. 384 * Both FVP and QEMU are migrated to this common ``arm`` platform layer and 385 only requires platform specific defconfig file to configure RMM. 386 387====================================== 388Bug fixes/improvements in this release 389====================================== 390 391- Improvements to Exception handling in RMM. 392 393 * Separated Exception Stack for RMM exceptions. 394 * Added crashlog of register values for R-EL2 exceptions. 395 * Added backtrace to exception handler. 396 397- Improvements to S2TT component in RMM. 398 399 * Several optimizations to S2TT component are done. 400 * MISRA errors are fixed. 401 * The component is moved to its own folder in `lib`. 402 * All S2TT APIs now accept `realm_s2_context` as an argument. 403 * Issue related to the NS attributes not being checked during FOLD is fixed. 404 405- Reduced the memory required for `struct granule`. 406 407 * The data structure is optimized such that it is 4 bytes in size 408 compared to the previous 16 bytes. 409 410- Use DC ZVA for granule zeroing instead of memset(). 411 412- Allow RTT FOLD to level 1 as mandated by RMM specification. 413 414- Additional clang-tidy checks are enabled for the project. 415 416 * The clang-tidy configuration can be found in ``.clang-tidy`` file at the 417 the root of the source tree. 418 * The errors flagged by the static analysis are corrected and the project 419 expects 0 errors for clang-tidy checks. 420 421- Enabled alignment fault check in RMM. 422 423 * Enabled Alignment fault check in SCTLR_EL2 register when 424 RMM_FPU_USE_AT_REL2=OFF. Associated fixes for some data structures 425 are also done as part of this work. 426 427- Fixed MISRA C 2012 violations detected by Coverity scan. 428 429- Fix to report accurate breakpoint and watchpoint numbers via RMI_FEATURES. 430 431- Fix to properly initialize MDCR_EL2.HPMN for each REC. 432 433- Fix to inject SEA for Realm access outside IPA space. 434 435- Allocate parameters for RIM extension on stack rather than global data. 436 437- Fixed spinlock_acquire() implementation on the fake_host architecture. 438 439- Fix to add +nosve compiler option to prevent compiler from generating SVE 440 instructions. 441 442- Fix to use -march=armv9.2 option to build RMM depending on compiler support. 443 444- Fixed build issue for Yocto by adding system includes to the CMAKE search 445 path. 446 447- Fix to retry RDNR instruction if it fails during attestation initialization. 448 449- Refactored lib/realm component. This component is split now into 2 new 450 libraries: `lib/granule` and `lib/slot_buf`. 451 452- Fix to make RMI_INJECT_SEA flag mutually exclusive to RMI EMUL_MMIO flag 453 during RMI_REC_ENTER. 454 455================================== 456Build/Testing/Tooling improvements 457================================== 458 459- Extended CBMC analysis to more RMI commands: 460 461 * Added CBMC testbench and analysis for the following RMI APIs: 462 RMI_VERSION, RMI_FEATURES, RMI_REALM_ACTIVATE, RMI_REALM_DESTROY, 463 RMI_REC_AUX_COUNT, RMI_REC_DESTROY. 464 * Increased CBMC coverage for RMI_DELEGATE and RMI_UNDELEGATE APIs. 465 * Integrated cbmc-viewer tool to CBMC analysis. 466 * Added option to build with GCC. 467 * Added tooling to detect CBMC result differences. Added a script that 468 compares the CBMC results to the baseline summary and this helps to 469 detect additional CBMC failures from baseline results. 470 * An application note is added to the documentation to describe 471 the CBMC integration with the project. 472 473- Improvements to unit-tests in RMM. 474 475 * Added unit testing framework and unit tests to SIMD layer in RMM. 476 477- Improvements to Cppcheck static analysis. 478 479 * The Cppcheck was already integrated into the build system and more work 480 was done to bring it inline with other static checks in the project. 481 * Fixed violations detected by Cppcheck MISRA addon. 482 * An application note is added to describe the Cppcheck integration. 483 484- Changes to logging for Release build. 485 486 * The default Release build LOG_LEVEL is reduced to 20 (LOG_LEVEL_NOTICE). 487 488- Fixed the broken CMAKE Ninja Generator Multi-config build. 489 490========= 491Platforms 492========= 493 494- Added base support for RD-Fremont platform. 495 496 * RD-Fremont also use the ``arm`` platform layer and only needs a 497 defconfig file to configure RMM appropriately. 498 499============================ 500Known issues and limitations 501============================ 502 503- Some capabilities as mentioned in `RMM v1.0 EAC5 specification`_ are 504 restricted or absent in TF-RMM as listed below: 505 506 * The support for Self-hosted debug in Realms is not implemented (`issue#23`_). 507 * Although the RMM allows CCA attestation token sizes of larger than 4KB, 508 there is a limitation on the size of the Platform attestation token part. 509 On the RMM-EL3 interface, there is only a shared buffer of 4KB that is 510 currently shared on the FVP. This needs to be enhanced so that larger 511 platform token sizes can be tested (`issue#24`_). 512 513- The attest_init_realm_attestation_key() does not always reset the RMM to the correct 514 state on encountering an error (`issue#25`_). 515 516================= 517Upcoming features 518================= 519 520- Prototype new features as described in `RMM v1.1 Alpha specification`_. 521 522 * Realm Device Assignment - A feature which allows devices to be assigned to Realms, 523 attested and granted permission to access Realm owned memory. 524 * Planes - A feature which allows a Realm to be divided into multiple 525 mutually isolated execution environments, called Planes. 526 527- Add unit-tests for Stage 2 MMU code (s2tt). 528 529- Continue to Enhance CBMC analysis to more RMI commands. 530 531- Fuzz testing for RMM utilizing the `fake_host` architecture. 532 533- Integrate more static analyzers into RMM build system. 534 535- Implement support for Self-hosted debug in realms. 536 537- Support FEAT_MEC in RMM. 538 539.. _TF-A v2.11: https://git.trustedfirmware.org/TF-A/trusted-firmware-a/+/refs/tags/v2.11.0 540.. _RMM v1.1 Alpha specification: https://developer.arm.com/-/cdn-downloads/PDF/Architectures/DEN0137_1.1-alp5_rmm-arch_external.pdf?__token__=st=1714479850~exp=2029839850~hmac=cca7b8c22f7b94e6c929d53176ac57c51487558b73fb27e5c181f4cc7231a83b 541.. _issue#23: https://github.com/TF-RMM/tf-rmm/issues/23 542.. _issue#24: https://github.com/TF-RMM/tf-rmm/issues/24 543.. _issue#25: https://github.com/TF-RMM/tf-rmm/issues/25 544 545****** 546v0.4.0 547****** 548 549The following sections have the details on the release. This release has been 550verified with `TF-A v2.10`_ release. 551 552============================ 553New features in this release 554============================ 555 556- Added initial partial support for analysing RMM source code with 557 CBMC (https://www.cprover.org/cbmc/). 558 559 * A new HOST_VARIANT, `host_cbmc`, has been introduced for this purpose. 560 * The CBMC testbench files and autogenerated files from RMM machine 561 readable specification are imported into the source tree. 562 * An application note for the same is added to the documentation. 563 564- Aligned the implementation to `RMM v1.0 EAC5 specification`_. 565 566 * The relevant tag for the alignment is `rmm-spec-v1.0-eac5`_. 567 * There is also an intermediate RMM v1.0 EAC2 alignment which 568 is tagged `rmm-spec-v1.0-eac2`_. 569 570- Supported save and restore of Non Secure SME context when Realms are 571 scheduled. 572 573 * The SIMD abstraction in RMM was reworked to cater for this requirement. 574 * Added support to emulate SME specific feature ID registers. 575 * Support injecting UNDEF exception into realm when SME is accessed 576 within it. 577 * Also RMM now can handle SVE hint bit as specified by SMCCC v1.3 578 specification. 579 580- Added `TF-RMM Threat Model`_ to the documentation. 581 582- Added capability to privately map the per-CPU stack. 583 584 * This contains any stack overflows to the particular CPU and prevents 585 a CPU from corrupting another CPU stack. 586 587- Added FEAT_PAUTH and FEAT_BTI support to RMM and also capability to 588 use FEAT_PAUTH within realms. 589 590- Migrate to PSA Crypto API for attestation and measurement functionality 591 in RMM. 592 593- Added FEAT_LPA2 support to Stage 1 MMU code (lib/xlat) in RMM. 594 595- Added Stage 1 MMU setup design document. 596 597================================== 598Build/Testing/Tooling improvements 599================================== 600 601- Added static commit message checker which enforces the commit message 602 guidelines mandated for the project. 603 604- Added clang-tidy checker as one of the static analyzers. 605 606 * Several fixes to errors flagged by the static checker have been fixed. 607 608- Fixed issues found in xlat lib unittests. 609 610- Added github workflow for git submodules so that the TF-RMM dependencies 611 display correctly in github. 612 613- Added github workflow to configure an automatic message for PRs on GitHub 614 and also build and run RMM unittests for every update of the `main` branch. 615 616- Added FEAT_LPA2 unit tests for lib/xlat module. 617 618- Added RSI logger unit tests. 619 620========= 621Platforms 622========= 623 624- The support for QEMU virt platform was merged. 625 626====================================== 627Bug fixes/improvements in this release 628====================================== 629 630- Fixed issue with TLB invalidations for unprotected mappings during 631 RMI_RTT_DESTROY command. 632 633- Fixed an issue wherein attest token write may return without releasing 634 lock on the last level RTT of the mapped buffer. 635 636- Enable TSW bit in hcr_el2 when executing in Realm world so as to trap 637 any data cache maintenance instructions that operate by Set/Way. 638 639- Fixed issues flagged by coverity online scan. The defects detected 640 can be found in the `TF-RMM coverity scan online`_ homepage. 641 642- Fixed issues in s2tt management related to NS memory assignment/unassignment. 643 644- Added missing check to gicv3_hcr field. 645 646- Cache line align xlat lib data structures accessed by secondary CPUs to avoid 647 data corruption due to mismatched memory attribute accesses by RMM during 648 warm boot. 649 650- Corrected linker options when building qcbor library. 651 652- Fixes to comply with MISRA coding guidelines. 653 654- Adjusted mbedTLS heap size depending on MAX_CPUS in RMM. 655 656- Fixed issue with RMI_DATA_CREATE_UNKNOWN setting RIPAS to RAM. 657 658- Added 'ipa_bound' failure condition in RMI_DATA_DESTROY handler. Also added 659 'level_bound' failure condition for RMI_RTT_MAP_UNPROTECTED and 660 RMI_RTT_UNMAP_UNPROTECTED command handlers. 661 662- Fixed issue with rsi_log_on_exit() and modified the logging format. 663 664- Fixed issue with change `ipa_align` failure condition. 665 666- Unified design of RSI/PSCI handlers. 667 668- The issue with RMM config ``RMM_FPU_USE_AT_REL2`` is fixed and the SIMD 669 registers are saved and restored depending on the live register context in 670 use which be one of FPU, SVE or SME. 671 672- The compatibility check for RMM-EL3 interface version is hardened. 673 674- Issue related to attestation token interruption flow is fixed. 675 676- Enhanced the `fake_host` sample application to do Realm token creation. 677 678- Fixed D-cache maintenance in fvp_set_dram_layout(). 679 680- Updated t_cose submodule to use upstream version rather than a forked 681 version. 682 683============================ 684Known issues and limitations 685============================ 686 687- Some capabilities as mentioned in `RMM v1.0 EAC5 specification`_ are 688 restricted or absent in TF-RMM as listed below: 689 690 * The RMI_RTT_FOLD command only allows folding upto Level 2 even though 691 the specification allows upto Level 1. 692 * The support for Self-hosted debug in Realms is not implemented. 693 * Although the RMM allows CCA attestation token sizes of larger than 4KB, 694 there is a limitation on the size of the Platform attestation token part. 695 On the RMM-EL3 interface, there is only a shared buffer of 4KB that is 696 currently shared on the FVP. This needs to be enhanced so that larger 697 platform token sizes can be tested. 698 699- The `rmm-el3-ifc` component does not always reset the RMM to the correct 700 state on encountering an error. This needs to be corrected. 701 702- The invocation of mmio_emulation() and sea_inj() functions need to be 703 mutually exclusive during schedule of a REC. Currently both the cases 704 are allowed to be satisfied at the same time which is incorrect. 705 706================= 707Upcoming features 708================= 709 710- FEAT_LPA2 support for Stage 2 MMU code (s2tt) in RMM. 711 712- Add unit-tests for Stage 2 MMU code (s2tt) and also any associated rework 713 for the s2tt component. 714 715- Enhance CBMC analysis to more RMI commands. 716 717- Fuzz testing for RMM utilizing the `fake_host` architecture. 718 719- Support for new capabilities like Device assignment as mandated by future 720 versions of RMM specification. 721 722- Integrate more static analyzers into RMM build system. 723 724- Implement support for Self-hosted debug in realms. 725 726 727.. _TF-A v2.10: https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/tag/?h=v2.10.0 728.. _RMM v1.0 EAC5 specification: https://developer.arm.com/documentation/den0137/1-0eac5/?lang=en 729.. _rmm-spec-v1.0-eac5: https://git.trustedfirmware.org/TF-RMM/tf-rmm.git/tag/?h=rmm-spec-v1.0-eac5 730.. _rmm-spec-v1.0-eac2: https://git.trustedfirmware.org/TF-RMM/tf-rmm.git/tag/?h=rmm-spec-v1.0-eac2 731.. _TF-RMM coverity scan online: https://scan.coverity.com/projects/tf-rmm-tf-rmm 732.. _TF-RMM Threat Model: https://tf-rmm.readthedocs.io/en/latest/security/threat_model/index.html 733 734****** 735v0.3.0 736****** 737 738The following sections have the details on the release. This release has been 739verified with `TF-A v2.9`_ release. 740 741============================ 742New features in this release 743============================ 744 745- Add support to create Realms which can make use of SVE, if present in 746 hardware. 747 748- Refactor the Stage 1 translation table library `lib/xlat` API to better 749 fit RMM usage. Also harden dynamic mapping via slot buffer mechanism by 750 use of ``TRANSIENT`` software defined attribute. 751 752- Add PMU support for Realms as described by RMM v1.0 Beta0 specification. 753 754- Support getting DRAM info from the Boot manifest dynamically at runtime. 755 756 * RMM can now support the 2nd DDR bank on FVP. 757 758========================== 759Build/Testing improvements 760========================== 761 762- Define a unit test framework using CppUTest for RMM. 763 764- Add unittests for `granule`, `slot-buffer` and Stage 1 translation table lib 765 `xlat`. 766 767- Improve the ``fake-host`` mock capability by adding support for per PE sysreg 768 emulation. 769 770- Improve the VA to PA mock layer for ``fake-host``. 771 772- Enable generation of gprof profiling data as part of ``fake-host`` runs. 773 774- Improve the sample application on ``host-build`` platform by adding the cold 775 attestation initialization flow. Also a sample minimal Realm create, run and 776 destroy sequence is added to showcase the RMI calls involved. 777 778- Further improvements to the unit test framework : 779 780 * Restore the sysreg state between test runs so each test gets a known 781 sysreg state. 782 * Add capability to test assertions. 783 * Support dynamic behaviour for test harness depending on requirement. 784 * Add support for coverage report generation as part of unit test run. 785 786- Build improvements in RMM: 787 788 * Move mbedTLS build from configure stage to build stage. 789 * Simplify QCBOR build. 790 * Fix build artefact directory path to better cater to multi-config builds. 791 792========================= 793Bug fixes in this release 794========================= 795 796- Remove HVC exit handling from RMI_REC_ENTER handler. 797 798- Fix parameter in measurement_extend_sha512(). 799 800- Fix issues in `lib/xlat` for some corner cases. 801 802- Mask MTE capability from `id_aa64pfr1_el1` so that Realms 803 can see that MTE is not supported. 804 805- Add isb() after writes to `cptr_el2` system register. 806 807- Fix the granule alignment check on granule_addr. 808 809- Fix some cppcheck warnings. 810 811- Properly handle errors for granule (un)delegate calls. 812 813- Fix the incorrect bit map manipulation for tracking VMID for realms. 814 815- Fix some incorrect Block mapping cases in Stage 2 translation. 816 817================= 818Upcoming features 819================= 820 821- RMM EAC Specification alignment. 822 823- Support Self-Hosted Debug Realms. 824 825- Support FEAT_PAuth for Realms and utilize the same for RMM. 826 827- Support LPA2 for Stage 2 Realm translation tables. 828 829- Threat model covering RMM data flows. 830 831- Enable Bounded Model Checker (CBMC) for source analysis. 832 833- Save and restore SME/SME2 context belonging to NS Host. This allows NS Host 834 to make use of SME/SME2 when Realms are scheduled. 835 836============================ 837Known issues and limitations 838============================ 839 840- The size of ``RsiHostCall`` structure is 256 bytes in the implementation 841 and aligns to `RMM Beta1 specification`_ rather than the 4 KB size 842 specified in `RMM Beta0 specification`_. 843 844- The `RMM Beta0 specification`_ does not require to have a CBOR bytestream 845 wrapper around the cca-platform-token and cca-realm-delegated-token, but 846 the RMM implementation does so and this is aligned with later versions 847 of the RMM specification (Beta2 onwards). 848 849- The RMM config ``RMM_FPU_USE_AT_REL2`` does not work as intended and 850 this config is disabled by default. This will be fixed in a future release. 851 852- When the ``RSI_ATTEST_TOKEN_CONTINUE`` call is interrupted and then resumed 853 later by Host via ``RMI_REC_ENTER``, the original SMC is replayed again 854 with the original arguments rather than returning ``RSI_INCOMPLETE`` error 855 code to Realm. The result is that the interrupted RSI call is continued 856 again till completion and then returns back to Realm with the appropriate 857 error code. 858 859.. _TF-A v2.9: https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/tag/?h=v2.9.0 860 861 862****** 863v0.2.0 864****** 865 866- This release has been verified with `TF-A v2.8`_ release. 867 868- The release has the following fixes and enhancements: 869 870 * Add support to render documentation on read-the-docs. 871 * Fix the known issue with RSI_IPA_STATE_GET returning 872 ``RSI_ERROR_INPUT`` for a `destroyed` IPA instead of 873 emulating data abort to NS Host. 874 * Fix an issue with RSI_HOST_CALL not returning back to Host 875 to emulate a stage2 data abort. 876 * Harden an assertion check for ``do_host_call()``. 877 878- The other known issues and limitations remain the same as 879 listed for v0.1.0_. 880 881.. _TF-A v2.8: https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/tag/?h=v2.8.0 882 883****** 884v0.1.0 885****** 886 887- First TF-RMM source release aligned to `RMM Beta0 specification`_. 888 The specified interfaces : Realm Management Interface (RMI) and 889 Realm Service Interface (RSI) are implemented which can attest 890 and run Realm VMs as described by the `Arm CCA`_ Architecture. 891 892================= 893Upcoming features 894================= 895 896- Support SVE, Self-Hosted Debug and PMU in Realms 897- Support LPA2 for Stage 2 Realm translation tables. 898- Threat model covering RMM data flows. 899- Enable Bounded Model Checker (CBMC) for source analysis. 900- Unit test framework based on :ref:`RMM Fake host architecture`. 901 902============================ 903Known issues and limitations 904============================ 905 906The following is a list of issues which are expected to be fixed in the future 907releases of TF-RMM : 908 909- The size of ``RsiHostCall`` structure is 256 bytes in the implementation 910 and aligns to `RMM Beta1 specification`_ rather than the 4 KB size 911 specified in `RMM Beta0 specification`_. 912 913- The RSI_IPA_STATE_GET command returns error ``RSI_ERROR_INPUT`` for a 914 `destroyed` IPA instead of emulating data abort to Host. 915 916- The `RMM Beta0 specification`_ does not require to have a CBOR bytestream 917 wrapper around the cca-platform-token and cca-realm-delegated-token, but 918 the RMM implementation does so. 919 920--------------------------- 921 922.. _RMM Beta0 specification: https://developer.arm.com/documentation/den0137/1-0bet0/?lang=en 923.. _RMM Beta1 specification: https://developer.arm.com/documentation/den0137/1-0bet1/?lang=en 924.. _Arm CCA: https://www.arm.com/architecture/security-features/arm-confidential-compute-architecture 925