diff mbox series

[5/6,SRU,Jammy] x86/PCI: Disable E820 reserved region clipping via quirks

Message ID 20220801133831.3006674-6-acelan.kao@canonical.com
State New
Headers show
Series [1/6,SRU,Jammy] x86/PCI: Eliminate remove_e820_regions() common subexpressions | expand

Commit Message

AceLan Kao Aug. 1, 2022, 1:38 p.m. UTC
From: Hans de Goede <hdegoede@redhat.com>

BguLink: https://bugs.launchpad.net/bugs/1884232

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@redhat.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Cc: Benoit Grégoire <benoitg@coeus.ca>
Cc: Hui Wang <hui.wang@canonical.com>
(cherry picked from commit d341838d776abadb3ac48abdd2f1f40df5a4fc10)
Signed-off-by: Chia-Lin Kao (AceLan) <acelan.kao@canonical.com>
---
 arch/x86/pci/acpi.c | 53 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 53 insertions(+)

Comments

Kleber Souza Aug. 5, 2022, 3:30 p.m. UTC | #1
On 01.08.22 15:38, AceLan Kao wrote:
> From: Hans de Goede <hdegoede@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@redhat.com>
> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
> Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> Cc: Benoit Grégoire <benoitg@coeus.ca>
> Cc: Hui Wang <hui.wang@canonical.com>
> (cherry picked from commit d341838d776abadb3ac48abdd2f1f40df5a4fc10)
> Signed-off-by: Chia-Lin Kao (AceLan) <acelan.kao@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"),
> +		},
> +	},
>   	{}
>   };
>
diff mbox series

Patch

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"),
+		},
+	},
 	{}
 };