>From 58ba393adf60caf806b26dec9aa56d936743f595 Mon Sep 17 00:00:00 2001 From: Jordan Justen Date: Fri, 5 May 2017 01:43:31 -0700 Subject: [PATCH] PlatformPei: Force EmuVariableNvStore alignment size to power of two Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jordan Justen --- OvmfPkg/PlatformPei/Platform.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/OvmfPkg/PlatformPei/Platform.c b/OvmfPkg/PlatformPei/Platform.c index 77a8a16c15..97dce8de92 100644 --- a/OvmfPkg/PlatformPei/Platform.c +++ b/OvmfPkg/PlatformPei/Platform.c @@ -504,6 +504,14 @@ ReserveEmuVariableNvStore ( { EFI_PHYSICAL_ADDRESS VariableStore; RETURN_STATUS PcdStatus; + UINT32 EmuFvbSize; + INTN SizeHighBit; + + EmuFvbSize = 2 * PcdGet32 (PcdFlashNvStorageFtwSpareSize); + SizeHighBit = HighBitSet32 (EmuFvbSize); + if ((EmuFvbSize & (EmuFvbSize - 1)) != 0) { + SizeHighBit++; + } // // Allocate storage for NV variables early on so it will be @@ -514,13 +522,13 @@ ReserveEmuVariableNvStore ( VariableStore = (EFI_PHYSICAL_ADDRESS)(UINTN) AllocateAlignedRuntimePages ( - EFI_SIZE_TO_PAGES (2 * PcdGet32 (PcdFlashNvStorageFtwSpareSize)), - PcdGet32 (PcdFlashNvStorageFtwSpareSize) + EFI_SIZE_TO_PAGES (EmuFvbSize), + 1 << (SizeHighBit - 1) ); DEBUG ((EFI_D_INFO, "Reserved variable store memory: 0x%lX; size: %dkb\n", VariableStore, - (2 * PcdGet32 (PcdFlashNvStorageFtwSpareSize)) / 1024 + EmuFvbSize / 1024 )); PcdStatus = PcdSet64S (PcdEmuVariableNvStoreReserved, VariableStore); ASSERT_RETURN_ERROR (PcdStatus); -- 2.11.0