The situation: mtk lynxi pcs (eth1 on BananaPi R3) with a rollball rtl8221b sfp. When setting eth1 link up, the phy is not immediately attached. It takes a few seconds, pl->phydev is not set yet. So when setting link eth1 up: phylink_mac_config: mode=inband/2500base-x/none adv=00,00000000,00008000, 0000e240 pause=04 When the phy is attached the link an mode does not change and phylink_mac_initial_config() is not called. No message 'Link is Up' found in the kernel log. We need: phylink_mac_config: mode=phy/2500base-x/none adv=00,00000000,00008000, 000060ef pause=04 Perhaps forcing phylink_mac_initial_config() always for a phy is not the desired approach, so I send this patch as RFC to see which approach will be most suitable. Log before this patch is applied: [root@bpir3 ~]# dmesg | grep eth1 [ 2.515179] mtk_soc_eth 15100000.ethernet eth1: mediatek frame engine at 0xffff800082380000, irq 123 [ 38.271431] mtk_soc_eth 15100000.ethernet eth1: configuring for inband/2500base-x link mode [ 38.279828] mtk_soc_eth 15100000.ethernet eth1: major config, requested inband/2500base-x [ 38.288009] mtk_soc_eth 15100000.ethernet eth1: interface 2500base-x inband modes: pcs=01 phy=00 [ 38.296800] mtk_soc_eth 15100000.ethernet eth1: major config, active inband/inband,an-disabled/2500base-x [ 38.306362] mtk_soc_eth 15100000.ethernet eth1: phylink_mac_config: mode=inband/2500base-x/none adv=00,00000000,00008000,0000e240 pause=04 [ 39.220149] mtk_soc_eth 15100000.ethernet eth1: interface 2 (mii) rate match none supports 0-3,6-7,13-14 [ 39.229758] mtk_soc_eth 15100000.ethernet eth1: interface 3 (gmii) rate match none supports 0-3,5-7,13-14 [ 39.239420] mtk_soc_eth 15100000.ethernet eth1: interface 4 (sgmii) rate match none supports 0-3,5-7,13-14 [ 39.249173] mtk_soc_eth 15100000.ethernet eth1: interface 22 (1000base-x) rate match none supports 5-7,13-14 [ 39.259080] mtk_soc_eth 15100000.ethernet eth1: interface 23 (2500base-x) rate match none supports 6-7,13-14,47 [ 39.594676] mtk_soc_eth 15100000.ethernet eth1: PHY i2c:sfp-1:11 uses interfaces 4,23, validating 4,23 [ 39.603992] mtk_soc_eth 15100000.ethernet eth1: interface 4 (sgmii) rate match none supports 0-3,5-7,13-14 [ 39.650080] mtk_soc_eth 15100000.ethernet eth1: interface 23 (2500base-x) rate match none supports 6-7,13-14,47 [ 39.660266] mtk_soc_eth 15100000.ethernet eth1: PHY [i2c:sfp-1:11] driver [RTL8221B-VB-CG 2.5Gbps PHY (C45)] (irq=POLL) [ 39.671037] mtk_soc_eth 15100000.ethernet eth1: phy: 2500base-x setting supported 00,00000000,00008000,000060ef advertising 00,00000000,00008000,000060ef [ 39.684761] mtk_soc_eth 15100000.ethernet eth1: requesting link mode inband/2500base-x with support 00,00000000,00008000,000060ef [ 40.380076] mtk_soc_eth 15100000.ethernet eth1: phy link down 2500base-x/Unknown/Unknown/none/off [ 40.397090] brlan: port 5(eth1) entered blocking state [ 40.402223] brlan: port 5(eth1) entered disabled state [ 40.407437] mtk_soc_eth 15100000.ethernet eth1: entered allmulticast mode [ 40.414400] mtk_soc_eth 15100000.ethernet eth1: entered promiscuous mode [ 44.500077] mtk_soc_eth 15100000.ethernet eth1: phy link up 2500base-x/2.5Gbps/Full/none/off [ 44.508528] mtk_soc_eth 15100000.ethernet eth1: No phy led trigger registered for speed(2500) Log after this patch is applied: [root@bpir3 ~]# dmesg | grep eth1 [ 2.515149] mtk_soc_eth 15100000.ethernet eth1: mediatek frame engine at 0xffff800082400000, irq 123 [ 38.989414] mtk_soc_eth 15100000.ethernet eth1: configuring for inband/2500base-x link mode [ 38.997838] mtk_soc_eth 15100000.ethernet eth1: major config, requested inband/2500base-x [ 39.006029] mtk_soc_eth 15100000.ethernet eth1: interface 2500base-x inband modes: pcs=01 phy=00 [ 39.014818] mtk_soc_eth 15100000.ethernet eth1: major config, active inband/inband,an-disabled/2500base-x [ 39.024368] mtk_soc_eth 15100000.ethernet eth1: phylink_mac_config: mode=inband/2500base-x/none adv=00,00000000,00008000,0000e240 pause=04 [ 39.960119] mtk_soc_eth 15100000.ethernet eth1: interface 2 (mii) rate match none supports 0-3,6-7,13-14 [ 39.969738] mtk_soc_eth 15100000.ethernet eth1: interface 3 (gmii) rate match none supports 0-3,5-7,13-14 [ 39.979409] mtk_soc_eth 15100000.ethernet eth1: interface 4 (sgmii) rate match none supports 0-3,5-7,13-14 [ 39.989153] mtk_soc_eth 15100000.ethernet eth1: interface 22 (1000base-x) rate match none supports 5-7,13-14 [ 39.999063] mtk_soc_eth 15100000.ethernet eth1: interface 23 (2500base-x) rate match none supports 6-7,13-14,47 [ 40.334663] mtk_soc_eth 15100000.ethernet eth1: PHY i2c:sfp-1:11 uses interfaces 4,23, validating 4,23 [ 40.343980] mtk_soc_eth 15100000.ethernet eth1: interface 4 (sgmii) rate match none supports 0-3,5-7,13-14 [ 40.390049] mtk_soc_eth 15100000.ethernet eth1: interface 23 (2500base-x) rate match none supports 6-7,13-14,47 [ 40.400234] mtk_soc_eth 15100000.ethernet eth1: PHY [i2c:sfp-1:11] driver [RTL8221B-VB-CG 2.5Gbps PHY (C45)] (irq=POLL) [ 40.411005] mtk_soc_eth 15100000.ethernet eth1: phy: 2500base-x setting supported 00,00000000,00008000,000060ef advertising 00,00000000,00008000,000060ef [ 40.424730] mtk_soc_eth 15100000.ethernet eth1: requesting link mode inband/2500base-x with support 00,00000000,00008000,000060ef [ 40.436368] mtk_soc_eth 15100000.ethernet eth1: major config, requested inband/2500base-x [ 40.444539] mtk_soc_eth 15100000.ethernet eth1: interface 2500base-x inband modes: pcs=01 phy=00 [ 40.453307] mtk_soc_eth 15100000.ethernet eth1: major config, active phy/outband/2500base-x [ 40.461653] mtk_soc_eth 15100000.ethernet eth1: phylink_mac_config: mode=phy/2500base-x/none adv=00,00000000,00008000,000060ef pause=04 [ 41.170029] mtk_soc_eth 15100000.ethernet eth1: phy link down 2500base-x/Unknown/Unknown/none/off [ 41.187047] brlan: port 5(eth1) entered blocking state [ 41.192213] brlan: port 5(eth1) entered disabled state [ 41.197404] mtk_soc_eth 15100000.ethernet eth1: entered allmulticast mode [ 41.204358] mtk_soc_eth 15100000.ethernet eth1: entered promiscuous mode [ 46.600038] mtk_soc_eth 15100000.ethernet eth1: phy link up 2500base-x/2.5Gbps/Full/none/off [ 46.600057] mtk_soc_eth 15100000.ethernet eth1: Link is Up - 2.5Gbps/Full - flow control off [ 46.616926] mtk_soc_eth 15100000.ethernet eth1: No phy led trigger registered for speed(2500) [ 46.634003] brlan: port 5(eth1) entered blocking state [ 46.639155] brlan: port 5(eth1) entered forwarding state Signed-off-by: Eric Woudstra <ericwouds@xxxxxxxxx> --- drivers/net/phy/phylink.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c index 6d50c2fdb190..6fd66ba9002a 100644 --- a/drivers/net/phy/phylink.c +++ b/drivers/net/phy/phylink.c @@ -3424,6 +3424,9 @@ static void phylink_sfp_set_config(struct phylink *pl, phy_modes(state->interface)); } + if (pl->phydev) + changed = true; + if (changed && !test_bit(PHYLINK_DISABLE_STOPPED, &pl->phylink_disable_state)) phylink_mac_initial_config(pl, false); -- 2.47.1