summaryrefslogtreecommitdiffstats
path: root/drivers/net/mvneta.c
diff options
context:
space:
mode:
authorLucas Stach <dev@lynxeye.de>2015-03-13 21:23:44 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2015-03-16 05:30:19 +0100
commita76c62f80d95860e6c5904ab5cb91667c43f61eb (patch)
tree81535e067c42691149100ce217a129724a93f45c /drivers/net/mvneta.c
parenteab9e4cdd9648b8b795ba04ec56cb842deac564e (diff)
downloadbarebox-a76c62f80d95860e6c5904ab5cb91667c43f61eb.tar.gz
barebox-a76c62f80d95860e6c5904ab5cb91667c43f61eb.tar.xz
net: mvneta: 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/mvneta.c')
-rw-r--r--drivers/net/mvneta.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/net/mvneta.c b/drivers/net/mvneta.c
index f2948e4ed7..d4c8a2c68d 100644
--- a/drivers/net/mvneta.c
+++ b/drivers/net/mvneta.c
@@ -393,7 +393,7 @@ static int mvneta_send(struct eth_device *edev, void *data, int len)
int ret, error, last_desc;
/* Flush transmit data */
- dma_flush_range((unsigned long)data, (unsigned long)data+len);
+ dma_sync_single_for_device((unsigned long)data, len, DMA_TO_DEVICE);
/* Fill the Tx descriptor */
txdesc->cmd_sts |= MVNETA_TX_L4_CSUM_NOT | MVNETA_TXD_FLZ_DESC;
@@ -409,6 +409,7 @@ static int mvneta_send(struct eth_device *edev, void *data, int len)
* the Tx port status register (PTXS).
*/
ret = wait_on_timeout(TRANSFER_TIMEOUT, !mvneta_pending_tx(priv));
+ dma_sync_single_for_cpu((unsigned long)data, len, DMA_TO_DEVICE);
if (ret) {
dev_err(&edev->dev, "transmit timeout\n");
return ret;
@@ -459,15 +460,17 @@ static int mvneta_recv(struct eth_device *edev)
}
/* invalidate current receive buffer */
- dma_inv_range((unsigned long)rxdesc->buf_phys_addr,
- (unsigned long)rxdesc->buf_phys_addr +
- ALIGN(PKTSIZE, 8));
+ dma_sync_single_for_cpu((unsigned long)rxdesc->buf_phys_addr,
+ ALIGN(PKTSIZE, 8), DMA_FROM_DEVICE);
/* received packet is padded with two null bytes (Marvell header) */
net_receive(edev, (void *)(rxdesc->buf_phys_addr + MVNETA_MH_SIZE),
rxdesc->data_size - MVNETA_MH_SIZE);
ret = 0;
+ dma_sync_single_for_device((unsigned long)rxdesc->buf_phys_addr,
+ ALIGN(PKTSIZE, 8), DMA_FROM_DEVICE);
+
recv_err:
/* reset this and get next rx descriptor*/
rxdesc->data_size = 0;