Move to the common streaming DMA ops in order to get rid of
the direct usage of the ARM MMU functions for the cache
maintenance.

Signed-off-by: Lucas Stach <[email protected]>
---
 drivers/net/arc_emac.c | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/drivers/net/arc_emac.c b/drivers/net/arc_emac.c
index e050199..4bf456e 100644
--- a/drivers/net/arc_emac.c
+++ b/drivers/net/arc_emac.c
@@ -16,7 +16,6 @@
  * GNU General Public License for more details.
  */
 
-#include <asm/mmu.h>
 #include <clock.h>
 #include <common.h>
 #include <dma.h>
@@ -195,6 +194,8 @@ static int arc_emac_open(struct eth_device *edev)
                rxbd->data = cpu_to_le32(rxbuf);
 
                /* Return ownership to EMAC */
+               dma_sync_single_for_device((unsigned long)rxbuf, PKTSIZE,
+                                          DMA_FROM_DEVICE);
                rxbd->info = cpu_to_le32(FOR_EMAC | PKTSIZE);
 
                *last_rx_bd = (*last_rx_bd + 1) % RX_BD_NUM;
@@ -244,7 +245,7 @@ static int arc_emac_send(struct eth_device *edev, void 
*data, int length)
                length = EMAC_ZLEN;
        }
 
-       dma_flush_range((unsigned long)data, (unsigned long)data + length);
+       dma_sync_single_for_device((unsigned long)data, length, DMA_TO_DEVICE);
 
        bd->data = cpu_to_le32(data);
        bd->info = cpu_to_le32(FOR_EMAC | FIRST_OR_LAST_MASK | length);
@@ -253,6 +254,8 @@ static int arc_emac_send(struct eth_device *edev, void 
*data, int length)
        ret = wait_on_timeout(20 * MSECOND,
                              (arc_reg_get(priv, R_STATUS) & TXINT_MASK) != 0);
 
+       dma_sync_single_for_cpu((unsigned long)data, length, DMA_TO_DEVICE);
+
        if (ret) {
                dev_err(&edev->dev, "transmit timeout\n");
                return ret;
@@ -294,18 +297,19 @@ static int arc_emac_recv(struct eth_device *edev)
                        printk(KERN_DEBUG "incomplete packet received\n");
 
                        /* Return ownership to EMAC */
-                       rxbd->info = cpu_to_le32(FOR_EMAC | PKTSIZE);
                        continue;
                }
 
                pktlen = info & LEN_MASK;
 
-               /* invalidate current receive buffer */
-               dma_inv_range((unsigned long)rxbd->data,
-                             (unsigned long)rxbd->data + pktlen);
+               dma_sync_single_for_cpu((unsigned long)rxbd->data, pktlen,
+                                       DMA_FROM_DEVICE);
 
                net_receive(edev, (unsigned char *)rxbd->data, pktlen);
 
+               dma_sync_single_for_device((unsigned long)rxbd->data, pktlen,
+                                          DMA_FROM_DEVICE);
+
                rxbd->info = cpu_to_le32(FOR_EMAC | PKTSIZE);
        }
 
-- 
2.1.0


_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox

Reply via email to