summaryrefslogtreecommitdiffstats
path: root/drivers/net/xgmac.c
diff options
context:
space:
mode:
authorLucas Stach <dev@lynxeye.de>2015-03-05 22:50:16 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2015-03-06 07:53:48 +0100
commitefac9ca5bd4b73550895b1714fa29cb229e62133 (patch)
treecf3ca993f6cdcb30f67de8dce6e32ea0ffc4fd46 /drivers/net/xgmac.c
parentece91a7d1db34b3e0804ad49b48849f438f8e437 (diff)
downloadbarebox-efac9ca5bd4b73550895b1714fa29cb229e62133.tar.gz
barebox-efac9ca5bd4b73550895b1714fa29cb229e62133.tar.xz
net: xgmac: convert to streaming DMA ops
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 <dev@lynxeye.de> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/net/xgmac.c')
-rw-r--r--drivers/net/xgmac.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/net/xgmac.c b/drivers/net/xgmac.c
index c5971108e4..3b2273fd79 100644
--- a/drivers/net/xgmac.c
+++ b/drivers/net/xgmac.c
@@ -25,7 +25,6 @@
#include <errno.h>
#include <io.h>
#include <linux/err.h>
-#include <asm/mmu.h>
#define TX_NUM_DESC 1
#define RX_NUM_DESC 32
@@ -587,7 +586,7 @@ static int xgmac_send(struct eth_device *edev, void *packet, int length)
struct xgmac_dma_desc *txdesc = &priv->tx_chain[currdesc];
int ret;
- dma_flush_range((ulong) packet, (ulong)packet + length);
+ dma_sync_single_for_device((unsigned long)packet, length, DMA_TO_DEVICE);
desc_set_buf_addr_and_size(txdesc, packet, length);
desc_set_tx_owner(txdesc, TXDESC_FIRST_SEG |
TXDESC_LAST_SEG | TXDESC_CRC_EN_APPEND);
@@ -596,6 +595,7 @@ static int xgmac_send(struct eth_device *edev, void *packet, int length)
writel(1, priv->base + XGMAC_DMA_TX_POLL);
ret = wait_on_timeout(1 * SECOND, !desc_get_owner(txdesc));
+ dma_sync_single_for_cpu((unsigned long)packet, length, DMA_TO_DEVICE);
if (ret) {
dev_err(priv->dev, "TX timeout\n");
return ret;
@@ -611,14 +611,19 @@ static int xgmac_recv(struct eth_device *edev)
u32 currdesc = priv->rx_currdesc;
struct xgmac_dma_desc *rxdesc = &priv->rx_chain[currdesc];
int length = 0;
+ void *buf_addr;
/* check if the host has the desc */
if (desc_get_owner(rxdesc))
return -1; /* something bad happened */
length = desc_get_rx_frame_len(rxdesc);
+ buf_addr = desc_get_buf_addr(rxdesc);
- net_receive(edev, desc_get_buf_addr(rxdesc), length);
+ dma_sync_single_for_cpu((unsigned long)buf_addr, length, DMA_FROM_DEVICE);
+ net_receive(edev, buf_addr, length);
+ dma_sync_single_for_device((unsigned long)buf_addr, length,
+ DMA_FROM_DEVICE);
/* set descriptor back to owned by XGMAC */
desc_set_rx_owner(rxdesc);