Re: [PATCH v3] mtd: spinand: add support for Foresee FS35ND0*G parts

From: Daniel Palmer
Date: Mon Aug 23 2021 - 10:51:50 EST


Hi Miquel,

On Mon, 23 Aug 2021 at 23:21, Miquel Raynal <miquel.raynal@xxxxxxxxxxx> wrote:
> I am not sure to follow, above the software says "3 corrected bf" while

Due to the status being "between 0 and 3 bitflips" I think it'll
basically report 3 most of the time.
As a refresher we seem to have a status for 0 - 3 flips but ok, 4 bit
flips but ok, and >4 flips no go.
In most cases (0 - 3) the driver is reporting 3.

> I thought the problem was when getting 4 bf, but the dump show many
> more. Can you show me how it behaves:
> * erase (like you did)
> * insert {1, 2, 3, 4, 5} bf and show the dump each time?

Here's a complete log of erasing the page then flipping all the bits
in the first byte.

# flash_erase /dev/mtd0 0x8000000 1
Erasing 128 Kibyte @ 8000000 -- 100 % complete
# nanddump --bb=dumpbad -s 0x8000000 -l 1 -c -p /dev/mtd0 | head -n 10
ECC failed: 0
ECC corrected: 6249
Number of bad blocks: 0
Number of bbt blocks: 0
Block size 131072, page size 2048, OOB size 64
Dumping data starting at 0x08000000 and ending at 0x08000001...
ECC: 3 corrected bitflip(s) at offset 0x08000000
0x08000000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000010: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000020: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000030: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000040: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000050: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000060: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000070: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000080: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000090: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
# nandflipbits /dev/mtd0 0@0x8000000
# nanddump --bb=dumpbad -s 0x8000000 -l 1 -c -p /dev/mtd0 | head -n 10
ECC failed: 0
ECC corrected: 6252
Number of bad blocks: 0
Number of bbt blocks: 0
Block size 131072, page size 2048, OOB size 64
Dumping data starting at 0x08000000 and ending at 0x08000001...
ECC: 3 corrected bitflip(s) at offset 0x08000000
0x08000000: fe ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000010: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000020: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000030: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000040: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000050: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000060: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000070: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000080: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000090: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
# nandflipbits /dev/mtd0 1@0x8000000
# nanddump --bb=dumpbad -s 0x8000000 -l 1 -c -p /dev/mtd0 | head -n 10
ECC failed: 0
ECC corrected: 6255
Number of bad blocks: 0
Number of bbt blocks: 0
Block size 131072, page size 2048, OOB size 64
Dumping data starting at 0x08000000 and ending at 0x08000001...
ECC: 3 corrected bitflip(s) at offset 0x08000000
0x08000000: fc ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000010: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000020: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000030: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000040: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000050: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000060: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000070: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000080: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000090: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
# nandflipbits /dev/mtd0 2@0x8000000
# nanddump --bb=dumpbad -s 0x8000000 -l 1 -c -p /dev/mtd0 | head -n 10
ECC failed: 0
ECC corrected: 6258
Number of bad blocks: 0
Number of bbt blocks: 0
Block size 131072, page size 2048, OOB size 64
Dumping data starting at 0x08000000 and ending at 0x08000001...
ECC: 3 corrected bitflip(s) at offset 0x08000000
0x08000000: f8 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000010: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000020: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000030: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000040: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000050: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000060: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000070: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000080: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000090: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
# nandflipbits /dev/mtd0 3@0x8000000
# nanddump --bb=dumpbad -s 0x8000000 -l 1 -c -p /dev/mtd0 | head -n 10
ECC failed: 0
ECC corrected: 6261
Number of bad blocks: 0
Number of bbt blocks: 0
Block size 131072, page size 2048, OOB size 64
Dumping data starting at 0x08000000 and ending at 0x08000001...
ECC: 3 corrected bitflip(s) at offset 0x08000000
0x08000000: f0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000010: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000020: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000030: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000040: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000050: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000060: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000070: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000080: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000090: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
# nandflipbits /dev/mtd0 4@0x8000000
# nanddump --bb=dumpbad -s 0x8000000 -l 1 -c -p /dev/mtd0 | head -n 10
ECC failed: 0
ECC corrected: 6264
Number of bad blocks: 0
Number of bbt blocks: 0
Block size 131072, page size 2048, OOB size 64
Dumping data starting at 0x08000000 and ending at 0x08000001...
ECC: 3 corrected bitflip(s) at offset 0x08000000
0x08000000: e0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000010: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000020: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000030: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000040: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000050: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000060: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000070: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000080: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000090: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
# nandflipbits /dev/mtd0 5@0x8000000
# nanddump --bb=dumpbad -s 0x8000000 -l 1 -c -p /dev/mtd0 | head -n 10
ECC failed: 0
ECC corrected: 6267
Number of bad blocks: 0
Number of bbt blocks: 0
Block size 131072, page size 2048, OOB size 64
Dumping data starting at 0x08000000 and ending at 0x08000001...
ECC: 3 corrected bitflip(s) at offset 0x08000000
0x08000000: c0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000010: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000020: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000030: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000040: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000050: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000060: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000070: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000080: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000090: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
# nandflipbits /dev/mtd0 6@0x8000000
# nanddump --bb=dumpbad -s 0x8000000 -l 1 -c -p /dev/mtd0 | head -n 10
ECC failed: 0
ECC corrected: 6270
Number of bad blocks: 0
Number of bbt blocks: 0
Block size 131072, page size 2048, OOB size 64
Dumping data starting at 0x08000000 and ending at 0x08000001...
ECC: 3 corrected bitflip(s) at offset 0x08000000
0x08000000: 80 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000010: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000020: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000030: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000040: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000050: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000060: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000070: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000080: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000090: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
# nandflipbits /dev/mtd0 7@0x8000000
# nanddump --bb=dumpbad -s 0x8000000 -l 1 -c -p /dev/mtd0 | head -n 10
ECC failed: 0
ECC corrected: 6273
Number of bad blocks: 0
Number of bbt blocks: 0
Block size 131072, page size 2048, OOB size 64
Dumping data starting at 0x08000000 and ending at 0x08000001...
ECC: 3 corrected bitflip(s) at offset 0x08000000
0x08000000: 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000010: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000020: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000030: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000040: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000050: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000060: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000070: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000080: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000090: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
#

