net: rtl8139: Move functions around
[oweals/u-boot.git] / drivers / net / ftmac100.c
index f231e6b33bc97b4fe8fd85a1cd4d412e770a5b75..24bb45f351530f424f5452609f638ed00cc2d7de 100644 (file)
@@ -1,14 +1,15 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * Faraday FTMAC100 Ethernet
  *
  * (C) Copyright 2009 Faraday Technology
  * Po-Yu Chuang <ratbert@faraday-tech.com>
- *
- * SPDX-License-Identifier:    GPL-2.0+
  */
 
 #include <config.h>
 #include <common.h>
+#include <cpu_func.h>
+#include <env.h>
 #include <malloc.h>
 #include <net.h>
 #include <linux/io.h>
@@ -40,7 +41,12 @@ static void ftmac100_reset(struct ftmac100_data *priv)
        writel (FTMAC100_MACCR_SW_RST, &ftmac100->maccr);
 
        while (readl (&ftmac100->maccr) & FTMAC100_MACCR_SW_RST)
-               ;
+               mdelay(1);
+       /*
+        * When soft reset complete, write mac address immediately maybe fail somehow
+        *  Wait for a while can avoid this problem
+        */
+       mdelay(1);
 }
 
 /*
@@ -79,7 +85,6 @@ static int _ftmac100_init(struct ftmac100_data *priv, unsigned char enetaddr[6])
        struct ftmac100_rxdes *rxdes = priv->rxdes;
        unsigned int maccr;
        int i;
-
        debug ("%s()\n", __func__);
 
        ftmac100_reset(priv);
@@ -101,18 +106,18 @@ static int _ftmac100_init(struct ftmac100_data *priv, unsigned char enetaddr[6])
 
        for (i = 0; i < PKTBUFSRX; i++) {
                /* RXBUF_BADR */
-               rxdes[i].rxdes2 = (unsigned int)net_rx_packets[i];
+               rxdes[i].rxdes2 = (unsigned int)(unsigned long)net_rx_packets[i];
                rxdes[i].rxdes1 |= FTMAC100_RXDES1_RXBUF_SIZE (PKTSIZE_ALIGN);
                rxdes[i].rxdes0 = FTMAC100_RXDES0_RXDMA_OWN;
        }
 
        /* transmit ring */
 
-       writel ((unsigned int)txdes, &ftmac100->txr_badr);
+       writel ((unsigned long)txdes, &ftmac100->txr_badr);
 
        /* receive ring */
 
-       writel ((unsigned int)rxdes, &ftmac100->rxr_badr);
+       writel ((unsigned long)rxdes, &ftmac100->rxr_badr);
 
        /* poll receive descriptor automatically */
 
@@ -156,7 +161,6 @@ static int __ftmac100_recv(struct ftmac100_data *priv)
        unsigned short rxlen;
 
        curr_des = &priv->rxdes[priv->rx_index];
-
        if (curr_des->rxdes0 & FTMAC100_RXDES0_RXDMA_OWN)
                return 0;
 
@@ -169,7 +173,7 @@ static int __ftmac100_recv(struct ftmac100_data *priv)
        }
 
        rxlen = FTMAC100_RXDES0_RFL (curr_des->rxdes0);
-
+       invalidate_dcache_range(curr_des->rxdes2,curr_des->rxdes2+rxlen);
        debug ("%s(): RX buffer %d, %x received\n",
               __func__, priv->rx_index, rxlen);
 
@@ -190,13 +194,14 @@ static int _ftmac100_send(struct ftmac100_data *priv, void *packet, int length)
                return -1;
        }
 
-       debug ("%s(%x, %x)\n", __func__, (int)packet, length);
+       debug ("%s(%lx, %x)\n", __func__, (unsigned long)packet, length);
 
        length = (length < ETH_ZLEN) ? ETH_ZLEN : length;
 
        /* initiate a transmit sequence */
 
-       curr_des->txdes2 = (unsigned int)packet;        /* TXBUF_BADR */
+       flush_dcache_range((unsigned long)packet,(unsigned long)packet+length);
+       curr_des->txdes2 = (unsigned int)(unsigned long)packet; /* TXBUF_BADR */
 
        curr_des->txdes1 &= FTMAC100_TXDES1_EDOTR;
        curr_des->txdes1 |= FTMAC100_TXDES1_FTS |
@@ -340,7 +345,7 @@ static int ftmac100_recv(struct udevice *dev, int flags, uchar **packetp)
        int len;
        len = __ftmac100_recv(priv);
        if (len)
-               *packetp = (void *)curr_des->rxdes2;
+               *packetp = (uchar *)(unsigned long)curr_des->rxdes2;
 
        return len ? len : -EAGAIN;
 }