[][Kernel][mt7988][eth][Add sw padding in Ethernet Tx]

[Description]
Add software padding processing in Ethernet Tx path.

It's found that too-short packets would lead to
switch Tx CRC error, followed by switch output
queue stuck issue. So Ethernet driver should check
if the packet is too short and conduct software
padding when necessary.

If without this patch, switch might encounter output
queue stuck issue.

[Release-log]
N/A


Change-Id: Ibd94cbf3be0530d2b9ee61477b0362d099c47d8e
Reviewed-on: https://gerrit.mediatek.inc/c/openwrt/feeds/mtk_openwrt_feeds/+/7109899
diff --git a/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_soc.c
index 77981e6..af4893c 100755
--- a/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -1456,6 +1456,13 @@
 	int i, n_desc = 1;
 	int k = 0;
 
+	if (skb->len < 32) {
+		if (skb_put_padto(skb, MTK_MIN_TX_LENGTH))
+			return -ENOMEM;
+
+		txd_info.size = skb_headlen(skb);
+	}
+
 	itxd = ring->next_free;
 	itxd_pdma = qdma_to_pdma(ring, itxd);
 	if (itxd == ring->last_free)
diff --git a/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_soc.h b/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_soc.h
index 0c56d1b..a594d0b 100755
--- a/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_soc.h
@@ -18,6 +18,7 @@
 
 #define MTK_QDMA_PAGE_SIZE	2048
 #define	MTK_MAX_RX_LENGTH	1536
+#define MTK_MIN_TX_LENGTH	60
 #define MTK_DMA_SIZE		2048
 #define MTK_NAPI_WEIGHT		256