diff options
Diffstat (limited to 'drivers/pci/controller/dwc/pcie-designware-plat.c')
| -rw-r--r-- | drivers/pci/controller/dwc/pcie-designware-plat.c | 12 | 
1 files changed, 8 insertions, 4 deletions
| diff --git a/drivers/pci/controller/dwc/pcie-designware-plat.c b/drivers/pci/controller/dwc/pcie-designware-plat.c index 5937fed4c938..c12bf794d69c 100644 --- a/drivers/pci/controller/dwc/pcie-designware-plat.c +++ b/drivers/pci/controller/dwc/pcie-designware-plat.c @@ -70,24 +70,29 @@ static const struct dw_pcie_ops dw_pcie_ops = {  static void dw_plat_pcie_ep_init(struct dw_pcie_ep *ep)  {  	struct dw_pcie *pci = to_dw_pcie_from_ep(ep); +	struct pci_epc *epc = ep->epc;  	enum pci_barno bar;  	for (bar = BAR_0; bar <= BAR_5; bar++)  		dw_pcie_ep_reset_bar(pci, bar); + +	epc->features |= EPC_FEATURE_NO_LINKUP_NOTIFIER; +	epc->features |= EPC_FEATURE_MSIX_AVAILABLE;  }  static int dw_plat_pcie_ep_raise_irq(struct dw_pcie_ep *ep, u8 func_no,  				     enum pci_epc_irq_type type, -				     u8 interrupt_num) +				     u16 interrupt_num)  {  	struct dw_pcie *pci = to_dw_pcie_from_ep(ep);  	switch (type) {  	case PCI_EPC_IRQ_LEGACY: -		dev_err(pci->dev, "EP cannot trigger legacy IRQs\n"); -		return -EINVAL; +		return dw_pcie_ep_raise_legacy_irq(ep, func_no);  	case PCI_EPC_IRQ_MSI:  		return dw_pcie_ep_raise_msi_irq(ep, func_no, interrupt_num); +	case PCI_EPC_IRQ_MSIX: +		return dw_pcie_ep_raise_msix_irq(ep, func_no, interrupt_num);  	default:  		dev_err(pci->dev, "UNKNOWN IRQ type\n");  	} @@ -118,7 +123,6 @@ static int dw_plat_add_pcie_port(struct dw_plat_pcie *dw_plat_pcie,  			return pp->msi_irq;  	} -	pp->root_bus_nr = -1;  	pp->ops = &dw_plat_pcie_host_ops;  	ret = dw_pcie_host_init(pp); |