public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [PATCH v5 1/5] ArmPkg/IndustryStandard: 32b/64b agnostic FF-A, Mm SVC and Std SMC IDs
@ 2021-08-09 15:19 Etienne Carriere
  2021-08-09 15:19 ` [PATCH v5 2/5] ArmPkg: prepare 32bit ARM build of StandaloneMmPkg Etienne Carriere
                   ` (3 more replies)
  0 siblings, 4 replies; 11+ messages in thread
From: Etienne Carriere @ 2021-08-09 15:19 UTC (permalink / raw)
  To: devel
  Cc: Achin Gupta, Ard Biesheuvel, Jiewen Yao, Leif Lindholm,
	Sami Mujawar, Sughosh Ganu, Liming Gao, Etienne Carriere

Defines ARM_SVC_ID_FFA_* and ARM_SVC_ID_SP_* identifiers for 32bit
function IDs as per SMCCC specification. Defines also generic ARM
SVC identifier macros to wrap 32bit or 64bit identifiers upon target
built architecture.

Signed-off-by: Etienne Carriere <etienne.carriere@linaro.org>
Reviewed-by: Sami Mujawar <sami.mujawar@arm.com>

---
Changes since v3:
- Remove Cc tags and apply review tag.

No changes since v2

Changes since v1:
- Define ARM_SMC_ID_MM_COMMUNICATE 32b/64b agnostic helper ID in
  ArmStdSmc.h, as expected by few following commits in this series.
---
 ArmPkg/Include/IndustryStandard/ArmFfaSvc.h | 12 ++++++++++++
 ArmPkg/Include/IndustryStandard/ArmMmSvc.h  | 15 +++++++++++++++
 ArmPkg/Include/IndustryStandard/ArmStdSmc.h |  8 ++++++++
 3 files changed, 35 insertions(+)

diff --git a/ArmPkg/Include/IndustryStandard/ArmFfaSvc.h b/ArmPkg/Include/IndustryStandard/ArmFfaSvc.h
index 65b8343ade..ebcb54b28b 100644
--- a/ArmPkg/Include/IndustryStandard/ArmFfaSvc.h
+++ b/ArmPkg/Include/IndustryStandard/ArmFfaSvc.h
@@ -17,9 +17,21 @@
 #define ARM_FFA_SVC_H_
 
 #define ARM_SVC_ID_FFA_VERSION_AARCH32                  0x84000063
+#define ARM_SVC_ID_FFA_MSG_SEND_DIRECT_REQ_AARCH32      0x8400006F
+#define ARM_SVC_ID_FFA_MSG_SEND_DIRECT_RESP_AARCH32     0x84000070
 #define ARM_SVC_ID_FFA_MSG_SEND_DIRECT_REQ_AARCH64      0xC400006F
 #define ARM_SVC_ID_FFA_MSG_SEND_DIRECT_RESP_AARCH64     0xC4000070
 
+/* Generic IDs when using AArch32 or AArch64 execution state */
+#ifdef MDE_CPU_AARCH64
+#define ARM_SVC_ID_FFA_MSG_SEND_DIRECT_REQ     ARM_SVC_ID_FFA_MSG_SEND_DIRECT_REQ_AARCH64
+#define ARM_SVC_ID_FFA_MSG_SEND_DIRECT_RESP    ARM_SVC_ID_FFA_MSG_SEND_DIRECT_RESP_AARCH64
+#endif
+#ifdef MDE_CPU_ARM
+#define ARM_SVC_ID_FFA_MSG_SEND_DIRECT_REQ     ARM_SVC_ID_FFA_MSG_SEND_DIRECT_REQ_AARCH32
+#define ARM_SVC_ID_FFA_MSG_SEND_DIRECT_RESP    ARM_SVC_ID_FFA_MSG_SEND_DIRECT_RESP_AARCH32
+#endif
+
 #define SPM_MAJOR_VERSION_FFA                           1
 #define SPM_MINOR_VERSION_FFA                           0
 
diff --git a/ArmPkg/Include/IndustryStandard/ArmMmSvc.h b/ArmPkg/Include/IndustryStandard/ArmMmSvc.h
index 33d60ccf17..deb3bc99d2 100644
--- a/ArmPkg/Include/IndustryStandard/ArmMmSvc.h
+++ b/ArmPkg/Include/IndustryStandard/ArmMmSvc.h
@@ -15,10 +15,25 @@
  * 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
 
