accel/ivpu: Refactor failure diagnostics during boot
authorKarol Wachowski <karol.wachowski@intel.com>
Mon, 30 Sep 2024 19:53:14 +0000 (21:53 +0200)
committerJacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com>
Fri, 11 Oct 2024 10:44:39 +0000 (12:44 +0200)
Move diagnostic functions to common error handling within ivpu_boot()
function to ensure diagnostics are gathered even in cases where NPU
fails after successful boot (DCT and HWS init failures).

Signed-off-by: Karol Wachowski <karol.wachowski@intel.com>
Reviewed-by: Jacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com>
Reviewed-by: Jeffrey Hugo <quic_jhugo@quicinc.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240930195322.461209-24-jacek.lawrynowicz@linux.intel.com
Signed-off-by: Jacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com>
drivers/accel/ivpu/ivpu_drv.c

index ffb8309..14c2412 100644 (file)
@@ -386,10 +386,7 @@ int ivpu_boot(struct ivpu_device *vdev)
        ret = ivpu_wait_for_ready(vdev);
        if (ret) {
                ivpu_err(vdev, "Failed to boot the firmware: %d\n", ret);
-               ivpu_hw_diagnose_failure(vdev);
-               ivpu_mmu_evtq_dump(vdev);
-               ivpu_dev_coredump(vdev);
-               return ret;
+               goto err_diagnose_failure;
        }
 
        ivpu_hw_irq_clear(vdev);
@@ -400,12 +397,20 @@ int ivpu_boot(struct ivpu_device *vdev)
        if (ivpu_fw_is_cold_boot(vdev)) {
                ret = ivpu_pm_dct_init(vdev);
                if (ret)
-                       return ret;
+                       goto err_diagnose_failure;
 
-               return ivpu_hw_sched_init(vdev);
+               ret = ivpu_hw_sched_init(vdev);
+               if (ret)
+                       goto err_diagnose_failure;
        }
 
        return 0;
+
+err_diagnose_failure:
+       ivpu_hw_diagnose_failure(vdev);
+       ivpu_mmu_evtq_dump(vdev);
+       ivpu_dev_coredump(vdev);
+       return ret;
 }
 
 void ivpu_prepare_for_reset(struct ivpu_device *vdev)