From: Greg Kroah-Hartman Date: Tue, 27 Jan 2015 18:15:32 +0000 (-0800) Subject: 3.14-stable patches X-Git-Tag: v3.10.67~44 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=163c0c3d7d354225100bbb704b54cdcf9c5c864e;p=thirdparty%2Fkernel%2Fstable-queue.git 3.14-stable patches 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 --- 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 index 00000000000..19934bae6c2 --- /dev/null +++ b/queue-3.14/drm-radeon-add-a-dpm-quirk-list.patch @@ -0,0 +1,74 @@ +From 4369a69ec6ab86821352bd753c68af5880f87956 Mon Sep 17 00:00:00 2001 +From: Alex Deucher +Date: Thu, 8 Jan 2015 10:46:33 -0500 +Subject: drm/radeon: add a dpm quirk list + +From: Alex Deucher + +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 +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..df2f6c7cb9f --- /dev/null +++ b/queue-3.14/drm-radeon-add-si-dpm-quirk-list.patch @@ -0,0 +1,85 @@ +From 5615f890bc6babdc2998dec62f3552326d06eb7b Mon Sep 17 00:00:00 2001 +From: Alex Deucher +Date: Mon, 12 Jan 2015 17:15:12 -0500 +Subject: drm/radeon: add si dpm quirk list + +From: Alex Deucher + +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 +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..d383afa6c34 --- /dev/null +++ b/queue-3.14/drm-radeon-use-rv515_ring_start-on-r5xx.patch @@ -0,0 +1,59 @@ +From d8a74e186949e1a2c2f1309212478b0659bf9225 Mon Sep 17 00:00:00 2001 +From: Alex Deucher +Date: Thu, 15 Jan 2015 10:52:33 -0500 +Subject: drm/radeon: use rv515_ring_start on r5xx + +From: Alex Deucher + +commit d8a74e186949e1a2c2f1309212478b0659bf9225 upstream. + +This was accidently lost in 76a0df859def. + +Signed-off-by: Alex Deucher +Signed-off-by: Greg Kroah-Hartman + +--- + 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, diff --git a/queue-3.14/series b/queue-3.14/series index 483b06a7e0b..cb93611c61a 100644 --- a/queue-3.14/series +++ b/queue-3.14/series @@ -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