Hello Gilles,

Unfortunately the patch didn't help... :-(

But ... adding more traces on the code, I can see the irq number when the
function __ipipe_grab_irq() is called.

When everything works fine, the irq number is 21 (IRQ_DA8XX_TINT12_0).

And, sometime, the irq number starts to be 22 (IRQ_DA8XX_TINT34_0). It is
the other timer present at the processor. I believe that, somehow, the
information about the timer (at least, the interrupt location) has been
changed by some code.

I will investigate more, according to these observations. I accept
suggestions :-)

Best regards,

Flavio

Flavio de Castro Alves Filho
Phi Innovations - Embedded Software Services
www.phiinnovations.com
Phone: +55 11 84 94 56 76
Skype: flavio.de.castro.alves.filho


2010/1/6 Gilles Chanteperdrix <[email protected]>

> Flavio de Castro Alves Filho wrote:
> > I believe there is a lockup during the irq handling process.
> >
> > I could not find where it is blocking.
> >
> > I performed the following tests:
> >
> > 1) add traces in every function related to interrupt ... and none was
> called
>
> Well, obviously, you missed some, because your boot logs indicate
> clearly that at least the timer interrupt is working.
>
> If you are interested in what happens at I-pipe level, the functions you
> are interested in are ipipe_grab_irq, ipipe_handle_irq,
> ipipe_mach_demux_irq, etc...
>
> >
> > 2) add traces in every function in time.c file. After the last message
> > ("ata1: SATA max UDMA/133 irq 67"), the following functions were called:
> > - read_cycles()
> > - timer32_read()
> >
> > Looking at these functions, they seam to be fine. I have no clue about
> where
> > to start debugging.
> >
> > Thank you for all your help.
>
> Try this:
>
> diff --git a/arch/arm/mach-davinci/irq.c b/arch/arm/mach-davinci/irq.c
> index 5a324c9..22ddbe2 100644
> --- a/arch/arm/mach-davinci/irq.c
> +++ b/arch/arm/mach-davinci/irq.c
> @@ -360,9 +360,11 @@ void __init davinci_irq_init(void)
>        for (i = 0; i < DAVINCI_N_AINTC_IRQ; i++) {
>                set_irq_chip(i, &davinci_irq_chip_0);
>                set_irq_flags(i, IRQF_VALID | IRQF_PROBE);
> +#ifndef CONFIG_IPIPE
>                if (i != IRQ_TINT1_TINT34)
>                        set_irq_handler(i, handle_edge_irq);
>                else
> +#endif /* CONFIG_IPIPE */
>                        set_irq_handler(i, handle_level_irq);
>        }
>  }
>
> --
>                                             Gilles.
>
_______________________________________________
Xenomai-help mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-help

Reply via email to