* How to work out the cause of a DMA Bus Error (QCI PXA320)? @ 2009-08-27 16:23 Judith Baumgarten 2009-08-27 21:53 ` Guennadi Liakhovetski 0 siblings, 1 reply; 6+ messages in thread From: Judith Baumgarten @ 2009-08-27 16:23 UTC (permalink / raw) To: linux-arm-kernel Hi, I'm still working on the pxa_camera driver for PXA320. 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... Thanks, Judith ---------------------------------------------------------------- This message was sent using IMP, the Internet Messaging Program. ^ permalink raw reply [flat|nested] 6+ messages in thread
* How to work out the cause of a DMA Bus Error (QCI PXA320)? 2009-08-27 16:23 How to work out the cause of a DMA Bus Error (QCI PXA320)? Judith Baumgarten @ 2009-08-27 21:53 ` Guennadi Liakhovetski 2009-08-28 18:53 ` Robert Jarzmik 0 siblings, 1 reply; 6+ messages in thread From: Guennadi Liakhovetski @ 2009-08-27 21:53 UTC (permalink / raw) To: linux-arm-kernel On Thu, 27 Aug 2009, Judith Baumgarten wrote: > Hi, > > I'm still working on the pxa_camera driver for PXA320. Is this a new driver or an extension to pxa270? > 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. Thanks Guennadi --- Guennadi Liakhovetski, Ph.D. Freelance Open-Source Software Developer http://www.open-technology.de/ ^ permalink raw reply [flat|nested] 6+ messages in thread
* How to work out the cause of a DMA Bus Error (QCI PXA320)? 2009-08-27 21:53 ` Guennadi Liakhovetski @ 2009-08-28 18:53 ` Robert Jarzmik 2009-08-31 16:30 ` Judith Baumgarten 0 siblings, 1 reply; 6+ messages in thread From: Robert Jarzmik @ 2009-08-28 18:53 UTC (permalink / raw) To: linux-arm-kernel Guennadi Liakhovetski <g.liakhovetski@gmx.de> writes: > On Thu, 27 Aug 2009, Judith Baumgarten wrote: > >> Hi, >> >> I'm still working on the pxa_camera driver for PXA320. > > Is this a new driver or an extension to pxa270? Good question :) >> 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. 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. 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. 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). Cheers. -- Robert ^ permalink raw reply [flat|nested] 6+ messages in thread
* How to work out the cause of a DMA Bus Error (QCI PXA320)? 2009-08-28 18:53 ` Robert Jarzmik @ 2009-08-31 16:30 ` Judith Baumgarten 2009-09-01 19:08 ` Robert Jarzmik 0 siblings, 1 reply; 6+ messages in thread From: Judith Baumgarten @ 2009-08-31 16:30 UTC (permalink / raw) To: linux-arm-kernel Zitat von Robert Jarzmik <robert.jarzmik@free.fr>: > Guennadi Liakhovetski <g.liakhovetski@gmx.de> writes: > >> On Thu, 27 Aug 2009, Judith Baumgarten wrote: >> >>> 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). >>> 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. ^ permalink raw reply [flat|nested] 6+ messages in thread
* How to work out the cause of a DMA Bus Error (QCI PXA320)? 2009-08-31 16:30 ` Judith Baumgarten @ 2009-09-01 19:08 ` Robert Jarzmik 2009-09-02 17:04 ` Judith Baumgarten 0 siblings, 1 reply; 6+ messages in thread From: Robert Jarzmik @ 2009-09-01 19:08 UTC (permalink / raw) To: linux-arm-kernel Judith Baumgarten <judith.baumgarten@tu-cottbus.de> writes: > Zitat von Robert Jarzmik <robert.jarzmik@free.fr>: > >> Guennadi Liakhovetski <g.liakhovetski@gmx.de> writes: >> >>> On Thu, 27 Aug 2009, Judith Baumgarten wrote: >> "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). Good. Guennadi won't be mad I broke the design :) May I suggest an old and dirty trick I used to debug the DMA on pxa27x. I tried the smallest size of picture, and multiple of 16 in bytes. I think it was 48x32 pixels of RGB565 (ie. 48 * 32 * 2 bytes). As you can see, that size fits in one transfer (assuming it begins on a page start). Now you try that transfer, and if a BUSERR occurs, you freeze the DMA, (comment out the DMA restarting). You check the DMA registers, find the culprit, and all is good. If you don't, you try several images, as those sport reporters shooting Formula One cars. If that doesn't trigger the bug either, you try prime numbers for width and height (small ones first, big ones next). If that doesn't trigger the bug, there is no bug :) > 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). I could provide you this : http://git.kernel.org/?p=linux/kernel/git/ycmiao/pxa-linux-2.6.git;a=commitdiff;h=f957c87757a2e2dcf825ed66d5489f9848cf8d75;hp=4ed0ec58fbcc76925d22854fa5050c2748ae3270 This is a bit egocentric, but I think that's the kind of stuff you're looking for. And if you work on in, I hope you'll expand that patch so add the specific pxa3xx registers. > >> 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... Seems a timing issue ... maybe the time the descriptor is loaded, the fifo is overrun. I seem to remember a discussion with Guennadi about DMA startup. Guennadi thought it would be better to prepare DMA before QCI interrupt signaling the end of frame (and the near to come beginning of the next one), I thought DMA should be dealt with after the interrupt. Maybe you'll prove me wrong, who knows ... Cheers. -- Robert ^ permalink raw reply [flat|nested] 6+ messages in thread
* How to work out the cause of a DMA Bus Error (QCI PXA320)? 2009-09-01 19:08 ` Robert Jarzmik @ 2009-09-02 17:04 ` Judith Baumgarten 0 siblings, 0 replies; 6+ messages in thread From: Judith Baumgarten @ 2009-09-02 17:04 UTC (permalink / raw) To: linux-arm-kernel Zitat von Robert Jarzmik <robert.jarzmik@free.fr>: >>> "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). > Good. Guennadi won't be mad I broke the design :) > > May I suggest an old and dirty trick I used to debug the DMA on > pxa27x. I tried > the smallest size of picture, and multiple of 16 in bytes. I think > it was 48x32 > pixels of RGB565 (ie. 48 * 32 * 2 bytes). > > As you can see, that size fits in one transfer (assuming it begins on a page > start). > > Now you try that transfer, and if a BUSERR occurs, you freeze the > DMA, (comment > out the DMA restarting). You check the DMA registers, find the > culprit, and all > is good. Ok, it still seems to be some kind of link_missed problem. I didn't find the culprit yet but the CICMD being 0 is an indicator I think. At the moment DMA and FIFOs are resetted and it works so far. But I could also load a new buffer. The error occurs (mostly) when there are other hardware interrupts, so there is still some timing problem. >> 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). > > I could provide you this : > http://git.kernel.org/?p=linux/kernel/git/ycmiao/pxa-linux-2.6.git;a=commitdiff;h=f957c87757a2e2dcf825ed66d5489f9848cf8d75;hp=4ed0ec58fbcc76925d22854fa5050c2748ae3270 > > This is a bit egocentric, but I think that's the kind of stuff you're looking > for. And if you work on in, I hope you'll expand that patch so add > the specific > pxa3xx registers. Due to the fact that this patch is for the system dma controller, that the pxa3xx doesn't use, I will have to integrate it to pxa_camera driver. Do you have an idea how to access the pcdev->lock out of such a function? > Seems a timing issue ... maybe the time the descriptor is loaded, the fifo is > overrun. > > I seem to remember a discussion with Guennadi about DMA startup. Guennadi > thought it would be better to prepare DMA before QCI interrupt > signaling the end > of frame (and the near to come beginning of the next one), I thought > DMA should > be dealt with after the interrupt. Maybe you'll prove me wrong, who knows ... I can only speak for pxa320, but at the moment it never minds. EOF and EOFX bits are always set at the same time so DMA can be prepared immediately after the previous buffer was marked as done. But there seems to be still a bug in synchronisation of DMA and capturing, because the first (round about) 50 pixels are transferred to the last buffer, so that the image shifted left. ---------------------------------------------------------------- This message was sent using IMP, the Internet Messaging Program. ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2009-09-02 17:04 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2009-08-27 16:23 How to work out the cause of a DMA Bus Error (QCI PXA320)? Judith Baumgarten 2009-08-27 21:53 ` Guennadi Liakhovetski 2009-08-28 18:53 ` Robert Jarzmik 2009-08-31 16:30 ` Judith Baumgarten 2009-09-01 19:08 ` Robert Jarzmik 2009-09-02 17:04 ` Judith Baumgarten
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).