Merge tag 'uniphier-v2019.07' of git://git.denx.de/u-boot-uniphier
[oweals/u-boot.git] / drivers / net / ftmac100.c
index 4e45f00b3d28d287e24b396ab57f26c792ab8d98..c08889c4b1114a02321ffcb6ea5c05d8089ac4f0 100644 (file)
@@ -1,10 +1,9 @@
+// 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>
@@ -40,7 +39,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);
 }
 
 /*
@@ -100,18 +104,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 */
 
@@ -188,14 +192,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 */
 
-       flush_dcache_range((u32)packet,(u32)packet+length);
-       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 |
@@ -339,7 +343,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;
 }