From: Alvin Lee <[email protected]>

[Description]
- Add debug options to override low power SR latencies
- Match regular SR latency debug override

Reviewed-by: Austin Zheng <[email protected]>
Signed-off-by: Alvin Lee <[email protected]>
Signed-off-by: Roman Li <[email protected]>
---
 drivers/gpu/drm/amd/display/dc/dc.h           |  2 +
 .../dcn60/dcn60_soc_and_ip_translator.c       | 39 ++++++++++++++++++-
 2 files changed, 40 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/display/dc/dc.h 
b/drivers/gpu/drm/amd/display/dc/dc.h
index 957e15e4a84c..5cd7699e3e84 100644
--- a/drivers/gpu/drm/amd/display/dc/dc.h
+++ b/drivers/gpu/drm/amd/display/dc/dc.h
@@ -1042,6 +1042,8 @@ struct dc_virtual_addr_space_config {
 struct dc_bounding_box_overrides {
        unsigned int sr_exit_time_ns;
        unsigned int sr_enter_plus_exit_time_ns;
+       unsigned int sr_lp_exit_time_ns;
+       unsigned int sr_lp_enter_plus_exit_time_ns;
        unsigned int sr_exit_z8_time_ns;
        unsigned int sr_enter_plus_exit_z8_time_ns;
        unsigned int urgent_latency_ns;
diff --git 
a/drivers/gpu/drm/amd/display/dc/soc_and_ip_translator/dcn60/dcn60_soc_and_ip_translator.c
 
b/drivers/gpu/drm/amd/display/dc/soc_and_ip_translator/dcn60/dcn60_soc_and_ip_translator.c
index f1ee2225e9b8..aef527c7584b 100644
--- 
a/drivers/gpu/drm/amd/display/dc/soc_and_ip_translator/dcn60/dcn60_soc_and_ip_translator.c
+++ 
b/drivers/gpu/drm/amd/display/dc/soc_and_ip_translator/dcn60/dcn60_soc_and_ip_translator.c
@@ -79,6 +79,43 @@ static void dcn60_update_soc_bb_with_values_from_dmub(struct 
dml2_soc_bb *soc_bb
                        min_alt_ch_carveout_size_mb;
 }
 
+static void dcn60_update_soc_bb_with_values_from_software_policy(struct 
dml2_soc_bb *soc_bb, const struct dc *dc)
+{
+       /* set if the value is provided */
+       if (dc->bb_overrides.sr_exit_time_ns)
+               soc_bb->power_management_parameters.stutter_exit_latency_us =
+                               dc->bb_overrides.sr_exit_time_ns / 1000.0;
+
+       if (dc->bb_overrides.sr_enter_plus_exit_time_ns)
+               
soc_bb->power_management_parameters.stutter_enter_plus_exit_latency_us =
+                               dc->bb_overrides.sr_enter_plus_exit_time_ns / 
1000.0;
+
+       if (dc->bb_overrides.dram_clock_change_latency_ns)
+               soc_bb->power_management_parameters.dram_clk_change_blackout_us 
=
+                               dc->bb_overrides.dram_clock_change_latency_ns / 
1000.0;
+
+       if (dc->bb_overrides.fclk_clock_change_latency_ns)
+               soc_bb->power_management_parameters.fclk_change_blackout_us =
+                               dc->bb_overrides.fclk_clock_change_latency_ns / 
1000.0;
+
+       if (dc->bb_overrides.sr_exit_z8_time_ns)
+               soc_bb->power_management_parameters.z8_stutter_exit_latency_us =
+                               dc->bb_overrides.sr_exit_z8_time_ns / 1000.0;
+
+       if (dc->bb_overrides.sr_enter_plus_exit_z8_time_ns)
+               
soc_bb->power_management_parameters.z8_stutter_enter_plus_exit_latency_us =
+                               dc->bb_overrides.sr_enter_plus_exit_z8_time_ns 
/ 1000.0;
+
+       /* low power stutter latencies exist only on DCN6 and above */
+       if (dc->bb_overrides.sr_lp_exit_time_ns)
+               
soc_bb->power_management_parameters.low_power_stutter_exit_latency_us =
+                               dc->bb_overrides.sr_lp_exit_time_ns / 1000.0;
+
+       if (dc->bb_overrides.sr_lp_enter_plus_exit_time_ns)
+               
soc_bb->power_management_parameters.low_power_stutter_enter_plus_exit_latency_us
 =
+                               dc->bb_overrides.sr_lp_enter_plus_exit_time_ns 
/ 1000.0;
+}
+
 static void apply_soc_bb_updates(struct dml2_soc_bb *soc_bb, const struct dc 
*dc, const struct dml2_configuration_options *config)
 {
        /* Individual modification can be overwritten even if it was obtained 
by a previous function.
@@ -89,7 +126,7 @@ static void apply_soc_bb_updates(struct dml2_soc_bb *soc_bb, 
const struct dc *dc
        dcn60_update_soc_bb_with_values_from_dmub(soc_bb, config);
        dcn401_update_soc_bb_with_values_from_clk_mgr(soc_bb, dc, config);
        dcn401_update_soc_bb_with_values_from_vbios(soc_bb, dc);
-       dcn401_update_soc_bb_with_values_from_software_policy(soc_bb, dc);
+       dcn60_update_soc_bb_with_values_from_software_policy(soc_bb, dc);
 }
 
 static void dcn60_get_soc_bb(struct dml2_soc_bb *soc_bb, const struct dc *dc, 
const struct dml2_configuration_options *config)
-- 
2.34.1

Reply via email to