From 3ef3209d3028b77af9f56f183370e7b67cd7c849 Mon Sep 17 00:00:00 2001 From: Laszlo Ersek Date: Thu, 18 Aug 2016 11:51:33 +0200 Subject: [PATCH] ArmVirtPkg: remove PcdKludgeMapPciMmioAsCached In ARM/AARCH64 guests that run on KVM, we can now use virtio-gpu-pci, so PcdKludgeMapPciMmioAsCached is no longer necessary. Standard VGA continues to work on TCG without the kludge. Cc: Ard Biesheuvel Cc: Jordan Justen Ref: https://tianocore.acgmultimedia.com/show_bug.cgi?id=66 Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Laszlo Ersek Reviewed-by: Ard Biesheuvel Reviewed-by: Jordan Justen --- ArmVirtPkg/ArmVirtPkg.dec | 24 ------------------- ArmVirtPkg/ArmVirtQemu.dsc | 3 --- ArmVirtPkg/ArmVirtQemuKernel.dsc | 3 --- ArmVirtPkg/PciHostBridgeDxe/PciHostBridge.c | 3 +-- .../PciHostBridgeDxe/PciHostBridgeDxe.inf | 1 - 5 files changed, 1 insertion(+), 33 deletions(-) diff --git a/ArmVirtPkg/ArmVirtPkg.dec b/ArmVirtPkg/ArmVirtPkg.dec index 9f98f28f01..a5ec421664 100644 --- a/ArmVirtPkg/ArmVirtPkg.dec +++ b/ArmVirtPkg/ArmVirtPkg.dec @@ -60,30 +60,6 @@ gArmVirtTokenSpaceGuid.PcdTerminalTypeGuidBuffer|{0x65, 0x60, 0xA6, 0xDF, 0x19, 0xB4, 0xD3, 0x11, 0x9A, 0x2D, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D}|VOID*|0x00000007 [PcdsFeatureFlag] - # - # "Map PCI MMIO as Cached" - # - # Due to the way Stage1 and Stage2 mappings are combined on Aarch64, and - # because KVM -- for the time being -- does not try to interfere with the - # Stage1 mappings, we must not set EFI_MEMORY_UC for emulated PCI MMIO - # regions. - # - # EFI_MEMORY_UC is mapped to Device-nGnRnE, and that Stage1 attribute would - # direct guest writes to host DRAM immediately, bypassing the cache - # regardless of Stage2 attributes. However, QEMU's reads of the same range - # can easily be served from the (stale) CPU cache. - # - # Setting this PCD to TRUE will use EFI_MEMORY_WB for mapping PCI MMIO - # regions, which ensures that guest writes to such regions go through the CPU - # cache. Strictly speaking this is wrong, but it is needed as a temporary - # workaround for emulated PCI devices. Setting the PCD to FALSE results in - # the theoretically correct EFI_MEMORY_UC mapping, and should be the long - # term choice, especially with assigned devices. - # - # The default is to turn off the kludge; DSC's can selectively enable it. - # - gArmVirtTokenSpaceGuid.PcdKludgeMapPciMmioAsCached|FALSE|BOOLEAN|0x00000006 - # # Pure ACPI boot # diff --git a/ArmVirtPkg/ArmVirtQemu.dsc b/ArmVirtPkg/ArmVirtQemu.dsc index 2d2c653c9e..f8b6140262 100644 --- a/ArmVirtPkg/ArmVirtQemu.dsc +++ b/ArmVirtPkg/ArmVirtQemu.dsc @@ -100,9 +100,6 @@ gEfiMdeModulePkgTokenSpaceGuid.PcdConOutGopSupport|TRUE gEfiMdeModulePkgTokenSpaceGuid.PcdConOutUgaSupport|FALSE - # Activate KVM workaround for now. - gArmVirtTokenSpaceGuid.PcdKludgeMapPciMmioAsCached|TRUE - !if $(PURE_ACPI_BOOT_ENABLE) == TRUE gArmVirtTokenSpaceGuid.PcdPureAcpiBoot|TRUE !endif diff --git a/ArmVirtPkg/ArmVirtQemuKernel.dsc b/ArmVirtPkg/ArmVirtQemuKernel.dsc index ba262ac919..ea722ddf8e 100644 --- a/ArmVirtPkg/ArmVirtQemuKernel.dsc +++ b/ArmVirtPkg/ArmVirtQemuKernel.dsc @@ -101,9 +101,6 @@ gEfiMdeModulePkgTokenSpaceGuid.PcdConOutGopSupport|TRUE gEfiMdeModulePkgTokenSpaceGuid.PcdConOutUgaSupport|FALSE - # Activate KVM workaround for now. - gArmVirtTokenSpaceGuid.PcdKludgeMapPciMmioAsCached|TRUE - [PcdsFixedAtBuild.common] gArmPlatformTokenSpaceGuid.PcdCoreCount|1 !if $(ARCH) == AARCH64 diff --git a/ArmVirtPkg/PciHostBridgeDxe/PciHostBridge.c b/ArmVirtPkg/PciHostBridgeDxe/PciHostBridge.c index 4b2b6a562a..5063782bb3 100644 --- a/ArmVirtPkg/PciHostBridgeDxe/PciHostBridge.c +++ b/ArmVirtPkg/PciHostBridgeDxe/PciHostBridge.c @@ -365,8 +365,7 @@ InitializePciHostBridge ( ); ASSERT_EFI_ERROR (Status); - MmioAttributes = FeaturePcdGet (PcdKludgeMapPciMmioAsCached) ? - EFI_MEMORY_WB : EFI_MEMORY_UC; + MmioAttributes = EFI_MEMORY_UC; Status = gDS->AddMemorySpace ( EfiGcdMemoryTypeMemoryMappedIo, diff --git a/ArmVirtPkg/PciHostBridgeDxe/PciHostBridgeDxe.inf b/ArmVirtPkg/PciHostBridgeDxe/PciHostBridgeDxe.inf index 41e134b24b..8c75eda3de 100644 --- a/ArmVirtPkg/PciHostBridgeDxe/PciHostBridgeDxe.inf +++ b/ArmVirtPkg/PciHostBridgeDxe/PciHostBridgeDxe.inf @@ -56,7 +56,6 @@ gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress [FeaturePcd] - gArmVirtTokenSpaceGuid.PcdKludgeMapPciMmioAsCached gArmVirtTokenSpaceGuid.PcdPureAcpiBoot [depex]