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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.