From: Randolph Lin <randolph@andestech.com>
To: Bjorn Helgaas <helgaas@kernel.org>
Cc: <linux-kernel@vger.kernel.org>, <linux-pci@vger.kernel.org>,
<linux-riscv@lists.infradead.org>, <devicetree@vger.kernel.org>,
<jingoohan1@gmail.com>, <mani@kernel.org>,
<lpieralisi@kernel.org>, <kwilczynski@kernel.org>,
<robh@kernel.org>, <bhelgaas@google.com>, <krzk+dt@kernel.org>,
<conor+dt@kernel.org>, <alex@ghiti.fr>, <aou@eecs.berkeley.edu>,
<palmer@dabbelt.com>, <paul.walmsley@sifive.com>,
<ben717@andestech.com>, <inochiama@gmail.com>,
<thippeswamy.havalige@amd.com>, <namcao@linutronix.de>,
<shradha.t@samsung.com>, <randolph.sklin@gmail.com>,
<tim609@andestech.com>
Subject: Re: [PATCH v2 4/5] PCI: andes: Add Andes QiLai SoC PCIe host driver support
Date: Thu, 18 Sep 2025 20:54:40 +0800 [thread overview]
Message-ID: <aMwBEBNo0AAxlfHx@swlinux02> (raw)
In-Reply-To: <20250917215722.GA1876729@bhelgaas>
Hi Bjorn,
On Wed, Sep 17, 2025 at 04:57:22PM -0500, Bjorn Helgaas wrote:
> [EXTERNAL MAIL]
>
> On Wed, Sep 17, 2025 at 08:16:25PM +0800, Randolph Lin wrote:
> > On Tue, Sep 16, 2025 at 09:46:52AM -0500, Bjorn Helgaas wrote:
> > > On Tue, Sep 16, 2025 at 06:04:16PM +0800, Randolph Lin wrote:
> > > > Add driver support for DesignWare based PCIe controller in Andes
> > > > QiLai SoC. The driver only supports the Root Complex mode.
>
> > > > + Say Y here to enable PCIe controller support on Andes QiLai SoCs,
> > > > + which operate in Root Complex mode. The Andes QiLai SoCs PCIe
> > > > + controller is based on DesignWare IP (5.97a version) and therefore
> > > > + the driver re-uses the DesignWare core functions to implement the
> > > > + driver. The Andes QiLai SoC has three Root Complexes (RCs): one
> > > > + operates on PCIe 4.0 with 4 lanes at 0x80000000, while the other
> > > > + two operate on PCIe 4.0 with 2 lanes at 0xA0000000 and 0xC0000000,
> > > > + respectively.
> > >
> > > I assume these addresses come from devicetree, so I don't think
> > > there's any need to include them here.
> >
> > I will add num-lanes property in the devicetree.
>
> Don't add num-lanes to devicetree unless your driver requires it.
> dw_pcie_host_init() uses dw_pcie_link_get_max_link_width() try to get
> the lane width from PCI_EXP_LNKCAP.
>
ok.
> > > > +static
> > > > +bool qilai_pcie_outbound_atu_addr_valid(struct dw_pcie *pci,
> > > > + const struct dw_pcie_ob_atu_cfg *atu,
> > > > + u64 *limit_addr)
> > > > +{
> > > > + u64 parent_bus_addr = atu->parent_bus_addr;
> > > > +
> > > > + *limit_addr = parent_bus_addr + atu->size - 1;
> > > > +
> > > > + /*
> > > > + * Addresses below 4 GB are not 1:1 mapped; therefore, range checks
> > > > + * only need to ensure addresses below 4 GB match pci->region_limit.
> > > > + */
> > > > + if (lower_32_bits(*limit_addr & ~pci->region_limit) !=
> > > > + lower_32_bits(parent_bus_addr & ~pci->region_limit) ||
> > > > + !IS_ALIGNED(parent_bus_addr, pci->region_align) ||
> > > > + !IS_ALIGNED(atu->pci_addr, pci->region_align) || !atu->size)
> > > > + return false;
> > >
> > > Seems a little bit strange. Is this something that could be expressed
> > > via devicetree? Or something peculiar about QiLai that's different
> > > from all the other DWC-based controllers?
> >
> > After reviewing both the code history and the bug tracking system,
> > it turns out that this code doesn't even qualify as a valid
> > workaround. Apologies for having submitted it as a patch.
> >
> > The root cause is that the iATU limits were not configured
> > correctly. The original design assumed at least 32GB or 128GB of
> > BAR resource assignment, but the actual chip sets the iATU limit to
> > only 4GB. As a result, region_limit is always constrained by this
> > 4GB boundary.
> >
> > The correct workaround should be to program the iATU only for the
> > 32-bit address space and skip iATU programming for the 64-bit space.
> > A simple way to implement this workaround is to parse the
> > num-viewport property from the devicetree and use this value
> > directly, instead of relying on the result of reading
> > PCIE_ATU_VIEWPORT.
> >
> > I will attempt to implement it this way, but the correct method is
> > not yet well-defined. Do you have any suggestions on how to modify
> > the num-viewport property from the devicetree for use in the driver?
> > It seems it will be modified in pcie-designware.c.
>
> Nope, I don't know enough about DWC to give any advice, sorry!
>
> > > > +static struct platform_driver qilai_pcie_driver = {
> > > > + .probe = qilai_pcie_probe,
> > > > + .driver = {
> > > > + .name = "qilai-pcie",
> > > > + .of_match_table = qilai_pcie_of_match,
> > > > + /* only test passed at PROBE_DEFAULT_STRATEGY */
> > > > + .probe_type = PROBE_DEFAULT_STRATEGY,
> > >
> > > This is the only use of PROBE_DEFAULT_STRATEGY in the entire tree, so
> > > I doubt you need it. If you do, please explain why in more detail.
> >
> > In the V1 patch, the reviewer, Manivannan, suggested:
> > "You should start using PROBE_PREFER_ASYNCHRONOUS."
> > However, after setting up PROBE_PREFER_ASYNCHRONOUS, numerous errors
> > were encountered during the EP device probe flow.
> > Therefore, we would prefer to continue using PROBE_DEFAULT_STRATEGY.
>
> I don't really know the details of probe_type. But it sounds like the
> errors with PROBE_PREFER_ASYNCHRONOUS should probably be debugged and
> fixed.
>
> If PROBE_PREFER_ASYNCHRONOUS can't be made to work, it sounds like you
> should specify PROBE_FORCE_SYNCHRONOUS, because the comments suggest
> that using PROBE_DEFAULT_STRATEGY means the driver should work with
> either PROBE_FORCE_SYNCHRONOUS or PROBE_PREFER_ASYNCHRONOUS:
>
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/linux/device/driver.h?id=v6.16#n24
refer to the following patches:
91703041697c ("PCI: Allow built-in drivers to use async initial probing")
8e77d3d59d7b ("Revert "usb: xhci-pci: Set PROBE_PREFER_ASYNCHRONOUS"")
We can continue using PROBE_PREFER_ASYNCHRONOUS.
When used with drivers that support it, such as NVMe, the system behaves as
expected. In the past, we primarily used Renesas xHCI controller.
Sincerely,
Randolph
next prev parent reply other threads:[~2025-09-18 12:59 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-16 10:04 [PATCH v2 0/5] Add support for Andes Qilai SoC PCIe controller Randolph Lin
2025-09-16 10:04 ` [PATCH v2 1/5] PCI: dwc: Add outbound ATU address range validation callback Randolph Lin
2025-09-16 10:04 ` [PATCH v2 2/5] dt-bindings: Add Andes QiLai PCIe support Randolph Lin
2025-09-17 16:38 ` Frank Li
2025-09-17 21:59 ` Bjorn Helgaas
2025-09-16 10:04 ` [PATCH v2 3/5] riscv: dts: andes: Add PCIe node into the QiLai SoC Randolph Lin
2025-09-16 10:04 ` [PATCH v2 4/5] PCI: andes: Add Andes QiLai SoC PCIe host driver support Randolph Lin
2025-09-16 14:46 ` Bjorn Helgaas
2025-09-17 12:16 ` Randolph Lin
2025-09-17 21:57 ` Bjorn Helgaas
2025-09-18 12:54 ` Randolph Lin [this message]
2025-09-17 9:52 ` kernel test robot
2025-09-16 10:04 ` [PATCH v2 5/5] MAINTAINERS: Add maintainers for Andes QiLai PCIe driver Randolph Lin
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=aMwBEBNo0AAxlfHx@swlinux02 \
--to=randolph@andestech.com \
--cc=alex@ghiti.fr \
--cc=aou@eecs.berkeley.edu \
--cc=ben717@andestech.com \
--cc=bhelgaas@google.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=helgaas@kernel.org \
--cc=inochiama@gmail.com \
--cc=jingoohan1@gmail.com \
--cc=krzk+dt@kernel.org \
--cc=kwilczynski@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=lpieralisi@kernel.org \
--cc=mani@kernel.org \
--cc=namcao@linutronix.de \
--cc=palmer@dabbelt.com \
--cc=paul.walmsley@sifive.com \
--cc=randolph.sklin@gmail.com \
--cc=robh@kernel.org \
--cc=shradha.t@samsung.com \
--cc=thippeswamy.havalige@amd.com \
--cc=tim609@andestech.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).