Commit f8d139a7 authored by Dafna Hirschfeld's avatar Dafna Hirschfeld Committed by Oded Gabbay

accel/habanalabs: fix use of var reset_sleep_ms

- remove reset_sleep_ms arg from functions that don't use it.
- move the call msleep(reset_sleep_ms) from btm poll to gaudi2_hw_fini
as it is called from there already for other flow.
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>
parent 077a39fa
...@@ -6014,11 +6014,10 @@ static void gaudi2_send_hard_reset_cmd(struct hl_device *hdev) ...@@ -6014,11 +6014,10 @@ static void gaudi2_send_hard_reset_cmd(struct hl_device *hdev)
* gaudi2_execute_hard_reset - execute hard reset by driver/FW * gaudi2_execute_hard_reset - execute hard reset by driver/FW
* *
* @hdev: pointer to the habanalabs device structure * @hdev: pointer to the habanalabs device structure
* @reset_sleep_ms: sleep time in msec after reset
* *
* This function executes hard reset based on if driver/FW should do the reset * This function executes hard reset based on if driver/FW should do the reset
*/ */
static void gaudi2_execute_hard_reset(struct hl_device *hdev, u32 reset_sleep_ms) static void gaudi2_execute_hard_reset(struct hl_device *hdev)
{ {
if (hdev->asic_prop.hard_reset_done_by_fw) { if (hdev->asic_prop.hard_reset_done_by_fw) {
gaudi2_send_hard_reset_cmd(hdev); gaudi2_send_hard_reset_cmd(hdev);
...@@ -6060,14 +6059,13 @@ static int gaudi2_get_soft_rst_done_indication(struct hl_device *hdev, u32 poll_ ...@@ -6060,14 +6059,13 @@ static int gaudi2_get_soft_rst_done_indication(struct hl_device *hdev, u32 poll_
* gaudi2_execute_soft_reset - execute soft reset by driver/FW * gaudi2_execute_soft_reset - execute soft reset by driver/FW
* *
* @hdev: pointer to the habanalabs device structure * @hdev: pointer to the habanalabs device structure
* @reset_sleep_ms: sleep time in msec after reset
* @driver_performs_reset: true if driver should perform reset instead of f/w. * @driver_performs_reset: true if driver should perform reset instead of f/w.
* @poll_timeout_us: time to wait for response from f/w. * @poll_timeout_us: time to wait for response from f/w.
* *
* This function executes soft reset based on if driver/FW should do the reset * This function executes soft reset based on if driver/FW should do the reset
*/ */
static int gaudi2_execute_soft_reset(struct hl_device *hdev, u32 reset_sleep_ms, static int gaudi2_execute_soft_reset(struct hl_device *hdev, bool driver_performs_reset,
bool driver_performs_reset, u32 poll_timeout_us) u32 poll_timeout_us)
{ {
struct cpu_dyn_regs *dyn_regs = &hdev->fw_loader.dynamic_loader.comm_desc.cpu_dyn_regs; struct cpu_dyn_regs *dyn_regs = &hdev->fw_loader.dynamic_loader.comm_desc.cpu_dyn_regs;
...@@ -6099,15 +6097,11 @@ static int gaudi2_execute_soft_reset(struct hl_device *hdev, u32 reset_sleep_ms, ...@@ -6099,15 +6097,11 @@ static int gaudi2_execute_soft_reset(struct hl_device *hdev, u32 reset_sleep_ms,
return 0; return 0;
} }
static void gaudi2_poll_btm_indication(struct hl_device *hdev, u32 reset_sleep_ms, static void gaudi2_poll_btm_indication(struct hl_device *hdev, u32 poll_timeout_us)
u32 poll_timeout_us)
{ {
int i, rc = 0; int i, rc = 0;
u32 reg_val; u32 reg_val;
/* without this sleep reset will not work */
msleep(reset_sleep_ms);
/* We poll the BTM done indication multiple times after reset due to /* We poll the BTM done indication multiple times after reset due to
* a HW errata 'GAUDI2_0300' * a HW errata 'GAUDI2_0300'
*/ */
...@@ -6129,6 +6123,7 @@ static int gaudi2_hw_fini(struct hl_device *hdev, bool hard_reset, bool fw_reset ...@@ -6129,6 +6123,7 @@ 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;
bool driver_performs_reset = false; bool driver_performs_reset = false;
int rc;
if (hdev->pldm) { if (hdev->pldm) {
reset_sleep_ms = hard_reset ? GAUDI2_PLDM_HRESET_TIMEOUT_MSEC : reset_sleep_ms = hard_reset ? GAUDI2_PLDM_HRESET_TIMEOUT_MSEC :
...@@ -6146,7 +6141,7 @@ static int gaudi2_hw_fini(struct hl_device *hdev, bool hard_reset, bool fw_reset ...@@ -6146,7 +6141,7 @@ static int gaudi2_hw_fini(struct hl_device *hdev, bool hard_reset, bool fw_reset
if (hard_reset) { if (hard_reset) {
driver_performs_reset = !hdev->asic_prop.hard_reset_done_by_fw; driver_performs_reset = !hdev->asic_prop.hard_reset_done_by_fw;
gaudi2_execute_hard_reset(hdev, reset_sleep_ms); gaudi2_execute_hard_reset(hdev);
} else { } else {
/* /*
* As we have to support also work with preboot only (which does not supports * As we have to support also work with preboot only (which does not supports
...@@ -6156,8 +6151,9 @@ static int gaudi2_hw_fini(struct hl_device *hdev, bool hard_reset, bool fw_reset ...@@ -6156,8 +6151,9 @@ static int gaudi2_hw_fini(struct hl_device *hdev, bool hard_reset, bool fw_reset
*/ */
driver_performs_reset = (hdev->fw_components == FW_TYPE_PREBOOT_CPU && driver_performs_reset = (hdev->fw_components == FW_TYPE_PREBOOT_CPU &&
!hdev->asic_prop.fw_security_enabled); !hdev->asic_prop.fw_security_enabled);
gaudi2_execute_soft_reset(hdev, reset_sleep_ms, driver_performs_reset, rc = gaudi2_execute_soft_reset(hdev, driver_performs_reset, poll_timeout_us);
poll_timeout_us); if (rc)
return rc;
} }
skip_reset: skip_reset:
...@@ -6181,12 +6177,14 @@ static int gaudi2_hw_fini(struct hl_device *hdev, bool hard_reset, bool fw_reset ...@@ -6181,12 +6177,14 @@ static int gaudi2_hw_fini(struct hl_device *hdev, bool hard_reset, bool fw_reset
* communicate with FW that is during reset. * communicate with FW that is during reset.
* to overcome this we will always wait to preboot ready indication * to overcome this we will always wait to preboot ready indication
*/ */
if ((hdev->fw_components & FW_TYPE_PREBOOT_CPU)) {
msleep(reset_sleep_ms); /* without this sleep reset will not work */
msleep(reset_sleep_ms);
if (hdev->fw_components & FW_TYPE_PREBOOT_CPU)
hl_fw_wait_preboot_ready(hdev); hl_fw_wait_preboot_ready(hdev);
} else { else
gaudi2_poll_btm_indication(hdev, reset_sleep_ms, poll_timeout_us); gaudi2_poll_btm_indication(hdev, poll_timeout_us);
}
} }
if (!gaudi2) if (!gaudi2)
......
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