diff options
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.patch | 83 |
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 + |