Skip to content

Commit a06eb9b

Browse files
author
Stanislaw Gruszka
committed
accel/ivpu: Assure device is off if power up sequence fail
We should not leave device half enabled if there is failure somewhere it power up sequence. Fix device init and resume paths. Reviewed-by: Karol Wachowski <karol.wachowski@linux.intel.com> Signed-off-by: Stanislaw Gruszka <stanislaw.gruszka@linux.intel.com> Reviewed-by: Jeffrey Hugo <quic_jhugo@quicinc.com> Link: https://patchwork.freedesktop.org/patch/msgid/20231028155936.1183342-3-stanislaw.gruszka@linux.intel.com
1 parent bfc87f9 commit a06eb9b

File tree

2 files changed

+18
-14
lines changed

2 files changed

+18
-14
lines changed

drivers/accel/ivpu/ivpu_drv.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -543,7 +543,7 @@ static int ivpu_dev_init(struct ivpu_device *vdev)
543543
/* Power up early so the rest of init code can access VPU registers */
544544
ret = ivpu_hw_power_up(vdev);
545545
if (ret)
546-
goto err_xa_destroy;
546+
goto err_power_down;
547547

548548
ret = ivpu_mmu_global_context_init(vdev);
549549
if (ret)

drivers/accel/ivpu/ivpu_pm.c

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -70,27 +70,31 @@ static int ivpu_resume(struct ivpu_device *vdev)
7070
ret = ivpu_hw_power_up(vdev);
7171
if (ret) {
7272
ivpu_err(vdev, "Failed to power up HW: %d\n", ret);
73-
return ret;
73+
goto err_power_down;
7474
}
7575

7676
ret = ivpu_mmu_enable(vdev);
7777
if (ret) {
7878
ivpu_err(vdev, "Failed to resume MMU: %d\n", ret);
79-
ivpu_hw_power_down(vdev);
80-
return ret;
79+
goto err_power_down;
8180
}
8281

8382
ret = ivpu_boot(vdev);
84-
if (ret) {
85-
ivpu_mmu_disable(vdev);
86-
ivpu_hw_power_down(vdev);
87-
if (!ivpu_fw_is_cold_boot(vdev)) {
88-
ivpu_warn(vdev, "Failed to resume the FW: %d. Retrying cold boot..\n", ret);
89-
ivpu_pm_prepare_cold_boot(vdev);
90-
goto retry;
91-
} else {
92-
ivpu_err(vdev, "Failed to resume the FW: %d\n", ret);
93-
}
83+
if (ret)
84+
goto err_mmu_disable;
85+
86+
return 0;
87+
88+
err_mmu_disable:
89+
ivpu_mmu_disable(vdev);
90+
err_power_down:
91+
ivpu_hw_power_down(vdev);
92+
93+
if (!ivpu_fw_is_cold_boot(vdev)) {
94+
ivpu_pm_prepare_cold_boot(vdev);
95+
goto retry;
96+
} else {
97+
ivpu_err(vdev, "Failed to resume the FW: %d\n", ret);
9498
}
9599

96100
return ret;

0 commit comments

Comments
 (0)