Insert isb() sequence points to ensure DMA descriptors
are filled in and set up before actual DMA occurs.

Signed-off-by: Albert Aribaud <[email protected]>
---
 drivers/net/kirkwood_egiga.c |    5 +++++
 1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/drivers/net/kirkwood_egiga.c b/drivers/net/kirkwood_egiga.c
index 932792e..9eca2f3 100644
--- a/drivers/net/kirkwood_egiga.c
+++ b/drivers/net/kirkwood_egiga.c
@@ -447,6 +447,8 @@ static int kwgbe_init(struct eth_device *dev)
 
        /* Assignment of Rx CRDB of given RXUQ */
        KWGBEREG_WR(regs->rxcdp[RXUQ], (u32) dkwgbe->p_rxdesc_curr);
+       /* ensure previous write is done before enabling Rx DMA */
+       isb();
        /* Enable port Rx. */
        KWGBEREG_WR(regs->rqc, (1 << RXUQ));
 
@@ -536,6 +538,9 @@ static int kwgbe_send(struct eth_device *dev, volatile void 
*dataptr,
        p_txdesc->buf_ptr = (u8 *) p;
        p_txdesc->byte_cnt = datasize;
 
+       /* ensure tx desc writes above are performed before we start Tx DMA */
+       isb();
+
        /* Apply send command using zeroth TXUQ */
        KWGBEREG_WR(regs->tcqdp[TXUQ], (u32) p_txdesc);
        KWGBEREG_WR(regs->tqc, (1 << TXUQ));
-- 
1.6.4.4

_______________________________________________
U-Boot mailing list
[email protected]
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to