--- /dev/null
+From 4eab81366465aedcfd26de960c595bc03599c09f Mon Sep 17 00:00:00 2001
+From: Jani Nikula <jani.nikula@intel.com>
+Date: Mon, 13 Aug 2012 13:22:34 +0300
+Subject: drm/i915: extract connector update from intel_ddc_get_modes() for reuse
+
+From: Jani Nikula <jani.nikula@intel.com>
+
+commit 4eab81366465aedcfd26de960c595bc03599c09f upstream.
+
+Refactor the connector update part of intel_ddc_get_modes() into a separate
+intel_connector_update_modes() function for reuse. No functional changes.
+
+Signed-off-by: Jani Nikula <jani.nikula@intel.com>
+Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=45881
+Tested-by: Alex Ferrando <alferpal@gmail.com>
+Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/i915/intel_drv.h | 2 ++
+ drivers/gpu/drm/i915/intel_modes.c | 31 ++++++++++++++++++++++---------
+ 2 files changed, 24 insertions(+), 9 deletions(-)
+
+--- a/drivers/gpu/drm/i915/intel_drv.h
++++ b/drivers/gpu/drm/i915/intel_drv.h
+@@ -334,6 +334,8 @@ struct intel_fbc_work {
+ int interval;
+ };
+
++int intel_connector_update_modes(struct drm_connector *connector,
++ struct edid *edid);
+ int intel_ddc_get_modes(struct drm_connector *c, struct i2c_adapter *adapter);
+ extern bool intel_ddc_probe(struct intel_encoder *intel_encoder, int ddc_bus);
+
+--- a/drivers/gpu/drm/i915/intel_modes.c
++++ b/drivers/gpu/drm/i915/intel_modes.c
+@@ -61,6 +61,25 @@ bool intel_ddc_probe(struct intel_encode
+ }
+
+ /**
++ * intel_connector_update_modes - update connector from edid
++ * @connector: DRM connector device to use
++ * @edid: previously read EDID information
++ */
++int intel_connector_update_modes(struct drm_connector *connector,
++ struct edid *edid)
++{
++ int ret;
++
++ drm_mode_connector_update_edid_property(connector, edid);
++ ret = drm_add_edid_modes(connector, edid);
++ drm_edid_to_eld(connector, edid);
++ connector->display_info.raw_edid = NULL;
++ kfree(edid);
++
++ return ret;
++}
++
++/**
+ * intel_ddc_get_modes - get modelist from monitor
+ * @connector: DRM connector device to use
+ * @adapter: i2c adapter
+@@ -71,18 +90,12 @@ int intel_ddc_get_modes(struct drm_conne
+ struct i2c_adapter *adapter)
+ {
+ struct edid *edid;
+- int ret = 0;
+
+ edid = drm_get_edid(connector, adapter);
+- if (edid) {
+- drm_mode_connector_update_edid_property(connector, edid);
+- ret = drm_add_edid_modes(connector, edid);
+- drm_edid_to_eld(connector, edid);
+- connector->display_info.raw_edid = NULL;
+- kfree(edid);
+- }
++ if (!edid)
++ return 0;
+
+- return ret;
++ return intel_connector_update_modes(connector, edid);
+ }
+
+ static const struct drm_prop_enum_list force_audio_names[] = {
--- /dev/null
+From f1a2f5b7c5f0941d23eef0a095c0b99bf8d051e6 Mon Sep 17 00:00:00 2001
+From: Jani Nikula <jani.nikula@intel.com>
+Date: Mon, 13 Aug 2012 13:22:35 +0300
+Subject: drm/i915: fall back to bit-banging if GMBUS fails in CRT EDID reads
+
+From: Jani Nikula <jani.nikula@intel.com>
+
+commit f1a2f5b7c5f0941d23eef0a095c0b99bf8d051e6 upstream.
+
+GMBUS was enabled over bit-banging as the default in commits:
+
+commit c3dfefa0a6d235bd465309e12f4c56ea16e71111
+Author: Daniel Vetter <daniel.vetter@ffwll.ch>
+Date: Tue Feb 14 22:37:25 2012 +0100
+
+ drm/i915: reenable gmbus on gen3+ again
+
+and
+
+commit 0fb3f969c8683505fb7323c06bf8a999a5a45a15
+Author: Daniel Vetter <daniel.vetter@ffwll.ch>
+Date: Fri Mar 2 19:38:30 2012 +0100
+
+ drm/i915: enable gmbus on gen2
+
+Unfortunately, GMBUS seems to fail on some CRT displays. Add a bit-banging
+fallback to CRT EDID reads.
+
+LKML-Reference: <201207251020.47637.maciej.rutecki@gmail.com>
+Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=45881
+Signed-off-by: Jani Nikula <jani.nikula@intel.com>
+Tested-by: Alex Ferrando <alferpal@gmail.com>
+Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/i915/intel_crt.c | 36 +++++++++++++++++++++++++++++++++---
+ 1 file changed, 33 insertions(+), 3 deletions(-)
+
+--- a/drivers/gpu/drm/i915/intel_crt.c
++++ b/drivers/gpu/drm/i915/intel_crt.c
+@@ -284,6 +284,36 @@ static bool intel_crt_detect_hotplug(str
+ return ret;
+ }
+
++static struct edid *intel_crt_get_edid(struct drm_connector *connector,
++ struct i2c_adapter *i2c)
++{
++ struct edid *edid;
++
++ edid = drm_get_edid(connector, i2c);
++
++ if (!edid && !intel_gmbus_is_forced_bit(i2c)) {
++ DRM_DEBUG_KMS("CRT GMBUS EDID read failed, retry using GPIO bit-banging\n");
++ intel_gmbus_force_bit(i2c, true);
++ edid = drm_get_edid(connector, i2c);
++ intel_gmbus_force_bit(i2c, false);
++ }
++
++ return edid;
++}
++
++/* local version of intel_ddc_get_modes() to use intel_crt_get_edid() */
++static int intel_crt_ddc_get_modes(struct drm_connector *connector,
++ struct i2c_adapter *adapter)
++{
++ struct edid *edid;
++
++ edid = intel_crt_get_edid(connector, adapter);
++ if (!edid)
++ return 0;
++
++ return intel_connector_update_modes(connector, edid);
++}
++
+ static bool intel_crt_detect_ddc(struct drm_connector *connector)
+ {
+ struct intel_crt *crt = intel_attached_crt(connector);
+@@ -299,7 +329,7 @@ static bool intel_crt_detect_ddc(struct
+ struct i2c_adapter *i2c;
+
+ i2c = intel_gmbus_get_adapter(dev_priv, dev_priv->crt_ddc_pin);
+- edid = drm_get_edid(connector, i2c);
++ edid = intel_crt_get_edid(connector, i2c);
+ /*
+ * This may be a DVI-I connector with a shared DDC
+ * link between analog and digital outputs, so we
+@@ -498,13 +528,13 @@ static int intel_crt_get_modes(struct dr
+ struct i2c_adapter *i2c;
+
+ i2c = intel_gmbus_get_adapter(dev_priv, dev_priv->crt_ddc_pin);
+- ret = intel_ddc_get_modes(connector, i2c);
++ ret = intel_crt_ddc_get_modes(connector, i2c);
+ if (ret || !IS_G4X(dev))
+ return ret;
+
+ /* Try to probe digital port for output in DVI-I -> VGA mode. */
+ i2c = intel_gmbus_get_adapter(dev_priv, GMBUS_PORT_DPB);
+- return intel_ddc_get_modes(connector, i2c);
++ return intel_crt_ddc_get_modes(connector, i2c);
+ }
+
+ static int intel_crt_set_property(struct drm_connector *connector,
--- /dev/null
+From 1ee9ae3244c4789f3184c5123f3b2d7e405b3f4c Mon Sep 17 00:00:00 2001
+From: Daniel Vetter <daniel.vetter@ffwll.ch>
+Date: Wed, 15 Aug 2012 10:41:45 +0200
+Subject: drm/i915: use hsw rps tuning values everywhere on gen6+
+
+From: Daniel Vetter <daniel.vetter@ffwll.ch>
+
+commit 1ee9ae3244c4789f3184c5123f3b2d7e405b3f4c upstream.
+
+James Bottomley reported [1] a massive power regression, due to the
+enabling of semaphores by default in 3.5. A workaround for him is to
+again disable semaphores. And indeed, his system has a very hard time
+to enter rc6 with semaphores enabled.
+
+Ben Widawsky run around with a kill-a-watt a lot and noticed:
+- There are indeed a few rare systems that seem to have a hard time
+ entering rc6 when desktop-idle.
+- One machine, The Indestructible Toshiba regressed in this behaviour
+ between 3.5 and 3.6 in a merge commit! So rc6 behaviour with the
+ current setting seems to be highly timing dependent and not robust
+ at all.
+- The behaviour James reported wrt semaphores seems to be a freak
+ timing thing that only happens on his specific machine, confirming
+ that enabling semaphores shouldn't reduce rc6 residency.
+
+Now furthermore the Google ChromeOS guys reported [2] a while ago that
+at least on some machines a simply a blinking cursor can keep the gpu
+turbo at the highest frequency. This is because the current rps limits
+used on snb/ivb are highly asymmetric.
+
+On the theory that gpu turbo and rc6 tuning values are related, we've
+tried whether the much saner looking (since much less asymmetric) rps
+tuning values used for hsw would also help entering rc6 more robustly.
+
+And it seems to mostly work, and we don't really have the resources to
+through-roughly tune things in any better way: The values from the
+ChromeOS ppl seem to fare a bit worse for James' machine, so I guess
+we better stick with something vpg (the gpu hw/windows group)
+provided, hoping that they've done their jobs.
+
+Reference[1]: http://lists.freedesktop.org/archives/dri-devel/2012-July/025675.html
+Reference[2]: http://lists.freedesktop.org/archives/intel-gfx/2012-July/018692.html
+Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=53393
+Tested-by: Ben Widawsky <ben@bwidawsk.net>
+Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/i915/intel_pm.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+--- a/drivers/gpu/drm/i915/intel_pm.c
++++ b/drivers/gpu/drm/i915/intel_pm.c
+@@ -2431,10 +2431,10 @@ void gen6_enable_rps(struct drm_i915_pri
+ I915_WRITE(GEN6_RP_INTERRUPT_LIMITS,
+ dev_priv->max_delay << 24 |
+ dev_priv->min_delay << 16);
+- I915_WRITE(GEN6_RP_UP_THRESHOLD, 10000);
+- I915_WRITE(GEN6_RP_DOWN_THRESHOLD, 1000000);
+- I915_WRITE(GEN6_RP_UP_EI, 100000);
+- I915_WRITE(GEN6_RP_DOWN_EI, 5000000);
++ I915_WRITE(GEN6_RP_UP_THRESHOLD, 59400);
++ I915_WRITE(GEN6_RP_DOWN_THRESHOLD, 245000);
++ I915_WRITE(GEN6_RP_UP_EI, 66000);
++ I915_WRITE(GEN6_RP_DOWN_EI, 350000);
+ I915_WRITE(GEN6_RP_IDLE_HYSTERSIS, 10);
+ I915_WRITE(GEN6_RP_CONTROL,
+ GEN6_RP_MEDIA_TURBO |
--- /dev/null
+From 48c0ac9911839daf188e4a0b6b132ac31050a241 Mon Sep 17 00:00:00 2001
+From: Christian König <deathsimple@vodafone.de>
+Date: Mon, 20 Aug 2012 15:38:47 +0200
+Subject: drm/radeon: init lockup timeout on ring init
+
+From: Christian König <deathsimple@vodafone.de>
+
+commit 48c0ac9911839daf188e4a0b6b132ac31050a241 upstream.
+
+Reset the lockup timeout on ring (re-)initialisation.
+
+Otherwise we get error messages like this on gpu resets:
+[ 1559.949177] radeon 0000:01:00.0: GPU lockup CP stall for more than 1482270msec
+
+Signed-off-by: Christian König <deathsimple@vodafone.de>
+Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/radeon_ring.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/gpu/drm/radeon/radeon_ring.c
++++ b/drivers/gpu/drm/radeon/radeon_ring.c
+@@ -394,6 +394,7 @@ int radeon_ring_init(struct radeon_devic
+ if (radeon_debugfs_ring_init(rdev, ring)) {
+ DRM_ERROR("Failed to register debugfs file for rings !\n");
+ }
++ radeon_ring_lockup_update(ring);
+ return 0;
+ }
+
drm-radeon-split-atrm-support-out-from-the-atpx-handler-v3.patch
drm-radeon-implement-acpi-vfct-vbios-fetch-v3.patch
drm-radeon-kms-extend-the-fujitsu-d3003-s2-board-connector-quirk-to-cover-later-silicon-stepping.patch
+drm-radeon-init-lockup-timeout-on-ring-init.patch
+drm-i915-extract-connector-update-from-intel_ddc_get_modes-for-reuse.patch
+drm-i915-fall-back-to-bit-banging-if-gmbus-fails-in-crt-edid-reads.patch
+drm-i915-use-hsw-rps-tuning-values-everywhere-on-gen6.patch