
Hi Abdellatif,
On Fri, 10 Mar 2023 at 06:12, Abdellatif El Khlifi abdellatif.elkhlifi@arm.com wrote:
Adding support for Arm FF-A v1.0 (Arm Firmware Framework for Armv8-A) [A].
FF-A describes interfaces (ABIs) that standardize communication between the Secure World and Normal World. These interfaces enable a pair of software sandboxes to communicate with each other. A sandbox aka 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_get_device_by_name).
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 - The FF-A core driver - The driver provides driver operations to be used by clients to access the FF-A bus - FF-A driver 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 - A new command called armffa is provided as an example of how to access the FF-A bus - An FF-A Sandbox driver is provided with test cases - Support for FF-A MM communication (compatible with EFI boot time) - Enabling FF-A and MM communication in Corstone1000 platform as a use case
For more details about the FF-A core driver 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:
v9:
- 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
This version looks a lot better. Things I noticed:
- fix up uclass to use operations - tidy up emulator binding to use DT
Both should be fairly easy.
Other than that I just have code-style nits.
Regards, Simon