struct hnae_handle *h = priv->ae_handle;
        int state = 1;
 
-       if (priv->phy) {
+       if (ndev->phydev) {
                h->dev->ops->adjust_link(h, ndev->phydev->speed,
                                         ndev->phydev->duplex);
-               state = priv->phy->link;
+               state = ndev->phydev->link;
        }
        state = state && h->dev->ops->get_status(h);
 
  */
 int hns_nic_init_phy(struct net_device *ndev, struct hnae_handle *h)
 {
-       struct hns_nic_priv *priv = netdev_priv(ndev);
        struct phy_device *phy_dev = h->phy_dev;
        int ret;
 
        if (h->phy_if == PHY_INTERFACE_MODE_XGMII)
                phy_dev->autoneg = false;
 
-       priv->phy = phy_dev;
-
        return 0;
 }
 
        if (ret)
                goto out_start_err;
 
-       if (priv->phy)
-               phy_start(priv->phy);
+       if (ndev->phydev)
+               phy_start(ndev->phydev);
 
        clear_bit(NIC_STATE_DOWN, &priv->state);
        (void)mod_timer(&priv->service_timer, jiffies + SERVICE_TIMER_HZ);
        netif_tx_disable(ndev);
        priv->link = 0;
 
-       if (priv->phy)
-               phy_stop(priv->phy);
+       if (ndev->phydev)
+               phy_stop(ndev->phydev);
 
        ops = priv->ae_handle->dev->ops;
 
 static int hns_nic_do_ioctl(struct net_device *netdev, struct ifreq *ifr,
                            int cmd)
 {
-       struct hns_nic_priv *priv = netdev_priv(netdev);
-       struct phy_device *phy_dev = priv->phy;
+       struct phy_device *phy_dev = netdev->phydev;
 
        if (!netif_running(netdev))
                return -EINVAL;
                hns_nic_uninit_ring_data(priv);
        priv->ring_data = NULL;
 
-       if (priv->phy)
-               phy_disconnect(priv->phy);
-       priv->phy = NULL;
+       if (ndev->phydev)
+               phy_disconnect(ndev->phydev);
 
        if (!IS_ERR_OR_NULL(priv->ae_handle))
                hnae_put_handle(priv->ae_handle);
 
 
        h = priv->ae_handle;
 
-       if (priv->phy) {
-               if (!genphy_read_status(priv->phy))
-                       link_stat = priv->phy->link;
+       if (net_dev->phydev) {
+               if (!genphy_read_status(net_dev->phydev))
+                       link_stat = net_dev->phydev->link;
                else
                        link_stat = 0;
        }
                              struct ethtool_cmd *cmd)
 {
        int mdix_ctrl, mdix, retval, is_resolved;
-       struct hns_nic_priv *priv = netdev_priv(net_dev);
-       struct phy_device *phy_dev = priv->phy;
+       struct phy_device *phy_dev = net_dev->phydev;
 
        if (!phy_dev || !phy_dev->mdio.bus) {
                cmd->eth_tp_mdix_ctrl = ETH_TP_MDI_INVALID;
        ethtool_cmd_speed_set(cmd, speed);
        cmd->duplex = duplex;
 
-       if (priv->phy)
-               (void)phy_ethtool_gset(priv->phy, cmd);
+       if (net_dev->phydev)
+               (void)phy_ethtool_gset(net_dev->phydev, cmd);
 
        link_stat = hns_nic_get_link(net_dev);
        if (!link_stat) {
                    cmd->duplex != DUPLEX_FULL)
                        return -EINVAL;
        } else if (h->phy_if == PHY_INTERFACE_MODE_SGMII) {
-               if (!priv->phy && cmd->autoneg == AUTONEG_ENABLE)
+               if (!net_dev->phydev && cmd->autoneg == AUTONEG_ENABLE)
                        return -EINVAL;
 
                if (speed == SPEED_1000 && cmd->duplex == DUPLEX_HALF)
                        return -EINVAL;
-               if (priv->phy)
-                       return phy_ethtool_sset(priv->phy, cmd);
+               if (net_dev->phydev)
+                       return phy_ethtool_sset(net_dev->phydev, cmd);
 
                if ((speed != SPEED_10 && speed != SPEED_100 &&
                     speed != SPEED_1000) || (cmd->duplex != DUPLEX_HALF &&
 {
        int ret = 0;
        struct hns_nic_priv *priv = netdev_priv(ndev);
-       struct phy_device *phy_dev = priv->phy;
+       struct phy_device *phy_dev = ndev->phydev;
        struct hnae_handle *h = priv->ae_handle;
 
        switch (loop) {
                memcpy(buff, hns_nic_test_strs[MAC_INTERNALLOOP_SERDES],
                       ETH_GSTRING_LEN);
                buff += ETH_GSTRING_LEN;
-               if ((priv->phy) && (!priv->phy->is_c45))
+               if ((netdev->phydev) && (!netdev->phydev->is_c45))
                        memcpy(buff, hns_nic_test_strs[MAC_INTERNALLOOP_PHY],
                               ETH_GSTRING_LEN);
 
                if (priv->ae_handle->phy_if == PHY_INTERFACE_MODE_XGMII)
                        cnt--;
 
-               if ((!priv->phy) || (priv->phy->is_c45))
+               if ((!netdev->phydev) || (netdev->phydev->is_c45))
                        cnt--;
 
                return cnt;
 int hns_phy_led_set(struct net_device *netdev, int value)
 {
        int retval;
-       struct hns_nic_priv *priv = netdev_priv(netdev);
-       struct phy_device *phy_dev = priv->phy;
+       struct phy_device *phy_dev = netdev->phydev;
 
        retval = phy_write(phy_dev, HNS_PHY_PAGE_REG, HNS_PHY_PAGE_LED);
        retval |= phy_write(phy_dev, HNS_LED_FC_REG, value);
 {
        struct hns_nic_priv *priv = netdev_priv(netdev);
        struct hnae_handle *h = priv->ae_handle;
-       struct phy_device *phy_dev = priv->phy;
+       struct phy_device *phy_dev = netdev->phydev;
        int ret;
 
        if (phy_dev)
 static int hns_nic_nway_reset(struct net_device *netdev)
 {
        int ret = 0;
-       struct hns_nic_priv *priv = netdev_priv(netdev);
-       struct phy_device *phy = priv->phy;
+       struct phy_device *phy = netdev->phydev;
 
        if (netif_running(netdev)) {
                if (phy)