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>
This commit is contained in:
Родитель
3920a5d7b2
Коммит
cb22d40b5f
|
@ -370,6 +370,16 @@ static const struct pci_epc_ops epc_ops = {
|
||||||
.stop = dw_pcie_ep_stop,
|
.stop = dw_pcie_ep_stop,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
int dw_pcie_ep_raise_legacy_irq(struct dw_pcie_ep *ep, u8 func_no)
|
||||||
|
{
|
||||||
|
struct dw_pcie *pci = to_dw_pcie_from_ep(ep);
|
||||||
|
struct device *dev = pci->dev;
|
||||||
|
|
||||||
|
dev_err(dev, "EP cannot trigger legacy IRQs\n");
|
||||||
|
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
int dw_pcie_ep_raise_msi_irq(struct dw_pcie_ep *ep, u8 func_no,
|
int dw_pcie_ep_raise_msi_irq(struct dw_pcie_ep *ep, u8 func_no,
|
||||||
u8 interrupt_num)
|
u8 interrupt_num)
|
||||||
{
|
{
|
||||||
|
|
|
@ -87,8 +87,7 @@ static int dw_plat_pcie_ep_raise_irq(struct dw_pcie_ep *ep, u8 func_no,
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case PCI_EPC_IRQ_LEGACY:
|
case PCI_EPC_IRQ_LEGACY:
|
||||||
dev_err(pci->dev, "EP cannot trigger legacy IRQs\n");
|
return dw_pcie_ep_raise_legacy_irq(ep, func_no);
|
||||||
return -EINVAL;
|
|
||||||
case PCI_EPC_IRQ_MSI:
|
case PCI_EPC_IRQ_MSI:
|
||||||
return dw_pcie_ep_raise_msi_irq(ep, func_no, interrupt_num);
|
return dw_pcie_ep_raise_msi_irq(ep, func_no, interrupt_num);
|
||||||
case PCI_EPC_IRQ_MSIX:
|
case PCI_EPC_IRQ_MSIX:
|
||||||
|
|
|
@ -348,6 +348,7 @@ static inline int dw_pcie_allocate_domains(struct pcie_port *pp)
|
||||||
void dw_pcie_ep_linkup(struct dw_pcie_ep *ep);
|
void dw_pcie_ep_linkup(struct dw_pcie_ep *ep);
|
||||||
int dw_pcie_ep_init(struct dw_pcie_ep *ep);
|
int dw_pcie_ep_init(struct dw_pcie_ep *ep);
|
||||||
void dw_pcie_ep_exit(struct dw_pcie_ep *ep);
|
void dw_pcie_ep_exit(struct dw_pcie_ep *ep);
|
||||||
|
int dw_pcie_ep_raise_legacy_irq(struct dw_pcie_ep *ep, u8 func_no);
|
||||||
int dw_pcie_ep_raise_msi_irq(struct dw_pcie_ep *ep, u8 func_no,
|
int dw_pcie_ep_raise_msi_irq(struct dw_pcie_ep *ep, u8 func_no,
|
||||||
u8 interrupt_num);
|
u8 interrupt_num);
|
||||||
int dw_pcie_ep_raise_msix_irq(struct dw_pcie_ep *ep, u8 func_no,
|
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)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int dw_pcie_ep_raise_legacy_irq(struct dw_pcie_ep *ep, u8 func_no)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static inline int dw_pcie_ep_raise_msi_irq(struct dw_pcie_ep *ep, u8 func_no,
|
static inline int dw_pcie_ep_raise_msi_irq(struct dw_pcie_ep *ep, u8 func_no,
|
||||||
u8 interrupt_num)
|
u8 interrupt_num)
|
||||||
{
|
{
|
||||||
|
|
Загрузка…
Ссылка в новой задаче