This fixes a regression in 5.4 that causes a crash when a driver requests
an ARM GPIO for an IRQ.

Signed-off-by: Tim Harvey <thar...@gateworks.com>
---
 ...2-gpio-thunderx-fix-irq_request_resources.patch | 46 ++++++++++++++++++++++
 1 file changed, 46 insertions(+)
 create mode 100644 
target/linux/octeontx/patches-5.4/0002-gpio-thunderx-fix-irq_request_resources.patch

diff --git 
a/target/linux/octeontx/patches-5.4/0002-gpio-thunderx-fix-irq_request_resources.patch
 
b/target/linux/octeontx/patches-5.4/0002-gpio-thunderx-fix-irq_request_resources.patch
new file mode 100644
index 0000000..8c4de51
--- /dev/null
+++ 
b/target/linux/octeontx/patches-5.4/0002-gpio-thunderx-fix-irq_request_resources.patch
@@ -0,0 +1,46 @@
+From e8287ec10f21877eb0ac4c1fb4e89e42d8bc10da Mon Sep 17 00:00:00 2001
+From: Tim Harvey <thar...@gateworks.com>
+Date: Wed, 11 Mar 2020 08:19:45 -0700
+Subject: [PATCH 2/7] gpio: thunderx: fix irq_request_resources
+
+If there are no parent resources do not call irq_chip_request_resources_parent
+at all as this will return an error.
+
+This resolves a regression where devices using a thunderx gpio as an interrupt
+would fail probing.
+
+Fixes: 0d04d0c ("gpio: thunderx: Use the default parent apis for 
{request,release}_resources")
+Signed-off-by: Tim Harvey <thar...@gateworks.com>
+---
+ drivers/gpio/gpio-thunderx.c | 9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/gpio/gpio-thunderx.c b/drivers/gpio/gpio-thunderx.c
+index 715371b..feda2a2 100644
+--- a/drivers/gpio/gpio-thunderx.c
++++ b/drivers/gpio/gpio-thunderx.c
+@@ -363,15 +363,18 @@ static int thunderx_gpio_irq_request_resources(struct 
irq_data *data)
+ {
+       struct thunderx_line *txline = irq_data_get_irq_chip_data(data);
+       struct thunderx_gpio *txgpio = txline->txgpio;
++      struct irq_data *parent_data = data->parent_data;
+       int r;
+ 
+       r = gpiochip_lock_as_irq(&txgpio->chip, txline->line);
+       if (r)
+               return r;
+ 
+-      r = irq_chip_request_resources_parent(data);
+-      if (r)
+-              gpiochip_unlock_as_irq(&txgpio->chip, txline->line);
++      if (parent_data && parent_data->chip->irq_request_resources) {
++              r = irq_chip_request_resources_parent(data);
++              if (r)
++                      gpiochip_unlock_as_irq(&txgpio->chip, txline->line);
++      }
+ 
+       return r;
+ }
+-- 
+2.7.4
+
-- 
2.7.4


_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to