diff options
author | Jordan Justen <jordan.l.justen@intel.com> | 2013-09-24 18:23:20 +0000 |
---|---|---|
committer | jljusten <jljusten@6f19259b-4bc3-4df7-8a09-765794883524> | 2013-09-24 18:23:20 +0000 |
commit | c90e37b503d4e79dbebbd49f9bfc3c6c14ffb67d (patch) | |
tree | 10d35aaf20f624bd410bef20f3869ed6bfd8a70a /OvmfPkg/ResetVector/Build.py | |
parent | a63f2e245099ac9ab17046322ab6e13f84bb053c (diff) | |
download | edk2-platforms-c90e37b503d4e79dbebbd49f9bfc3c6c14ffb67d.tar.xz |
OvmfPkg: Add platform specific reset vector code for X64
KVM has a bug that prevents using page tables in the ROM if the ROM
region utilizes the KVM READONLY memory feature. Therefore, we
avoid using page tables stored in the ROM.
Since OVMF doesn't require memory initialization, we just build
page table entries in RAM at 0x80000 very early in the OVMF boot
process. This address is just after the 'temp RAM' which is set
up by the SEC module.
Currently we only set up 4GB of page tables for OVMF's PEI,
but DxeIpl will build identity mapped page tables that cover all
of the available processor physical address space.
Reported-by: Gary Ching-Pang Lin <glin@suse.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Tested-by: Laszlo Ersek <lersek@redhat.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14715 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'OvmfPkg/ResetVector/Build.py')
-rw-r--r-- | OvmfPkg/ResetVector/Build.py | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/OvmfPkg/ResetVector/Build.py b/OvmfPkg/ResetVector/Build.py new file mode 100644 index 0000000000..e0a9496e37 --- /dev/null +++ b/OvmfPkg/ResetVector/Build.py @@ -0,0 +1,58 @@ +## @file +# Automate the process of building the various reset vector types +# +# Copyright (c) 2009 - 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 +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# + +import glob +import os +import subprocess +import sys + +def RunCommand(commandLine): + #print ' '.join(commandLine) + return subprocess.call(commandLine) + +for filename in glob.glob(os.path.join('Bin', '*.raw')): + os.remove(filename) + +ThisDir = os.path.realpath(os.path.split(sys.argv[0])[0]) +WorkspaceDir = os.path.realpath(os.path.join(ThisDir, '..', '..')) +UefiCpuPkgVtf0Dir = os.path.join(WorkspaceDir, 'UefiCpuPkg', 'ResetVector', 'Vtf0') + +for arch in ('x64',): + for debugType in (None,): + output = os.path.join('Bin', 'ResetVector') + output += '.' + arch + if debugType is not None: + output += '.' + debugType + output += '.raw' + commandLine = ( + 'nasm', + '-D', 'ARCH_%s' % arch.upper(), + '-D', 'DEBUG_%s' % str(debugType).upper(), + '-I', UefiCpuPkgVtf0Dir + os.path.sep, + '-o', output, + 'ResetVectorCode.asm', + ) + ret = RunCommand(commandLine) + print '\tASM\t' + output + if ret != 0: sys.exit(ret) + + commandLine = ( + 'python', + 'Tools/FixupForRawSection.py', + output, + ) + print '\tFIXUP\t' + output + ret = RunCommand(commandLine) + if ret != 0: sys.exit(ret) + |