@@ -726,6 +726,27 @@ static int rtl822xb_config_init(struct phy_device *phydev)
726
726
return phy_write_mmd (phydev , MDIO_MMD_VEND1 , 0x6f11 , 0x8020 );
727
727
}
728
728
729
+ static int rtl822xb_get_rate_matching (struct phy_device * phydev ,
730
+ phy_interface_t iface )
731
+ {
732
+ int val ;
733
+
734
+ /* Only rate matching at 2500base-x */
735
+ if (iface != PHY_INTERFACE_MODE_2500BASEX )
736
+ return RATE_MATCH_NONE ;
737
+
738
+ val = phy_read_mmd (phydev , MDIO_MMD_VEND1 , RTL822X_VND1_SERDES_OPTION );
739
+ if (val < 0 )
740
+ return val ;
741
+
742
+ if ((val & RTL822X_VND1_SERDES_OPTION_MODE_MASK ) ==
743
+ RTL822X_VND1_SERDES_OPTION_MODE_2500BASEX )
744
+ return RATE_MATCH_PAUSE ;
745
+
746
+ /* RTL822X_VND1_SERDES_OPTION_MODE_2500BASEX_SGMII */
747
+ return RATE_MATCH_NONE ;
748
+ }
749
+
729
750
static int rtl822x_get_features (struct phy_device * phydev )
730
751
{
731
752
int val ;
@@ -1091,6 +1112,7 @@ static struct phy_driver realtek_drvs[] = {
1091
1112
.get_features = rtl822x_get_features ,
1092
1113
.config_aneg = rtl822x_config_aneg ,
1093
1114
.config_init = rtl822xb_config_init ,
1115
+ .get_rate_matching = rtl822xb_get_rate_matching ,
1094
1116
.read_status = rtl822xb_read_status ,
1095
1117
.suspend = genphy_suspend ,
1096
1118
.resume = rtlgen_resume ,
@@ -1114,6 +1136,7 @@ static struct phy_driver realtek_drvs[] = {
1114
1136
.get_features = rtl822x_get_features ,
1115
1137
.config_aneg = rtl822x_config_aneg ,
1116
1138
.config_init = rtl822xb_config_init ,
1139
+ .get_rate_matching = rtl822xb_get_rate_matching ,
1117
1140
.read_status = rtl822xb_read_status ,
1118
1141
.suspend = genphy_suspend ,
1119
1142
.resume = rtlgen_resume ,
@@ -1125,6 +1148,7 @@ static struct phy_driver realtek_drvs[] = {
1125
1148
.get_features = rtl822x_get_features ,
1126
1149
.config_aneg = rtl822x_config_aneg ,
1127
1150
.config_init = rtl822xb_config_init ,
1151
+ .get_rate_matching = rtl822xb_get_rate_matching ,
1128
1152
.read_status = rtl822xb_read_status ,
1129
1153
.suspend = genphy_suspend ,
1130
1154
.resume = rtlgen_resume ,
@@ -1136,6 +1160,7 @@ static struct phy_driver realtek_drvs[] = {
1136
1160
.get_features = rtl822x_get_features ,
1137
1161
.config_aneg = rtl822x_config_aneg ,
1138
1162
.config_init = rtl822xb_config_init ,
1163
+ .get_rate_matching = rtl822xb_get_rate_matching ,
1139
1164
.read_status = rtl822xb_read_status ,
1140
1165
.suspend = genphy_suspend ,
1141
1166
.resume = rtlgen_resume ,
0 commit comments