From a2151251061010d4e338cf2b0ecd38bb989b7dbf Mon Sep 17 00:00:00 2001
From: Yue Ma <yuem@codeaurora.org>
Date: Tue, 22 Jul 2014 11:01:09 -0700
Subject: [PATCH] cnss: Save/restore target PCIe config space during
suspend/resume
In some cases PCIe framework fails to restore the target PCIe config
space during suspend/resume, so add the support that CNSS platform
driver can save/restore it.
Change-Id: I5522eaba98421df6734b596f62174e159450c367
CRs-fixed: 697607
Signed-off-by: Yue Ma <yuem@codeaurora.org>
---
drivers/net/wireless/cnss/cnss.c | 16 ++++++++++++++--
1 file changed, 14 insertions(+), 2 deletions(-)
diff --git a/drivers/net/wireless/cnss/cnss.c b/drivers/net/wireless/cnss/cnss.c
index 031b151e69ab..3529029295e5 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;
--
GitLab