public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Sughosh Ganu" <sughosh.ganu@linaro.org>
To: devel@edk2.groups.io
Cc: Sami Mujawar <sami.mujawar@arm.com>,
	Ard Biesheuvel <ard.biesheuvel@arm.com>,
	Leif Lindholm <leif@nuviainc.com>,
	Sahil Malhotra <sahil.malhotra@linaro.org>,
	Achin Gupta <achin.gupta@arm.com>
Subject: [PATCH v2 10/13] StandaloneMmMmuLib: Add option to use FF-A calls to get memory region's permissions
Date: Mon, 14 Dec 2020 20:12:13 +0530	[thread overview]
Message-ID: <20201214144216.26328-11-sughosh.ganu@linaro.org> (raw)
In-Reply-To: <20201214144216.26328-1-sughosh.ganu@linaro.org>

From: Achin Gupta <achin.gupta@arm.com>

Allow getting 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@arm.com>
Co-developed-by: Sughosh Ganu <sughosh.ganu@linaro.org>
---
 ArmPkg/Library/StandaloneMmMmuLib/ArmMmuStandaloneMmLib.inf       |  3 +
 ArmPkg/Include/IndustryStandard/ArmFfaSvc.h                       | 18 ++++++
 ArmPkg/Library/StandaloneMmMmuLib/AArch64/ArmMmuStandaloneMmLib.c | 66 +++++++++++++++++---
 3 files changed, 78 insertions(+), 9 deletions(-)

diff --git a/ArmPkg/Library/StandaloneMmMmuLib/ArmMmuStandaloneMmLib.inf b/ArmPkg/Library/StandaloneMmMmuLib/ArmMmuStandaloneMmLib.inf
index 85973687f5..a29dd800b5 100644
--- a/ArmPkg/Library/StandaloneMmMmuLib/ArmMmuStandaloneMmLib.inf
+++ b/ArmPkg/Library/StandaloneMmMmuLib/ArmMmuStandaloneMmLib.inf
@@ -23,6 +23,9 @@
   ArmPkg/ArmPkg.dec
   MdePkg/MdePkg.dec
 
+[Pcd]
+  gArmTokenSpaceGuid.PcdFfaEnable
+
 [LibraryClasses]
   ArmLib
   CacheMaintenanceLib
diff --git a/ArmPkg/Include/IndustryStandard/ArmFfaSvc.h b/ArmPkg/Include/IndustryStandard/ArmFfaSvc.h
index bdf6ce4676..65b8343ade 100644
--- a/ArmPkg/Include/IndustryStandard/ArmFfaSvc.h
+++ b/ArmPkg/Include/IndustryStandard/ArmFfaSvc.h
@@ -23,4 +23,22 @@
 #define SPM_MAJOR_VERSION_FFA                           1
 #define SPM_MINOR_VERSION_FFA                           0
 
+#define ARM_FFA_SPM_RET_SUCCESS                          0
+#define ARM_FFA_SPM_RET_NOT_SUPPORTED                   -1
+#define ARM_FFA_SPM_RET_INVALID_PARAMETERS              -2
+#define ARM_FFA_SPM_RET_NO_MEMORY                       -3
+#define ARM_FFA_SPM_RET_BUSY                            -4
+#define ARM_FFA_SPM_RET_INTERRUPTED                     -5
+#define ARM_FFA_SPM_RET_DENIED                          -6
+#define ARM_FFA_SPM_RET_RETRY                           -7
+#define ARM_FFA_SPM_RET_ABORTED                         -8
+
+// For now, the destination id to be used in the FF-A calls
+// is being hard-coded. Subsequently, support will be added
+// to get the endpoint id's dynamically
+// This is the endpoint id used by the optee os's implementation
+// of the spmc.
+// https://github.com/OP-TEE/optee_os/blob/master/core/arch/arm/kernel/stmm_sp.c#L66
+#define ARM_FFA_DESTINATION_ENDPOINT_ID                  3
+
 #endif // ARM_FFA_SVC_H_
