[PATCH 1/4] drm: Fix primary plane size for stereo doubled modes for legacy setcrtc

Daniel Vetter daniel at ffwll.ch
Tue Nov 17 02:54:04 PST 2015


On Mon, Nov 16, 2015 at 05:02:34PM +0200, ville.syrjala at linux.intel.com wrote:
> From: Ville Syrjälä <ville.syrjala at linux.intel.com>
> 
> Properly double the hdisplay/vdisplay timings that we use as the primary
> plane size with stereo doubled modes. Otherwise the modeset gets
> rejected on machines where the primary plane must be fullscreen, and on
> the rest only the first eye would get a visible plane.
> 
> Cc: Daniel Vetter <daniel.vetter at ffwll.ch>
> Cc: stable at vger.kernel.org
> Fixes: 042652ed9599 ("drm/atomic-helper: implementatations for legacy interfaces")
> Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>

Testcase: igt/kms_3d
Reviewed-by: Daniel Vetter <daniel.vetter at ffwll.ch>

To avoid conflicts with patches 2-4 I applied all of them to drm-misc, but
we need to cherry-pick this one to drm-fixes too.
-Daniel

> ---
>  drivers/gpu/drm/drm_atomic_helper.c | 15 +++++++++------
>  1 file changed, 9 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
> index 9870c70..7857163 100644
> --- a/drivers/gpu/drm/drm_atomic_helper.c
> +++ b/drivers/gpu/drm/drm_atomic_helper.c
> @@ -1741,6 +1741,7 @@ int __drm_atomic_helper_set_config(struct drm_mode_set *set,
>  	struct drm_crtc_state *crtc_state;
>  	struct drm_plane_state *primary_state;
>  	struct drm_crtc *crtc = set->crtc;
> +	int hdisplay, vdisplay;
>  	int ret;
>  
>  	crtc_state = drm_atomic_get_crtc_state(state, crtc);
> @@ -1783,19 +1784,21 @@ int __drm_atomic_helper_set_config(struct drm_mode_set *set,
>  	if (ret != 0)
>  		return ret;
>  
> +	drm_crtc_get_hv_timing(set->mode, &hdisplay, &vdisplay);
> +
>  	drm_atomic_set_fb_for_plane(primary_state, set->fb);
>  	primary_state->crtc_x = 0;
>  	primary_state->crtc_y = 0;
> -	primary_state->crtc_h = set->mode->vdisplay;
> -	primary_state->crtc_w = set->mode->hdisplay;
> +	primary_state->crtc_h = vdisplay;
> +	primary_state->crtc_w = hdisplay;
>  	primary_state->src_x = set->x << 16;
>  	primary_state->src_y = set->y << 16;
>  	if (primary_state->rotation & (BIT(DRM_ROTATE_90) | BIT(DRM_ROTATE_270))) {
> -		primary_state->src_h = set->mode->hdisplay << 16;
> -		primary_state->src_w = set->mode->vdisplay << 16;
> +		primary_state->src_h = hdisplay << 16;
> +		primary_state->src_w = vdisplay << 16;
>  	} else {
> -		primary_state->src_h = set->mode->vdisplay << 16;
> -		primary_state->src_w = set->mode->hdisplay << 16;
> +		primary_state->src_h = vdisplay << 16;
> +		primary_state->src_w = hdisplay << 16;
>  	}
>  
>  commit:
> -- 
> 2.4.10
> 

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


More information about the dri-devel mailing list