summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2018-11-20 11:01:50 +0100
committerHans de Goede <hdegoede@redhat.com>2018-11-20 11:02:18 +0100
commit376d3ff3496e6b1c80de5f4ac83b33a06dc5b36b (patch)
tree5b7f958cdb67207e279bd569ba394d985ce832a4
parent0adb6400290215408a069d9e24faea6d8675584e (diff)
downloadkernel-376d3ff3496e6b1c80de5f4ac83b33a06dc5b36b.tar.gz
kernel-376d3ff3496e6b1c80de5f4ac83b33a06dc5b36b.tar.xz
kernel-376d3ff3496e6b1c80de5f4ac83b33a06dc5b36b.zip
Add a patch fixing touchscreens on HP AMD based laptops (rhbz#1644013)
-rw-r--r--0001-ACPI-platform-Add-SMB0001-HID-to-forbidden_id_list.patch104
-rw-r--r--kernel.spec4
2 files changed, 108 insertions, 0 deletions
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 <hdegoede@redhat.com>
+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 <openproggerfreak@gmail.com>
+Tested-by: Marc <suaefar@googlemail.com>
+Cc: stable@vger.kernel.org
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+---
+ 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 <hdegoede@redhat.com>
- 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 <jcline@redhat.com> - 4.20.0-0.rc3.git0.1
- Linux v4.20-rc3