Lines Matching full:mdma
268 struct mpc_dma *mdma = dma_chan_to_mpc_dma(&mchan->chan); in mpc_dma_execute() local
312 memcpy_toio(&mdma->tcd[cid], first->tcd, sizeof(struct mpc_dma_tcd)); in mpc_dma_execute()
315 mdma->tcd[cid].e_sg = 1; in mpc_dma_execute()
317 if (mdma->is_mpc8308) { in mpc_dma_execute()
319 out_8(&mdma->regs->dmassrt, cid); in mpc_dma_execute()
322 out_8(&mdma->regs->dmaserq, cid); in mpc_dma_execute()
325 out_8(&mdma->regs->dmassrt, cid); in mpc_dma_execute()
330 static void mpc_dma_irq_process(struct mpc_dma *mdma, u32 is, u32 es, int off) in mpc_dma_irq_process() argument
339 mchan = &mdma->channels[ch + off]; in mpc_dma_irq_process()
343 out_8(&mdma->regs->dmacint, ch + off); in mpc_dma_irq_process()
344 out_8(&mdma->regs->dmacerr, ch + off); in mpc_dma_irq_process()
363 struct mpc_dma *mdma = data; in mpc_dma_irq() local
367 es = in_be32(&mdma->regs->dmaes); in mpc_dma_irq()
368 spin_lock(&mdma->error_status_lock); in mpc_dma_irq()
369 if ((es & MPC_DMA_DMAES_VLD) && mdma->error_status == 0) in mpc_dma_irq()
370 mdma->error_status = es; in mpc_dma_irq()
371 spin_unlock(&mdma->error_status_lock); in mpc_dma_irq()
374 if (mdma->dma.chancnt > 32) { in mpc_dma_irq()
375 mpc_dma_irq_process(mdma, in_be32(&mdma->regs->dmainth), in mpc_dma_irq()
376 in_be32(&mdma->regs->dmaerrh), 32); in mpc_dma_irq()
378 mpc_dma_irq_process(mdma, in_be32(&mdma->regs->dmaintl), in mpc_dma_irq()
379 in_be32(&mdma->regs->dmaerrl), 0); in mpc_dma_irq()
382 tasklet_schedule(&mdma->tasklet); in mpc_dma_irq()
388 static void mpc_dma_process_completed(struct mpc_dma *mdma) in mpc_dma_process_completed() argument
398 for (i = 0; i < mdma->dma.chancnt; i++) { in mpc_dma_process_completed()
399 mchan = &mdma->channels[i]; in mpc_dma_process_completed()
431 struct mpc_dma *mdma = (void *)data; in mpc_dma_tasklet() local
435 spin_lock_irqsave(&mdma->error_status_lock, flags); in mpc_dma_tasklet()
436 es = mdma->error_status; in mpc_dma_tasklet()
437 mdma->error_status = 0; in mpc_dma_tasklet()
438 spin_unlock_irqrestore(&mdma->error_status_lock, flags); in mpc_dma_tasklet()
442 dev_err(mdma->dma.dev, in mpc_dma_tasklet()
447 dev_err(mdma->dma.dev, "- Group Priority Error\n"); in mpc_dma_tasklet()
449 dev_err(mdma->dma.dev, "- Channel Priority Error\n"); in mpc_dma_tasklet()
451 dev_err(mdma->dma.dev, "- Source Address Error\n"); in mpc_dma_tasklet()
453 dev_err(mdma->dma.dev, "- Source Offset Configuration Error\n"); in mpc_dma_tasklet()
455 dev_err(mdma->dma.dev, "- Destination Address Error\n"); in mpc_dma_tasklet()
457 dev_err(mdma->dma.dev, "- Destination Offset Configuration Error\n"); in mpc_dma_tasklet()
459 dev_err(mdma->dma.dev, "- NBytes/Citter Configuration Error\n"); in mpc_dma_tasklet()
461 dev_err(mdma->dma.dev, "- Scatter/Gather Configuration Error\n"); in mpc_dma_tasklet()
463 dev_err(mdma->dma.dev, "- Source Bus Error\n"); in mpc_dma_tasklet()
465 dev_err(mdma->dma.dev, "- Destination Bus Error\n"); in mpc_dma_tasklet()
468 mpc_dma_process_completed(mdma); in mpc_dma_tasklet()
500 struct mpc_dma *mdma = dma_chan_to_mpc_dma(chan); in mpc_dma_alloc_chan_resources() local
510 tcd = dma_alloc_coherent(mdma->dma.dev, in mpc_dma_alloc_chan_resources()
520 dev_notice(mdma->dma.dev, in mpc_dma_alloc_chan_resources()
537 dma_free_coherent(mdma->dma.dev, in mpc_dma_alloc_chan_resources()
550 out_8(&mdma->regs->dmaseei, chan->chan_id); in mpc_dma_alloc_chan_resources()
558 struct mpc_dma *mdma = dma_chan_to_mpc_dma(chan); in mpc_dma_free_chan_resources() local
582 dma_free_coherent(mdma->dma.dev, in mpc_dma_free_chan_resources()
591 out_8(&mdma->regs->dmaceei, chan->chan_id); in mpc_dma_free_chan_resources()
616 struct mpc_dma *mdma = dma_chan_to_mpc_dma(chan); in mpc_dma_prep_memcpy() local
633 mpc_dma_process_completed(mdma); in mpc_dma_prep_memcpy()
649 } else if (!mdma->is_mpc8308 && IS_ALIGNED(src | dst | len, 16)) { in mpc_dma_prep_memcpy()
700 struct mpc_dma *mdma = dma_chan_to_mpc_dma(chan); in mpc_dma_prep_slave_sg() local
726 mpc_dma_process_completed(mdma); in mpc_dma_prep_slave_sg()
776 if (mdma->is_mpc8308) { in mpc_dma_prep_slave_sg()
844 struct mpc_dma *mdma = dma_chan_to_mpc_dma(&mchan->chan); in mpc_dma_device_config() local
866 if (!is_buswidth_valid(cfg->src_addr_width, mdma->is_mpc8308) || in mpc_dma_device_config()
867 !is_buswidth_valid(cfg->dst_addr_width, mdma->is_mpc8308)) in mpc_dma_device_config()
893 struct mpc_dma *mdma = dma_chan_to_mpc_dma(chan); in mpc_dma_device_terminate_all() local
899 out_8(&mdma->regs->dmacerq, chan->chan_id); in mpc_dma_device_terminate_all()
914 struct mpc_dma *mdma; in mpc_dma_probe() local
921 mdma = devm_kzalloc(dev, sizeof(struct mpc_dma), GFP_KERNEL); in mpc_dma_probe()
922 if (!mdma) { in mpc_dma_probe()
927 mdma->irq = irq_of_parse_and_map(dn, 0); in mpc_dma_probe()
928 if (!mdma->irq) { in mpc_dma_probe()
935 mdma->is_mpc8308 = 1; in mpc_dma_probe()
936 mdma->irq2 = irq_of_parse_and_map(dn, 1); in mpc_dma_probe()
937 if (!mdma->irq2) { in mpc_dma_probe()
959 mdma->regs = devm_ioremap(dev, regs_start, regs_size); in mpc_dma_probe()
960 if (!mdma->regs) { in mpc_dma_probe()
966 mdma->tcd = (struct mpc_dma_tcd *)((u8 *)(mdma->regs) in mpc_dma_probe()
969 retval = request_irq(mdma->irq, &mpc_dma_irq, 0, DRV_NAME, mdma); in mpc_dma_probe()
976 if (mdma->is_mpc8308) { in mpc_dma_probe()
977 retval = request_irq(mdma->irq2, &mpc_dma_irq, 0, in mpc_dma_probe()
978 DRV_NAME, mdma); in mpc_dma_probe()
986 spin_lock_init(&mdma->error_status_lock); in mpc_dma_probe()
988 dma = &mdma->dma; in mpc_dma_probe()
1003 if (mdma->is_mpc8308) in mpc_dma_probe()
1009 mchan = &mdma->channels[i]; in mpc_dma_probe()
1024 tasklet_init(&mdma->tasklet, mpc_dma_tasklet, (unsigned long)mdma); in mpc_dma_probe()
1032 if (mdma->is_mpc8308) { in mpc_dma_probe()
1034 out_be32(&mdma->regs->dmacr, MPC_DMA_DMACR_ERCA); in mpc_dma_probe()
1037 out_be32(&mdma->regs->dmagpor, MPC_DMA_DMAGPOR_SNOOP_ENABLE); in mpc_dma_probe()
1039 out_be32(&mdma->regs->dmaeeil, 0); in mpc_dma_probe()
1042 out_be32(&mdma->regs->dmaintl, 0xFFFF); in mpc_dma_probe()
1043 out_be32(&mdma->regs->dmaerrl, 0xFFFF); in mpc_dma_probe()
1045 out_be32(&mdma->regs->dmacr, MPC_DMA_DMACR_EDCG | in mpc_dma_probe()
1050 out_be32(&mdma->regs->dmaerqh, 0); in mpc_dma_probe()
1051 out_be32(&mdma->regs->dmaerql, 0); in mpc_dma_probe()
1054 out_be32(&mdma->regs->dmaeeih, 0); in mpc_dma_probe()
1055 out_be32(&mdma->regs->dmaeeil, 0); in mpc_dma_probe()
1058 out_be32(&mdma->regs->dmainth, 0xFFFFFFFF); in mpc_dma_probe()
1059 out_be32(&mdma->regs->dmaintl, 0xFFFFFFFF); in mpc_dma_probe()
1060 out_be32(&mdma->regs->dmaerrh, 0xFFFFFFFF); in mpc_dma_probe()
1061 out_be32(&mdma->regs->dmaerrl, 0xFFFFFFFF); in mpc_dma_probe()
1064 out_be32(&mdma->regs->dmaihsa, 0); in mpc_dma_probe()
1065 out_be32(&mdma->regs->dmailsa, 0); in mpc_dma_probe()
1069 dev_set_drvdata(dev, mdma); in mpc_dma_probe()
1077 of_dma_xlate_by_chan_id, mdma); in mpc_dma_probe()
1085 if (mdma->is_mpc8308) in mpc_dma_probe()
1086 free_irq(mdma->irq2, mdma); in mpc_dma_probe()
1088 free_irq(mdma->irq, mdma); in mpc_dma_probe()
1090 if (mdma->is_mpc8308) in mpc_dma_probe()
1091 irq_dispose_mapping(mdma->irq2); in mpc_dma_probe()
1093 irq_dispose_mapping(mdma->irq); in mpc_dma_probe()
1101 struct mpc_dma *mdma = dev_get_drvdata(dev); in mpc_dma_remove() local
1105 dma_async_device_unregister(&mdma->dma); in mpc_dma_remove()
1106 if (mdma->is_mpc8308) { in mpc_dma_remove()
1107 free_irq(mdma->irq2, mdma); in mpc_dma_remove()
1108 irq_dispose_mapping(mdma->irq2); in mpc_dma_remove()
1110 free_irq(mdma->irq, mdma); in mpc_dma_remove()
1111 irq_dispose_mapping(mdma->irq); in mpc_dma_remove()
1112 tasklet_kill(&mdma->tasklet); in mpc_dma_remove()