From 26cb0f6a249c7a51de01fec74b8a8a07e47aacb5 Mon Sep 17 00:00:00 2001 From: Dmytro Laktyushkin Date: Thu, 3 Dec 2015 16:33:14 -0500 Subject: [PATCH 0590/1110] drm/amd/dal: clean up watermark structs Signed-off-by: Dmytro Laktyushkin Signed-off-by: Harry Wentland Acked-by: Harry Wentland --- drivers/gpu/drm/amd/dal/dc/calcs/bandwidth_calcs.c | 58 ++++++++++------------ drivers/gpu/drm/amd/dal/dc/core/dc.c | 2 +- .../drm/amd/dal/dc/dce110/dce110_hw_sequencer.c | 6 +-- .../gpu/drm/amd/dal/dc/dce110/dce110_resource.c | 2 +- drivers/gpu/drm/amd/dal/dc/inc/bandwidth_calcs.h | 9 ++-- 5 files changed, 35 insertions(+), 42 deletions(-) diff --git a/drivers/gpu/drm/amd/dal/dc/calcs/bandwidth_calcs.c b/drivers/gpu/drm/amd/dal/dc/calcs/bandwidth_calcs.c index 542b3d7..2b54eb6 100644 --- a/drivers/gpu/drm/amd/dal/dc/calcs/bandwidth_calcs.c +++ b/drivers/gpu/drm/amd/dal/dc/calcs/bandwidth_calcs.c @@ -3367,85 +3367,79 @@ bool bw_calcs(struct dc_context *ctx, const struct bw_calcs_input_dceip *dceip, if (bw_data_internal->number_of_displays != 0) { struct bw_fixed high_sclk = vbios->high_sclk_mhz; + struct bw_fixed mid_sclk = vbios->mid_sclk_mhz; struct bw_fixed low_sclk = vbios->low_sclk_mhz; struct bw_fixed high_yclk = vbios->high_yclk_mhz; struct bw_fixed low_yclk = vbios->low_yclk_mhz; - ((struct bw_calcs_input_vbios *)vbios)->low_yclk_mhz = low_yclk; - ((struct bw_calcs_input_vbios *)vbios)->high_yclk_mhz = low_yclk; - ((struct bw_calcs_input_vbios *)vbios)->low_sclk_mhz = low_sclk; - ((struct bw_calcs_input_vbios *)vbios)->mid_sclk_mhz = low_sclk; - ((struct bw_calcs_input_vbios *)vbios)->high_sclk_mhz = low_sclk; calculate_bandwidth(dceip, vbios, bw_data_internal, bw_results_internal); /* units: nanosecond, 16bit storage. */ - calcs_output->nbp_state_change_watermark[0].b_mark = + calcs_output->nbp_state_change_wm_ns[0].b_mark = mul(bw_results_internal->nbp_state_change_watermark[4], int_to_fixed(1000)).value >> 24; - calcs_output->nbp_state_change_watermark[1].b_mark = + calcs_output->nbp_state_change_wm_ns[1].b_mark = mul(bw_results_internal->nbp_state_change_watermark[5], int_to_fixed(1000)).value >> 24; - calcs_output->nbp_state_change_watermark[2].b_mark = + calcs_output->nbp_state_change_wm_ns[2].b_mark = mul(bw_results_internal->nbp_state_change_watermark[6], int_to_fixed(1000)).value >> 24; - calcs_output->stutter_exit_watermark[0].b_mark = + calcs_output->stutter_exit_wm_ns[0].b_mark = mul(bw_results_internal->stutter_exit_watermark[4], int_to_fixed(1000)).value >> 24; - calcs_output->stutter_exit_watermark[1].b_mark = + calcs_output->stutter_exit_wm_ns[1].b_mark = mul(bw_results_internal->stutter_exit_watermark[5], int_to_fixed(1000)).value >> 24; - calcs_output->stutter_exit_watermark[2].b_mark = + calcs_output->stutter_exit_wm_ns[2].b_mark = mul(bw_results_internal->stutter_exit_watermark[6], int_to_fixed(1000)).value >> 24; - calcs_output->urgent_watermark[0].b_mark = + calcs_output->urgent_wm_ns[0].b_mark = mul(bw_results_internal->urgent_watermark[4], int_to_fixed(1000)).value >> 24; - calcs_output->urgent_watermark[1].b_mark = + calcs_output->urgent_wm_ns[1].b_mark = mul(bw_results_internal->urgent_watermark[5], int_to_fixed(1000)).value >> 24; - calcs_output->urgent_watermark[2].b_mark = + calcs_output->urgent_wm_ns[2].b_mark = mul(bw_results_internal->urgent_watermark[6], int_to_fixed(1000)).value >> 24; ((struct bw_calcs_input_vbios *)vbios)->low_yclk_mhz = high_yclk; - ((struct bw_calcs_input_vbios *)vbios)->high_yclk_mhz = high_yclk; ((struct bw_calcs_input_vbios *)vbios)->low_sclk_mhz = high_sclk; ((struct bw_calcs_input_vbios *)vbios)->mid_sclk_mhz = high_sclk; - ((struct bw_calcs_input_vbios *)vbios)->high_sclk_mhz = high_sclk; calculate_bandwidth(dceip, vbios, bw_data_internal, bw_results_internal); - calcs_output->nbp_state_change_watermark[0].a_mark = + calcs_output->nbp_state_change_wm_ns[0].a_mark = mul(bw_results_internal->nbp_state_change_watermark[4], int_to_fixed(1000)).value >> 24; - calcs_output->nbp_state_change_watermark[1].a_mark = + calcs_output->nbp_state_change_wm_ns[1].a_mark = mul(bw_results_internal->nbp_state_change_watermark[5], int_to_fixed(1000)).value >> 24; - calcs_output->nbp_state_change_watermark[2].a_mark = + calcs_output->nbp_state_change_wm_ns[2].a_mark = mul(bw_results_internal->nbp_state_change_watermark[6], int_to_fixed(1000)).value >> 24; - calcs_output->stutter_exit_watermark[0].a_mark = + calcs_output->stutter_exit_wm_ns[0].a_mark = mul(bw_results_internal->stutter_exit_watermark[4], int_to_fixed(1000)).value >> 24; - calcs_output->stutter_exit_watermark[1].a_mark = + calcs_output->stutter_exit_wm_ns[1].a_mark = mul(bw_results_internal->stutter_exit_watermark[5], int_to_fixed(1000)).value >> 24; - calcs_output->stutter_exit_watermark[2].a_mark = + calcs_output->stutter_exit_wm_ns[2].a_mark = mul(bw_results_internal->stutter_exit_watermark[6], int_to_fixed(1000)).value >> 24; - calcs_output->urgent_watermark[0].a_mark = + calcs_output->urgent_wm_ns[0].a_mark = mul(bw_results_internal->urgent_watermark[4], int_to_fixed(1000)).value >> 24; - calcs_output->urgent_watermark[1].a_mark = + calcs_output->urgent_wm_ns[1].a_mark = mul(bw_results_internal->urgent_watermark[5], int_to_fixed(1000)).value >> 24; - calcs_output->urgent_watermark[2].a_mark = + calcs_output->urgent_wm_ns[2].a_mark = mul(bw_results_internal->urgent_watermark[6], int_to_fixed(1000)).value >> 24; @@ -3460,25 +3454,23 @@ bool bw_calcs(struct dc_context *ctx, const struct bw_calcs_input_dceip *dceip, calcs_output->dispclk_khz = mul(bw_results_internal->dispclk, int_to_fixed(1000)).value >> 24; - calcs_output->blackout_recovery_time_us = - mul(bw_results_internal->blackout_recovery_time, - int_to_fixed(1000)).value >> 24; + /*TODO:fix formula to unhardcode use levels*/ + calcs_output->required_blackout_duration_us = + add(bw_results_internal->blackout_duration_margin[2][2], + vbios->blackout_duration).value >> 24; calcs_output->required_sclk = mul(bw_results_internal->required_sclk, int_to_fixed(1000)).value >> 24; calcs_output->required_sclk_deep_sleep = mul(bw_results_internal->sclk_deep_sleep, int_to_fixed(1000)).value >> 24; - /*TODO:fix formula to unhardcode*/ + /*TODO:fix formula to unhardcode use levels*/ calcs_output->required_yclk = mul(high_yclk, int_to_fixed(1000)).value >> 24; ((struct bw_calcs_input_vbios *)vbios)->low_yclk_mhz = low_yclk; - ((struct bw_calcs_input_vbios *)vbios)->high_yclk_mhz = - high_yclk; ((struct bw_calcs_input_vbios *)vbios)->low_sclk_mhz = low_sclk; - ((struct bw_calcs_input_vbios *)vbios)->mid_sclk_mhz = high_sclk; - ((struct bw_calcs_input_vbios *)vbios)->high_sclk_mhz = high_sclk; + ((struct bw_calcs_input_vbios *)vbios)->mid_sclk_mhz = mid_sclk; } else { calcs_output->nbp_state_change_enable = true; calcs_output->cpuc_state_change_enable = true; diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc.c b/drivers/gpu/drm/amd/dal/dc/core/dc.c index feda859..6351ef5 100644 --- a/drivers/gpu/drm/amd/dal/dc/core/dc.c +++ b/drivers/gpu/drm/amd/dal/dc/core/dc.c @@ -579,7 +579,7 @@ static void pplib_apply_display_requirements( pp_display_cfg.cpu_pstate_disable = context->bw_results.cpup_state_change_enable == false; pp_display_cfg.cpu_pstate_separation_time = - context->bw_results.blackout_recovery_time_us; + context->bw_results.required_blackout_duration_us; pp_display_cfg.min_memory_clock_khz = context->bw_results.required_yclk; pp_display_cfg.min_engine_clock_khz = context->bw_results.required_sclk; diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_hw_sequencer.c b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_hw_sequencer.c index edbf3ce..10cc727 100644 --- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_hw_sequencer.c +++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_hw_sequencer.c @@ -1155,11 +1155,11 @@ static void set_displaymarks( dce110_mem_input_program_display_marks( stream->mi, context->bw_results - .nbp_state_change_watermark[total_streams], + .nbp_state_change_wm_ns[total_streams], context->bw_results - .stutter_exit_watermark[total_streams], + .stutter_exit_wm_ns[total_streams], context->bw_results - .urgent_watermark[total_streams], + .urgent_wm_ns[total_streams], stream->public.timing.h_total, stream->public.timing.pix_clk_khz, 1000 * dc->bw_vbios.blackout_duration diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c index 6121277..400271e 100644 --- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c +++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c @@ -575,7 +575,7 @@ enum dc_status dce110_validate_bandwidth( LOG_MINOR_BWM_REQUIRED_BANDWIDTH_CALCS, "%s: Finish bandwidth calculations\n nbpMark: %d", __func__, - context->bw_results.nbp_state_change_watermark[0].b_mark); + context->bw_results.nbp_state_change_wm_ns[0].b_mark); return result; } diff --git a/drivers/gpu/drm/amd/dal/dc/inc/bandwidth_calcs.h b/drivers/gpu/drm/amd/dal/dc/inc/bandwidth_calcs.h index 6422298..fb04ce3 100644 --- a/drivers/gpu/drm/amd/dal/dc/inc/bandwidth_calcs.h +++ b/drivers/gpu/drm/amd/dal/dc/inc/bandwidth_calcs.h @@ -242,6 +242,7 @@ struct bw_calcs_input_mode_data { * Output data structure(s). ******************************************************************************/ #define maximum_number_of_surfaces 12 +/*Units : MHz, us */ struct bw_results_internal { bool cpup_state_change_enable; bool cpuc_state_change_enable; @@ -430,14 +431,14 @@ struct bw_calcs_output { bool cpup_state_change_enable; bool stutter_mode_enable; bool nbp_state_change_enable; - struct bw_watermarks urgent_watermark[4]; - struct bw_watermarks stutter_exit_watermark[4]; - struct bw_watermarks nbp_state_change_watermark[4]; + struct bw_watermarks urgent_wm_ns[4]; + struct bw_watermarks stutter_exit_wm_ns[4]; + struct bw_watermarks nbp_state_change_wm_ns[4]; uint32_t required_sclk; uint32_t required_sclk_deep_sleep; uint32_t required_yclk; uint32_t dispclk_khz; - uint32_t blackout_recovery_time_us; + uint32_t required_blackout_duration_us; }; -- 2.7.4