From 547b823e065c415b02987ab2f43366f2a0dd9a71 Mon Sep 17 00:00:00 2001 From: Naman Padhiar Date: Mon, 13 Mar 2023 16:05:32 +0530 Subject: [PATCH] icnss2: Check for SSR before SOC Wake request There are scenarios when WLAN Host request for SOC Wake during SSR. If WLAN FW receives the request before FW_READY it ASSERT. Avoid sending SOC Wake request to FW during SSR. Change-Id: Ia42cc17149de7a33da0161a280c79d5dfce0f4c8 Signed-off-by: Naman Padhiar --- drivers/soc/qcom/icnss2/main.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/drivers/soc/qcom/icnss2/main.c b/drivers/soc/qcom/icnss2/main.c index c2d296c6181f..ab396e740b51 100644 --- a/drivers/soc/qcom/icnss2/main.c +++ b/drivers/soc/qcom/icnss2/main.c @@ -488,8 +488,12 @@ static int icnss_send_smp2p(struct icnss_priv *priv, return ret; } - if (test_bit(ICNSS_FW_DOWN, &priv->state)) - return -ENODEV; + if (test_bit(ICNSS_FW_DOWN, &priv->state) || + !test_bit(ICNSS_FW_READY, &priv->state)) { + icnss_pr_smp2p("FW down, ignoring sending SMP2P state: 0x%lx\n", + priv->state); + return -EINVAL; + } value |= priv->smp2p_info[smp2p_entry].seq++; value <<= ICNSS_SMEM_SEQ_NO_POS; @@ -3197,6 +3201,13 @@ int icnss_force_wake_request(struct device *dev) return -EINVAL; } + if (test_bit(ICNSS_FW_DOWN, &priv->state) || + !test_bit(ICNSS_FW_READY, &priv->state)) { + icnss_pr_soc_wake("FW down, ignoring SOC Wake request state: 0x%lx\n", + priv->state); + return -EINVAL; + } + if (atomic_inc_not_zero(&priv->soc_wake_ref_count)) { icnss_pr_soc_wake("SOC already awake, Ref count: %d", atomic_read(&priv->soc_wake_ref_count)); @@ -3226,6 +3237,13 @@ int icnss_force_wake_release(struct device *dev) return -EINVAL; } + if (test_bit(ICNSS_FW_DOWN, &priv->state) || + !test_bit(ICNSS_FW_READY, &priv->state)) { + icnss_pr_soc_wake("FW down, ignoring SOC Wake release state: 0x%lx\n", + priv->state); + return -EINVAL; + } + icnss_pr_soc_wake("Calling SOC Wake response"); if (atomic_read(&priv->soc_wake_ref_count) &&