[OpenWrt-Devel] [PATCH] ramips: gsw_mt7621: disable PORT 5 MAC RX/TX flow control by default
Rosen Penev
rosenp at gmail.com
Tue Feb 11 05:56:21 EST 2020
Sent from my iPhone
> On Feb 11, 2020, at 2:17 AM, Petr Štetiar <ynezz at true.cz> wrote:
>
> 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.
Sounds good.
>
> 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 at nbd.name>
> Reported-by: Rosen Penev <rosenp at gmail.com>
> Signed-off-by: Petr Štetiar <ynezz at true.cz>
> ---
> .../drivers/net/ethernet/mediatek/gsw_mt7621.c | 12 +++---------
> 1 file changed, 3 insertions(+), 9 deletions(-)
>
> diff --git a/target/linux/ramips/files-4.14/drivers/net/ethernet/mediatek/gsw_mt7621.c b/target/linux/ramips/files-4.14/drivers/net/ethernet/mediatek/gsw_mt7621.c
> index 89be23900738..232bcd8cf4ea 100644
> --- a/target/linux/ramips/files-4.14/drivers/net/ethernet/mediatek/gsw_mt7621.c
> +++ b/target/linux/ramips/files-4.14/drivers/net/ethernet/mediatek/gsw_mt7621.c
> @@ -98,15 +98,9 @@ static void mt7621_hw_init(struct mt7620_gsw *gsw, struct device_node *np)
> mt7530_mdio_w32(gsw, 0x7000, 0x3);
> usleep_range(10, 20);
>
> - if ((rt_sysc_r32(SYSC_REG_CHIP_REV_ID) & 0xFFFF) == 0x0101) {
> - /* (GE1, Force 1000M/FD, FC ON, MAX_RX_LENGTH 1536) */
> - mtk_switch_w32(gsw, 0x2305e30b, GSW_REG_MAC_P0_MCR);
> - mt7530_mdio_w32(gsw, 0x3600, 0x5e30b);
> - } else {
> - /* (GE1, Force 1000M/FD, FC ON, MAX_RX_LENGTH 1536) */
> - mtk_switch_w32(gsw, 0x2305e33b, GSW_REG_MAC_P0_MCR);
> - mt7530_mdio_w32(gsw, 0x3600, 0x5e33b);
> - }
> + /* (GE1, Force 1000M/FD, FC OFF, MAX_RX_LENGTH 1536) */
> + mtk_switch_w32(gsw, 0x2305e30b, GSW_REG_MAC_P0_MCR);
> + mt7530_mdio_w32(gsw, 0x3600, 0x5e30b);
>
> /* (GE2, Link down) */
> mtk_switch_w32(gsw, 0x8000, GSW_REG_MAC_P1_MCR);
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel
More information about the openwrt-devel
mailing list