ramips: gsw_mt7621: disable PORT 5 MAC RX/TX flow control by default
authorPetr Štetiar <ynezz@true.cz>
Tue, 11 Feb 2020 10:17:41 +0000 (11:17 +0100)
committerDaniel Golle <daniel@makrotopia.org>
Tue, 26 May 2020 09:07:05 +0000 (10:07 +0100)
commit498f1f4f5df2d077ba524f5735906bb52c12d580
tree538df6bfdd2176622af1e654091c9b7393d4d7d5
parentd8d1956a8087da2fd4465c4381d9e28b91cdc1e8
ramips: gsw_mt7621: disable PORT 5 MAC RX/TX flow control by default

Looking at the current upstream driver implementation, it seems like the
TX/RX flow control is enabled only if the flow control pause option is
resolved from the device/link partner advertisements (or otherwise set).

On the other hand, our current in-tree driver force enables TX/RX
flow control by default, thus possibly leading to TX timeouts if the
other end sends pause frames (which are not properly handled?):

 WARNING: CPU: 3 PID: 0 at net/sched/sch_generic.c:320 dev_watchdog+0x1ac/0x324
 NETDEV WATCHDOG: eth0 (mtk_soc_eth): transmit queue 0 timed out

Disabling the flow control on PORT 5 MAC seems to fix this issues as the
pause frames are then filtered out. While at it, I'm removing the if
condition completely as suggested, since this code is run only on mt7621
SoC, so there is no need to check for the silicon revisions.

Ref: https://lists.openwrt.org/pipermail/openwrt-devel/2017-November/009882.html
Ref: https://forum.openwrt.org/t/mtk-soc-eth-watchdog-timeout-after-r11573/50000/12
Suggested-by: Felix Fietkau <nbd@nbd.name>
Reported-by: Rosen Penev <rosenp@gmail.com>
Signed-off-by: Petr Štetiar <ynezz@true.cz>
(cherry picked from commit c8f8e59816eca49d776562d2d302bf990a87faf0)
target/linux/ramips/files-4.14/drivers/net/ethernet/mediatek/gsw_mt7621.c