1
0
mirror of https://git.openwrt.org/openwrt/openwrt.git synced 2024-10-19 22:18:16 +02:00
openwrt/target/linux/generic/pending-5.4/736-net-phy-at803x-add-at8031-features.patch
David Bauer 8222f8e1b9 ath79: fix link mode support list on UniFi AC
This fixes incorrect supported link modes indicated when using ethtool
on the Ubiquiti UniFi AC lite / LR / Mesh.

eroot@OpenWrt:~# ethtool eth0
Settings for eth0:
	Supported ports: [ TP MII ]
	Supported link modes:   100baseT/Half 100baseT/Full
	                        1000baseT/Full
	                        1000baseX/Full

The reason for this is, that since kernel 5.4 the PHY capabilities are
read dynamically from the PHY. As Ubiquiti leaves the PHY in a wrong
state, the capabilities of the SGMII side of the PHY are read.

As a side effect, 10 Mbit/s link modes did not work on these boards.

Signed-off-by: David Bauer <mail@david-bauer.net>
2021-04-15 22:40:39 +02:00

37 lines
1.4 KiB
Diff

Add back explicit PHY feature flags for the AR8031 and
AR8033 PHY instead of reading them from the PHY.
The Botloader for Ubiquiti UniFi AC boards (and possibly more)
leave fiber page selected, thus we will end up reading the PHY
capabilities of the SGMII side (which does not offer 10 Mbit/s).
We already have a hack in place, which switches back to the copper
page, however this happens after capabilities are read.
The original conversation about 735-net-phy-at803x-fix-at8033-sgmii-mode
back in 2015 explicitly mention the UniFi AC Lite. The issue however is
not missing autonegotiation on the Fiber side, but the fact the PHY
is never switched to the copper side. So half of this patch is superfluous.
A fix is currently being upstreamed. Once this is mainlined and available to us,
these patches can be dropped:
735-net-phy-at803x-fix-at8033-sgmii-mode.patch
736-net-phy-at803x-add-at8031-features.patch
This was tested on a UniFi AC Lite.
See https://patchwork.kernel.org/project/netdevbpf/list/?series=467341
--- a/drivers/net/phy/at803x.c
+++ b/drivers/net/phy/at803x.c
@@ -490,7 +490,7 @@ static struct phy_driver at803x_driver[]
.get_wol = at803x_get_wol,
.suspend = at803x_suspend,
.resume = at803x_resume,
- /* PHY_GBIT_FEATURES */
+ .features = PHY_GBIT_FEATURES,
.read_status = at803x_read_status,
.aneg_done = at803x_aneg_done,
.ack_interrupt = &at803x_ack_interrupt,