aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2016-02-04 23:43:35 -0500
committerDave Airlie <airlied@redhat.com>2016-02-04 23:43:35 -0500
commit87d0f93961b201997b0d2d41af259e794a4e41b9 (patch)
tree1e9d723c5c0806ac3d186a6ad40f2fcdb5034a56
parent36f90b0a2ddd60823fe193a85e60ff1906c2a9b3 (diff)
parentf2e305108faba0c85eb4ba4066599decb675117e (diff)
Merge tag 'drm-intel-fixes-2016-02-04' of git://anongit.freedesktop.org/drm-intel into drm-fixes
misc i915 fixes. * tag 'drm-intel-fixes-2016-02-04' of git://anongit.freedesktop.org/drm-intel: drm/i915: refine qemu south bridge detection drm/i915: Remove select to deleted STOP_MACHINE from Kconfig drm/i915: Fix NULL plane->fb oops on SKL drm/i915: Don't reject primary plane windowing with color keying enabled on SKL+ drm/i915/dp: fall back to 18 bpp when sink capability is unknown drm/i915: Make sure DC writes are coherent on flush.
-rw-r--r--drivers/gpu/drm/i915/Kconfig1
-rw-r--r--drivers/gpu/drm/i915/i915_drv.c4
-rw-r--r--drivers/gpu/drm/i915/intel_display.c33
-rw-r--r--drivers/gpu/drm/i915/intel_lrc.c1
-rw-r--r--drivers/gpu/drm/i915/intel_ringbuffer.c2
5 files changed, 28 insertions, 13 deletions
diff --git a/drivers/gpu/drm/i915/Kconfig b/drivers/gpu/drm/i915/Kconfig
index fcd77b27514d..051eab33e4c7 100644
--- a/drivers/gpu/drm/i915/Kconfig
+++ b/drivers/gpu/drm/i915/Kconfig
@@ -10,7 +10,6 @@ config DRM_I915
10 # the shmem_readpage() which depends upon tmpfs 10 # the shmem_readpage() which depends upon tmpfs
11 select SHMEM 11 select SHMEM
12 select TMPFS 12 select TMPFS
13 select STOP_MACHINE
14 select DRM_KMS_HELPER 13 select DRM_KMS_HELPER
15 select DRM_PANEL 14 select DRM_PANEL
16 select DRM_MIPI_DSI 15 select DRM_MIPI_DSI
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index 3ac616d7363b..f357058c74d9 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -501,7 +501,9 @@ void intel_detect_pch(struct drm_device *dev)
501 WARN_ON(!IS_SKYLAKE(dev) && 501 WARN_ON(!IS_SKYLAKE(dev) &&
502 !IS_KABYLAKE(dev)); 502 !IS_KABYLAKE(dev));
503 } else if ((id == INTEL_PCH_P2X_DEVICE_ID_TYPE) || 503 } else if ((id == INTEL_PCH_P2X_DEVICE_ID_TYPE) ||
504 (id == INTEL_PCH_QEMU_DEVICE_ID_TYPE)) { 504 ((id == INTEL_PCH_QEMU_DEVICE_ID_TYPE) &&
505 pch->subsystem_vendor == 0x1af4 &&
506 pch->subsystem_device == 0x1100)) {
505 dev_priv->pch_type = intel_virt_detect_pch(dev); 507 dev_priv->pch_type = intel_virt_detect_pch(dev);
506 } else 508 } else
507 continue; 509 continue;
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 2f00828ccc6e..5feb65725c04 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -2946,7 +2946,7 @@ u32 intel_plane_obj_offset(struct intel_plane *intel_plane,
2946 struct i915_vma *vma; 2946 struct i915_vma *vma;
2947 u64 offset; 2947 u64 offset;
2948 2948
2949 intel_fill_fb_ggtt_view(&view, intel_plane->base.fb, 2949 intel_fill_fb_ggtt_view(&view, intel_plane->base.state->fb,
2950 intel_plane->base.state); 2950 intel_plane->base.state);
2951 2951
2952 vma = i915_gem_obj_to_ggtt_view(obj, &view); 2952 vma = i915_gem_obj_to_ggtt_view(obj, &view);
@@ -12075,11 +12075,21 @@ connected_sink_compute_bpp(struct intel_connector *connector,
12075 pipe_config->pipe_bpp = connector->base.display_info.bpc*3; 12075 pipe_config->pipe_bpp = connector->base.display_info.bpc*3;
12076 } 12076 }
12077 12077
12078 /* Clamp bpp to 8 on screens without EDID 1.4 */ 12078 /* Clamp bpp to default limit on screens without EDID 1.4 */
12079 if (connector->base.display_info.bpc == 0 && bpp > 24) { 12079 if (connector->base.display_info.bpc == 0) {
12080 DRM_DEBUG_KMS("clamping display bpp (was %d) to default limit of 24\n", 12080 int type = connector->base.connector_type;
12081 bpp); 12081 int clamp_bpp = 24;
12082 pipe_config->pipe_bpp = 24; 12082
12083 /* Fall back to 18 bpp when DP sink capability is unknown. */
12084 if (type == DRM_MODE_CONNECTOR_DisplayPort ||
12085 type == DRM_MODE_CONNECTOR_eDP)
12086 clamp_bpp = 18;
12087
12088 if (bpp > clamp_bpp) {
12089 DRM_DEBUG_KMS("clamping display bpp (was %d) to default limit of %d\n",
12090 bpp, clamp_bpp);
12091 pipe_config->pipe_bpp = clamp_bpp;
12092 }
12083 } 12093 }
12084} 12094}
12085 12095
@@ -13883,11 +13893,12 @@ intel_check_primary_plane(struct drm_plane *plane,
13883 int max_scale = DRM_PLANE_HELPER_NO_SCALING; 13893 int max_scale = DRM_PLANE_HELPER_NO_SCALING;
13884 bool can_position = false; 13894 bool can_position = false;
13885 13895
13886 /* use scaler when colorkey is not required */ 13896 if (INTEL_INFO(plane->dev)->gen >= 9) {
13887 if (INTEL_INFO(plane->dev)->gen >= 9 && 13897 /* use scaler when colorkey is not required */
13888 state->ckey.flags == I915_SET_COLORKEY_NONE) { 13898 if (state->ckey.flags == I915_SET_COLORKEY_NONE) {
13889 min_scale = 1; 13899 min_scale = 1;
13890 max_scale = skl_max_scale(to_intel_crtc(crtc), crtc_state); 13900 max_scale = skl_max_scale(to_intel_crtc(crtc), crtc_state);
13901 }
13891 can_position = true; 13902 can_position = true;
13892 } 13903 }
13893 13904
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
index 3aa614731d7e..f1fa756c5d5d 100644
--- a/drivers/gpu/drm/i915/intel_lrc.c
+++ b/drivers/gpu/drm/i915/intel_lrc.c
@@ -1707,6 +1707,7 @@ static int gen8_emit_flush_render(struct drm_i915_gem_request *request,
1707 if (flush_domains) { 1707 if (flush_domains) {
1708 flags |= PIPE_CONTROL_RENDER_TARGET_CACHE_FLUSH; 1708 flags |= PIPE_CONTROL_RENDER_TARGET_CACHE_FLUSH;
1709 flags |= PIPE_CONTROL_DEPTH_CACHE_FLUSH; 1709 flags |= PIPE_CONTROL_DEPTH_CACHE_FLUSH;
1710 flags |= PIPE_CONTROL_DC_FLUSH_ENABLE;
1710 flags |= PIPE_CONTROL_FLUSH_ENABLE; 1711 flags |= PIPE_CONTROL_FLUSH_ENABLE;
1711 } 1712 }
1712 1713
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
index 339701d7a9a5..40c6aff57256 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -331,6 +331,7 @@ gen7_render_ring_flush(struct drm_i915_gem_request *req,
331 if (flush_domains) { 331 if (flush_domains) {
332 flags |= PIPE_CONTROL_RENDER_TARGET_CACHE_FLUSH; 332 flags |= PIPE_CONTROL_RENDER_TARGET_CACHE_FLUSH;
333 flags |= PIPE_CONTROL_DEPTH_CACHE_FLUSH; 333 flags |= PIPE_CONTROL_DEPTH_CACHE_FLUSH;
334 flags |= PIPE_CONTROL_DC_FLUSH_ENABLE;
334 flags |= PIPE_CONTROL_FLUSH_ENABLE; 335 flags |= PIPE_CONTROL_FLUSH_ENABLE;
335 } 336 }
336 if (invalidate_domains) { 337 if (invalidate_domains) {
@@ -403,6 +404,7 @@ gen8_render_ring_flush(struct drm_i915_gem_request *req,
403 if (flush_domains) { 404 if (flush_domains) {
404 flags |= PIPE_CONTROL_RENDER_TARGET_CACHE_FLUSH; 405 flags |= PIPE_CONTROL_RENDER_TARGET_CACHE_FLUSH;
405 flags |= PIPE_CONTROL_DEPTH_CACHE_FLUSH; 406 flags |= PIPE_CONTROL_DEPTH_CACHE_FLUSH;
407 flags |= PIPE_CONTROL_DC_FLUSH_ENABLE;
406 flags |= PIPE_CONTROL_FLUSH_ENABLE; 408 flags |= PIPE_CONTROL_FLUSH_ENABLE;
407 } 409 }
408 if (invalidate_domains) { 410 if (invalidate_domains) {