aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/dce_v11_0.c65
1 files changed, 5 insertions, 60 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
index e9ccc6b787f3..89aab0ad3f09 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
@@ -565,35 +565,14 @@ static void dce_v11_0_stop_mc_access(struct amdgpu_device *adev,
565 crtc_enabled = REG_GET_FIELD(RREG32(mmCRTC_CONTROL + crtc_offsets[i]), 565 crtc_enabled = REG_GET_FIELD(RREG32(mmCRTC_CONTROL + crtc_offsets[i]),
566 CRTC_CONTROL, CRTC_MASTER_EN); 566 CRTC_CONTROL, CRTC_MASTER_EN);
567 if (crtc_enabled) { 567 if (crtc_enabled) {
568#if 0 568#if 1
569 u32 frame_count;
570 int j;
571
572 save->crtc_enabled[i] = true; 569 save->crtc_enabled[i] = true;
573 tmp = RREG32(mmCRTC_BLANK_CONTROL + crtc_offsets[i]); 570 tmp = RREG32(mmCRTC_BLANK_CONTROL + crtc_offsets[i]);
574 if (REG_GET_FIELD(tmp, CRTC_BLANK_CONTROL, CRTC_BLANK_DATA_EN) == 0) { 571 if (REG_GET_FIELD(tmp, CRTC_BLANK_CONTROL, CRTC_BLANK_DATA_EN) == 0) {
575 amdgpu_display_vblank_wait(adev, i); 572 /*it is correct only for RGB ; black is 0*/
576 WREG32(mmCRTC_UPDATE_LOCK + crtc_offsets[i], 1); 573 WREG32(mmCRTC_BLANK_DATA_COLOR + crtc_offsets[i], 0);
577 tmp = REG_SET_FIELD(tmp, CRTC_BLANK_CONTROL, CRTC_BLANK_DATA_EN, 1); 574 tmp = REG_SET_FIELD(tmp, CRTC_BLANK_CONTROL, CRTC_BLANK_DATA_EN, 1);
578 WREG32(mmCRTC_BLANK_CONTROL + crtc_offsets[i], tmp); 575 WREG32(mmCRTC_BLANK_CONTROL + crtc_offsets[i], tmp);
579 WREG32(mmCRTC_UPDATE_LOCK + crtc_offsets[i], 0);
580 }
581 /* wait for the next frame */
582 frame_count = amdgpu_display_vblank_get_counter(adev, i);
583 for (j = 0; j < adev->usec_timeout; j++) {
584 if (amdgpu_display_vblank_get_counter(adev, i) != frame_count)
585 break;
586 udelay(1);
587 }
588 tmp = RREG32(mmGRPH_UPDATE + crtc_offsets[i]);
589 if (REG_GET_FIELD(tmp, GRPH_UPDATE, GRPH_UPDATE_LOCK) == 0) {
590 tmp = REG_SET_FIELD(tmp, GRPH_UPDATE, GRPH_UPDATE_LOCK, 1);
591 WREG32(mmGRPH_UPDATE + crtc_offsets[i], tmp);
592 }
593 tmp = RREG32(mmCRTC_MASTER_UPDATE_LOCK + crtc_offsets[i]);
594 if (REG_GET_FIELD(tmp, CRTC_MASTER_UPDATE_LOCK, MASTER_UPDATE_LOCK) == 0) {
595 tmp = REG_SET_FIELD(tmp, CRTC_MASTER_UPDATE_LOCK, MASTER_UPDATE_LOCK, 1);
596 WREG32(mmCRTC_MASTER_UPDATE_LOCK + crtc_offsets[i], tmp);
597 } 576 }
598#else 577#else
599 /* XXX this is a hack to avoid strange behavior with EFI on certain systems */ 578 /* XXX this is a hack to avoid strange behavior with EFI on certain systems */
@@ -614,54 +593,20 @@ static void dce_v11_0_stop_mc_access(struct amdgpu_device *adev,
614static void dce_v11_0_resume_mc_access(struct amdgpu_device *adev, 593static void dce_v11_0_resume_mc_access(struct amdgpu_device *adev,
615 struct amdgpu_mode_mc_save *save) 594 struct amdgpu_mode_mc_save *save)
616{ 595{
617 u32 tmp, frame_count; 596 u32 tmp;
618 int i, j; 597 int i;
619 598
620 /* update crtc base addresses */ 599 /* update crtc base addresses */
621 for (i = 0; i < adev->mode_info.num_crtc; i++) { 600 for (i = 0; i < adev->mode_info.num_crtc; i++) {
622 WREG32(mmGRPH_PRIMARY_SURFACE_ADDRESS_HIGH + crtc_offsets[i], 601 WREG32(mmGRPH_PRIMARY_SURFACE_ADDRESS_HIGH + crtc_offsets[i],
623 upper_32_bits(adev->mc.vram_start)); 602 upper_32_bits(adev->mc.vram_start));
624 WREG32(mmGRPH_SECONDARY_SURFACE_ADDRESS_HIGH + crtc_offsets[i],
625 upper_32_bits(adev->mc.vram_start));
626 WREG32(mmGRPH_PRIMARY_SURFACE_ADDRESS + crtc_offsets[i], 603 WREG32(mmGRPH_PRIMARY_SURFACE_ADDRESS + crtc_offsets[i],
627 (u32)adev->mc.vram_start); 604 (u32)adev->mc.vram_start);
628 WREG32(mmGRPH_SECONDARY_SURFACE_ADDRESS + crtc_offsets[i],
629 (u32)adev->mc.vram_start);
630 605
631 if (save->crtc_enabled[i]) { 606 if (save->crtc_enabled[i]) {
632 tmp = RREG32(mmCRTC_MASTER_UPDATE_MODE + crtc_offsets[i]);
633 if (REG_GET_FIELD(tmp, CRTC_MASTER_UPDATE_MODE, MASTER_UPDATE_MODE) != 3) {
634 tmp = REG_SET_FIELD(tmp, CRTC_MASTER_UPDATE_MODE, MASTER_UPDATE_MODE, 3);
635 WREG32(mmCRTC_MASTER_UPDATE_MODE + crtc_offsets[i], tmp);
636 }
637 tmp = RREG32(mmGRPH_UPDATE + crtc_offsets[i]);
638 if (REG_GET_FIELD(tmp, GRPH_UPDATE, GRPH_UPDATE_LOCK)) {
639 tmp = REG_SET_FIELD(tmp, GRPH_UPDATE, GRPH_UPDATE_LOCK, 0);
640 WREG32(mmGRPH_UPDATE + crtc_offsets[i], tmp);
641 }
642 tmp = RREG32(mmCRTC_MASTER_UPDATE_LOCK + crtc_offsets[i]);
643 if (REG_GET_FIELD(tmp, CRTC_MASTER_UPDATE_LOCK, MASTER_UPDATE_LOCK)) {
644 tmp = REG_SET_FIELD(tmp, CRTC_MASTER_UPDATE_LOCK, MASTER_UPDATE_LOCK, 0);
645 WREG32(mmCRTC_MASTER_UPDATE_LOCK + crtc_offsets[i], tmp);
646 }
647 for (j = 0; j < adev->usec_timeout; j++) {
648 tmp = RREG32(mmGRPH_UPDATE + crtc_offsets[i]);
649 if (REG_GET_FIELD(tmp, GRPH_UPDATE, GRPH_SURFACE_UPDATE_PENDING) == 0)
650 break;
651 udelay(1);
652 }
653 tmp = RREG32(mmCRTC_BLANK_CONTROL + crtc_offsets[i]); 607 tmp = RREG32(mmCRTC_BLANK_CONTROL + crtc_offsets[i]);
654 tmp = REG_SET_FIELD(tmp, CRTC_BLANK_CONTROL, CRTC_BLANK_DATA_EN, 0); 608 tmp = REG_SET_FIELD(tmp, CRTC_BLANK_CONTROL, CRTC_BLANK_DATA_EN, 0);
655 WREG32(mmCRTC_UPDATE_LOCK + crtc_offsets[i], 1);
656 WREG32(mmCRTC_BLANK_CONTROL + crtc_offsets[i], tmp); 609 WREG32(mmCRTC_BLANK_CONTROL + crtc_offsets[i], tmp);
657 WREG32(mmCRTC_UPDATE_LOCK + crtc_offsets[i], 0);
658 /* wait for the next frame */
659 frame_count = amdgpu_display_vblank_get_counter(adev, i);
660 for (j = 0; j < adev->usec_timeout; j++) {
661 if (amdgpu_display_vblank_get_counter(adev, i) != frame_count)
662 break;
663 udelay(1);
664 }
665 } 610 }
666 } 611 }
667 612