Re: Translation Faults on OMAP ISP update

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux