From: Charlene Liu <[email protected]>

[why]
dml2 based on num_enabled clock != 2 to do clock ramming to dpm.
apu has 8 levels dispclk/dppclk/dcfclk/fclk, but only 4 levels of memclk.
to avoid mapping dispclk/dppclk to DPM clock,
based on arch review, force dispclk/dppclk num_level as 2.

Reviewed-by: Dillon Varone <[email protected]>
Signed-off-by: Charlene Liu <[email protected]>
Signed-off-by: Roman Li <[email protected]>
Signed-off-by: Chuanyu Tseng <[email protected]>
---
 .../dcn42/dcn42_soc_and_ip_translator.c                   | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git 
a/drivers/gpu/drm/amd/display/dc/soc_and_ip_translator/dcn42/dcn42_soc_and_ip_translator.c
 
b/drivers/gpu/drm/amd/display/dc/soc_and_ip_translator/dcn42/dcn42_soc_and_ip_translator.c
index fd9c24b5df53..1c04171b296c 100644
--- 
a/drivers/gpu/drm/amd/display/dc/soc_and_ip_translator/dcn42/dcn42_soc_and_ip_translator.c
+++ 
b/drivers/gpu/drm/amd/display/dc/soc_and_ip_translator/dcn42/dcn42_soc_and_ip_translator.c
@@ -93,6 +93,10 @@ static void 
dcn42_convert_dc_clock_table_to_soc_bb_clock_table(
                        }
                }
                vmin_limit->dispclk_khz = 
min(dc_clk_table->entries[0].dispclk_mhz * 1000, vmin_limit->dispclk_khz);
+               /* dispclk is always fine-grain */
+               dml_clk_table->dispclk.num_clk_values = 
dc_clk_table->num_entries_per_clk.num_dispclk_levels >= 2 ? 2 : 1;
+               dml_clk_table->dispclk.clk_values_khz[0] = 0;
+               dml_clk_table->dispclk.clk_values_khz[1] = 
dc_clk_table->entries[dc_clk_table->num_entries_per_clk.num_dispclk_levels - 
1].dispclk_mhz * 1000;
        }
 
        /* dppclk */
@@ -105,6 +109,10 @@ static void 
dcn42_convert_dc_clock_table_to_soc_bb_clock_table(
                                dml_clk_table->dppclk.clk_values_khz[i] = 0;
                        }
                }
+               /* dppclk is always fine-grain */
+               dml_clk_table->dppclk.num_clk_values = 
dc_clk_table->num_entries_per_clk.num_dppclk_levels >= 2 ? 2 : 1;
+               dml_clk_table->dppclk.clk_values_khz[0] = 0;
+               dml_clk_table->dppclk.clk_values_khz[1] = 
dc_clk_table->entries[dc_clk_table->num_entries_per_clk.num_dppclk_levels - 
1].dppclk_mhz * 1000;
        }
 
        /* dtbclk */
-- 
2.43.0

Reply via email to