aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/dce_v10_0.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/dce_v10_0.c42
1 files changed, 41 insertions, 1 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
index 7f642b57223e..b888d7223e8e 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
@@ -712,6 +712,45 @@ static void dce_v10_0_set_vga_render_state(struct amdgpu_device *adev,
712 WREG32(mmVGA_RENDER_CONTROL, tmp); 712 WREG32(mmVGA_RENDER_CONTROL, tmp);
713} 713}
714 714
715static int dce_v10_0_get_num_crtc(struct amdgpu_device *adev)
716{
717 int num_crtc = 0;
718
719 switch (adev->asic_type) {
720 case CHIP_FIJI:
721 case CHIP_TONGA:
722 num_crtc = 6;
723 break;
724 default:
725 num_crtc = 0;
726 }
727 return num_crtc;
728}
729
730void dce_v10_0_disable_dce(struct amdgpu_device *adev)
731{
732 /*Disable VGA render and enabled crtc, if has DCE engine*/
733 if (amdgpu_atombios_has_dce_engine_info(adev)) {
734 u32 tmp;
735 int crtc_enabled, i;
736
737 dce_v10_0_set_vga_render_state(adev, false);
738
739 /*Disable crtc*/
740 for (i = 0; i < dce_v10_0_get_num_crtc(adev); i++) {
741 crtc_enabled = REG_GET_FIELD(RREG32(mmCRTC_CONTROL + crtc_offsets[i]),
742 CRTC_CONTROL, CRTC_MASTER_EN);
743 if (crtc_enabled) {
744 WREG32(mmCRTC_UPDATE_LOCK + crtc_offsets[i], 1);
745 tmp = RREG32(mmCRTC_CONTROL + crtc_offsets[i]);
746 tmp = REG_SET_FIELD(tmp, CRTC_CONTROL, CRTC_MASTER_EN, 0);
747 WREG32(mmCRTC_CONTROL + crtc_offsets[i], tmp);
748 WREG32(mmCRTC_UPDATE_LOCK + crtc_offsets[i], 0);
749 }
750 }
751 }
752}
753
715static void dce_v10_0_program_fmt(struct drm_encoder *encoder) 754static void dce_v10_0_program_fmt(struct drm_encoder *encoder)
716{ 755{
717 struct drm_device *dev = encoder->dev; 756 struct drm_device *dev = encoder->dev;
@@ -2962,10 +3001,11 @@ static int dce_v10_0_early_init(void *handle)
2962 dce_v10_0_set_display_funcs(adev); 3001 dce_v10_0_set_display_funcs(adev);
2963 dce_v10_0_set_irq_funcs(adev); 3002 dce_v10_0_set_irq_funcs(adev);
2964 3003
3004 adev->mode_info.num_crtc = dce_v10_0_get_num_crtc(adev);
3005
2965 switch (adev->asic_type) { 3006 switch (adev->asic_type) {
2966 case CHIP_FIJI: 3007 case CHIP_FIJI:
2967 case CHIP_TONGA: 3008 case CHIP_TONGA:
2968 adev->mode_info.num_crtc = 6; /* XXX 7??? */
2969 adev->mode_info.num_hpd = 6; 3009 adev->mode_info.num_hpd = 6;
2970 adev->mode_info.num_dig = 7; 3010 adev->mode_info.num_dig = 7;
2971 break; 3011 break;