MTD: atmel_nand: Update driver to support Programmable Multibit ECC controller
Subsystems (5)
PATCH v6 1/1 MTD: atmel_nand: Update driver to support Programmable Multibit ECC controller
The Programmable Multibit ECC (PMECC) controller is a programmable binary BCH(Bose, Chaudhuri and Hocquenghem) encoder and decoder. This controller can be used to support both SLC and MLC NAND Flash devices. It supports to generate ECC to correct 2, 4, 8, 12 or 24 bits of error per sector of data.
To use this driver, the user needs to pass in the correction capability and the sector size.
This driver has been tested on AT91SAM9X5-EK and AT91SAM9N12-EK with JFFS2, YAFFS2, UBIFS and mtd-utils.
---
Hi,
Changes since v5,
add has_pmecc field to replace cpu_has_pmecc() function. Use compatible check in when proble. simplify the pmecc_get_ecc_bytes() function.
Changes since v4,
fix typo and checkpatch warnings.
fix according to JC's suggestion. replace cpu_is_xxx() with DT modify dt binding atmel nand document to add pmecc support. tested in sam9263 without break hw ecc.
add ecc.strength.
--- .../devicetree/bindings/mtd/atmel-nand.txt | 5 + drivers/mtd/nand/atmel_nand.c | 913 ++++++++++++++++++-- drivers/mtd/nand/atmel_nand_ecc.h | 123 ++- 3 files changed, 960 insertions(+), 81 deletions(-)
Documentation/devicetree/bindings/mtd/atmel-nand.txt +5 -0
@@ -16,9 +16,14 @@ Optional properties: - nand-ecc-mode : String, operation mode of the NAND ecc mode, soft by default. Supported values are: "none", "soft", "hw", "hw_syndrome", "hw_oob_first", "soft_bch". +- atmel,pmecc-cap : error correct capability for Programmable Multibit ECC + Controller. Supported values are: 2, 4, 8, 12, 24. +- atmel,sector-size : sector size for ECC computation. Supported values are: + 512, 1024. - nand-bus-width : 8 or 16 bus width if not present 8 - nand-on-flash-bbt: boolean to enable on flash bbt option if not present false + Examples: nand0: nand at 40000000,0 { compatible = "atmel,at91rm9200-nand";
drivers/mtd/nand/atmel_nand.c +833 -80
1,005 lines not on this page · raw message
drivers/mtd/nand/atmel_nand_ecc.h +122 -1
133 lines not on this page · raw message
Signature · 1 line
1.7.10
PATCH v6 1/1 MTD: atmel_nand: Update driver to support Programmable Multibit ECC controller
Quoted 5 lines · Josh Wu
The Programmable Multibit ECC (PMECC) controller is a programmable binary
BCH(Bose, Chaudhuri and Hocquenghem)encoder and decoder. This controller can be used to support both SLC and MLC NAND Flash devices. It supports to generate ECC to correct 2, 4, 8, 12 or 24 bits of error per sector of data.
Quoted 8 lines
To use this driver, the user needs to pass in the correction capability and the sector size.
This driver has been tested on AT91SAM9X5-EK and AT91SAM9N12-EK with JFFS2, YAFFS2, UBIFS and mtd-utils.
Signed-off-by Hong Xu <[email protected]>Signed-off-by Josh Wu <[email protected]>
The patch is really big - please, split it on more smaller patches. Besides, it does not compile for me:
ERROR: "of_flat_dt_is_compatible" [drivers/mtd/nand/atmel_nand.ko] undefined!
ERROR: "of_get_flat_dt_root" [drivers/mtd/nand/atmel_nand.ko] undefined! make[2]: *** [__modpost] Error 1
Signature · 9 lines
Best Regards, Artem Bityutskiy -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 836 bytes Desc: This is a digitally signed message part URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20120511/eb4906b7/attachment.sig>
PATCH v6 1/1 MTD: atmel_nand: Update driver to support Programmable Multibit ECC controller
Hi, Artem
Quoted 9 lines · Artem Bityutskiy
Quoted 8 lines · Josh Wu
The Programmable Multibit ECC (PMECC) controller is a programmable binary
BCH(Bose, Chaudhuri and Hocquenghem)encoder and decoder. This controller can be used to support both SLC and MLC NAND Flash devices. It supports to generate ECC to correct 2, 4, 8, 12 or 24 bits of error per sector of data.To use this driver, the user needs to pass in the correction capability and the sector size.
Quoted 6 lines
Quoted 5 lines
This driver has been tested on AT91SAM9X5-EK and AT91SAM9N12-EK with JFFS2, YAFFS2, UBIFS and mtd-utils.
Signed-off-by Hong Xu<[email protected]>Signed-off-by Josh Wu<[email protected]>The patch is really big - please, split it on more smaller patches.
OK, I can spit to more patches.
Quoted 5 lines
Besides, it does not compile for me:
ERROR: "
of_flat_dt_is_compatible" [drivers/mtd/nand/atmel_nand.ko] undefined!
ERROR: "of_get_flat_dt_root" [drivers/mtd/nand/atmel_nand.ko] undefined! make[2]: *** [__modpost] Error 1
This function will depend on CONFIG_OF_FLATTREE and CONFIG_OF_EARLY_FLATTREE.
Would it be possible that CONFIG_OF is defined, but above two config options are not defined? Can I see you .config file go get more details?
Best Regards,
Josh Wu
PATCH v6 1/1 MTD: atmel_nand: Update driver to support Programmable Multibit ECC controller
Quoted 4 lines · Josh Wu
make[2]: *** [
__modpost] Error 1This function will depend on
CONFIG_OF_FLATTREEandCONFIG_OF_EARLY_FLATTREE.
Then this should be reflected in Kconfig dependencies or the board should select these. In any case, the compilation should not fail.
Quoted 2 lines
Would it be possible that
CONFIG_OFis defined, but above two config options are not defined? Can I see you .config file go get more details?
Attaching the configuration file.
Signature · 205 lines
Best Regards, Artem Bityutskiy -------------- next part -------------- CONFIG_EXPERIMENTAL=y # CONFIG_LOCALVERSION_AUTO is not set CONFIG_SYSVIPC=y CONFIG_BSD_PROCESS_ACCT=y CONFIG_LOG_BUF_SHIFT=18 CONFIG_CGROUPS=y CONFIG_CGROUP_FREEZER=y CONFIG_CPUSETS=y CONFIG_CGROUP_CPUACCT=y CONFIG_RESOURCE_COUNTERS=y CONFIG_CGROUP_SCHED=y CONFIG_BLK_DEV_INITRD=y # CONFIG_COMPAT_BRK is not set CONFIG_PROFILING=y CONFIG_KPROBES=y CONFIG_MODULES=y CONFIG_MODULE_UNLOAD=y CONFIG_MODULE_FORCE_UNLOAD=y CONFIG_PARTITION_ADVANCED=y CONFIG_OSF_PARTITION=y CONFIG_AMIGA_PARTITION=y CONFIG_MAC_PARTITION=y CONFIG_BSD_DISKLABEL=y CONFIG_MINIX_SUBPARTITION=y CONFIG_SOLARIS_X86_PARTITION=y CONFIG_UNIXWARE_DISKLABEL=y CONFIG_SGI_PARTITION=y CONFIG_SUN_PARTITION=y CONFIG_KARMA_PARTITION=y CONFIG_EFI_PARTITION=y CONFIG_ARCH_AT91=y CONFIG_MACH_ONEARM=y CONFIG_ARCH_AT91RM9200DK=y CONFIG_MACH_AT91RM9200EK=y CONFIG_MACH_CSB337=y CONFIG_MACH_CSB637=y CONFIG_MACH_CARMEVA=y CONFIG_MACH_ATEB9200=y CONFIG_MACH_KB9200=y CONFIG_MACH_PICOTUX2XX=y CONFIG_MACH_KAFA=y CONFIG_MACH_ECBAT91=y CONFIG_MACH_YL9200=y CONFIG_MACH_CPUAT91=y CONFIG_MACH_ECO920=y CONFIG_MACH_RSI_EWS=y CONFIG_MTD_AT91_DATAFLASH_CARD=y CONFIG_AT91_PROGRAMMABLE_CLOCKS=y CONFIG_PCCARD=y CONFIG_NO_HZ=y CONFIG_HIGH_RES_TIMERS=y CONFIG_PREEMPT_VOLUNTARY=y CONFIG_USE_OF=y CONFIG_KEXEC=y CONFIG_CRASH_DUMP=y CONFIG_BINFMT_MISC=y # CONFIG_SUSPEND is not set CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" CONFIG_DEBUG_DEVRES=y CONFIG_MTD=y CONFIG_MTD_TESTS=m CONFIG_MTD_REDBOOT_PARTS=m CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED=y CONFIG_MTD_REDBOOT_PARTS_READONLY=y CONFIG_MTD_CMDLINE_PARTS=y CONFIG_MTD_AFS_PARTS=y CONFIG_MTD_OF_PARTS=y CONFIG_MTD_AR7_PARTS=m CONFIG_MTD_CHAR=y CONFIG_MTD_BLOCK=y CONFIG_FTL=m CONFIG_NFTL=m CONFIG_NFTL_RW=y CONFIG_INFTL=m CONFIG_RFD_FTL=m CONFIG_SSFDC=y CONFIG_SM_FTL=m CONFIG_MTD_OOPS=m CONFIG_MTD_SWAP=y CONFIG_MTD_CFI=m CONFIG_MTD_JEDECPROBE=m CONFIG_MTD_CFI_ADV_OPTIONS=y CONFIG_MTD_CFI_GEOMETRY=y # CONFIG_MTD_MAP_BANK_WIDTH_1 is not set CONFIG_MTD_MAP_BANK_WIDTH_16=y # CONFIG_MTD_CFI_I1 is not set CONFIG_MTD_CFI_I4=y CONFIG_MTD_OTP=y CONFIG_MTD_CFI_INTELEXT=m CONFIG_MTD_CFI_AMDSTD=m CONFIG_MTD_CFI_STAA=m CONFIG_MTD_ROM=m CONFIG_MTD_ABSENT=m CONFIG_MTD_COMPLEX_MAPPINGS=y CONFIG_MTD_PHYSMAP=m CONFIG_MTD_PHYSMAP_COMPAT=y CONFIG_MTD_PHYSMAP_OF=m CONFIG_MTD_IMPA7=m CONFIG_MTD_PCMCIA=m CONFIG_MTD_PCMCIA_ANONYMOUS=y CONFIG_MTD_GPIO_ADDR=y CONFIG_MTD_PLATRAM=y CONFIG_MTD_LATCH_ADDR=m CONFIG_MTD_DATAFLASH=m CONFIG_MTD_DATAFLASH_WRITE_VERIFY=y CONFIG_MTD_DATAFLASH_OTP=y CONFIG_MTD_M25P80=m CONFIG_MTD_SST25L=m CONFIG_MTD_SLRAM=y CONFIG_MTD_PHRAM=y CONFIG_MTD_MTDRAM=y CONFIG_MTD_BLOCK2MTD=m CONFIG_MTD_DOC2000=m CONFIG_MTD_DOC2001=m CONFIG_MTD_DOC2001PLUS=m CONFIG_MTD_DOCG3=m CONFIG_MTD_DOCPROBE_ADVANCED=y CONFIG_MTD_DOCPROBE_HIGH=y CONFIG_MTD_NAND_ECC_SMC=y CONFIG_MTD_NAND=y CONFIG_MTD_NAND_VERIFY_WRITE=y CONFIG_MTD_NAND_ECC_BCH=y CONFIG_MTD_NAND_MUSEUM_IDS=y CONFIG_MTD_NAND_GPIO=y CONFIG_MTD_NAND_DISKONCHIP=m CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE=y CONFIG_MTD_NAND_DOCG4=m CONFIG_MTD_NAND_ATMEL=m CONFIG_MTD_NAND_NANDSIM=y CONFIG_MTD_NAND_PLATFORM=m CONFIG_MTD_ALAUDA=m CONFIG_MTD_ONENAND=y CONFIG_MTD_ONENAND_VERIFY_WRITE=y CONFIG_MTD_ONENAND_GENERIC=y CONFIG_MTD_ONENAND_2X_PROGRAM=y CONFIG_MTD_ONENAND_SIM=m CONFIG_MTD_LPDDR=y CONFIG_MTD_UBI=y CONFIG_MTD_UBI_GLUEBI=m # CONFIG_BLK_DEV is not set CONFIG_INPUT_FF_MEMLESS=y # CONFIG_INPUT_MOUSEDEV_PSAUX is not set # CONFIG_INPUT_KEYBOARD is not set # CONFIG_INPUT_MOUSE is not set # CONFIG_SERIO is not set CONFIG_VT_HW_CONSOLE_BINDING=y # CONFIG_LEGACY_PTYS is not set # CONFIG_DEVKMEM is not set CONFIG_SERIAL_8250=y CONFIG_SERIAL_8250_CONSOLE=y CONFIG_SERIAL_8250_NR_UARTS=32 CONFIG_SERIAL_8250_EXTENDED=y CONFIG_SERIAL_8250_MANY_PORTS=y CONFIG_SERIAL_8250_SHARE_IRQ=y CONFIG_SERIAL_8250_DETECT_IRQ=y CONFIG_SERIAL_8250_RSA=y # CONFIG_HW_RANDOM is not set CONFIG_SPI=y # CONFIG_HWMON is not set CONFIG_DRM=y # CONFIG_HID_SUPPORT is not set CONFIG_USB=m # CONFIG_IOMMU_SUPPORT is not set CONFIG_QUOTA=y # CONFIG_PRINT_QUOTA_WARNING is not set CONFIG_QFMT_V2=y CONFIG_JFFS2_FS=y # CONFIG_JFFS2_FS_WRITEBUFFER is not set CONFIG_JFFS2_COMPRESSION_OPTIONS=y CONFIG_JFFS2_LZO=y CONFIG_JFFS2_RUBIN=y CONFIG_JFFS2_CMODE_FAVOURLZO=y CONFIG_UBIFS_FS=m CONFIG_UBIFS_FS_ADVANCED_COMPR=y # CONFIG_UBIFS_FS_ZLIB is not set CONFIG_UBIFS_FS_DEBUG=y CONFIG_LOGFS=m CONFIG_CRAMFS=m CONFIG_NLS=y CONFIG_NLS_DEFAULT="utf8" CONFIG_NLS_CODEPAGE_437=y CONFIG_NLS_UTF8=y CONFIG_PRINTK_TIME=y # CONFIG_ENABLE_WARN_DEPRECATED is not set CONFIG_FRAME_WARN=2048 CONFIG_MAGIC_SYSRQ=y CONFIG_DEBUG_KERNEL=y # CONFIG_SCHED_DEBUG is not set CONFIG_SCHEDSTATS=y CONFIG_TIMER_STATS=y CONFIG_DEBUG_STACK_USAGE=y CONFIG_BLK_DEV_IO_TRACE=y CONFIG_CRYPTO=y # CONFIG_CRYPTO_ANSI_CPRNG is not set # CONFIG_CRYPTO_HW is not set -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 836 bytes Desc: This is a digitally signed message part URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20120515/4c151c77/attachment.sig>