Lines Matching +full:off +full:- +full:chip

1 // SPDX-License-Identifier: GPL-2.0
3 * Copyright (c) 2018-2019 Synopsys, Inc. and/or its affiliates.
14 #include <linux/pci-epf.h>
18 #include "dw-edma-core.h"
29 .off = b, \
35 off_t off; member
58 .rg.off = 0x00001000, /* 4 Kbytes */
62 /* Channel 0 - BAR 2, offset 0 Mbytes, size 2 Kbytes */
64 /* Channel 1 - BAR 2, offset 2 Mbytes, size 2 Kbytes */
68 /* Channel 0 - BAR 2, offset 4 Mbytes, size 2 Kbytes */
70 /* Channel 1 - BAR 2, offset 6 Mbytes, size 2 Kbytes */
75 /* Channel 0 - BAR 2, offset 8 Mbytes, size 2 Kbytes */
77 /* Channel 1 - BAR 2, offset 9 Mbytes, size 2 Kbytes */
81 /* Channel 0 - BAR 2, offset 10 Mbytes, size 2 Kbytes */
83 /* Channel 1 - BAR 2, offset 11 Mbytes, size 2 Kbytes */
107 u64 off; in dw_edma_pcie_get_vsec_dma_data() local
119 pci_dbg(pdev, "Detected PCIe Vendor-Specific Extended Capability DMA\n"); in dw_edma_pcie_get_vsec_dma_data()
127 pdata->mf = map; in dw_edma_pcie_get_vsec_dma_data()
128 pdata->rg.bar = FIELD_GET(DW_PCIE_VSEC_DMA_BAR, val); in dw_edma_pcie_get_vsec_dma_data()
131 pdata->wr_ch_cnt = min_t(u16, pdata->wr_ch_cnt, in dw_edma_pcie_get_vsec_dma_data()
133 pdata->rd_ch_cnt = min_t(u16, pdata->rd_ch_cnt, in dw_edma_pcie_get_vsec_dma_data()
137 off = val; in dw_edma_pcie_get_vsec_dma_data()
139 off <<= 32; in dw_edma_pcie_get_vsec_dma_data()
140 off |= val; in dw_edma_pcie_get_vsec_dma_data()
141 pdata->rg.off = off; in dw_edma_pcie_get_vsec_dma_data()
147 struct dw_edma_pcie_data *pdata = (void *)pid->driver_data; in dw_edma_pcie_probe()
149 struct device *dev = &pdev->dev; in dw_edma_pcie_probe()
150 struct dw_edma_chip *chip; in dw_edma_pcie_probe() local
165 * Tries to find if exists a PCIe Vendor-Specific Extended Capability in dw_edma_pcie_probe()
213 chip = devm_kzalloc(dev, sizeof(*chip), GFP_KERNEL); in dw_edma_pcie_probe()
214 if (!chip) in dw_edma_pcie_probe()
215 return -ENOMEM; in dw_edma_pcie_probe()
219 return -ENOMEM; in dw_edma_pcie_probe()
227 return -EPERM; in dw_edma_pcie_probe()
231 chip->dw = dw; in dw_edma_pcie_probe()
232 chip->dev = dev; in dw_edma_pcie_probe()
233 chip->id = pdev->devfn; in dw_edma_pcie_probe()
234 chip->irq = pdev->irq; in dw_edma_pcie_probe()
236 dw->mf = vsec_data.mf; in dw_edma_pcie_probe()
237 dw->nr_irqs = nr_irqs; in dw_edma_pcie_probe()
238 dw->ops = &dw_edma_pcie_core_ops; in dw_edma_pcie_probe()
239 dw->wr_ch_cnt = vsec_data.wr_ch_cnt; in dw_edma_pcie_probe()
240 dw->rd_ch_cnt = vsec_data.rd_ch_cnt; in dw_edma_pcie_probe()
242 dw->rg_region.vaddr = pcim_iomap_table(pdev)[vsec_data.rg.bar]; in dw_edma_pcie_probe()
243 if (!dw->rg_region.vaddr) in dw_edma_pcie_probe()
244 return -ENOMEM; in dw_edma_pcie_probe()
246 dw->rg_region.vaddr += vsec_data.rg.off; in dw_edma_pcie_probe()
247 dw->rg_region.paddr = pdev->resource[vsec_data.rg.bar].start; in dw_edma_pcie_probe()
248 dw->rg_region.paddr += vsec_data.rg.off; in dw_edma_pcie_probe()
249 dw->rg_region.sz = vsec_data.rg.sz; in dw_edma_pcie_probe()
251 for (i = 0; i < dw->wr_ch_cnt; i++) { in dw_edma_pcie_probe()
252 struct dw_edma_region *ll_region = &dw->ll_region_wr[i]; in dw_edma_pcie_probe()
253 struct dw_edma_region *dt_region = &dw->dt_region_wr[i]; in dw_edma_pcie_probe()
257 ll_region->vaddr = pcim_iomap_table(pdev)[ll_block->bar]; in dw_edma_pcie_probe()
258 if (!ll_region->vaddr) in dw_edma_pcie_probe()
259 return -ENOMEM; in dw_edma_pcie_probe()
261 ll_region->vaddr += ll_block->off; in dw_edma_pcie_probe()
262 ll_region->paddr = pdev->resource[ll_block->bar].start; in dw_edma_pcie_probe()
263 ll_region->paddr += ll_block->off; in dw_edma_pcie_probe()
264 ll_region->sz = ll_block->sz; in dw_edma_pcie_probe()
266 dt_region->vaddr = pcim_iomap_table(pdev)[dt_block->bar]; in dw_edma_pcie_probe()
267 if (!dt_region->vaddr) in dw_edma_pcie_probe()
268 return -ENOMEM; in dw_edma_pcie_probe()
270 dt_region->vaddr += dt_block->off; in dw_edma_pcie_probe()
271 dt_region->paddr = pdev->resource[dt_block->bar].start; in dw_edma_pcie_probe()
272 dt_region->paddr += dt_block->off; in dw_edma_pcie_probe()
273 dt_region->sz = dt_block->sz; in dw_edma_pcie_probe()
276 for (i = 0; i < dw->rd_ch_cnt; i++) { in dw_edma_pcie_probe()
277 struct dw_edma_region *ll_region = &dw->ll_region_rd[i]; in dw_edma_pcie_probe()
278 struct dw_edma_region *dt_region = &dw->dt_region_rd[i]; in dw_edma_pcie_probe()
282 ll_region->vaddr = pcim_iomap_table(pdev)[ll_block->bar]; in dw_edma_pcie_probe()
283 if (!ll_region->vaddr) in dw_edma_pcie_probe()
284 return -ENOMEM; in dw_edma_pcie_probe()
286 ll_region->vaddr += ll_block->off; in dw_edma_pcie_probe()
287 ll_region->paddr = pdev->resource[ll_block->bar].start; in dw_edma_pcie_probe()
288 ll_region->paddr += ll_block->off; in dw_edma_pcie_probe()
289 ll_region->sz = ll_block->sz; in dw_edma_pcie_probe()
291 dt_region->vaddr = pcim_iomap_table(pdev)[dt_block->bar]; in dw_edma_pcie_probe()
292 if (!dt_region->vaddr) in dw_edma_pcie_probe()
293 return -ENOMEM; in dw_edma_pcie_probe()
295 dt_region->vaddr += dt_block->off; in dw_edma_pcie_probe()
296 dt_region->paddr = pdev->resource[dt_block->bar].start; in dw_edma_pcie_probe()
297 dt_region->paddr += dt_block->off; in dw_edma_pcie_probe()
298 dt_region->sz = dt_block->sz; in dw_edma_pcie_probe()
302 if (dw->mf == EDMA_MF_EDMA_LEGACY) in dw_edma_pcie_probe()
303 pci_dbg(pdev, "Version:\teDMA Port Logic (0x%x)\n", dw->mf); in dw_edma_pcie_probe()
304 else if (dw->mf == EDMA_MF_EDMA_UNROLL) in dw_edma_pcie_probe()
305 pci_dbg(pdev, "Version:\teDMA Unroll (0x%x)\n", dw->mf); in dw_edma_pcie_probe()
306 else if (dw->mf == EDMA_MF_HDMA_COMPAT) in dw_edma_pcie_probe()
307 pci_dbg(pdev, "Version:\tHDMA Compatible (0x%x)\n", dw->mf); in dw_edma_pcie_probe()
309 pci_dbg(pdev, "Version:\tUnknown (0x%x)\n", dw->mf); in dw_edma_pcie_probe()
311 pci_dbg(pdev, "Registers:\tBAR=%u, off=0x%.8lx, sz=0x%zx bytes, addr(v=%p, p=%pa)\n", in dw_edma_pcie_probe()
312 vsec_data.rg.bar, vsec_data.rg.off, vsec_data.rg.sz, in dw_edma_pcie_probe()
313 dw->rg_region.vaddr, &dw->rg_region.paddr); in dw_edma_pcie_probe()
316 for (i = 0; i < dw->wr_ch_cnt; i++) { in dw_edma_pcie_probe()
317 pci_dbg(pdev, "L. List:\tWRITE CH%.2u, BAR=%u, off=0x%.8lx, sz=0x%zx bytes, addr(v=%p, p=%pa)\n", in dw_edma_pcie_probe()
319 vsec_data.ll_wr[i].off, dw->ll_region_wr[i].sz, in dw_edma_pcie_probe()
320 dw->ll_region_wr[i].vaddr, &dw->ll_region_wr[i].paddr); in dw_edma_pcie_probe()
322 pci_dbg(pdev, "Data:\tWRITE CH%.2u, BAR=%u, off=0x%.8lx, sz=0x%zx bytes, addr(v=%p, p=%pa)\n", in dw_edma_pcie_probe()
324 vsec_data.dt_wr[i].off, dw->dt_region_wr[i].sz, in dw_edma_pcie_probe()
325 dw->dt_region_wr[i].vaddr, &dw->dt_region_wr[i].paddr); in dw_edma_pcie_probe()
328 for (i = 0; i < dw->rd_ch_cnt; i++) { in dw_edma_pcie_probe()
329 pci_dbg(pdev, "L. List:\tREAD CH%.2u, BAR=%u, off=0x%.8lx, sz=0x%zx bytes, addr(v=%p, p=%pa)\n", in dw_edma_pcie_probe()
331 vsec_data.ll_rd[i].off, dw->ll_region_rd[i].sz, in dw_edma_pcie_probe()
332 dw->ll_region_rd[i].vaddr, &dw->ll_region_rd[i].paddr); in dw_edma_pcie_probe()
334 pci_dbg(pdev, "Data:\tREAD CH%.2u, BAR=%u, off=0x%.8lx, sz=0x%zx bytes, addr(v=%p, p=%pa)\n", in dw_edma_pcie_probe()
336 vsec_data.dt_rd[i].off, dw->dt_region_rd[i].sz, in dw_edma_pcie_probe()
337 dw->dt_region_rd[i].vaddr, &dw->dt_region_rd[i].paddr); in dw_edma_pcie_probe()
340 pci_dbg(pdev, "Nr. IRQs:\t%u\n", dw->nr_irqs); in dw_edma_pcie_probe()
345 return -EPERM; in dw_edma_pcie_probe()
348 dw->irq = devm_kcalloc(dev, nr_irqs, sizeof(*dw->irq), GFP_KERNEL); in dw_edma_pcie_probe()
349 if (!dw->irq) in dw_edma_pcie_probe()
350 return -ENOMEM; in dw_edma_pcie_probe()
353 err = dw_edma_probe(chip); in dw_edma_pcie_probe()
360 pci_set_drvdata(pdev, chip); in dw_edma_pcie_probe()
367 struct dw_edma_chip *chip = pci_get_drvdata(pdev); in dw_edma_pcie_remove() local
371 err = dw_edma_remove(chip); in dw_edma_pcie_remove()
386 .name = "dw-edma-pcie",