diff mbox series

[next,2/2] spi: spi-qpic-snand: add support for 8 bits ECC strength

Message ID 20250502-qpic-snand-8bit-ecc-v1-2-95f3cd08bbc5@gmail.com
State New
Headers show
Series spi: spi-qpic-snand: enable 8 bits ECC strength support | expand

Commit Message

Gabor Juhos May 2, 2025, 7:31 p.m. UTC
Even though the hardware supports 8 bits ECC strength, but that is not
handled in the driver yet. This change adds the missing bits in order
to allow using the driver with chips which require 8 bits ECC strength.

No functional changes intended with regard to the existing 4 bits ECC
strength support.

Tested on an IPQ9574 platform using a GigaDevice GD5F2GM7REYIG chip.

Signed-off-by: Gabor Juhos <j4g8y7@gmail.com>
---
mtdtest results:

  # dmesg | grep nand
  [    0.678143] spi-nand spi0.0: GigaDevice SPI NAND was found.
  [    0.687393] spi-nand spi0.0: 256 MiB, block size: 128 KiB, page size: 2048, OOB size: 128
  # cat /proc/mtd
  dev:    size   erasesize  name
  mtd0: 10000000 00020000 "spi0.0"
  # insmod mtd_test
  # insmod mtd_speedtest dev=0
  [   63.128425]
  [   63.128452] =================================================
  [   63.128979] mtd_speedtest: MTD device: 0
  [   63.134622] mtd_speedtest: MTD device size 268435456, eraseblock size 131072, page size 2048, count of eraseblocks 2048, pages per eraseblock 64, OOB size 128
  [   63.139561] mtd_test: scanning for bad eraseblocks
  [   63.756447] mtd_test: scanned 2048 eraseblocks, 0 are bad
  [   71.085514] mtd_speedtest: testing eraseblock write speed
  [  202.745977] mtd_speedtest: eraseblock write speed is 1991 KiB/s
  [  202.746022] mtd_speedtest: testing eraseblock read speed
  [  284.104591] mtd_speedtest: eraseblock read speed is 3222 KiB/s
  [  291.405533] mtd_speedtest: testing page write speed
  [  422.516341] mtd_speedtest: page write speed is 1999 KiB/s
  [  422.516384] mtd_speedtest: testing page read speed
  [  504.144630] mtd_speedtest: page read speed is 3211 KiB/s
  [  511.476726] mtd_speedtest: testing 2 page write speed
  [  643.114443] mtd_speedtest: 2 page write speed is 1991 KiB/s
  [  643.114485] mtd_speedtest: testing 2 page read speed
  [  724.434752] mtd_speedtest: 2 page read speed is 3223 KiB/s
  [  724.434796] mtd_speedtest: Testing erase speed
  [  731.792729] mtd_speedtest: erase speed is 35648 KiB/s
  [  731.792772] mtd_speedtest: Testing 2x multi-block erase speed
  [  739.162513] mtd_speedtest: 2x multi-block erase speed is 35589 KiB/s
  [  739.162558] mtd_speedtest: Testing 4x multi-block erase speed
  [  746.486241] mtd_speedtest: 4x multi-block erase speed is 35820 KiB/s
  [  746.486287] mtd_speedtest: Testing 8x multi-block erase speed
  [  753.789683] mtd_speedtest: 8x multi-block erase speed is 35919 KiB/s
  [  753.789728] mtd_speedtest: Testing 16x multi-block erase speed
  [  761.093075] mtd_speedtest: 16x multi-block erase speed is 35920 KiB/s
  [  761.093120] mtd_speedtest: Testing 32x multi-block erase speed
  [  768.396145] mtd_speedtest: 32x multi-block erase speed is 35922 KiB/s
  [  768.396222] mtd_speedtest: Testing 64x multi-block erase speed
  [  775.699819] mtd_speedtest: 64x multi-block erase speed is 35918 KiB/s
  [  775.699863] mtd_speedtest: finished
  [  775.705259] =================================================
  # insmod mtd_readtest dev=0
  [  919.060671]
  [  919.060699] =================================================
  [  919.061226] mtd_readtest: MTD device: 0
  [  919.066957] mtd_readtest: MTD device size 268435456, eraseblock size 131072, page size 2048, count of eraseblocks 2048, pages per eraseblock 64, OOB size 128
  [  919.070556] mtd_test: scanning for bad eraseblocks
  [  919.086016] mtd_test: scanned 2048 eraseblocks, 0 are bad
  [  919.089465] mtd_readtest: testing page read
  [ 1090.778227] mtd_readtest: finished
  [ 1090.778286] =================================================
  # insmod mtd_pagetest dev=0
  [ 1216.297313]
  [ 1216.297341] =================================================
  [ 1216.297867] mtd_pagetest: MTD device: 0
  [ 1216.303509] mtd_pagetest: MTD device size 268435456, eraseblock size 131072, page size 2048, count of eraseblocks 2048, pages per eraseblock 64, OOB size 128
  [ 1216.307213] mtd_test: scanning for bad eraseblocks
  [ 1216.322680] mtd_test: scanned 2048 eraseblocks, 0 are bad
  [ 1216.326077] mtd_pagetest: erasing whole device
  [ 1223.694968] mtd_pagetest: erased 2048 eraseblocks
  [ 1223.695009] mtd_pagetest: writing whole device
  [ 1223.763930] mtd_pagetest: written up to eraseblock 0
  [ 1240.268942] mtd_pagetest: written up to eraseblock 256
  [ 1256.641498] mtd_pagetest: written up to eraseblock 512
  [ 1273.139048] mtd_pagetest: written up to eraseblock 768
  [ 1289.718929] mtd_pagetest: written up to eraseblock 1024
  [ 1306.244553] mtd_pagetest: written up to eraseblock 1280
  [ 1322.939723] mtd_pagetest: written up to eraseblock 1536
  [ 1339.246937] mtd_pagetest: written up to eraseblock 1792
  [ 1355.613729] mtd_pagetest: written 2048 eraseblocks
  [ 1355.613770] mtd_pagetest: verifying all eraseblocks
  [ 1355.854290] mtd_pagetest: verified up to eraseblock 0
  [ 1416.657733] mtd_pagetest: verified up to eraseblock 256
  [ 1477.384593] mtd_pagetest: verified up to eraseblock 512
  [ 1538.008142] mtd_pagetest: verified up to eraseblock 768
  [ 1599.080797] mtd_pagetest: verified up to eraseblock 1024
  [ 1660.775431] mtd_pagetest: verified up to eraseblock 1280
  [ 1722.177149] mtd_pagetest: verified up to eraseblock 1536
  [ 1783.090166] mtd_pagetest: verified up to eraseblock 1792
  [ 1844.450757] mtd_pagetest: verified 2048 eraseblocks
  [ 1844.450798] mtd_pagetest: crosstest
  [ 1844.455676] mtd_pagetest: reading page at 0x0
  [ 1844.458603] mtd_pagetest: reading page at 0xffff800
  [ 1844.463047] mtd_pagetest: reading page at 0x0
  [ 1844.467790] mtd_pagetest: verifying pages read at 0x0 match
  [ 1844.471636] mtd_pagetest: crosstest ok
  [ 1844.477062] mtd_pagetest: erasecrosstest
  [ 1844.480833] mtd_pagetest: erasing block 0
  [ 1844.488498] mtd_pagetest: writing 1st page of block 0
  [ 1844.489821] mtd_pagetest: reading 1st page of block 0
  [ 1844.494475] mtd_pagetest: verifying 1st page of block 0
  [ 1844.498942] mtd_pagetest: erasing block 0
  [ 1844.507505] mtd_pagetest: writing 1st page of block 0
  [ 1844.509042] mtd_pagetest: erasing block 2047
  [ 1844.516725] mtd_pagetest: reading 1st page of block 0
  [ 1844.518087] mtd_pagetest: verifying 1st page of block 0
  [ 1844.522415] mtd_pagetest: erasecrosstest ok
  [ 1844.527495] mtd_pagetest: erasetest
  [ 1844.531613] mtd_pagetest: erasing block 0
  [ 1844.538671] mtd_pagetest: writing 1st page of block 0
  [ 1844.540249] mtd_pagetest: erasing block 0
  [ 1844.547869] mtd_pagetest: reading 1st page of block 0
  [ 1844.548927] mtd_pagetest: verifying 1st page of block 0 is all 0xff
  [ 1844.553326] mtd_pagetest: erasetest ok
  [ 1844.559440] mtd_pagetest: finished with 0 errors
  [ 1844.563233] =================================================
  # insmod mtd_subpagetest dev=0
  [ 1942.429708]
  [ 1942.429736] =================================================
  [ 1942.430262] mtd_subpagetest: MTD device: 0
  [ 1942.435905] mtd_subpagetest: MTD device size 268435456, eraseblock size 131072, page size 2048, subpage size 2048, count of eraseblocks 2048, pages per eraseblock 64, OOB size 128
  [ 1942.439994] mtd_test: scanning for bad eraseblocks
  [ 1942.457111] mtd_test: scanned 2048 eraseblocks, 0 are bad
  [ 1949.824564] mtd_subpagetest: writing whole device
  [ 1949.826670] mtd_subpagetest: written up to eraseblock 0
  [ 1950.351816] mtd_subpagetest: written up to eraseblock 256
  [ 1950.875797] mtd_subpagetest: written up to eraseblock 512
  [ 1951.399912] mtd_subpagetest: written up to eraseblock 768
  [ 1951.923618] mtd_subpagetest: written up to eraseblock 1024
  [ 1952.447361] mtd_subpagetest: written up to eraseblock 1280
  [ 1952.970834] mtd_subpagetest: written up to eraseblock 1536
  [ 1953.494635] mtd_subpagetest: written up to eraseblock 1792
  [ 1954.016265] mtd_subpagetest: written 2048 eraseblocks
  [ 1954.016294] mtd_subpagetest: verifying all eraseblocks
  [ 1954.021617] mtd_subpagetest: verified up to eraseblock 0
  [ 1954.347458] mtd_subpagetest: verified up to eraseblock 256
  [ 1954.667446] mtd_subpagetest: verified up to eraseblock 512
  [ 1954.987343] mtd_subpagetest: verified up to eraseblock 768
  [ 1955.307385] mtd_subpagetest: verified up to eraseblock 1024
  [ 1955.627462] mtd_subpagetest: verified up to eraseblock 1280
  [ 1955.947277] mtd_subpagetest: verified up to eraseblock 1536
  [ 1956.266834] mtd_subpagetest: verified up to eraseblock 1792
  [ 1956.585581] mtd_subpagetest: verified 2048 eraseblocks
  [ 1963.889308] mtd_subpagetest: verifying all eraseblocks for 0xff
  [ 1963.930487] mtd_subpagetest: verified up to eraseblock 0
  [ 1974.592567] mtd_subpagetest: verified up to eraseblock 256
  [ 1985.180953] mtd_subpagetest: verified up to eraseblock 512
  [ 1995.805397] mtd_subpagetest: verified up to eraseblock 768
  [ 2006.348859] mtd_subpagetest: verified up to eraseblock 1024
  [ 2016.900530] mtd_subpagetest: verified up to eraseblock 1280
  [ 2027.447587] mtd_subpagetest: verified up to eraseblock 1536
  [ 2037.962383] mtd_subpagetest: verified up to eraseblock 1792
  [ 2048.587863] mtd_subpagetest: verified 2048 eraseblocks
  [ 2048.587906] mtd_subpagetest: writing whole device
  [ 2048.648174] mtd_subpagetest: written up to eraseblock 0
  [ 2062.643145] mtd_subpagetest: written up to eraseblock 256
  [ 2076.699015] mtd_subpagetest: written up to eraseblock 512
  [ 2091.004910] mtd_subpagetest: written up to eraseblock 768
  [ 2105.149879] mtd_subpagetest: written up to eraseblock 1024
  [ 2119.470691] mtd_subpagetest: written up to eraseblock 1280
  [ 2133.746861] mtd_subpagetest: written up to eraseblock 1536
  [ 2147.776477] mtd_subpagetest: written up to eraseblock 1792
  [ 2161.947734] mtd_subpagetest: written 2048 eraseblocks
  [ 2161.947776] mtd_subpagetest: verifying all eraseblocks
  [ 2161.986109] mtd_subpagetest: verified up to eraseblock 0
  [ 2170.818316] mtd_subpagetest: verified up to eraseblock 256
  [ 2179.596875] mtd_subpagetest: verified up to eraseblock 512
  [ 2188.405116] mtd_subpagetest: verified up to eraseblock 768
  [ 2197.188588] mtd_subpagetest: verified up to eraseblock 1024
  [ 2206.002204] mtd_subpagetest: verified up to eraseblock 1280
  [ 2214.784815] mtd_subpagetest: verified up to eraseblock 1536
  [ 2223.557141] mtd_subpagetest: verified up to eraseblock 1792
  [ 2232.472832] mtd_subpagetest: verified 2048 eraseblocks
  [ 2239.818213] mtd_subpagetest: verifying all eraseblocks for 0xff
  [ 2239.861404] mtd_subpagetest: verified up to eraseblock 0
  [ 2250.439035] mtd_subpagetest: verified up to eraseblock 256
  [ 2261.176485] mtd_subpagetest: verified up to eraseblock 512
  [ 2271.713183] mtd_subpagetest: verified up to eraseblock 768
  [ 2282.356892] mtd_subpagetest: verified up to eraseblock 1024
  [ 2292.891424] mtd_subpagetest: verified up to eraseblock 1280
  [ 2303.543110] mtd_subpagetest: verified up to eraseblock 1536
  [ 2314.116690] mtd_subpagetest: verified up to eraseblock 1792
  [ 2324.607804] mtd_subpagetest: verified 2048 eraseblocks
  [ 2324.607846] mtd_subpagetest: finished with 0 errors
  [ 2324.611859] =================================================
  # insmod mtd_oobtest dev=0
  [ 2336.159109]
  [ 2336.159138] =================================================
  [ 2336.159664] mtd_oobtest: MTD device: 0
  [ 2336.165308] mtd_oobtest: MTD device size 268435456, eraseblock size 131072, page size 2048, count of eraseblocks 2048, pages per eraseblock 64, OOB size 128
  [ 2336.169043] mtd_test: scanning for bad eraseblocks
  [ 2336.184354] mtd_test: scanned 2048 eraseblocks, 0 are bad
  [ 2336.187716] mtd_oobtest: test 1 of 5
  [ 2343.495966] mtd_oobtest: writing OOBs of whole device
  [ 2343.496073] mtd_oobtest: written up to eraseblock 0
  [ 2343.516803] mtd_oobtest: written up to eraseblock 256
  [ 2343.533527] mtd_oobtest: written up to eraseblock 512
  [ 2343.549945] mtd_oobtest: written up to eraseblock 768
  [ 2343.563666] mtd_oobtest: written up to eraseblock 1024
  [ 2343.575186] mtd_oobtest: written up to eraseblock 1280
  [ 2343.584310] mtd_oobtest: written up to eraseblock 1536
  [ 2343.593011] mtd_oobtest: written up to eraseblock 1792
  [ 2343.600847] mtd_oobtest: written 2048 eraseblocks
  [ 2343.600861] mtd_oobtest: verifying all eraseblocks
  [ 2343.604542] mtd_oobtest: verified up to eraseblock 0
  [ 2343.616606] mtd_oobtest: verified up to eraseblock 256
  [ 2343.623992] mtd_oobtest: verified up to eraseblock 512
  [ 2343.631390] mtd_oobtest: verified up to eraseblock 768
  [ 2343.638788] mtd_oobtest: verified up to eraseblock 1024
  [ 2343.646184] mtd_oobtest: verified up to eraseblock 1280
  [ 2343.653570] mtd_oobtest: verified up to eraseblock 1536
  [ 2343.660970] mtd_oobtest: verified up to eraseblock 1792
  [ 2343.668356] mtd_oobtest: verified 2048 eraseblocks
  [ 2343.668369] mtd_oobtest: test 2 of 5
  [ 2350.985635] mtd_oobtest: writing OOBs of whole device
  [ 2350.985743] mtd_oobtest: written up to eraseblock 0
  [ 2351.006445] mtd_oobtest: written up to eraseblock 256
  [ 2351.023170] mtd_oobtest: written up to eraseblock 512
  [ 2351.039645] mtd_oobtest: written up to eraseblock 768
  [ 2351.053395] mtd_oobtest: written up to eraseblock 1024
  [ 2351.064954] mtd_oobtest: written up to eraseblock 1280
  [ 2351.074144] mtd_oobtest: written up to eraseblock 1536
  [ 2351.082848] mtd_oobtest: written up to eraseblock 1792
  [ 2351.090707] mtd_oobtest: written 2048 eraseblocks
  [ 2351.090721] mtd_oobtest: verifying all eraseblocks
  [ 2351.094373] mtd_oobtest: verified up to eraseblock 0
  [ 2351.099353] mtd_oobtest: verified up to eraseblock 256
  [ 2351.104460] mtd_oobtest: verified up to eraseblock 512
  [ 2351.109437] mtd_oobtest: verified up to eraseblock 768
  [ 2351.114528] mtd_oobtest: verified up to eraseblock 1024
  [ 2351.119683] mtd_oobtest: verified up to eraseblock 1280
  [ 2351.124772] mtd_oobtest: verified up to eraseblock 1536
  [ 2351.129996] mtd_oobtest: verified up to eraseblock 1792
  [ 2351.135187] mtd_oobtest: verified 2048 eraseblocks
  [ 2351.140130] mtd_oobtest: test 3 of 5
  [ 2358.448438] mtd_oobtest: writing OOBs of whole device
  [ 2358.448546] mtd_oobtest: written up to eraseblock 0
  [ 2358.469297] mtd_oobtest: written up to eraseblock 256
  [ 2358.486095] mtd_oobtest: written up to eraseblock 512
  [ 2358.501993] mtd_oobtest: written up to eraseblock 768
  [ 2358.515473] mtd_oobtest: written up to eraseblock 1024
  [ 2358.526708] mtd_oobtest: written up to eraseblock 1280
  [ 2358.535426] mtd_oobtest: written up to eraseblock 1536
  [ 2358.544152] mtd_oobtest: written up to eraseblock 1792
  [ 2358.551732] mtd_oobtest: written 2048 eraseblocks
  [ 2358.551744] mtd_oobtest: verifying all eraseblocks
  [ 2358.555424] mtd_oobtest: verified up to eraseblock 0
  [ 2358.567572] mtd_oobtest: verified up to eraseblock 256
  [ 2358.575045] mtd_oobtest: verified up to eraseblock 512
  [ 2358.582537] mtd_oobtest: verified up to eraseblock 768
  [ 2358.590024] mtd_oobtest: verified up to eraseblock 1024
  [ 2358.597511] mtd_oobtest: verified up to eraseblock 1280
  [ 2358.604984] mtd_oobtest: verified up to eraseblock 1536
  [ 2358.612468] mtd_oobtest: verified up to eraseblock 1792
  [ 2358.619923] mtd_oobtest: verified 2048 eraseblocks
  [ 2358.619936] mtd_oobtest: test 4 of 5
  [ 2365.924669] mtd_oobtest: attempting to start write past end of OOB
  [ 2365.924711] mtd_oobtest: an error is expected...
  [ 2365.929795] mtd_oobtest: error occurred as expected
  [ 2365.934520] mtd_oobtest: attempting to start read past end of OOB
  [ 2365.939150] mtd_oobtest: an error is expected...
  [ 2365.945371] mtd_oobtest: error occurred as expected
  [ 2365.950087] mtd_oobtest: attempting to write past end of device
  [ 2365.954660] mtd_oobtest: an error is expected...
  [ 2365.960623] mtd_oobtest: error occurred as expected
  [ 2365.965422] mtd_oobtest: attempting to read past end of device
  [ 2365.970064] mtd_oobtest: an error is expected...
  [ 2365.975925] mtd_oobtest: error occurred as expected
  [ 2365.984256] mtd_oobtest: attempting to write past end of device
  [ 2365.985300] mtd_oobtest: an error is expected...
  [ 2365.991242] mtd_oobtest: error: wrote past end of device
  [ 2365.996064] mtd_oobtest: attempting to read past end of device
  [ 2366.001389] mtd_oobtest: an error is expected...
  [ 2366.007028] mtd_oobtest: error: read past end of device
  [ 2366.011776] mtd_oobtest: test 5 of 5
  [ 2373.317991] mtd_oobtest: writing OOBs of whole device
  [ 2373.318034] mtd_oobtest: written up to eraseblock 0
  [ 2373.322028] mtd_oobtest: written up to eraseblock 0
  [ 2373.327465] mtd_oobtest: written up to eraseblock 256
  [ 2373.331576] mtd_oobtest: written up to eraseblock 256
  [ 2373.337501] mtd_oobtest: written up to eraseblock 512
  [ 2373.341820] mtd_oobtest: written up to eraseblock 512
  [ 2373.347566] mtd_oobtest: written up to eraseblock 768
  [ 2373.351888] mtd_oobtest: written up to eraseblock 768
  [ 2373.357634] mtd_oobtest: written up to eraseblock 1024
  [ 2373.361957] mtd_oobtest: written up to eraseblock 1024
  [ 2373.367710] mtd_oobtest: written up to eraseblock 1280
  [ 2373.372113] mtd_oobtest: written up to eraseblock 1280
  [ 2373.377841] mtd_oobtest: written up to eraseblock 1536
  [ 2373.382355] mtd_oobtest: written up to eraseblock 1536
  [ 2373.387962] mtd_oobtest: written up to eraseblock 1792
  [ 2373.392597] mtd_oobtest: written up to eraseblock 1792
  [ 2373.398190] mtd_oobtest: written 2047 eraseblocks
  [ 2373.402838] mtd_oobtest: verifying all eraseblocks
  [ 2373.407629] mtd_oobtest: verified up to eraseblock 0
  [ 2373.412483] mtd_oobtest: verified up to eraseblock 256
  [ 2373.417625] mtd_oobtest: verified up to eraseblock 512
  [ 2373.422518] mtd_oobtest: verified up to eraseblock 768
  [ 2373.427650] mtd_oobtest: verified up to eraseblock 1024
  [ 2373.432760] mtd_oobtest: verified up to eraseblock 1280
  [ 2373.437912] mtd_oobtest: verified up to eraseblock 1536
  [ 2373.443091] mtd_oobtest: verified up to eraseblock 1792
  [ 2373.448337] mtd_oobtest: verified 2047 eraseblocks
  [ 2373.453358] mtd_oobtest: finished with 2 errors
  [ 2373.458250] =================================================

