aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.19.8/1006-drm-amd-display-Fix-issue-with-VLine-interrupt-not-f.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/1006-drm-amd-display-Fix-issue-with-VLine-interrupt-not-f.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.19.8/1006-drm-amd-display-Fix-issue-with-VLine-interrupt-not-f.patch94
1 files changed, 94 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/1006-drm-amd-display-Fix-issue-with-VLine-interrupt-not-f.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/1006-drm-amd-display-Fix-issue-with-VLine-interrupt-not-f.patch
new file mode 100644
index 00000000..42a8870c
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/1006-drm-amd-display-Fix-issue-with-VLine-interrupt-not-f.patch
@@ -0,0 +1,94 @@
+From c88421a6bf84ded6ffe577b5350542b514e92568 Mon Sep 17 00:00:00 2001
+From: Krunoslav Kovac <Krunoslav.Kovac@amd.com>
+Date: Tue, 13 Nov 2018 15:32:24 -0500
+Subject: [PATCH 1006/2940] drm/amd/display: Fix issue with VLine interrupt not
+ firing
+
+[Why]
+We are not correctly handling the wrap around case.
+VLine interrupt is relative to position of VUpdate interrupt.
+
+Both VUpdate interrupt and VLine interrupt could possibly
+be in front porch or back porch.
+
+[How]
+Fix wraparound case by checking for line number that is
+greater than the VTOTAL of the OTG timing. In this case,
+the interrupt should occur on the next frame.
+
+Also fix some variable naming and remove some dead code.
+
+Signed-off-by: Krunoslav Kovac <Krunoslav.Kovac@amd.com>
+Reviewed-by: Anthony Koo <Anthony.Koo@amd.com>
+Acked-by: Leo Li <sunpeng.li@amd.com>
+Acked-by: Tony Cheng <Tony.Cheng@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ .../gpu/drm/amd/display/dc/dcn10/dcn10_optc.c | 25 +++++++------------
+ 1 file changed, 9 insertions(+), 16 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_optc.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_optc.c
+index cdb3f096eb25..57d00d660462 100644
+--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_optc.c
++++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_optc.c
+@@ -102,14 +102,6 @@ static uint32_t get_start_vline(struct timing_generator *optc, const struct dc_c
+ patched_crtc_timing = *dc_crtc_timing;
+ optc1_apply_front_porch_workaround(optc, &patched_crtc_timing);
+
+- vesa_sync_start = patched_crtc_timing.h_addressable +
+- patched_crtc_timing.h_border_right +
+- patched_crtc_timing.h_front_porch;
+-
+- asic_blank_end = patched_crtc_timing.h_total -
+- vesa_sync_start -
+- patched_crtc_timing.h_border_left;
+-
+ vesa_sync_start = patched_crtc_timing.v_addressable +
+ patched_crtc_timing.v_border_bottom +
+ patched_crtc_timing.v_front_porch;
+@@ -119,10 +111,8 @@ static uint32_t get_start_vline(struct timing_generator *optc, const struct dc_c
+ patched_crtc_timing.v_border_top);
+
+ vertical_line_start = asic_blank_end - optc->dlg_otg_param.vstartup_start + 1;
+- if (vertical_line_start < 0) {
+- ASSERT(0);
++ if (vertical_line_start < 0)
+ vertical_line_start = 0;
+- }
+
+ return vertical_line_start;
+ }
+@@ -143,7 +133,7 @@ void optc1_program_vline_interrupt(
+
+ uint32_t vsync_line = get_start_vline(optc, dc_crtc_timing);
+ uint32_t start_line = 0;
+- uint32_t endLine = 0;
++ uint32_t end_line = 0;
+
+ if (req_delta_lines != 0)
+ req_delta_lines--;
+@@ -153,14 +143,17 @@ void optc1_program_vline_interrupt(
+ else
+ start_line = vsync_line - req_delta_lines;
+
+- endLine = start_line + 2;
++ end_line = start_line + 2;
++
++ if (start_line >= dc_crtc_timing->v_total)
++ start_line = start_line % dc_crtc_timing->v_total;
+
+- if (endLine >= dc_crtc_timing->v_total)
+- endLine = 2;
++ if (end_line >= dc_crtc_timing->v_total)
++ end_line = end_line % dc_crtc_timing->v_total;
+
+ REG_SET_2(OTG_VERTICAL_INTERRUPT0_POSITION, 0,
+ OTG_VERTICAL_INTERRUPT0_LINE_START, start_line,
+- OTG_VERTICAL_INTERRUPT0_LINE_END, endLine);
++ OTG_VERTICAL_INTERRUPT0_LINE_END, end_line);
+ }
+
+ /**
+--
+2.17.1
+