@@ -279,10 +279,38 @@ static int miic_validate(struct phylink_pcs *pcs, unsigned long *supported,
279
279
return - EINVAL ;
280
280
}
281
281
282
+ static int miic_pre_init (struct phylink_pcs * pcs )
283
+ {
284
+ struct miic_port * miic_port = phylink_pcs_to_miic_port (pcs );
285
+ struct miic * miic = miic_port -> miic ;
286
+ u32 val , mask ;
287
+
288
+ /* Start RX clock if required */
289
+ if (pcs -> rxc_always_on ) {
290
+ /* In MII through mode, the clock signals will be driven by the
291
+ * external PHY, which might not be initialized yet. Set RMII
292
+ * as default mode to ensure that a reference clock signal is
293
+ * generated.
294
+ */
295
+ miic_port -> interface = PHY_INTERFACE_MODE_RMII ;
296
+
297
+ val = FIELD_PREP (MIIC_CONVCTRL_CONV_MODE , CONV_MODE_RMII ) |
298
+ FIELD_PREP (MIIC_CONVCTRL_CONV_SPEED , CONV_MODE_100MBPS );
299
+ mask = MIIC_CONVCTRL_CONV_MODE | MIIC_CONVCTRL_CONV_SPEED ;
300
+
301
+ miic_reg_rmw (miic , MIIC_CONVCTRL (miic_port -> port ), mask , val );
302
+
303
+ miic_converter_enable (miic , miic_port -> port , 1 );
304
+ }
305
+
306
+ return 0 ;
307
+ }
308
+
282
309
static const struct phylink_pcs_ops miic_phylink_ops = {
283
310
.pcs_validate = miic_validate ,
284
311
.pcs_config = miic_config ,
285
312
.pcs_link_up = miic_link_up ,
313
+ .pcs_pre_init = miic_pre_init ,
286
314
};
287
315
288
316
struct phylink_pcs * miic_create (struct device * dev , struct device_node * np )
0 commit comments