From: Greg Kroah-Hartman Date: Fri, 27 Sep 2013 22:52:35 +0000 (-0700) Subject: 3.10-stable patches X-Git-Tag: v3.0.98~18 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b0e24ca505caa7a0bcc0f6ea50a67fe0a2c2a17f;p=thirdparty%2Fkernel%2Fstable-queue.git 3.10-stable patches 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 --- 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 index 00000000000..be3c62fe92f --- /dev/null +++ b/queue-3.10/drm-radeon-atom-workaround-vbios-bug-in-transmitter-table-on-rs880-v2.patch @@ -0,0 +1,51 @@ +From 91f3a6aaf280294b07c05dfe606e6c27b7ba3c72 Mon Sep 17 00:00:00 2001 +From: Alex Deucher +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 + +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 +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..d2db599db56 --- /dev/null +++ b/queue-3.10/drm-radeon-avoid-uvd-corruptions-on-agp-cards.patch @@ -0,0 +1,36 @@ +From 4f66c59922cbcda14c9e103e6c7f4ee616360d43 Mon Sep 17 00:00:00 2001 +From: Christian König +Date: Sun, 15 Sep 2013 13:31:28 +0200 +Subject: drm/radeon: avoid UVD corruptions on AGP cards + +From: Christian König + +commit 4f66c59922cbcda14c9e103e6c7f4ee616360d43 upstream. + +Putting everything into VRAM seems to help. + +Signed-off-by: Christian König +Signed-off-by: Alex Deucher +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..23b58222b7a --- /dev/null +++ b/queue-3.10/drm-radeon-fix-panel-scaling-with-edp-and-lvds-bridges.patch @@ -0,0 +1,98 @@ +From 855f5f1d882a34e4e9dd27b299737cd3508a5624 Mon Sep 17 00:00:00 2001 +From: Alex Deucher +Date: Fri, 13 Sep 2013 18:33:16 -0400 +Subject: drm/radeon: fix panel scaling with eDP and LVDS bridges + +From: Alex Deucher + +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 +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..644466ba566 --- /dev/null +++ b/queue-3.10/rt2800-change-initialization-sequence-to-fix-system-freeze.patch @@ -0,0 +1,86 @@ +From f4e1a4d3ecbb9e42bdf8e7869ee8a4ebfa27fb20 Mon Sep 17 00:00:00 2001 +From: Stanislaw Gruszka +Date: Mon, 9 Sep 2013 12:37:37 +0200 +Subject: rt2800: change initialization sequence to fix system freeze + +From: Stanislaw Gruszka + +commit f4e1a4d3ecbb9e42bdf8e7869ee8a4ebfa27fb20 upstream. + +My commit + +commit c630ccf1a127578421a928489d51e99c05037054 +Author: Stanislaw Gruszka +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 +Bisected-by: Igor Gnatenko +Cc: stable@vger.kernel.org # 3.10+ +Signed-off-by: Stanislaw Gruszka +Signed-off-by: John W. Linville +Signed-off-by: Greg Kroah-Hartman + + +--- + 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) && diff --git a/queue-3.10/series b/queue-3.10/series index f1629784f25..f0f9242f369 100644 --- a/queue-3.10/series +++ b/queue-3.10/series @@ -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