summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLucas Stach <dev@lynxeye.de>2015-03-05 22:50:12 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2015-03-06 07:53:48 +0100
commitaaca81b9f56959aa07ace421bed6a6506a602f9f (patch)
tree8558241964da92fa95e54c7150f71f12a5f4ff53
parent5213d76f474f5a4ee78b17555fa91803a38d006b (diff)
downloadbarebox-aaca81b9f56959aa07ace421bed6a6506a602f9f.tar.gz
barebox-aaca81b9f56959aa07ace421bed6a6506a602f9f.tar.xz
net: fec: 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>
-rw-r--r--drivers/net/fec_imx.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/drivers/net/fec_imx.c b/drivers/net/fec_imx.c
index 266357e551..875905a1bf 100644
--- a/drivers/net/fec_imx.c
+++ b/drivers/net/fec_imx.c
@@ -31,8 +31,6 @@
#include <of_gpio.h>
#include <gpio.h>
-#include <asm/mmu.h>
-
#include "fec_imx.h"
struct fec_frame {
@@ -479,8 +477,9 @@ static int fec_send(struct eth_device *dev, void *eth_data, int data_length)
writew(data_length, &fec->tbd_base[fec->tbd_index].data_length);
writel((uint32_t)(eth_data), &fec->tbd_base[fec->tbd_index].data_pointer);
- dma_flush_range((unsigned long)eth_data,
- (unsigned long)(eth_data + data_length));
+
+ dma_sync_single_for_device((unsigned long)eth_data, data_length,
+ DMA_TO_DEVICE);
/*
* update BD's status now
* This block:
@@ -503,6 +502,8 @@ static int fec_send(struct eth_device *dev, void *eth_data, int data_length)
break;
}
}
+ dma_sync_single_for_cpu((unsigned long)eth_data, data_length,
+ DMA_TO_DEVICE);
/* for next transmission use the other buffer */
if (fec->tbd_index)
@@ -576,7 +577,11 @@ static int fec_recv(struct eth_device *dev)
*/
frame = phys_to_virt(readl(&rbd->data_pointer));
frame_length = readw(&rbd->data_length) - 4;
+ dma_sync_single_for_cpu((unsigned long)frame->data,
+ frame_length, DMA_FROM_DEVICE);
net_receive(dev, frame->data, frame_length);
+ dma_sync_single_for_device((unsigned long)frame->data,
+ frame_length, DMA_FROM_DEVICE);
len = frame_length;
} else {
if (bd_status & FEC_RBD_ERR) {