Lines Matching +full:pcie +full:- +full:ep
1 // SPDX-License-Identifier: GPL-2.0
3 * PCIe RC driver for Synopsys DesignWare Core
5 * Copyright (C) 2015-2016 Synopsys, Inc. (www.synopsys.com)
22 #include "pcie-designware.h"
49 pp->num_vectors = MAX_MSI_IRQS; in dw_plat_set_num_vectors()
66 static void dw_plat_pcie_ep_init(struct dw_pcie_ep *ep) in dw_plat_pcie_ep_init() argument
68 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_plat_pcie_ep_init()
75 static int dw_plat_pcie_ep_raise_irq(struct dw_pcie_ep *ep, u8 func_no, in dw_plat_pcie_ep_raise_irq() argument
79 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_plat_pcie_ep_raise_irq()
83 return dw_pcie_ep_raise_legacy_irq(ep, func_no); in dw_plat_pcie_ep_raise_irq()
85 return dw_pcie_ep_raise_msi_irq(ep, func_no, interrupt_num); in dw_plat_pcie_ep_raise_irq()
87 return dw_pcie_ep_raise_msix_irq(ep, func_no, interrupt_num); in dw_plat_pcie_ep_raise_irq()
89 dev_err(pci->dev, "UNKNOWN IRQ type\n"); in dw_plat_pcie_ep_raise_irq()
102 dw_plat_pcie_get_features(struct dw_pcie_ep *ep) in dw_plat_pcie_get_features() argument
116 struct dw_pcie *pci = dw_plat_pcie->pci; in dw_plat_add_pcie_port()
117 struct pcie_port *pp = &pci->pp; in dw_plat_add_pcie_port()
118 struct device *dev = &pdev->dev; in dw_plat_add_pcie_port()
121 pp->irq = platform_get_irq(pdev, 1); in dw_plat_add_pcie_port()
122 if (pp->irq < 0) in dw_plat_add_pcie_port()
123 return pp->irq; in dw_plat_add_pcie_port()
126 pp->msi_irq = platform_get_irq(pdev, 0); in dw_plat_add_pcie_port()
127 if (pp->msi_irq < 0) in dw_plat_add_pcie_port()
128 return pp->msi_irq; in dw_plat_add_pcie_port()
131 pp->ops = &dw_plat_pcie_host_ops; in dw_plat_add_pcie_port()
146 struct dw_pcie_ep *ep; in dw_plat_add_pcie_ep() local
148 struct device *dev = &pdev->dev; in dw_plat_add_pcie_ep()
149 struct dw_pcie *pci = dw_plat_pcie->pci; in dw_plat_add_pcie_ep()
151 ep = &pci->ep; in dw_plat_add_pcie_ep()
152 ep->ops = &pcie_ep_ops; in dw_plat_add_pcie_ep()
154 pci->dbi_base2 = devm_platform_ioremap_resource_byname(pdev, "dbi2"); in dw_plat_add_pcie_ep()
155 if (IS_ERR(pci->dbi_base2)) in dw_plat_add_pcie_ep()
156 return PTR_ERR(pci->dbi_base2); in dw_plat_add_pcie_ep()
160 return -EINVAL; in dw_plat_add_pcie_ep()
162 ep->phys_base = res->start; in dw_plat_add_pcie_ep()
163 ep->addr_size = resource_size(res); in dw_plat_add_pcie_ep()
165 ret = dw_pcie_ep_init(ep); in dw_plat_add_pcie_ep()
175 struct device *dev = &pdev->dev; in dw_plat_pcie_probe()
186 return -EINVAL; in dw_plat_pcie_probe()
188 data = (struct dw_plat_pcie_of_data *)match->data; in dw_plat_pcie_probe()
189 mode = (enum dw_pcie_device_mode)data->mode; in dw_plat_pcie_probe()
193 return -ENOMEM; in dw_plat_pcie_probe()
197 return -ENOMEM; in dw_plat_pcie_probe()
199 pci->dev = dev; in dw_plat_pcie_probe()
200 pci->ops = &dw_pcie_ops; in dw_plat_pcie_probe()
202 dw_plat_pcie->pci = pci; in dw_plat_pcie_probe()
203 dw_plat_pcie->mode = mode; in dw_plat_pcie_probe()
209 pci->dbi_base = devm_ioremap_resource(dev, res); in dw_plat_pcie_probe()
210 if (IS_ERR(pci->dbi_base)) in dw_plat_pcie_probe()
211 return PTR_ERR(pci->dbi_base); in dw_plat_pcie_probe()
215 switch (dw_plat_pcie->mode) { in dw_plat_pcie_probe()
218 return -ENODEV; in dw_plat_pcie_probe()
226 return -ENODEV; in dw_plat_pcie_probe()
233 dev_err(dev, "INVALID device type %d\n", dw_plat_pcie->mode); in dw_plat_pcie_probe()
249 .compatible = "snps,dw-pcie",
253 .compatible = "snps,dw-pcie-ep",
261 .name = "dw-pcie",