Revert "ARM64: zynqmp: Added broken-tuning property to SD, eMMC nodes"
[oweals/u-boot.git] / drivers / net / mpc512x_fec.c
index 3aba748aa1b94f4cb004352df09b7d5274503905..b3746fbb9a95ecba0d8773e1b0c43f31a1417148 100644 (file)
@@ -18,15 +18,14 @@ DECLARE_GLOBAL_DATA_PTR;
 
 #define DEBUG 0
 
-#if defined(CONFIG_CMD_NET) && defined(CONFIG_NET_MULTI) && \
-       defined(CONFIG_MPC512x_FEC)
-
 #if !(defined(CONFIG_MII) || defined(CONFIG_CMD_MII))
 #error "CONFIG_MII has to be defined!"
 #endif
 
-int fec512x_miiphy_read(char *devname, u8 phyAddr, u8 regAddr, u16 * retVal);
-int fec512x_miiphy_write(char *devname, u8 phyAddr, u8 regAddr, u16 data);
+int fec512x_miiphy_read(struct mii_dev *bus, int phyAddr, int devad,
+                       int regAddr);
+int fec512x_miiphy_write(struct mii_dev *bus, int phyAddr, int devad,
+                        int regAddr, u16 data);
 int mpc512x_fec_init_phy(struct eth_device *dev, bd_t * bis);
 
 static uchar rx_buff[FEC_BUFFER_SIZE];
@@ -160,7 +159,7 @@ static void mpc512x_fec_tbd_scrub (mpc512x_fec_priv *fec)
 }
 
 /********************************************************************/
-static void mpc512x_fec_set_hwaddr (mpc512x_fec_priv *fec, char *mac)
+static void mpc512x_fec_set_hwaddr (mpc512x_fec_priv *fec, unsigned char *mac)
 {
        u8 currByte;                    /* byte for which to compute the CRC */
        int byte;                       /* loop - counter */
@@ -226,6 +225,12 @@ static int mpc512x_fec_init (struct eth_device *dev, bd_t * bis)
        printf ("mpc512x_fec_init... Begin\n");
 #endif
 
+       mpc512x_fec_set_hwaddr (fec, dev->enetaddr);
+       out_be32(&fec->eth->gaddr1, 0x00000000);
+       out_be32(&fec->eth->gaddr2, 0x00000000);
+
+       mpc512x_fec_init_phy (dev, bis);
+
        /* Set interrupt mask register */
        out_be32(&fec->eth->imask, 0x00000000);
 
@@ -301,7 +306,7 @@ int mpc512x_fec_init_phy (struct eth_device *dev, bd_t * bis)
                 * and do not drop the Preamble.
                 */
                out_be32(&fec->eth->mii_speed,
-                        (((gd->ips_clk / 1000000) / 5) + 1) << 1);
+                        (((gd->arch.ips_clk / 1000000) / 5) + 1) << 1);
 
                /*
                 * Reset PHY, then delay 300ns
@@ -449,8 +454,8 @@ static void mpc512x_fec_halt (struct eth_device *dev)
 
 /********************************************************************/
 
