From: Tim Harvey Date: Thu, 28 May 2020 14:58:34 +0000 (-0700) Subject: octeontx: fix gpio irq request X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=3fd8e86079b21459c744b61b466b12c69ed3ab24;p=openwrt%2Fstaging%2Fblocktrron.git octeontx: fix gpio irq request 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 --- 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 0000000000..8c4de51aae --- /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 +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 +--- + 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 +