aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/0271-drm-amdgpu-get-display-info-from-DC-when-DC-enabled.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/0271-drm-amdgpu-get-display-info-from-DC-when-DC-enabled.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/0271-drm-amdgpu-get-display-info-from-DC-when-DC-enabled.patch96
1 files changed, 96 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/0271-drm-amdgpu-get-display-info-from-DC-when-DC-enabled.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/0271-drm-amdgpu-get-display-info-from-DC-when-DC-enabled.patch
new file mode 100644
index 00000000..a6c63ee5
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/0271-drm-amdgpu-get-display-info-from-DC-when-DC-enabled.patch
@@ -0,0 +1,96 @@
+From 939ed149145012ef9f5bc1538f4e19506345414c Mon Sep 17 00:00:00 2001
+From: Rex Zhu <Rex.Zhu@amd.com>
+Date: Tue, 28 Feb 2017 16:21:27 +0800
+Subject: [PATCH 0271/4131] drm/amdgpu: get display info from DC when DC
+ enabled.
+
+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 | 59 +++++++++++++++++++--------------
+ 1 file changed, 34 insertions(+), 25 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
+index fd435a9..d450a96 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
+@@ -849,10 +849,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)
+@@ -866,30 +862,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;
+ }
+
+--
+2.7.4
+