From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (NAM12-BN8-obe.outbound.protection.outlook.com [40.92.21.54]) by mx.groups.io with SMTP id smtpd.web10.2511.1689184061366320277 for ; Wed, 12 Jul 2023 10:47:41 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@outlook.com header.s=selector1 header.b=JJtXRDxf; spf=pass (domain: outlook.com, ip: 40.92.21.54, mailfrom: chris.fernald@outlook.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=O8xBXFd6NhA4XkikuvNg0XTWDoI8Rgb3+UGI4VplRl8uqzwuzPHB3YbDEujOQZzCIS1beoo0gMrcONizwoQIiQ4wtwcH+88TyuXLFAFYOd624sSEKM+2nr4qM5PtjXCaFHi12TI7961SkM3YBfCeMOsZUVWpW9U8f6MqpAWe1Byxhy6L04Swmm+Nt5Qvzx6HfjCCHsO664d+4HfAtqjpXXVi/28SIBZ17CFhESPtfiFj1WFi7nvWkJdh8mXxGe+oEAEe8eKdiFBZ/o6gj0eqCQ8zPThEP6Q4DVbTzBsWfG9psdAEmvfAZzsgpdioTaPvne+dujgOwB4YRoR4jjuWkA== 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=Jlw6vNQxrwyqaE52yyWtzdIF3VewDRpFxvh/aezfsCQ=; b=UaOcsmJd2WEhp77Y39B94aLepaO2YGc6bj0LPaoucONQAxGOVBCedKSTXEh5alGMZ4cvFMbllHFcljAvlwBPERXJiA7kg3Jvc/5N+EY6g4rAg/ngx0ptKOB20Cv8qNlliWUgAgDXgpQlNvEJ9la7I5Eyo1rITs9fVf8YW5RH/9FcAUu9CcMqa+vzipOnhYpdLUEVumnKgW51ln3Gmu3AEJMLmntyYV5k/VtMN27ZeWE+xcJYfOrVw7s1x9UdKZ/kdCFedyEnrvikQ2rEjk1LzsKf0lSBqBy7ELl0dapIDwMxR80GQrptzrRjF8Cpws1J6FKJ11D/Xaisv1csLRl2og== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Jlw6vNQxrwyqaE52yyWtzdIF3VewDRpFxvh/aezfsCQ=; b=JJtXRDxf14oNEiyvg7avYCc/3vC1bPni4PIQRoWA0mJZXme3iz/gT0N55eLwqZ8oNwmlUIXc6K7A6jHV08I31Owi7SUPjvOngUwZOBEIHGT4XCowWzy9eVqW2VLGe14RRnN9XejSiK819iw2wYlkded0cz4sCO5dJWTX5zMlGBrc5S/NYhnMpxDYRI+wBVgaeOZ6MKl4wdwudEdpPmSdoFaORBpzVbCL6PxE9GoMjk8g/cfpFrJqWSdLJENiv9y0Wv/1gfd0z32g/J6JRGVgUN5jdGdMacIhN3yrOXDmvjTqUK3Qj8+YtBubx3vsMdsOMzXyNce+Lm55CKHCi1+whg== Received: from IA1PR19MB6275.namprd19.prod.outlook.com (2603:10b6:208:3e9::19) by PH7PR19MB7339.namprd19.prod.outlook.com (2603:10b6:510:26a::11) 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 17:47:39 +0000 Received: from IA1PR19MB6275.namprd19.prod.outlook.com ([fe80::f8b:7745:ff38:8b5c]) by IA1PR19MB6275.namprd19.prod.outlook.com ([fe80::f8b:7745:ff38:8b5c%6]) with mapi id 15.20.6565.028; Wed, 12 Jul 2023 17:47:39 +0000 Message-ID: Date: Wed, 12 Jul 2023 10:47:35 -0700 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 02/20] StandaloneMmPkg: Allocate and initialise SP stack from internal memory 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-3-nishant.sharma@arm.com> From: "Chris Fernald" In-Reply-To: <20230711143658.781597-3-nishant.sharma@arm.com> X-TMN: [DGh8NV5xISAXM3BTnGTFb0VzKKK10W7h] X-ClientProxiedBy: BY5PR13CA0007.namprd13.prod.outlook.com (2603:10b6:a03:180::20) To IA1PR19MB6275.namprd19.prod.outlook.com (2603:10b6:208:3e9::19) Return-Path: chris.fernald@outlook.com X-Microsoft-Original-Message-ID: <961b915c-faf8-b7b8-d3e2-1fb966ab1151@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: IA1PR19MB6275:EE_|PH7PR19MB7339:EE_ X-MS-Office365-Filtering-Correlation-Id: 65208479-279d-448d-1c21-08db83001582 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: HsBsjbTfc3qwjByFQSV4+HsS5fBJfn69jiY2hUDOLOqRn+21//Wk5KsMAZHIMhR/M0mm+ZEPVtXCMIaak+NyT7uQv8cnQqYu6bkPzdBOsaDloITiYvdsWAyLHiXK+BtB4due1fthPlAmTfC/2jiJFdsTt/Aqnn/OVYKPVQzwol+INxnOpIJ4K43T03y7qDJO2qLFyaBUTu79Rkajo1fJPP5hIkEF1CroxidaJdlaBGIhY5zHA9yK5/tU5P09o9Lp8s8sSeiOYYb3MjS+ntzHcLh5ek63w3A9gKQYVHm94hXXVqkXoP+7EQIdLJ4r6qM+Uu9dPPt8wXSGHAL2vGuYg1mkGnMLrvEnNfid96//XondNdH28h1tNEhOJgDkg7388idgZNZl3GkQB7r87YvPLpiFEcrM00YN0xJJJjlmfzN1t+sOPd9NHXvmJxZYFN3NiHbRN5zIa+E60z9HkG/RQT8zWCrsRWYuT/iXlH4RcXxE5iS4lOsYtwsLeKkHPIBxDCPUtCLI3y/qUZwc02h5Z6KvPXrbb4NplHbrqrK7aqohIrzczYMaMK/wICkszMFG X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?SEJTM0R4TnpMTVlMdkZWR2NxTzYvOHpIakFId3h5WDZYdlc0K2NEMm5WanFk?= =?utf-8?B?WnNnb29hNUNLK1dzRDNDdjh1ZTdxK3F3UzhEbWU2YmRKWmtLWHIyZm9OTzBy?= =?utf-8?B?SGNTaHN3Qmx0cGZLenlKRGRmYTY0SkNHRDFieFUxa05ibjVQMlRrdnJFcHps?= =?utf-8?B?bDFkSUZDaDV1WVVta1Y4QXY3KysvWk5oZFozQ0VTam9ENVA5VVZGQlkxRU52?= =?utf-8?B?TjFOMG1YeGJOMTBSSllOZXhEaU9tOXNOL0pHRC9RdkVDVk9mTVBRbXdVUnVp?= =?utf-8?B?cG1tNmhjRys1QWVVZWtEYzRGUm1WRnZyUkI2NWNJTDNONTFrMnBCbmt6ampF?= =?utf-8?B?eVdUQzRyT05iK2czV1RobHdDMTZScTg3aWNPM0RyS1R2bWNIZ080SVZVQUlz?= =?utf-8?B?c3U5N09nQjlZRDVoNE10ZXV0VXR4VWxxWSthemlEQXhGS1ZEYTk3Zm5MTEMr?= =?utf-8?B?c2hSMkJtdlFKcnoybVB4NjczUnBsRjFyVlNHUzhrdHJnS2kxaER3cDJJME9v?= =?utf-8?B?bU9zWWpSZWxBS2hQR053VkEvajBxellyNUpqSi9IZ0xneSswRVV5WUtkSWRK?= =?utf-8?B?V2podlY5NmhMdlNJT1N6bmR3V2tCYXI1RHBvSExwN21aZWNuZGlFV1lxQUxN?= =?utf-8?B?RWhxZjFCbHVJTHBCYUFrbDJPYkwvd2ZVOWs1N2dYam0zZ1A1dllTbXlCVmJJ?= =?utf-8?B?MEIvYUx6RjUyblZZUG5wQTJFaGluK1RrVndjbmhxWVlSbGFPekNITTdVaTJk?= =?utf-8?B?Qi8zcUIrbngzMGlUZlBBT0I4RS9JdTY0bDhxU1lpbDdpZi9tSlZEYWtueElE?= =?utf-8?B?MnV5M3dMWTl6V2JlVVl1Z0ZoNXNIWnJYb01FbDBzaUx1YzR0V05CV0dOSld1?= =?utf-8?B?ckI2L3NGUnpGT05YK3RBRnYzUFN5dE5BZ1JTeGYwQTJ1SjFxcE9GUUFyWHdr?= =?utf-8?B?UzJadmhKR3lhTlBISVZEYnFLanR0cE5rM0NHMjM3L3hsMTN0WVRncHRBMTdv?= =?utf-8?B?RGtLMGdQa1dqa3JDeTRyZHRTYWt1Wi9sMVVJbzlDN2JmSlU5NGdrSkdpa3hG?= =?utf-8?B?cXRVRVRBT2psc1dPcDM4SzQvWUo1V0p3cGwwMTN3RmNsYmVqTGVXcFZNSmhp?= =?utf-8?B?bHFCSmZxVTlsL2hDVjEwSlF6ZFFaRnRpbml3cDNkTnROUWRicldwMlhkQlhI?= =?utf-8?B?V29tNnkvSHNURmk0eHRJSmZ6UUNwMG8ydEp0TzRnWDBQa0kxSnFrT3JnRnNB?= =?utf-8?B?NWJFRzJZbWgvL3UralJmM3d6MU50K3ZiSEpyMTd6WFRtUVNXTld3eWEwT2Zl?= =?utf-8?B?aFdGeHZXdm9jNVFwYmtUV05mTG0rNjN6b1R0QStXR2VVYzA3NDhQdWZ2Mk9U?= =?utf-8?B?Uy9UNGhsZ3R1cmwxdHNSVDdpRVhDYWYzVWZwN3g0RlI3dmhEWTZPOEk5cVdM?= =?utf-8?B?ZXRKUTR6UTZHOWdUTTZSV2t2NDBFTG54Nko5b29XSDBUM1pGR09LZnU2MzBR?= =?utf-8?B?M2RLUjk4ZW5uZm8rTXo3d0tHbVJqbUxSMStFNkJYU0xTcWViSGVpN1h0eHVq?= =?utf-8?B?cjFxYzQwODBkTWZyVkcvTDdFejRIcVgxVWlVS1JWQmVEcUZqbGFYOVlsTmhB?= =?utf-8?Q?6VpuX7WakK6O8l2D0+r+DdUxpHzAG/ddHqmJwywHD3b8=3D?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 65208479-279d-448d-1c21-08db83001582 X-MS-Exchange-CrossTenant-AuthSource: IA1PR19MB6275.namprd19.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jul 2023 17:47:39.0351 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR19MB7339 Content-Language: en-US Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Would it be possible to make the stack size configurable in a way that doesn't require an silicon/platform vendor to customize the assembly code? Perhaps through a fixed PCD if its not problematic to do so with the .space directive. Thanks, Chris On 7/11/2023 7:36 AM, Nishant Sharma wrote: > From: Achin Gupta > > This patch removes the dependency on the SPM to allocate and initialise > stack memory for the StMM SP. This is done by reserving 8K worth of memory > in the StMM image at a page aligned address in the data section. Then, > instead of jumping directly to the C entrypoint, an assembler entrypoint is > invoked. This entrypoint locates the stack memory, changes its permissions > using FF-A ABIs, sets the stack pointer and invokes the C entrypoint. > > Signed-off-by: Achin Gupta > Signed-off-by: Nishant Sharma > --- > StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/StandaloneMmCoreEntryPoint.inf | 1 + > StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/StandaloneMmCoreEntryPoint.c | 2 +- > StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/AArch64/ModuleEntryPoint.S | 68 ++++++++++++++++++++ > 3 files changed, 70 insertions(+), 1 deletion(-) > > diff --git a/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/StandaloneMmCoreEntryPoint.inf b/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/StandaloneMmCoreEntryPoint.inf > index dc6d3d859911..10fafa43ce59 100644 > --- a/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/StandaloneMmCoreEntryPoint.inf > +++ b/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/StandaloneMmCoreEntryPoint.inf > @@ -25,6 +25,7 @@ > Arm/StandaloneMmCoreEntryPoint.c > Arm/SetPermissions.c > Arm/CreateHobList.c > + Arm/AArch64/ModuleEntryPoint.S > > [Sources.X64] > X64/StandaloneMmCoreEntryPoint.c > diff --git a/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/StandaloneMmCoreEntryPoint.c b/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/StandaloneMmCoreEntryPoint.c > index 5dd1d9747995..ce867fe85158 100644 > --- a/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/StandaloneMmCoreEntryPoint.c > +++ b/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/StandaloneMmCoreEntryPoint.c > @@ -316,7 +316,7 @@ InitArmSvcArgs ( > **/ > VOID > EFIAPI > -_ModuleEntryPoint ( > +ModuleEntryPoint ( > IN VOID *SharedBufAddress, > IN UINT64 SharedBufSize, > IN UINT64 cookie1, > diff --git a/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/AArch64/ModuleEntryPoint.S b/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/AArch64/ModuleEntryPoint.S > new file mode 100644 > index 000000000000..174bc83ebd64 > --- /dev/null > +++ b/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/AArch64/ModuleEntryPoint.S > @@ -0,0 +1,68 @@ > +// > +// Copyright (c) 2023, ARM Limited. All rights reserved. > +// > +// SPDX-License-Identifier: BSD-2-Clause-Patent > +// > +// > + > +#include > + > +#define FFA_DATA_RW 0x1 > + > +.align 12 > +StackBase: > +.space 8192 > +StackEnd: > + > +.macro FfaMemPermSet start:req end:req perm:req > +adrp x29, \start > +add x29, x29, :lo12: \start > + > +adrp x30, \end > +add x30, x30, :lo12:\end > + > +/* x30 = end - begin */ > +sub x30, x30, x29 > +/* x28 = x30 >> 12 (number of pages) */ > +mov x28, #12 > +lsrv x28, x30, x28 > + > +mov w0, #0x89 > +movk w0, #0x8400, lsl #16 > +mov x1, x29 > +mov x2, x28 > +mov w3, #\perm > + > +svc #0 > + > +mov w1, #0x61 > +movk w1, #0x8400, lsl #16 > +cmp w1, w0 > +b.ne . > +.endm > + > + ASM_FUNC(_ModuleEntryPoint) > +MOV32 (w8, FixedPcdGet32(PcdFfaEnable)) > + cbz w8, FfaNotEnabled > + // Stash boot information registers from the SPMC > + mov x8, x0 > + mov x9, x1 > + mov x10, x2 > + mov x11, x3 > + > + // Set the correct permissions on stack memory > + FfaMemPermSet StackBase StackEnd FFA_DATA_RW > + > + // Initialise SP > + adr x0, StackEnd > + mov sp, x0 > + > + // Restore boot information registers from the SPMC > + mov x0, x8 > + mov x1, x9 > + mov x2, x10 > + mov x3, x11 > + > + // Invoke the C entrypoint > + FfaNotEnabled: > + b ModuleEntryPoint