[][SW framework][common][snfi][Add MT7981 support for mtk-snand driver]

[Description]
Add MT7981 support for mtk-snand driver

[Release-log]
N/A

Change-Id: I149d9640d61a459895f35cf04888e8c96741f4d8
Reviewed-on: https://gerrit.mediatek.inc/c/openwrt/feeds/mtk_openwrt_feeds/+/6386874
diff --git a/target/linux/mediatek/files-5.4/drivers/mtd/mtk-snand/mtk-snand-ecc.c b/target/linux/mediatek/files-5.4/drivers/mtd/mtk-snand/mtk-snand-ecc.c
index 4094339..885dec3 100644
--- a/target/linux/mediatek/files-5.4/drivers/mtd/mtk-snand/mtk-snand-ecc.c
+++ b/target/linux/mediatek/files-5.4/drivers/mtd/mtk-snand/mtk-snand-ecc.c
@@ -46,6 +46,10 @@
 
 static const uint8_t mt7622_ecc_caps[] = { 4, 6, 8, 10, 12 };
 
+static const uint8_t mt7981_ecc_caps[] = {
+	4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24
+};
+
 static const uint8_t mt7986_ecc_caps[] = {
 	4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24
 };
@@ -54,6 +58,10 @@
 	[ECC_DECDONE] = 0x11c,
 };
 
+static const uint32_t mt7981_ecc_regs[] = {
+	[ECC_DECDONE] = 0x124,
+};
+
 static const uint32_t mt7986_ecc_regs[] = {
 	[ECC_DECDONE] = 0x124,
 };
@@ -75,6 +83,14 @@
 		.errnum_bits = 5,
 		.errnum_shift = 5,
 	},
+	[SNAND_SOC_MT7981] = {
+		.ecc_caps = mt7981_ecc_caps,
+		.num_ecc_cap = ARRAY_SIZE(mt7981_ecc_caps),
+		.regs = mt7981_ecc_regs,
+		.mode_shift = 5,
+		.errnum_bits = 5,
+		.errnum_shift = 8,
+	},
 	[SNAND_SOC_MT7986] = {
 		.ecc_caps = mt7986_ecc_caps,
 		.num_ecc_cap = ARRAY_SIZE(mt7986_ecc_caps),
diff --git a/target/linux/mediatek/files-5.4/drivers/mtd/mtk-snand/mtk-snand.c b/target/linux/mediatek/files-5.4/drivers/mtd/mtk-snand/mtk-snand.c
index 884bcfc..a0a50f7 100644
--- a/target/linux/mediatek/files-5.4/drivers/mtd/mtk-snand/mtk-snand.c
+++ b/target/linux/mediatek/files-5.4/drivers/mtd/mtk-snand/mtk-snand.c
@@ -83,6 +83,7 @@
 #define NFI_MASTERSTA_MASK_7622		(MAS_ADDR | MAS_RD | MAS_WR | MAS_RDDLY)
 #define AHB_BUS_BUSY			BIT(1)
 #define BUS_BUSY			BIT(0)
+#define NFI_MASTERSTA_MASK_7981		(AHB_BUS_BUSY | BUS_BUSY)
 #define NFI_MASTERSTA_MASK_7986		(AHB_BUS_BUSY | BUS_BUSY)
 
 /* SNFI registers */
@@ -147,6 +148,11 @@
 
 static const uint8_t mt7622_spare_sizes[] = { 16, 26, 27, 28 };
 
+static const uint8_t mt7981_spare_sizes[] = {
+	16, 26, 27, 28, 32, 36, 40, 44, 48, 49, 50, 51, 52, 62, 61, 63, 64,
+	67, 74
+};
+
 static const uint8_t mt7986_spare_sizes[] = {
 	16, 26, 27, 28, 32, 36, 40, 44, 48, 49, 50, 51, 52, 62, 61, 63, 64,
 	67, 74
@@ -181,6 +187,20 @@
 		.latch_lat = 0,
 		.sample_delay = 40
 	},
+	[SNAND_SOC_MT7981] = {
+		.sector_size = 1024,
+		.max_sectors = 16,
+		.fdm_size = 8,
+		.fdm_ecc_size = 1,
+		.fifo_size = 64,
+		.bbm_swap = true,
+		.empty_page_check = true,
+		.mastersta_mask = NFI_MASTERSTA_MASK_7981,
+		.spare_sizes = mt7981_spare_sizes,
+		.num_spare_size = ARRAY_SIZE(mt7981_spare_sizes),
+		.latch_lat = 0,
+		.sample_delay = 40
+	},
 	[SNAND_SOC_MT7986] = {
 		.sector_size = 1024,
 		.max_sectors = 16,
diff --git a/target/linux/mediatek/files-5.4/drivers/mtd/mtk-snand/mtk-snand.h b/target/linux/mediatek/files-5.4/drivers/mtd/mtk-snand/mtk-snand.h
index 382f80c..37bb6e6 100644
--- a/target/linux/mediatek/files-5.4/drivers/mtd/mtk-snand/mtk-snand.h
+++ b/target/linux/mediatek/files-5.4/drivers/mtd/mtk-snand/mtk-snand.h
@@ -17,6 +17,7 @@
 enum mtk_snand_soc {
 	SNAND_SOC_MT7622,
 	SNAND_SOC_MT7629,
+	SNAND_SOC_MT7981,
 	SNAND_SOC_MT7986,
 
 	__SNAND_SOC_MAX