On 2026-07-12 08:33 +0200, Heinrich Schuchardt wrote: > On 6/27/26 16:44, Harsimran Singh Tungal wrote: > > 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, docs, and board configs to validate the runtime > > path and keep boot-time behavior aligned with the runtime flow. > > Hello Harsiman, > > Unfortunately this cover-letter lacks some background information needed > for reviewing the patch series. > > Why is this new transport needed? We already have a transport for EFI > variables to the secure world via OP-TEE (see CONFIG_EFI_MM_COMM_TEE). > > Where is the EFI variables specific FF-A message protocol specified? > > Is there a Linux driver that can communicate via this message protocol? > > How can the transport be tested with QEMU and Linux? > > Best regards > > Heinrich >
Hello Heinrich, The motivation is that CONFIG_EFI_MM_COMM_TEE covers the OP-TEE transport, but some platforms expose the MM variable service through an FF-A secure partition instead of OP-TEE. On those systems U-Boot can use FF-A before ExitBootServices(), but the normal driver-model FF-A path is not available afterwards. This series adds a resident FF-A runtime transport so EFI runtime variable services can still reach the MM secure partition after ExitBootServices(). There is no new EFI variable specific FF-A payload protocol introduced by this series. FF-A is used only as the transport. The payload remains the existing MM communication buffer used by StandaloneMM variable services. Linux continues to call the firmware EFI runtime services through the EFI runtime service table. U-Boot then forwards those calls to the MM secure partition over FF-A. For testing, the U-Boot side is covered by sandbox FF-A runtime transport tests and by the bootefi runtime-variable selftest. A full QEMU/Linux test needs a secure-world setup with an SPMC and an MM secure partition. Thanks Harsimran Singh Tungal > > > > Changes in this series: > > - Add EFI runtime-safe memset helper and FF-A runtime transport support. > > - Implement FF-A runtime communication in the EFI variable TEE backend. > > - Enable EFI runtime variable operations over the FF-A transport. > > - Add sandbox runtime transport tests. > > - Extend EFI selftests for runtime variables and bootefi selftest config. > > - Document the FF-A runtime transport and selftest behavior. > > > > 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 v2: > > https://lore.kernel.org/u-boot/[email protected]/ > > Link to v1: > > https://lore.kernel.org/u-boot/[email protected]/ > > > > Harsimran Singh Tungal (10): > > efi_loader: add runtime memset helper > > arm-ffa: add FF-A bus runtime support > > efi_loader: add FF-A runtime support in EFI variable TEE driver > > efi_loader: enable EFI runtime SetVariable()/GetVariable() using FF-A > > transport > > 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 | 726 +++++++++++++++--- > > .../efi_selftest_variables_runtime.c | 715 +++++++++++------ > > test/dm/Makefile | 3 +- > > test/dm/ffa.c | 6 +- > > test/dm/ffa_runtime.c | 123 +++ > > 25 files changed, 1997 insertions(+), 492 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 > > > >
