Lines Matching refs:pdma

227 	struct xgene_dma *pdma;  member
283 struct xgene_dma *pdma; member
353 static bool is_pq_enabled(struct xgene_dma *pdma) in is_pq_enabled() argument
357 val = ioread32(pdma->csr_efuse + XGENE_SOC_JTAG1_SHADOW); in is_pq_enabled()
1180 struct xgene_dma *pdma = (struct xgene_dma *)id; in xgene_dma_err_isr() local
1184 val = ioread32(pdma->csr_dma + XGENE_DMA_INT); in xgene_dma_err_isr()
1187 iowrite32(val, pdma->csr_dma + XGENE_DMA_INT); in xgene_dma_err_isr()
1192 dev_err(pdma->dev, in xgene_dma_err_isr()
1202 iowrite32(ring->num, ring->pdma->csr_ring + XGENE_DMA_RING_STATE); in xgene_dma_wr_ring_state()
1205 iowrite32(ring->state[i], ring->pdma->csr_ring + in xgene_dma_wr_ring_state()
1249 ring->pdma->csr_ring + XGENE_DMA_RING_ID); in xgene_dma_setup_ring()
1253 ring->pdma->csr_ring + XGENE_DMA_RING_ID_BUF); in xgene_dma_setup_ring()
1267 val = ioread32(ring->pdma->csr_ring + XGENE_DMA_RING_NE_INT_MODE); in xgene_dma_setup_ring()
1269 iowrite32(val, ring->pdma->csr_ring + XGENE_DMA_RING_NE_INT_MODE); in xgene_dma_setup_ring()
1278 val = ioread32(ring->pdma->csr_ring + in xgene_dma_clear_ring()
1281 iowrite32(val, ring->pdma->csr_ring + in xgene_dma_clear_ring()
1287 iowrite32(ring_id, ring->pdma->csr_ring + XGENE_DMA_RING_ID); in xgene_dma_clear_ring()
1289 iowrite32(0, ring->pdma->csr_ring + XGENE_DMA_RING_ID_BUF); in xgene_dma_clear_ring()
1295 ring->cmd_base = ring->pdma->csr_ring_cmd + in xgene_dma_set_ring_cmd()
1338 dma_free_coherent(ring->pdma->dev, ring->size, in xgene_dma_delete_ring_one()
1357 ring->pdma = chan->pdma; in xgene_dma_create_ring_one()
1359 ring->num = chan->pdma->ring_num++; in xgene_dma_create_ring_one()
1423 static int xgene_dma_init_rings(struct xgene_dma *pdma) in xgene_dma_init_rings() argument
1428 ret = xgene_dma_create_chan_rings(&pdma->chan[i]); in xgene_dma_init_rings()
1431 xgene_dma_delete_chan_rings(&pdma->chan[j]); in xgene_dma_init_rings()
1439 static void xgene_dma_enable(struct xgene_dma *pdma) in xgene_dma_enable() argument
1444 val = ioread32(pdma->csr_dma + XGENE_DMA_GCR); in xgene_dma_enable()
1447 iowrite32(val, pdma->csr_dma + XGENE_DMA_GCR); in xgene_dma_enable()
1450 static void xgene_dma_disable(struct xgene_dma *pdma) in xgene_dma_disable() argument
1454 val = ioread32(pdma->csr_dma + XGENE_DMA_GCR); in xgene_dma_disable()
1456 iowrite32(val, pdma->csr_dma + XGENE_DMA_GCR); in xgene_dma_disable()
1459 static void xgene_dma_mask_interrupts(struct xgene_dma *pdma) in xgene_dma_mask_interrupts() argument
1466 pdma->csr_dma + XGENE_DMA_RING_INT0_MASK); in xgene_dma_mask_interrupts()
1468 pdma->csr_dma + XGENE_DMA_RING_INT1_MASK); in xgene_dma_mask_interrupts()
1470 pdma->csr_dma + XGENE_DMA_RING_INT2_MASK); in xgene_dma_mask_interrupts()
1472 pdma->csr_dma + XGENE_DMA_RING_INT3_MASK); in xgene_dma_mask_interrupts()
1474 pdma->csr_dma + XGENE_DMA_RING_INT4_MASK); in xgene_dma_mask_interrupts()
1477 iowrite32(XGENE_DMA_INT_ALL_MASK, pdma->csr_dma + XGENE_DMA_INT_MASK); in xgene_dma_mask_interrupts()
1480 static void xgene_dma_unmask_interrupts(struct xgene_dma *pdma) in xgene_dma_unmask_interrupts() argument
1487 pdma->csr_dma + XGENE_DMA_RING_INT0_MASK); in xgene_dma_unmask_interrupts()
1489 pdma->csr_dma + XGENE_DMA_RING_INT1_MASK); in xgene_dma_unmask_interrupts()
1491 pdma->csr_dma + XGENE_DMA_RING_INT2_MASK); in xgene_dma_unmask_interrupts()
1493 pdma->csr_dma + XGENE_DMA_RING_INT3_MASK); in xgene_dma_unmask_interrupts()
1495 pdma->csr_dma + XGENE_DMA_RING_INT4_MASK); in xgene_dma_unmask_interrupts()
1499 pdma->csr_dma + XGENE_DMA_INT_MASK); in xgene_dma_unmask_interrupts()
1502 static void xgene_dma_init_hw(struct xgene_dma *pdma) in xgene_dma_init_hw() argument
1508 pdma->csr_dma + XGENE_DMA_CFG_RING_WQ_ASSOC); in xgene_dma_init_hw()
1511 if (is_pq_enabled(pdma)) in xgene_dma_init_hw()
1513 pdma->csr_dma + XGENE_DMA_RAID6_CONT); in xgene_dma_init_hw()
1515 dev_info(pdma->dev, "PQ is disabled in HW\n"); in xgene_dma_init_hw()
1517 xgene_dma_enable(pdma); in xgene_dma_init_hw()
1518 xgene_dma_unmask_interrupts(pdma); in xgene_dma_init_hw()
1521 val = ioread32(pdma->csr_dma + XGENE_DMA_IPBRR); in xgene_dma_init_hw()
1524 dev_info(pdma->dev, in xgene_dma_init_hw()
1530 static int xgene_dma_init_ring_mngr(struct xgene_dma *pdma) in xgene_dma_init_ring_mngr() argument
1532 if (ioread32(pdma->csr_ring + XGENE_DMA_RING_CLKEN) && in xgene_dma_init_ring_mngr()
1533 (!ioread32(pdma->csr_ring + XGENE_DMA_RING_SRST))) in xgene_dma_init_ring_mngr()
1536 iowrite32(0x3, pdma->csr_ring + XGENE_DMA_RING_CLKEN); in xgene_dma_init_ring_mngr()
1537 iowrite32(0x0, pdma->csr_ring + XGENE_DMA_RING_SRST); in xgene_dma_init_ring_mngr()
1540 iowrite32(0x0, pdma->csr_ring + XGENE_DMA_RING_MEM_RAM_SHUTDOWN); in xgene_dma_init_ring_mngr()
1543 ioread32(pdma->csr_ring + XGENE_DMA_RING_MEM_RAM_SHUTDOWN); in xgene_dma_init_ring_mngr()
1548 if (ioread32(pdma->csr_ring + XGENE_DMA_RING_BLK_MEM_RDY) in xgene_dma_init_ring_mngr()
1550 dev_err(pdma->dev, in xgene_dma_init_ring_mngr()
1557 pdma->csr_ring + XGENE_DMA_RING_THRESLD0_SET1); in xgene_dma_init_ring_mngr()
1559 pdma->csr_ring + XGENE_DMA_RING_THRESLD1_SET1); in xgene_dma_init_ring_mngr()
1561 pdma->csr_ring + XGENE_DMA_RING_HYSTERESIS); in xgene_dma_init_ring_mngr()
1565 pdma->csr_ring + XGENE_DMA_RING_CONFIG); in xgene_dma_init_ring_mngr()
1570 static int xgene_dma_init_mem(struct xgene_dma *pdma) in xgene_dma_init_mem() argument
1574 ret = xgene_dma_init_ring_mngr(pdma); in xgene_dma_init_mem()
1579 iowrite32(0x0, pdma->csr_dma + XGENE_DMA_MEM_RAM_SHUTDOWN); in xgene_dma_init_mem()
1582 ioread32(pdma->csr_dma + XGENE_DMA_MEM_RAM_SHUTDOWN); in xgene_dma_init_mem()
1587 if (ioread32(pdma->csr_dma + XGENE_DMA_BLK_MEM_RDY) in xgene_dma_init_mem()
1589 dev_err(pdma->dev, in xgene_dma_init_mem()
1597 static int xgene_dma_request_irqs(struct xgene_dma *pdma) in xgene_dma_request_irqs() argument
1603 ret = devm_request_irq(pdma->dev, pdma->err_irq, xgene_dma_err_isr, in xgene_dma_request_irqs()
1604 0, "dma_error", pdma); in xgene_dma_request_irqs()
1606 dev_err(pdma->dev, in xgene_dma_request_irqs()
1607 "Failed to register error IRQ %d\n", pdma->err_irq); in xgene_dma_request_irqs()
1613 chan = &pdma->chan[i]; in xgene_dma_request_irqs()
1621 devm_free_irq(pdma->dev, pdma->err_irq, pdma); in xgene_dma_request_irqs()
1624 chan = &pdma->chan[i]; in xgene_dma_request_irqs()
1636 static void xgene_dma_free_irqs(struct xgene_dma *pdma) in xgene_dma_free_irqs() argument
1642 devm_free_irq(pdma->dev, pdma->err_irq, pdma); in xgene_dma_free_irqs()
1645 chan = &pdma->chan[i]; in xgene_dma_free_irqs()
1670 is_pq_enabled(chan->pdma)) { in xgene_dma_set_caps()
1674 !is_pq_enabled(chan->pdma)) { in xgene_dma_set_caps()
1699 static int xgene_dma_async_register(struct xgene_dma *pdma, int id) in xgene_dma_async_register() argument
1701 struct xgene_dma_chan *chan = &pdma->chan[id]; in xgene_dma_async_register()
1702 struct dma_device *dma_dev = &pdma->dma_dev[id]; in xgene_dma_async_register()
1735 dev_info(pdma->dev, in xgene_dma_async_register()
1744 static int xgene_dma_init_async(struct xgene_dma *pdma) in xgene_dma_init_async() argument
1749 ret = xgene_dma_async_register(pdma, i); in xgene_dma_init_async()
1752 dma_async_device_unregister(&pdma->dma_dev[j]); in xgene_dma_init_async()
1753 tasklet_kill(&pdma->chan[j].tasklet); in xgene_dma_init_async()
1763 static void xgene_dma_async_unregister(struct xgene_dma *pdma) in xgene_dma_async_unregister() argument
1768 dma_async_device_unregister(&pdma->dma_dev[i]); in xgene_dma_async_unregister()
1771 static void xgene_dma_init_channels(struct xgene_dma *pdma) in xgene_dma_init_channels() argument
1776 pdma->ring_num = XGENE_DMA_RING_NUM; in xgene_dma_init_channels()
1779 chan = &pdma->chan[i]; in xgene_dma_init_channels()
1780 chan->dev = pdma->dev; in xgene_dma_init_channels()
1781 chan->pdma = pdma; in xgene_dma_init_channels()
1788 struct xgene_dma *pdma) in xgene_dma_get_resources() argument
1800 pdma->csr_dma = devm_ioremap(&pdev->dev, res->start, in xgene_dma_get_resources()
1802 if (!pdma->csr_dma) { in xgene_dma_get_resources()
1814 pdma->csr_ring = devm_ioremap(&pdev->dev, res->start, in xgene_dma_get_resources()
1816 if (!pdma->csr_ring) { in xgene_dma_get_resources()
1828 pdma->csr_ring_cmd = devm_ioremap(&pdev->dev, res->start, in xgene_dma_get_resources()
1830 if (!pdma->csr_ring_cmd) { in xgene_dma_get_resources()
1835 pdma->csr_ring_cmd += XGENE_DMA_RING_CMD_SM_OFFSET; in xgene_dma_get_resources()
1844 pdma->csr_efuse = devm_ioremap(&pdev->dev, res->start, in xgene_dma_get_resources()
1846 if (!pdma->csr_efuse) { in xgene_dma_get_resources()
1858 pdma->err_irq = irq; in xgene_dma_get_resources()
1868 pdma->chan[i - 1].rx_irq = irq; in xgene_dma_get_resources()
1876 struct xgene_dma *pdma; in xgene_dma_probe() local
1879 pdma = devm_kzalloc(&pdev->dev, sizeof(*pdma), GFP_KERNEL); in xgene_dma_probe()
1880 if (!pdma) in xgene_dma_probe()
1883 pdma->dev = &pdev->dev; in xgene_dma_probe()
1884 platform_set_drvdata(pdev, pdma); in xgene_dma_probe()
1886 ret = xgene_dma_get_resources(pdev, pdma); in xgene_dma_probe()
1890 pdma->clk = devm_clk_get(&pdev->dev, NULL); in xgene_dma_probe()
1891 if (IS_ERR(pdma->clk) && !ACPI_COMPANION(&pdev->dev)) { in xgene_dma_probe()
1893 return PTR_ERR(pdma->clk); in xgene_dma_probe()
1897 if (!IS_ERR(pdma->clk)) { in xgene_dma_probe()
1898 ret = clk_prepare_enable(pdma->clk); in xgene_dma_probe()
1906 ret = xgene_dma_init_mem(pdma); in xgene_dma_probe()
1917 xgene_dma_init_channels(pdma); in xgene_dma_probe()
1920 ret = xgene_dma_init_rings(pdma); in xgene_dma_probe()
1924 ret = xgene_dma_request_irqs(pdma); in xgene_dma_probe()
1929 xgene_dma_init_hw(pdma); in xgene_dma_probe()
1932 ret = xgene_dma_init_async(pdma); in xgene_dma_probe()
1939 xgene_dma_free_irqs(pdma); in xgene_dma_probe()
1943 xgene_dma_delete_chan_rings(&pdma->chan[i]); in xgene_dma_probe()
1947 if (!IS_ERR(pdma->clk)) in xgene_dma_probe()
1948 clk_disable_unprepare(pdma->clk); in xgene_dma_probe()
1955 struct xgene_dma *pdma = platform_get_drvdata(pdev); in xgene_dma_remove() local
1959 xgene_dma_async_unregister(pdma); in xgene_dma_remove()
1962 xgene_dma_mask_interrupts(pdma); in xgene_dma_remove()
1963 xgene_dma_disable(pdma); in xgene_dma_remove()
1964 xgene_dma_free_irqs(pdma); in xgene_dma_remove()
1967 chan = &pdma->chan[i]; in xgene_dma_remove()
1972 if (!IS_ERR(pdma->clk)) in xgene_dma_remove()
1973 clk_disable_unprepare(pdma->clk); in xgene_dma_remove()