enum udma_tp_level channel_tpl; /* Channel Throughput Level */
 
        u32 tr_trigger_type;
+       unsigned long tx_flags;
 
        /* PKDMA mapped channel */
        int mapped_channel_id;
 {
        u32 peer_bcnt, bcnt;
 
-       /* Only TX towards PDMA is affected */
+       /*
+        * Only TX towards PDMA is affected.
+        * If DMA_PREP_INTERRUPT is not set by consumer then skip the transfer
+        * completion calculation, consumer must ensure that there is no stale
+        * data in DMA fabric in this case.
+        */
        if (uc->config.ep_type == PSIL_EP_NATIVE ||
-           uc->config.dir != DMA_MEM_TO_DEV)
+           uc->config.dir != DMA_MEM_TO_DEV || !(uc->config.tx_flags & DMA_PREP_INTERRUPT))
                return true;
 
        peer_bcnt = udma_tchanrt_read(uc, UDMA_CHAN_RT_PEER_BCNT_REG);
        if (!burst)
                burst = 1;
 
+       uc->config.tx_flags = tx_flags;
+
        if (uc->config.pkt_mode)
                d = udma_prep_slave_sg_pkt(uc, sgl, sglen, dir, tx_flags,
                                           context);