aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0564-drm-amd-display-Re-enable-Vsync-Interrupts-for-Gradu.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0564-drm-amd-display-Re-enable-Vsync-Interrupts-for-Gradu.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0564-drm-amd-display-Re-enable-Vsync-Interrupts-for-Gradu.patch121
1 files changed, 121 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0564-drm-amd-display-Re-enable-Vsync-Interrupts-for-Gradu.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0564-drm-amd-display-Re-enable-Vsync-Interrupts-for-Gradu.patch
new file mode 100644
index 00000000..6c4a81fe
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0564-drm-amd-display-Re-enable-Vsync-Interrupts-for-Gradu.patch
@@ -0,0 +1,121 @@
+From 99cc9c9887cfa5a30f6768d697e06d48efda9f3e Mon Sep 17 00:00:00 2001
+From: Amy Zhang <Amy.Zhang@amd.com>
+Date: Wed, 28 Jun 2017 18:14:09 -0400
+Subject: [PATCH 0564/4131] drm/amd/display: Re-enable Vsync Interrupts for
+ Gradual Refresh Ramp
+
+- Make sure Vsync interrupts are disabled in static screen case
+ and enabled when not to save power
+- Create no_static_for_external_dp debug option
+
+Signed-off-by: Amy Zhang <Amy.Zhang@amd.com>
+Reviewed-by: Anthony Koo <Anthony.Koo@amd.com>
+Acked-by: Harry Wentland <Harry.Wentland@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/display/dc/dc.h | 1 +
+ .../drm/amd/display/modules/freesync/freesync.c | 38 ++++++++++++++++------
+ .../gpu/drm/amd/display/modules/inc/mod_freesync.h | 5 +++
+ 3 files changed, 34 insertions(+), 10 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/dc.h b/drivers/gpu/drm/amd/display/dc/dc.h
+index 3e2ed3d..93aff82 100644
+--- a/drivers/gpu/drm/amd/display/dc/dc.h
++++ b/drivers/gpu/drm/amd/display/dc/dc.h
+@@ -188,6 +188,7 @@ struct dc_debug {
+ bool disable_dmcu;
+ bool disable_psr;
+ bool force_abm_enable;
++ bool no_static_for_external_dp;
+ };
+
+ struct dc {
+diff --git a/drivers/gpu/drm/amd/display/modules/freesync/freesync.c b/drivers/gpu/drm/amd/display/modules/freesync/freesync.c
+index c7da90f..4df79f7 100644
+--- a/drivers/gpu/drm/amd/display/modules/freesync/freesync.c
++++ b/drivers/gpu/drm/amd/display/modules/freesync/freesync.c
+@@ -440,14 +440,11 @@ static void calc_freesync_range(struct core_freesync *core_freesync,
+ }
+
+ /* Determine whether BTR can be supported */
+- //if (max_frame_duration_in_ns >=
+- // 2 * min_frame_duration_in_ns)
+- // core_freesync->map[index].caps->btr_supported = true;
+- //else
+- // core_freesync->map[index].caps->btr_supported = false;
+-
+- /* Temp, keep btr disabled */
+- core_freesync->map[index].caps->btr_supported = false;
++ if (max_frame_duration_in_ns >=
++ 2 * min_frame_duration_in_ns)
++ core_freesync->map[index].caps->btr_supported = true;
++ else
++ core_freesync->map[index].caps->btr_supported = false;
+
+ /* Cache the time variables */
+ state->time.max_render_time_in_us =
+@@ -882,8 +879,10 @@ void mod_freesync_update_state(struct mod_freesync *mod_freesync,
+ * panels. Also change core variables only if there
+ * is a change.
+ */
+- if (dc_is_embedded_signal(
+- streams[stream_index]->sink->sink_signal) &&
++ if ((dc_is_embedded_signal(
++ streams[stream_index]->sink->sink_signal) ||
++ core_freesync->map[map_index].caps->
++ no_static_for_external_dp == false) &&
+ state->static_screen !=
+ freesync_params->enable) {
+
+@@ -1035,6 +1034,25 @@ bool mod_freesync_get_user_enable(struct mod_freesync *mod_freesync,
+ return true;
+ }
+
++bool mod_freesync_get_static_ramp_active(struct mod_freesync *mod_freesync,
++ const struct dc_stream *stream,
++ bool *is_ramp_active)
++{
++ unsigned int index = 0;
++ struct core_freesync *core_freesync = NULL;
++
++ if (mod_freesync == NULL)
++ return false;
++
++ core_freesync = MOD_FREESYNC_TO_CORE(mod_freesync);
++ index = map_index_from_stream(core_freesync, stream);
++
++ *is_ramp_active =
++ core_freesync->map[index].state.static_ramp.ramp_is_active;
++
++ return true;
++}
++
+ bool mod_freesync_override_min_max(struct mod_freesync *mod_freesync,
+ const struct dc_stream *streams,
+ unsigned int min_refresh,
+diff --git a/drivers/gpu/drm/amd/display/modules/inc/mod_freesync.h b/drivers/gpu/drm/amd/display/modules/inc/mod_freesync.h
+index f7f5a2c..eae1b34 100644
+--- a/drivers/gpu/drm/amd/display/modules/inc/mod_freesync.h
++++ b/drivers/gpu/drm/amd/display/modules/inc/mod_freesync.h
+@@ -88,6 +88,7 @@ struct mod_freesync_caps {
+ unsigned int max_refresh_in_micro_hz;
+
+ bool btr_supported;
++ bool no_static_for_external_dp;
+ };
+
+ struct mod_freesync_params {
+@@ -129,6 +130,10 @@ bool mod_freesync_get_user_enable(struct mod_freesync *mod_freesync,
+ const struct dc_stream *stream,
+ struct mod_freesync_user_enable *user_enable);
+
++bool mod_freesync_get_static_ramp_active(struct mod_freesync *mod_freesync,
++ const struct dc_stream *stream,
++ bool *is_ramp_active);
++
+ bool mod_freesync_override_min_max(struct mod_freesync *mod_freesync,
+ const struct dc_stream *streams,
+ unsigned int min_refresh,
+--
+2.7.4
+