aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.19.8/0229-drm-amd-display-Add-support-for-hw_state-logging-via.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/0229-drm-amd-display-Add-support-for-hw_state-logging-via.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.19.8/0229-drm-amd-display-Add-support-for-hw_state-logging-via.patch156
1 files changed, 156 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/0229-drm-amd-display-Add-support-for-hw_state-logging-via.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/0229-drm-amd-display-Add-support-for-hw_state-logging-via.patch
new file mode 100644
index 00000000..777dff45
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/0229-drm-amd-display-Add-support-for-hw_state-logging-via.patch
@@ -0,0 +1,156 @@
+From cde57a5ea143d794cff3b5b4f4063e666bd5db21 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 0229/2940] 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>
+---
+ .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 5 ++
+ .../amd/display/amdgpu_dm/amdgpu_dm_debugfs.c | 53 +++++++++++++++++++
+ .../amd/display/amdgpu_dm/amdgpu_dm_debugfs.h | 1 +
+ .../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 f230477bfdb1..71e6baa91c1a 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+@@ -480,6 +480,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 0d9e410ca01e..e79ac1e2c460 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 d9ed1b2aa811..bdef1587b0a0 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 8403b6a9a77b..86b63ce1dbf6 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.17.1
+