OSDN Git Service

drm/amdgpu: get display info from DC when DC enabled.
authorRex Zhu <Rex.Zhu@amd.com>
Tue, 28 Feb 2017 08:21:27 +0000 (16:21 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 26 Sep 2017 21:19:01 +0000 (17:19 -0400)
Signed-off-by: Rex Zhu <Rex.Zhu@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c

index 383204e..1933253 100644 (file)
@@ -889,10 +889,6 @@ static int amdgpu_cgs_get_active_displays_info(struct cgs_device *cgs_device,
                                          struct cgs_display_info *info)
 {
        CGS_FUNC_ADEV;
-       struct amdgpu_crtc *amdgpu_crtc;
-       struct drm_device *ddev = adev->ddev;
-       struct drm_crtc *crtc;
-       uint32_t line_time_us, vblank_lines;
        struct cgs_mode_info *mode_info;
 
        if (info == NULL)
@@ -906,30 +902,43 @@ static int amdgpu_cgs_get_active_displays_info(struct cgs_device *cgs_device,
                mode_info->ref_clock = adev->clock.spll.reference_freq;
        }
 
-       if (adev->mode_info.num_crtc && adev->mode_info.mode_config_initialized) {
-               list_for_each_entry(crtc,
-                               &ddev->mode_config.crtc_list, head) {
-                       amdgpu_crtc = to_amdgpu_crtc(crtc);
-                       if (crtc->enabled) {
-                               info->active_display_mask |= (1 << amdgpu_crtc->crtc_id);
-                               info->display_count++;
-                       }
-                       if (mode_info != NULL &&
-                               crtc->enabled && amdgpu_crtc->enabled &&
-                               amdgpu_crtc->hw_mode.clock) {
-                               line_time_us = (amdgpu_crtc->hw_mode.crtc_htotal * 1000) /
-                                                       amdgpu_crtc->hw_mode.clock;
-                               vblank_lines = amdgpu_crtc->hw_mode.crtc_vblank_end -
-                                                       amdgpu_crtc->hw_mode.crtc_vdisplay +
-                                                       (amdgpu_crtc->v_border * 2);
-                               mode_info->vblank_time_us = vblank_lines * line_time_us;
-                               mode_info->refresh_rate = drm_mode_vrefresh(&amdgpu_crtc->hw_mode);
-                               mode_info->ref_clock = adev->clock.spll.reference_freq;
-                               mode_info = NULL;
+       if (!amdgpu_device_has_dc_support(adev)) {
+               struct amdgpu_crtc *amdgpu_crtc;
+               struct drm_device *ddev = adev->ddev;
+               struct drm_crtc *crtc;
+               uint32_t line_time_us, vblank_lines;
+
+               if (adev->mode_info.num_crtc && adev->mode_info.mode_config_initialized) {
+                       list_for_each_entry(crtc,
+                                       &ddev->mode_config.crtc_list, head) {
+                               amdgpu_crtc = to_amdgpu_crtc(crtc);
+                               if (crtc->enabled) {
+                                       info->active_display_mask |= (1 << amdgpu_crtc->crtc_id);
+                                       info->display_count++;
+                               }
+                               if (mode_info != NULL &&
+                                       crtc->enabled && amdgpu_crtc->enabled &&
+                                       amdgpu_crtc->hw_mode.clock) {
+                                       line_time_us = (amdgpu_crtc->hw_mode.crtc_htotal * 1000) /
+                                                               amdgpu_crtc->hw_mode.clock;
+                                       vblank_lines = amdgpu_crtc->hw_mode.crtc_vblank_end -
+                                                               amdgpu_crtc->hw_mode.crtc_vdisplay +
+                                                               (amdgpu_crtc->v_border * 2);
+                                       mode_info->vblank_time_us = vblank_lines * line_time_us;
+                                       mode_info->refresh_rate = drm_mode_vrefresh(&amdgpu_crtc->hw_mode);
+                                       mode_info->ref_clock = adev->clock.spll.reference_freq;
+                                       mode_info = NULL;
+                               }
                        }
                }
+       } else {
+               info->display_count = adev->pm.pm_display_cfg.num_display;
+               if (mode_info != NULL) {
+                       mode_info->vblank_time_us = adev->pm.pm_display_cfg.min_vblank_time;
+                       mode_info->refresh_rate = adev->pm.pm_display_cfg.vrefresh;
+                       mode_info->ref_clock = adev->clock.spll.reference_freq;
+               }
        }
-
        return 0;
 }