From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (NAM11-CO1-obe.outbound.protection.outlook.com [40.107.220.71]) by mx.groups.io with SMTP id smtpd.web11.2389.1689198539243920373 for ; Wed, 12 Jul 2023 14:48:59 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@nvidia.com header.s=selector2 header.b=ZqYfbt6A; spf=permerror, err=parse error for token &{10 18 %{i}._ip.%{h}._ehlo.%{d}._spf.vali.email}: invalid domain name (domain: nvidia.com, ip: 40.107.220.71, mailfrom: gmahadevan@nvidia.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=d3GOri7jlDzXOjj4dSOPqsQ83UW+gqvq7UHSPfsoe92DBOjXhT9euBVvtlOY0IZSS29V0ewCl6XDmcI1jgVI1xJoFdJBirRcgDO1yykNz7JX+J6lcuksTiQ9NTEGpLegjoCBq3+ErCfFghr3juTpnlKTa1owr5hN/NBMaUhlQxr9kLTZVy6clq+LStcfK62uzmotRxXrTan0c0O2O/ajkey5o9zAYjZhWRB3VDv3G1AAgSfJG0xUYq1HtnJYnSAwooetalGomI6D9xUUmXzacqQ6rZALjucKpGagpwr76dQcB9VGRfLn8Kvik/hfOyZmCEGzA4gqcJib9Tqc6KdsSw== 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=1zw+oI/2Jrq8tV22UtY4S6zSRxguY38Nt2FIXbbI8aY=; b=TvEN44HAiu6jGZTYt8FHD/v1yQl7r8z4sUJdUdtqGg9hArFFGTIL5IWSg2Y4QaCm3T5LHQOKbqnO+yW7S8+oadt4aqqcOvPmDRHgTUIMDcJ/jkn0dX+GmF79QCfb02PTUITsbsJ+XKucCG7T83xNzJNJx2C1f5E0VHGPDEzLr/zO87TJAWModje7fIUi8T0qzhkYiLDkd47Ir0X7qzjW9ywnWwBjaxsMPBgAHl6BZCkCzZzE7jbjceDZ0TenKt7rsOzi3cLK2+B53i9CTlx+cr3RSzFLTu+iyXwrqCWav90i5IUwF630bfDGwDRJA2JlZqkY+QdnepvkJEJh+yPZ1g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1zw+oI/2Jrq8tV22UtY4S6zSRxguY38Nt2FIXbbI8aY=; b=ZqYfbt6AD2S0Ug98P/TYKc5XbuuA/LNYKJAv32Io0Qd2Ju4LgL0uL0qY4zEghui1IRDTfJcTRGM1H3C+C1vxcbaWg1ZOvurzkDniJl9OwoaiXEF9Y6RlOVuVHVuGY0nbIlH1YBkzpaQ3psgI9JThA0fn38sZH2DG800WglpU4tJnO06KVCoYmQiOD9m7Gd8SI4CdyT4+PmmlZ92iRwLkwNoanjHM8Vbq3Mm7FpoPlEt9P5nW0kPp7hn3Y6ZQuzW48PD+PihlZMIRpLPMQqxcqU+DDvEfxJxbwi1fTfNkVBDVaSmXkYQyynaDhlOzXRe3VGxr1VpOkT1bYb2ddgosSA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CY5PR12MB6297.namprd12.prod.outlook.com (2603:10b6:930:22::19) by MW6PR12MB8661.namprd12.prod.outlook.com (2603:10b6:303:23f::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6565.26; Wed, 12 Jul 2023 21:48:54 +0000 Received: from CY5PR12MB6297.namprd12.prod.outlook.com ([fe80::cc7d:38f9:a163:1106]) by CY5PR12MB6297.namprd12.prod.outlook.com ([fe80::cc7d:38f9:a163:1106%5]) with mapi id 15.20.6588.022; Wed, 12 Jul 2023 21:48:53 +0000 Message-ID: <839da6f9-4438-1466-dbbb-73cc37d77e20@nvidia.com> Date: Wed, 12 Jul 2023 15:48:50 -0600 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.13.0 Subject: Re: [edk2-devel] [edk2-platforms][PATCH V1 18/20] ArmPkg/MmCommunicationDxe: Discover the StMM SP To: devel@edk2.groups.io, nishant.sharma@arm.com Cc: Ard Biesheuvel , Sami Mujawar , Thomas Abraham , Sayanta Pattanayak , Achin Gupta References: <20230711143658.781597-1-nishant.sharma@arm.com> <20230711143658.781597-19-nishant.sharma@arm.com> From: "Girish Mahadevan" In-Reply-To: <20230711143658.781597-19-nishant.sharma@arm.com> X-ClientProxiedBy: MN2PR22CA0014.namprd22.prod.outlook.com (2603:10b6:208:238::19) To CY5PR12MB6297.namprd12.prod.outlook.com (2603:10b6:930:22::19) Return-Path: gmahadevan@nvidia.com MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY5PR12MB6297:EE_|MW6PR12MB8661:EE_ X-MS-Office365-Filtering-Correlation-Id: 4638ceb5-c8f8-459a-8227-08db8321c94b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: wRJzz1v/TYjCiOetV9NfK1HWfp5mYS4hd3dd9/vL2zjDpuKJbnw6w3EociiOuRUu8ebQ+XBMabn6y8ZAFT4/036ea1qIkXVoAWydnBaNCGFAlPf1XawWFP743fvWp3Ewv6lgqCf9cSfTC8I8Zkbi3Q+d+8tZYIWn89fp+11Tv+AcfbtLDYvlId5Pexr1Uxt595iAGJdvufM9Wd7Cz6r3blIYyTei8F6X/z2UV4JOnpNAwTv+V69wJmERWp0nbbScT0v9dcT8o4z2Y+Qw5YH/3Hr7Z2NZcEsRFFQfnXnxY1JHTkY4E1v1TrCyzEJrmyawHkwvE1WlaqjmxUIt12pKv2pK4bY8W+4LvgUISU6M1e43FpuLSPcGI6e/QSucNj4HPejVe+OtIxebkeZXBMQ7JTKGzAJI/BpPinIeYO6zADQpkfXd3T2nx5Q8yf0B00kry65aX8u0ZC4P0HkjM1U0bHEbRDQR8QQ4zhKFocBq7jdjqma3vuaIE4c2vnPKV2OJKBX19B4n0NezuvHY1W51oOzLQzFgx0FZiDPbT72ZCUqC+lXDSIfR4OiradXUyesG2SQf6BzT2NIGCJ4fhadrAXzKkaiVIuj5zrVVeQZTvRgqFNIal+vgaA3XNiKEiDArl/hR1L6fHqHZAu8mBN+T4Q== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CY5PR12MB6297.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(6029001)(4636009)(39860400002)(366004)(396003)(136003)(376002)(346002)(451199021)(31686004)(66899021)(6486002)(478600001)(54906003)(19627235002)(86362001)(36756003)(2616005)(31696002)(2906002)(41300700001)(186003)(6506007)(6512007)(53546011)(966005)(83380400001)(26005)(38100700002)(66476007)(316002)(5660300002)(66556008)(8676002)(4326008)(66946007)(8936002)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZjdiWUNaK0IxalRWWlovUnpjcVphOWEwYTl2WmtjRGx3WXd3S2ZCZ2NSMklX?= =?utf-8?B?aW4wTXlMcGZMYWlvSVlqRmZrL2hwV1JIWWVmOFJPZldTTTAyUkN4ZjdKSmY1?= =?utf-8?B?L0J5RmV2N2hybHh2UDlEbDJKWHE1am5TaEk1RjNqMGgyaldxY1FMN0Iza0M3?= =?utf-8?B?bDRaK1BjTWYrclJjUm1QZnZkT0k2Zk1Fc1p2alJINjE3ODVNMDVObUlFbE1Y?= =?utf-8?B?Y1RzRzdkWElHVkRONytOS1hqbUJ5NU50cmExcEJlQTd4alRsK1ZSWlJYcGJ6?= =?utf-8?B?b05acmRBS0dVSVhNMWdWZTAzbnBkdWVuRzJFQ293VGpCNWRDSDVNT3B2TmM2?= =?utf-8?B?Rmk3UjNkQnpiOUNXcU9WN0hkNDE4K0FUVUdaVmU5WVJabStrSzRFQnRaUnZG?= =?utf-8?B?SEJHWE9CV09NKzFXbnAySGtkZGhKS3dKRWMxd2FRMFJ3c2NybXVIOHpSYkxH?= =?utf-8?B?cis2MG1BMFBtZEcxejFCQUZ6Tm8zb0tKQlhkVEJBdmxUQVNUSHE2cHVSNXl4?= =?utf-8?B?UlNtWEFXajR3UGoyZXducmd4ei94U3hjTVZoazRLTGZaaWtRZ05XVDRvY0ow?= =?utf-8?B?WG9Wb3g5d3lNK2h2blRUUDZQZU82ZEcrWGYxeTdEZDl5c1M0bnkxa3NPeGZq?= =?utf-8?B?L2pZbjc1bmtYdlhGNVd2WFhEd1lJamhrbnNzWHJaY2Z1aldMNEhHMHVodHAw?= =?utf-8?B?L1hueEhRSFRGMUFkaFZGN2hRRWxDOW03QWl2d2d4MjlBNk9KZXFjZ0VlNmxy?= =?utf-8?B?WDZsaGYxZ1pXV1lxcTRXK1R2cWd6eUV5aDVGYkFLUTFkdzFtS0hRWk1TUU9t?= =?utf-8?B?ZTR3dTAraVdxT05Cdy9QZ2pSTkdEeElzMmJqRDVCbTFmendSdmNMNlUrN3Yv?= =?utf-8?B?bmJ6d2F3YTJIQmEvVmx0NXVTb3Bmc01tMXkwSFdmbHNVT0dyNlB5czdsUUhj?= =?utf-8?B?V0h4VVdwR0IxN0lpc0ZncUJqMzlwNWJmN0U0a1dlMDZQYm1yK0FRQVhzYjhF?= =?utf-8?B?NE1oMUV4WUx1SjlrRGZiMjRSb1BuM3F6WFdOdlhFeVV5NXhJNHkzN1MzOGgz?= =?utf-8?B?cWZNMFducElUZ2d5TjNZWDkxT2tzdTRPcWtiNVdySFBEbEN1QnNIZk1zbjl0?= =?utf-8?B?UWI3L1J2Q1BranNIUUx1d0FmTUJ2RDlSOTNYWEo3WTZybE4wTTlnQkgzTnRu?= =?utf-8?B?L0hLZmQ1RnBFWEloOTVOdDlxaC9tUUVmQkdaZ0VuQVR6UUF1SVQ4d2c4aXBL?= =?utf-8?B?RSt2RGlnUDBiZUFmeVhYUHFqWUJtNTE1Y3VvU0Q1ZVYxdzN2Tm9HQ3ZCcnFF?= =?utf-8?B?dFJRMzhMT3k1MzBkZTVvZ1FUMzE2SzZCVGY4c0xsc244aGE5YUpGdWIwQTEy?= =?utf-8?B?QnVpR3FIVWZnRDVVcVNpd0ZHSFd6d3dRV0x5Z2JNNmRoenFOVkNFSU52citw?= =?utf-8?B?Z1VQS1l4cGJRN3BteGZEbjRrODZucXhOSnJaNlVHYmg0ZEpHVnZxcTdnYXhM?= =?utf-8?B?TmVVREpUWnNPN3ZySzV5bVhuZXhGT1ZqQVY5U2dxdnBsbWJtVnp3R2V1UTZV?= =?utf-8?B?VkltL1RaenpVbDM2bGNtRmpTejBxYktOOWc1ajVBZnpmL004cFdIdHZNcTBt?= =?utf-8?B?MWRmK0RwdklaMU1zbFZ2VFJURFoxRU0wN293ZkdSU0RacGdlK3hSNjNsR2tJ?= =?utf-8?B?cmtseVQrbDZBbkZ3SWs5N2c4UlBlMENCbDZmbURCeE9JWEw3ZDI0N0FoY2g0?= =?utf-8?B?ZWJUSFBiUHdEbG51VFFyMEhBMjBBZDY1SDRpR05OY2plZmtwTlNBYk04WmpH?= =?utf-8?B?ZEhJSElVU3pYY2pSOFFGRjU5bTJJTGs5TnpaVDBNT280UkFlc0RpbVRUc05n?= =?utf-8?B?RVdEUXBqcW5maE9qN0pCejVLSWtzRldUQWtHUlRROXd5d1FlenF3VkdMMGJ6?= =?utf-8?B?RUtFNksrZlJMeFRDbDBwYk9BK2ZieUI2VXBQTFdEUDRGVkczU1dQWWlOVFA2?= =?utf-8?B?TzN1UWlJLzdOTnJ1S3ZqcktwNWtoc2VnakJndi9FZlZON2ZRQk93em1TZ1Ni?= =?utf-8?B?TWRJZFBFUzNHRkxyUmQzcjRYNUZFSENFRVBLQjF0dDhZZ0dmT2JSWmxDRGtV?= =?utf-8?Q?BjyTRuRTLaRPXkFG7XlewHNcM?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4638ceb5-c8f8-459a-8227-08db8321c94b X-MS-Exchange-CrossTenant-AuthSource: CY5PR12MB6297.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jul 2023 21:48:53.8990 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 8TW3zTVG+sYrvaM6fCgdLhGGPSVe+WS05pHM8F1RC+1xOOFIn0fDe2fyFBfK80EaZyeSQjT+Kh+f6Xjc+A+hQA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW6PR12MB8661 Content-Language: en-US Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit A few comments in line. (Prefixed with [GM]) Best Regards Girish On 7/11/2023 8:36 AM, Nishant Sharma via groups.io wrote: > External email: Use caution opening links or attachments > > > From: Achin Gupta > > This patch adds support for discovering the presence of the SP using the > EFI_MM_COMMUNICATION_PROTOCOL GUID that implements Standalone MM > drivers. This is done by querying the framework through > FFA_PARTITION_INFO_GET whether any partition that implements the > EFI_MM_COMMUNICATION_PROTOCOL is present or not. The partition ID and > its properties are stashed for use in subsequent communication with the > StMM SP. > > Signed-off-by: Achin Gupta > Signed-off-by: Nishant Sharma > --- > ArmPkg/Include/IndustryStandard/ArmFfaSvc.h | 24 +++++ > ArmPkg/Drivers/MmCommunicationDxe/MmCommunication.c | 93 +++++++++++++++++++- > 2 files changed, 114 insertions(+), 3 deletions(-) > > diff --git a/ArmPkg/Include/IndustryStandard/ArmFfaSvc.h b/ArmPkg/Include/IndustryStandard/ArmFfaSvc.h > index f78442a465e1..530af8bd3c2e 100644 > --- a/ArmPkg/Include/IndustryStandard/ArmFfaSvc.h > +++ b/ArmPkg/Include/IndustryStandard/ArmFfaSvc.h > @@ -19,6 +19,9 @@ > #define ARM_SVC_ID_FFA_VERSION_AARCH32 0x84000063 > #define ARM_SVC_ID_FFA_RXTX_MAP_AARCH32 0x84000066 > #define ARM_SVC_ID_FFA_RXTX_MAP_AARCH64 0xC4000066 > +#define ARM_SVC_ID_FFA_RX_RELEASE_AARCH32 0x84000065 > +#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_MSG_SEND_DIRECT_REQ_AARCH32 0x8400006F > #define ARM_SVC_ID_FFA_MSG_SEND_DIRECT_RESP_AARCH32 0x84000070 > @@ -154,4 +157,25 @@ typedef struct { > UINT64 Reserved; > } EFI_FFA_BOOT_INFO_HEADER; > > +// FF-A partition information descriptor > +typedef struct { > + UINT16 PartId; > + UINT16 EcCnt; > + UINT32 PartProps; > + UINT32 PartGuid[4]; > +} EFI_FFA_PART_INFO_DESC; > + > +#define PART_INFO_PROP_MASK 0x3f > +#define PART_INFO_PROP_SHIFT 0 > +#define PART_INFO_PROP_DIR_MSG_RECV_BIT (1u << 0) > +#define PART_INFO_PROP_DIR_MSG_SEND_BIT (1u << 1) > +#define PART_INFO_PROP_INDIR_MSG_BIT (1u << 2) > +#define PART_INFO_PROP_NOTIFICATIONS_BIT (1u << 3) > +#define PART_INFO_PROP_EP_TYPE_MASK 0x3 > +#define PART_INFO_PROP_EP_TYPE_SHIFT 4 > +#define PART_INFO_PROP_EP_PE 0 > +#define PART_INFO_PROP_EP_SEPID_IND 1 > +#define PART_INFO_PROP_EP_SEPID_DEP 2 > +#define PART_INFO_PROP_EP_AUX 3 > + > #endif // ARM_FFA_SVC_H_ > diff --git a/ArmPkg/Drivers/MmCommunicationDxe/MmCommunication.c b/ArmPkg/Drivers/MmCommunicationDxe/MmCommunication.c > index 39a1b329b9ea..94a5d96c051d 100644 > --- a/ArmPkg/Drivers/MmCommunicationDxe/MmCommunication.c > +++ b/ArmPkg/Drivers/MmCommunicationDxe/MmCommunication.c > @@ -8,6 +8,7 @@ > > #include > #include > +#include > #include > #include > #include > @@ -28,6 +29,11 @@ > // > STATIC UINT16 mFfaPartId; > > +// Partition information of the StMM SP if FF-A support is enabled > +// TODO: Revisit assumption that there is only a single StMM SP > +// > +STATIC EFI_FFA_PART_INFO_DESC mStmmPartInfo; > + > // > // RX/TX pair if FF-A support is enabled > // > @@ -298,7 +304,9 @@ GetMmCompatibility ( > { > EFI_STATUS Status; > UINT32 MmVersion; > + UINT32 SmccUuid[4]; > ARM_SMC_ARGS SmcArgs = {0}; > + EFI_GUID MmCommProtGuid = EFI_MM_COMMUNICATION_PROTOCOL_GUID; > > if (FixedPcdGet32 (PcdFfaEnable) != 0) { > SmcArgs.Arg0 = ARM_SVC_ID_FFA_VERSION_AARCH32; > @@ -335,14 +343,21 @@ GetMmCompatibility ( > Status = EFI_UNSUPPORTED; > } > > - // If FF-A is supported then discover our ID and register our RX/TX buffers. > + // If FF-A is supported then discover the StMM SP's presence, ID, our ID and > + // register our RX/TX buffers. > if (FixedPcdGet32 (PcdFfaEnable) != 0) { > + EFI_FFA_PART_INFO_DESC *StmmPartInfo; > + [GM] Probably better off putting this entire thing (discovering the VMId in a different function). > // Get our ID > ZeroMem(&SmcArgs, sizeof(SmcArgs)); > SmcArgs.Arg0 = ARM_SVC_ID_FFA_ID_GET_AARCH32; > ArmCallSmc (&SmcArgs); > if (SmcArgs.Arg0 == ARM_SVC_ID_FFA_ERROR_AARCH32) { > - DEBUG ((DEBUG_ERROR, "Unable to retrieve FF-A partition ID (%d).\n", SmcArgs.Arg2)); > + DEBUG (( > + DEBUG_ERROR, > + "Unable to retrieve FF-A partition ID (%d).\n", > + SmcArgs.Arg2 > + )); > return EFI_UNSUPPORTED; > } > DEBUG ((DEBUG_INFO, "FF-A partition ID = 0x%lx.\n", SmcArgs.Arg2)); > @@ -355,11 +370,83 @@ GetMmCompatibility ( > SmcArgs.Arg3 = EFI_PAGE_SIZE / SIZE_4KB; > ArmCallSmc (&SmcArgs); > if (SmcArgs.Arg0 == ARM_SVC_ID_FFA_ERROR_AARCH32) { > - DEBUG ((DEBUG_ERROR, "Unable to register FF-A RX/TX buffers (%d).\n", SmcArgs.Arg2)); > + DEBUG (( > + DEBUG_ERROR, > + "Unable to register FF-A RX/TX buffers (%d).\n", > + SmcArgs.Arg2 > + )); > return EFI_UNSUPPORTED; > } > > + // Discover the StMM SP after converting the EFI_GUID to a format TF-A will > + // understand. > + SmcArgs.Arg0 = ARM_SVC_ID_FFA_PARTITION_INFO_GET_AARCH32; > + MmCommProtGuid.Data2 += MmCommProtGuid.Data3; > + MmCommProtGuid.Data3 = MmCommProtGuid.Data2 - MmCommProtGuid.Data3; > + MmCommProtGuid.Data2 = MmCommProtGuid.Data2 - MmCommProtGuid.Data3; > + CopyMem ((VOID *) SmccUuid, (VOID *) &MmCommProtGuid, sizeof(EFI_GUID)); > + SmcArgs.Arg1 = SmccUuid[0]; > + SmcArgs.Arg2 = SmccUuid[1]; > + SmcArgs.Arg3 = SmccUuid[2]; > + SmcArgs.Arg3 = SwapBytes32(SmcArgs.Arg3); > + SmcArgs.Arg4 = SmccUuid[3]; > + SmcArgs.Arg4 = SwapBytes32(SmcArgs.Arg4); > + ArmCallSmc (&SmcArgs); > + if (SmcArgs.Arg0 == ARM_SVC_ID_FFA_ERROR_AARCH32) { > + DEBUG (( > + DEBUG_ERROR, > + "Unable to discover FF-A StMM SP (%d).\n", > + SmcArgs.Arg2 > + )); > + goto ffa_init_error; > + } > + [GM] Shouldn't you also check Arg2 to ensure you have discovered at least 1 SP. > + // Retrieve the partition information from the RX buffer > + StmmPartInfo = (EFI_FFA_PART_INFO_DESC *) FfaRxBuf; > + > + // TODO: Sanity check the partition type. > + DEBUG ((DEBUG_INFO, "Discovered FF-A StMM SP.")); > + DEBUG (( > + DEBUG_INFO, > + "ID = 0x%lx, Execution contexts = %d, Properties = 0x%lx. \n", > + StmmPartInfo->PartId, > + StmmPartInfo->EcCnt, > + StmmPartInfo->PartProps > + )); > + > + // Make a local copy > + mStmmPartInfo = *StmmPartInfo; > + > + // Release the RX buffer > + ZeroMem(&SmcArgs, sizeof(SmcArgs)); > + SmcArgs.Arg0 = ARM_SVC_ID_FFA_RX_RELEASE_AARCH32; > + SmcArgs.Arg1 = mFfaPartId; > + ArmCallSmc (&SmcArgs); > + > + // This should really never fail since there is only a single CPU booting > + // and another CPU could not have released the RX buffer before us. > + if (SmcArgs.Arg0 == ARM_SVC_ID_FFA_ERROR_AARCH32) { > + DEBUG (( > + DEBUG_ERROR, > + "Unable to release FF-A RX buffer (%d).\n", > + SmcArgs.Arg2 > + )); > + ASSERT (0); > + goto ffa_init_error; > + } > + > return EFI_SUCCESS; > + > + ffa_init_error: > + // Release the RX/TX pair before exiting. > + ZeroMem(&SmcArgs, sizeof(SmcArgs)); > + SmcArgs.Arg0 = ARM_SVC_ID_FFA_RXTX_UNMAP_AARCH32; > + SmcArgs.Arg1 = mFfaPartId << 16; // TODO: Use a macro for shift > + ArmCallSmc (&SmcArgs); > + > + // We do not bother checking the error code of the RXTX_UNMAP invocation > + // since we did map the buffers and this call must succeed. > + return EFI_UNSUPPORTED; > } > > return Status; > -- > 2.34.1 > > > > -=-=-=-=-=-= > Groups.io Links: You receive all messages sent to this group. > View/Reply Online (#106810): https://edk2.groups.io/g/devel/message/106810 > Mute This Topic: https://groups.io/mt/100079892/6098446 > Group Owner: devel+owner@edk2.groups.io > Unsubscribe: https://edk2.groups.io/g/devel/unsub [gmahadevan@nvidia.com] > -=-=-=-=-=-= > >