Re: [PATCH net] net: stmmac: intel: don't reconfigure SerDes on unchanged mode
From: Maxime Chevallier <maxime.chevallier@bootlin.com>
Date: 2026-07-06 08:30:01
Also in:
stable
Hi Markus, On 7/6/26 08:19, Markus Breitenberger wrote:
From: Markus Breitenberger <redacted> intel_mac_finish() is registered as the phylink mac_finish() callback for the Elkhart Lake SGMII ports. phylink calls mac_finish() at the end of every major link reconfiguration, including the initial one during probe, before any interface mode has actually changed. The callback reprograms the shared ModPHY LCPLL through the PMC IPC and then power-cycles the SerDes. On Elkhart Lake that ModPHY is also used by the on-die AHCI SATA PHY. Running the reconfiguration during the initial boot-time link-up disturbs the shared analog block while it is still driving SATA, so the SATA link fails to train: ata1: SATA link down (SStatus 1 SControl 300) The disk carrying the root filesystem is never detected and the system hangs at rootwait. Ethernet itself comes up normally, which makes the failure look unrelated to the network driver. Firmware already programs the ModPHY for the configured interface, so the reconfiguration is redundant unless the interface mode really changes. Return early when the requested mode equals the current one. This avoids touching the shared ModPHY (and the SATA PHY) during boot while preserving runtime SGMII to 2500BASE-X switching, which still sees a genuine mode change and reconfigures as before.
One thing is that now we 'blindly' rely on the bootloader / fw having correctly configured the initial interface. From what I see the only configuration that's done is regarding the serdes rate. Maybe instead the serdes interaction logic can be reworked so that you query the serdes rate, see if you need to adjust it based on the selected interface, and if so you re-configure it ? Maxime