Device: Banana Pi BPI-R4
Firmware: OpenWrt 24.10.2
Interface tested: eth1
Test method:
for mtu in $(seq 9500 -100 1500); do
echo -n "Testing MTU $mtu … "
if ip link set dev eth1 mtu $mtu 2>/dev/null; then
echo “ supported”
else
echo “ unsupported”
fi
done
Test Results:
Testing MTU 9500 … unsupported
Testing MTU 9400 … unsupported
Testing MTU 9300 … unsupported
…
Testing MTU 2100 … unsupported
Testing MTU 2000 … supported
Testing MTU 1900 … supported
Testing MTU 1800 … supported
Testing MTU 1700 … supported
Testing MTU 1600 … supported
Testing MTU 1500 … supported
Summary:
MTU values above 2000 are not supported on eth1.
Maximum supported MTU: 2000 bytes
All standard and slightly extended MTU values (1500–2000) are working as expected.
Jumbo frames (MTU > 2000) are currently not supported on this interface with OpenWrt 24.10.2.
If anyone knows whether this is a hardware limitation of the MT7988 SoC, or a driver/configuration limitation (e.g., DSA or MTK HNAT driver), further insights would be appreciated.
for gigabit ports It’s a hardware limitation for gigabit ports (mentioned in datasheet) for USXGMII ports (10G , 2.5G) - it is mentioned that it is possible to have up to 15k frames , but simple setting controllers registers to use frames larger than 2k in driver leads to frames drops for frames larger than 2k , which means that some additional setup (like ring byffers adjustment, DMA tranfers setup etc.) is missing and needs to be done to actually support jumbo frames.
Also , worth mentioning that using frames larger than 2k may be incompatible with some hardware accelerations
I’ve tested with and without rss/lro and only for XFI interfaces , no matter what is selected , as soon as MTU goes over 2022 - all frames are dropped. I believe that getting JUMBO frames working even without rss/lro makes sense , because it reduces overal interrupts count
@romanovj
There are no such restrictions on many other cpus , probably this limitation is there because of FE/GDM engines, it also could be if you disable FE/GDM completelly and will set global and per MTU registers , it will allow you to use higher MTU , but you’ll also going to need to update the driver
BTW , what driver are you using with your MT7981 ? because the one that in the kernel tree is also limiting MT7981 to 2K frame length. Can you share your driver with 12K MTU support ?
@frank-w
it’s different but it uses same MTK_XMAC_RX_CFG2 register and MTU size function uses mtk_interface_mode_is_xgmii check (only for 10G MAC’s ) to allow 9K MTU - so larger MTU is applicable only to 10G ports
Most likely, the BPI-R4 board itself also has issues. Currently, various tests are being conducted, and there are stability problems with the PCIe interfaces.