Hi Lane, On Wednesday 01 December 2010 23:23:51 Lane Brooks wrote: > Laurent, > > Previously I was getting iommu translation faults when switching from > the RESIZER output to the CCDC output. > > I have finally pulled in all the changes on the > git://gitorious.org/maemo-multimedia/omap3isp-rx51.git line and I am > happy to say that those translation faults have gone away. I can now > switch between the RESIZE and the CCDC without any issues. > > I still have a problem though. Our image sensor plugs in as a module and > can unfortunately be unplugged while the pipeline is streaming. Noooooooooooo don't do that ! Please :-) > When this happens, I get a select timeout (as I would expect) and then when > I stop the stream I get the message: > > omap3isp omap3isp: CCDC stop timeout! > omap3isp omap3isp: Unable to stop OMAP3 ISP CCDC > > When I plug the image sensor module back in, I can open the devices back > up and setup the pipeline without issue, but when I try to start the > stream back up, I get: > > omap-iommu omap-iommu.0: omap2_iommu_fault_isr: da:004b4600 translation > fault > omap-iommu omap-iommu.0: iommu_fault_handler: da:004b4600 pgd:ce348010 > *pgd:8d3b8c01 pte:cd3b8ed0 *pte:885e0002 > omapdss DISPC error: GFX_FIFO_UNDERFLOW, disabling GFX > > and the kernel locks up hard. > > This translation fault, the GFX_FIFO_UNDERFLOW, and kernel locking up > are new behavior. Previously I would just get "CCDC won't become idle" > error message when I tried to start the stream back up. > > Any ideas on the problem? Is there a way to force a reset to the CCDC so > that it will become IDLE? Would you expect the ISP to recover gracefully if you removed the OMAP3530 or the RAM from the board and plugged it back ? The same applies to the sensor :-) Long story short, once started, the CCDC can't be stopped before the end of the image. When you unplug the sensor the CCDC will wait forever for the end of frame. When restarted it will resume working to the previous, no longer mapped buffer, leading to IOMMU faults. The CCDC, like most ISP blocks, can't be reset individually. You need to reset the whole ISP to recover from this (blame whoever decided that individual block resets were not useful). This was done before on streamoff, but now that the ISP driver supports running multiple pipelines in parallel we can't do it anymore. It might be possible to write a clean patch to reset the ISP when all streams are stopped. In the meantime you can rmmod/modprobe the driver. -- Regards, Laurent Pinchart -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html