
This new version of the patchset provides improvements to the FF-A support and updates for the Sandbox test cases.
Please refer to the changelog below for a list of the major changes made.
Please refer to the changelog in the commit logs for a detailed view of the changes including the minor changes.
All previous review comments have been addressed.
I'll reply to the individual review comments after the submission of this v4 patchset.
Please find at [4] an example of the expected boot logs when enabling FF-A support for a platform. In this example the platform is Corstone1000. But it can be any Arm 64-bit platform.
Changelog of the major changes: ===========================
v4:
* add FF-A support README (doc/README.ffa.drv) * improving error handling by mapping the FF-A errors to standard errors and logs * replacing panics with an error log * align sandbox driver and tests with the new FF-A driver interfaces and new way of error handling * use the new FF-A driver interfaces for MM communication * discover MM partitions at runtime * copy FF-A driver private data to EFI runtime section at ExitBootServices() * moving the FF-A driver work to drivers/firmware/arm-ffa * improving features discovery in FFA_FEATURES * add remove/bind functions to the FF-A core device * improve how the driver behaves when bus discovery is done more than once * move clearing x0-x17 registers code into a new macro like done in the linux kernel * enable EFI MM communication for the Corstone1000 platform
v3: [3]
* port x0-x17 registers support from linux kernel as defined by SMCCCv1.2 * align the interfaces of the u-boot FF-A driver with those in the linux FF-A driver * remove the FF-A helper layer * make the u-boot FF-A driver independent from EFI * provide an optional config that enables copying the driver data to EFI runtime section at ExitBootServices service * use 64-bit version of FFA_RXTX_MAP, FFA_MSG_SEND_DIRECT_{REQ, RESP} * update armffa command with the new driver interfaces
v2 [2]:
* make FF-A bus discoverable using device_{bind, probe} APIs * remove device tree support
v1 [1]:
* introduce FF-A bus driver with device tree support * introduce armffa command * introduce FF-A Sandbox driver * add FF-A Sandbox test cases * introduce FF-A MM communication
Cheers, Abdellatif
[1]: https://lore.kernel.org/all/20220329151659.16894-1-abdellatif.elkhlifi@arm.c... [2]: https://lore.kernel.org/all/20220415122803.16666-1-abdellatif.elkhlifi@arm.c... [3]: https://lore.kernel.org/all/20220801172053.20163-1-abdellatif.elkhlifi@arm.c... [4]: example of boot logs when enabling FF-A
``` U-Boot 2022.07 (Jul 11 2022 - 13:42:58 +0000) corstone1000 aarch64 ... [FFA] Conduit is SMC [FFA] FF-A driver 1.0 FF-A framework 1.0 [FFA] Versions are compatible [FFA] endpoint ID is 0 [FFA] Using 1 4KB page(s) for RX/TX buffers size [FFA] RX buffer at virtual address 0xfdf18000 [FFA] TX buffer at virtual address 0xfdf1a000 [FFA] RX/TX buffers mapped [FFA] Reading partitions data from the RX buffer [FFA] Partition ID 8001 : info cached [FFA] Partition ID 8002 : info cached [FFA] Partition ID 8003 : info cached [FFA] 3 partition(s) found and cached Hit any key to stop autoboot: 0 ... [FFA] Preparing for checking partitions count [FFA] Searching partitions using the provided UUID [FFA] No partition found. Querying framework ... [FFA] Reading partitions data from the RX buffer [FFA] Number of partition(s) found matching the UUID: 1 EFI: Pre-allocating 1 partition(s) info structures [FFA] Preparing for filling partitions info [FFA] Searching partitions using the provided UUID [FFA] Partition ID 8003 matches the provided UUID EFI: MM partition ID 0x8003 ... EFI stub: Booting Linux Kernel... EFI stub: Using DTB from configuration table EFI stub: Exiting boot services... [FFA] Freeing RX/TX buffers INFO: EFI: FFA: prv data area at 0xfff2f768 INFO: EFI: FFA: runtime data area at 0xfcef4000 INFO: EFI: FFA: SPs runtime area at 0xfcef3000 INFO: EFI: FFA: runtime prv data now at 0xfcef4000 , SPs count 3 INFO: EFI: FFA: runtime data copied Booting Linux on physical CPU 0x0000000000 [0x410fd040] ```
Cc: Tom Rini trini@konsulko.com Cc: Simon Glass sjg@chromium.org Cc: Ilias Apalodimas ilias.apalodimas@linaro.org Cc: Jens Wiklander jens.wiklander@linaro.org Cc: Achin Gupta achin.gupta@arm.com Cc: Vishnu Banavath vishnu.banavath@arm.com Cc: Xueliang Zhong Xueliang.Zhong@arm.com
Abdellatif El Khlifi (10): arm64: smccc: add support for SMCCCv1.2 x0-x17 registers arm64: smccc: clear the Xn registers after SMC calls lib: uuid: introduce be_uuid_str_to_le_bin function arm_ffa: introduce Arm FF-A low-level driver arm_ffa: introduce armffa command arm_ffa: introduce the FF-A Sandbox driver arm_ffa: introduce Sandbox test cases for UCLASS_FFA arm_ffa: introduce armffa command Sandbox test arm_ffa: introduce FF-A MM communication arm_ffa: corstone1000: enable EFI MM communication
MAINTAINERS | 11 + arch/arm/cpu/armv8/cache.S | 19 + arch/arm/cpu/armv8/cache_v8.c | 6 +- arch/arm/cpu/armv8/smccc-call.S | 62 + arch/arm/lib/asm-offsets.c | 14 + cmd/Kconfig | 10 + cmd/Makefile | 2 + cmd/armffa.c | 242 +++ common/board_r.c | 9 + configs/corstone1000_defconfig | 4 + configs/sandbox64_defconfig | 2 + configs/sandbox_defconfig | 2 + doc/README.ffa.drv | 160 ++ doc/arch/sandbox.rst | 1 + drivers/Kconfig | 2 + drivers/Makefile | 1 + drivers/firmware/arm-ffa/Kconfig | 46 + drivers/firmware/arm-ffa/Makefile | 8 + drivers/firmware/arm-ffa/arm-ffa-uclass.c | 16 + drivers/firmware/arm-ffa/arm_ffa_prv.h | 201 +++ drivers/firmware/arm-ffa/core.c | 1358 +++++++++++++++++ .../arm-ffa/efi_ffa_runtime_data_mgr.c | 94 ++ drivers/firmware/arm-ffa/sandbox.c | 659 ++++++++ .../firmware/arm-ffa/sandbox_arm_ffa_prv.h | 144 ++ include/arm_ffa.h | 127 ++ include/configs/corstone1000.h | 9 + include/dm/uclass-id.h | 4 + include/linux/arm-smccc.h | 43 + include/mm_communication.h | 9 +- include/sandbox_arm_ffa.h | 91 ++ include/uuid.h | 8 + lib/efi_loader/Kconfig | 14 +- lib/efi_loader/efi_boottime.c | 22 + lib/efi_loader/efi_variable_tee.c | 263 +++- lib/uuid.c | 64 + test/cmd/Makefile | 2 + test/cmd/armffa.c | 40 + test/dm/Makefile | 2 + test/dm/ffa.c | 394 +++++ 39 files changed, 4156 insertions(+), 9 deletions(-) create mode 100644 cmd/armffa.c create mode 100644 doc/README.ffa.drv create mode 100644 drivers/firmware/arm-ffa/Kconfig create mode 100644 drivers/firmware/arm-ffa/Makefile create mode 100644 drivers/firmware/arm-ffa/arm-ffa-uclass.c create mode 100644 drivers/firmware/arm-ffa/arm_ffa_prv.h create mode 100644 drivers/firmware/arm-ffa/core.c create mode 100644 drivers/firmware/arm-ffa/efi_ffa_runtime_data_mgr.c create mode 100644 drivers/firmware/arm-ffa/sandbox.c create mode 100644 drivers/firmware/arm-ffa/sandbox_arm_ffa_prv.h create mode 100644 include/arm_ffa.h create mode 100644 include/sandbox_arm_ffa.h create mode 100644 test/cmd/armffa.c create mode 100644 test/dm/ffa.c