linux-media.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* omap3isp-bt656 stopping issue
@ 2012-11-07 10:37 Julien BERAUD
  2014-08-05 22:04 ` Laurent Pinchart
  0 siblings, 1 reply; 2+ messages in thread
From: Julien BERAUD @ 2012-11-07 10:37 UTC (permalink / raw)
  To: laurent.pinchart@ideasonboard.com, linux-media@vger.kernel.org

Hello,

I have been working on a platform based on an omap3630 with a tvp5151 in 
bt656 mode and I have iommu translation faults when starting and 
stopping capture in a loop a certain number of times.
I think I have identified the problem and though my working branch is 
not exactly the same as yours, I think that you have the same issue.

When stopping ccdc capture(ccdc_set_stream), function ccdc_disable is 
called which clears the bit  ISPCCDC_PCR_EN (__ccdc_disable) and waits 
for the current frame to finish.
In progressive mode, the next vd0_isr will call ccdc_isr_buffer which 
will wait for the ccdc pcr busy flag to go off and then call function 
__ccdc_handle_stopping which will set the flags that will allow the 
stopping process to go on.

The problem seems to be that in interlaced mode, if the next vd0_isr is 
received for the first half of the frame(odd field), the ccdc_isr_buffer 
routine is not called,  __ccdc_handle_stopping is called and sets the 
flags that will allow the stopping process to go on without waiting for 
the frame to finish like it should be the case, or like it is the case 
if the next vd0_isr is received for the second part of the frame(even 
field).

Calling ccdc_isr_buffer in case ccdc->stopping & CCDC_STOP_REQUEST != 0 
makes that the flags are set only after the busy signal goes off and it 
fixes the issue I have.

By the way, I haven't seen anything in the omap3630 trm that tells me 
that in case we are in progressive mode, the busy flag goes off after 
the current field(half frame) is finished instead of the whole frame but 
I noticed this is the case.

If there is something I missed, or if the behaviour of the ccdc isn't 
supposed to be like that, could you explain what I got wrong?

Best Regards,
Julien BERAUD


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: omap3isp-bt656 stopping issue
  2012-11-07 10:37 omap3isp-bt656 stopping issue Julien BERAUD
@ 2014-08-05 22:04 ` Laurent Pinchart
  0 siblings, 0 replies; 2+ messages in thread
From: Laurent Pinchart @ 2014-08-05 22:04 UTC (permalink / raw)
  To: Julien BERAUD; +Cc: linux-media@vger.kernel.org

Hi Julien,

Going through my old BT.656-related e-mails, I think this is my most late 
reply so far. Let's hope I won't break the record in the future.

Now that BT.656 support for the OMAP3 ISP is finally going to mainline, I was 
wondering if you still had access to the platform mentioned below, and if you 
could test whether the problem still occurs.

The OMAP3 ISP code is available at

	git://linuxtv.org/pinchartl/media.git omap3isp/next

tvp5151 test patches can be found in the omap3isp/bt656 branch of the same 
repository.

On Wednesday 07 November 2012 11:37:36 Julien BERAUD wrote:
> Hello,
> 
> I have been working on a platform based on an omap3630 with a tvp5151 in
> bt656 mode and I have iommu translation faults when starting and
> stopping capture in a loop a certain number of times.
> I think I have identified the problem and though my working branch is
> not exactly the same as yours, I think that you have the same issue.
> 
> When stopping ccdc capture(ccdc_set_stream), function ccdc_disable is
> called which clears the bit  ISPCCDC_PCR_EN (__ccdc_disable) and waits
> for the current frame to finish.
> In progressive mode, the next vd0_isr will call ccdc_isr_buffer which
> will wait for the ccdc pcr busy flag to go off and then call function
> __ccdc_handle_stopping which will set the flags that will allow the
> stopping process to go on.
> 
> The problem seems to be that in interlaced mode, if the next vd0_isr is
> received for the first half of the frame(odd field), the ccdc_isr_buffer
> routine is not called,  __ccdc_handle_stopping is called and sets the
> flags that will allow the stopping process to go on without waiting for
> the frame to finish like it should be the case, or like it is the case
> if the next vd0_isr is received for the second part of the frame(even
> field).
> 
> Calling ccdc_isr_buffer in case ccdc->stopping & CCDC_STOP_REQUEST != 0
> makes that the flags are set only after the busy signal goes off and it
> fixes the issue I have.
> 
> By the way, I haven't seen anything in the omap3630 trm that tells me
> that in case we are in progressive mode, the busy flag goes off after
> the current field(half frame) is finished instead of the whole frame but
> I noticed this is the case.
> 
> If there is something I missed, or if the behaviour of the ccdc isn't
> supposed to be like that, could you explain what I got wrong?

-- 
Regards,

Laurent Pinchart


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2014-08-05 22:04 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-11-07 10:37 omap3isp-bt656 stopping issue Julien BERAUD
2014-08-05 22:04 ` Laurent Pinchart

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).