diff options
| author | Dave Airlie <airlied@redhat.com> | 2014-03-03 16:51:41 -0500 |
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2014-03-03 16:51:41 -0500 |
| commit | 4d33f3aa1cc7869c5ea4d57f3715b37bdcf515db (patch) | |
| tree | c729ca22b60ba7fb7d3ce13c1f1d37f312a588f9 | |
| parent | 4d538b79197901fecc42e746d515d07fd1089b62 (diff) | |
| parent | 4c0e552882114d1edb588242d45035246ab078a0 (diff) | |
Merge tag 'drm-intel-next-2014-02-14' of ssh://git.freedesktop.org/git/drm-intel into drm-next
- Fix the execbuf rebind performance regression due to topic/ppgtt (Chris).
- Fix up the connector cleanup ordering for sdvod i2c and dp aux devices (Imre).
- Try to preserve the firmware modeset config on driver load. And a bit of prep
work for smooth takeover of the fb contents (Jesse).
- Prep cleanup for larger gtt address spaces on bdw (Ben).
- Improve our vblank_wait code to make hsw modesets faster (Paulo).
- Display debugfs file (Jesse).
- DRRS prep work from Vandana Kannan.
- pipestat interrupt handler to fix a few races around vblank/pageflip handling
on byt (Imre).
- Improve display fuse handling for display-less SKUs (Damien).
- Drop locks while stalling for the gpu when serving pagefaults to improve
interactivity (Chris).
- And as usual piles of other improvements and small fixes all over.
* tag 'drm-intel-next-2014-02-14' of ssh://git.freedesktop.org/git/drm-intel: (65 commits)
drm/i915: fix NULL deref in the load detect code
drm/i915: Only bind each object rather than for every execbuffer
drm/i915: Directly return the vma from bind_to_vm
drm/i915: Simplify i915_gem_object_ggtt_unpin
drm/i915: Allow blocking in the PDE alloc when running low on gtt space
drm/i915: Don't allocate context pages as mappable
drm/i915: Handle set_cache_level errors in the status page setup
drm/i915: Don't pin the status page as mappable
drm/i915: Don't set PIN_MAPPABLE for legacy ringbuffers
drm/i915: Handle set_cache_level errors in the pipe control scratch setup
drm/i915: split PIN_GLOBAL out from PIN_MAPPABLE
drm/i915: Consolidate binding parameters into flags
drm/i915: sdvo: add i2c sysfs symlink to the connector's directory
drm/i915: sdvo: fix error path in sdvo_connector_init
drm/i915: dp: fix order of dp aux i2c device cleanup
drm/i915: add unregister callback to connector
drm/i915: don't reference null pointer at i915_sink_crc
drm/i915/lvds: Remove dead code from failing case
drm/i915: don't preserve inherited configs with nothing on v2
drm/i915/bdw: Split up PPGTT cleanup
...
32 files changed, 1124 insertions, 522 deletions
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index 3b7d32da1604..35ea15d5ffff 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c | |||
| @@ -215,6 +215,16 @@ static const struct drm_prop_enum_list drm_encoder_enum_list[] = | |||
| 215 | { DRM_MODE_ENCODER_DSI, "DSI" }, | 215 | { DRM_MODE_ENCODER_DSI, "DSI" }, |
| 216 | }; | 216 | }; |
| 217 | 217 | ||
| 218 | static const struct drm_prop_enum_list drm_subpixel_enum_list[] = | ||
| 219 | { | ||
| 220 | { SubPixelUnknown, "Unknown" }, | ||
| 221 | { SubPixelHorizontalRGB, "Horizontal RGB" }, | ||
| 222 | { SubPixelHorizontalBGR, "Horizontal BGR" }, | ||
| 223 | { SubPixelVerticalRGB, "Vertical RGB" }, | ||
| 224 | { SubPixelVerticalBGR, "Vertical BGR" }, | ||
| 225 | { SubPixelNone, "None" }, | ||
| 226 | }; | ||
| 227 | |||
| 218 | void drm_connector_ida_init(void) | 228 | void drm_connector_ida_init(void) |
| 219 | { | 229 | { |
| 220 | int i; | 230 | int i; |
| @@ -264,6 +274,19 @@ const char *drm_get_connector_status_name(enum drm_connector_status status) | |||
| 264 | } | 274 | } |
| 265 | EXPORT_SYMBOL(drm_get_connector_status_name); | 275 | EXPORT_SYMBOL(drm_get_connector_status_name); |
| 266 | 276 | ||
| 277 | /** | ||
| 278 | * drm_get_subpixel_order_name - return a string for a given subpixel enum | ||
| 279 | * @order: enum of subpixel_order | ||
| 280 | * | ||
| 281 | * Note you could abuse this and return something out of bounds, but that | ||
| 282 | * would be a caller error. No unscrubbed user data should make it here. | ||
| 283 | */ | ||
| 284 | const char *drm_get_subpixel_order_name(enum subpixel_order order) | ||
| 285 | { | ||
| 286 | return drm_subpixel_enum_list[order].name; | ||
| 287 | } | ||
| 288 | EXPORT_SYMBOL(drm_get_subpixel_order_name); | ||
| 289 | |||
| 267 | static char printable_char(int c) | 290 | static char printable_char(int c) |
| 268 | { | 291 | { |
| 269 | return isascii(c) && isprint(c) ? c : '?'; | 292 | return isascii(c) && isprint(c) ? c : '?'; |
diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c index 98a03639b413..d99df15a78bc 100644 --- a/drivers/gpu/drm/drm_fb_helper.c +++ b/drivers/gpu/drm/drm_fb_helper.c | |||
| @@ -1136,7 +1136,7 @@ static int drm_fb_helper_probe_connector_modes(struct drm_fb_helper *fb_helper, | |||
| 1136 | return count; | 1136 | return count; |
| 1137 | } | 1137 | } |
| 1138 | 1138 | ||
| 1139 | static struct drm_display_mode *drm_has_preferred_mode(struct drm_fb_helper_connector *fb_connector, int width, int height) | 1139 | struct drm_display_mode *drm_has_preferred_mode(struct drm_fb_helper_connector *fb_connector, int width, int height) |
| 1140 | { | 1140 | { |
| 1141 | struct drm_display_mode *mode; | 1141 | struct drm_display_mode *mode; |
| 1142 | 1142 | ||
| @@ -1149,6 +1149,7 @@ static struct drm_display_mode *drm_has_preferred_mode(struct drm_fb_helper_conn | |||
| 1149 | } | 1149 | } |
| 1150 | return NULL; | 1150 | return NULL; |
| 1151 | } | 1151 | } |
| 1152 | EXPORT_SYMBOL(drm_has_preferred_mode); | ||
| 1152 | 1153 | ||
| 1153 | static bool drm_has_cmdline_mode(struct drm_fb_helper_connector *fb_connector) | 1154 | static bool drm_has_cmdline_mode(struct drm_fb_helper_connector *fb_connector) |
| 1154 | { | 1155 | { |
| @@ -1157,7 +1158,7 @@ static bool drm_has_cmdline_mode(struct drm_fb_helper_connector *fb_connector) | |||
| 1157 | return cmdline_mode->specified; | 1158 | return cmdline_mode->specified; |
| 1158 | } | 1159 | } |
| 1159 | 1160 | ||
| 1160 | static struct drm_display_mode *drm_pick_cmdline_mode(struct drm_fb_helper_connector *fb_helper_conn, | 1161 | struct drm_display_mode *drm_pick_cmdline_mode(struct drm_fb_helper_connector *fb_helper_conn, |
| 1161 | int width, int height) | 1162 | int width, int height) |
| 1162 | { | 1163 | { |
| 1163 | struct drm_cmdline_mode *cmdline_mode; | 1164 | struct drm_cmdline_mode *cmdline_mode; |
| @@ -1197,6 +1198,7 @@ create_mode: | |||
| 1197 | list_add(&mode->head, &fb_helper_conn->connector->modes); | 1198 | list_add(&mode->head, &fb_helper_conn->connector->modes); |
| 1198 | return mode; | 1199 | return mode; |
| 1199 | } | 1200 | } |
| 1201 | EXPORT_SYMBOL(drm_pick_cmdline_mode); | ||
| 1200 | 1202 | ||
| 1201 | static bool drm_connector_enabled(struct drm_connector *connector, bool strict) | 1203 | static bool drm_connector_enabled(struct drm_connector *connector, bool strict) |
| 1202 | { | 1204 | { |
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c index 2dc05c30b800..d90a70744d93 100644 --- a/drivers/gpu/drm/i915/i915_debugfs.c +++ b/drivers/gpu/drm/i915/i915_debugfs.c | |||
| @@ -1937,6 +1937,9 @@ static int i915_sink_crc(struct seq_file *m, void *data) | |||
| 1937 | if (connector->base.dpms != DRM_MODE_DPMS_ON) | 1937 | if (connector->base.dpms != DRM_MODE_DPMS_ON) |
| 1938 | continue; | 1938 | continue; |
| 1939 | 1939 | ||
| 1940 | if (!connector->base.encoder) | ||
| 1941 | continue; | ||
| 1942 | |||
| 1940 | encoder = to_intel_encoder(connector->base.encoder); | 1943 | encoder = to_intel_encoder(connector->base.encoder); |
| 1941 | if (encoder->type != INTEL_OUTPUT_EDP) | 1944 | if (encoder->type != INTEL_OUTPUT_EDP) |
| 1942 | continue; | 1945 | continue; |
| @@ -2074,6 +2077,164 @@ static int i915_power_domain_info(struct seq_file *m, void *unused) | |||
| 2074 | return 0; | 2077 | return 0; |
| 2075 | } | 2078 | } |
| 2076 | 2079 | ||
| 2080 | static void intel_seq_print_mode(struct seq_file *m, int tabs, | ||
| 2081 | struct drm_display_mode *mode) | ||
| 2082 | { | ||
| 2083 | int i; | ||
| 2084 | |||
| 2085 | for (i = 0; i < tabs; i++) | ||
| 2086 | seq_putc(m, '\t'); | ||
| 2087 | |||
| 2088 | seq_printf(m, "id %d:\"%s\" freq %d clock %d hdisp %d hss %d hse %d htot %d vdisp %d vss %d vse %d vtot %d type 0x%x flags 0x%x\n", | ||
| 2089 | mode->base.id, mode->name, | ||
| 2090 | mode->vrefresh, mode->clock, | ||
| 2091 | mode->hdisplay, mode->hsync_start, | ||
| 2092 | mode->hsync_end, mode->htotal, | ||
| 2093 | mode->vdisplay, mode->vsync_start, | ||
| 2094 | mode->vsync_end, mode->vtotal, | ||
| 2095 | mode->type, mode->flags); | ||
| 2096 | } | ||
| 2097 | |||
| 2098 | static void intel_encoder_info(struct seq_file *m, | ||
| 2099 | struct intel_crtc *intel_crtc, | ||
| 2100 | struct intel_encoder *intel_encoder) | ||
| 2101 | { | ||
| 2102 | struct drm_info_node *node = (struct drm_info_node *) m->private; | ||
| 2103 | struct drm_device *dev = node->minor->dev; | ||
