diff options
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.patch | 121 |
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 + |