It helps silence the same warning on VS2005 as well. Reviewed-by: Jordan Justen <[email protected]>
On 2016-03-18 16:35:24, Laszlo Ersek wrote: > VS2008 seems to think that the "PciExBarBase" variable (introduced in > commit 7b8fe63561b4) can be evaluated for the > AddReservedMemoryBaseSizeHob() function call with its value being > uninitialized / indeterminate. This is not the case (see > "mHostBridgeDevId"); suppress the warning. > > Reported-by: David Woodhouse <[email protected]> > Ref: http://thread.gmane.org/gmane.comp.bios.edk2.devel/8871/focus=9431 > Cc: David Woodhouse <[email protected]> > Cc: Jordan Justen <[email protected]> > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Laszlo Ersek <[email protected]> > --- > > Notes: > - Public branch: https://github.com/lersek/edk2/commits/suppress_vs2008 > - Patch formatted with --function-context for easier review > > OvmfPkg/PlatformPei/Platform.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/OvmfPkg/PlatformPei/Platform.c b/OvmfPkg/PlatformPei/Platform.c > index 0fc227803a84..509343e0bee5 100644 > --- a/OvmfPkg/PlatformPei/Platform.c > +++ b/OvmfPkg/PlatformPei/Platform.c > @@ -184,99 +184,100 @@ VOID > MemMapInitialization ( > VOID > ) > { > // > // Create Memory Type Information HOB > // > BuildGuidDataHob ( > &gEfiMemoryTypeInformationGuid, > mDefaultMemoryTypeInformation, > sizeof(mDefaultMemoryTypeInformation) > ); > > // > // Add PCI IO Port space available for PCI resource allocations. > // > BuildResourceDescriptorHob ( > EFI_RESOURCE_IO, > EFI_RESOURCE_ATTRIBUTE_PRESENT | > EFI_RESOURCE_ATTRIBUTE_INITIALIZED, > PcdGet64 (PcdPciIoBase), > PcdGet64 (PcdPciIoSize) > ); > > // > // Video memory + Legacy BIOS region > // > AddIoMemoryRangeHob (0x0A0000, BASE_1MB); > > if (!mXen) { > UINT32 TopOfLowRam; > UINT64 PciExBarBase; > UINT32 PciBase; > UINT32 PciSize; > > TopOfLowRam = GetSystemMemorySizeBelow4gb (); > + PciExBarBase = 0; > if (mHostBridgeDevId == INTEL_Q35_MCH_DEVICE_ID) { > // > // The MMCONFIG area is expected to fall between the top of low RAM and > // the base of the 32-bit PCI host aperture. > // > PciExBarBase = FixedPcdGet64 (PcdPciExpressBaseAddress); > ASSERT (TopOfLowRam <= PciExBarBase); > ASSERT (PciExBarBase <= MAX_UINT32 - SIZE_256MB); > PciBase = (UINT32)(PciExBarBase + SIZE_256MB); > } else { > PciBase = (TopOfLowRam < BASE_2GB) ? BASE_2GB : TopOfLowRam; > } > > // > // address purpose size > // ------------ -------- ------------------------- > // max(top, 2g) PCI MMIO 0xFC000000 - max(top, 2g) > // 0xFC000000 gap 44 MB > // 0xFEC00000 IO-APIC 4 KB > // 0xFEC01000 gap 1020 KB > // 0xFED00000 HPET 1 KB > // 0xFED00400 gap 111 KB > // 0xFED1C000 gap (PIIX4) / RCRB (ICH9) 16 KB > // 0xFED20000 gap 896 KB > // 0xFEE00000 LAPIC 1 MB > // > PciSize = 0xFC000000 - PciBase; > AddIoMemoryBaseSizeHob (PciBase, PciSize); > PcdSet64 (PcdPciMmio32Base, PciBase); > PcdSet64 (PcdPciMmio32Size, PciSize); > AddIoMemoryBaseSizeHob (0xFEC00000, SIZE_4KB); > AddIoMemoryBaseSizeHob (0xFED00000, SIZE_1KB); > if (mHostBridgeDevId == INTEL_Q35_MCH_DEVICE_ID) { > AddIoMemoryBaseSizeHob (ICH9_ROOT_COMPLEX_BASE, SIZE_16KB); > // > // Note: there should be an > // > // AddIoMemoryBaseSizeHob (PciExBarBase, SIZE_256MB); > // > // call below, just like the one above for RCBA. However, Linux insists > // that the MMCONFIG area be marked in the E820 or UEFI memory map as > // "reserved memory" -- Linux does not content itself with a simple gap > // in the memory map wherever the MCFG ACPI table points to. > // > // This appears to be a safety measure. The PCI Firmware Specification > // (rev 3.1) says in 4.1.2. "MCFG Table Description": "The resources > can > // *optionally* be returned in [...] EFIGetMemoryMap as reserved memory > // [...]". (Emphasis added here.) > // > // Normally we add memory resource descriptor HOBs in > // QemuInitializeRam(), and pre-allocate from those with memory > // allocation HOBs in InitializeRamRegions(). However, the MMCONFIG > area > // is most definitely not RAM; so, as an exception, cover it with > // uncacheable reserved memory right here. > // > AddReservedMemoryBaseSizeHob (PciExBarBase, SIZE_256MB, FALSE); > BuildMemoryAllocationHob (PciExBarBase, SIZE_256MB, > EfiReservedMemoryType); > } > AddIoMemoryBaseSizeHob (PcdGet32(PcdCpuLocalApicBaseAddress), SIZE_1MB); > } > } > > -- > 1.8.3.1 > _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

