Merge branch 'master' of git://git.denx.de/u-boot-net
authorTom Rini <trini@konsulko.com>
Thu, 24 Jan 2019 20:30:06 +0000 (15:30 -0500)
committerTom Rini <trini@konsulko.com>
Thu, 24 Jan 2019 20:30:06 +0000 (15:30 -0500)
1  2 
drivers/net/phy/phy.c

diff --combined drivers/net/phy/phy.c
@@@ -620,7 -620,7 +620,7 @@@ static struct phy_driver *get_phy_drive
  }
  
  static struct phy_device *phy_device_create(struct mii_dev *bus, int addr,
-                                           u32 phy_id,
+                                           u32 phy_id, bool is_c45,
                                            phy_interface_t interface)
  {
        struct phy_device *dev;
  
        dev->addr = addr;
        dev->phy_id = phy_id;
+       dev->is_c45 = is_c45;
        dev->bus = bus;
  
        dev->drv = get_phy_driver(dev, interface);
@@@ -702,13 -703,17 +703,17 @@@ static struct phy_device *create_phy_by
                                             phy_interface_t interface)
  {
        u32 phy_id = 0xffffffff;
+       bool is_c45;
  
        while (phy_mask) {
                int addr = ffs(phy_mask) - 1;
                int r = get_phy_id(bus, addr, devad, &phy_id);
                /* If the PHY ID is mostly f's, we didn't find anything */
-               if (r == 0 && (phy_id & 0x1fffffff) != 0x1fffffff)
-                       return phy_device_create(bus, addr, phy_id, interface);
+               if (r == 0 && (phy_id & 0x1fffffff) != 0x1fffffff) {
+                       is_c45 = (devad == MDIO_DEVAD_NONE) ? false : true;
+                       return phy_device_create(bus, addr, phy_id, is_c45,
+                                                interface);
+               }
                phy_mask &= ~(1 << addr);
        }
        return NULL;
@@@ -876,18 -881,18 +881,18 @@@ void phy_connect_dev(struct phy_device 
        debug("%s connected to %s\n", dev->name, phydev->drv->name);
  }
  
 +#ifdef CONFIG_PHY_FIXED
  #ifdef CONFIG_DM_ETH
 -struct phy_device *phy_connect(struct mii_dev *bus, int addr,
 -                             struct udevice *dev,
 -                             phy_interface_t interface)
 +static struct phy_device *phy_connect_fixed(struct mii_dev *bus,
 +                                          struct udevice *dev,
 +                                          phy_interface_t interface)
  #else
 -struct phy_device *phy_connect(struct mii_dev *bus, int addr,
 -                             struct eth_device *dev,
 -                             phy_interface_t interface)
 +static struct phy_device *phy_connect_fixed(struct mii_dev *bus,
 +                                          struct eth_device *dev,
 +                                          phy_interface_t interface)
  #endif
  {
        struct phy_device *phydev = NULL;
 -#ifdef CONFIG_PHY_FIXED
        int sn;
        const char *name;
  
        while (sn > 0) {
                name = fdt_get_name(gd->fdt_blob, sn, NULL);
                if (name && strcmp(name, "fixed-link") == 0) {
-                       phydev = phy_device_create(bus,
-                                                  sn, PHY_FIXED_ID, interface);
+                       phydev = phy_device_create(bus, sn, PHY_FIXED_ID, false,
+                                                  interface);
                        break;
                }
                sn = fdt_next_subnode(gd->fdt_blob, sn);
        }
 +
 +      return phydev;
 +}
  #endif
 +
 +#ifdef CONFIG_DM_ETH
 +struct phy_device *phy_connect(struct mii_dev *bus, int addr,
 +                             struct udevice *dev,
 +                             phy_interface_t interface)
 +#else
 +struct phy_device *phy_connect(struct mii_dev *bus, int addr,
 +                             struct eth_device *dev,
 +                             phy_interface_t interface)
 +#endif
 +{
 +      struct phy_device *phydev = NULL;
 +
 +#ifdef CONFIG_PHY_FIXED
 +      phydev = phy_connect_fixed(bus, dev, interface);
 +#endif
 +
        if (!phydev)
                phydev = phy_find_by_mask(bus, 1 << addr, interface);