Thread (2 messages) 2 messages, 2 authors, 2009-08-31

How to work out the cause of a DMA Bus Error (QCI PXA320)?

flat view

From: Judith Baumgarten <hidden>
Date: 2009-08-31 16:30:42

Zitat von Robert Jarzmik [off-list ref]:
Guennadi Liakhovetski [off-list ref] writes:
quoted
On Thu, 27 Aug 2009, Judith Baumgarten wrote:
quoted
Hi,

I'm still working on the pxa_camera driver for PXA320.
Is this a new driver or an extension to pxa270?
Good question :)
It's an extension to the existing one (kernel 2.6.28.7).
quoted
quoted
At the moment I can
capture some frames (RAW mode), but then I get a DMA Bus Error.  
Has anyone an
idea how to deal with that error or work out the specific cause?
The manual says, that if an error occures the channel is stopped until it's
reprogrammed and the corresponding RUN bit is set, but there are  
no RUN bits
in QCI DMA. So I don't see a chance to start it again...
I think we also had some DMA issues on pxa270, but we fixed them latest
with these patches:

"V4L/DVB (11322): pxa_camera: Fix overrun condition on last buffer"
"V4L/DVB (11321): pxa_camera: Redesign DMA handling"

if you're writing a new driver, have a look t pxa270 and at those patches
specifically.
I implemented the most important things of that patches and it seems  
to solve some of the errors (The error occurs later).
You know, that little beast of PXA320 has a _dedicated_ 4-channel  
DMA controller
(with dedicated registers CIDADR, CIDSADR, ...). Maybe the rules we followed
for pxa270 are not all true anymore.
Yes I know. The rules are almost the same, except that I can't say,  
stop DMA at the end of the sglist with that DDADR_STOP bit.
I would suggest to Judith to scan with care PXA3xx manual, volume  
III, chapter
3.4.5. To help debugging, you could add sysfs entries for CI* registers in
3.5.28.
Could you explain how to create these entries in sysfs? They could be  
really helpfull, because it seems, that it's a timing problem. If I  
insert two or three printks it works for over 30 minutes (I stopped it  
then).
Ah, and you're right, there is no "RUN" bit in CICMDx. I suspect, after a 30s
reading of the specification, that reloading CIDADR with a correct value will
trigger the DMA transfer (QCI DMA FIFO threshold -> DMA request line  
assert ->
DMA transfer).
Yes you are right. It starts again, if I load a new Descriptor but I  
always get fifo overruns then. I will try to implement the overflow  
handling of chapter 3.4.5.3 exactly. At the moment I didn't use the  
CICR0_DIS...

Thanks
Judith

----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help