Thread (16 messages) 16 messages, 4 authors, 2009-01-16

Re: [PATCH 0/4 v6] i.MX31: dmaengine and framebuffer drivers

flat view

From: Sascha Hauer <s.hauer@pengutronix.de>
Date: 2009-01-06 10:19:42
Also in: lkml

On Tue, Jan 06, 2009 at 10:51:37AM +0100, Guennadi Liakhovetski wrote:
Hi Sascha

On Tue, 6 Jan 2009, Sascha Hauer wrote:
quoted
Hi Guennadi,

On Fri, Dec 26, 2008 at 06:11:13PM +0100, Guennadi Liakhovetski wrote:
quoted
Hi,

This is version 6 of dmaengine and framebuffer drivers for i.MX31.

Changes since version 5: as requested by Sascha Hauer switched to dynamic 
IPU IRQ mapping.
I tried to express that it's really odd that you demux your _internal_
interrupts as chained handlers.
Your last comment was:
quoted
Preferably a way which does not involve introducing 100+ unused
interrupts.
which I have done. Now we're back to demux / not demux...
Can *please* anybody else say something to this issue to calm this down?
To make it easier for you please sign:

[ ] The code is fine the way it is. Sascha go home.
[ ] The code could be better, but hey, it works and the world is not
    perfect.
[ ] No, we shouldn't abuse chained interrupts for internal irq
    dispatching.
quoted
Consider a network driver which has a
rx, tx and an error status bit, all of them can trigger an interrupt. A
you aware of a single driver that uses chained interrupts for this
case?
No, they don't have to, because all this happens inside one driver
and this can easily be dispatched in one interrupt handler. IMHO chained
interrupts only make sense when you have an interrupt source which
leaves your driver code and you don't know who might be interested in,
like the assorted non channel interrupts the IPU also provides.

I bet you'd never have the idea for such a code design without the
Freescale code as a sample.
Think about other IPU interrupts. For now I removed the CSI interrupt, but 
it may well be needed at some point.
That's one of the use cases for chained interrupts, yes.
Or any of overflow interrupts?
The overflow interrupts are channel interrupts and should be handled by
the idmac code. Who else should know how to recover from a channel
overflow?
What 
do we do then? Why shall we build in limitations from the beginning, when 
there is an implementation already there, which doesn't have them? Sorry, 
do not understand.

I know you proposed to dispatch all DMA EOF interrupts to one IRQ number 
and (optionally / as required) others to single IRQs. But I like to see 
single DMA sources as separate entries in /proc/interrupts, even if only 
for debugging.
Then I propose to change all drivers this way. I want to see how
many interrupts in my network driver I get for errors, tx and so on, even
if only for debugging.
And no, it is not thanks to Freescals code, that I'm doing that, it's more 
contrary to their code - they do not implement an irq_chip API and instead 
add an API of their own.
Yes, I know, but it was their idea to treat the channel status bits as
interrupts, even if they invented their own API instead of using the
existing one.

Sascha

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help