[][kernel][mt7986][hnat][Fix issue of inactive HQoS functionality under PPPQ mode]

[Description]
Fix issue of inactive HQoS functionality under PPPQ mode

Without this change, the HQoS functionality might not work as expected
in PPPQ mode, even when the skb mark does not conflict with the
PPPQ port(where qid ranges from 0 to 5).

[Release-log]
N/A


Change-Id: Ib9096403ed82fd40ff98c75929adb3fbda37347d
Reviewed-on: https://gerrit.mediatek.inc/c/openwrt/feeds/mtk_openwrt_feeds/+/8289725
diff --git a/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_hnat/hnat.h b/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_hnat/hnat.h
index e672b41..6d86f25 100644
--- a/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_hnat/hnat.h
+++ b/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_hnat/hnat.h
@@ -1223,13 +1223,11 @@
 #define UDF_PINGPONG_IFIDX GENMASK(3, 0)
 #define UDF_HNAT_PRE_FILLED BIT(4)
 
-#if defined(CONFIG_MEDIATEK_NETSYS_V3)
-#define TPORT_FLAG(dev, skb, qid)			\
+#define HQOS_FLAG(dev, skb, qid)			\
 	((IS_HQOS_UL_MODE && IS_WAN(dev)) ||		\
 	 (IS_HQOS_DL_MODE && IS_LAN_GRP(dev)) ||	\
 	 (IS_PPPQ_MODE && (IS_PPPQ_PATH(dev, skb) ||	\
 			   qid >= MAX_PPPQ_PORT_NUM)))
-#endif
 
 extern const struct of_device_id of_hnat_match[];
 extern struct mtk_hnat *hnat_priv;
diff --git a/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_hnat/hnat_nf_hook.c b/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_hnat/hnat_nf_hook.c
index 235d5ad..75ae019 100644
--- a/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_hnat/hnat_nf_hook.c
+++ b/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_hnat/hnat_nf_hook.c
@@ -1747,7 +1747,7 @@
 		return 0;
 	}
 
-	if (IS_HQOS_MODE || skb->mark >= MAX_PPPQ_PORT_NUM)
+	if (IS_HQOS_MODE || (skb->mark & MTK_QDMA_TX_MASK) >= MAX_PPPQ_PORT_NUM)
 		qid = skb->mark & (MTK_QDMA_TX_MASK);
 	else if (IS_PPPQ_MODE && IS_PPPQ_PATH(dev, skb))
 		qid = port_id & MTK_QDMA_TX_MASK;
@@ -1780,18 +1780,13 @@
 				}
 			}
 
-			if (FROM_EXT(skb) || skb_hnat_sport(skb) == NR_QDMA_PORT ||
-			    (IS_PPPQ_MODE && (qid < MAX_PPPQ_PORT_NUM) &&
-			     !IS_DSA_LAN(dev) && !IS_DSA_WAN(dev)))
+			if (FROM_EXT(skb) || skb_hnat_sport(skb) == NR_QDMA_PORT)
 				entry.ipv4_hnapt.iblk2.fqos = 0;
 			else
 #if defined(CONFIG_MEDIATEK_NETSYS_V3)
-				entry.ipv4_hnapt.tport_id = TPORT_FLAG(dev, skb, qid) ? 1 : 0;
+				entry.ipv4_hnapt.tport_id = HQOS_FLAG(dev, skb, qid) ? 1 : 0;
 #else
-				entry.ipv4_hnapt.iblk2.fqos =
-					(!IS_PPPQ_MODE ||
-					(IS_PPPQ_MODE &&
-					 IS_PPPQ_PATH(dev, skb)));
+				entry.ipv4_hnapt.iblk2.fqos = HQOS_FLAG(dev, skb, qid) ? 1 : 0;
 #endif
 		} else {
 			entry.ipv4_hnapt.iblk2.fqos = 0;
@@ -1821,9 +1816,7 @@
 				}
 			}
 
-			if (FROM_EXT(skb) ||
-			    (IS_PPPQ_MODE && (qid < MAX_PPPQ_PORT_NUM) &&
-			     !IS_DSA_LAN(dev) && !IS_DSA_WAN(dev)))
+			if (FROM_EXT(skb) || skb_hnat_sport(skb) == NR_QDMA_PORT)
 				entry.ipv6_5t_route.iblk2.fqos = 0;
 			else
 #if defined(CONFIG_MEDIATEK_NETSYS_V3)
@@ -1831,23 +1824,20 @@
 				case IPV4_MAP_E:
 				case IPV4_MAP_T:
 					entry.ipv4_mape.tport_id =
-						TPORT_FLAG(dev, skb, qid) ? 1 : 0;
+						HQOS_FLAG(dev, skb, qid) ? 1 : 0;
 					break;
 				case IPV6_HNAPT:
 				case IPV6_HNAT:
 					entry.ipv6_hnapt.tport_id =
-						TPORT_FLAG(dev, skb, qid) ? 1 : 0;
+						HQOS_FLAG(dev, skb, qid) ? 1 : 0;
 					break;
 				default:
 					entry.ipv6_5t_route.tport_id =
-						TPORT_FLAG(dev, skb, qid) ? 1 : 0;
+						HQOS_FLAG(dev, skb, qid) ? 1 : 0;
 					break;
 				}
 #else
-				entry.ipv6_5t_route.iblk2.fqos =
-					(!IS_PPPQ_MODE ||
-					 (IS_PPPQ_MODE &&
-					  IS_PPPQ_PATH(dev, skb)));
+				entry.ipv6_5t_route.iblk2.fqos = HQOS_FLAG(dev, skb, qid) ? 1 : 0;
 #endif
 		} else {
 			entry.ipv6_5t_route.iblk2.fqos = 0;