diff options
| author | Sujeev Dias <sdias@codeaurora.org> | 2017-10-10 10:57:48 -0700 |
|---|---|---|
| committer | Sujeev Dias <sdias@codeaurora.org> | 2017-11-09 15:52:04 -0800 |
| commit | 4f3f403a2e89b16cc06882cac71d8d5c0a310441 (patch) | |
| tree | d7a3c8350f1436b817f44ca417b46ad71dffd828 | |
| parent | f2dfcc956e52098d94a5db0c51e0d0bae2508a94 (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.c | 25 |
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); + } } } |
