Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

drm/amdgpu: move poll enabled/disable into non DC path

Some amd asics having reliable hotplug support don't call
drm_kms_helper_poll_init in driver init sequence. However,
due to the unified suspend/resume path for all asics, because
the output_poll_work->func is not set for these asics, a warning
arrives when suspending.

[ 90.656049] <TASK>
[ 90.656050] ? console_unlock+0x4d/0x100
[ 90.656053] ? __irq_work_queue_local+0x27/0x60
[ 90.656056] ? irq_work_queue+0x2b/0x50
[ 90.656057] ? __wake_up_klogd+0x40/0x60
[ 90.656059] __cancel_work_timer+0xed/0x180
[ 90.656061] drm_kms_helper_poll_disable.cold+0x1f/0x2c [drm_kms_helper]
[ 90.656072] amdgpu_device_suspend+0x81/0x170 [amdgpu]
[ 90.656180] amdgpu_pmops_runtime_suspend+0xb5/0x1b0 [amdgpu]
[ 90.656269] pci_pm_runtime_suspend+0x61/0x1b0

drm_kms_helper_poll_enable/disable is valid when poll_init is called in
amdgpu code, which is only used in non DC path. So move such codes into
non-DC path code to get rid of such warnings.

v1: introduce use_kms_poll flag in amdgpu as the poll stuff check
v2: use dc_enabled as the flag to simply code
v3: move code into non DC path instead of relying on any flag

Bug: https://gitlab.freedesktop.org/drm/amd/-/issues/2411
Fixes: a4e771729a51 ("drm/probe_helper: sort out poll_running vs poll_enabled")
Reported-by: Bert Karwatzki <spasswolf@web.de>
Suggested-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Suggested-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Guchun Chen <guchun.chen@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Guchun Chen and committed by
Alex Deucher
c69d5139 6ab68650

+4 -4
-4
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
··· 4151 4151 if (amdgpu_acpi_smart_shift_update(dev, AMDGPU_SS_DEV_D3)) 4152 4152 DRM_WARN("smart shift update failed\n"); 4153 4153 4154 - drm_kms_helper_poll_disable(dev); 4155 - 4156 4154 if (fbcon) 4157 4155 drm_fb_helper_set_suspend_unlocked(adev_to_drm(adev)->fb_helper, true); 4158 4156 ··· 4246 4248 4247 4249 if (fbcon) 4248 4250 drm_fb_helper_set_suspend_unlocked(adev_to_drm(adev)->fb_helper, false); 4249 - 4250 - drm_kms_helper_poll_enable(dev); 4251 4251 4252 4252 amdgpu_ras_resume(adev); 4253 4253
+4
drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
··· 1618 1618 struct drm_connector_list_iter iter; 1619 1619 int r; 1620 1620 1621 + drm_kms_helper_poll_disable(dev); 1622 + 1621 1623 /* turn off display hw */ 1622 1624 drm_modeset_lock_all(dev); 1623 1625 drm_connector_list_iter_begin(dev, &iter); ··· 1695 1693 drm_connector_list_iter_end(&iter); 1696 1694 1697 1695 drm_modeset_unlock_all(dev); 1696 + 1697 + drm_kms_helper_poll_enable(dev); 1698 1698 1699 1699 return 0; 1700 1700 }