}
 #endif /* CONFIG_OF_MDIO */
 
-static int bcm87xx_config_init(struct phy_device *phydev)
+static int bcm87xx_get_features(struct phy_device *phydev)
 {
-       linkmode_zero(phydev->supported);
        linkmode_set_bit(ETHTOOL_LINK_MODE_10000baseR_FEC_BIT,
                         phydev->supported);
-       linkmode_zero(phydev->advertising);
-       linkmode_set_bit(ETHTOOL_LINK_MODE_10000baseR_FEC_BIT,
-                        phydev->advertising);
-       phydev->state = PHY_NOLINK;
-       phydev->autoneg = AUTONEG_DISABLE;
-
-       bcm87xx_of_reg_init(phydev);
-
        return 0;
 }
 
+static int bcm87xx_config_init(struct phy_device *phydev)
+{
+       return bcm87xx_of_reg_init(phydev);
+}
+
 static int bcm87xx_config_aneg(struct phy_device *phydev)
 {
        return -EINVAL;
        .phy_id         = PHY_ID_BCM8706,
        .phy_id_mask    = 0xffffffff,
        .name           = "Broadcom BCM8706",
-       .features       = PHY_10GBIT_FEC_FEATURES,
+       .get_features   = bcm87xx_get_features,
        .config_init    = bcm87xx_config_init,
        .config_aneg    = bcm87xx_config_aneg,
        .read_status    = bcm87xx_read_status,
        .phy_id         = PHY_ID_BCM8727,
        .phy_id_mask    = 0xffffffff,
        .name           = "Broadcom BCM8727",
-       .features       = PHY_10GBIT_FEC_FEATURES,
+       .get_features   = bcm87xx_get_features,
        .config_init    = bcm87xx_config_init,
        .config_aneg    = bcm87xx_config_aneg,
        .read_status    = bcm87xx_read_status,