powerpc, 8xx: remove support for 8xx
[platform/kernel/u-boot.git] / drivers / net / 4xx_enet.c
index e616aaf..e759339 100644 (file)
@@ -1,25 +1,6 @@
-/*-----------------------------------------------------------------------------+
- *   This source code is dual-licensed.  You may use it under the terms of the
- *   GNU General Public License version 2, or under the license below.
- *
- *      This source code has been made available to you by IBM on an AS-IS
- *      basis.  Anyone receiving this source is licensed under IBM
- *      copyrights to use it in any way he or she deems fit, including
- *      copying it, modifying it, compiling it, and redistributing it either
- *      with or without modifications.  No license under IBM patents or
- *      patent applications is to be implied by the copyright license.
- *
- *      Any user of this software should understand that IBM cannot provide
- *      technical support for this software and will not be responsible for
- *      any consequences resulting from the use of this software.
- *
- *      Any person who transfers this source code or any derivative work
- *      must include the IBM copyright notice, this paragraph, and the
- *      preceding two paragraphs in the transferred software.
- *
- *      COPYRIGHT   I B M   CORPORATION 1995
- *      LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M
- *-----------------------------------------------------------------------------*/
+/*
+ * SPDX-License-Identifier:    GPL-2.0 IBM-pibs
+ */
 /*-----------------------------------------------------------------------------+
  *
  *  File Name: enetemac.c
 #include <asm/io.h>
 #include <asm/cache.h>
 #include <asm/mmu.h>
-#include <commproc.h>
 #include <asm/ppc4xx.h>
 #include <asm/ppc4xx-emac.h>
 #include <asm/ppc4xx-mal.h>
 #include <miiphy.h>
 #include <malloc.h>
+#include <linux/compiler.h>
 
 #if !(defined(CONFIG_MII) || defined(CONFIG_CMD_MII))
 #error "CONFIG_MII has to be defined!"
 #endif
 
-#if defined(CONFIG_NETCONSOLE) && !defined(CONFIG_NET_MULTI)
-#error "CONFIG_NET_MULTI has to be defined for NetConsole"
-#endif
-
 #define EMAC_RESET_TIMEOUT 1000 /* 1000 ms reset timeout */
 #define PHY_AUTONEGOTIATE_TIMEOUT 5000 /* 5000 ms autonegotiate timeout */
 
@@ -305,10 +282,9 @@ static void mal_err (struct eth_device *dev, unsigned long isr,
 static void emac_err (struct eth_device *dev, unsigned long isr);
 
 extern int phy_setup_aneg (char *devname, unsigned char addr);
-extern int emac4xx_miiphy_read (const char *devname, unsigned char addr,
-               unsigned char reg, unsigned short *value);
-extern int emac4xx_miiphy_write (const char *devname, unsigned char addr,
-               unsigned char reg, unsigned short value);
+int emac4xx_miiphy_read(struct mii_dev *bus, int addr, int devad, int reg);
+int emac4xx_miiphy_write(struct mii_dev *bus, int addr, int devad, int reg,
+                        u16 value);
 
 int board_emac_count(void);
 
@@ -876,7 +852,7 @@ static int ppc_4xx_eth_init (struct eth_device *dev, bd_t * bis)
     defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \
     defined(CONFIG_460EX) || defined(CONFIG_460GT) || \
     defined(CONFIG_405EX)
-       int ethgroup = -1;
+       __maybe_unused int ethgroup = -1;
 #endif
 #endif
        u32 bd_cached;
@@ -922,7 +898,7 @@ static int ppc_4xx_eth_init (struct eth_device *dev, bd_t * bis)
         * current transfer) have got the time to arrived before
         * netloop calls eth_halt
         */
-       printf ("About preceeding transfer (eth%d):\n"
+       printf ("About preceding transfer (eth%d):\n"
                "- Sent packet number %d\n"
                "- Received packet number %d\n"
                "- Handled packet number %d\n",
@@ -1353,7 +1329,7 @@ get_speed:
                hw_p->rx_phys = bd_cached + MAL_TX_DESC_SIZE;
                hw_p->tx = (mal_desc_t *)(bd_uncached);
                hw_p->rx = (mal_desc_t *)(bd_uncached + MAL_TX_DESC_SIZE);
-               debug("hw_p->tx=%08x, hw_p->rx=%08x\n", hw_p->tx, hw_p->rx);
+               debug("hw_p->tx=%p, hw_p->rx=%p\n", hw_p->tx, hw_p->rx);
        }
 
        for (i = 0; i < NUM_TX_BUFF; i++) {
@@ -1366,18 +1342,18 @@ get_speed:
                if ((NUM_TX_BUFF - 1) == i)
                        hw_p->tx[i].ctrl |= MAL_TX_CTRL_WRAP;
                hw_p->tx_run[i] = -1;
-               debug("TX_BUFF %d @ 0x%08lx\n", i, (u32)hw_p->tx[i].data_ptr);
+               debug("TX_BUFF %d @ 0x%08x\n", i, (u32)hw_p->tx[i].data_ptr);
        }
 
        for (i = 0; i < NUM_RX_BUFF; i++) {
                hw_p->rx[i].ctrl = 0;
                hw_p->rx[i].data_len = 0;
-               hw_p->rx[i].data_ptr = (char *)NetRxPackets[i];
+               hw_p->rx[i].data_ptr = (char *)net_rx_packets[i];
                if ((NUM_RX_BUFF - 1) == i)
                        hw_p->rx[i].ctrl |= MAL_RX_CTRL_WRAP;
                hw_p->rx[i].ctrl |= MAL_RX_CTRL_EMPTY | MAL_RX_CTRL_INTR;
                hw_p->rx_ready[i] = -1;
-               debug("RX_BUFF %d @ 0x%08lx\n", i, (u32)hw_p->rx[i].data_ptr);
+               debug("RX_BUFF %d @ 0x%08x\n", i, (u32)hw_p->rx[i].data_ptr);
        }
 
        reg = 0x00000000;
@@ -1560,8 +1536,7 @@ get_speed:
 }
 
 