diff --git a/ArmPkg/Library/StandaloneMmMmuLib/AArch64/ArmMmuStandaloneMmLib.c b/ArmPkg/Library/StandaloneMmMmuLib/AArch64/ArmMmuStandaloneMmLib.c
index 362b1a0f8a..893e291907 100644
--- a/ArmPkg/Library/StandaloneMmMmuLib/AArch64/ArmMmuStandaloneMmLib.c
+++ b/ArmPkg/Library/StandaloneMmMmuLib/AArch64/ArmMmuStandaloneMmLib.c
@@ -16,6 +16,7 @@
 #include <Library/ArmSvcLib.h>
 #include <Library/BaseLib.h>
 #include <Library/DebugLib.h>
+#include <Library/PcdLib.h>
 
 STATIC
 EFI_STATUS
@@ -24,20 +25,67 @@ GetMemoryPermissions (
   OUT UINT32                    *MemoryAttributes
   )
 {
+  INT32         Ret;
   ARM_SVC_ARGS  GetMemoryPermissionsSvcArgs = {0};
-
-  GetMemoryPermissionsSvcArgs.Arg0 = ARM_SVC_ID_SP_GET_MEM_ATTRIBUTES_AARCH64;
-  GetMemoryPermissionsSvcArgs.Arg1 = BaseAddress;
-  GetMemoryPermissionsSvcArgs.Arg2 = 0;
-  GetMemoryPermissionsSvcArgs.Arg3 = 0;
+  BOOLEAN       FfaEnabled;
+
+  FfaEnabled = FeaturePcdGet (PcdFfaEnable);
+  if (FfaEnabled) {
+    GetMemoryPermissionsSvcArgs.Arg0 = ARM_SVC_ID_FFA_MSG_SEND_DIRECT_REQ_AARCH64;
+    GetMemoryPermissionsSvcArgs.Arg1 = ARM_FFA_DESTINATION_ENDPOINT_ID;
+    GetMemoryPermissionsSvcArgs.Arg2 = 0;
+    GetMemoryPermissionsSvcArgs.Arg3 = ARM_SVC_ID_SP_GET_MEM_ATTRIBUTES_AARCH64;
+    GetMemoryPermissionsSvcArgs.Arg4 = BaseAddress;
+  } else {
+    GetMemoryPermissionsSvcArgs.Arg0 = ARM_SVC_ID_SP_GET_MEM_ATTRIBUTES_AARCH64;
+    GetMemoryPermissionsSvcArgs.Arg1 = BaseAddress;
+    GetMemoryPermissionsSvcArgs.Arg2 = 0;
+    GetMemoryPermissionsSvcArgs.Arg3 = 0;
+  }
 
   ArmCallSvc (&GetMemoryPermissionsSvcArgs);
-  if (GetMemoryPermissionsSvcArgs.Arg0 == ARM_SVC_SPM_RET_INVALID_PARAMS) {
-    *MemoryAttributes = 0;
-    return EFI_INVALID_PARAMETER;
+  if (FfaEnabled) {
+    Ret = GetMemoryPermissionsSvcArgs.Arg3;
+
+    switch (Ret) {
+    case ARM_FFA_SPM_RET_INVALID_PARAMETERS:
+      *MemoryAttributes = 0;
+      return EFI_INVALID_PARAMETER;
+
+    case ARM_FFA_SPM_RET_DENIED:
+      *MemoryAttributes = 0;
+      return EFI_NOT_READY;
+
+    case ARM_FFA_SPM_RET_NOT_SUPPORTED:
+      *MemoryAttributes = 0;
+      return EFI_UNSUPPORTED;
+
+    case ARM_FFA_SPM_RET_BUSY:
+      *MemoryAttributes = 0;
+      return EFI_NOT_READY;
+
+    case ARM_FFA_SPM_RET_ABORTED:
+      *MemoryAttributes = 0;
+      return EFI_ABORTED;
+    }
+
+    *MemoryAttributes = GetMemoryPermissionsSvcArgs.Arg3;
+  } else {
+    Ret = GetMemoryPermissionsSvcArgs.Arg0;
+
+    switch (Ret) {
+    case ARM_SVC_SPM_RET_INVALID_PARAMS:
+      *MemoryAttributes = 0;
+      return EFI_INVALID_PARAMETER;
+
+    case ARM_SVC_SPM_RET_NOT_SUPPORTED:
+      *MemoryAttributes = 0;
+      return EFI_UNSUPPORTED;
+    }
+
+    *MemoryAttributes = GetMemoryPermissionsSvcArgs.Arg0;
   }
 
-  *MemoryAttributes = GetMemoryPermissionsSvcArgs.Arg0;
   return EFI_SUCCESS;
 }
 
-- 
2.17.1


  parent reply	other threads:[~2020-12-14 14:42 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-14 14:42 [PATCH v2 00/13] Add support for using FF-A calls Sughosh Ganu
2020-12-14 14:42 ` [PATCH v2 01/13] ArmPkg/IndustryStandard: Add barebones FF-A header Sughosh Ganu
2021-01-05 12:12   ` [edk2-devel] " Sami Mujawar
2020-12-14 14:42 ` [PATCH v2 02/13] ArmPkg/ArmSvcLib: Return x4-x7 in output parameters Sughosh Ganu
2021-01-05 12:16   ` [edk2-devel] " Sami Mujawar
2020-12-14 14:42 ` [PATCH v2 03/13] StandaloneMmPkg: Use FF-A header file in Standalone MM Core entry point Sughosh Ganu
2021-01-05 12:19   ` [edk2-devel] " Sami Mujawar
2020-12-14 14:42 ` [PATCH v2 04/13] ArmPkg: Introduce support for PcdFfaEnable Sughosh Ganu
2021-01-05 13:53   ` [edk2-devel] " Sami Mujawar
2020-12-14 14:42 ` [PATCH v2 05/13] StandaloneMmPkg: Add macros for SPM version Sughosh Ganu
2021-01-04 17:01   ` [edk2-devel] " Sami Mujawar
2020-12-14 14:42 ` [PATCH v2 06/13] StandaloneMmPkg: Add the SPM version for FF-A Sughosh Ganu
2021-01-05 13:58   ` [edk2-devel] " Sami Mujawar
2020-12-14 14:42 ` [PATCH v2 07/13] StandaloneMmPkg: Add option to use FF-A calls for getting SPM version Sughosh Ganu
2021-01-05 14:18   ` [edk2-devel] " Sami Mujawar
2020-12-14 14:42 ` [PATCH v2 08/13] StandaloneMmPkg: Add option to use FF-A calls for communication with SPM Sughosh Ganu
2021-01-04 17:34   ` [edk2-devel] " Sami Mujawar
2020-12-14 14:42 ` [PATCH v2 09/13] StandaloneMmPkg: Use FF-A header file in Standalone MM Arm MMU library Sughosh Ganu
2021-01-05 14:23   ` [edk2-devel] " Sami Mujawar
2020-12-14 14:42 ` Sughosh Ganu [this message]
2020-12-14 14:42 ` [PATCH v2 11/13] StandaloneMmMmuLib: Add option to use FF-A calls to set memory region's permissions Sughosh Ganu
2020-12-14 14:42 ` [PATCH v2 12/13] MdeModulePkg/VariableStandaloneMm: Set PcdFlashNvStorageVariableBase to Pcd Sughosh Ganu
2021-01-05 12:04   ` [edk2-devel] " Sami Mujawar
2020-12-14 14:42 ` [PATCH v2 13/13] StandaloneMmPkg: Allow sending FFA Direct Request message to StandaloneMm Sughosh Ganu
2021-01-05 12:09   ` [edk2-devel] " Sami Mujawar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20201214144216.26328-11-sughosh.ganu@linaro.org \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox