diff mbox

[RFC] gpio/gpiolib: Forbid irqchip default trigger if probed over DT

Message ID 1473170343-16853-1-git-send-email-marc.zyngier@arm.com (mailing list archive)
State New, archived
Headers show

Commit Message

Marc Zyngier Sept. 6, 2016, 1:59 p.m. UTC
Using a default trigger is a bad idea if using DT to configure
interrupts, as the device's interrupt specifier will always contain
the trigger configuration.

Let's warn about that particular situation, and revert to not
having a default. Hopefully, the couple of drivers still using
this feature will quickly be fixed.

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
---
 drivers/gpio/gpiolib.c | 9 +++++++++
 1 file changed, 9 insertions(+)

Comments

Linus Walleij Sept. 7, 2016, 10:13 p.m. UTC | #1
On Tue, Sep 6, 2016 at 3:59 PM, Marc Zyngier <marc.zyngier@arm.com> wrote:

> Using a default trigger is a bad idea if using DT to configure
> interrupts, as the device's interrupt specifier will always contain
> the trigger configuration.
>
> Let's warn about that particular situation, and revert to not
> having a default. Hopefully, the couple of drivers still using
> this feature will quickly be fixed.
>
> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>

Patch applied. This is a good way to get rid of this madness.

> +       /*
> +        * Specifying a default trigger is a terrible idea if DT is
> +        * used to configure the interrupts, as you may end-up with
> +        * conflicting triggers. Tell the user, and reset to NONE.
> +        */
> +       if (WARN_ON(of_node && type != IRQ_TYPE_NONE,
> +                   "%s: Ignoring %d default trigger\n", of_node->full_name))
> +               type = IRQ_TYPE_NONE;

I *strongly* suspect this is bad also when using ACPI.

Would the GPIO ACPI people devise a patch on top of this
to emit the same warning for the ACPI usecase?

Yours,
Linus Walleij
Mika Westerberg Sept. 8, 2016, 11:14 a.m. UTC | #2
On Thu, Sep 08, 2016 at 12:13:27AM +0200, Linus Walleij wrote:
> On Tue, Sep 6, 2016 at 3:59 PM, Marc Zyngier <marc.zyngier@arm.com> wrote:
> 
> > Using a default trigger is a bad idea if using DT to configure
> > interrupts, as the device's interrupt specifier will always contain
> > the trigger configuration.
> >
> > Let's warn about that particular situation, and revert to not
> > having a default. Hopefully, the couple of drivers still using
> > this feature will quickly be fixed.
> >
> > Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
> 
> Patch applied. This is a good way to get rid of this madness.
> 
> > +       /*
> > +        * Specifying a default trigger is a terrible idea if DT is
> > +        * used to configure the interrupts, as you may end-up with
> > +        * conflicting triggers. Tell the user, and reset to NONE.
> > +        */
> > +       if (WARN_ON(of_node && type != IRQ_TYPE_NONE,
> > +                   "%s: Ignoring %d default trigger\n", of_node->full_name))
> > +               type = IRQ_TYPE_NONE;
> 
> I *strongly* suspect this is bad also when using ACPI.

I agree.

> Would the GPIO ACPI people devise a patch on top of this
> to emit the same warning for the ACPI usecase?

Yup, I'll make a patch for ACPI next week.
diff mbox

Patch

diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index 53ff25a..e467ad7 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -1617,6 +1617,15 @@  int _gpiochip_irqchip_add(struct gpio_chip *gpiochip,
 	if (gpiochip->of_node)
 		of_node = gpiochip->of_node;
 #endif
+	/*
+	 * Specifying a default trigger is a terrible idea if DT is
+	 * used to configure the interrupts, as you may end-up with
+	 * conflicting triggers. Tell the user, and reset to NONE.
+	 */
+	if (WARN_ON(of_node && type != IRQ_TYPE_NONE,
+		    "%s: Ignoring %d default trigger\n", of_node->full_name))
+		type = IRQ_TYPE_NONE;
+
 	gpiochip->irqchip = irqchip;
 	gpiochip->irq_handler = handler;
 	gpiochip->irq_default_type = type;