forked from Minki/linux
x86/PCI: Disable E820 reserved region clipping via quirks
To avoid unusable space that some firmware includes in PCI host bridge
_CRS, Linux currently excludes E820 reserved regions from _CRS windows; see
4dc2287c18
("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>
This commit is contained in:
parent
fa6dae5d82
commit
d341838d77
@ -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"),
|
||||
},
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user