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>
This commit is contained in:
@ -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 {
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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,
|
||||
|
||||
Reference in New Issue
Block a user