hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/mtd/nand/spi/xtx.c
....@@ -203,6 +203,28 @@
203203 return -EBADMSG;
204204 }
205205
206
+static int xt26g11c_ecc_get_status(struct spinand_device *spinand,
207
+ u8 status)
208
+{
209
+ struct nand_device *nand = spinand_to_nand(spinand);
210
+
211
+ switch (status & STATUS_ECC_MASK) {
212
+ case STATUS_ECC_NO_BITFLIPS:
213
+ return 0;
214
+
215
+ case STATUS_ECC_UNCOR_ERROR:
216
+ return -EBADMSG;
217
+
218
+ case STATUS_ECC_HAS_BITFLIPS:
219
+ return 1;
220
+
221
+ default:
222
+ return nanddev_get_ecc_requirements(nand)->strength;
223
+ }
224
+
225
+ return -EINVAL;
226
+}
227
+
206228 static const struct spinand_info xtx_spinand_table[] = {
207229 SPINAND_INFO("XT26G01A",
208230 SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0xE1),
....@@ -293,7 +315,61 @@
293315 &update_cache_variants),
294316 SPINAND_HAS_QE_BIT,
295317 SPINAND_ECCINFO(&xt26g01c_ooblayout,
296
- xt26g01c_ecc_get_status)),
318
+ xt26g11c_ecc_get_status)),
319
+ SPINAND_INFO("XT26Q02DWSIGA",
320
+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x52),
321
+ NAND_MEMORG(1, 2048, 128, 64, 2048, 40, 1, 1, 1),
322
+ NAND_ECCREQ(8, 512),
323
+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
324
+ &write_cache_variants,
325
+ &update_cache_variants),
326
+ SPINAND_HAS_QE_BIT,
327
+ SPINAND_ECCINFO(&xt26g01c_ooblayout, xt26g11c_ecc_get_status)),
328
+ SPINAND_INFO("XT26Q01DWSIGA",
329
+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x51),
330
+ NAND_MEMORG(1, 2048, 128, 64, 1024, 20, 1, 1, 1),
331
+ NAND_ECCREQ(8, 512),
332
+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
333
+ &write_cache_variants,
334
+ &update_cache_variants),
335
+ SPINAND_HAS_QE_BIT,
336
+ SPINAND_ECCINFO(&xt26g01c_ooblayout, xt26g11c_ecc_get_status)),
337
+ SPINAND_INFO("XT26Q04DWSIGA",
338
+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x53),
339
+ NAND_MEMORG(1, 4096, 256, 64, 2048, 40, 1, 1, 1),
340
+ NAND_ECCREQ(8, 512),
341
+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
342
+ &write_cache_variants,
343
+ &update_cache_variants),
344
+ SPINAND_HAS_QE_BIT,
345
+ SPINAND_ECCINFO(&xt26g01c_ooblayout, xt26g11c_ecc_get_status)),
346
+ SPINAND_INFO("XT26G01DWSIGA",
347
+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x31),
348
+ NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1),
349
+ NAND_ECCREQ(8, 512),
350
+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
351
+ &write_cache_variants,
352
+ &update_cache_variants),
353
+ SPINAND_HAS_QE_BIT,
354
+ SPINAND_ECCINFO(&xt26g01b_ooblayout, xt26g11c_ecc_get_status)),
355
+ SPINAND_INFO("XT26G02DWSIGA",
356
+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x32),
357
+ NAND_MEMORG(1, 2048, 64, 64, 2048, 40, 1, 1, 1),
358
+ NAND_ECCREQ(8, 512),
359
+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
360
+ &write_cache_variants,
361
+ &update_cache_variants),
362
+ SPINAND_HAS_QE_BIT,
363
+ SPINAND_ECCINFO(&xt26g01b_ooblayout, xt26g11c_ecc_get_status)),
364
+ SPINAND_INFO("XT26G04DWSIGA",
365
+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x33),
366
+ NAND_MEMORG(1, 4096, 256, 64, 2048, 40, 1, 1, 1),
367
+ NAND_ECCREQ(8, 512),
368
+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
369
+ &write_cache_variants,
370
+ &update_cache_variants),
371
+ SPINAND_HAS_QE_BIT,
372
+ SPINAND_ECCINFO(&xt26g01c_ooblayout, xt26g11c_ecc_get_status)),
297373 };
298374
299375 static const struct spinand_manufacturer_ops xtx_spinand_manuf_ops = {