aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2015-06-20 16:54:22 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2015-06-20 16:54:22 -0400
commit8f4ce072bf4b65f47dada7e74e3d95cc900866b2 (patch)
tree659b85807ce31797d71f066c96bc9679aacdb832
parentbb16140a2cab5415ffcbb23594da9e495df1bab7 (diff)
parentfcee3c73a2c51982057b93fe599b7c68e16d0636 (diff)
Merge branch 'drm-fixes' of git://people.freedesktop.org/~airlied/linux
Pull drm fixes from Dave Airlie: "A smattering of fixes, mgag200: don't accept modes that aren't aligned properly as hw can't do it i915: two regression fixes radeon: one query to allow userspace fixes one oops fixer for older hw with new options enabled" * 'drm-fixes' of git://people.freedesktop.org/~airlied/linux: drm/radeon: don't probe MST on hw we don't support it on drm/radeon: Add RADEON_INFO_VA_UNMAP_WORKING query drm/mgag200: Reject non-character-cell-aligned mode widths Revert "drm/i915: Don't skip request retirement if the active list is empty" drm/i915: Always reset vma->ggtt_view.pages cache on unbinding
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c5
-rw-r--r--drivers/gpu/drm/mgag200/mgag200_mode.c5
-rw-r--r--drivers/gpu/drm/radeon/radeon_dp_mst.c5
-rw-r--r--drivers/gpu/drm/radeon/radeon_kms.c3
-rw-r--r--include/uapi/drm/radeon_drm.h1
5 files changed, 18 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 851b585987f9..2d0995e7afc3 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -2656,6 +2656,9 @@ void i915_gem_reset(struct drm_device *dev)
2656void 2656void
2657i915_gem_retire_requests_ring(struct intel_engine_cs *ring) 2657i915_gem_retire_requests_ring(struct intel_engine_cs *ring)
2658{ 2658{
2659 if (list_empty(&ring->request_list))
2660 return;
2661
2659 WARN_ON(i915_verify_lists(ring->dev)); 2662 WARN_ON(i915_verify_lists(ring->dev));
2660 2663
2661 /* Retire requests first as we use it above for the early return. 2664 /* Retire requests first as we use it above for the early return.
@@ -3000,8 +3003,8 @@ int i915_vma_unbind(struct i915_vma *vma)
3000 } else if (vma->ggtt_view.pages) { 3003 } else if (vma->ggtt_view.pages) {
3001 sg_free_table(vma->ggtt_view.pages); 3004 sg_free_table(vma->ggtt_view.pages);
3002 kfree(vma->ggtt_view.pages); 3005 kfree(vma->ggtt_view.pages);
3003 vma->ggtt_view.pages = NULL;
3004 } 3006 }
3007 vma->ggtt_view.pages = NULL;
3005 } 3008 }
3006 3009
3007 drm_mm_remove_node(&vma->node); 3010 drm_mm_remove_node(&vma->node);
diff --git a/drivers/gpu/drm/mgag200/mgag200_mode.c b/drivers/gpu/drm/mgag200/mgag200_mode.c
index 6e84df9369a6..ad4b9010dfb0 100644
--- a/drivers/gpu/drm/mgag200/mgag200_mode.c
+++ b/drivers/gpu/drm/mgag200/mgag200_mode.c
@@ -1526,6 +1526,11 @@ static int mga_vga_mode_valid(struct drm_connector *connector,
1526 return MODE_BANDWIDTH; 1526 return MODE_BANDWIDTH;
1527 } 1527 }
1528 1528
1529 if ((mode->hdisplay % 8) != 0 || (mode->hsync_start % 8) != 0 ||
1530 (mode->hsync_end % 8) != 0 || (mode->htotal % 8) != 0) {
1531 return MODE_H_ILLEGAL;
1532 }
1533
1529 if (mode->crtc_hdisplay > 2048 || mode->crtc_hsync_start > 4096 || 1534 if (mode->crtc_hdisplay > 2048 || mode->crtc_hsync_start > 4096 ||
1530 mode->crtc_hsync_end > 4096 || mode->crtc_htotal > 4096 || 1535 mode->crtc_hsync_end > 4096 || mode->crtc_htotal > 4096 ||
1531 mode->crtc_vdisplay > 2048 || mode->crtc_vsync_start > 4096 || 1536 mode->crtc_vdisplay > 2048 || mode->crtc_vsync_start > 4096 ||
diff --git a/drivers/gpu/drm/radeon/radeon_dp_mst.c b/drivers/gpu/drm/radeon/radeon_dp_mst.c
index 2b98ed3e684d..257b10be5cda 100644
--- a/drivers/gpu/drm/radeon/radeon_dp_mst.c
+++ b/drivers/gpu/drm/radeon/radeon_dp_mst.c
@@ -663,12 +663,17 @@ int
663radeon_dp_mst_probe(struct radeon_connector *radeon_connector) 663radeon_dp_mst_probe(struct radeon_connector *radeon_connector)
664{ 664{
665 struct radeon_connector_atom_dig *dig_connector = radeon_connector->con_priv; 665 struct radeon_connector_atom_dig *dig_connector = radeon_connector->con_priv;
666 struct drm_device *dev = radeon_connector->base.dev;
667 struct radeon_device *rdev = dev->dev_private;
666 int ret; 668 int ret;
667 u8 msg[1]; 669 u8 msg[1];
668 670
669 if (!radeon_mst) 671 if (!radeon_mst)
670 return 0; 672 return 0;
671 673
674 if (!ASIC_IS_DCE5(rdev))
675 return 0;
676
672 if (dig_connector->dpcd[DP_DPCD_REV] < 0x12) 677 if (dig_connector->dpcd[DP_DPCD_REV] < 0x12)
673 return 0; 678 return 0;
674 679
diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c
index 7b2a7335cc5d..b0acf50d9558 100644
--- a/drivers/gpu/drm/radeon/radeon_kms.c
+++ b/drivers/gpu/drm/radeon/radeon_kms.c
@@ -576,6 +576,9 @@ static int radeon_info_ioctl(struct drm_device *dev, void *data, struct drm_file
576 if (radeon_get_allowed_info_register(rdev, *value, value)) 576 if (radeon_get_allowed_info_register(rdev, *value, value))
577 return -EINVAL; 577 return -EINVAL;
578 break; 578 break;
579 case RADEON_INFO_VA_UNMAP_WORKING:
580 *value = true;
581 break;
579 default: 582 default:
580 DRM_DEBUG_KMS("Invalid request %d\n", info->request); 583 DRM_DEBUG_KMS("Invalid request %d\n", info->request);
581 return -EINVAL; 584 return -EINVAL;
diff --git a/include/uapi/drm/radeon_drm.h b/include/uapi/drm/radeon_drm.h
index 871e73f99a4d..94d44ab2fda1 100644
--- a/include/uapi/drm/radeon_drm.h
+++ b/include/uapi/drm/radeon_drm.h
@@ -1038,6 +1038,7 @@ struct drm_radeon_cs {
1038#define RADEON_INFO_CURRENT_GPU_SCLK 0x22 1038#define RADEON_INFO_CURRENT_GPU_SCLK 0x22
1039#define RADEON_INFO_CURRENT_GPU_MCLK 0x23 1039#define RADEON_INFO_CURRENT_GPU_MCLK 0x23
1040#define RADEON_INFO_READ_REG 0x24 1040#define RADEON_INFO_READ_REG 0x24
1041#define RADEON_INFO_VA_UNMAP_WORKING 0x25
1041 1042
1042struct drm_radeon_info { 1043struct drm_radeon_info {
1043 uint32_t request; 1044 uint32_t request;