From dfdff0e7fd350fabc7559f935721f2239b0a6bcd Mon Sep 17 00:00:00 2001 From: Wu Gao Date: Tue, 13 Apr 2021 15:02:46 +0800 Subject: [PATCH] cnss2: Add new flag to check drv support There is illegal logic when call cnss_pci_suspend and check DRV support. This change adds new flag - drv_supported to replace cnss_pci_get_drv_connected and fixes this issue. Change-Id: Ia836e06283ebe08483e325717fb30bac333ef5b7 Signed-off-by: Wu Gao --- drivers/net/wireless/cnss2/pci.c | 6 ++++-- drivers/net/wireless/cnss2/pci.h | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/net/wireless/cnss2/pci.c b/drivers/net/wireless/cnss2/pci.c index 8d9c5380cc44..088f488f89ae 100644 --- a/drivers/net/wireless/cnss2/pci.c +++ b/drivers/net/wireless/cnss2/pci.c @@ -2912,6 +2912,7 @@ static bool cnss_pci_is_drv_supported(struct cnss_pci_data *pci_priv) if (!root_port) { cnss_pr_err("PCIe DRV is not supported as root port is null\n"); + pci_priv->drv_supported = false; return drv_supported; } @@ -2923,6 +2924,7 @@ static bool cnss_pci_is_drv_supported(struct cnss_pci_data *pci_priv) cnss_pr_dbg("PCIe DRV is %s\n", drv_supported ? "supported" : "not supported"); + pci_priv->drv_supported = drv_supported; return drv_supported; } @@ -3160,7 +3162,7 @@ static int cnss_pci_suspend(struct device *dev) goto out; if (!test_bit(DISABLE_DRV, &plat_priv->ctrl_params.quirks) && - cnss_pci_get_drv_connected(pci_priv)) { + pci_priv->drv_supported) { pci_priv->drv_connected_last = cnss_pci_get_drv_connected(pci_priv); if (!pci_priv->drv_connected_last) { @@ -3303,7 +3305,7 @@ static int cnss_pci_runtime_suspend(struct device *dev) } if (!test_bit(DISABLE_DRV, &plat_priv->ctrl_params.quirks) && - cnss_pci_get_drv_connected(pci_priv)) { + pci_priv->drv_supported) { pci_priv->drv_connected_last = cnss_pci_get_drv_connected(pci_priv); if (!pci_priv->drv_connected_last) { diff --git a/drivers/net/wireless/cnss2/pci.h b/drivers/net/wireless/cnss2/pci.h index 0effa8a5e5f9..3481fbebc9ce 100644 --- a/drivers/net/wireless/cnss2/pci.h +++ b/drivers/net/wireless/cnss2/pci.h @@ -128,6 +128,7 @@ struct cnss_pci_data { struct cnss_misc_reg *wlaon_reg; u32 wlaon_reg_size; u8 iommu_geometry; + bool drv_supported; }; static inline void cnss_set_pci_priv(struct pci_dev *pci_dev, void *data)