[PATCH next 2/2] spi: spi-qpic-snand: add support for 8 bits ECC strength
Md Sadre Alam
quic_mdalam at quicinc.com
Tue May 13 02:01:26 PDT 2025
On 5/13/2025 1:02 PM, Miquel Raynal wrote:
> On 12/05/2025 at 22:19:05 +02, Gabor Juhos <j4g8y7 at gmail.com> wrote:
>
>> 2025. 05. 12. 10:32 keltezéssel, Miquel Raynal írta:
>>> On 05/05/2025 at 15:21:52 +02, Gabor Juhos <j4g8y7 at gmail.com> wrote:
>>>
>>>> 2025. 05. 05. 13:17 keltezéssel, Md Sadre Alam írta:
>>>>>
>>>>>
>>>>
>>
>> [...]
>>
>>>> [ 48.940586] ==================================================
>>>> [ 48.941112] mtd_nandbiterrs: MTD device: 0
>>>> [ 48.946811] mtd_nandbiterrs: MTD device size 268435456, eraseblock=131072,
>>>> page=2048, oob=128
>>>> [ 48.950837] mtd_nandbiterrs: Device uses 1 subpages of 2048 bytes
>>>> [ 48.959448] mtd_nandbiterrs: Using page=0, offset=0, eraseblock=0
>>>> [ 48.969014] mtd_nandbiterrs: incremental biterrors test
>>>> [ 48.971596] mtd_nandbiterrs: write_page
>>>> [ 48.977594] mtd_nandbiterrs: rewrite page
>>>> [ 48.981277] mtd_nandbiterrs: read_page
>>>> [ 48.985247] mtd_nandbiterrs: verify_page
>>>> [ 48.988269] mtd_nandbiterrs: Successfully corrected 0 bit errors per subpage
>>>> [ 48.992327] mtd_nandbiterrs: Inserted biterror @ 0/5
>>>> [ 48.999428] mtd_nandbiterrs: rewrite page
>>>> [ 49.005508] mtd_nandbiterrs: read_page
>>>> [ 49.008836] mtd_nandbiterrs: Read reported 1 corrected bit errors
>>>> [ 49.011858] mtd_nandbiterrs: verify_page
>>>> [ 49.018061] mtd_nandbiterrs: Successfully corrected 1 bit errors per subpage
>>>> [ 49.022015] mtd_nandbiterrs: Inserted biterror @ 0/2
>>>> [ 49.029058] mtd_nandbiterrs: rewrite page
>>>> [ 49.034848] mtd_nandbiterrs: read_page
>>>> [ 49.038516] mtd_nandbiterrs: Read reported 1 corrected bit errors
>>>> [ 49.041545] mtd_nandbiterrs: verify_page
>>>> [ 49.047755] mtd_nandbiterrs: Successfully corrected 2 bit errors per subpage
>>>> [ 49.051702] mtd_nandbiterrs: Inserted biterror @ 0/0
>>>> [ 49.058760] mtd_nandbiterrs: rewrite page
>>>> [ 49.064565] mtd_nandbiterrs: read_page
>>>> [ 49.068203] mtd_nandbiterrs: Read reported 1 corrected bit errors
>>>> [ 49.071232] mtd_nandbiterrs: verify_page
>>>> [ 49.077432] mtd_nandbiterrs: Successfully corrected 3 bit errors per subpage
>>>> [ 49.081389] mtd_nandbiterrs: Inserted biterror @ 1/7
>>>> [ 49.088432] mtd_nandbiterrs: rewrite page
>>>> [ 49.094197] mtd_nandbiterrs: read_page
>>>> [ 49.097889] mtd_nandbiterrs: Read reported 2 corrected bit errors
>>>> [ 49.100919] mtd_nandbiterrs: verify_page
>>>> [ 49.107121] mtd_nandbiterrs: Successfully corrected 4 bit errors per subpage
>>>> [ 49.111077] mtd_nandbiterrs: Inserted biterror @ 1/5
>>>> [ 49.118137] mtd_nandbiterrs: rewrite page
>>>> [ 49.123892] mtd_nandbiterrs: read_page
>>>> [ 49.127576] mtd_nandbiterrs: Read reported 2 corrected bit errors
>>>> [ 49.130608] mtd_nandbiterrs: verify_page
>>>> [ 49.136808] mtd_nandbiterrs: Successfully corrected 5 bit errors per subpage
>>>> [ 49.140764] mtd_nandbiterrs: Inserted biterror @ 1/2
>>>> [ 49.147807] mtd_nandbiterrs: rewrite page
>>>> [ 49.153607] mtd_nandbiterrs: read_page
>>>> [ 49.157268] mtd_nandbiterrs: Read reported 2 corrected bit errors
>>>> [ 49.160294] mtd_nandbiterrs: verify_page
>>>> [ 49.166496] mtd_nandbiterrs: Successfully corrected 6 bit errors per subpage
>>>> [ 49.170452] mtd_nandbiterrs: Inserted biterror @ 1/0
>>>> [ 49.177498] mtd_nandbiterrs: rewrite page
>>>> [ 49.183253] mtd_nandbiterrs: read_page
>>>> [ 49.186974] mtd_nandbiterrs: Read reported 2 corrected bit errors
>>>> [ 49.189983] mtd_nandbiterrs: verify_page
>>>> [ 49.196194] mtd_nandbiterrs: Successfully corrected 7 bit errors per subpage
>>>> [ 49.200140] mtd_nandbiterrs: Inserted biterror @ 2/6
>>>> [ 49.207182] mtd_nandbiterrs: rewrite page
>>>> [ 49.212895] mtd_nandbiterrs: read_page
>>>> [ 49.216671] mtd_nandbiterrs: Read reported 3 corrected bit errors
>>>> [ 49.219670] mtd_nandbiterrs: verify_page
>>>> [ 49.225872] mtd_nandbiterrs: Successfully corrected 8 bit errors per subpage
>>>> [ 49.229827] mtd_nandbiterrs: Inserted biterror @ 2/5
>>>> [ 49.236871] mtd_nandbiterrs: rewrite page
>>>> [ 49.242629] mtd_nandbiterrs: read_page
>>>> [ 49.246348] mtd_nandbiterrs: error: read failed at 0x0
>>>> [ 49.249356] mtd_nandbiterrs: After 9 biterrors per subpage, read reported
>>>> error -74
>>>> [ 49.257958] mtd_nandbiterrs: finished successfully.
>>>> [ 49.262029] ==================================================
>>>> #
>>>
>>> This is not the intended behavior. The reporting is wrong and should
>>> report an increasing number of bitflips instead of 1, 1, 1, 2, 2, 2, 2,
>>> 3.
>>>
>>> With this behavior, wear levelling will not work correctly.
>>>
>>> This is not related to Gabor's changes, but I believe this should be
>>> updated otherwise it does not make much sense to increase the strength.
>>
>> It still makes some sense. For example, the bootloader on my board uses 8 bits
>> strength when it handles the NAND flash. Without supporting that, the kernel
>> can't read the data written by the bootloader and vice versa.
>>
>>> Gabor, can you look into it? Both patches look fine otherwise, thanks a
>>> lot!
>>
>> I have checked it. According to the code, the driver reads the reported values
>> from a hardware register.
>>
>> Here is the result of another test but i have added some debug code to the
>> driver so the output contains the hardware register values:
>>
>> # insmod mtd_nandbiterrs dev=0
>> [ 64.791395]
>> [ 64.791423] ==================================================
>> [ 64.791950] mtd_nandbiterrs: MTD device: 0
>> [ 64.797592] mtd_nandbiterrs: MTD device size 268435456, eraseblock=131072, page=2048, oob=128
>> [ 64.801779] mtd_nandbiterrs: Device uses 1 subpages of 2048 bytes
>> [ 64.810313] mtd_nandbiterrs: Using page=0, offset=0, eraseblock=0
>> [ 64.820832] mtd_nandbiterrs: incremental biterrors test
>> [ 64.822452] mtd_nandbiterrs: write_page
>> [ 64.828511] mtd_nandbiterrs: rewrite page
>> [ 64.832270] mtd_nandbiterrs: read_page
>> [ 64.836184] qcom_snand 79b0000.spi: cw[0] flash:00003020 buffer:00ff0200 erased_cw:00000002
>> [ 64.839091] qcom_snand 79b0000.spi: cw[1] flash:00002020 buffer:00ff0200 erased_cw:00000002
>> [ 64.847364] qcom_snand 79b0000.spi: cw[2] flash:00001020 buffer:00ff0200 erased_cw:00000002
>> [ 64.855694] qcom_snand 79b0000.spi: cw[3] flash:00000020 buffer:00ff0200 erased_cw:00000002
>> [ 64.864020] qcom_snand 79b0000.spi: corrected:0 failed:0 bitflips:0
>> [ 64.872349] mtd_nandbiterrs: verify_page
>> [ 64.878598] mtd_nandbiterrs: Successfully corrected 0 bit errors per subpage
>> [ 64.882760] mtd_nandbiterrs: Inserted biterror @ 0/5
>> [ 64.889793] mtd_nandbiterrs: rewrite page
>> [ 64.895541] mtd_nandbiterrs: read_page
>> [ 64.899228] qcom_snand 79b0000.spi: cw[0] flash:00003020 buffer:00ff0201 erased_cw:00000002
>> [ 64.902282] qcom_snand 79b0000.spi: cw[1] flash:00002020 buffer:00ff0200 erased_cw:00000002
>> [ 64.910549] qcom_snand 79b0000.spi: cw[2] flash:00001020 buffer:00ff0200 erased_cw:00000002
>> [ 64.918860] qcom_snand 79b0000.spi: cw[3] flash:00000020 buffer:00ff0200 erased_cw:00000002
>> [ 64.927206] qcom_snand 79b0000.spi: corrected:1 failed:0 bitflips:1
>> [ 64.935552] mtd_nandbiterrs: Read reported 1 corrected bit errors
>> [ 64.941789] mtd_nandbiterrs: verify_page
>> [ 64.948043] mtd_nandbiterrs: Successfully corrected 1 bit errors per subpage
>> [ 64.952042] mtd_nandbiterrs: Inserted biterror @ 0/2
>> [ 64.959048] mtd_nandbiterrs: rewrite page
>> [ 64.964815] mtd_nandbiterrs: read_page
>> [ 64.968490] qcom_snand 79b0000.spi: cw[0] flash:00003020 buffer:00ff0201 erased_cw:00000002
>> [ 64.971586] qcom_snand 79b0000.spi: cw[1] flash:00002020 buffer:00ff0200 erased_cw:00000002
>> [ 64.979814] qcom_snand 79b0000.spi: cw[2] flash:00001020 buffer:00ff0200 erased_cw:00000002
>> [ 64.988131] qcom_snand 79b0000.spi: cw[3] flash:00000020 buffer:00ff0200 erased_cw:00000002
>> [ 64.996481] qcom_snand 79b0000.spi: corrected:1 failed:0 bitflips:1
>> [ 65.004810] mtd_nandbiterrs: Read reported 1 corrected bit errors
>> [ 65.011059] mtd_nandbiterrs: verify_page
>> [ 65.017313] mtd_nandbiterrs: Successfully corrected 2 bit errors per subpage
>> [ 65.021307] mtd_nandbiterrs: Inserted biterror @ 0/0
>> [ 65.028319] mtd_nandbiterrs: rewrite page
>> [ 65.034131] mtd_nandbiterrs: read_page
>> [ 65.037862] qcom_snand 79b0000.spi: cw[0] flash:00003020 buffer:00ff0201 erased_cw:00000002
>> [ 65.040844] qcom_snand 79b0000.spi: cw[1] flash:00002020 buffer:00ff0200 erased_cw:00000002
>> [ 65.049069] qcom_snand 79b0000.spi: cw[2] flash:00001020 buffer:00ff0200 erased_cw:00000002
>> [ 65.057418] qcom_snand 79b0000.spi: cw[3] flash:00000020 buffer:00ff0200 erased_cw:00000002
>> [ 65.065763] qcom_snand 79b0000.spi: corrected:1 failed:0 bitflips:1
>> [ 65.074082] mtd_nandbiterrs: Read reported 1 corrected bit errors
>> [ 65.080341] mtd_nandbiterrs: verify_page
>> [ 65.086584] mtd_nandbiterrs: Successfully corrected 3 bit errors per subpage
>> [ 65.090574] mtd_nandbiterrs: Inserted biterror @ 1/7
>> [ 65.097589] mtd_nandbiterrs: rewrite page
>> [ 65.103374] mtd_nandbiterrs: read_page
>> [ 65.107030] qcom_snand 79b0000.spi: cw[0] flash:00003020 buffer:00ff0202 erased_cw:00000002
>> [ 65.110120] qcom_snand 79b0000.spi: cw[1] flash:00002020 buffer:00ff0200 erased_cw:00000002
>> [ 65.118340] qcom_snand 79b0000.spi: cw[2] flash:00001020 buffer:00ff0200 erased_cw:00000002
>> [ 65.126689] qcom_snand 79b0000.spi: cw[3] flash:00000020 buffer:00ff0200 erased_cw:00000002
>> [ 65.135032] qcom_snand 79b0000.spi: corrected:2 failed:0 bitflips:2
>> [ 65.143357] mtd_nandbiterrs: Read reported 2 corrected bit errors
>> [ 65.149611] mtd_nandbiterrs: verify_page
>> [ 65.155855] mtd_nandbiterrs: Successfully corrected 4 bit errors per subpage
>> [ 65.159844] mtd_nandbiterrs: Inserted biterror @ 1/5
>> [ 65.166860] mtd_nandbiterrs: rewrite page
>> [ 65.172645] mtd_nandbiterrs: read_page
>> [ 65.176301] qcom_snand 79b0000.spi: cw[0] flash:00003020 buffer:00ff0202 erased_cw:00000002
>> [ 65.179389] qcom_snand 79b0000.spi: cw[1] flash:00002020 buffer:00ff0200 erased_cw:00000002
>> [ 65.187611] qcom_snand 79b0000.spi: cw[2] flash:00001020 buffer:00ff0200 erased_cw:00000002
>> [ 65.195961] qcom_snand 79b0000.spi: cw[3] flash:00000020 buffer:00ff0200 erased_cw:00000002
>> [ 65.204289] qcom_snand 79b0000.spi: corrected:2 failed:0 bitflips:2
>> [ 65.212623] mtd_nandbiterrs: Read reported 2 corrected bit errors
>> [ 65.218858] mtd_nandbiterrs: verify_page
>> [ 65.225139] mtd_nandbiterrs: Successfully corrected 5 bit errors per subpage
>> [ 65.229102] mtd_nandbiterrs: Inserted biterror @ 1/2
>> [ 65.236147] mtd_nandbiterrs: rewrite page
>> [ 65.241899] mtd_nandbiterrs: read_page
>> [ 65.245572] qcom_snand 79b0000.spi: cw[0] flash:00003020 buffer:00ff0202 erased_cw:00000002
>> [ 65.248635] qcom_snand 79b0000.spi: cw[1] flash:00002020 buffer:00ff0200 erased_cw:00000002
>> [ 65.256902] qcom_snand 79b0000.spi: cw[2] flash:00001020 buffer:00ff0200 erased_cw:00000002
>> [ 65.265234] qcom_snand 79b0000.spi: cw[3] flash:00000020 buffer:00ff0200 erased_cw:00000002
>> [ 65.273561] qcom_snand 79b0000.spi: corrected:2 failed:0 bitflips:2
>> [ 65.281895] mtd_nandbiterrs: Read reported 2 corrected bit errors
>> [ 65.288129] mtd_nandbiterrs: verify_page
>> [ 65.294408] mtd_nandbiterrs: Successfully corrected 6 bit errors per subpage
>> [ 65.298373] mtd_nandbiterrs: Inserted biterror @ 1/0
>> [ 65.305413] mtd_nandbiterrs: rewrite page
>> [ 65.311170] mtd_nandbiterrs: read_page
>> [ 65.314843] qcom_snand 79b0000.spi: cw[0] flash:00003020 buffer:00ff0202 erased_cw:00000002
>> [ 65.317906] qcom_snand 79b0000.spi: cw[1] flash:00002020 buffer:00ff0200 erased_cw:00000002
>> [ 65.326170] qcom_snand 79b0000.spi: cw[2] flash:00001020 buffer:00ff0200 erased_cw:00000002
>> [ 65.334501] qcom_snand 79b0000.spi: cw[3] flash:00000020 buffer:00ff0200 erased_cw:00000002
>> [ 65.342833] qcom_snand 79b0000.spi: corrected:2 failed:0 bitflips:2
>> [ 65.351164] mtd_nandbiterrs: Read reported 2 corrected bit errors
>> [ 65.357399] mtd_nandbiterrs: verify_page
>> [ 65.363680] mtd_nandbiterrs: Successfully corrected 7 bit errors per subpage
>> [ 65.367643] mtd_nandbiterrs: Inserted biterror @ 2/6
>> [ 65.374684] mtd_nandbiterrs: rewrite page
>> [ 65.380445] mtd_nandbiterrs: read_page
>> [ 65.384112] qcom_snand 79b0000.spi: cw[0] flash:00003020 buffer:00ff0203 erased_cw:00000002
>> [ 65.387177] qcom_snand 79b0000.spi: cw[1] flash:00002020 buffer:00ff0200 erased_cw:00000002
>> [ 65.395445] qcom_snand 79b0000.spi: cw[2] flash:00001020 buffer:00ff0200 erased_cw:00000002
>> [ 65.403769] qcom_snand 79b0000.spi: cw[3] flash:00000020 buffer:00ff0200 erased_cw:00000002
>> [ 65.412103] qcom_snand 79b0000.spi: corrected:3 failed:0 bitflips:3
>> [ 65.420436] mtd_nandbiterrs: Read reported 3 corrected bit errors
>> [ 65.426671] mtd_nandbiterrs: verify_page
>> [ 65.432950] mtd_nandbiterrs: Successfully corrected 8 bit errors per subpage
>> [ 65.436915] mtd_nandbiterrs: Inserted biterror @ 2/5
>> [ 65.443958] mtd_nandbiterrs: rewrite page
>> [ 65.449719] mtd_nandbiterrs: read_page
>> [ 65.453386] qcom_snand 79b0000.spi: cw[0] flash:00003030 buffer:00ff0301 erased_cw:00000002
>> [ 65.456448] qcom_snand 79b0000.spi: cw[1] flash:00002020 buffer:00ff0200 erased_cw:00000002
>> [ 65.464715] qcom_snand 79b0000.spi: cw[2] flash:00001020 buffer:00ff0200 erased_cw:00000002
>> [ 65.473041] qcom_snand 79b0000.spi: cw[3] flash:00000020 buffer:00ff0200 erased_cw:00000002
>> [ 65.481374] qcom_snand 79b0000.spi: corrected:0 failed:1 bitflips:3
>> [ 65.489706] mtd_nandbiterrs: error: read failed at 0x0
>> [ 65.495941] mtd_nandbiterrs: After 9 biterrors per subpage, read reported error -74
>> [ 65.504609] mtd_nandbiterrs: finished successfully.
>> [ 65.508700] ==================================================
>>
>>
>> Basically, the driver reads the page as 4 codewords along with reading the
>> register values after each. The reported values are coming from the low
>> 5 bits of the 'buffer' values printed above. The layout of the register is
>> barely documented in the driver, so the exact meaning of the bits is unknown.
>>
>> Despite that, I had an idea, so I have changed the code in the nandbiterrs
>> module to insert only single bit error into a given byte. By doing the test
>> with the modified module results in the following:
>>
>> # insmod mtd_nandbiterrs dev=0
>> [ 37.125416]
>> [ 37.125444] ==================================================
>> [ 37.125970] mtd_nandbiterrs: MTD device: 0
>> [ 37.131764] mtd_nandbiterrs: MTD device size 268435456, eraseblock=131072, page=2048, oob=128
>> [ 37.135695] mtd_nandbiterrs: Device uses 1 subpages of 2048 bytes
>> [ 37.144314] mtd_nandbiterrs: Using page=0, offset=0, eraseblock=0
>> [ 37.155047] mtd_nandbiterrs: incremental biterrors test
>> [ 37.156481] mtd_nandbiterrs: write_page
>> [ 37.162518] mtd_nandbiterrs: rewrite page
>> [ 37.166298] mtd_nandbiterrs: read_page
>> [ 37.170193] qcom_snand 79b0000.spi: cw[0] flash:00003020 buffer:00ff0200 erased_cw:00000002
>> [ 37.173111] qcom_snand 79b0000.spi: cw[1] flash:00002020 buffer:00ff0200 erased_cw:00000002
>> [ 37.181383] qcom_snand 79b0000.spi: cw[2] flash:00001020 buffer:00ff0200 erased_cw:00000002
>> [ 37.189708] qcom_snand 79b0000.spi: cw[3] flash:00000020 buffer:00ff0200 erased_cw:00000002
>> [ 37.198020] qcom_snand 79b0000.spi: corrected:0 failed:0 bitflips:0
>> [ 37.206367] mtd_nandbiterrs: verify_page
>> [ 37.212631] mtd_nandbiterrs: Successfully corrected 0 bit errors per subpage
>> [ 37.216768] mtd_nandbiterrs: Inserted biterror @ 1/7
>> [ 37.223809] mtd_nandbiterrs: rewrite page
>> [ 37.229569] mtd_nandbiterrs: read_page
>> [ 37.233244] qcom_snand 79b0000.spi: cw[0] flash:00003020 buffer:00ff0201 erased_cw:00000002
>> [ 37.236301] qcom_snand 79b0000.spi: cw[1] flash:00002020 buffer:00ff0200 erased_cw:00000002
>> [ 37.244571] qcom_snand 79b0000.spi: cw[2] flash:00001020 buffer:00ff0200 erased_cw:00000002
>> [ 37.252896] qcom_snand 79b0000.spi: cw[3] flash:00000020 buffer:00ff0200 erased_cw:00000002
>> [ 37.261227] qcom_snand 79b0000.spi: corrected:1 failed:0 bitflips:1
>> [ 37.269560] mtd_nandbiterrs: Read reported 1 corrected bit errors
>> [ 37.275795] mtd_nandbiterrs: verify_page
>> [ 37.282075] mtd_nandbiterrs: Successfully corrected 1 bit errors per subpage
>> [ 37.286039] mtd_nandbiterrs: Inserted biterror @ 3/7
>> [ 37.293080] mtd_nandbiterrs: rewrite page
>> [ 37.298877] mtd_nandbiterrs: read_page
>> [ 37.302531] qcom_snand 79b0000.spi: cw[0] flash:00003020 buffer:00ff0202 erased_cw:00000002
>> [ 37.305572] qcom_snand 79b0000.spi: cw[1] flash:00002020 buffer:00ff0200 erased_cw:00000002
>> [ 37.313839] qcom_snand 79b0000.spi: cw[2] flash:00001020 buffer:00ff0200 erased_cw:00000002
>> [ 37.322169] qcom_snand 79b0000.spi: cw[3] flash:00000020 buffer:00ff0200 erased_cw:00000002
>> [ 37.330498] qcom_snand 79b0000.spi: corrected:2 failed:0 bitflips:2
>> [ 37.338818] mtd_nandbiterrs: Read reported 2 corrected bit errors
>> [ 37.345078] mtd_nandbiterrs: verify_page
>> [ 37.351352] mtd_nandbiterrs: Successfully corrected 2 bit errors per subpage
>> [ 37.355310] mtd_nandbiterrs: Inserted biterror @ 5/7
>> [ 37.362352] mtd_nandbiterrs: rewrite page
>> [ 37.368094] mtd_nandbiterrs: read_page
>> [ 37.371814] qcom_snand 79b0000.spi: cw[0] flash:00003020 buffer:00ff0203 erased_cw:00000002
>> [ 37.374843] qcom_snand 79b0000.spi: cw[1] flash:00002020 buffer:00ff0200 erased_cw:00000002
>> [ 37.383111] qcom_snand 79b0000.spi: cw[2] flash:00001020 buffer:00ff0200 erased_cw:00000002
>> [ 37.391437] qcom_snand 79b0000.spi: cw[3] flash:00000020 buffer:00ff0200 erased_cw:00000002
>> [ 37.399769] qcom_snand 79b0000.spi: corrected:3 failed:0 bitflips:3
>> [ 37.408089] mtd_nandbiterrs: Read reported 3 corrected bit errors
>> [ 37.414351] mtd_nandbiterrs: verify_page
>> [ 37.420616] mtd_nandbiterrs: Successfully corrected 3 bit errors per subpage
>> [ 37.424581] mtd_nandbiterrs: Inserted biterror @ 7/7
>> [ 37.431622] mtd_nandbiterrs: rewrite page
>> [ 37.437419] mtd_nandbiterrs: read_page
>> [ 37.441072] qcom_snand 79b0000.spi: cw[0] flash:00003020 buffer:00ff0204 erased_cw:00000002
>> [ 37.444114] qcom_snand 79b0000.spi: cw[1] flash:00002020 buffer:00ff0200 erased_cw:00000002
>> [ 37.452380] qcom_snand 79b0000.spi: cw[2] flash:00001020 buffer:00ff0200 erased_cw:00000002
>> [ 37.460708] qcom_snand 79b0000.spi: cw[3] flash:00000020 buffer:00ff0200 erased_cw:00000002
>> [ 37.469047] qcom_snand 79b0000.spi: corrected:4 failed:0 bitflips:4
>> [ 37.477360] mtd_nandbiterrs: Read reported 4 corrected bit errors
>> [ 37.483621] mtd_nandbiterrs: verify_page
>> [ 37.489888] mtd_nandbiterrs: Successfully corrected 4 bit errors per subpage
>> [ 37.493852] mtd_nandbiterrs: Inserted biterror @ 8/7
>> [ 37.500893] mtd_nandbiterrs: rewrite page
>> [ 37.506636] mtd_nandbiterrs: read_page
>> [ 37.510342] qcom_snand 79b0000.spi: cw[0] flash:00003020 buffer:00ff0205 erased_cw:00000002
>> [ 37.513385] qcom_snand 79b0000.spi: cw[1] flash:00002020 buffer:00ff0200 erased_cw:00000002
>> [ 37.521652] qcom_snand 79b0000.spi: cw[2] flash:00001020 buffer:00ff0200 erased_cw:00000002
>> [ 37.529978] qcom_snand 79b0000.spi: cw[3] flash:00000020 buffer:00ff0200 erased_cw:00000002
>> [ 37.538297] qcom_snand 79b0000.spi: corrected:5 failed:0 bitflips:5
>> [ 37.546643] mtd_nandbiterrs: Read reported 5 corrected bit errors
>> [ 37.552896] mtd_nandbiterrs: verify_page
>> [ 37.559161] mtd_nandbiterrs: Successfully corrected 5 bit errors per subpage
>> [ 37.563123] mtd_nandbiterrs: Inserted biterror @ 10/7
>> [ 37.570168] mtd_nandbiterrs: rewrite page
>> [ 37.575956] mtd_nandbiterrs: read_page
>> [ 37.579702] qcom_snand 79b0000.spi: cw[0] flash:00003020 buffer:00ff0206 erased_cw:00000002
>> [ 37.582743] qcom_snand 79b0000.spi: cw[1] flash:00002020 buffer:00ff0200 erased_cw:00000002
>> [ 37.591010] qcom_snand 79b0000.spi: cw[2] flash:00001020 buffer:00ff0200 erased_cw:00000002
>> [ 37.599354] qcom_snand 79b0000.spi: cw[3] flash:00000020 buffer:00ff0200 erased_cw:00000002
>> [ 37.607655] qcom_snand 79b0000.spi: corrected:6 failed:0 bitflips:6
>> [ 37.616004] mtd_nandbiterrs: Read reported 6 corrected bit errors
>> [ 37.622249] mtd_nandbiterrs: verify_page
>> [ 37.628504] mtd_nandbiterrs: Successfully corrected 6 bit errors per subpage
>> [ 37.632497] mtd_nandbiterrs: Inserted biterror @ 12/7
>> [ 37.639524] mtd_nandbiterrs: rewrite page
>> [ 37.645353] mtd_nandbiterrs: read_page
>> [ 37.649047] qcom_snand 79b0000.spi: cw[0] flash:00003020 buffer:00ff0207 erased_cw:00000002
>> [ 37.652100] qcom_snand 79b0000.spi: cw[1] flash:00002020 buffer:00ff0200 erased_cw:00000002
>> [ 37.660367] qcom_snand 79b0000.spi: cw[2] flash:00001020 buffer:00ff0200 erased_cw:00000002
>> [ 37.668679] qcom_snand 79b0000.spi: cw[3] flash:00000020 buffer:00ff0200 erased_cw:00000002
>> [ 37.677029] qcom_snand 79b0000.spi: corrected:7 failed:0 bitflips:7
>> [ 37.685358] mtd_nandbiterrs: Read reported 7 corrected bit errors
>> [ 37.691607] mtd_nandbiterrs: verify_page
>> [ 37.697861] mtd_nandbiterrs: Successfully corrected 7 bit errors per subpage
>> [ 37.701852] mtd_nandbiterrs: Inserted biterror @ 14/7
>> [ 37.708867] mtd_nandbiterrs: rewrite page
>> [ 37.714683] mtd_nandbiterrs: read_page
>> [ 37.718397] qcom_snand 79b0000.spi: cw[0] flash:00003020 buffer:00ff0208 erased_cw:00000002
>> [ 37.721478] qcom_snand 79b0000.spi: cw[1] flash:00002020 buffer:00ff0200 erased_cw:00000002
>> [ 37.729718] qcom_snand 79b0000.spi: cw[2] flash:00001020 buffer:00ff0200 erased_cw:00000002
>> [ 37.738037] qcom_snand 79b0000.spi: cw[3] flash:00000020 buffer:00ff0200 erased_cw:00000002
>> [ 37.746433] qcom_snand 79b0000.spi: corrected:8 failed:0 bitflips:8
>> [ 37.754719] mtd_nandbiterrs: Read reported 8 corrected bit errors
>> [ 37.760972] mtd_nandbiterrs: verify_page
>> [ 37.767218] mtd_nandbiterrs: Successfully corrected 8 bit errors per subpage
>> [ 37.771214] mtd_nandbiterrs: Inserted biterror @ 17/7
>> [ 37.778225] mtd_nandbiterrs: rewrite page
>> [ 37.784054] mtd_nandbiterrs: read_page
>> [ 37.787754] qcom_snand 79b0000.spi: cw[0] flash:00003030 buffer:00ff0301 erased_cw:00000002
>> [ 37.790836] qcom_snand 79b0000.spi: cw[1] flash:00002020 buffer:00ff0200 erased_cw:00000002
>> [ 37.799076] qcom_snand 79b0000.spi: cw[2] flash:00001020 buffer:00ff0200 erased_cw:00000002
>> [ 37.807395] qcom_snand 79b0000.spi: cw[3] flash:00000020 buffer:00ff0200 erased_cw:00000002
>> [ 37.815743] qcom_snand 79b0000.spi: corrected:0 failed:1 bitflips:8
>> [ 37.824073] mtd_nandbiterrs: error: read failed at 0x0
>> [ 37.830321] mtd_nandbiterrs: After 9 biterrors per subpage, read reported error -74
>> [ 37.838993] mtd_nandbiterrs: finished successfully.
>> [ 37.843068] ==================================================
>>
>> Interestingly enough, it reports the correct number of bit errors now.
>> For me it seems, that the hardware reports the number of the corrected
>> *bytes* instead of the corrected *bits*.
>
> I doubt that, nobody counts bytes of errors.
>
> You results are surprising. I initially though in favour of a software
> bug, but then it looks even weirder than that. Alam?
I am checking with HW team, will update with details once get the input.
Thanks,
Alam.
More information about the linux-mtd
mailing list