On 09/02/15 20:29, Jon Panozzo wrote:
> Patch confirmed to resolve my issue.  Thanks Laszlo!
> 
> Test performed:
>  - Created two new VMs and installed Windows 8.1 and 10 on each respectfully.
>  - This was using a build of OVMF supplied by Laszlo that contained his patch.
>  - Prior to the patch, the OS install process would start normally, but 
> graphics would freeze upon reboot due to the bug.
>  - With the patch applied, the installation completed successfully.
> 
> Tested-by: Jonathan Panozzo <[email protected] 
> <mailto:[email protected]>>

Thank you for the comprehensive report and the testing!

>> On Sep 1, 2015, at 5:17 PM, Jordan Justen <[email protected]> wrote:
>>
>> Reviewed-by: Jordan Justen <[email protected]>

Thanks for the review!

Patch committed to SVN as rev 18393.

Laszlo

>> On 2015-09-01 14:43:10, Laszlo Ersek wrote:
>>> The logic we have in place for i440fx does not work reliably on q35. For
>>> example, if the guest has 2GB of RAM, we allow the PCI root bridge driver
>>> to allocate the legacy video RAM BAR from the [2048 MB, 2816 MB] range,
>>> which falls strictly outside of the Q35 PCI host MMIO aperture that QEMU
>>> configures, and advertizes in ACPI.
>>>
>>> In turn, PCI BARs that exist outside of the PCI host aperture that is
>>> exposed in ACPI break Windows guests.
>>>
>>> Allocating PCI MMIO resources at or above 3GB on Q35 ensures that we stay
>>> within QEMU's aperture. (See the "w32.begin" assignments in
>>> "hw/pci-host/q35.c".) Furthermore, in pc_q35_init() (file
>>> "hw/i386/pc_q35.c"), QEMU ensures that the low RAM never "leaks" above
>>> 3GB.
>>>
>>> The i440fx logic is left unchanged.
>>>
>>> The Windows guest malfunction on Q35 was reported by Jon Panozzo of Lime
>>> Technology, Inc.
>>>
>>> Cc: Gerd Hoffmann <[email protected]>
>>> Cc: Jordan Justen <[email protected]>
>>> Cc: Igor Mammedov <[email protected]>
>>> Cc: Jon Panozzo <[email protected]>
>>> Cc: "Gabriel L. Somlo" <[email protected]>
>>> Contributed-under: TianoCore Contribution Agreement 1.0
>>> Signed-off-by: Laszlo Ersek <[email protected]>
>>> ---
>>> OvmfPkg/PlatformPei/Platform.c | 16 ++++++++++++++--
>>> 1 file changed, 14 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/OvmfPkg/PlatformPei/Platform.c b/OvmfPkg/PlatformPei/Platform.c
>>> index 9970d14..f6e2188 100644
>>> --- a/OvmfPkg/PlatformPei/Platform.c
>>> +++ b/OvmfPkg/PlatformPei/Platform.c
>>> @@ -204,7 +204,20 @@ MemMapInitialization (
>>>
>>>   if (!mXen) {
>>>     UINT32  TopOfLowRam;
>>> +    UINT32  PciBase;
>>> +
>>>     TopOfLowRam = GetSystemMemorySizeBelow4gb ();
>>> +    if (mHostBridgeDevId == INTEL_Q35_MCH_DEVICE_ID) {
>>> +      //
>>> +      // A 3GB base will always fall into Q35's 32-bit PCI host aperture,
>>> +      // regardless of the Q35 MMCONFIG BAR. Correspondingly, QEMU never 
>>> lets
>>> +      // the RAM below 4 GB exceed it.
>>> +      //
>>> +      PciBase = BASE_2GB + BASE_1GB;
>>> +      ASSERT (TopOfLowRam <= PciBase);
>>> +    } else {
>>> +      PciBase = (TopOfLowRam < BASE_2GB) ? BASE_2GB : TopOfLowRam;
>>> +    }
>>>
>>>     //
>>>     // address       purpose   size
>>> @@ -219,8 +232,7 @@ MemMapInitialization (
>>>     // 0xFED20000    gap                          896 KB
>>>     // 0xFEE00000    LAPIC                          1 MB
>>>     //
>>> -    AddIoMemoryRangeHob (TopOfLowRam < BASE_2GB ?
>>> -                         BASE_2GB : TopOfLowRam, 0xFC000000);
>>> +    AddIoMemoryRangeHob (PciBase, 0xFC000000);
>>>     AddIoMemoryBaseSizeHob (0xFEC00000, SIZE_4KB);
>>>     AddIoMemoryBaseSizeHob (0xFED00000, SIZE_1KB);
>>>     if (mHostBridgeDevId == INTEL_Q35_MCH_DEVICE_ID) {
>>> -- 
>>> 1.8.3.1
>>>
>>> _______________________________________________
>>> edk2-devel mailing list
>>> [email protected]
>>> https://lists.01.org/mailman/listinfo/edk2-devel
> 
> _______________________________________________
> edk2-devel mailing list
> [email protected]
> https://lists.01.org/mailman/listinfo/edk2-devel
> 

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to