diff --git a/ArmPkg/Include/IndustryStandard/ArmMmSvc.h b/ArmPkg/Include/IndustryStandard/ArmMmSvc.h index 11aa50e3ac..0745acbf16 100644 --- a/ArmPkg/Include/IndustryStandard/ArmMmSvc.h +++ b/ArmPkg/Include/IndustryStandard/ArmMmSvc.h @@ -1,6 +1,6 @@ /** @file * -* Copyright (c) 2012-2017, ARM Limited. All rights reserved. +* Copyright (c) 2012-2024, Arm Limited. All rights reserved. * * SPDX-License-Identifier: BSD-2-Clause-Patent * @@ -10,53 +10,64 @@ #define ARM_MM_SVC_H_ /* - * SVC IDs to allow the MM secure partition to initialise itself, handle + * SPM_MM FIDs to allow the secure partition to initialise itself, handle * delegated events and request the Secure partition manager to perform * privileged operations on its behalf. */ -#define ARM_SVC_ID_SPM_VERSION_AARCH32 0x84000060 -#define ARM_SVC_ID_SP_EVENT_COMPLETE_AARCH32 0x84000061 -#define ARM_SVC_ID_SP_GET_MEM_ATTRIBUTES_AARCH32 0x84000064 -#define ARM_SVC_ID_SP_SET_MEM_ATTRIBUTES_AARCH32 0x84000065 -#define ARM_SVC_ID_SP_EVENT_COMPLETE_AARCH64 0xC4000061 -#define ARM_SVC_ID_SP_GET_MEM_ATTRIBUTES_AARCH64 0xC4000064 -#define ARM_SVC_ID_SP_SET_MEM_ATTRIBUTES_AARCH64 0xC4000065 +#define ARM_FID_SPM_MM_VERSION_AARCH32 0x84000060 +#define ARM_FID_SPM_MM_SP_EVENT_COMPLETE_AARCH32 0x84000061 +#define ARM_FID_SPM_MM_SP_GET_MEM_ATTRIBUTES_AARCH32 0x84000064 +#define ARM_FID_SPM_MM_SP_SET_MEM_ATTRIBUTES_AARCH32 0x84000065 +#define ARM_FID_SPM_MM_SP_EVENT_COMPLETE_AARCH64 0xC4000061 +#define ARM_FID_SPM_MM_SP_GET_MEM_ATTRIBUTES_AARCH64 0xC4000064 +#define ARM_FID_SPM_MM_SP_SET_MEM_ATTRIBUTES_AARCH64 0xC4000065 /* Generic IDs when using AArch32 or AArch64 execution state */ #ifdef MDE_CPU_AARCH64 -#define ARM_SVC_ID_SP_EVENT_COMPLETE ARM_SVC_ID_SP_EVENT_COMPLETE_AARCH64 -#define ARM_SVC_ID_SP_GET_MEM_ATTRIBUTES ARM_SVC_ID_SP_GET_MEM_ATTRIBUTES_AARCH64 -#define ARM_SVC_ID_SP_SET_MEM_ATTRIBUTES ARM_SVC_ID_SP_SET_MEM_ATTRIBUTES_AARCH64 +#define ARM_FID_SPM_MM_SP_EVENT_COMPLETE ARM_FID_SPM_MM_SP_EVENT_COMPLETE_AARCH64 +#define ARM_FID_SPM_MM_SP_GET_MEM_ATTRIBUTES ARM_FID_SPM_MM_SP_GET_MEM_ATTRIBUTES_AARCH64 +#define ARM_FID_SPM_MM_SP_SET_MEM_ATTRIBUTES ARM_FID_SPM_MM_SP_SET_MEM_ATTRIBUTES_AARCH64 #endif #ifdef MDE_CPU_ARM -#define ARM_SVC_ID_SP_EVENT_COMPLETE ARM_SVC_ID_SP_EVENT_COMPLETE_AARCH32 -#define ARM_SVC_ID_SP_GET_MEM_ATTRIBUTES ARM_SVC_ID_SP_GET_MEM_ATTRIBUTES_AARCH32 -#define ARM_SVC_ID_SP_SET_MEM_ATTRIBUTES ARM_SVC_ID_SP_SET_MEM_ATTRIBUTES_AARCH32 +#define ARM_FID_SPM_MM_SP_EVENT_COMPLETE ARM_FID_SPM_MM_SP_EVENT_COMPLETE_AARCH32 +#define ARM_FID_SPM_MM_SP_GET_MEM_ATTRIBUTES ARM_FID_SPM_MM_SP_GET_MEM_ATTRIBUTES_AARCH32 +#define ARM_FID_SPM_MM_SP_SET_MEM_ATTRIBUTES ARM_FID_SPM_MM_SP_SET_MEM_ATTRIBUTES_AARCH32 #endif -#define SET_MEM_ATTR_DATA_PERM_MASK 0x3 -#define SET_MEM_ATTR_DATA_PERM_SHIFT 0 -#define SET_MEM_ATTR_DATA_PERM_NO_ACCESS 0 -#define SET_MEM_ATTR_DATA_PERM_RW 1 -#define SET_MEM_ATTR_DATA_PERM_RO 3 +#define ARM_SPM_MM_SET_MEM_ATTR_DATA_PERM_MASK 0x3 +#define ARM_SPM_MM_SET_MEM_ATTR_DATA_PERM_SHIFT 0 +#define ARM_SPM_MM_SET_MEM_ATTR_DATA_PERM_NO_ACCESS 0 +#define ARM_SPM_MM_SET_MEM_ATTR_DATA_PERM_RW 1 +#define ARM_SPM_MM_SET_MEM_ATTR_DATA_PERM_RO 3 -#define SET_MEM_ATTR_CODE_PERM_MASK 0x1 -#define SET_MEM_ATTR_CODE_PERM_SHIFT 2 -#define SET_MEM_ATTR_CODE_PERM_X 0 -#define SET_MEM_ATTR_CODE_PERM_XN 1 +#define ARM_SPM_MM_SET_MEM_ATTR_CODE_PERM_MASK 0x1 +#define ARM_SPM_MM_SET_MEM_ATTR_CODE_PERM_SHIFT 2 +#define ARM_SPM_MM_SET_MEM_ATTR_CODE_PERM_X 0 +#define ARM_SPM_MM_SET_MEM_ATTR_CODE_PERM_XN 1 -#define SET_MEM_ATTR_MAKE_PERM_REQUEST(d_perm, c_perm) \ - ((((c_perm) & SET_MEM_ATTR_CODE_PERM_MASK) << SET_MEM_ATTR_CODE_PERM_SHIFT) | \ - (( (d_perm) & SET_MEM_ATTR_DATA_PERM_MASK) << SET_MEM_ATTR_DATA_PERM_SHIFT)) +#define ARM_SPM_MM_SET_MEM_ATTR_MAKE_PERM_REQUEST(dataperm, codeperm) \ + ((((codeperm) & ARM_SPM_MM_SET_MEM_ATTR_CODE_PERM_MASK) << \ + ARM_SPM_MM_SET_MEM_ATTR_CODE_PERM_SHIFT) | \ + (( (dataperm) & ARM_SPM_MM_SET_MEM_ATTR_DATA_PERM_MASK) << \ + ARM_SPM_MM_SET_MEM_ATTR_DATA_PERM_SHIFT)) -/* MM SVC Return error codes */ -#define ARM_SVC_SPM_RET_SUCCESS 0 -#define ARM_SVC_SPM_RET_NOT_SUPPORTED -1 -#define ARM_SVC_SPM_RET_INVALID_PARAMS -2 -#define ARM_SVC_SPM_RET_DENIED -3 -#define ARM_SVC_SPM_RET_NO_MEMORY -5 +/* SPM_MM SVC Return error codes */ +#define ARM_SPM_MM_RET_SUCCESS 0 +#define ARM_SPM_MM_RET_NOT_SUPPORTED -1 +#define ARM_SPM_MM_RET_INVALID_PARAMS -2 +#define ARM_SPM_MM_RET_DENIED -3 +#define ARM_SPM_MM_RET_NO_MEMORY -5 -#define SPM_MAJOR_VERSION 0 -#define SPM_MINOR_VERSION 1 +#define ARM_SPM_MM_SUPPORT_MAJOR_VERSION 0 +#define ARM_SPM_MM_SUPPORT_MINOR_VERSION 1 +#define ARM_SPM_MM_VERSION_MASK 0xFFFF +#define ARM_SPM_MM_MAJOR_VERSION_SHIFT 16 +#define ARM_SPM_MM_MINOR_VERSION_SHIFT 0 + +#define ARM_SPM_MM_MAJOR_VERSION_GET(version) \ + (((version) >> ARM_SPM_MM_MAJOR_VERSION_SHIFT) & ARM_SPM_MM_VERSION_MASK) + +#define ARM_SPM_MM_MINOR_VERSION_GET(version) \ + (((version) >> ARM_SPM_MM_MINOR_VERSION_SHIFT) & ARM_SPM_MM_VERSION_MASK) #endif // ARM_MM_SVC_H_ diff --git a/ArmPkg/Library/StandaloneMmMmuLib/ArmMmuStandaloneMmLib.c b/ArmPkg/Library/StandaloneMmMmuLib/ArmMmuStandaloneMmLib.c index d55aff7620..a30273c011 100644 --- a/ArmPkg/Library/StandaloneMmMmuLib/ArmMmuStandaloneMmLib.c +++ b/ArmPkg/Library/StandaloneMmMmuLib/ArmMmuStandaloneMmLib.c @@ -1,7 +1,7 @@ /** @file File managing the MMU for ARMv8 architecture in S-EL0 - Copyright (c) 2017 - 2021, Arm Limited. All rights reserved.
+ Copyright (c) 2017 - 2024, Arm Limited. All rights reserved.
Copyright (c) 2021, Linaro Limited SPDX-License-Identifier: BSD-2-Clause-Patent @@ -107,16 +107,16 @@ SendMemoryPermissionRequest ( // See [1], Section 13.5.5.1 MM_SP_MEMORY_ATTRIBUTES_GET_AARCH64 and // Section 13.5.5.2 MM_SP_MEMORY_ATTRIBUTES_SET_AARCH64. switch (*RetVal) { - case ARM_SVC_SPM_RET_NOT_SUPPORTED: + case ARM_SPM_MM_RET_NOT_SUPPORTED: return EFI_UNSUPPORTED; - case ARM_SVC_SPM_RET_INVALID_PARAMS: + case ARM_SPM_MM_RET_INVALID_PARAMS: return EFI_INVALID_PARAMETER; - case ARM_SVC_SPM_RET_DENIED: + case ARM_SPM_MM_RET_DENIED: return EFI_ACCESS_DENIED; - case ARM_SVC_SPM_RET_NO_MEMORY: + case ARM_SPM_MM_RET_NO_MEMORY: return EFI_OUT_OF_RESOURCES; default: @@ -168,10 +168,10 @@ GetMemoryPermissions ( SvcArgs.Arg0 = ARM_SVC_ID_FFA_MSG_SEND_DIRECT_REQ; SvcArgs.Arg1 = ARM_FFA_DESTINATION_ENDPOINT_ID; SvcArgs.Arg2 = 0; - SvcArgs.Arg3 = ARM_SVC_ID_SP_GET_MEM_ATTRIBUTES; + SvcArgs.Arg3 = ARM_FID_SPM_MM_SP_GET_MEM_ATTRIBUTES; SvcArgs.Arg4 = BaseAddress; } else { - SvcArgs.Arg0 = ARM_SVC_ID_SP_GET_MEM_ATTRIBUTES; + SvcArgs.Arg0 = ARM_FID_SPM_MM_SP_GET_MEM_ATTRIBUTES; SvcArgs.Arg1 = BaseAddress; SvcArgs.Arg2 = 0; SvcArgs.Arg3 = 0; @@ -223,12 +223,12 @@ RequestMemoryPermissionChange ( SvcArgs.Arg0 = ARM_SVC_ID_FFA_MSG_SEND_DIRECT_REQ; SvcArgs.Arg1 = ARM_FFA_DESTINATION_ENDPOINT_ID; SvcArgs.Arg2 = 0; - SvcArgs.Arg3 = ARM_SVC_ID_SP_SET_MEM_ATTRIBUTES; + SvcArgs.Arg3 = ARM_FID_SPM_MM_SP_SET_MEM_ATTRIBUTES; SvcArgs.Arg4 = BaseAddress; SvcArgs.Arg5 = EFI_SIZE_TO_PAGES (Length); SvcArgs.Arg6 = Permissions; } else { - SvcArgs.Arg0 = ARM_SVC_ID_SP_SET_MEM_ATTRIBUTES; + SvcArgs.Arg0 = ARM_FID_SPM_MM_SP_SET_MEM_ATTRIBUTES; SvcArgs.Arg1 = BaseAddress; SvcArgs.Arg2 = EFI_SIZE_TO_PAGES (Length); SvcArgs.Arg3 = Permissions; @@ -249,7 +249,9 @@ ArmSetMemoryRegionNoExec ( Status = GetMemoryPermissions (BaseAddress, &MemoryAttributes); if (!EFI_ERROR (Status)) { - CodePermission = SET_MEM_ATTR_CODE_PERM_XN << SET_MEM_ATTR_CODE_PERM_SHIFT; + CodePermission = + (ARM_SPM_MM_SET_MEM_ATTR_CODE_PERM_XN << + ARM_SPM_MM_SET_MEM_ATTR_CODE_PERM_SHIFT); return RequestMemoryPermissionChange ( BaseAddress, Length, @@ -272,7 +274,9 @@ ArmClearMemoryRegionNoExec ( Status = GetMemoryPermissions (BaseAddress, &MemoryAttributes); if (!EFI_ERROR (Status)) { - CodePermission = SET_MEM_ATTR_CODE_PERM_XN << SET_MEM_ATTR_CODE_PERM_SHIFT; + CodePermission = + (ARM_SPM_MM_SET_MEM_ATTR_CODE_PERM_XN << + ARM_SPM_MM_SET_MEM_ATTR_CODE_PERM_SHIFT); return RequestMemoryPermissionChange ( BaseAddress, Length, @@ -295,7 +299,9 @@ ArmSetMemoryRegionReadOnly ( Status = GetMemoryPermissions (BaseAddress, &MemoryAttributes); if (!EFI_ERROR (Status)) { - DataPermission = SET_MEM_ATTR_DATA_PERM_RO << SET_MEM_ATTR_DATA_PERM_SHIFT; + DataPermission = + (ARM_SPM_MM_SET_MEM_ATTR_DATA_PERM_RO << + ARM_SPM_MM_SET_MEM_ATTR_DATA_PERM_SHIFT); return RequestMemoryPermissionChange ( BaseAddress, Length, @@ -318,8 +324,8 @@ ArmClearMemoryRegionReadOnly ( Status = GetMemoryPermissions (BaseAddress, &MemoryAttributes); if (!EFI_ERROR (Status)) { - PermissionRequest = SET_MEM_ATTR_MAKE_PERM_REQUEST ( - SET_MEM_ATTR_DATA_PERM_RW, + PermissionRequest = ARM_SPM_MM_SET_MEM_ATTR_MAKE_PERM_REQUEST ( + ARM_SPM_MM_SET_MEM_ATTR_DATA_PERM_RW, MemoryAttributes ); return RequestMemoryPermissionChange ( diff --git a/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/StandaloneMmCoreEntryPoint.c b/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/StandaloneMmCoreEntryPoint.c index 153cf91050..5a8626b297 100644 --- a/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/StandaloneMmCoreEntryPoint.c +++ b/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/StandaloneMmCoreEntryPoint.c @@ -128,7 +128,7 @@ GetAndPrintBootinformation ( @param [in] Status edk2 status code. - @retval ARM_SVC_SPM_RET_* return value correspond to EFI_STATUS. + @retval ARM_SPM_MM_RET_* return value correspond to EFI_STATUS. **/ STATIC @@ -140,15 +140,15 @@ EfiStatusToSpmMmStatus ( { switch (Status) { case EFI_SUCCESS: - return ARM_SVC_SPM_RET_SUCCESS; + return ARM_SPM_MM_RET_SUCCESS; case EFI_INVALID_PARAMETER: - return ARM_SVC_SPM_RET_INVALID_PARAMS; + return ARM_SPM_MM_RET_INVALID_PARAMS; case EFI_ACCESS_DENIED: - return ARM_SVC_SPM_RET_DENIED; + return ARM_SPM_MM_RET_DENIED; case EFI_OUT_OF_RESOURCES: - return ARM_SVC_SPM_RET_NO_MEMORY; + return ARM_SPM_MM_RET_NO_MEMORY; default: - return ARM_SVC_SPM_RET_NOT_SUPPORTED; + return ARM_SPM_MM_RET_NOT_SUPPORTED; } } @@ -207,10 +207,10 @@ SetEventCompleteSvcArgs ( EventCompleteSvcArgs->Arg0 = ARM_SVC_ID_FFA_MSG_SEND_DIRECT_RESP; EventCompleteSvcArgs->Arg1 = 0; EventCompleteSvcArgs->Arg2 = 0; - EventCompleteSvcArgs->Arg3 = ARM_SVC_ID_SP_EVENT_COMPLETE; + EventCompleteSvcArgs->Arg3 = ARM_FID_SPM_MM_SP_EVENT_COMPLETE; EventCompleteSvcArgs->Arg4 = EfiStatusToFfaStatus (Status); } else { - EventCompleteSvcArgs->Arg0 = ARM_SVC_ID_SP_EVENT_COMPLETE; + EventCompleteSvcArgs->Arg0 = ARM_FID_SPM_MM_SP_EVENT_COMPLETE; EventCompleteSvcArgs->Arg1 = EfiStatusToSpmMmStatus (Status); } } @@ -320,7 +320,7 @@ GetSpmVersion ( CallerSpmMajorVer = mSpmMajorVerFfa; CallerSpmMinorVer = mSpmMinorVerFfa; } else { - SpmVersionArgs.Arg0 = ARM_SVC_ID_SPM_VERSION_AARCH32; + SpmVersionArgs.Arg0 = ARM_FID_SPM_MM_VERSION_AARCH32; CallerSpmMajorVer = mSpmMajorVer; CallerSpmMinorVer = mSpmMinorVer; }