net: ethernet: mtk_eth_soc: disable hardware DSA untagging for second MAC
authorArınç ÜNAL <arinc.unal@arinc9.com>
Sat, 28 Jan 2023 09:42:32 +0000 (12:42 +0300)
committerJakub Kicinski <kuba@kernel.org>
Thu, 2 Feb 2023 19:30:41 +0000 (11:30 -0800)
According to my tests on MT7621AT and MT7623NI SoCs, hardware DSA untagging
won't work on the second MAC. Therefore, disable this feature when the
second MAC of the MT7621 and MT7623 SoCs is being used.

Fixes: 2d7605a72906 ("net: ethernet: mtk_eth_soc: enable hardware DSA untagging")
Link: https://lore.kernel.org/netdev/6249fc14-b38a-c770-36b4-5af6d41c21d3@arinc9.com/
Tested-by: Arınç ÜNAL <arinc.unal@arinc9.com>
Signed-off-by: Arınç ÜNAL <arinc.unal@arinc9.com>
Link: https://lore.kernel.org/r/20230128094232.2451947-1-arinc.unal@arinc9.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/mediatek/mtk_eth_soc.c

index e3de9a53b2d9aa181092a9d81c06b6b6b237e390..d56eda6397a41ed25f96f4149a393925187f62fd 100644 (file)
@@ -3177,7 +3177,8 @@ static int mtk_open(struct net_device *dev)
        struct mtk_eth *eth = mac->hw;
        int i, err;
 
-       if (mtk_uses_dsa(dev) && !eth->prog) {
+       if ((mtk_uses_dsa(dev) && !eth->prog) &&
+           !(mac->id == 1 && MTK_HAS_CAPS(eth->soc->caps, MTK_GMAC1_TRGMII))) {
                for (i = 0; i < ARRAY_SIZE(eth->dsa_meta); i++) {
                        struct metadata_dst *md_dst = eth->dsa_meta[i];
 
@@ -3194,7 +3195,8 @@ static int mtk_open(struct net_device *dev)
                }
        } else {
                /* Hardware special tag parsing needs to be disabled if at least
-                * one MAC does not use DSA.
+                * one MAC does not use DSA, or the second MAC of the MT7621 and
+                * MT7623 SoCs is being used.
                 */
                u32 val = mtk_r32(eth, MTK_CDMP_IG_CTRL);
                val &= ~MTK_CDMP_STAG_EN;