+/* 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
+#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
+#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
diff --git a/ArmPkg/Include/IndustryStandard/ArmStdSmc.h b/ArmPkg/Include/IndustryStandard/ArmStdSmc.h
index 67afb0ea2d..9116a291da 100644
--- a/ArmPkg/Include/IndustryStandard/ArmStdSmc.h
+++ b/ArmPkg/Include/IndustryStandard/ArmStdSmc.h
@@ -49,6 +49,14 @@
 #define ARM_SMC_ID_MM_COMMUNICATE_AARCH32          0x84000041
 #define ARM_SMC_ID_MM_COMMUNICATE_AARCH64          0xC4000041
 
+/* Generic ID when using AArch32 or AArch64 execution state */
+#ifdef MDE_CPU_AARCH64
+#define ARM_SMC_ID_MM_COMMUNICATE   ARM_SMC_ID_MM_COMMUNICATE_AARCH64
+#endif
+#ifdef MDE_CPU_ARM
+#define ARM_SMC_ID_MM_COMMUNICATE   ARM_SMC_ID_MM_COMMUNICATE_AARCH32
+#endif
+
 /* MM return error codes */
 #define ARM_SMC_MM_RET_SUCCESS              0
 #define ARM_SMC_MM_RET_NOT_SUPPORTED       -1
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread
* Re: 回复: [PATCH v5 2/5] ArmPkg: prepare 32bit ARM build of StandaloneMmPkg
@ 2021-08-16  9:44 Sami Mujawar
  0 siblings, 0 replies; 11+ messages in thread
From: Sami Mujawar @ 2021-08-16  9:44 UTC (permalink / raw)
  To: gaoliming, 'Etienne Carriere', devel@edk2.groups.io
  Cc: Achin Gupta, 'Ard Biesheuvel', 'Jiewen Yao',
	'Leif Lindholm', 'Sughosh Ganu', nd

Hi Liming,

Apologies, I was on vacation last week.

Hi Ard,
Thank you for taking care of this.

Regards,

Sami Mujawar

