Soby Mathew | b4c6df4 | 2022-11-09 11:13:29 +0000 | [diff] [blame] | 1 | .. SPDX-License-Identifier: BSD-3-Clause |
| 2 | .. SPDX-FileCopyrightText: Copyright TF-RMM Contributors. |
| 3 | |
| 4 | ###### |
| 5 | TF-RMM |
| 6 | ###### |
| 7 | |
| 8 | TF-RMM (or simply RMM) is the Trusted Firmware Implementation of the `Realm |
| 9 | Management Monitor (RMM) Specification`_. The RMM |
| 10 | is a software component that runs at Realm EL2 and forms part of a system |
| 11 | which implements the Arm Confidential Compute Architecture (Arm CCA). |
| 12 | `Arm CCA`_ is an architecture which provides Protected Execution Environments |
| 13 | called Realms. |
| 14 | |
| 15 | Prior to Arm CCA, virtual machines have to trust hypervisors that manage them |
| 16 | and a resource that is managed by the hypervisor is also accessible by it. |
| 17 | Exploits against the hypervisors can leak confidential data held in the virtual |
| 18 | machines. `Arm CCA`_ introduces a new confidential compute environment called |
| 19 | a `Realm`. Any code or data belonging to a `Realm`, whether in memory or in |
| 20 | registers, cannot be accessed or modified by the hypervisor. This means that |
| 21 | the Realm owner does not need to trust the hypervisor that manages the |
| 22 | resources used by the Realm. |
| 23 | |
| 24 | The Realm VM is initiated and controlled by the Normal world Hypervisor. |
| 25 | To allow the isolated execution of the Realm VM, a new component called the |
| 26 | Realm Management Monitor (RMM) is introduced, executing at R_EL2. The |
| 27 | hypervisor interacts with the RMM via Realm Management Interface (RMI) to |
| 28 | manage the Realm VM. Policy decisions, such as which Realm to run or what |
| 29 | memory to be delegated to the Realm are made by the hypervisor and communicated |
| 30 | via the RMI. The RMM also provides services to the Realm via the Realm Service |
| 31 | Interface (RSI). These services include cryptographic services and |
| 32 | attestation. The Realm initial state can be measured and an attestation |
| 33 | report, which also includes platform attestation, can be requested via RSI. |
| 34 | The RSI is also the channel for memory management requests from the |
| 35 | Realm VM to the RMM. |
| 36 | |
| 37 | The following diagram shows the complete Arm CCA software stack running a |
| 38 | confidential Realm VM : |
| 39 | |
| 40 | |Realm VM| |
| 41 | |
| 42 | Figure 1. Realm VM execution |
| 43 | |
| 44 | The TF-RMM interacts with the Root EL3 Firmware via the |
| 45 | `RMM-EL3 Communication Interface`_ and this is implemented by the reference |
| 46 | EL3 Firmware implementation `TF-A`_. |
| 47 | |
| 48 | More details about the RMM and how it fits in the Software Stack can be |
| 49 | found in `Arm CCA Software Stack Guide`_. |
| 50 | |
Javier Almansa Sobrino | aefe649 | 2022-11-22 10:16:24 +0000 | [diff] [blame] | 51 | The `Change-log and Release notes`_ has the details of features implemented |
Soby Mathew | b4c6df4 | 2022-11-09 11:13:29 +0000 | [diff] [blame] | 52 | by this version of TF-RMM and lists any known issues. |
| 53 | |
| 54 | ******* |
| 55 | License |
| 56 | ******* |
| 57 | |
| 58 | Unless specifically indicated otherwise in a file, TF-RMM files are provided |
Javier Almansa Sobrino | aefe649 | 2022-11-22 10:16:24 +0000 | [diff] [blame] | 59 | under the `BSD-3-Clause License`_. For contributions, please |
| 60 | see `License and Copyright for Contributions`_. |
Soby Mathew | b4c6df4 | 2022-11-09 11:13:29 +0000 | [diff] [blame] | 61 | |
| 62 | Third Party Projects |
| 63 | ==================== |
| 64 | |
| 65 | The TF-RMM project requires to be linked with certain other 3rd party projects |
| 66 | and they are to be cloned from their repositories into ``ext`` folder before |
Javier Almansa Sobrino | c4ad5b0 | 2022-07-05 19:05:14 +0100 | [diff] [blame^] | 67 | building. The projects are `MbedTLS`_, `t_cose`_, `QCBOR`_ and `CppUTest`_. |
Soby Mathew | b4c6df4 | 2022-11-09 11:13:29 +0000 | [diff] [blame] | 68 | |
| 69 | The project also contains files which are imported from other projects |
| 70 | into the source tree and may have a different license. Such files with |
| 71 | different licenses are listed in the table below. This table is used by the |
| 72 | ``checkspdx`` tool in the project to verify license headers. |
| 73 | |
| 74 | .. list-table:: **List of files with different license** |
| 75 | |
| 76 | * - File |
| 77 | - License |
| 78 | * - lib/libc/src/printf.c |
| 79 | - MIT |
| 80 | * - lib/libc/include/stdio.h |
| 81 | - MIT |
| 82 | * - lib/libc/src/strlcpy.c |
| 83 | - ISC |
| 84 | * - lib/libc/src/strnlen.c |
| 85 | - BSD-2-Clause |
| 86 | * - lib/allocator/src/memory_alloc.c |
| 87 | - Apache-2.0 |
| 88 | |
| 89 | |
| 90 | ************ |
| 91 | Contributing |
| 92 | ************ |
| 93 | |
| 94 | We gratefully accept bug reports and contributions from the community. |
Javier Almansa Sobrino | aefe649 | 2022-11-22 10:16:24 +0000 | [diff] [blame] | 95 | Please see the `Contributor's Guide`_ for details on how to do this. |
Soby Mathew | b4c6df4 | 2022-11-09 11:13:29 +0000 | [diff] [blame] | 96 | |
| 97 | ******************** |
| 98 | Feedback and support |
| 99 | ******************** |
| 100 | |
| 101 | Feedback is requested via email to: |
| 102 | `tf-rmm@lists.trustedfirmware.org <tf-rmm@lists.trustedfirmware.org>`__. |
| 103 | |
| 104 | To report a bug, please file an `issue on Github`_ |
| 105 | |
| 106 | ----------------- |
| 107 | |
| 108 | .. |Realm VM| image:: ./about/diagrams/cca_software_arch.png |
| 109 | .. _Realm Management Monitor (RMM) Specification: https://developer.arm.com/documentation/den0137/1-0bet0/?lang=en |
| 110 | .. _Arm CCA: https://www.arm.com/architecture/security-features/arm-confidential-compute-architecture |
| 111 | .. _Arm CCA Software Stack Guide: https://developer.arm.com/documentation/den0127/0100/Overview |
| 112 | .. _TF-A: https://www.trustedfirmware.org/projects/tf-a/ |
| 113 | .. _RMM-EL3 Communication Interface: https://trustedfirmware-a.readthedocs.io/en/latest/components/rmm-el3-comms-spec.html |
| 114 | .. _issue on Github: https://github.com/TF-RMM/tf-rmm/issues |
| 115 | .. _MbedTLS: https://github.com/ARMmbed/mbedtls.git |
| 116 | .. _t_cose: https://github.com/laurencelundblade/t_cose |
| 117 | .. _QCBOR: https://github.com/laurencelundblade/QCBOR.git |
Javier Almansa Sobrino | aefe649 | 2022-11-22 10:16:24 +0000 | [diff] [blame] | 118 | .. _Change-log and Release notes: https://tf-rmm.readthedocs.io/en/latest/about/change-log.html |
| 119 | .. _BSD-3-Clause License: https://tf-rmm.readthedocs.io/en/latest/about/license.html |
| 120 | .. _License and Copyright for Contributions: https://tf-rmm.readthedocs.io/en/latest/process/contributing.html#license-and-copyright-for-contributions |
| 121 | .. _Contributor's Guide: https://tf-rmm.readthedocs.io/en/latest/process/contributing.html |
Javier Almansa Sobrino | c4ad5b0 | 2022-07-05 19:05:14 +0100 | [diff] [blame^] | 122 | .. _CppUTest: https://github.com/cpputest/cpputest.git |