[PATCH 5/6][SRU][Jammy] x86/PCI: Disable E820 reserved region clipping via quirks
Kleber Souza
kleber.sacilotto.de.souza at canonical.com
Fri Aug 5 15:30:58 UTC 2022
On 01.08.22 15:38, AceLan Kao wrote:
> From: Hans de Goede <hdegoede at redhat.com>
>
> BguLink: https://bugs.launchpad.net/bugs/1884232
^ there's a typo here that needs to be fixed when the patch is applied.
>
> To avoid unusable space that some firmware includes in PCI host bridge
> _CRS, Linux currently excludes E820 reserved regions from _CRS windows; see
> 4dc2287c1805 ("x86: avoid E820 regions when allocating address space").
>
> However, some systems supply E820 reserved regions that cover the entire
> memory window from _CRS, so clipping them out leaves no space for hot-added
> or uninitialized PCI devices.
>
> For example, from a Lenovo IdeaPad 3 15IIL 81WE:
>
> BIOS-e820: [mem 0x4bc50000-0xcfffffff] reserved
> pci_bus 0000:00: root bus resource [mem 0x65400000-0xbfffffff window]
> pci 0000:00:15.0: BAR 0: [mem 0x00000000-0x00000fff 64bit]
> pci 0000:00:15.0: BAR 0: no space for [mem size 0x00001000 64bit]
>
> Add quirks to disable the E820 clipping for machines known to do this.
>
> A single DMI_PRODUCT_VERSION "IIL" quirk matches all the below:
>
> Lenovo IdeaPad 3 14IIL05
> Lenovo IdeaPad 3 15IIL05
> Lenovo IdeaPad 3 17IIL05
> Lenovo IdeaPad 5 14IIL05
> Lenovo IdeaPad 5 15IIL05
> Lenovo IdeaPad Slim 7 14IIL05
> Lenovo IdeaPad Slim 7 15IIL05
> Lenovo IdeaPad S145-15IIL
> Lenovo IdeaPad S340-14IIL
> Lenovo IdeaPad S340-15IIL
> Lenovo IdeaPad C340-15IIL
> Lenovo BS145-15IIL
> Lenovo V14-IIL
> Lenovo V15-IIL
> Lenovo V17-IIL
> Lenovo Yoga C940-14IIL
> Lenovo Yoga S740-14IIL
> Lenovo Yoga Slim 7 14IIL05
> Lenovo Yoga Slim 7 15IIL05
>
> in addition to the following that don't actually need it because they have
> no E820 reserved regions that overlap _CRS windows:
>
> Lenovo IdeaPad Flex 5 14IIL05
> Lenovo IdeaPad Flex 5 15IIL05
> Lenovo ThinkBook 14-IIL
> Lenovo ThinkBook 15-IIL
> Lenovo Yoga S940-14IIL
>
> Other quirks match these:
>
> Acer Spin 5 (SP513-54N)
>
> Clevo X170KM-G Barebone
>
> Link: https://bugzilla.kernel.org/show_bug.cgi?id=206459 Lenovo Yoga C940-14IIL
> Link: https://bugzilla.kernel.org/show_bug.cgi?id=214259 Clevo X170KM Barebone
> Link: https://bugzilla.redhat.com/show_bug.cgi?id=1868899 Lenovo IdeaPad 3 15IIL05
> Link: https://bugzilla.redhat.com/show_bug.cgi?id=1871793 Lenovo IdeaPad 5 14IIL05
> Link: https://bugs.launchpad.net/bugs/1878279 Lenovo IdeaPad 5 14IIL05
> Link: https://bugs.launchpad.net/bugs/1880172 Lenovo IdeaPad 3 14IIL05
> Link: https://bugs.launchpad.net/bugs/1884232 Acer Spin SP513-54N
> Link: https://bugs.launchpad.net/bugs/1921649 Lenovo IdeaPad S145
> Link: https://bugs.launchpad.net/bugs/1931715 Lenovo IdeaPad S145
> Link: https://bugs.launchpad.net/bugs/1932069 Lenovo BS145-15IIL
> Link: https://lore.kernel.org/r/20220519152150.6135-3-hdegoede@redhat.com
> Signed-off-by: Hans de Goede <hdegoede at redhat.com>
> Signed-off-by: Bjorn Helgaas <bhelgaas at google.com>
> Acked-by: Rafael J. Wysocki <rafael.j.wysocki at intel.com>
> Cc: Benoit Grégoire <benoitg at coeus.ca>
> Cc: Hui Wang <hui.wang at canonical.com>
> (cherry picked from commit d341838d776abadb3ac48abdd2f1f40df5a4fc10)
> Signed-off-by: Chia-Lin Kao (AceLan) <acelan.kao at canonical.com>
> ---
> arch/x86/pci/acpi.c | 53 +++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 53 insertions(+)
>
> diff --git a/arch/x86/pci/acpi.c b/arch/x86/pci/acpi.c
> index 0e48151c1fdc..ec80ca67b9e3 100644
> --- a/arch/x86/pci/acpi.c
> +++ b/arch/x86/pci/acpi.c
> @@ -43,6 +43,14 @@ static int __init set_ignore_seg(const struct dmi_system_id *id)
> return 0;
> }
>
> +static int __init set_no_e820(const struct dmi_system_id *id)
> +{
> + printk(KERN_INFO "PCI: %s detected: not clipping E820 regions from _CRS\n",
> + id->ident);
> + pci_use_e820 = false;
> + return 0;
> +}
> +
> static const struct dmi_system_id pci_crs_quirks[] __initconst = {
> /* http://bugzilla.kernel.org/show_bug.cgi?id=14183 */
> {
> @@ -137,6 +145,51 @@ static const struct dmi_system_id pci_crs_quirks[] __initconst = {
> DMI_MATCH(DMI_PRODUCT_NAME, "HP xw9300 Workstation"),
> },
> },
> +
> + /*
> + * Many Lenovo models with "IIL" in their DMI_PRODUCT_VERSION have
> + * an E820 reserved region that covers the entire 32-bit host
> + * bridge memory window from _CRS. Using the E820 region to clip
> + * _CRS means no space is available for hot-added or uninitialized
> + * PCI devices. This typically breaks I2C controllers for touchpads
> + * and hot-added Thunderbolt devices. See the commit log for
> + * models known to require this quirk and related bug reports.
> + */
> + {
> + .callback = set_no_e820,
> + .ident = "Lenovo *IIL* product version",
> + .matches = {
> + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
> + DMI_MATCH(DMI_PRODUCT_VERSION, "IIL"),
> + },
> + },
> +
> + /*
> + * The Acer Spin 5 (SP513-54N) has the same E820 reservation covering
> + * the entire _CRS 32-bit window issue as the Lenovo *IIL* models.
> + * See https://bugs.launchpad.net/bugs/1884232
> + */
> + {
> + .callback = set_no_e820,
> + .ident = "Acer Spin 5 (SP513-54N)",
> + .matches = {
> + DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
> + DMI_MATCH(DMI_PRODUCT_NAME, "Spin SP513-54N"),
> + },
> + },
> +
> + /*
> + * Clevo X170KM-G barebones have the same E820 reservation covering
> + * the entire _CRS 32-bit window issue as the Lenovo *IIL* models.
> + * See https://bugzilla.kernel.org/show_bug.cgi?id=214259
> + */
> + {
> + .callback = set_no_e820,
> + .ident = "Clevo X170KM-G Barebone",
> + .matches = {
> + DMI_MATCH(DMI_BOARD_NAME, "X170KM-G"),
> + },
> + },
> {}
> };
>
More information about the kernel-team
mailing list