Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0b2474a9 authored by Yuanyuan Liu's avatar Yuanyuan Liu
Browse files

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: default avatarYuanyuan Liu <yuanliu@codeaurora.org>
parent 46aa49c1
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -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);