diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-05-30 12:55:53 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-05-30 12:55:53 -0400 |
| commit | 6bb340c7868fbfd7bd0e8a0e23397a2bcb528429 (patch) | |
| tree | a171806a7d992073865f0d2885c22004264ee8fb | |
| parent | a70f35af4e49f87ba4b6c4b30220fbb66cd74af6 (diff) | |
| parent | bc42aabc6a01b92b0f961d65671564e0e1cd7592 (diff) | |
Merge branch 'drm-fixes' of git://people.freedesktop.org/~airlied/linux
Pull drm fixes from Dave Airlie:
"Just regular fixes, bunch from intel, quieting some of the over
zealous power warnings, and the rest just misc.
I've got another pull with the remaining dma-buf bits, since the vmap
bits are in your tree now. I'll send tomorrow just to space things
out a bit."
* 'drm-fixes' of git://people.freedesktop.org/~airlied/linux: (22 commits)
drm/edid/quirks: ViewSonic VA2026w
drm/udl: remove unused variables.
drm/radeon: fix XFX quirk
drm: Use stdint types for consistency
drm: Constify params to format_check() and framebuffer_checks()
drm/radeon: fix typo in trinity tiling setup
drm/udl: unlock before returning in udl_gem_mmap()
radeon: make radeon_cs_update_pages static.
drm/i915: tune down the noise of the RP irq limit fail
drm/i915: Remove the error message for unbinding pinned buffers
drm/i915: Limit page allocations to lowmem (dma32) for i965
drm/i915: always use RPNSWREQ for turbo change requests
drm/i915: reject doubleclocked cea modes on dp
drm/i915: Adding TV Out Missing modes.
drm/i915: wait for a vblank to pass after tv detect
drm/i915: no lvds quirk for HP t5740e Thin Client
drm/i915: enable vdd when switching off the eDP panel
drm/i915: Fix PCH PLL assertions to not assume CRTC:PLL relationship
drm/i915: Always update RPS interrupts thresholds along with frequency
drm/i915: properly handle interlaced bit for sdvo dtd conversion
...
| -rw-r--r-- | drivers/gpu/drm/drm_crtc.c | 8 | ||||
| -rw-r--r-- | drivers/gpu/drm/drm_edid.c | 22 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_debugfs.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_gem.c | 16 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_irq.c | 37 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 56 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_dp.c | 24 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_i2c.c | 21 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_lvds.c | 8 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_pm.c | 64 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_sdvo.c | 12 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_sdvo_regs.h | 5 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_tv.c | 53 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/ni.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon.h | 1 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_atombios.c | 4 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_cs.c | 27 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_ring.c | 25 | ||||
| -rw-r--r-- | drivers/gpu/drm/udl/udl_gem.c | 4 |
19 files changed, 250 insertions, 141 deletions
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index 92cea9d77ec9..08a7aa722d6b 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c | |||
| @@ -2116,7 +2116,7 @@ out: | |||
| 2116 | return ret; | 2116 | return ret; |
| 2117 | } | 2117 | } |
| 2118 | 2118 | ||
| 2119 | static int format_check(struct drm_mode_fb_cmd2 *r) | 2119 | static int format_check(const struct drm_mode_fb_cmd2 *r) |
| 2120 | { | 2120 | { |
| 2121 | uint32_t format = r->pixel_format & ~DRM_FORMAT_BIG_ENDIAN; | 2121 | uint32_t format = r->pixel_format & ~DRM_FORMAT_BIG_ENDIAN; |
| 2122 | 2122 | ||
| @@ -2185,7 +2185,7 @@ static int format_check(struct drm_mode_fb_cmd2 *r) | |||
| 2185 | } | 2185 | } |
| 2186 | } | 2186 | } |
| 2187 | 2187 | ||
| 2188 | static int framebuffer_check(struct drm_mode_fb_cmd2 *r) | 2188 | static int framebuffer_check(const struct drm_mode_fb_cmd2 *r) |
| 2189 | { | 2189 | { |
| 2190 | int ret, hsub, vsub, num_planes, i; | 2190 | int ret, hsub, vsub, num_planes, i; |
| 2191 | 2191 | ||
| @@ -3126,7 +3126,7 @@ int drm_mode_connector_update_edid_property(struct drm_connector *connector, | |||
| 3126 | EXPORT_SYMBOL(drm_mode_connector_update_edid_property); | 3126 | EXPORT_SYMBOL(drm_mode_connector_update_edid_property); |
| 3127 | 3127 | ||
| 3128 | static bool drm_property_change_is_valid(struct drm_property *property, | 3128 | static bool drm_property_change_is_valid(struct drm_property *property, |
| 3129 | __u64 value) | 3129 | uint64_t value) |
| 3130 | { | 3130 | { |
| 3131 | if (property->flags & DRM_MODE_PROP_IMMUTABLE) | 3131 | if (property->flags & DRM_MODE_PROP_IMMUTABLE) |
| 3132 | return false; | 3132 | return false; |
| @@ -3136,7 +3136,7 @@ static bool drm_property_change_is_valid(struct drm_property *property, | |||
| 3136 | return true; | 3136 | return true; |
| 3137 | } else if (property->flags & DRM_MODE_PROP_BITMASK) { | 3137 | } else if (property->flags & DRM_MODE_PROP_BITMASK) { |
| 3138 | int i; | 3138 | int i; |
| 3139 | __u64 valid_mask = 0; | 3139 | uint64_t valid_mask = 0; |
| 3140 | for (i = 0; i < property->num_values; i++) | 3140 | for (i = 0; i < property->num_values; i++) |
| 3141 | valid_mask |= (1ULL << property->values[i]); | 3141 | valid_mask |= (1ULL << property->values[i]); |
| 3142 | return !(value & ~valid_mask); | 3142 | return !(value & ~valid_mask); |
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index 608bddfc7e35..c3b5139eba7f 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c | |||
| @@ -66,6 +66,8 @@ | |||
| 66 | #define EDID_QUIRK_FIRST_DETAILED_PREFERRED (1 << 5) | 66 | #define EDID_QUIRK_FIRST_DETAILED_PREFERRED (1 << 5) |
| 67 | /* use +hsync +vsync for detailed mode */ | 67 | /* use +hsync +vsync for detailed mode */ |
| 68 | #define EDID_QUIRK_DETAILED_SYNC_PP (1 << 6) | 68 | #define EDID_QUIRK_DETAILED_SYNC_PP (1 << 6) |
| 69 | /* Force reduced-blanking timings for detailed modes */ | ||
| 70 | #define EDID_QUIRK_FORCE_REDUCED_BLANKING (1 << 7) | ||
| 69 | 71 | ||
| 70 | struct detailed_mode_closure { | 72 | struct detailed_mode_closure { |
| 71 | struct drm_connector *connector; | 73 | struct drm_connector *connector; |
| @@ -120,6 +122,9 @@ static struct edid_quirk { | |||
| 120 | /* Samsung SyncMaster 22[5-6]BW */ | 122 | /* Samsung SyncMaster 22[5-6]BW */ |
| 121 | { "SAM", 596, EDID_QUIRK_PREFER_LARGE_60 }, | 123 | { "SAM", 596, EDID_QUIRK_PREFER_LARGE_60 }, |
| 122 | { "SAM", 638, EDID_QUIRK_PREFER_LARGE_60 }, | 124 | { "SAM", 638, EDID_QUIRK_PREFER_LARGE_60 }, |
| 125 | |||
| 126 | /* ViewSonic VA2026w */ | ||
| 127 | { "VSC", 5020, EDID_QUIRK_FORCE_REDUCED_BLANKING }, | ||
| 123 | }; | 128 | }; |
| 124 | 129 | ||
| 125 | /*** DDC fetch and block validation ***/ | 130 | /*** DDC fetch and block validation ***/ |
| @@ -885,12 +890,19 @@ static struct drm_display_mode *drm_mode_detailed(struct drm_device *dev, | |||
| 885 | "Wrong Hsync/Vsync pulse width\n"); | 890 | "Wrong Hsync/Vsync pulse width\n"); |
| 886 | return NULL; | 891 | return NULL; |
| 887 | } | 892 | } |
| 893 | |||
| 894 | if (quirks & EDID_QUIRK_FORCE_REDUCED_BLANKING) { | ||
| 895 | mode = drm_cvt_mode(dev, hactive, vactive, 60, true, false, false); | ||
| 896 | if (!mode) | ||
| 897 | return NULL; | ||
| 898 | |||
| 899 | goto set_size; | ||
| 900 | } | ||
| 901 | |||
| 888 | mode = drm_mode_create(dev); | 902 | mode = drm_mode_create(dev); |
| 889 | if (!mode) | 903 | if (!mode) |
| 890 | return NULL; | 904 | return NULL; |
| 891 | 905 | ||
| 892 | mode->type = DRM_MODE_TYPE_DRIVER; | ||
| 893 | |||
| 894 | if (quirks & EDID_QUIRK_135_CLOCK_TOO_HIGH) | 906 | if (quirks & EDID_QUIRK_135_CLOCK_TOO_HIGH) |
| 895 | timing->pixel_clock = cpu_to_le16(1088); | 907 | timing->pixel_clock = cpu_to_le16(1088); |
| 896 | 908 | ||
| @@ -914,8 +926,6 @@ static struct drm_display_mode *drm_mode_detailed(struct drm_device *dev, | |||
| 914 | 926 | ||
| 915 | drm_mode_do_interlace_quirk(mode, pt); | 927 | drm_mode_do_interlace_quirk(mode, pt); |
| 916 | 928 | ||
| 917 | drm_mode_set_name(mode); | ||
| 918 | |||
| 919 | if (quirks & EDID_QUIRK_DETAILED_SYNC_PP) { | 929 | if (quirks & EDID_QUIRK_DETAILED_SYNC_PP) { |
| 920 | pt->misc |= DRM_EDID_PT_HSYNC_POSITIVE | DRM_EDID_PT_VSYNC_POSITIVE; | 930 | pt->misc |= DRM_EDID_PT_HSYNC_POSITIVE | DRM_EDID_PT_VSYNC_POSITIVE; |
| 921 | } | 931 | } |
| @@ -925,6 +935,7 @@ static struct drm_display_mode *drm_mode_detailed(struct drm_device *dev, | |||
| 925 | mode->flags |= (pt->misc & DRM_EDID_PT_VSYNC_POSITIVE) ? | 935 | mode->flags |= (pt->misc & DRM_EDID_PT_VSYNC_POSITIVE) ? |
| 926 | DRM_MODE_FLAG_PVSYNC : DRM_MODE_FLAG_NVSYNC; | 936 | DRM_MODE_FLAG_PVSYNC : DRM_MODE_FLAG_NVSYNC; |
| 927 | 937 | ||
| 938 | set_size: | ||
| 928 | mode->width_mm = pt->width_mm_lo | (pt->width_height_mm_hi & 0xf0) << 4; | 939 | mode->width_mm = pt->width_mm_lo | (pt->width_height_mm_hi & 0xf0) << 4; |
| 929 | mode->height_mm = pt->height_mm_lo | (pt->width_height_mm_hi & 0xf) << 8; | 940 | mode->height_mm = pt->height_mm_lo | (pt->width_height_mm_hi & 0xf) << 8; |
| 930 | 941 | ||
| @@ -938,6 +949,9 @@ static struct drm_display_mode *drm_mode_detailed(struct drm_device *dev, | |||
| 938 | mode->height_mm = edid->height_cm * 10; | 949 | mode->height_mm = edid->height_cm * 10; |
| 939 | } | 950 | } |
| 940 | 951 | ||
| 952 | mode->type = DRM_MODE_TYPE_DRIVER; | ||
| 953 | drm_mode_set_name(mode); | ||
| 954 | |||
| 941 | return mode; | 955 | return mode; |
| 942 | } | 956 | } |
| 943 | 957 | ||
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c index eb2b3c25b9e1..5363e9c66c27 100644 --- a/drivers/gpu/drm/i915/i915_debugfs.c +++ b/drivers/gpu/drm/i915/i915_debugfs.c | |||
| @@ -2032,6 +2032,8 @@ void i915_debugfs_cleanup(struct drm_minor *minor) | |||
| 2032 | 1, minor); | 2032 | 1, minor); |
| 2033 | drm_debugfs_remove_files((struct drm_info_list *) &i915_ring_stop_fops, | 2033 | drm_debugfs_remove_files((struct drm_info_list *) &i915_ring_stop_fops, |
| 2034 | 1, minor); | 2034 | 1, minor); |
| 2035 | drm_debugfs_remove_files((struct drm_info_list *) &i915_error_state_fops, | ||
| 2036 | 1, minor); | ||
| 2035 | } | 2037 | } |
| 2036 | 2038 | ||
| 2037 | #endif /* CONFIG_DEBUG_FS */ | 2039 | #endif /* CONFIG_DEBUG_FS */ |
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index c1e5c66553df..288d7b8f49ae 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c | |||
| @@ -2063,10 +2063,8 @@ i915_gem_object_unbind(struct drm_i915_gem_object *obj) | |||
| 2063 | if (obj->gtt_space == NULL) | 2063 | if (obj->gtt_space == NULL) |
| 2064 | return 0; | 2064 | return 0; |
| 2065 | 2065 | ||
| 2066 | if (obj->pin_count != 0) { | 2066 | if (obj->pin_count) |
