diff options
Diffstat (limited to 'meta-amdfalconx86/recipes-kernel/linux/linux-yocto/1034-drm-amd-dal-add-bw_result-logging.patch')
-rw-r--r-- | meta-amdfalconx86/recipes-kernel/linux/linux-yocto/1034-drm-amd-dal-add-bw_result-logging.patch | 226 |
1 files changed, 226 insertions, 0 deletions
diff --git a/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/1034-drm-amd-dal-add-bw_result-logging.patch b/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/1034-drm-amd-dal-add-bw_result-logging.patch new file mode 100644 index 00000000..0cd5a622 --- /dev/null +++ b/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/1034-drm-amd-dal-add-bw_result-logging.patch @@ -0,0 +1,226 @@ +From 6146607916e07c0061876cd619e58e4178facc0a 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 1034/1050] 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. + +Change-Id: I2c180db4406ed6934024078121f9d9ac4792155d +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; + } + +-- +1.9.1 + |