Would it be possible to make the stack size configurable in a way that doesn't require an silicon/platform vendor to customize the assembly code? Perhaps through a fixed PCD if its not problematic to do so with the .space directive.

Thanks,

Chris

On 7/11/2023 7:36 AM, Nishant Sharma wrote:
From: Achin Gupta <achin.gu...@arm.com>

This patch removes the dependency on the SPM to allocate and initialise
stack memory for the StMM SP. This is done by reserving 8K worth of memory
in the StMM image at a page aligned address in the data section. Then,
instead of jumping directly to the C entrypoint, an assembler entrypoint is
invoked. This entrypoint locates the stack memory, changes its permissions
using FF-A ABIs, sets the stack pointer and invokes the C entrypoint.

Signed-off-by: Achin Gupta <achin.gu...@arm.com>
Signed-off-by: Nishant Sharma <nishant.sha...@arm.com>
---
  
StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/StandaloneMmCoreEntryPoint.inf
   |  1 +
  
StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/StandaloneMmCoreEntryPoint.c
 |  2 +-
  
StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/AArch64/ModuleEntryPoint.S
   | 68 ++++++++++++++++++++
  3 files changed, 70 insertions(+), 1 deletion(-)

diff --git 
a/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/StandaloneMmCoreEntryPoint.inf
 
b/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/StandaloneMmCoreEntryPoint.inf
index dc6d3d859911..10fafa43ce59 100644
--- 
a/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/StandaloneMmCoreEntryPoint.inf
+++ 
b/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/StandaloneMmCoreEntryPoint.inf
@@ -25,6 +25,7 @@
    Arm/StandaloneMmCoreEntryPoint.c
    Arm/SetPermissions.c
    Arm/CreateHobList.c
+  Arm/AArch64/ModuleEntryPoint.S
[Sources.X64]
    X64/StandaloneMmCoreEntryPoint.c
diff --git 
a/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/StandaloneMmCoreEntryPoint.c
 
b/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/StandaloneMmCoreEntryPoint.c
index 5dd1d9747995..ce867fe85158 100644
--- 
a/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/StandaloneMmCoreEntryPoint.c
+++ 
b/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/StandaloneMmCoreEntryPoint.c
@@ -316,7 +316,7 @@ InitArmSvcArgs (
  **/
  VOID
  EFIAPI
-_ModuleEntryPoint (
+ModuleEntryPoint (
    IN VOID    *SharedBufAddress,
    IN UINT64  SharedBufSize,
    IN UINT64  cookie1,
diff --git 
a/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/AArch64/ModuleEntryPoint.S
 
b/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/AArch64/ModuleEntryPoint.S
new file mode 100644
index 000000000000..174bc83ebd64
--- /dev/null
+++ 
b/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/AArch64/ModuleEntryPoint.S
@@ -0,0 +1,68 @@
+//
+//  Copyright (c) 2023, ARM Limited. All rights reserved.
+//
+//  SPDX-License-Identifier: BSD-2-Clause-Patent
+//
+//
+
+#include <AsmMacroIoLibV8.h>
+
+#define FFA_DATA_RW 0x1
+
+.align 12
+StackBase:
+.space 8192
+StackEnd:
+
+.macro FfaMemPermSet start:req end:req perm:req
+adrp x29, \start
+add x29, x29, :lo12: \start
+
+adrp x30, \end
+add x30, x30, :lo12:\end
+
+/* x30 = end - begin */
+sub x30, x30, x29
+/* x28 = x30 >> 12 (number of pages) */
+mov x28, #12
+lsrv x28, x30, x28
+
+mov w0, #0x89
+movk w0, #0x8400, lsl #16
+mov x1, x29
+mov x2, x28
+mov w3, #\perm
+
+svc #0
+
+mov w1, #0x61
+movk w1, #0x8400, lsl #16
+cmp w1, w0
+b.ne .
+.endm
+
+  ASM_FUNC(_ModuleEntryPoint)
+MOV32 (w8, FixedPcdGet32(PcdFfaEnable))
+  cbz w8, FfaNotEnabled
+  // Stash boot information registers from the SPMC
+  mov x8, x0
+  mov x9, x1
+  mov x10, x2
+  mov x11, x3
+
+  // Set the correct permissions on stack memory
+  FfaMemPermSet StackBase StackEnd FFA_DATA_RW
+
+  // Initialise SP
+  adr x0, StackEnd
+  mov   sp, x0
+
+  // Restore boot information registers from the SPMC
+  mov x0, x8
+  mov x1, x9
+  mov x2, x10
+  mov x3, x11
+
+  // Invoke the C entrypoint
+  FfaNotEnabled:
+  b     ModuleEntryPoint


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#106880): https://edk2.groups.io/g/devel/message/106880
Mute This Topic: https://groups.io/mt/100079871/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to