From: Krishna Chaitanya Chundru <krishna.chundru@oss.qualcomm.com>
To: "Niklas Cassel" <cassel@kernel.org>,
"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>
Cc: Shawn Lin <shawn.lin@rock-chips.com>,
FUKAUMI Naoki <naoki@radxa.com>,
Krishna chaitanya chundru <quic_krichai@quicinc.com>,
Damien Le Moal <dlemoal@kernel.org>,
stable@vger.kernel.org, linux-pci@vger.kernel.org,
linux-arm-msm@vger.kernel.org
Subject: Re: [PATCH v2 5/6] Revert "PCI: qcom: Enumerate endpoints based on Link up event in 'global_irq' interrupt"
Date: Mon, 22 Dec 2025 12:21:16 +0530 [thread overview]
Message-ID: <efa4b3e2-7239-4002-ad92-5ce4f3d1611b@oss.qualcomm.com> (raw)
In-Reply-To: <20251222064207.3246632-13-cassel@kernel.org>
On 12/22/2025 12:12 PM, Niklas Cassel wrote:
> This reverts commit 4581403f67929d02c197cb187c4e1e811c9e762a.
>
> While this fake hotplugging was a nice idea, it has shown that this feature
> does not handle PCIe switches correctly:
> pci_bus 0004:43: busn_res: can not insert [bus 43-41] under [bus 42-41] (conflicts with (null) [bus 42-41])
> pci_bus 0004:43: busn_res: [bus 43-41] end is updated to 43
> pci_bus 0004:43: busn_res: can not insert [bus 43] under [bus 42-41] (conflicts with (null) [bus 42-41])
> pci 0004:42:00.0: devices behind bridge are unusable because [bus 43] cannot be assigned for them
> pci_bus 0004:44: busn_res: can not insert [bus 44-41] under [bus 42-41] (conflicts with (null) [bus 42-41])
> pci_bus 0004:44: busn_res: [bus 44-41] end is updated to 44
> pci_bus 0004:44: busn_res: can not insert [bus 44] under [bus 42-41] (conflicts with (null) [bus 42-41])
> pci 0004:42:02.0: devices behind bridge are unusable because [bus 44] cannot be assigned for them
> pci_bus 0004:45: busn_res: can not insert [bus 45-41] under [bus 42-41] (conflicts with (null) [bus 42-41])
> pci_bus 0004:45: busn_res: [bus 45-41] end is updated to 45
> pci_bus 0004:45: busn_res: can not insert [bus 45] under [bus 42-41] (conflicts with (null) [bus 42-41])
> pci 0004:42:06.0: devices behind bridge are unusable because [bus 45] cannot be assigned for them
> pci_bus 0004:46: busn_res: can not insert [bus 46-41] under [bus 42-41] (conflicts with (null) [bus 42-41])
> pci_bus 0004:46: busn_res: [bus 46-41] end is updated to 46
> pci_bus 0004:46: busn_res: can not insert [bus 46] under [bus 42-41] (conflicts with (null) [bus 42-41])
> pci 0004:42:0e.0: devices behind bridge are unusable because [bus 46] cannot be assigned for them
> pci_bus 0004:42: busn_res: [bus 42-41] end is updated to 46
> pci_bus 0004:42: busn_res: can not insert [bus 42-46] under [bus 41] (conflicts with (null) [bus 41])
> pci 0004:41:00.0: devices behind bridge are unusable because [bus 42-46] cannot be assigned for them
> pcieport 0004:40:00.0: bridge has subordinate 41 but max busn 46
>
> During the initial scan, PCI core doesn't see the switch and since the Root
> Port is not hot plug capable, the secondary bus number gets assigned as the
> subordinate bus number. This means, the PCI core assumes that only one bus
> will appear behind the Root Port since the Root Port is not hot plug
> capable.
>
> This works perfectly fine for PCIe endpoints connected to the Root Port,
> since they don't extend the bus. However, if a PCIe switch is connected,
> then there is a problem when the downstream busses starts showing up and
> the PCI core doesn't extend the subordinate bus number after initial scan
> during boot.
>
> The long term plan is to migrate this driver to the pwrctrl framework,
> once it adds proper support for powering up and enumerating PCIe switches.
>
> Cc: stable@vger.kernel.org
> Suggested-by: Manivannan Sadhasivam <mani@kernel.org>
> Acked-by: Shawn Lin <shawn.lin@rock-chips.com>
> Tested-by: Shawn Lin <shawn.lin@rock-chips.com>
> Signed-off-by: Niklas Cassel <cassel@kernel.org>
Removing patch 3/6 should be sufficient, don't remove global IRQ patch,
this will be helpful
when endpoint is connected at later point of time.
- Krishna Chaitanya.
> ---
> drivers/pci/controller/dwc/pcie-qcom.c | 58 +-------------------------
> 1 file changed, 1 insertion(+), 57 deletions(-)
>
> diff --git a/drivers/pci/controller/dwc/pcie-qcom.c b/drivers/pci/controller/dwc/pcie-qcom.c
> index c5fcb87972e9..13e6c334e10d 100644
> --- a/drivers/pci/controller/dwc/pcie-qcom.c
> +++ b/drivers/pci/controller/dwc/pcie-qcom.c
> @@ -55,9 +55,6 @@
> #define PARF_AXI_MSTR_WR_ADDR_HALT_V2 0x1a8
> #define PARF_Q2A_FLUSH 0x1ac
> #define PARF_LTSSM 0x1b0
> -#define PARF_INT_ALL_STATUS 0x224
> -#define PARF_INT_ALL_CLEAR 0x228
> -#define PARF_INT_ALL_MASK 0x22c
> #define PARF_SID_OFFSET 0x234
> #define PARF_BDF_TRANSLATE_CFG 0x24c
> #define PARF_DBI_BASE_ADDR_V2 0x350
> @@ -134,9 +131,6 @@
> /* PARF_LTSSM register fields */
> #define LTSSM_EN BIT(8)
>
> -/* PARF_INT_ALL_{STATUS/CLEAR/MASK} register fields */
> -#define PARF_INT_ALL_LINK_UP BIT(13)
> -
> /* PARF_NO_SNOOP_OVERRIDE register fields */
> #define WR_NO_SNOOP_OVERRIDE_EN BIT(1)
> #define RD_NO_SNOOP_OVERRIDE_EN BIT(3)
> @@ -1635,32 +1629,6 @@ static void qcom_pcie_init_debugfs(struct qcom_pcie *pcie)
> qcom_pcie_link_transition_count);
> }
>
> -static irqreturn_t qcom_pcie_global_irq_thread(int irq, void *data)
> -{
> - struct qcom_pcie *pcie = data;
> - struct dw_pcie_rp *pp = &pcie->pci->pp;
> - struct device *dev = pcie->pci->dev;
> - u32 status = readl_relaxed(pcie->parf + PARF_INT_ALL_STATUS);
> -
> - writel_relaxed(status, pcie->parf + PARF_INT_ALL_CLEAR);
> -
> - if (FIELD_GET(PARF_INT_ALL_LINK_UP, status)) {
> - msleep(PCIE_RESET_CONFIG_WAIT_MS);
> - dev_dbg(dev, "Received Link up event. Starting enumeration!\n");
> - /* Rescan the bus to enumerate endpoint devices */
> - pci_lock_rescan_remove();
> - pci_rescan_bus(pp->bridge->bus);
> - pci_unlock_rescan_remove();
> -
> - qcom_pcie_icc_opp_update(pcie);
> - } else {
> - dev_WARN_ONCE(dev, 1, "Received unknown event. INT_STATUS: 0x%08x\n",
> - status);
> - }
> -
> - return IRQ_HANDLED;
> -}
> -
> static void qcom_pci_free_msi(void *ptr)
> {
> struct dw_pcie_rp *pp = (struct dw_pcie_rp *)ptr;
> @@ -1805,8 +1773,7 @@ static int qcom_pcie_probe(struct platform_device *pdev)
> struct dw_pcie_rp *pp;
> struct resource *res;
> struct dw_pcie *pci;
> - int ret, irq;
> - char *name;
> + int ret;
>
> pcie_cfg = of_device_get_match_data(dev);
> if (!pcie_cfg) {
> @@ -1963,27 +1930,6 @@ static int qcom_pcie_probe(struct platform_device *pdev)
> goto err_phy_exit;
> }
>
> - name = devm_kasprintf(dev, GFP_KERNEL, "qcom_pcie_global_irq%d",
> - pci_domain_nr(pp->bridge->bus));
> - if (!name) {
> - ret = -ENOMEM;
> - goto err_host_deinit;
> - }
> -
> - irq = platform_get_irq_byname_optional(pdev, "global");
> - if (irq > 0) {
> - ret = devm_request_threaded_irq(&pdev->dev, irq, NULL,
> - qcom_pcie_global_irq_thread,
> - IRQF_ONESHOT, name, pcie);
> - if (ret) {
> - dev_err_probe(&pdev->dev, ret,
> - "Failed to request Global IRQ\n");
> - goto err_host_deinit;
> - }
> -
> - writel_relaxed(PARF_INT_ALL_LINK_UP, pcie->parf + PARF_INT_ALL_MASK);
> - }
> -
> qcom_pcie_icc_opp_update(pcie);
>
> if (pcie->mhi)
> @@ -1991,8 +1937,6 @@ static int qcom_pcie_probe(struct platform_device *pdev)
>
> return 0;
>
> -err_host_deinit:
> - dw_pcie_host_deinit(pp);
> err_phy_exit:
> list_for_each_entry_safe(port, tmp, &pcie->ports, list) {
> phy_exit(port->phy);
next prev parent reply other threads:[~2025-12-22 6:51 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-22 6:42 [PATCH v2 0/6] PCI: dwc: Revert Link Up IRQ support Niklas Cassel
2025-12-22 6:42 ` [PATCH v2 1/6] Revert "PCI: dw-rockchip: Don't wait for link since we can detect Link Up" Niklas Cassel
2025-12-26 22:31 ` Bjorn Helgaas
2025-12-30 10:14 ` Niklas Cassel
2025-12-22 6:42 ` [PATCH v2 2/6] Revert "PCI: dw-rockchip: Enumerate endpoints based on dll_link_up IRQ" Niklas Cassel
2025-12-22 6:42 ` [PATCH v2 3/6] Revert "PCI: qcom: Don't wait for link if we can detect Link Up" Niklas Cassel
2025-12-22 6:42 ` [PATCH v2 4/6] Revert "PCI: qcom: Enable MSI interrupts together with Link up if 'Global IRQ' is supported" Niklas Cassel
2025-12-22 6:48 ` Krishna Chaitanya Chundru
2025-12-22 7:00 ` Niklas Cassel
2025-12-22 12:00 ` Manivannan Sadhasivam
2025-12-22 6:42 ` [PATCH v2 5/6] Revert "PCI: qcom: Enumerate endpoints based on Link up event in 'global_irq' interrupt" Niklas Cassel
2025-12-22 6:51 ` Krishna Chaitanya Chundru [this message]
2025-12-22 7:14 ` Niklas Cassel
2025-12-22 11:52 ` Manivannan Sadhasivam
2025-12-22 6:42 ` [PATCH v2 6/6] Revert "PCI: dwc: Don't wait for link up if driver can detect Link Up event" Niklas Cassel
2025-12-22 17:02 ` [PATCH v2 0/6] PCI: dwc: Revert Link Up IRQ support 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=efa4b3e2-7239-4002-ad92-5ce4f3d1611b@oss.qualcomm.com \
--to=krishna.chundru@oss.qualcomm.com \
--cc=bhelgaas@google.com \
--cc=cassel@kernel.org \
--cc=dlemoal@kernel.org \
--cc=kwilczynski@kernel.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=lpieralisi@kernel.org \
--cc=mani@kernel.org \
--cc=naoki@radxa.com \
--cc=quic_krichai@quicinc.com \
--cc=robh@kernel.org \
--cc=shawn.lin@rock-chips.com \
--cc=stable@vger.kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox