Hi,

when trying to capture MJPEG on a 64 bit kernel using a DC10plus and
lavrec my computer just crashes. Some further investigation indicates
that the card performs DMA transfers to wrong memory locations: When
booting a minimal configuration (single-user, text-mode only) it doesn't
crash immediately and sometimes the screen fills with random colored
garbage. After setting the debug=4 flag the last lines in the kernel log
looked like this:
[ 1164.255254] DC10plus[0]: first frame ready: state=0x48000000 odd_even=1 
field_per_buff=2 delay=3
[ 1164.255258] DC10plus[0]: stat_com=0000 queue_state=0/0/4/32
[ 1164.255260] DC10plus[0]: seq=0 stat_com: f85f8000 f36f6000 f351d000 f3666000
[ 1164.295181] zoran_irq: astat: 0x48000000, mask: 0x29000000
[ 1164.295184] DC10plus[0]: seq=0 stat_com: f85f8000 f36f6000 f351d000 f3666000
[ 1166.140731] zoran_irq: astat: 0x40000000, mask: 0x29000000
[ 1168.144763] zoran_irq: astat: 0x40000000, mask: 0x29000000
[ 1168.148460] zoran_irq: astat: 0x40000000, mask: 0x29000000
[ 1169.379414] zoran_irq: astat: 0x40000000, mask: 0x29000000
[ 1169.386294] zoran_irq: astat: 0x40000000, mask: 0x29000000
[ 1170.156868] zoran_irq: astat: 0x40000000, mask: 0x29000000
[ 1170.166110] zoran_irq: astat: 0x40000000, mask: 0x29000000
[ 1172.174628] zoran_irq: astat: 0x40000000, mask: 0x29000000
[ 1172.181540] zoran_irq: astat: 0x40000000, mask: 0x29000000
[ 1173.892619] DC10plus[0]: jpg_sync() - timeout: codec isr=0x00
[ 1173.938802] zoran_irq: astat: 0x40000000, mask: 0x29000000
[ 1173.961638] DC10plus[0]: BUZIOC_QBUF_CAPT - frame=-1
[ 1174.012144] DC10plus[0]: jpeg_codec_sleep() - wake GPIO=0xc9008888
[ 1174.012657] DC10plus[0]: jpeg_codec_sleep() - sleep GPIO=0xc1008888
[ 1174.015830] DC10plus[0]: enable_jpg(IDLE)
[ 1174.015837] DC10plus[0]: BUZIOC_QBUF_CAPT - frame=-1
[ 1174.015853] DC10plus[0]: jpg_qbuf() - stop streaming but not in streaming 
mode
[ 1174.041925] DC10plus[0]: munmap(MJPEG)
[ 1174.041935] DC10plus[0]: zoran_close(lavrec, pid=[7711]), users(+)=1
[ 1174.041967] DC10plus[0]: jpg_fbuffer_free()
[ 1174.093414] DC10plus[0]: jpeg_codec_sleep() - wake GPIO=0xc9008888
[ 1174.093928] DC10plus[0]: jpeg_codec_sleep() - sleep GPIO=0xc1008888
[ 1174.097125] DC10plus[0]: enable_jpg(IDLE)
[ 1174.097133] DC10plus[0]: interrupts received: GIRQ1:14 JPEGRepIRQ:2 JPEG 
delays: max=1 min=1 queue_state[ 1174.100348] DC10plus[0]: zoran_close() done

As far as I understand, the contents of the stat_com entries should be
updated via DMA by the card after each captured frame and the lines with
"zoran_irq" indicate captured frames. Is this correct?

The computer is equipped with 8 GB RAM and an Intel Q35 chipset board.
Kernel is version 2.6.22 (older versions don't work on that hardware
because of missing drivers). When I use a 32 bit kernel on the same hardware
capturing works without problems.

Looking at the driver code, address translation for the card's DMA
engine is currently performed by the virt_to_bus() function, which is
deprecated since 2001 (according to Documentation/IO-mapping.txt in the
kernel tree). The documentation in DMA-mapping.txt suggests that there
is additional driver support needed on 64 bit platforms to work with
dynamic IO-MMU mapping. So I guess it's necessary to update the kernel
driver to use the current DMA API make this configuration work?

Regards,
Klaus.


-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
_______________________________________________
Mjpeg-users mailing list
Mjpeg-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mjpeg-users

Reply via email to