From: Dafna Hirschfeld <dhirschf...@habana.ai>

We later use cpucp packet for soft reset which might fail
so we should be able propagate the failure case.

Signed-off-by: Dafna Hirschfeld <dhirschf...@habana.ai>
Reviewed-by: Oded Gabbay <ogab...@kernel.org>
Signed-off-by: Oded Gabbay <ogab...@kernel.org>
---
 drivers/accel/habanalabs/common/habanalabs.h | 2 +-
 drivers/accel/habanalabs/gaudi/gaudi.c       | 5 +++--
 drivers/accel/habanalabs/gaudi2/gaudi2.c     | 5 +++--
 drivers/accel/habanalabs/goya/goya.c         | 5 +++--
 4 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/drivers/accel/habanalabs/common/habanalabs.h 
b/drivers/accel/habanalabs/common/habanalabs.h
index de4ff525cbcb..597c7f1037d1 100644
--- a/drivers/accel/habanalabs/common/habanalabs.h
+++ b/drivers/accel/habanalabs/common/habanalabs.h
@@ -1576,7 +1576,7 @@ struct hl_asic_funcs {
        int (*sw_init)(struct hl_device *hdev);
        int (*sw_fini)(struct hl_device *hdev);
        int (*hw_init)(struct hl_device *hdev);
-       void (*hw_fini)(struct hl_device *hdev, bool hard_reset, bool fw_reset);
+       int (*hw_fini)(struct hl_device *hdev, bool hard_reset, bool fw_reset);
        void (*halt_engines)(struct hl_device *hdev, bool hard_reset, bool 
fw_reset);
        int (*suspend)(struct hl_device *hdev);
        int (*resume)(struct hl_device *hdev);
diff --git a/drivers/accel/habanalabs/gaudi/gaudi.c 
b/drivers/accel/habanalabs/gaudi/gaudi.c
index a276a2a4a46d..26287084a9e0 100644
--- a/drivers/accel/habanalabs/gaudi/gaudi.c
+++ b/drivers/accel/habanalabs/gaudi/gaudi.c
@@ -4069,7 +4069,7 @@ static int gaudi_hw_init(struct hl_device *hdev)
        return rc;
 }
 
-static void gaudi_hw_fini(struct hl_device *hdev, bool hard_reset, bool 
fw_reset)
+static int gaudi_hw_fini(struct hl_device *hdev, bool hard_reset, bool 
fw_reset)
 {
        struct cpu_dyn_regs *dyn_regs =
                        &hdev->fw_loader.dynamic_loader.comm_desc.cpu_dyn_regs;
@@ -4079,7 +4079,7 @@ static void gaudi_hw_fini(struct hl_device *hdev, bool 
hard_reset, bool fw_reset
 
        if (!hard_reset) {
                dev_err(hdev->dev, "GAUDI doesn't support soft-reset\n");
-               return;
+               return 0;
        }
 
        if (hdev->pldm) {
@@ -4216,6 +4216,7 @@ static void gaudi_hw_fini(struct hl_device *hdev, bool 
hard_reset, bool fw_reset
 
                hdev->device_cpu_is_halted = false;
        }
+       return 0;
 }
 
 static int gaudi_suspend(struct hl_device *hdev)
diff --git a/drivers/accel/habanalabs/gaudi2/gaudi2.c 
b/drivers/accel/habanalabs/gaudi2/gaudi2.c
index 2f51a121909b..5a225f23961b 100644
--- a/drivers/accel/habanalabs/gaudi2/gaudi2.c
+++ b/drivers/accel/habanalabs/gaudi2/gaudi2.c
@@ -5885,7 +5885,7 @@ static void gaudi2_get_soft_rst_done_indication(struct 
hl_device *hdev, u32 poll
                                reg_val);
 }
 
-static void gaudi2_hw_fini(struct hl_device *hdev, bool hard_reset, bool 
fw_reset)
+static int gaudi2_hw_fini(struct hl_device *hdev, bool hard_reset, bool 
fw_reset)
 {
        struct gaudi2_device *gaudi2 = hdev->asic_specific;
        u32 poll_timeout_us, reset_sleep_ms;
@@ -5951,7 +5951,7 @@ static void gaudi2_hw_fini(struct hl_device *hdev, bool 
hard_reset, bool fw_rese
                gaudi2_get_soft_rst_done_indication(hdev, poll_timeout_us);
 
        if (!gaudi2)
-               return;
+               return 0;
 
        gaudi2->dec_hw_cap_initialized &= ~(HW_CAP_DEC_MASK);
        gaudi2->tpc_hw_cap_initialized &= ~(HW_CAP_TPC_MASK);
@@ -5978,6 +5978,7 @@ static void gaudi2_hw_fini(struct hl_device *hdev, bool 
hard_reset, bool fw_rese
                        HW_CAP_PDMA_MASK | HW_CAP_EDMA_MASK | HW_CAP_MME_MASK |
                        HW_CAP_ROT_MASK);
        }
+       return 0;
 }
 
 static int gaudi2_suspend(struct hl_device *hdev)
diff --git a/drivers/accel/habanalabs/goya/goya.c 
b/drivers/accel/habanalabs/goya/goya.c
index c5a22a8e0957..7a45ab3ca43a 100644
--- a/drivers/accel/habanalabs/goya/goya.c
+++ b/drivers/accel/habanalabs/goya/goya.c
@@ -2783,7 +2783,7 @@ static int goya_hw_init(struct hl_device *hdev)
        return rc;
 }
 
-static void goya_hw_fini(struct hl_device *hdev, bool hard_reset, bool 
fw_reset)
+static int goya_hw_fini(struct hl_device *hdev, bool hard_reset, bool fw_reset)
 {
        struct goya_device *goya = hdev->asic_specific;
        u32 reset_timeout_ms, cpu_timeout_ms, status;
@@ -2839,7 +2839,7 @@ static void goya_hw_fini(struct hl_device *hdev, bool 
hard_reset, bool fw_reset)
                                                HW_CAP_GOLDEN | HW_CAP_TPC);
                WREG32(mmGIC_DISTRIBUTOR__5_GICD_SETSPI_NSR,
                                GOYA_ASYNC_EVENT_ID_SOFT_RESET);
-               return;
+               return 0;
        }
 
        /* Chicken bit to re-initiate boot sequencer flow */
@@ -2858,6 +2858,7 @@ static void goya_hw_fini(struct hl_device *hdev, bool 
hard_reset, bool fw_reset)
 
                memset(goya->events_stat, 0, sizeof(goya->events_stat));
        }
+       return 0;
 }
 
 int goya_suspend(struct hl_device *hdev)
-- 
2.25.1

Reply via email to