
On Tue, Jun 06, 2023 at 12:56:28PM +0100, Abdellatif El Khlifi wrote:
On Mon, May 22, 2023 at 10:13:20AM +0100, Abdellatif El Khlifi wrote:
Hi Simon, Tom,
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
...
Cc: Tom Rini trini@konsulko.com Cc: Simon Glass sjg@chromium.org
A gentle reminder about the v12 patchset.
Your feedback is more than welcome :)
Could you please provide a feedback about the v12 patchset ?
Most of the patches are generic.
I'm gonna address Ilias comment for patch #9 with your future comments.
Your review is very much appreciated.
I've been waiting for Ilias to be happy with the series and then I'll pick it up for -next.