diff options
author | Gustavo Pimentel <gustavo.pimentel@synopsys.com> | 2018-07-19 04:32:16 -0400 |
---|---|---|
committer | Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> | 2018-07-19 06:38:38 -0400 |
commit | cb22d40b5f2bcf9d374ae92ea504df620daea342 (patch) | |
tree | b0668287d98941040b869f358454443fc0d7a87f /drivers/pci/controller/dwc | |
parent | 3920a5d7b24dc5229abe6fb8409e4c9de2c8c7a0 (diff) |
PCI: dwc: Add legacy interrupt callback handler
Currently DesignWare IP does not handle legacy interrupts.
Add a legacy interrupt callback handler.
Signed-off-by: Gustavo Pimentel <gustavo.pimentel@synopsys.com>
[lorenzo.pieralisi@arm.com: updated commit log]
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Acked-by: Kishon Vijay Abraham I <kishon@ti.com>
Diffstat (limited to 'drivers/pci/controller/dwc')
-rw-r--r-- | drivers/pci/controller/dwc/pcie-designware-ep.c | 10 | ||||
-rw-r--r-- | drivers/pci/controller/dwc/pcie-designware-plat.c | 3 | ||||
-rw-r--r-- | drivers/pci/controller/dwc/pcie-designware.h | 6 |
3 files changed, 17 insertions, 2 deletions
diff --git a/drivers/pci/controller/dwc/pcie-designware-ep.c b/drivers/pci/controller/dwc/pcie-designware-ep.c index dd9c36678cba..1e7b02221eac 100644 --- a/drivers/pci/controller/dwc/pcie-designware-ep.c +++ b/drivers/pci/controller/dwc/pcie-designware-ep.c | |||
@@ -370,6 +370,16 @@ static const struct pci_epc_ops epc_ops = { | |||
370 | .stop = dw_pcie_ep_stop, | 370 | .stop = dw_pcie_ep_stop, |
371 | }; | 371 | }; |
372 | 372 | ||
373 | int dw_pcie_ep_raise_legacy_irq(struct dw_pcie_ep *ep, u8 func_no) | ||
374 | { | ||
375 | struct dw_pcie *pci = to_dw_pcie_from_ep(ep); | ||
376 | struct device *dev = pci->dev; | ||
377 | |||
378 | dev_err(dev, "EP cannot trigger legacy IRQs\n"); | ||
379 | |||
380 | return -EINVAL; | ||
381 | } | ||
382 | |||
373 | int dw_pcie_ep_raise_msi_irq(struct dw_pcie_ep *ep, u8 func_no, | 383 | int dw_pcie_ep_raise_msi_irq(struct dw_pcie_ep *ep, u8 func_no, |
374 | u8 interrupt_num) | 384 | u8 interrupt_num) |
375 | { | 385 | { |
diff --git a/drivers/pci/controller/dwc/pcie-designware-plat.c b/drivers/pci/controller/dwc/pcie-designware-plat.c index 35d2291c6ba5..3f8a3aa3a91e 100644 --- a/drivers/pci/controller/dwc/pcie-designware-plat.c +++ b/drivers/pci/controller/dwc/pcie-designware-plat.c | |||
@@ -87,8 +87,7 @@ static int dw_plat_pcie_ep_raise_irq(struct dw_pcie_ep *ep, u8 func_no, | |||
87 | 87 | ||
88 | switch (type) { | 88 | switch (type) { |
89 | case PCI_EPC_IRQ_LEGACY: | 89 | case PCI_EPC_IRQ_LEGACY: |
90 | dev_err(pci->dev, "EP cannot trigger legacy IRQs\n"); | 90 | return dw_pcie_ep_raise_legacy_irq(ep, func_no); |
91 | return -EINVAL; | ||
92 | case PCI_EPC_IRQ_MSI: | 91 | case PCI_EPC_IRQ_MSI: |
93 | return dw_pcie_ep_raise_msi_irq(ep, func_no, interrupt_num); | 92 | return dw_pcie_ep_raise_msi_irq(ep, func_no, interrupt_num); |
94 | case PCI_EPC_IRQ_MSIX: | 93 | case PCI_EPC_IRQ_MSIX: |
diff --git a/drivers/pci/controller/dwc/pcie-designware.h b/drivers/pci/controller/dwc/pcie-designware.h index e8b97f5a64be..96126fd8403c 100644 --- a/drivers/pci/controller/dwc/pcie-designware.h +++ b/drivers/pci/controller/dwc/pcie-designware.h | |||
@@ -348,6 +348,7 @@ static inline int dw_pcie_allocate_domains(struct pcie_port *pp) | |||
348 | void dw_pcie_ep_linkup(struct dw_pcie_ep *ep); | 348 | void dw_pcie_ep_linkup(struct dw_pcie_ep *ep); |
349 | int dw_pcie_ep_init(struct dw_pcie_ep *ep); | 349 | int dw_pcie_ep_init(struct dw_pcie_ep *ep); |
350 | void dw_pcie_ep_exit(struct dw_pcie_ep *ep); | 350 | void dw_pcie_ep_exit(struct dw_pcie_ep *ep); |
351 | int dw_pcie_ep_raise_legacy_irq(struct dw_pcie_ep *ep, u8 func_no); | ||
351 | int dw_pcie_ep_raise_msi_irq(struct dw_pcie_ep *ep, u8 func_no, | 352 | int dw_pcie_ep_raise_msi_irq(struct dw_pcie_ep *ep, u8 func_no, |
352 | u8 interrupt_num); | 353 | u8 interrupt_num); |
353 | int dw_pcie_ep_raise_msix_irq(struct dw_pcie_ep *ep, u8 func_no, | 354 | int dw_pcie_ep_raise_msix_irq(struct dw_pcie_ep *ep, u8 func_no, |
@@ -367,6 +368,11 @@ static inline void dw_pcie_ep_exit(struct dw_pcie_ep *ep) | |||
367 | { | 368 | { |
368 | } | 369 | } |
369 | 370 | ||
371 | static inline int dw_pcie_ep_raise_legacy_irq(struct dw_pcie_ep *ep, u8 func_no) | ||
372 | { | ||
373 | return 0; | ||
374 | } | ||
375 | |||
370 | static inline int dw_pcie_ep_raise_msi_irq(struct dw_pcie_ep *ep, u8 func_no, | 376 | static inline int dw_pcie_ep_raise_msi_irq(struct dw_pcie_ep *ep, u8 func_no, |
371 | u8 interrupt_num) | 377 | u8 interrupt_num) |
372 | { | 378 | { |