lkml.org 
[lkml]   [2019]   [Mar]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH v3 5/5] PCI: dwc: Save root bus for driver remove
    From
    Date
    Hi,

    On 18/03/2019 09:58, Jisheng Zhang wrote:
    > Currently dwc host doesn't support the remove, but nothing prevent us
    > from supporting it. Save the root bus for clean up work in driver
    > remove code path.
    >
    > After this patch, the dwc host users could implement its remove as:
    >
    > static int foo_pcie_remove(struct platform_device *pdev)
    > {
    > ...
    > pci_stop_root_bus(pp->root_bus);
    > pci_remove_root_bus(pp->root_bus);
    > dw_pcie_free_msi(pp);
    > ...
    > }
    >
    > Signed-off-by: Jisheng Zhang <Jisheng.Zhang@synaptics.com>
    > ---
    > drivers/pci/controller/dwc/pcie-designware-host.c | 12 ++++++------
    > drivers/pci/controller/dwc/pcie-designware.h | 1 +
    > 2 files changed, 7 insertions(+), 6 deletions(-)
    >
    > diff --git a/drivers/pci/controller/dwc/pcie-designware-host.c b/drivers/pci/controller/dwc/pcie-designware-host.c
    > index 68a9dac23b1b..7e9dad7ba056 100644
    > --- a/drivers/pci/controller/dwc/pcie-designware-host.c
    > +++ b/drivers/pci/controller/dwc/pcie-designware-host.c
    > @@ -341,7 +341,7 @@ int dw_pcie_host_init(struct pcie_port *pp)
    > struct device_node *np = dev->of_node;
    > struct platform_device *pdev = to_platform_device(dev);
    > struct resource_entry *win, *tmp;
    > - struct pci_bus *bus, *child;
    > + struct pci_bus *child;
    > struct pci_host_bridge *bridge;
    > struct resource *cfg_res;
    > int ret;
    > @@ -496,18 +496,18 @@ int dw_pcie_host_init(struct pcie_port *pp)
    > if (ret)
    > goto err_free_msi;
    >
    > - bus = bridge->bus;
    > + pp->root_bus = bridge->bus;
    >
    > if (pp->ops->scan_bus)
    > pp->ops->scan_bus(pp);
    >
    > - pci_bus_size_bridges(bus);
    > - pci_bus_assign_resources(bus);
    > + pci_bus_size_bridges(pp->root_bus);
    > + pci_bus_assign_resources(pp->root_bus);
    >
    > - list_for_each_entry(child, &bus->children, node)
    > + list_for_each_entry(child, &pp->root_bus->children, node)
    > pcie_bus_configure_settings(child);
    >
    > - pci_bus_add_devices(bus);
    > + pci_bus_add_devices(pp->root_bus);
    > return 0;
    >
    > err_free_msi:
    > diff --git a/drivers/pci/controller/dwc/pcie-designware.h b/drivers/pci/controller/dwc/pcie-designware.h
    > index 6fb0a1879932..adff0c713665 100644
    > --- a/drivers/pci/controller/dwc/pcie-designware.h
    > +++ b/drivers/pci/controller/dwc/pcie-designware.h
    > @@ -182,6 +182,7 @@ struct pcie_port {
    > struct page *msi_page;
    > u32 num_vectors;
    > u32 irq_mask[MAX_MSI_CTRLS];
    > + struct pci_bus *root_bus;
    > raw_spinlock_t lock;
    > DECLARE_BITMAP(msi_irq_in_use, MAX_MSI_IRQS);
    > };
    >

    Acked-by: Gustavo Pimentel <gustavo.pimentel@synopsys.com>

    \
     
     \ /
      Last update: 2019-03-18 11:09    [W:4.028 / U:0.092 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site