@@ -135,19 +135,25 @@ struct mvebu_comhy_conf {
135
135
static const struct mvebu_comhy_conf mvebu_comphy_cp110_modes [] = {
136
136
/* lane 0 */
137
137
MVEBU_COMPHY_CONF (0 , 1 , PHY_MODE_SGMII , 0x1 ),
138
+ MVEBU_COMPHY_CONF (0 , 1 , PHY_MODE_2500SGMII , 0x1 ),
138
139
/* lane 1 */
139
140
MVEBU_COMPHY_CONF (1 , 2 , PHY_MODE_SGMII , 0x1 ),
141
+ MVEBU_COMPHY_CONF (1 , 2 , PHY_MODE_2500SGMII , 0x1 ),
140
142
/* lane 2 */
141
143
MVEBU_COMPHY_CONF (2 , 0 , PHY_MODE_SGMII , 0x1 ),
144
+ MVEBU_COMPHY_CONF (2 , 0 , PHY_MODE_2500SGMII , 0x1 ),
142
145
MVEBU_COMPHY_CONF (2 , 0 , PHY_MODE_10GKR , 0x1 ),
143
146
/* lane 3 */
144
147
MVEBU_COMPHY_CONF (3 , 1 , PHY_MODE_SGMII , 0x2 ),
148
+ MVEBU_COMPHY_CONF (3 , 1 , PHY_MODE_2500SGMII , 0x2 ),
145
149
/* lane 4 */
146
150
MVEBU_COMPHY_CONF (4 , 0 , PHY_MODE_SGMII , 0x2 ),
151
+ MVEBU_COMPHY_CONF (4 , 0 , PHY_MODE_2500SGMII , 0x2 ),
147
152
MVEBU_COMPHY_CONF (4 , 0 , PHY_MODE_10GKR , 0x2 ),
148
153
MVEBU_COMPHY_CONF (4 , 1 , PHY_MODE_SGMII , 0x1 ),
149
154
/* lane 5 */
150
155
MVEBU_COMPHY_CONF (5 , 2 , PHY_MODE_SGMII , 0x1 ),
156
+ MVEBU_COMPHY_CONF (5 , 2 , PHY_MODE_2500SGMII , 0x1 ),
151
157
};
152
158
153
159
struct mvebu_comphy_priv {
@@ -206,6 +212,10 @@ static void mvebu_comphy_ethernet_init_reset(struct mvebu_comphy_lane *lane,
206
212
if (mode == PHY_MODE_10GKR )
207
213
val |= MVEBU_COMPHY_SERDES_CFG0_GEN_RX (0xe ) |
208
214
MVEBU_COMPHY_SERDES_CFG0_GEN_TX (0xe );
215
+ else if (mode == PHY_MODE_2500SGMII )
216
+ val |= MVEBU_COMPHY_SERDES_CFG0_GEN_RX (0x8 ) |
217
+ MVEBU_COMPHY_SERDES_CFG0_GEN_TX (0x8 ) |
218
+ MVEBU_COMPHY_SERDES_CFG0_HALF_BUS ;
209
219
else if (mode == PHY_MODE_SGMII )
210
220
val |= MVEBU_COMPHY_SERDES_CFG0_GEN_RX (0x6 ) |
211
221
MVEBU_COMPHY_SERDES_CFG0_GEN_TX (0x6 ) |
@@ -296,13 +306,13 @@ static int mvebu_comphy_init_plls(struct mvebu_comphy_lane *lane,
296
306
return 0 ;
297
307
}
298
308
299
- static int mvebu_comphy_set_mode_sgmii (struct phy * phy )
309
+ static int mvebu_comphy_set_mode_sgmii (struct phy * phy , enum phy_mode mode )
300
310
{
301
311
struct mvebu_comphy_lane * lane = phy_get_drvdata (phy );
302
312
struct mvebu_comphy_priv * priv = lane -> priv ;
303
313
u32 val ;
304
314
305
- mvebu_comphy_ethernet_init_reset (lane , PHY_MODE_SGMII );
315
+ mvebu_comphy_ethernet_init_reset (lane , mode );
306
316
307
317
val = readl (priv -> base + MVEBU_COMPHY_RX_CTRL1 (lane -> id ));
308
318
val &= ~MVEBU_COMPHY_RX_CTRL1_CLK8T_EN ;
@@ -487,7 +497,8 @@ static int mvebu_comphy_power_on(struct phy *phy)
487
497
488
498
switch (lane -> mode ) {
489
499
case PHY_MODE_SGMII :
490
- ret = mvebu_comphy_set_mode_sgmii (phy );
500
+ case PHY_MODE_2500SGMII :
501
+ ret = mvebu_comphy_set_mode_sgmii (phy , lane -> mode );
491
502
break ;
492
503
case PHY_MODE_10GKR :
493
504
ret = mvebu_comphy_set_mode_10gkr (phy );
0 commit comments