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;
}