Commit 54149d13 authored by Michael Strauss's avatar Michael Strauss Committed by Alex Deucher

drm/amd/display: Fallback to clocks which meet requested voltage on DCN31

[WHY]
On certain configs, SMU clock table voltages don't match which cause parser
to behave incorrectly by leaving dcfclk and socclk table entries unpopulated.

[HOW]
Currently the function that finds the corresponding clock for a given voltage
only checks for exact voltage level matches. In the case that no match gets
found, parser now falls back to searching for the max clock which meets the
requested voltage (i.e. its corresponding voltage is below requested).
Signed-off-by: default avatarMichael Strauss <michael.strauss@amd.com>
Reviewed-by: default avatarNicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
parent 3f4e54bd
...@@ -518,14 +518,21 @@ static unsigned int find_clk_for_voltage( ...@@ -518,14 +518,21 @@ static unsigned int find_clk_for_voltage(
unsigned int voltage) unsigned int voltage)
{ {
int i; int i;
int max_voltage = 0;
int clock = 0;
for (i = 0; i < NUM_SOC_VOLTAGE_LEVELS; i++) { for (i = 0; i < NUM_SOC_VOLTAGE_LEVELS; i++) {
if (clock_table->SocVoltage[i] == voltage) if (clock_table->SocVoltage[i] == voltage) {
return clocks[i]; return clocks[i];
} else if (clock_table->SocVoltage[i] >= max_voltage &&
clock_table->SocVoltage[i] < voltage) {
max_voltage = clock_table->SocVoltage[i];
clock = clocks[i];
}
} }
ASSERT(0); ASSERT(clock);
return 0; return clock;
} }
void dcn31_clk_mgr_helper_populate_bw_params( void dcn31_clk_mgr_helper_populate_bw_params(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment