aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0658-drm-amd-dal-add-bw_result-logging.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0658-drm-amd-dal-add-bw_result-logging.patch')
-rw-r--r--common/recipes-kernel/linux/files/0658-drm-amd-dal-add-bw_result-logging.patch225
1 files changed, 225 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0658-drm-amd-dal-add-bw_result-logging.patch b/common/recipes-kernel/linux/files/0658-drm-amd-dal-add-bw_result-logging.patch
new file mode 100644
index 00000000..ec95e491
--- /dev/null
+++ b/common/recipes-kernel/linux/files/0658-drm-amd-dal-add-bw_result-logging.patch
@@ -0,0 +1,225 @@
+From b96d5c9da90d267519257bf183d48e3442af4dd9 Mon Sep 17 00:00:00 2001
+From: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
+Date: Tue, 5 Jan 2016 12:02:31 -0500
+Subject: [PATCH 0658/1110] drm/amd/dal: add bw_result logging
+
+Also fixed number of taps used for multi-sisplay config bw calculations.
+Utils part of the change fixes line endings.
+
+Signed-off-by: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
+Signed-off-by: Harry Wentland <harry.wentland@amd.com>
+Acked-by: Harry Wentland <Harry.Wentland@amd.com>
+---
+ drivers/gpu/drm/amd/dal/dc/basics/logger.c | 18 +++--
+ .../drm/amd/dal/dc/dce110/dce110_hw_sequencer.c | 4 +-
+ .../gpu/drm/amd/dal/dc/dce110/dce110_resource.c | 92 +++++++++++++++++++---
+ 3 files changed, 96 insertions(+), 18 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/dal/dc/basics/logger.c b/drivers/gpu/drm/amd/dal/dc/basics/logger.c
+index 5aadda7..b2bf14f 100644
+--- a/drivers/gpu/drm/amd/dal/dc/basics/logger.c
++++ b/drivers/gpu/drm/amd/dal/dc/basics/logger.c
+@@ -241,7 +241,8 @@ struct log_major_mask_info {
+
+ #define LG_SYNC_MSK (1 << LOG_MINOR_SYNC_TIMING)
+
+-#define LG_BWM_MSK (1 << LOG_MINOR_BWM_MODE_VALIDATION)
++#define LG_BWM_MSK (1 << LOG_MINOR_BWM_MODE_VALIDATION) | \
++ (1 << LOG_MINOR_BWM_REQUIRED_BANDWIDTH_CALCS)
+
+
+ static const struct log_major_mask_info log_major_mask_info_tbl[] = {
+@@ -620,7 +621,8 @@ void dal_logger_write(
+ /* Concatenate onto end of entry buffer */
+ append_entry(&entry, buffer, size);
+ } else {
+- append_entry(&entry, "LOG_ERROR\n", 12);
++ append_entry(&entry,
++ "LOG_ERROR, line too long or null\n", 35);
+ }
+
+ dal_logger_close(&entry);
+@@ -658,7 +660,12 @@ void dal_logger_append(
+
+ size = dal_log_to_buffer(
+ buffer, DAL_LOGGER_BUFFER_MAX_LOG_LINE_SIZE, msg, args);
+- append_entry(entry, buffer, size);
++
++ if (size < DAL_LOGGER_BUFFER_MAX_LOG_LINE_SIZE - 1) {
++ append_entry(entry, buffer, size);
++ } else {
++ append_entry(entry, "LOG_ERROR, line too long\n", 27);
++ }
+
+ va_end(args);
+ }
+@@ -758,11 +765,10 @@ void dal_logger_open(
+
+ entry->buf = dc_service_alloc(
+ logger->ctx,
+- DAL_LOGGER_BUFFER_MAX_LOG_LINE_SIZE * sizeof(char));
++ DAL_LOGGER_BUFFER_MAX_SIZE * sizeof(char));
+
+ entry->buf_offset = 0;
+- entry->max_buf_bytes =
+- DAL_LOGGER_BUFFER_MAX_LOG_LINE_SIZE * sizeof(char);
++ entry->max_buf_bytes = DAL_LOGGER_BUFFER_MAX_SIZE * sizeof(char);
+
+ logger->open_count++;
+ entry->major = major;
+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 b71f7e7..fa6b9b4 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
+@@ -1286,7 +1286,9 @@ static enum dc_status apply_ctx_to_hw(
+ /*TODO: when pplib works*/
+ /*dc_set_clocks_and_clock_state(context);*/
+
+- set_display_clock(context);
++ if (context->bw_results.dispclk_khz
++ > dc->current_context.bw_results.dispclk_khz)
++ set_display_clock(context);
+
+ for (i = 0; i < pool->controller_count; i++) {
+ struct controller_ctx *ctlr_ctx
+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 0e38513..cb084da 100644
+--- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c
++++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c
+@@ -489,6 +489,8 @@ enum dc_status dce110_validate_bandwidth(
+ uint8_t i, j;
+ enum dc_status result = DC_ERROR_UNEXPECTED;
+ uint8_t number_of_displays = 0;
++ uint8_t max_htaps = 1;
++ uint8_t max_vtaps = 1;
+ bool all_displays_in_sync = true;
+ struct dc_crtc_timing prev_timing;
+
+@@ -504,8 +506,16 @@ enum dc_status dce110_validate_bandwidth(
+
+ if (target->status.surface_count == 0) {
+ disp->graphics_scale_ratio = bw_int_to_fixed(1);
+- disp->graphics_h_taps = 4;
+- disp->graphics_v_taps = 4;
++ disp->graphics_h_taps = 2;
++ disp->graphics_v_taps = 2;
++
++ /* TODO: remove when bw formula accepts taps per
++ * display
++ */
++ if (max_vtaps < 2)
++ max_vtaps = 2;
++ if (max_htaps < 2)
++ max_htaps = 2;
+
+ } else {
+ disp->graphics_scale_ratio =
+@@ -513,6 +523,14 @@ enum dc_status dce110_validate_bandwidth(
+ stream->ratios.vert.value);
+ disp->graphics_h_taps = stream->taps.h_taps;
+ disp->graphics_v_taps = stream->taps.v_taps;
++
++ /* TODO: remove when bw formula accepts taps per
++ * display
++ */
++ if (max_vtaps < stream->taps.v_taps)
++ max_vtaps = stream->taps.v_taps;
++ if (max_htaps < stream->taps.h_taps)
++ max_htaps = stream->taps.h_taps;
+ }
+
+ disp->graphics_src_width =
+@@ -550,15 +568,23 @@ enum dc_status dce110_validate_bandwidth(
+ }
+ }
+
++ /* TODO: remove when bw formula accepts taps per
++ * display
++ */
++ context->bw_mode_data.displays_data[0].graphics_v_taps = max_vtaps;
++ context->bw_mode_data.displays_data[0].graphics_h_taps = max_htaps;
++
+ context->bw_mode_data.number_of_displays = number_of_displays;
+ context->bw_mode_data.display_synchronization_enabled =
+ all_displays_in_sync;
+
+- dal_logger_write(dc->ctx->logger,
++ dal_logger_write(
++ dc->ctx->logger,
+ LOG_MAJOR_BWM,
+ LOG_MINOR_BWM_REQUIRED_BANDWIDTH_CALCS,
+- "%s: Start bandwidth calculations",
++ "%s: start",
+ __func__);
++
+ if (!bw_calcs(
+ dc->ctx,
+ &dc->bw_dceip,
+@@ -576,13 +602,57 @@ enum dc_status dce110_validate_bandwidth(
+ "%s: Bandwidth validation failed!",
+ __func__);
+
+- dal_logger_write(dc->ctx->logger,
+- LOG_MAJOR_BWM,
+- LOG_MINOR_BWM_REQUIRED_BANDWIDTH_CALCS,
+- "%s: Finish bandwidth calculations\n nbpMark: %d",
+- __func__,
+- context->bw_results.nbp_state_change_wm_ns[0].b_mark);
+-
++ if (dal_memcmp(&dc->current_context.bw_results,
++ &context->bw_results, sizeof(context->bw_results))) {
++ struct log_entry log_entry;
++ dal_logger_open(
++ dc->ctx->logger,
++ &log_entry,
++ LOG_MAJOR_BWM,
++ LOG_MINOR_BWM_REQUIRED_BANDWIDTH_CALCS);
++ dal_logger_append(&log_entry, "%s: finish, numDisplays: %d\n"
++ "nbpMark_b: %d nbpMark_a: %d urgentMark_b: %d urgentMark_a: %d\n"
++ "stutMark_b: %d stutMark_a: %d\n",
++ __func__, number_of_displays,
++ context->bw_results.nbp_state_change_wm_ns[0].b_mark,
++ context->bw_results.nbp_state_change_wm_ns[0].a_mark,
++ context->bw_results.urgent_wm_ns[0].b_mark,
++ context->bw_results.urgent_wm_ns[0].a_mark,
++ context->bw_results.stutter_exit_wm_ns[0].b_mark,
++ context->bw_results.stutter_exit_wm_ns[0].a_mark);
++ dal_logger_append(&log_entry,
++ "nbpMark_b: %d nbpMark_a: %d urgentMark_b: %d urgentMark_a: %d\n"
++ "stutMark_b: %d stutMark_a: %d\n",
++ context->bw_results.nbp_state_change_wm_ns[1].b_mark,
++ context->bw_results.nbp_state_change_wm_ns[1].a_mark,
++ context->bw_results.urgent_wm_ns[1].b_mark,
++ context->bw_results.urgent_wm_ns[1].a_mark,
++ context->bw_results.stutter_exit_wm_ns[1].b_mark,
++ context->bw_results.stutter_exit_wm_ns[1].a_mark);
++ dal_logger_append(&log_entry,
++ "nbpMark_b: %d nbpMark_a: %d urgentMark_b: %d urgentMark_a: %d\n"
++ "stutMark_b: %d stutMark_a: %d stutter_mode_enable: %d\n",
++ context->bw_results.nbp_state_change_wm_ns[2].b_mark,
++ context->bw_results.nbp_state_change_wm_ns[2].a_mark,
++ context->bw_results.urgent_wm_ns[2].b_mark,
++ context->bw_results.urgent_wm_ns[2].a_mark,
++ context->bw_results.stutter_exit_wm_ns[2].b_mark,
++ context->bw_results.stutter_exit_wm_ns[2].a_mark,
++ context->bw_results.stutter_mode_enable);
++ dal_logger_append(&log_entry,
++ "cstate: %d pstate: %d nbpstate: %d sync: %d dispclk: %d\n"
++ "sclk: %d sclk_sleep: %d yclk: %d blackout_duration: %d\n",
++ context->bw_results.cpuc_state_change_enable,
++ context->bw_results.cpup_state_change_enable,
++ context->bw_results.nbp_state_change_enable,
++ context->bw_results.all_displays_in_sync,
++ context->bw_results.dispclk_khz,
++ context->bw_results.required_sclk,
++ context->bw_results.required_sclk_deep_sleep,
++ context->bw_results.required_yclk,
++ context->bw_results.required_blackout_duration_us);
++ dal_logger_close(&log_entry);
++ }
+ return result;
+ }
+
+--
+2.7.4
+