diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/0891-drm-amd-dal-Use-fine-grained-watermarks-for-support-.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/0891-drm-amd-dal-Use-fine-grained-watermarks-for-support-.patch | 263 |
1 files changed, 263 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0891-drm-amd-dal-Use-fine-grained-watermarks-for-support-.patch b/common/recipes-kernel/linux/files/0891-drm-amd-dal-Use-fine-grained-watermarks-for-support-.patch new file mode 100644 index 00000000..bf7269c0 --- /dev/null +++ b/common/recipes-kernel/linux/files/0891-drm-amd-dal-Use-fine-grained-watermarks-for-support-.patch @@ -0,0 +1,263 @@ +From 7821e089e8f8d7ec06df41a2e4ca7453f0c1af79 Mon Sep 17 00:00:00 2001 +From: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com> +Date: Tue, 8 Mar 2016 17:35:27 -0500 +Subject: [PATCH 0891/1110] drm/amd/dal: Use fine-grained watermarks for + support new ASICs + +Signed-off-by: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com> +Acked-by: Harry Wentland <harry.wentland@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + drivers/gpu/drm/amd/dal/dc/calcs/bandwidth_calcs.c | 89 +++++++++++++++++++--- + .../drm/amd/dal/dc/dce110/dce110_hw_sequencer.c | 6 +- + .../gpu/drm/amd/dal/dc/dce110/dce110_mem_input.c | 13 ++-- + drivers/gpu/drm/amd/dal/dc/inc/bandwidth_calcs.h | 2 + + drivers/gpu/drm/amd/dal/dc/inc/hw/mem_input.h | 3 +- + 5 files changed, 94 insertions(+), 19 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 52557db..c64efe6 100644 +--- a/drivers/gpu/drm/amd/dal/dc/calcs/bandwidth_calcs.c ++++ b/drivers/gpu/drm/amd/dal/dc/calcs/bandwidth_calcs.c +@@ -3879,6 +3879,41 @@ bool bw_calcs(struct dc_context *ctx, const struct bw_calcs_dceip *dceip, + bw_mul(high_yclk, bw_int_to_fixed(1000))); + + /* units: nanosecond, 16bit storage. */ ++ calcs_output->nbp_state_change_wm_ns[0].a_mark = ++ bw_fixed_to_int(bw_mul(bw_results_internal-> ++ nbp_state_change_watermark[4], bw_int_to_fixed(1000))); ++ calcs_output->nbp_state_change_wm_ns[1].a_mark = ++ bw_fixed_to_int(bw_mul(bw_results_internal-> ++ nbp_state_change_watermark[5], bw_int_to_fixed(1000))); ++ calcs_output->nbp_state_change_wm_ns[2].a_mark = ++ bw_fixed_to_int(bw_mul(bw_results_internal-> ++ nbp_state_change_watermark[6], bw_int_to_fixed(1000))); ++ ++ calcs_output->stutter_exit_wm_ns[0].a_mark = ++ bw_fixed_to_int(bw_mul(bw_results_internal-> ++ stutter_exit_watermark[4], bw_int_to_fixed(1000))); ++ calcs_output->stutter_exit_wm_ns[1].a_mark = ++ bw_fixed_to_int(bw_mul(bw_results_internal-> ++ stutter_exit_watermark[5], bw_int_to_fixed(1000))); ++ calcs_output->stutter_exit_wm_ns[2].a_mark = ++ bw_fixed_to_int(bw_mul(bw_results_internal-> ++ stutter_exit_watermark[6], bw_int_to_fixed(1000))); ++ ++ calcs_output->urgent_wm_ns[0].a_mark = ++ bw_fixed_to_int(bw_mul(bw_results_internal-> ++ urgent_watermark[4], bw_int_to_fixed(1000))); ++ calcs_output->urgent_wm_ns[1].a_mark = ++ bw_fixed_to_int(bw_mul(bw_results_internal-> ++ urgent_watermark[5], bw_int_to_fixed(1000))); ++ calcs_output->urgent_wm_ns[2].a_mark = ++ bw_fixed_to_int(bw_mul(bw_results_internal-> ++ urgent_watermark[6], bw_int_to_fixed(1000))); ++ ++ /*TODO check correctness*/ ++ ((struct bw_calcs_vbios *)vbios)->low_sclk = mid_sclk; ++ calculate_bandwidth(dceip, vbios, bw_data_internal, ++ bw_results_internal); ++ + calcs_output->nbp_state_change_wm_ns[0].b_mark = + bw_fixed_to_int(bw_mul(bw_results_internal-> + nbp_state_change_watermark[4],bw_int_to_fixed(1000))); +@@ -3909,6 +3944,42 @@ bool bw_calcs(struct dc_context *ctx, const struct bw_calcs_dceip *dceip, + bw_fixed_to_int(bw_mul(bw_results_internal-> + urgent_watermark[6], bw_int_to_fixed(1000))); + ++ /*TODO check correctness*/ ++ ((struct bw_calcs_vbios *)vbios)->low_sclk = low_sclk; ++ ((struct bw_calcs_vbios *)vbios)->low_yclk = mid_yclk; ++ calculate_bandwidth(dceip, vbios, bw_data_internal, ++ bw_results_internal); ++ ++ calcs_output->nbp_state_change_wm_ns[0].c_mark = ++ bw_fixed_to_int(bw_mul(bw_results_internal-> ++ nbp_state_change_watermark[4], bw_int_to_fixed(1000))); ++ calcs_output->nbp_state_change_wm_ns[1].c_mark = ++ bw_fixed_to_int(bw_mul(bw_results_internal-> ++ nbp_state_change_watermark[5], bw_int_to_fixed(1000))); ++ calcs_output->nbp_state_change_wm_ns[2].c_mark = ++ bw_fixed_to_int(bw_mul(bw_results_internal-> ++ nbp_state_change_watermark[6], bw_int_to_fixed(1000))); ++ ++ calcs_output->stutter_exit_wm_ns[0].c_mark = ++ bw_fixed_to_int(bw_mul(bw_results_internal-> ++ stutter_exit_watermark[4], bw_int_to_fixed(1000))); ++ calcs_output->stutter_exit_wm_ns[1].c_mark = ++ bw_fixed_to_int(bw_mul(bw_results_internal-> ++ stutter_exit_watermark[5], bw_int_to_fixed(1000))); ++ calcs_output->stutter_exit_wm_ns[2].c_mark = ++ bw_fixed_to_int(bw_mul(bw_results_internal-> ++ stutter_exit_watermark[6], bw_int_to_fixed(1000))); ++ ++ calcs_output->urgent_wm_ns[0].c_mark = ++ bw_fixed_to_int(bw_mul(bw_results_internal-> ++ urgent_watermark[4], bw_int_to_fixed(1000))); ++ calcs_output->urgent_wm_ns[1].c_mark = ++ bw_fixed_to_int(bw_mul(bw_results_internal-> ++ urgent_watermark[5], bw_int_to_fixed(1000))); ++ calcs_output->urgent_wm_ns[2].c_mark = ++ bw_fixed_to_int(bw_mul(bw_results_internal-> ++ urgent_watermark[6], bw_int_to_fixed(1000))); ++ + ((struct bw_calcs_vbios *)vbios)->low_yclk = high_yclk; + ((struct bw_calcs_vbios *)vbios)->mid_yclk = high_yclk; + ((struct bw_calcs_vbios *)vbios)->low_sclk = high_sclk; +@@ -3917,33 +3988,33 @@ bool bw_calcs(struct dc_context *ctx, const struct bw_calcs_dceip *dceip, + calculate_bandwidth(dceip, vbios, bw_data_internal, + bw_results_internal); + +- calcs_output->nbp_state_change_wm_ns[0].a_mark = ++ calcs_output->nbp_state_change_wm_ns[0].d_mark = + bw_fixed_to_int(bw_mul(bw_results_internal-> + nbp_state_change_watermark[4], bw_int_to_fixed(1000))); +- calcs_output->nbp_state_change_wm_ns[1].a_mark = ++ calcs_output->nbp_state_change_wm_ns[1].d_mark = + bw_fixed_to_int(bw_mul(bw_results_internal-> + nbp_state_change_watermark[5], bw_int_to_fixed(1000))); +- calcs_output->nbp_state_change_wm_ns[2].a_mark = ++ calcs_output->nbp_state_change_wm_ns[2].d_mark = + bw_fixed_to_int(bw_mul(bw_results_internal-> + nbp_state_change_watermark[6], bw_int_to_fixed(1000))); + +- calcs_output->stutter_exit_wm_ns[0].a_mark = ++ calcs_output->stutter_exit_wm_ns[0].d_mark = + bw_fixed_to_int(bw_mul(bw_results_internal-> + stutter_exit_watermark[4], bw_int_to_fixed(1000))); +- calcs_output->stutter_exit_wm_ns[1].a_mark = ++ calcs_output->stutter_exit_wm_ns[1].d_mark = + bw_fixed_to_int(bw_mul(bw_results_internal-> + stutter_exit_watermark[5], bw_int_to_fixed(1000))); +- calcs_output->stutter_exit_wm_ns[2].a_mark = ++ calcs_output->stutter_exit_wm_ns[2].d_mark = + bw_fixed_to_int(bw_mul(bw_results_internal-> + stutter_exit_watermark[6], bw_int_to_fixed(1000))); + +- calcs_output->urgent_wm_ns[0].a_mark = ++ calcs_output->urgent_wm_ns[0].d_mark = + bw_fixed_to_int(bw_mul(bw_results_internal-> + urgent_watermark[4], bw_int_to_fixed(1000))); +- calcs_output->urgent_wm_ns[1].a_mark = ++ calcs_output->urgent_wm_ns[1].d_mark = + bw_fixed_to_int(bw_mul(bw_results_internal-> + urgent_watermark[5], bw_int_to_fixed(1000))); +- calcs_output->urgent_wm_ns[2].a_mark = ++ calcs_output->urgent_wm_ns[2].d_mark = + bw_fixed_to_int(bw_mul(bw_results_internal-> + urgent_watermark[6], bw_int_to_fixed(1000))); + +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 defaac4..80faa98 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 +@@ -1172,8 +1172,10 @@ static void set_displaymarks( + static void set_safe_displaymarks(struct resource_context *res_ctx) + { + uint8_t i; +- struct bw_watermarks max_marks = { MAX_WATERMARK, MAX_WATERMARK }; +- struct bw_watermarks nbp_marks = { SAFE_NBP_MARK, SAFE_NBP_MARK }; ++ struct bw_watermarks max_marks = { ++ MAX_WATERMARK, MAX_WATERMARK, MAX_WATERMARK, MAX_WATERMARK }; ++ struct bw_watermarks nbp_marks = { ++ SAFE_NBP_MARK, SAFE_NBP_MARK, SAFE_NBP_MARK, SAFE_NBP_MARK }; + + for (i = 0; i < MAX_PIPES; i++) { + if (res_ctx->pipe_ctx[i].stream == NULL) +diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_mem_input.c b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_mem_input.c +index e7fc5bd..6f3ca2d 100644 +--- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_mem_input.c ++++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_mem_input.c +@@ -32,7 +32,6 @@ + + #include "include/logger_interface.h" + #include "adapter_service_interface.h" +-#include "inc/bandwidth_calcs.h" + + #include "dce110_mem_input.h" + +@@ -442,7 +441,7 @@ static void program_urgency_watermark( + + set_reg_field_value( + urgency_cntl, +- marks_low.a_mark, ++ marks_low.d_mark, + DPG_PIPE_URGENCY_CONTROL, + URGENCY_LOW_WATERMARK); + +@@ -464,7 +463,7 @@ static void program_urgency_watermark( + urgency_cntl = dm_read_reg(ctx, urgency_addr); + + set_reg_field_value(urgency_cntl, +- marks_low.b_mark, ++ marks_low.a_mark, + DPG_PIPE_URGENCY_CONTROL, + URGENCY_LOW_WATERMARK); + +@@ -509,7 +508,7 @@ static void program_stutter_watermark( + + /*Write watermark set A*/ + set_reg_field_value(stutter_cntl, +- marks.a_mark, ++ marks.d_mark, + DPG_PIPE_STUTTER_CONTROL, + STUTTER_EXIT_SELF_REFRESH_WATERMARK); + dm_write_reg(ctx, stutter_addr, stutter_cntl); +@@ -534,7 +533,7 @@ static void program_stutter_watermark( + + /*Write watermark set B*/ + set_reg_field_value(stutter_cntl, +- marks.b_mark, ++ marks.a_mark, + DPG_PIPE_STUTTER_CONTROL, + STUTTER_EXIT_SELF_REFRESH_WATERMARK); + dm_write_reg(ctx, stutter_addr, stutter_cntl); +@@ -580,7 +579,7 @@ static void program_nbp_watermark( + value = dm_read_reg(ctx, addr); + set_reg_field_value( + value, +- marks.a_mark, ++ marks.d_mark, + DPG_PIPE_NB_PSTATE_CHANGE_CONTROL, + NB_PSTATE_CHANGE_WATERMARK); + dm_write_reg(ctx, addr, value); +@@ -618,7 +617,7 @@ static void program_nbp_watermark( + value = dm_read_reg(ctx, addr); + set_reg_field_value( + value, +- marks.b_mark, ++ marks.a_mark, + DPG_PIPE_NB_PSTATE_CHANGE_CONTROL, + NB_PSTATE_CHANGE_WATERMARK); + dm_write_reg(ctx, addr, value); +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 ff1ea09..023efd3 100644 +--- a/drivers/gpu/drm/amd/dal/dc/inc/bandwidth_calcs.h ++++ b/drivers/gpu/drm/amd/dal/dc/inc/bandwidth_calcs.h +@@ -465,6 +465,8 @@ struct bw_calcs_results { + struct bw_watermarks { + uint32_t a_mark; + uint32_t b_mark; ++ uint32_t c_mark; ++ uint32_t d_mark; + }; + + struct bw_calcs_output { +diff --git a/drivers/gpu/drm/amd/dal/dc/inc/hw/mem_input.h b/drivers/gpu/drm/amd/dal/dc/inc/hw/mem_input.h +index 3829694..6d7412c 100644 +--- a/drivers/gpu/drm/amd/dal/dc/inc/hw/mem_input.h ++++ b/drivers/gpu/drm/amd/dal/dc/inc/hw/mem_input.h +@@ -25,8 +25,9 @@ + #ifndef __DAL_MEM_INPUT_H__ + #define __DAL_MEM_INPUT_H__ + +-#include "include/grph_object_id.h" + #include "dc.h" ++#include "include/grph_object_id.h" ++#include "inc/bandwidth_calcs.h" + + struct mem_input { + struct mem_input_funcs *funcs; +-- +2.7.4 + |