]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.10-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 27 Sep 2013 22:52:35 +0000 (15:52 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 27 Sep 2013 22:52:35 +0000 (15:52 -0700)
added patches:
drm-radeon-atom-workaround-vbios-bug-in-transmitter-table-on-rs880-v2.patch
drm-radeon-avoid-uvd-corruptions-on-agp-cards.patch
drm-radeon-fix-panel-scaling-with-edp-and-lvds-bridges.patch
rt2800-change-initialization-sequence-to-fix-system-freeze.patch

queue-3.10/drm-radeon-atom-workaround-vbios-bug-in-transmitter-table-on-rs880-v2.patch [new file with mode: 0644]
queue-3.10/drm-radeon-avoid-uvd-corruptions-on-agp-cards.patch [new file with mode: 0644]
queue-3.10/drm-radeon-fix-panel-scaling-with-edp-and-lvds-bridges.patch [new file with mode: 0644]
queue-3.10/rt2800-change-initialization-sequence-to-fix-system-freeze.patch [new file with mode: 0644]
queue-3.10/series

diff --git a/queue-3.10/drm-radeon-atom-workaround-vbios-bug-in-transmitter-table-on-rs880-v2.patch b/queue-3.10/drm-radeon-atom-workaround-vbios-bug-in-transmitter-table-on-rs880-v2.patch
new file mode 100644 (file)
index 0000000..be3c62f
--- /dev/null
@@ -0,0 +1,51 @@
+From 91f3a6aaf280294b07c05dfe606e6c27b7ba3c72 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Mon, 9 Sep 2013 10:54:22 -0400
+Subject: drm/radeon/atom: workaround vbios bug in transmitter table on rs880 (v2)
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit 91f3a6aaf280294b07c05dfe606e6c27b7ba3c72 upstream.
+
+The OUTPUT_ENABLE action jumps past the point in the coder where
+the data_offset is set on certain rs780 cards.  This worked
+previously because the OUTPUT_ENABLE action is always called
+immediately after the ENABLE action so the data_offset remained
+set.  In 6f8bbaf568c7f2c497558bfd04654c0b9841ad57
+(drm/radeon/atom: initialize more atom interpretor elements to 0),
+we explictly reset data_offset to 0 between atom calls which then
+caused this to fail.  The fix is to just skip calling the
+OUTPUT_ENABLE action on the problematic chipsets.  The ENABLE
+action does the same thing and more.  Ultimately, we could
+probably drop the OUTPUT_ENABLE action all together on DCE3
+asics.
+
+fixes:
+https://bugzilla.kernel.org/show_bug.cgi?id=60791
+
+v2: only rs880 seems to be affected
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/atombios_encoders.c |    8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+--- a/drivers/gpu/drm/radeon/atombios_encoders.c
++++ b/drivers/gpu/drm/radeon/atombios_encoders.c
+@@ -1636,8 +1636,12 @@ radeon_atom_encoder_dpms_dig(struct drm_
+                       atombios_dig_encoder_setup(encoder, ATOM_ENABLE, 0);
+                       atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_SETUP, 0, 0);
+                       atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE, 0, 0);
+-                      /* some early dce3.2 boards have a bug in their transmitter control table */
+-                      if ((rdev->family != CHIP_RV710) && (rdev->family != CHIP_RV730))
++                      /* some dce3.x boards have a bug in their transmitter control table.
++                       * ACTION_ENABLE_OUTPUT can probably be dropped since ACTION_ENABLE
++                       * does the same thing and more.
++                       */
++                      if ((rdev->family != CHIP_RV710) && (rdev->family != CHIP_RV730) &&
++                          (rdev->family != CHIP_RS880))
+                               atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE_OUTPUT, 0, 0);
+               }
+               if (ENCODER_MODE_IS_DP(atombios_get_encoder_mode(encoder)) && connector) {
diff --git a/queue-3.10/drm-radeon-avoid-uvd-corruptions-on-agp-cards.patch b/queue-3.10/drm-radeon-avoid-uvd-corruptions-on-agp-cards.patch
new file mode 100644 (file)
index 0000000..d2db599
--- /dev/null
@@ -0,0 +1,36 @@
+From 4f66c59922cbcda14c9e103e6c7f4ee616360d43 Mon Sep 17 00:00:00 2001
+From: Christian König <christian.koenig@amd.com>
+Date: Sun, 15 Sep 2013 13:31:28 +0200
+Subject: drm/radeon: avoid UVD corruptions on AGP cards
+
+From: Christian König <christian.koenig@amd.com>
+
+commit 4f66c59922cbcda14c9e103e6c7f4ee616360d43 upstream.
+
+Putting everything into VRAM seems to help.
+
+Signed-off-by: Christian König <christian.koenig@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/radeon_cs.c |    8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+--- a/drivers/gpu/drm/radeon/radeon_cs.c
++++ b/drivers/gpu/drm/radeon/radeon_cs.c
+@@ -80,9 +80,11 @@ static int radeon_cs_parser_relocs(struc
+               p->relocs[i].lobj.bo = p->relocs[i].robj;
+               p->relocs[i].lobj.written = !!r->write_domain;
+-              /* the first reloc of an UVD job is the
+-                 msg and that must be in VRAM */
+-              if (p->ring == R600_RING_TYPE_UVD_INDEX && i == 0) {
++              /* the first reloc of an UVD job is the msg and that must be in
++                 VRAM, also but everything into VRAM on AGP cards to avoid
++                 image corruptions */
++              if (p->ring == R600_RING_TYPE_UVD_INDEX &&
++                  (i == 0 || p->rdev->flags & RADEON_IS_AGP)) {
+                       /* TODO: is this still needed for NI+ ? */
+                       p->relocs[i].lobj.domain =
+                               RADEON_GEM_DOMAIN_VRAM;
diff --git a/queue-3.10/drm-radeon-fix-panel-scaling-with-edp-and-lvds-bridges.patch b/queue-3.10/drm-radeon-fix-panel-scaling-with-edp-and-lvds-bridges.patch
new file mode 100644 (file)
index 0000000..23b5822
--- /dev/null
@@ -0,0 +1,98 @@
+From 855f5f1d882a34e4e9dd27b299737cd3508a5624 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Fri, 13 Sep 2013 18:33:16 -0400
+Subject: drm/radeon: fix panel scaling with eDP and LVDS bridges
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit 855f5f1d882a34e4e9dd27b299737cd3508a5624 upstream.
+
+We were using the wrong set_properly callback so we always
+ended up with Full scaling even if something else (Center or
+Full aspect) was selected.
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/radeon_connectors.c |   34 ++++++++++++++++++++++++++---
+ 1 file changed, 31 insertions(+), 3 deletions(-)
+
+--- a/drivers/gpu/drm/radeon/radeon_connectors.c
++++ b/drivers/gpu/drm/radeon/radeon_connectors.c
+@@ -1489,6 +1489,24 @@ static const struct drm_connector_funcs
+       .force = radeon_dvi_force,
+ };
++static const struct drm_connector_funcs radeon_edp_connector_funcs = {
++      .dpms = drm_helper_connector_dpms,
++      .detect = radeon_dp_detect,
++      .fill_modes = drm_helper_probe_single_connector_modes,
++      .set_property = radeon_lvds_set_property,
++      .destroy = radeon_dp_connector_destroy,
++      .force = radeon_dvi_force,
++};
++
++static const struct drm_connector_funcs radeon_lvds_bridge_connector_funcs = {
++      .dpms = drm_helper_connector_dpms,
++      .detect = radeon_dp_detect,
++      .fill_modes = drm_helper_probe_single_connector_modes,
++      .set_property = radeon_lvds_set_property,
++      .destroy = radeon_dp_connector_destroy,
++      .force = radeon_dvi_force,
++};
++
+ void
+ radeon_add_atom_connector(struct drm_device *dev,
+                         uint32_t connector_id,
+@@ -1580,8 +1598,6 @@ radeon_add_atom_connector(struct drm_dev
+                       goto failed;
+               radeon_dig_connector->igp_lane_info = igp_lane_info;
+               radeon_connector->con_priv = radeon_dig_connector;
+-              drm_connector_init(dev, &radeon_connector->base, &radeon_dp_connector_funcs, connector_type);
+-              drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs);
+               if (i2c_bus->valid) {
+                       /* add DP i2c bus */
+                       if (connector_type == DRM_MODE_CONNECTOR_eDP)
+@@ -1598,6 +1614,10 @@ radeon_add_atom_connector(struct drm_dev
+               case DRM_MODE_CONNECTOR_VGA:
+               case DRM_MODE_CONNECTOR_DVIA:
+               default:
++                      drm_connector_init(dev, &radeon_connector->base,
++                                         &radeon_dp_connector_funcs, connector_type);
++                      drm_connector_helper_add(&radeon_connector->base,
++                                               &radeon_dp_connector_helper_funcs);
+                       connector->interlace_allowed = true;
+                       connector->doublescan_allowed = true;
+                       radeon_connector->dac_load_detect = true;
+@@ -1610,6 +1630,10 @@ radeon_add_atom_connector(struct drm_dev
+               case DRM_MODE_CONNECTOR_HDMIA:
+               case DRM_MODE_CONNECTOR_HDMIB:
+               case DRM_MODE_CONNECTOR_DisplayPort:
++                      drm_connector_init(dev, &radeon_connector->base,
++                                         &radeon_dp_connector_funcs, connector_type);
++                      drm_connector_helper_add(&radeon_connector->base,
++                                               &radeon_dp_connector_helper_funcs);
+                       drm_object_attach_property(&radeon_connector->base.base,
+                                                     rdev->mode_info.underscan_property,
+                                                     UNDERSCAN_OFF);
+@@ -1634,6 +1658,10 @@ radeon_add_atom_connector(struct drm_dev
+                       break;
+               case DRM_MODE_CONNECTOR_LVDS:
+               case DRM_MODE_CONNECTOR_eDP:
++                      drm_connector_init(dev, &radeon_connector->base,
++                                         &radeon_lvds_bridge_connector_funcs, connector_type);
++                      drm_connector_helper_add(&radeon_connector->base,
++                                               &radeon_dp_connector_helper_funcs);
+                       drm_object_attach_property(&radeon_connector->base.base,
+                                                     dev->mode_config.scaling_mode_property,
+                                                     DRM_MODE_SCALE_FULLSCREEN);
+@@ -1797,7 +1825,7 @@ radeon_add_atom_connector(struct drm_dev
+                               goto failed;
+                       radeon_dig_connector->igp_lane_info = igp_lane_info;
+                       radeon_connector->con_priv = radeon_dig_connector;
+-                      drm_connector_init(dev, &radeon_connector->base, &radeon_dp_connector_funcs, connector_type);
++                      drm_connector_init(dev, &radeon_connector->base, &radeon_edp_connector_funcs, connector_type);
+                       drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs);
+                       if (i2c_bus->valid) {
+                               /* add DP i2c bus */
diff --git a/queue-3.10/rt2800-change-initialization-sequence-to-fix-system-freeze.patch b/queue-3.10/rt2800-change-initialization-sequence-to-fix-system-freeze.patch
new file mode 100644 (file)
index 0000000..644466b
--- /dev/null
@@ -0,0 +1,86 @@
+From f4e1a4d3ecbb9e42bdf8e7869ee8a4ebfa27fb20 Mon Sep 17 00:00:00 2001
+From: Stanislaw Gruszka <sgruszka@redhat.com>
+Date: Mon, 9 Sep 2013 12:37:37 +0200
+Subject: rt2800: change initialization sequence to fix system freeze
+
+From: Stanislaw Gruszka <sgruszka@redhat.com>
+
+commit f4e1a4d3ecbb9e42bdf8e7869ee8a4ebfa27fb20 upstream.
+
+My commit
+
+commit c630ccf1a127578421a928489d51e99c05037054
+Author: Stanislaw Gruszka <stf_xl@wp.pl>
+Date:   Sat Mar 16 19:19:46 2013 +0100
+
+    rt2800: rearrange bbp/rfcsr initialization
+
+make Maxim machine freeze when try to start wireless device.
+
+Initialization order and sending MCU_BOOT_SIGNAL request, changed in
+above commit, is important. Doing things incorrectly make PCIe bus
+problems, which can froze the machine.
+
+This patch change initialization sequence like vendor driver do:
+function NICInitializeAsic() from
+2011_1007_RT5390_RT5392_Linux_STA_V2.5.0.3_DPO (PCI devices) and
+DPO_RT5572_LinuxSTA_2.6.1.3_20121022 (according Mediatek, latest driver
+for RT8070/RT3070/RT3370/RT3572/RT5370/RT5372/RT5572 USB devices).
+It fixes freezes on Maxim system.
+
+Resolve:
+https://bugzilla.redhat.com/show_bug.cgi?id=1000679
+
+Reported-and-tested-by: Maxim Polyakov <polyakov@dexmalabs.com>
+Bisected-by: Igor Gnatenko <i.gnatenko.brain@gmail.com>
+Cc: stable@vger.kernel.org # 3.10+
+Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+
+---
+ drivers/net/wireless/rt2x00/rt2800lib.c |   15 +++++++--------
+ 1 file changed, 7 insertions(+), 8 deletions(-)
+
+--- a/drivers/net/wireless/rt2x00/rt2800lib.c
++++ b/drivers/net/wireless/rt2x00/rt2800lib.c
+@@ -4048,10 +4048,6 @@ static int rt2800_init_bbp(struct rt2x00
+       u8 reg_id;
+       u8 value;
+-      if (unlikely(rt2800_wait_bbp_rf_ready(rt2x00dev) ||
+-                   rt2800_wait_bbp_ready(rt2x00dev)))
+-              return -EACCES;
+-
+       if (rt2x00_rt(rt2x00dev, RT5592)) {
+               rt2800_init_bbp_5592(rt2x00dev);
+               return 0;
+@@ -5192,20 +5188,23 @@ int rt2800_enable_radio(struct rt2x00_de
+                    rt2800_init_registers(rt2x00dev)))
+               return -EIO;
++      if (unlikely(rt2800_wait_bbp_rf_ready(rt2x00dev)))
++              return -EIO;
++
+       /*
+        * Send signal to firmware during boot time.
+        */
+       rt2800_register_write(rt2x00dev, H2M_BBP_AGENT, 0);
+       rt2800_register_write(rt2x00dev, H2M_MAILBOX_CSR, 0);
+-      if (rt2x00_is_usb(rt2x00dev)) {
++      if (rt2x00_is_usb(rt2x00dev))
+               rt2800_register_write(rt2x00dev, H2M_INT_SRC, 0);
+-              rt2800_mcu_request(rt2x00dev, MCU_BOOT_SIGNAL, 0, 0, 0);
+-      }
++      rt2800_mcu_request(rt2x00dev, MCU_BOOT_SIGNAL, 0, 0, 0);
+       msleep(1);
+-      if (unlikely(rt2800_init_bbp(rt2x00dev)))
++      if (unlikely(rt2800_wait_bbp_ready(rt2x00dev)))
+               return -EIO;
++      rt2800_init_bbp(rt2x00dev);
+       rt2800_init_rfcsr(rt2x00dev);
+       if (rt2x00_is_usb(rt2x00dev) &&
index f1629784f257b1ed830c06c6920f78d42154c29e..f0f9242f3690e9471a3bb1dbd040daf449229de9 100644 (file)
@@ -29,3 +29,7 @@ drm-radeon-update-line-buffer-allocation-for-dce4.1-5.patch
 drm-radeon-update-line-buffer-allocation-for-dce6.patch
 drm-radeon-fix-resume-on-some-rs4xx-boards-v2.patch
 drm-radeon-fix-handling-of-variable-sized-arrays-for-router-objects.patch
+rt2800-change-initialization-sequence-to-fix-system-freeze.patch
+drm-radeon-atom-workaround-vbios-bug-in-transmitter-table-on-rs880-v2.patch
+drm-radeon-fix-panel-scaling-with-edp-and-lvds-bridges.patch
+drm-radeon-avoid-uvd-corruptions-on-agp-cards.patch