diff options
| author | Yuanyuan Liu <yuanliu@codeaurora.org> | 2016-10-24 10:13:48 -0700 |
|---|---|---|
| committer | Yuanyuan Liu <yuanliu@codeaurora.org> | 2016-10-24 16:42:57 -0700 |
| commit | 0b2474a9bfd7d39e4a3158696d7fa0041a45b894 (patch) | |
| tree | aad1b0bb379774e13bb9662bf6d9c4aa2dbcb5be | |
| parent | 46aa49c1188a77f52dc4969f82292c176d8f399b (diff) | |
icnss: Do top level reset when timeout to pull register state
When system timeouts to pull register state, we do wsi error
recovery, which causes an AHB bus hang. Fix this by doing top
level reset instead of wsi error recovery.
CRs-Fixed: 1080014
Change-Id: Ic5dbac9c2cd31f3193ede7cdc64249f7514e3e98
Signed-off-by: Yuanyuan Liu <yuanliu@codeaurora.org>
| -rw-r--r-- | drivers/soc/qcom/icnss.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/drivers/soc/qcom/icnss.c b/drivers/soc/qcom/icnss.c index 5e7f5c8bd2a1..c1c80bc135cc 100644 --- a/drivers/soc/qcom/icnss.c +++ b/drivers/soc/qcom/icnss.c @@ -1318,7 +1318,7 @@ static int icnss_hw_reset_rf_reset_cmd(struct icnss_priv *priv) if (ret) { icnss_pr_err("RESET: RF reset command failed, state: 0x%lx\n", priv->state); - icnss_hw_wsi_cmd_error_recovery(priv); + return ret; } icnss_hw_write_reg_field(priv->mem_base_va, PMM_WSI_CMD_OFFSET, @@ -1389,7 +1389,7 @@ static int icnss_hw_reset_xo_disable_cmd(struct icnss_priv *priv) if (ret) { icnss_pr_err("RESET: XO disable command failed, state: 0x%lx\n", priv->state); - icnss_hw_wsi_cmd_error_recovery(priv); + return ret; } icnss_hw_write_reg_field(priv->mem_base_va, PMM_WSI_CMD_OFFSET, @@ -1406,6 +1406,7 @@ static int icnss_hw_reset(struct icnss_priv *priv) u32 rdata; u32 rdata1; int i; + int ret = 0; if (test_bit(HW_ONLY_TOP_LEVEL_RESET, &quirks)) goto top_level_reset; @@ -1457,11 +1458,15 @@ static int icnss_hw_reset(struct icnss_priv *priv) icnss_hw_reset_wlan_rfactrl_power_down(priv); - icnss_hw_reset_rf_reset_cmd(priv); + ret = icnss_hw_reset_rf_reset_cmd(priv); + if (ret) + goto top_level_reset; icnss_hw_reset_switch_to_cxo(priv); - icnss_hw_reset_xo_disable_cmd(priv); + ret = icnss_hw_reset_xo_disable_cmd(priv); + if (ret) + goto top_level_reset; icnss_hw_write_reg_field(priv->mpm_config_va, MPM_WCSSAON_CONFIG_OFFSET, MPM_WCSSAON_CONFIG_FORCE_ACTIVE, 0); |
