All of 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.