From 376d3ff3496e6b1c80de5f4ac83b33a06dc5b36b Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Tue, 20 Nov 2018 11:01:50 +0100 Subject: [PATCH] Add a patch fixing touchscreens on HP AMD based laptops (rhbz#1644013) --- ...Add-SMB0001-HID-to-forbidden_id_list.patch | 104 ++++++++++++++++++ kernel.spec | 4 + 2 files changed, 108 insertions(+) create mode 100644 0001-ACPI-platform-Add-SMB0001-HID-to-forbidden_id_list.patch diff --git a/0001-ACPI-platform-Add-SMB0001-HID-to-forbidden_id_list.patch b/0001-ACPI-platform-Add-SMB0001-HID-to-forbidden_id_list.patch new file mode 100644 index 000000000..822e497af --- /dev/null +++ b/0001-ACPI-platform-Add-SMB0001-HID-to-forbidden_id_list.patch @@ -0,0 +1,104 @@ +From 5afcaee5ee71ba730fde8f66da7e320fb7e674d2 Mon Sep 17 00:00:00 2001 +From: Hans de Goede +Date: Mon, 19 Nov 2018 17:38:59 +0100 +Subject: [PATCH 4.20 regression fix] ACPI / platform: Add SMB0001 HID to + forbidden_id_list + +Many HP AMD based laptops contain an SMB0001 device like this: + +Device (SMBD) +{ + Name (_HID, "SMB0001") // _HID: Hardware ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + IO (Decode16, + 0x0B20, // Range Minimum + 0x0B20, // Range Maximum + 0x20, // Alignment + 0x20, // Length + ) + IRQ (Level, ActiveLow, Shared, ) + {7} + }) +} + +The legacy style IRQ resource here causes acpi_dev_get_irqresource() to +be called with legacy=true and this message to show in dmesg: +ACPI: IRQ 7 override to edge, high + +This causes issues when later on the AMD0030 GPIO device gets enumerated: + +Device (GPIO) +{ + Name (_HID, "AMDI0030") // _HID: Hardware ID + Name (_CID, "AMDI0030") // _CID: Compatible ID + Name (_UID, Zero) // _UID: Unique ID + Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings + { + Name (RBUF, ResourceTemplate () + { + Interrupt (ResourceConsumer, Level, ActiveLow, Shared, ,, ) + { + 0x00000007, + } + Memory32Fixed (ReadWrite, + 0xFED81500, // Address Base + 0x00000400, // Address Length + ) + }) + Return (RBUF) /* \_SB_.GPIO._CRS.RBUF */ + } +} + +Now acpi_dev_get_irqresource() gets called with legacy=false, but because +of the earlier override of the trigger-type acpi_register_gsi() returns +-EBUSY (because we try to register the same interrupt with a different +trigger-type) and we end up setting IORESOURCE_DISABLED in the flags. + +The setting of IORESOURCE_DISABLED causes platform_get_irq() to call +acpi_irq_get() which is not implemented on x86 and returns -EINVAL. +resulting in the following in dmesg: + +amd_gpio AMDI0030:00: Failed to get gpio IRQ: -22 +amd_gpio: probe of AMDI0030:00 failed with error -22 + +The SMB0001 is a "virtual" device in the sense that the only way the OS +interacts with it is through calling a couple of methods to do SMBus +transfers. As such it is weird that it has IO and IRQ resources at all, +because the driver for it is not expected to ever access the hardware +directly. + +The Linux driver for the SMB0001 device directly binds to the acpi_device +through the acpi_bus, so we do not need to instantiate a platform_device +for this ACPI device. This commit adds the SMB0001 HID to the +forbidden_id_list, avoiding the instantiating of a platform_device for it. +Not instantiating a platform_device means we will no longer call +acpi_dev_get_irqresource() for the legacy IRQ resource fixing the probe of +the AMDI0030 device failing. + +BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1644013 +BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=198715 +BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=199523 +Reported-by: Lukas Kahnert +Tested-by: Marc +Cc: stable@vger.kernel.org +Signed-off-by: Hans de Goede +--- + drivers/acpi/acpi_platform.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/drivers/acpi/acpi_platform.c b/drivers/acpi/acpi_platform.c +index eaa60c94205a..1f32caa87686 100644 +--- a/drivers/acpi/acpi_platform.c ++++ b/drivers/acpi/acpi_platform.c +@@ -30,6 +30,7 @@ static const struct acpi_device_id forbidden_id_list[] = { + {"PNP0200", 0}, /* AT DMA Controller */ + {"ACPI0009", 0}, /* IOxAPIC */ + {"ACPI000A", 0}, /* IOAPIC */ ++ {"SMB0001", 0}, /* ACPI SMBUS virtual device */ + {"", 0}, + }; + +-- +2.19.1 + diff --git a/kernel.spec b/kernel.spec index 67bb6465e..ef99a0696 100644 --- a/kernel.spec +++ b/kernel.spec @@ -606,6 +606,9 @@ Patch501: Fix-for-module-sig-verification.patch # rhbz 1431375 Patch502: input-rmi4-remove-the-need-for-artifical-IRQ.patch +# rhbz 1644013, patch pending upstream +Patch503: 0001-ACPI-platform-Add-SMB0001-HID-to-forbidden_id_list.patch + # END OF PATCH DEFINITIONS %endif @@ -1880,6 +1883,7 @@ fi %changelog * Tue Nov 20 2018 Hans de Goede - Turn on CONFIG_PINCTRL_GEMINILAKE on x86_64 (rhbz#1639155) +- Add a patch fixing touchscreens on HP AMD based laptops (rhbz#1644013) * Mon Nov 19 2018 Jeremy Cline - 4.20.0-0.rc3.git0.1 - Linux v4.20-rc3