From b5410eb507f5fbc0fedd0edf622fa29ee30b2f98 Mon Sep 17 00:00:00 2001 From: Adam Jackson Date: Thu, 14 Feb 2013 14:17:18 -0500 Subject: [PATCH] i915: Hush asserts during TV detection, just useless noise - i915: Fix LVDS downclock to not cripple performance (#901951) --- drm-i915-lvds-reclock-fix.patch | 72 +++++++++++++++++++++++++++++++++ drm-i915-tv-detect-hush.patch | 46 +++++++++++++++++++++ 2 files changed, 118 insertions(+) create mode 100644 drm-i915-lvds-reclock-fix.patch create mode 100644 drm-i915-tv-detect-hush.patch diff --git a/drm-i915-lvds-reclock-fix.patch b/drm-i915-lvds-reclock-fix.patch new file mode 100644 index 000000000..28b7d6731 --- /dev/null +++ b/drm-i915-lvds-reclock-fix.patch @@ -0,0 +1,72 @@ +Origin: + +http://cgit.freedesktop.org/~danvet/drm-intel/commit/?h=drm-intel-next&id=725a5b54028916cd2511a251c5b5b13d1715addc + +Rediffed for 3.7.x, and any bugs introduced, by ajax + +diff -up linux-3.7.7-202.fc18.x86_64/drivers/gpu/drm/i915/i915_gem.c.jx linux-3.7.7-202.fc18.x86_64/drivers/gpu/drm/i915/i915_gem.c +--- linux-3.7.7-202.fc18.x86_64/drivers/gpu/drm/i915/i915_gem.c.jx 2013-02-14 12:40:21.068832043 -0500 ++++ linux-3.7.7-202.fc18.x86_64/drivers/gpu/drm/i915/i915_gem.c 2013-02-14 12:41:16.645147300 -0500 +@@ -1919,9 +1919,6 @@ i915_gem_object_move_to_inactive(struct + BUG_ON(obj->base.write_domain & ~I915_GEM_GPU_DOMAINS); + BUG_ON(!obj->active); + +- if (obj->pin_count) /* are we a framebuffer? */ +- intel_mark_fb_idle(obj); +- + list_move_tail(&obj->mm_list, &dev_priv->mm.inactive_list); + + list_del_init(&obj->ring_list); +diff -up linux-3.7.7-202.fc18.x86_64/drivers/gpu/drm/i915/intel_display.c.jx linux-3.7.7-202.fc18.x86_64/drivers/gpu/drm/i915/intel_display.c +--- linux-3.7.7-202.fc18.x86_64/drivers/gpu/drm/i915/intel_display.c.jx 2013-02-14 12:40:22.022854621 -0500 ++++ linux-3.7.7-202.fc18.x86_64/drivers/gpu/drm/i915/intel_display.c 2013-02-14 12:41:16.648147371 -0500 +@@ -6094,11 +6094,6 @@ void intel_mark_busy(struct drm_device * + + void intel_mark_idle(struct drm_device *dev) + { +-} +- +-void intel_mark_fb_busy(struct drm_i915_gem_object *obj) +-{ +- struct drm_device *dev = obj->base.dev; + struct drm_crtc *crtc; + + if (!i915_powersave) +@@ -6108,12 +6103,11 @@ void intel_mark_fb_busy(struct drm_i915_ + if (!crtc->fb) + continue; + +- if (to_intel_framebuffer(crtc->fb)->obj == obj) +- intel_increase_pllclock(crtc); ++ intel_decrease_pllclock(crtc); + } + } + +-void intel_mark_fb_idle(struct drm_i915_gem_object *obj) ++void intel_mark_fb_busy(struct drm_i915_gem_object *obj) + { + struct drm_device *dev = obj->base.dev; + struct drm_crtc *crtc; +@@ -6126,7 +6120,7 @@ void intel_mark_fb_idle(struct drm_i915_ + continue; + + if (to_intel_framebuffer(crtc->fb)->obj == obj) +- intel_decrease_pllclock(crtc); ++ intel_increase_pllclock(crtc); + } + } + +diff -up linux-3.7.7-202.fc18.x86_64/drivers/gpu/drm/i915/intel_drv.h.jx linux-3.7.7-202.fc18.x86_64/drivers/gpu/drm/i915/intel_drv.h +--- linux-3.7.7-202.fc18.x86_64/drivers/gpu/drm/i915/intel_drv.h.jx 2013-02-14 12:40:21.071832114 -0500 ++++ linux-3.7.7-202.fc18.x86_64/drivers/gpu/drm/i915/intel_drv.h 2013-02-14 12:41:16.648147371 -0500 +@@ -417,9 +417,8 @@ extern bool intel_sdvo_init(struct drm_d + extern void intel_dvo_init(struct drm_device *dev); + extern void intel_tv_init(struct drm_device *dev); + extern void intel_mark_busy(struct drm_device *dev); +-extern void intel_mark_idle(struct drm_device *dev); + extern void intel_mark_fb_busy(struct drm_i915_gem_object *obj); +-extern void intel_mark_fb_idle(struct drm_i915_gem_object *obj); ++extern void intel_mark_idle(struct drm_device *dev); + extern bool intel_lvds_init(struct drm_device *dev); + extern void intel_dp_init(struct drm_device *dev, int output_reg, + enum port port); diff --git a/drm-i915-tv-detect-hush.patch b/drm-i915-tv-detect-hush.patch new file mode 100644 index 000000000..e774db071 --- /dev/null +++ b/drm-i915-tv-detect-hush.patch @@ -0,0 +1,46 @@ +Obviously this is not upstreamable... + +diff -up linux-3.7.5-202.fc18.x86_64/drivers/gpu/drm/i915/intel_display.c.jx linux-3.7.5-202.fc18.x86_64/drivers/gpu/drm/i915/intel_display.c +--- linux-3.7.5-202.fc18.x86_64/drivers/gpu/drm/i915/intel_display.c.jx 2013-01-30 12:03:28.000000000 -0500 ++++ linux-3.7.5-202.fc18.x86_64/drivers/gpu/drm/i915/intel_display.c 2013-01-30 12:40:53.177449368 -0500 +@@ -6925,6 +6925,11 @@ intel_modeset_check_state(struct drm_dev + struct intel_encoder *encoder; + struct intel_connector *connector; + ++ /* oh hush */ ++ extern int i915_in_tv_detect; ++ if (i915_in_tv_detect) ++ return; ++ + list_for_each_entry(connector, &dev->mode_config.connector_list, + base.head) { + /* This also checks the encoder/connector hw state with the +diff -up linux-3.7.5-202.fc18.x86_64/drivers/gpu/drm/i915/intel_tv.c.jx linux-3.7.5-202.fc18.x86_64/drivers/gpu/drm/i915/intel_tv.c +--- linux-3.7.5-202.fc18.x86_64/drivers/gpu/drm/i915/intel_tv.c.jx 2012-12-10 22:30:57.000000000 -0500 ++++ linux-3.7.5-202.fc18.x86_64/drivers/gpu/drm/i915/intel_tv.c 2013-01-30 12:39:34.318593585 -0500 +@@ -1296,6 +1296,8 @@ static void intel_tv_find_better_format( + connector->dev->mode_config.tv_mode_property, i); + } + ++int i915_in_tv_detect = 0; ++ + /** + * Detect the TV connection. + * +@@ -1314,11 +1316,15 @@ intel_tv_detect(struct drm_connector *co + if (force) { + struct intel_load_detect_pipe tmp; + ++ i915_in_tv_detect = 1; + if (intel_get_load_detect_pipe(connector, &mode, &tmp)) { + type = intel_tv_detect_type(intel_tv, connector); + intel_release_load_detect_pipe(connector, &tmp); +- } else ++ i915_in_tv_detect = 0; ++ } else { ++ i915_in_tv_detect = 0; + return connector_status_unknown; ++ } + } else + return connector->status; +