diff options
author | Alex Deucher <alexander.deucher@amd.com> | 2013-02-05 11:47:09 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2013-02-05 18:01:45 -0500 |
commit | 0e3d50bfcbd338254795a700dcff429a96cba1a6 (patch) | |
tree | ef944186701bff7bc2f8eb03fe6b7f636edc7478 /drivers/gpu/drm/radeon/atombios_crtc.c | |
parent | 7271c7f999609787c4617c51750d39e447859e7d (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.c | 6 |
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] && |