]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/dma/iop-adma.c
iop-adma: add a dummy read to flush next descriptor update
[linux-2.6-omap-h63xx.git] / drivers / dma / iop-adma.c
index 71fba82462cb98372568a2f2da6c8c325e1a10d8..95f5a9466816cb01e1daedaaa5db5ca1b24be3a1 100644 (file)
@@ -411,6 +411,7 @@ iop_adma_tx_submit(struct dma_async_tx_descriptor *tx)
        int slot_cnt;
        int slots_per_op;
        dma_cookie_t cookie;
+       dma_addr_t next_dma;
 
        grp_start = sw_desc->group_head;
        slot_cnt = grp_start->slot_cnt;
@@ -425,11 +426,11 @@ iop_adma_tx_submit(struct dma_async_tx_descriptor *tx)
                         &old_chain_tail->chain_node);
 
        /* fix up the hardware chain */
-       iop_desc_set_next_desc(old_chain_tail, grp_start->async_tx.phys);
+       next_dma = grp_start->async_tx.phys;
+       iop_desc_set_next_desc(old_chain_tail, next_dma);
+       BUG_ON(iop_desc_get_next_desc(old_chain_tail) != next_dma); /* flush */
 
-       /* 1/ don't add pre-chained descriptors
-        * 2/ dummy read to flush next_desc write
-        */
+       /* check for pre-chained descriptors */
        BUG_ON(iop_desc_get_next_desc(sw_desc));
 
        /* increment the pending count by the number of slots