From 534def721210a2f940bd944c3d42dd9a30a64ec6 Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Tue, 3 Dec 2013 13:11:11 -0600 Subject: [PATCH] Condition out most of the recent NXFFS changes for NAND. NXFFS will never be able to support NAND --- configs/sama5d3x-ek/README.txt | 78 ++++++++++++++++------ configs/sim/nxffs/defconfig | 118 +++++++++++++++++++++++++-------- 2 files changed, 148 insertions(+), 48 deletions(-) diff --git a/configs/sama5d3x-ek/README.txt b/configs/sama5d3x-ek/README.txt index 99f83ebe9dc..0517180e17f 100644 --- a/configs/sama5d3x-ek/README.txt +++ b/configs/sama5d3x-ek/README.txt @@ -1351,6 +1351,10 @@ SDRAM Support NAND Support ============ + NAND support is only partial and there is no file system that works with + it properly. It should be considered a work in progress. You will not + want to use NAND unless you are interested in investing a little effort. + See the STATUS section below. NAND Support ------------ @@ -1358,6 +1362,10 @@ NAND Support NAND Support can be added to the NSH configuration by modifying the NuttX configuration file as follows: + Build Setup + CONFIG_EXPERIMENTAL=y : NXFFS implemention is incomplete and + : not yet fully functional. + System Type -> SAMA5 Peripheal support CONFIG_SAMA5_DMAC1=y : Use DMA1 for memory-to-memory DMA CONFIG_SAMA5_HSMC=y : Make sure that the SMC is enabled @@ -1366,7 +1374,7 @@ NAND Support CONFIG_MTD=y : Enable MTD support CONFIG_MTD_NAND=y : Enable NAND support CONFIG_MTD_NAND_BLOCKCHECK=n : Interferes with NXFFS bad block checking - CONFIG_MTD_NAND_HWECC=y : Use H/W ECC calculation + CONFIG_MTD_NAND_SWECC=y : Use S/W ECC calculation Defaults for all other NAND settings should be okay @@ -1374,9 +1382,7 @@ NAND Support CONFIG_SAMA5_EBICS3=y : Enable External CS3 memory CONFIG_SAMA5_EBICS3_NAND=y : Select NAND memory type CONFIG_SAMA5_EBICS3_SIZE=8388608 : Use this size - CONFIG_SAMA5_EBICS3_PMECC=y : Use H/W ECC calculation - CONFIG_SAMA5_PMECC_EMBEDDEDALGO=n : Use the software PMECC algorithm - CONFIG_SAMA5_PMECC_GALOIS_ROMTABLES=y : use the ROM Galois tables + CONFIG_SAMA5_EBICS3_SWECC=y : Use S/W ECC calculation Defaults for ROM page table addresses should be okay @@ -1423,25 +1429,25 @@ NAND Support does the job a little-at-a-time so that there is no massive clean-up when the FLASH becomes full. - WARNING: This will wipe out everything that you may have on the NAND - FLASH! I have found that using the JTAG with no valid image on NAND - or Serial FLASH is a problem: In that case, the code always ends up - in the SAM-BA bootloader. - - The work around for this case is to put the NORBOOT image into Serial - FLASH. Then, the system will boot from Serial FLASH by copying the - NORBOOT image in SRAM which will run and then start the image in NOR - FLASH. See the discussion of the NORBOOT configuration in the - "Creating and Using NORBOOT" section above. - - NOTES: (1) There is jumper on the CM module that must be closed to - enable use of the AT25 Serial Flash. (2) If using SAM-BA, make sure - that you load the NOR boot program into the boot area via the pull- - down menu. - Application Configuration -> NSH Library CONFIG_NSH_ARCHINIT=y : Use architecture-specific initialization + WARNING: This will wipe out everything that you may have on the NAND + FLASH! I have found that using the JTAG with no valid image on NAND + or Serial FLASH is a problem: In that case, the code always ends up + in the SAM-BA bootloader. + + The work around for this case is to put the NORBOOT image into Serial + FLASH. Then, the system will boot from Serial FLASH by copying the + NORBOOT image in SRAM which will run and then start the image in NOR + FLASH. See the discussion of the NORBOOT configuration in the + "Creating and Using NORBOOT" section above. + + NOTES: (1) There is jumper on the CM module that must be closed to + enable use of the AT25 Serial Flash. (2) If using SAM-BA, make sure + that you load the NOR boot program into the boot area via the pull- + down menu. + Using NAND ---------- @@ -1474,6 +1480,38 @@ NAND Support nsh> mount /mnt/mystuff type nxffs + STATUS + ------ + + 1. PMECC has not been test and is, most likely, non-functional. + + 2. DMA works (with software ECC), but is see occasional wild memory + clobbering. DMA should not be used until this problem can be + worked out. + + 3. NXFFS does not work with NAND. NAND differs from other other FLASH + types several ways. For one thing, NAND requires error correction + (ECC) bytes that must be set in order to work around bit failures. + This affects NXFFS in two ways: + + a. First, write failures are not fatal. Rather, they should be tried by + bad blocks and simply ignored. This is because unrecoverable bit + failures will cause read failures when reading from NAND. Setting + the CONFIG_EXPERIMENTAL+CONFIG_NXFFS_NANDs option will enable this + behavior. + + b. Secondly, NXFFS will write a block many times. It tries to keep + bits in the erased state and assumes that it can overwrite those bits + to change them from the erased to the non-erased state. This works + will with NOR-like FLASH. NAND behaves this way too. But the + problem with NAND is that the ECC bits cannot be re-written in this + way. So once a block has been written, it cannot be modified. This + behavior has NOT been fixed in NXFFS. Currently, NXFFS will attempt + to re-write the ECC bits causing the ECC to become corrupted because + the ECC bits cannot be overwritten without erasing the entire block. + + This may prohibit NXFFS from ever being used with NAND. + AT24 Serial EEPROM ================== diff --git a/configs/sim/nxffs/defconfig b/configs/sim/nxffs/defconfig index a55e12bb840..bb49dba37c4 100644 --- a/configs/sim/nxffs/defconfig +++ b/configs/sim/nxffs/defconfig @@ -38,24 +38,9 @@ CONFIG_HOST_LINUX=y # # Debug Options # -CONFIG_DEBUG=y -# CONFIG_DEBUG_VERBOSE is not set - -# -# Subsystem Debug Options -# -# CONFIG_DEBUG_MM is not set -# CONFIG_DEBUG_SCHED is not set -CONFIG_DEBUG_FS=y -# CONFIG_DEBUG_LIB is not set -# CONFIG_DEBUG_BINFMT is not set -# CONFIG_DEBUG_GRAPHICS is not set - -# -# Driver Debug Options -# -# CONFIG_DEBUG_ANALOG is not set -# CONFIG_DEBUG_GPIO is not set +# CONFIG_DEBUG is not set +# CONFIG_ARCH_HAVE_STACKCHECK is not set +# CONFIG_ARCH_HAVE_HEAPCHECK is not set CONFIG_DEBUG_SYMBOLS=y # @@ -80,10 +65,6 @@ CONFIG_ARCH="sim" # CONFIG_SIM_M32 is not set # CONFIG_SIM_WALLTIME is not set -# -# External Memory Configuration -# - # # Architecture Options # @@ -104,8 +85,6 @@ CONFIG_ARCH="sim" # CONFIG_BOARD_LOOPSPERMSEC=5000 # CONFIG_ARCH_CALIBRATION is not set -CONFIG_RAM_START= -CONFIG_RAM_SIZE= # # Boot options @@ -116,6 +95,12 @@ CONFIG_BOOT_RUNFROMFLASH=y # CONFIG_BOOT_RUNFROMSDRAM is not set # CONFIG_BOOT_COPYTORAM is not set +# +# Boot Memory Configuration +# +CONFIG_RAM_START=0x0 +CONFIG_RAM_SIZE=0 + # # Board Selection # @@ -195,28 +180,48 @@ CONFIG_DEV_NULL=y # CONFIG_LOOP is not set # CONFIG_RAMDISK is not set # CONFIG_CAN is not set +# CONFIG_ARCH_HAVE_PWM_PULSECOUNT is not set # CONFIG_PWM is not set +# CONFIG_ARCH_HAVE_I2CRESET is not set # CONFIG_I2C is not set # CONFIG_SPI is not set +# CONFIG_I2S is not set # CONFIG_RTC is not set # CONFIG_WATCHDOG is not set # CONFIG_ANALOG is not set +# CONFIG_AUDIO_DEVICES is not set # CONFIG_BCH is not set # CONFIG_INPUT is not set # CONFIG_LCD is not set # CONFIG_MMCSD is not set CONFIG_MTD=y + +# +# MTD Configuration +# # CONFIG_MTD_PARTITION is not set +# CONFIG_MTD_BYTE_WRITE is not set +# CONFIG_MTD_CONFIG is not set +# CONFIG_MTD_CONFIG_RAM_CONSOLIDATE is not set + +# +# MTD Device Drivers +# +# CONFIG_MTD_NAND is not set +# CONFIG_ARCH_NAND_HWECC is not set CONFIG_RAMMTD=y CONFIG_RAMMTD_BLOCKSIZE=512 CONFIG_RAMMTD_ERASESIZE=4096 CONFIG_RAMMTD_ERASESTATE=0xff CONFIG_RAMMTD_FLASHSIM=y # CONFIG_MTD_AT24XX is not set +# CONFIG_MTD_AT25 is not set # CONFIG_MTD_AT45DB is not set # CONFIG_MTD_M25P is not set +# CONFIG_MTD_SMART is not set # CONFIG_MTD_RAMTRON is not set # CONFIG_MTD_SST25 is not set +# CONFIG_MTD_SST25XX is not set # CONFIG_MTD_SST39FV is not set # CONFIG_MTD_W25 is not set # CONFIG_PIPES is not set @@ -227,7 +232,13 @@ CONFIG_RAMMTD_FLASHSIM=y CONFIG_SERIAL=y # CONFIG_DEV_LOWCONSOLE is not set # CONFIG_16550_UART is not set + +# +# USART Configuration +# # CONFIG_STANDARD_SERIAL is not set +# CONFIG_SERIAL_IFLOWCONTROL is not set +# CONFIG_SERIAL_OFLOWCONTROL is not set # CONFIG_USBDEV is not set # CONFIG_USBHOST is not set # CONFIG_WIRELESS is not set @@ -244,6 +255,8 @@ CONFIG_SERIAL=y # # Networking Support # +# CONFIG_ARCH_HAVE_NET is not set +# CONFIG_ARCH_HAVE_PHY is not set # CONFIG_NET is not set # @@ -254,6 +267,8 @@ CONFIG_SERIAL=y # File system configuration # # CONFIG_DISABLE_MOUNTPOINT is not set +CONFIG_FS_READABLE=y +CONFIG_FS_WRITABLE=y # CONFIG_FS_RAMMAP is not set CONFIG_FS_FAT=y # CONFIG_FAT_LCNAMES is not set @@ -261,12 +276,16 @@ CONFIG_FS_FAT=y # CONFIG_FS_FATTIME is not set # CONFIG_FAT_DMAMEMORY is not set CONFIG_FS_NXFFS=y +CONFIG_NXFFS_SCAN_VOLUME=y +CONFIG_NXFFS_REFORMAT_THRESH=20 CONFIG_NXFFS_PREALLOCATED=y CONFIG_NXFFS_ERASEDSTATE=0xff CONFIG_NXFFS_PACKTHRESHOLD=32 CONFIG_NXFFS_MAXNAMLEN=255 CONFIG_NXFFS_TAILTHRESHOLD=8192 # CONFIG_FS_ROMFS is not set +# CONFIG_FS_SMARTFS is not set +# CONFIG_FS_PROCFS is not set # # System Logging @@ -287,6 +306,11 @@ CONFIG_NXFFS_TAILTHRESHOLD=8192 CONFIG_MM_REGIONS=1 # CONFIG_GRAN is not set +# +# Audio Support +# +# CONFIG_AUDIO is not set + # # Binary Formats # @@ -331,6 +355,7 @@ CONFIG_LIB_SENDFILE_BUFSIZE=512 # Non-standard Library Support # # CONFIG_LIB_KBDCODEC is not set +# CONFIG_LIB_SLCDCODEC is not set # # Basic CXX Support @@ -351,7 +376,7 @@ CONFIG_LIB_SENDFILE_BUFSIZE=512 # # CONFIG_EXAMPLES_BUTTONS is not set # CONFIG_EXAMPLES_CAN is not set -# CONFIG_SYSTEM_COMPOSITE is not set +# CONFIG_EXAMPLES_CONFIGDATA is not set # CONFIG_EXAMPLES_DHCPD is not set # CONFIG_EXAMPLES_ELF is not set # CONFIG_EXAMPLES_FTPC is not set @@ -366,7 +391,7 @@ CONFIG_LIB_SENDFILE_BUFSIZE=512 # CONFIG_EXAMPLES_MM is not set # CONFIG_EXAMPLES_MODBUS is not set # CONFIG_EXAMPLES_MOUNT is not set -# CONFIG_EXAMPLES_MTDPART is not set +# CONFIG_EXAMPLES_NRF24L01TERM is not set # CONFIG_EXAMPLES_NSH is not set # CONFIG_EXAMPLES_NULL is not set # CONFIG_EXAMPLES_NX is not set @@ -396,6 +421,9 @@ CONFIG_EXAMPLES_NXFFS_NLOOPS=100 # CONFIG_EXAMPLES_ROMFS is not set # CONFIG_EXAMPLES_SENDMAIL is not set # CONFIG_EXAMPLES_SERLOOP is not set +# CONFIG_EXAMPLES_SLCD is not set +# CONFIG_EXAMPLES_SMART is not set +# CONFIG_EXAMPLES_TCPECHO is not set # CONFIG_EXAMPLES_TELNETD is not set # CONFIG_EXAMPLES_THTTPD is not set # CONFIG_EXAMPLES_TIFF is not set @@ -403,7 +431,6 @@ CONFIG_EXAMPLES_NXFFS_NLOOPS=100 # CONFIG_EXAMPLES_UDP is not set # CONFIG_EXAMPLES_UIP is not set # CONFIG_EXAMPLES_USBSERIAL is not set -# CONFIG_SYSTEM_USBMSC is not set # CONFIG_EXAMPLES_USBTERM is not set # CONFIG_EXAMPLES_WATCHDOG is not set @@ -453,10 +480,23 @@ CONFIG_EXAMPLES_NXFFS_NLOOPS=100 # NxWidgets/NxWM # +# +# Platform-specific Support +# +# CONFIG_PLATFORM_CONFIGDATA is not set + # # System NSH Add-Ons # +# +# USB CDC/ACM Device Commands +# + +# +# USB Composite Device Commands +# + # # Custom Free Memory Command # @@ -472,7 +512,16 @@ CONFIG_EXAMPLES_NXFFS_NLOOPS=100 # CONFIG_SYSTEM_INSTALL is not set # -# RAM Test +# FLASH Erase-all Command +# + +# +# NxPlayer media player library / command Line +# +# CONFIG_SYSTEM_NXPLAYER is not set + +# +# RAM test # # CONFIG_SYSTEM_RAMTEST is not set @@ -504,3 +553,16 @@ CONFIG_EXAMPLES_NXFFS_NLOOPS=100 # # USB Monitor # + +# +# Stack Monitor +# + +# +# USB Mass Storage Device Commands +# + +# +# Zmodem Commands +# +# CONFIG_SYSTEM_ZMODEM is not set