Note: The Temporary RAM memory size is being reduced from
      64KB to 32KB. This still appears to be more than
      adequate for OVMF's early PEI phase. We will be adding
      another 32KB range of RAM just above this range for
      use on S3 resume.

The range is declared as part of MEMFD, so it is easier
to identify the memory range.

We also now assign PCDs to the memory range.

The PCDs are used to set the initial SEC/PEI stack in
SEC's assembly code.

The PCDs are also used in the SEC C code to setup
the Temporary RAM PPI.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jordan Justen <[email protected]>
---
 OvmfPkg/OvmfPkg.dec           |  2 ++
 OvmfPkg/OvmfPkgIa32.fdf       |  3 +++
 OvmfPkg/OvmfPkgIa32X64.fdf    |  3 +++
 OvmfPkg/OvmfPkgX64.fdf        |  3 +++
 OvmfPkg/Sec/Ia32/SecEntry.S   | 14 +++++++++-----
 OvmfPkg/Sec/Ia32/SecEntry.asm | 14 +++++++++-----
 OvmfPkg/Sec/SecMain.c         |  6 +++++-
 OvmfPkg/Sec/SecMain.inf       |  2 ++
 OvmfPkg/Sec/X64/SecEntry.S    |  6 ++++--
 OvmfPkg/Sec/X64/SecEntry.asm  |  9 +++++----
 10 files changed, 45 insertions(+), 17 deletions(-)

diff --git a/OvmfPkg/OvmfPkg.dec b/OvmfPkg/OvmfPkg.dec
index c362e5f..0e33b3b 100644
--- a/OvmfPkg/OvmfPkg.dec
+++ b/OvmfPkg/OvmfPkg.dec
@@ -80,6 +80,8 @@
   gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFdBaseAddress|0x0|UINT32|0xf
   gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesBase|0x0|UINT32|0x11
   gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesSize|0x0|UINT32|0x12
+  gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamBase|0x0|UINT32|0x13
+  gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamSize|0x0|UINT32|0x14
 
 [PcdsDynamic, PcdsDynamicEx]
   gUefiOvmfPkgTokenSpaceGuid.PcdEmuVariableEvent|0|UINT64|2
diff --git a/OvmfPkg/OvmfPkgIa32.fdf b/OvmfPkg/OvmfPkgIa32.fdf
index 483ad85..210abde 100644
--- a/OvmfPkg/OvmfPkgIa32.fdf
+++ b/OvmfPkg/OvmfPkgIa32.fdf
@@ -138,6 +138,9 @@ NumBlocks     = 0x80
 0x000000|0x006000
 
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesSize
 
+0x010000|0x008000
+gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamSize
+
 0x020000|0x7E0000
 
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfMemFvBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfMemFvSize
 FV = MAINFV
diff --git a/OvmfPkg/OvmfPkgIa32X64.fdf b/OvmfPkg/OvmfPkgIa32X64.fdf
index 9a00080..90f44a6 100644
--- a/OvmfPkg/OvmfPkgIa32X64.fdf
+++ b/OvmfPkg/OvmfPkgIa32X64.fdf
@@ -138,6 +138,9 @@ NumBlocks     = 0x80
 0x000000|0x006000
 
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesSize
 
+0x010000|0x008000
+gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamSize
+
 0x020000|0x7E0000
 
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfMemFvBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfMemFvSize
 FV = MAINFV
diff --git a/OvmfPkg/OvmfPkgX64.fdf b/OvmfPkg/OvmfPkgX64.fdf
index 09a91c1..67c7415 100644
--- a/OvmfPkg/OvmfPkgX64.fdf
+++ b/OvmfPkg/OvmfPkgX64.fdf
@@ -138,6 +138,9 @@ NumBlocks     = 0x80
 0x000000|0x006000
 
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesSize
 
+0x010000|0x008000
+gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamSize
+
 0x020000|0x7E0000
 
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfMemFvBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfMemFvSize
 FV = MAINFV
