Commit 83926117 authored by Ville Syrjälä's avatar Ville Syrjälä Committed by Jani Nikula

drm: Fix primary plane size for stereo doubled modes for legacy setcrtc

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@ffwll.ch>
Cc: stable@vger.kernel.org #v3.19+
Fixes: 042652ed ("drm/atomic-helper: implementatations for legacy interfaces")
Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1447686157-29607-1-git-send-email-ville.syrjala@linux.intel.com
Testcase: igt/kms_3d
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
parent 07d3bad6
...@@ -1741,6 +1741,7 @@ int __drm_atomic_helper_set_config(struct drm_mode_set *set, ...@@ -1741,6 +1741,7 @@ int __drm_atomic_helper_set_config(struct drm_mode_set *set,
struct drm_crtc_state *crtc_state; struct drm_crtc_state *crtc_state;
struct drm_plane_state *primary_state; struct drm_plane_state *primary_state;
struct drm_crtc *crtc = set->crtc; struct drm_crtc *crtc = set->crtc;
int hdisplay, vdisplay;
int ret; int ret;
crtc_state = drm_atomic_get_crtc_state(state, crtc); crtc_state = drm_atomic_get_crtc_state(state, crtc);
...@@ -1783,19 +1784,21 @@ int __drm_atomic_helper_set_config(struct drm_mode_set *set, ...@@ -1783,19 +1784,21 @@ int __drm_atomic_helper_set_config(struct drm_mode_set *set,
if (ret != 0) if (ret != 0)
return ret; return ret;
drm_crtc_get_hv_timing(set->mode, &hdisplay, &vdisplay);
drm_atomic_set_fb_for_plane(primary_state, set->fb); drm_atomic_set_fb_for_plane(primary_state, set->fb);
primary_state->crtc_x = 0; primary_state->crtc_x = 0;
primary_state->crtc_y = 0; primary_state->crtc_y = 0;
primary_state->crtc_h = set->mode->vdisplay; primary_state->crtc_h = vdisplay;
primary_state->crtc_w = set->mode->hdisplay; primary_state->crtc_w = hdisplay;
primary_state->src_x = set->x << 16; primary_state->src_x = set->x << 16;
primary_state->src_y = set->y << 16; primary_state->src_y = set->y << 16;
if (primary_state->rotation & (BIT(DRM_ROTATE_90) | BIT(DRM_ROTATE_270))) { if (primary_state->rotation & (BIT(DRM_ROTATE_90) | BIT(DRM_ROTATE_270))) {
primary_state->src_h = set->mode->hdisplay << 16; primary_state->src_h = hdisplay << 16;
primary_state->src_w = set->mode->vdisplay << 16; primary_state->src_w = vdisplay << 16;
} else { } else {
primary_state->src_h = set->mode->vdisplay << 16; primary_state->src_h = vdisplay << 16;
primary_state->src_w = set->mode->hdisplay << 16; primary_state->src_w = hdisplay << 16;
} }
commit: commit:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment