]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.14-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 27 Jan 2015 18:15:32 +0000 (10:15 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 27 Jan 2015 18:15:32 +0000 (10:15 -0800)
added patches:
drm-radeon-add-a-dpm-quirk-list.patch
drm-radeon-add-si-dpm-quirk-list.patch
drm-radeon-use-rv515_ring_start-on-r5xx.patch

queue-3.14/drm-radeon-add-a-dpm-quirk-list.patch [new file with mode: 0644]
queue-3.14/drm-radeon-add-si-dpm-quirk-list.patch [new file with mode: 0644]
queue-3.14/drm-radeon-use-rv515_ring_start-on-r5xx.patch [new file with mode: 0644]
queue-3.14/series

diff --git a/queue-3.14/drm-radeon-add-a-dpm-quirk-list.patch b/queue-3.14/drm-radeon-add-a-dpm-quirk-list.patch
new file mode 100644 (file)
index 0000000..19934ba
--- /dev/null
@@ -0,0 +1,74 @@
+From 4369a69ec6ab86821352bd753c68af5880f87956 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Thu, 8 Jan 2015 10:46:33 -0500
+Subject: drm/radeon: add a dpm quirk list
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit 4369a69ec6ab86821352bd753c68af5880f87956 upstream.
+
+Disable dpm on certain problematic boards rather than
+disabling dpm for the entire chip family since most
+boards work fine.
+
+https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1386534
+https://bugzilla.kernel.org/show_bug.cgi?id=83731
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/radeon_pm.c |   33 +++++++++++++++++++++++++++++++++
+ 1 file changed, 33 insertions(+)
+
+--- a/drivers/gpu/drm/radeon/radeon_pm.c
++++ b/drivers/gpu/drm/radeon/radeon_pm.c
+@@ -1260,8 +1260,39 @@ dpm_failed:
+       return ret;
+ }
++struct radeon_dpm_quirk {
++      u32 chip_vendor;
++      u32 chip_device;
++      u32 subsys_vendor;
++      u32 subsys_device;
++};
++
++/* cards with dpm stability problems */
++static struct radeon_dpm_quirk radeon_dpm_quirk_list[] = {
++      /* TURKS - https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1386534 */
++      { PCI_VENDOR_ID_ATI, 0x6759, 0x1682, 0x3195 },
++      /* TURKS - https://bugzilla.kernel.org/show_bug.cgi?id=83731 */
++      { PCI_VENDOR_ID_ATI, 0x6840, 0x1179, 0xfb81 },
++      { 0, 0, 0, 0 },
++};
++
+ int radeon_pm_init(struct radeon_device *rdev)
+ {
++      struct radeon_dpm_quirk *p = radeon_dpm_quirk_list;
++      bool disable_dpm = false;
++
++      /* Apply dpm quirks */
++      while (p && p->chip_device != 0) {
++              if (rdev->pdev->vendor == p->chip_vendor &&
++                  rdev->pdev->device == p->chip_device &&
++                  rdev->pdev->subsystem_vendor == p->subsys_vendor &&
++                  rdev->pdev->subsystem_device == p->subsys_device) {
++                      disable_dpm = true;
++                      break;
++              }
++              ++p;
++      }
++
+       /* enable dpm on rv6xx+ */
+       switch (rdev->family) {
+       case CHIP_RV610:
+@@ -1316,6 +1347,8 @@ int radeon_pm_init(struct radeon_device
+                        (!(rdev->flags & RADEON_IS_IGP)) &&
+                        (!rdev->smc_fw))
+                       rdev->pm.pm_method = PM_METHOD_PROFILE;
++              else if (disable_dpm && (radeon_dpm == -1))
++                      rdev->pm.pm_method = PM_METHOD_PROFILE;
+               else if (radeon_dpm == 0)
+                       rdev->pm.pm_method = PM_METHOD_PROFILE;
+               else
diff --git a/queue-3.14/drm-radeon-add-si-dpm-quirk-list.patch b/queue-3.14/drm-radeon-add-si-dpm-quirk-list.patch
new file mode 100644 (file)
index 0000000..df2f6c7
--- /dev/null
@@ -0,0 +1,85 @@
+From 5615f890bc6babdc2998dec62f3552326d06eb7b Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Mon, 12 Jan 2015 17:15:12 -0500
+Subject: drm/radeon: add si dpm quirk list
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit 5615f890bc6babdc2998dec62f3552326d06eb7b upstream.
+
+This adds a quirks list to fix stability problems with
+certain SI boards.
+
+bug:
+https://bugs.freedesktop.org/show_bug.cgi?id=76490
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/si_dpm.c |   39 +++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 39 insertions(+)
+
+--- a/drivers/gpu/drm/radeon/si_dpm.c
++++ b/drivers/gpu/drm/radeon/si_dpm.c
+@@ -2900,6 +2900,22 @@ static int si_init_smc_spll_table(struct
+       return ret;
+ }
++struct si_dpm_quirk {
++      u32 chip_vendor;
++      u32 chip_device;
++      u32 subsys_vendor;
++      u32 subsys_device;
++      u32 max_sclk;
++      u32 max_mclk;
++};
++
++/* cards with dpm stability problems */
++static struct si_dpm_quirk si_dpm_quirk_list[] = {
++      /* PITCAIRN - https://bugs.freedesktop.org/show_bug.cgi?id=76490 */
++      { PCI_VENDOR_ID_ATI, 0x6810, 0x1462, 0x3036, 0, 120000 },
++      { 0, 0, 0, 0 },
++};
++
+ static void si_apply_state_adjust_rules(struct radeon_device *rdev,
+                                       struct radeon_ps *rps)
+ {
+@@ -2910,7 +2926,22 @@ static void si_apply_state_adjust_rules(
+       u32 mclk, sclk;
+       u16 vddc, vddci;
+       u32 max_sclk_vddc, max_mclk_vddci, max_mclk_vddc;
++      u32 max_sclk = 0, max_mclk = 0;
+       int i;
++      struct si_dpm_quirk *p = si_dpm_quirk_list;
++
++      /* Apply dpm quirks */
++      while (p && p->chip_device != 0) {
++              if (rdev->pdev->vendor == p->chip_vendor &&
++                  rdev->pdev->device == p->chip_device &&
++                  rdev->pdev->subsystem_vendor == p->subsys_vendor &&
++                  rdev->pdev->subsystem_device == p->subsys_device) {
++                      max_sclk = p->max_sclk;
++                      max_mclk = p->max_mclk;
++                      break;
++              }
++              ++p;
++      }
+       if ((rdev->pm.dpm.new_active_crtc_count > 1) ||
+           ni_dpm_vblank_too_short(rdev))
+@@ -2964,6 +2995,14 @@ static void si_apply_state_adjust_rules(
+                       if (ps->performance_levels[i].mclk > max_mclk_vddc)
+                               ps->performance_levels[i].mclk = max_mclk_vddc;
+               }
++              if (max_mclk) {
++                      if (ps->performance_levels[i].mclk > max_mclk)
++                              ps->performance_levels[i].mclk = max_mclk;
++              }
++              if (max_sclk) {
++                      if (ps->performance_levels[i].sclk > max_sclk)
++                              ps->performance_levels[i].sclk = max_sclk;
++              }
+       }
+       /* XXX validate the min clocks required for display */
diff --git a/queue-3.14/drm-radeon-use-rv515_ring_start-on-r5xx.patch b/queue-3.14/drm-radeon-use-rv515_ring_start-on-r5xx.patch
new file mode 100644 (file)
index 0000000..d383afa
--- /dev/null
@@ -0,0 +1,59 @@
+From d8a74e186949e1a2c2f1309212478b0659bf9225 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Thu, 15 Jan 2015 10:52:33 -0500
+Subject: drm/radeon: use rv515_ring_start on r5xx
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit d8a74e186949e1a2c2f1309212478b0659bf9225 upstream.
+
+This was accidently lost in 76a0df859def.
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/radeon_asic.c |   18 ++++++++++++++++--
+ 1 file changed, 16 insertions(+), 2 deletions(-)
+
+--- a/drivers/gpu/drm/radeon/radeon_asic.c
++++ b/drivers/gpu/drm/radeon/radeon_asic.c
+@@ -335,6 +335,20 @@ static struct radeon_asic_ring r300_gfx_
+       .set_wptr = &r100_gfx_set_wptr,
+ };
++static struct radeon_asic_ring rv515_gfx_ring = {
++      .ib_execute = &r100_ring_ib_execute,
++      .emit_fence = &r300_fence_ring_emit,
++      .emit_semaphore = &r100_semaphore_ring_emit,
++      .cs_parse = &r300_cs_parse,
++      .ring_start = &rv515_ring_start,
++      .ring_test = &r100_ring_test,
++      .ib_test = &r100_ib_test,
++      .is_lockup = &r100_gpu_is_lockup,
++      .get_rptr = &r100_gfx_get_rptr,
++      .get_wptr = &r100_gfx_get_wptr,
++      .set_wptr = &r100_gfx_set_wptr,
++};
++
+ static struct radeon_asic r300_asic = {
+       .init = &r300_init,
+       .fini = &r300_fini,
+@@ -756,7 +770,7 @@ static struct radeon_asic rv515_asic = {
+               .set_page = &rv370_pcie_gart_set_page,
+       },
+       .ring = {
+-              [RADEON_RING_TYPE_GFX_INDEX] = &r300_gfx_ring
++              [RADEON_RING_TYPE_GFX_INDEX] = &rv515_gfx_ring
+       },
+       .irq = {
+               .set = &rs600_irq_set,
+@@ -823,7 +837,7 @@ static struct radeon_asic r520_asic = {
+               .set_page = &rv370_pcie_gart_set_page,
+       },
+       .ring = {
+-              [RADEON_RING_TYPE_GFX_INDEX] = &r300_gfx_ring
++              [RADEON_RING_TYPE_GFX_INDEX] = &rv515_gfx_ring
+       },
+       .irq = {
+               .set = &rs600_irq_set,
index 483b06a7e0bb4a0945c5732749e1a6aef7cce107..cb93611c61a4107116eb9cbb657d1c8bae91e2f7 100644 (file)
@@ -5,3 +5,6 @@ libata-prevent-hsm-state-change-race-between-isr-and-pio.patch
 alsa-usb-audio-add-mic-volume-fix-quirk-for-logitech-webcam-c210.patch
 scripts-recordmcount.pl-there-is-no-m32-gcc-option-on-super-h-anymore.patch
 drm-i915-fix-mutex-owner-inspection-race-under-debug_mutexes.patch
+drm-radeon-add-a-dpm-quirk-list.patch
+drm-radeon-add-si-dpm-quirk-list.patch
+drm-radeon-use-rv515_ring_start-on-r5xx.patch