aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/drm/radeon/atombios_crtc.c26
-rw-r--r--drivers/gpu/drm/radeon/radeon_legacy_crtc.c63
-rw-r--r--drivers/gpu/drm/radeon/radeon_mode.h1
3 files changed, 25 insertions, 65 deletions
diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c
index a60610271af6..e098bd0cbd26 100644
--- a/drivers/gpu/drm/radeon/atombios_crtc.c
+++ b/drivers/gpu/drm/radeon/atombios_crtc.c
@@ -718,6 +718,30 @@ int atombios_crtc_set_base(struct drm_crtc *crtc, int x, int y,
718 return radeon_crtc_set_base(crtc, x, y, old_fb); 718 return radeon_crtc_set_base(crtc, x, y, old_fb);
719} 719}
720 720
721/* properly set additional regs when using atombios */
722static void radeon_legacy_atom_fixup(struct drm_crtc *crtc)
723{
724 struct drm_device *dev = crtc->dev;
725 struct radeon_device *rdev = dev->dev_private;
726 struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc);
727 u32 disp_merge_cntl;
728
729 switch (radeon_crtc->crtc_id) {
730 case 0:
731 disp_merge_cntl = RREG32(RADEON_DISP_MERGE_CNTL);
732 disp_merge_cntl &= ~RADEON_DISP_RGB_OFFSET_EN;
733 WREG32(RADEON_DISP_MERGE_CNTL, disp_merge_cntl);
734 break;
735 case 1:
736 disp_merge_cntl = RREG32(RADEON_DISP2_MERGE_CNTL);
737 disp_merge_cntl &= ~RADEON_DISP2_RGB_OFFSET_EN;
738 WREG32(RADEON_DISP2_MERGE_CNTL, disp_merge_cntl);
739 WREG32(RADEON_FP_H2_SYNC_STRT_WID, RREG32(RADEON_CRTC2_H_SYNC_STRT_WID));
740 WREG32(RADEON_FP_V2_SYNC_STRT_WID, RREG32(RADEON_CRTC2_V_SYNC_STRT_WID));
741 break;
742 }
743}
744
721int atombios_crtc_mode_set(struct drm_crtc *crtc, 745int atombios_crtc_mode_set(struct drm_crtc *crtc,
722 struct drm_display_mode *mode, 746 struct drm_display_mode *mode,
723 struct drm_display_mode *adjusted_mode, 747 struct drm_display_mode *adjusted_mode,
@@ -740,7 +764,7 @@ int atombios_crtc_mode_set(struct drm_crtc *crtc,
740 if (radeon_crtc->crtc_id == 0) 764 if (radeon_crtc->crtc_id == 0)
741 atombios_set_crtc_dtd_timing(crtc, adjusted_mode); 765 atombios_set_crtc_dtd_timing(crtc, adjusted_mode);
742 atombios_crtc_set_base(crtc, x, y, old_fb); 766 atombios_crtc_set_base(crtc, x, y, old_fb);
743 radeon_legacy_atom_set_surface(crtc); 767 radeon_legacy_atom_fixup(crtc);
744 } 768 }
745 atombios_overscan_setup(crtc, mode, adjusted_mode); 769 atombios_overscan_setup(crtc, mode, adjusted_mode);
746 atombios_scaler_setup(crtc); 770 atombios_scaler_setup(crtc);
diff --git a/drivers/gpu/drm/radeon/radeon_legacy_crtc.c b/drivers/gpu/drm/radeon/radeon_legacy_crtc.c
index cc27485a07ad..762e07b08951 100644
--- a/drivers/gpu/drm/radeon/radeon_legacy_crtc.c
+++ b/drivers/gpu/drm/radeon/radeon_legacy_crtc.c
@@ -339,69 +339,6 @@ void radeon_crtc_dpms(struct drm_crtc *crtc, int mode)
339 } 339 }
340} 340}
341 341
342/* properly set crtc bpp when using atombios */
343void radeon_legacy_atom_set_surface(struct drm_crtc *crtc)
344{
345 struct drm_device *dev = crtc->dev;
346 struct radeon_device *rdev = dev->dev_private;
347 struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc);
348 int format;
349 uint32_t crtc_gen_cntl;
350 uint32_t disp_merge_cntl;
351 uint32_t crtc_pitch;
352
353 switch (crtc->fb->bits_per_pixel) {
354 case 8:
355 format = 2;
356 break;
357 case 15: /* 555 */
358 format = 3;
359 break;
360 case 16: /* 565 */
361 format = 4;
362 break;
363 case 24: /* RGB */
364 format = 5;
365 break;
366 case 32: /* xRGB */
367 format = 6;
368 break;
369 default:
370 return;
371 }
372
373 crtc_pitch = ((((crtc->fb->pitch / (crtc->fb->bits_per_pixel / 8)) * crtc->fb->bits_per_pixel) +
374 ((crtc->fb->bits_per_pixel * 8) - 1)) /
375 (crtc->fb->bits_per_pixel * 8));
376 crtc_pitch |= crtc_pitch << 16;
377
378 WREG32(RADEON_CRTC_PITCH + radeon_crtc->crtc_offset, crtc_pitch);
379
380 switch (radeon_crtc->crtc_id) {
381 case 0:
382 disp_merge_cntl = RREG32(RADEON_DISP_MERGE_CNTL);
383 disp_merge_cntl &= ~RADEON_DISP_RGB_OFFSET_EN;
384 WREG32(RADEON_DISP_MERGE_CNTL, disp_merge_cntl);
385
386 crtc_gen_cntl = RREG32(RADEON_CRTC_GEN_CNTL) & 0xfffff0ff;
387 crtc_gen_cntl |= (format << 8);
388 crtc_gen_cntl |= RADEON_CRTC_EXT_DISP_EN;
389 WREG32(RADEON_CRTC_GEN_CNTL, crtc_gen_cntl);
390 break;
391 case 1:
392 disp_merge_cntl = RREG32(RADEON_DISP2_MERGE_CNTL);
393 disp_merge_cntl &= ~RADEON_DISP2_RGB_OFFSET_EN;
394 WREG32(RADEON_DISP2_MERGE_CNTL, disp_merge_cntl);
395
396 crtc_gen_cntl = RREG32(RADEON_CRTC2_GEN_CNTL) & 0xfffff0ff;
397 crtc_gen_cntl |= (format << 8);
398 WREG32(RADEON_CRTC2_GEN_CNTL, crtc_gen_cntl);
399 WREG32(RADEON_FP_H2_SYNC_STRT_WID, RREG32(RADEON_CRTC2_H_SYNC_STRT_WID));
400 WREG32(RADEON_FP_V2_SYNC_STRT_WID, RREG32(RADEON_CRTC2_V_SYNC_STRT_WID));
401 break;
402 }
403}
404
405int radeon_crtc_set_base(struct drm_crtc *crtc, int x, int y, 342int radeon_crtc_set_base(struct drm_crtc *crtc, int x, int y,
406 struct drm_framebuffer *old_fb) 343 struct drm_framebuffer *old_fb)
407{ 344{
diff --git a/drivers/gpu/drm/radeon/radeon_mode.h b/drivers/gpu/drm/radeon/radeon_mode.h
index 91cb041cb40d..eb19b3022b0e 100644
--- a/drivers/gpu/drm/radeon/radeon_mode.h
+++ b/drivers/gpu/drm/radeon/radeon_mode.h
@@ -453,7 +453,6 @@ extern void atombios_crtc_dpms(struct drm_crtc *crtc, int mode);
453 453
454extern int radeon_crtc_set_base(struct drm_crtc *crtc, int x, int y, 454extern int radeon_crtc_set_base(struct drm_crtc *crtc, int x, int y,
455 struct drm_framebuffer *old_fb); 455 struct drm_framebuffer *old_fb);
456extern void radeon_legacy_atom_set_surface(struct drm_crtc *crtc);
457 456
458extern int radeon_crtc_cursor_set(struct drm_crtc *crtc, 457extern int radeon_crtc_cursor_set(struct drm_crtc *crtc,
459 struct drm_file *file_priv, 458 struct drm_file *file_priv,