Merge tag 'net-6.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
[linux-2.6-microblaze.git] / drivers / net / ethernet / mediatek / mtk_ppe.c
index b2a5d9c..6ce0db3 100644 (file)
@@ -994,7 +994,7 @@ void mtk_ppe_start(struct mtk_ppe *ppe)
                         MTK_PPE_KEEPALIVE_DISABLE) |
              FIELD_PREP(MTK_PPE_TB_CFG_HASH_MODE, 1) |
              FIELD_PREP(MTK_PPE_TB_CFG_SCAN_MODE,
-                        MTK_PPE_SCAN_MODE_KEEPALIVE_AGE) |
+                        MTK_PPE_SCAN_MODE_CHECK_AGE) |
              FIELD_PREP(MTK_PPE_TB_CFG_ENTRY_NUM,
                         MTK_PPE_ENTRIES_SHIFT);
        if (mtk_is_netsys_v2_or_greater(ppe->eth))
@@ -1090,17 +1090,21 @@ int mtk_ppe_stop(struct mtk_ppe *ppe)
 
        mtk_ppe_cache_enable(ppe, false);
 
-       /* disable offload engine */
-       ppe_clear(ppe, MTK_PPE_GLO_CFG, MTK_PPE_GLO_CFG_EN);
-       ppe_w32(ppe, MTK_PPE_FLOW_CFG, 0);
-
        /* disable aging */
        val = MTK_PPE_TB_CFG_AGE_NON_L4 |
              MTK_PPE_TB_CFG_AGE_UNBIND |
              MTK_PPE_TB_CFG_AGE_TCP |
              MTK_PPE_TB_CFG_AGE_UDP |
-             MTK_PPE_TB_CFG_AGE_TCP_FIN;
+             MTK_PPE_TB_CFG_AGE_TCP_FIN |
+                 MTK_PPE_TB_CFG_SCAN_MODE;
        ppe_clear(ppe, MTK_PPE_TB_CFG, val);
 
-       return mtk_ppe_wait_busy(ppe);
+       if (mtk_ppe_wait_busy(ppe))
+               return -ETIMEDOUT;
+
+       /* disable offload engine */
+       ppe_clear(ppe, MTK_PPE_GLO_CFG, MTK_PPE_GLO_CFG_EN);
+       ppe_w32(ppe, MTK_PPE_FLOW_CFG, 0);
+
+       return 0;
 }