diff --git a/drivers/pci/controller/pci-msm.c b/drivers/pci/controller/pci-msm.c index 700907277641..ab03be06ef8b 100644 --- a/drivers/pci/controller/pci-msm.c +++ b/drivers/pci/controller/pci-msm.c @@ -790,7 +790,7 @@ struct msm_pcie_dev_t { enum msm_pcie_link_status link_status; bool user_suspend; - bool disable_pc; + uint32_t disable_pc; struct pci_saved_state *default_state; struct pci_saved_state *saved_state; @@ -7973,8 +7973,8 @@ int msm_pcie_pm_control(enum msm_pcie_pm_opt pm_opt, u32 busnr, void *user, break; case MSM_PCIE_DISABLE_PC: PCIE_DBG(pcie_dev, - "User of RC%d requests to keep the link always alive.\n", - pcie_dev->rc_idx); + "User of RC%d with vendor_id:0x%x device_id:0x%x requests to keep the link always alive.\n", + pcie_dev->rc_idx, pcidev->vendor, pcidev->device); spin_lock_irqsave(&pcie_dev->cfg_lock, pcie_dev->irqsave_flags); if (pcie_dev->suspending) { PCIE_ERR(pcie_dev, @@ -7982,17 +7982,20 @@ int msm_pcie_pm_control(enum msm_pcie_pm_opt pm_opt, u32 busnr, void *user, pcie_dev->rc_idx); ret = MSM_PCIE_ERROR; } else { - pcie_dev->disable_pc = true; + pcie_dev->disable_pc++; } spin_unlock_irqrestore(&pcie_dev->cfg_lock, pcie_dev->irqsave_flags); break; case MSM_PCIE_ENABLE_PC: PCIE_DBG(pcie_dev, - "User of RC%d cancels the request of alive link.\n", - pcie_dev->rc_idx); + "User of RC%d with vendor_id:0x%x device_id:0x%x cancels the request of alive link.\n", + pcie_dev->rc_idx, pcidev->vendor, pcidev->device); spin_lock_irqsave(&pcie_dev->cfg_lock, pcie_dev->irqsave_flags); - pcie_dev->disable_pc = false; + if (pcie_dev->disable_pc > 0) + pcie_dev->disable_pc--; + else + PCIE_ERR(pcie_dev, "PCIe:RC%d cannot call ENABLE_PC", pcie_dev->rc_idx); spin_unlock_irqrestore(&pcie_dev->cfg_lock, pcie_dev->irqsave_flags); break;