aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0420-drm-amd-powerplay-fix-segment-fault-issue-in-multi-d.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0420-drm-amd-powerplay-fix-segment-fault-issue-in-multi-d.patch')
-rw-r--r--common/recipes-kernel/linux/files/0420-drm-amd-powerplay-fix-segment-fault-issue-in-multi-d.patch59
1 files changed, 59 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0420-drm-amd-powerplay-fix-segment-fault-issue-in-multi-d.patch b/common/recipes-kernel/linux/files/0420-drm-amd-powerplay-fix-segment-fault-issue-in-multi-d.patch
new file mode 100644
index 00000000..73dff28b
--- /dev/null
+++ b/common/recipes-kernel/linux/files/0420-drm-amd-powerplay-fix-segment-fault-issue-in-multi-d.patch
@@ -0,0 +1,59 @@
+From 3aa26a86682b97b5fe9f1438f556650f864d6951 Mon Sep 17 00:00:00 2001
+From: Rex Zhu <Rex.Zhu@amd.com>
+Date: Tue, 29 Mar 2016 13:21:59 +0800
+Subject: [PATCH 0420/1110] drm/amd/powerplay: fix segment fault issue in
+ multi-display case.
+
+Signed-off-by: Rex Zhu <Rex.Zhu@amd.com>
+Reviewed-by: Junwei Zhang <Jerry.Zhang@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Cc: stable@vger.kernel.org
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c | 13 ++++++++-----
+ 1 file changed, 8 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
+index 7a4b101..75cb5b9 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
+@@ -816,10 +816,13 @@ static int amdgpu_cgs_get_active_displays_info(void *cgs_device,
+ 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)
+ return -EINVAL;
+
++ mode_info = info->mode_info;
++
+ if (adev->mode_info.num_crtc && adev->mode_info.mode_config_initialized) {
+ list_for_each_entry(crtc,
+ &ddev->mode_config.crtc_list, head) {
+@@ -828,7 +831,7 @@ static int amdgpu_cgs_get_active_displays_info(void *cgs_device,
+ info->active_display_mask |= (1 << amdgpu_crtc->crtc_id);
+ info->display_count++;
+ }
+- if (info->mode_info != NULL &&
++ if (mode_info != NULL &&
+ crtc->enabled && amdgpu_crtc->enabled &&
+ amdgpu_crtc->hw_mode.clock) {
+ line_time_us = (amdgpu_crtc->hw_mode.crtc_htotal * 1000) /
+@@ -836,10 +839,10 @@ static int amdgpu_cgs_get_active_displays_info(void *cgs_device,
+ vblank_lines = amdgpu_crtc->hw_mode.crtc_vblank_end -
+ amdgpu_crtc->hw_mode.crtc_vdisplay +
+ (amdgpu_crtc->v_border * 2);
+- info->mode_info->vblank_time_us = vblank_lines * line_time_us;
+- info->mode_info->refresh_rate = drm_mode_vrefresh(&amdgpu_crtc->hw_mode);
+- info->mode_info->ref_clock = adev->clock.spll.reference_freq;
+- info->mode_info++;
++ 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;
+ }
+ }
+ }
+--
+2.7.4
+