diff options
| -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) |
