aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0890-drm-amd-dal-initial-framework-for-s3-debugging.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0890-drm-amd-dal-initial-framework-for-s3-debugging.patch')
-rw-r--r--common/recipes-kernel/linux/files/0890-drm-amd-dal-initial-framework-for-s3-debugging.patch83
1 files changed, 83 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0890-drm-amd-dal-initial-framework-for-s3-debugging.patch b/common/recipes-kernel/linux/files/0890-drm-amd-dal-initial-framework-for-s3-debugging.patch
new file mode 100644
index 00000000..9b43e81f
--- /dev/null
+++ b/common/recipes-kernel/linux/files/0890-drm-amd-dal-initial-framework-for-s3-debugging.patch
@@ -0,0 +1,83 @@
+From d9d03b7b657d80cf163e650f8c6afc60d114e6f7 Mon Sep 17 00:00:00 2001
+From: Mykola Lysenko <Mykola.Lysenko@amd.com>
+Date: Wed, 9 Mar 2016 05:45:11 -0500
+Subject: [PATCH 0890/1110] drm/amd/dal: initial framework for s3 debugging
+
+Adds sysfs driver property to trigger suspend/resume
+sequences, thus allow to debug through them w/o actual
+s3.
+
+E.g.
+
+will trigger suspend sequence and
+
+will trigger resume sequence.
+
+Currently it only supports DAL s3 sequences, but could be
+expanded to support whole driver sequence.
+
+Signed-off-by: Mykola Lysenko <Mykola.Lysenko@amd.com>
+Acked-by: Harry Wentland <harry.wentland@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm.c | 37 +++++++++++++++++++++++++++
+ 1 file changed, 37 insertions(+)
+
+diff --git a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm.c
+index 5bef63c..bf4ad69 100644
+--- a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm.c
++++ b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm.c
+@@ -1232,6 +1232,38 @@ static const struct amdgpu_display_funcs dm_dce_v11_0_display_funcs = {
+ .resume_mc_access = dce_v11_0_resume_mc_access, /* called unconditionally */
+ };
+
++#if defined(CONFIG_DEBUG_KERNEL_DAL)
++
++static ssize_t s3_debug_store(
++ struct device *device,
++ struct device_attribute *attr,
++ const char *buf,
++ size_t count)
++{
++ int ret;
++ int s3_state;
++ struct pci_dev *pdev = to_pci_dev(device);
++ struct drm_device *drm_dev = pci_get_drvdata(pdev);
++ struct amdgpu_device *adev = drm_dev->dev_private;
++
++ ret = kstrtoint(buf, 0, &s3_state);
++
++ if (ret == 0) {
++ if (s3_state) {
++ dm_resume(adev);
++ amdgpu_dm_display_resume(adev);
++ drm_kms_helper_hotplug_event(adev->ddev);
++ } else
++ dm_suspend(adev);
++ }
++
++ return ret == 0 ? count : 0;
++}
++
++DEVICE_ATTR_WO(s3_debug);
++
++#endif
++
+ static int dm_early_init(void *handle)
+ {
+ struct amdgpu_device *adev = (struct amdgpu_device *)handle;
+@@ -1279,6 +1311,11 @@ static int dm_early_init(void *handle)
+ /* Note: Do NOT change adev->audio_endpt_rreg and
+ * adev->audio_endpt_wreg because they are initialised in
+ * amdgpu_device_init() */
++#if defined(CONFIG_DEBUG_KERNEL_DAL)
++ device_create_file(
++ adev->ddev->dev,
++ &dev_attr_s3_debug);
++#endif
+
+ return 0;
+ }
+--
+2.7.4
+