1Secure Partition Manager (MM) 2***************************** 3 4Foreword 5======== 6 7This document describes the implementation where the Secure Partition Manager 8resides at EL3 and management services run from isolated Secure Partitions at 9S-EL0. The communication protocol is established through the Management Mode 10(MM) interface. 11 12Background 13========== 14 15In some market segments that primarily deal with client-side devices like mobile 16phones, tablets, STBs and embedded devices, a Trusted OS instantiates trusted 17applications to provide security services like DRM, secure payment and 18authentication. The Global Platform TEE Client API specification defines the API 19used by Non-secure world applications to access these services. A Trusted OS 20fulfils the requirements of a security service as described above. 21 22Management services are typically implemented at the highest level of privilege 23in the system, i.e. EL3 in Trusted Firmware-A (TF-A). The service requirements are 24fulfilled by the execution environment provided by TF-A. 25 26The following diagram illustrates the corresponding software stack: 27 28|Image 1| 29 30In other market segments that primarily deal with server-side devices (e.g. data 31centres and enterprise servers) the secure software stack typically does not 32include a Global Platform Trusted OS. Security functions are accessed through 33other interfaces (e.g. ACPI TCG TPM interface, UEFI runtime variable service). 34 35Placement of management and security functions with diverse requirements in a 36privileged Exception Level (i.e. EL3 or S-EL1) makes security auditing of 37firmware more difficult and does not allow isolation of unrelated services from 38each other either. 39 40Introduction 41============ 42 43A **Secure Partition** is a software execution environment instantiated in 44S-EL0 that can be used to implement simple management and security services. 45Since S-EL0 is an unprivileged Exception Level, a Secure Partition relies on 46privileged firmware (i.e. TF-A) to be granted access to system and processor 47resources. Essentially, it is a software sandbox in the Secure world that runs 48under the control of privileged software, provides one or more services and 49accesses the following system resources: 50 51- Memory and device regions in the system address map. 52 53- PE system registers. 54 55- A range of synchronous exceptions (e.g. SMC function identifiers). 56 57Note that currently TF-A only supports handling one Secure Partition. 58 59A Secure Partition enables TF-A to implement only the essential secure 60services in EL3 and instantiate the rest in a partition in S-EL0. 61Furthermore, multiple Secure Partitions can be used to isolate unrelated 62services from each other. 63 64The following diagram illustrates the place of a Secure Partition in a typical 65Armv8-A software stack. A single or multiple Secure Partitions provide secure 66services to software components in the Non-secure world and other Secure 67Partitions. 68 69|Image 2| 70 71The TF-A build system is responsible for including the Secure Partition image 72in the FIP. During boot, BL2 includes support to authenticate and load the 73Secure Partition image. A BL31 component called **Secure Partition Manager 74(SPM)** is responsible for managing the partition. This is semantically 75similar to a hypervisor managing a virtual machine. 76 77The SPM is responsible for the following actions during boot: 78 79- Allocate resources requested by the Secure Partition. 80 81- Perform architectural and system setup required by the Secure Partition to 82 fulfil a service request. 83 84- Implement a standard interface that is used for initialising a Secure 85 Partition. 86 87The SPM is responsible for the following actions during runtime: 88 89- Implement a standard interface that is used by a Secure Partition to fulfil 90 service requests. 91 92- Implement a standard interface that is used by the Non-secure world for 93 accessing the services exported by a Secure Partition. A service can be 94 invoked through a SMC. 95 96Alternatively, a partition can be viewed as a thread of execution running under 97the control of the SPM. Hence common programming concepts described below are 98applicable to a partition. 99 100Description 101=========== 102 103The previous section introduced some general aspects of the software 104architecture of a Secure Partition. This section describes the specific choices 105made in the current implementation of this software architecture. Subsequent 106revisions of the implementation will include a richer set of features that 107enable a more flexible architecture. 108 109Building TF-A with Secure Partition support 110------------------------------------------- 111 112SPM is supported on the Arm FVP exclusively at the moment. The current 113implementation supports inclusion of only a single Secure Partition in which a 114service always runs to completion (e.g. the requested services cannot be 115preempted to give control back to the Normal world). 116 117It is not currently possible for BL31 to integrate SPM support and a Secure 118Payload Dispatcher (SPD) at the same time; they are mutually exclusive. In the 119SPM bootflow, a Secure Partition image executing at S-EL0 replaces the Secure 120Payload image executing at S-EL1 (e.g. a Trusted OS). Both are referred to as 121BL32. 122 123A working prototype of a SP has been implemented by re-purposing the EDK2 code 124and tools, leveraging the concept of the *Standalone Management Mode (MM)* in 125the UEFI specification (see the PI v1.6 Volume 4: Management Mode Core 126Interface). This will be referred to as the *Standalone MM Secure Partition* in 127the rest of this document. 128 129To enable SPM support in TF-A, the source code must be compiled with the build 130flag ``SPM_MM=1``, along with ``EL3_EXCEPTION_HANDLING=1`` and ``ENABLE_SVE_FOR_NS=0``. 131On Arm platforms the build option ``ARM_BL31_IN_DRAM`` must be set to 1. Also, the 132location of the binary that contains the BL32 image 133(``BL32=path/to/image.bin``) must be specified. 134 135First, build the Standalone MM Secure Partition. To build it, refer to the 136`instructions in the EDK2 repository`_. 137 138Then build TF-A with SPM support and include the Standalone MM Secure Partition 139image in the FIP: 140 141.. code:: shell 142 143 BL32=path/to/standalone/mm/sp BL33=path/to/bl33.bin \ 144 make PLAT=fvp SPM_MM=1 EL3_EXCEPTION_HANDLING=1 ENABLE_SVE_FOR_NS=0 ARM_BL31_IN_DRAM=1 all fip 145 146Describing Secure Partition resources 147------------------------------------- 148 149TF-A exports a porting interface that enables a platform to specify the system 150resources required by the Secure Partition. Some instructions are given below. 151However, this interface is under development and it may change as new features 152are implemented. 153 154- A Secure Partition is considered a BL32 image, so the same defines that apply 155 to BL32 images apply to a Secure Partition: ``BL32_BASE`` and ``BL32_LIMIT``. 156 157- The following defines are needed to allocate space for the translation tables 158 used by the Secure Partition: ``PLAT_SP_IMAGE_MMAP_REGIONS`` and 159 ``PLAT_SP_IMAGE_MAX_XLAT_TABLES``. 160 161- The functions ``plat_get_secure_partition_mmap()`` and 162 ``plat_get_secure_partition_boot_info()`` have to be implemented. The file 163 ``plat/arm/board/fvp/fvp_common.c`` can be used as an example. It uses the 164 defines in ``include/plat/arm/common/arm_spm_def.h``. 165 166 - ``plat_get_secure_partition_mmap()`` returns an array of mmap regions that 167 describe the memory regions that the SPM needs to allocate for a Secure 168 Partition. 169 170 - ``plat_get_secure_partition_boot_info()`` returns a 171 ``spm_mm_boot_info_t`` struct that is populated by the platform 172 with information about the memory map of the Secure Partition. 173 174For an example of all the changes in context, you may refer to commit 175``e29efeb1b4``, in which the port for FVP was introduced. 176 177Accessing Secure Partition services 178----------------------------------- 179 180The `SMC Calling Convention`_ (*Arm DEN 0028B*) describes SMCs as a conduit for 181accessing services implemented in the Secure world. The ``MM_COMMUNICATE`` 182interface defined in the `Management Mode Interface Specification`_ (*Arm DEN 1830060A*) is used to invoke a Secure Partition service as a Fast Call. 184 185The mechanism used to identify a service within the partition depends on the 186service implementation. It is assumed that the caller of the service will be 187able to discover this mechanism through standard platform discovery mechanisms 188like ACPI and Device Trees. For example, *Volume 4: Platform Initialisation 189Specification v1.6. Management Mode Core Interface* specifies that a GUID is 190used to identify a management mode service. A client populates the GUID in the 191``EFI_MM_COMMUNICATE_HEADER``. The header is populated in the communication 192buffer shared with the Secure Partition. 193 194A Fast Call appears to be atomic from the perspective of the caller and returns 195when the requested operation has completed. A service invoked through the 196``MM_COMMUNICATE`` SMC will run to completion in the partition on a given CPU. 197The SPM is responsible for guaranteeing this behaviour. This means that there 198can only be a single outstanding Fast Call in a partition on a given CPU. 199 200Exchanging data with the Secure Partition 201----------------------------------------- 202 203The exchange of data between the Non-secure world and the partition takes place 204through a shared memory region. The location of data in the shared memory area 205is passed as a parameter to the ``MM_COMMUNICATE`` SMC. The shared memory area 206is statically allocated by the SPM and is expected to be either implicitly known 207to the Non-secure world or discovered through a platform discovery mechanism 208e.g. ACPI table or device tree. It is possible for the Non-secure world to 209exchange data with a partition only if it has been populated in this shared 210memory area. The shared memory area is implemented as per the guidelines 211specified in Section 3.2.3 of the `Management Mode Interface Specification`_ 212(*Arm DEN 0060A*). 213 214The format of data structures used to encapsulate data in the shared memory is 215agreed between the Non-secure world and the Secure Partition. For example, in 216the `Management Mode Interface specification`_ (*Arm DEN 0060A*), Section 4 217describes that the communication buffer shared between the Non-secure world and 218the Management Mode (MM) in the Secure world must be of the type 219``EFI_MM_COMMUNICATE_HEADER``. This data structure is defined in *Volume 4: 220Platform Initialisation Specification v1.6. Management Mode Core Interface*. 221Any caller of a MM service will have to use the ``EFI_MM_COMMUNICATE_HEADER`` 222data structure. 223 224Runtime model of the Secure Partition 225===================================== 226 227This section describes how the Secure Partition interfaces with the SPM. 228 229Interface with SPM 230------------------ 231 232In order to instantiate one or more secure services in the Secure Partition in 233S-EL0, the SPM should define the following types of interfaces: 234 235- Interfaces that enable access to privileged operations from S-EL0. These 236 operations typically require access to system resources that are either shared 237 amongst multiple software components in the Secure world or cannot be directly 238 accessed from an unprivileged Exception Level. 239 240- Interfaces that establish the control path between the SPM and the Secure 241 Partition. 242 243This section describes the APIs currently exported by the SPM that enable a 244Secure Partition to initialise itself and export its services in S-EL0. These 245interfaces are not accessible from the Non-secure world. 246 247Conduit 248^^^^^^^ 249 250The `SMC Calling Convention`_ (*Arm DEN 0028B*) specification describes the SMC 251and HVC conduits for accessing firmware services and their availability 252depending on the implemented Exception levels. In S-EL0, the Supervisor Call 253exception (SVC) is the only architectural mechanism available for unprivileged 254software to make a request for an operation implemented in privileged software. 255Hence, the SVC conduit must be used by the Secure Partition to access interfaces 256implemented by the SPM. 257 258A SVC causes an exception to be taken to S-EL1. TF-A assumes ownership of S-EL1 259and installs a simple exception vector table in S-EL1 that relays a SVC request 260from a Secure Partition as a SMC request to the SPM in EL3. Upon servicing the 261SMC request, Trusted Firmware-A returns control directly to S-EL0 through an 262ERET instruction. 263 264Calling conventions 265^^^^^^^^^^^^^^^^^^^ 266 267The `SMC Calling Convention`_ (*Arm DEN 0028B*) specification describes the 26832-bit and 64-bit calling conventions for the SMC and HVC conduits. The SVC 269conduit introduces the concept of SVC32 and SVC64 calling conventions. The SVC32 270and SVC64 calling conventions are equivalent to the 32-bit (SMC32) and the 27164-bit (SMC64) calling conventions respectively. 272 273Communication initiated by SPM 274^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 275 276A service request is initiated from the SPM through an exception return 277instruction (ERET) to S-EL0. Later, the Secure Partition issues an SVC 278instruction to signal completion of the request. Some example use cases are 279given below: 280 281- A request to initialise the Secure Partition during system boot. 282 283- A request to handle a runtime service request. 284 285Communication initiated by Secure Partition 286^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 287 288A request is initiated from the Secure Partition by executing a SVC instruction. 289An ERET instruction is used by TF-A to return to S-EL0 with the result of the 290request. 291 292For instance, a request to perform privileged operations on behalf of a 293partition (e.g. management of memory attributes in the translation tables for 294the Secure EL1&0 translation regime). 295 296Interfaces 297^^^^^^^^^^ 298 299The current implementation reserves function IDs for Fast Calls in the Standard 300Secure Service calls range (see `SMC Calling Convention`_ (*Arm DEN 0028B*) 301specification) for each API exported by the SPM. This section defines the 302function prototypes for each function ID. The function IDs specify whether one 303or both of the SVC32 and SVC64 calling conventions can be used to invoke the 304corresponding interface. 305 306Secure Partition Event Management 307^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 308 309The Secure Partition provides an Event Management interface that is used by the 310SPM to delegate service requests to the Secure Partition. The interface also 311allows the Secure Partition to: 312 313- Register with the SPM a service that it provides. 314- Indicate completion of a service request delegated by the SPM 315 316Miscellaneous interfaces 317------------------------ 318 319``SPM_MM_VERSION_AARCH32`` 320^^^^^^^^^^^^^^^^^^^^^^^^^^ 321 322- Description 323 324 Returns the version of the interface exported by SPM. 325 326- Parameters 327 328 - **uint32** - Function ID 329 330 - SVC32 Version: **0x84000060** 331 332- Return parameters 333 334 - **int32** - Status 335 336 On success, the format of the value is as follows: 337 338 - Bit [31]: Must be 0 339 - Bits [30:16]: Major Version. Must be 0 for this revision of the SPM 340 interface. 341 - Bits [15:0]: Minor Version. Must be 1 for this revision of the SPM 342 interface. 343 344 On error, the format of the value is as follows: 345 346 - ``NOT_SUPPORTED``: SPM interface is not supported or not available for the 347 client. 348 349- Usage 350 351 This function returns the version of the Secure Partition Manager 352 implementation. The major version is 0 and the minor version is 1. The version 353 number is a 31-bit unsigned integer, with the upper 15 bits denoting the major 354 revision, and the lower 16 bits denoting the minor revision. The following 355 rules apply to the version numbering: 356 357 - Different major revision values indicate possibly incompatible functions. 358 359 - For two revisions, A and B, for which the major revision values are 360 identical, if the minor revision value of revision B is greater than the 361 minor revision value of revision A, then every function in revision A must 362 work in a compatible way with revision B. However, it is possible for 363 revision B to have a higher function count than revision A. 364 365- Implementation responsibilities 366 367 If this function returns a valid version number, all the functions that are 368 described subsequently must be implemented, unless it is explicitly stated 369 that a function is optional. 370 371See `Error Codes`_ for integer values that are associated with each return 372code. 373 374Secure Partition Initialisation 375------------------------------- 376 377The SPM is responsible for initialising the architectural execution context to 378enable initialisation of a service in S-EL0. The responsibilities of the SPM are 379listed below. At the end of initialisation, the partition issues a 380``MM_SP_EVENT_COMPLETE_AARCH64`` call (described later) to signal readiness for 381handling requests for services implemented by the Secure Partition. The 382initialisation event is executed as a Fast Call. 383 384Entry point invocation 385^^^^^^^^^^^^^^^^^^^^^^ 386 387The entry point for service requests that should be handled as Fast Calls is 388used as the target of the ERET instruction to start initialisation of the Secure 389Partition. 390 391Architectural Setup 392^^^^^^^^^^^^^^^^^^^ 393 394At cold boot, system registers accessible from S-EL0 will be in their reset 395state unless otherwise specified. The SPM will perform the following 396architectural setup to enable execution in S-EL0 397 398MMU setup 399^^^^^^^^^ 400 401The platform port of a Secure Partition specifies to the SPM a list of regions 402that it needs access to and their attributes. The SPM validates this resource 403description and initialises the Secure EL1&0 translation regime as follows. 404 4051. Device regions are mapped with nGnRE attributes and Execute Never 406 instruction access permissions. 407 4082. Code memory regions are mapped with RO data and Executable instruction access 409 permissions. 410 4113. Read Only data memory regions are mapped with RO data and Execute Never 412 instruction access permissions. 413 4144. Read Write data memory regions are mapped with RW data and Execute Never 415 instruction access permissions. 416 4175. If the resource description does not explicitly describe the type of memory 418 regions then all memory regions will be marked with Code memory region 419 attributes. 420 4216. The ``UXN`` and ``PXN`` bits are set for regions that are not executable by 422 S-EL0 or S-EL1. 423 424System Register Setup 425^^^^^^^^^^^^^^^^^^^^^ 426 427System registers that influence software execution in S-EL0 are setup by the SPM 428as follows: 429 4301. ``SCTLR_EL1`` 431 432 - ``UCI=1`` 433 - ``EOE=0`` 434 - ``WXN=1`` 435 - ``nTWE=1`` 436 - ``nTWI=1`` 437 - ``UCT=1`` 438 - ``DZE=1`` 439 - ``I=1`` 440 - ``UMA=0`` 441 - ``SA0=1`` 442 - ``C=1`` 443 - ``A=1`` 444 - ``M=1`` 445 4462. ``CPACR_EL1`` 447 448 - ``FPEN=b'11`` 449 4503. ``PSTATE`` 451 452 - ``D,A,I,F=1`` 453 - ``CurrentEL=0`` (EL0) 454 - ``SpSel=0`` (Thread mode) 455 - ``NRW=0`` (AArch64) 456 457General Purpose Register Setup 458^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 459 460SPM will invoke the entry point of a service by executing an ERET instruction. 461This transition into S-EL0 is special since it is not in response to a previous 462request through a SVC instruction. This is the first entry into S-EL0. The 463general purpose register usage at the time of entry will be as specified in the 464"Return State" column of Table 3-1 in Section 3.1 "Register use in AArch64 SMC 465calls" of the `SMC Calling Convention`_ (*Arm DEN 0028B*) specification. In 466addition, certain other restrictions will be applied as described below. 467 4681. ``SP_EL0`` 469 470 A non-zero value will indicate that the SPM has initialised the stack pointer 471 for the current CPU. 472 473 The value will be 0 otherwise. 474 4752. ``X4-X30`` 476 477 The values of these registers will be 0. 478 4793. ``X0-X3`` 480 481 Parameters passed by the SPM. 482 483 - ``X0``: Virtual address of a buffer shared between EL3 and S-EL0. The 484 buffer will be mapped in the Secure EL1&0 translation regime with read-only 485 memory attributes described earlier. 486 487 - ``X1``: Size of the buffer in bytes. 488 489 - ``X2``: Cookie value (*IMPLEMENTATION DEFINED*). 490 491 - ``X3``: Cookie value (*IMPLEMENTATION DEFINED*). 492 493Runtime Event Delegation 494------------------------ 495 496The SPM receives requests for Secure Partition services through a synchronous 497invocation (i.e. a SMC from the Non-secure world). These requests are delegated 498to the partition by programming a return from the last 499``MM_SP_EVENT_COMPLETE_AARCH64`` call received from the partition. The last call 500was made to signal either completion of Secure Partition initialisation or 501completion of a partition service request. 502 503``MM_SP_EVENT_COMPLETE_AARCH64`` 504^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 505 506- Description 507 508 Signal completion of the last SP service request. 509 510- Parameters 511 512 - **uint32** - Function ID 513 514 - SVC64 Version: **0xC4000061** 515 516 - **int32** - Event Status Code 517 518 Zero or a positive value indicates that the event was handled successfully. 519 The values depend upon the original event that was delegated to the Secure 520 partition. They are described as follows. 521 522 - ``SUCCESS`` : Used to indicate that the Secure Partition was initialised 523 or a runtime request was handled successfully. 524 525 - Any other value greater than 0 is used to pass a specific Event Status 526 code in response to a runtime event. 527 528 A negative value indicates an error. The values of Event Status code depend 529 on the original event. 530 531- Return parameters 532 533 - **int32** - Event ID/Return Code 534 535 Zero or a positive value specifies the unique ID of the event being 536 delegated to the partition by the SPM. 537 538 In the current implementation, this parameter contains the function ID of 539 the ``MM_COMMUNICATE`` SMC. This value indicates to the partition that an 540 event has been delegated to it in response to an ``MM_COMMUNICATE`` request 541 from the Non-secure world. 542 543 A negative value indicates an error. The format of the value is as follows: 544 545 - ``NOT_SUPPORTED``: Function was called from the Non-secure world. 546 547 See `Error Codes`_ for integer values that are associated with each return 548 code. 549 550 - **uint32** - Event Context Address 551 552 Address of a buffer shared between the SPM and Secure Partition to pass 553 event specific information. The format of the data populated in the buffer 554 is implementation defined. 555 556 The buffer is mapped in the Secure EL1&0 translation regime with read-only 557 memory attributes described earlier. 558 559 For the SVC64 version, this parameter is a 64-bit Virtual Address (VA). 560 561 For the SVC32 version, this parameter is a 32-bit Virtual Address (VA). 562 563 - **uint32** - Event context size 564 565 Size of the memory starting at Event Address. 566 567 - **uint32/uint64** - Event Cookie 568 569 This is an optional parameter. If unused its value is SBZ. 570 571- Usage 572 573 This function signals to the SPM that the handling of the last event delegated 574 to a partition has completed. The partition is ready to handle its next event. 575 A return from this function is in response to the next event that will be 576 delegated to the partition. The return parameters describe the next event. 577 578- Caller responsibilities 579 580 A Secure Partition must only call ``MM_SP_EVENT_COMPLETE_AARCH64`` to signal 581 completion of a request that was delegated to it by the SPM. 582 583- Callee responsibilities 584 585 When the SPM receives this call from a Secure Partition, the corresponding 586 syndrome information can be used to return control through an ERET 587 instruction, to the instruction immediately after the call in the Secure 588 Partition context. This syndrome information comprises of general purpose and 589 system register values when the call was made. 590 591 The SPM must save this syndrome information and use it to delegate the next 592 event to the Secure Partition. The return parameters of this interface must 593 specify the properties of the event and be populated in ``X0-X3/W0-W3`` 594 registers. 595 596Secure Partition Memory Management 597---------------------------------- 598 599A Secure Partition executes at S-EL0, which is an unprivileged Exception Level. 600The SPM is responsible for enabling access to regions of memory in the system 601address map from a Secure Partition. This is done by mapping these regions in 602the Secure EL1&0 Translation regime with appropriate memory attributes. 603Attributes refer to memory type, permission, cacheability and shareability 604attributes used in the Translation tables. The definitions of these attributes 605and their usage can be found in the `Armv8-A ARM`_ (*Arm DDI 0487*). 606 607All memory required by the Secure Partition is allocated upfront in the SPM, 608even before handing over to the Secure Partition for the first time. The initial 609access permissions of the memory regions are statically provided by the platform 610port and should allow the Secure Partition to run its initialisation code. 611 612However, they might not suit the final needs of the Secure Partition because its 613final memory layout might not be known until the Secure Partition initialises 614itself. As the Secure Partition initialises its runtime environment it might, 615for example, load dynamically some modules. For instance, a Secure Partition 616could implement a loader for a standard executable file format (e.g. an PE-COFF 617loader for loading executable files at runtime). These executable files will be 618a part of the Secure Partition image. The location of various sections in an 619executable file and their permission attributes (e.g. read-write data, read-only 620data and code) will be known only when the file is loaded into memory. 621 622In this case, the Secure Partition needs a way to change the access permissions 623of its memory regions. The SPM provides this feature through the 624``MM_SP_MEMORY_ATTRIBUTES_SET_AARCH64`` SVC interface. This interface is 625available to the Secure Partition during a specific time window: from the first 626entry into the Secure Partition up to the first ``SP_EVENT_COMPLETE`` call that 627signals the Secure Partition has finished its initialisation. Once the 628initialisation is complete, the SPM does not allow changes to the memory 629attributes. 630 631This section describes the standard SVC interface that is implemented by the SPM 632to determine and change permission attributes of memory regions that belong to a 633Secure Partition. 634 635``MM_SP_MEMORY_ATTRIBUTES_GET_AARCH64`` 636^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 637 638- Description 639 640 Request the permission attributes of a memory region from S-EL0. 641 642- Parameters 643 644 - **uint32** Function ID 645 646 - SVC64 Version: **0xC4000064** 647 648 - **uint64** Base Address 649 650 This parameter is a 64-bit Virtual Address (VA). 651 652 There are no alignment restrictions on the Base Address. The permission 653 attributes of the translation granule it lies in are returned. 654 655- Return parameters 656 657 - **int32** - Memory Attributes/Return Code 658 659 On success the format of the Return Code is as follows: 660 661 - Bits[1:0] : Data access permission 662 663 - b'00 : No access 664 - b'01 : Read-Write access 665 - b'10 : Reserved 666 - b'11 : Read-only access 667 668 - Bit[2]: Instruction access permission 669 670 - b'0 : Executable 671 - b'1 : Non-executable 672 673 - Bit[30:3] : Reserved. SBZ. 674 675 - Bit[31] : Must be 0 676 677 On failure the following error codes are returned: 678 679 - ``INVALID_PARAMETERS``: The Secure Partition is not allowed to access the 680 memory region the Base Address lies in. 681 682 - ``NOT_SUPPORTED`` : The SPM does not support retrieval of attributes of 683 any memory page that is accessible by the Secure Partition, or the 684 function was called from the Non-secure world. Also returned if it is 685 used after ``MM_SP_EVENT_COMPLETE_AARCH64``. 686 687 See `Error Codes`_ for integer values that are associated with each return 688 code. 689 690- Usage 691 692 This function is used to request the permission attributes for S-EL0 on a 693 memory region accessible from a Secure Partition. The size of the memory 694 region is equal to the Translation Granule size used in the Secure EL1&0 695 translation regime. Requests to retrieve other memory region attributes are 696 not currently supported. 697 698- Caller responsibilities 699 700 The caller must obtain the Translation Granule Size of the Secure EL1&0 701 translation regime from the SPM through an implementation defined method. 702 703- Callee responsibilities 704 705 The SPM must not return the memory access controls for a page of memory that 706 is not accessible from a Secure Partition. 707 708``MM_SP_MEMORY_ATTRIBUTES_SET_AARCH64`` 709^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 710 711- Description 712 713 Set the permission attributes of a memory region from S-EL0. 714 715- Parameters 716 717 - **uint32** - Function ID 718 719 - SVC64 Version: **0xC4000065** 720 721 - **uint64** - Base Address 722 723 This parameter is a 64-bit Virtual Address (VA). 724 725 The alignment of the Base Address must be greater than or equal to the size 726 of the Translation Granule Size used in the Secure EL1&0 translation 727 regime. 728 729 - **uint32** - Page count 730 731 Number of pages starting from the Base Address whose memory attributes 732 should be changed. The page size is equal to the Translation Granule Size. 733 734 - **uint32** - Memory Access Controls 735 736 - Bits[1:0] : Data access permission 737 738 - b'00 : No access 739 - b'01 : Read-Write access 740 - b'10 : Reserved 741 - b'11 : Read-only access 742 743 - Bit[2] : Instruction access permission 744 745 - b'0 : Executable 746 - b'1 : Non-executable 747 748 - Bits[31:3] : Reserved. SBZ. 749 750 A combination of attributes that mark the region with RW and Executable 751 permissions is prohibited. A request to mark a device memory region with 752 Executable permissions is prohibited. 753 754- Return parameters 755 756 - **int32** - Return Code 757 758 - ``SUCCESS``: The Memory Access Controls were changed successfully. 759 760 - ``DENIED``: The SPM is servicing a request to change the attributes of a 761 memory region that overlaps with the region specified in this request. 762 763 - ``INVALID_PARAMETER``: An invalid combination of Memory Access Controls 764 has been specified. The Base Address is not correctly aligned. The Secure 765 Partition is not allowed to access part or all of the memory region 766 specified in the call. 767 768 - ``NO_MEMORY``: The SPM does not have memory resources to change the 769 attributes of the memory region in the translation tables. 770 771 - ``NOT_SUPPORTED``: The SPM does not permit change of attributes of any 772 memory region that is accessible by the Secure Partition. Function was 773 called from the Non-secure world. Also returned if it is used after 774 ``MM_SP_EVENT_COMPLETE_AARCH64``. 775 776 See `Error Codes`_ for integer values that are associated with each return 777 code. 778 779- Usage 780 781 This function is used to change the permission attributes for S-EL0 on a 782 memory region accessible from a Secure Partition. The size of the memory 783 region is equal to the Translation Granule size used in the Secure EL1&0 784 translation regime. Requests to change other memory region attributes are not 785 currently supported. 786 787 This function is only available at boot time. This interface is revoked after 788 the Secure Partition sends the first ``MM_SP_EVENT_COMPLETE_AARCH64`` to 789 signal that it is initialised and ready to receive run-time requests. 790 791- Caller responsibilities 792 793 The caller must obtain the Translation Granule Size of the Secure EL1&0 794 translation regime from the SPM through an implementation defined method. 795 796- Callee responsibilities 797 798 The SPM must preserve the original memory access controls of the region of 799 memory in case of an unsuccessful call. The SPM must preserve the consistency 800 of the S-EL1 translation regime if this function is called on different PEs 801 concurrently and the memory regions specified overlap. 802 803Error Codes 804----------- 805 806.. csv-table:: 807 :header: "Name", "Value" 808 809 ``SUCCESS``,0 810 ``NOT_SUPPORTED``,-1 811 ``INVALID_PARAMETER``,-2 812 ``DENIED``,-3 813 ``NO_MEMORY``,-5 814 ``NOT_PRESENT``,-7 815 816-------------- 817 818*Copyright (c) 2017-2021, Arm Limited and Contributors. All rights reserved.* 819 820.. _Armv8-A ARM: https://developer.arm.com/docs/ddi0487/latest/arm-architecture-reference-manual-armv8-for-armv8-a-architecture-profile 821.. _instructions in the EDK2 repository: https://github.com/tianocore/edk2-staging/blob/AArch64StandaloneMm/HowtoBuild.MD 822.. _Management Mode Interface Specification: http://infocenter.arm.com/help/topic/com.arm.doc.den0060a/DEN0060A_ARM_MM_Interface_Specification.pdf 823.. _SDEI Specification: http://infocenter.arm.com/help/topic/com.arm.doc.den0054a/ARM_DEN0054A_Software_Delegated_Exception_Interface.pdf 824.. _SMC Calling Convention: https://developer.arm.com/docs/den0028/latest 825 826.. |Image 1| image:: ../resources/diagrams/secure_sw_stack_tos.png 827.. |Image 2| image:: ../resources/diagrams/secure_sw_stack_sp.png 828