diff options
author | Bjorn Helgaas <bhelgaas@google.com> | 2025-03-15 15:15:44 -0500 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2025-03-24 14:58:34 -0500 |
commit | d7ae671eba8b3aafed6af47a087d400eefbcff94 (patch) | |
tree | 93e7eac3dfc6d27df2ecfb2f4981a512b07cd845 /drivers/pci/controller/dwc | |
parent | 92eb132ad1b27a6850acadfe4b3f7b25ada749cb (diff) | |
download | linux-d7ae671eba8b3aafed6af47a087d400eefbcff94.tar.gz linux-d7ae671eba8b3aafed6af47a087d400eefbcff94.tar.bz2 linux-d7ae671eba8b3aafed6af47a087d400eefbcff94.zip |
PCI: dwc: ep: Consolidate devicetree handling in dw_pcie_ep_get_resources()
Consolidate devicetree resource handling in dw_pcie_ep_get_resources().
No functional change intended.
Link: https://lore.kernel.org/r/20250315201548.858189-10-helgaas@kernel.org
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Frank Li <Frank.Li@nxp.com>
Diffstat (limited to 'drivers/pci/controller/dwc')
-rw-r--r-- | drivers/pci/controller/dwc/pcie-designware-ep.c | 44 |
1 files changed, 29 insertions, 15 deletions
diff --git a/drivers/pci/controller/dwc/pcie-designware-ep.c b/drivers/pci/controller/dwc/pcie-designware-ep.c index 100d26466f05..2db834345ec2 100644 --- a/drivers/pci/controller/dwc/pcie-designware-ep.c +++ b/drivers/pci/controller/dwc/pcie-designware-ep.c @@ -883,6 +883,34 @@ void dw_pcie_ep_linkdown(struct dw_pcie_ep *ep) } EXPORT_SYMBOL_GPL(dw_pcie_ep_linkdown); +static int dw_pcie_ep_get_resources(struct dw_pcie_ep *ep) +{ + struct dw_pcie *pci = to_dw_pcie_from_ep(ep); + struct device *dev = pci->dev; + struct platform_device *pdev = to_platform_device(dev); + struct device_node *np = dev->of_node; + struct pci_epc *epc = ep->epc; + struct resource *res; + int ret; + + ret = dw_pcie_get_resources(pci); + if (ret) + return ret; + + res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "addr_space"); + if (!res) + return -EINVAL; + + ep->phys_base = res->start; + ep->addr_size = resource_size(res); + + ret = of_property_read_u8(np, "max-functions", &epc->max_functions); + if (ret < 0) + epc->max_functions = 1; + + return 0; +} + /** * dw_pcie_ep_init - Initialize the endpoint device * @ep: DWC EP device @@ -895,12 +923,9 @@ EXPORT_SYMBOL_GPL(dw_pcie_ep_linkdown); int dw_pcie_ep_init(struct dw_pcie_ep *ep) { int ret; - struct resource *res; struct pci_epc *epc; struct dw_pcie *pci = to_dw_pcie_from_ep(ep); struct device *dev = pci->dev; - struct platform_device *pdev = to_platform_device(dev); - struct device_node *np = dev->of_node; INIT_LIST_HEAD(&ep->func_list); @@ -913,24 +938,13 @@ int dw_pcie_ep_init(struct dw_pcie_ep *ep) ep->epc = epc; epc_set_drvdata(epc, ep); - ret = dw_pcie_get_resources(pci); + ret = dw_pcie_ep_get_resources(ep); if (ret) return ret; - res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "addr_space"); - if (!res) - return -EINVAL; - - ep->phys_base = res->start; - ep->addr_size = resource_size(res); - if (ep->ops->pre_init) ep->ops->pre_init(ep); - ret = of_property_read_u8(np, "max-functions", &epc->max_functions); - if (ret < 0) - epc->max_functions = 1; - ret = pci_epc_mem_init(epc, ep->phys_base, ep->addr_size, ep->page_size); if (ret < 0) { |