Commit 5e09ae92 authored by Dafna Hirschfeld's avatar Dafna Hirschfeld Committed by Oded Gabbay

accel/habanalabs: change hw_fini to return int to indicate error

We later use cpucp packet for soft reset which might fail
so we should be able propagate the failure case.
Signed-off-by: default avatarDafna Hirschfeld <dhirschfeld@habana.ai>
Reviewed-by: default avatarOded Gabbay <ogabbay@kernel.org>
Signed-off-by: default avatarOded Gabbay <ogabbay@kernel.org>
Reviewed-by: default avatarStanislaw Gruszka <stanislaw.gruszka@linux.intel.com>
parent a8c14f53
...@@ -1576,7 +1576,7 @@ struct hl_asic_funcs { ...@@ -1576,7 +1576,7 @@ struct hl_asic_funcs {
int (*sw_init)(struct hl_device *hdev); int (*sw_init)(struct hl_device *hdev);
int (*sw_fini)(struct hl_device *hdev); int (*sw_fini)(struct hl_device *hdev);
int (*hw_init)(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); void (*halt_engines)(struct hl_device *hdev, bool hard_reset, bool fw_reset);
int (*suspend)(struct hl_device *hdev); int (*suspend)(struct hl_device *hdev);
int (*resume)(struct hl_device *hdev); int (*resume)(struct hl_device *hdev);
......
...@@ -4069,7 +4069,7 @@ static int gaudi_hw_init(struct hl_device *hdev) ...@@ -4069,7 +4069,7 @@ static int gaudi_hw_init(struct hl_device *hdev)
return rc; 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 = struct cpu_dyn_regs *dyn_regs =
&hdev->fw_loader.dynamic_loader.comm_desc.cpu_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 ...@@ -4079,7 +4079,7 @@ static void gaudi_hw_fini(struct hl_device *hdev, bool hard_reset, bool fw_reset
if (!hard_reset) { if (!hard_reset) {
dev_err(hdev->dev, "GAUDI doesn't support soft-reset\n"); dev_err(hdev->dev, "GAUDI doesn't support soft-reset\n");
return; return 0;
} }
if (hdev->pldm) { if (hdev->pldm) {
...@@ -4216,6 +4216,7 @@ static void gaudi_hw_fini(struct hl_device *hdev, bool hard_reset, bool fw_reset ...@@ -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; hdev->device_cpu_is_halted = false;
} }
return 0;
} }
static int gaudi_suspend(struct hl_device *hdev) static int gaudi_suspend(struct hl_device *hdev)
......
...@@ -5885,7 +5885,7 @@ static void gaudi2_get_soft_rst_done_indication(struct hl_device *hdev, u32 poll ...@@ -5885,7 +5885,7 @@ static void gaudi2_get_soft_rst_done_indication(struct hl_device *hdev, u32 poll
reg_val); 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; struct gaudi2_device *gaudi2 = hdev->asic_specific;
u32 poll_timeout_us, reset_sleep_ms; 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 ...@@ -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); gaudi2_get_soft_rst_done_indication(hdev, poll_timeout_us);
if (!gaudi2) if (!gaudi2)
return; return 0;
gaudi2->dec_hw_cap_initialized &= ~(HW_CAP_DEC_MASK); gaudi2->dec_hw_cap_initialized &= ~(HW_CAP_DEC_MASK);
gaudi2->tpc_hw_cap_initialized &= ~(HW_CAP_TPC_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 ...@@ -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_PDMA_MASK | HW_CAP_EDMA_MASK | HW_CAP_MME_MASK |
HW_CAP_ROT_MASK); HW_CAP_ROT_MASK);
} }
return 0;
} }
static int gaudi2_suspend(struct hl_device *hdev) static int gaudi2_suspend(struct hl_device *hdev)
......
...@@ -2783,7 +2783,7 @@ static int goya_hw_init(struct hl_device *hdev) ...@@ -2783,7 +2783,7 @@ static int goya_hw_init(struct hl_device *hdev)
return rc; 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; struct goya_device *goya = hdev->asic_specific;
u32 reset_timeout_ms, cpu_timeout_ms, status; 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) ...@@ -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); HW_CAP_GOLDEN | HW_CAP_TPC);
WREG32(mmGIC_DISTRIBUTOR__5_GICD_SETSPI_NSR, WREG32(mmGIC_DISTRIBUTOR__5_GICD_SETSPI_NSR,
GOYA_ASYNC_EVENT_ID_SOFT_RESET); GOYA_ASYNC_EVENT_ID_SOFT_RESET);
return; return 0;
} }
/* Chicken bit to re-initiate boot sequencer flow */ /* 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) ...@@ -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)); memset(goya->events_stat, 0, sizeof(goya->events_stat));
} }
return 0;
} }
int goya_suspend(struct hl_device *hdev) int goya_suspend(struct hl_device *hdev)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment