Re: [PATCH] gpio: do not set up hardware for IRQ_TYPE_NONE
On 04/23/2014 05:50 PM, Linus Walleij wrote: > Some GPIO irqchip drivers exploit the irqdomain mapping > function to set up the IRQ default type in the hardware, > make sure that if we pass IRQ_TYPE_NONE, no hardware setup > whatsoever takes place (this should be the norm) until > later when the IRQ gets utilized. > > Cc: Nishanth Menon > Cc: Peter Ujfalusi > Cc: Ezequiel Garcia > Cc: Javier Martinez Canillas > Cc: Tony Lindgren > Cc: Santosh Shilimkar > Cc: linux-omap > Signed-off-by: Linus Walleij > --- > TI folks: can you provide a Tested-by tag if this makes your > OMAPs work? I am pretty sure the other platforms will be > unaffected, if they aren't I will switch them over to react > to IRQ_TYPE_DEFAULT. > --- > drivers/gpio/gpiolib.c | 10 -- > 1 file changed, 8 insertions(+), 2 deletions(-) Thanks: Tested-by: Peter Ujfalusi > > diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c > index ee1819fdcf35..97d173e9aa2d 100644 > --- a/drivers/gpio/gpiolib.c > +++ b/drivers/gpio/gpiolib.c > @@ -1409,7 +1409,12 @@ static int gpiochip_irq_map(struct irq_domain *d, > unsigned int irq, > #else > irq_set_noprobe(irq); > #endif > - irq_set_irq_type(irq, chip->irq_default_type); > + /* > + * No set-up of the hardware will happen if IRQ_TYPE_NONE > + * is passed as default type. > + */ > + if (chip->irq_default_type != IRQ_TYPE_NONE) > + irq_set_irq_type(irq, chip->irq_default_type); > > return 0; > } > @@ -1490,7 +1495,8 @@ static void gpiochip_irqchip_remove(struct gpio_chip > *gpiochip) > * @first_irq: if not dynamically assigned, the base (first) IRQ to > * allocate gpiochip irqs from > * @handler: the irq handler to use (often a predefined irq core function) > - * @type: the default type for IRQs on this irqchip > + * @type: the default type for IRQs on this irqchip, pass IRQ_TYPE_NONE > + * to have the core avoid setting up any default type in the hardware. > * > * This function closely associates a certain irqchip with a certain > * gpiochip, providing an irq domain to translate the local IRQs to > -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] gpio: do not set up hardware for IRQ_TYPE_NONE
On 04/23/2014 09:50 AM, Linus Walleij wrote: > Some GPIO irqchip drivers exploit the irqdomain mapping > function to set up the IRQ default type in the hardware, > make sure that if we pass IRQ_TYPE_NONE, no hardware setup > whatsoever takes place (this should be the norm) until > later when the IRQ gets utilized. > > Cc: Nishanth Menon > Cc: Peter Ujfalusi > Cc: Ezequiel Garcia > Cc: Javier Martinez Canillas > Cc: Tony Lindgren > Cc: Santosh Shilimkar > Cc: linux-omap > Signed-off-by: Linus Walleij > --- > TI folks: can you provide a Tested-by tag if this makes your > OMAPs work? I am pretty sure the other platforms will be > unaffected, if they aren't I will switch them over to react > to IRQ_TYPE_DEFAULT. Tested-by: Nishanth Menon AM335x-sk (which fails to boot previously), now with this patch: http://slexy.org/raw/s20dMOz3ke Discussion thread: http://marc.info/?t=139817273800014&r=1&w=2 > --- > drivers/gpio/gpiolib.c | 10 -- > 1 file changed, 8 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c > index ee1819fdcf35..97d173e9aa2d 100644 > --- a/drivers/gpio/gpiolib.c > +++ b/drivers/gpio/gpiolib.c > @@ -1409,7 +1409,12 @@ static int gpiochip_irq_map(struct irq_domain *d, > unsigned int irq, > #else > irq_set_noprobe(irq); > #endif > - irq_set_irq_type(irq, chip->irq_default_type); > + /* > + * No set-up of the hardware will happen if IRQ_TYPE_NONE > + * is passed as default type. > + */ > + if (chip->irq_default_type != IRQ_TYPE_NONE) > + irq_set_irq_type(irq, chip->irq_default_type); > > return 0; > } > @@ -1490,7 +1495,8 @@ static void gpiochip_irqchip_remove(struct gpio_chip > *gpiochip) > * @first_irq: if not dynamically assigned, the base (first) IRQ to > * allocate gpiochip irqs from > * @handler: the irq handler to use (often a predefined irq core function) > - * @type: the default type for IRQs on this irqchip > + * @type: the default type for IRQs on this irqchip, pass IRQ_TYPE_NONE > + * to have the core avoid setting up any default type in the hardware. > * > * This function closely associates a certain irqchip with a certain > * gpiochip, providing an irq domain to translate the local IRQs to > Acked-by: Nishanth Menon -- Regards, Nishanth Menon -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] gpio: do not set up hardware for IRQ_TYPE_NONE
Hello Linus, On Wed, Apr 23, 2014 at 4:50 PM, Linus Walleij wrote: > Some GPIO irqchip drivers exploit the irqdomain mapping > function to set up the IRQ default type in the hardware, > make sure that if we pass IRQ_TYPE_NONE, no hardware setup > whatsoever takes place (this should be the norm) until > later when the IRQ gets utilized. > > Cc: Nishanth Menon > Cc: Peter Ujfalusi > Cc: Ezequiel Garcia > Cc: Javier Martinez Canillas > Cc: Tony Lindgren > Cc: Santosh Shilimkar > Cc: linux-omap > Signed-off-by: Linus Walleij > --- > TI folks: can you provide a Tested-by tag if this makes your > OMAPs work? I am pretty sure the other platforms will be > unaffected, if they aren't I will switch them over to react > to IRQ_TYPE_DEFAULT. > --- > drivers/gpio/gpiolib.c | 10 -- > 1 file changed, 8 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c > index ee1819fdcf35..97d173e9aa2d 100644 > --- a/drivers/gpio/gpiolib.c > +++ b/drivers/gpio/gpiolib.c > @@ -1409,7 +1409,12 @@ static int gpiochip_irq_map(struct irq_domain *d, > unsigned int irq, > #else > irq_set_noprobe(irq); > #endif > - irq_set_irq_type(irq, chip->irq_default_type); > + /* > +* No set-up of the hardware will happen if IRQ_TYPE_NONE > +* is passed as default type. > +*/ > + if (chip->irq_default_type != IRQ_TYPE_NONE) > + irq_set_irq_type(irq, chip->irq_default_type); > > return 0; > } > @@ -1490,7 +1495,8 @@ static void gpiochip_irqchip_remove(struct gpio_chip > *gpiochip) > * @first_irq: if not dynamically assigned, the base (first) IRQ to > * allocate gpiochip irqs from > * @handler: the irq handler to use (often a predefined irq core function) > - * @type: the default type for IRQs on this irqchip > + * @type: the default type for IRQs on this irqchip, pass IRQ_TYPE_NONE > + * to have the core avoid setting up any default type in the hardware. > * > * This function closely associates a certain irqchip with a certain > * gpiochip, providing an irq domain to translate the local IRQs to > -- > 1.9.0 > I just tested on my DM3730 IGEPv2 board and GPIO are working correctly (GPIO LED and GPIO IRQ used by the ethernet controller) Thanks a lot for your help! Tested-by: Javier Martinez Canillas -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH] gpio: do not set up hardware for IRQ_TYPE_NONE
Some GPIO irqchip drivers exploit the irqdomain mapping function to set up the IRQ default type in the hardware, make sure that if we pass IRQ_TYPE_NONE, no hardware setup whatsoever takes place (this should be the norm) until later when the IRQ gets utilized. Cc: Nishanth Menon Cc: Peter Ujfalusi Cc: Ezequiel Garcia Cc: Javier Martinez Canillas Cc: Tony Lindgren Cc: Santosh Shilimkar Cc: linux-omap Signed-off-by: Linus Walleij --- TI folks: can you provide a Tested-by tag if this makes your OMAPs work? I am pretty sure the other platforms will be unaffected, if they aren't I will switch them over to react to IRQ_TYPE_DEFAULT. --- drivers/gpio/gpiolib.c | 10 -- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c index ee1819fdcf35..97d173e9aa2d 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c @@ -1409,7 +1409,12 @@ static int gpiochip_irq_map(struct irq_domain *d, unsigned int irq, #else irq_set_noprobe(irq); #endif - irq_set_irq_type(irq, chip->irq_default_type); + /* +* No set-up of the hardware will happen if IRQ_TYPE_NONE +* is passed as default type. +*/ + if (chip->irq_default_type != IRQ_TYPE_NONE) + irq_set_irq_type(irq, chip->irq_default_type); return 0; } @@ -1490,7 +1495,8 @@ static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip) * @first_irq: if not dynamically assigned, the base (first) IRQ to * allocate gpiochip irqs from * @handler: the irq handler to use (often a predefined irq core function) - * @type: the default type for IRQs on this irqchip + * @type: the default type for IRQs on this irqchip, pass IRQ_TYPE_NONE + * to have the core avoid setting up any default type in the hardware. * * This function closely associates a certain irqchip with a certain * gpiochip, providing an irq domain to translate the local IRQs to -- 1.9.0 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html