For completeness logs of what nandbiterrs does:

# flash_erase /dev/mtd0 0x8000000 1
Erasing 128 Kibyte @ 8000000 -- 100 % complete
# nandbiterrs -i ^C 1024 /dev/mtd0
# nanddump --bb=dumpbad -s 0x8000000 -l 1 -c -p /dev/mtd0 | head -n 10
ECC failed: 0
ECC corrected: 6478
Number of bad blocks: 0
Number of bbt blocks: 0
Block size 131072, page size 2048, OOB size 64
Dumping data starting at 0x08000000 and ending at 0x08000001...
ECC: 3 corrected bitflip(s) at offset 0x08000000
0x08000000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000010: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000020: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000030: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000040: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000050: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000060: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000070: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000080: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000090: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
# nandbiterrs -i -b 1024 /dev/mtd0
incremental biterrors test
Read reported 3 corrected bit errors
Successfully corrected 0 bit errors per subpage
Inserted biterror @ 0/5
Read reported 4 corrected bit errors
ECC failure, invalid data despite read success
# nanddump --bb=dumpbad -s 0x8000000 -l 1 -c -p /dev/mtd0 | head -n 10
ECC failed: 0
ECC corrected: 6488
Number of bad blocks: 0
Number of bbt blocks: 0
Block size 131072, page size 2048, OOB size 64
Dumping data starting at 0x08000000 and ending at 0x08000001...
ECC: 4 corrected bitflip(s) at offset 0x08000000
0x08000000: 05 a5 65 e5 05 85 45 c5 b5 35 f5 75 95 15 d5 55 |..e...E..5.u...U|
0x08000010: 6d ed 2d ad 4d cd 0d 8d fd 7d bd 3d dd 5d 9d 1d |m.-.M....}.=.]..|
0x08000020: 81 01 c1 41 a1 21 e1 61 11 91 51 d1 31 b1 71 f1 |...A.!.a..Q.1.q.|
0x08000030: c9 49 89 09 e9 69 a9 29 59 d9 19 99 79 f9 39 b9 |.I...i.)Y...y.9.|
0x08000040: 77 d7 37 b7 57 d7 17 97 e7 67 a7 27 c7 47 87 07 |w.7.W....g.'.G..|
0x08000050: 3f bf 7f ff 1f 9f 5f df af 2f ef 6f 8f 0f cf 4f |?....._../.o...O|
0x08000060: d3 53 93 13 f3 73 b3 33 43 c3 03 83 63 e3 23 a3 |.S...s.3C...c.#.|
0x08000070: 9b 1b db 5b bb 3b fb 7b 0b 8b 4b cb 2b ab 6b eb |...[.;.{..K.+.k.|
0x08000080: 0c 8c 4c cc 2c ac 6c ec 9c 1c dc 5c bc 3c fc 7c |..L.,.l....\.<.||
0x08000090: 44 c4 04 84 64 e4 24 a4 d4 54 94 14 f4 74 b4 34 |D...d.$..T...t.4|
#

# flash_erase /dev/mtd0 0x8000000 1
Erasing 128 Kibyte @ 8000000 -- 100 % complete
# nanddump --bb=dumpbad -s 0x8000000 -l 1 -c -p /dev/mtd0 | head -n 10
ECC failed: 0
ECC corrected: 6492
Number of bad blocks: 0
Number of bbt blocks: 0
Block size 131072, page size 2048, OOB size 64
Dumping data starting at 0x08000000 and ending at 0x08000001...
ECC: 3 corrected bitflip(s) at offset 0x08000000
0x08000000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000010: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000020: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000030: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000040: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000050: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000060: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000070: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000080: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000090: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
# nandbiterrs -o -b 1024 /dev/mtd0
overwrite biterrors test
Read reported 3 corrected bit errors
Read reported 4 corrected bit errors
Failed to recover 1 bitflips
Bit error histogram (873 operations total):
Page reads with 0 corrected bit errors: 0
Page reads with 1 corrected bit errors: 0
Page reads with 2 corrected bit errors: 0
Page reads with 3 corrected bit errors: 785
# nanddump --bb=dumpbad -s 0x8000000 -l 1 -c -p /dev/mtd0 | head -n 10
ECC failed: 1
ECC corrected: 9202
Number of bad blocks: 0
Number of bbt blocks: 0
Block size 131072, page size 2048, OOB size 64
Dumping data starting at 0x08000000 and ending at 0x08000001...
ECC: 3 corrected bitflip(s) at offset 0x08000000
0x08000000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000010: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000020: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000030: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000040: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000050: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000060: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000070: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000080: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0x08000090: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|

Cheers,

Daniel