diff --git a/drivers/net/wireless/cnss/cnss.c b/drivers/net/wireless/cnss/cnss.c
index 031b151e69ab9b113c4e6ed7b732886c446ea158..3529029295e5280215866a157c6973e85b625e47 100644
--- a/drivers/net/wireless/cnss/cnss.c
+++ b/drivers/net/wireless/cnss/cnss.c
@@ -677,9 +677,15 @@ static int cnss_wlan_pci_suspend(struct pci_dev *pdev, pm_message_t state)
 	if (!wdriver)
 		goto out;
 
-	if (wdriver->suspend)
+	if (wdriver->suspend) {
 		ret = wdriver->suspend(pdev, state);
 
+		if (penv->pcie_link_state) {
+			pci_save_state(pdev);
+			penv->saved_state = pci_store_saved_state(pdev);
+		}
+	}
+
 out:
 	return ret;
 }
@@ -696,8 +702,14 @@ static int cnss_wlan_pci_resume(struct pci_dev *pdev)
 	if (!wdriver)
 		goto out;
 
-	if (wdriver->resume && !penv->pcie_link_down_ind)
+	if (wdriver->resume && !penv->pcie_link_down_ind) {
+		if (penv->saved_state)
+			pci_load_and_free_saved_state(pdev,
+				&penv->saved_state);
+		pci_restore_state(pdev);
+
 		ret = wdriver->resume(pdev);
+	}
 
 out:
 	return ret;