From 573ac37373d3e8b2c31b3aaeed759e4656e060ec Mon Sep 17 00:00:00 2001 From: J-Alves Date: Tue, 24 May 2022 12:13:08 +0100 Subject: [PATCH] docs(spm): update ff-a boot protocol documentation Updated following sections to document implementation of the FF-A boot information protocol: - Describing secure partitions. - Secure Partition Packages. - Passing boot data to the SP. Also updated description of the manifest field 'gp-register-num'. Signed-off-by: J-Alves Change-Id: I5c856437b60cdf05566dd636a01207c9b9f42e61 --- docs/components/ffa-manifest-binding.rst | 8 +-- docs/components/secure-partition-manager.rst | 68 ++++++++++++++++-- docs/resources/diagrams/partition-package.png | Bin 0 -> 35971 bytes 3 files changed, 65 insertions(+), 11 deletions(-) create mode 100644 docs/resources/diagrams/partition-package.png diff --git a/docs/components/ffa-manifest-binding.rst b/docs/components/ffa-manifest-binding.rst index 59996cc27..1d8ad0a17 100644 --- a/docs/components/ffa-manifest-binding.rst +++ b/docs/components/ffa-manifest-binding.rst @@ -137,14 +137,14 @@ Partition Properties - gp-register-num - value type: - - Presence of this field indicates that the partition expects the - ffa_init_info structure to be passed in via the specified general purpose - register. - The field specifies the general purpose register number but not its width. + - The field specifies the general purpose register number but not its width. The width is derived from the partition's execution state, as specified in the partition properties. For example, if the number value is 1 then the general-purpose register used will be x1 in AArch64 state and w1 in AArch32 state. + Presence of this field indicates that the partition expects the address of + the FF-A boot information blob to be passed in the specified general purpose + register. - stream-endpoint-ids - value type: diff --git a/docs/components/secure-partition-manager.rst b/docs/components/secure-partition-manager.rst index 2eaae7583..53a5151e2 100644 --- a/docs/components/secure-partition-manager.rst +++ b/docs/components/secure-partition-manager.rst @@ -358,6 +358,15 @@ Describing secure partitions A json-formatted description file is passed to the build flow specifying paths to the SP binary image and associated DTS partition manifest file. The latter is processed by the dtc compiler to generate a DTB fed into the SP package. +Optionally, the partition's json description can contain offsets for both +the image and partition manifest within the SP package. Both offsets need to be +4KB aligned, because it is the translation granule supported by Hafnium SPMC. +These fields can be leveraged to support SPs with S1 translation granules that +differ from 4KB, and to configure the regions allocated within the SP package, +as well as to comply with the requirements for the implementation of the boot +information protocol (see `Passing boot data to the SP`_ for more details). In +case the offsets are absent in their json node, they default to 0x1000 and +0x4000 for the manifest offset and image offset respectively. This file also specifies the SP owner (as an optional field) identifying the signing domain in case of dual root CoT. The SP owner can either be the silicon or the platform provider. The @@ -381,7 +390,19 @@ manifest. "image": "tee2.bin", "pm": "tee2.dts", "owner": "Plat" - } + }, + + "tee3" : { + "image": { + "file": "tee3.bin", + "offset":"0x2000" + }, + "pm": { + "file": "tee3.dts", + "offset":"0x6000" + }, + "owner": "Plat" + }, } SPMC manifest @@ -544,13 +565,46 @@ non-secure EL1&0 Stage-2 table if it exists. Passing boot data to the SP --------------------------- -In `[1]`_ , the "Protocol for passing data" section defines a method for passing -boot data to SPs (not currently implemented). +In `[1]`_ , the section "Boot information protocol" defines a method for passing +data to the SPs at boot time. It specifies the format for the boot information +descriptor and boot information header structures, which describe the data to be +exchanged between SPMC and SP. +The specification also defines the types of data that can be passed. +The aggregate of both the boot info structures and the data itself is designated +the boot information blob, and is passed to a Partition as a contiguous memory +region. -Provided that the whole secure partition package image (see -`Secure Partition packages`_) is mapped to the SP secure EL1&0 Stage-2 -translation regime, an SP can access its own manifest DTB blob and extract its -partition manifest properties. +Currently, the SPM implementation supports the FDT type which is used to pass the +partition's DTB manifest. + +The region for the boot information blob is allocated through the SP package. + +.. image:: ../resources/diagrams/partition-package.png + +To adjust the space allocated for the boot information blob, the json description +of the SP (see section `Describing secure partitions`_) shall be updated to contain +the manifest offset. If no offset is provided the manifest offset defaults to 0x1000, +which is the page size in the Hafnium SPMC. + +The configuration of the boot protocol is done in the SPs manifest. As defined by +the specification, the manifest field 'gp-register-num' configures the GP register +which shall be used to pass the address to the partitions boot information blob when +booting the partition. +In addition, the Hafnium SPMC implementation requires the boot information arguments +to be listed in a designated DT node: + +.. code:: shell + + boot-info { + compatible = "arm,ffa-manifest-boot-info"; + ffa_manifest; + }; + +The whole secure partition package image (see `Secure Partition packages`_) is +mapped to the SP secure EL1&0 Stage-2 translation regime. As such, the SP can +retrieve the address for the boot information blob in the designated GP register, +process the boot information header and descriptors, access its own manifest +DTB blob and extract its partition manifest properties. SP Boot order ------------- diff --git a/docs/resources/diagrams/partition-package.png b/docs/resources/diagrams/partition-package.png new file mode 100644 index 0000000000000000000000000000000000000000..33674228d365c51127e91960bae9db031150a452 GIT binary patch literal 35971 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 YbA0+RRp=#j$?;?)6`vJJ7{C3$0Q1VT_y7O^ literal 0 HcmV?d00001