diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/5251-drm-amd-display-Add-support-for-hw_state-logging-via.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.14.71/5251-drm-amd-display-Add-support-for-hw_state-logging-via.patch | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/5251-drm-amd-display-Add-support-for-hw_state-logging-via.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/5251-drm-amd-display-Add-support-for-hw_state-logging-via.patch new file mode 100644 index 00000000..5fc369a9 --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/5251-drm-amd-display-Add-support-for-hw_state-logging-via.patch @@ -0,0 +1,156 @@ +From 0976843058799c347b6f9f7c9d38b4508356d296 Mon Sep 17 00:00:00 2001 +From: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> +Date: Tue, 14 Aug 2018 15:40:57 -0400 +Subject: [PATCH 5251/5725] drm/amd/display: Add support for hw_state logging + via debugfs + +[Why] + +We have logging methods for printing hardware state for newer ASICs +but no way to trigger the log output. + +[How] + +Add support for triggering the output via writing to a debugfs file +entry. Log output currently goes into dmesg for convenience, but +accessing via a read should be possible later. + +Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> +Reviewed-by: Jordan Lazare <Jordan.Lazare@amd.com> +Acked-by: Leo Li <sunpeng.li@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 5 ++ + .../drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c | 53 ++++++++++++++++++++++ + .../drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.h | 1 + + .../drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c | 22 +++++++-- + 4 files changed, 77 insertions(+), 4 deletions(-) + +diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +index 9b6dd67..7b27d39 100644 +--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c ++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +@@ -481,6 +481,11 @@ static int amdgpu_dm_init(struct amdgpu_device *adev) + goto error; + } + ++#if defined(CONFIG_DEBUG_FS) ++ if (dtn_debugfs_init(adev)) ++ DRM_ERROR("amdgpu: failed initialize dtn debugfs support.\n"); ++#endif ++ + DRM_DEBUG_DRIVER("KMS initialized.\n"); + + return 0; +diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c +index 0d9e410..e79ac1e 100644 +--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c ++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c +@@ -720,3 +720,56 @@ int connector_debugfs_init(struct amdgpu_dm_connector *connector) + return 0; + } + ++static ssize_t dtn_log_read( ++ struct file *f, ++ char __user *buf, ++ size_t size, ++ loff_t *pos) ++{ ++ /* TODO: Write log output to the user supplied buffer. */ ++ return 0; ++} ++ ++static ssize_t dtn_log_write( ++ struct file *f, ++ const char __user *buf, ++ size_t size, ++ loff_t *pos) ++{ ++ struct amdgpu_device *adev = file_inode(f)->i_private; ++ struct dc *dc = adev->dm.dc; ++ ++ /* Write triggers log output via dmesg. */ ++ if (size == 0) ++ return 0; ++ ++ if (dc->hwss.log_hw_state) ++ dc->hwss.log_hw_state(dc); ++ ++ return size; ++} ++ ++int dtn_debugfs_init(struct amdgpu_device *adev) ++{ ++ static const struct file_operations dtn_log_fops = { ++ .owner = THIS_MODULE, ++ .read = dtn_log_read, ++ .write = dtn_log_write, ++ .llseek = default_llseek ++ }; ++ ++ struct drm_minor *minor = adev->ddev->primary; ++ struct dentry *root = minor->debugfs_root; ++ ++ struct dentry *ent = debugfs_create_file( ++ "amdgpu_dm_dtn_log", ++ 0644, ++ root, ++ adev, ++ &dtn_log_fops); ++ ++ if (IS_ERR(ent)) ++ return PTR_ERR(ent); ++ ++ return 0; ++} +diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.h b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.h +index d9ed1b2..bdef158 100644 +--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.h ++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.h +@@ -30,5 +30,6 @@ + #include "amdgpu_dm.h" + + int connector_debugfs_init(struct amdgpu_dm_connector *connector); ++int dtn_debugfs_init(struct amdgpu_device *adev); + + #endif +diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c +index d1ce925..cd5e991 100644 +--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c ++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c +@@ -336,14 +336,28 @@ bool dm_helpers_dp_mst_send_payload_allocation( + } + + void dm_dtn_log_begin(struct dc_context *ctx) +-{} ++{ ++ pr_info("[dtn begin]\n"); ++} + + void dm_dtn_log_append_v(struct dc_context *ctx, +- const char *pMsg, ...) +-{} ++ const char *msg, ...) ++{ ++ struct va_format vaf; ++ va_list args; ++ ++ va_start(args, msg); ++ vaf.fmt = msg; ++ vaf.va = &args; ++ ++ pr_info("%pV", &vaf); ++ va_end(args); ++} + + void dm_dtn_log_end(struct dc_context *ctx) +-{} ++{ ++ pr_info("[dtn end]\n"); ++} + + bool dm_helpers_dp_mst_start_top_mgr( + struct dc_context *ctx, +-- +2.7.4 + |