diff --git a/OvmfPkg/Sec/Ia32/SecEntry.S b/OvmfPkg/Sec/Ia32/SecEntry.S
index a1b0c0d..b604a81 100644
--- a/OvmfPkg/Sec/Ia32/SecEntry.S
+++ b/OvmfPkg/Sec/Ia32/SecEntry.S
@@ -1,7 +1,7 @@
 #      TITLE   SecEntry.asm
 #------------------------------------------------------------------------------
 #*
-#*   Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
+#*   Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>
 #*   This program and the accompanying materials
 #*   are licensed and made available under the terms and conditions of the BSD 
License
 #*   which accompanies this distribution.  The full text of the license may be 
found at
@@ -36,15 +36,19 @@ ASM_GLOBAL ASM_PFX(_ModuleEntryPoint)
 ASM_PFX(_ModuleEntryPoint):
 
     #
-    # Load temporary stack top at very low memory.  The C code
-    # can reload to a better address.
+    # Load temporary RAM stack based on PCDs
     #
-    movl    $BASE_512KB, %eax 
+    .set    SEC_TOP_OF_STACK, FixedPcdGet32 (PcdOvmfSecPeiTempRamBase) + \
+                              FixedPcdGet32 (PcdOvmfSecPeiTempRamSize)
+    movl    $SEC_TOP_OF_STACK, %eax
     movl    %eax, %esp
     nop
 
     #
-    # Call into C code
+    # Setup parameters and call SecCoreStartupWithStack
+    #   [esp]   return address for call
+    #   [esp+4] BootFirmwareVolumePtr
+    #   [esp+8] TopOfCurrentStack
     #
     pushl   %eax
     pushl   %ebp
diff --git a/OvmfPkg/Sec/Ia32/SecEntry.asm b/OvmfPkg/Sec/Ia32/SecEntry.asm
index 4b0e95a..e9458ad 100644
--- a/OvmfPkg/Sec/Ia32/SecEntry.asm
+++ b/OvmfPkg/Sec/Ia32/SecEntry.asm
@@ -1,7 +1,7 @@
       TITLE   SecEntry.asm
 ;------------------------------------------------------------------------------
 ;*
-;*   Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
+;*   Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>
 ;*   This program and the accompanying materials
 ;*   are licensed and made available under the terms and conditions of the BSD 
License
 ;*   which accompanies this distribution.  The full text of the license may be 
found at
@@ -38,15 +38,19 @@ EXTERN SecCoreStartupWithStack:PROC
 _ModuleEntryPoint PROC PUBLIC
 
     ;
-    ; Load temporary stack top at very low memory.  The C code
-    ; can reload to a better address.
+    ; Load temporary RAM stack based on PCDs
     ;
-    mov     eax, BASE_512KB
+    SEC_TOP_OF_STACK EQU (FixedPcdGet32 (PcdOvmfSecPeiTempRamBase) + \
+                          FixedPcdGet32 (PcdOvmfSecPeiTempRamSize))
+    mov     eax, SEC_TOP_OF_STACK
     mov     esp, eax
     nop
 
     ;
-    ; Call into C code
+    ; Setup parameters and call SecCoreStartupWithStack
+    ;   [esp]   return address for call
+    ;   [esp+4] BootFirmwareVolumePtr
+    ;   [esp+8] TopOfCurrentStack
     ;
     push    eax
     push    ebp
