Thread (10 messages) 10 messages, 2 authors, 11d ago

Re: [PATCH 0/3] PCI: dwc: Cache PCIe capability offset and simplify drivers

From: Hans Zhang <18255117159@163.com>
Date: 2026-05-19 16:28:28
Also in: linux-amlogic, linux-arm-msm, linux-pci, linux-riscv, linux-rockchip, linux-tegra, lkml, spacemit


On 5/20/26 00:15, Manivannan Sadhasivam wrote:
On Wed, May 20, 2026 at 12:09:28AM +0800, Hans Zhang wrote:
quoted

On 5/19/26 21:57, Manivannan Sadhasivam wrote:
quoted
On Sat, May 09, 2026 at 09:51:49PM +0800, Hans Zhang wrote:
quoted
The DWC PCIe core and its many platform drivers repeatedly call
dw_pcie_find_capability(pci, PCI_CAP_ID_EXP) to obtain the offset of the
PCI Express Capability structure. This is wasteful and makes the code
verbose. And some even search for the PCI_CAP_ID_EXP offset value within
the suspend/resume functions.
Sashiko has flagged some real issues with this series in accessing DBI space
very early and 'pci->pcie_cap' being 0.

Hi Mani,

We have discussed this issue in the Cadence driver. I think it won't cause
any problems. Specifically as follows:

https://lore.kernel.org/linux-pci/5823faec-d972-4c77-90ec-a215c686e0a8@163.com/ (local)
"""
As per PCIe r7.0, sec 7.5.1.1.11, Since all PCI Express Functions are
required to implement the PCI Express Capability structure, which
must be included somewhere in this linked list.
"""



Bjorn also responded as follows:
https://lore.kernel.org/linux-pci/20260505212306.GA744158@bhelgaas/ (local)
"""
It's true that all Root Ports must have a PCIe Capability.
"""
Ok, what about reading the DBI registers very early?
Hi Mani,

Yes. I have performed the DBI read register operation at the very 
beginning of the following code.


dw_pcie_ep_init()
   dw_pcie_get_pcie_cap(pci);

dw_pcie_host_init
   dw_pcie_get_pcie_cap(pci);


However, for some glue drivers, they need to configure the registers of 
the PCIe Express Capability earlier than calling 
dw_pcie_host_init()/dw_pcie_ep_init(). So, for example, in the file: 
drivers/pci/controller/dwc/pcie-tegra194.c. Here, it is necessary to 
find the value of 'pci->pcie_cap' earlier. Then, 
dw_pcie_host_init()/dw_pcie_ep_init() will no longer search for the 
offset value of the PCIe Express Capability.


Best regards,
Hans

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help