Hi Simon, > Adding support for Arm FF-A v1.0 (Arm Firmware Framework for Armv8-A) [A]. > > FF-A specifies interfaces that enable a pair of software execution > environments aka partitions to > communicate with each other. A partition could be a VM in the Normal or > Secure world, an > application in S-EL0, or a Trusted OS in S-EL1. > > FF-A is a discoverable bus and similar to architecture features. > FF-A bus is discovered using ARM_SMCCC_FEATURES mechanism performed > by the PSCI driver. > > => dm tree > > Class Index Probed Driver Name > ----------------------------------------------------------- > ... > firmware 0 [ + ] psci |-- psci > ffa 0 [ ] arm_ffa | `-- arm_ffa > ... > > Clients are able to probe then use the FF-A bus by calling the DM class > searching APIs (e.g: uclass_first_device). > > This implementation of the specification provides support for Aarch64. > > The FF-A driver uses the SMC ABIs defined by the FF-A specification to: > > - Discover the presence of secure partitions (SPs) of interest > - Access an SP's service through communication protocols > (e.g: EFI MM communication protocol) > > The FF-A support provides the following features: > > - Being generic by design and can be used by any Arm 64-bit platform > - FF-A support can be compiled and used without EFI > - Support for SMCCCv1.2 x0-x17 registers > - Support for SMC32 calling convention > - Support for 32-bit and 64-bit FF-A direct messaging > - Support for FF-A MM communication (compatible with EFI boot time) > - Enabling FF-A and MM communication in Corstone1000 platform as a use > case > - A Uclass driver providing generic FF-A methods. > - An Arm FF-A device driver providing Arm-specific methods and reusing > the Uclass methods. > - A sandbox emulator for Arm FF-A, emulates the FF-A side of the Secure > World and provides > FF-A ABIs inspection methods. > - An FF-A sandbox device driver for FF-A communication with the emulated > Secure World. > The driver leverages the FF-A Uclass to establish FF-A communication. > - Sandbox FF-A test cases. > - A new command called armffa is provided as an example of how to access > the > FF-A bus > > For more details about the FF-A support please refer to [B] and refer to [C] > for > how to use the armffa command. > > Please find at [D] 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: > =========================== > > v12: > > * remove the global variable (dscvry_info), use uc_priv instead > * replace dscvry_info.invoke_ffa_fn() with a weak invoke_ffa_fn > (user drivers can override it) > * improve FFA_PARTITION_INFO_GET implementation > (clients no longer need to calloc a buffer) > * remove reparenting by making the sandbox emulator parent of the FF-A device > in the DT > * improve argument checks for the armffa command > * address nits > > v11: [11] > > * move ffa_try_discovery() from the uclass to the Arm FF-A driver > * rename ffa_try_discovery() to arm_ffa_discover() > * add arm_ prefix to the Arm FF-A driver functions > * use U_BOOT_CMD_WITH_SUBCMDS for armffa command > * store the sandbox emulator pointer in the FF-A device uc_priv (struct > ffa_priv) > * set the emulator as parent of the sandbox FF-A device > * rename select_ffa_mm_comms() to select_mm_comms() > * improve the logic of MM transport selection in mm_communicate() > * use ut_asserteq_mem() in uuid_str_to_le_bin test case > * address nits > > v10: [10] > > * provide the FF-A driver operations through the Uclass (arm-ffa-uclass.c) > * move the generic FF-A methods to the Uclass > * keep Arm specific methods in the Arm driver (arm-ffa.c renamed from core.c) > * split the FF-A sandbox support into an emulator (ffa-emul-uclass.c) and a > driver (sandbox_ffa.c) > * use the FF-A driver Uclass operations by clients (armffa command, tests, MM > comms) > * use uclass_first_device to search and probe the FF-A device (whether it is > on Arm or on sandbox) > * address nits > > v9: [9] > > * integrate the FF-A bus discovery in the DM and use ARM_SMCCC_FEATURES for > binding > * align FF-A sandbox driver with FF-A discovery through DM > * use DM class APIs to probe and interact with the FF-A bus (in FF-A MM > comms, armffa command, sandbox tests) > * add documentation for the armffa command: doc/usage/cmd/armffa.rst > * introduce testcase for uuid_str_to_le_bin > > v8: [8] > > * pass the FF-A bus device to the bus operations > * isolate the compilation choices between FF-A and OP-TEE > * drop OP-TEE configs from Corstone-1000 defconfig > * make ffa_get_partitions_info() second argument to be an SP count in both > modes > > v7: [7] > > * add support for 32-bit direct messaging (now we have 32-bit and 64-bit > support) > * set the MM door bell event to use 64-bit direct messaging > * issue a compile time error when one of these macros are not found : > FFA_SHARED_MM_BUFFER_SIZE, FFA_SHARED_MM_BUFFER_OFFSET, > FFA_SHARED_MM_BUFFER_ADDR > * make uuid_str_to_le_bin() implementation similar to uuid_str_to_bin() > by using same APIs > > v6: [6] > > * remove clearing x0-x17 registers after SMC calls > * drop use of EFI runtime support for FF-A (We decided with Linaro to add > this later) > * drop discovery from initcalls (discovery will be on demand by FF-A users) > * add FF-A runtime discovery at MM communication level > * update the documentation and move it to doc/arch/arm64.ffa.rst > > v5: [5] > > * move changelogs in each commit to the changes section > > v4: [4] > > * 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/unbind 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 > > List of previous patches: > > [1]: > https://lore.kernel.org/all/20220329151659.16894-1-abdellatif.elkhl...@arm.com/ > [2]: > https://lore.kernel.org/all/20220415122803.16666-1-abdellatif.elkhl...@arm.com/ > [3]: > https://lore.kernel.org/all/20220801172053.20163-1-abdellatif.elkhl...@arm.com/ > [4]: > https://lore.kernel.org/all/20220926101723.9965-1-abdellatif.elkhl...@arm.com/ > [5]: > https://lore.kernel.org/all/20220926140827.15125-1-abdellatif.elkhl...@arm.com/ > [6]: > https://lore.kernel.org/all/20221013103857.614-1-abdellatif.elkhl...@arm.com/ > [7]: > https://lore.kernel.org/all/20221107192055.21669-1-abdellatif.elkhl...@arm.com/ > [8]: > https://lore.kernel.org/all/20221122131751.22747-1-abdellatif.elkhl...@arm.com/ > [9]: > https://lore.kernel.org/all/20230310141016.137986-1-abdellatif.elkhl...@arm.com/ > [10]: > https://lore.kernel.org/all/20230328161157.219375-1-abdellatif.elkhl...@arm.com/ > [11]: > https://lore.kernel.org/all/20230412094245.44674-1-abdellatif.elkhl...@arm.com/ > > More details: > > [A]: https://developer.arm.com/documentation/den0077/latest/ > [B]: doc/arch/arm64.ffa.rst > [C]: doc/usage/cmd/armffa.rst > [D]: example of boot logs when enabling FF-A > > ``` > U-Boot 2023.01 (May 10 2023 - 11:08:07 +0000) corstone1000 aarch64 > > DRAM: 2 GiB > Arm FF-A framework discovery > FF-A driver 1.0 > FF-A framework 1.0 > FF-A versions are compatible > ... > FF-A driver 1.0 > FF-A framework 1.0 > FF-A versions are compatible > EFI: MM partition ID 0x8003 > ... > EFI stub: Booting Linux Kernel... > ... > Linux version 6.1.9-yocto-standard (oe-user@oe-host) > (aarch64-poky-linux-musl-gcc (GCC) 12.2.0, GNU ld (GNU Binutils) > 2.40.202301193 > Machine model: ARM Corstone1000 FPGA MPS3 board > ``` > > Cc: Tom Rini <tr...@konsulko.com> > Cc: Simon Glass <s...@chromium.org>
A gentle reminder about the v12 patchset. Your feedback is more than welcome :) Cheers > Cc: Rob Herring <r...@kernel.org> > Cc: Ilias Apalodimas <ilias.apalodi...@linaro.org> > Cc: Jens Wiklander <jens.wiklan...@linaro.org> > Cc: Achin Gupta <achin.gu...@arm.com> > Cc: Drew Reed <drew.r...@arm.com> > Cc: Xueliang Zhong <xueliang.zh...@arm.com> > > Abdellatif El Khlifi (10): > arm64: smccc: add support for SMCCCv1.2 x0-x17 registers > lib: uuid: introduce uuid_str_to_le_bin function > lib: uuid: introduce testcase for uuid_str_to_le_bin > arm_ffa: introduce Arm FF-A support > arm_ffa: introduce armffa command > arm_ffa: introduce sandbox FF-A support > arm_ffa: introduce sandbox test cases for UCLASS_FFA > arm_ffa: introduce armffa command Sandbox test > arm_ffa: efi: introduce FF-A MM communication > arm_ffa: efi: corstone1000: enable MM communication > > MAINTAINERS | 18 + > arch/arm/cpu/armv8/smccc-call.S | 57 +- > arch/arm/lib/asm-offsets.c | 16 + > arch/sandbox/dts/sandbox.dtsi | 9 + > arch/sandbox/dts/test.dts | 8 + > arch/sandbox/include/asm/sandbox_arm_ffa.h | 72 ++ > .../include/asm/sandbox_arm_ffa_priv.h | 121 ++ > cmd/Kconfig | 10 + > cmd/Makefile | 1 + > cmd/armffa.c | 196 +++ > configs/corstone1000_defconfig | 2 + > configs/sandbox64_defconfig | 1 + > configs/sandbox_defconfig | 1 + > doc/arch/arm64.ffa.rst | 270 +++++ > doc/arch/index.rst | 1 + > doc/arch/sandbox/sandbox.rst | 1 + > doc/usage/cmd/armffa.rst | 93 ++ > doc/usage/index.rst | 1 + > drivers/Makefile | 1 + > drivers/firmware/Kconfig | 1 + > drivers/firmware/arm-ffa/Kconfig | 42 + > drivers/firmware/arm-ffa/Makefile | 16 + > drivers/firmware/arm-ffa/arm-ffa-uclass.c | 1065 +++++++++++++++++ > drivers/firmware/arm-ffa/arm-ffa.c | 104 ++ > drivers/firmware/arm-ffa/ffa-emul-uclass.c | 720 +++++++++++ > drivers/firmware/arm-ffa/sandbox_ffa.c | 110 ++ > include/arm_ffa.h | 213 ++++ > include/arm_ffa_priv.h | 246 ++++ > include/configs/corstone1000.h | 15 +- > include/dm/uclass-id.h | 7 + > include/linux/arm-smccc.h | 45 + > include/mm_communication.h | 13 + > include/uuid.h | 15 + > lib/efi_loader/Kconfig | 14 +- > lib/efi_loader/efi_variable_tee.c | 291 ++++- > lib/uuid.c | 48 + > test/cmd/Makefile | 2 + > test/cmd/armffa.c | 33 + > test/dm/Makefile | 3 +- > test/dm/ffa.c | 261 ++++ > test/lib/Makefile | 1 + > test/lib/uuid.c | 41 + > 42 files changed, 4175 insertions(+), 10 deletions(-) > create mode 100644 arch/sandbox/include/asm/sandbox_arm_ffa.h > create mode 100644 arch/sandbox/include/asm/sandbox_arm_ffa_priv.h > create mode 100644 cmd/armffa.c > create mode 100644 doc/arch/arm64.ffa.rst > create mode 100644 doc/usage/cmd/armffa.rst > 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.c > create mode 100644 drivers/firmware/arm-ffa/ffa-emul-uclass.c > create mode 100644 drivers/firmware/arm-ffa/sandbox_ffa.c > create mode 100644 include/arm_ffa.h > create mode 100644 include/arm_ffa_priv.h > create mode 100644 test/cmd/armffa.c > create mode 100644 test/dm/ffa.c > create mode 100644 test/lib/uuid.c > > -- > 2.25.1 >