Commit 137cb55c authored by Dan Williams's avatar Dan Williams

iop-adma: add a dummy read to flush next descriptor update

The current dummy read references the wrong address allowing the next
descriptor address update to linger in the store buffer and get passed
by an 'append' event.

This issue was uncovered by the change from strongly-ordered to device
memory for the adma registers.
Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
parent f21f237c
...@@ -411,6 +411,7 @@ iop_adma_tx_submit(struct dma_async_tx_descriptor *tx) ...@@ -411,6 +411,7 @@ iop_adma_tx_submit(struct dma_async_tx_descriptor *tx)
int slot_cnt; int slot_cnt;
int slots_per_op; int slots_per_op;
dma_cookie_t cookie; dma_cookie_t cookie;
dma_addr_t next_dma;
grp_start = sw_desc->group_head; grp_start = sw_desc->group_head;
slot_cnt = grp_start->slot_cnt; slot_cnt = grp_start->slot_cnt;
...@@ -425,11 +426,11 @@ iop_adma_tx_submit(struct dma_async_tx_descriptor *tx) ...@@ -425,11 +426,11 @@ iop_adma_tx_submit(struct dma_async_tx_descriptor *tx)
&old_chain_tail->chain_node); &old_chain_tail->chain_node);
/* fix up the hardware chain */ /* 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 /* check for pre-chained descriptors */
* 2/ dummy read to flush next_desc write
*/
BUG_ON(iop_desc_get_next_desc(sw_desc)); BUG_ON(iop_desc_get_next_desc(sw_desc));
/* increment the pending count by the number of slots /* increment the pending count by the number of slots
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment