* [PATCH 0/2] pinctrl: equilibrium: fix warning trace on load
@ 2026-02-05 12:55 Florian Eckert
2026-02-05 12:55 ` [PATCH 1/2] pinctrl: equilibrium: rename irq_chip function callbacks Florian Eckert
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Florian Eckert @ 2026-02-05 12:55 UTC (permalink / raw)
To: Linus Walleij, Bartosz Golaszewski
Cc: linux-gpio, linux-kernel, Florian Eckert, Florian Eckert
The following series of patches fixes a warning message for each GPIO
during driver loading. The core problem is that the names of the functions
in the driver implementation do not match those of the callbacks. Therefore,
the functions were used incorrectly.
For this reason, the first patch renames the callbacks and adapts them
to the usual pattern used by other drivers in this subsystem. In the second
patch of this serie, the actual problem is then fixed after it becomes
clearer that the functions have been used incorrectly.
Signed-off-by: Florian Eckert <fe@dev.tdt.de>
---
Florian Eckert (2):
pinctrl: equilibrium: rename irq_chip function callbacks
pinctrl: equilibrium: fix warning trace on load
drivers/pinctrl/pinctrl-equilibrium.c | 31 +++++++++++++++++++------------
1 file changed, 19 insertions(+), 12 deletions(-)
---
base-commit: 18f7fcd5e69a04df57b563360b88be72471d6b62
change-id: 20260205-pinctrl-equilibrium-b9d88409dd79
Best regards,
--
Florian Eckert <fe@dev.tdt.de>
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH 1/2] pinctrl: equilibrium: rename irq_chip function callbacks
2026-02-05 12:55 [PATCH 0/2] pinctrl: equilibrium: fix warning trace on load Florian Eckert
@ 2026-02-05 12:55 ` Florian Eckert
2026-02-05 12:55 ` [PATCH 2/2] pinctrl: equilibrium: fix warning trace on load Florian Eckert
2026-02-23 9:29 ` [PATCH 0/2] " Linus Walleij
2 siblings, 0 replies; 4+ messages in thread
From: Florian Eckert @ 2026-02-05 12:55 UTC (permalink / raw)
To: Linus Walleij, Bartosz Golaszewski
Cc: linux-gpio, linux-kernel, Florian Eckert, Florian Eckert
Renaming of the irq_chip callback functions to improve clarity.
Signed-off-by: Florian Eckert <fe@dev.tdt.de>
---
drivers/pinctrl/pinctrl-equilibrium.c | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/drivers/pinctrl/pinctrl-equilibrium.c b/drivers/pinctrl/pinctrl-equilibrium.c
index 2d04829b29c9976fdebbaa56e6c1407eafa121a9..99596236f4d2b1c0ea280a2bd2cf4be247bc5042 100644
--- a/drivers/pinctrl/pinctrl-equilibrium.c
+++ b/drivers/pinctrl/pinctrl-equilibrium.c
@@ -23,7 +23,7 @@
#define PIN_NAME_LEN 10
#define PAD_REG_OFF 0x100
-static void eqbr_gpio_disable_irq(struct irq_data *d)
+static void eqbr_irq_mask(struct irq_data *d)
{
struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
struct eqbr_gpio_ctrl *gctrl = gpiochip_get_data(gc);
@@ -36,7 +36,7 @@ static void eqbr_gpio_disable_irq(struct irq_data *d)
gpiochip_disable_irq(gc, offset);
}
-static void eqbr_gpio_enable_irq(struct irq_data *d)
+static void eqbr_irq_unmask(struct irq_data *d)
{
struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
struct eqbr_gpio_ctrl *gctrl = gpiochip_get_data(gc);
@@ -50,7 +50,7 @@ static void eqbr_gpio_enable_irq(struct irq_data *d)
raw_spin_unlock_irqrestore(&gctrl->lock, flags);
}
-static void eqbr_gpio_ack_irq(struct irq_data *d)
+static void eqbr_irq_ack(struct irq_data *d)
{
struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
struct eqbr_gpio_ctrl *gctrl = gpiochip_get_data(gc);
@@ -62,10 +62,10 @@ static void eqbr_gpio_ack_irq(struct irq_data *d)
raw_spin_unlock_irqrestore(&gctrl->lock, flags);
}
-static void eqbr_gpio_mask_ack_irq(struct irq_data *d)
+static void eqbr_irq_mask_ack(struct irq_data *d)
{
- eqbr_gpio_disable_irq(d);
- eqbr_gpio_ack_irq(d);
+ eqbr_irq_mask(d);
+ eqbr_irq_ack(d);
}
static inline void eqbr_cfg_bit(void __iomem *addr,
@@ -92,7 +92,7 @@ static int eqbr_irq_type_cfg(struct gpio_irq_type *type,
return 0;
}
-static int eqbr_gpio_set_irq_type(struct irq_data *d, unsigned int type)
+static int eqbr_irq_set_type(struct irq_data *d, unsigned int type)
{
struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
struct eqbr_gpio_ctrl *gctrl = gpiochip_get_data(gc);
@@ -166,11 +166,11 @@ static void eqbr_irq_handler(struct irq_desc *desc)
static const struct irq_chip eqbr_irq_chip = {
.name = "gpio_irq",
- .irq_mask = eqbr_gpio_disable_irq,
- .irq_unmask = eqbr_gpio_enable_irq,
- .irq_ack = eqbr_gpio_ack_irq,
- .irq_mask_ack = eqbr_gpio_mask_ack_irq,
- .irq_set_type = eqbr_gpio_set_irq_type,
+ .irq_ack = eqbr_irq_ack,
+ .irq_mask = eqbr_irq_mask,
+ .irq_mask_ack = eqbr_irq_mask_ack,
+ .irq_unmask = eqbr_irq_unmask,
+ .irq_set_type = eqbr_irq_set_type,
.flags = IRQCHIP_IMMUTABLE,
GPIOCHIP_IRQ_RESOURCE_HELPERS,
};
--
2.47.3
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH 2/2] pinctrl: equilibrium: fix warning trace on load
2026-02-05 12:55 [PATCH 0/2] pinctrl: equilibrium: fix warning trace on load Florian Eckert
2026-02-05 12:55 ` [PATCH 1/2] pinctrl: equilibrium: rename irq_chip function callbacks Florian Eckert
@ 2026-02-05 12:55 ` Florian Eckert
2026-02-23 9:29 ` [PATCH 0/2] " Linus Walleij
2 siblings, 0 replies; 4+ messages in thread
From: Florian Eckert @ 2026-02-05 12:55 UTC (permalink / raw)
To: Linus Walleij, Bartosz Golaszewski
Cc: linux-gpio, linux-kernel, Florian Eckert, Florian Eckert
The callback functions 'eqbr_irq_mask()' and 'eqbr_irq_ack()' are also
called in the callback function 'eqbr_irq_mask_ack()'. This is done to
avoid source code duplication. The problem, is that in the function
'eqbr_irq_mask()' also calles the gpiolib function 'gpiochip_disable_irq()'
This generates the following warning trace in the log for every gpio on
load.
[ 6.088111] ------------[ cut here ]------------
[ 6.092440] WARNING: CPU: 3 PID: 1 at drivers/gpio/gpiolib.c:3810 gpiochip_disable_irq+0x39/0x50
[ 6.097847] Modules linked in:
[ 6.097847] CPU: 3 UID: 0 PID: 1 Comm: swapper/0 Tainted: G W 6.12.59+ #0
[ 6.097847] Tainted: [W]=WARN
[ 6.097847] RIP: 0010:gpiochip_disable_irq+0x39/0x50
[ 6.097847] Code: 39 c6 48 19 c0 21 c6 48 c1 e6 05 48 03 b2 38 03 00 00 48 81 fe 00 f0 ff ff 77 11 48 8b 46 08 f6 c4 02 74 06 f0 80 66 09 fb c3 <0f> 0b 90 0f 1f 40 00 c3 66 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40
[ 6.097847] RSP: 0000:ffffc9000000b830 EFLAGS: 00010046
[ 6.097847] RAX: 0000000000000045 RBX: ffff888001be02a0 RCX: 0000000000000008
[ 6.097847] RDX: ffff888001be9000 RSI: ffff888001b2dd00 RDI: ffff888001be02a0
[ 6.097847] RBP: ffffc9000000b860 R08: 0000000000000000 R09: 0000000000000000
[ 6.097847] R10: 0000000000000001 R11: ffff888001b2a154 R12: ffff888001be0514
[ 6.097847] R13: ffff888001be02a0 R14: 0000000000000008 R15: 0000000000000000
[ 6.097847] FS: 0000000000000000(0000) GS:ffff888041d80000(0000) knlGS:0000000000000000
[ 6.097847] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 6.097847] CR2: 0000000000000000 CR3: 0000000003030000 CR4: 00000000001026b0
[ 6.097847] Call Trace:
[ 6.097847] <TASK>
[ 6.097847] ? eqbr_irq_mask+0x63/0x70
[ 6.097847] ? no_action+0x10/0x10
[ 6.097847] eqbr_irq_mask_ack+0x11/0x60
In an other driver (drivers/pinctrl/starfive/pinctrl-starfive-jh7100.c) the
interrupt is not disabled here.
To fix this, do not call the 'eqbr_irq_mask()' and 'eqbr_irq_ack()'
function. Implement instead this directly without disabling the interrupts.
Fixes: 52066a53bd11 ("pinctrl: equilibrium: Convert to immutable irq_chip")
Signed-off-by: Florian Eckert <fe@dev.tdt.de>
---
drivers/pinctrl/pinctrl-equilibrium.c | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/drivers/pinctrl/pinctrl-equilibrium.c b/drivers/pinctrl/pinctrl-equilibrium.c
index 99596236f4d2b1c0ea280a2bd2cf4be247bc5042..64a55913acf08ed5ce5b27a4d5bb17bf848a8122 100644
--- a/drivers/pinctrl/pinctrl-equilibrium.c
+++ b/drivers/pinctrl/pinctrl-equilibrium.c
@@ -64,8 +64,15 @@ static void eqbr_irq_ack(struct irq_data *d)
static void eqbr_irq_mask_ack(struct irq_data *d)
{
- eqbr_irq_mask(d);
- eqbr_irq_ack(d);
+ struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
+ struct eqbr_gpio_ctrl *gctrl = gpiochip_get_data(gc);
+ unsigned int offset = irqd_to_hwirq(d);
+ unsigned long flags;
+
+ raw_spin_lock_irqsave(&gctrl->lock, flags);
+ writel(BIT(offset), gctrl->membase + GPIO_IRNENCLR);
+ writel(BIT(offset), gctrl->membase + GPIO_IRNCR);
+ raw_spin_unlock_irqrestore(&gctrl->lock, flags);
}
static inline void eqbr_cfg_bit(void __iomem *addr,
--
2.47.3
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 0/2] pinctrl: equilibrium: fix warning trace on load
2026-02-05 12:55 [PATCH 0/2] pinctrl: equilibrium: fix warning trace on load Florian Eckert
2026-02-05 12:55 ` [PATCH 1/2] pinctrl: equilibrium: rename irq_chip function callbacks Florian Eckert
2026-02-05 12:55 ` [PATCH 2/2] pinctrl: equilibrium: fix warning trace on load Florian Eckert
@ 2026-02-23 9:29 ` Linus Walleij
2 siblings, 0 replies; 4+ messages in thread
From: Linus Walleij @ 2026-02-23 9:29 UTC (permalink / raw)
To: Florian Eckert
Cc: Bartosz Golaszewski, linux-gpio, linux-kernel, Florian Eckert
On Thu, Feb 5, 2026 at 1:56 PM Florian Eckert <fe@dev.tdt.de> wrote:
> The following series of patches fixes a warning message for each GPIO
> during driver loading. The core problem is that the names of the functions
> in the driver implementation do not match those of the callbacks. Therefore,
> the functions were used incorrectly.
>
> For this reason, the first patch renames the callbacks and adapts them
> to the usual pattern used by other drivers in this subsystem. In the second
> patch of this serie, the actual problem is then fixed after it becomes
> clearer that the functions have been used incorrectly.
>
> Signed-off-by: Florian Eckert <fe@dev.tdt.de>
Patches applied!
Yours,
Linus Walleij
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-02-23 9:29 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-02-05 12:55 [PATCH 0/2] pinctrl: equilibrium: fix warning trace on load Florian Eckert
2026-02-05 12:55 ` [PATCH 1/2] pinctrl: equilibrium: rename irq_chip function callbacks Florian Eckert
2026-02-05 12:55 ` [PATCH 2/2] pinctrl: equilibrium: fix warning trace on load Florian Eckert
2026-02-23 9:29 ` [PATCH 0/2] " Linus Walleij
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®