• Home
  • Raw
  • Download

Lines Matching full:od

232 		struct omap_dmadev *od = to_omap_dma_dev(vd->tx.chan->device);  in omap_dma_desc_free()  local
237 dma_pool_free(od->desc_pool, d->sg[i].t2_desc, in omap_dma_desc_free()
330 static void omap_dma_glbl_write(struct omap_dmadev *od, unsigned reg, unsigned val) in omap_dma_glbl_write() argument
332 const struct omap_dma_reg *r = od->reg_map + reg; in omap_dma_glbl_write()
336 omap_dma_write(val, r->type, od->base + r->offset); in omap_dma_glbl_write()
339 static unsigned omap_dma_glbl_read(struct omap_dmadev *od, unsigned reg) in omap_dma_glbl_read() argument
341 const struct omap_dma_reg *r = od->reg_map + reg; in omap_dma_glbl_read()
345 return omap_dma_read(r->type, od->base + r->offset); in omap_dma_glbl_read()
380 static void omap_dma_assign(struct omap_dmadev *od, struct omap_chan *c, in omap_dma_assign() argument
383 c->channel_base = od->base + od->plat->channel_stride * lch; in omap_dma_assign()
385 od->lch_map[lch] = c; in omap_dma_assign()
390 struct omap_dmadev *od = to_omap_dma_dev(c->vc.chan.device); in omap_dma_start() local
393 if (__dma_omap15xx(od->plat->dma_attr)) in omap_dma_start()
415 } else if (od->ll123_supported) { in omap_dma_start()
453 struct omap_dmadev *od = to_omap_dma_dev(c->vc.chan.device); in omap_dma_stop() local
462 if (od->plat->errata & DMA_ERRATA_i541 && val & CCR_TRIGGER_SRC) { in omap_dma_stop()
465 sysconfig = omap_dma_glbl_read(od, OCP_SYSCONFIG); in omap_dma_stop()
468 omap_dma_glbl_write(od, OCP_SYSCONFIG, val); in omap_dma_stop()
477 omap_dma_glbl_write(od, OCP_SYSCONFIG, sysconfig); in omap_dma_stop()
491 if (!__dma_omap15xx(od->plat->dma_attr) && c->cyclic) { in omap_dma_stop()
599 struct omap_dmadev *od = devid; in omap_dma_irq() local
602 spin_lock(&od->irq_lock); in omap_dma_irq()
604 status = omap_dma_glbl_read(od, IRQSTATUS_L1); in omap_dma_irq()
605 status &= od->irq_enable_mask; in omap_dma_irq()
607 spin_unlock(&od->irq_lock); in omap_dma_irq()
619 c = od->lch_map[channel]; in omap_dma_irq()
622 dev_err(od->ddev.dev, "invalid channel %u\n", channel); in omap_dma_irq()
627 omap_dma_glbl_write(od, IRQSTATUS_L1, mask); in omap_dma_irq()
632 spin_unlock(&od->irq_lock); in omap_dma_irq()
639 struct omap_dmadev *od = to_omap_dma_dev(chan->device); in omap_dma_alloc_chan_resources() local
641 struct device *dev = od->ddev.dev; in omap_dma_alloc_chan_resources()
644 if (od->legacy) { in omap_dma_alloc_chan_resources()
655 omap_dma_assign(od, c, c->dma_ch); in omap_dma_alloc_chan_resources()
657 if (!od->legacy) { in omap_dma_alloc_chan_resources()
660 spin_lock_irq(&od->irq_lock); in omap_dma_alloc_chan_resources()
662 omap_dma_glbl_write(od, IRQSTATUS_L1, val); in omap_dma_alloc_chan_resources()
663 od->irq_enable_mask |= val; in omap_dma_alloc_chan_resources()
664 omap_dma_glbl_write(od, IRQENABLE_L1, od->irq_enable_mask); in omap_dma_alloc_chan_resources()
666 val = omap_dma_glbl_read(od, IRQENABLE_L0); in omap_dma_alloc_chan_resources()
668 omap_dma_glbl_write(od, IRQENABLE_L0, val); in omap_dma_alloc_chan_resources()
669 spin_unlock_irq(&od->irq_lock); in omap_dma_alloc_chan_resources()
674 if (__dma_omap16xx(od->plat->dma_attr)) { in omap_dma_alloc_chan_resources()
685 if (od->plat->errata & DMA_ERRATA_IFRAME_BUFFERING) in omap_dma_alloc_chan_resources()
693 struct omap_dmadev *od = to_omap_dma_dev(chan->device); in omap_dma_free_chan_resources() local
696 if (!od->legacy) { in omap_dma_free_chan_resources()
697 spin_lock_irq(&od->irq_lock); in omap_dma_free_chan_resources()
698 od->irq_enable_mask &= ~BIT(c->dma_ch); in omap_dma_free_chan_resources()
699 omap_dma_glbl_write(od, IRQENABLE_L1, od->irq_enable_mask); in omap_dma_free_chan_resources()
700 spin_unlock_irq(&od->irq_lock); in omap_dma_free_chan_resources()
704 od->lch_map[c->dma_ch] = NULL; in omap_dma_free_chan_resources()
708 dev_dbg(od->ddev.dev, "freeing channel %u used for %u\n", c->dma_ch, in omap_dma_free_chan_resources()
752 struct omap_dmadev *od = to_omap_dma_dev(c->vc.chan.device); in omap_dma_chan_read_3_3() local
756 if (val == 0 && od->plat->errata & DMA_ERRATA_3_3) in omap_dma_chan_read_3_3()
764 struct omap_dmadev *od = to_omap_dma_dev(c->vc.chan.device); in omap_dma_get_src_pos() local
767 if (__dma_omap15xx(od->plat->dma_attr)) { in omap_dma_get_src_pos()
790 struct omap_dmadev *od = to_omap_dma_dev(c->vc.chan.device); in omap_dma_get_dst_pos() local
793 if (__dma_omap15xx(od->plat->dma_attr)) { in omap_dma_get_dst_pos()
878 struct omap_dmadev *od = to_omap_dma_dev(chan->device); in omap_dma_prep_slave_sg() local
998 if (od->plat->errata & DMA_ERRATA_PARALLEL_CHANNELS) in omap_dma_prep_slave_sg()
1014 d->using_ll = od->ll123_supported; in omap_dma_prep_slave_sg()
1024 osg->t2_desc = dma_pool_alloc(od->desc_pool, GFP_ATOMIC, in omap_dma_prep_slave_sg()
1046 dma_pool_free(od->desc_pool, osg->t2_desc, in omap_dma_prep_slave_sg()
1060 struct omap_dmadev *od = to_omap_dma_dev(chan->device); in omap_dma_prep_dma_cyclic() local
1147 if (__dma_omap15xx(od->plat->dma_attr)) in omap_dma_prep_dma_cyclic()
1341 struct omap_dmadev *od = to_omap_dma_dev(chan->device); in omap_dma_pause() local
1346 spin_lock_irqsave(&od->irq_lock, flags); in omap_dma_pause()
1386 spin_unlock_irqrestore(&od->irq_lock, flags); in omap_dma_pause()
1394 struct omap_dmadev *od = to_omap_dma_dev(chan->device); in omap_dma_resume() local
1398 spin_lock_irqsave(&od->irq_lock, flags); in omap_dma_resume()
1410 spin_unlock_irqrestore(&od->irq_lock, flags); in omap_dma_resume()
1415 static int omap_dma_chan_init(struct omap_dmadev *od) in omap_dma_chan_init() argument
1423 c->reg_map = od->reg_map; in omap_dma_chan_init()
1425 vchan_init(&c->vc, &od->ddev); in omap_dma_chan_init()
1430 static void omap_dma_free(struct omap_dmadev *od) in omap_dma_free() argument
1432 while (!list_empty(&od->ddev.channels)) { in omap_dma_free()
1433 struct omap_chan *c = list_first_entry(&od->ddev.channels, in omap_dma_free()
1448 struct omap_dmadev *od; in omap_dma_probe() local
1453 od = devm_kzalloc(&pdev->dev, sizeof(*od), GFP_KERNEL); in omap_dma_probe()
1454 if (!od) in omap_dma_probe()
1458 od->base = devm_ioremap_resource(&pdev->dev, res); in omap_dma_probe()
1459 if (IS_ERR(od->base)) in omap_dma_probe()
1460 return PTR_ERR(od->base); in omap_dma_probe()
1462 od->plat = omap_get_plat_info(); in omap_dma_probe()
1463 if (!od->plat) in omap_dma_probe()
1466 od->reg_map = od->plat->reg_map; in omap_dma_probe()
1468 dma_cap_set(DMA_SLAVE, od->ddev.cap_mask); in omap_dma_probe()
1469 dma_cap_set(DMA_CYCLIC, od->ddev.cap_mask); in omap_dma_probe()
1470 dma_cap_set(DMA_MEMCPY, od->ddev.cap_mask); in omap_dma_probe()
1471 dma_cap_set(DMA_INTERLEAVE, od->ddev.cap_mask); in omap_dma_probe()
1472 od->ddev.device_alloc_chan_resources = omap_dma_alloc_chan_resources; in omap_dma_probe()
1473 od->ddev.device_free_chan_resources = omap_dma_free_chan_resources; in omap_dma_probe()
1474 od->ddev.device_tx_status = omap_dma_tx_status; in omap_dma_probe()
1475 od->ddev.device_issue_pending = omap_dma_issue_pending; in omap_dma_probe()
1476 od->ddev.device_prep_slave_sg = omap_dma_prep_slave_sg; in omap_dma_probe()
1477 od->ddev.device_prep_dma_cyclic = omap_dma_prep_dma_cyclic; in omap_dma_probe()
1478 od->ddev.device_prep_dma_memcpy = omap_dma_prep_dma_memcpy; in omap_dma_probe()
1479 od->ddev.device_prep_interleaved_dma = omap_dma_prep_dma_interleaved; in omap_dma_probe()
1480 od->ddev.device_config = omap_dma_slave_config; in omap_dma_probe()
1481 od->ddev.device_pause = omap_dma_pause; in omap_dma_probe()
1482 od->ddev.device_resume = omap_dma_resume; in omap_dma_probe()
1483 od->ddev.device_terminate_all = omap_dma_terminate_all; in omap_dma_probe()
1484 od->ddev.device_synchronize = omap_dma_synchronize; in omap_dma_probe()
1485 od->ddev.src_addr_widths = OMAP_DMA_BUSWIDTHS; in omap_dma_probe()
1486 od->ddev.dst_addr_widths = OMAP_DMA_BUSWIDTHS; in omap_dma_probe()
1487 od->ddev.directions = BIT(DMA_DEV_TO_MEM) | BIT(DMA_MEM_TO_DEV); in omap_dma_probe()
1488 if (__dma_omap15xx(od->plat->dma_attr)) in omap_dma_probe()
1489 od->ddev.residue_granularity = in omap_dma_probe()
1492 od->ddev.residue_granularity = DMA_RESIDUE_GRANULARITY_BURST; in omap_dma_probe()
1493 od->ddev.max_burst = SZ_16M - 1; /* CCEN: 24bit unsigned */ in omap_dma_probe()
1494 od->ddev.dev = &pdev->dev; in omap_dma_probe()
1495 INIT_LIST_HEAD(&od->ddev.channels); in omap_dma_probe()
1496 spin_lock_init(&od->lock); in omap_dma_probe()
1497 spin_lock_init(&od->irq_lock); in omap_dma_probe()
1500 od->dma_requests = OMAP_SDMA_REQUESTS; in omap_dma_probe()
1503 &od->dma_requests)) { in omap_dma_probe()
1511 lch_count = od->plat->dma_attr->lch_count; in omap_dma_probe()
1522 od->lch_map = devm_kcalloc(&pdev->dev, lch_count, sizeof(*od->lch_map), in omap_dma_probe()
1524 if (!od->lch_map) in omap_dma_probe()
1527 for (i = 0; i < od->dma_requests; i++) { in omap_dma_probe()
1528 rc = omap_dma_chan_init(od); in omap_dma_probe()
1530 omap_dma_free(od); in omap_dma_probe()
1538 od->legacy = true; in omap_dma_probe()
1541 od->irq_enable_mask = 0; in omap_dma_probe()
1542 omap_dma_glbl_write(od, IRQENABLE_L1, 0); in omap_dma_probe()
1545 IRQF_SHARED, "omap-dma-engine", od); in omap_dma_probe()
1547 omap_dma_free(od); in omap_dma_probe()
1552 if (omap_dma_glbl_read(od, CAPS_0) & CAPS_0_SUPPORT_LL123) in omap_dma_probe()
1553 od->ll123_supported = true; in omap_dma_probe()
1555 od->ddev.filter.map = od->plat->slave_map; in omap_dma_probe()
1556 od->ddev.filter.mapcnt = od->plat->slavecnt; in omap_dma_probe()
1557 od->ddev.filter.fn = omap_dma_filter_fn; in omap_dma_probe()
1559 if (od->ll123_supported) { in omap_dma_probe()
1560 od->desc_pool = dma_pool_create(dev_name(&pdev->dev), in omap_dma_probe()
1564 if (!od->desc_pool) { in omap_dma_probe()
1567 od->ll123_supported = false; in omap_dma_probe()
1571 rc = dma_async_device_register(&od->ddev); in omap_dma_probe()
1575 omap_dma_free(od); in omap_dma_probe()
1579 platform_set_drvdata(pdev, od); in omap_dma_probe()
1582 omap_dma_info.dma_cap = od->ddev.cap_mask; in omap_dma_probe()
1589 dma_async_device_unregister(&od->ddev); in omap_dma_probe()
1590 omap_dma_free(od); in omap_dma_probe()
1595 od->ll123_supported ? " (LinkedList1/2/3 supported)" : ""); in omap_dma_probe()
1602 struct omap_dmadev *od = platform_get_drvdata(pdev); in omap_dma_remove() local
1609 devm_free_irq(&pdev->dev, irq, od); in omap_dma_remove()
1611 dma_async_device_unregister(&od->ddev); in omap_dma_remove()
1613 if (!od->legacy) { in omap_dma_remove()
1615 omap_dma_glbl_write(od, IRQENABLE_L0, 0); in omap_dma_remove()
1618 if (od->ll123_supported) in omap_dma_remove()
1619 dma_pool_destroy(od->desc_pool); in omap_dma_remove()
1621 omap_dma_free(od); in omap_dma_remove()
1648 struct omap_dmadev *od = to_omap_dma_dev(chan->device); in omap_dma_filter_fn() local
1652 if (req <= od->dma_requests) { in omap_dma_filter_fn()