]> git.ipfire.org Git - thirdparty/openwrt.git/commit
realtek: pcs: rtl930x: lift SerDes core power-cycle into {de,}activate
authorJonas Jelonek <jelonek.jonas@gmail.com>
Wed, 20 May 2026 19:57:32 +0000 (19:57 +0000)
committerJonas Jelonek <jelonek.jonas@gmail.com>
Tue, 26 May 2026 06:38:00 +0000 (08:38 +0200)
commit788745bae50dc4cd7c6ebefcd4a8a5df57b3ae21
treeb0bfe0f9b49bca518f302469090bcae1ff8950ec
parent26dc5f0cad9ae641f967954eff80845591356333
realtek: pcs: rtl930x: lift SerDes core power-cycle into {de,}activate

Move rtpcs_930x_sds_set_power() and rtpcs_930x_sds_rx_reset() out of
rtpcs_930x_sds_apply_ip_mode() and into rtpcs_930x_sds_{de,}activate().
After this, apply_ip_mode is pure IP-mode/CMU/state-machine programming
and the SerDes-core analog power is owned by the outer phase pair, the
same place that already owns the 1G/10G PHY block and fiber RX power.

Behavioural change: USXGMII / QSGMII / XSGMII modes did not previously
go through apply_ip_mode and therefore never had the SerDes-core power
gated on mode transitions. After this commit, every mode transition
power-cycles the SerDes core via the outer deactivate/activate.

For the SGMII / 1000BASE-X / 2500BASE-X / 10GBASE-R path the set of
register writes is unchanged; only the relative ordering vs. the
fiber/PHY power writes shifts: set_power(false) now precedes those
writes (was after), set_power(true) now follows them (was before).

Verified on RTL930x hardware: SGMII, 2500BASE-X, 10GBASE-R, USXGMII-QX
and XSGMII all come up with link, ping and iperf3 throughput as
expected.

Link: https://github.com/openwrt/openwrt/pull/23513
Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
target/linux/realtek/files-6.18/drivers/net/pcs/pcs-rtl-otto.c