* [PATCH 0/4] PCI: dwc: Link Up IRQ fixes
@ 2025-05-05 9:26 Niklas Cassel
2025-05-05 9:26 ` [PATCH 2/4] PCI: qcom: Do not enumerate bus before endpoint devices are ready Niklas Cassel
2025-05-05 9:26 ` [PATCH 4/4] PCI: qcom: Replace PERST sleep time with proper macro Niklas Cassel
0 siblings, 2 replies; 3+ messages in thread
From: Niklas Cassel @ 2025-05-05 9:26 UTC (permalink / raw)
To: Lorenzo Pieralisi, Krzysztof Wilczyński,
Manivannan Sadhasivam, Rob Herring, Bjorn Helgaas, Heiko Stuebner,
Niklas Cassel, Krishna chaitanya chundru
Cc: Wilfred Mallawa, Damien Le Moal, Hans Zhang, Laszlo Fiat,
Krzysztof Wilczyński, linux-pci, linux-arm-kernel,
linux-rockchip, linux-arm-msm
Hello there,
Commit 8d3bf19f1b58 ("PCI: dwc: Don't wait for link up if driver can detect
Link Up event") added support for DWC to not wait for link up before
enumerating the bus. However, we cannot simply enumerate the bus after
receiving a Link Up IRQ, we still need to wait PCIE_T_RRS_READY_MS time
to allow a device to become ready after deasserting PERST. To avoid
bringing back an conditional delay during probe, perform the wait in the
threaded IRQ handler instead.
Please review.
Kind regards,
Niklas
Niklas Cassel (4):
PCI: dw-rockchip: Do not enumerate bus before endpoint devices are
ready
PCI: qcom: Do not enumerate bus before endpoint devices are ready
PCI: dw-rockchip: Replace PERST sleep time with proper macro
PCI: qcom: Replace PERST sleep time with proper macro
drivers/pci/controller/dwc/pcie-dw-rockchip.c | 3 ++-
drivers/pci/controller/dwc/pcie-qcom.c | 3 ++-
2 files changed, 4 insertions(+), 2 deletions(-)
--
2.49.0
^ permalink raw reply [flat|nested] 3+ messages in thread* [PATCH 2/4] PCI: qcom: Do not enumerate bus before endpoint devices are ready
2025-05-05 9:26 [PATCH 0/4] PCI: dwc: Link Up IRQ fixes Niklas Cassel
@ 2025-05-05 9:26 ` Niklas Cassel
2025-05-05 9:26 ` [PATCH 4/4] PCI: qcom: Replace PERST sleep time with proper macro Niklas Cassel
1 sibling, 0 replies; 3+ messages in thread
From: Niklas Cassel @ 2025-05-05 9:26 UTC (permalink / raw)
To: Manivannan Sadhasivam, Lorenzo Pieralisi,
Krzysztof Wilczyński, Rob Herring, Bjorn Helgaas,
Krishna chaitanya chundru, Niklas Cassel
Cc: Wilfred Mallawa, Damien Le Moal, Hans Zhang, Laszlo Fiat,
Krzysztof Wilczyński, linux-pci, linux-arm-msm
Commit 36971d6c5a9a ("PCI: qcom: Don't wait for link if we can detect Link
Up") changed so that we no longer call dw_pcie_wait_for_link(), and instead
enumerate the bus when receiving a Link Up IRQ.
Before 36971d6c5a9a, we called dw_pcie_wait_for_link(), and in the first
iteration of the loop, the link will never be up (because the link was just
started), dw_pcie_wait_for_link() will then sleep for LINK_WAIT_SLEEP_MS
(90 ms), before trying again.
This means that even if a driver was missing a msleep(PCIE_T_RRS_READY_MS)
(100 ms), because of the call to dw_pcie_wait_for_link(), enumerating the
bus would essentially be delayed by that time anyway (because of the sleep
LINK_WAIT_SLEEP_MS (90 ms)).
While we could add the msleep(PCIE_T_RRS_READY_MS) after deasserting PERST
(qcom already has an unconditional 1 ms sleep after deasserting PERST),
that would essentially bring back an unconditional delay during probe (the
whole reason to use a Link Up IRQ was to avoid an unconditional delay
during probe).
Thus, add the msleep(PCIE_T_RRS_READY_MS) before enumerating the bus in the
IRQ handler. This way, for qcom SoCs that has a link up IRQ, we will not
have a 100 ms unconditional delay during boot for unpopulated PCIe slots.
Fixes: 36971d6c5a9a ("PCI: qcom: Don't wait for link if we can detect Link Up")
Signed-off-by: Niklas Cassel <cassel@kernel.org>
---
drivers/pci/controller/dwc/pcie-qcom.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/pci/controller/dwc/pcie-qcom.c b/drivers/pci/controller/dwc/pcie-qcom.c
index 6b18a2775e7f..5cef5e92b173 100644
--- a/drivers/pci/controller/dwc/pcie-qcom.c
+++ b/drivers/pci/controller/dwc/pcie-qcom.c
@@ -1646,6 +1646,7 @@ static irqreturn_t qcom_pcie_global_irq_thread(int irq, void *data)
if (FIELD_GET(PARF_INT_ALL_LINK_UP, status)) {
dev_dbg(dev, "Received Link up event. Starting enumeration!\n");
+ msleep(PCIE_T_RRS_READY_MS);
/* Rescan the bus to enumerate endpoint devices */
pci_lock_rescan_remove();
pci_rescan_bus(pp->bridge->bus);
--
2.49.0
^ permalink raw reply related [flat|nested] 3+ messages in thread* [PATCH 4/4] PCI: qcom: Replace PERST sleep time with proper macro
2025-05-05 9:26 [PATCH 0/4] PCI: dwc: Link Up IRQ fixes Niklas Cassel
2025-05-05 9:26 ` [PATCH 2/4] PCI: qcom: Do not enumerate bus before endpoint devices are ready Niklas Cassel
@ 2025-05-05 9:26 ` Niklas Cassel
1 sibling, 0 replies; 3+ messages in thread
From: Niklas Cassel @ 2025-05-05 9:26 UTC (permalink / raw)
To: Manivannan Sadhasivam, Lorenzo Pieralisi,
Krzysztof Wilczyński, Rob Herring, Bjorn Helgaas
Cc: Wilfred Mallawa, Damien Le Moal, Hans Zhang, Laszlo Fiat,
Niklas Cassel, linux-arm-msm, linux-pci
Replace the PERST sleep time with the proper macro (PCIE_T_PVPERL_MS).
No functional change.
Signed-off-by: Niklas Cassel <cassel@kernel.org>
---
drivers/pci/controller/dwc/pcie-qcom.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/pci/controller/dwc/pcie-qcom.c b/drivers/pci/controller/dwc/pcie-qcom.c
index 5cef5e92b173..b1b89d5cb86a 100644
--- a/drivers/pci/controller/dwc/pcie-qcom.c
+++ b/drivers/pci/controller/dwc/pcie-qcom.c
@@ -301,7 +301,7 @@ static void qcom_ep_reset_assert(struct qcom_pcie *pcie)
static void qcom_ep_reset_deassert(struct qcom_pcie *pcie)
{
/* Ensure that PERST has been asserted for at least 100 ms */
- msleep(100);
+ msleep(PCIE_T_PVPERL_MS);
gpiod_set_value_cansleep(pcie->reset, 0);
usleep_range(PERST_DELAY_US, PERST_DELAY_US + 500);
}
--
2.49.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-05-05 9:26 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-05-05 9:26 [PATCH 0/4] PCI: dwc: Link Up IRQ fixes Niklas Cassel
2025-05-05 9:26 ` [PATCH 2/4] PCI: qcom: Do not enumerate bus before endpoint devices are ready Niklas Cassel
2025-05-05 9:26 ` [PATCH 4/4] PCI: qcom: Replace PERST sleep time with proper macro Niklas Cassel
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox