@@ -223,8 +223,8 @@ static int xpcs_poll_reset(struct dw_xpcs *xpcs, int dev)
223
223
int ret , val ;
224
224
225
225
ret = read_poll_timeout (xpcs_read , val ,
226
- val < 0 || !(val & MDIO_CTRL1_RESET ),
227
- 50000 , 600000 , true, xpcs , dev , MDIO_CTRL1 );
226
+ val < 0 || !(val & BMCR_RESET ),
227
+ 50000 , 600000 , true, xpcs , dev , MII_BMCR );
228
228
if (val < 0 )
229
229
ret = val ;
230
230
@@ -250,7 +250,7 @@ static int xpcs_soft_reset(struct dw_xpcs *xpcs,
250
250
return - EINVAL ;
251
251
}
252
252
253
- ret = xpcs_write (xpcs , dev , MDIO_CTRL1 , MDIO_CTRL1_RESET );
253
+ ret = xpcs_write (xpcs , dev , MII_BMCR , BMCR_RESET );
254
254
if (ret < 0 )
255
255
return ret ;
256
256
@@ -311,7 +311,7 @@ static int xpcs_read_fault_c73(struct dw_xpcs *xpcs,
311
311
return 0 ;
312
312
}
313
313
314
- static void xpcs_config_usxgmii (struct dw_xpcs * xpcs , int speed )
314
+ static void xpcs_link_up_usxgmii (struct dw_xpcs * xpcs , int speed )
315
315
{
316
316
int ret , speed_sel ;
317
317
@@ -343,7 +343,7 @@ static void xpcs_config_usxgmii(struct dw_xpcs *xpcs, int speed)
343
343
if (ret < 0 )
344
344
goto out ;
345
345
346
- ret = xpcs_modify (xpcs , MDIO_MMD_VEND2 , MDIO_CTRL1 , DW_USXGMII_SS_MASK ,
346
+ ret = xpcs_modify (xpcs , MDIO_MMD_VEND2 , MII_BMCR , DW_USXGMII_SS_MASK ,
347
347
speed_sel | DW_USXGMII_FULL );
348
348
if (ret < 0 )
349
349
goto out ;
@@ -646,19 +646,21 @@ static int xpcs_config_aneg_c37_sgmii(struct dw_xpcs *xpcs,
646
646
* speed/duplex mode change by HW after SGMII AN complete)
647
647
* 5) VR_MII_MMD_CTRL Bit(12) [AN_ENABLE] = 1b (Enable SGMII AN)
648
648
*
649
+ * Note that VR_MII_MMD_CTRL is MII_BMCR.
650
+ *
649
651
* Note: Since it is MAC side SGMII, there is no need to set
650
652
* SR_MII_AN_ADV. MAC side SGMII receives AN Tx Config from
651
653
* PHY about the link state change after C28 AN is completed
652
654
* between PHY and Link Partner. There is also no need to
653
655
* trigger AN restart for MAC-side SGMII.
654
656
*/
655
- mdio_ctrl = xpcs_read (xpcs , MDIO_MMD_VEND2 , DW_VR_MII_MMD_CTRL );
657
+ mdio_ctrl = xpcs_read (xpcs , MDIO_MMD_VEND2 , MII_BMCR );
656
658
if (mdio_ctrl < 0 )
657
659
return mdio_ctrl ;
658
660
659
- if (mdio_ctrl & AN_CL37_EN ) {
660
- ret = xpcs_write (xpcs , MDIO_MMD_VEND2 , DW_VR_MII_MMD_CTRL ,
661
- mdio_ctrl & ~AN_CL37_EN );
661
+ if (mdio_ctrl & BMCR_ANENABLE ) {
662
+ ret = xpcs_write (xpcs , MDIO_MMD_VEND2 , MII_BMCR ,
663
+ mdio_ctrl & ~BMCR_ANENABLE );
662
664
if (ret < 0 )
663
665
return ret ;
664
666
}
@@ -696,8 +698,8 @@ static int xpcs_config_aneg_c37_sgmii(struct dw_xpcs *xpcs,
696
698
return ret ;
697
699
698
700
if (neg_mode == PHYLINK_PCS_NEG_INBAND_ENABLED )
699
- ret = xpcs_write (xpcs , MDIO_MMD_VEND2 , DW_VR_MII_MMD_CTRL ,
700
- mdio_ctrl | AN_CL37_EN );
701
+ ret = xpcs_write (xpcs , MDIO_MMD_VEND2 , MII_BMCR ,
702
+ mdio_ctrl | BMCR_ANENABLE );
701
703
702
704
return ret ;
703
705
}
@@ -715,14 +717,16 @@ static int xpcs_config_aneg_c37_1000basex(struct dw_xpcs *xpcs,
715
717
* be disabled first:-
716
718
* 1) VR_MII_MMD_CTRL Bit(12)[AN_ENABLE] = 0b
717
719
* 2) VR_MII_AN_CTRL Bit(2:1)[PCS_MODE] = 00b (1000BASE-X C37)
720
+ *
721
+ * Note that VR_MII_MMD_CTRL is MII_BMCR.
718
722
*/
719
- mdio_ctrl = xpcs_read (xpcs , MDIO_MMD_VEND2 , DW_VR_MII_MMD_CTRL );
723
+ mdio_ctrl = xpcs_read (xpcs , MDIO_MMD_VEND2 , MII_BMCR );
720
724
if (mdio_ctrl < 0 )
721
725
return mdio_ctrl ;
722
726
723
- if (mdio_ctrl & AN_CL37_EN ) {
724
- ret = xpcs_write (xpcs , MDIO_MMD_VEND2 , DW_VR_MII_MMD_CTRL ,
725
- mdio_ctrl & ~AN_CL37_EN );
727
+ if (mdio_ctrl & BMCR_ANENABLE ) {
728
+ ret = xpcs_write (xpcs , MDIO_MMD_VEND2 , MII_BMCR ,
729
+ mdio_ctrl & ~BMCR_ANENABLE );
726
730
if (ret < 0 )
727
731
return ret ;
728
732
}
@@ -760,8 +764,8 @@ static int xpcs_config_aneg_c37_1000basex(struct dw_xpcs *xpcs,
760
764
return ret ;
761
765
762
766
if (neg_mode == PHYLINK_PCS_NEG_INBAND_ENABLED ) {
763
- ret = xpcs_write (xpcs , MDIO_MMD_VEND2 , DW_VR_MII_MMD_CTRL ,
764
- mdio_ctrl | AN_CL37_EN );
767
+ ret = xpcs_write (xpcs , MDIO_MMD_VEND2 , MII_BMCR ,
768
+ mdio_ctrl | BMCR_ANENABLE );
765
769
if (ret < 0 )
766
770
return ret ;
767
771
}
@@ -780,9 +784,9 @@ static int xpcs_config_2500basex(struct dw_xpcs *xpcs)
780
784
if (ret < 0 )
781
785
return ret ;
782
786
783
- return xpcs_modify (xpcs , MDIO_MMD_VEND2 , DW_VR_MII_MMD_CTRL ,
784
- AN_CL37_EN | SGMII_SPEED_SS6 | SGMII_SPEED_SS13 ,
785
- SGMII_SPEED_SS6 );
787
+ return xpcs_modify (xpcs , MDIO_MMD_VEND2 , MII_BMCR ,
788
+ BMCR_ANENABLE | BMCR_SPEED1000 | BMCR_SPEED100 ,
789
+ BMCR_SPEED1000 );
786
790
}
787
791
788
792
static int xpcs_do_config (struct dw_xpcs * xpcs , phy_interface_t interface ,
@@ -972,14 +976,14 @@ static int xpcs_get_state_c37_sgmii(struct dw_xpcs *xpcs,
972
976
973
977
state -> link = true;
974
978
975
- speed = xpcs_read (xpcs , MDIO_MMD_VEND2 , MDIO_CTRL1 );
979
+ speed = xpcs_read (xpcs , MDIO_MMD_VEND2 , MII_BMCR );
976
980
if (speed < 0 )
977
981
return speed ;
978
982
979
- speed &= SGMII_SPEED_SS13 | SGMII_SPEED_SS6 ;
980
- if (speed == SGMII_SPEED_SS6 )
983
+ speed &= BMCR_SPEED100 | BMCR_SPEED1000 ;
984
+ if (speed == BMCR_SPEED1000 )
981
985
state -> speed = SPEED_1000 ;
982
- else if (speed == SGMII_SPEED_SS13 )
986
+ else if (speed == BMCR_SPEED100 )
983
987
state -> speed = SPEED_100 ;
984
988
else if (speed == 0 )
985
989
state -> speed = SPEED_10 ;
@@ -988,9 +992,9 @@ static int xpcs_get_state_c37_sgmii(struct dw_xpcs *xpcs,
988
992
if (duplex < 0 )
989
993
return duplex ;
990
994
991
- if (duplex & DW_FULL_DUPLEX )
995
+ if (duplex & ADVERTISE_1000XFULL )
992
996
state -> duplex = DUPLEX_FULL ;
993
- else if (duplex & DW_HALF_DUPLEX )
997
+ else if (duplex & ADVERTISE_1000XHALF )
994
998
state -> duplex = DUPLEX_HALF ;
995
999
996
1000
xpcs_write (xpcs , MDIO_MMD_VEND2 , DW_VR_MII_AN_INTR_STS , 0 );
@@ -1039,13 +1043,13 @@ static int xpcs_get_state_2500basex(struct dw_xpcs *xpcs,
1039
1043
{
1040
1044
int ret ;
1041
1045
1042
- ret = xpcs_read (xpcs , MDIO_MMD_VEND2 , DW_VR_MII_MMD_STS );
1046
+ ret = xpcs_read (xpcs , MDIO_MMD_VEND2 , MII_BMSR );
1043
1047
if (ret < 0 ) {
1044
1048
state -> link = 0 ;
1045
1049
return ret ;
1046
1050
}
1047
1051
1048
- state -> link = !!(ret & DW_VR_MII_MMD_STS_LINK_STS );
1052
+ state -> link = !!(ret & BMSR_LSTATUS );
1049
1053
if (!state -> link )
1050
1054
return 0 ;
1051
1055
@@ -1100,48 +1104,32 @@ static void xpcs_get_state(struct phylink_pcs *pcs,
1100
1104
}
1101
1105
}
1102
1106
1103
- static void xpcs_link_up_sgmii (struct dw_xpcs * xpcs , unsigned int neg_mode ,
1104
- int speed , int duplex )
1107
+ static void xpcs_link_up_sgmii_1000basex (struct dw_xpcs * xpcs ,
1108
+ unsigned int neg_mode ,
1109
+ phy_interface_t interface ,
1110
+ int speed , int duplex )
1105
1111
{
1106
- int val , ret ;
1112
+ int ret ;
1107
1113
1108
1114
if (neg_mode == PHYLINK_PCS_NEG_INBAND_ENABLED )
1109
1115
return ;
1110
1116
1111
- val = mii_bmcr_encode_fixed (speed , duplex );
1112
- ret = xpcs_write (xpcs , MDIO_MMD_VEND2 , MDIO_CTRL1 , val );
1113
- if (ret )
1114
- dev_err (& xpcs -> mdiodev -> dev , "%s: xpcs_write returned %pe\n" ,
1115
- __func__ , ERR_PTR (ret ));
1116
- }
1117
-
1118
- static void xpcs_link_up_1000basex (struct dw_xpcs * xpcs , unsigned int neg_mode ,
1119
- int speed , int duplex )
1120
- {
1121
- int val , ret ;
1122
-
1123
- if (neg_mode == PHYLINK_PCS_NEG_INBAND_ENABLED )
1124
- return ;
1117
+ if (interface == PHY_INTERFACE_MODE_1000BASEX ) {
1118
+ if (speed != SPEED_1000 ) {
1119
+ dev_err (& xpcs -> mdiodev -> dev ,
1120
+ "%s: speed %dMbps not supported\n" ,
1121
+ __func__ , speed );
1122
+ return ;
1123
+ }
1125
1124
1126
- switch (speed ) {
1127
- case SPEED_1000 :
1128
- val = BMCR_SPEED1000 ;
1129
- break ;
1130
- case SPEED_100 :
1131
- case SPEED_10 :
1132
- default :
1133
- dev_err (& xpcs -> mdiodev -> dev , "%s: speed = %d\n" ,
1134
- __func__ , speed );
1135
- return ;
1125
+ if (duplex != DUPLEX_FULL )
1126
+ dev_err (& xpcs -> mdiodev -> dev ,
1127
+ "%s: half duplex not supported\n" ,
1128
+ __func__ );
1136
1129
}
1137
1130
1138
- if (duplex == DUPLEX_FULL )
1139
- val |= BMCR_FULLDPLX ;
1140
- else
1141
- dev_err (& xpcs -> mdiodev -> dev , "%s: half duplex not supported\n" ,
1142
- __func__ );
1143
-
1144
- ret = xpcs_write (xpcs , MDIO_MMD_VEND2 , MDIO_CTRL1 , val );
1131
+ ret = xpcs_write (xpcs , MDIO_MMD_VEND2 , MII_BMCR ,
1132
+ mii_bmcr_encode_fixed (speed , duplex ));
1145
1133
if (ret )
1146
1134
dev_err (& xpcs -> mdiodev -> dev , "%s: xpcs_write returned %pe\n" ,
1147
1135
__func__ , ERR_PTR (ret ));
@@ -1152,19 +1140,27 @@ static void xpcs_link_up(struct phylink_pcs *pcs, unsigned int neg_mode,
1152
1140
{
1153
1141
struct dw_xpcs * xpcs = phylink_pcs_to_xpcs (pcs );
1154
1142
1155
- if (interface == PHY_INTERFACE_MODE_USXGMII )
1156
- return xpcs_config_usxgmii (xpcs , speed );
1157
- if (interface == PHY_INTERFACE_MODE_SGMII )
1158
- return xpcs_link_up_sgmii (xpcs , neg_mode , speed , duplex );
1159
- if (interface == PHY_INTERFACE_MODE_1000BASEX )
1160
- return xpcs_link_up_1000basex (xpcs , neg_mode , speed , duplex );
1143
+ switch (interface ) {
1144
+ case PHY_INTERFACE_MODE_USXGMII :
1145
+ xpcs_link_up_usxgmii (xpcs , speed );
1146
+ break ;
1147
+
1148
+ case PHY_INTERFACE_MODE_SGMII :
1149
+ case PHY_INTERFACE_MODE_1000BASEX :
1150
+ xpcs_link_up_sgmii_1000basex (xpcs , neg_mode , interface , speed ,
1151
+ duplex );
1152
+ break ;
1153
+
1154
+ default :
1155
+ break ;
1156
+ }
1161
1157
}
1162
1158
1163
1159
static void xpcs_an_restart (struct phylink_pcs * pcs )
1164
1160
{
1165
1161
struct dw_xpcs * xpcs = phylink_pcs_to_xpcs (pcs );
1166
1162
1167
- xpcs_modify (xpcs , MDIO_MMD_VEND2 , MDIO_CTRL1 , BMCR_ANRESTART ,
1163
+ xpcs_modify (xpcs , MDIO_MMD_VEND2 , MII_BMCR , BMCR_ANRESTART ,
1168
1164
BMCR_ANRESTART );
1169
1165
}
1170
1166
0 commit comments