diff mbox series

[2/3] accel/ivpu: Clear runtime_error after pm_runtime_resume_and_get() fails

Message ID 20250129124009.1039982-3-jacek.lawrynowicz@linux.intel.com (mailing list archive)
State New
Headers show
Series accel/ivpu: Fixes for 6.14 | expand

Commit Message

Jacek Lawrynowicz Jan. 29, 2025, 12:40 p.m. UTC
pm_runtime_resume_and_get() sets dev->power.runtime_error that causes
all subsequent pm_runtime_get_sync() calls to fail.
Clear the runtime_error using pm_runtime_set_suspended(), so the driver
doesn't have to be reloaded to recover when the NPU fails to boot during
runtime resume.

Fixes: 7d4b4c74432d ("accel/ivpu: Remove suspend_reschedule_counter")
Cc: <stable@vger.kernel.org> # v6.11+
Reviewed-by: Maciej Falkowski <maciej.falkowski@linux.intel.com>
Signed-off-by: Jacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com>
---
 drivers/accel/ivpu/ivpu_pm.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

Comments

Jeffrey Hugo Jan. 31, 2025, 6:27 p.m. UTC | #1
On 1/29/2025 5:40 AM, Jacek Lawrynowicz wrote:
> pm_runtime_resume_and_get() sets dev->power.runtime_error that causes
> all subsequent pm_runtime_get_sync() calls to fail.
> Clear the runtime_error using pm_runtime_set_suspended(), so the driver
> doesn't have to be reloaded to recover when the NPU fails to boot during
> runtime resume.
> 
> Fixes: 7d4b4c74432d ("accel/ivpu: Remove suspend_reschedule_counter")
> Cc: <stable@vger.kernel.org> # v6.11+
> Reviewed-by: Maciej Falkowski <maciej.falkowski@linux.intel.com>
> Signed-off-by: Jacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com>
> ---

Reviewed-by: Jeffrey Hugo <quic_jhugo@quicinc.com>
diff mbox series

Patch

diff --git a/drivers/accel/ivpu/ivpu_pm.c b/drivers/accel/ivpu/ivpu_pm.c
index 949f4233946c6..c3774d2221326 100644
--- a/drivers/accel/ivpu/ivpu_pm.c
+++ b/drivers/accel/ivpu/ivpu_pm.c
@@ -309,7 +309,10 @@  int ivpu_rpm_get(struct ivpu_device *vdev)
 	int ret;
 
 	ret = pm_runtime_resume_and_get(vdev->drm.dev);
-	drm_WARN_ON(&vdev->drm, ret < 0);
+	if (ret < 0) {
+		ivpu_err(vdev, "Failed to resume NPU: %d\n", ret);
+		pm_runtime_set_suspended(vdev->drm.dev);
+	}
 
 	return ret;
 }