diff --git a/OvmfPkg/Sec/SecMain.c b/OvmfPkg/Sec/SecMain.c
index ece1c9b..8bdf6e5 100644
--- a/OvmfPkg/Sec/SecMain.c
+++ b/OvmfPkg/Sec/SecMain.c
@@ -631,12 +631,16 @@ SecCoreStartupWithStack (
   // |-------------|       <-- SecCoreData.TemporaryRamBase
   //
 
+  ASSERT ((UINTN) (PcdGet32 (PcdOvmfSecPeiTempRamBase) +
+                   PcdGet32 (PcdOvmfSecPeiTempRamSize)) ==
+          (UINTN) TopOfCurrentStack);
+
   //
   // Initialize SEC hand-off state
   //
   SecCoreData.DataSize = sizeof(EFI_SEC_PEI_HAND_OFF);
 
-  SecCoreData.TemporaryRamSize       = SIZE_64KB;
+  SecCoreData.TemporaryRamSize       = (UINTN) PcdGet32 
(PcdOvmfSecPeiTempRamSize);
   SecCoreData.TemporaryRamBase       = (VOID*)((UINT8 *)TopOfCurrentStack - 
SecCoreData.TemporaryRamSize);
 
   SecCoreData.PeiTemporaryRamBase    = SecCoreData.TemporaryRamBase;
diff --git a/OvmfPkg/Sec/SecMain.inf b/OvmfPkg/Sec/SecMain.inf
index 68dfeaa..0b1cda8 100644
--- a/OvmfPkg/Sec/SecMain.inf
+++ b/OvmfPkg/Sec/SecMain.inf
@@ -67,3 +67,5 @@
   gUefiOvmfPkgTokenSpaceGuid.PcdOvmfMemFvBase
   gUefiOvmfPkgTokenSpaceGuid.PcdOvmfMemFvSize
   gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesBase
+  gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamBase
+  gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamSize
diff --git a/OvmfPkg/Sec/X64/SecEntry.S b/OvmfPkg/Sec/X64/SecEntry.S
index de0859b..d22bc8a 100644
--- a/OvmfPkg/Sec/X64/SecEntry.S
+++ b/OvmfPkg/Sec/X64/SecEntry.S
@@ -1,7 +1,7 @@
 #      TITLE   SecEntry.asm
 #------------------------------------------------------------------------------
 #*
-#*   Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
+#*   Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>
 #*   This program and the accompanying materials
 #*   are licensed and made available under the terms and conditions of the BSD 
License
 #*   which accompanies this distribution.  The full text of the license may be 
found at
@@ -39,7 +39,9 @@ ASM_PFX(_ModuleEntryPoint):
     # Load temporary stack top at very low memory.  The C code
     # can reload to a better address.
     #
-    movq    $BASE_512KB, %rsp 
+    .set    SEC_TOP_OF_STACK, FixedPcdGet32 (PcdOvmfSecPeiTempRamBase) + \
+                              FixedPcdGet32 (PcdOvmfSecPeiTempRamSize)
+    movq    $SEC_TOP_OF_STACK, %rsp 
     nop
 
     #
diff --git a/OvmfPkg/Sec/X64/SecEntry.asm b/OvmfPkg/Sec/X64/SecEntry.asm
index 55f5eab..4135208 100644
--- a/OvmfPkg/Sec/X64/SecEntry.asm
+++ b/OvmfPkg/Sec/X64/SecEntry.asm
@@ -1,7 +1,7 @@
       TITLE   SecEntry.asm
 ;------------------------------------------------------------------------------
 ;*
-;*   Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
+;*   Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>
 ;*   This program and the accompanying materials
 ;*   are licensed and made available under the terms and conditions of the BSD 
License
 ;*   which accompanies this distribution.  The full text of the license may be 
found at
@@ -36,10 +36,11 @@ EXTERN SecCoreStartupWithStack:PROC
 _ModuleEntryPoint PROC PUBLIC
 
     ;
-    ; Load temporary stack top at very low memory.  The C code
-    ; can reload to a better address.
+    ; Load temporary RAM stack based on PCDs
     ;
-    mov     rsp, BASE_512KB
+    SEC_TOP_OF_STACK EQU (FixedPcdGet32 (PcdOvmfSecPeiTempRamBase) + \
+                          FixedPcdGet32 (PcdOvmfSecPeiTempRamSize))
+    mov     rsp, SEC_TOP_OF_STACK
     nop
 
     ;
-- 
1.8.5.2


------------------------------------------------------------------------------
CenturyLink Cloud: The Leader in Enterprise Cloud Services.
Learn Why More Businesses Are Choosing CenturyLink Cloud For
Critical Workloads, Development Environments & Everything In Between.
Get a Quote or Start a Free Trial Today. 
http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to