summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSujeev Dias <sdias@codeaurora.org>2017-10-10 10:57:48 -0700
committerSujeev Dias <sdias@codeaurora.org>2017-11-09 15:52:04 -0800
commit4f3f403a2e89b16cc06882cac71d8d5c0a310441 (patch)
treed7a3c8350f1436b817f44ca417b46ad71dffd828
parentf2dfcc956e52098d94a5db0c51e0d0bae2508a94 (diff)
msm: pcie: always recover cfg space during resume
During linkdown pci host cannot save the config space prior to suspending the link. If saved_state is null recover rc config space using shadow recovery. CRs-Fixed: 2141146 Change-Id: I6c6e817ae2c32d8040853fe22785040480aa76eb Signed-off-by: Sujeev Dias <sdias@codeaurora.org>
-rw-r--r--drivers/pci/host/pci-msm.c25
1 files changed, 16 insertions, 9 deletions
diff --git a/drivers/pci/host/pci-msm.c b/drivers/pci/host/pci-msm.c
index a741c9c7d115..0ecf64f4afe9 100644
--- a/drivers/pci/host/pci-msm.c
+++ b/drivers/pci/host/pci-msm.c
@@ -6865,17 +6865,24 @@ static int msm_pcie_pm_resume(struct pci_dev *dev,
dev->bus->number, dev->bus->primary);
if (!(options & MSM_PCIE_CONFIG_NO_CFG_RESTORE)) {
- PCIE_DBG(pcie_dev,
- "RC%d: entry of PCI framework restore state\n",
- pcie_dev->rc_idx);
+ if (pcie_dev->saved_state) {
+ PCIE_DBG(pcie_dev,
+ "RC%d: entry of PCI framework restore state\n",
+ pcie_dev->rc_idx);
- pci_load_and_free_saved_state(dev,
- &pcie_dev->saved_state);
- pci_restore_state(dev);
+ pci_load_and_free_saved_state(dev,
+ &pcie_dev->saved_state);
+ pci_restore_state(dev);
- PCIE_DBG(pcie_dev,
- "RC%d: exit of PCI framework restore state\n",
- pcie_dev->rc_idx);
+ PCIE_DBG(pcie_dev,
+ "RC%d: exit of PCI framework restore state\n",
+ pcie_dev->rc_idx);
+ } else {
+ PCIE_DBG(pcie_dev,
+ "RC%d: restore rc config space using shadow recovery\n",
+ pcie_dev->rc_idx);
+ msm_pcie_cfg_recover(pcie_dev, true);
+ }
}
}