@@ -503,6 +503,54 @@ static inline int get_burst_len(struct dma_pl330_desc *desc, size_t len)
503
503
return burst_len ;
504
504
}
505
505
506
+ static struct dma_async_tx_descriptor * pl330_prep_dma_cyclic (
507
+ struct dma_chan * chan , dma_addr_t dma_addr , size_t len ,
508
+ size_t period_len , enum dma_transfer_direction direction ,
509
+ void * context )
510
+ {
511
+ struct dma_pl330_desc * desc ;
512
+ struct dma_pl330_chan * pch = to_pchan (chan );
513
+ dma_addr_t dst ;
514
+ dma_addr_t src ;
515
+
516
+ desc = pl330_get_desc (pch );
517
+ if (!desc ) {
518
+ dev_err (pch -> dmac -> pif .dev , "%s:%d Unable to fetch desc\n" ,
519
+ __func__ , __LINE__ );
520
+ return NULL ;
521
+ }
522
+
523
+ switch (direction ) {
524
+ case DMA_MEM_TO_DEV :
525
+ desc -> rqcfg .src_inc = 1 ;
526
+ desc -> rqcfg .dst_inc = 0 ;
527
+ desc -> req .rqtype = MEMTODEV ;
528
+ src = dma_addr ;
529
+ dst = pch -> fifo_addr ;
530
+ break ;
531
+ case DMA_DEV_TO_MEM :
532
+ desc -> rqcfg .src_inc = 0 ;
533
+ desc -> rqcfg .dst_inc = 1 ;
534
+ desc -> req .rqtype = DEVTOMEM ;
535
+ src = pch -> fifo_addr ;
536
+ dst = dma_addr ;
537
+ break ;
538
+ default :
539
+ dev_err (pch -> dmac -> pif .dev , "%s:%d Invalid dma direction\n" ,
540
+ __func__ , __LINE__ );
541
+ return NULL ;
542
+ }
543
+
544
+ desc -> rqcfg .brst_size = pch -> burst_sz ;
545
+ desc -> rqcfg .brst_len = 1 ;
546
+
547
+ pch -> cyclic = true;
548
+
549
+ fill_px (& desc -> px , dst , src , period_len );
550
+
551
+ return & desc -> txd ;
552
+ }
553
+
506
554
static struct dma_async_tx_descriptor *
507
555
pl330_prep_dma_memcpy (struct dma_chan * chan , dma_addr_t dst ,
508
556
dma_addr_t src , size_t len , unsigned long flags )
@@ -550,8 +598,8 @@ pl330_prep_dma_memcpy(struct dma_chan *chan, dma_addr_t dst,
550
598
551
599
static struct dma_async_tx_descriptor *
552
600
pl330_prep_slave_sg (struct dma_chan * chan , struct scatterlist * sgl ,
553
- unsigned int sg_len , enum dma_data_direction direction ,
554
- unsigned long flg )
601
+ unsigned int sg_len , enum dma_transfer_direction direction ,
602
+ unsigned long flg , void * context )
555
603
{
556
604
struct dma_pl330_desc * first , * desc = NULL ;
557
605
struct dma_pl330_chan * pch = to_pchan (chan );
0 commit comments