diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/0983-drm-amd-dal-Implement-connectivity-log-output.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/0983-drm-amd-dal-Implement-connectivity-log-output.patch | 459 |
1 files changed, 0 insertions, 459 deletions
diff --git a/common/recipes-kernel/linux/files/0983-drm-amd-dal-Implement-connectivity-log-output.patch b/common/recipes-kernel/linux/files/0983-drm-amd-dal-Implement-connectivity-log-output.patch deleted file mode 100644 index 0edfde37..00000000 --- a/common/recipes-kernel/linux/files/0983-drm-amd-dal-Implement-connectivity-log-output.patch +++ /dev/null @@ -1,459 +0,0 @@ -From 4f6313afbf2678adc26831f856b68bbf6dfc3546 Mon Sep 17 00:00:00 2001 -From: Yongqiang Sun <yongqiang.sun@amd.com> -Date: Wed, 16 Mar 2016 11:11:52 -0400 -Subject: [PATCH 0983/1110] drm/amd/dal: Implement connectivity log output. - -message format: -[time stamp] [drm] [Major_minor] [connector name] message...... -eg: -[ 26.590965] [drm] [Conn_LKTN] [DP-1] HBRx4 pass VS=0, PE=0^ -[ 26.881060] [drm] [Conn_Mode] [DP-1] {2560x1080, 2784x1111@185580Khz}^ - -Signed-off-by: Yongqiang Sun <yongqiang.sun@amd.com> -Acked-by: Harry Wentland <harry.wentland@amd.com> -Signed-off-by: Alex Deucher <alexander.deucher@amd.com> ---- - .../gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_helpers.c | 51 ++++++++++++++++++ - drivers/gpu/drm/amd/dal/dc/basics/logger.c | 11 +++- - drivers/gpu/drm/amd/dal/dc/basics/logger.h | 6 ++- - drivers/gpu/drm/amd/dal/dc/core/dc.c | 10 ++++ - drivers/gpu/drm/amd/dal/dc/core/dc_link.c | 6 +++ - drivers/gpu/drm/amd/dal/dc/core/dc_link_ddc.c | 61 +++++++++++----------- - drivers/gpu/drm/amd/dal/dc/core/dc_link_dp.c | 35 ++++++++----- - drivers/gpu/drm/amd/dal/dc/dm_helpers.h | 39 ++++++++++++++ - drivers/gpu/drm/amd/dal/include/logger_types.h | 13 +++++ - 9 files changed, 186 insertions(+), 46 deletions(-) - -diff --git a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_helpers.c b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_helpers.c -index 8688ca2..c6d6267 100644 ---- a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_helpers.c -+++ b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_helpers.c -@@ -42,6 +42,12 @@ - - #include "dm_helpers.h" - -+/* Maximum line char number for connectivity log, -+ * in case of output EDID, needs at least 256x3 bytes plus some other -+ * message, so set line size to 896. -+ */ -+#define CONN_MAX_LINE_SIZE 896 -+ - /* dm_helpers_parse_edid_caps - * - * Parse edid caps -@@ -513,3 +519,48 @@ bool dm_helpers_submit_i2c( - return result; - } - -+void dm_helper_conn_log(struct dc_context *ctx, -+ const struct dc_link *link, -+ uint8_t *hex_data, -+ int hex_data_count, -+ enum conn_event event, -+ const char *msg, -+ ...) -+{ -+ struct amdgpu_device *adev = ctx->driver_context; -+ struct drm_device *dev = adev->ddev; -+ struct amdgpu_connector *aconnector = get_connector_for_link(dev, link); -+ char buffer[CONN_MAX_LINE_SIZE] = { 0 }; -+ va_list args; -+ int size; -+ enum log_minor minor = event; -+ -+ va_start(args, msg); -+ -+ sprintf(buffer, "[%s] ", aconnector->base.name); -+ -+ size = strlen(buffer); -+ -+ size += dm_log_to_buffer( -+ &buffer[size], CONN_MAX_LINE_SIZE, msg, args); -+ -+ if (buffer[strlen(buffer) - 1] == '\n') { -+ buffer[strlen(buffer) - 1] = '\0'; -+ size--; -+ } -+ -+ if (hex_data) { -+ int i; -+ -+ for (i = 0; i < hex_data_count; i++) -+ sprintf(&buffer[size + i * 3], "%2.2X ", hex_data[i]); -+ } -+ -+ strcat(buffer, "^\n"); -+ -+ dal_logger_write(ctx->logger, -+ LOG_MAJOR_CONNECTIVITY, -+ minor, -+ buffer); -+ va_end(args); -+} -diff --git a/drivers/gpu/drm/amd/dal/dc/basics/logger.c b/drivers/gpu/drm/amd/dal/dc/basics/logger.c -index f637c3f..93d4185 100644 ---- a/drivers/gpu/drm/amd/dal/dc/basics/logger.c -+++ b/drivers/gpu/drm/amd/dal/dc/basics/logger.c -@@ -207,6 +207,14 @@ static const struct log_minor_info ds_minor_info_tbl[] = { - {LOG_MINOR_DS_MODE_SETTING, "Mode_Setting"}, - }; - -+static const struct log_minor_info connectivity_minor_info_tbl[] = { -+ {LOG_MINOR_CONNECTIVITY_MODE_SET, "Mode"}, -+ {LOG_MINOR_CONNECTIVITY_DETECTION, "Detect"}, -+ {LOG_MINOR_CONNECTIVITY_LINK_TRAINING, "LKTN"}, -+ {LOG_MINOR_CONNECTIVITY_LINK_LOSS, "LinkLoss"}, -+ {LOG_MINOR_CONNECTIVITY_UNDERFLOW, "Underflow"}, -+}; -+ - struct log_major_mask_info { - struct log_major_info major_info; - uint32_t default_mask; -@@ -270,6 +278,7 @@ static const struct log_major_mask_info log_major_mask_info_tbl[] = { - {{LOG_MAJOR_DISPLAY_SERVICE, "DS" }, LG_ALL_MSK, ds_minor_info_tbl, NUM_ELEMENTS(ds_minor_info_tbl)}, - {{LOG_MAJOR_FEATURE_OVERRIDE, "FeatureOverride" }, LG_ALL_MSK, override_feature_minor_info_tbl, NUM_ELEMENTS(override_feature_minor_info_tbl)}, - {{LOG_MAJOR_DETECTION, "Detection" }, LG_ALL_MSK, detection_minor_info_tbl, NUM_ELEMENTS(detection_minor_info_tbl)}, -+ {{LOG_MAJOR_CONNECTIVITY, "Conn" }, LG_ALL_MSK, connectivity_minor_info_tbl, NUM_ELEMENTS(connectivity_minor_info_tbl)}, - }; - - /* ----------- Object init and destruction ----------- */ -@@ -511,7 +520,7 @@ static void log_to_internal_buffer(struct log_entry *entry) - - static void log_timestamp(struct log_entry *entry) - { -- dal_logger_append(entry, "00:00:00 "); -+/* dal_logger_append(entry, "00:00:00 ");*/ - } - - static void log_major_minor(struct log_entry *entry) -diff --git a/drivers/gpu/drm/amd/dal/dc/basics/logger.h b/drivers/gpu/drm/amd/dal/dc/basics/logger.h -index c2aea53..12d8ae6 100644 ---- a/drivers/gpu/drm/amd/dal/dc/basics/logger.h -+++ b/drivers/gpu/drm/amd/dal/dc/basics/logger.h -@@ -29,7 +29,11 @@ - /* Structure for keeping track of offsets, buffer, etc */ - - #define DAL_LOGGER_BUFFER_MAX_SIZE 2048 --#define DAL_LOGGER_BUFFER_MAX_LOG_LINE_SIZE 256 -+ -+/*Connectivity log needs to output EDID, which needs at lease 256x3 bytes, -+ * change log line size to 896 to meet the request. -+ */ -+#define DAL_LOGGER_BUFFER_MAX_LOG_LINE_SIZE 896 - - #include "include/logger_types.h" - -diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc.c b/drivers/gpu/drm/amd/dal/dc/core/dc.c -index f3a59aa..da50d25 100644 ---- a/drivers/gpu/drm/amd/dal/dc/core/dc.c -+++ b/drivers/gpu/drm/amd/dal/dc/core/dc.c -@@ -46,6 +46,7 @@ - #include "link_encoder.h" - - #include "dc_link_ddc.h" -+#include "dm_helpers.h" - - /******************************************************************************* - * Private structures -@@ -747,8 +748,17 @@ bool dc_commit_targets( - - for (i = 0; i < context->target_count; i++) { - struct dc_target *dc_target = &context->targets[i]->public; -+ struct core_sink *sink = DC_SINK_TO_CORE(dc_target->streams[0]->sink); -+ - if (context->target_status[i].surface_count > 0) - target_enable_memory_requests(dc_target, &core_dc->current_context.res_ctx); -+ -+ CONN_MSG_MODE(sink->link, "{%dx%d, %dx%d@%dKhz}", -+ dc_target->streams[0]->timing.h_addressable, -+ dc_target->streams[0]->timing.v_addressable, -+ dc_target->streams[0]->timing.h_total, -+ dc_target->streams[0]->timing.v_total, -+ dc_target->streams[0]->timing.pix_clk_khz); - } - - program_timing_sync(core_dc, context); -diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc_link.c b/drivers/gpu/drm/amd/dal/dc/core/dc_link.c -index 97d6f93..06c8fa6 100644 ---- a/drivers/gpu/drm/amd/dal/dc/core/dc_link.c -+++ b/drivers/gpu/drm/amd/dal/dc/core/dc_link.c -@@ -679,6 +679,12 @@ bool dc_link_detect(const struct dc_link *dc_link, bool boot) - break; - } - -+ /* Connectivity log: detection */ -+ CONN_DATA_DETECT(link, sink->public.dc_edid.raw_edid, -+ sink->public.dc_edid.length, -+ "%s: ", -+ sink->public.edid_caps.display_name); -+ - dal_logger_write(link->ctx->logger, - LOG_MAJOR_DETECTION, - LOG_MINOR_DETECTION_EDID_PARSER, -diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc_link_ddc.c b/drivers/gpu/drm/amd/dal/dc/core/dc_link_ddc.c -index 698a34e..c38e60e 100644 ---- a/drivers/gpu/drm/amd/dal/dc/core/dc_link_ddc.c -+++ b/drivers/gpu/drm/amd/dal/dc/core/dc_link_ddc.c -@@ -768,12 +768,12 @@ void dal_ddc_service_i2c_query_dp_dual_mode_adaptor( - DP_HDMI_DONGLE_ADDRESS, - type2_dongle_buf, - sizeof(type2_dongle_buf))) { -- dal_logger_write(ddc->ctx->logger, -- LOG_MAJOR_DCS, -- LOG_MINOR_DCS_DONGLE_DETECTION, -- "Detected DP-DVI dongle.\n"); - *dongle = DISPLAY_DONGLE_DP_DVI_DONGLE; - sink_cap->max_hdmi_pixel_clock = DP_ADAPTOR_DVI_MAX_TMDS_CLK; -+ -+ CONN_DATA_DETECT(ddc->link, type2_dongle_buf, sizeof(type2_dongle_buf), -+ "DP-DVI passive dongle %dMhz: ", -+ DP_ADAPTOR_DVI_MAX_TMDS_CLK / 1000); - return; - } - -@@ -815,29 +815,28 @@ void dal_ddc_service_i2c_query_dp_dual_mode_adaptor( - if (0 == max_tmds_clk || - max_tmds_clk < DP_ADAPTOR_TYPE2_MIN_TMDS_CLK || - max_tmds_clk > DP_ADAPTOR_TYPE2_MAX_TMDS_CLK) { -- dal_logger_write(ddc->ctx->logger, -- LOG_MAJOR_DCS, -- LOG_MINOR_DCS_DONGLE_DETECTION, -- "Invalid Maximum TMDS clock"); - *dongle = DISPLAY_DONGLE_DP_DVI_DONGLE; -+ -+ CONN_DATA_DETECT(ddc->link, type2_dongle_buf, -+ sizeof(type2_dongle_buf), -+ "DP-DVI passive dongle %dMhz: ", -+ DP_ADAPTOR_DVI_MAX_TMDS_CLK / 1000); - } else { - if (is_valid_hdmi_signature == true) { - *dongle = DISPLAY_DONGLE_DP_HDMI_DONGLE; -- dal_logger_write(ddc->ctx->logger, -- LOG_MAJOR_DCS, -- LOG_MINOR_DCS_DONGLE_DETECTION, -- "Detected Type 2 DP-HDMI Maximum TMDS " -- "clock, max TMDS clock: %d MHz", -- max_tmds_clk); -+ -+ CONN_DATA_DETECT(ddc->link, type2_dongle_buf, -+ sizeof(type2_dongle_buf), -+ "Type 2 DP-HDMI passive dongle %dMhz: ", -+ max_tmds_clk); - } else { - *dongle = DISPLAY_DONGLE_DP_HDMI_MISMATCHED_DONGLE; -- dal_logger_write(ddc->ctx->logger, -- LOG_MAJOR_DCS, -- LOG_MINOR_DCS_DONGLE_DETECTION, -- "Detected Type 2 DP-HDMI (no valid HDMI" -- " signature) Maximum TMDS clock, max " -- "TMDS clock: %d MHz", -- max_tmds_clk); -+ -+ CONN_DATA_DETECT(ddc->link, type2_dongle_buf, -+ sizeof(type2_dongle_buf), -+ "Type 2 DP-HDMI passive dongle (no signature) %dMhz: ", -+ max_tmds_clk); -+ - } - - /* Multiply by 1000 to convert to kHz. */ -@@ -847,19 +846,19 @@ void dal_ddc_service_i2c_query_dp_dual_mode_adaptor( - - } else { - if (is_valid_hdmi_signature == true) { -- dal_logger_write(ddc->ctx->logger, -- LOG_MAJOR_DCS, -- LOG_MINOR_DCS_DONGLE_DETECTION, -- "Detected Type 1 DP-HDMI dongle.\n"); - *dongle = DISPLAY_DONGLE_DP_HDMI_DONGLE; -- } else { -- dal_logger_write(ddc->ctx->logger, -- LOG_MAJOR_DCS, -- LOG_MINOR_DCS_DONGLE_DETECTION, -- "Detected Type 1 DP-HDMI dongle (no valid HDMI " -- "signature).\n"); - -+ CONN_DATA_DETECT(ddc->link, type2_dongle_buf, -+ sizeof(type2_dongle_buf), -+ "Type 1 DP-HDMI passive dongle %dMhz: ", -+ sink_cap->max_hdmi_pixel_clock / 1000); -+ } else { - *dongle = DISPLAY_DONGLE_DP_HDMI_MISMATCHED_DONGLE; -+ -+ CONN_DATA_DETECT(ddc->link, type2_dongle_buf, -+ sizeof(type2_dongle_buf), -+ "Type 1 DP-HDMI passive dongle (no signature) %dMhz: ", -+ sink_cap->max_hdmi_pixel_clock / 1000); - } - } - -diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc_link_dp.c b/drivers/gpu/drm/amd/dal/dc/core/dc_link_dp.c -index 8fe0314..c83a754 100644 ---- a/drivers/gpu/drm/amd/dal/dc/core/dc_link_dp.c -+++ b/drivers/gpu/drm/amd/dal/dc/core/dc_link_dp.c -@@ -1009,33 +1009,31 @@ bool perform_link_training( - switch (lt_settings.link_settings.link_rate) { - - case LINK_RATE_LOW: -- link_rate = "Low"; -+ link_rate = "RBR"; - break; - case LINK_RATE_HIGH: -- link_rate = "High"; -+ link_rate = "HBR"; - break; - case LINK_RATE_HIGH2: -- link_rate = "High2"; -+ link_rate = "HBR2"; - break; - case LINK_RATE_RBR2: - link_rate = "RBR2"; - break; - case LINK_RATE_HIGH3: -- link_rate = "High3"; -+ link_rate = "HBR3"; - break; - default: - break; - } - -- dal_logger_write(link->ctx->logger, -- LOG_MAJOR_MST, -- LOG_MINOR_MST_PROGRAMMING, -- "Link training for %d lanes at %s rate %s with PE %d, VS %d\n", -- lt_settings.link_settings.lane_count, -- link_rate, -- status ? "succeeded" : "failed", -- lt_settings.lane_settings[0].PRE_EMPHASIS, -- lt_settings.lane_settings[0].VOLTAGE_SWING); -+ /* Connectivity log: link training */ -+ CONN_MSG_LT(link, "%sx%d %s VS=%d, PE=%d", -+ link_rate, -+ lt_settings.link_settings.lane_count, -+ status ? "pass" : "fail", -+ lt_settings.lane_settings[0].VOLTAGE_SWING, -+ lt_settings.lane_settings[0].PRE_EMPHASIS); - - return status; - } -@@ -1540,8 +1538,15 @@ bool dc_link_handle_hpd_rx_irq(const struct dc_link *dc_link) - if (hpd_rx_irq_check_link_loss_status( - link, - &hpd_irq_dpcd_data)) { -+ /* Connectivity log: link loss */ -+ CONN_DATA_LINK_LOSS(link, -+ hpd_irq_dpcd_data.raw, -+ sizeof(hpd_irq_dpcd_data), -+ "Status: "); -+ - perform_link_training_with_retries(link, - &link->public.cur_link_settings, true, 3); -+ - status = false; - } - -@@ -1794,6 +1799,10 @@ static void retrieve_link_cap(struct core_link *link) - (uint8_t *)(&link->edp_revision), - sizeof(link->edp_revision)); - } -+ -+ /* Connectivity log: detection */ -+ CONN_DATA_DETECT(link, dpcd_data, sizeof(dpcd_data), "Rx Caps: "); -+ - /* TODO: Confirm if need retrieve_psr_link_cap */ - } - -diff --git a/drivers/gpu/drm/amd/dal/dc/dm_helpers.h b/drivers/gpu/drm/amd/dal/dc/dm_helpers.h -index 350dd11..151c1ef 100644 ---- a/drivers/gpu/drm/amd/dal/dc/dm_helpers.h -+++ b/drivers/gpu/drm/amd/dal/dc/dm_helpers.h -@@ -35,11 +35,42 @@ - - struct dp_mst_stream_allocation_table; - -+enum conn_event { -+ CONN_EVENT_MODE_SET, -+ CONN_EVENT_DETECTION, -+ CONN_EVENT_LINK_TRAINING, -+ CONN_EVENT_LINK_LOSS, -+ CONN_EVENT_UNDERFLOW, -+}; -+ - enum dc_edid_status dm_helpers_parse_edid_caps( - struct dc_context *ctx, - const struct dc_edid *edid, - struct dc_edid_caps *edid_caps); - -+ -+/* Connectivity log format: -+ * [time stamp] [drm] [Major_minor] [connector name] message..... -+ * eg: -+ * [ 26.590965] [drm] [Conn_LKTN] [DP-1] HBRx4 pass VS=0, PE=0^ -+ * [ 26.881060] [drm] [Conn_Mode] [DP-1] {2560x1080, 2784x1111@185580Khz}^ -+ */ -+ -+#define CONN_DATA_DETECT(link, hex_data, hex_len, ...) \ -+ dm_helper_conn_log(link->ctx, &link->public, hex_data, hex_len, \ -+ CONN_EVENT_DETECTION, ##__VA_ARGS__) -+ -+#define CONN_DATA_LINK_LOSS(link, hex_data, hex_len, ...) \ -+ dm_helper_conn_log(link->ctx, &link->public, hex_data, hex_len, \ -+ CONN_EVENT_LINK_LOSS, ##__VA_ARGS__) -+ -+#define CONN_MSG_LT(link, ...) \ -+ dm_helper_conn_log(link->ctx, &link->public, NULL, 0, \ -+ CONN_EVENT_LINK_TRAINING, ##__VA_ARGS__) -+ -+#define CONN_MSG_MODE(link, ...) \ -+ dm_helper_conn_log(link->ctx, &link->public, NULL, 0, \ -+ CONN_EVENT_MODE_SET, ##__VA_ARGS__) - /* - * Writes payload allocation table in immediate downstream device. - */ -@@ -100,4 +131,12 @@ bool dm_helpers_submit_i2c( - const struct dc_link *link, - struct i2c_command *cmd); - -+void dm_helper_conn_log(struct dc_context *ctx, -+ const struct dc_link *link, -+ uint8_t *hex_data, -+ int hex_data_count, -+ enum conn_event event, -+ const char *msg, -+ ...); -+ - #endif /* __DM_HELPERS__ */ -diff --git a/drivers/gpu/drm/amd/dal/include/logger_types.h b/drivers/gpu/drm/amd/dal/include/logger_types.h -index 759542a..26960e8 100644 ---- a/drivers/gpu/drm/amd/dal/include/logger_types.h -+++ b/drivers/gpu/drm/amd/dal/include/logger_types.h -@@ -65,6 +65,7 @@ enum log_major { - /*23*/ LOG_MAJOR_DISPLAY_SERVICE, /*< related to Display Service*/ - /*24*/ LOG_MAJOR_FEATURE_OVERRIDE, /*< related to features*/ - /*25*/ LOG_MAJOR_DETECTION, /*< related to detection*/ -+/*26*/ LOG_MAJOR_CONNECTIVITY, /*< related to connectivity*/ - LOG_MAJOR_COUNT, /*< count of the Major categories*/ - }; - -@@ -311,6 +312,18 @@ enum log_minor { - */ - LOG_MINOR_DETECTION_EDID_PARSER = 0, - LOG_MINOR_DETECTION_DP_CAPS, -+ -+/** -+* @brief defines minor category for LOG_MAJOR_CONNECTIVITY -+* -+* @note define sub functionality related to connectivity -+*/ -+ LOG_MINOR_CONNECTIVITY_MODE_SET = 0, -+ LOG_MINOR_CONNECTIVITY_DETECTION, -+ LOG_MINOR_CONNECTIVITY_LINK_TRAINING, -+ LOG_MINOR_CONNECTIVITY_LINK_LOSS, -+ LOG_MINOR_CONNECTIVITY_UNDERFLOW, -+ - }; - - union logger_flags { --- -2.7.4 - |