diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/0697-drm-amd-dal-Add-simple-logger-of-DPCD-tx-rx-traffic.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/0697-drm-amd-dal-Add-simple-logger-of-DPCD-tx-rx-traffic.patch | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0697-drm-amd-dal-Add-simple-logger-of-DPCD-tx-rx-traffic.patch b/common/recipes-kernel/linux/files/0697-drm-amd-dal-Add-simple-logger-of-DPCD-tx-rx-traffic.patch new file mode 100644 index 00000000..a8dacb2a --- /dev/null +++ b/common/recipes-kernel/linux/files/0697-drm-amd-dal-Add-simple-logger-of-DPCD-tx-rx-traffic.patch @@ -0,0 +1,104 @@ +From 0df59f35855ec8c33bfe7e3ab6a9b592d6e20860 Mon Sep 17 00:00:00 2001 +From: Andrey Grodzovsky <Andrey.Grodzovsky@amd.com> +Date: Sat, 16 Jan 2016 00:18:36 -0500 +Subject: [PATCH 0697/1110] drm/amd/dal: Add simple logger of DPCD tx/rx + traffic. + +Signed-off-by: Andrey Grodzovsky <Andrey.Grodzovsky@amd.com> +Acked-by: Jordan Lazare <Jordan.Lazare@amd.com> +--- + .../drm/amd/dal/amdgpu_dm/amdgpu_dm_mst_types.c | 55 +++++++++++++++++++++- + 1 file changed, 53 insertions(+), 2 deletions(-) + +diff --git a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_mst_types.c b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_mst_types.c +index aeab396..fe5e366 100644 +--- a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_mst_types.c ++++ b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_mst_types.c +@@ -31,16 +31,59 @@ + #include "dc.h" + #include "dc_helpers.h" + ++/* #define TRACE_DPCD */ ++ ++#ifdef TRACE_DPCD ++#define SIDE_BAND_MSG(address) (address >= DP_SIDEBAND_MSG_DOWN_REQ_BASE && address < DP_SINK_COUNT_ESI) ++ ++static inline char *side_band_msg_type_to_str(uint32_t address) ++{ ++ static char str[10] = {0}; ++ ++ if (address < DP_SIDEBAND_MSG_UP_REP_BASE) ++ strcpy(str, "DOWN_REQ"); ++ else if (address < DP_SIDEBAND_MSG_DOWN_REP_BASE) ++ strcpy(str, "UP_REP"); ++ else if (address < DP_SIDEBAND_MSG_UP_REQ_BASE) ++ strcpy(str, "DOWN_REP"); ++ else ++ strcpy(str, "UP_REQ"); ++ ++ return str; ++} ++ ++void log_dpcd(uint8_t type, ++ uint32_t address, ++ uint8_t *data, ++ uint32_t size, ++ bool res) ++{ ++ DRM_DEBUG_KMS("Op: %s, addr: %04x, SideBand Msg: %s, Op res: %s\n", ++ (type == DP_AUX_NATIVE_READ) || ++ (type == DP_AUX_I2C_READ) ? ++ "Read" : "Write", ++ address, ++ SIDE_BAND_MSG(address) ? ++ side_band_msg_type_to_str(address) : "Nop", ++ res ? "OK" : "Fail"); ++ ++ if (res) { ++ print_hex_dump(KERN_INFO, "Body: ", DUMP_PREFIX_NONE, 16, 1, data, size, false); ++ } ++} ++#endif ++ + static ssize_t dm_dp_aux_transfer(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg) + { + struct pci_dev *pdev = to_pci_dev(aux->dev); + struct drm_device *drm_dev = pci_get_drvdata(pdev); + struct amdgpu_device *adev = drm_dev->dev_private; + struct dc *dc = adev->dm.dc; ++ bool res; + + switch (msg->request) { + case DP_AUX_NATIVE_READ: +- dc_read_dpcd( ++ res = dc_read_dpcd( + dc, + TO_DM_AUX(aux)->link_index, + msg->address, +@@ -48,7 +91,7 @@ static ssize_t dm_dp_aux_transfer(struct drm_dp_aux *aux, struct drm_dp_aux_msg + msg->size); + break; + case DP_AUX_NATIVE_WRITE: +- dc_write_dpcd( ++ res = dc_write_dpcd( + dc, + TO_DM_AUX(aux)->link_index, + msg->address, +@@ -59,6 +102,14 @@ static ssize_t dm_dp_aux_transfer(struct drm_dp_aux *aux, struct drm_dp_aux_msg + return 0; + } + ++#ifdef TRACE_DPCD ++ log_dpcd(msg->request, ++ msg->address, ++ msg->buffer, ++ msg->size, ++ res); ++#endif ++ + return msg->size; + } + +-- +2.7.4 + |