Re: [PATCH v4 5/7] PCI: dwc: Ensure that dw_pcie_wait_for_link() waits 100 ms after link up

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Jul 02, 2025 at 11:43:11AM GMT, Niklas Cassel wrote:
> On Tue, Jul 01, 2025 at 11:38:44AM -0500, Bjorn Helgaas wrote:
> > > 
> > > No. The PERST# delay should be handled by the glue drivers since
> > > they are the ones controlling the PERST# line. Doing an
> > > unconditional wait for both the cases in DWC core, seems wrong to
> > > me.
> > 
> > It ends up being a little bit weird that the delay is in the DWC core
> > (dw_pcie_wait_for_link()) for ports that support fast links, and in
> > the glue drivers otherwise.  It would be easier to verify and maintain
> > if the delay were always in the DWC core.
> > 
> > If we had a dw_pcie_host_ops callback for PERST# deassertion, the
> > delay could be in the DWC core, but I don't know if there's enough
> > consistency across drivers for that to be practical.
> 
> Currently, there is not much consistency between the glue drivers, so
> adding a DWC core API to assert/deassert PERST# sounds like a good idea
> to me. The callback could even be supplied a struct gpio_desc pointer.
> 

+1 for consolidating the PERST# handling. But just FYI, I'm going to move the
PERST# deassert handling from controller drivers to pwrctrl drivers as once
pwrctrl drivers are used to control the power supplies, they should control
PERST# as well. Currently, this is the missing piece for pwrctrl framework.

Also, we cannot entirely get rid of the PERST# handling in controller drivers,
since they need to assert PERST# before resetting the RC during init.

> Like I mentioned in my previous email:
> https://github.com/torvalds/linux/blob/v6.16-rc4/drivers/pci/controller/dwc/pci-imx6.c#L885
> https://github.com/torvalds/linux/blob/v6.16-rc4/drivers/pci/controller/dwc/pcie-qcom.c#L294
> https://github.com/torvalds/linux/blob/v6.16-rc4/drivers/pci/controller/dwc/pcie-keembay.c#L89
> 
> these drivers seem to have a 100 ms delay after PERST# has been deasserted,
> but there are of course more glue drivers, so a lot of them will not have a
> 100 ms wait _after_ PERST# is deasserted. (All glue drivers seem to have a
> delay between asserting and deasserting PERST#.)
> 
> Right now, e.g. qcom will have a 100 ms delay both after deasserting PERST#
> and after link up. (However, based on the supported link speed, only one of
> the delays should be needed.)
> 
> However, my main concern is not that qcom waits twice, it is those drivers
> that do not have a 100 ms delay after PERST# has been deasserted, because
> before commit 470f10f18b48 ("PCI: Reduce PCIE_LINK_WAIT_SLEEP_MS"), those
> drivers might have been "saved" by the ridiculously long
> PCIE_LINK_WAIT_SLEEP_MS.
> 
> However, now when we sleep less in each iteration when polling for link up,
> those drivers that do not have a 100 ms delay after PERST# has been
> deasserted might actually see regressions, because (the now reduced)
> PCIE_LINK_WAIT_SLEEP_MS time is no longer "saving" them.
> 

Why can't you just add the delay to those drivers now? They can be consolidated
later.

- Mani

-- 
மணிவண்ணன் சதாசிவம்




[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux