aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2014-03-03 16:51:41 -0500
committerDave Airlie <airlied@redhat.com>2014-03-03 16:51:41 -0500
commit4d33f3aa1cc7869c5ea4d57f3715b37bdcf515db (patch)
treec729ca22b60ba7fb7d3ce13c1f1d37f312a588f9
parent4d538b79197901fecc42e746d515d07fd1089b62 (diff)
parent4c0e552882114d1edb588242d45035246ab078a0 (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 ...
-rw-r--r--drivers/gpu/drm/drm_crtc.c23
-rw-r--r--drivers/gpu/drm/drm_fb_helper.c6
-rw-r--r--drivers/gpu/drm/i915/i915_debugfs.c162
-rw-r--r--drivers/gpu/drm/i915/i915_dma.c81
-rw-r--r--drivers/gpu/drm/i915/i915_drv.h58
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c155
-rw-r--r--drivers/gpu/drm/i915/i915_gem_context.c9
-rw-r--r--drivers/gpu/drm/i915/i915_gem_evict.c10
-rw-r--r--drivers/gpu/drm/i915/i915_gem_execbuffer.c18
-rw-r--r--drivers/gpu/drm/i915/i915_gem_gtt.c61
-rw-r--r--drivers/gpu/drm/i915/i915_irq.c168
-rw-r--r--drivers/gpu/drm/i915/i915_params.c4
-rw-r--r--drivers/gpu/drm/i915/i915_reg.h181
-rw-r--r--drivers/gpu/drm/i915/i915_trace.h20
-rw-r--r--drivers/gpu/drm/i915/intel_crt.c1
-rw-r--r--drivers/gpu/drm/i915/intel_ddi.c2
-rw-r--r--drivers/gpu/drm/i915/intel_display.c257
-rw-r--r--drivers/gpu/drm/i915/intel_dp.c25
-rw-r--r--drivers/gpu/drm/i915/intel_drv.h20
-rw-r--r--drivers/gpu/drm/i915/intel_dsi.c3
-rw-r--r--drivers/gpu/drm/i915/intel_dvo.c1
-rw-r--r--drivers/gpu/drm/i915/intel_fbdev.c171
-rw-r--r--drivers/gpu/drm/i915/intel_hdmi.c32
-rw-r--r--drivers/gpu/drm/i915/intel_lvds.c13
-rw-r--r--drivers/gpu/drm/i915/intel_overlay.c2
-rw-r--r--drivers/gpu/drm/i915/intel_panel.c4
-rw-r--r--drivers/gpu/drm/i915/intel_pm.c51
-rw-r--r--drivers/gpu/drm/i915/intel_ringbuffer.c22
-rw-r--r--drivers/gpu/drm/i915/intel_sdvo.c70
-rw-r--r--drivers/gpu/drm/i915/intel_tv.c9
-rw-r--r--include/drm/drm_crtc.h1
-rw-r--r--include/drm/drm_fb_helper.h6
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
218static 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
218void drm_connector_ida_init(void) 228void 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}
265EXPORT_SYMBOL(drm_get_connector_status_name); 275EXPORT_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 */
284const char *drm_get_subpixel_order_name(enum subpixel_order order)
285{
286 return drm_subpixel_enum_list[order].name;
287}
288EXPORT_SYMBOL(drm_get_subpixel_order_name);
289
267static char printable_char(int c) 290static 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
1139static struct drm_display_mode *drm_has_preferred_mode(struct drm_fb_helper_connector *fb_connector, int width, int height) 1139struct 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}
1152EXPORT_SYMBOL(drm_has_preferred_mode);
1152 1153
1153static bool drm_has_cmdline_mode(struct drm_fb_helper_connector *fb_connector) 1154static 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
1160static struct drm_display_mode *drm_pick_cmdline_mode(struct drm_fb_helper_connector *fb_helper_conn, 1161struct 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}
1201EXPORT_SYMBOL(drm_pick_cmdline_mode);
1200 1202
1201static bool drm_connector_enabled(struct drm_connector *connector, bool strict) 1203static 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
2080static 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
2098static 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;