]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
6.0-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 10 Oct 2022 06:32:19 +0000 (08:32 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 10 Oct 2022 06:32:19 +0000 (08:32 +0200)
added patches:
gpiolib-acpi-add-a-quirk-for-asus-um325uaz.patch
gpiolib-acpi-add-support-to-ignore-programming-an-interrupt.patch

queue-6.0/gpiolib-acpi-add-a-quirk-for-asus-um325uaz.patch [new file with mode: 0644]
queue-6.0/gpiolib-acpi-add-support-to-ignore-programming-an-interrupt.patch [new file with mode: 0644]
queue-6.0/series

diff --git a/queue-6.0/gpiolib-acpi-add-a-quirk-for-asus-um325uaz.patch b/queue-6.0/gpiolib-acpi-add-a-quirk-for-asus-um325uaz.patch
new file mode 100644 (file)
index 0000000..6bec06a
--- /dev/null
@@ -0,0 +1,50 @@
+From 0ea76c401f9245ac209f1b1ce03a7e1fb9de36e5 Mon Sep 17 00:00:00 2001
+From: Mario Limonciello <mario.limonciello@amd.com>
+Date: Tue, 2 Aug 2022 23:25:00 -0500
+Subject: gpiolib: acpi: Add a quirk for Asus UM325UAZ
+
+From: Mario Limonciello <mario.limonciello@amd.com>
+
+commit 0ea76c401f9245ac209f1b1ce03a7e1fb9de36e5 upstream.
+
+Asus UM325UAZ has GPIO 18 programmed as both an interrupt and a wake
+source, but confirmed with internal team on this design this pin is
+floating and shouldn't have been programmed. This causes lots of
+spurious IRQs on the system and horrendous battery life.
+
+Add a quirk to ignore attempts to program this pin on this system.
+
+Reported-by: Pavel Krc <reg.krn@pkrc.net>
+Link: https://bugzilla.kernel.org/show_bug.cgi?id=216208
+Reviewed-by: Hans de Goede <hdegoede@redhat.com>
+Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
+Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
+Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/gpio/gpiolib-acpi.c |   14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+--- a/drivers/gpio/gpiolib-acpi.c
++++ b/drivers/gpio/gpiolib-acpi.c
+@@ -1576,6 +1576,20 @@ static const struct dmi_system_id gpioli
+                       .ignore_wake = "INT33FF:01@0",
+               },
+       },
++      {
++              /*
++               * Interrupt storm caused from edge triggered floating pin
++               * Found in BIOS UX325UAZ.300
++               * https://bugzilla.kernel.org/show_bug.cgi?id=216208
++               */
++              .matches = {
++                      DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
++                      DMI_MATCH(DMI_PRODUCT_NAME, "ZenBook UX325UAZ_UM325UAZ"),
++              },
++              .driver_data = &(struct acpi_gpiolib_dmi_quirk) {
++                      .ignore_interrupt = "AMDI0030:00@18",
++              },
++      },
+       {} /* Terminating entry */
+ };
diff --git a/queue-6.0/gpiolib-acpi-add-support-to-ignore-programming-an-interrupt.patch b/queue-6.0/gpiolib-acpi-add-support-to-ignore-programming-an-interrupt.patch
new file mode 100644 (file)
index 0000000..663909f
--- /dev/null
@@ -0,0 +1,103 @@
+From 6b6af7bd5718f4e45a9b930533aec1158387d552 Mon Sep 17 00:00:00 2001
+From: Mario Limonciello <mario.limonciello@amd.com>
+Date: Tue, 2 Aug 2022 23:24:59 -0500
+Subject: gpiolib: acpi: Add support to ignore programming an interrupt
+
+From: Mario Limonciello <mario.limonciello@amd.com>
+
+commit 6b6af7bd5718f4e45a9b930533aec1158387d552 upstream.
+
+gpiolib-acpi already had support for ignoring a pin for wakeup, but
+if an OEM configures a floating pin as an interrupt source then
+stopping it from being a wakeup won't do much good to stop the
+interrupt storm.
+
+Add support for a module parameter and quirk infrastructure to
+ignore interrupts as well.
+
+Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
+Reviewed-by: Hans de Goede <hdegoede@redhat.com>
+Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
+Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/gpio/gpiolib-acpi.c |   24 ++++++++++++++++++++----
+ 1 file changed, 20 insertions(+), 4 deletions(-)
+
+--- a/drivers/gpio/gpiolib-acpi.c
++++ b/drivers/gpio/gpiolib-acpi.c
+@@ -32,9 +32,16 @@ MODULE_PARM_DESC(ignore_wake,
+                "controller@pin combos on which to ignore the ACPI wake flag "
+                "ignore_wake=controller@pin[,controller@pin[,...]]");
++static char *ignore_interrupt;
++module_param(ignore_interrupt, charp, 0444);
++MODULE_PARM_DESC(ignore_interrupt,
++               "controller@pin combos on which to ignore interrupt "
++               "ignore_interrupt=controller@pin[,controller@pin[,...]]");
++
+ struct acpi_gpiolib_dmi_quirk {
+       bool no_edge_events_on_boot;
+       char *ignore_wake;
++      char *ignore_interrupt;
+ };
+ /**
+@@ -317,14 +324,15 @@ static struct gpio_desc *acpi_request_ow
+       return desc;
+ }
+-static bool acpi_gpio_in_ignore_list(const char *controller_in, unsigned int pin_in)
++static bool acpi_gpio_in_ignore_list(const char *ignore_list, const char *controller_in,
++                                   unsigned int pin_in)
+ {
+       const char *controller, *pin_str;
+       unsigned int pin;
+       char *endp;
+       int len;
+-      controller = ignore_wake;
++      controller = ignore_list;
+       while (controller) {
+               pin_str = strchr(controller, '@');
+               if (!pin_str)
+@@ -348,7 +356,7 @@ static bool acpi_gpio_in_ignore_list(con
+       return false;
+ err:
+-      pr_err_once("Error: Invalid value for gpiolib_acpi.ignore_wake: %s\n", ignore_wake);
++      pr_err_once("Error: Invalid value for gpiolib_acpi.ignore_...: %s\n", ignore_list);
+       return false;
+ }
+@@ -360,7 +368,7 @@ static bool acpi_gpio_irq_is_wake(struct
+       if (agpio->wake_capable != ACPI_WAKE_CAPABLE)
+               return false;
+-      if (acpi_gpio_in_ignore_list(dev_name(parent), pin)) {
++      if (acpi_gpio_in_ignore_list(ignore_wake, dev_name(parent), pin)) {
+               dev_info(parent, "Ignoring wakeup on pin %u\n", pin);
+               return false;
+       }
+@@ -427,6 +435,11 @@ static acpi_status acpi_gpiochip_alloc_e
+               goto fail_unlock_irq;
+       }
++      if (acpi_gpio_in_ignore_list(ignore_interrupt, dev_name(chip->parent), pin)) {
++              dev_info(chip->parent, "Ignoring interrupt on pin %u\n", pin);
++              return AE_OK;
++      }
++
+       event = kzalloc(sizeof(*event), GFP_KERNEL);
+       if (!event)
+               goto fail_unlock_irq;
+@@ -1585,6 +1598,9 @@ static int __init acpi_gpio_setup_params
+       if (ignore_wake == NULL && quirk && quirk->ignore_wake)
+               ignore_wake = quirk->ignore_wake;
++      if (ignore_interrupt == NULL && quirk && quirk->ignore_interrupt)
++              ignore_interrupt = quirk->ignore_interrupt;
++
+       return 0;
+ }
index 964e57c0ceacf9bbb31b3379471c5c0eafc52c73..59bb0d70c9d742c9222479e7f41725e71efb0c89 100644 (file)
@@ -8,3 +8,5 @@ docs-update-mediator-information-in-coc-docs.patch
 hwmon-aquacomputer_d5next-fix-quadro-fan-speed-offsets.patch
 usb-mon-make-mmapped-memory-read-only.patch
 usb-serial-ftdi_sio-fix-300-bps-rate-for-sio.patch
+gpiolib-acpi-add-support-to-ignore-programming-an-interrupt.patch
+gpiolib-acpi-add-a-quirk-for-asus-um325uaz.patch