-static int ppc_4xx_eth_send (struct eth_device *dev, volatile void *ptr,
-                             int len)
+static int ppc_4xx_eth_send(struct eth_device *dev, void *ptr, int len)
 {
        struct enet_frame *ef_ptr;
        ulong time_start, time_now;
@@ -1742,8 +1717,6 @@ static void mal_err (struct eth_device *dev, unsigned long isr,
                     unsigned long uic, unsigned long maldef,
                     unsigned long mal_errr)
 {
-       EMAC_4XX_HW_PST hw_p = dev->priv;
-
        mtdcr (MAL0_ESR, isr);  /* clear interrupt */
 
        /* clear DE interrupt */
@@ -1751,10 +1724,11 @@ static void mal_err (struct eth_device *dev, unsigned long isr,
        mtdcr (MAL0_RXDEIR, 0x80000000);
 
 #ifdef INFO_4XX_ENET
-       printf ("\nMAL error occured.... ISR = %lx UIC = = %lx  MAL_DEF = %lx  MAL_ERR= %lx \n", isr, uic, maldef, mal_errr);
+       printf("\nMAL error occurred.... ISR = %lx UIC = = %lx  MAL_DEF = %lx  MAL_ERR= %lx\n",
+              isr, uic, maldef, mal_errr);
 #endif
 
-       eth_init (hw_p->bis);   /* start again... */
+       eth_init();     /* start again... */
 }
 
 /*-----------------------------------------------------------------------------+
@@ -1764,7 +1738,7 @@ static void emac_err (struct eth_device *dev, unsigned long isr)
 {
        EMAC_4XX_HW_PST hw_p = dev->priv;
 
-       printf ("EMAC%d error occured.... ISR = %lx\n", hw_p->devnum, isr);
+       printf ("EMAC%d error occurred.... ISR = %lx\n", hw_p->devnum, isr);
        out_be32((void *)EMAC0_ISR + hw_p->hw_addr, isr);
 }
 
@@ -1773,7 +1747,6 @@ static void emac_err (struct eth_device *dev, unsigned long isr)
  *-----------------------------------------------------------------------------*/
 static void enet_rcv (struct eth_device *dev, unsigned long malisr)
 {
-       struct enet_frame *ef_ptr;
        unsigned long data_len;
        unsigned long rx_eob_isr;
        EMAC_4XX_HW_PST hw_p = dev->priv;
@@ -1832,8 +1805,6 @@ static void enet_rcv (struct eth_device *dev, unsigned long malisr)
                        } else {
                                hw_p->stats.rx_frames++;
                                hw_p->stats.rx += data_len;
-                               ef_ptr = (struct enet_frame *) hw_p->rx[i].
-                                       data_ptr;
 #ifdef INFO_4XX_ENET
                                hw_p->stats.pkts_rx++;
 #endif
@@ -1885,13 +1856,17 @@ static int ppc_4xx_eth_rx (struct eth_device *dev)
 
                length = hw_p->rx[user_index].data_len & 0x0fff;
 
-               /* Pass the packet up to the protocol layers. */
-               /*       NetReceive(NetRxPackets[rxIdx], length - 4); */
-               /*       NetReceive(NetRxPackets[i], length); */
+               /*
+                * Pass the packet up to the protocol layers.
+                * net_process_received_packet(net_rx_packets[rxIdx],
+                *                             length - 4);
+                * net_process_received_packet(net_rx_packets[i], length);
+                */
                invalidate_dcache_range((u32)hw_p->rx[user_index].data_ptr,
                                        (u32)hw_p->rx[user_index].data_ptr +
                                        length - 4);
-               NetReceive (NetRxPackets[user_index], length - 4);
+               net_process_received_packet(net_rx_packets[user_index],
+                                           length - 4);
                /* Free Recv Buffer */
                hw_p->rx[user_index].ctrl |= MAL_RX_CTRL_EMPTY;
                /* Free rx buffer descriptor queue */
@@ -2035,6 +2010,22 @@ int ppc_4xx_eth_initialize (bd_t * bis)
                dev->send = ppc_4xx_eth_send;
                dev->recv = ppc_4xx_eth_rx;
 
+               eth_register(dev);
+
+#if defined(CONFIG_MII) || defined(CONFIG_CMD_MII)
+               int retval;
+               struct mii_dev *mdiodev = mdio_alloc();
+               if (!mdiodev)
+                       return -ENOMEM;
+               strncpy(mdiodev->name, dev->name, MDIO_NAME_LEN);
+               mdiodev->read = emac4xx_miiphy_read;
+               mdiodev->write = emac4xx_miiphy_write;
+
+               retval = mdio_register(mdiodev);
+               if (retval < 0)
+                       return retval;
+#endif
+
                if (0 == virgin) {
                        /* set the MAL IER ??? names may change with new spec ??? */
 #if defined(CONFIG_440SPE) || \
@@ -2072,13 +2063,6 @@ int ppc_4xx_eth_initialize (bd_t * bis)
                                             dev);
                        virgin = 1;
                }
-
-               eth_register (dev);
-
-#if defined(CONFIG_MII) || defined(CONFIG_CMD_MII)
-               miiphy_register (dev->name,
-                                emac4xx_miiphy_read, emac4xx_miiphy_write);
-#endif
        }                       /* end for each supported device */
 
        return 0;