lkml.org 
[lkml]   [2018]   [May]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 7/8] PCI: Add support for unbinding the generic PCI host controller
    Date
    From: Jan Kiszka <jan.kiszka@siemens.com>

    Particularly useful when working in virtual environments where the
    controller may come and go, but possibly not only there.

    CC: Will Deacon <will.deacon@arm.com>
    CC: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
    Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
    ---
    drivers/pci/host/pci-host-common.c | 13 +++++++++++++
    drivers/pci/host/pci-host-generic.c | 1 +
    include/linux/pci-ecam.h | 1 +
    3 files changed, 15 insertions(+)

    diff --git a/drivers/pci/host/pci-host-common.c b/drivers/pci/host/pci-host-common.c
    index 5d028f53fdcd..d8f10451f273 100644
    --- a/drivers/pci/host/pci-host-common.c
    +++ b/drivers/pci/host/pci-host-common.c
    @@ -101,5 +101,18 @@ int pci_host_common_probe(struct platform_device *pdev,
    return ret;
    }

    + platform_set_drvdata(pdev, bridge->bus);
    + return 0;
    +}
    +
    +int pci_host_common_remove(struct platform_device *pdev)
    +{
    + struct pci_bus *bus = platform_get_drvdata(pdev);
    +
    + pci_lock_rescan_remove();
    + pci_stop_root_bus(bus);
    + pci_remove_root_bus(bus);
    + pci_unlock_rescan_remove();
    +
    return 0;
    }
    diff --git a/drivers/pci/host/pci-host-generic.c b/drivers/pci/host/pci-host-generic.c
    index 45319ee3b484..dea3ec7592a2 100644
    --- a/drivers/pci/host/pci-host-generic.c
    +++ b/drivers/pci/host/pci-host-generic.c
    @@ -95,5 +95,6 @@ static struct platform_driver gen_pci_driver = {
    .suppress_bind_attrs = true,
    },
    .probe = gen_pci_probe,
    + .remove = pci_host_common_remove,
    };
    builtin_platform_driver(gen_pci_driver);
    diff --git a/include/linux/pci-ecam.h b/include/linux/pci-ecam.h
    index baadad1aabbc..29efa09d686b 100644
    --- a/include/linux/pci-ecam.h
    +++ b/include/linux/pci-ecam.h
    @@ -62,5 +62,6 @@ extern struct pci_ecam_ops xgene_v2_pcie_ecam_ops; /* APM X-Gene PCIe v2.x */
    /* for DT-based PCI controllers that support ECAM */
    int pci_host_common_probe(struct platform_device *pdev,
    struct pci_ecam_ops *ops);
    +int pci_host_common_remove(struct platform_device *pdev);
    #endif
    #endif
    --
    2.13.6
    \
     
     \ /
      Last update: 2018-05-15 07:59    [W:2.272 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site