* [edk2-devel] [PATCH v3 0/2] Make StandaloneMmCpu architecture independent @ 2023-09-28 21:14 Tuan Phan 2023-09-28 21:14 ` [edk2-devel] [PATCH v3 1/2] StandaloneMmPkg: Make StandaloneMmCpu driver " Tuan Phan ` (2 more replies) 0 siblings, 3 replies; 6+ messages in thread From: Tuan Phan @ 2023-09-28 21:14 UTC (permalink / raw) To: devel Cc: ardb+tianocore, sami.mujawar, ray.ni, huangming, sunilvl, yong.li, yeoreum.yun, Tuan Phan This series makes StandaloneMmCpu architecture independent so other architectures besides ARM/AARCH64 can use it without creating new driver. There are two parts in this series: 1. Remove ARM/AARCH64 code from StandaloneMmCpu. 2. Update ARM/AARCH64 entry point library code. V3: - Addressed Sami's comments. V2: - Seperated changes between CPU driver and Arm entry point library. Tuan Phan (2): StandaloneMmPkg: Make StandaloneMmCpu driver architecture independent StandaloneMmPkg: Arm: Update to use the new StandaloneMmCpu driver .../Drivers/StandaloneMmCpu/EventHandle.c | 25 ++----- .../Drivers/StandaloneMmCpu/StandaloneMmCpu.c | 42 ++++++----- .../StandaloneMmCpu/StandaloneMmCpu.inf | 9 +-- .../Library/Arm/StandaloneMmCoreEntryPoint.h | 17 +---- .../StandaloneMmCpu.h | 22 ++++-- .../Arm/CreateHobList.c | 43 ++++++------ .../Arm/StandaloneMmCoreEntryPoint.c | 69 +++++++++++-------- .../StandaloneMmCoreEntryPoint.inf | 2 +- StandaloneMmPkg/StandaloneMmPkg.dec | 2 +- 9 files changed, 113 insertions(+), 118 deletions(-) rename StandaloneMmPkg/{Drivers/StandaloneMmCpu => Include}/StandaloneMmCpu.h (82%) -- 2.25.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#109177): https://edk2.groups.io/g/devel/message/109177 Mute This Topic: https://groups.io/mt/101646675/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=- ^ permalink raw reply [flat|nested] 6+ messages in thread
* [edk2-devel] [PATCH v3 1/2] StandaloneMmPkg: Make StandaloneMmCpu driver architecture independent 2023-09-28 21:14 [edk2-devel] [PATCH v3 0/2] Make StandaloneMmCpu architecture independent Tuan Phan @ 2023-09-28 21:14 ` Tuan Phan 2023-09-28 21:14 ` [edk2-devel] [PATCH v3 2/2] StandaloneMmPkg: Arm: Update to use the new StandaloneMmCpu driver Tuan Phan 2024-02-27 12:58 ` [edk2-devel] [PATCH v3 0/2] Make StandaloneMmCpu architecture independent Sami Mujawar 2 siblings, 0 replies; 6+ messages in thread From: Tuan Phan @ 2023-09-28 21:14 UTC (permalink / raw) To: devel Cc: ardb+tianocore, sami.mujawar, ray.ni, huangming, sunilvl, yong.li, yeoreum.yun, Tuan Phan StandaloneMmCpu now can supports more architectures like RISC-V besides ARM/AARCH64. Signed-off-by: Tuan Phan <tphan@ventanamicro.com> Reviewed-by: levi.yun <yeoreum.yun@arm.com> Reviewed-by: Sami Mujawar <sami.mujawar@arm.com> --- .../Drivers/StandaloneMmCpu/EventHandle.c | 25 +++-------- .../Drivers/StandaloneMmCpu/StandaloneMmCpu.c | 42 +++++++++---------- .../StandaloneMmCpu/StandaloneMmCpu.inf | 9 ++-- .../StandaloneMmCpu.h | 22 +++++++--- StandaloneMmPkg/StandaloneMmPkg.dec | 2 +- 5 files changed, 46 insertions(+), 54 deletions(-) rename StandaloneMmPkg/{Drivers/StandaloneMmCpu => Include}/StandaloneMmCpu.h (82%) diff --git a/StandaloneMmPkg/Drivers/StandaloneMmCpu/EventHandle.c b/StandaloneMmPkg/Drivers/StandaloneMmCpu/EventHandle.c index 818e147f874c..dc11d4375a02 100644 --- a/StandaloneMmPkg/Drivers/StandaloneMmCpu/EventHandle.c +++ b/StandaloneMmPkg/Drivers/StandaloneMmCpu/EventHandle.c @@ -3,6 +3,7 @@ Copyright (c) 2016 HP Development Company, L.P. Copyright (c) 2016 - 2021, Arm Limited. All rights reserved. Copyright (c) 2021, Linaro Limited + Copyright (c) 2023, Ventana Micro System Inc. All rights reserved. SPDX-License-Identifier: BSD-2-Clause-Patent @@ -11,8 +12,6 @@ #include <Base.h> #include <Pi/PiMmCis.h> -#include <Library/ArmSvcLib.h> -#include <Library/ArmLib.h> #include <Library/BaseMemoryLib.h> #include <Library/DebugLib.h> #include <Library/HobLib.h> @@ -22,10 +21,7 @@ #include <Guid/ZeroGuid.h> #include <Guid/MmramMemoryReserve.h> -#include <IndustryStandard/ArmFfaSvc.h> -#include <IndustryStandard/ArmStdSmc.h> - -#include "StandaloneMmCpu.h" +#include <StandaloneMmCpu.h> EFI_STATUS EFIAPI @@ -108,7 +104,7 @@ CheckBufferAddr ( } /** - The PI Standalone MM entry point for the TF-A CPU driver. + The PI Standalone MM entry point for the CPU driver. @param [in] EventId The event Id. @param [in] CpuNumber The CPU number. @@ -121,7 +117,7 @@ CheckBufferAddr ( @retval EFI_UNSUPPORTED Operation not supported. **/ EFI_STATUS -PiMmStandaloneArmTfCpuDriverEntry ( +PiMmStandaloneMmCpuDriverEntry ( IN UINTN EventId, IN UINTN CpuNumber, IN UINTN NsCommBufferAddr @@ -135,17 +131,6 @@ PiMmStandaloneArmTfCpuDriverEntry ( DEBUG ((DEBUG_INFO, "Received event - 0x%x on cpu %d\n", EventId, CpuNumber)); Status = EFI_SUCCESS; - // - // ARM TF passes SMC FID of the MM_COMMUNICATE interface as the Event ID upon - // receipt of a synchronous MM request. Use the Event ID to distinguish - // between synchronous and asynchronous events. - // - if ((ARM_SMC_ID_MM_COMMUNICATE != EventId) && - (ARM_SVC_ID_FFA_MSG_SEND_DIRECT_REQ != EventId)) - { - DEBUG ((DEBUG_ERROR, "UnRecognized Event - 0x%x\n", EventId)); - return EFI_INVALID_PARAMETER; - } // Perform parameter validation of NsCommBufferAddr if (NsCommBufferAddr == (UINTN)NULL) { @@ -177,7 +162,7 @@ PiMmStandaloneArmTfCpuDriverEntry ( } // X1 contains the VA of the normal world memory accessible from - // S-EL0 + // secure world. CopyMem (GuidedEventContext, (CONST VOID *)NsCommBufferAddr, NsCommBufferSize); // Stash the pointer to the allocated Event Context for this CPU diff --git a/StandaloneMmPkg/Drivers/StandaloneMmCpu/StandaloneMmCpu.c b/StandaloneMmPkg/Drivers/StandaloneMmCpu/StandaloneMmCpu.c index 3d1dc6181bd9..c5ec1a5a80c5 100644 --- a/StandaloneMmPkg/Drivers/StandaloneMmCpu/StandaloneMmCpu.c +++ b/StandaloneMmPkg/Drivers/StandaloneMmCpu/StandaloneMmCpu.c @@ -3,6 +3,7 @@ Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR> Copyright (c) 2016 HP Development Company, L.P. Copyright (c) 2016 - 2021, Arm Limited. All rights reserved. + Copyright (c) 2023, Ventana Micro System Inc. All rights reserved. SPDX-License-Identifier: BSD-2-Clause-Patent @@ -10,10 +11,7 @@ #include <Base.h> #include <Pi/PiMmCis.h> -#include <Library/Arm/StandaloneMmCoreEntryPoint.h> #include <Library/DebugLib.h> -#include <Library/ArmSvcLib.h> -#include <Library/ArmLib.h> #include <Library/BaseMemoryLib.h> #include <Library/HobLib.h> @@ -22,7 +20,7 @@ #include <Guid/ZeroGuid.h> #include <Guid/MmramMemoryReserve.h> -#include "StandaloneMmCpu.h" +#include <StandaloneMmCpu.h> // GUID to identify HOB with whereabouts of communication buffer with Normal // World @@ -31,7 +29,7 @@ extern EFI_GUID gEfiStandaloneMmNonSecureBufferGuid; // GUID to identify HOB where the entry point of this CPU driver will be // populated to allow the entry point driver to invoke it upon receipt of an // event -extern EFI_GUID gEfiArmTfCpuDriverEpDescriptorGuid; +extern EFI_GUID gEfiMmCpuDriverEpDescriptorGuid; // // Private copy of the MM system table for future use @@ -96,17 +94,17 @@ StandaloneMmCpuInitialize ( IN EFI_MM_SYSTEM_TABLE *SystemTable // not actual systemtable ) { - ARM_TF_CPU_DRIVER_EP_DESCRIPTOR *CpuDriverEntryPointDesc; - EFI_CONFIGURATION_TABLE *ConfigurationTable; - MP_INFORMATION_HOB_DATA *MpInformationHobData; - EFI_MMRAM_DESCRIPTOR *NsCommBufMmramRange; - EFI_STATUS Status; - EFI_HANDLE DispatchHandle; - UINT32 MpInfoSize; - UINTN Index; - UINTN ArraySize; - VOID *HobStart; - EFI_MMRAM_HOB_DESCRIPTOR_BLOCK *MmramRangesHob; + MM_CPU_DRIVER_EP_DESCRIPTOR *CpuDriverEntryPointDesc; + EFI_CONFIGURATION_TABLE *ConfigurationTable; + MP_INFORMATION_HOB_DATA *MpInformationHobData; + EFI_MMRAM_DESCRIPTOR *NsCommBufMmramRange; + EFI_STATUS Status; + EFI_HANDLE DispatchHandle; + UINT32 MpInfoSize; + UINTN Index; + UINTN ArraySize; + VOID *HobStart; + EFI_MMRAM_HOB_DESCRIPTOR_BLOCK *MmramRangesHob; ASSERT (SystemTable != NULL); mMmst = SystemTable; @@ -133,7 +131,7 @@ StandaloneMmCpuInitialize ( } // Retrieve the Hoblist from the MMST to extract the details of the NS - // communication buffer that has been reserved by S-EL1/EL3 + // communication buffer that has been reserved for StandaloneMmPkg ConfigurationTable = mMmst->MmConfigurationTable; for (Index = 0; Index < mMmst->NumberOfTableEntries; Index++) { if (CompareGuid (&gEfiHobListGuid, &(ConfigurationTable[Index].VendorGuid))) { @@ -154,11 +152,11 @@ StandaloneMmCpuInitialize ( // Status = GetGuidedHobData ( HobStart, - &gEfiArmTfCpuDriverEpDescriptorGuid, + &gEfiMmCpuDriverEpDescriptorGuid, (VOID **)&CpuDriverEntryPointDesc ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "ArmTfCpuDriverEpDesc HOB data extraction failed - 0x%x\n", Status)); + DEBUG ((DEBUG_ERROR, "MmCpuDriverEpDesc HOB data extraction failed - 0x%x\n", Status)); return Status; } @@ -166,10 +164,10 @@ StandaloneMmCpuInitialize ( DEBUG (( DEBUG_INFO, "Sharing Cpu Driver EP *0x%lx = 0x%lx\n", - (UINTN)CpuDriverEntryPointDesc->ArmTfCpuDriverEpPtr, - (UINTN)PiMmStandaloneArmTfCpuDriverEntry + (UINTN)CpuDriverEntryPointDesc->MmCpuDriverEpPtr, + (UINTN)PiMmStandaloneMmCpuDriverEntry )); - *(CpuDriverEntryPointDesc->ArmTfCpuDriverEpPtr) = PiMmStandaloneArmTfCpuDriverEntry; + *(CpuDriverEntryPointDesc->MmCpuDriverEpPtr) = PiMmStandaloneMmCpuDriverEntry; // Find the descriptor that contains the whereabouts of the buffer for // communication with the Normal world. diff --git a/StandaloneMmPkg/Drivers/StandaloneMmCpu/StandaloneMmCpu.inf b/StandaloneMmPkg/Drivers/StandaloneMmCpu/StandaloneMmCpu.inf index 1fcb17d89d36..486ccbac1b7c 100644 --- a/StandaloneMmPkg/Drivers/StandaloneMmCpu/StandaloneMmCpu.inf +++ b/StandaloneMmPkg/Drivers/StandaloneMmCpu/StandaloneMmCpu.inf @@ -1,9 +1,10 @@ ## @file -# Standalone MM CPU driver for ARM Standard Platforms +# Standalone MM CPU driver # # Copyright (c) 2009, Apple Inc. All rights reserved.<BR> # Copyright (c) 2016 HP Development Company, L.P. # Copyright (c) 2017 - 2021, Arm Limited. All rights reserved. +# Copyright (c) 2023, Ventana Micro System Inc. All rights reserved. # # SPDX-License-Identifier: BSD-2-Clause-Patent ## @@ -19,18 +20,14 @@ [Sources] StandaloneMmCpu.c - StandaloneMmCpu.h EventHandle.c [Packages] - ArmPkg/ArmPkg.dec MdePkg/MdePkg.dec MdeModulePkg/MdeModulePkg.dec StandaloneMmPkg/StandaloneMmPkg.dec [LibraryClasses] - ArmLib - ArmSvcLib BaseMemoryLib DebugLib HobLib @@ -46,7 +43,7 @@ gZeroGuid gMpInformationHobGuid gEfiStandaloneMmNonSecureBufferGuid - gEfiArmTfCpuDriverEpDescriptorGuid + gEfiMmCpuDriverEpDescriptorGuid [Depex] TRUE diff --git a/StandaloneMmPkg/Drivers/StandaloneMmCpu/StandaloneMmCpu.h b/StandaloneMmPkg/Include/StandaloneMmCpu.h similarity index 82% rename from StandaloneMmPkg/Drivers/StandaloneMmCpu/StandaloneMmCpu.h rename to StandaloneMmPkg/Include/StandaloneMmCpu.h index 3d4698ec1957..1dce7c132ec2 100644 --- a/StandaloneMmPkg/Drivers/StandaloneMmCpu/StandaloneMmCpu.h +++ b/StandaloneMmPkg/Include/StandaloneMmCpu.h @@ -7,14 +7,26 @@ **/ -#ifndef _ARM_TF_CPU_DRIVER_H_ -#define _ARM_TF_CPU_DRIVER_H_ +#ifndef MM_CPU_DRIVER_H_ +#define MM_CPU_DRIVER_H_ #include <Protocol/MmCommunication2.h> #include <Protocol/MmConfiguration.h> #include <Protocol/MmCpu.h> #include <Guid/MpInformation.h> +typedef +EFI_STATUS +(*PI_MM_CPU_DRIVER_ENTRYPOINT) ( + IN UINTN EventId, + IN UINTN CpuNumber, + IN UINTN NsCommBufferAddr + ); + +typedef struct { + PI_MM_CPU_DRIVER_ENTRYPOINT *MmCpuDriverEpPtr; +} MM_CPU_DRIVER_EP_DESCRIPTOR; + // // CPU driver initialization specific declarations // @@ -35,7 +47,7 @@ extern MP_INFORMATION_HOB_DATA *mMpInformationHobData; extern EFI_MM_CONFIGURATION_PROTOCOL mMmConfig; /** - The PI Standalone MM entry point for the TF-A CPU driver. + The PI Standalone MM entry point for the CPU driver. @param [in] EventId The event Id. @param [in] CpuNumber The CPU number. @@ -48,7 +60,7 @@ extern EFI_MM_CONFIGURATION_PROTOCOL mMmConfig; @retval EFI_UNSUPPORTED Operation not supported. **/ EFI_STATUS -PiMmStandaloneArmTfCpuDriverEntry ( +PiMmStandaloneMmCpuDriverEntry ( IN UINTN EventId, IN UINTN CpuNumber, IN UINTN NsCommBufferAddr @@ -79,4 +91,4 @@ PiMmCpuTpFwRootMmiHandler ( IN OUT UINTN *CommBufferSize OPTIONAL ); -#endif +#endif /* MM_CPU_DRIVER_H_ */ diff --git a/StandaloneMmPkg/StandaloneMmPkg.dec b/StandaloneMmPkg/StandaloneMmPkg.dec index 46784d94e421..f7cb9e8e2687 100644 --- a/StandaloneMmPkg/StandaloneMmPkg.dec +++ b/StandaloneMmPkg/StandaloneMmPkg.dec @@ -46,5 +46,5 @@ gEfiMmPeiMmramMemoryReserveGuid = { 0x0703f912, 0xbf8d, 0x4e2a, { 0xbe, 0x07, 0xab, 0x27, 0x25, 0x25, 0xc5, 0x92 }} gEfiStandaloneMmNonSecureBufferGuid = { 0xf00497e3, 0xbfa2, 0x41a1, { 0x9d, 0x29, 0x54, 0xc2, 0xe9, 0x37, 0x21, 0xc5 }} - gEfiArmTfCpuDriverEpDescriptorGuid = { 0x6ecbd5a1, 0xc0f8, 0x4702, { 0x83, 0x01, 0x4f, 0xc2, 0xc5, 0x47, 0x0a, 0x51 }} + gEfiMmCpuDriverEpDescriptorGuid = { 0x6ecbd5a1, 0xc0f8, 0x4702, { 0x83, 0x01, 0x4f, 0xc2, 0xc5, 0x47, 0x0a, 0x51 }} -- 2.25.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#109178): https://edk2.groups.io/g/devel/message/109178 Mute This Topic: https://groups.io/mt/101646676/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=- ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [edk2-devel] [PATCH v3 2/2] StandaloneMmPkg: Arm: Update to use the new StandaloneMmCpu driver 2023-09-28 21:14 [edk2-devel] [PATCH v3 0/2] Make StandaloneMmCpu architecture independent Tuan Phan 2023-09-28 21:14 ` [edk2-devel] [PATCH v3 1/2] StandaloneMmPkg: Make StandaloneMmCpu driver " Tuan Phan @ 2023-09-28 21:14 ` Tuan Phan 2023-10-05 11:11 ` Sami Mujawar 2024-02-27 12:58 ` [edk2-devel] [PATCH v3 0/2] Make StandaloneMmCpu architecture independent Sami Mujawar 2 siblings, 1 reply; 6+ messages in thread From: Tuan Phan @ 2023-09-28 21:14 UTC (permalink / raw) To: devel Cc: ardb+tianocore, sami.mujawar, ray.ni, huangming, sunilvl, yong.li, yeoreum.yun, Tuan Phan Update entry point library for Arm to use the new architecture independent StandaloneMmCpu driver. Signed-off-by: Tuan Phan <tphan@ventanamicro.com> Reviewed-by: levi.yun <yeoreum.yun@arm.com> --- .../Library/Arm/StandaloneMmCoreEntryPoint.h | 17 +---- .../Arm/CreateHobList.c | 43 ++++++------ .../Arm/StandaloneMmCoreEntryPoint.c | 69 +++++++++++-------- .../StandaloneMmCoreEntryPoint.inf | 2 +- 4 files changed, 67 insertions(+), 64 deletions(-) diff --git a/StandaloneMmPkg/Include/Library/Arm/StandaloneMmCoreEntryPoint.h b/StandaloneMmPkg/Include/Library/Arm/StandaloneMmCoreEntryPoint.h index 41bf0f132b4f..dbb81610ff8e 100644 --- a/StandaloneMmPkg/Include/Library/Arm/StandaloneMmCoreEntryPoint.h +++ b/StandaloneMmPkg/Include/Library/Arm/StandaloneMmCoreEntryPoint.h @@ -10,6 +10,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #ifndef __STANDALONEMMCORE_ENTRY_POINT_H__ #define __STANDALONEMMCORE_ENTRY_POINT_H__ +#include <StandaloneMmCpu.h> #include <Library/PeCoffLib.h> #include <Library/FvLib.h> @@ -47,18 +48,6 @@ typedef struct { EFI_SECURE_PARTITION_CPU_INFO *CpuInfo; } EFI_SECURE_PARTITION_BOOT_INFO; -typedef -EFI_STATUS -(*PI_MM_ARM_TF_CPU_DRIVER_ENTRYPOINT) ( - IN UINTN EventId, - IN UINTN CpuNumber, - IN UINTN NsCommBufferAddr - ); - -typedef struct { - PI_MM_ARM_TF_CPU_DRIVER_ENTRYPOINT *ArmTfCpuDriverEpPtr; -} ARM_TF_CPU_DRIVER_EP_DESCRIPTOR; - typedef RETURN_STATUS (*REGION_PERMISSION_UPDATE_FUNC) ( IN EFI_PHYSICAL_ADDRESS BaseAddress, IN UINT64 Length @@ -145,8 +134,8 @@ LocateStandaloneMmCorePeCoffData ( VOID * EFIAPI CreateHobListFromBootInfo ( - IN OUT PI_MM_ARM_TF_CPU_DRIVER_ENTRYPOINT *CpuDriverEntryPoint, - IN EFI_SECURE_PARTITION_BOOT_INFO *PayloadBootInfo + IN OUT PI_MM_CPU_DRIVER_ENTRYPOINT *CpuDriverEntryPoint, + IN EFI_SECURE_PARTITION_BOOT_INFO *PayloadBootInfo ); /** diff --git a/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/CreateHobList.c b/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/CreateHobList.c index 2ac2d354f06a..80ed532352af 100644 --- a/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/CreateHobList.c +++ b/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/CreateHobList.c @@ -13,6 +13,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include <Guid/MmramMemoryReserve.h> #include <Guid/MpInformation.h> +#include <StandaloneMmCpu.h> #include <Library/Arm/StandaloneMmCoreEntryPoint.h> #include <Library/ArmMmuLib.h> #include <Library/ArmSvcLib.h> @@ -39,7 +40,7 @@ extern EFI_GUID gEfiStandaloneMmNonSecureBufferGuid; // GUID to identify HOB where the entry point of the CPU driver will be // populated to allow this entry point driver to invoke it upon receipt of an // event -extern EFI_GUID gEfiArmTfCpuDriverEpDescriptorGuid; +extern EFI_GUID gEfiMmCpuDriverEpDescriptorGuid; /** Use the boot information passed by privileged firmware to populate a HOB list @@ -52,22 +53,22 @@ extern EFI_GUID gEfiArmTfCpuDriverEpDescriptorGuid; **/ VOID * CreateHobListFromBootInfo ( - IN OUT PI_MM_ARM_TF_CPU_DRIVER_ENTRYPOINT *CpuDriverEntryPoint, - IN EFI_SECURE_PARTITION_BOOT_INFO *PayloadBootInfo + IN OUT PI_MM_CPU_DRIVER_ENTRYPOINT *CpuDriverEntryPoint, + IN EFI_SECURE_PARTITION_BOOT_INFO *PayloadBootInfo ) { - EFI_HOB_HANDOFF_INFO_TABLE *HobStart; - EFI_RESOURCE_ATTRIBUTE_TYPE Attributes; - UINT32 Index; - UINT32 BufferSize; - UINT32 Flags; - EFI_MMRAM_HOB_DESCRIPTOR_BLOCK *MmramRangesHob; - EFI_MMRAM_DESCRIPTOR *MmramRanges; - EFI_MMRAM_DESCRIPTOR *NsCommBufMmramRange; - MP_INFORMATION_HOB_DATA *MpInformationHobData; - EFI_PROCESSOR_INFORMATION *ProcInfoBuffer; - EFI_SECURE_PARTITION_CPU_INFO *CpuInfo; - ARM_TF_CPU_DRIVER_EP_DESCRIPTOR *CpuDriverEntryPointDesc; + EFI_HOB_HANDOFF_INFO_TABLE *HobStart; + EFI_RESOURCE_ATTRIBUTE_TYPE Attributes; + UINT32 Index; + UINT32 BufferSize; + UINT32 Flags; + EFI_MMRAM_HOB_DESCRIPTOR_BLOCK *MmramRangesHob; + EFI_MMRAM_DESCRIPTOR *MmramRanges; + EFI_MMRAM_DESCRIPTOR *NsCommBufMmramRange; + MP_INFORMATION_HOB_DATA *MpInformationHobData; + EFI_PROCESSOR_INFORMATION *ProcInfoBuffer; + EFI_SECURE_PARTITION_CPU_INFO *CpuInfo; + MM_CPU_DRIVER_EP_DESCRIPTOR *CpuDriverEntryPointDesc; // Create a hoblist with a PHIT and EOH HobStart = HobConstructor ( @@ -144,13 +145,13 @@ CreateHobListFromBootInfo ( // Create a Guided HOB to enable the ARM TF CPU driver to share its entry // point and populate it with the address of the shared buffer - CpuDriverEntryPointDesc = (ARM_TF_CPU_DRIVER_EP_DESCRIPTOR *)BuildGuidHob ( - &gEfiArmTfCpuDriverEpDescriptorGuid, - sizeof (ARM_TF_CPU_DRIVER_EP_DESCRIPTOR) - ); + CpuDriverEntryPointDesc = (MM_CPU_DRIVER_EP_DESCRIPTOR *)BuildGuidHob ( + &gEfiMmCpuDriverEpDescriptorGuid, + sizeof (MM_CPU_DRIVER_EP_DESCRIPTOR) + ); - *CpuDriverEntryPoint = NULL; - CpuDriverEntryPointDesc->ArmTfCpuDriverEpPtr = CpuDriverEntryPoint; + *CpuDriverEntryPoint = NULL; + CpuDriverEntryPointDesc->MmCpuDriverEpPtr = CpuDriverEntryPoint; // Find the size of the GUIDed HOB with SRAM ranges BufferSize = sizeof (EFI_MMRAM_HOB_DESCRIPTOR_BLOCK); diff --git a/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/StandaloneMmCoreEntryPoint.c b/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/StandaloneMmCoreEntryPoint.c index 96de10405af8..70306be2495e 100644 --- a/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/StandaloneMmCoreEntryPoint.c +++ b/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/StandaloneMmCoreEntryPoint.c @@ -15,6 +15,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include <Guid/MmramMemoryReserve.h> #include <Guid/MpInformation.h> +#include <StandaloneMmCpu.h> #include <Library/ArmSvcLib.h> #include <Library/DebugLib.h> #include <Library/HobLib.h> @@ -41,7 +42,7 @@ STATIC CONST UINT32 mSpmMinorVerFfa = SPM_MINOR_VERSION_FFA; #define BOOT_PAYLOAD_VERSION 1 -PI_MM_ARM_TF_CPU_DRIVER_ENTRYPOINT CpuDriverEntryPoint = NULL; +PI_MM_CPU_DRIVER_ENTRYPOINT CpuDriverEntryPoint = NULL; /** Retrieve a pointer to and print the boot information passed by privileged @@ -140,34 +141,46 @@ DelegatedEventLoop ( DEBUG ((DEBUG_INFO, "X6 : 0x%x\n", (UINT32)EventCompleteSvcArgs->Arg6)); DEBUG ((DEBUG_INFO, "X7 : 0x%x\n", (UINT32)EventCompleteSvcArgs->Arg7)); - FfaEnabled = FeaturePcdGet (PcdFfaEnable); - if (FfaEnabled) { - Status = CpuDriverEntryPoint ( - EventCompleteSvcArgs->Arg0, - EventCompleteSvcArgs->Arg6, - EventCompleteSvcArgs->Arg3 - ); - if (EFI_ERROR (Status)) { - DEBUG (( - DEBUG_ERROR, - "Failed delegated event 0x%x, Status 0x%x\n", - EventCompleteSvcArgs->Arg3, - Status - )); - } + // + // ARM TF passes SMC FID of the MM_COMMUNICATE interface as the Event ID upon + // receipt of a synchronous MM request. Use the Event ID to distinguish + // between synchronous and asynchronous events. + // + if ((ARM_SMC_ID_MM_COMMUNICATE != (UINT32)EventCompleteSvcArgs->Arg0) && + (ARM_SVC_ID_FFA_MSG_SEND_DIRECT_REQ != (UINT32)EventCompleteSvcArgs->Arg0)) + { + DEBUG ((DEBUG_ERROR, "UnRecognized Event - 0x%x\n", (UINT32)EventCompleteSvcArgs->Arg0)); + Status = EFI_INVALID_PARAMETER; } else { - Status = CpuDriverEntryPoint ( - EventCompleteSvcArgs->Arg0, - EventCompleteSvcArgs->Arg3, - EventCompleteSvcArgs->Arg1 - ); - if (EFI_ERROR (Status)) { - DEBUG (( - DEBUG_ERROR, - "Failed delegated event 0x%x, Status 0x%x\n", - EventCompleteSvcArgs->Arg0, - Status - )); + FfaEnabled = FeaturePcdGet (PcdFfaEnable); + if (FfaEnabled) { + Status = CpuDriverEntryPoint ( + EventCompleteSvcArgs->Arg0, + EventCompleteSvcArgs->Arg6, + EventCompleteSvcArgs->Arg3 + ); + if (EFI_ERROR (Status)) { + DEBUG (( + DEBUG_ERROR, + "Failed delegated event 0x%x, Status 0x%x\n", + EventCompleteSvcArgs->Arg3, + Status + )); + } + } else { + Status = CpuDriverEntryPoint ( + EventCompleteSvcArgs->Arg0, + EventCompleteSvcArgs->Arg3, + EventCompleteSvcArgs->Arg1 + ); + if (EFI_ERROR (Status)) { + DEBUG (( + DEBUG_ERROR, + "Failed delegated event 0x%x, Status 0x%x\n", + EventCompleteSvcArgs->Arg0, + Status + )); + } } } diff --git a/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/StandaloneMmCoreEntryPoint.inf b/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/StandaloneMmCoreEntryPoint.inf index 75cfb98c0e75..d41d7630b614 100644 --- a/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/StandaloneMmCoreEntryPoint.inf +++ b/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/StandaloneMmCoreEntryPoint.inf @@ -49,7 +49,7 @@ gMpInformationHobGuid gEfiMmPeiMmramMemoryReserveGuid gEfiStandaloneMmNonSecureBufferGuid - gEfiArmTfCpuDriverEpDescriptorGuid + gEfiMmCpuDriverEpDescriptorGuid [FeaturePcd.ARM, FeaturePcd.AARCH64] gArmTokenSpaceGuid.PcdFfaEnable -- 2.25.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#109179): https://edk2.groups.io/g/devel/message/109179 Mute This Topic: https://groups.io/mt/101646679/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=- ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [edk2-devel] [PATCH v3 2/2] StandaloneMmPkg: Arm: Update to use the new StandaloneMmCpu driver 2023-09-28 21:14 ` [edk2-devel] [PATCH v3 2/2] StandaloneMmPkg: Arm: Update to use the new StandaloneMmCpu driver Tuan Phan @ 2023-10-05 11:11 ` Sami Mujawar 2023-10-18 21:25 ` Tuan Phan 0 siblings, 1 reply; 6+ messages in thread From: Sami Mujawar @ 2023-10-05 11:11 UTC (permalink / raw) To: Tuan Phan, devel Cc: ardb+tianocore, ray.ni, huangming, sunilvl, yong.li, yeoreum.yun, nd@arm.com Hi Tuan, Thank you for this patch. These changes look good to me. Reviewed-by: Sami Mujawar <sami.mujawar@arm.com> Regards, Sami Mujawar On 28/09/2023 10:14 pm, Tuan Phan wrote: > Update entry point library for Arm to use the new architecture independent > StandaloneMmCpu driver. > > Signed-off-by: Tuan Phan <tphan@ventanamicro.com> > Reviewed-by: levi.yun <yeoreum.yun@arm.com> > --- > .../Library/Arm/StandaloneMmCoreEntryPoint.h | 17 +---- > .../Arm/CreateHobList.c | 43 ++++++------ > .../Arm/StandaloneMmCoreEntryPoint.c | 69 +++++++++++-------- > .../StandaloneMmCoreEntryPoint.inf | 2 +- > 4 files changed, 67 insertions(+), 64 deletions(-) > > diff --git a/StandaloneMmPkg/Include/Library/Arm/StandaloneMmCoreEntryPoint.h b/StandaloneMmPkg/Include/Library/Arm/StandaloneMmCoreEntryPoint.h > index 41bf0f132b4f..dbb81610ff8e 100644 > --- a/StandaloneMmPkg/Include/Library/Arm/StandaloneMmCoreEntryPoint.h > +++ b/StandaloneMmPkg/Include/Library/Arm/StandaloneMmCoreEntryPoint.h > @@ -10,6 +10,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent > #ifndef __STANDALONEMMCORE_ENTRY_POINT_H__ > > #define __STANDALONEMMCORE_ENTRY_POINT_H__ > > > > +#include <StandaloneMmCpu.h> > > #include <Library/PeCoffLib.h> > > #include <Library/FvLib.h> > > > > @@ -47,18 +48,6 @@ typedef struct { > EFI_SECURE_PARTITION_CPU_INFO *CpuInfo; > > } EFI_SECURE_PARTITION_BOOT_INFO; > > > > -typedef > > -EFI_STATUS > > -(*PI_MM_ARM_TF_CPU_DRIVER_ENTRYPOINT) ( > > - IN UINTN EventId, > > - IN UINTN CpuNumber, > > - IN UINTN NsCommBufferAddr > > - ); > > - > > -typedef struct { > > - PI_MM_ARM_TF_CPU_DRIVER_ENTRYPOINT *ArmTfCpuDriverEpPtr; > > -} ARM_TF_CPU_DRIVER_EP_DESCRIPTOR; > > - > > typedef RETURN_STATUS (*REGION_PERMISSION_UPDATE_FUNC) ( > > IN EFI_PHYSICAL_ADDRESS BaseAddress, > > IN UINT64 Length > > @@ -145,8 +134,8 @@ LocateStandaloneMmCorePeCoffData ( > VOID * > > EFIAPI > > CreateHobListFromBootInfo ( > > - IN OUT PI_MM_ARM_TF_CPU_DRIVER_ENTRYPOINT *CpuDriverEntryPoint, > > - IN EFI_SECURE_PARTITION_BOOT_INFO *PayloadBootInfo > > + IN OUT PI_MM_CPU_DRIVER_ENTRYPOINT *CpuDriverEntryPoint, > > + IN EFI_SECURE_PARTITION_BOOT_INFO *PayloadBootInfo > > ); > > > > /** > > diff --git a/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/CreateHobList.c b/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/CreateHobList.c > index 2ac2d354f06a..80ed532352af 100644 > --- a/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/CreateHobList.c > +++ b/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/CreateHobList.c > @@ -13,6 +13,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent > #include <Guid/MmramMemoryReserve.h> > > #include <Guid/MpInformation.h> > > > > +#include <StandaloneMmCpu.h> > > #include <Library/Arm/StandaloneMmCoreEntryPoint.h> > > #include <Library/ArmMmuLib.h> > > #include <Library/ArmSvcLib.h> > > @@ -39,7 +40,7 @@ extern EFI_GUID gEfiStandaloneMmNonSecureBufferGuid; > // GUID to identify HOB where the entry point of the CPU driver will be > > // populated to allow this entry point driver to invoke it upon receipt of an > > // event > > -extern EFI_GUID gEfiArmTfCpuDriverEpDescriptorGuid; > > +extern EFI_GUID gEfiMmCpuDriverEpDescriptorGuid; > > > > /** > > Use the boot information passed by privileged firmware to populate a HOB list > > @@ -52,22 +53,22 @@ extern EFI_GUID gEfiArmTfCpuDriverEpDescriptorGuid; > **/ > > VOID * > > CreateHobListFromBootInfo ( > > - IN OUT PI_MM_ARM_TF_CPU_DRIVER_ENTRYPOINT *CpuDriverEntryPoint, > > - IN EFI_SECURE_PARTITION_BOOT_INFO *PayloadBootInfo > > + IN OUT PI_MM_CPU_DRIVER_ENTRYPOINT *CpuDriverEntryPoint, > > + IN EFI_SECURE_PARTITION_BOOT_INFO *PayloadBootInfo > > ) > > { > > - EFI_HOB_HANDOFF_INFO_TABLE *HobStart; > > - EFI_RESOURCE_ATTRIBUTE_TYPE Attributes; > > - UINT32 Index; > > - UINT32 BufferSize; > > - UINT32 Flags; > > - EFI_MMRAM_HOB_DESCRIPTOR_BLOCK *MmramRangesHob; > > - EFI_MMRAM_DESCRIPTOR *MmramRanges; > > - EFI_MMRAM_DESCRIPTOR *NsCommBufMmramRange; > > - MP_INFORMATION_HOB_DATA *MpInformationHobData; > > - EFI_PROCESSOR_INFORMATION *ProcInfoBuffer; > > - EFI_SECURE_PARTITION_CPU_INFO *CpuInfo; > > - ARM_TF_CPU_DRIVER_EP_DESCRIPTOR *CpuDriverEntryPointDesc; > > + EFI_HOB_HANDOFF_INFO_TABLE *HobStart; > > + EFI_RESOURCE_ATTRIBUTE_TYPE Attributes; > > + UINT32 Index; > > + UINT32 BufferSize; > > + UINT32 Flags; > > + EFI_MMRAM_HOB_DESCRIPTOR_BLOCK *MmramRangesHob; > > + EFI_MMRAM_DESCRIPTOR *MmramRanges; > > + EFI_MMRAM_DESCRIPTOR *NsCommBufMmramRange; > > + MP_INFORMATION_HOB_DATA *MpInformationHobData; > > + EFI_PROCESSOR_INFORMATION *ProcInfoBuffer; > > + EFI_SECURE_PARTITION_CPU_INFO *CpuInfo; > > + MM_CPU_DRIVER_EP_DESCRIPTOR *CpuDriverEntryPointDesc; > > > > // Create a hoblist with a PHIT and EOH > > HobStart = HobConstructor ( > > @@ -144,13 +145,13 @@ CreateHobListFromBootInfo ( > > > // Create a Guided HOB to enable the ARM TF CPU driver to share its entry > > // point and populate it with the address of the shared buffer > > - CpuDriverEntryPointDesc = (ARM_TF_CPU_DRIVER_EP_DESCRIPTOR *)BuildGuidHob ( > > - &gEfiArmTfCpuDriverEpDescriptorGuid, > > - sizeof (ARM_TF_CPU_DRIVER_EP_DESCRIPTOR) > > - ); > > + CpuDriverEntryPointDesc = (MM_CPU_DRIVER_EP_DESCRIPTOR *)BuildGuidHob ( > > + &gEfiMmCpuDriverEpDescriptorGuid, > > + sizeof (MM_CPU_DRIVER_EP_DESCRIPTOR) > > + ); > > > > - *CpuDriverEntryPoint = NULL; > > - CpuDriverEntryPointDesc->ArmTfCpuDriverEpPtr = CpuDriverEntryPoint; > > + *CpuDriverEntryPoint = NULL; > > + CpuDriverEntryPointDesc->MmCpuDriverEpPtr = CpuDriverEntryPoint; > > > > // Find the size of the GUIDed HOB with SRAM ranges > > BufferSize = sizeof (EFI_MMRAM_HOB_DESCRIPTOR_BLOCK); > > diff --git a/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/StandaloneMmCoreEntryPoint.c b/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/StandaloneMmCoreEntryPoint.c > index 96de10405af8..70306be2495e 100644 > --- a/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/StandaloneMmCoreEntryPoint.c > +++ b/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/StandaloneMmCoreEntryPoint.c > @@ -15,6 +15,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent > #include <Guid/MmramMemoryReserve.h> > > #include <Guid/MpInformation.h> > > > > +#include <StandaloneMmCpu.h> > > #include <Library/ArmSvcLib.h> > > #include <Library/DebugLib.h> > > #include <Library/HobLib.h> > > @@ -41,7 +42,7 @@ STATIC CONST UINT32 mSpmMinorVerFfa = SPM_MINOR_VERSION_FFA; > > > #define BOOT_PAYLOAD_VERSION 1 > > > > -PI_MM_ARM_TF_CPU_DRIVER_ENTRYPOINT CpuDriverEntryPoint = NULL; > > +PI_MM_CPU_DRIVER_ENTRYPOINT CpuDriverEntryPoint = NULL; > > > > /** > > Retrieve a pointer to and print the boot information passed by privileged > > @@ -140,34 +141,46 @@ DelegatedEventLoop ( > DEBUG ((DEBUG_INFO, "X6 : 0x%x\n", (UINT32)EventCompleteSvcArgs->Arg6)); > > DEBUG ((DEBUG_INFO, "X7 : 0x%x\n", (UINT32)EventCompleteSvcArgs->Arg7)); > > > > - FfaEnabled = FeaturePcdGet (PcdFfaEnable); > > - if (FfaEnabled) { > > - Status = CpuDriverEntryPoint ( > > - EventCompleteSvcArgs->Arg0, > > - EventCompleteSvcArgs->Arg6, > > - EventCompleteSvcArgs->Arg3 > > - ); > > - if (EFI_ERROR (Status)) { > > - DEBUG (( > > - DEBUG_ERROR, > > - "Failed delegated event 0x%x, Status 0x%x\n", > > - EventCompleteSvcArgs->Arg3, > > - Status > > - )); > > - } > > + // > > + // ARM TF passes SMC FID of the MM_COMMUNICATE interface as the Event ID upon > > + // receipt of a synchronous MM request. Use the Event ID to distinguish > > + // between synchronous and asynchronous events. > > + // > > + if ((ARM_SMC_ID_MM_COMMUNICATE != (UINT32)EventCompleteSvcArgs->Arg0) && > > + (ARM_SVC_ID_FFA_MSG_SEND_DIRECT_REQ != (UINT32)EventCompleteSvcArgs->Arg0)) > > + { > > + DEBUG ((DEBUG_ERROR, "UnRecognized Event - 0x%x\n", (UINT32)EventCompleteSvcArgs->Arg0)); > > + Status = EFI_INVALID_PARAMETER; > > } else { > > - Status = CpuDriverEntryPoint ( > > - EventCompleteSvcArgs->Arg0, > > - EventCompleteSvcArgs->Arg3, > > - EventCompleteSvcArgs->Arg1 > > - ); > > - if (EFI_ERROR (Status)) { > > - DEBUG (( > > - DEBUG_ERROR, > > - "Failed delegated event 0x%x, Status 0x%x\n", > > - EventCompleteSvcArgs->Arg0, > > - Status > > - )); > > + FfaEnabled = FeaturePcdGet (PcdFfaEnable); > > + if (FfaEnabled) { > > + Status = CpuDriverEntryPoint ( > > + EventCompleteSvcArgs->Arg0, > > + EventCompleteSvcArgs->Arg6, > > + EventCompleteSvcArgs->Arg3 > > + ); > > + if (EFI_ERROR (Status)) { > > + DEBUG (( > > + DEBUG_ERROR, > > + "Failed delegated event 0x%x, Status 0x%x\n", > > + EventCompleteSvcArgs->Arg3, > > + Status > > + )); > > + } > > + } else { > > + Status = CpuDriverEntryPoint ( > > + EventCompleteSvcArgs->Arg0, > > + EventCompleteSvcArgs->Arg3, > > + EventCompleteSvcArgs->Arg1 > > + ); > > + if (EFI_ERROR (Status)) { > > + DEBUG (( > > + DEBUG_ERROR, > > + "Failed delegated event 0x%x, Status 0x%x\n", > > + EventCompleteSvcArgs->Arg0, > > + Status > > + )); > > + } > > } > > } > > > > diff --git a/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/StandaloneMmCoreEntryPoint.inf b/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/StandaloneMmCoreEntryPoint.inf > index 75cfb98c0e75..d41d7630b614 100644 > --- a/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/StandaloneMmCoreEntryPoint.inf > +++ b/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/StandaloneMmCoreEntryPoint.inf > @@ -49,7 +49,7 @@ > gMpInformationHobGuid > > gEfiMmPeiMmramMemoryReserveGuid > > gEfiStandaloneMmNonSecureBufferGuid > > - gEfiArmTfCpuDriverEpDescriptorGuid > > + gEfiMmCpuDriverEpDescriptorGuid > > > > [FeaturePcd.ARM, FeaturePcd.AARCH64] > > gArmTokenSpaceGuid.PcdFfaEnable > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#109351): https://edk2.groups.io/g/devel/message/109351 Mute This Topic: https://groups.io/mt/101646679/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=- ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [edk2-devel] [PATCH v3 2/2] StandaloneMmPkg: Arm: Update to use the new StandaloneMmCpu driver 2023-10-05 11:11 ` Sami Mujawar @ 2023-10-18 21:25 ` Tuan Phan 0 siblings, 0 replies; 6+ messages in thread From: Tuan Phan @ 2023-10-18 21:25 UTC (permalink / raw) To: Sami Mujawar, devel@edk2.groups.io Cc: ardb+tianocore@kernel.org, ray.ni@intel.com, huangming@linux.alibaba.com, sunilvl@ventanamicro.com, yong.li@intel.com, yeoreum.yun@arm.com, nd@arm.com [-- Attachment #1: Type: text/plain, Size: 12792 bytes --] Hi Sami, Not sure if you can merge this series or let me know who can do it. Thanks, From: Sami Mujawar <sami.mujawar@arm.com> Date: Thursday, October 5, 2023 at 4:12 AM To: Tuan Phan <tphan@ventanamicro.com>, devel@edk2.groups.io <devel@edk2.groups.io> Cc: ardb+tianocore@kernel.org <ardb+tianocore@kernel.org>, ray.ni@intel.com <ray.ni@intel.com>, huangming@linux.alibaba.com <huangming@linux.alibaba.com>, sunilvl@ventanamicro.com <sunilvl@ventanamicro.com>, yong.li@intel.com <yong.li@intel.com>, yeoreum.yun@arm.com <yeoreum.yun@arm.com>, nd@arm.com <nd@arm.com> Subject: Re: [PATCH v3 2/2] StandaloneMmPkg: Arm: Update to use the new StandaloneMmCpu driver Hi Tuan, Thank you for this patch. These changes look good to me. Reviewed-by: Sami Mujawar <sami.mujawar@arm.com> Regards, Sami Mujawar On 28/09/2023 10:14 pm, Tuan Phan wrote: > Update entry point library for Arm to use the new architecture independent > StandaloneMmCpu driver. > > Signed-off-by: Tuan Phan <tphan@ventanamicro.com> > Reviewed-by: levi.yun <yeoreum.yun@arm.com> > --- > .../Library/Arm/StandaloneMmCoreEntryPoint.h | 17 +---- > .../Arm/CreateHobList.c | 43 ++++++------ > .../Arm/StandaloneMmCoreEntryPoint.c | 69 +++++++++++-------- > .../StandaloneMmCoreEntryPoint.inf | 2 +- > 4 files changed, 67 insertions(+), 64 deletions(-) > > diff --git a/StandaloneMmPkg/Include/Library/Arm/StandaloneMmCoreEntryPoint.h b/StandaloneMmPkg/Include/Library/Arm/StandaloneMmCoreEntryPoint.h > index 41bf0f132b4f..dbb81610ff8e 100644 > --- a/StandaloneMmPkg/Include/Library/Arm/StandaloneMmCoreEntryPoint.h > +++ b/StandaloneMmPkg/Include/Library/Arm/StandaloneMmCoreEntryPoint.h > @@ -10,6 +10,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent > #ifndef __STANDALONEMMCORE_ENTRY_POINT_H__ > > #define __STANDALONEMMCORE_ENTRY_POINT_H__ > > > > +#include <StandaloneMmCpu.h> > > #include <Library/PeCoffLib.h> > > #include <Library/FvLib.h> > > > > @@ -47,18 +48,6 @@ typedef struct { > EFI_SECURE_PARTITION_CPU_INFO *CpuInfo; > > } EFI_SECURE_PARTITION_BOOT_INFO; > > > > -typedef > > -EFI_STATUS > > -(*PI_MM_ARM_TF_CPU_DRIVER_ENTRYPOINT) ( > > - IN UINTN EventId, > > - IN UINTN CpuNumber, > > - IN UINTN NsCommBufferAddr > > - ); > > - > > -typedef struct { > > - PI_MM_ARM_TF_CPU_DRIVER_ENTRYPOINT *ArmTfCpuDriverEpPtr; > > -} ARM_TF_CPU_DRIVER_EP_DESCRIPTOR; > > - > > typedef RETURN_STATUS (*REGION_PERMISSION_UPDATE_FUNC) ( > > IN EFI_PHYSICAL_ADDRESS BaseAddress, > > IN UINT64 Length > > @@ -145,8 +134,8 @@ LocateStandaloneMmCorePeCoffData ( > VOID * > > EFIAPI > > CreateHobListFromBootInfo ( > > - IN OUT PI_MM_ARM_TF_CPU_DRIVER_ENTRYPOINT *CpuDriverEntryPoint, > > - IN EFI_SECURE_PARTITION_BOOT_INFO *PayloadBootInfo > > + IN OUT PI_MM_CPU_DRIVER_ENTRYPOINT *CpuDriverEntryPoint, > > + IN EFI_SECURE_PARTITION_BOOT_INFO *PayloadBootInfo > > ); > > > > /** > > diff --git a/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/CreateHobList.c b/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/CreateHobList.c > index 2ac2d354f06a..80ed532352af 100644 > --- a/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/CreateHobList.c > +++ b/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/CreateHobList.c > @@ -13,6 +13,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent > #include <Guid/MmramMemoryReserve.h> > > #include <Guid/MpInformation.h> > > > > +#include <StandaloneMmCpu.h> > > #include <Library/Arm/StandaloneMmCoreEntryPoint.h> > > #include <Library/ArmMmuLib.h> > > #include <Library/ArmSvcLib.h> > > @@ -39,7 +40,7 @@ extern EFI_GUID gEfiStandaloneMmNonSecureBufferGuid; > // GUID to identify HOB where the entry point of the CPU driver will be > > // populated to allow this entry point driver to invoke it upon receipt of an > > // event > > -extern EFI_GUID gEfiArmTfCpuDriverEpDescriptorGuid; > > +extern EFI_GUID gEfiMmCpuDriverEpDescriptorGuid; > > > > /** > > Use the boot information passed by privileged firmware to populate a HOB list > > @@ -52,22 +53,22 @@ extern EFI_GUID gEfiArmTfCpuDriverEpDescriptorGuid; > **/ > > VOID * > > CreateHobListFromBootInfo ( > > - IN OUT PI_MM_ARM_TF_CPU_DRIVER_ENTRYPOINT *CpuDriverEntryPoint, > > - IN EFI_SECURE_PARTITION_BOOT_INFO *PayloadBootInfo > > + IN OUT PI_MM_CPU_DRIVER_ENTRYPOINT *CpuDriverEntryPoint, > > + IN EFI_SECURE_PARTITION_BOOT_INFO *PayloadBootInfo > > ) > > { > > - EFI_HOB_HANDOFF_INFO_TABLE *HobStart; > > - EFI_RESOURCE_ATTRIBUTE_TYPE Attributes; > > - UINT32 Index; > > - UINT32 BufferSize; > > - UINT32 Flags; > > - EFI_MMRAM_HOB_DESCRIPTOR_BLOCK *MmramRangesHob; > > - EFI_MMRAM_DESCRIPTOR *MmramRanges; > > - EFI_MMRAM_DESCRIPTOR *NsCommBufMmramRange; > > - MP_INFORMATION_HOB_DATA *MpInformationHobData; > > - EFI_PROCESSOR_INFORMATION *ProcInfoBuffer; > > - EFI_SECURE_PARTITION_CPU_INFO *CpuInfo; > > - ARM_TF_CPU_DRIVER_EP_DESCRIPTOR *CpuDriverEntryPointDesc; > > + EFI_HOB_HANDOFF_INFO_TABLE *HobStart; > > + EFI_RESOURCE_ATTRIBUTE_TYPE Attributes; > > + UINT32 Index; > > + UINT32 BufferSize; > > + UINT32 Flags; > > + EFI_MMRAM_HOB_DESCRIPTOR_BLOCK *MmramRangesHob; > > + EFI_MMRAM_DESCRIPTOR *MmramRanges; > > + EFI_MMRAM_DESCRIPTOR *NsCommBufMmramRange; > > + MP_INFORMATION_HOB_DATA *MpInformationHobData; > > + EFI_PROCESSOR_INFORMATION *ProcInfoBuffer; > > + EFI_SECURE_PARTITION_CPU_INFO *CpuInfo; > > + MM_CPU_DRIVER_EP_DESCRIPTOR *CpuDriverEntryPointDesc; > > > > // Create a hoblist with a PHIT and EOH > > HobStart = HobConstructor ( > > @@ -144,13 +145,13 @@ CreateHobListFromBootInfo ( > > > // Create a Guided HOB to enable the ARM TF CPU driver to share its entry > > // point and populate it with the address of the shared buffer > > - CpuDriverEntryPointDesc = (ARM_TF_CPU_DRIVER_EP_DESCRIPTOR *)BuildGuidHob ( > > - &gEfiArmTfCpuDriverEpDescriptorGuid, > > - sizeof (ARM_TF_CPU_DRIVER_EP_DESCRIPTOR) > > - ); > > + CpuDriverEntryPointDesc = (MM_CPU_DRIVER_EP_DESCRIPTOR *)BuildGuidHob ( > > + &gEfiMmCpuDriverEpDescriptorGuid, > > + sizeof (MM_CPU_DRIVER_EP_DESCRIPTOR) > > + ); > > > > - *CpuDriverEntryPoint = NULL; > > - CpuDriverEntryPointDesc->ArmTfCpuDriverEpPtr = CpuDriverEntryPoint; > > + *CpuDriverEntryPoint = NULL; > > + CpuDriverEntryPointDesc->MmCpuDriverEpPtr = CpuDriverEntryPoint; > > > > // Find the size of the GUIDed HOB with SRAM ranges > > BufferSize = sizeof (EFI_MMRAM_HOB_DESCRIPTOR_BLOCK); > > diff --git a/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/StandaloneMmCoreEntryPoint.c b/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/StandaloneMmCoreEntryPoint.c > index 96de10405af8..70306be2495e 100644 > --- a/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/StandaloneMmCoreEntryPoint.c > +++ b/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/StandaloneMmCoreEntryPoint.c > @@ -15,6 +15,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent > #include <Guid/MmramMemoryReserve.h> > > #include <Guid/MpInformation.h> > > > > +#include <StandaloneMmCpu.h> > > #include <Library/ArmSvcLib.h> > > #include <Library/DebugLib.h> > > #include <Library/HobLib.h> > > @@ -41,7 +42,7 @@ STATIC CONST UINT32 mSpmMinorVerFfa = SPM_MINOR_VERSION_FFA; > > > #define BOOT_PAYLOAD_VERSION 1 > > > > -PI_MM_ARM_TF_CPU_DRIVER_ENTRYPOINT CpuDriverEntryPoint = NULL; > > +PI_MM_CPU_DRIVER_ENTRYPOINT CpuDriverEntryPoint = NULL; > > > > /** > > Retrieve a pointer to and print the boot information passed by privileged > > @@ -140,34 +141,46 @@ DelegatedEventLoop ( > DEBUG ((DEBUG_INFO, "X6 : 0x%x\n", (UINT32)EventCompleteSvcArgs->Arg6)); > > DEBUG ((DEBUG_INFO, "X7 : 0x%x\n", (UINT32)EventCompleteSvcArgs->Arg7)); > > > > - FfaEnabled = FeaturePcdGet (PcdFfaEnable); > > - if (FfaEnabled) { > > - Status = CpuDriverEntryPoint ( > > - EventCompleteSvcArgs->Arg0, > > - EventCompleteSvcArgs->Arg6, > > - EventCompleteSvcArgs->Arg3 > > - ); > > - if (EFI_ERROR (Status)) { > > - DEBUG (( > > - DEBUG_ERROR, > > - "Failed delegated event 0x%x, Status 0x%x\n", > > - EventCompleteSvcArgs->Arg3, > > - Status > > - )); > > - } > > + // > > + // ARM TF passes SMC FID of the MM_COMMUNICATE interface as the Event ID upon > > + // receipt of a synchronous MM request. Use the Event ID to distinguish > > + // between synchronous and asynchronous events. > > + // > > + if ((ARM_SMC_ID_MM_COMMUNICATE != (UINT32)EventCompleteSvcArgs->Arg0) && > > + (ARM_SVC_ID_FFA_MSG_SEND_DIRECT_REQ != (UINT32)EventCompleteSvcArgs->Arg0)) > > + { > > + DEBUG ((DEBUG_ERROR, "UnRecognized Event - 0x%x\n", (UINT32)EventCompleteSvcArgs->Arg0)); > > + Status = EFI_INVALID_PARAMETER; > > } else { > > - Status = CpuDriverEntryPoint ( > > - EventCompleteSvcArgs->Arg0, > > - EventCompleteSvcArgs->Arg3, > > - EventCompleteSvcArgs->Arg1 > > - ); > > - if (EFI_ERROR (Status)) { > > - DEBUG (( > > - DEBUG_ERROR, > > - "Failed delegated event 0x%x, Status 0x%x\n", > > - EventCompleteSvcArgs->Arg0, > > - Status > > - )); > > + FfaEnabled = FeaturePcdGet (PcdFfaEnable); > > + if (FfaEnabled) { > > + Status = CpuDriverEntryPoint ( > > + EventCompleteSvcArgs->Arg0, > > + EventCompleteSvcArgs->Arg6, > > + EventCompleteSvcArgs->Arg3 > > + ); > > + if (EFI_ERROR (Status)) { > > + DEBUG (( > > + DEBUG_ERROR, > > + "Failed delegated event 0x%x, Status 0x%x\n", > > + EventCompleteSvcArgs->Arg3, > > + Status > > + )); > > + } > > + } else { > > + Status = CpuDriverEntryPoint ( > > + EventCompleteSvcArgs->Arg0, > > + EventCompleteSvcArgs->Arg3, > > + EventCompleteSvcArgs->Arg1 > > + ); > > + if (EFI_ERROR (Status)) { > > + DEBUG (( > > + DEBUG_ERROR, > > + "Failed delegated event 0x%x, Status 0x%x\n", > > + EventCompleteSvcArgs->Arg0, > > + Status > > + )); > > + } > > } > > } > > > > diff --git a/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/StandaloneMmCoreEntryPoint.inf b/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/StandaloneMmCoreEntryPoint.inf > index 75cfb98c0e75..d41d7630b614 100644 > --- a/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/StandaloneMmCoreEntryPoint.inf > +++ b/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/StandaloneMmCoreEntryPoint.inf > @@ -49,7 +49,7 @@ > gMpInformationHobGuid > > gEfiMmPeiMmramMemoryReserveGuid > > gEfiStandaloneMmNonSecureBufferGuid > > - gEfiArmTfCpuDriverEpDescriptorGuid > > + gEfiMmCpuDriverEpDescriptorGuid > > > > [FeaturePcd.ARM, FeaturePcd.AARCH64] > > gArmTokenSpaceGuid.PcdFfaEnable > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#109769): https://edk2.groups.io/g/devel/message/109769 Mute This Topic: https://groups.io/mt/101646679/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=- [-- Attachment #2: Type: text/html, Size: 26540 bytes --] ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [edk2-devel] [PATCH v3 0/2] Make StandaloneMmCpu architecture independent 2023-09-28 21:14 [edk2-devel] [PATCH v3 0/2] Make StandaloneMmCpu architecture independent Tuan Phan 2023-09-28 21:14 ` [edk2-devel] [PATCH v3 1/2] StandaloneMmPkg: Make StandaloneMmCpu driver " Tuan Phan 2023-09-28 21:14 ` [edk2-devel] [PATCH v3 2/2] StandaloneMmPkg: Arm: Update to use the new StandaloneMmCpu driver Tuan Phan @ 2024-02-27 12:58 ` Sami Mujawar 2 siblings, 0 replies; 6+ messages in thread From: Sami Mujawar @ 2024-02-27 12:58 UTC (permalink / raw) To: Tuan Phan, devel [-- Attachment #1: Type: text/plain, Size: 471 bytes --] Apologies for the delay. Merged as 74b5309da9fb..ba9c3ceaf83d Thanks. Regards, Sami Mujawar -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#116042): https://edk2.groups.io/g/devel/message/116042 Mute This Topic: https://groups.io/mt/101646675/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=- [-- Attachment #2: Type: text/html, Size: 915 bytes --] ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2024-02-27 12:58 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-09-28 21:14 [edk2-devel] [PATCH v3 0/2] Make StandaloneMmCpu architecture independent Tuan Phan 2023-09-28 21:14 ` [edk2-devel] [PATCH v3 1/2] StandaloneMmPkg: Make StandaloneMmCpu driver " Tuan Phan 2023-09-28 21:14 ` [edk2-devel] [PATCH v3 2/2] StandaloneMmPkg: Arm: Update to use the new StandaloneMmCpu driver Tuan Phan 2023-10-05 11:11 ` Sami Mujawar 2023-10-18 21:25 ` Tuan Phan 2024-02-27 12:58 ` [edk2-devel] [PATCH v3 0/2] Make StandaloneMmCpu architecture independent Sami Mujawar
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox