BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3108 The early assembler code performs validation for some of the SEV-related information, specifically the encryption bit position. To avoid having to re-validate the encryption bit position as the system proceeds through its boot phases, save the validated encryption bit position in the SEV-ES work area for use by later phases. Cc: Jordan Justen <jordan.l.justen@intel.com> Cc: Laszlo Ersek <lersek@redhat.com> Cc: Ard Biesheuvel <ard.biesheuvel@arm.com> Cc: Brijesh Singh <brijesh.singh@amd.com> Reviewed-by: Laszlo Ersek <lersek@redhat.com> Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com> Message-Id: <2609724859cf21f0c6d45bc323e94465dca4e621.1610045305.git.thomas.lendacky@amd.com>
		
			
				
	
	
		
			93 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| ;------------------------------------------------------------------------------
 | |
| ; @file
 | |
| ; This file includes all other code files to assemble the reset vector code
 | |
| ;
 | |
| ; Copyright (c) 2008 - 2013, Intel Corporation. All rights reserved.<BR>
 | |
| ; Copyright (c) 2020, Advanced Micro Devices, Inc. All rights reserved.<BR>
 | |
| ; SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| ;
 | |
| ;------------------------------------------------------------------------------
 | |
| 
 | |
| ;
 | |
| ; If neither ARCH_IA32 nor ARCH_X64 are defined, then try to include
 | |
| ; Base.h to use the C pre-processor to determine the architecture.
 | |
| ;
 | |
| %ifndef ARCH_IA32
 | |
|   %ifndef ARCH_X64
 | |
|     #include <Base.h>
 | |
|     #if defined (MDE_CPU_IA32)
 | |
|       %define ARCH_IA32
 | |
|     #elif defined (MDE_CPU_X64)
 | |
|       %define ARCH_X64
 | |
|     #endif
 | |
|   %endif
 | |
| %endif
 | |
| 
 | |
| %ifdef ARCH_IA32
 | |
|   %ifdef ARCH_X64
 | |
|     %error "Only one of ARCH_IA32 or ARCH_X64 can be defined."
 | |
|   %endif
 | |
| %elifdef ARCH_X64
 | |
| %else
 | |
|   %error "Either ARCH_IA32 or ARCH_X64 must be defined."
 | |
| %endif
 | |
| 
 | |
| %include "CommonMacros.inc"
 | |
| 
 | |
| %include "PostCodes.inc"
 | |
| 
 | |
| %ifdef DEBUG_PORT80
 | |
|   %include "Port80Debug.asm"
 | |
| %elifdef DEBUG_SERIAL
 | |
|   %include "SerialDebug.asm"
 | |
| %else
 | |
|   %include "DebugDisabled.asm"
 | |
| %endif
 | |
| 
 | |
| %include "Ia32/SearchForBfvBase.asm"
 | |
| %include "Ia32/SearchForSecEntry.asm"
 | |
| 
 | |
| %ifdef ARCH_X64
 | |
|   #include <AutoGen.h>
 | |
| 
 | |
|   %if (FixedPcdGet32 (PcdOvmfSecPageTablesSize) != 0x6000)
 | |
|     %error "This implementation inherently depends on PcdOvmfSecPageTablesSize"
 | |
|   %endif
 | |
| 
 | |
|   %if (FixedPcdGet32 (PcdOvmfSecGhcbPageTableSize) != 0x1000)
 | |
|     %error "This implementation inherently depends on PcdOvmfSecGhcbPageTableSize"
 | |
|   %endif
 | |
| 
 | |
|   %if (FixedPcdGet32 (PcdOvmfSecGhcbSize) != 0x2000)
 | |
|     %error "This implementation inherently depends on PcdOvmfSecGhcbSize"
 | |
|   %endif
 | |
| 
 | |
|   %if ((FixedPcdGet32 (PcdOvmfSecGhcbBase) >> 21) != \
 | |
|        ((FixedPcdGet32 (PcdOvmfSecGhcbBase) + FixedPcdGet32 (PcdOvmfSecGhcbSize) - 1) >> 21))
 | |
|     %error "This implementation inherently depends on PcdOvmfSecGhcbBase not straddling a 2MB boundary"
 | |
|   %endif
 | |
| 
 | |
|   %define PT_ADDR(Offset) (FixedPcdGet32 (PcdOvmfSecPageTablesBase) + (Offset))
 | |
| 
 | |
|   %define GHCB_PT_ADDR (FixedPcdGet32 (PcdOvmfSecGhcbPageTableBase))
 | |
|   %define GHCB_BASE (FixedPcdGet32 (PcdOvmfSecGhcbBase))
 | |
|   %define GHCB_SIZE (FixedPcdGet32 (PcdOvmfSecGhcbSize))
 | |
|   %define SEV_ES_WORK_AREA (FixedPcdGet32 (PcdSevEsWorkAreaBase))
 | |
|   %define SEV_ES_WORK_AREA_RDRAND (FixedPcdGet32 (PcdSevEsWorkAreaBase) + 8)
 | |
|   %define SEV_ES_WORK_AREA_ENC_MASK (FixedPcdGet32 (PcdSevEsWorkAreaBase) + 16)
 | |
|   %define SEV_ES_VC_TOP_OF_STACK (FixedPcdGet32 (PcdOvmfSecPeiTempRamBase) + FixedPcdGet32 (PcdOvmfSecPeiTempRamSize))
 | |
| %include "Ia32/Flat32ToFlat64.asm"
 | |
| %include "Ia32/PageTables64.asm"
 | |
| %endif
 | |
| 
 | |
| %include "Ia16/Real16ToFlat32.asm"
 | |
| %include "Ia16/Init16.asm"
 | |
| 
 | |
| %include "Main.asm"
 | |
| 
 | |
|   %define SEV_ES_AP_RESET_IP  FixedPcdGet32 (PcdSevEsWorkAreaBase)
 | |
|   %define SEV_LAUNCH_SECRET_BASE  FixedPcdGet32 (PcdSevLaunchSecretBase)
 | |
|   %define SEV_LAUNCH_SECRET_SIZE  FixedPcdGet32 (PcdSevLaunchSecretSize)
 | |
| %include "Ia16/ResetVectorVtf0.asm"
 | |
| 
 |