[PATCH v3 09/20] drm: omapdrm: Replace DSS manager state check with omapdrm CRTC state
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Mon Dec 12 22:16:12 UTC 2016
Hi Tomi,
On Tuesday 20 Sep 2016 16:44:21 Tomi Valkeinen wrote:
> On 19/09/16 15:27, Laurent Pinchart wrote:
> > Instead of conditioning planes update based on the DD manager state, use
>
> s/DD/DSS/
>
> Maybe "manager HW state" to highlight that the status is read from a HW
> register.
I'll change that.
> > the enabled field newly added to the omap_crtc structure. This reduces
> > the dependency from the DRM layer to the DSS layer.
> >
> > The enabled field is a transitory measure, the implementation should use
> > the CRTC atomic state instead. However, given that CRTCs are currently
> > not enabled/disabled through their .enable() and .disable() operations
> > but through a convoluted code paths starting at the associated encoder
> > operations, there is not clear guarantee that the atomic state always
> > matches the hardware state. This will be refactored later, at which
> > point the enabled field will be removed.
> >
> > Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> > ---
> > Changes since v2:
> >
> > - Use enabled field in struct omap_crtc instead of CRTC atomic state
> > ---
> >
> > drivers/gpu/drm/omapdrm/omap_crtc.c | 22 +++++++++++++---------
> > 1 file changed, 13 insertions(+), 9 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/omapdrm/omap_crtc.c
> > b/drivers/gpu/drm/omapdrm/omap_crtc.c index cdcfda31043e..f41a638c8d65
> > 100644
> > --- a/drivers/gpu/drm/omapdrm/omap_crtc.c
> > +++ b/drivers/gpu/drm/omapdrm/omap_crtc.c
> > @@ -40,6 +40,7 @@ struct omap_crtc {
> >
> > bool ignore_digit_sync_lost;
> >
> > + bool enabled;
> > bool pending;
> > wait_queue_head_t pending_wait;
> > };
> > @@ -136,6 +137,7 @@ static void omap_crtc_set_enabled(struct drm_crtc
> > *crtc, bool enable)
> >
> > if (omap_crtc_output[channel]->output_type == OMAP_DISPLAY_TYPE_HDMI)
> > {
> > dispc_mgr_enable(channel, enable);
> > + omap_crtc->enabled = enable;
> > return;
> > }
> >
> > @@ -172,6 +174,7 @@ static void omap_crtc_set_enabled(struct drm_crtc
> > *crtc, bool enable)
> > }
> >
> > dispc_mgr_enable(channel, enable);
> > + omap_crtc->enabled = enable;
>
> omap_crtc_set_enabled() is only called from omap_crtc_dss_enable() and
> omap_crtc_dss_disable(). It's probably a bit cleaner to set the
> omap_crtc->enabled in those functions.
I like keeping the line close to the dispc_mgr_enable() call. If you insist I
can move it, it doesn't make a big difference. I hope to refactor all that as
part of the panel and encoder rework anyway.
> Btw, omap_crtc_set_enabled() has a comment:
>
> /* Called only from the encoder enable/disable and suspend/resume
> handlers. */
>
> which doesn't seem to hold true...
omap_crtc_dss_(enable|disable) are only called from the encoder drivers, I
think that's what the comment tries to capture.
--
Regards,
Laurent Pinchart
More information about the dri-devel
mailing list