aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0891-drm-amd-dal-Use-fine-grained-watermarks-for-support-.patch
diff options
context:
space:
mode:
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-.patch263
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
+