[PATCH RFC] irq-bcm2836: Avoid "Invalid trigger warning"
Stefan Wahren
stefan.wahren at i2se.com
Thu Nov 16 10:42:35 PST 2017
> Marc Zyngier <marc.zyngier at arm.com> hat am 16. November 2017 um 19:16 geschrieben:
>
>
> On 16/11/17 17:53, Phil Elwell wrote:
> > Hi Stefan,
> >
> > On 16/11/2017 17:34, Stefan Wahren wrote:
> >> Hi Phil,
> >>
> >>> Marc Zyngier <marc.zyngier at arm.com> hat am 16. November 2017 um 09:57 geschrieben:
> >>>
> >>>
> >>> On Thu, Nov 16 2017 at 7:53:02 am GMT, Stefan Wahren <stefan.wahren at i2se.com> wrote:
> >>>> From: Phil Elwell <phil at raspberrypi.org>
> >>>>
> >>>> Initialise the level for each IRQ to avoid a warning from the
> >>>> arm arch timer code:
> >>>>
> >>>> arch_timer: WARNING: Invalid trigger for IRQ19, assuming level low
> >>>> arch_timer: WARNING: Please fix your firmware
> >>>> arch_timer: cp15 timer(s) running at 19.20MHz (virt).
> >>>>
> >>>> Signed-off-by: Phil Elwell <phil at raspberrypi.org>
> >>>> Signed-off-by: Stefan Wahren <stefan.wahren at i2se.com>
> >>>> ---
> >>>> drivers/irqchip/irq-bcm2836.c | 2 +-
> >>>> 1 file changed, 1 insertion(+), 1 deletion(-)
> >>>>
> >>>> diff --git a/drivers/irqchip/irq-bcm2836.c b/drivers/irqchip/irq-bcm2836.c
> >>>> index 667b9e1..abc9b40 100644
> >>>> --- a/drivers/irqchip/irq-bcm2836.c
> >>>> +++ b/drivers/irqchip/irq-bcm2836.c
> >>>> @@ -104,7 +104,7 @@ static void bcm2836_arm_irqchip_register_irq(int hwirq, struct irq_chip *chip)
> >>>>
> >>>> irq_set_percpu_devid(irq);
> >>>> irq_set_chip_and_handler(irq, chip, handle_percpu_devid_irq);
> >>>> - irq_set_status_flags(irq, IRQ_NOAUTOEN);
> >>>> + irq_set_status_flags(irq, IRQ_NOAUTOEN | IRQ_TYPE_LEVEL_LOW);
> >>>> }
> >>>>
> >>>> static void
> >>>
> >>> Why is this only done for the per-cpu interrupts? I can't see what
> >>> guarantees the same thing for global interrupts...
> >>
> >> i don't know. Could you please answer?
> >>
> >> I'm only interested to get the rid of this ugly warning ...
> >>
> >> and the right fix ;-)
> >
> > That was my motivation too, with a preference for the smallest change that had
> > the desired effect.
> >
> > The warning message comes from the arch_timer code, which only cares about the
> > interrupts it has been configured to use. Since these are all per-cpu
> > interrupts, the state of the global interrupts is irrelevant.
>
> The fact that no driver screams about it doesn't make it right. You're
> being bitten by the lack of interrupt polarity description in your DT.
> That is fine as long as you only support one type, but you need to tell
> the core code what you're doing.
>
> Your whole interrupt registration thing is already quite a departure
> from the normal flow, where the interrupt should be created via the DT
> parsing code, and not eagerly like it is done here. I'd rather you
> address it by using the expected flow for a DT platform, with a xlate
> method that returns the actual trigger type (I assume all interrupts on
> this system are level...).
>
> The same issue is present in the bcm2835 interrupt controller, which
> seems to be the one implementing global interrupts.
Okay, thanks for the explanation.
Can you please point me to a good reference implementation?
>
> Thanks,
>
> M.
> --
> Jazz is not dead. It just smells funny...
More information about the linux-rpi-kernel
mailing list