if (phy_data->phydev &&
                    (phy_data->phydev->speed == SPEED_10000))
                        XGBE_SET_ADV(dlks, 10000baseKR_Full);
+               else if (phy_data->phydev &&
+                        (phy_data->phydev->speed == SPEED_2500))
+                       XGBE_SET_ADV(dlks, 2500baseX_Full);
                else
                        XGBE_SET_ADV(dlks, 1000baseKX_Full);
                break;
        case XGBE_MODE_SGMII_100:
        case XGBE_MODE_SGMII_1000:
                return XGBE_MODE_KR;
+       case XGBE_MODE_KX_2500:
+               return XGBE_MODE_SGMII_1000;
        case XGBE_MODE_KR:
        default:
-               return XGBE_MODE_SGMII_1000;
+               return XGBE_MODE_KX_2500;
        }
 }
 
        case SPEED_1000:
                return true;
        case SPEED_2500:
-               return (phy_data->port_mode == XGBE_PORT_MODE_NBASE_T);
+               return ((phy_data->port_mode == XGBE_PORT_MODE_10GBASE_T) ||
+                       (phy_data->port_mode == XGBE_PORT_MODE_NBASE_T));
        case SPEED_10000:
                return (phy_data->port_mode == XGBE_PORT_MODE_10GBASE_T);
        default:
                if ((phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10) ||
                    (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_100) ||
                    (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_1000) ||
+                   (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_2500) ||
                    (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000))
                        return false;
                break;
                        XGBE_SET_SUP(lks, 1000baseT_Full);
                        phy_data->start_mode = XGBE_MODE_SGMII_1000;
                }
+               if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_2500) {
+                       XGBE_SET_SUP(lks, 2500baseT_Full);
+                       phy_data->start_mode = XGBE_MODE_KX_2500;
+               }
                if (phy_data->port_speeds & XGBE_PHY_PORT_SPEED_10000) {
                        XGBE_SET_SUP(lks, 10000baseT_Full);
                        phy_data->start_mode = XGBE_MODE_KR;