diff mbox series

pinctrl: cherryview: Trigger hwirq0 for interrupt-lines without a mapping

Message ID 20220104164238.253142-1-hdegoede@redhat.com
State New
Headers show
Series pinctrl: cherryview: Trigger hwirq0 for interrupt-lines without a mapping | expand

Commit Message

Hans de Goede Jan. 4, 2022, 4:42 p.m. UTC
Commit bdfbef2d29dc ("pinctrl: cherryview: Don't use selection 0 to mark
an interrupt line as unused") made the code properly differentiate
between unset vs (hwirq) 0 entries in the GPIO-controller interrupt-line
to GPIO pinnumber/hwirq mapping.

This is causing some boards to not boot. This commit restores the old
behavior of triggering hwirq 0 when receiving an interrupt on an
interrupt-line for which there is no mapping.

Fixes: bdfbef2d29dc ("pinctrl: cherryview: Don't use selection 0 to mark an interrupt line as unused")
Reported-and-tested-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
 drivers/pinctrl/intel/pinctrl-cherryview.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

Comments

Mika Westerberg Jan. 4, 2022, 4:57 p.m. UTC | #1
On Tue, Jan 04, 2022 at 05:42:38PM +0100, Hans de Goede wrote:
> Commit bdfbef2d29dc ("pinctrl: cherryview: Don't use selection 0 to mark
> an interrupt line as unused") made the code properly differentiate
> between unset vs (hwirq) 0 entries in the GPIO-controller interrupt-line
> to GPIO pinnumber/hwirq mapping.
> 
> This is causing some boards to not boot. This commit restores the old
> behavior of triggering hwirq 0 when receiving an interrupt on an
> interrupt-line for which there is no mapping.
> 
> Fixes: bdfbef2d29dc ("pinctrl: cherryview: Don't use selection 0 to mark an interrupt line as unused")
> Reported-and-tested-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>

Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Andy Shevchenko Jan. 4, 2022, 9:30 p.m. UTC | #2
On Tue, Jan 04, 2022 at 05:42:38PM +0100, Hans de Goede wrote:
> Commit bdfbef2d29dc ("pinctrl: cherryview: Don't use selection 0 to mark
> an interrupt line as unused") made the code properly differentiate
> between unset vs (hwirq) 0 entries in the GPIO-controller interrupt-line
> to GPIO pinnumber/hwirq mapping.
> 
> This is causing some boards to not boot. This commit restores the old
> behavior of triggering hwirq 0 when receiving an interrupt on an
> interrupt-line for which there is no mapping.

Acked-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Linus, can you apply this directly for v5.16 release?

> Fixes: bdfbef2d29dc ("pinctrl: cherryview: Don't use selection 0 to mark an interrupt line as unused")
> Reported-and-tested-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
> ---
>  drivers/pinctrl/intel/pinctrl-cherryview.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/pinctrl/intel/pinctrl-cherryview.c b/drivers/pinctrl/intel/pinctrl-cherryview.c
> index 683b95e9639a..5d85ef5d5da8 100644
> --- a/drivers/pinctrl/intel/pinctrl-cherryview.c
> +++ b/drivers/pinctrl/intel/pinctrl-cherryview.c
> @@ -1471,8 +1471,9 @@ static void chv_gpio_irq_handler(struct irq_desc *desc)
>  
>  		offset = cctx->intr_lines[intr_line];
>  		if (offset == CHV_INVALID_HWIRQ) {
> -			dev_err(dev, "interrupt on unused interrupt line %u\n", intr_line);
> -			continue;
> +			dev_warn_once(dev, "interrupt on unmapped interrupt line %u\n", intr_line);
> +			/* Some boards expect hwirq 0 to trigger in this case */
> +			offset = 0;
>  		}
>  
>  		generic_handle_domain_irq(gc->irq.domain, offset);
> -- 
> 2.33.1
>
Andy Shevchenko Jan. 11, 2022, 8:40 p.m. UTC | #3
On Tue, Jan 04, 2022 at 05:42:38PM +0100, Hans de Goede wrote:
> Commit bdfbef2d29dc ("pinctrl: cherryview: Don't use selection 0 to mark
> an interrupt line as unused") made the code properly differentiate
> between unset vs (hwirq) 0 entries in the GPIO-controller interrupt-line
> to GPIO pinnumber/hwirq mapping.
> 
> This is causing some boards to not boot. This commit restores the old
> behavior of triggering hwirq 0 when receiving an interrupt on an
> interrupt-line for which there is no mapping.

I conducted a research and, on the board Jarkko has issues with, all
mentioned pins are floating.

[    3.556875] cherryview-pinctrl INT33FF:00: interrupt on unmapped interrupt line 0
(I believe this matches to 76 below)

[   37.287821] cherryview-pinctrl INT33FF:03: using interrupt line 0 for pin 81
[   37.371456] cherryview-pinctrl INT33FF:02: using interrupt line 0 for pin 22
[   37.389548] cherryview-pinctrl INT33FF:03: using interrupt line 2 for pin 77
[   37.407050] cherryview-pinctrl INT33FF:00: using interrupt line 0 for pin 76

Two of them are designated for SD card and Audio Daughter board.
But in all cases is seems like PCB error, unfortunately.
Hans de Goede Jan. 12, 2022, 7:11 p.m. UTC | #4
Hi,

On 1/11/22 21:40, Andy Shevchenko wrote:
> On Tue, Jan 04, 2022 at 05:42:38PM +0100, Hans de Goede wrote:
>> Commit bdfbef2d29dc ("pinctrl: cherryview: Don't use selection 0 to mark
>> an interrupt line as unused") made the code properly differentiate
>> between unset vs (hwirq) 0 entries in the GPIO-controller interrupt-line
>> to GPIO pinnumber/hwirq mapping.
>>
>> This is causing some boards to not boot. This commit restores the old
>> behavior of triggering hwirq 0 when receiving an interrupt on an
>> interrupt-line for which there is no mapping.
> 
> I conducted a research and, on the board Jarkko has issues with, all
> mentioned pins are floating.
> 
> [    3.556875] cherryview-pinctrl INT33FF:00: interrupt on unmapped interrupt line 0
> (I believe this matches to 76 below)
> 
> [   37.287821] cherryview-pinctrl INT33FF:03: using interrupt line 0 for pin 81
> [   37.371456] cherryview-pinctrl INT33FF:02: using interrupt line 0 for pin 22
> [   37.389548] cherryview-pinctrl INT33FF:03: using interrupt line 2 for pin 77
> [   37.407050] cherryview-pinctrl INT33FF:00: using interrupt line 0 for pin 76
> 
> Two of them are designated for SD card and Audio Daughter board.
> But in all cases is seems like PCB error, unfortunately.

Ok, thank you for looking into this.

Regards,

Hans
Linus Walleij Jan. 16, 2022, 1:01 a.m. UTC | #5
On Tue, Jan 4, 2022 at 10:31 PM Andy Shevchenko
<andriy.shevchenko@linux.intel.com> wrote:

> On Tue, Jan 04, 2022 at 05:42:38PM +0100, Hans de Goede wrote:
> > Commit bdfbef2d29dc ("pinctrl: cherryview: Don't use selection 0 to mark
> > an interrupt line as unused") made the code properly differentiate
> > between unset vs (hwirq) 0 entries in the GPIO-controller interrupt-line
> > to GPIO pinnumber/hwirq mapping.
> >
> > This is causing some boards to not boot. This commit restores the old
> > behavior of triggering hwirq 0 when receiving an interrupt on an
> > interrupt-line for which there is no mapping.
>
> Acked-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
>
> Linus, can you apply this directly for v5.16 release?

Unfortunately I am a bit snowed under by backlog but I have now
applied it for fixes for v5.17.

Should I now also tag it for stable?

Yours,
Linus Walleij
Hans de Goede Jan. 16, 2022, 9:38 a.m. UTC | #6
Hi,

On 1/16/22 02:01, Linus Walleij wrote:
> On Tue, Jan 4, 2022 at 10:31 PM Andy Shevchenko
> <andriy.shevchenko@linux.intel.com> wrote:
> 
>> On Tue, Jan 04, 2022 at 05:42:38PM +0100, Hans de Goede wrote:
>>> Commit bdfbef2d29dc ("pinctrl: cherryview: Don't use selection 0 to mark
>>> an interrupt line as unused") made the code properly differentiate
>>> between unset vs (hwirq) 0 entries in the GPIO-controller interrupt-line
>>> to GPIO pinnumber/hwirq mapping.
>>>
>>> This is causing some boards to not boot. This commit restores the old
>>> behavior of triggering hwirq 0 when receiving an interrupt on an
>>> interrupt-line for which there is no mapping.
>>
>> Acked-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
>>
>> Linus, can you apply this directly for v5.16 release?
> 
> Unfortunately I am a bit snowed under by backlog but I have now
> applied it for fixes for v5.17.

Thank you.

> Should I now also tag it for stable?

The troublesome commit this fixes / worksaround is only in Torvald's
current master, not in the v5.16 tag, so there is no need for this to
go stable.

Regards,

Hans
diff mbox series

Patch

diff --git a/drivers/pinctrl/intel/pinctrl-cherryview.c b/drivers/pinctrl/intel/pinctrl-cherryview.c
index 683b95e9639a..5d85ef5d5da8 100644
--- a/drivers/pinctrl/intel/pinctrl-cherryview.c
+++ b/drivers/pinctrl/intel/pinctrl-cherryview.c
@@ -1471,8 +1471,9 @@  static void chv_gpio_irq_handler(struct irq_desc *desc)
 
 		offset = cctx->intr_lines[intr_line];
 		if (offset == CHV_INVALID_HWIRQ) {
-			dev_err(dev, "interrupt on unused interrupt line %u\n", intr_line);
-			continue;
+			dev_warn_once(dev, "interrupt on unmapped interrupt line %u\n", intr_line);
+			/* Some boards expect hwirq 0 to trigger in this case */
+			offset = 0;
 		}
 
 		generic_handle_domain_irq(gc->irq.domain, offset);