Note: the two errors are present even even without this patch when testing
the driver with a flash chip requiring 4 bits ECC strength.

  # insmod mtd_stresstest dev=0
  [ 2383.256453]
  [ 2383.256482] =================================================
  [ 2383.257008] mtd_stresstest: MTD device: 0
  [ 2383.262650] mtd_stresstest: MTD device size 268435456, eraseblock size 131072, page size 2048, count of eraseblocks 2048, pages per eraseblock 64, OOB size 128
  [ 2383.268254] mtd_test: scanning for bad eraseblocks
  [ 2383.281992] mtd_test: scanned 2048 eraseblocks, 0 are bad
  [ 2383.285565] mtd_stresstest: doing operations
  [ 2383.291047] mtd_stresstest: 0 operations done
  [ 2427.841267] mtd_stresstest: 1024 operations done
  [ 2471.142229] mtd_stresstest: 2048 operations done
  [ 2514.405277] mtd_stresstest: 3072 operations done
  [ 2555.451926] mtd_stresstest: 4096 operations done
  [ 2598.107133] mtd_stresstest: 5120 operations done
  [ 2639.936952] mtd_stresstest: 6144 operations done
  [ 2680.724751] mtd_stresstest: 7168 operations done
  [ 2720.344163] mtd_stresstest: 8192 operations done
  [ 2761.645640] mtd_stresstest: 9216 operations done
  [ 2791.760534] mtd_stresstest: finished, 10000 operations done
  [ 2791.760817] =================================================
  #
