summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@suse.de>2011-08-15 09:17:44 -0700
committerGreg Kroah-Hartman <gregkh@suse.de>2011-08-15 09:17:44 -0700
commitc0f7b4424cb6729de40b9f929bdd133d46d1ff64 (patch)
treec7f79ef0c3de1ae08ea5ab993f7cf30c8c0523f4
parentc825e992acf06e5eab8a6cb5254f3316d3053028 (diff)
downloadstable-queue-c0f7b4424cb6729de40b9f929bdd133d46d1ff64.tar.gz
3.0 patches
-rw-r--r--queue-3.0/drm-radeon-kms-don-t-enable-connectors-that-are-off-in-the.patch37
-rw-r--r--queue-3.0/drm-radeon-kms-don-t-try-to-be-smart-in-the-hpd-handler.patch92
-rw-r--r--queue-3.0/drm-radeon-kms-fix-regression-is-handling-2-heads-on.patch33
-rw-r--r--queue-3.0/lguest-allow-booting-guest-with-config_relocatable-y.patch37
-rw-r--r--queue-3.0/series4
5 files changed, 203 insertions, 0 deletions
diff --git a/queue-3.0/drm-radeon-kms-don-t-enable-connectors-that-are-off-in-the.patch b/queue-3.0/drm-radeon-kms-don-t-enable-connectors-that-are-off-in-the.patch
new file mode 100644
index 0000000000..3081d9d3b6
--- /dev/null
+++ b/queue-3.0/drm-radeon-kms-don-t-enable-connectors-that-are-off-in-the.patch
@@ -0,0 +1,37 @@
+From 73104b5cfe3067d68f2c2de3f3d4d4964c55873e Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Tue, 9 Aug 2011 17:09:06 +0000
+Subject: drm/radeon/kms: don't enable connectors that are off in the
+ hotplug handler
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit 73104b5cfe3067d68f2c2de3f3d4d4964c55873e upstream.
+
+If we get a hotplug event on an connector that is off, don't
+attempt to turn it on or off, it should already be off.
+
+Fixes:
+https://bugzilla.redhat.com/show_bug.cgi?id=728228
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/gpu/drm/radeon/radeon_connectors.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/drivers/gpu/drm/radeon/radeon_connectors.c
++++ b/drivers/gpu/drm/radeon/radeon_connectors.c
+@@ -60,6 +60,10 @@ void radeon_connector_hotplug(struct drm
+
+ radeon_hpd_set_polarity(rdev, radeon_connector->hpd.hpd);
+
++ /* if the connector is already off, don't turn it back on */
++ if (connector->dpms != DRM_MODE_DPMS_ON)
++ return;
++
+ /* powering up/down the eDP panel generates hpd events which
+ * can interfere with modesetting.
+ */
diff --git a/queue-3.0/drm-radeon-kms-don-t-try-to-be-smart-in-the-hpd-handler.patch b/queue-3.0/drm-radeon-kms-don-t-try-to-be-smart-in-the-hpd-handler.patch
new file mode 100644
index 0000000000..5f1d7ce222
--- /dev/null
+++ b/queue-3.0/drm-radeon-kms-don-t-try-to-be-smart-in-the-hpd-handler.patch
@@ -0,0 +1,92 @@
+From d5811e8731213f80c80d89e980505052f16aca1c Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Sat, 13 Aug 2011 13:36:13 -0400
+Subject: drm/radeon/kms: don't try to be smart in the hpd handler
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit d5811e8731213f80c80d89e980505052f16aca1c upstream.
+
+Attempting to try and turn off disconnected display hw in the
+hotput handler lead to more problems than it helped. For
+now just register an event and only attempt the do something
+interesting with DP. Other connectors are just too problematic:
+- Some systems have an HPD pin assigned to LVDS, but it's rarely
+if ever connected properly and we don't really care about hpd
+events on LVDS anyway since it's always connected.
+- The HPD pin is wired up correctly for eDP, but we don't really
+have to do anything since the events since it's always connected.
+- Some HPD pins fire more than once when you connect/disconnect
+- etc.
+
+Fixes:
+https://bugs.freedesktop.org/show_bug.cgi?id=39882
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/gpu/drm/radeon/atombios_dp.c | 12 ++++++++++++
+ drivers/gpu/drm/radeon/radeon_connectors.c | 14 ++++++--------
+ drivers/gpu/drm/radeon/radeon_mode.h | 1 +
+ 3 files changed, 19 insertions(+), 8 deletions(-)
+
+--- a/drivers/gpu/drm/radeon/atombios_dp.c
++++ b/drivers/gpu/drm/radeon/atombios_dp.c
+@@ -613,6 +613,18 @@ static bool radeon_dp_get_link_status(st
+ return true;
+ }
+
++bool radeon_dp_needs_link_train(struct radeon_connector *radeon_connector)
++{
++ u8 link_status[DP_LINK_STATUS_SIZE];
++ struct radeon_connector_atom_dig *dig = radeon_connector->con_priv;
++
++ if (!radeon_dp_get_link_status(radeon_connector, link_status))
++ return false;
++ if (dp_channel_eq_ok(link_status, dig->dp_lane_count))
++ return false;
++ return true;
++}
++
+ struct radeon_dp_link_train_info {
+ struct radeon_device *rdev;
+ struct drm_encoder *encoder;
+--- a/drivers/gpu/drm/radeon/radeon_connectors.c
++++ b/drivers/gpu/drm/radeon/radeon_connectors.c
+@@ -64,18 +64,16 @@ void radeon_connector_hotplug(struct drm
+ if (connector->dpms != DRM_MODE_DPMS_ON)
+ return;
+
+- /* powering up/down the eDP panel generates hpd events which
+- * can interfere with modesetting.
+- */
+- if (connector->connector_type == DRM_MODE_CONNECTOR_eDP)
+- return;
++ /* just deal with DP (not eDP) here. */
++ if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) {
++ int saved_dpms = connector->dpms;
+
+- /* pre-r600 did not always have the hpd pins mapped accurately to connectors */
+- if (rdev->family >= CHIP_R600) {
+- if (radeon_hpd_sense(rdev, radeon_connector->hpd.hpd))
++ if (radeon_hpd_sense(rdev, radeon_connector->hpd.hpd) &&
++ radeon_dp_needs_link_train(radeon_connector))
+ drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON);
+ else
+ drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF);
++ connector->dpms = saved_dpms;
+ }
+ }
+
+--- a/drivers/gpu/drm/radeon/radeon_mode.h
++++ b/drivers/gpu/drm/radeon/radeon_mode.h
+@@ -476,6 +476,7 @@ extern void radeon_dp_set_link_config(st
+ struct drm_display_mode *mode);
+ extern void radeon_dp_link_train(struct drm_encoder *encoder,
+ struct drm_connector *connector);
++extern bool radeon_dp_needs_link_train(struct radeon_connector *radeon_connector);
+ extern u8 radeon_dp_getsinktype(struct radeon_connector *radeon_connector);
+ extern bool radeon_dp_getdpcd(struct radeon_connector *radeon_connector);
+ extern void atombios_dig_encoder_setup(struct drm_encoder *encoder, int action, int panel_mode);
diff --git a/queue-3.0/drm-radeon-kms-fix-regression-is-handling-2-heads-on.patch b/queue-3.0/drm-radeon-kms-fix-regression-is-handling-2-heads-on.patch
new file mode 100644
index 0000000000..e7ee9405a9
--- /dev/null
+++ b/queue-3.0/drm-radeon-kms-fix-regression-is-handling-2-heads-on.patch
@@ -0,0 +1,33 @@
+From 33ae1827d6c3c79c5957536ec29d5a8780623147 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Thu, 11 Aug 2011 14:01:03 +0000
+Subject: drm/radeon/kms: fix regression is handling >2 heads on
+ cedar/caicos
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit 33ae1827d6c3c79c5957536ec29d5a8780623147 upstream.
+
+Need to add support for 4 crtcs when setting the possible crtcs
+for the encoders.
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/gpu/drm/radeon/radeon_encoders.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/drivers/gpu/drm/radeon/radeon_encoders.c
++++ b/drivers/gpu/drm/radeon/radeon_encoders.c
+@@ -2323,6 +2323,9 @@ radeon_add_atom_encoder(struct drm_devic
+ default:
+ encoder->possible_crtcs = 0x3;
+ break;
++ case 4:
++ encoder->possible_crtcs = 0xf;
++ break;
+ case 6:
+ encoder->possible_crtcs = 0x3f;
+ break;
diff --git a/queue-3.0/lguest-allow-booting-guest-with-config_relocatable-y.patch b/queue-3.0/lguest-allow-booting-guest-with-config_relocatable-y.patch
new file mode 100644
index 0000000000..8bd7f7e100
--- /dev/null
+++ b/queue-3.0/lguest-allow-booting-guest-with-config_relocatable-y.patch
@@ -0,0 +1,37 @@
+From e22a539824e8ddb82c87b4f415165ede82e6ab56 Mon Sep 17 00:00:00 2001
+From: Rusty Russell <rusty@rustcorp.com.au>
+Date: Mon, 15 Aug 2011 10:15:10 +0930
+Subject: lguest: allow booting guest with CONFIG_RELOCATABLE=y
+
+From: Rusty Russell <rusty@rustcorp.com.au>
+
+commit e22a539824e8ddb82c87b4f415165ede82e6ab56 upstream.
+
+The CONFIG_RELOCATABLE code tries to align the unpack destination to
+the value of 'kernel_alignment' in the setup_hdr. If that's 0, it
+tries to unpack to address 0, which in fact causes the gunzip code
+to call 'error("Out of memory while allocating output buffer")'.
+
+The bootloader (ie. the lguest Launcher in this case) should be doing
+setting this field; the normal bzImage is 16M, we can use the same.
+
+Reported-by: Stefanos Geraggelos <sgerag@cslab.ece.ntua.gr>
+Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ Documentation/virtual/lguest/lguest.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/Documentation/virtual/lguest/lguest.c
++++ b/Documentation/virtual/lguest/lguest.c
+@@ -2008,6 +2008,9 @@ int main(int argc, char *argv[])
+ /* We use a simple helper to copy the arguments separated by spaces. */
+ concat((char *)(boot + 1), argv+optind+2);
+
++ /* Set kernel alignment to 16M (CONFIG_PHYSICAL_ALIGN) */
++ boot->hdr.kernel_alignment = 0x1000000;
++
+ /* Boot protocol version: 2.07 supports the fields for lguest. */
+ boot->hdr.version = 0x207;
+
diff --git a/queue-3.0/series b/queue-3.0/series
index b30e974554..92dd7640f9 100644
--- a/queue-3.0/series
+++ b/queue-3.0/series
@@ -19,3 +19,7 @@ asoc-tegra-tegra_pcm_deallocate_dma_buffer-don-t-oops.patch
asoc-tegra-wm8903-machine-driver-allow-re-insertion-of.patch
ath5k-fix-error-handling-in-ath5k_beacon_send.patch
mm-fix-wrong-vmap-address-calculations-with-odd-nr_cpus.patch
+lguest-allow-booting-guest-with-config_relocatable-y.patch
+drm-radeon-kms-don-t-enable-connectors-that-are-off-in-the.patch
+drm-radeon-kms-fix-regression-is-handling-2-heads-on.patch
+drm-radeon-kms-don-t-try-to-be-smart-in-the-hpd-handler.patch