Hi all, This series adds FF-A runtime transport support so EFI variable runtime services can communicate with the secure world after ExitBootServices(). It also extends tests, documentation, and Corstone-1000 configuration to validate the runtime path and keep boot-time behavior aligned with the runtime flow.
Changes in this series: - Add EFI runtime-safe memset helper and FF-A runtime transport support. - Add runtime-safe FF-A direct-message handling and ExitBootServices setup. - Implement FF-A runtime communication in the EFI variable TEE backend. - Enable EFI runtime SetVariable(), GetVariable(), GetNextVariableName(), and QueryVariableInfo() over the FF-A transport. - Add sandbox FF-A runtime transport tests. - Extend EFI selftests for runtime variables and enable bootefi selftest on Corstone-1000. - Document the FF-A runtime transport and runtime-variable selftest flow. Changes in v4: Address Ilias Apalodimas's review comments: - Split FF-A bus runtime support into smaller patches covering runtime private data, SMC invocation, direct-message helpers, boot-time reuse, and ExitBootServices setup. - Split the ARMv8 cache range-maintenance runtime annotations into a separate patch. - Split the EFI variable TEE runtime SetVariable(), GetVariable(), GetNextVariableName(), and QueryVariableInfo() support into separate patches. - Replace MM SP status macros with an enum. - Keep OP-TEE as the runtime fallback when FF-A runtime mode is not enabled. Other changes: - Rebased the series onto current U-Boot master. Changes in v3: Address Simon Glass's review comments: - Move FF-A ExitBootServices event registration to the end of probe and clean up RX/TX buffer handling on failure. - Rename FF-A runtime-context helpers to the ffa_runtime_context_* form. - Rework FF-A/MM cache maintenance to cover only rounded request and response ranges. - Add SetVirtualAddressMap handling for the FF-A shared buffer. - Document FF-A shared-buffer ownership and alignment assumptions. - Add EFIAPI to the TEE runtime GetVariable and GetNextVariableName entry points. - Tighten sandbox FF-A runtime tests and reset runtime state between test cases. - Update FF-A and bootefi documentation for the runtime transport and split runtime-variable selftests. - Rework commit messages to drop redundant information. Address Ilias Apalodimas's review comments: - Keep efi_var_common.c unchanged and drop commit 6 from v2 patchset. - Rename the TEE/FF-A runtime handlers to the *_int_runtime form. - Remove log_*() calls from __efi_runtime FF-A/MM communication paths. Other: - Fix FF-A memory-share sender_id to use the runtime private endpoint ID after rebasing. - Fix the expected QueryVariableInfo() return status for the TEE-backed runtime selftest path. Changes in v2: Address Simon Glass's review comments: - Fix efi_memset_runtime() style, declaration, and byte cast - Tighten the FF-A runtime context failure path, clean up arm-ffa-runtime.c style issues, and move ExitBootServices event registration earlier in probe - Add shared-buffer bounds/alignment checks, and tightening comments/kernel-doc - Document the FF-A shared buffer cacheline-alignment requirement and add BUILD_BUG_ON() checks for the address - Cache attributes before the shared buffer is reused, moving the read-only check earlier, and split the u16_strsize() related change in separate patch - Reword commit messages for the runtime helper relocation - Rework the non-volatile runtime variable selftest into setup/verify phases - Extend the sandbox FF-A runtime tests with no-context coverage, runtime-context reset, and separate errno-mapping coverage - Refresh the FF-A runtime transport and bootefi documentation - Drop patch 12 in v1, as ffa_mm_communicate handles both runtime and boottime capabilities in v2 - Squash patch 8 and patch 9 from v1 Address Ilias Apalodimas's review comments: - Reuse common MM SP error mapping for boot and runtime paths - Rename runtime-phase tracking to reflect the ExitBootServices transition - Collapse duplicated boot-time and runtime MM communication helpers into common implementations - Keep the arm64 cache-maintenance path runtime-safe - Move FF-A shared-buffer runtime memory-map registration to the end of variable-service initialization Link to v3: https://lore.kernel.org/u-boot/[email protected]/ Link to v2: https://lore.kernel.org/u-boot/[email protected]/ Link to v1: https://lore.kernel.org/u-boot/[email protected]/ Harsimran Singh Tungal (22): efi_loader: add runtime memset helper arm-ffa: store boot-discovered runtime data separately arm-ffa: add runtime-safe FF-A SMC wrapper arm-ffa: add runtime direct-message support arm-ffa: reuse direct-message helper at boot time arm-ffa: enable runtime context at ExitBootServices arm: cache: keep range maintenance available at EFI runtime efi_loader: add MM SP status mapping for FF-A variables efi_loader: make MM transport selection runtime-safe efi_loader: make FF-A MM SP notification runtime-safe efi_loader: make FF-A MM communication runtime-safe efi_loader: reserve FF-A shared buffer for runtime variables efi_loader: enable TEE runtime SetVariable() over FF-A efi_loader: enable TEE runtime GetVariable() over FF-A efi_loader: enable TEE runtime GetNextVariableName() over FF-A efi_loader: enable TEE runtime QueryVariableInfo() over FF-A charset: mark u16_strsize() as __efi_runtime corstone1000: enable bootefi selftest efi: selftest: add runtime variable tests with non-volatile storage test: dm: add sandbox FF-A runtime transport tests doc: arm64: document FF-A runtime path for EFI variables doc: bootefi: note two-phase runtime variables selftest arch/arm/cpu/armv8/cache.S | 8 + arch/arm/cpu/armv8/cache_v8.c | 13 +- arch/sandbox/include/asm/sandbox_arm_ffa.h | 16 +- configs/corstone1000_defconfig | 3 + doc/arch/arm64.ffa.rst | 88 ++- doc/usage/cmd/armffa.rst | 11 + doc/usage/cmd/bootefi.rst | 31 + drivers/firmware/arm-ffa/Kconfig | 11 + drivers/firmware/arm-ffa/Makefile | 4 +- drivers/firmware/arm-ffa/arm-ffa-runtime.c | 294 +++++++ drivers/firmware/arm-ffa/arm-ffa-uclass.c | 114 +-- drivers/firmware/arm-ffa/arm-ffa.c | 16 +- drivers/firmware/arm-ffa/ffa-emul-uclass.c | 49 +- include/arm_ffa.h | 16 +- include/arm_ffa_priv.h | 22 +- include/arm_ffa_runtime.h | 191 +++++ include/efi_loader.h | 3 + lib/charset.c | 2 +- lib/efi_loader/Kconfig | 4 + lib/efi_loader/efi_runtime.c | 20 + lib/efi_loader/efi_variable_tee.c | 739 +++++++++++++++--- .../efi_selftest_variables_runtime.c | 715 +++++++++++------ test/dm/Makefile | 3 +- test/dm/ffa.c | 6 +- test/dm/ffa_runtime.c | 123 +++ 25 files changed, 2004 insertions(+), 498 deletions(-) create mode 100644 drivers/firmware/arm-ffa/arm-ffa-runtime.c create mode 100644 include/arm_ffa_runtime.h create mode 100644 test/dm/ffa_runtime.c -- 2.34.1
