Mailing List archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[linux-dvb] Re: AV7110 stable protocol proposal



On Sat, 15 Feb 2003 14:36:56 +0100, Ralph Metzler <rjkm@metzlerbros.de>
wrote:

> Finally, what exactly is the problem you are having with the 
> combined GPIO/DEBI IRQs?
> When do problems occur and with which firmware/driver?
> 
> Maybe something went wrong when moving to tasklets, which I (for
> good reasons) did not yet do.

The driver/firmware was the ci version from the 08.01.2003.

I have posted the following last week:

I have build a trace which shows the sequence of interrupts. Here are a
few samples. I deleted the lines related to other controllers.

The first column identifies the trace point:
00: av7110_irq()
2nd column: av7110 pointer
3rd column: isr
            0x00080000 debi interrupt
            0x00000008 gpio interrupt

01: gpioirq()
2nd column: av7110 pointer
3rd column: debitype at beginning

02: debiirq()
2nd column: av7110 pointer
3rd column: debitype at beginning

GPIO0 irq oops, av7110 cea40000
00: cea40000 00080000
02: cea40000 00000110

00: cea40000 00000008 gpio interrupt
01: cea40000 ffffffff gpioirq()
00: cea40000 00080000 debi interrupt
02: cea40000 00000012 debiirq() DATA_TS_RECORD OK!

00: cea40000 00000008 gpio interrupt
01: cea40000 ffffffff gpioirq()
00: cea40000 00080000 debi interrupt
00: cea40000 00000008 gpio interrupt
01: cea40000 00000012 gpioirq() DATA_TS_RECORD ERROR!

GPIO0 irq oops, av7110 cea50000
02: cea50000 00000401
00: cea50000 00000008
01: cea50000 ffffffff
00: cea50000 00080000
02: cea50000 00000012 OK!

00: cea50000 00000008 gpio interrupt
01: cea50000 ffffffff gpioirq()
00: cea50000 00080008 debi and gpio interrupt
01: cea50000 00000012 gpioirq() DATA_TS_RECORD ERROR!

GPIO0 irq oops, av7110 cea50000
00: cea50000 00000008
01: cea50000 ffffffff
00: cea50000 00080000
02: cea50000 00000012
00: cea50000 00000008
01: cea50000 ffffffff
00: cea50000 00080000
02: cea50000 00000012

00: cea50000 00000008 gpio interrupt
01: cea50000 ffffffff gpioirq()
00: cea50000 00000008 gpio interrupt
01: cea50000 00000012 gpioirq() DATA_TS_RECORD ERROR!
00: cea50000 00080000 debi interrupt

As far as I unterstood, both gpioirq() and debiirq() share state. To
work correctly the state prepared by gpioirq() has to be processed later
with a debiirq(). If a other gpioirq() comes in between we get the GPIO0
irq oops. You can see above different variants of this race. 

To fix this the processing of new gpio interrupts have to be delayed
until the debi interrupt has been processed.

Emil


--
Info:
To unsubscribe send a mail to listar@linuxtv.org with "unsubscribe linux-dvb" as subject.



Home | Main Index | Thread Index