Messages in this thread | | | Subject | Re: [PATCH] x86/PCI: Add pci=no_e820 cmdline option to ignore E820 reservations for bridge windows | From | Randy Dunlap <> | Date | Tue, 5 Oct 2021 13:56:13 -0700 |
| |
On 10/5/21 8:09 AM, Hans de Goede wrote: > Some BIOS-es contain a bug where they add addresses which map to system RAM > in the PCI bridge memory window returned by the ACPI _CRS method, see > commit 4dc2287c1805 ("x86: avoid E820 regions when allocating address > space"). > > To avoid this Linux by default excludes E820 reservations when allocating > addresses since 2010. Windows however ignores E820 reserved regions for PCI > mem allocations, instead it avoids these BIOS bugs by allocates addresses > top-down. > > Recently (2020) some systems have shown-up with E820 reservations which > cover the entire _CRS returned PCI bridge memory window, causing all > attempts to assign memory to PCI bars which have not been setup by the BIOS > to fail. For example here are the relevant dmesg bits from a > Lenovo IdeaPad 3 15IIL 81WE: > > [ 0.000000] BIOS-e820: [mem 0x000000004bc50000-0x00000000cfffffff] reserved > [ 0.557473] pci_bus 0000:00: root bus resource [mem 0x65400000-0xbfffffff window] > > Add a pci=no_e820 option which allows disabling the E820 reservations > check, while still honoring the _CRS provided resources. > > And automatically enable this on the "Lenovo IdeaPad 3 15IIL05" to fix > the touchpad not working on this laptop. > > Also add a pci=use_e820 option to allow overruling the results of > DMI quirks defaulting to no_e820 on some systems. > > BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1868899 > BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1871793 > BugLink: https://bugs.launchpad.net/ubuntu/+source/linux-signed-hwe/+bug/1878279 > Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Hi Hans,
Please update Documentation/admin-guide/kernel-parameters.txt also.
> --- > arch/x86/include/asm/pci_x86.h | 10 ++++++++++ > arch/x86/kernel/resource.c | 17 +++++++++++++++++ > arch/x86/pci/acpi.c | 26 ++++++++++++++++++++++++++ > arch/x86/pci/common.c | 6 ++++++ > 4 files changed, 59 insertions(+) >
> diff --git a/arch/x86/kernel/resource.c b/arch/x86/kernel/resource.c > index 9b9fb7882c20..6069d86021f0 100644 > --- a/arch/x86/kernel/resource.c > +++ b/arch/x86/kernel/resource.c
> @@ -23,11 +24,27 @@ static void resource_clip(struct resource *res, resource_size_t start, > res->start = end + 1; > } > > +/* > + * Some BIOS-es contain a bug where they add addresses which map to system RAM > + * in the PCI bridge memory window returned by the ACPI _CRS method, see > + * commit 4dc2287c1805 ("x86: avoid E820 regions when allocating address space"). > + * To avoid this Linux by default excludes E820 reservations when allocating > + * addresses since 2010. Windows however ignores E820 reserved regions for PCI > + * mem allocations, instead it avoids these BIOS bugs by allocates addresses > + * top-down. > + * Recently (2020) some systems have shown-up with E820 reservations which > + * cover the entire _CRS returned PCI bridge memory window, causing all > + * attempts to assign memory to PCI bars which have not been setup by the BIOS
preferably: BARs
> + * to fail. The pci_use_e820 check is there as a workaround for these systems. > + */
thanks. -- ~Randy
| |