diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpu/drm/radeon/atombios_crtc.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c index 4cf678306c9c..a9338c85630f 100644 --- a/drivers/gpu/drm/radeon/atombios_crtc.c +++ b/drivers/gpu/drm/radeon/atombios_crtc.c | |||
@@ -209,6 +209,16 @@ static void atombios_enable_crtc_memreq(struct drm_crtc *crtc, int state) | |||
209 | atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); | 209 | atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); |
210 | } | 210 | } |
211 | 211 | ||
212 | static const u32 vga_control_regs[6] = | ||
213 | { | ||
214 | AVIVO_D1VGA_CONTROL, | ||
215 | AVIVO_D2VGA_CONTROL, | ||
216 | EVERGREEN_D3VGA_CONTROL, | ||
217 | EVERGREEN_D4VGA_CONTROL, | ||
218 | EVERGREEN_D5VGA_CONTROL, | ||
219 | EVERGREEN_D6VGA_CONTROL, | ||
220 | }; | ||
221 | |||
212 | static void atombios_blank_crtc(struct drm_crtc *crtc, int state) | 222 | static void atombios_blank_crtc(struct drm_crtc *crtc, int state) |
213 | { | 223 | { |
214 | struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc); | 224 | struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc); |
@@ -216,13 +226,23 @@ static void atombios_blank_crtc(struct drm_crtc *crtc, int state) | |||
216 | struct radeon_device *rdev = dev->dev_private; | 226 | struct radeon_device *rdev = dev->dev_private; |
217 | int index = GetIndexIntoMasterTable(COMMAND, BlankCRTC); | 227 | int index = GetIndexIntoMasterTable(COMMAND, BlankCRTC); |
218 | BLANK_CRTC_PS_ALLOCATION args; | 228 | BLANK_CRTC_PS_ALLOCATION args; |
229 | u32 vga_control = 0; | ||
219 | 230 | ||
220 | memset(&args, 0, sizeof(args)); | 231 | memset(&args, 0, sizeof(args)); |
221 | 232 | ||
233 | if (ASIC_IS_DCE8(rdev)) { | ||
234 | vga_control = RREG32(vga_control_regs[radeon_crtc->crtc_id]); | ||
235 | WREG32(vga_control_regs[radeon_crtc->crtc_id], vga_control | 1); | ||
236 | } | ||
237 | |||
222 | args.ucCRTC = radeon_crtc->crtc_id; | 238 | args.ucCRTC = radeon_crtc->crtc_id; |
223 | args.ucBlanking = state; | 239 | args.ucBlanking = state; |
224 | 240 | ||
225 | atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); | 241 | atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); |
242 | |||
243 | if (ASIC_IS_DCE8(rdev)) { | ||
244 | WREG32(vga_control_regs[radeon_crtc->crtc_id], vga_control); | ||
245 | } | ||
226 | } | 246 | } |
227 | 247 | ||
228 | static void atombios_powergate_crtc(struct drm_crtc *crtc, int state) | 248 | static void atombios_powergate_crtc(struct drm_crtc *crtc, int state) |