Re: [PATCH] PCI: cadence: skip the link polling when endpoint not connected

From: Aksh Garg

Date: Tue Jun 23 2026 - 02:38:57 EST




On 23/06/26 11:15, Manivannan Sadhasivam wrote:
On Tue, Jun 23, 2026 at 10:53:48AM +0530, Aksh Garg wrote:


On 22/06/26 20:22, Manivannan Sadhasivam wrote:
On Fri, Jun 05, 2026 at 12:49:22PM +0530, Aksh Garg wrote:
cdns_pcie_host_wait_for_link() polls on link-up for 10 retries with a
delay of 90-100ms each (~1 second). A call to cdns_pcie_host_link_setup()
during the resume operation blocks the resume operation unnecessarily for
~1s even when no endpoint device is connected.

Add skip_link_polling flag to track link state across suspend/resume
cycles. If link was down before suspend, skip the expensive polling
in resume since no endpoint was present.


Won't you need the delay if a device gets plugged while the host was suspended?
We had this same concern with the DWC drivers and we left the delay as-is as
nothing prevents an user to connect a device when the host was suspended.

Yes, that is true. However, the platforms that do not support hot-plug can
skip the delay during resume since no device could have been connected while
suspended (only those platform's driver would be expected to set
'rc->skip_link_polling) just like what Tegra264 PCIe driver tries to do at
[1], where the driver sets "pcie->link_up = false" if the link is down
during the probe and if the controller doesn't support hot-plug.


If the platform doesn't support hotplug, then it is perfectly fine to skip the
delay. But you need to name the flag as like 'no_hotplug' or something
relevant, not 'skip_link_polling'.

Sure, I will rename the flag to 'link_down_no_hotplug' to clarify that it tracks the link state when there's no hotplug support.


Even if a user connects a device (when the host was suspended) to a platform
which doesn't support hotplug, the user is expected to run a bus rescan,
which doesn't call cdns_pcie_host_link_setup() anyway, hence the flag
'skip_link_polling' is not taken into account in that case.


This is not about running the rescan, but about initializing the device. The 1s
delay in cdns_pcie_host_wait_for_link() is mandated by the PCIe spec after
starting LTSSM and before issuing the config read to the device. If this delay
is skipped and if a config read is issued to the device, then the device may not
respond and the failure may lead to PCI stack assuming that the device is dead.

Understood, thanks for the explanation.


- Mani