From: Niklas Cassel <cassel@kernel.org>
To: manivannan.sadhasivam@oss.qualcomm.com
Cc: "Jingoo Han" <jingoohan1@gmail.com>,
"Manivannan Sadhasivam" <mani@kernel.org>,
"Lorenzo Pieralisi" <lpieralisi@kernel.org>,
"Krzysztof Wilczyński" <kwilczynski@kernel.org>,
"Rob Herring" <robh@kernel.org>,
"Bjorn Helgaas" <bhelgaas@google.com>,
linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org,
vincent.guittot@linaro.org, zhangsenchuan@eswincomputing.com,
"Shawn Lin" <shawn.lin@rock-chips.com>,
"Richard Zhu" <hongxing.zhu@nxp.com>
Subject: Re: [PATCH v4 2/5] PCI: dwc: Return -EIO from dw_pcie_wait_for_link() if device is not active
Date: Wed, 21 Jan 2026 09:23:22 +0100 [thread overview]
Message-ID: <aXCM-ky9PFTKZTcZ@ryzen> (raw)
In-Reply-To: <20260120-pci-dwc-suspend-rework-v4-2-2f32d5082549@oss.qualcomm.com>
On Tue, Jan 20, 2026 at 11:17:41PM +0530, Manivannan Sadhasivam via B4 Relay wrote:
> From: Manivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com>
>
> There are cases where the PCIe device would be physically connected to the
> bus, but the device firmware might not be active. So the LTSSM will
> get stuck in POLL.{Active/Compliance} states.
>
> This behavior is common with endpoint devices controlled by the PCI
> Endpoint framework, where the device will wait for the user to start its
> operation through configfs.
>
> For those cases, print the relevant log and return -EIO to indicate that
> the device is present, but not active. This will allow the callers to skip
> the failure as the device might become active in the future.
>
> Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com>
> ---
> drivers/pci/controller/dwc/pcie-designware.c | 15 +++++++++++++--
> 1 file changed, 13 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/pci/controller/dwc/pcie-designware.c b/drivers/pci/controller/dwc/pcie-designware.c
> index 55c1c60f7f8f..aca5bbeade03 100644
> --- a/drivers/pci/controller/dwc/pcie-designware.c
> +++ b/drivers/pci/controller/dwc/pcie-designware.c
> @@ -696,8 +696,9 @@ void dw_pcie_disable_atu(struct dw_pcie *pci, u32 dir, int index)
> * dw_pcie_wait_for_link - Wait for the PCIe link to be up
> * @pci: DWC instance
> *
> - * Returns: 0 if link is up, -ENODEV if device is not found, -ETIMEDOUT if the
> - * link fails to come up for other reasons.
> + * Returns: 0 if link is up, -ENODEV if device is not found, -EIO if the device
> + * is found but not active and -ETIMEDOUT if the link fails to come up for other
> + * reasons.
> */
> int dw_pcie_wait_for_link(struct dw_pcie *pci)
> {
> @@ -722,6 +723,16 @@ int dw_pcie_wait_for_link(struct dw_pcie *pci)
> ltssm == DW_PCIE_LTSSM_DETECT_ACT) {
> dev_info(pci->dev, "Device not found\n");
> return -ENODEV;
> +
> + /*
> + * If the link is in POLL.{Active/Compliance} state, then the
> + * device is found to be connected to the bus, but it is not
> + * active i.e., the device firmware might not yet initialized.
> + */
> + } else if (ltssm == DW_PCIE_LTSSM_POLL_ACTIVE ||
> + ltssm == DW_PCIE_LTSSM_POLL_COMPLIANCE) {
> + dev_info(pci->dev, "Device found, but not active\n");
> + return -EIO;
> }
>
> dev_info(pci->dev, "Phy link never came up\n");
This should probably be squashed with the previous patch.
Regardless:
Reviewed-by: Niklas Cassel <cassel@kernel.org>
next prev parent reply other threads:[~2026-01-21 8:23 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-20 17:47 [PATCH v4 0/5] PCI: dwc: Rework the error handling of dw_pcie_wait_for_link() API Manivannan Sadhasivam
2026-01-20 17:47 ` Manivannan Sadhasivam via B4 Relay
2026-01-20 17:47 ` [PATCH v4 1/5] PCI: dwc: Return -ENODEV from dw_pcie_wait_for_link() if device is not found Manivannan Sadhasivam
2026-01-20 17:47 ` Manivannan Sadhasivam via B4 Relay
2026-01-21 8:22 ` Niklas Cassel
2026-01-20 17:47 ` [PATCH v4 2/5] PCI: dwc: Return -EIO from dw_pcie_wait_for_link() if device is not active Manivannan Sadhasivam
2026-01-20 17:47 ` Manivannan Sadhasivam via B4 Relay
2026-01-21 8:23 ` Niklas Cassel [this message]
2026-01-21 9:13 ` Manivannan Sadhasivam
2026-01-20 17:47 ` [PATCH v4 3/5] PCI: dwc: Rename and move ltssm_status_string() to pcie-designware.c Manivannan Sadhasivam
2026-01-20 17:47 ` Manivannan Sadhasivam via B4 Relay
2026-01-21 8:23 ` Niklas Cassel
2026-01-20 17:47 ` [PATCH v4 4/5] PCI: dwc: Rework the error print of dw_pcie_wait_for_link() Manivannan Sadhasivam
2026-01-20 17:47 ` Manivannan Sadhasivam via B4 Relay
2026-01-21 8:23 ` Niklas Cassel
2026-01-21 9:13 ` Manivannan Sadhasivam
2026-01-20 17:47 ` [PATCH v4 5/5] PCI: dwc: Fail dw_pcie_host_init() if dw_pcie_wait_for_link() returns -ETIMEDOUT Manivannan Sadhasivam
2026-01-20 17:47 ` Manivannan Sadhasivam via B4 Relay
2026-01-21 8:24 ` Niklas Cassel
2026-01-21 9:21 ` [PATCH v4 0/5] PCI: dwc: Rework the error handling of dw_pcie_wait_for_link() API Manivannan Sadhasivam
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aXCM-ky9PFTKZTcZ@ryzen \
--to=cassel@kernel.org \
--cc=bhelgaas@google.com \
--cc=hongxing.zhu@nxp.com \
--cc=jingoohan1@gmail.com \
--cc=kwilczynski@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=lpieralisi@kernel.org \
--cc=mani@kernel.org \
--cc=manivannan.sadhasivam@oss.qualcomm.com \
--cc=robh@kernel.org \
--cc=shawn.lin@rock-chips.com \
--cc=vincent.guittot@linaro.org \
--cc=zhangsenchuan@eswincomputing.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.