mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-05 01:54:09 +08:00
PCI: cadence: Use struct pci_host_bridge.windows list directly
There's no need to create a temporary resource list and then splice it to struct pci_host_bridge.windows list. Just use pci_host_bridge.windows directly. The necessary clean-up is already handled by the PCI core. Link: https://lore.kernel.org/r/20200522234832.954484-2-robh@kernel.org Signed-off-by: Rob Herring <robh@kernel.org> Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> Cc: Tom Joseph <tjoseph@cadence.com>
This commit is contained in:
parent
b3a9e3b962
commit
24344226f6
@ -169,14 +169,15 @@ static int cdns_pcie_host_init_address_translation(struct cdns_pcie_rc *rc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int cdns_pcie_host_init(struct device *dev,
|
static int cdns_pcie_host_init(struct device *dev,
|
||||||
struct list_head *resources,
|
|
||||||
struct cdns_pcie_rc *rc)
|
struct cdns_pcie_rc *rc)
|
||||||
{
|
{
|
||||||
|
struct pci_host_bridge *bridge = pci_host_bridge_from_priv(rc);
|
||||||
struct resource *bus_range = NULL;
|
struct resource *bus_range = NULL;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
/* Parse our PCI ranges and request their resources */
|
/* Parse our PCI ranges and request their resources */
|
||||||
err = pci_parse_request_of_pci_ranges(dev, resources, NULL, &bus_range);
|
err = pci_parse_request_of_pci_ranges(dev, &bridge->windows, NULL,
|
||||||
|
&bus_range);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
@ -185,17 +186,9 @@ static int cdns_pcie_host_init(struct device *dev,
|
|||||||
|
|
||||||
err = cdns_pcie_host_init_root_port(rc);
|
err = cdns_pcie_host_init_root_port(rc);
|
||||||
if (err)
|
if (err)
|
||||||
goto err_out;
|
|
||||||
|
|
||||||
err = cdns_pcie_host_init_address_translation(rc);
|
|
||||||
if (err)
|
|
||||||
goto err_out;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
err_out:
|
|
||||||
pci_free_resource_list(resources);
|
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
return cdns_pcie_host_init_address_translation(rc);
|
||||||
}
|
}
|
||||||
|
|
||||||
int cdns_pcie_host_setup(struct cdns_pcie_rc *rc)
|
int cdns_pcie_host_setup(struct cdns_pcie_rc *rc)
|
||||||
@ -204,7 +197,6 @@ int cdns_pcie_host_setup(struct cdns_pcie_rc *rc)
|
|||||||
struct platform_device *pdev = to_platform_device(dev);
|
struct platform_device *pdev = to_platform_device(dev);
|
||||||
struct device_node *np = dev->of_node;
|
struct device_node *np = dev->of_node;
|
||||||
struct pci_host_bridge *bridge;
|
struct pci_host_bridge *bridge;
|
||||||
struct list_head resources;
|
|
||||||
struct cdns_pcie *pcie;
|
struct cdns_pcie *pcie;
|
||||||
struct resource *res;
|
struct resource *res;
|
||||||
int ret;
|
int ret;
|
||||||
@ -248,11 +240,10 @@ int cdns_pcie_host_setup(struct cdns_pcie_rc *rc)
|
|||||||
|
|
||||||
pcie->mem_res = res;
|
pcie->mem_res = res;
|
||||||
|
|
||||||
ret = cdns_pcie_host_init(dev, &resources, rc);
|
ret = cdns_pcie_host_init(dev, rc);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err_init;
|
goto err_init;
|
||||||
|
|
||||||
list_splice_init(&resources, &bridge->windows);
|
|
||||||
bridge->dev.parent = dev;
|
bridge->dev.parent = dev;
|
||||||
bridge->busnr = pcie->bus;
|
bridge->busnr = pcie->bus;
|
||||||
bridge->ops = &cdns_pcie_host_ops;
|
bridge->ops = &cdns_pcie_host_ops;
|
||||||
@ -261,13 +252,10 @@ int cdns_pcie_host_setup(struct cdns_pcie_rc *rc)
|
|||||||
|
|
||||||
ret = pci_host_probe(bridge);
|
ret = pci_host_probe(bridge);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto err_host_probe;
|
goto err_init;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_host_probe:
|
|
||||||
pci_free_resource_list(&resources);
|
|
||||||
|
|
||||||
err_init:
|
err_init:
|
||||||
pm_runtime_put_sync(dev);
|
pm_runtime_put_sync(dev);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user