summaryrefslogtreecommitdiffstats
path: root/OvmfPkg/PciHotPlugInitDxe
diff options
context:
space:
mode:
authorLaszlo Ersek <lersek@redhat.com>2017-09-21 13:18:11 +0200
committerLaszlo Ersek <lersek@redhat.com>2017-10-03 16:07:33 +0200
commitc18ac9fbcc71dd75f1f8cb84b6c929536c1ef580 (patch)
treecfd1d07d0d03d0614ae786c00a2adba06b9d9b52 /OvmfPkg/PciHotPlugInitDxe
parent91231fc2ff2b5d113cccdb560515a7f591f7502d (diff)
downloadedk2-c18ac9fbcc71dd75f1f8cb84b6c929536c1ef580.tar.gz
edk2-c18ac9fbcc71dd75f1f8cb84b6c929536c1ef580.tar.bz2
edk2-c18ac9fbcc71dd75f1f8cb84b6c929536c1ef580.zip
OvmfPkg/PciHotPlugInitDxe: clean up addr. range for non-prefetchable MMIO
The non-prefetchable MMIO aperture of a bridge can never fall outside of the 32-bit address space. Namely, the MemoryBase and MemoryLimit fields in PCI_BRIDGE_CONTROL_REGISTER have type UINT16, and based on the PCI-to-PCI Bridge Architecture Spec, Chapter 3.2, the actual MMIO aperture is determined as in: NonPrefetchMemoryBase = (((MemoryBase & 0xFFF0u) >> 4) << 20) | 0x00000 NonPrefetchMemoryLimit = (((MemoryLimit & 0xFFF0u) >> 4) << 20) | 0xFFFFF In "OvmfPkg/PciHotPlugInitDxe", the "mPadding.MmioPadding.AddrSpaceGranularity" field is currently initialized to 64. According to the above, this is useless generality: a non-prefetchable MMIO reservation may only be satisfied from 32-bit address space. Update the field to 32. In practice this change makes no difference, because PciBusDxe already enforces the 32-bit limitation when it sees "non-prefetchable" from (SpecificFlag==0). Quoting commit 8aba40b79267 ("OvmfPkg: add PciHotPlugInitDxe", 2016-06-30): "regardless of our request for 64-bit MMIO reservation, it is downgraded to 32-bit". (See the Platform Init Spec 1.6, Volume 5, - Table 8. "ACPI 2.0 & 3.0 QWORD Address Space Descriptor Usage", and - Table 11. "Memory Resource Flag (Resource Type = 0) Usage", for an explanation of the "mPadding.MmioPadding" fields.) Cc: Jordan Justen <jordan.l.justen@intel.com> Cc: Marcel Apfelbaum <marcel@redhat.com> Cc: Ruiyu Ni <ruiyu.ni@intel.com> Fixes: 8aba40b79267df761bd24d6874ae87f47a7bd3de Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Diffstat (limited to 'OvmfPkg/PciHotPlugInitDxe')
-rw-r--r--OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.c b/OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.c
index 2265b8c7e1..5c98f806de 100644
--- a/OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.c
+++ b/OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.c
@@ -68,8 +68,8 @@ STATIC CONST RESOURCE_PADDING mPadding = {
// ignored
0, // SpecificFlag:
// non-prefetchable
- 64, // AddrSpaceGranularity:
- // reserve 64-bit aperture
+ 32, // AddrSpaceGranularity:
+ // reserve 32-bit aperture
0, // AddrRangeMin:
// ignored
SIZE_2MB - 1, // AddrRangeMax: