From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from EUR05-VI1-obe.outbound.protection.outlook.com (EUR05-VI1-obe.outbound.protection.outlook.com [40.107.21.82]) by mx.groups.io with SMTP id smtpd.web10.8522.1689171697629643754 for ; Wed, 12 Jul 2023 07:21:38 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@armh.onmicrosoft.com header.s=selector2-armh-onmicrosoft-com header.b=Touc3cip; spf=pass (domain: arm.com, ip: 40.107.21.82, mailfrom: achin.gupta@arm.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=HxkGGqOcyD9GJS60bBJVj6B7rV7umWXFWwAZQOwsIuk=; b=Touc3cipukStWltnHnZgkhdN672GfbX8P2QhGZ1r/bdna3YHJclEfTgGM4E6IXCcFHEx9MilPqi6jwZ376Oznh0scjgjDOBcVRLelmkMs0dFbZ5gptOkpJ8xXcYTOv+xfDhMl5gI+2VlRfpZiwelXJNvO0H4pN+kHVlqReqSIPc= Received: from AS8PR04CA0191.eurprd04.prod.outlook.com (2603:10a6:20b:2f3::16) by GV2PR08MB9349.eurprd08.prod.outlook.com (2603:10a6:150:da::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6588.20; Wed, 12 Jul 2023 14:21:30 +0000 Received: from AM7EUR03FT065.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:2f3:cafe::2b) by AS8PR04CA0191.outlook.office365.com (2603:10a6:20b:2f3::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6588.20 via Frontend Transport; Wed, 12 Jul 2023 14:21:30 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; pr=C Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by AM7EUR03FT065.mail.protection.outlook.com (100.127.140.250) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6588.20 via Frontend Transport; Wed, 12 Jul 2023 14:21:30 +0000 Received: ("Tessian outbound 95df046a2e2c:v145"); Wed, 12 Jul 2023 14:21:30 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: f6242f76dda5f151 X-CR-MTA-TID: 64aa7808 Received: from 8feab1d00a52.3 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 2932537B-6FA7-4207-A22A-5B3422B6E177.1; Wed, 12 Jul 2023 14:21:19 +0000 Received: from EUR02-VI1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 8feab1d00a52.3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Wed, 12 Jul 2023 14:21:19 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=SGktIKYDXbHbzKk7l1x7Med2SnU5IXEYDZQDHewsTD+bzYOF/UbPiEM//OUT0S/QmWZNFwC/96cEeZ6Drm+I1+WDyUD33+BW2wyRHS0vdEF2WOqQ9VDmCcTlrySzOXwe75QifW99GTGB7LELa/4f8IhgkaDhBINrYYGAshH7CuhWZ/ZUKLkz4anKLNE2uWdj2cr8NPlG9XH6yuMKdn57f9ykPMJ/NWSWoH6cvh+0e4HG7i/kozrcr4k3M6Bs1/QxVMsaNguCfhrvNeenzW4quYXlGNv7Qn+O2kc6h0iZqjkCAQMUqwI366ruECOGI2xA+zsrVVtkpjwFg/7WygIPBA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=HxkGGqOcyD9GJS60bBJVj6B7rV7umWXFWwAZQOwsIuk=; b=HIpJOOxWXdw1ue7bqsEat43CsU6ipN8SkSxXb/YY3jRpfnu9o1FCxko0tCoWUiWO8So6IRnqT6119F2Uj053fh4IyUtH1mNdYVg1lHHi8Twxof1jR3ETV7oCmw6iNi3GLoDcVWUcCIqySiY3hOTNJT5bdWxSg7ET1WkDFzbKrCkkM56reQ94MJMGlJjnnvPijZhIbqhxNWJSr/caMCTq44N72gQg54qz2Tl49xs6z26KyTedQWpivS0TSQg8+zp424k2hZmQOauxvpSHfigPDbyCPFUmHEQ3bWvfmTFrl+VLLPCihtqkMcaO4VAmQckpdL7nyzy/VY9a6BrkvfZlnQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=HxkGGqOcyD9GJS60bBJVj6B7rV7umWXFWwAZQOwsIuk=; b=Touc3cipukStWltnHnZgkhdN672GfbX8P2QhGZ1r/bdna3YHJclEfTgGM4E6IXCcFHEx9MilPqi6jwZ376Oznh0scjgjDOBcVRLelmkMs0dFbZ5gptOkpJ8xXcYTOv+xfDhMl5gI+2VlRfpZiwelXJNvO0H4pN+kHVlqReqSIPc= Received: from AS8PR08MB9979.eurprd08.prod.outlook.com (2603:10a6:20b:633::16) by PR3PR08MB5708.eurprd08.prod.outlook.com (2603:10a6:102:84::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6565.32; Wed, 12 Jul 2023 14:21:17 +0000 Received: from AS8PR08MB9979.eurprd08.prod.outlook.com ([fe80::9457:7a20:7faa:5322]) by AS8PR08MB9979.eurprd08.prod.outlook.com ([fe80::9457:7a20:7faa:5322%7]) with mapi id 15.20.6588.017; Wed, 12 Jul 2023 14:21:16 +0000 From: achin.gupta@arm.com To: Kun Qin , "devel@edk2.groups.io" , Nishant Sharma CC: Ard Biesheuvel , Sami Mujawar , Thomas Abraham , Sayanta Pattanayak , Aditya Angadi , nd Subject: Re: [edk2-devel] [edk2-platforms][PATCH V1 19/20] ArmPkg/MmCommunicationDxe: Use the FF-A transport for MM requests Thread-Topic: [edk2-devel] [edk2-platforms][PATCH V1 19/20] ArmPkg/MmCommunicationDxe: Use the FF-A transport for MM requests Thread-Index: AQHZtAVActf5Tfiim0CNIdVv8N9kYq+08euAgAE9EbI= Date: Wed, 12 Jul 2023 14:21:16 +0000 Message-ID: References: <20230711143658.781597-1-nishant.sharma@arm.com> <20230711143658.781597-20-nishant.sharma@arm.com> In-Reply-To: Accept-Language: en-GB, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; x-ms-traffictypediagnostic: AS8PR08MB9979:EE_|PR3PR08MB5708:EE_|AM7EUR03FT065:EE_|GV2PR08MB9349:EE_ X-MS-Office365-Filtering-Correlation-Id: ecc7401e-d691-4a36-c880-08db82e34967 x-checkrecipientrouted: true nodisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: /KVOSgf1H1lcaVnC6t5rXkHP70B1MMxkwzrw7GCBAuaHveKwo1nnrz1WKErgiKEoMl6Wrr3aykBDl8qKSMgfu/Rrrj+v7M3qyhFqcVL+ZY5Fz5tB1TBuXueInKKcewUsqyGPPrDBli6Eqda/jnIdFs9skM88pMk5YWpmjq0e42t/b64PqgmgeACRHh1BcR/R62g6tAkmlmhBppxmNeFbyVGv2/znmfWQ72W543sAY0+daCMiyhwi3hQMQAbgr7DjzwwSOrqKJIGkAodJALExQhiYz91R+MokmxSh3KJJ2kRd3viaNqCaADqrXkJw90TIDk6coCNJYd3QbaQ41yjO2jx/L2ys5HmbjqAzFhbh4lNuenRFoWsKG1MjUyHAawFlhU/UdWBHPSJaPl+d6s9vXyqvjmn2/Q9Svgbu1N5Gon/2wG7l+5yDvqUxGA/fpqJSjhMHXKARYM9uqN6WNVvFNr6xzCpFAb+3QRy0Kkd1DjssJen6nszW8LAemJq4xEpFh+5irEQIpLYjrJjyw69CSMmxS0miiTeHvoCZghXGDDIGdrCxE/cziDW5LuG18KryrJ24fK4BrCdpK4OiJXBZturKen6eRo+H0TRraCcsnVlyzuvoe4esH1jn1QJr5n/u X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS8PR08MB9979.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(6029001)(4636009)(346002)(39860400002)(396003)(376002)(136003)(366004)(451199021)(83380400001)(41300700001)(66446008)(4326008)(64756008)(8936002)(6636002)(8676002)(316002)(66476007)(55016003)(66556008)(6506007)(53546011)(38100700002)(33656002)(5660300002)(52536014)(122000001)(26005)(478600001)(71200400001)(38070700005)(7696005)(9686003)(86362001)(76116006)(66946007)(110136005)(19627235002)(91956017)(186003)(2906002)(54906003)(19627405001);DIR:OUT;SFP:1101; MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR08MB5708 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Return-Path: Achin.Gupta@arm.com X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM7EUR03FT065.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 2d34e0c0-b358-4493-2575-08db82e34168 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 3R5Knv3EOT7riGggpCOPWvkf5Rl6cJzKccXnRI2nNK+KzBUyO5vFMFrYOKgG8B8gcSrr/vi5/uDImMXBVF0AxQJkPKKOdwbXtR/laqOpzQfI7fgd9TNQBQFVmRUTTTFR0SGUSJQWtPEqLhLUyszuW7BigFU1Kru7/pjgOVl/8wjOolzYo4iTF961MLshjPUqTrLrost82danKwtH6knzHg4tbbydeGEZGiTMgZY4obHFmwu1r84KOWsf0gqSh3Qk65sxFoLSUoIeZrkAS5ESS9kpT/WJuzzn5iBu/MyCWpKs8RTxGAN9HWWi8l6mXMcAPCKjvAcX0WO/Fk1ERYWKWhklcAM2fhUeyrhLniEvTvRv6LIYDaVTx+2NfOi6NHTn78rNMtO54E525FrqXFhTsQmXGZ+Tfqp0P4RbymI9vS5oO6SYnl2UQMTxqe0zNgYA55W0DnAUT032AZY/7D8wTVAIGhh1WoL7yg20fN4mkX5puRUrBC13yx8UjyIJZ8zR7eAtYaz0xn8jMZJ2ivrfLp59tpzPwAPK9cNPTLXj1G30mxQkCMYneoNA3j1h3x6kgfR7pGeG+cNuLyzHm3VaZXVfBW8I5GbJCU0s/EWrzkDYK1XxNXhZNbfsvkVGc7vX/9Wp3STwwwxOriK550aS9RBnYvlIdSr5Z9/sB3csviV6IXUATYhXqq6/8zOprv0xW2HFAd8BULWYnULzgys14ZWedwIIhT3tt7iiz4Yt5S35ATx+VTx/i9TdXBw60gFZ X-Forefront-Antispam-Report: CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(13230028)(6029001)(4636009)(136003)(396003)(346002)(39860400002)(376002)(451199021)(46966006)(40470700004)(36840700001)(41300700001)(2906002)(40480700001)(186003)(55016003)(53546011)(9686003)(40460700003)(6506007)(8936002)(26005)(8676002)(7696005)(316002)(33656002)(30864003)(82310400005)(356005)(82740400003)(19627235002)(110136005)(54906003)(81166007)(70586007)(70206006)(4326008)(6636002)(478600001)(19627405001)(36860700001)(5660300002)(336012)(47076005)(83380400001)(86362001)(52536014);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jul 2023 14:21:30.3001 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ecc7401e-d691-4a36-c880-08db82e34967 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: AM7EUR03FT065.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR08MB9349 Content-Language: en-GB Content-Type: multipart/alternative; boundary="_000_AS8PR08MB99791751265A230DA70FAA6BFF36AAS8PR08MB9979eurp_" --_000_AS8PR08MB99791751265A230DA70FAA6BFF36AAS8PR08MB9979eurp_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi Kun, IIUC, not much happens during the PEI phase on Arm platforms. Hence the pat= ches 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 scenari= os you have in mind? cheers, Achin ________________________________ From: Kun Qin Sent: 11 July 2023 20:22 To: devel@edk2.groups.io ; Nishant Sharma Cc: Ard Biesheuvel ; Sami Mujawar ; Thomas Abraham ; Sayanta Pattanayak ; Achin Gupta ; Aditya Angadi <= Aditya.Angadi@arm.com> Subject: Re: [edk2-devel] [edk2-platforms][PATCH V1 19/20] ArmPkg/MmCommuni= cationDxe: 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 > > 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 > Co-developed-by: Aditya Angadi > Signed-off-by: Nishant Sharma > --- > 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 =3D EFI_ACCESS_DENIED; > BufferSize =3D 0; > @@ -160,60 +161,108 @@ MmCommunication2Communicate ( > return Status; > } > > - // SMC Function ID > - CommunicateSmcArgs.Arg0 =3D ARM_SMC_ID_MM_COMMUNICATE_AARCH64; > - > - // Cookie > - CommunicateSmcArgs.Arg1 =3D 0; > - > // Copy Communication Payload > CopyMem ((VOID *)mNsCommBuffMemRegion.VirtualBase, CommBufferVirtual,= BufferSize); > > - // comm_buffer_address (64-bit physical address) > - CommunicateSmcArgs.Arg2 =3D (UINTN)mNsCommBuffMemRegion.PhysicalBase; > + // Use the FF-A interface if enabled. > + if (FixedPcdGet32 (PcdFfaEnable) !=3D 0) { > + // FF-A Interface ID for direct message communication > + CommunicateSmcArgs.Arg0 =3D ARM_SVC_ID_FFA_MSG_SEND_DIRECT_REQ_AARCH= 64; > > - // comm_size_address (not used, indicated by setting to zero) > - CommunicateSmcArgs.Arg3 =3D 0; > + // FF-A Destination EndPoint ID, not used as of now > + CommunicateSmcArgs.Arg1 =3D mFfaPartId << 16 | mStmmPartInfo.PartId; > > + // Reserved for future use(MBZ) > + CommunicateSmcArgs.Arg2 =3D 0x0; > + > + // comm_buffer_address (64-bit physical address) > + CommunicateSmcArgs.Arg3 =3D (UINTN)mNsCommBuffMemRegion.PhysicalBase= ; > + > + // Cookie > + CommunicateSmcArgs.Arg4 =3D 0x0; > + > + // Not Used > + CommunicateSmcArgs.Arg5 =3D 0; > + > + // comm_size_address (not used, indicated by setting to zero) > + CommunicateSmcArgs.Arg6 =3D 0; > + } else { > + // SMC Function ID > + CommunicateSmcArgs.Arg0 =3D ARM_SMC_ID_MM_COMMUNICATE_AARCH64; > + > + // Cookie > + CommunicateSmcArgs.Arg1 =3D 0; > + > + // comm_buffer_address (64-bit physical address) > + CommunicateSmcArgs.Arg2 =3D (UINTN)mNsCommBuffMemRegion.PhysicalBase= ; > + > + // comm_size_address (not used, indicated by setting to zero) > + CommunicateSmcArgs.Arg3 =3D 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 inferr= ed from > - // MessageLength + Header. > - CommunicateHeader =3D (EFI_MM_COMMUNICATE_HEADER *)mNsCommBuffMemR= egion.VirtualBase; > - BufferSize =3D CommunicateHeader->MessageLength + > - sizeof (CommunicateHeader->HeaderGuid) + > - sizeof (CommunicateHeader->MessageLength); > - > - CopyMem ( > - CommBufferVirtual, > - (VOID *)mNsCommBuffMemRegion.VirtualBase, > - BufferSize > - ); > - Status =3D EFI_SUCCESS; > - break; > - > - case ARM_SMC_MM_RET_INVALID_PARAMS: > - Status =3D EFI_INVALID_PARAMETER; > - break; > - > - case ARM_SMC_MM_RET_DENIED: > - Status =3D 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 =3D EFI_OUT_OF_RESOURCES; > - ASSERT (0); > - break; > - > - default: > - Status =3D EFI_ACCESS_DENIED; > - ASSERT (0); > + Ret =3D CommunicateSmcArgs.Arg0; > + > + if (FixedPcdGet32 (PcdFfaEnable) !=3D 0) { > + if (Ret =3D=3D 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 =3D ARM_SVC_ID_FFA_RUN_AARCH32; > + > + // FF-A Destination EndPoint and vCPU ID, TODO: We are assuming vC= PU0 of the > + // StMM SP since it is UP. > + CommunicateSmcArgs.Arg1 =3D mStmmPartInfo.PartId << 16; > + > + // Loop if the call was interrupted > + goto ffa_intr_loop; > + } > + } > + > + if (((FixedPcdGet32 (PcdFfaEnable) !=3D 0) && > + (Ret =3D=3D ARM_SVC_ID_FFA_MSG_SEND_DIRECT_RESP)) || > + (Ret =3D=3D ARM_SMC_MM_RET_SUCCESS)) { > + ZeroMem (CommBufferVirtual, BufferSize); > + // On successful return, the size of data being returned is inferred= from > + // MessageLength + Header. > + CommunicateHeader =3D (EFI_MM_COMMUNICATE_HEADER *)mNsCommBuffMemReg= ion.VirtualBase; > + BufferSize =3D CommunicateHeader->MessageLength + > + sizeof (CommunicateHeader->HeaderGuid) + > + sizeof (CommunicateHeader->MessageLength); > + > + CopyMem (CommBufferVirtual, (VOID *)mNsCommBuffMemRegion.VirtualBase= , > + BufferSize); > + Status =3D EFI_SUCCESS; > + return Status; > + } > + > + if (FixedPcdGet32 (PcdFfaEnable) !=3D 0) { > + Ret =3D CommunicateSmcArgs.Arg2; > + } > + > + // Error Codes are same for FF-A and SMC interface > + switch (Ret) { > + case ARM_SMC_MM_RET_INVALID_PARAMS: > + Status =3D EFI_INVALID_PARAMETER; > + break; > + > + case ARM_SMC_MM_RET_DENIED: > + Status =3D 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 =3D EFI_OUT_OF_RESOURCES; > + ASSERT (0); > + break; > + > + default: > + Status =3D EFI_ACCESS_DENIED; > + ASSERT (0); > } > > return Status; --_000_AS8PR08MB99791751265A230DA70FAA6BFF36AAS8PR08MB9979eurp_ Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable
Hi Kun,

IIUC, not much happens during the PEI phase on Arm platforms. Hence the pat= ches 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@g= mail.com>
Sent: 11 July 2023 20:22
To: devel@edk2.groups.io <devel@edk2.groups.io>; Nishant Sharm= a <Nishant.Sharma@arm.com>
Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>; Sami Mujawar &= lt;Sami.Mujawar@arm.com>; Thomas Abraham <thomas.abraham@arm.com>;= Sayanta Pattanayak <Sayanta.Pattanayak@arm.com>; Achin Gupta <Ach= in.Gupta@arm.com>; Aditya Angadi <Aditya.Angadi@arm.com>
Subject: Re: [edk2-devel] [edk2-platforms][PATCH V1 19/20] ArmPkg/Mm= CommunicationDxe: 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<= br> > 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  &nb= sp;      |   2 +
>   ArmPkg/Drivers/MmCommunicationDxe/MmCommunication.c | 141 = +++++++++++++-------
>   2 files changed, 97 insertions(+), 46 deletions(-)
>
> diff --git a/ArmPkg/Include/IndustryStandard/ArmFfaSvc.h b/ArmPkg/Incl= ude/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 &nb= sp;  0x84000068
>   #define ARM_SVC_ID_FFA_ID_GET_AARCH32   &nb= sp;            0x840= 00069
> +#define ARM_SVC_ID_FFA_RUN_AARCH32      = ;             0= x8400006D
>   #define ARM_SVC_ID_FFA_MSG_SEND_DIRECT_REQ_AARCH32 &n= bsp; 0x8400006F
>   #define ARM_SVC_ID_FFA_MSG_SEND_DIRECT_RESP_AARCH32  = 0x84000070
>   #define ARM_SVC_ID_FFA_MSG_SEND_DIRECT_REQ_AARCH64 &n= bsp; 0xC400006F
> @@ -31,6 +32,7 @@
>   #define ARM_SVC_ID_FFA_SUCCESS_AARCH64   &n= bsp;           0xC4000061=
>   #define ARM_SVC_ID_FFA_MEM_PERM_SET_AARCH32  &nb= sp;       0x84000089
>   #define ARM_SVC_ID_FFA_MEM_PERM_GET_AARCH32  &nb= sp;       0x84000088
> +#define ARM_SVC_ID_FFA_INTERRUPT_AARCH32     = ;        0x84000062
>   #define ARM_SVC_ID_FFA_ERROR_AARCH32   &nbs= p;             = 0x84000060
>   #define ARM_SVC_ID_FFA_ERROR_AARCH64   &nbs= p;             = 0xC4000060
>   #define ARM_SVC_ID_FFA_MSG_WAIT_AARCH32   &= nbsp;          0x8400006B
> diff --git a/ArmPkg/Drivers/MmCommunicationDxe/MmCommunication.c b/Arm= Pkg/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     &nbs= p;         CommunicateSmcArgs;
>     EFI_STATUS      =            Status;
>     UINTN       = ;            &n= bsp;  BufferSize;
> +  UINTN         &nb= sp;            Ret;<= br> >  
>     Status     =3D EFI_ACCESS_= DENIED;
>     BufferSize =3D 0;
> @@ -160,60 +161,108 @@ MmCommunication2Communicate (
>       return Status;
>     }
>  
> -  // SMC Function ID
> -  CommunicateSmcArgs.Arg0 =3D ARM_SMC_ID_MM_COMMUNICATE_AARCH64;=
> -
> -  // Cookie
> -  CommunicateSmcArgs.Arg1 =3D 0;
> -
>     // Copy Communication Payload
>     CopyMem ((VOID *)mNsCommBuffMemRegion.VirtualB= ase, CommBufferVirtual, BufferSize);
>  
> -  // comm_buffer_address (64-bit physical address)
> -  CommunicateSmcArgs.Arg2 =3D (UINTN)mNsCommBuffMemRegion.Physic= alBase;
> +  // Use the FF-A interface if enabled.
> +  if (FixedPcdGet32 (PcdFfaEnable) !=3D 0) {
> +    // FF-A Interface ID for direct message communicat= ion
> +    CommunicateSmcArgs.Arg0 =3D ARM_SVC_ID_FFA_MSG_SEN= D_DIRECT_REQ_AARCH64;
>  
> -  // comm_size_address (not used, indicated by setting to zero)<= br> > -  CommunicateSmcArgs.Arg3 =3D 0;
> +    // FF-A Destination EndPoint ID, not used as of no= w
> +    CommunicateSmcArgs.Arg1 =3D mFfaPartId << 16= | mStmmPartInfo.PartId;
>  
> +    // Reserved for future use(MBZ)
> +    CommunicateSmcArgs.Arg2 =3D 0x0;
> +
> +    // comm_buffer_address (64-bit physical address) > +    CommunicateSmcArgs.Arg3 =3D (UINTN)mNsCommBuffMemR= egion.PhysicalBase;
> +
> +    // Cookie
> +    CommunicateSmcArgs.Arg4 =3D 0x0;
> +
> +    // Not Used
> +    CommunicateSmcArgs.Arg5 =3D 0;
> +
> +    // comm_size_address (not used, indicated by setti= ng to zero)
> +    CommunicateSmcArgs.Arg6 =3D 0;
> +  } else {
> +    // SMC Function ID
> +    CommunicateSmcArgs.Arg0 =3D ARM_SMC_ID_MM_COMMUNIC= ATE_AARCH64;
> +
> +    // Cookie
> +    CommunicateSmcArgs.Arg1 =3D 0;
> +
> +    // comm_buffer_address (64-bit physical address) > +    CommunicateSmcArgs.Arg2 =3D (UINTN)mNsCommBuffMemR= egion.PhysicalBase;
> +
> +    // comm_size_address (not used, indicated by setti= ng to zero)
> +    CommunicateSmcArgs.Arg3 =3D 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 d= ata being returned is inferred from
> -      // MessageLength + Header.
> -      CommunicateHeader =3D (EFI_MM_COMMUNIC= ATE_HEADER *)mNsCommBuffMemRegion.VirtualBase;
> -      BufferSize    &nbs= p;   =3D CommunicateHeader->MessageLength +
> -           &nb= sp;            =   sizeof (CommunicateHeader->HeaderGuid) +
> -           &nb= sp;            =   sizeof (CommunicateHeader->MessageLength);
> -
> -      CopyMem (
> -        CommBufferVirtual,
> -        (VOID *)mNsCommBuffMemRegi= on.VirtualBase,
> -        BufferSize
> -        );
> -      Status =3D EFI_SUCCESS;
> -      break;
> -
> -    case ARM_SMC_MM_RET_INVALID_PARAMS:
> -      Status =3D EFI_INVALID_PARAMETER;
> -      break;
> -
> -    case ARM_SMC_MM_RET_DENIED:
> -      Status =3D 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 =3D EFI_OUT_OF_RESOURCES;
> -      ASSERT (0);
> -      break;
> -
> -    default:
> -      Status =3D EFI_ACCESS_DENIED;
> -      ASSERT (0);
> +  Ret =3D CommunicateSmcArgs.Arg0;
> +
> +  if (FixedPcdGet32 (PcdFfaEnable) !=3D 0) {
> +    if (Ret =3D=3D ARM_SVC_ID_FFA_INTERRUPT_AARCH32) {=
> +      DEBUG ((DEBUG_INFO, "Resuming int= errupted FF-A call \n"));
> +
> +      // FF-A Interface ID for running the i= nterrupted partition
> +      CommunicateSmcArgs.Arg0 =3D 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 =3D mStmmPartI= nfo.PartId << 16;
> +
> +      // Loop if the call was interrupted > +      goto ffa_intr_loop;
> +    }
> +  }
> +
> +  if (((FixedPcdGet32 (PcdFfaEnable) !=3D 0) &&
> +      (Ret =3D=3D ARM_SVC_ID_FFA_MSG_SEND_DI= RECT_RESP)) ||
> +      (Ret =3D=3D ARM_SMC_MM_RET_SUCCESS)) {=
> +    ZeroMem (CommBufferVirtual, BufferSize);
> +    // On successful return, the size of data being re= turned is inferred from
> +    // MessageLength + Header.
> +    CommunicateHeader =3D (EFI_MM_COMMUNICATE_HEADER *= )mNsCommBuffMemRegion.VirtualBase;
> +    BufferSize =3D CommunicateHeader->MessageLength= +
> +           &nb= sp;     sizeof (CommunicateHeader->HeaderGuid) +
> +           &nb= sp;     sizeof (CommunicateHeader->MessageLength); > +
> +    CopyMem (CommBufferVirtual, (VOID *)mNsCommBuffMem= Region.VirtualBase,
> +           &nb= sp; BufferSize);
> +    Status =3D EFI_SUCCESS;
> +    return Status;
> +  }
> +
> +  if (FixedPcdGet32 (PcdFfaEnable) !=3D 0) {
> +    Ret =3D CommunicateSmcArgs.Arg2;
> +  }
> +
> +  // Error Codes are same for FF-A and SMC interface
> +  switch (Ret) {
> +  case ARM_SMC_MM_RET_INVALID_PARAMS:
> +    Status =3D EFI_INVALID_PARAMETER;
> +    break;
> +
> +  case ARM_SMC_MM_RET_DENIED:
> +    Status =3D 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 =3D EFI_OUT_OF_RESOURCES;
> +    ASSERT (0);
> +    break;
> +
> +  default:
> +    Status =3D EFI_ACCESS_DENIED;
> +    ASSERT (0);
>     }
>  
>     return Status;
--_000_AS8PR08MB99791751265A230DA70FAA6BFF36AAS8PR08MB9979eurp_--