From c690a7dbd655bf2723634358a71448438741639a Mon Sep 17 00:00:00 2001 From: Yue Ma Date: Thu, 4 Feb 2021 15:50:59 -0800 Subject: [PATCH] cnss2: Handle -ETIMEDOUT properly for MHI power on failure If MHI power on returns -ETIMEDOUT, controller needs to take care the cleanup by calling MHI power down. Force to set the power on bit for driver internal MHI state to make sure it can be handled properly later. Change-Id: Icdeb3fc10a18cf643710240aa4984af61c8b5195 Signed-off-by: Yue Ma --- drivers/net/wireless/cnss2/pci.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/drivers/net/wireless/cnss2/pci.c b/drivers/net/wireless/cnss2/pci.c index 4513808ae6f4..0d6b3bf0742e 100644 --- a/drivers/net/wireless/cnss2/pci.c +++ b/drivers/net/wireless/cnss2/pci.c @@ -1530,11 +1530,16 @@ int cnss_pci_start_mhi(struct cnss_pci_data *pci_priv) pci_priv->mhi_ctrl->timeout_ms = timeout; - /* -ETIMEDOUT means MHI power on has succeeded but timed out - * for firmware mission mode event, so handle it properly. - */ - if (ret == -ETIMEDOUT) + if (ret == -ETIMEDOUT) { + /* This is a special case needs to be handled that if MHI + * power on returns -ETIMEDOUT, controller needs to take care + * the cleanup by calling MHI power down. Force to set the bit + * for driver internal MHI state to make sure it can be handled + * properly later. + */ + set_bit(CNSS_MHI_POWER_ON, &pci_priv->mhi_state); ret = cnss_pci_handle_mhi_poweron_timeout(pci_priv); + } return ret; }