The amdgpu_mes_dbgext debugfs write handler programs CPC_INT_CNTL and
sends MISC packets to the MES without holding a runtime PM reference.
If the GPU is runtime suspended the MES never answers, so enabling the
log fails:
amdgpu 0000:03:00.0: MES failed to respond to msg=MISC fence_wait_ret=0
status=0x0
amdgpu 0000:03:00.0: failed to setup mes_dbgext in FW on xcc0 (-110)
and the write returns -ETIMEDOUT.
Resume the GPU before starting or stopping the log.
Fixes: 21593a22a09a ("drm/amdgpu: add mes_dbgext core support")
Signed-off-by: Jesse Zhang <[email protected]>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c
b/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c
index 8d813c68450b..b93b4be05178 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c
@@ -23,6 +23,7 @@
#include <linux/firmware.h>
#include <linux/kthread.h>
+#include <linux/pm_runtime.h>
#include <linux/delay.h>
#include <linux/sizes.h>
#include <linux/slab.h>
@@ -1955,6 +1956,13 @@ static ssize_t amdgpu_debugfs_mes_dbgext_write(struct
file *file,
if (!mes->funcs || !mes->funcs->misc_op)
return -EOPNOTSUPP;
+ /* Arming and detaching the firmware talks to the MES. */
+ PM_RUNTIME_ACQUIRE_IF_ENABLED_AUTOSUSPEND(adev->dev, pm);
+
+ r = PM_RUNTIME_ACQUIRE_ERR(&pm);
+ if (r)
+ return r;
+
mutex_lock(&mes->dbgext_lock);
if (enable) {
mes->dbgext_runtime_kb = amdgpu_mes_dbgext_buffer_size ?
--
2.50.1