From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: redhat.com, ip: 209.132.183.28, mailfrom: lersek@redhat.com) Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by groups.io with SMTP; Fri, 03 May 2019 17:07:23 -0700 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 2E830309265B; Sat, 4 May 2019 00:07:23 +0000 (UTC) Received: from lacos-laptop-7.usersys.redhat.com (ovpn-121-107.rdu2.redhat.com [10.10.121.107]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0574C5D960; Sat, 4 May 2019 00:07:18 +0000 (UTC) From: "Laszlo Ersek" To: edk2-devel-groups-io Cc: Ard Biesheuvel , Gerd Hoffmann , Jordan Justen Subject: [PATCH 0/4] OvmfPkg/PlatformPei: fix two assertion failures with weird RAM sizes Date: Sat, 4 May 2019 02:07:11 +0200 Message-Id: <20190504000716.7525-1-lersek@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.43]); Sat, 04 May 2019 00:07:23 +0000 (UTC) Content-Transfer-Encoding: quoted-printable Repo: https://github.com/lersek/edk2.git Branch: exbar_mtrr_rhbz_1666941 Ref: https://bugzilla.redhat.com/show_bug.cgi?id=3D1666941 Ref: https://bugzilla.redhat.com/show_bug.cgi?id=3D1701710 When booting OVMF on QEMU with "weird" RAM sizes, QEMU's low-RAM split logic can trigger two assertion failures in OVMF: - conflict between PCIEXBAR (ECAM) and low-RAM, on q35, - running out of variable MTRRs when marking the uncacheable MMIO range in 32-bit address space, on both i440fx and q35. This series fixes both issues, by moving around the PCIEXBAR on q35, and by truncating the size of the uncacheable 32-bit area to a power of two. The latter idea was inspired by SeaBIOS. Tested on both machine types, with the following memory sizes (all in MB): 1025, 2815, 3583, 5120. On i440fx, the X64 build was used (without SMM). On q35, the IA32 and IA32X64 builds were used (with SMM). Testing included "/proc/mtrr" verification, 32-bit PCI MMIO aperture verification, general dmesg checks, and my usual regression tests too (ACPI S3, UEFI variable services, ...). Cc: Ard Biesheuvel Cc: Gerd Hoffmann Cc: Jordan Justen Thanks Laszlo Laszlo Ersek (4): OvmfPkg/PlatformPei: assign PciSize on both i440fx/q35 branches explicitly OvmfPkg/PlatformPei: hoist PciBase assignment above the i440fx/q35 branching OvmfPkg/PlatformPei: reorder the 32-bit PCI hole vs. the PCIEXBAR on q35 OvmfPkg/PlatformPei: fix MTRR for low-RAM sizes that have many bits clear OvmfPkg/OvmfPkgIa32.dsc | 5 +---- OvmfPkg/OvmfPkgIa32X64.dsc | 5 +---- OvmfPkg/OvmfPkgX64.dsc | 5 +---- OvmfPkg/PlatformPei/MemDetect.c | 23 +++++++++++++++++--- OvmfPkg/PlatformPei/Platform.c | 14 +++++------- OvmfPkg/PlatformPei/Platform.h | 2 ++ 6 files changed, 31 insertions(+), 23 deletions(-) --=20 2.19.1.3.g30247aa5d201