--- /dev/null
+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
--- /dev/null
+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 */
--- /dev/null
+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,
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