diff --git a/drivers/platform/msm/ep_pcie/ep_pcie_core.c b/drivers/platform/msm/ep_pcie/ep_pcie_core.c index be8d1f5d644f..658a8eda9ff5 100644 --- a/drivers/platform/msm/ep_pcie/ep_pcie_core.c +++ b/drivers/platform/msm/ep_pcie/ep_pcie_core.c @@ -2330,6 +2330,18 @@ static irqreturn_t ep_pcie_handle_perst_irq(int irq, void *data) "PCIe V%d: PCIe is not enumerated yet; PERST is %sasserted\n", dev->rev, perst ? "de" : ""); if (perst) { + /* + * Hold a wakelock to avoid delay during + * link enablement in PCIE layer in non + * enumerated scenario. + */ + if (!atomic_read(&dev->ep_pcie_dev_wake)) { + pm_stay_awake(&dev->pdev->dev); + atomic_set(&dev->ep_pcie_dev_wake, 1); + EP_PCIE_DBG(dev, + "PCIe V%d: Acquired wakelock\n", + dev->rev); + } /* start work for link enumeration with the host side */ schedule_work(&dev->handle_perst_work); } else {