From b8f822a30a69efc35bf0c97a36da45bd23925e9c Mon Sep 17 00:00:00 2001 From: Tony Truong Date: Thu, 19 Dec 2019 14:58:46 -0800 Subject: [PATCH] msm: pcie: add option to disable L1ss TO for DRV suspend There are usecases where clients will not want DRV subsystem to enable L1ss inactivity timeout. Provide PCIe clients the option to disable L1ss inactivity timeout when requesting a DRV suspend. Change-Id: I940526a58bb2496529e919b5b602c0bc31ca9ae1 Signed-off-by: Tony Truong --- drivers/pci/controller/pci-msm.c | 11 +++++++++-- include/linux/msm_pcie.h | 1 + 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/pci/controller/pci-msm.c b/drivers/pci/controller/pci-msm.c index f5aedb875d16..13e80d36fe37 100644 --- a/drivers/pci/controller/pci-msm.c +++ b/drivers/pci/controller/pci-msm.c @@ -6997,11 +6997,13 @@ static int msm_pcie_drv_resume(struct msm_pcie_dev_t *pcie_dev) return 0; } -static int msm_pcie_drv_suspend(struct msm_pcie_dev_t *pcie_dev) +static int msm_pcie_drv_suspend(struct msm_pcie_dev_t *pcie_dev, + u32 options) { struct rpmsg_device *rpdev = pcie_drv.rpdev; struct msm_pcie_drv_info *drv_info = pcie_dev->drv_info; struct msm_pcie_drv_msg *drv_enable = &drv_info->drv_enable; + struct msm_pcie_drv_tre *pkt = &drv_enable->pkt; struct msm_pcie_clk_info_t *clk_info; int ret, i; @@ -7024,6 +7026,11 @@ static int msm_pcie_drv_suspend(struct msm_pcie_dev_t *pcie_dev) /* disable global irq - no more linkdown/aer detection */ disable_irq(pcie_dev->irq[MSM_PCIE_INT_GLOBAL_INT].num); + if (options & MSM_PCIE_CONFIG_NO_L1SS_TO) + pkt->dword[2] = 0; + else + pkt->dword[2] = drv_info->l1ss_timeout_us / 1000; + drv_info->reply_seq = drv_info->seq++; drv_enable->hdr.seq = drv_info->reply_seq; @@ -7134,7 +7141,7 @@ int msm_pcie_pm_control(enum msm_pcie_pm_opt pm_opt, u32 busnr, void *user, PCIE_DBG(pcie_dev, "PCIe: RC%d: DRV: user requests for DRV suspend\n", rc_idx); - ret = msm_pcie_drv_suspend(pcie_dev); + ret = msm_pcie_drv_suspend(pcie_dev, options); break; case MSM_PCIE_SUSPEND: PCIE_DBG(&msm_pcie_dev[rc_idx], diff --git a/include/linux/msm_pcie.h b/include/linux/msm_pcie.h index 077883edbda4..acffc4c4ffed 100644 --- a/include/linux/msm_pcie.h +++ b/include/linux/msm_pcie.h @@ -12,6 +12,7 @@ enum msm_pcie_config { MSM_PCIE_CONFIG_NO_CFG_RESTORE = 0x1, MSM_PCIE_CONFIG_LINKDOWN = 0x2, MSM_PCIE_CONFIG_NO_RECOVERY = 0x4, + MSM_PCIE_CONFIG_NO_L1SS_TO = 0x8, }; enum msm_pcie_pm_opt {