-static int mpc512x_fec_send (struct eth_device *dev, volatile void *eth_data,
-               int data_length)
+static int mpc512x_fec_send(struct eth_device *dev, void *eth_data,
+                           int data_length)
 {
        /*
         * This routine transmits one frame.  This routine only accepts
@@ -588,7 +593,8 @@ static int mpc512x_fec_recv (struct eth_device *dev)
                        rx_buff_idx = frame_length;
 
                        if (pRbd->status & FEC_RBD_LAST) {
-                               NetReceive ((uchar*)rx_buff, frame_length);
+                               net_process_received_packet((uchar *)rx_buff,
+                                                           frame_length);
                                rx_buff_idx = 0;
                        }
                }
@@ -611,8 +617,6 @@ int mpc512x_fec_initialize (bd_t * bis)
        volatile immap_t *im = (immap_t *) CONFIG_SYS_IMMR;
        mpc512x_fec_priv *fec;
        struct eth_device *dev;
-       int i;
-       char *tmp, *end, env_enetaddr[6];
        void * bd;
 
        fec = (mpc512x_fec_priv *) malloc (sizeof(*fec));
@@ -633,12 +637,21 @@ int mpc512x_fec_initialize (bd_t * bis)
        dev->send = mpc512x_fec_send;
        dev->recv = mpc512x_fec_recv;
 
-       sprintf (dev->name, "FEC ETHERNET");
+       strcpy(dev->name, "FEC");
        eth_register (dev);
 
 #if defined(CONFIG_MII) || defined(CONFIG_CMD_MII)
-       miiphy_register (dev->name,
-                       fec512x_miiphy_read, fec512x_miiphy_write);
+       int retval;
+       struct mii_dev *mdiodev = mdio_alloc();
+       if (!mdiodev)
+               return -ENOMEM;
+       strncpy(mdiodev->name, dev->name, MDIO_NAME_LEN);
+       mdiodev->read = fec512x_miiphy_read;
+       mdiodev->write = fec512x_miiphy_write;
+
+       retval = mdio_register(mdiodev);
+       if (retval < 0)
+               return retval;
 #endif
 
        /* Clean up space FEC's MIB and FIFO RAM ...*/
@@ -663,32 +676,15 @@ int mpc512x_fec_initialize (bd_t * bis)
         */
        out_be32(&fec->eth->ievent, 0xffffffff);
 
-       /*
-        * Try to set the mac address now. The fec mac address is
-        * a garbage after reset. When not using fec for booting
-        * the Linux fec driver will try to work with this garbage.
-        */
-       tmp = getenv ("ethaddr");
-       if (tmp) {
-               for (i=0; i<6; i++) {
-                       env_enetaddr[i] = tmp ? simple_strtoul (tmp, &end, 16) : 0;
-                       if (tmp)
-                               tmp = (*end) ? end+1 : end;
-               }
-               mpc512x_fec_set_hwaddr (fec, env_enetaddr);
-               out_be32(&fec->eth->gaddr1, 0x00000000);
-               out_be32(&fec->eth->gaddr2, 0x00000000);
-       }
-
-       mpc512x_fec_init_phy (dev, bis);
-
        return 1;
 }
 
 /* MII-interface related functions */
 /********************************************************************/
-int fec512x_miiphy_read (char *devname, u8 phyAddr, u8 regAddr, u16 * retVal)
+int fec512x_miiphy_read(struct mii_dev *bus, int phyAddr, int devad,
+                       int regAddr)
 {
+       u16 retVal = 0;
        volatile immap_t *im = (immap_t *) CONFIG_SYS_IMMR;
        volatile fec512x_t *eth = &im->fec;
        u32 reg;                /* convenient holder for the PHY register */
@@ -728,13 +724,14 @@ int fec512x_miiphy_read (char *devname, u8 phyAddr, u8 regAddr, u16 * retVal)
        /*
         * it's now safe to read the PHY's register
         */
-       *retVal = (u16) in_be32(&eth->mii_data);
+       retVal = (u16) in_be32(&eth->mii_data);
 
-       return 0;
+       return retVal;
 }
 
 /********************************************************************/
-int fec512x_miiphy_write (char *devname, u8 phyAddr, u8 regAddr, u16 data)
+int fec512x_miiphy_write(struct mii_dev *bus, int phyAddr, int devad,
+                        int regAddr, u16 data)
 {
        volatile immap_t *im = (immap_t *) CONFIG_SYS_IMMR;
        volatile fec512x_t *eth = &im->fec;
@@ -770,5 +767,3 @@ int fec512x_miiphy_write (char *devname, u8 phyAddr, u8 regAddr, u16 data)
 
        return 0;
 }
-
-#endif /* CONFIG_MPC512x_FEC */