Commit:24e4ad7 (OvmfPkg: Add AmdSevDxe driver) added a driver which runs early in DXE phase and clears the C-bit from NonExistent entry -- which is later split and accommodate the flash MMIO. When SMM is enabled, we build two sets of page tables; first page table is used when executing code in non SMM mode (SMM-less-pgtable) and second page table is used when we are executing code in SMM mode (SMM-pgtable). During boot time, AmdSevDxe driver clears the C-bit from the SMM-less-pgtable. But when SMM is enabled, Qemu Flash services are used from SMM mode. In this patch we explicitly clear the C-bit from Qemu flash MMIO range before we probe the flash. When OVMF is built with SMM_REQUIRE then call to initialize the flash services happen after the SMM-pgtable is created and processor has served the first SMI. At this time we will have access to the SMM-pgtable. Cc: Jordan Justen <jordan.l.justen@intel.com> Cc: Laszlo Ersek <lersek@redhat.com> Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Brijesh Singh <brijesh.singh@amd.com> [lersek@redhat.com: trivial coding style improvements] Reviewed-by: Laszlo Ersek <lersek@redhat.com>
		
			
				
	
	
		
			41 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  OVMF support for QEMU system firmware flash device: functions specific to the
 | 
						|
  runtime DXE driver build.
 | 
						|
 | 
						|
  Copyright (C) 2015, Red Hat, Inc.
 | 
						|
  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.
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#include <Library/UefiRuntimeLib.h>
 | 
						|
 | 
						|
#include "QemuFlash.h"
 | 
						|
 | 
						|
VOID
 | 
						|
QemuFlashConvertPointers (
 | 
						|
  VOID
 | 
						|
  )
 | 
						|
{
 | 
						|
  EfiConvertPointer (0x0, (VOID **) &mFlashBase);
 | 
						|
}
 | 
						|
 | 
						|
VOID
 | 
						|
QemuFlashBeforeProbe (
 | 
						|
  IN  EFI_PHYSICAL_ADDRESS    BaseAddress,
 | 
						|
  IN  UINTN                   FdBlockSize,
 | 
						|
  IN  UINTN                   FdBlockCount
 | 
						|
  )
 | 
						|
{
 | 
						|
  //
 | 
						|
  // Do nothing
 | 
						|
  //
 | 
						|
}
 |