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