hc
2023-11-06 9df731a176aab8e03b984b681b1bea01ccff6644
u-boot/drivers/mtd/nand/spi/fmsh.c
....@@ -82,6 +82,31 @@
8282 .rfree = fm25s01_ooblayout_free,
8383 };
8484
85
+/*
86
+ * ecc bits: 0xC0[4,6]
87
+ * [0b000], No bit errors were detected;
88
+ * [0b001] and [0b011], 1~6 Bit errors were detected and corrected. Not
89
+ * reach Flipping Bits;
90
+ * [0b101], Bit error count equals the bit flip
91
+ * detection threshold
92
+ * [0b010], Multiple bit errors were detected and
93
+ * not corrected.
94
+ * others, Reserved.
95
+ */
96
+static int fm25s01bi3_ecc_ecc_get_status(struct spinand_device *spinand,
97
+ u8 status)
98
+{
99
+ struct nand_device *nand = spinand_to_nand(spinand);
100
+ u8 eccsr = (status & GENMASK(6, 4)) >> 4;
101
+
102
+ if (eccsr <= 1 || eccsr == 3)
103
+ return eccsr;
104
+ else if (eccsr == 5)
105
+ return nand->eccreq.strength;
106
+ else
107
+ return -EBADMSG;
108
+}
109
+
85110 static const struct spinand_info fmsh_spinand_table[] = {
86111 SPINAND_INFO("FM25S01A",
87112 SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xE4),
....@@ -99,11 +124,11 @@
99124 SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
100125 &write_cache_variants,
101126 &update_cache_variants),
102
- 1,
127
+ SPINAND_HAS_QE_BIT,
103128 SPINAND_ECCINFO(&fm25s01a_ooblayout, NULL)),
104129 SPINAND_INFO("FM25S01",
105130 SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xA1),
106
- NAND_MEMORG(1, 2048, 64, 64, 1024, 1, 1, 1),
131
+ NAND_MEMORG(1, 2048, 128, 64, 1024, 1, 1, 1),
107132 NAND_ECCREQ(1, 512),
108133 SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
109134 &write_cache_variants,
....@@ -112,13 +137,22 @@
112137 SPINAND_ECCINFO(&fm25s01_ooblayout, NULL)),
113138 SPINAND_INFO("FM25LS01",
114139 SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xA5),
115
- NAND_MEMORG(1, 2048, 64, 64, 1024, 1, 1, 1),
140
+ NAND_MEMORG(1, 2048, 128, 64, 1024, 1, 1, 1),
116141 NAND_ECCREQ(1, 512),
117142 SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
118143 &write_cache_variants,
119144 &update_cache_variants),
120145 0,
121146 SPINAND_ECCINFO(&fm25s01_ooblayout, NULL)),
147
+ SPINAND_INFO("FM25S01BI3",
148
+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xD4),
149
+ NAND_MEMORG(1, 2048, 128, 64, 1024, 1, 1, 1),
150
+ NAND_ECCREQ(8, 512),
151
+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
152
+ &write_cache_variants,
153
+ &update_cache_variants),
154
+ SPINAND_HAS_QE_BIT,
155
+ SPINAND_ECCINFO(&fm25s01_ooblayout, fm25s01bi3_ecc_ecc_get_status)),
122156 };
123157
124158 static const struct spinand_manufacturer_ops fmsh_spinand_manuf_ops = {