From: "Bjørn Mork" <bjorn@mork.no>
To: Vladislav Karmanov <vladislav.karmanov.dev@gmail.com>
Cc: netdev@vger.kernel.org, andrew@lunn.ch, daniel@makrotopia.org,
dqfext@gmail.com, SkyLake.Huang@mediatek.com,
hkallweit1@gmail.com, linux@armlinux.org.uk, davem@davemloft.net,
edumazet@google.com, kuba@kernel.org, pabeni@redhat.com,
matthias.bgg@gmail.com, angelogioacchino.delregno@collabora.com,
chester.a.unal@arinc9.com, sean.wang@mediatek.com,
olteanv@gmail.com, yangshiji66@outlook.com,
linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-mediatek@lists.infradead.org
Subject: Re: [PATCH net v3] net: phy: mediatek-ge: disable EEE on the MT7530 PHY
Date: Mon, 12 Oct 2026 18:35:32 +0200 [thread overview]
Message-ID: <87cxteri5n.fsf@miraculix.mork.no> (raw)
In-Reply-To: <20260904202800.3410838-1-vladislav.karmanov.dev@gmail.com> (Vladislav Karmanov's message of "Fri, 4 Sep 2026 23:28:00 +0300")
Vladislav Karmanov <vladislav.karmanov.dev@gmail.com> writes:
> The MT7530 internal GE PHY advertises EEE by hardware default, but its
> EEE support is defective: with EEE advertised, some link partners fail
> to establish a stable link. On a 2-pair (4-wire) cable where both ends
> advertise gigabit, 1000BASE-T training cannot succeed, and instead of
> falling back to 100 Mbps the port loops, so no link or DHCP lease is
> ever obtained.
I realize that I'm too late at the party here, but I still want to state
this for the record:
I just tried to reproduce this bug on a Zyxel NR7101, using a cable with
pair 4 cut, connecting to the I219-LM controller in my laptop. Without
success.
EEE enabled or not does not make any difference. The link is negotiated
as 100Mb/s as expected, and it is completely stable. Absolutely no
issues observed. I even added a .link_change_notify callback with a
counter and a printk to the phy driver to make sure I didn't miss any
flapping.
MT7621 side:
root@OpenWrt:~# ethtool --show-eee lan
EEE settings for lan:
EEE status: enabled - active
Tx LPI: 30 (us)
Supported EEE link modes: 100baseT/Full
1000baseT/Full
Advertised EEE link modes: 100baseT/Full
1000baseT/Full
Link partner advertised EEE link modes: 100baseT/Full
1000baseT/Full
root@OpenWrt:~# ethtool lan
Settings for lan:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supported pause frame use: Symmetric Receive-only
Supports auto-negotiation: Yes
Supported FEC modes: Not reported
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised pause frame use: Symmetric Receive-only
Advertised auto-negotiation: Yes
Advertised FEC modes: Not reported
Link partner advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Link partner advertised pause frame use: No
Link partner advertised auto-negotiation: Yes
Link partner advertised FEC modes: Not reported
Speed: 100Mb/s
Duplex: Full
Auto-negotiation: on
master-slave cfg: preferred master
master-slave status: master
Port: Twisted Pair
PHYAD: 2
Transceiver: external
MDI-X: Unknown
Supports Wake-on: d
Wake-on: d
Link detected: yes
I219-LM side:
root@miraculix:/tmp# ethtool --show-eee eth0
EEE settings for eth0:
EEE status: enabled - active
Tx LPI: 17 (us)
Supported EEE link modes: 100baseT/Full
1000baseT/Full
Advertised EEE link modes: 100baseT/Full
1000baseT/Full
Link partner advertised EEE link modes: 100baseT/Full
1000baseT/Full
root@miraculix:/tmp# ethtool eth0
Settings for eth0:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supported pause frame use: Symmetric Receive-only
Supports auto-negotiation: Yes
Supported FEC modes: Not reported
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised pause frame use: Symmetric Receive-only
Advertised auto-negotiation: Yes
Advertised FEC modes: Not reported
Link partner advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Link partner advertised pause frame use: Symmetric Receive-only
Link partner advertised auto-negotiation: Yes
Link partner advertised FEC modes: Not reported
Speed: 100Mb/s
Duplex: Full
Auto-negotiation: on
Port: Twisted Pair
PHYAD: 2
Transceiver: internal
MDI-X: on (auto)
Supports Wake-on: pumbg
Wake-on: d
Current message level: 0x00000007 (7)
drv probe link
Link detected: yes
So now I am curious to know: What am I doing wrong here?
I primarily did this test because I wanted to implement a smarter
workaround, without forcibly disabling EEE for everyone based on one
pretty obscure configuration. But that's hard without being able to
reproduce the problem.
So let me ask you, who seem to be able to reproduce it: Why is it
necessary to block EEE for everyone? Why can't you disable EEE by
default, but let me enable it on my systems - where I know it works?
Or even better: Why can't you detect the link flaps and only disable
EEE when required? (this was my plan)
FWIW, I have been using EEE on MT7621 devices for years without ever
noticing the claimed issue. I have heard the rumours that the SoC is
supposed to have occasional link issues, and that they are related to
EEE. But reproducing the issue has so far been impossible.
> MediaTek confirms the hardware is the root cause (Landen
> Chao, 2021): "EEE of the 10-year-old MT7530 internal gephy has many IOT
> problems, so it is recommended to disable its EEE."
This is BS. I don't doubt that there are bugs in the MT7530 gephy. But
the EEE feature of the MT7530 internal gephy works fine for me. And
always has.
Vendors have no interest in making older hardware work. There is no
reason to ask them or trust them when it comes to hardware they don't
sell anymore.
We can do better. And we have, by for example bringing DSA to the
MT7621. Please, let's try to make even old hardware work as good as
possible. Disabling features is not the way to go.
> Auto-negotiation then falls back to a stable 100 Mbps link instead of
> looping at gigabit. Tested on ASUS RT-AX53U (MT7621): with a 2-pair
> cable on the WAN port, a single clean 100 Mbps link comes up and a
> DHCP lease is obtained, where the unpatched driver loops.
And no I've tested the same configuration with EEE enabled, and it
doesn't loop either.
Where does that put us?
Bjørn
prev parent reply other threads:[~2026-10-12 16:51 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-04 20:28 [PATCH net v3] net: phy: mediatek-ge: disable EEE on the MT7530 PHY Vladislav Karmanov
2026-09-04 20:34 ` Andrew Lunn
2026-09-07 6:16 ` Qingfang Deng
2026-09-08 8:30 ` netdev-bot+sashiko
2026-09-08 15:14 ` Vladislav Karmanov
2026-10-12 16:35 ` Bjørn Mork [this message]
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=87cxteri5n.fsf@miraculix.mork.no \
--to=bjorn@mork.no \
--cc=SkyLake.Huang@mediatek.com \
--cc=andrew@lunn.ch \
--cc=angelogioacchino.delregno@collabora.com \
--cc=chester.a.unal@arinc9.com \
--cc=daniel@makrotopia.org \
--cc=davem@davemloft.net \
--cc=dqfext@gmail.com \
--cc=edumazet@google.com \
--cc=hkallweit1@gmail.com \
--cc=kuba@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mediatek@lists.infradead.org \
--cc=linux@armlinux.org.uk \
--cc=matthias.bgg@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=olteanv@gmail.com \
--cc=pabeni@redhat.com \
--cc=sean.wang@mediatek.com \
--cc=vladislav.karmanov.dev@gmail.com \
--cc=yangshiji66@outlook.com \
/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