On 11/08/2021, 02:52, "gaoliming" <gaoliming@byosoft.com.cn> wrote:

    Etienne:
      Thanks for your update. This version should pass CI. 

    Sami:
      Can you help review the updated patch? So, it can still catch this stable
    tag.

    Thanks
    Liming
    > -----邮件原件-----
    > 发件人: Etienne Carriere <etienne.carriere@linaro.org>
    > 发送时间: 2021年8月9日 23:20
    > 收件人: devel@edk2.groups.io
    > 抄送: Achin Gupta <achin.gupta@arm.com>; Ard Biesheuvel
    > <ardb+tianocore@kernel.org>; Jiewen Yao <jiewen.yao@intel.com>; Leif
    > Lindholm <leif@nuviainc.com>; Sami Mujawar <sami.mujawar@arm.com>;
    > Sughosh Ganu <sughosh.ganu@linaro.org>; Liming Gao
    > <gaoliming@byosoft.com.cn>; Etienne Carriere <etienne.carriere@linaro.org>
    > 主题: [PATCH v5 2/5] ArmPkg: prepare 32bit ARM build of StandaloneMmPkg
    > 
    > Changes in ArmPkg to prepare building StandaloneMm firmware for
    > 32bit Arm architectures.
    > 
    > Adds ArmmmuStandaloneMmLib library to the list of the standard
    > components build for ArmPkg on when ARM architectures.
    > 
    > Changes path of source file AArch64/ArmMmuStandaloneMmLib.c
    > and compile it for both 32bit and 64bit architectures.
    > 
    > Signed-off-by: Etienne Carriere <etienne.carriere@linaro.org>
    > ---
    > Changes since v4:
    > - Remove changes related to MmCommunicationDxe and ArmMmuPeiLib
    > since
    >   they currently don't need to be built for ARM targets.
    > - Remove review tags applied to patch v3.
    > 
    > Changes since v3:
    > - Remove Cc tags and apply review tag.
    > 
    > No change since v2
    > No change since v1
    > ---
    >  ArmPkg/ArmPkg.dec
    > |  2 +-
    >  ArmPkg/ArmPkg.dsc
    > |  2 ++
    >  ArmPkg/Library/StandaloneMmMmuLib/{AArch64
    > => }/ArmMmuStandaloneMmLib.c | 15 ++++++++-------
    >  ArmPkg/Library/StandaloneMmMmuLib/ArmMmuStandaloneMmLib.inf
    > |  6 +++---
    >  4 files changed, 14 insertions(+), 11 deletions(-)
    > 
    > diff --git a/ArmPkg/ArmPkg.dec b/ArmPkg/ArmPkg.dec
    > index 214b2f5892..6ed51edd03 100644
    > --- a/ArmPkg/ArmPkg.dec
    > +++ b/ArmPkg/ArmPkg.dec
    > @@ -137,7 +137,7 @@
    >    # hardware coherency (i.e., no virtualization or cache coherent DMA)
    > 
    > gArmTokenSpaceGuid.PcdNormalMemoryNonshareableOverride|FALSE|BOO
    > LEAN|0x00000043
    > 
    > -[PcdsFeatureFlag.AARCH64]
    > +[PcdsFeatureFlag.AARCH64, PcdsFeatureFlag.ARM]
    >    ## Used to select method for requesting services from S-EL1.<BR><BR>
    >    #   TRUE  - Selects FF-A calls for communication between S-EL0 and
    > SPMC.<BR>
    >    #   FALSE - Selects SVC calls for communication between S-EL0 and
    > SPMC.<BR>
    > diff --git a/ArmPkg/ArmPkg.dsc b/ArmPkg/ArmPkg.dsc
    > index 926986cf7f..8abe3713c8 100644
    > --- a/ArmPkg/ArmPkg.dsc
    > +++ b/ArmPkg/ArmPkg.dsc
    > @@ -161,4 +161,6 @@
    >  [Components.AARCH64]
    >    ArmPkg/Drivers/MmCommunicationDxe/MmCommunication.inf
    >    ArmPkg/Library/ArmMmuLib/ArmMmuPeiLib.inf
    > +
    > +[Components.AARCH64, Components.ARM]
    >    ArmPkg/Library/StandaloneMmMmuLib/ArmMmuStandaloneMmLib.inf
    > diff --git
    > a/ArmPkg/Library/StandaloneMmMmuLib/AArch64/ArmMmuStandaloneMm
    > Lib.c b/ArmPkg/Library/StandaloneMmMmuLib/ArmMmuStandaloneMmLib.c
    > similarity index 92%
    > rename from
    > ArmPkg/Library/StandaloneMmMmuLib/AArch64/ArmMmuStandaloneMmLib
    > .c
    > rename to
    > ArmPkg/Library/StandaloneMmMmuLib/ArmMmuStandaloneMmLib.c
    > index dd014beec8..20f873e680 100644
    > ---
    > a/ArmPkg/Library/StandaloneMmMmuLib/AArch64/ArmMmuStandaloneMm
    > Lib.c
    > +++ b/ArmPkg/Library/StandaloneMmMmuLib/ArmMmuStandaloneMmLib.c
    > @@ -2,6 +2,7 @@
    >    File managing the MMU for ARMv8 architecture in S-EL0
    > 
    >    Copyright (c) 2017 - 2021, Arm Limited. All rights reserved.<BR>
    > +  Copyright (c) 2021, Linaro Limited
    >    SPDX-License-Identifier: BSD-2-Clause-Patent
    > 
    >    @par Reference(s):
    > @@ -62,7 +63,7 @@ SendMemoryPermissionRequest (
    >      // for other Direct Request calls which are not atomic
    >      // We therefore check only for Direct Response by the
    >      // callee.
    > -    if (SvcArgs->Arg0 ==
    > ARM_SVC_ID_FFA_MSG_SEND_DIRECT_RESP_AARCH64) {
    > +    if (SvcArgs->Arg0 == ARM_SVC_ID_FFA_MSG_SEND_DIRECT_RESP) {
    >        // A Direct Response means FF-A success
    >        // Now check the payload for errors
    >        // The callee sends back the return value
    > @@ -164,13 +165,13 @@ GetMemoryPermissions (
    >    ZeroMem (&SvcArgs, sizeof (ARM_SVC_ARGS));
    >    if (FeaturePcdGet (PcdFfaEnable)) {
    >      // See [2], Section 10.2 FFA_MSG_SEND_DIRECT_REQ.
    > -    SvcArgs.Arg0 = ARM_SVC_ID_FFA_MSG_SEND_DIRECT_REQ_AARCH64;
    > +    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_AARCH64;
    > +    SvcArgs.Arg3 = ARM_SVC_ID_SP_GET_MEM_ATTRIBUTES;
    >      SvcArgs.Arg4 = BaseAddress;
    >    } else {
    > -    SvcArgs.Arg0 = ARM_SVC_ID_SP_GET_MEM_ATTRIBUTES_AARCH64;
    > +    SvcArgs.Arg0 = ARM_SVC_ID_SP_GET_MEM_ATTRIBUTES;
    >      SvcArgs.Arg1 = BaseAddress;
    >      SvcArgs.Arg2 = 0;
    >      SvcArgs.Arg3 = 0;
    > @@ -219,15 +220,15 @@ RequestMemoryPermissionChange (
    >    ZeroMem (&SvcArgs, sizeof (ARM_SVC_ARGS));
    >    if (FeaturePcdGet (PcdFfaEnable)) {
    >      // See [2], Section 10.2 FFA_MSG_SEND_DIRECT_REQ.
    > -    SvcArgs.Arg0 = ARM_SVC_ID_FFA_MSG_SEND_DIRECT_REQ_AARCH64;
    > +    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_AARCH64;
    > +    SvcArgs.Arg3 = ARM_SVC_ID_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_AARCH64;
    > +    SvcArgs.Arg0 = ARM_SVC_ID_SP_SET_MEM_ATTRIBUTES;
    >      SvcArgs.Arg1 = BaseAddress;
    >      SvcArgs.Arg2 = EFI_SIZE_TO_PAGES (Length);
    >      SvcArgs.Arg3 = Permissions;
    > diff --git
    > a/ArmPkg/Library/StandaloneMmMmuLib/ArmMmuStandaloneMmLib.inf
    > b/ArmPkg/Library/StandaloneMmMmuLib/ArmMmuStandaloneMmLib.inf
    > index 6c71fe0023..ff20e58980 100644
    > --- a/ArmPkg/Library/StandaloneMmMmuLib/ArmMmuStandaloneMmLib.inf
    > +++
    > b/ArmPkg/Library/StandaloneMmMmuLib/ArmMmuStandaloneMmLib.inf
    > @@ -16,14 +16,14 @@
    >    LIBRARY_CLASS                  = StandaloneMmMmuLib
    >    PI_SPECIFICATION_VERSION       = 0x00010032
    > 
    > -[Sources.AARCH64]
    > -  AArch64/ArmMmuStandaloneMmLib.c
    > +[Sources]
    > +  ArmMmuStandaloneMmLib.c
    > 
    >  [Packages]
    >    ArmPkg/ArmPkg.dec
    >    MdePkg/MdePkg.dec
    > 
    > -[FeaturePcd.AARCH64]
    > +[FeaturePcd.ARM, FeaturePcd.AARCH64]
    >    gArmTokenSpaceGuid.PcdFfaEnable
    > 
    >  [LibraryClasses]
    > --
    > 2.17.1





^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2021-08-16  9:44 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-08-09 15:19 [PATCH v5 1/5] ArmPkg/IndustryStandard: 32b/64b agnostic FF-A, Mm SVC and Std SMC IDs Etienne Carriere
2021-08-09 15:19 ` [PATCH v5 2/5] ArmPkg: prepare 32bit ARM build of StandaloneMmPkg Etienne Carriere
2021-08-11  1:51   ` 回复: " gaoliming
2021-08-11 10:46     ` [edk2-devel] " Ard Biesheuvel
2021-08-11 11:37       ` Ard Biesheuvel
2021-08-11 12:12         ` Etienne Carriere
2021-08-11 12:21           ` Ard Biesheuvel
2021-08-09 15:19 ` [PATCH v5 3/5] GenFv: Arm: support images entered in Thumb mode Etienne Carriere
2021-08-09 15:19 ` [PATCH v5 4/5] StandaloneMmPkg: fix pointer/int casts against 32bit architectures Etienne Carriere
2021-08-09 15:19 ` [PATCH v5 5/5] StandaloneMmPkg: build for 32bit arm machines Etienne Carriere
  -- strict thread matches above, loose matches on Subject: below --
2021-08-16  9:44 回复: [PATCH v5 2/5] ArmPkg: prepare 32bit ARM build of StandaloneMmPkg Sami Mujawar

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox