accel/ivpu: Fix PCI D0 state entry in resume
authorWachowski, Karol <karol.wachowski@intel.com>
Tue, 2 Apr 2024 10:49:24 +0000 (12:49 +0200)
committerJacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com>
Mon, 8 Apr 2024 08:54:11 +0000 (10:54 +0200)
In case of failed power up we end up left in PCI D3hot
state making it impossible to access NPU registers on retry.
Enter D0 state on retry before proceeding with power up sequence.

Fixes: 28083ff18d3f ("accel/ivpu: Fix DevTLB errors on suspend/resume and recovery")
Cc: <stable@vger.kernel.org> # v6.8+
Signed-off-by: Wachowski, Karol <karol.wachowski@intel.com>
Signed-off-by: Jacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com>
Reviewed-by: Jeffrey Hugo <quic_jhugo@quicinc.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240402104929.941186-4-jacek.lawrynowicz@linux.intel.com
drivers/accel/ivpu/ivpu_pm.c

index 9cbd7af6576b43761a8a891613ba8ba14e97e06f..325b82f8d971c2112ceb3c43718dc6cc307c89a8 100644 (file)
@@ -71,10 +71,10 @@ static int ivpu_resume(struct ivpu_device *vdev)
 {
        int ret;
 
-       pci_set_power_state(to_pci_dev(vdev->drm.dev), PCI_D0);
+retry:
        pci_restore_state(to_pci_dev(vdev->drm.dev));
+       pci_set_power_state(to_pci_dev(vdev->drm.dev), PCI_D0);
 
-retry:
        ret = ivpu_hw_power_up(vdev);
        if (ret) {
                ivpu_err(vdev, "Failed to power up HW: %d\n", ret);