---
 drivers/spi/spi-qpic-snand.c | 21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)

Comments

Md Sadre Alam May 5, 2025, 11:17 a.m. UTC | #1
On 5/3/2025 1:01 AM, Gabor Juhos wrote:
> Even though the hardware supports 8 bits ECC strength, but that is not
> handled in the driver yet. This change adds the missing bits in order
> to allow using the driver with chips which require 8 bits ECC strength.
> 
> No functional changes intended with regard to the existing 4 bits ECC
> strength support.
> 
> Tested on an IPQ9574 platform using a GigaDevice GD5F2GM7REYIG chip.
> 
> Signed-off-by: Gabor Juhos <j4g8y7@gmail.com>
> ---
> mtdtest results:
> 
>    # dmesg | grep nand
>    [    0.678143] spi-nand spi0.0: GigaDevice SPI NAND was found.
>    [    0.687393] spi-nand spi0.0: 256 MiB, block size: 128 KiB, page size: 2048, OOB size: 128
>    # cat /proc/mtd
>    dev:    size   erasesize  name
>    mtd0: 10000000 00020000 "spi0.0"
>    # insmod mtd_test
>    # insmod mtd_speedtest dev=0
>    [   63.128425]
>    [   63.128452] =================================================
>    [   63.128979] mtd_speedtest: MTD device: 0
>    [   63.134622] mtd_speedtest: MTD device size 268435456, eraseblock size 131072, page size 2048, count of eraseblocks 2048, pages per eraseblock 64, OOB size 128
>    [   63.139561] mtd_test: scanning for bad eraseblocks
>    [   63.756447] mtd_test: scanned 2048 eraseblocks, 0 are bad
>    [   71.085514] mtd_speedtest: testing eraseblock write speed
>    [  202.745977] mtd_speedtest: eraseblock write speed is 1991 KiB/s
>    [  202.746022] mtd_speedtest: testing eraseblock read speed
>    [  284.104591] mtd_speedtest: eraseblock read speed is 3222 KiB/s
>    [  291.405533] mtd_speedtest: testing page write speed
>    [  422.516341] mtd_speedtest: page write speed is 1999 KiB/s
>    [  422.516384] mtd_speedtest: testing page read speed
>    [  504.144630] mtd_speedtest: page read speed is 3211 KiB/s
>    [  511.476726] mtd_speedtest: testing 2 page write speed
>    [  643.114443] mtd_speedtest: 2 page write speed is 1991 KiB/s
>    [  643.114485] mtd_speedtest: testing 2 page read speed
>    [  724.434752] mtd_speedtest: 2 page read speed is 3223 KiB/s
>    [  724.434796] mtd_speedtest: Testing erase speed
>    [  731.792729] mtd_speedtest: erase speed is 35648 KiB/s
>    [  731.792772] mtd_speedtest: Testing 2x multi-block erase speed
>    [  739.162513] mtd_speedtest: 2x multi-block erase speed is 35589 KiB/s
>    [  739.162558] mtd_speedtest: Testing 4x multi-block erase speed
>    [  746.486241] mtd_speedtest: 4x multi-block erase speed is 35820 KiB/s
>    [  746.486287] mtd_speedtest: Testing 8x multi-block erase speed
>    [  753.789683] mtd_speedtest: 8x multi-block erase speed is 35919 KiB/s
>    [  753.789728] mtd_speedtest: Testing 16x multi-block erase speed
>    [  761.093075] mtd_speedtest: 16x multi-block erase speed is 35920 KiB/s
>    [  761.093120] mtd_speedtest: Testing 32x multi-block erase speed
>    [  768.396145] mtd_speedtest: 32x multi-block erase speed is 35922 KiB/s
>    [  768.396222] mtd_speedtest: Testing 64x multi-block erase speed
>    [  775.699819] mtd_speedtest: 64x multi-block erase speed is 35918 KiB/s
>    [  775.699863] mtd_speedtest: finished
>    [  775.705259] =================================================
>    # insmod mtd_readtest dev=0
>    [  919.060671]
>    [  919.060699] =================================================
>    [  919.061226] mtd_readtest: MTD device: 0
>    [  919.066957] mtd_readtest: MTD device size 268435456, eraseblock size 131072, page size 2048, count of eraseblocks 2048, pages per eraseblock 64, OOB size 128
>    [  919.070556] mtd_test: scanning for bad eraseblocks
>    [  919.086016] mtd_test: scanned 2048 eraseblocks, 0 are bad
>    [  919.089465] mtd_readtest: testing page read
>    [ 1090.778227] mtd_readtest: finished
>    [ 1090.778286] =================================================
>    # insmod mtd_pagetest dev=0
>    [ 1216.297313]
>    [ 1216.297341] =================================================
>    [ 1216.297867] mtd_pagetest: MTD device: 0
>    [ 1216.303509] mtd_pagetest: MTD device size 268435456, eraseblock size 131072, page size 2048, count of eraseblocks 2048, pages per eraseblock 64, OOB size 128
>    [ 1216.307213] mtd_test: scanning for bad eraseblocks
>    [ 1216.322680] mtd_test: scanned 2048 eraseblocks, 0 are bad
>    [ 1216.326077] mtd_pagetest: erasing whole device
>    [ 1223.694968] mtd_pagetest: erased 2048 eraseblocks
>    [ 1223.695009] mtd_pagetest: writing whole device
>    [ 1223.763930] mtd_pagetest: written up to eraseblock 0
>    [ 1240.268942] mtd_pagetest: written up to eraseblock 256
>    [ 1256.641498] mtd_pagetest: written up to eraseblock 512
>    [ 1273.139048] mtd_pagetest: written up to eraseblock 768
>    [ 1289.718929] mtd_pagetest: written up to eraseblock 1024
>    [ 1306.244553] mtd_pagetest: written up to eraseblock 1280
>    [ 1322.939723] mtd_pagetest: written up to eraseblock 1536
>    [ 1339.246937] mtd_pagetest: written up to eraseblock 1792
>    [ 1355.613729] mtd_pagetest: written 2048 eraseblocks
>    [ 1355.613770] mtd_pagetest: verifying all eraseblocks
>    [ 1355.854290] mtd_pagetest: verified up to eraseblock 0
>    [ 1416.657733] mtd_pagetest: verified up to eraseblock 256
>    [ 1477.384593] mtd_pagetest: verified up to eraseblock 512
>    [ 1538.008142] mtd_pagetest: verified up to eraseblock 768
>    [ 1599.080797] mtd_pagetest: verified up to eraseblock 1024
>    [ 1660.775431] mtd_pagetest: verified up to eraseblock 1280
>    [ 1722.177149] mtd_pagetest: verified up to eraseblock 1536
>    [ 1783.090166] mtd_pagetest: verified up to eraseblock 1792
>    [ 1844.450757] mtd_pagetest: verified 2048 eraseblocks
>    [ 1844.450798] mtd_pagetest: crosstest
>    [ 1844.455676] mtd_pagetest: reading page at 0x0
>    [ 1844.458603] mtd_pagetest: reading page at 0xffff800
>    [ 1844.463047] mtd_pagetest: reading page at 0x0
>    [ 1844.467790] mtd_pagetest: verifying pages read at 0x0 match
>    [ 1844.471636] mtd_pagetest: crosstest ok
>    [ 1844.477062] mtd_pagetest: erasecrosstest
>    [ 1844.480833] mtd_pagetest: erasing block 0
>    [ 1844.488498] mtd_pagetest: writing 1st page of block 0
>    [ 1844.489821] mtd_pagetest: reading 1st page of block 0
>    [ 1844.494475] mtd_pagetest: verifying 1st page of block 0
>    [ 1844.498942] mtd_pagetest: erasing block 0
>    [ 1844.507505] mtd_pagetest: writing 1st page of block 0
>    [ 1844.509042] mtd_pagetest: erasing block 2047
>    [ 1844.516725] mtd_pagetest: reading 1st page of block 0
>    [ 1844.518087] mtd_pagetest: verifying 1st page of block 0
>    [ 1844.522415] mtd_pagetest: erasecrosstest ok
>    [ 1844.527495] mtd_pagetest: erasetest
>    [ 1844.531613] mtd_pagetest: erasing block 0
>    [ 1844.538671] mtd_pagetest: writing 1st page of block 0
>    [ 1844.540249] mtd_pagetest: erasing block 0
>    [ 1844.547869] mtd_pagetest: reading 1st page of block 0
>    [ 1844.548927] mtd_pagetest: verifying 1st page of block 0 is all 0xff
>    [ 1844.553326] mtd_pagetest: erasetest ok
>    [ 1844.559440] mtd_pagetest: finished with 0 errors
>    [ 1844.563233] =================================================
>    # insmod mtd_subpagetest dev=0
>    [ 1942.429708]
>    [ 1942.429736] =================================================
>    [ 1942.430262] mtd_subpagetest: MTD device: 0
>    [ 1942.435905] mtd_subpagetest: MTD device size 268435456, eraseblock size 131072, page size 2048, subpage size 2048, count of eraseblocks 2048, pages per eraseblock 64, OOB size 128
>    [ 1942.439994] mtd_test: scanning for bad eraseblocks
>    [ 1942.457111] mtd_test: scanned 2048 eraseblocks, 0 are bad
>    [ 1949.824564] mtd_subpagetest: writing whole device
>    [ 1949.826670] mtd_subpagetest: written up to eraseblock 0
>    [ 1950.351816] mtd_subpagetest: written up to eraseblock 256
>    [ 1950.875797] mtd_subpagetest: written up to eraseblock 512
>    [ 1951.399912] mtd_subpagetest: written up to eraseblock 768
>    [ 1951.923618] mtd_subpagetest: written up to eraseblock 1024
>    [ 1952.447361] mtd_subpagetest: written up to eraseblock 1280
>    [ 1952.970834] mtd_subpagetest: written up to eraseblock 1536
>    [ 1953.494635] mtd_subpagetest: written up to eraseblock 1792
>    [ 1954.016265] mtd_subpagetest: written 2048 eraseblocks
>    [ 1954.016294] mtd_subpagetest: verifying all eraseblocks
>    [ 1954.021617] mtd_subpagetest: verified up to eraseblock 0
>    [ 1954.347458] mtd_subpagetest: verified up to eraseblock 256
>    [ 1954.667446] mtd_subpagetest: verified up to eraseblock 512
>    [ 1954.987343] mtd_subpagetest: verified up to eraseblock 768
>    [ 1955.307385] mtd_subpagetest: verified up to eraseblock 1024
>    [ 1955.627462] mtd_subpagetest: verified up to eraseblock 1280
>    [ 1955.947277] mtd_subpagetest: verified up to eraseblock 1536
>    [ 1956.266834] mtd_subpagetest: verified up to eraseblock 1792
>    [ 1956.585581] mtd_subpagetest: verified 2048 eraseblocks
>    [ 1963.889308] mtd_subpagetest: verifying all eraseblocks for 0xff
>    [ 1963.930487] mtd_subpagetest: verified up to eraseblock 0
>    [ 1974.592567] mtd_subpagetest: verified up to eraseblock 256
>    [ 1985.180953] mtd_subpagetest: verified up to eraseblock 512
>    [ 1995.805397] mtd_subpagetest: verified up to eraseblock 768
>    [ 2006.348859] mtd_subpagetest: verified up to eraseblock 1024
>    [ 2016.900530] mtd_subpagetest: verified up to eraseblock 1280
>    [ 2027.447587] mtd_subpagetest: verified up to eraseblock 1536
>    [ 2037.962383] mtd_subpagetest: verified up to eraseblock 1792
>    [ 2048.587863] mtd_subpagetest: verified 2048 eraseblocks
>    [ 2048.587906] mtd_subpagetest: writing whole device
>    [ 2048.648174] mtd_subpagetest: written up to eraseblock 0
>    [ 2062.643145] mtd_subpagetest: written up to eraseblock 256
>    [ 2076.699015] mtd_subpagetest: written up to eraseblock 512
>    [ 2091.004910] mtd_subpagetest: written up to eraseblock 768
>    [ 2105.149879] mtd_subpagetest: written up to eraseblock 1024
>    [ 2119.470691] mtd_subpagetest: written up to eraseblock 1280
>    [ 2133.746861] mtd_subpagetest: written up to eraseblock 1536
>    [ 2147.776477] mtd_subpagetest: written up to eraseblock 1792
>    [ 2161.947734] mtd_subpagetest: written 2048 eraseblocks
>    [ 2161.947776] mtd_subpagetest: verifying all eraseblocks
>    [ 2161.986109] mtd_subpagetest: verified up to eraseblock 0
>    [ 2170.818316] mtd_subpagetest: verified up to eraseblock 256
>    [ 2179.596875] mtd_subpagetest: verified up to eraseblock 512
>    [ 2188.405116] mtd_subpagetest: verified up to eraseblock 768
>    [ 2197.188588] mtd_subpagetest: verified up to eraseblock 1024
>    [ 2206.002204] mtd_subpagetest: verified up to eraseblock 1280
>    [ 2214.784815] mtd_subpagetest: verified up to eraseblock 1536
>    [ 2223.557141] mtd_subpagetest: verified up to eraseblock 1792
>    [ 2232.472832] mtd_subpagetest: verified 2048 eraseblocks
>    [ 2239.818213] mtd_subpagetest: verifying all eraseblocks for 0xff
>    [ 2239.861404] mtd_subpagetest: verified up to eraseblock 0
>    [ 2250.439035] mtd_subpagetest: verified up to eraseblock 256
>    [ 2261.176485] mtd_subpagetest: verified up to eraseblock 512
>    [ 2271.713183] mtd_subpagetest: verified up to eraseblock 768
>    [ 2282.356892] mtd_subpagetest: verified up to eraseblock 1024
>    [ 2292.891424] mtd_subpagetest: verified up to eraseblock 1280
>    [ 2303.543110] mtd_subpagetest: verified up to eraseblock 1536
>    [ 2314.116690] mtd_subpagetest: verified up to eraseblock 1792
>    [ 2324.607804] mtd_subpagetest: verified 2048 eraseblocks
>    [ 2324.607846] mtd_subpagetest: finished with 0 errors
>    [ 2324.611859] =================================================
>    # insmod mtd_oobtest dev=0
>    [ 2336.159109]
>    [ 2336.159138] =================================================
>    [ 2336.159664] mtd_oobtest: MTD device: 0
>    [ 2336.165308] mtd_oobtest: MTD device size 268435456, eraseblock size 131072, page size 2048, count of eraseblocks 2048, pages per eraseblock 64, OOB size 128
>    [ 2336.169043] mtd_test: scanning for bad eraseblocks
>    [ 2336.184354] mtd_test: scanned 2048 eraseblocks, 0 are bad
>    [ 2336.187716] mtd_oobtest: test 1 of 5
>    [ 2343.495966] mtd_oobtest: writing OOBs of whole device
>    [ 2343.496073] mtd_oobtest: written up to eraseblock 0
>    [ 2343.516803] mtd_oobtest: written up to eraseblock 256
>    [ 2343.533527] mtd_oobtest: written up to eraseblock 512
>    [ 2343.549945] mtd_oobtest: written up to eraseblock 768
>    [ 2343.563666] mtd_oobtest: written up to eraseblock 1024
>    [ 2343.575186] mtd_oobtest: written up to eraseblock 1280
>    [ 2343.584310] mtd_oobtest: written up to eraseblock 1536
>    [ 2343.593011] mtd_oobtest: written up to eraseblock 1792
>    [ 2343.600847] mtd_oobtest: written 2048 eraseblocks
>    [ 2343.600861] mtd_oobtest: verifying all eraseblocks
>    [ 2343.604542] mtd_oobtest: verified up to eraseblock 0
>    [ 2343.616606] mtd_oobtest: verified up to eraseblock 256
>    [ 2343.623992] mtd_oobtest: verified up to eraseblock 512
>    [ 2343.631390] mtd_oobtest: verified up to eraseblock 768
>    [ 2343.638788] mtd_oobtest: verified up to eraseblock 1024
>    [ 2343.646184] mtd_oobtest: verified up to eraseblock 1280
>    [ 2343.653570] mtd_oobtest: verified up to eraseblock 1536
>    [ 2343.660970] mtd_oobtest: verified up to eraseblock 1792
>    [ 2343.668356] mtd_oobtest: verified 2048 eraseblocks
>    [ 2343.668369] mtd_oobtest: test 2 of 5
>    [ 2350.985635] mtd_oobtest: writing OOBs of whole device
>    [ 2350.985743] mtd_oobtest: written up to eraseblock 0
>    [ 2351.006445] mtd_oobtest: written up to eraseblock 256
>    [ 2351.023170] mtd_oobtest: written up to eraseblock 512
>    [ 2351.039645] mtd_oobtest: written up to eraseblock 768
>    [ 2351.053395] mtd_oobtest: written up to eraseblock 1024
>    [ 2351.064954] mtd_oobtest: written up to eraseblock 1280
>    [ 2351.074144] mtd_oobtest: written up to eraseblock 1536
>    [ 2351.082848] mtd_oobtest: written up to eraseblock 1792
>    [ 2351.090707] mtd_oobtest: written 2048 eraseblocks
>    [ 2351.090721] mtd_oobtest: verifying all eraseblocks
>    [ 2351.094373] mtd_oobtest: verified up to eraseblock 0
>    [ 2351.099353] mtd_oobtest: verified up to eraseblock 256
>    [ 2351.104460] mtd_oobtest: verified up to eraseblock 512
>    [ 2351.109437] mtd_oobtest: verified up to eraseblock 768
>    [ 2351.114528] mtd_oobtest: verified up to eraseblock 1024
>    [ 2351.119683] mtd_oobtest: verified up to eraseblock 1280
>    [ 2351.124772] mtd_oobtest: verified up to eraseblock 1536
>    [ 2351.129996] mtd_oobtest: verified up to eraseblock 1792
>    [ 2351.135187] mtd_oobtest: verified 2048 eraseblocks
>    [ 2351.140130] mtd_oobtest: test 3 of 5
>    [ 2358.448438] mtd_oobtest: writing OOBs of whole device
>    [ 2358.448546] mtd_oobtest: written up to eraseblock 0
>    [ 2358.469297] mtd_oobtest: written up to eraseblock 256
>    [ 2358.486095] mtd_oobtest: written up to eraseblock 512
>    [ 2358.501993] mtd_oobtest: written up to eraseblock 768
>    [ 2358.515473] mtd_oobtest: written up to eraseblock 1024
>    [ 2358.526708] mtd_oobtest: written up to eraseblock 1280
>    [ 2358.535426] mtd_oobtest: written up to eraseblock 1536
>    [ 2358.544152] mtd_oobtest: written up to eraseblock 1792
>    [ 2358.551732] mtd_oobtest: written 2048 eraseblocks
>    [ 2358.551744] mtd_oobtest: verifying all eraseblocks
>    [ 2358.555424] mtd_oobtest: verified up to eraseblock 0
>    [ 2358.567572] mtd_oobtest: verified up to eraseblock 256
>    [ 2358.575045] mtd_oobtest: verified up to eraseblock 512
>    [ 2358.582537] mtd_oobtest: verified up to eraseblock 768
>    [ 2358.590024] mtd_oobtest: verified up to eraseblock 1024
>    [ 2358.597511] mtd_oobtest: verified up to eraseblock 1280
>    [ 2358.604984] mtd_oobtest: verified up to eraseblock 1536
>    [ 2358.612468] mtd_oobtest: verified up to eraseblock 1792
>    [ 2358.619923] mtd_oobtest: verified 2048 eraseblocks
>    [ 2358.619936] mtd_oobtest: test 4 of 5
>    [ 2365.924669] mtd_oobtest: attempting to start write past end of OOB
>    [ 2365.924711] mtd_oobtest: an error is expected...
>    [ 2365.929795] mtd_oobtest: error occurred as expected
>    [ 2365.934520] mtd_oobtest: attempting to start read past end of OOB
>    [ 2365.939150] mtd_oobtest: an error is expected...
>    [ 2365.945371] mtd_oobtest: error occurred as expected
>    [ 2365.950087] mtd_oobtest: attempting to write past end of device
>    [ 2365.954660] mtd_oobtest: an error is expected...
>    [ 2365.960623] mtd_oobtest: error occurred as expected
>    [ 2365.965422] mtd_oobtest: attempting to read past end of device
>    [ 2365.970064] mtd_oobtest: an error is expected...
>    [ 2365.975925] mtd_oobtest: error occurred as expected
>    [ 2365.984256] mtd_oobtest: attempting to write past end of device
>    [ 2365.985300] mtd_oobtest: an error is expected...
>    [ 2365.991242] mtd_oobtest: error: wrote past end of device
>    [ 2365.996064] mtd_oobtest: attempting to read past end of device
>    [ 2366.001389] mtd_oobtest: an error is expected...
>    [ 2366.007028] mtd_oobtest: error: read past end of device
>    [ 2366.011776] mtd_oobtest: test 5 of 5
>    [ 2373.317991] mtd_oobtest: writing OOBs of whole device
>    [ 2373.318034] mtd_oobtest: written up to eraseblock 0
>    [ 2373.322028] mtd_oobtest: written up to eraseblock 0
>    [ 2373.327465] mtd_oobtest: written up to eraseblock 256
>    [ 2373.331576] mtd_oobtest: written up to eraseblock 256
>    [ 2373.337501] mtd_oobtest: written up to eraseblock 512
>    [ 2373.341820] mtd_oobtest: written up to eraseblock 512
>    [ 2373.347566] mtd_oobtest: written up to eraseblock 768
>    [ 2373.351888] mtd_oobtest: written up to eraseblock 768
>    [ 2373.357634] mtd_oobtest: written up to eraseblock 1024
>    [ 2373.361957] mtd_oobtest: written up to eraseblock 1024
>    [ 2373.367710] mtd_oobtest: written up to eraseblock 1280
>    [ 2373.372113] mtd_oobtest: written up to eraseblock 1280
>    [ 2373.377841] mtd_oobtest: written up to eraseblock 1536
>    [ 2373.382355] mtd_oobtest: written up to eraseblock 1536
>    [ 2373.387962] mtd_oobtest: written up to eraseblock 1792
>    [ 2373.392597] mtd_oobtest: written up to eraseblock 1792
>    [ 2373.398190] mtd_oobtest: written 2047 eraseblocks
>    [ 2373.402838] mtd_oobtest: verifying all eraseblocks
>    [ 2373.407629] mtd_oobtest: verified up to eraseblock 0
>    [ 2373.412483] mtd_oobtest: verified up to eraseblock 256
>    [ 2373.417625] mtd_oobtest: verified up to eraseblock 512
>    [ 2373.422518] mtd_oobtest: verified up to eraseblock 768
>    [ 2373.427650] mtd_oobtest: verified up to eraseblock 1024
>    [ 2373.432760] mtd_oobtest: verified up to eraseblock 1280
>    [ 2373.437912] mtd_oobtest: verified up to eraseblock 1536
>    [ 2373.443091] mtd_oobtest: verified up to eraseblock 1792
>    [ 2373.448337] mtd_oobtest: verified 2047 eraseblocks
>    [ 2373.453358] mtd_oobtest: finished with 2 errors
>    [ 2373.458250] =================================================
> 
> Note: the two errors are present even even without this patch when testing
> the driver with a flash chip requiring 4 bits ECC strength.
> 
>    # insmod mtd_stresstest dev=0
>    [ 2383.256453]
>    [ 2383.256482] =================================================
>    [ 2383.257008] mtd_stresstest: MTD device: 0
>    [ 2383.262650] mtd_stresstest: MTD device size 268435456, eraseblock size 131072, page size 2048, count of eraseblocks 2048, pages per eraseblock 64, OOB size 128
>    [ 2383.268254] mtd_test: scanning for bad eraseblocks
>    [ 2383.281992] mtd_test: scanned 2048 eraseblocks, 0 are bad
>    [ 2383.285565] mtd_stresstest: doing operations
>    [ 2383.291047] mtd_stresstest: 0 operations done
>    [ 2427.841267] mtd_stresstest: 1024 operations done
>    [ 2471.142229] mtd_stresstest: 2048 operations done
>    [ 2514.405277] mtd_stresstest: 3072 operations done
>    [ 2555.451926] mtd_stresstest: 4096 operations done
>    [ 2598.107133] mtd_stresstest: 5120 operations done
>    [ 2639.936952] mtd_stresstest: 6144 operations done
>    [ 2680.724751] mtd_stresstest: 7168 operations done
>    [ 2720.344163] mtd_stresstest: 8192 operations done
>    [ 2761.645640] mtd_stresstest: 9216 operations done
>    [ 2791.760534] mtd_stresstest: finished, 10000 operations done
>    [ 2791.760817] =================================================
>    #
Could you please run biterror test "mtd_nandbiterrs" with the same 
device, since you are adding 8-bit ECC support.

