@@ -1882,6 +1882,9 @@ static void xgbe_phy_an_advertising(struct xgbe_prv_data *pdata,
18821882 if (phy_data -> phydev &&
18831883 (phy_data -> phydev -> speed == SPEED_10000 ))
18841884 XGBE_SET_ADV (dlks , 10000b aseKR_Full );
1885+ else if (phy_data -> phydev &&
1886+ (phy_data -> phydev -> speed == SPEED_2500 ))
1887+ XGBE_SET_ADV (dlks , 2500b aseX_Full );
18851888 else
18861889 XGBE_SET_ADV (dlks , 1000b aseKX_Full );
18871890 break ;
@@ -2282,9 +2285,11 @@ static enum xgbe_mode xgbe_phy_switch_baset_mode(struct xgbe_prv_data *pdata)
22822285 case XGBE_MODE_SGMII_100 :
22832286 case XGBE_MODE_SGMII_1000 :
22842287 return XGBE_MODE_KR ;
2288+ case XGBE_MODE_KX_2500 :
2289+ return XGBE_MODE_SGMII_1000 ;
22852290 case XGBE_MODE_KR :
22862291 default :
2287- return XGBE_MODE_SGMII_1000 ;
2292+ return XGBE_MODE_KX_2500 ;
22882293 }
22892294}
22902295
@@ -2644,7 +2649,8 @@ static bool xgbe_phy_valid_speed_baset_mode(struct xgbe_prv_data *pdata,
26442649 case SPEED_1000 :
26452650 return true;
26462651 case SPEED_2500 :
2647- return (phy_data -> port_mode == XGBE_PORT_MODE_NBASE_T );
2652+ return ((phy_data -> port_mode == XGBE_PORT_MODE_10GBASE_T ) ||
2653+ (phy_data -> port_mode == XGBE_PORT_MODE_NBASE_T ));
26482654 case SPEED_10000 :
26492655 return (phy_data -> port_mode == XGBE_PORT_MODE_10GBASE_T );
26502656 default :
@@ -3024,6 +3030,7 @@ static bool xgbe_phy_port_mode_mismatch(struct xgbe_prv_data *pdata)
30243030 if ((phy_data -> port_speeds & XGBE_PHY_PORT_SPEED_10 ) ||
30253031 (phy_data -> port_speeds & XGBE_PHY_PORT_SPEED_100 ) ||
30263032 (phy_data -> port_speeds & XGBE_PHY_PORT_SPEED_1000 ) ||
3033+ (phy_data -> port_speeds & XGBE_PHY_PORT_SPEED_2500 ) ||
30273034 (phy_data -> port_speeds & XGBE_PHY_PORT_SPEED_10000 ))
30283035 return false;
30293036 break ;
@@ -3474,6 +3481,10 @@ static int xgbe_phy_init(struct xgbe_prv_data *pdata)
34743481 XGBE_SET_SUP (lks , 1000b aseT_Full );
34753482 phy_data -> start_mode = XGBE_MODE_SGMII_1000 ;
34763483 }
3484+ if (phy_data -> port_speeds & XGBE_PHY_PORT_SPEED_2500 ) {
3485+ XGBE_SET_SUP (lks , 2500b aseT_Full );
3486+ phy_data -> start_mode = XGBE_MODE_KX_2500 ;
3487+ }
34773488 if (phy_data -> port_speeds & XGBE_PHY_PORT_SPEED_10000 ) {
34783489 XGBE_SET_SUP (lks , 10000b aseT_Full );
34793490 phy_data -> start_mode = XGBE_MODE_KR ;
0 commit comments