diff options
author | Vidya Sagar <vidyas@nvidia.com> | 2019-06-25 05:22:36 -0400 |
---|---|---|
committer | Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> | 2019-06-27 07:02:46 -0400 |
commit | 9d071cade30a05b46e894885beeba9922dc4fd23 (patch) | |
tree | 023283315d0d86cd9b5b072e6de7b5c937d0b3ec | |
parent | a188339ca5a396acc588e5851ed7e19f66b0ebd9 (diff) |
PCI: dwc: Add API support to de-initialize host
Add an API to group all the tasks to be done to de-initialize host which
can then be called by any dwc core based driver implementations
while adding .remove() support in their respective drivers.
Signed-off-by: Vidya Sagar <vidyas@nvidia.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Acked-by: Gustavo Pimentel <gustavo.pimentel@synopsys.com>
-rw-r--r-- | drivers/pci/controller/dwc/pcie-designware-host.c | 8 | ||||
-rw-r--r-- | drivers/pci/controller/dwc/pcie-designware.h | 5 |
2 files changed, 13 insertions, 0 deletions
diff --git a/drivers/pci/controller/dwc/pcie-designware-host.c b/drivers/pci/controller/dwc/pcie-designware-host.c index 77db32529319..d069e4290180 100644 --- a/drivers/pci/controller/dwc/pcie-designware-host.c +++ b/drivers/pci/controller/dwc/pcie-designware-host.c | |||
@@ -496,6 +496,14 @@ err_free_msi: | |||
496 | return ret; | 496 | return ret; |
497 | } | 497 | } |
498 | 498 | ||
499 | void dw_pcie_host_deinit(struct pcie_port *pp) | ||
500 | { | ||
501 | pci_stop_root_bus(pp->root_bus); | ||
502 | pci_remove_root_bus(pp->root_bus); | ||
503 | if (pci_msi_enabled() && !pp->ops->msi_host_init) | ||
504 | dw_pcie_free_msi(pp); | ||
505 | } | ||
506 | |||
499 | static int dw_pcie_access_other_conf(struct pcie_port *pp, struct pci_bus *bus, | 507 | static int dw_pcie_access_other_conf(struct pcie_port *pp, struct pci_bus *bus, |
500 | u32 devfn, int where, int size, u32 *val, | 508 | u32 devfn, int where, int size, u32 *val, |
501 | bool write) | 509 | bool write) |
diff --git a/drivers/pci/controller/dwc/pcie-designware.h b/drivers/pci/controller/dwc/pcie-designware.h index b8993f2b78df..14762e262758 100644 --- a/drivers/pci/controller/dwc/pcie-designware.h +++ b/drivers/pci/controller/dwc/pcie-designware.h | |||
@@ -351,6 +351,7 @@ void dw_pcie_msi_init(struct pcie_port *pp); | |||
351 | void dw_pcie_free_msi(struct pcie_port *pp); | 351 | void dw_pcie_free_msi(struct pcie_port *pp); |
352 | void dw_pcie_setup_rc(struct pcie_port *pp); | 352 | void dw_pcie_setup_rc(struct pcie_port *pp); |
353 | int dw_pcie_host_init(struct pcie_port *pp); | 353 | int dw_pcie_host_init(struct pcie_port *pp); |
354 | void dw_pcie_host_deinit(struct pcie_port *pp); | ||
354 | int dw_pcie_allocate_domains(struct pcie_port *pp); | 355 | int dw_pcie_allocate_domains(struct pcie_port *pp); |
355 | #else | 356 | #else |
356 | static inline irqreturn_t dw_handle_msi_irq(struct pcie_port *pp) | 357 | static inline irqreturn_t dw_handle_msi_irq(struct pcie_port *pp) |
@@ -375,6 +376,10 @@ static inline int dw_pcie_host_init(struct pcie_port *pp) | |||
375 | return 0; | 376 | return 0; |
376 | } | 377 | } |
377 | 378 | ||
379 | static inline void dw_pcie_host_deinit(struct pcie_port *pp) | ||
380 | { | ||
381 | } | ||
382 | |||
378 | static inline int dw_pcie_allocate_domains(struct pcie_port *pp) | 383 | static inline int dw_pcie_allocate_domains(struct pcie_port *pp) |
379 | { | 384 | { |
380 | return 0; | 385 | return 0; |