struct work_struct txtimeout_reinit;
 
        phy_interface_t phy_interface;
-       struct phy_device *phy_dev;
        struct mii_bus *mii_bus;
 
        unsigned int link;
 static int dwceqos_ioctl(struct net_device *ndev, struct ifreq *rq, int cmd)
 {
        struct net_local *lp = netdev_priv(ndev);
-       struct phy_device *phydev = lp->phy_dev;
+       struct phy_device *phydev = ndev->phydev;
 
        if (!netif_running(ndev))
                return -EINVAL;
 
 static void dwceqos_link_up(struct net_local *lp)
 {
+       struct net_device *ndev = lp->ndev;
        u32 regval;
        unsigned long flags;
 
        dwceqos_write(lp, REG_DWCEQOS_MAC_LPI_CTRL_STATUS, regval);
        spin_unlock_irqrestore(&lp->hw_lock, flags);
 
-       lp->eee_active = !phy_init_eee(lp->phy_dev, 0);
+       lp->eee_active = !phy_init_eee(ndev->phydev, 0);
 
        /* Check for changed EEE capability */
        if (!lp->eee_active && lp->eee_enabled) {
 
 static void dwceqos_set_speed(struct net_local *lp)
 {
-       struct phy_device *phydev = lp->phy_dev;
+       struct net_device *ndev = lp->ndev;
+       struct phy_device *phydev = ndev->phydev;
        u32 regval;
 
        regval = dwceqos_read(lp, REG_DWCEQOS_MAC_CFG);
 static void dwceqos_adjust_link(struct net_device *ndev)
 {
        struct net_local *lp = netdev_priv(ndev);
-       struct phy_device *phydev = lp->phy_dev;
+       struct phy_device *phydev = ndev->phydev;
        int status_change = 0;
 
        if (lp->phy_defer)
        lp->link    = 0;
        lp->speed   = 0;
        lp->duplex  = DUPLEX_UNKNOWN;
-       lp->phy_dev = phydev;
 
        return 0;
 }
 
 static void dwceqos_init_hw(struct net_local *lp)
 {
+       struct net_device *ndev = lp->ndev;
        u32 regval;
        u32 buswidth;
        u32 dma_skip;
                      regval | DWCEQOS_MAC_CFG_TE | DWCEQOS_MAC_CFG_RE);
 
        lp->phy_defer = false;
-       mutex_lock(&lp->phy_dev->lock);
-       phy_read_status(lp->phy_dev);
+       mutex_lock(&ndev->phydev->lock);
+       phy_read_status(ndev->phydev);
        dwceqos_adjust_link(lp->ndev);
-       mutex_unlock(&lp->phy_dev->lock);
+       mutex_unlock(&ndev->phydev->lock);
 }
 
 static void dwceqos_tx_reclaim(unsigned long data)
         * hence the unusual init order with phy_start first.
         */
        lp->phy_defer = true;
-       phy_start(lp->phy_dev);
+       phy_start(ndev->phydev);
        dwceqos_init_hw(lp);
        napi_enable(&lp->napi);
 
 
        dwceqos_drain_dma(lp);
        dwceqos_reset_hw(lp);
-       phy_stop(lp->phy_dev);
+       phy_stop(ndev->phydev);
 
        dwceqos_descriptor_free(lp);
 
 static int
 dwceqos_get_settings(struct net_device *ndev, struct ethtool_cmd *ecmd)
 {
-       struct net_local *lp = netdev_priv(ndev);
-       struct phy_device *phydev = lp->phy_dev;
+       struct phy_device *phydev = ndev->phydev;
 
        if (!phydev)
                return -ENODEV;
 static int
 dwceqos_set_settings(struct net_device *ndev, struct ethtool_cmd *ecmd)
 {
-       struct net_local *lp = netdev_priv(ndev);
-       struct phy_device *phydev = lp->phy_dev;
+       struct phy_device *phydev = ndev->phydev;
 
        if (!phydev)
                return -ENODEV;
 
        lp->flowcontrol.autoneg = pp->autoneg;
        if (pp->autoneg) {
-               lp->phy_dev->advertising |= ADVERTISED_Pause;
-               lp->phy_dev->advertising |= ADVERTISED_Asym_Pause;
+               ndev->phydev->advertising |= ADVERTISED_Pause;
+               ndev->phydev->advertising |= ADVERTISED_Asym_Pause;
        } else {
-               lp->phy_dev->advertising &= ~ADVERTISED_Pause;
-               lp->phy_dev->advertising &= ~ADVERTISED_Asym_Pause;
+               ndev->phydev->advertising &= ~ADVERTISED_Pause;
+               ndev->phydev->advertising &= ~ADVERTISED_Asym_Pause;
                lp->flowcontrol.rx = pp->rx_pause;
                lp->flowcontrol.tx = pp->tx_pause;
        }
 
        if (netif_running(ndev))
-               ret = phy_start_aneg(lp->phy_dev);
+               ret = phy_start_aneg(ndev->phydev);
 
        return ret;
 }
                            dwceqos_get_tx_lpi_state(regval));
        }
 
-       return phy_ethtool_get_eee(lp->phy_dev, edata);
+       return phy_ethtool_get_eee(ndev->phydev, edata);
 }
 
 static int dwceqos_set_eee(struct net_device *ndev, struct ethtool_eee *edata)
                spin_unlock_irqrestore(&lp->hw_lock, flags);
        }
 
-       return phy_ethtool_set_eee(lp->phy_dev, edata);
+       return phy_ethtool_set_eee(ndev->phydev, edata);
 }
 
 static u32 dwceqos_get_msglevel(struct net_device *ndev)
        if (ndev) {
                lp = netdev_priv(ndev);
 
-               if (lp->phy_dev)
-                       phy_disconnect(lp->phy_dev);
+               if (ndev->phydev)
+                       phy_disconnect(ndev->phydev);
                mdiobus_unregister(lp->mii_bus);
                mdiobus_free(lp->mii_bus);