mirror of
https://github.com/torvalds/linux.git
synced 2026-05-29 17:43:52 +02:00
drm/amd/display: Limit Minimum FreeSync Refresh Rate
Why: Some EDIDs report a minimum refresh rate lower than what HW can support How: Add a check to calculate minimum supported refresh rate with current timing and use that as the minimum if a lower one is passed in Acked-by: Stylon Wang <stylon.wang@amd.com> Signed-off-by: Austin Zheng <austin.zheng@amd.com> Reviewed-by: Anthony Koo <Anthony.Koo@amd.com> Tested-by: Daniel Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
ec7282bd26
commit
da55037afd
|
|
@ -266,6 +266,7 @@ struct dc_caps {
|
|||
uint16_t subvp_pstate_allow_width_us;
|
||||
uint16_t subvp_vertical_int_margin_us;
|
||||
bool seamless_odm;
|
||||
uint32_t max_v_total;
|
||||
uint8_t subvp_drr_vblank_start_margin_us;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -2328,6 +2328,7 @@ static bool dcn30_resource_construct(
|
|||
dc->caps.color.mpc.ocsc = 1;
|
||||
|
||||
dc->caps.dp_hdmi21_pcon_support = true;
|
||||
dc->caps.max_v_total = (1 << 15) - 1;
|
||||
|
||||
/* read VBIOS LTTPR caps */
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1227,6 +1227,7 @@ static bool dcn302_resource_construct(
|
|||
dc->caps.force_dp_tps4_for_cp2520 = true;
|
||||
dc->caps.extended_aux_timeout_support = true;
|
||||
dc->caps.dmcub_support = true;
|
||||
dc->caps.max_v_total = (1 << 15) - 1;
|
||||
|
||||
/* Color pipeline capabilities */
|
||||
dc->caps.color.dpp.dcn_arch = 1;
|
||||
|
|
|
|||
|
|
@ -1152,6 +1152,7 @@ static bool dcn303_resource_construct(
|
|||
dc->caps.force_dp_tps4_for_cp2520 = true;
|
||||
dc->caps.extended_aux_timeout_support = true;
|
||||
dc->caps.dmcub_support = true;
|
||||
dc->caps.max_v_total = (1 << 15) - 1;
|
||||
|
||||
/* Color pipeline capabilities */
|
||||
dc->caps.color.dpp.dcn_arch = 1;
|
||||
|
|
|
|||
|
|
@ -2175,6 +2175,7 @@ static bool dcn32_resource_construct(
|
|||
dc->caps.extended_aux_timeout_support = true;
|
||||
dc->caps.dmcub_support = true;
|
||||
dc->caps.seamless_odm = true;
|
||||
dc->caps.max_v_total = (1 << 15) - 1;
|
||||
|
||||
/* Color pipeline capabilities */
|
||||
dc->caps.color.dpp.dcn_arch = 1;
|
||||
|
|
|
|||
|
|
@ -1718,6 +1718,7 @@ static bool dcn321_resource_construct(
|
|||
dc->caps.edp_dsc_support = true;
|
||||
dc->caps.extended_aux_timeout_support = true;
|
||||
dc->caps.dmcub_support = true;
|
||||
dc->caps.max_v_total = (1 << 15) - 1;
|
||||
|
||||
/* Color pipeline capabilities */
|
||||
dc->caps.color.dpp.dcn_arch = 1;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2016 Advanced Micro Devices, Inc.
|
||||
* Copyright 2016-2023 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
|
|
@ -989,6 +989,7 @@ void mod_freesync_build_vrr_params(struct mod_freesync *mod_freesync,
|
|||
unsigned int refresh_range = 0;
|
||||
unsigned long long min_refresh_in_uhz = 0;
|
||||
unsigned long long max_refresh_in_uhz = 0;
|
||||
unsigned long long min_hardware_refresh_in_uhz = 0;
|
||||
|
||||
if (mod_freesync == NULL)
|
||||
return;
|
||||
|
|
@ -999,7 +1000,13 @@ void mod_freesync_build_vrr_params(struct mod_freesync *mod_freesync,
|
|||
nominal_field_rate_in_uhz =
|
||||
mod_freesync_calc_nominal_field_rate(stream);
|
||||
|
||||
min_refresh_in_uhz = in_config->min_refresh_in_uhz;
|
||||
if (stream->ctx->dc->caps.max_v_total != 0 && stream->timing.h_total != 0) {
|
||||
min_hardware_refresh_in_uhz = div64_u64((stream->timing.pix_clk_100hz * 100000000ULL),
|
||||
(stream->timing.h_total * stream->ctx->dc->caps.max_v_total));
|
||||
}
|
||||
/* Limit minimum refresh rate to what can be supported by hardware */
|
||||
min_refresh_in_uhz = min_hardware_refresh_in_uhz > in_config->min_refresh_in_uhz ?
|
||||
min_hardware_refresh_in_uhz : in_config->min_refresh_in_uhz;
|
||||
max_refresh_in_uhz = in_config->max_refresh_in_uhz;
|
||||
|
||||
/* Full range may be larger than current video timing, so cap at nominal */
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user