dri-devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Tomi Valkeinen <tomi.valkeinen@ti.com>
To: Rob Clark <robdclark@gmail.com>
Cc: "dri-devel@lists.freedesktop.org" <dri-devel@lists.freedesktop.org>
Subject: Re: [PATCH 2/3] drm/omap: fix enabling/disabling of video pipeline
Date: Thu, 3 Apr 2014 18:37:59 +0300	[thread overview]
Message-ID: <533D8057.6020405@ti.com> (raw)
In-Reply-To: <CAF6AEGssirmyaXXwyoMccZa9R_dZMgdJbdMWj7366+b3hZ4YXg@mail.gmail.com>


[-- Attachment #1.1: Type: text/plain, Size: 3986 bytes --]

On 03/04/14 17:58, Rob Clark wrote:
> On Thu, Apr 3, 2014 at 9:45 AM, Tomi Valkeinen <tomi.valkeinen@ti.com> wrote:
>> At the moment the omap_crtc_pre_apply() handles the enabling, disabling
>> and configuring of encoders and panels separately from the CRTC (i.e.
>> the overlay manager).
>>
>> However, this doesn't work correctly. The encoder driver has to be in
>> control of its video input (i.e. the crtc) for correct operation.
>>
>> This problem causes bugs with (at least) HDMI: the HDMI encoder supplies
>> pixel clock for DISPC, and DISPC supplies video stream for HDMI. The
>> current code first enables the HDMI encoder, and CRTC after that.
>> However, the encoder expects the video stream to start during the
>> encoder's enable, and if it doesn't, there will be sync lost errors.
>>
>> The encoder enables its video source by calling src->enable(), and this
>> call goes to omapdrm (omap_crtc_enable), but omapdrm doesn't do anything
>> in that function. Similarly for disable, which goes to
>> omap_crtc_disable().
>>
>> This patch moves the code to setup and enable/disable the crtc to
>> omap_crtc_enable. and omap_crtc_disable().
>>
>> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
> 
> I had to go back to look at the code to realize the extra
> 'omap_crtc->full_update = false' removal didn't actually matter (it
> was redundant).  So

The final 'omap_crtc->full_update = false;' is visible in the patch
below also, so you didn't need to go look at the code ;)

Looking at it, that removal is actually extra, not exactly part of this fix.

> Reviewed-by: Rob Clark <robdclark@gmail.com>

Thanks!

 Tom

> 
>> ---
>>  drivers/gpu/drm/omapdrm/omap_crtc.c | 19 ++++++++++++-------
>>  1 file changed, 12 insertions(+), 7 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/omapdrm/omap_crtc.c b/drivers/gpu/drm/omapdrm/omap_crtc.c
>> index beccff2ccf84..90916abb66ef 100644
>> --- a/drivers/gpu/drm/omapdrm/omap_crtc.c
>> +++ b/drivers/gpu/drm/omapdrm/omap_crtc.c
>> @@ -121,13 +121,25 @@ static void omap_crtc_start_update(struct omap_overlay_manager *mgr)
>>  {
>>  }
>>
>> +static void set_enabled(struct drm_crtc *crtc, bool enable);
>> +
>>  static int omap_crtc_enable(struct omap_overlay_manager *mgr)
>>  {
>> +       struct omap_crtc *omap_crtc = omap_crtcs[mgr->id];
>> +
>> +       dispc_mgr_setup(omap_crtc->channel, &omap_crtc->info);
>> +       dispc_mgr_set_timings(omap_crtc->channel,
>> +                       &omap_crtc->timings);
>> +       set_enabled(&omap_crtc->base, true);
>> +
>>         return 0;
>>  }
>>
>>  static void omap_crtc_disable(struct omap_overlay_manager *mgr)
>>  {
>> +       struct omap_crtc *omap_crtc = omap_crtcs[mgr->id];
>> +
>> +       set_enabled(&omap_crtc->base, false);
>>  }
>>
>>  static void omap_crtc_set_timings(struct omap_overlay_manager *mgr,
>> @@ -600,7 +612,6 @@ static void omap_crtc_pre_apply(struct omap_drm_apply *apply)
>>         omap_crtc->current_encoder = encoder;
>>
>>         if (!omap_crtc->enabled) {
>> -               set_enabled(&omap_crtc->base, false);
>>                 if (encoder)
>>                         omap_encoder_set_enabled(encoder, false);
>>         } else {
>> @@ -609,13 +620,7 @@ static void omap_crtc_pre_apply(struct omap_drm_apply *apply)
>>                         omap_encoder_update(encoder, omap_crtc->mgr,
>>                                         &omap_crtc->timings);
>>                         omap_encoder_set_enabled(encoder, true);
>> -                       omap_crtc->full_update = false;
>>                 }
>> -
>> -               dispc_mgr_setup(omap_crtc->channel, &omap_crtc->info);
>> -               dispc_mgr_set_timings(omap_crtc->channel,
>> -                               &omap_crtc->timings);
>> -               set_enabled(&omap_crtc->base, true);
>>         }
>>
>>         omap_crtc->full_update = false;
>> --
>> 1.8.3.2
>>



[-- Attachment #1.2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

[-- Attachment #2: Type: text/plain, Size: 159 bytes --]

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

  reply	other threads:[~2014-04-03 15:38 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-04-03 13:45 [PATCH 1/3] drm/omap: fix missing disable for unused encoder Tomi Valkeinen
2014-04-03 13:45 ` [PATCH 2/3] drm/omap: fix enabling/disabling of video pipeline Tomi Valkeinen
2014-04-03 14:58   ` Rob Clark
2014-04-03 15:37     ` Tomi Valkeinen [this message]
2014-04-03 13:45 ` [PATCH 3/3] OMAPDSS: HDMI: fix interlace output Tomi Valkeinen
2014-04-03 14:53 ` [PATCH 1/3] drm/omap: fix missing disable for unused encoder Rob Clark

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=533D8057.6020405@ti.com \
    --to=tomi.valkeinen@ti.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=robdclark@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox