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