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
