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@xxxxxxxxxx> --- 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 barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox