(This is a replacement for commit39b9a5ffe6
("OvmfPkg/PlatformPei: fix MTRR for low-RAM sizes that have many bits clear", 2019-05-16).) Reintroduce the same logic as seen in commit39b9a5ffe6
for the pc (i440fx) board type. For q35, the same approach doesn't work any longer, given that (a) we'd like to keep the PCIEXBAR in the platform DSC a fixed-at-build PCD, and (b) QEMU expects the PCIEXBAR to reside at a lower address than the 32-bit PCI MMIO aperture. Therefore, introduce a helper function for determining the 32-bit "uncacheable" (MMIO) area base address: - On q35, this function behaves statically. Furthermore, the MTRR setup exploits that the range [0xB000_0000, 0xFFFF_FFFF] can be marked UC with just two variable MTRRs (one at 0xB000_0000 (size 256MB), another at 0xC000_0000 (size 1GB)). - On pc (i440fx), the function behaves dynamically, implementing the same logic as commit39b9a5ffe6
did. The PciBase value is adjusted to the value calculated, similarly to commit39b9a5ffe6
. A further simplification is that we show that the UC32 area size truncation to a whole power of two automatically guarantees a >=2GB base address. Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org> Cc: Gerd Hoffmann <kraxel@redhat.com> Cc: Jordan Justen <jordan.l.justen@intel.com> Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=1859 Signed-off-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Philippe Mathieu-Daude <philmd@redhat.com> Acked-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
125 lines
1.8 KiB
C
125 lines
1.8 KiB
C
/** @file
|
|
Platform PEI module include file.
|
|
|
|
Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR>
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
|
|
**/
|
|
|
|
#ifndef _PLATFORM_PEI_H_INCLUDED_
|
|
#define _PLATFORM_PEI_H_INCLUDED_
|
|
|
|
#include <IndustryStandard/E820.h>
|
|
|
|
VOID
|
|
AddIoMemoryBaseSizeHob (
|
|
EFI_PHYSICAL_ADDRESS MemoryBase,
|
|
UINT64 MemorySize
|
|
);
|
|
|
|
VOID
|
|
AddIoMemoryRangeHob (
|
|
EFI_PHYSICAL_ADDRESS MemoryBase,
|
|
EFI_PHYSICAL_ADDRESS MemoryLimit
|
|
);
|
|
|
|
VOID
|
|
AddMemoryBaseSizeHob (
|
|
EFI_PHYSICAL_ADDRESS MemoryBase,
|
|
UINT64 MemorySize
|
|
);
|
|
|
|
VOID
|
|
AddMemoryRangeHob (
|
|
EFI_PHYSICAL_ADDRESS MemoryBase,
|
|
EFI_PHYSICAL_ADDRESS MemoryLimit
|
|
);
|
|
|
|
VOID
|
|
AddReservedMemoryBaseSizeHob (
|
|
EFI_PHYSICAL_ADDRESS MemoryBase,
|
|
UINT64 MemorySize,
|
|
BOOLEAN Cacheable
|
|
);
|
|
|
|
VOID
|
|
AddressWidthInitialization (
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
Q35TsegMbytesInitialization (
|
|
VOID
|
|
);
|
|
|
|
EFI_STATUS
|
|
PublishPeiMemory (
|
|
VOID
|
|
);
|
|
|
|
UINT32
|
|
GetSystemMemorySizeBelow4gb (
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
QemuUc32BaseInitialization (
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
InitializeRamRegions (
|
|
VOID
|
|
);
|
|
|
|
EFI_STATUS
|
|
PeiFvInitialization (
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
InstallFeatureControlCallback (
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
InstallClearCacheCallback (
|
|
VOID
|
|
);
|
|
|
|
EFI_STATUS
|
|
InitializeXen (
|
|
VOID
|
|
);
|
|
|
|
BOOLEAN
|
|
XenDetect (
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
AmdSevInitialize (
|
|
VOID
|
|
);
|
|
|
|
extern BOOLEAN mXen;
|
|
|
|
VOID
|
|
XenPublishRamRegions (
|
|
VOID
|
|
);
|
|
|
|
extern EFI_BOOT_MODE mBootMode;
|
|
|
|
extern BOOLEAN mS3Supported;
|
|
|
|
extern UINT8 mPhysMemAddressWidth;
|
|
|
|
extern UINT32 mMaxCpuCount;
|
|
|
|
extern UINT16 mHostBridgeDevId;
|
|
|
|
extern UINT32 mQemuUc32Base;
|
|
|
|
#endif // _PLATFORM_PEI_H_INCLUDED_
|