[PATCH] drm/atomic-helper: Don't skip plane disabling on active CRTC

Daniel Vetter daniel at ffwll.ch
Sun Sep 13 14:22:01 PDT 2015


On Sun, Sep 13, 2015 at 11:33:26PM +0300, Laurent Pinchart wrote:
> Hi Daniel,
> 
> I've successfully tested the following patch with the rcar-du-drm driver. I'm 
> not sure who else passes a true active_only argument to 
> drm_atomic_helper_commit_planes() out-of-tree so I don't know who you would 
> like to received a Tested-by tag from, but I'll need both your base patch and 
> this fix for my next rcar-du-drm pull request.

I've pulled this one into drm-misc and I plan to send out a pull request
to Dave (now that -rc1 is out) next week sometimes. Then you can just
rebase the rcar parts on top of drm-next.

Thanks, Daniel

> 
> On Friday 11 September 2015 00:07:19 Laurent Pinchart wrote:
> > Since commit "drm/atomic-helper: Add option to update planes only on
> > active crtc" the drm_atomic_helper_commit_planes() function accepts an
> > active_only argument to skip updating planes when the associated CRTC is
> > inactive. Planes being disabled on an active CRTC are incorrectly
> > considered as associated with an inactive CRTC and are thus skipped,
> > preventing any plane disabling update from reaching drivers.
> > 
> > Fix it by checking the state of the CRTC stored in the old plane state
> > for planes being disabled.
> > 
> > Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas at ideasonboard.com>
> > ---
> >  drivers/gpu/drm/drm_atomic_helper.c | 24 ++++++++++++++++++------
> >  1 file changed, 18 insertions(+), 6 deletions(-)
> > 
> > Hi Daniel,
> > 
> > This fixes the patch mentioned in the commit message. Please feel free to
> > squash the fix into the original patch if it's not too late, or take it in
> > your branch otherwise (in which case a Fixes: line might be appropriate).
> > 
> > diff --git a/drivers/gpu/drm/drm_atomic_helper.c
> > b/drivers/gpu/drm/drm_atomic_helper.c index a067ddb1b443..0aa19fa0a5d5
> > 100644
> > --- a/drivers/gpu/drm/drm_atomic_helper.c
> > +++ b/drivers/gpu/drm/drm_atomic_helper.c
> > @@ -1201,23 +1201,35 @@ void drm_atomic_helper_commit_planes(struct
> > drm_device *dev,
> > 
> >  	for_each_plane_in_state(old_state, plane, old_plane_state, i) {
> >  		const struct drm_plane_helper_funcs *funcs;
> > +		bool disabling;
> > 
> >  		funcs = plane->helper_private;
> > 
> >  		if (!funcs)
> >  			continue;
> > 
> > -		if (active_only && !plane_crtc_active(plane->state))
> > -			continue;
> > +		disabling = drm_atomic_plane_disabling(plane, old_plane_state);
> > +
> > +		if (active_only) {
> > +			/*
> > +			 * Skip planes related to inactive CRTCs. If the plane
> > +			 * is enabled use the state of the current CRTC. If the
> > +			 * plane is being disabled use the state of the old
> > +			 * CRTC to avoid skipping planes being disabled on an
> > +			 * active CRTC.
> > +			 */
> > +			if (!disabling && !plane_crtc_active(plane->state))
> > +				continue;
> > +			if (disabling && !plane_crtc_active(old_plane_state))
> > +				continue;
> > +		}
> > 
> >  		/*
> >  		 * Special-case disabling the plane if drivers support it.
> >  		 */
> > -		if (drm_atomic_plane_disabling(plane, old_plane_state) &&
> > -		    funcs->atomic_disable)
> > +		if (disabling && funcs->atomic_disable)
> >  			funcs->atomic_disable(plane, old_plane_state);
> > -		else if (plane->state->crtc ||
> > -			 drm_atomic_plane_disabling(plane, old_plane_state))
> > +		else if (plane->state->crtc || disabling)
> >  			funcs->atomic_update(plane, old_plane_state);
> >  	}
> 
> -- 
> Regards,
> 
> Laurent Pinchart
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch


More information about the dri-devel mailing list