mtk_soc_eth issues on MT7986

Lorenz Brun lorenz at brun.one
Sat Feb 4 04:07:04 PST 2023


Hi List,

I'm trying to run a "big" (arm64 defconfig with udev module loading) 
kernel on my Banana Pi R3 (MT7986a + MT7531).
I'm booting with mainline U-Boot 2023.01 on SPI-NOR which has network 
connectivity into my kernel plus initrd which are on eMMC. The kernel 
is 6.2-rc6 with a few patches

6205f61a0a61e net: dsa: mt7530: don't change PVC_EG_TAG when CPU port 
becomes VLAN-aware
28ab9ca128446 wifi: mt76: mt7915: enable per-phy led support
35bc5ae23e5bd wifi: mt76: move leds struct in mt76_phy
f7727b574052f wifi: mt76: move leds field in leds struct
14eb67ac1fbe8 thermal: mediatek: add support for MT7986 and MT7981
04119eac21e73 thermal/drivers/mtk: use function pointer for 
raw_to_mcelsius
e97264d5413e9 net: ethernet: mtk_eth_soc: ppe: fix L2 offloading with 
DSA untagging offload enabled
f849ec7e09dc2 net: ethernet: mtk_eth_soc: drop generic vlan rx offload, 
only use DSA untagging
ebbf1381e354f net: ethernet: mtk_eth_soc: fix flow_offload related 
refcount bug
589a52fd2a635 net: ethernet: mtk_eth_soc: work around issue with 
sending small fragments
9efb3514d33ff net: ethernet: mtk_eth_soc: account for vlan in rx header 
length
ce3db298bf519 mt76: mt7915: expose device tree match table

I also enable the following set of options on top of the arm64 
defconfig specifically for this HW (mostly copied from :

    COMMON_CLK_MEDIATEK = yes;
    COMMON_CLK_MT7986 = yes;
    COMMON_CLK_MT7986_ETHSYS = yes;
    MEDIATEK_GE_PHY = yes;
    MEDIATEK_WATCHDOG = yes;
    MTD_NAND_ECC_MEDIATEK = yes;
    MTD_NAND_ECC_SW_HAMMING = yes;
    MTD_NAND_MTK = yes;
    MTD_SPI_NAND = yes;
    MTD_UBI = yes;
    MTD_UBI_BLOCK = yes;
    MTK_EFUSE = yes;
    MTK_HSDMA = yes;
    MTK_INFRACFG = yes;
    MTK_PMIC_WRAP = yes;
    MTK_SCPSYS = yes;
    MTK_SCPSYS_PM_DOMAINS = yes;
    MTK_THERMAL = yes;
    MTK_TIMER = yes;
    NET_DSA_MT7530 = module;
    NET_DSA_TAG_MTK = module;
    NET_MEDIATEK_SOC = module;
    NET_MEDIATEK_SOC_WED = yes;
    NET_SWITCHDEV = yes;
    NET_VENDOR_MEDIATEK = yes;
    PCIE_MEDIATEK = yes;
    PCIE_MEDIATEK_GEN3 = yes;
    PINCTRL_MT7986 = yes;
    PINCTRL_MTK = yes;
    PINCTRL_MTK_MOORE = yes;
    PINCTRL_MTK_V2 = yes;
    PWM_MEDIATEK = yes;
    MT7915E = module;
    MT7986_WMAC = yes;
    SPI_MT65XX = yes;
    SPI_MTK_NOR = yes;
    SPI_MTK_SNFI = yes;
    MMC_MTK = yes;

This works mostly fine except for one very important problem: The 
ethernet interfaces do not work on the kernel (even the one not 
connected to the MT7531, it does not pass traffic). Not even MDIO seems 
to work as I get a timeout and then an MT7531 probe failure. I tried 
increasing the MDIO timeout to 15s in an attempt to rule out a timing 
issue, but it still just results in this log:

[ 21.758489] mtk_soc_eth 15100000.ethernet eth0: mediatek frame engine 
at 0xffff80000c700000, irq 138
[ 21.790761] mtk_soc_eth 15100000.ethernet: generated random MAC 
address 3e:11:2e:62:4c:6a
[ 21.800431] mtk_soc_eth 15100000.ethernet eth1: mediatek frame engine 
at 0xffff80000c700000, irq 138
[ 36.918265] mtk_soc_eth 15100000.ethernet: mdio: MDIO timeout # With 
increased 15s MDIO timeout hacked in
[ 36.924032] mdio_bus mdio-bus: failed to read mt7530 register

On a current OpenWRT snapshot which also uses a close-to-mainline 
kernel ethernet connectivity works fine with a kernel log like this:

[ 1.026045] mtk_soc_eth 15100000.ethernet eth0: mediatek frame engine 
at 0xffffffc009780000, irq 132
[ 1.035231] mtk_soc_eth 15100000.ethernet: generated random MAC address 
2a:c8:1c:50:66:d3
[ 1.044011] mtk_soc_eth 15100000.ethernet eth1: mediatek frame engine 
at 0xffffffc009780000, irq 132
[ 1.981789] mt7530 mdio-bus:1f: configuring for fixed/2500base-x link 
mode
[ 1.988942] mt7530 mdio-bus:1f: Link is Up - 2.5Gbps/Full - flow 
control rx/tx
[ 1.997884] mt7530 mdio-bus:1f wan (uninitialized): PHY [mt7530-0:00] 
driver [MediaTek MT7531 PHY] (irq=142)
[ 2.017790] mt7530 mdio-bus:1f lan1 (uninitialized): PHY [mt7530-0:01] 
driver [MediaTek MT7531 PHY] (irq=143)
[ 2.037352] mt7530 mdio-bus:1f lan2 (uninitialized): PHY [mt7530-0:02] 
driver [MediaTek MT7531 PHY] (irq=144)
[ 2.056893] mt7530 mdio-bus:1f lan3 (uninitialized): PHY [mt7530-0:03] 
driver [MediaTek MT7531 PHY] (irq=145)
[ 2.076454] mt7530 mdio-bus:1f lan4 (uninitialized): PHY [mt7530-0:04] 
driver [MediaTek MT7531 PHY] (irq=146)
[ 2.087084] DSA: tree 0 setup
[ 6.736417] mtk_soc_eth 15100000.ethernet eth0: configuring for 
fixed/2500base-x link mode
[ 6.744869] mtk_soc_eth 15100000.ethernet eth0: Link is Up - 
2.5Gbps/Full - flow control rx/tx
[ 13.446197] mtk_soc_eth 15100000.ethernet eth1: switched to 
inband/1000base-x link mode

I don't really know what could be going wrong here and would would be 
very grateful for pointers on how to debug this further or solve it.
Regards,
Lorenz





More information about the Linux-mediatek mailing list