diff options
author | Dave Airlie <airlied@redhat.com> | 2015-12-24 08:08:47 +1000 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2015-12-24 08:08:47 +1000 |
commit | 20f8e032e6dc7053ab803f488e2a8839cd2f69a6 (patch) | |
tree | 406b662934bffa205d90e9435bf96af7dc1a0cb0 /drivers/gpu/drm/i915/intel_display.c | |
parent | ade1ba7346070709856d7e38f8d1a77b7aa710aa (diff) | |
parent | 5b726e06d6e8309e5c9ef4109a32caf27c71dfc8 (diff) | |
download | talos-op-linux-20f8e032e6dc7053ab803f488e2a8839cd2f69a6.tar.gz talos-op-linux-20f8e032e6dc7053ab803f488e2a8839cd2f69a6.zip |
Backmerge drm-fixes merge into Linus's tree into drm-next.
This merges '5b726e06d6e8309e5c9ef4109a32caf27c71dfc8' into drm-next
Just to resolve some merges to make Daniel's life easier.
Signed-off-by: DAve Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_display.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index abd2d2944022..02f6ccb848a9 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -14059,6 +14059,7 @@ intel_check_cursor_plane(struct drm_plane *plane, struct drm_crtc *crtc = crtc_state->base.crtc; struct drm_framebuffer *fb = state->base.fb; struct drm_i915_gem_object *obj = intel_fb_obj(fb); + enum pipe pipe = to_intel_plane(plane)->pipe; unsigned stride; int ret; @@ -14092,6 +14093,22 @@ intel_check_cursor_plane(struct drm_plane *plane, return -EINVAL; } + /* + * There's something wrong with the cursor on CHV pipe C. + * If it straddles the left edge of the screen then + * moving it away from the edge or disabling it often + * results in a pipe underrun, and often that can lead to + * dead pipe (constant underrun reported, and it scans + * out just a solid color). To recover from that, the + * display power well must be turned off and on again. + * Refuse the put the cursor into that compromised position. + */ + if (IS_CHERRYVIEW(plane->dev) && pipe == PIPE_C && + state->visible && state->base.crtc_x < 0) { + DRM_DEBUG_KMS("CHV cursor C not allowed to straddle the left screen edge\n"); + return -EINVAL; + } + return 0; } @@ -14124,7 +14141,8 @@ intel_commit_cursor_plane(struct drm_plane *plane, intel_crtc->cursor_addr = addr; - intel_crtc_update_cursor(crtc, state->visible); + if (crtc->state->active) + intel_crtc_update_cursor(crtc, state->visible); } static struct drm_plane *intel_cursor_plane_create(struct drm_device *dev, |