Regards,
Alam.
Gabor Juhos May 5, 2025, 1:21 p.m. UTC | #2
2025. 05. 05. 13:17 keltezéssel, Md Sadre Alam írta:
> 
> 

[...]

>>    [ 2720.344163] mtd_stresstest: 8192 operations done
>>    [ 2761.645640] mtd_stresstest: 9216 operations done
>>    [ 2791.760534] mtd_stresstest: finished, 10000 operations done
>>    [ 2791.760817] =================================================
>>    #
> Could you please run biterror test "mtd_nandbiterrs" with the same device, since
> you are adding 8-bit ECC support.

Sure, here is the result:

# insmod mtd_test
# for i in $(seq 0 4); do insmod mtd_nandbiterrs; done
[   45.405610]
[   45.405638] ==================================================
[   45.406164] mtd_nandbiterrs: MTD device: 0
[   45.411807] mtd_nandbiterrs: MTD device size 268435456, eraseblock=131072,
page=2048, oob=128
[   45.415990] mtd_nandbiterrs: Device uses 1 subpages of 2048 bytes
[   45.424495] mtd_nandbiterrs: Using page=0, offset=0, eraseblock=0
[   45.434686] mtd_nandbiterrs: incremental biterrors test
[   45.436653] mtd_nandbiterrs: write_page
[   45.442634] mtd_nandbiterrs: rewrite page
[   45.446408] mtd_nandbiterrs: read_page
[   45.450346] mtd_nandbiterrs: verify_page
[   45.453320] mtd_nandbiterrs: Successfully corrected 0 bit errors per subpage
[   45.457405] mtd_nandbiterrs: Inserted biterror @ 0/5
[   45.464431] mtd_nandbiterrs: rewrite page
[   45.470216] mtd_nandbiterrs: read_page
[   45.473852] mtd_nandbiterrs: Read reported 1 corrected bit errors
[   45.476909] mtd_nandbiterrs: verify_page
[   45.483090] mtd_nandbiterrs: Successfully corrected 1 bit errors per subpage
[   45.487098] mtd_nandbiterrs: Inserted biterror @ 0/2
[   45.494111] mtd_nandbiterrs: rewrite page
[   45.499850] mtd_nandbiterrs: read_page
[   45.503557] mtd_nandbiterrs: Read reported 1 corrected bit errors
[   45.506597] mtd_nandbiterrs: verify_page
[   45.512777] mtd_nandbiterrs: Successfully corrected 2 bit errors per subpage
[   45.516768] mtd_nandbiterrs: Inserted biterror @ 0/0
[   45.523810] mtd_nandbiterrs: rewrite page
[   45.529586] mtd_nandbiterrs: read_page
[   45.533224] mtd_nandbiterrs: Read reported 1 corrected bit errors
[   45.536305] mtd_nandbiterrs: verify_page
[   45.542464] mtd_nandbiterrs: Successfully corrected 3 bit errors per subpage
[   45.546457] mtd_nandbiterrs: Inserted biterror @ 1/7
[   45.553470] mtd_nandbiterrs: rewrite page
[   45.559244] mtd_nandbiterrs: read_page
[   45.562914] mtd_nandbiterrs: Read reported 2 corrected bit errors
[   45.565991] mtd_nandbiterrs: verify_page
[   45.572153] mtd_nandbiterrs: Successfully corrected 4 bit errors per subpage
[   45.576142] mtd_nandbiterrs: Inserted biterror @ 1/5
[   45.583158] mtd_nandbiterrs: rewrite page
[   45.588927] mtd_nandbiterrs: read_page
[   45.592599] mtd_nandbiterrs: Read reported 2 corrected bit errors
[   45.595680] mtd_nandbiterrs: verify_page
[   45.601840] mtd_nandbiterrs: Successfully corrected 5 bit errors per subpage
[   45.605831] mtd_nandbiterrs: Inserted biterror @ 1/2
[   45.612846] mtd_nandbiterrs: rewrite page
[   45.618618] mtd_nandbiterrs: read_page
[   45.622286] mtd_nandbiterrs: Read reported 2 corrected bit errors
[   45.625434] mtd_nandbiterrs: verify_page
[   45.631528] mtd_nandbiterrs: Successfully corrected 6 bit errors per subpage
[   45.635517] mtd_nandbiterrs: Inserted biterror @ 1/0
[   45.642533] mtd_nandbiterrs: rewrite page
[   45.648303] mtd_nandbiterrs: read_page
[   45.651975] mtd_nandbiterrs: Read reported 2 corrected bit errors
[   45.655055] mtd_nandbiterrs: verify_page
[   45.661215] mtd_nandbiterrs: Successfully corrected 7 bit errors per subpage
[   45.665207] mtd_nandbiterrs: Inserted biterror @ 2/6
[   45.672221] mtd_nandbiterrs: rewrite page
[   45.677987] mtd_nandbiterrs: read_page
[   45.681663] mtd_nandbiterrs: Read reported 3 corrected bit errors
[   45.684741] mtd_nandbiterrs: verify_page
[   45.690902] mtd_nandbiterrs: Successfully corrected 8 bit errors per subpage
[   45.694892] mtd_nandbiterrs: Inserted biterror @ 2/5
[   45.701908] mtd_nandbiterrs: rewrite page
[   45.707678] mtd_nandbiterrs: read_page
[   45.711351] mtd_nandbiterrs: error: read failed at 0x0
[   45.714431] mtd_nandbiterrs: After 9 biterrors per subpage, read reported
error -74
[   45.722975] mtd_nandbiterrs: finished successfully.
[   45.727101] ==================================================
[   46.200485]
[   46.200512] ==================================================
[   46.201039] mtd_nandbiterrs: MTD device: 0
[   46.206751] mtd_nandbiterrs: MTD device size 268435456, eraseblock=131072,
page=2048, oob=128
[   46.210763] mtd_nandbiterrs: Device uses 1 subpages of 2048 bytes
[   46.219377] mtd_nandbiterrs: Using page=0, offset=0, eraseblock=0
[   46.228941] mtd_nandbiterrs: incremental biterrors test
[   46.231522] mtd_nandbiterrs: write_page
[   46.237524] mtd_nandbiterrs: rewrite page
[   46.241199] mtd_nandbiterrs: read_page
[   46.245175] mtd_nandbiterrs: verify_page
[   46.248195] mtd_nandbiterrs: Successfully corrected 0 bit errors per subpage
[   46.252254] mtd_nandbiterrs: Inserted biterror @ 0/5
[   46.259317] mtd_nandbiterrs: rewrite page
[   46.265230] mtd_nandbiterrs: read_page
[   46.268955] mtd_nandbiterrs: Read reported 1 corrected bit errors
[   46.271784] mtd_nandbiterrs: verify_page
[   46.277987] mtd_nandbiterrs: Successfully corrected 1 bit errors per subpage
[   46.281941] mtd_nandbiterrs: Inserted biterror @ 0/2
[   46.288985] mtd_nandbiterrs: rewrite page
[   46.294803] mtd_nandbiterrs: read_page
[   46.298414] mtd_nandbiterrs: Read reported 1 corrected bit errors
[   46.301472] mtd_nandbiterrs: verify_page
[   46.307677] mtd_nandbiterrs: Successfully corrected 2 bit errors per subpage
[   46.311629] mtd_nandbiterrs: Inserted biterror @ 0/0
[   46.318686] mtd_nandbiterrs: rewrite page
[   46.324470] mtd_nandbiterrs: read_page
[   46.328100] mtd_nandbiterrs: Read reported 1 corrected bit errors
[   46.331159] mtd_nandbiterrs: verify_page
[   46.337371] mtd_nandbiterrs: Successfully corrected 3 bit errors per subpage
[   46.341316] mtd_nandbiterrs: Inserted biterror @ 1/7
[   46.348365] mtd_nandbiterrs: rewrite page
[   46.354123] mtd_nandbiterrs: read_page
[   46.357787] mtd_nandbiterrs: Read reported 2 corrected bit errors
[   46.360846] mtd_nandbiterrs: verify_page
[   46.367047] mtd_nandbiterrs: Successfully corrected 4 bit errors per subpage
[   46.371003] mtd_nandbiterrs: Inserted biterror @ 1/5
[   46.378046] mtd_nandbiterrs: rewrite page
[   46.383794] mtd_nandbiterrs: read_page
[   46.387475] mtd_nandbiterrs: Read reported 2 corrected bit errors
[   46.390534] mtd_nandbiterrs: verify_page
[   46.396747] mtd_nandbiterrs: Successfully corrected 5 bit errors per subpage
[   46.400691] mtd_nandbiterrs: Inserted biterror @ 1/2
[   46.407733] mtd_nandbiterrs: rewrite page
[   46.413483] mtd_nandbiterrs: read_page
[   46.417190] mtd_nandbiterrs: Read reported 2 corrected bit errors
[   46.420222] mtd_nandbiterrs: verify_page
[   46.426419] mtd_nandbiterrs: Successfully corrected 6 bit errors per subpage
[   46.430379] mtd_nandbiterrs: Inserted biterror @ 1/0
[   46.437423] mtd_nandbiterrs: rewrite page
[   46.443168] mtd_nandbiterrs: read_page
[   46.446875] mtd_nandbiterrs: Read reported 2 corrected bit errors
[   46.449908] mtd_nandbiterrs: verify_page
[   46.456109] mtd_nandbiterrs: Successfully corrected 7 bit errors per subpage
[   46.460066] mtd_nandbiterrs: Inserted biterror @ 2/6
[   46.467109] mtd_nandbiterrs: rewrite page
[   46.472888] mtd_nandbiterrs: read_page
[   46.476569] mtd_nandbiterrs: Read reported 3 corrected bit errors
[   46.479597] mtd_nandbiterrs: verify_page
[   46.485796] mtd_nandbiterrs: Successfully corrected 8 bit errors per subpage
[   46.489753] mtd_nandbiterrs: Inserted biterror @ 2/5
[   46.496797] mtd_nandbiterrs: rewrite page
[   46.502540] mtd_nandbiterrs: read_page
[   46.506249] mtd_nandbiterrs: error: read failed at 0x0
[   46.509284] mtd_nandbiterrs: After 9 biterrors per subpage, read reported
error -74
[   46.517867] mtd_nandbiterrs: finished successfully.
[   46.521956] ==================================================
[   47.150313]
[   47.150341] ==================================================
[   47.150867] mtd_nandbiterrs: MTD device: 0
[   47.156564] mtd_nandbiterrs: MTD device size 268435456, eraseblock=131072,
page=2048, oob=128
[   47.160591] mtd_nandbiterrs: Device uses 1 subpages of 2048 bytes
[   47.169201] mtd_nandbiterrs: Using page=0, offset=0, eraseblock=0
[   47.178778] mtd_nandbiterrs: incremental biterrors test
[   47.181350] mtd_nandbiterrs: write_page
[   47.187334] mtd_nandbiterrs: rewrite page
[   47.191016] mtd_nandbiterrs: read_page
[   47.194997] mtd_nandbiterrs: verify_page
[   47.198019] mtd_nandbiterrs: Successfully corrected 0 bit errors per subpage
[   47.202081] mtd_nandbiterrs: Inserted biterror @ 0/5
[   47.209132] mtd_nandbiterrs: rewrite page
[   47.214962] mtd_nandbiterrs: read_page
[   47.218554] mtd_nandbiterrs: Read reported 1 corrected bit errors
[   47.221612] mtd_nandbiterrs: verify_page
[   47.227814] mtd_nandbiterrs: Successfully corrected 1 bit errors per subpage
[   47.231769] mtd_nandbiterrs: Inserted biterror @ 0/2
[   47.238816] mtd_nandbiterrs: rewrite page
[   47.244574] mtd_nandbiterrs: read_page
[   47.248242] mtd_nandbiterrs: Read reported 1 corrected bit errors
[   47.251300] mtd_nandbiterrs: verify_page
[   47.257499] mtd_nandbiterrs: Successfully corrected 2 bit errors per subpage
[   47.261457] mtd_nandbiterrs: Inserted biterror @ 0/0
[   47.268504] mtd_nandbiterrs: rewrite page
[   47.274301] mtd_nandbiterrs: read_page
[   47.277930] mtd_nandbiterrs: Read reported 1 corrected bit errors
[   47.280987] mtd_nandbiterrs: verify_page
[   47.287187] mtd_nandbiterrs: Successfully corrected 3 bit errors per subpage
[   47.291145] mtd_nandbiterrs: Inserted biterror @ 1/7
[   47.298191] mtd_nandbiterrs: rewrite page
[   47.303951] mtd_nandbiterrs: read_page
[   47.307619] mtd_nandbiterrs: Read reported 2 corrected bit errors
[   47.310675] mtd_nandbiterrs: verify_page
[   47.316876] mtd_nandbiterrs: Successfully corrected 4 bit errors per subpage
[   47.320832] mtd_nandbiterrs: Inserted biterror @ 1/5
[   47.327875] mtd_nandbiterrs: rewrite page
[   47.333629] mtd_nandbiterrs: read_page
[   47.337305] mtd_nandbiterrs: Read reported 2 corrected bit errors
[   47.340362] mtd_nandbiterrs: verify_page
[   47.346563] mtd_nandbiterrs: Successfully corrected 5 bit errors per subpage
[   47.350519] mtd_nandbiterrs: Inserted biterror @ 1/2
[   47.357561] mtd_nandbiterrs: rewrite page
[   47.363310] mtd_nandbiterrs: read_page
[   47.367021] mtd_nandbiterrs: Read reported 2 corrected bit errors
[   47.370050] mtd_nandbiterrs: verify_page
[   47.376248] mtd_nandbiterrs: Successfully corrected 6 bit errors per subpage
[   47.380207] mtd_nandbiterrs: Inserted biterror @ 1/0
[   47.387250] mtd_nandbiterrs: rewrite page
[   47.392996] mtd_nandbiterrs: read_page
[   47.396703] mtd_nandbiterrs: Read reported 2 corrected bit errors
[   47.399737] mtd_nandbiterrs: verify_page
[   47.405936] mtd_nandbiterrs: Successfully corrected 7 bit errors per subpage
[   47.409894] mtd_nandbiterrs: Inserted biterror @ 2/6
[   47.416938] mtd_nandbiterrs: rewrite page
[   47.422685] mtd_nandbiterrs: read_page
[   47.426387] mtd_nandbiterrs: Read reported 3 corrected bit errors
[   47.429424] mtd_nandbiterrs: verify_page
[   47.435637] mtd_nandbiterrs: Successfully corrected 8 bit errors per subpage
[   47.439582] mtd_nandbiterrs: Inserted biterror @ 2/5
[   47.446624] mtd_nandbiterrs: rewrite page
[   47.452369] mtd_nandbiterrs: read_page
[   47.456080] mtd_nandbiterrs: error: read failed at 0x0
[   47.459111] mtd_nandbiterrs: After 9 biterrors per subpage, read reported
error -74
[   47.467699] mtd_nandbiterrs: finished successfully.
[   47.471784] ==================================================
[   48.080311]
[   48.080339] ==================================================
[   48.080866] mtd_nandbiterrs: MTD device: 0
[   48.086560] mtd_nandbiterrs: MTD device size 268435456, eraseblock=131072,
page=2048, oob=128
[   48.090590] mtd_nandbiterrs: Device uses 1 subpages of 2048 bytes
[   48.099204] mtd_nandbiterrs: Using page=0, offset=0, eraseblock=0
[   48.108765] mtd_nandbiterrs: incremental biterrors test
[   48.111353] mtd_nandbiterrs: write_page
[   48.117325] mtd_nandbiterrs: rewrite page
[   48.121017] mtd_nandbiterrs: read_page
[   48.124996] mtd_nandbiterrs: verify_page
[   48.128017] mtd_nandbiterrs: Successfully corrected 0 bit errors per subpage
[   48.132080] mtd_nandbiterrs: Inserted biterror @ 0/5
[   48.139131] mtd_nandbiterrs: rewrite page
[   48.144881] mtd_nandbiterrs: read_page
[   48.148552] mtd_nandbiterrs: Read reported 1 corrected bit errors
[   48.151611] mtd_nandbiterrs: verify_page
[   48.157816] mtd_nandbiterrs: Successfully corrected 1 bit errors per subpage
[   48.161768] mtd_nandbiterrs: Inserted biterror @ 0/2
[   48.168891] mtd_nandbiterrs: rewrite page
[   48.174571] mtd_nandbiterrs: read_page
[   48.178241] mtd_nandbiterrs: Read reported 1 corrected bit errors
[   48.181299] mtd_nandbiterrs: verify_page
[   48.187500] mtd_nandbiterrs: Successfully corrected 2 bit errors per subpage
[   48.191455] mtd_nandbiterrs: Inserted biterror @ 0/0
[   48.198506] mtd_nandbiterrs: rewrite page
[   48.204299] mtd_nandbiterrs: read_page
[   48.207931] mtd_nandbiterrs: Read reported 1 corrected bit errors
[   48.210985] mtd_nandbiterrs: verify_page
[   48.217187] mtd_nandbiterrs: Successfully corrected 3 bit errors per subpage
[   48.221142] mtd_nandbiterrs: Inserted biterror @ 1/7
[   48.228188] mtd_nandbiterrs: rewrite page
[   48.233950] mtd_nandbiterrs: read_page
[   48.237617] mtd_nandbiterrs: Read reported 2 corrected bit errors
[   48.240673] mtd_nandbiterrs: verify_page
[   48.246872] mtd_nandbiterrs: Successfully corrected 4 bit errors per subpage
[   48.250831] mtd_nandbiterrs: Inserted biterror @ 1/5
[   48.257875] mtd_nandbiterrs: rewrite page
[   48.263631] mtd_nandbiterrs: read_page
[   48.267303] mtd_nandbiterrs: Read reported 2 corrected bit errors
[   48.270361] mtd_nandbiterrs: verify_page
[   48.276560] mtd_nandbiterrs: Successfully corrected 5 bit errors per subpage
[   48.280531] mtd_nandbiterrs: Inserted biterror @ 1/2
[   48.287592] mtd_nandbiterrs: rewrite page
[   48.293338] mtd_nandbiterrs: read_page
[   48.297030] mtd_nandbiterrs: Read reported 2 corrected bit errors
[   48.300049] mtd_nandbiterrs: verify_page
[   48.306247] mtd_nandbiterrs: Successfully corrected 6 bit errors per subpage
[   48.310205] mtd_nandbiterrs: Inserted biterror @ 1/0
[   48.317250] mtd_nandbiterrs: rewrite page
[   48.322994] mtd_nandbiterrs: read_page
[   48.326705] mtd_nandbiterrs: Read reported 2 corrected bit errors
[   48.329736] mtd_nandbiterrs: verify_page
[   48.335935] mtd_nandbiterrs: Successfully corrected 7 bit errors per subpage
[   48.339892] mtd_nandbiterrs: Inserted biterror @ 2/6
[   48.346936] mtd_nandbiterrs: rewrite page
[   48.352633] mtd_nandbiterrs: read_page
[   48.356391] mtd_nandbiterrs: Read reported 3 corrected bit errors
[   48.359423] mtd_nandbiterrs: verify_page
[   48.365626] mtd_nandbiterrs: Successfully corrected 8 bit errors per subpage
[   48.369581] mtd_nandbiterrs: Inserted biterror @ 2/5
[   48.376627] mtd_nandbiterrs: rewrite page
[   48.382322] mtd_nandbiterrs: read_page
[   48.386077] mtd_nandbiterrs: error: read failed at 0x0
[   48.389110] mtd_nandbiterrs: After 9 biterrors per subpage, read reported
error -74
[   48.397695] mtd_nandbiterrs: finished successfully.
[   48.401783] ==================================================
[   48.940558]
[   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] ==================================================
#

