From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from ns.lynxeye.de ([87.118.118.114] helo=lynxeye.de) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1YS3m6-0007iX-9K for barebox@lists.infradead.org; Sun, 01 Mar 2015 13:19:18 +0000 Received: from tellur.intern.lynxeye.de (p57B5E414.dip0.t-ipconnect.de [87.181.228.20]) by lynxeye.de (Postfix) with ESMTPA id 9624526C2003 for ; Sun, 1 Mar 2015 14:17:31 +0100 (CET) From: Lucas Stach Date: Sun, 1 Mar 2015 14:17:16 +0100 Message-Id: <1425215842-6982-19-git-send-email-dev@lynxeye.de> In-Reply-To: <1425215842-6982-1-git-send-email-dev@lynxeye.de> References: <1425215842-6982-1-git-send-email-dev@lynxeye.de> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "barebox" Errors-To: barebox-bounces+u.kleine-koenig=pengutronix.de@lists.infradead.org Subject: [PATCH 18/24] net: rtl8169: convert to streaming DMA ops To: barebox@lists.infradead.org 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 --- drivers/net/Kconfig | 1 + drivers/net/rtl8169.c | 30 +++++++++++++----------------- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig index adb7008..42ffa65 100644 --- a/drivers/net/Kconfig +++ b/drivers/net/Kconfig @@ -167,6 +167,7 @@ config DRIVER_NET_RTL8139 config DRIVER_NET_RTL8169 bool "RealTek RTL-8169 PCI Ethernet driver" depends on PCI + depends on HAS_DMA select PHYLIB help This is a driver for the Fast Ethernet PCI network cards based on diff --git a/drivers/net/rtl8169.c b/drivers/net/rtl8169.c index 638e049..f44dc5a 100644 --- a/drivers/net/rtl8169.c +++ b/drivers/net/rtl8169.c @@ -14,7 +14,6 @@ * along with this program. If not, see . */ -#include #include #include #include @@ -234,8 +233,8 @@ static void rtl8169_init_ring(struct rtl8169_priv *priv) priv->rx_desc = dma_alloc_coherent(NUM_RX_DESC * sizeof(struct bufdesc)); priv->rx_buf = malloc(NUM_RX_DESC * PKT_BUF_SIZE); - dma_clean_range((unsigned long)priv->rx_buf, - (unsigned long)priv->rx_buf + NUM_RX_DESC * PKT_BUF_SIZE); + dma_sync_single_for_device((unsigned long)priv->rx_buf, + NUM_RX_DESC * PKT_BUF_SIZE, DMA_FROM_DEVICE); memset((void *)priv->tx_desc, 0, NUM_TX_DESC * sizeof(struct bufdesc)); memset((void *)priv->rx_desc, 0, NUM_RX_DESC * sizeof(struct bufdesc)); @@ -366,8 +365,8 @@ static int rtl8169_eth_send(struct eth_device *edev, void *packet, if (packet_length < ETH_ZLEN) memset(priv->tx_buf + entry * PKT_BUF_SIZE, 0, ETH_ZLEN); memcpy(priv->tx_buf + entry * PKT_BUF_SIZE, packet, packet_length); - dma_flush_range((unsigned long)priv->tx_buf + entry * PKT_BUF_SIZE, - (unsigned long)priv->tx_buf + (entry + 1) * PKT_BUF_SIZE); + dma_sync_single_for_device((unsigned long)priv->tx_buf + entry * + PKT_BUF_SIZE, PKT_BUF_SIZE, DMA_TO_DEVICE); priv->tx_desc[entry].buf_Haddr = 0; priv->tx_desc[entry].buf_addr = @@ -388,6 +387,9 @@ static int rtl8169_eth_send(struct eth_device *edev, void *packet, while (priv->tx_desc[entry].status & BD_STAT_OWN) ; + dma_sync_single_for_cpu((unsigned long)priv->tx_buf + entry * + PKT_BUF_SIZE, PKT_BUF_SIZE, DMA_TO_DEVICE); + priv->cur_tx++; return 0; @@ -405,22 +407,16 @@ static int rtl8169_eth_rx(struct eth_device *edev) if (!(priv->rx_desc[entry].status & BD_STAT_RX_RES)) { pkt_size = (priv->rx_desc[entry].status & 0x1fff) - 4; - dma_inv_range((unsigned long)priv->rx_buf - + entry * PKT_BUF_SIZE, - (unsigned long)priv->rx_buf - + entry * PKT_BUF_SIZE + pkt_size); + dma_sync_single_for_cpu((unsigned long)priv->rx_buf + + entry * PKT_BUF_SIZE, + pkt_size, DMA_FROM_DEVICE); net_receive(edev, priv->rx_buf + entry * PKT_BUF_SIZE, pkt_size); - /* - * the buffer is going to be reused by HW, make sure to - * clean out any potentially modified data - */ - dma_clean_range((unsigned long)priv->rx_buf - + entry * PKT_BUF_SIZE, - (unsigned long)priv->rx_buf - + entry * PKT_BUF_SIZE + pkt_size); + dma_sync_single_for_device((unsigned long)priv->rx_buf + + entry * PKT_BUF_SIZE, + pkt_size, DMA_FROM_DEVICE); if (entry == NUM_RX_DESC - 1) priv->rx_desc[entry].status = BD_STAT_OWN | -- 2.1.0 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox