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 | |
| 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')
| -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 | { |
