Hi! I got some results now.
After recording with both tuners, commflagging and watching now I see the following errors: Aug 26 13:47:12 Knuckles ivtv0 warning: ENC: (0) DMA Error 0x0000000b 00420001 Aug 26 13:47:12 Knuckles ivtv0 warning: offset 108 -> 128 Aug 26 13:47:12 Knuckles ivtv0 warning: offset 128 -> 48 Aug 26 13:47:16 Knuckles ivtv0 warning: DMA err b Aug 26 13:47:16 Knuckles ivtv0 warning: ENC: (0) DMA Error 0x0000000b 00420025 Aug 26 13:47:16 Knuckles ivtv0 warning: ENC: (1) DMA Error 0x0000000b 00420005 Aug 26 13:47:16 Knuckles ivtv0 warning: offset 48 -> 128 Aug 26 13:47:17 Knuckles ivtv0 warning: offset 128 -> 0 Aug 26 13:47:22 Knuckles ivtv1 warning: ENC: (0) DMA Error 0x0000000b 00020001 Aug 26 13:47:22 Knuckles ivtv1 warning: offset 76 -> 128 Aug 26 13:47:22 Knuckles ivtv1 warning: offset 128 -> 52 Aug 26 13:47:56 Knuckles ivtv0 warning: ENC: (0) DMA Error 0x0000000b 00420001 Aug 26 13:47:56 Knuckles ivtv0 warning: offset 0 -> 128 Aug 26 13:47:56 Knuckles ivtv0 warning: ENC: (0) DMA Error 0x0000000b 00420005 Aug 26 13:47:56 Knuckles ivtv0 warning: offset 128 -> 116 Aug 26 13:47:58 Knuckles ivtv0 warning: ENC: REG_DMAXFER 2 wait failed Aug 26 13:47:58 Knuckles ivtv0 warning: ENC: (0) DMA Error 0x00000001 00400005 Aug 26 13:47:58 Knuckles ivtv0 warning: ENC: REG_DMAXFER 2 wait failed Aug 26 13:47:58 Knuckles ivtv0 warning: ENC: (1) DMA Error 0x00000001 00400001 Aug 26 13:47:58 Knuckles ivtv0 warning: ENC: REG_DMAXFER 2 wait failed Aug 26 13:47:58 Knuckles ivtv0 warning: ENC: (2) DMA Error 0x00000001 00400005 Aug 26 13:47:58 Knuckles ivtv0 warning: ENC: REG_DMAXFER 2 wait failed Aug 26 13:47:58 Knuckles ivtv0 warning: ENC: (3) DMA Error 0x00000001 00400005 Aug 26 13:47:58 Knuckles ivtv0 warning: ENC: REG_DMAXFER 2 wait failed Aug 26 13:47:58 Knuckles ivtv0 warning: ENC: (4) DMA Error 0x00000001 00400005 Aug 26 13:47:58 Knuckles ivtv0 warning: ENC: REG_DMAXFER 2 wait failed Aug 26 13:47:58 Knuckles ivtv0 warning: ENC: (5) DMA Error 0x00000001 00400001 Aug 26 13:47:58 Knuckles ivtv0 warning: ENC: REDO DMA took too many tries. Aug 26 13:47:58 Knuckles ivtv0 warning: Error Encoder DMA The first tuner crashed. commflagging immediately produces this error. Without commflagging the cards didn't crash until now. I think the hight disk access from mythcommflag produces too many DMA-errors. Tomorrow I will test the PVR-350 decoder. Thanks again for your efforts! Michael Am 25.08.2006 um 18:49 schrieb Hans Verkuil: > Hi all, > > As promised, here is the patch that should fix the DMA errors: > > http://www.xs4all.nl/~hverkuil/ivtv-dma.0.4.diff > http://www.xs4all.nl/~hverkuil/ivtv-dma.0.6.diff > > The first is the patch for ivtv-0.4.6, the second is the patch for > ivtv-0.6.3 and ivtv-0.7.0 (and also applies to the ivtv trunk). > > The patches were made in the driver directory of the ivtv source, > so you > have to apply it there. > > I have personally only tested it for the trunk (bleeding edge > development), but I expect no problems with the other versions since > the code touched by this patch is pretty much unchanged since > ivtv-0.2. > > Please test this thoroughly. Especially in combination with MythTV. If > you can, also combine it with MPEG decoding, VBI recording, X-driver, > etc. > > Some background information: > > There are several possible DMA errors. One in particular is causing > all > the problems. When a DMA write error occurs it seems the DMA engine of > the card gets confused as to what the start address is of the card's > buffers. After the DMA error the start of a buffer is set between 0 > and > 128 bytes before the actual start. Luckily for me it is not trashed, > but always limited between 0 and 128 bytes. > > So my solution is to write a special 32-bit start marker value at the > start of the buffer on the card (taking care to first read the > original > value), then start the DMA, but making the total size 256 bytes more > than is strictly necessary. > > When the DMA is finished I check whether I detect the marker value at > the expected place. If not, then I look for it in the first 128 bytes. > The place where I find the marker is the new offset. I now replace the > marker with the original value I saved earlier and I have a complete > buffer. Because I actually DMA a bit more than is needed, I still have > all data, even if it is shifted the maximum of 128 bytes. Without the > extra DMA length the latter 128 bytes might never be copied by the DMA > engine, so that's the reason for the extra length. > > This solution is very fast so there is no performance penalty. > > During stress testing (lots of CPU frequency changes) you will see > these > DMA errors occurring, but rather than giving you a broken MPEG stream > the DMA will be retried and the new offset found to keep the MPEG > stream uncorrupted. If you get a burst of these DMA errors (again, > we're talking continuous CPU frequency changes here, not a normal > situation), then some corruption may occur but it should be only for a > few frames. > > As far as I can tell this particular DMA error is now handled > correctly. > > Unfortunately there is still a 'ENC: REG_DMAXFER 2 wait failed' error > where it looks like the complete DMA engine is stalled. Again, reboot > is the only option. It only occurs during a very heavy load and I > don't > think it will happen during normal operation. > > I'm not sure whether this can be fixed at the moment. There are still > some problems with the way the current DMA handling is done with > possible race conditions. I need more research and testing to > determine > whether this is something that can be solved. > > Please keep me informed on how this works, if the test results are > positive then I'll make new releases next week. > > Enjoy (I hope :-), > > Hans > > _______________________________________________ > ivtv-users mailing list > [email protected] > http://ivtvdriver.org/mailman/listinfo/ivtv-users > _______________________________________________ ivtv-users mailing list [email protected] http://ivtvdriver.org/mailman/listinfo/ivtv-users
