[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