From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 03199C433FE for ; Fri, 11 Nov 2022 14:42:49 +0000 (UTC) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id A757E85043; Fri, 11 Nov 2022 15:42:47 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=arm.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Received: by phobos.denx.de (Postfix, from userid 109) id 5F8B5850E1; Fri, 11 Nov 2022 15:42:46 +0100 (CET) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by phobos.denx.de (Postfix) with ESMTP id CA75181E60 for ; Fri, 11 Nov 2022 15:42:42 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=abdellatif.elkhlifi@arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 506531FB; Fri, 11 Nov 2022 06:42:48 -0800 (PST) Received: from e121910.cambridge.arm.com (e121910.cambridge.arm.com [10.1.30.137]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id C2C923F73D; Fri, 11 Nov 2022 06:42:40 -0800 (PST) Date: Fri, 11 Nov 2022 14:42:38 +0000 From: Abdellatif El Khlifi To: ilias.apalodimas@linaro.org, jens.wiklander@linaro.org, abdellatif.elkhlifi@arm.com Cc: u-boot@lists.denx.de, nd@arm.com Subject: Re: [PATCH v7 00/10] introduce Arm FF-A support Message-ID: <20221111144238.GA11325@e121910.cambridge.arm.com> References: <20221013103857.614-1-abdellatif.elkhlifi@arm.com> <20221107192055.21669-1-abdellatif.elkhlifi@arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20221107192055.21669-1-abdellatif.elkhlifi@arm.com> User-Agent: Mutt/1.9.4 (2018-02-28) X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.6 at phobos.denx.de X-Virus-Status: Clean On Mon, Nov 07, 2022 at 07:20:45PM +0000, Abdellatif El Khlifi wrote: > Adding support for Arm FF-A v1.0 (Arm Firmware Framework for Armv8-A) [7]. > > 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. > > The FF-A transport is implemented as a data bus and a core driver is provided. > > 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 FF-A bus is discoverable on demand at runtime > - 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 > > For more details about the FF-A core driver please refer to [8]. > > Please find at [9] 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: > =========================== > > v7: > > * 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 Hi Ilias, Jens, After addressing your current comments for v7 patchset, which patches are you happy with so I could add the Reviewed-by: to the commits logs ? Cheers > > 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 > > [1]: https://lore.kernel.org/all/20220329151659.16894-1-abdellatif.elkhlifi@arm.com/ > [2]: https://lore.kernel.org/all/20220415122803.16666-1-abdellatif.elkhlifi@arm.com/ > [3]: https://lore.kernel.org/all/20220801172053.20163-1-abdellatif.elkhlifi@arm.com/ > [4]: https://lore.kernel.org/all/20220926101723.9965-1-abdellatif.elkhlifi@arm.com/ > [5]: https://lore.kernel.org/all/20220926140827.15125-1-abdellatif.elkhlifi@arm.com/ > [6]: https://lore.kernel.org/all/20221013103857.614-1-abdellatif.elkhlifi@arm.com/ > [7]: https://developer.arm.com/documentation/den0077/latest/ > [8]: doc/arch/arm64.ffa.rst > [9]: 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 > [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 > ... > Booting /MemoryMapped(0x0,0x88200000,0xf00000) > EFI stub: Booting Linux Kernel... > EFI stub: Using DTB from configuration table > EFI stub: Exiting boot services... > [FFA] Freeing RX/TX buffers > Booting Linux on physical CPU 0x0000000000 [0x410fd040] > Linux version 5.19.9-yocto-standard (oe-user@oe-host) > (aarch64-poky-linux-musl-gcc (GCC) 12.2.0, GNU ld > (GNU Binutils) 2.39.0.20220819) #1 SMP PREEMPT Wed Sep 21 20:11:18 UTC 2022 > ``` > > Cc: Tom Rini > Cc: Simon Glass > Cc: Ilias Apalodimas > Cc: Jens Wiklander > Cc: Achin Gupta > Cc: Drew Reed > Cc: Vishnu Banavath > Cc: Xueliang Zhong > > Abdellatif El Khlifi (10): > arm64: smccc: add support for SMCCCv1.2 x0-x17 registers > lib: uuid: introduce uuid_str_to_le_bin function > arm_ffa: introduce Arm FF-A low-level driver > arm_ffa: efi: unmap RX/TX buffers > 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: efi: introduce FF-A MM communication > arm_ffa: efi: corstone1000: enable MM communication > > MAINTAINERS | 11 + > arch/arm/cpu/armv8/smccc-call.S | 53 + > arch/arm/lib/asm-offsets.c | 14 + > cmd/Kconfig | 10 + > cmd/Makefile | 2 + > cmd/armffa.c | 239 +++ > configs/corstone1000_defconfig | 4 + > configs/sandbox64_defconfig | 2 + > configs/sandbox_defconfig | 2 + > doc/arch/arm64.ffa.rst | 218 +++ > doc/arch/index.rst | 1 + > doc/arch/sandbox.rst | 1 + > drivers/Kconfig | 2 + > drivers/Makefile | 1 + > drivers/firmware/arm-ffa/Kconfig | 36 + > drivers/firmware/arm-ffa/Makefile | 7 + > drivers/firmware/arm-ffa/arm-ffa-uclass.c | 16 + > drivers/firmware/arm-ffa/arm_ffa_prv.h | 210 +++ > drivers/firmware/arm-ffa/core.c | 1324 +++++++++++++++++ > drivers/firmware/arm-ffa/sandbox.c | 659 ++++++++ > .../firmware/arm-ffa/sandbox_arm_ffa_prv.h | 144 ++ > include/arm_ffa.h | 93 ++ > include/configs/corstone1000.h | 9 + > include/dm/uclass-id.h | 4 + > include/linux/arm-smccc.h | 43 + > include/mm_communication.h | 5 + > include/sandbox_arm_ffa.h | 91 ++ > include/uuid.h | 8 + > lib/efi_loader/Kconfig | 14 +- > lib/efi_loader/efi_boottime.c | 13 + > lib/efi_loader/efi_variable_tee.c | 269 +++- > lib/uuid.c | 46 + > test/cmd/Makefile | 2 + > test/cmd/armffa.c | 40 + > test/dm/Makefile | 2 + > test/dm/ffa.c | 394 +++++ > 36 files changed, 3983 insertions(+), 6 deletions(-) > create mode 100644 cmd/armffa.c > create mode 100644 doc/arch/arm64.ffa.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_prv.h > create mode 100644 drivers/firmware/arm-ffa/core.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 > > -- > 2.17.1 >