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.
Add a cached pcie_cap field in struct dw_pcie and a helper dw_pcie_get_pcie_cap() to initialize it once at probe time. Then replace all explicit capability searches with the cached value across the entire dwc subtree. Hans Zhang (3): PCI: dwc: Add pcie_cap field and helper in designware header PCI: dwc: Use cached PCIe capability offset in core PCI: dwc: Simplify platform drivers using cached capability offset drivers/pci/controller/dwc/pci-imx6.c | 6 +-- .../pci/controller/dwc/pci-layerscape-ep.c | 4 +- drivers/pci/controller/dwc/pci-meson.c | 4 +- .../pci/controller/dwc/pcie-designware-ep.c | 4 +- .../pci/controller/dwc/pcie-designware-host.c | 4 +- drivers/pci/controller/dwc/pcie-designware.c | 16 +++--- drivers/pci/controller/dwc/pcie-designware.h | 17 +++++++ drivers/pci/controller/dwc/pcie-dw-rockchip.c | 15 +++--- drivers/pci/controller/dwc/pcie-eswin.c | 3 +- drivers/pci/controller/dwc/pcie-fu740.c | 2 +- drivers/pci/controller/dwc/pcie-intel-gw.c | 2 +- drivers/pci/controller/dwc/pcie-qcom-ep.c | 11 ++-- drivers/pci/controller/dwc/pcie-qcom.c | 24 ++++----- drivers/pci/controller/dwc/pcie-sophgo.c | 8 ++- drivers/pci/controller/dwc/pcie-spacemit-k1.c | 5 +- drivers/pci/controller/dwc/pcie-spear13xx.c | 6 +-- drivers/pci/controller/dwc/pcie-tegra194.c | 51 +++++++------------ 17 files changed, 85 insertions(+), 97 deletions(-) base-commit: 70390501d1944d4e5b8f7352be180fceb3a44132 -- 2.34.1
