aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/atombios_crtc.c
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2013-02-05 11:47:09 -0500
committerAlex Deucher <alexander.deucher@amd.com>2013-02-05 18:01:45 -0500
commit0e3d50bfcbd338254795a700dcff429a96cba1a6 (patch)
treeef944186701bff7bc2f8eb03fe6b7f636edc7478 /drivers/gpu/drm/radeon/atombios_crtc.c
parent7271c7f999609787c4617c51750d39e447859e7d (diff)
drm/radeon/dce6: fix display powergating
Only enable it when we disable the display rather than at DPMS time since enabling it requires a full modeset to restore the display state. Fixes blank screens in certain cases. Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Cc: stable@vger.kernel.org
Diffstat (limited to 'drivers/gpu/drm/radeon/atombios_crtc.c')
-rw-r--r--drivers/gpu/drm/radeon/atombios_crtc.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c
index 9175615bbd8a..21a892c6ab9c 100644
--- a/drivers/gpu/drm/radeon/atombios_crtc.c
+++ b/drivers/gpu/drm/radeon/atombios_crtc.c
@@ -252,8 +252,6 @@ void atombios_crtc_dpms(struct drm_crtc *crtc, int mode)
252 radeon_crtc->enabled = true; 252 radeon_crtc->enabled = true;
253 /* adjust pm to dpms changes BEFORE enabling crtcs */ 253 /* adjust pm to dpms changes BEFORE enabling crtcs */
254 radeon_pm_compute_clocks(rdev); 254 radeon_pm_compute_clocks(rdev);
255 if (ASIC_IS_DCE6(rdev) && !radeon_crtc->in_mode_set)
256 atombios_powergate_crtc(crtc, ATOM_DISABLE);
257 atombios_enable_crtc(crtc, ATOM_ENABLE); 255 atombios_enable_crtc(crtc, ATOM_ENABLE);
258 if (ASIC_IS_DCE3(rdev) && !ASIC_IS_DCE6(rdev)) 256 if (ASIC_IS_DCE3(rdev) && !ASIC_IS_DCE6(rdev))
259 atombios_enable_crtc_memreq(crtc, ATOM_ENABLE); 257 atombios_enable_crtc_memreq(crtc, ATOM_ENABLE);
@@ -271,8 +269,6 @@ void atombios_crtc_dpms(struct drm_crtc *crtc, int mode)
271 atombios_enable_crtc_memreq(crtc, ATOM_DISABLE); 269 atombios_enable_crtc_memreq(crtc, ATOM_DISABLE);
272 atombios_enable_crtc(crtc, ATOM_DISABLE); 270 atombios_enable_crtc(crtc, ATOM_DISABLE);
273 radeon_crtc->enabled = false; 271 radeon_crtc->enabled = false;
274 if (ASIC_IS_DCE6(rdev) && !radeon_crtc->in_mode_set)
275 atombios_powergate_crtc(crtc, ATOM_ENABLE);
276 /* adjust pm to dpms changes AFTER disabling crtcs */ 272 /* adjust pm to dpms changes AFTER disabling crtcs */
277 radeon_pm_compute_clocks(rdev); 273 radeon_pm_compute_clocks(rdev);
278 break; 274 break;
@@ -1844,6 +1840,8 @@ static void atombios_crtc_disable(struct drm_crtc *crtc)
1844 int i; 1840 int i;
1845 1841
1846 atombios_crtc_dpms(crtc, DRM_MODE_DPMS_OFF); 1842 atombios_crtc_dpms(crtc, DRM_MODE_DPMS_OFF);
1843 if (ASIC_IS_DCE6(rdev))
1844 atombios_powergate_crtc(crtc, ATOM_ENABLE);
1847 1845
1848 for (i = 0; i < rdev->num_crtc; i++) { 1846 for (i = 0; i < rdev->num_crtc; i++) {
1849 if (rdev->mode_info.crtcs[i] && 1847 if (rdev->mode_info.crtcs[i] &&