From: achin.gupta@arm.com
To: Kun Qin <kuqin12@gmail.com>,
"devel@edk2.groups.io" <devel@edk2.groups.io>,
Nishant Sharma <Nishant.Sharma@arm.com>
Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>,
Sami Mujawar <Sami.Mujawar@arm.com>,
Thomas Abraham <thomas.abraham@arm.com>,
Sayanta Pattanayak <Sayanta.Pattanayak@arm.com>,
Aditya Angadi <Aditya.Angadi@arm.com>, nd <nd@arm.com>
Subject: Re: [edk2-devel] [edk2-platforms][PATCH V1 19/20] ArmPkg/MmCommunicationDxe: Use the FF-A transport for MM requests
Date: Wed, 12 Jul 2023 14:21:16 +0000 [thread overview]
Message-ID: <AS8PR08MB99791751265A230DA70FAA6BFF36A@AS8PR08MB9979.eurprd08.prod.outlook.com> (raw)
In-Reply-To: <a03a9829-e752-1f84-df99-b46e297a727e@gmail.com>
[-- Attachment #1: Type: text/plain, Size: 9101 bytes --]
Hi Kun,
IIUC, not much happens during the PEI phase on Arm platforms. Hence the patches focus on DXE in the Normal world. It would be difficult to provide an effort estimate as we do not see a use case and consequently this is not on the to-do list. Would you be able to provide more detail about the scenarios you have in mind?
cheers,
Achin
________________________________
From: Kun Qin <kuqin12@gmail.com>
Sent: 11 July 2023 20:22
To: devel@edk2.groups.io <devel@edk2.groups.io>; Nishant Sharma <Nishant.Sharma@arm.com>
Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>; Sami Mujawar <Sami.Mujawar@arm.com>; Thomas Abraham <thomas.abraham@arm.com>; Sayanta Pattanayak <Sayanta.Pattanayak@arm.com>; Achin Gupta <Achin.Gupta@arm.com>; Aditya Angadi <Aditya.Angadi@arm.com>
Subject: Re: [edk2-devel] [edk2-platforms][PATCH V1 19/20] ArmPkg/MmCommunicationDxe: Use the FF-A transport for MM requests
Hi Nishant,
Thank you for sending out the patch. Can you please evaluate how much
effort it would be
to support the same for MmCommunicatePei? I think it would provide
better coverage for
the FFA support if we can have that change.
Thanks,
Kun
On 7/11/2023 7:36 AM, Nishant Sharma wrote:
> From: Achin Gupta <achin.gupta@arm.com>
>
> This patch packages requests for accessing a Standalone MM driver
> through the MM communication protocol as FF-A direct messages.
> Corresponding changes in Standalone MM Core ensure that responses are
> packaged in the same way.
>
> Signed-off-by: Achin Gupta <achin.gupta@arm.com>
> Co-developed-by: Aditya Angadi <aditya.angadi@arm.com>
> Signed-off-by: Nishant Sharma <nishant.sharma@arm.com>
> ---
> ArmPkg/Include/IndustryStandard/ArmFfaSvc.h | 2 +
> ArmPkg/Drivers/MmCommunicationDxe/MmCommunication.c | 141 +++++++++++++-------
> 2 files changed, 97 insertions(+), 46 deletions(-)
>
> diff --git a/ArmPkg/Include/IndustryStandard/ArmFfaSvc.h b/ArmPkg/Include/IndustryStandard/ArmFfaSvc.h
> index 530af8bd3c2e..493997346143 100644
> --- a/ArmPkg/Include/IndustryStandard/ArmFfaSvc.h
> +++ b/ArmPkg/Include/IndustryStandard/ArmFfaSvc.h
> @@ -23,6 +23,7 @@
> #define ARM_SVC_ID_FFA_RXTX_UNMAP_AARCH32 0x84000067
> #define ARM_SVC_ID_FFA_PARTITION_INFO_GET_AARCH32 0x84000068
> #define ARM_SVC_ID_FFA_ID_GET_AARCH32 0x84000069
> +#define ARM_SVC_ID_FFA_RUN_AARCH32 0x8400006D
> #define ARM_SVC_ID_FFA_MSG_SEND_DIRECT_REQ_AARCH32 0x8400006F
> #define ARM_SVC_ID_FFA_MSG_SEND_DIRECT_RESP_AARCH32 0x84000070
> #define ARM_SVC_ID_FFA_MSG_SEND_DIRECT_REQ_AARCH64 0xC400006F
> @@ -31,6 +32,7 @@
> #define ARM_SVC_ID_FFA_SUCCESS_AARCH64 0xC4000061
> #define ARM_SVC_ID_FFA_MEM_PERM_SET_AARCH32 0x84000089
> #define ARM_SVC_ID_FFA_MEM_PERM_GET_AARCH32 0x84000088
> +#define ARM_SVC_ID_FFA_INTERRUPT_AARCH32 0x84000062
> #define ARM_SVC_ID_FFA_ERROR_AARCH32 0x84000060
> #define ARM_SVC_ID_FFA_ERROR_AARCH64 0xC4000060
> #define ARM_SVC_ID_FFA_MSG_WAIT_AARCH32 0x8400006B
> diff --git a/ArmPkg/Drivers/MmCommunicationDxe/MmCommunication.c b/ArmPkg/Drivers/MmCommunicationDxe/MmCommunication.c
> index 94a5d96c051d..a70318581bd2 100644
> --- a/ArmPkg/Drivers/MmCommunicationDxe/MmCommunication.c
> +++ b/ArmPkg/Drivers/MmCommunicationDxe/MmCommunication.c
> @@ -100,6 +100,7 @@ MmCommunication2Communicate (
> ARM_SMC_ARGS CommunicateSmcArgs;
> EFI_STATUS Status;
> UINTN BufferSize;
> + UINTN Ret;
>
> Status = EFI_ACCESS_DENIED;
> BufferSize = 0;
> @@ -160,60 +161,108 @@ MmCommunication2Communicate (
> return Status;
> }
>
> - // SMC Function ID
> - CommunicateSmcArgs.Arg0 = ARM_SMC_ID_MM_COMMUNICATE_AARCH64;
> -
> - // Cookie
> - CommunicateSmcArgs.Arg1 = 0;
> -
> // Copy Communication Payload
> CopyMem ((VOID *)mNsCommBuffMemRegion.VirtualBase, CommBufferVirtual, BufferSize);
>
> - // comm_buffer_address (64-bit physical address)
> - CommunicateSmcArgs.Arg2 = (UINTN)mNsCommBuffMemRegion.PhysicalBase;
> + // Use the FF-A interface if enabled.
> + if (FixedPcdGet32 (PcdFfaEnable) != 0) {
> + // FF-A Interface ID for direct message communication
> + CommunicateSmcArgs.Arg0 = ARM_SVC_ID_FFA_MSG_SEND_DIRECT_REQ_AARCH64;
>
> - // comm_size_address (not used, indicated by setting to zero)
> - CommunicateSmcArgs.Arg3 = 0;
> + // FF-A Destination EndPoint ID, not used as of now
> + CommunicateSmcArgs.Arg1 = mFfaPartId << 16 | mStmmPartInfo.PartId;
>
> + // Reserved for future use(MBZ)
> + CommunicateSmcArgs.Arg2 = 0x0;
> +
> + // comm_buffer_address (64-bit physical address)
> + CommunicateSmcArgs.Arg3 = (UINTN)mNsCommBuffMemRegion.PhysicalBase;
> +
> + // Cookie
> + CommunicateSmcArgs.Arg4 = 0x0;
> +
> + // Not Used
> + CommunicateSmcArgs.Arg5 = 0;
> +
> + // comm_size_address (not used, indicated by setting to zero)
> + CommunicateSmcArgs.Arg6 = 0;
> + } else {
> + // SMC Function ID
> + CommunicateSmcArgs.Arg0 = ARM_SMC_ID_MM_COMMUNICATE_AARCH64;
> +
> + // Cookie
> + CommunicateSmcArgs.Arg1 = 0;
> +
> + // comm_buffer_address (64-bit physical address)
> + CommunicateSmcArgs.Arg2 = (UINTN)mNsCommBuffMemRegion.PhysicalBase;
> +
> + // comm_size_address (not used, indicated by setting to zero)
> + CommunicateSmcArgs.Arg3 = 0;
> + }
> +
> +ffa_intr_loop:
> // Call the Standalone MM environment.
> ArmCallSmc (&CommunicateSmcArgs);
>
> - switch (CommunicateSmcArgs.Arg0) {
> - case ARM_SMC_MM_RET_SUCCESS:
> - ZeroMem (CommBufferVirtual, BufferSize);
> - // On successful return, the size of data being returned is inferred from
> - // MessageLength + Header.
> - CommunicateHeader = (EFI_MM_COMMUNICATE_HEADER *)mNsCommBuffMemRegion.VirtualBase;
> - BufferSize = CommunicateHeader->MessageLength +
> - sizeof (CommunicateHeader->HeaderGuid) +
> - sizeof (CommunicateHeader->MessageLength);
> -
> - CopyMem (
> - CommBufferVirtual,
> - (VOID *)mNsCommBuffMemRegion.VirtualBase,
> - BufferSize
> - );
> - Status = EFI_SUCCESS;
> - break;
> -
> - case ARM_SMC_MM_RET_INVALID_PARAMS:
> - Status = EFI_INVALID_PARAMETER;
> - break;
> -
> - case ARM_SMC_MM_RET_DENIED:
> - Status = EFI_ACCESS_DENIED;
> - break;
> -
> - case ARM_SMC_MM_RET_NO_MEMORY:
> - // Unexpected error since the CommSize was checked for zero length
> - // prior to issuing the SMC
> - Status = EFI_OUT_OF_RESOURCES;
> - ASSERT (0);
> - break;
> -
> - default:
> - Status = EFI_ACCESS_DENIED;
> - ASSERT (0);
> + Ret = CommunicateSmcArgs.Arg0;
> +
> + if (FixedPcdGet32 (PcdFfaEnable) != 0) {
> + if (Ret == ARM_SVC_ID_FFA_INTERRUPT_AARCH32) {
> + DEBUG ((DEBUG_INFO, "Resuming interrupted FF-A call \n"));
> +
> + // FF-A Interface ID for running the interrupted partition
> + CommunicateSmcArgs.Arg0 = ARM_SVC_ID_FFA_RUN_AARCH32;
> +
> + // FF-A Destination EndPoint and vCPU ID, TODO: We are assuming vCPU0 of the
> + // StMM SP since it is UP.
> + CommunicateSmcArgs.Arg1 = mStmmPartInfo.PartId << 16;
> +
> + // Loop if the call was interrupted
> + goto ffa_intr_loop;
> + }
> + }
> +
> + if (((FixedPcdGet32 (PcdFfaEnable) != 0) &&
> + (Ret == ARM_SVC_ID_FFA_MSG_SEND_DIRECT_RESP)) ||
> + (Ret == ARM_SMC_MM_RET_SUCCESS)) {
> + ZeroMem (CommBufferVirtual, BufferSize);
> + // On successful return, the size of data being returned is inferred from
> + // MessageLength + Header.
> + CommunicateHeader = (EFI_MM_COMMUNICATE_HEADER *)mNsCommBuffMemRegion.VirtualBase;
> + BufferSize = CommunicateHeader->MessageLength +
> + sizeof (CommunicateHeader->HeaderGuid) +
> + sizeof (CommunicateHeader->MessageLength);
> +
> + CopyMem (CommBufferVirtual, (VOID *)mNsCommBuffMemRegion.VirtualBase,
> + BufferSize);
> + Status = EFI_SUCCESS;
> + return Status;
> + }
> +
> + if (FixedPcdGet32 (PcdFfaEnable) != 0) {
> + Ret = CommunicateSmcArgs.Arg2;
> + }
> +
> + // Error Codes are same for FF-A and SMC interface
> + switch (Ret) {
> + case ARM_SMC_MM_RET_INVALID_PARAMS:
> + Status = EFI_INVALID_PARAMETER;
> + break;
> +
> + case ARM_SMC_MM_RET_DENIED:
> + Status = EFI_ACCESS_DENIED;
> + break;
> +
> + case ARM_SMC_MM_RET_NO_MEMORY:
> + // Unexpected error since the CommSize was checked for zero length
> + // prior to issuing the SMC
> + Status = EFI_OUT_OF_RESOURCES;
> + ASSERT (0);
> + break;
> +
> + default:
> + Status = EFI_ACCESS_DENIED;
> + ASSERT (0);
> }
>
> return Status;
[-- Attachment #2: Type: text/html, Size: 15933 bytes --]
next prev parent reply other threads:[~2023-07-12 14:21 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-11 14:36 [edk2-platforms][PATCH V1 00/20] Add the support for ARM Firmware First Framework Nishant Sharma
2023-07-11 14:36 ` [edk2-platforms][PATCH V1 01/20] ArmPkg: Change PcdFfaEnable flag datatype Nishant Sharma
2023-07-12 17:21 ` [edk2-devel] " Oliver Smith-Denny
2023-07-12 17:23 ` Chris Fernald
2023-07-11 14:36 ` [edk2-platforms][PATCH V1 02/20] StandaloneMmPkg: Allocate and initialise SP stack from internal memory Nishant Sharma
2023-07-12 17:47 ` [edk2-devel] " Chris Fernald
2023-07-11 14:36 ` [edk2-platforms][PATCH V1 03/20] StandaloneMmPkg: Include libfdt in the StMM Nishant Sharma
2023-07-11 14:36 ` [edk2-platforms][PATCH V1 04/20] ArmPkg: Add data structures to receive FF-A boot information Nishant Sharma
2023-07-12 17:27 ` [edk2-devel] " Oliver Smith-Denny
2023-07-11 14:36 ` [edk2-platforms][PATCH V1 05/20] ArmPkg/ArmFfaSvc: Add helper macros and fids Nishant Sharma
2023-07-11 14:36 ` [edk2-platforms][PATCH V1 06/20] ArmPkg: Add support for FFA_MEM_PERM_GET/SET ABIs Nishant Sharma
2023-07-12 17:43 ` [edk2-devel] " Oliver Smith-Denny
2023-07-11 14:36 ` [edk2-platforms][PATCH V1 07/20] StandaloneMmPkg: define new data structure to stage FF-A boot information Nishant Sharma
2023-07-11 14:36 ` [edk2-platforms][PATCH V1 08/20] StandaloneMmPkg: Add backwards compatible support to detect FF-A v1.1 Nishant Sharma
2023-07-12 20:31 ` [edk2-devel] " Oliver Smith-Denny
2023-07-11 14:36 ` [edk2-platforms][PATCH V1 09/20] StandaloneMmPkg: parse SP manifest and populate new boot information Nishant Sharma
2023-07-13 15:24 ` [edk2-devel] " Girish Mahadevan
2023-07-13 16:48 ` Chris Fernald
2023-07-13 20:49 ` Achin Gupta
2023-07-11 14:36 ` [edk2-platforms][PATCH V1 10/20] StandaloneMmPkg: Populate Hoblist for SP init from StMM " Nishant Sharma
2023-07-12 20:52 ` [edk2-devel] " Oliver Smith-Denny
2023-07-11 14:36 ` [edk2-platforms][PATCH V1 11/20] StandaloneMmPkg: Skip zero sized sections while tweaking page permissions Nishant Sharma
2023-07-11 14:36 ` [edk2-platforms][PATCH V1 12/20] StandaloneMmPkg: Add global check for FF-A abis Nishant Sharma
2023-07-11 14:36 ` [edk2-platforms][PATCH V1 13/20] ArmPkg: Bump the StMM SP FF-A minor version to 1 Nishant Sharma
2023-07-11 14:36 ` [edk2-platforms][PATCH V1 14/20] ArmPkg/MmCommunicationDxe: Introduce FF-A version check Nishant Sharma
2023-07-13 16:56 ` [edk2-devel] " Chris Fernald
2023-07-11 14:36 ` [edk2-platforms][PATCH V1 15/20] ArmPkg/MmCommunicationDxe: Add support for obtaining FF-A partition ID Nishant Sharma
2023-07-11 14:36 ` [edk2-platforms][PATCH V1 16/20] ArmPkg/MmCommunicationDxe: Register FF-A RX/TX buffers Nishant Sharma
2023-07-11 14:36 ` [edk2-platforms][PATCH V1 17/20] ArmPkg/MmCommunicationDxe: Unmap FF-A RX/TX buffers during ExitBootServices Nishant Sharma
2023-07-12 20:59 ` [edk2-devel] " Oliver Smith-Denny
2023-07-11 14:36 ` [edk2-platforms][PATCH V1 18/20] ArmPkg/MmCommunicationDxe: Discover the StMM SP Nishant Sharma
2023-07-12 21:10 ` [edk2-devel] " Oliver Smith-Denny
2023-07-12 21:48 ` Girish Mahadevan
2023-07-13 17:16 ` Chris Fernald
2023-07-11 14:36 ` [edk2-platforms][PATCH V1 19/20] ArmPkg/MmCommunicationDxe: Use the FF-A transport for MM requests Nishant Sharma
2023-07-11 19:22 ` [edk2-devel] " Kun Qin
2023-07-12 14:21 ` achin.gupta [this message]
2023-07-12 17:13 ` Kun Qin
2023-07-12 21:49 ` Girish Mahadevan
2023-07-11 14:36 ` [edk2-platforms][PATCH V1 20/20] StandaloneMmPkg: Add support for MM requests as FF-A direct messages Nishant Sharma
2023-07-12 21:13 ` [edk2-devel] [edk2-platforms][PATCH V1 00/20] Add the support for ARM Firmware First Framework Oliver Smith-Denny
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=AS8PR08MB99791751265A230DA70FAA6BFF36A@AS8PR08MB9979.eurprd08.prod.outlook.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox