[PATCH 2/2] PCI: dwc: Add multi-port controller support
Niklas Cassel
cassel at kernel.org
Tue Jan 6 13:16:56 PST 2026
On Tue, Jan 06, 2026 at 06:41:09PM +0530, Manivannan Sadhasivam wrote:
> > One advantage I can see, instead of doing:
> >
> > + struct dw_pcie_port *port = list_first_entry(&pci->pp.ports,
> > + struct dw_pcie_port, list);
> > + return dw_pcie_wait_for_link(pci, port);
> >
> > for drivers with only one port (most drivers), we could just instead do:
> >
> > + return dw_pcie_wait_for_link(pci, pci->pp.port);
> >
> > To simply get the first element in the array. No need to sprinkle
> > list_first_entry() everywhere in all the drivers if they just have one port.
> >
> >
> > For iterating, to avoid manually traversing the array, we could do like
> > libata and create a simple macro, e.g. ata_qc_for_each():
> > https://github.com/torvalds/linux/blob/v6.19-rc4/drivers/ata/libata-eh.c#L851-L854
> > https://github.com/torvalds/linux/blob/v6.19-rc4/include/linux/libata.h#L1657-L1659
> >
>
> I specifically do not want to introduce custom helpers. That's one of my primary
> motivation for using lists :)
You are the maintainer.
IMO it would still be nice if we could avoid sprinkling:
+struct dw_pcie_port *port = list_first_entry(&pci->pp.ports,
+ struct dw_pcie_port, list);
all over the glue drivers somehow, especially those that will only have a
single port. Perhaps by introducing a macro?
In case you don't like the idea of introducing a macro to get the first
port...
Since most glue drivers only seem to use the port when calling
dw_pcie_wait_for_link(), perhaps we could introduce an alternate version
of dw_pcie_wait_for_link(), that can be called by glue drivers that only
have a single port.
Kind regards,
Niklas
More information about the linux-riscv
mailing list