Regards,
Gabor
diff mbox series

Patch

diff --git a/drivers/spi/spi-qpic-snand.c b/drivers/spi/spi-qpic-snand.c
index dfc8cc5d97624fe741121228b97d2b3562cc5cc4..5e2eacb83b08016ab85a4b676a06f5dfb8cf5808 100644
--- a/drivers/spi/spi-qpic-snand.c
+++ b/drivers/spi/spi-qpic-snand.c
@@ -283,9 +283,22 @@  static int qcom_spi_ecc_init_ctx_pipelined(struct nand_device *nand)
 		goto err_free_ecc_cfg;
 	}
 
-	if (ecc_cfg->strength != 4) {
+	switch (ecc_cfg->strength) {
+	case 4:
+		ecc_cfg->ecc_mode = ECC_MODE_4BIT;
+		ecc_cfg->ecc_bytes_hw = 7;
+		ecc_cfg->spare_bytes = 4;
+		break;
+
+	case 8:
+		ecc_cfg->ecc_mode = ECC_MODE_8BIT;
+		ecc_cfg->ecc_bytes_hw = 13;
+		ecc_cfg->spare_bytes = 2;
+		break;
+
+	default:
 		dev_err(snandc->dev,
-			"only 4 bits ECC strength is supported\n");
+			"only 4 or 8 bits ECC strength is supported\n");
 		ret = -EOPNOTSUPP;
 		goto err_free_ecc_cfg;
 	}
