[edk2-devel] [PATCH v2 11/13] StandaloneMmMmuLib: Add option to use FF-A calls to set memory region's permissions
Sughosh Ganu
sughosh.ganu at linaro.org
Mon Dec 14 14:42:14 UTC 2020
From: Achin Gupta <achin.gupta at arm.com>
Allow setting memory region's permissions using either of the Firmware
Framework(FF-A) ABI transport or through the earlier used SVC calls.
Signed-off-by: Achin Gupta <achin.gupta at arm.com>
Co-developed-by: Sughosh Ganu <sughosh.ganu at linaro.org>
---
ArmPkg/Library/StandaloneMmMmuLib/AArch64/ArmMmuStandaloneMmLib.c | 78 +++++++++++++-------
1 file changed, 52 insertions(+), 26 deletions(-)
diff --git a/ArmPkg/Library/StandaloneMmMmuLib/AArch64/ArmMmuStandaloneMmLib.c b/ArmPkg/Library/StandaloneMmMmuLib/AArch64/ArmMmuStandaloneMmLib.c
index 893e291907..be63994920 100644
--- a/ArmPkg/Library/StandaloneMmMmuLib/AArch64/ArmMmuStandaloneMmLib.c
+++ b/ArmPkg/Library/StandaloneMmMmuLib/AArch64/ArmMmuStandaloneMmLib.c
@@ -97,45 +97,71 @@ RequestMemoryPermissionChange (
IN UINTN Permissions
)
{
+ BOOLEAN FfaEnabled;
EFI_STATUS Status;
ARM_SVC_ARGS ChangeMemoryPermissionsSvcArgs = {0};
- ChangeMemoryPermissionsSvcArgs.Arg0 = ARM_SVC_ID_SP_SET_MEM_ATTRIBUTES_AARCH64;
- ChangeMemoryPermissionsSvcArgs.Arg1 = BaseAddress;
- ChangeMemoryPermissionsSvcArgs.Arg2 = EFI_SIZE_TO_PAGES(Length);
- ChangeMemoryPermissionsSvcArgs.Arg3 = Permissions;
+ FfaEnabled = FeaturePcdGet (PcdFfaEnable);
+
+ if (FfaEnabled) {
+ ChangeMemoryPermissionsSvcArgs.Arg0 = ARM_SVC_ID_FFA_MSG_SEND_DIRECT_REQ_AARCH64;
+ ChangeMemoryPermissionsSvcArgs.Arg1 = ARM_FFA_DESTINATION_ENDPOINT_ID;
+ ChangeMemoryPermissionsSvcArgs.Arg2 = 0;
+ ChangeMemoryPermissionsSvcArgs.Arg3 = ARM_SVC_ID_SP_SET_MEM_ATTRIBUTES_AARCH64;
+ ChangeMemoryPermissionsSvcArgs.Arg4 = BaseAddress;
+ ChangeMemoryPermissionsSvcArgs.Arg5 = EFI_SIZE_TO_PAGES (Length);
+ ChangeMemoryPermissionsSvcArgs.Arg6 = Permissions;
+ } else {
+ ChangeMemoryPermissionsSvcArgs.Arg0 = ARM_SVC_ID_SP_SET_MEM_ATTRIBUTES_AARCH64;
+ ChangeMemoryPermissionsSvcArgs.Arg1 = BaseAddress;
+ ChangeMemoryPermissionsSvcArgs.Arg2 = EFI_SIZE_TO_PAGES (Length);
+ ChangeMemoryPermissionsSvcArgs.Arg3 = Permissions;
+ }
ArmCallSvc (&ChangeMemoryPermissionsSvcArgs);
- Status = ChangeMemoryPermissionsSvcArgs.Arg0;
+ if (FfaEnabled) {
+ Status = ChangeMemoryPermissionsSvcArgs.Arg3;
+
+ switch (Status) {
+ case ARM_FFA_SPM_RET_INVALID_PARAMETERS:
+ return EFI_INVALID_PARAMETER;
+
+ case ARM_FFA_SPM_RET_DENIED:
+ return EFI_NOT_READY;
+
+ case ARM_FFA_SPM_RET_NOT_SUPPORTED:
+ return EFI_UNSUPPORTED;
+
+ case ARM_FFA_SPM_RET_BUSY:
+ return EFI_NOT_READY;
- switch (Status) {
- case ARM_SVC_SPM_RET_SUCCESS:
- Status = EFI_SUCCESS;
- break;
+ case ARM_FFA_SPM_RET_ABORTED:
+ return EFI_ABORTED;
- case ARM_SVC_SPM_RET_NOT_SUPPORTED:
- Status = EFI_UNSUPPORTED;
- break;
+ default:
+ return EFI_SUCCESS;
+ }
+ } else {
+ Status = ChangeMemoryPermissionsSvcArgs.Arg0;
+ switch (Status) {
- case ARM_SVC_SPM_RET_INVALID_PARAMS:
- Status = EFI_INVALID_PARAMETER;
- break;
+ case ARM_SVC_SPM_RET_NOT_SUPPORTED:
+ return EFI_UNSUPPORTED;
- case ARM_SVC_SPM_RET_DENIED:
- Status = EFI_ACCESS_DENIED;
- break;
+ case ARM_SVC_SPM_RET_INVALID_PARAMS:
+ return EFI_INVALID_PARAMETER;
- case ARM_SVC_SPM_RET_NO_MEMORY:
- Status = EFI_BAD_BUFFER_SIZE;
- break;
+ case ARM_SVC_SPM_RET_DENIED:
+ return EFI_ACCESS_DENIED;
- default:
- Status = EFI_ACCESS_DENIED;
- ASSERT (0);
- }
+ case ARM_SVC_SPM_RET_NO_MEMORY:
+ return EFI_BAD_BUFFER_SIZE;
- return Status;
+ default:
+ return EFI_SUCCESS;
+ }
+ }
}
EFI_STATUS
--
2.17.1
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#68777): https://edk2.groups.io/g/devel/message/68777
Mute This Topic: https://groups.io/mt/78951511/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-
More information about the edk2-devel-archive
mailing list