diff --git a/drivers/pci/controller/pci-msm.c b/drivers/pci/controller/pci-msm.c index 35461811c178..ee1ad2de6bda 100644 --- a/drivers/pci/controller/pci-msm.c +++ b/drivers/pci/controller/pci-msm.c @@ -7275,24 +7275,37 @@ static int msm_pcie_pm_suspend(struct pci_dev *dev, if (dev) { if (msm_pcie_confirm_linkup(pcie_dev, true, true, dev)) { + PCIE_DBG(pcie_dev, "PCIe: RC%d: save config space\n", + pcie_dev->rc_idx); ret = pci_save_state(dev); if (ret) { PCIE_ERR(pcie_dev, - "PCIe: RC%d: fail to save state of RC%d:%d.\n", + "PCIe: RC%d: fail to save state:%d.\n", pcie_dev->rc_idx, ret); pcie_dev->suspending = false; return ret; } - pcie_dev->saved_state = pci_store_saved_state(dev); } else { - pci_load_and_free_saved_state(dev, - &pcie_dev->saved_state); - pcie_dev->saved_state = pcie_dev->default_state; + kfree(pcie_dev->saved_state); + pcie_dev->saved_state = NULL; + PCIE_DBG(pcie_dev, - "PCIe: RC%d: saved default config space\n", + "PCIe: RC%d: load default config space\n", pcie_dev->rc_idx); + ret = pci_load_saved_state(dev, pcie_dev->default_state); + if (ret) { + PCIE_ERR(pcie_dev, + "PCIe: RC%d: fail to load default state:%d.\n", + pcie_dev->rc_idx, ret); + pcie_dev->suspending = false; + return ret; + } } + + PCIE_DBG(pcie_dev, "PCIe: RC%d: store saved state\n", + pcie_dev->rc_idx); + pcie_dev->saved_state = pci_store_saved_state(dev); } spin_lock_irqsave(&pcie_dev->cfg_lock,