From: <markus.stockhausen@gmx.de>
To: "'Andrew Lunn'" <andrew@lunn.ch>
Cc: <linux@armlinux.org.uk>, <hkallweit1@gmail.com>,
<netdev@vger.kernel.org>,
"'Jonas Jelonek'" <jelonek.jonas@gmail.com>, <jan@3e8.eu>,
<nbd@nbd.name>
Subject: AW: pre-boot plugged SFP autoneg advertisement
Date: Sun, 19 Apr 2026 10:49:13 +0200 [thread overview]
Message-ID: <00ee01dccfd9$673ebd10$35bc3730$@gmx.de> (raw)
In-Reply-To: <90958cc3-e291-44ff-8fc3-102c0f62a269@lunn.ch>
Hi Andrew,
> Von: Andrew Lunn <andrew@lunn.ch>
> Betreff: Re: pre-boot plugged SFP autoneg advertisement
>
> > On Sat, Apr 18, 2026 at 11:27:40AM +0200, markus.stockhausen@gmx.de
wrote:
> > Hi,
> >
> > I'm currently analyzing an issue where a pre-boot-plugged SFP module
> > comes up with autoneg=no advertisement during boot. After an
> > unplug/replug autoneg=yes advertisement is chosen.
> >
> > The following addition in phylink_start() just before the call to
> > phylink_mac_initial_config() mitigiates this.
> >
> > + /* If an SFP module was already present before phylink_start() was
> > + * called, phylink_sfp_set_config() was unable to call
> > + * phylink_mac_initial_config() as phylink was not yet started.
> > + * Ensure the SFP capabilities are reflected in advertising.
> > + */
> > + if (pl->sfp_bus && !linkmode_empty(pl->sfp_support))
> > + linkmode_copy(pl->link_config.advertising, pl->sfp_support);
>
> Let me see if i have the call chain correct. This is net-next/main
> from today.
>
> phylink_sfp_connect_phy() ->
> phylink_sfp_config_phy
>
> if (changed && !test_bit(PHYLINK_DISABLE_STOPPED,
> &pl->phylink_disable_state))
> phylink_mac_initial_config(pl, false);
>
> You are saying PHYLINK_DISABLE_STOPPED is set, so
> phylink_mac_initial_config() is not called.
>
> What i don't see is how phylink_mac_initial_config() does the
> linkmode_copy() you are adding.
Took that hint/question and digged deeper. Added further debug
to each and every linkmode_copy. I think I found the culprit in
a userspace ethtool call. For now I assume OpenWrt netifd.
Adding my last trace below including the original (wrong) idea.
Thank you very much for taking the time and your assistance.
Markus
[ 3.301299] XXXX phylink_create lan12 set pl->link_config.advertising
(autoneg = 1)
[ 3.309954] XXXX phylink_parse_mode lan12 set pl->link_config.advertising
(autoneg = 1)
[ 3.318964] XXX sfp_module_insert lan12 called
[ 3.323935] XXXX phylink_sfp_config_optical lan12 set config.advertising
(autoneg = 1)
[ 3.332815] XXXX phylink_validate_one lan12 set tmp_supported (autoneg =
1)
[ 3.340629] XXXX phylink_validate_mask lan12 set supported (autoneg = 1)
[ 3.348165] XXXX phylink_validate_mask lan12 set state->advertising
(autoneg = 1)
[ 3.356527] rtl83xx-switch 1b000000.switchcore:ethernet-switch lan12
(uninitialized): XXX phylink_sfp_set_config requesting link mode
inband/1000base-x with support 0000000,00000000,00000200,00006440
--- ETHTOOL CALL HERE ---
[ 81.213726] XXXX phylink_ethtool_ksettings_set lan12 start got
config.advertising (autoneg = 1)
[ 81.223542] XXXX phylink_ethtool_ksettings_set lan12 set accoring to
kset->base.autoneg (autoneg = 0)
[ 81.233961] CPU: 0 UID: 0 PID: 1470 Comm: netifd Tainted: G O
6.18.21 #0 NONE
[ 81.234010] Tainted: [O]=OOT_MODULE
[ 81.234017] Hardware name: Zyxel XGS1210-12 A1 Switch
[ 81.234026] Stack : 823a3bbc 80139d20 00000000 00000001 00000000 00000000
00000000 00000000
[ 81.234094] 00000000 00000000 00000000 00000000 00000000 00000001
823a3b78 82040d00
[ 81.234152] 00000000 00000000 80992870 823a3a10 00000000 ffffefff
00000001 00000224
[ 81.234213] 00000226 823a39d4 00000226 000019c8 00000001 00000000
80992870 80a00000
[ 81.234273] 82764648 00000016 00000016 82764628 00000000 80a913b0
00000000 81990000
[ 81.234334] ...
[ 81.234350] Call Trace:
[ 81.234356] [<80115e48>] show_stack+0x28/0xf0
[ 81.234407] [<8010fc78>] dump_stack_lvl+0x70/0xb0
[ 81.234432] [<80592718>] phylink_ethtool_ksettings_set+0x58c/0x6a4
[ 81.234479] [<806bb890>] ethtool_set_link_ksettings+0xbc/0x198
[ 81.234516] [<806be01c>] __dev_ethtool+0xfe0/0x1a1c
[ 81.234550] [<806beb24>] dev_ethtool+0xcc/0x24c
[ 81.234575] [<80678770>] dev_ioctl+0x30c/0x5f4
[ 81.234616] [<80603ebc>] sock_ioctl+0x2bc/0x470
[ 81.234642] [<8036e530>] sys_ioctl+0xb4/0x120
[ 81.234683] [<8011edec>] syscall_common+0x34/0x58
[ 81.234715]
[ 81.234723] XXXX 2 phylink_ethtool_ksettings_set lan12 set
pl->link_config.advertising (autoneg = 0)
-----------
[ 81.375070] rtl83xx-switch 1b000000.switchcore:ethernet-switch lan12: XXX
phylink_start configuring for inband/1000base-x link mode
--- INITIAL FIX/IDEA HERE ---
[ 81.388408] XXX phylink_start lan12 sfp_bus set and linkmode not empty ->
would run linkmode_copy()
-----------
[ 81.398688] XXX phylink_mac_initial_config lan12 called with
force_restart = 1
[ 81.406752] rtl83xx-switch 1b000000.switchcore:ethernet-switch lan12: XXX
major config, requested inband/1000base-x
[ 81.418459] XXXX major_config_entry lan12: autoneg_adv=0 autoneg_sfp=1
sfp_may_have_phy=0
[ 81.427612] XXXX phylink_pcs_neg_mode ENTRY lan12: pl->pcs_neg_mode=0x0
[ 81.435102] XXXX phylink_pcs_neg_mode lan12 advertising autoneg=0
[ 81.442034] rtl83xx-switch 1b000000.switchcore:ethernet-switch lan12: XXX
interface 1000base-x inband modes: pcs=03 phy=00
[ 81.454495] XXXX phylink_pcs_neg_mode lan12 base-x without phy
[ 81.461134] XXXX phylink_pcs_neg_mode EXIT lan12 pl->pcs_neg_mode = 0x40
pl->act_link_an_mode = 0x2
[ 82.085493] XXXX phylink_mac_pcs_get_state lan12 set state->advertising
(autoneg = 0)
[ 82.094391] XXXX phylink_mac_pcs_get_state lan12 autoneg is 0
next prev parent reply other threads:[~2026-04-19 8:49 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-18 9:27 pre-boot plugged SFP autoneg advertisement markus.stockhausen
2026-04-18 15:25 ` Andrew Lunn
2026-04-19 8:49 ` markus.stockhausen [this message]
2026-04-20 16:16 ` AW: " markus.stockhausen
2026-04-20 17:57 ` Andrew Lunn
2026-04-20 19:10 ` AW: " markus.stockhausen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='00ee01dccfd9$673ebd10$35bc3730$@gmx.de' \
--to=markus.stockhausen@gmx.de \
--cc=andrew@lunn.ch \
--cc=hkallweit1@gmail.com \
--cc=jan@3e8.eu \
--cc=jelonek.jonas@gmail.com \
--cc=linux@armlinux.org.uk \
--cc=nbd@nbd.name \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox