mirror of https://github.com/acidanthera/audk.git
OvmfPkg: Move SEC/PEI Temporary RAM from 0x70000 to 0x810000
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 <jordan.l.justen@intel.com> Reviewed-by: Laszlo Ersek <lersek@redhat.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15147 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
b382ede386
commit
7cb6b0e068
|
@ -80,6 +80,8 @@
|
||||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFdBaseAddress|0x0|UINT32|0xf
|
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFdBaseAddress|0x0|UINT32|0xf
|
||||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesBase|0x0|UINT32|0x11
|
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesBase|0x0|UINT32|0x11
|
||||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesSize|0x0|UINT32|0x12
|
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesSize|0x0|UINT32|0x12
|
||||||
|
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamBase|0x0|UINT32|0x13
|
||||||
|
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamSize|0x0|UINT32|0x14
|
||||||
|
|
||||||
[PcdsDynamic, PcdsDynamicEx]
|
[PcdsDynamic, PcdsDynamicEx]
|
||||||
gUefiOvmfPkgTokenSpaceGuid.PcdEmuVariableEvent|0|UINT64|2
|
gUefiOvmfPkgTokenSpaceGuid.PcdEmuVariableEvent|0|UINT64|2
|
||||||
|
|
|
@ -138,6 +138,9 @@ NumBlocks = 0x80
|
||||||
0x000000|0x006000
|
0x000000|0x006000
|
||||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesSize
|
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesSize
|
||||||
|
|
||||||
|
0x010000|0x008000
|
||||||
|
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamSize
|
||||||
|
|
||||||
0x020000|0x7E0000
|
0x020000|0x7E0000
|
||||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfMemFvBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfMemFvSize
|
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfMemFvBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfMemFvSize
|
||||||
FV = MAINFV
|
FV = MAINFV
|
||||||
|
|
|
@ -138,6 +138,9 @@ NumBlocks = 0x80
|
||||||
0x000000|0x006000
|
0x000000|0x006000
|
||||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesSize
|
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesSize
|
||||||
|
|
||||||
|
0x010000|0x008000
|
||||||
|
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamSize
|
||||||
|
|
||||||
0x020000|0x7E0000
|
0x020000|0x7E0000
|
||||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfMemFvBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfMemFvSize
|
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfMemFvBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfMemFvSize
|
||||||
FV = MAINFV
|
FV = MAINFV
|
||||||
|
|
|
@ -138,6 +138,9 @@ NumBlocks = 0x80
|
||||||
0x000000|0x006000
|
0x000000|0x006000
|
||||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesSize
|
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesSize
|
||||||
|
|
||||||
|
0x010000|0x008000
|
||||||
|
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamSize
|
||||||
|
|
||||||
0x020000|0x7E0000
|
0x020000|0x7E0000
|
||||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfMemFvBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfMemFvSize
|
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfMemFvBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfMemFvSize
|
||||||
FV = MAINFV
|
FV = MAINFV
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# TITLE SecEntry.asm
|
# 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
|
#* This program and the accompanying materials
|
||||||
#* are licensed and made available under the terms and conditions of the BSD License
|
#* 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
|
#* 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):
|
ASM_PFX(_ModuleEntryPoint):
|
||||||
|
|
||||||
#
|
#
|
||||||
# Load temporary stack top at very low memory. The C code
|
# Load temporary RAM stack based on PCDs
|
||||||
# can reload to a better address.
|
|
||||||
#
|
#
|
||||||
movl $BASE_512KB, %eax
|
.set SEC_TOP_OF_STACK, FixedPcdGet32 (PcdOvmfSecPeiTempRamBase) + \
|
||||||
|
FixedPcdGet32 (PcdOvmfSecPeiTempRamSize)
|
||||||
|
movl $SEC_TOP_OF_STACK, %eax
|
||||||
movl %eax, %esp
|
movl %eax, %esp
|
||||||
nop
|
nop
|
||||||
|
|
||||||
#
|
#
|
||||||
# Call into C code
|
# Setup parameters and call SecCoreStartupWithStack
|
||||||
|
# [esp] return address for call
|
||||||
|
# [esp+4] BootFirmwareVolumePtr
|
||||||
|
# [esp+8] TopOfCurrentStack
|
||||||
#
|
#
|
||||||
pushl %eax
|
pushl %eax
|
||||||
pushl %ebp
|
pushl %ebp
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
TITLE SecEntry.asm
|
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
|
;* This program and the accompanying materials
|
||||||
;* are licensed and made available under the terms and conditions of the BSD License
|
;* 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
|
;* which accompanies this distribution. The full text of the license may be found at
|
||||||
|
@ -38,15 +38,19 @@ EXTERN SecCoreStartupWithStack:PROC
|
||||||
_ModuleEntryPoint PROC PUBLIC
|
_ModuleEntryPoint PROC PUBLIC
|
||||||
|
|
||||||
;
|
;
|
||||||
; Load temporary stack top at very low memory. The C code
|
; Load temporary RAM stack based on PCDs
|
||||||
; can reload to a better address.
|
|
||||||
;
|
;
|
||||||
mov eax, BASE_512KB
|
SEC_TOP_OF_STACK EQU (FixedPcdGet32 (PcdOvmfSecPeiTempRamBase) + \
|
||||||
|
FixedPcdGet32 (PcdOvmfSecPeiTempRamSize))
|
||||||
|
mov eax, SEC_TOP_OF_STACK
|
||||||
mov esp, eax
|
mov esp, eax
|
||||||
nop
|
nop
|
||||||
|
|
||||||
;
|
;
|
||||||
; Call into C code
|
; Setup parameters and call SecCoreStartupWithStack
|
||||||
|
; [esp] return address for call
|
||||||
|
; [esp+4] BootFirmwareVolumePtr
|
||||||
|
; [esp+8] TopOfCurrentStack
|
||||||
;
|
;
|
||||||
push eax
|
push eax
|
||||||
push ebp
|
push ebp
|
||||||
|
|
|
@ -631,12 +631,16 @@ SecCoreStartupWithStack (
|
||||||
// |-------------| <-- SecCoreData.TemporaryRamBase
|
// |-------------| <-- SecCoreData.TemporaryRamBase
|
||||||
//
|
//
|
||||||
|
|
||||||
|
ASSERT ((UINTN) (PcdGet32 (PcdOvmfSecPeiTempRamBase) +
|
||||||
|
PcdGet32 (PcdOvmfSecPeiTempRamSize)) ==
|
||||||
|
(UINTN) TopOfCurrentStack);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Initialize SEC hand-off state
|
// Initialize SEC hand-off state
|
||||||
//
|
//
|
||||||
SecCoreData.DataSize = sizeof(EFI_SEC_PEI_HAND_OFF);
|
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.TemporaryRamBase = (VOID*)((UINT8 *)TopOfCurrentStack - SecCoreData.TemporaryRamSize);
|
||||||
|
|
||||||
SecCoreData.PeiTemporaryRamBase = SecCoreData.TemporaryRamBase;
|
SecCoreData.PeiTemporaryRamBase = SecCoreData.TemporaryRamBase;
|
||||||
|
|
|
@ -67,3 +67,5 @@
|
||||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfMemFvBase
|
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfMemFvBase
|
||||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfMemFvSize
|
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfMemFvSize
|
||||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesBase
|
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesBase
|
||||||
|
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamBase
|
||||||
|
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamSize
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# TITLE SecEntry.asm
|
# 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
|
#* This program and the accompanying materials
|
||||||
#* are licensed and made available under the terms and conditions of the BSD License
|
#* 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
|
#* 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
|
# Load temporary stack top at very low memory. The C code
|
||||||
# can reload to a better address.
|
# 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
|
nop
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
TITLE SecEntry.asm
|
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
|
;* This program and the accompanying materials
|
||||||
;* are licensed and made available under the terms and conditions of the BSD License
|
;* 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
|
;* which accompanies this distribution. The full text of the license may be found at
|
||||||
|
@ -36,10 +36,11 @@ EXTERN SecCoreStartupWithStack:PROC
|
||||||
_ModuleEntryPoint PROC PUBLIC
|
_ModuleEntryPoint PROC PUBLIC
|
||||||
|
|
||||||
;
|
;
|
||||||
; Load temporary stack top at very low memory. The C code
|
; Load temporary RAM stack based on PCDs
|
||||||
; can reload to a better address.
|
|
||||||
;
|
;
|
||||||
mov rsp, BASE_512KB
|
SEC_TOP_OF_STACK EQU (FixedPcdGet32 (PcdOvmfSecPeiTempRamBase) + \
|
||||||
|
FixedPcdGet32 (PcdOvmfSecPeiTempRamSize))
|
||||||
|
mov rsp, SEC_TOP_OF_STACK
|
||||||
nop
|
nop
|
||||||
|
|
||||||
;
|
;
|
||||||
|
|
Loading…
Reference in New Issue