aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorDamien Lespiau <damien.lespiau@intel.com>2015-02-05 14:35:13 -0500
committerJani Nikula <jani.nikula@intel.com>2015-03-18 04:09:05 -0400
commit7f0801e566cc78315e5dc383bf3c3b5b5b436048 (patch)
tree01c03281e4e6c62806e9b01e07ace1ec54bd84c7 /drivers/gpu
parent319c1d420a0b62d9dbb88104afebaabc968cdbfa (diff)
drm/i915: Make sure the primary plane is enabled before reading out the fb state
We don't want to end up in a state where we track that the pipe has its primary plane enabled when primary plane registers are programmed with values that look possible but the plane actually disabled. Refuse to read out the fb state when the primary plane isn't enabled. Suggested-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Suggested-by: Matt Roper <matthew.d.roper@intel.com> Signed-off-by: Damien Lespiau <damien.lespiau@intel.com> Reviewed-by: Matt Roper <matthew.d.roper@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Reported-by: Andrey Skvortsov <andrej.skvortzov@gmail.com> Reported-by: Steven Rostedt <rostedt@goodmis.org> Reference: http://mid.gmane.org/20150203191507.GA2374@crion86 Tested-by: Steven Rostedt <rostedt@goodmis.org> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/i915/intel_display.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 2de362be885a..6d22128d97b1 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -6613,6 +6613,10 @@ i9xx_get_initial_plane_config(struct intel_crtc *crtc,
6613 struct drm_framebuffer *fb; 6613 struct drm_framebuffer *fb;
6614 struct intel_framebuffer *intel_fb; 6614 struct intel_framebuffer *intel_fb;
6615 6615
6616 val = I915_READ(DSPCNTR(plane));
6617 if (!(val & DISPLAY_PLANE_ENABLE))
6618 return;
6619
6616 intel_fb = kzalloc(sizeof(*intel_fb), GFP_KERNEL); 6620 intel_fb = kzalloc(sizeof(*intel_fb), GFP_KERNEL);
6617 if (!intel_fb) { 6621 if (!intel_fb) {
6618 DRM_DEBUG_KMS("failed to alloc fb\n"); 6622 DRM_DEBUG_KMS("failed to alloc fb\n");
@@ -6621,8 +6625,6 @@ i9xx_get_initial_plane_config(struct intel_crtc *crtc,
6621 6625
6622 fb = &intel_fb->base; 6626 fb = &intel_fb->base;
6623 6627
6624 val = I915_READ(DSPCNTR(plane));
6625
6626 if (INTEL_INFO(dev)->gen >= 4) 6628 if (INTEL_INFO(dev)->gen >= 4)
6627 if (val & DISPPLANE_TILED) 6629 if (val & DISPPLANE_TILED)
6628 plane_config->tiling = I915_TILING_X; 6630 plane_config->tiling = I915_TILING_X;
@@ -7655,6 +7657,9 @@ skylake_get_initial_plane_config(struct intel_crtc *crtc,
7655 fb = &intel_fb->base; 7657 fb = &intel_fb->base;
7656 7658
7657 val = I915_READ(PLANE_CTL(pipe, 0)); 7659 val = I915_READ(PLANE_CTL(pipe, 0));
7660 if (!(val & PLANE_CTL_ENABLE))
7661 goto error;
7662
7658 if (val & PLANE_CTL_TILED_MASK) 7663 if (val & PLANE_CTL_TILED_MASK)
7659 plane_config->tiling = I915_TILING_X; 7664 plane_config->tiling = I915_TILING_X;
7660 7665
@@ -7743,6 +7748,10 @@ ironlake_get_initial_plane_config(struct intel_crtc *crtc,
7743 struct drm_framebuffer *fb; 7748 struct drm_framebuffer *fb;
7744 struct intel_framebuffer *intel_fb; 7749 struct intel_framebuffer *intel_fb;
7745 7750
7751 val = I915_READ(DSPCNTR(pipe));
7752 if (!(val & DISPLAY_PLANE_ENABLE))
7753 return;
7754
7746 intel_fb = kzalloc(sizeof(*intel_fb), GFP_KERNEL); 7755 intel_fb = kzalloc(sizeof(*intel_fb), GFP_KERNEL);
7747 if (!intel_fb) { 7756 if (!intel_fb) {
7748 DRM_DEBUG_KMS("failed to alloc fb\n"); 7757 DRM_DEBUG_KMS("failed to alloc fb\n");
@@ -7751,8 +7760,6 @@ ironlake_get_initial_plane_config(struct intel_crtc *crtc,
7751 7760
7752 fb = &intel_fb->base; 7761 fb = &intel_fb->base;
7753 7762
7754 val = I915_READ(DSPCNTR(pipe));
7755
7756 if (INTEL_INFO(dev)->gen >= 4) 7763 if (INTEL_INFO(dev)->gen >= 4)
7757 if (val & DISPPLANE_TILED) 7764 if (val & DISPPLANE_TILED)
7758 plane_config->tiling = I915_TILING_X; 7765 plane_config->tiling = I915_TILING_X;