[PATCH v4 0/6] mtd: rawnand: add NVIDIA Tegra NAND flash support
From: Stefan Agner
Date: Mon Jun 11 2018 - 16:52:49 EST
The most notable change in this forth revision is the addition of
raw page and oob read/write accessors which support DMA. After
looking a bit closer into the U-Boot implementation of the Tegra
NAND driver I realized that in my previous attempts I enabled
SKIP_SPARE_EN which seems not to work when not using ECC modes.
A bad block scan of a 1GiB chip dropped from 3.9s to 0.2s.
The MTD kernel module tests seem to pass still:
=================================================
mtd_speedtest: MTD device: 4
mtd_speedtest: MTD device size 1068498944, eraseblock size 262144, page size 4096, count of eraseblocks 4076, pages per eraseblock 64, OOB size 224
mtd_test: scanning for bad eraseblocks
mtd_test: block 4072 is bad
mtd_test: block 4073 is bad
mtd_test: block 4074 is bad
mtd_test: block 4075 is bad
mtd_test: scanned 4076 eraseblocks, 4 are bad
mtd_speedtest: testing eraseblock write speed
mtd_speedtest: eraseblock write speed is 11499 KiB/s
mtd_speedtest: testing eraseblock read speed
mtd_speedtest: eraseblock read speed is 15251 KiB/s
mtd_speedtest: testing page write speed
mtd_speedtest: page write speed is 9588 KiB/s
mtd_speedtest: testing page read speed
mtd_speedtest: page read speed is 15213 KiB/s
mtd_speedtest: testing 2 page write speed
mtd_speedtest: 2 page write speed is 10291 KiB/s
mtd_speedtest: testing 2 page read speed
mtd_speedtest: 2 page read speed is 15416 KiB/s
mtd_speedtest: Testing erase speed
mtd_speedtest: erase speed is 128000 KiB/s
mtd_speedtest: Testing 2x multi-block erase speed
mtd_speedtest: 2x multi-block erase speed is 333364 KiB/s
mtd_speedtest: Testing 4x multi-block erase speed
mtd_speedtest: 4x multi-block erase speed is 335187 KiB/s
mtd_speedtest: Testing 8x multi-block erase speed
mtd_speedtest: 8x multi-block erase speed is 345061 KiB/s
mtd_speedtest: Testing 16x multi-block erase speed
mtd_speedtest: 16x multi-block erase speed is 344264 KiB/s
mtd_speedtest: Testing 32x multi-block erase speed
mtd_speedtest: 32x multi-block erase speed is 347941 KiB/s
mtd_speedtest: Testing 64x multi-block erase speed
mtd_speedtest: 64x multi-block erase speed is 348522 KiB/s
mtd_speedtest: finished
=================================================
==================================================
mtd_nandbiterrs: MTD device: 3
mtd_nandbiterrs: MTD device size 1048576, eraseblock=262144, page=4096, oob=224
mtd_nandbiterrs: Device uses 1 subpages of 4096 bytes
mtd_nandbiterrs: Using page=0, offset=0, eraseblock=0
mtd_nandbiterrs: incremental biterrors test
mtd_nandbiterrs: write_page
mtd_nandbiterrs: rewrite page
mtd_nandbiterrs: read_page
mtd_nandbiterrs: verify_page
mtd_nandbiterrs: Successfully corrected 0 bit errors per subpage
mtd_nandbiterrs: Inserted biterror @ 0/5
mtd_nandbiterrs: rewrite page
mtd_nandbiterrs: read_page
mtd_nandbiterrs: Read reported 1 corrected bit errors
mtd_nandbiterrs: verify_page
mtd_nandbiterrs: Successfully corrected 1 bit errors per subpage
mtd_nandbiterrs: Inserted biterror @ 0/2
mtd_nandbiterrs: rewrite page
mtd_nandbiterrs: read_page
mtd_nandbiterrs: Read reported 2 corrected bit errors
mtd_nandbiterrs: verify_page
mtd_nandbiterrs: Successfully corrected 2 bit errors per subpage
mtd_nandbiterrs: Inserted biterror @ 0/0
mtd_nandbiterrs: rewrite page
mtd_nandbiterrs: read_page
mtd_nandbiterrs: Read reported 3 corrected bit errors
mtd_nandbiterrs: verify_page
mtd_nandbiterrs: Successfully corrected 3 bit errors per subpage
mtd_nandbiterrs: Inserted biterror @ 1/7
mtd_nandbiterrs: rewrite page
mtd_nandbiterrs: read_page
mtd_nandbiterrs: Read reported 4 corrected bit errors
mtd_nandbiterrs: verify_page
mtd_nandbiterrs: Successfully corrected 4 bit errors per subpage
mtd_nandbiterrs: Inserted biterror @ 1/5
mtd_nandbiterrs: rewrite page
mtd_nandbiterrs: read_page
mtd_nandbiterrs: Read reported 5 corrected bit errors
mtd_nandbiterrs: verify_page
mtd_nandbiterrs: Successfully corrected 5 bit errors per subpage
mtd_nandbiterrs: Inserted biterror @ 1/2
mtd_nandbiterrs: rewrite page
mtd_nandbiterrs: read_page
mtd_nandbiterrs: Read reported 6 corrected bit errors
mtd_nandbiterrs: verify_page
mtd_nandbiterrs: Successfully corrected 6 bit errors per subpage
mtd_nandbiterrs: Inserted biterror @ 1/0
mtd_nandbiterrs: rewrite page
mtd_nandbiterrs: read_page
mtd_nandbiterrs: Read reported 7 corrected bit errors
mtd_nandbiterrs: verify_page
mtd_nandbiterrs: Successfully corrected 7 bit errors per subpage
mtd_nandbiterrs: Inserted biterror @ 2/6
mtd_nandbiterrs: rewrite page
mtd_nandbiterrs: read_page
mtd_nandbiterrs: Read reported 8 corrected bit errors
mtd_nandbiterrs: verify_page
mtd_nandbiterrs: Successfully corrected 8 bit errors per subpage
mtd_nandbiterrs: Inserted biterror @ 2/5
mtd_nandbiterrs: rewrite page
mtd_nandbiterrs: read_page
mtd_nandbiterrs: Read reported 9 corrected bit errors
mtd_nandbiterrs: verify_page
mtd_nandbiterrs: Successfully corrected 9 bit errors per subpage
mtd_nandbiterrs: Inserted biterror @ 2/2
mtd_nandbiterrs: rewrite page
mtd_nandbiterrs: read_page
mtd_nandbiterrs: Read reported 10 corrected bit errors
mtd_nandbiterrs: verify_page
mtd_nandbiterrs: Successfully corrected 10 bit errors per subpage
mtd_nandbiterrs: Inserted biterror @ 2/0
mtd_nandbiterrs: rewrite page
mtd_nandbiterrs: read_page
mtd_nandbiterrs: Read reported 11 corrected bit errors
mtd_nandbiterrs: verify_page
mtd_nandbiterrs: Successfully corrected 11 bit errors per subpage
mtd_nandbiterrs: Inserted biterror @ 3/7
mtd_nandbiterrs: rewrite page
mtd_nandbiterrs: read_page
mtd_nandbiterrs: Read reported 12 corrected bit errors
mtd_nandbiterrs: verify_page
mtd_nandbiterrs: Successfully corrected 12 bit errors per subpage
mtd_nandbiterrs: Inserted biterror @ 3/6
mtd_nandbiterrs: rewrite page
mtd_nandbiterrs: read_page
mtd_nandbiterrs: Read reported 13 corrected bit errors
mtd_nandbiterrs: verify_page
mtd_nandbiterrs: Successfully corrected 13 bit errors per subpage
mtd_nandbiterrs: Inserted biterror @ 3/5
mtd_nandbiterrs: rewrite page
mtd_nandbiterrs: read_page
mtd_nandbiterrs: Read reported 14 corrected bit errors
mtd_nandbiterrs: verify_page
mtd_nandbiterrs: Successfully corrected 14 bit errors per subpage
mtd_nandbiterrs: Inserted biterror @ 3/2
mtd_nandbiterrs: rewrite page
mtd_nandbiterrs: read_page
mtd_nandbiterrs: Read reported 15 corrected bit errors
mtd_nandbiterrs: verify_page
mtd_nandbiterrs: Successfully corrected 15 bit errors per subpage
mtd_nandbiterrs: Inserted biterror @ 3/0
mtd_nandbiterrs: rewrite page
mtd_nandbiterrs: read_page
mtd_nandbiterrs: Read reported 16 corrected bit errors
mtd_nandbiterrs: verify_page
mtd_nandbiterrs: Successfully corrected 16 bit errors per subpage
mtd_nandbiterrs: Inserted biterror @ 4/2
mtd_nandbiterrs: rewrite page
mtd_nandbiterrs: read_page
mtd_nandbiterrs: error: read failed at 0x0
mtd_nandbiterrs: After 17 biterrors per subpage, read reported error -74
mtd_nandbiterrs: finished successfully.
==================================================
==================================================
mtd_nandbiterrs: MTD device: 3
mtd_nandbiterrs: MTD device size 1048576, eraseblock=262144, page=4096, oob=224
mtd_nandbiterrs: Device uses 1 subpages of 4096 bytes
mtd_nandbiterrs: Using page=0, offset=0, eraseblock=0
mtd_nandbiterrs: overwrite biterrors test
mtd_nandbiterrs: write_page
mtd_nandbiterrs: Read reported 1 corrected bit errors
mtd_nandbiterrs: Read reported 2 corrected bit errors
mtd_nandbiterrs: Read reported 3 corrected bit errors
mtd_nandbiterrs: Read reported 4 corrected bit errors
mtd_nandbiterrs: Read reported 5 corrected bit errors
mtd_nandbiterrs: Read reported 8 corrected bit errors
mtd_nandbiterrs: Read reported 10 corrected bit errors
mtd_nandbiterrs: Read reported 12 corrected bit errors
mtd_nandbiterrs: Read reported 14 corrected bit errors
mtd_nandbiterrs: Read reported 21 corrected bit errors
mtd_nandbiterrs: Read reported 28 corrected bit errors
mtd_nandbiterrs: Read reported 32 corrected bit errors
mtd_nandbiterrs: Read reported 40 corrected bit errors
mtd_nandbiterrs: Read reported 48 corrected bit errors
mtd_nandbiterrs: Read reported 56 corrected bit errors
mtd_nandbiterrs: Read reported 64 corrected bit errors
mtd_nandbiterrs: Read reported 72 corrected bit errors
mtd_nandbiterrs: Read reported 80 corrected bit errors
mtd_nandbiterrs: Read reported 88 corrected bit errors
mtd_nandbiterrs: Read reported 96 corrected bit errors
mtd_nandbiterrs: Read reported 104 corrected bit errors
mtd_nandbiterrs: Read reported 112 corrected bit errors
mtd_nandbiterrs: error: read failed at 0x0
mtd_nandbiterrs: Read reported error -74
mtd_nandbiterrs: Bit error histogram (2209 operations total):
mtd_nandbiterrs: Page reads with 0 corrected bit errors: 977
mtd_nandbiterrs: Page reads with 1 corrected bit errors: 92
mtd_nandbiterrs: Page reads with 2 corrected bit errors: 81
mtd_nandbiterrs: Page reads with 3 corrected bit errors: 7
mtd_nandbiterrs: Page reads with 4 corrected bit errors: 4
mtd_nandbiterrs: Page reads with 5 corrected bit errors: 3
mtd_nandbiterrs: Page reads with 6 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 7 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 8 corrected bit errors: 9
mtd_nandbiterrs: Page reads with 9 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 10 corrected bit errors: 42
mtd_nandbiterrs: Page reads with 11 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 12 corrected bit errors: 24
mtd_nandbiterrs: Page reads with 13 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 14 corrected bit errors: 62
mtd_nandbiterrs: Page reads with 15 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 16 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 17 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 18 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 19 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 20 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 21 corrected bit errors: 15
mtd_nandbiterrs: Page reads with 22 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 23 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 24 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 25 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 26 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 27 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 28 corrected bit errors: 75
mtd_nandbiterrs: Page reads with 29 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 30 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 31 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 32 corrected bit errors: 148
mtd_nandbiterrs: Page reads with 33 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 34 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 35 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 36 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 37 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 38 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 39 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 40 corrected bit errors: 74
mtd_nandbiterrs: Page reads with 41 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 42 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 43 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 44 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 45 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 46 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 47 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 48 corrected bit errors: 37
mtd_nandbiterrs: Page reads with 49 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 50 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 51 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 52 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 53 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 54 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 55 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 56 corrected bit errors: 93
mtd_nandbiterrs: Page reads with 57 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 58 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 59 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 60 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 61 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 62 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 63 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 64 corrected bit errors: 23
mtd_nandbiterrs: Page reads with 65 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 66 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 67 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 68 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 69 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 70 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 71 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 72 corrected bit errors: 258
mtd_nandbiterrs: Page reads with 73 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 74 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 75 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 76 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 77 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 78 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 79 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 80 corrected bit errors: 90
mtd_nandbiterrs: Page reads with 81 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 82 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 83 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 84 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 85 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 86 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 87 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 88 corrected bit errors: 14
mtd_nandbiterrs: Page reads with 89 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 90 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 91 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 92 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 93 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 94 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 95 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 96 corrected bit errors: 21
mtd_nandbiterrs: Page reads with 97 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 98 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 99 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 100 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 101 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 102 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 103 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 104 corrected bit errors: 32
mtd_nandbiterrs: Page reads with 105 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 106 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 107 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 108 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 109 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 110 corrected bit errors: 0
mtd_nandbiterrs: Page reads with 111 corrected bit errors: 0
mtd_nandbiterrs: finished successfully.
==================================================
=================================================
mtd_oobtest: MTD device: 3
mtd_oobtest: MTD device size 1048576, eraseblock size 262144, page size 4096, count of eraseblocks 4, pages per eraseblock 64, OOB size 224
mtd_test: scanning for bad eraseblocks
mtd_test: scanned 4 eraseblocks, 0 are bad
mtd_oobtest: test 1 of 5
mtd_oobtest: writing OOBs of whole device
mtd_oobtest: written up to eraseblock 0
mtd_oobtest: written 4 eraseblocks
mtd_oobtest: verifying all eraseblocks
mtd_oobtest: verified up to eraseblock 0
mtd_oobtest: verified 4 eraseblocks
mtd_oobtest: test 2 of 5
mtd_oobtest: writing OOBs of whole device
mtd_oobtest: written up to eraseblock 0
mtd_oobtest: written 4 eraseblocks
mtd_oobtest: verifying all eraseblocks
mtd_oobtest: verified up to eraseblock 0
mtd_oobtest: verified 4 eraseblocks
mtd_oobtest: test 3 of 5
mtd_oobtest: writing OOBs of whole device
mtd_oobtest: written up to eraseblock 0
mtd_oobtest: written 4 eraseblocks
mtd_oobtest: verifying all eraseblocks
mtd_oobtest: verified up to eraseblock 0
mtd_oobtest: verified 4 eraseblocks
mtd_oobtest: test 4 of 5
mtd_oobtest: attempting to start write past end of OOB
mtd_oobtest: an error is expected...
mtd_oobtest: error occurred as expected
mtd_oobtest: attempting to start read past end of OOB
mtd_oobtest: an error is expected...
mtd_oobtest: error occurred as expected
mtd_oobtest: attempting to write past end of device
mtd_oobtest: an error is expected...
mtd_oobtest: error occurred as expected
mtd_oobtest: attempting to read past end of device
mtd_oobtest: an error is expected...
mtd_oobtest: error occurred as expected
mtd_oobtest: attempting to write past end of device
mtd_oobtest: an error is expected...
mtd_oobtest: error occurred as expected
mtd_oobtest: attempting to read past end of device
mtd_oobtest: an error is expected...
mtd_oobtest: error occurred as expected
mtd_oobtest: test 5 of 5
mtd_oobtest: writing OOBs of whole device
mtd_oobtest: written up to eraseblock 0
mtd_oobtest: written up to eraseblock 0
mtd_oobtest: written 3 eraseblocks
mtd_oobtest: verifying all eraseblocks
mtd_oobtest: verified up to eraseblock 0
mtd_oobtest: verified 3 eraseblocks
mtd_oobtest: finished with 0 errors
=================================================
=================================================
mtd_readtest: MTD device: 3
mtd_readtest: MTD device size 1048576, eraseblock size 262144, page size 4096, count of eraseblocks 4, pages per eraseblock 64, OOB size 224
mtd_test: scanning for bad eraseblocks
mtd_test: scanned 4 eraseblocks, 0 are bad
mtd_readtest: testing page read
mtd_readtest: finished
=================================================
=================================================
mtd_subpagetest: MTD device: 3
mtd_subpagetest: MTD device size 1048576, eraseblock size 262144, page size 4096, subpage size 4096, count of eraseblocks 4, pages per eraseblock 64, OOB size 224
mtd_test: scanning for bad eraseblocks
mtd_test: scanned 4 eraseblocks, 0 are bad
mtd_subpagetest: writing whole device
mtd_subpagetest: written up to eraseblock 0
mtd_subpagetest: written 4 eraseblocks
mtd_subpagetest: verifying all eraseblocks
mtd_subpagetest: verified up to eraseblock 0
mtd_subpagetest: verified 4 eraseblocks
mtd_subpagetest: verifying all eraseblocks for 0xff
mtd_subpagetest: verified up to eraseblock 0
mtd_subpagetest: verified 4 eraseblocks
mtd_subpagetest: writing whole device
mtd_subpagetest: written up to eraseblock 0
mtd_subpagetest: written 4 eraseblocks
mtd_subpagetest: verifying all eraseblocks
mtd_subpagetest: verified up to eraseblock 0
mtd_subpagetest: verified 4 eraseblocks
mtd_subpagetest: verifying all eraseblocks for 0xff
mtd_subpagetest: verified up to eraseblock 0
mtd_subpagetest: verified 4 eraseblocks
mtd_subpagetest: finished with 0 errors
=================================================
=================================================
mtd_stresstest: MTD device: 3
mtd_stresstest: MTD device size 1048576, eraseblock size 262144, page size 4096, count of eraseblocks 4, pages per eraseblock 64, OOB size 224
mtd_test: scanning for bad eraseblocks
mtd_test: scanned 4 eraseblocks, 0 are bad
mtd_stresstest: doing operations
mtd_stresstest: 0 operations done
mtd_stresstest: 1024 operations done
mtd_stresstest: 2048 operations done
mtd_stresstest: 3072 operations done
mtd_stresstest: 4096 operations done
mtd_stresstest: 5120 operations done
mtd_stresstest: aborting test due to pending signal!
mtd_stresstest: error -4 occurred
=================================================
--
Stefan
Changes since v1:
- Split controller and NAND chip structure
- Add BCH support
- Allow to select algorithm and strength using device tree
- Improve HW ECC error reporting and use DEC_STATUS_BUF only
- Use SPDX license identifier
- Use per algorithm mtd_ooblayout_ops
- Use setup_data_interface callback for NAND timing configuration
Changes since v2:
- Set clock rate using assigned-clocks
- Use BIT() macro
- Fix and improve timing calculation
- Improve ECC error handling
- Store OOB layout for tag area in Tegra chip structure
- Update/fix bindings
- Use more specific variable names (replace "value")
- Introduce nand-is-boot-medium
- Choose sensible ECC strenght automatically
- Use wait_for_completion_timeout
- Print register dump on completion timeout
- Unify tegra_nand_(read|write)_page in tegra_nand_page_xfer
Changes since v3:
- Implement tegra_nand_(read|write)_raw using DMA
- Implement tegra_nand_(read|write)_oob using DMA
- Name registers according to Tegra 2 Technical Reference Manual (v02p)
- Use wait_for_completion_io_timeout to account for IO
- Get chip select id from device tree reg property
- Clear interrupts and reinit wait queues in case command/DMA times out
- Set default MTD name after nand_set_flash_node
- Move MODULE_DEVICE_TABLE after declaration of tegra_nand_of_match
- Make (rs|bch)_strength static
Lucas Stach (1):
ARM: dts: tegra: add Tegra20 NAND flash controller node
Stefan Agner (5):
mtd: rawnand: add Reed-Solomon error correction algorithm
mtd: rawnand: add an option to specify NAND chip as a boot device
mtd: rawnand: tegra: add devicetree binding
mtd: rawnand: add NVIDIA Tegra NAND Flash controller driver
ARM: dts: tegra: enable NAND flash on Colibri T20
.../devicetree/bindings/mtd/nand.txt | 6 +-
.../bindings/mtd/nvidia-tegra20-nand.txt | 64 +
MAINTAINERS | 7 +
arch/arm/boot/dts/tegra20-colibri-512.dtsi | 16 +
arch/arm/boot/dts/tegra20.dtsi | 15 +
drivers/mtd/nand/raw/Kconfig | 6 +
drivers/mtd/nand/raw/Makefile | 1 +
drivers/mtd/nand/raw/nand_base.c | 4 +
drivers/mtd/nand/raw/tegra_nand.c | 1248 +++++++++++++++++
include/linux/mtd/rawnand.h | 7 +
10 files changed, 1373 insertions(+), 1 deletion(-)
create mode 100644 Documentation/devicetree/bindings/mtd/nvidia-tegra20-nand.txt
create mode 100644 drivers/mtd/nand/raw/tegra_nand.c
--
2.17.1