[][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