[PATCH v2] PCI: dwc: Proceed with system suspend even if the endpoint doesn't respond with PME_TO_Ack message

Manivannan Sadhasivam posted 1 patch 1 month, 4 weeks ago
drivers/pci/controller/dwc/pcie-designware-host.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
[PATCH v2] PCI: dwc: Proceed with system suspend even if the endpoint doesn't respond with PME_TO_Ack message
Posted by Manivannan Sadhasivam 1 month, 4 weeks ago
PCIe spec r7.0, sec 5.3.3.2.1, recommends proceeding with L2/L3 sequence
even if one or devices do not respond with PME_TO_Ack message after 10ms
timeout.

So just print a warning if the timeout happens and proceed with the system
suspend.

Reported-by: Neil Armstrong <neil.armstrong@linaro.org>
Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com>
---

Changes in v2:

* Added 'ret = 0' to avoid failing callers

 drivers/pci/controller/dwc/pcie-designware-host.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/drivers/pci/controller/dwc/pcie-designware-host.c b/drivers/pci/controller/dwc/pcie-designware-host.c
index 6ae6189e9b8a..ba183fc3e77c 100644
--- a/drivers/pci/controller/dwc/pcie-designware-host.c
+++ b/drivers/pci/controller/dwc/pcie-designware-host.c
@@ -1256,9 +1256,13 @@ int dw_pcie_suspend_noirq(struct dw_pcie *pci)
 				PCIE_PME_TO_L2_TIMEOUT_US/10,
 				PCIE_PME_TO_L2_TIMEOUT_US, false, pci);
 	if (ret) {
-		/* Only log message when LTSSM isn't in DETECT or POLL */
-		dev_err(pci->dev, "Timeout waiting for L2 entry! LTSSM: 0x%x\n", val);
-		return ret;
+		/*
+		 * Failure is non-fatal since spec r7.0, sec 5.3.3.2.1,
+		 * recommends proceeding with L2/L3 sequence even if one or more
+		 * devices do not respond with PME_TO_Ack after 10ms timeout.
+		 */
+		dev_warn(pci->dev, "Timeout waiting for L2 entry! LTSSM: 0x%x\n", val);
+		ret = 0;
 	}
 
 	/*
-- 
2.51.0
Re: [PATCH v2] PCI: dwc: Proceed with system suspend even if the endpoint doesn't respond with PME_TO_Ack message
Posted by Manivannan Sadhasivam 1 month, 2 weeks ago
On Tue, 17 Feb 2026 17:01:42 +0530, Manivannan Sadhasivam wrote:
> PCIe spec r7.0, sec 5.3.3.2.1, recommends proceeding with L2/L3 sequence
> even if one or devices do not respond with PME_TO_Ack message after 10ms
> timeout.
> 
> So just print a warning if the timeout happens and proceed with the system
> suspend.
> 
> [...]

Applied, thanks!

[1/1] PCI: dwc: Proceed with system suspend even if the endpoint doesn't respond with PME_TO_Ack message
      commit: eed390775470ff0db32cce37a681f3acc2b941c3

Best regards,
-- 
Manivannan Sadhasivam <mani@kernel.org>
Re: [PATCH v2] PCI: dwc: Proceed with system suspend even if the endpoint doesn't respond with PME_TO_Ack message
Posted by Neil Armstrong 1 month, 4 weeks ago
On 2/17/26 12:31, Manivannan Sadhasivam wrote:
> PCIe spec r7.0, sec 5.3.3.2.1, recommends proceeding with L2/L3 sequence
> even if one or devices do not respond with PME_TO_Ack message after 10ms
> timeout.
> 
> So just print a warning if the timeout happens and proceed with the system
> suspend.
> 
> Reported-by: Neil Armstrong <neil.armstrong@linaro.org>
> Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com>
> ---
> 
> Changes in v2:
> 
> * Added 'ret = 0' to avoid failing callers
> 
>   drivers/pci/controller/dwc/pcie-designware-host.c | 10 +++++++---
>   1 file changed, 7 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/pci/controller/dwc/pcie-designware-host.c b/drivers/pci/controller/dwc/pcie-designware-host.c
> index 6ae6189e9b8a..ba183fc3e77c 100644
> --- a/drivers/pci/controller/dwc/pcie-designware-host.c
> +++ b/drivers/pci/controller/dwc/pcie-designware-host.c
> @@ -1256,9 +1256,13 @@ int dw_pcie_suspend_noirq(struct dw_pcie *pci)
>   				PCIE_PME_TO_L2_TIMEOUT_US/10,
>   				PCIE_PME_TO_L2_TIMEOUT_US, false, pci);
>   	if (ret) {
> -		/* Only log message when LTSSM isn't in DETECT or POLL */
> -		dev_err(pci->dev, "Timeout waiting for L2 entry! LTSSM: 0x%x\n", val);
> -		return ret;
> +		/*
> +		 * Failure is non-fatal since spec r7.0, sec 5.3.3.2.1,
> +		 * recommends proceeding with L2/L3 sequence even if one or more
> +		 * devices do not respond with PME_TO_Ack after 10ms timeout.
> +		 */
> +		dev_warn(pci->dev, "Timeout waiting for L2 entry! LTSSM: 0x%x\n", val);
> +		ret = 0;
>   	}
>   
>   	/*

Allows ath12k to go ind3cold with [1]:

Tested-by: Neil Armstrong <neil.armstrong@linaro.org> # on SM8650-HDK

[1] https://lore.kernel.org/all/20260217-d3cold-v2-0-89b322864043@oss.qualcomm.com/
Re: [PATCH v2] PCI: dwc: Proceed with system suspend even if the endpoint doesn't respond with PME_TO_Ack message
Posted by Frank Li 1 month, 3 weeks ago
On Tue, Feb 17, 2026 at 05:01:42PM +0530, Manivannan Sadhasivam wrote:
> PCIe spec r7.0, sec 5.3.3.2.1, recommends proceeding with L2/L3 sequence
> even if one or devices do not respond with PME_TO_Ack message after 10ms
> timeout.
>
> So just print a warning if the timeout happens and proceed with the system
> suspend.
>
> Reported-by: Neil Armstrong <neil.armstrong@linaro.org>
> Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com>
> ---
Reviewed-by: Frank Li <Frank.Li@nxp.com>
>
> Changes in v2:
>
> * Added 'ret = 0' to avoid failing callers
>
>  drivers/pci/controller/dwc/pcie-designware-host.c | 10 +++++++---
>  1 file changed, 7 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/pci/controller/dwc/pcie-designware-host.c b/drivers/pci/controller/dwc/pcie-designware-host.c
> index 6ae6189e9b8a..ba183fc3e77c 100644
> --- a/drivers/pci/controller/dwc/pcie-designware-host.c
> +++ b/drivers/pci/controller/dwc/pcie-designware-host.c
> @@ -1256,9 +1256,13 @@ int dw_pcie_suspend_noirq(struct dw_pcie *pci)
>  				PCIE_PME_TO_L2_TIMEOUT_US/10,
>  				PCIE_PME_TO_L2_TIMEOUT_US, false, pci);
>  	if (ret) {
> -		/* Only log message when LTSSM isn't in DETECT or POLL */
> -		dev_err(pci->dev, "Timeout waiting for L2 entry! LTSSM: 0x%x\n", val);
> -		return ret;
> +		/*
> +		 * Failure is non-fatal since spec r7.0, sec 5.3.3.2.1,
> +		 * recommends proceeding with L2/L3 sequence even if one or more
> +		 * devices do not respond with PME_TO_Ack after 10ms timeout.
> +		 */
> +		dev_warn(pci->dev, "Timeout waiting for L2 entry! LTSSM: 0x%x\n", val);
> +		ret = 0;
>  	}
>
>  	/*
> --
> 2.51.0
>