@@ -302,8 +315,6 @@  static int qcom_spi_ecc_init_ctx_pipelined(struct nand_device *nand)
 	nand->ecc.ctx.priv = ecc_cfg;
 	snandc->qspi->mtd = mtd;
 
-	ecc_cfg->ecc_bytes_hw = 7;
-	ecc_cfg->spare_bytes = 4;
 	ecc_cfg->bbm_size = 1;
 	ecc_cfg->bch_enabled = true;
 	ecc_cfg->bytes = ecc_cfg->ecc_bytes_hw + ecc_cfg->spare_bytes + ecc_cfg->bbm_size;
@@ -349,7 +360,7 @@  static int qcom_spi_ecc_init_ctx_pipelined(struct nand_device *nand)
 			       FIELD_PREP(ECC_SW_RESET, 0) |
 			       FIELD_PREP(ECC_NUM_DATA_BYTES_MASK, ecc_cfg->cw_data) |
 			       FIELD_PREP(ECC_FORCE_CLK_OPEN, 1) |
-			       FIELD_PREP(ECC_MODE_MASK, ECC_MODE_4BIT) |
+			       FIELD_PREP(ECC_MODE_MASK, ecc_cfg->ecc_mode) |
 			       FIELD_PREP(ECC_PARITY_SIZE_BYTES_BCH_MASK, ecc_cfg->ecc_bytes_hw);
 
 	ecc_cfg->ecc_buf_cfg = 0x203 << NUM_STEPS;