Lines Matching refs:pcidev

43 static void __iomem *cci_pci_ioremap_bar0(struct pci_dev *pcidev)  in cci_pci_ioremap_bar0()  argument
45 if (pcim_iomap_regions(pcidev, BIT(0), DRV_NAME)) in cci_pci_ioremap_bar0()
48 return pcim_iomap_table(pcidev)[0]; in cci_pci_ioremap_bar0()
51 static int cci_pci_alloc_irq(struct pci_dev *pcidev) in cci_pci_alloc_irq() argument
53 int ret, nvec = pci_msix_vec_count(pcidev); in cci_pci_alloc_irq()
56 dev_dbg(&pcidev->dev, "fpga interrupt not supported\n"); in cci_pci_alloc_irq()
60 ret = pci_alloc_irq_vectors(pcidev, nvec, nvec, PCI_IRQ_MSIX); in cci_pci_alloc_irq()
67 static void cci_pci_free_irq(struct pci_dev *pcidev) in cci_pci_free_irq() argument
69 pci_free_irq_vectors(pcidev); in cci_pci_free_irq()
121 static int cci_init_drvdata(struct pci_dev *pcidev) in cci_init_drvdata() argument
125 drvdata = devm_kzalloc(&pcidev->dev, sizeof(*drvdata), GFP_KERNEL); in cci_init_drvdata()
129 pci_set_drvdata(pcidev, drvdata); in cci_init_drvdata()
134 static void cci_remove_feature_devs(struct pci_dev *pcidev) in cci_remove_feature_devs() argument
136 struct cci_drvdata *drvdata = pci_get_drvdata(pcidev); in cci_remove_feature_devs()
140 cci_pci_free_irq(pcidev); in cci_remove_feature_devs()
143 static int *cci_pci_create_irq_table(struct pci_dev *pcidev, unsigned int nvec) in cci_pci_create_irq_table() argument
153 table[i] = pci_irq_vector(pcidev, i); in cci_pci_create_irq_table()
158 static int find_dfls_by_vsec(struct pci_dev *pcidev, struct dfl_fpga_enum_info *info) in find_dfls_by_vsec() argument
164 while ((voff = pci_find_next_ext_capability(pcidev, voff, PCI_EXT_CAP_ID_VNDR))) { in find_dfls_by_vsec()
166 pci_read_config_dword(pcidev, voff + PCI_VNDR_HEADER, &vndr_hdr); in find_dfls_by_vsec()
169 pcidev->vendor == PCI_VENDOR_ID_INTEL) in find_dfls_by_vsec()
174 dev_dbg(&pcidev->dev, "%s no DFL VSEC found\n", __func__); in find_dfls_by_vsec()
179 pci_read_config_dword(pcidev, voff + PCI_VNDR_DFLS_CNT, &dfl_cnt); in find_dfls_by_vsec()
181 dev_err(&pcidev->dev, "%s too many DFLs %d > %d\n", in find_dfls_by_vsec()
188 dev_err(&pcidev->dev, "%s DFL VSEC too big for PCIe config space\n", in find_dfls_by_vsec()
195 pci_read_config_dword(pcidev, dfl_res_off, &dfl_res); in find_dfls_by_vsec()
199 dev_err(&pcidev->dev, "%s bad bir number %d\n", in find_dfls_by_vsec()
205 dev_err(&pcidev->dev, "%s DFL for BAR %d already specified\n", in find_dfls_by_vsec()
212 len = pci_resource_len(pcidev, bir); in find_dfls_by_vsec()
215 dev_err(&pcidev->dev, "%s bad offset %u >= %pa\n", in find_dfls_by_vsec()
220 dev_dbg(&pcidev->dev, "%s BAR %d offset 0x%x\n", __func__, bir, offset); in find_dfls_by_vsec()
224 start = pci_resource_start(pcidev, bir) + offset; in find_dfls_by_vsec()
233 static int find_dfls_by_default(struct pci_dev *pcidev, in find_dfls_by_default() argument
243 base = cci_pci_ioremap_bar0(pcidev); in find_dfls_by_default()
253 start = pci_resource_start(pcidev, 0); in find_dfls_by_default()
254 len = pci_resource_len(pcidev, 0); in find_dfls_by_default()
283 dev_err(&pcidev->dev, "bad BAR %d for port %d\n", in find_dfls_by_default()
289 start = pci_resource_start(pcidev, bar) + offset; in find_dfls_by_default()
290 len = pci_resource_len(pcidev, bar) - offset; in find_dfls_by_default()
295 start = pci_resource_start(pcidev, 0); in find_dfls_by_default()
296 len = pci_resource_len(pcidev, 0); in find_dfls_by_default()
304 pcim_iounmap_regions(pcidev, BIT(0)); in find_dfls_by_default()
310 static int cci_enumerate_feature_devs(struct pci_dev *pcidev) in cci_enumerate_feature_devs() argument
312 struct cci_drvdata *drvdata = pci_get_drvdata(pcidev); in cci_enumerate_feature_devs()
319 info = dfl_fpga_enum_info_alloc(&pcidev->dev); in cci_enumerate_feature_devs()
324 nvec = cci_pci_alloc_irq(pcidev); in cci_enumerate_feature_devs()
326 dev_err(&pcidev->dev, "Fail to alloc irq %d.\n", nvec); in cci_enumerate_feature_devs()
330 irq_table = cci_pci_create_irq_table(pcidev, nvec); in cci_enumerate_feature_devs()
342 ret = find_dfls_by_vsec(pcidev, info); in cci_enumerate_feature_devs()
344 ret = find_dfls_by_default(pcidev, info); in cci_enumerate_feature_devs()
352 dev_err(&pcidev->dev, "Enumeration failure\n"); in cci_enumerate_feature_devs()
361 cci_pci_free_irq(pcidev); in cci_enumerate_feature_devs()
369 int cci_pci_probe(struct pci_dev *pcidev, const struct pci_device_id *pcidevid) in cci_pci_probe() argument
373 ret = pcim_enable_device(pcidev); in cci_pci_probe()
375 dev_err(&pcidev->dev, "Failed to enable device %d.\n", ret); in cci_pci_probe()
379 ret = pci_enable_pcie_error_reporting(pcidev); in cci_pci_probe()
381 dev_info(&pcidev->dev, "PCIE AER unavailable %d.\n", ret); in cci_pci_probe()
383 pci_set_master(pcidev); in cci_pci_probe()
385 ret = dma_set_mask_and_coherent(&pcidev->dev, DMA_BIT_MASK(64)); in cci_pci_probe()
387 ret = dma_set_mask_and_coherent(&pcidev->dev, DMA_BIT_MASK(32)); in cci_pci_probe()
389 dev_err(&pcidev->dev, "No suitable DMA support available.\n"); in cci_pci_probe()
393 ret = cci_init_drvdata(pcidev); in cci_pci_probe()
395 dev_err(&pcidev->dev, "Fail to init drvdata %d.\n", ret); in cci_pci_probe()
399 ret = cci_enumerate_feature_devs(pcidev); in cci_pci_probe()
403 dev_err(&pcidev->dev, "enumeration failure %d.\n", ret); in cci_pci_probe()
406 pci_disable_pcie_error_reporting(pcidev); in cci_pci_probe()
410 static int cci_pci_sriov_configure(struct pci_dev *pcidev, int num_vfs) in cci_pci_sriov_configure() argument
412 struct cci_drvdata *drvdata = pci_get_drvdata(pcidev); in cci_pci_sriov_configure()
420 pci_disable_sriov(pcidev); in cci_pci_sriov_configure()
435 ret = pci_enable_sriov(pcidev, num_vfs); in cci_pci_sriov_configure()
445 static void cci_pci_remove(struct pci_dev *pcidev) in cci_pci_remove() argument
447 if (dev_is_pf(&pcidev->dev)) in cci_pci_remove()
448 cci_pci_sriov_configure(pcidev, 0); in cci_pci_remove()
450 cci_remove_feature_devs(pcidev); in cci_pci_remove()
451 pci_disable_pcie_error_reporting(pcidev); in cci_pci_remove()