This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

mounting ubifs on NAND FLASH cause many many "UBI error: ubi_io_read: error -74 (ECC error)" when using HW ECC BCH8

Other Parts Discussed in Thread: AM3359, TPS65910, TPS65217

Hi,

My board is using Micron MT29F4G16ABADAWP-IT with AM3359.

I've divided the NAND FLASH of 512MiB to two partitions, 256MiB each. So the first NAND partition address is 0 - 0FFFFFFF.

I've followed the instructions on http://processors.wiki.ti.com/index.php/UBIFS_Support

Creating ubifs.img and ubi.img:

sudo mkfs.ubifs -r /local/lizq/local/rootfs_min/ -F -o ubifs.img -m 2KiB -e 124KiB -c 1975 -v
sudo ubinize -o ubi.img -p 128KiB -m 2048 -s 512 -O 2048 ubinize.cfg -v

ubinize.cfg
--------------------------------------
[ubifs]
mode=ubi
image=ubifs.img
vol_id=0
vol_size=239MiB
vol_type=dynamic
vol_name=rootfs
vol_flags=autoresize

"-c 1975" Calculation details

---------------------------------------------------------------------------------------------------

Symbol Meaning Value for XO test case

SP                           PEB Size (Physical Erase Block Size)  128KiB
SL                           LEB Size (Logic Erase Block Size)        128KiB - 2 * 2KiB = 124 KiB (=126976) (-e)
P                           Total number of PEBs on the MTD device    250MiB / 128KiB = 2000           //only use 250MiB out of 256MiB
B                           Number of PEBs reserved for bad PEB handling  1% of P = 20
O                           The overhead related to storing EC and VID headers in bytes, i.e.       O = SP - SL 4KiB

UBI Overhead = (B + 4) * SP + O * (P - B - 4)
                          = (20 + 4) * 128KiB + 4 KiB * (2000 - 20 - 4)
                          = 3072KiB + 7904KiB
                          = 10976 KiB
                          = 85.75 PEBs (round to 86)
User Data

                          = 2000 - 86 = 1914 PEBs
                          = 1914 * 128KiB ~= 239MiB
                          -c <xxxx> xxxx = 1914 PEBs * 128KiB / 124KiB = 1975.74 = 1975 LEBs

In u-boot, use the commands to upgrade it on NAND FLASH (the ubi.img filesize is 0x1160000, fixed...):

tftp 82000000 ubi.img; mw.b 82000000 FF $filesize;  nandecc hw 2; nand erase 0 10000000; nand write 82000000 0 $filesize;

Boot with the following bootargs:

console=ttyO0,115200n8 run_hardware_tests  root=ubi0:rootfs rw ubi.mtd=11,2048 noinitrd rootfstype=ubifs rootwait=1 ip=none

boot log:

=========================================================

[ 0.938171] omap2-nand driver initializing
[ 0.942779] ONFI flash detected
[ 0.946411] NAND device: Manufacturer ID: 0x2c, Chip ID: 0xcc (Micron NAND 512MiB 3,3V 16-bit)
[ 0.955780] Creating 2 MTD partitions on "omap2-nand.0":
[ 0.961334] 0x000000000000-0x000010000000 : "File System (Bank-A)"
[ 1.075286] 0x000010000000-0x000020000000 : "File System (Bank-B)"
[ 1.189117] OneNAND driver initializing
[ 1.193572] UBI: attaching mtd11 to ubi0
[ 1.197723] UBI: physical eraseblock size: 131072 bytes (128 KiB)
[ 1.204254] UBI: logical eraseblock size: 126976 bytes
[ 1.209869] UBI: smallest flash I/O unit: 2048
[ 1.214782] UBI: sub-page size: 512
[ 1.219604] UBI: VID header offset: 2048 (aligned 2048)
[ 1.225860] UBI: data offset: 4096

[ 1.494384] UBI error: ubi_io_read: error -74 (ECC error) while reading 64 bytes from PEB 139:0, read 64 bytes

[ 1.508483] UBI error: ubi_io_read: error -74 (ECC error) while reading 512 bytes from PEB 139:2048, read 512 bytes
[ 1.523071] UBI error: ubi_io_read: error -74 (ECC error) while reading 64 bytes from PEB 140:0, read 64 bytes
[ 1.537170] UBI error: ubi_io_read: error -74 (ECC error) while reading 512 bytes from PEB 140:2048, read 512 bytes
[ 1.551788] UBI error: ubi_io_read: error -74 (ECC error) while reading 64 bytes from PEB 141:0, read 64 bytes
[ 1.565887] UBI error: ubi_io_read: error -74 (ECC error) while reading 512 bytes from PEB 141:2048, read 512 bytes
[ 1.580505] UBI error: ubi_io_read: error -74 (ECC error) while reading 64 bytes from PEB 142:0, read 64 bytes
[ 1.594604] UBI error: ubi_io_read: error -74 (ECC error) while reading 512 bytes from PEB 142:2048, read 512 bytes
[ 1.609222] UBI error: ubi_io_read: error -74 (ECC error) while reading 64 bytes from PEB 143:0, read 64 bytes
[ 1.623321] UBI error: ubi_io_read: error -74 (ECC error) while reading 512 bytes from PEB 143:2048, read 512 bytes
[ 1.637908] UBI error: ubi_io_read: error -74 (ECC error) while reading 64 bytes from PEB 144:0, read 64 bytes
[ 1.652008] UBI error: ubi_io_read: error -74 (ECC error) while reading 512 bytes from PEB 144:2048, read 512 bytes
[ 1.666625] UBI error: ubi_io_read: error -74 (ECC error) while reading 64 bytes from PEB 145:0, read 64 bytes
[ 1.680725] UBI error: ubi_io_read: error -74 (ECC error) while reading 512 bytes from PEB 145:2048, read 512 bytes
[ 1.695343] UBI error: ubi_io_read: error -74 (ECC error) while reading 64 bytes from PEB 146:0, read 64 bytes
[ 1.709442] UBI error: ubi_io_read: error -74 (ECC error) while reading 512 bytes from PEB 146:2048, read 512 bytes
[ 1.724029] UBI error: ubi_io_read: error -74 (ECC error) while reading 64 bytes from PEB 147:0, read 64 bytes
[ 1.738128] UBI error: ubi_io_read: error -74 (ECC error) while reading 512 bytes from PEB 147:2048, read 512 bytes
[ 1.752746] UBI error: ubi_io_read: error -74 (ECC error) while reading 64 bytes from PEB 148:0, read 64 bytes
[ 1.766845] UBI error: ubi_io_read: error -74 (ECC error) while reading 512 bytes from PEB 148:2048, read 512 bytes
[ 1.781463] UBI error: ubi_io_read: error -74 (ECC error) while reading 64 bytes from PEB 149:0, read 64 bytes
[ 1.795562] UBI error: ubi_io_read: error -74 (ECC error) while reading 512 bytes from PEB 149:2048, read 512 bytes
[ 1.810180] UBI error: ubi_io_read: error -74 (ECC error) while reading 64 bytes from PEB 150:0, read 64 bytes
[ 1.824279] UBI error: ubi_io_read: error -74 (ECC error) while reading 512 bytes from PEB 150:2048, read 512 bytes

In Linux, got the same bad result by the following commands:

Create 10MiB ubi partition on /dev/mtd11
#############################################
ubiformat /dev/mtd11 -s 512 -O 2048
ubiattach /dev/ubi_ctrl -m 11 -O 2048
ubimkvol /dev/ubi0 -N ubifs_volume -s 10MiB
mount -t ubifs ubi0:ubifs_volume /mnt

BUUUUUT, when i burn the ubi.img in u-boot with "nandecc sw" and change "pdata->ecc_opt =OMAP_ECC_BCH8_CODE_HW" to "pdata->ecc_opt =OMAP_ECC_HAMMING_CODE_DEFAULT" in xxx_nand_init() in board-xxxx.c, the ubifs on NAND FLASH works well. 

That is, HW ECC BCH8 failed while SW ECC works well with the same ubi.img on the NAND FLASH  of the board.

Please help find what's wrong with HW ECC or my settings. Thank you!

  • Frisky:

    Any idea you got to solve the issue?

    Regards,

    santosh vastrad

  • Santosh,

    No, I have not fixed it. Burn NAND with UBIFS with SW ECC can boot, but sometimes it crash in Linux (e.g. boot with /dev/mtd11, flash_erase & ubiformat /dev/mtd12). and i found "nandtest  -m -p 1 /dev/mtd11" will cause kernel crash/panic.  I'm doubting the nand timings? 

    Have you improved/modified the nand timings for your NAND FLASH? Thank you!

  • I still can't fix this issue. Could anyone from TI help me? Thank you!

  • Li,

    Can you send me the following files to the email renjith.thomas@pathpartnertech.com? Also send me the complete boot logs as well.

    1. arch/arm/mach-omap2/board-335xevm.c 
    2. arch/arm/mach-omap2/board-flash.c
    3. arch/arm/mach-omap2/gpmc.c
    4. drivers/mtd/nand/nand_base.c
    5. drivers/mtd/nand/omap2.c
  • Hi Frisky,

    Device width of MT29F4G16ABADAWP-IT is 16 bits, but NAND Flash on AM335x EVM is 8 bits. You have to modify bus width as 16 bits and pin mux (gpmc_ad8 - gpmc_ad15). You also have to set 14bits of ECC for every 512 bytes of data as patch of 81xx.

    Please apply below two patches on source codes of AM335XPSP_04.06.00.08.

    diff --git a/arch/arm/cpu/armv7/omap-common/spl.c b/arch/arm/cpu/armv7/omap-common/spl.c
    index c614602..7f38772 100644
    --- a/arch/arm/cpu/armv7/omap-common/spl.c
    +++ b/arch/arm/cpu/armv7/omap-common/spl.c
    @@ -119,7 +119,7 @@ void board_init_r(gd_t *id, ulong dummy)
     #endif
     
     	boot_device = omap_boot_device();
    -	debug("boot device - %d\n", boot_device);
    +	printf("boot device - %d\n", boot_device);
     	switch (boot_device) {
     #ifdef CONFIG_SPL_MMC_SUPPORT
     	case BOOT_DEVICE_MMC1:
    diff --git a/arch/arm/include/asm/arch-ti81xx/mem.h b/arch/arm/include/asm/arch-ti81xx/mem.h
    index 0ceb073..7c2124e 100644
    --- a/arch/arm/include/asm/arch-ti81xx/mem.h
    +++ b/arch/arm/include/asm/arch-ti81xx/mem.h
    @@ -97,7 +97,7 @@ enum {
     
     
     #ifdef CONFIG_AM335X   /* SA 8-Bit Nand */
    -#define M_NAND_GPMC_CONFIG1	0x00000800
    +#define M_NAND_GPMC_CONFIG1	0x00001810 //0x00001810 /* 16 bit Nand */
     #else
     #define M_NAND_GPMC_CONFIG1	0x00001810
     #endif
    diff --git a/board/ti/am335x/evm.c b/board/ti/am335x/evm.c
    index 19ccaa7..c62cb12 100644
    --- a/board/ti/am335x/evm.c
    +++ b/board/ti/am335x/evm.c
    @@ -404,6 +404,7 @@ static void rtc32k_enable(void)
      */
     int read_eeprom(void)
     {
    +#if 0
             /* Check if baseboard eeprom is available */
     	if (i2c_probe(I2C_BASE_BOARD_ADDR)) {
     		printf("Could not probe the EEPROM; something fundamentally "
    @@ -434,6 +435,25 @@ int read_eeprom(void)
     		}
     	}
     	return 0;
    +#else
    +
    +header.magic = 0xEE3355AA;
    +strncpy(header.name, "A33515BB", strlen("A33515BB"));
    +strncpy(header.version, "1.1A", strlen("1.1A"));
    +strncpy(header.serial, "52114P160063", strlen("52114P160063"));
    +#if 0
    +strncpy(header.config, "SKU#01", strlen("SKU#01"));
    +#else
    +strncpy(header.config, "A335X_SK", strlen("A335X_SK"));
    +#endif
    +#if 0
    +	printf("\tBoard name   : %.8s\n", header.name);
    +	printf("\tBoard version: %.4s\n", header.version);
    +	printf("\tBoard serial : %.12s\n", header.serial);
    +	printf("\tBoard config : %.8s\n\n", header.config);
    +#endif
    +	return 0;
    +#endif
     }
     
     #if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_BOARD_INIT)
    @@ -708,7 +728,7 @@ void s_init(void)
     		printf("read_eeprom() failure. continuing with ddr3\n");
     	}
     
    -	u32 is_ddr3 = 0;
    +	u32 is_ddr3 = 1;
     	if (!strncmp("A335X_SK", header.name, 8)) {
     		is_ddr3 = 1;
     
    @@ -724,10 +744,12 @@ void s_init(void)
     	if(is_ddr3 == 1){
     		ddr_pll_config(303);
     		config_am335x_ddr3();
    +printf(" DDR3\n");
     	}
     	else {
     		ddr_pll_config(266);
     		config_am335x_ddr2();
    +printf(" DDR2\n");
     	}
     
     #endif
    @@ -799,7 +821,7 @@ int board_init(void)
     
     	if (read_eeprom())
     		goto err_out;
    -
    +#if 0
     	detect_daughter_board();
     
     	if (!strncmp("SKU#01", header.config, 6)) {
    @@ -826,7 +848,12 @@ int board_init(void)
     		profile = 1;	/* profile 0 is internally considered as 1 */
     		daughter_board_connected = 1;
     	}
    -
    +#else
    +printf("Test\n");
    +	board_id = SK_BOARD;
    +	profile = 1;	/* profile 0 is internally considered as 1 */
    +	daughter_board_connected = 0;
    +#endif
     	configure_evm_pin_mux(board_id, header.version, profile, daughter_board_connected);
     
     #ifndef CONFIG_SPL_BUILD
    diff --git a/board/ti/am335x/mux.c b/board/ti/am335x/mux.c
    index 81e87a8..b564aa2 100644
    --- a/board/ti/am335x/mux.c
    +++ b/board/ti/am335x/mux.c
    @@ -286,6 +286,14 @@ static struct module_pin_mux nand_pin_mux[] = {
     	{OFFSET(gpmc_ad5), (MODE(0) | PULLUP_EN | RXACTIVE)},	/* NAND AD5 */
     	{OFFSET(gpmc_ad6), (MODE(0) | PULLUP_EN | RXACTIVE)},	/* NAND AD6 */
     	{OFFSET(gpmc_ad7), (MODE(0) | PULLUP_EN | RXACTIVE)},	/* NAND AD7 */
    +	{OFFSET(gpmc_ad8), (MODE(0) | PULLUP_EN | RXACTIVE)},	/* NAND AD8 */
    +	{OFFSET(gpmc_ad9), (MODE(0) | PULLUP_EN | RXACTIVE)},	/* NAND AD9 */
    +	{OFFSET(gpmc_ad10), (MODE(0) | PULLUP_EN | RXACTIVE)},	/* NAND_AD10 */
    +	{OFFSET(gpmc_ad11), (MODE(0) | PULLUP_EN | RXACTIVE)},	/* NAND_AD11 */
    +	{OFFSET(gpmc_ad12), (MODE(0) | PULLUP_EN | RXACTIVE)},	/* NAND_AD12 */
    +	{OFFSET(gpmc_ad13), (MODE(0) | PULLUP_EN | RXACTIVE)},	/* NAND_AD13 */
    +	{OFFSET(gpmc_ad14), (MODE(0) | PULLUP_EN | RXACTIVE)},	/* NAND_AD14 */
    +	{OFFSET(gpmc_ad15), (MODE(0) | PULLUP_EN | RXACTIVE)},	/* NAND_AD15 */
     	{OFFSET(gpmc_wait0), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* NAND WAIT */
     	{OFFSET(gpmc_wpn), (MODE(7) | PULLUP_EN | RXACTIVE)},	/* NAND_WPN */
     	{OFFSET(gpmc_csn0), (MODE(0) | PULLUDEN)},	/* NAND_CS0 */
    diff --git a/include/configs/am335x_evm.h b/include/configs/am335x_evm.h
    index 44a8500..ceb9701 100755
    --- a/include/configs/am335x_evm.h
    +++ b/include/configs/am335x_evm.h
    @@ -123,6 +123,15 @@
     		"tftp ${kloadaddr} ${bootfile}; " \
     		"run net_args; " \
     		"bootm ${kloadaddr}\0" \
    +	"fx=mmc rescan; nand erase 0x0 0x280000; nandecc hw 2; " \
    +		"fatload mmc 0 0x81000000 MLO; nand write 0x81000000 0x0 0x20000; nand write 0x81000000 0x20000 0x20000;\0" \
    +	"fu=mmc rescan; nand erase 0x80000 0x001E0000; " \
    +		"fatload mmc 0 0x81000000 u-boot.img; nand write 0x81000000 0x80000 0x1E0000; \0" \
    +	"fk=mmc rescan; nand erase 0x280000 0x500000; nandecc hw 2; " \
    +		"fatload mmc 0 0x81000000 uImage; nand write 0x81000000 0x280000 0x500000; \0" \
    +	"fr=mw.b 0x82000000 0xFF 0x1300000; mmc rescan; nand erase 0x780000 0xF880000; nandecc hw 2; " \
    +		"fatload mmc 0 0x82000000 ubi.img; nand write 0x82000000 0x780000 0x1300000; \0" \
    +	"fall=run fx;run fu;run fk;run fr; \0"
     
     #ifndef CONFIG_RESTORE_FLASH
     /* set to negative value for no autoboot */
    


    diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
    index b3d8b06..568a324 100644
    --- a/arch/arm/mach-omap2/board-am335xevm.c
    +++ b/arch/arm/mach-omap2/board-am335xevm.c
    @@ -83,10 +83,17 @@
     #define AR8051_DEBUG_RGMII_CLK_DLY_REG	0x5
     #define AR8051_RGMII_TX_CLK_DLY		BIT(8)
     
    +//#define AM335x_EVM
    +
     static const struct display_panel disp_panel = {
     	WVGA,
    +#if defined(AM335x_EVM)
     	32,
     	32,
    +#else
    +	16,
    +	16,
    +#endif
     	COLOR_ACTIVE,
     };
     
    @@ -118,7 +125,11 @@ static struct lcd_ctrl_config lcd_cfg = {
     	.ac_bias		= 255,
     	.ac_bias_intrpt		= 0,
     	.dma_burst_sz		= 16,
    +#if defined(AM335x_EVM)
     	.bpp			= 32,
    +#else
    +	.bpp			= 16,
    +#endif
     	.fdd			= 0x80,
     	.tft_alt_mode		= 0,
     	.stn_565_mode		= 0,
    @@ -195,8 +206,13 @@ static struct omap2_hsmmc_info am335x_mmc[] __initdata = {
     	{
     		.mmc            = 1,
     		.caps           = MMC_CAP_4_BIT_DATA,
    +#if defined(AM335x_EVM)
     		.gpio_cd        = GPIO_TO_PIN(0, 6),
     		.gpio_wp        = GPIO_TO_PIN(3, 18),
    +#else
    +		.gpio_cd        = -1,
    +		.gpio_wp        = -1,
    +#endif
     		.ocr_mask       = MMC_VDD_32_33 | MMC_VDD_33_34, /* 3V3 */
     	},
     	{
    @@ -428,6 +444,7 @@ static struct pinmux_config lcdc_pin_mux[] = {
     						       | AM33XX_PULL_DISA},
     	{"lcd_data15.lcd_data15",	OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT
     						       | AM33XX_PULL_DISA},
    +#if defined(AM335x_EVM)
     	{"gpmc_ad8.lcd_data16",		OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
     	{"gpmc_ad9.lcd_data17",		OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
     	{"gpmc_ad10.lcd_data18",	OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
    @@ -436,6 +453,7 @@ static struct pinmux_config lcdc_pin_mux[] = {
     	{"gpmc_ad13.lcd_data21",	OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
     	{"gpmc_ad14.lcd_data22",	OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
     	{"gpmc_ad15.lcd_data23",	OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
    +#endif
     	{"lcd_vsync.lcd_vsync",		OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
     	{"lcd_hsync.lcd_hsync",		OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
     	{"lcd_pclk.lcd_pclk",		OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
    @@ -463,6 +481,16 @@ static struct pinmux_config nand_pin_mux[] = {
     	{"gpmc_ad5.gpmc_ad5",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
     	{"gpmc_ad6.gpmc_ad6",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
     	{"gpmc_ad7.gpmc_ad7",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
    +#if !defined(AM335x_EVM)
    +	{"gpmc_ad8.gpmc_ad8",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
    +	{"gpmc_ad9.gpmc_ad9",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
    +	{"gpmc_ad10.gpmc_ad10",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
    +	{"gpmc_ad11.gpmc_ad11",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
    +	{"gpmc_ad12.gpmc_ad12",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
    +	{"gpmc_ad13.gpmc_ad13",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
    +	{"gpmc_ad14.gpmc_ad14",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
    +	{"gpmc_ad15.gpmc_ad15",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
    +#endif
     	{"gpmc_wait0.gpmc_wait0", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
     	{"gpmc_wpn.gpmc_wpn",	  OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP},
     	{"gpmc_csn0.gpmc_csn0",	  OMAP_MUX_MODE0 | AM33XX_PULL_DISA},
    @@ -1189,6 +1217,7 @@ static struct mtd_partition am335x_nand_partitions[] = {
     		.offset         = MTDPART_OFS_APPEND,   /* Offset = 0x780000 */
     		.size           = MTDPART_SIZ_FULL,
     	},
    +
     };
     
     /* SPI 0/1 Platform Data */
    @@ -1285,9 +1314,15 @@ static void evm_nand_init(int evm_id, int profile)
     	};
     
     	setup_pin_mux(nand_pin_mux);
    +#if defined(AM335x_EVM)
     	pdata = omap_nand_init(am335x_nand_partitions,
     		ARRAY_SIZE(am335x_nand_partitions), 0, 0,
     		&am335x_nand_timings);
    +#else
    +	pdata = omap_nand_init(am335x_nand_partitions,
    +		ARRAY_SIZE(am335x_nand_partitions), 0, NAND_BUSWIDTH_16,
    +		&am335x_nand_timings);
    +#endif
     	if (!pdata)
     		return;
     	pdata->ecc_opt =OMAP_ECC_BCH8_CODE_HW;
    @@ -2147,7 +2182,7 @@ static void am335x_setup_daughter_board(struct memory_accessor *m, void *c)
     	 * Read from the EEPROM to see the presence of daughter board.
     	 * If present, print the cpld version.
     	 */
    -
    +#if defined(AM335x_EVM)
     	ret = m->read(m, (char *)&config1, 0, sizeof(config1));
     	if (ret == sizeof(config1)) {
     		pr_info("Detected a daughter card on AM335x EVM..");
    @@ -2163,6 +2198,9 @@ static void am335x_setup_daughter_board(struct memory_accessor *m, void *c)
     		pr_info("CPLD version: %s\n", config1.cpld_ver);
     	else
     		pr_err("Unknown CPLD version found\n");
    +#else
    +	daughter_brd_detected = true;
    +#endif
     }
     
     static void am335x_evm_setup(struct memory_accessor *mem_acc, void *context)
    @@ -2176,20 +2214,36 @@ static void am335x_evm_setup(struct memory_accessor *mem_acc, void *context)
     
     	if (ret != sizeof(am335x_mac_addr)) {
     		pr_warning("AM335X: EVM Config read fail: %d\n", ret);
    +#if defined(AM335x_EVM)
     		return;
    +#endif
     	}
     
     	/* Fillup global mac id */
     	am33xx_cpsw_macidfillup(&am335x_mac_addr[0][0],
     				&am335x_mac_addr[1][0]);
     
    +#if defined(AM335x_EVM)
     	/* get board specific data */
     	ret = mem_acc->read(mem_acc, (char *)&config, 0, sizeof(config));
    +
     	if (ret != sizeof(config)) {
     		pr_err("AM335X EVM config read fail, read %d bytes\n", ret);
     		pr_err("This likely means that there either is no/or a failed EEPROM\n");
     		goto out;
     	}
    +#else
    +/*
    +Board name: A33515BB
    +Board version: 1.2A
    +SKU: SKU#01
    +*/
    +
    +config.header = AM335X_EEPROM_HEADER;
    +strncpy(&config.name, "A33515BB", strlen("A33515BB"));
    +strncpy(&config.version, "1.2A", strlen("1.2A"));
    +strncpy(&config.opt, "SKU#01", strlen("SKU#01"));
    +#endif
     
     	if (config.header != AM335X_EEPROM_HEADER) {
     		pr_err("AM335X: wrong header 0x%x, expected 0x%x\n",
    diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
    index a5df3ec..3231361 100644
    --- a/drivers/mtd/nand/nand_base.c
    +++ b/drivers/mtd/nand/nand_base.c
    @@ -846,9 +846,9 @@ static int nand_wait(struct mtd_info *mtd, struct nand_chip *chip)
     	int status, state = chip->state;
     
     	if (state == FL_ERASING)
    -		timeo += (HZ * 400) / 1000;
    +		timeo += (HZ * 4000) / 1000;//(HZ * 400) / 1000;
     	else
    -		timeo += (HZ * 20) / 1000;
    +		timeo += (HZ * 1000) / 1000;//(HZ * 20) / 1000;
     
     	led_trigger_event(nand_led_trigger, LED_FULL);
     
    @@ -877,6 +877,13 @@ static int nand_wait(struct mtd_info *mtd, struct nand_chip *chip)
     			cond_resched();
     		}
     	}
    +//
    +	/* if we have time-out exit, then check again */
    +	if (!(status & NAND_STATUS_READY)) {
    +		status = (int)chip->read_byte(mtd);
    +	}
    +//
    +
     	led_trigger_event(nand_led_trigger, LED_OFF);
     
     	status = (int)chip->read_byte(mtd);
    @@ -3166,6 +3173,7 @@ ident_done:
     		nand_manuf_ids[maf_idx].name,
     		chip->onfi_version ? chip->onfi_params.model : type->name);
     
    +pr_info("chipsize = %llu MB, writesize = %d, busw = %d, oobsize = %d, erasesize = %d\n", (chip->chipsize)>>20, mtd->writesize, busw, mtd->oobsize, mtd->erasesize);
     	return type;
     }
     
    @@ -3279,7 +3287,7 @@ int nand_scan_tail(struct mtd_info *mtd)
     	 * Check ECC mode, default to software if 3byte/512byte hardware ECC is
     	 * selected and we have 256 byte pagesize fallback to software ECC
     	 */
    -
    +printk(">>> chip->ecc.mode = %d, mtd->oobsize = %d\n", chip->ecc.mode, mtd->oobsize);
     	switch (chip->ecc.mode) {
     	case NAND_ECC_HW_OOB_FIRST:
     		/* Similar to NAND_ECC_HW, but a separate read_page handle */
    diff --git a/drivers/mtd/nand/nand_ids.c b/drivers/mtd/nand/nand_ids.c
    index 00cf1b0..9712adb 100644
    --- a/drivers/mtd/nand/nand_ids.c
    +++ b/drivers/mtd/nand/nand_ids.c
    @@ -93,14 +93,14 @@ struct nand_flash_dev nand_flash_ids[] = {
     
     	/* 2 Gigabit */
     	{"NAND 256MiB 1,8V 8-bit",	0xAA, 0, 256, 0, LP_OPTIONS},
    -	{"NAND 256MiB 3,3V 8-bit",	0xDA, 0, 256, 0, LP_OPTIONS},
    +	{"NAND 256MiB 3,3V 8-bit",	0xDA, 0, 256, 0, LP_OPTIONS}, //EVM
     	{"NAND 256MiB 1,8V 16-bit",	0xBA, 0, 256, 0, LP_OPTIONS16},
     	{"NAND 256MiB 3,3V 16-bit",	0xCA, 0, 256, 0, LP_OPTIONS16},
     
     	/* 4 Gigabit */
     	{"NAND 512MiB 1,8V 8-bit",	0xAC, 0, 512, 0, LP_OPTIONS},
     	{"NAND 512MiB 3,3V 8-bit",	0xDC, 0, 512, 0, LP_OPTIONS},
    -	{"NAND 512MiB 1,8V 16-bit",	0xBC, 0, 512, 0, LP_OPTIONS16},
    +	{"NAND 512MiB 1,8V 16-bit",	0xBC, 0, 512, 0, LP_OPTIONS16},//Kai
     	{"NAND 512MiB 3,3V 16-bit",	0xCC, 0, 512, 0, LP_OPTIONS16},
     
     	/* 8 Gigabit */
    diff --git a/drivers/mtd/nand/omap2.c b/drivers/mtd/nand/omap2.c
    index a2d3e29..a00f05c 100644
    --- a/drivers/mtd/nand/omap2.c
    +++ b/drivers/mtd/nand/omap2.c
    @@ -832,10 +832,11 @@ static int omap_read_page_bch(struct mtd_info *mtd, struct nand_chip *chip,
     
     		/* read respective ecc from oob area */
     		chip->cmdfunc(mtd, NAND_CMD_RNDOUT, oob_pos, page);
    -
    +#if 0
     		if (info->ecc_opt == OMAP_ECC_BCH8_CODE_HW)
     			chip->read_buf(mtd, oob, 13);
     		else
    +#endif
     			chip->read_buf(mtd, oob, eccbytes);
     		/* read syndrome */
     		chip->ecc.calculate(mtd, p, &ecc_calc[i]);
    


    After patches are applied and ubi.img is created, copy ubi.img to boot partition of SD card. Boot into U-boot command line.

    Erase whole NAND Flash.

    # nand scrub.chip

    Run patched script to flash loader/kernel/rootfs onto NAND Flash automatically.

    # run fall

    Remember to remove SD card and boot from NAND Flash.


    Note1 : If size of ubi.img is not 19MB(0x1300000), modify the value of 0x1300000 according to the size of your ubi.img in uboot patch. The size of MT29F4G16ABADAWP-IT is 512MB. Please modify rootfs partition size from 0x0F880000 to 0x1F880000.

        "fr=mw.b 0x82000000 0xFF 0x1300000; mmc rescan; nand erase 0x780000 0x0F880000; nandecc hw 2; " \
            "fatload mmc 0 0x82000000 ubi.img; nand write 0x82000000 0x780000 0x1300000; \0" \

    Note2 : If DDR2 is used, modify is_ddr3 in s_init() of 'uboot/board/ti/am335x/evm.c' .

        u32 is_ddr3 = 0;

  • Seven Lin & Renjith,

    After applying your patches, YES, HW ECC BCH8 works now! Thank you very much!!!

    But I have other issue occured. When I run "nandtest -m -p 1 /dev/mtd12" to test the other NAND partition when booting on with /dev/mtd11 or booting with net_nfsboot (NFS),  nandtest will cause kernel crash or kernel halt. Please look through the error message for kernel crash. Please help. I'm struggling with NAND issues:(

    Renjith, 

    I've sent the files to your mail box. Please help on the crash issue. I'm doubting on the nand timings.

    Thank you very much!

    U-Boot SPL 2011.09-local (Aug 21 2012 - 18:39:08)
    Texas Instruments Revision detection unimplemented
    BOOTEE: U-Boot boots on [0].[0].
    Programming BOOTEE passed.
    ==[SPI][0B]==
    SF: Detected W25Q128 with page size 4 KiB, total 16 MiB


    U-Boot 2011.09-local (Aug 21 2012 - 18:39:08)

    I2C: ready
    DRAM: 256 MiB
    WARNING: Caches not enabled
    NAND: HW ECC Hamming Code selected
    512 MiB
    MMC: OMAP SD/MMC: 0
    SF: Detected W25Q128 with page size 4 KiB, total 16 MiB
    *** Warning - bad CRC, using default environment

    ==[SPI][0B]==
    BOOTEE: U-Boot boots on [0].[0] SUCCESS.
    Programming BOOTEE passed.
    Net: cpsw
    Hit any key to stop autoboot: 0
    MPU-001#
    MPU-001#

    MPU-001# nand scrub.chip

    NAND scrub.chip: device 0 whole chip
    Warning: scrub option will erase all factory set bad blocks!
    There is no reliable way to recover them.
    Use this command only for testing purposes if you
    are sure of what you are doing!

    Really scrub this NAND flash? <y/N>
    Erasing at 0x175c0000 -- 73% complete.nand_erase: attempt to erase a bad block at page 0x0002f480

    nand0: MTD Erase failure: -5
    Erasing at 0x1fae0000 -- 99% complete.nand_erase: attempt to erase a bad block at page 0x0003fcc0

    nand0: MTD Erase failure: -5
    nand_erase: attempt to erase a bad block at page 0x0003fd00

    nand0: MTD Erase failure: -5
    nand_erase: attempt to erase a bad block at page 0x0003fd40

    nand0: MTD Erase failure: -5
    nand_erase: attempt to erase a bad block at page 0x0003fd80

    nand0: MTD Erase failure: -5
    nand_erase: attempt to erase a bad block at page 0x0003fdc0

    nand0: MTD Erase failure: -5
    nand_erase: attempt to erase a bad block at page 0x0003fe00

    nand0: MTD Erase failure: -5
    nand_erase: attempt to erase a bad block at page 0x0003fe40

    nand0: MTD Erase failure: -5
    nand_erase: attempt to erase a bad block at page 0x0003fe80

    nand0: MTD Erase failure: -5
    nand_erase: attempt to erase a bad block at page 0x0003fec0

    nand0: MTD Erase failure: -5
    nand_erase: attempt to erase a bad block at page 0x0003ff40

    nand0: MTD Erase failure: -5
    Erasing at 0x1ffe0000 -- 100% complete.
    OK
    MPU-001#


    MPU-001# mmc rescan; fatload mmc 0 0x82000000 ubi.img
    reading ubi.img

    32112640 bytes read
    MPU-001# nandecc hw 2
    HW ECC BCH8 Selected
    MPU-001# mmc rescan; mw.b 0x82000000 0xFF 0x1EA0000; fatload mmc 0 0x82000000 ubi.img; nand erase ${nand_fs_banka_addr} ${nand_fs_bank_sz}; nand write ${loadaddr} ${nand_fs_banka_addr} ${filesize};
    reading ubi.img

    32112640 bytes read

    NAND erase: device 0 offset 0x0, size 0x10000000
    Erasing at 0xffe0000 -- 100% complete.
    OK

    NAND write: device 0 offset 0x0, size 0x1ea0000
    32112640 bytes written: OK
    MPU-001# run spi_nandboot
    Booting from spi with nand_fs ...
    SF: Detected W25Q128 with page size 4 KiB, total 16 MiB
    Reading kernel ...
    ## Booting kernel from Legacy Image at 80007fc0 ...
    Image Name: Linux-3.2.0
    Image Type: ARM Linux Kernel Image (uncompressed)
    Data Size: 3065056 Bytes = 2.9 MiB
    Load Address: 80008000
    Entry Point: 80008000
    Verifying Checksum ... OK
    XIP Kernel Image ... OK
    OK

    Starting kernel ...

    Uncompressing Linux... done, booting the kernel.
    [ 0.000000] Initializing cgroup subsys cpuset
    [ 0.000000] Initializing cgroup subsys cpu
    [ 0.000000] Linux version 3.2.0 (lizq@ubuntu10044) (gcc version 4.5.3 20110311 (prerelease) (GCC) ) #16 Tue Aug 21 18:42:52 CST 2012
    [ 0.000000] CPU: ARMv7 Processor [413fc082] revision 2 (ARMv7), cr=10c53c7d
    [ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
    [ 0.000000] Machine: am335xevm
    [ 0.000000] Memory policy: ECC disabled, Data cache writeback
    [ 0.000000] AM335X ES1.0 (sgx neon )
    [ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 65024
    [ 0.000000] Kernel command line: console=ttyO0,115200n8 run_hardware_tests spi_autoboot_flag=0 root=ubi0:rootfs rw ubi.mtd=11,2048 noinitrd rootfstype=ubifs rootwait=1 ip=none
    [ 0.000000] PID hash table entries: 1024 (order: 0, 4096 bytes)
    [ 0.000000] Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
    [ 0.000000] Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
    [ 0.000000] allocated 1048576 bytes of page_cgroup
    [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups
    [ 0.000000] Memory: 256MB = 256MB total
    [ 0.000000] Memory: 252472k/252472k available, 9672k reserved, 0K highmem
    [ 0.000000] Virtual kernel memory layout:
    [ 0.000000] vector : 0xffff0000 - 0xffff1000 ( 4 kB)
    [ 0.000000] fixmap : 0xfff00000 - 0xfffe0000 ( 896 kB)
    [ 0.000000] vmalloc : 0xd0800000 - 0xff000000 ( 744 MB)
    [ 0.000000] lowmem : 0xc0000000 - 0xd0000000 ( 256 MB)
    [ 0.000000] modules : 0xbf000000 - 0xc0000000 ( 16 MB)
    [ 0.000000] .text : 0xc0008000 - 0xc056b608 (5518 kB)
    [ 0.000000] .init : 0xc056c000 - 0xc05a1000 ( 212 kB)
    [ 0.000000] .data : 0xc05a2000 - 0xc05e9600 ( 286 kB)
    [ 0.000000] .bss : 0xc05e9624 - 0xc063505c ( 303 kB)
    [ 0.000000] NR_IRQS:396 nr_irqs:396 396
    [ 0.000000] IRQ: Found an INTC at 0xfa200000 (revision 5.0) with 128 interrupts
    [ 0.000000] Total of 128 interrupts on 1 active controller
    [ 0.000000] OMAP clockevent source: GPTIMER2 at 24000000 Hz
    [ 0.000000] OMAP clocksource: GPTIMER1 at 32768 Hz
    [ 0.000000] sched_clock: 32 bits at 32kHz, resolution 30517ns, wraps every 131071999ms
    [ 0.000000] Console: colour dummy device 80x30
    [ 0.000122] Calibrating delay loop... 718.02 BogoMIPS (lpj=3590144)
    [ 0.058959] pid_max: default: 32768 minimum: 301
    [ 0.059082] Security Framework initialized
    [ 0.059143] Mount-cache hash table entries: 512
    [ 0.059509] Initializing cgroup subsys cpuacct
    [ 0.059539] Initializing cgroup subsys memory
    [ 0.059600] Initializing cgroup subsys devices
    [ 0.059600] Initializing cgroup subsys freezer
    [ 0.059600] Initializing cgroup subsys blkio
    [ 0.059631] Initializing cgroup subsys perf_event
    [ 0.059692] CPU: Testing write buffer coherency: ok
    [ 0.060607] devtmpfs: initialized
    [ 0.079650] omap_hwmod: pruss: failed to hardreset
    [ 0.080169] print_constraints: dummy:
    [ 0.080413] NET: Registered protocol family 16
    [ 0.081481] OMAP GPIO hardware version 0.1
    [ 0.082427] omap_mux_init: Add partition: #1: core, flags: 0
    [ 0.083618] omap_i2c.1: alias fck already exists
    [ 0.083984] hw-breakpoint: debug architecture 0x4 unsupported.
    [ 0.084167] omap2_mcspi.1: alias fck already exists
    [ 0.084259] omap2_mcspi.2: alias fck already exists
    [ 0.084381] edma.0: alias fck already exists
    [ 0.084411] edma.0: alias fck already exists
    [ 0.084442] edma.0: alias fck already exists
    [ 0.090850] bio: create slab <bio-0> at 0
    [ 0.091888] SCSI subsystem initialized
    [ 0.092712] usbcore: registered new interface driver usbfs
    [ 0.092834] usbcore: registered new interface driver hub
    [ 0.093017] usbcore: registered new device driver usb
    [ 0.093322] registerd cppi-dma Intr @ IRQ 17
    [ 0.093322] Cppi41 Init Done Qmgr-base(d087a000) dma-base(d0878000)
    [ 0.093322] Cppi41 Init Done
    [ 0.093353] musb-ti81xx musb-ti81xx: musb0, board_mode=0x13, plat_mode=0x3
    [ 0.093505] musb-ti81xx musb-ti81xx: musb1, board_mode=0x13, plat_mode=0x1
    [ 0.093933] omap_i2c omap_i2c.1: bus 1 rev2.4.0 at 100 kHz
    [ 0.094512] tps65910 1-002d: could not be detected
    [ 0.095581] Switching to clocksource gp timer
    [ 0.106231] musb-hdrc: version 6.0, ?dma?, otg (peripheral+host)
    [ 0.106414] musb-hdrc musb-hdrc.0: dma type: dma-cppi41
    [ 0.106597] MUSB0 controller's USBSS revision = 4ea20800
    [ 0.107360] musb-hdrc musb-hdrc.0: USB OTG mode controller at d083c000 using DMA, IRQ 18
    [ 0.107635] musb-hdrc musb-hdrc.1: dma type: dma-cppi41
    [ 0.107788] MUSB1 controller's USBSS revision = 4ea20800
    [ 0.108184] musb-hdrc musb-hdrc.1: MUSB HDRC host driver
    [ 0.108276] musb-hdrc musb-hdrc.1: new USB bus registered, assigned bus number 1
    [ 0.108398] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
    [ 0.108428] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
    [ 0.108428] usb usb1: Product: MUSB HDRC host driver
    [ 0.108428] usb usb1: Manufacturer: Linux 3.2.0 musb-hcd
    [ 0.108459] usb usb1: SerialNumber: musb-hdrc.1
    [ 0.109130] hub 1-0:1.0: USB hub found
    [ 0.109161] hub 1-0:1.0: 1 port detected
    [ 0.109649] musb-hdrc musb-hdrc.1: USB Host mode controller at d083e800 using DMA, IRQ 19
    [ 0.110015] NET: Registered protocol family 2
    [ 0.110229] IP route cache hash table entries: 2048 (order: 1, 8192 bytes)
    [ 0.110595] TCP established hash table entries: 8192 (order: 4, 65536 bytes)
    [ 0.110748] TCP bind hash table entries: 8192 (order: 3, 32768 bytes)
    [ 0.110839] TCP: Hash tables configured (established 8192 bind 8192)
    [ 0.110870] TCP reno registered
    [ 0.110870] UDP hash table entries: 256 (order: 0, 4096 bytes)
    [ 0.110900] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
    [ 0.111114] NET: Registered protocol family 1
    [ 0.111419] RPC: Registered named UNIX socket transport module.
    [ 0.111419] RPC: Registered udp transport module.
    [ 0.111450] RPC: Registered tcp transport module.
    [ 0.111450] RPC: Registered tcp NFSv4.1 backchannel transport module.
    [ 0.111663] NetWinder Floating Point Emulator V0.97 (double precision)
    [ 0.123229] VFS: Disk quotas dquot_6.5.2
    [ 0.123291] Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
    [ 0.124420] msgmni has been set to 493
    [ 0.125854] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253)
    [ 0.125946] io scheduler noop registered
    [ 0.125946] io scheduler deadline registered
    [ 0.126007] io scheduler cfq registered (default)
    [ 0.126861] omap_uart.0: ttyO0 at MMIO 0x44e09000 (irq = 72) is a OMAP UART0
    [ 0.748962] console [ttyO0] enabled
    [ 0.753204] omap_uart.1: ttyO1 at MMIO 0x48022000 (irq = 73) is a OMAP UART1
    [ 0.760986] omap_uart.2: ttyO2 at MMIO 0x48024000 (irq = 74) is a OMAP UART2
    [ 0.768707] omap_uart.3: ttyO3 at MMIO 0x481a6000 (irq = 44) is a OMAP UART3
    [ 0.776397] omap_uart.4: ttyO4 at MMIO 0x481a8000 (irq = 45) is a OMAP UART4
    [ 0.784088] omap_uart.5: ttyO5 at MMIO 0x481aa000 (irq = 46) is a OMAP UART5
    [ 0.799011] brd: module loaded
    [ 0.806030] loop: module loaded
    [ 0.809387] i2c-core: driver [tsl2550] using legacy suspend method
    [ 0.815826] i2c-core: driver [tsl2550] using legacy resume method
    [ 0.822235] at24 1-0050: 32768 byte 24c256 EEPROM, writable, 64 bytes/write
    [ 0.832031] ID EEPROM: detected.
    [ 0.835388] ID EEPROM: TAG not valid
    [ 0.839782] tps65217 1-0024: TPS65217 ID 0xf version 1.1
    [ 0.847167] print_constraints: DCDC1: 900 <--> 1800 mV at 1800 mV
    [ 0.855468] print_constraints: DCDC2: 900 <--> 3300 mV at 1275 mV
    [ 0.863769] print_constraints: DCDC3: 900 <--> 1500 mV at 1100 mV
    [ 0.872039] print_constraints: LDO1: 1000 <--> 3300 mV at 1800 mV
    [ 0.880279] print_constraints: LDO2: 900 <--> 3300 mV at 3300 mV
    [ 0.888427] print_constraints: LDO3: 1800 <--> 3300 mV at 3300 mV
    [ 0.896697] print_constraints: LDO4: 1800 <--> 3300 mV at 3300 mV
    [ 0.903717] Configure SYSBOOT Enable pin...
    [ 0.908111] Configure NANDBOOT Control pin...
    [ 0.913116] omap_hsmmc.0: alias fck already exists
    [ 0.919525] omap-gpmc omap-gpmc: GPMC revision 6.0
    [ 0.924530] Registering NAND on CS0
    [ 0.928588] d_can.0: alias fck already exists
    [ 0.933807] at24 1-0051: 32768 byte 24c256 EEPROM, writable, 64 bytes/write
    [ 0.941925] BOOT EEPROM: detected.
    [ 0.946350] mtdoops: mtd device (mtddev=name/number) must be supplied
    [ 0.953491] m25p80 spi1.0: w25q128 (16384 Kbytes)
    [ 0.958801] Creating 10 MTD partitions on "spi_flash":
    [ 0.964172] 0x000000000000-0x000000080000 : "SPL/MLO(Golden,RO)"
    [ 0.971649] 0x000000080000-0x000000100000 : "U-Boot (Golden,RO)"
    [ 0.978973] 0x000000100000-0x000000500000 : "Kernel (Golden,RO)"
    [ 0.986297] 0x000000500000-0x000000580000 : "U-Boot (Bank-A)"
    [ 0.993316] 0x000000580000-0x000000600000 : "U-Boot (Bank-B)"
    [ 1.000366] 0x000000600000-0x000000680000 : "U-Boot Env (Bank-A)"
    [ 1.007690] 0x000000680000-0x000000700000 : "U-Boot Env (Bank-B)"
    [ 1.014984] 0x000000700000-0x000000b00000 : "Kernel (Bank-A)"
    [ 1.021972] 0x000000b00000-0x000000f00000 : "Kernel (Bank-B)"
    [ 1.028961] 0x000000f00000-0x000001000000 : "Reserved (not used)"
    [ 1.036590] m25p80 spi2.0: w25q128 (16384 Kbytes)
    [ 1.041870] Creating 1 MTD partitions on "spi_flash":
    [ 1.047180] 0x000000000000-0x000001000000 : "RAMDISK"
    [ 1.054016] omap2-nand driver initializing
    [ 1.058746] NAND device: Manufacturer ID: 0x2c, Chip ID: 0xcc (Micron NAND 512MiB 3,3V 16-bit)
    [ 1.067749] chipsize = 512 MB, writesize = 2048, busw = 2, oobsize = 64, erasesize = 131072
    [ 1.076477] >>> chip->ecc.mode = 2, mtd->oobsize = 64
    [ 1.082092] Creating 2 MTD partitions on "omap2-nand.0":
    [ 1.087677] 0x000000000000-0x000010000000 : "UBIFS (Bank-A)"
    [ 1.200958] 0x000010000000-0x000020000000 : "UBIFS (Bank-B)"
    [ 1.314178] OneNAND driver initializing
    [ 1.318664] UBI: attaching mtd11 to ubi0
    [ 1.322753] UBI: physical eraseblock size: 131072 bytes (128 KiB)
    [ 1.329315] UBI: logical eraseblock size: 126976 bytes
    [ 1.334930] UBI: smallest flash I/O unit: 2048
    [ 1.339843] UBI: sub-page size: 512
    [ 1.344665] UBI: VID header offset: 2048 (aligned 2048)
    [ 1.350921] UBI: data offset: 4096
    [ 2.645416] UBI: max. sequence number: 0
    [ 2.681854] UBI: volume 0 ("rootfs") re-sized from 1974 to 2024 LEBs
    [ 2.689208] UBI: attached mtd11 to ubi0
    [ 2.693206] UBI: MTD device name: "UBIFS (Bank-A)"
    [ 2.699249] UBI: MTD device size: 256 MiB
    [ 2.704406] UBI: number of good PEBs: 2048
    [ 2.709320] UBI: number of bad PEBs: 0
    [ 2.713928] UBI: number of corrupted PEBs: 0
    [ 2.718566] UBI: max. allowed volumes: 128
    [ 2.723388] UBI: wear-leveling threshold: 4096
    [ 2.728302] UBI: number of internal volumes: 1
    [ 2.732910] UBI: number of user volumes: 1
    [ 2.737548] UBI: available PEBs: 0
    [ 2.742187] UBI: total number of reserved PEBs: 2048
    [ 2.747344] UBI: number of PEBs reserved for bad PEB handling: 20
    [ 2.753692] UBI: max/mean erase counter: 1/0
    [ 2.758148] UBI: image sequence number: 1210917439
    [ 2.763671] CAN device driver interface
    [ 2.767700] CAN bus driver for Bosch D_CAN controller 1.0
    [ 2.773986] d_can d_can.0: device registered (irq=52, irq_obj=53)
    [ 2.780731] UBI: background thread "ubi_bgt0d" started, PID 63
    [ 2.826507] davinci_mdio davinci_mdio.0: davinci mdio revision 1.6
    [ 2.832946] davinci_mdio davinci_mdio.0: detected phy mask fffffffc
    [ 2.856994] davinci_mdio.0: probed
    [ 2.860534] davinci_mdio davinci_mdio.0: phy[0]: device 0:00, driver SMSC LAN8710/LAN8720
    [ 2.869110] davinci_mdio davinci_mdio.0: phy[1]: device 0:01, driver SMSC LAN8710/LAN8720
    [ 2.877777] usbcore: registered new interface driver cdc_ether
    [ 2.883911] usbcore: registered new interface driver cdc_eem
    [ 2.889892] usbcore: registered new interface driver dm9601
    [ 2.895721] cdc_ncm: 04-Aug-2011
    [ 2.899169] usbcore: registered new interface driver cdc_ncm
    [ 2.905059] Initializing USB Mass Storage driver...
    [ 2.910247] usbcore: registered new interface driver usb-storage
    [ 2.916534] USB Mass Storage support registered.
    [ 2.986389] omap_rtc omap_rtc: rtc core: registered omap_rtc as rtc0
    [ 2.993041] omap_rtc: already running
    [ 2.996948] i2c /dev entries driver
    [ 3.076995] OMAP Watchdog Timer Rev 0x01: initial timeout 60 sec
    [ 3.096771] cpuidle: using governor ladder
    [ 3.101165] cpuidle: using governor menu
    [ 3.108245] usbcore: registered new interface driver usbhid
    [ 3.114044] usbhid: USB HID core driver
    [ 3.118377] oprofile: hardware counters not available
    [ 3.123657] oprofile: using timer interrupt.
    [ 3.128234] nf_conntrack version 0.5.0 (3944 buckets, 15776 max)
    [ 3.134796] ip_tables: (C) 2000-2006 Netfilter Core Team
    [ 3.140380] arp_tables: (C) 2002 David S. Miller
    [ 3.145172] TCP cubic registered
    [ 3.148681] NET: Registered protocol family 10
    [ 3.154083] IPv6 over IPv4 tunneling driver
    [ 3.159606] NET: Registered protocol family 17
    [ 3.164367] can: controller area network core (rev 20090105 abi 8)
    [ 3.170928] NET: Registered protocol family 29
    [ 3.175598] can: raw protocol (rev 20090105)
    [ 3.180053] can: broadcast manager protocol (rev 20090105 t)
    [ 3.186004] 8021q: 802.1Q VLAN Support v1.8
    [ 3.190399] Registering the dns_resolver key type
    [ 3.195343] VFP support v0.3: implementor 41 architecture 3 part 30 variant c rev 3
    [ 3.203338] ThumbEE CPU extension supported.
    [ 3.207885] mux: Failed to setup hwmod io irq -22
    [ 3.213409] Power Management for AM33XX family
    [ 3.218261] Trying to load am335x-pm-firmware.bin (60 secs timeout)
    [ 3.224914] Copied the M3 firmware to UMEM
    [ 3.248168] Detected MACID=0:18:31:89:97:9e
    [ 3.253631] omap_rtc omap_rtc: setting system clock to 2000-01-01 00:30:16 UTC (946686616)
    [ 3.347778] mmc0: host does not support reading read-only switch. assuming write-enable.
    [ 3.367340] mmc0: new high speed SDHC card at address 1234
    [ 3.416381] mmcblk0: mmc0:1234 SA04G 3.63 GiB
    [ 3.423370] mmcblk0: p1 p2
    [ 3.448944] UBIFS: start fixing up free space
    [ 5.582946] UBIFS: free space fixup complete
    [ 5.597595] UBIFS: mounted UBI device 0, volume 0, name "rootfs"
    [ 5.603851] UBIFS: file system size: 249380864 bytes (243536 KiB, 237 MiB, 1964 LEBs)
    [ 5.612243] UBIFS: journal size: 9023488 bytes (8812 KiB, 8 MiB, 72 LEBs)
    [ 5.619873] UBIFS: media format: w4/r0 (latest is w4/r0)
    [ 5.625946] UBIFS: default compressor: lzo
    [ 5.630249] UBIFS: reserved for root: 0 bytes (0 KiB)
    [ 5.681671] VFS: Mounted root (ubifs filesystem) on device 0:14.
    [ 5.691192] devtmpfs: mounted
    [ 5.694671] Freeing init memory: 212K
    [ 6.585449] systemd[1]: systemd 37 running in system mode. (+PAM +LIBWRAP -AUDIT -SELINUX +SYSVINIT -LIBCRYPTSETUP; angstrom)

    Welcome to The ?…ngstr??m Distribution!

    [ 6.650390] systemd[1]: Set hostname to <MPU-001>.
    [ 6.671508] systemd[1]: Initializing machine ID from random generator.
    [ 7.919342] systemd[1]: Cannot add dependency job for unit configure.service, ignoring: Unit configure.service failed to load: No such file or directory. See system logs and 'systemctl status configure.service' for details.
    Starting Runtime Directory...
    Starting Lock Directory...
    Starting Remount API VFS...
    Starting Media Directory...
    Starting POSIX Message Queue File System...
    Starting Security File System...
    Starting udev Coldplug all Devices...
    Starting udev Kernel Device Manager...
    Starting Syslog Kernel Log Buffer Bridge...
    Started Syslog Kernel Log Buffer Bridge [ OK ]
    Starting Debug File System...
    Started Huge Pages File System [ OK ]
    Started Load Kernel Modules [ OK ]
    Started Configuration File System [ OK ]
    Started FUSE Control File System [ OK ]
    Started Set Up Additional Binary Formats [ OK ]
    Starting File System Check on Root Device...
    Started Apply Kernel Variables [ OK ]
    Starting STDOUT Syslog Bridge...
    Started STDOUT Syslog Bridge [ OK ]
    Started File System Check on Root Device [ OK ]
    Started udev Coldplug all Devices [ OK ]
    Started Runtime Directory [ OK ]
    Started Lock Directory [ OK ]
    Started Media Directory [ OK ]
    [ 8.955200] udevd[79]: starting version 175
    Started udev Kernel Device Manager [ OK ]
    Started Remount API VFS [ OK ]
    Started POSIX Message Queue File System [ OK ]
    Started Security File System [ OK ]
    Started Debug File System [ OK ]
    Starting Remount Root FS...
    Started Remount Root FS [ OK ]
    Starting Opkg first boot configure...
    Starting /tmp...
    Started Machine ID first boot configure [ OK ]
    Started /tmp [ OK ]
    Starting Recreate Volatile Files and Directories...
    Starting Load Random Seed...
    Started Load Random Seed [ OK ]
    Started Recreate Volatile Files and Directories [ OK ]
    [ 10.568939] systemd[1]: Reloading.
    [ 10.610382] S98configure[127]: ln -s '/lib/systemd/system/avahi-daemon.service' '/etc/systemd/system/dbus-org.freedesktop.Avahi.service'
    [ 10.667175] S98configure[127]: ln -s '/lib/systemd/system/avahi-daemon.service' '/etc/systemd/system/multi-user.target.wants/avahi-daemon.service'
    [ 10.721740] S98configure[127]: ln -s '/lib/systemd/system/avahi-daemon.socket' '/etc/systemd/system/sockets.target.wants/avahi-daemon.socket'
    [ 11.393890] S98configure[127]: Configuring pam-plugin-unix.
    [ 11.408905] S98configure[127]: Configuring update-modules.
    [ 11.414672] S98configure[127]: Configuring base-files.
    [ 11.513702] S98configure[127]: Configuring libnss-mdns.
    [ 11.539794] S98configure[127]: Configuring avahi-systemd.

    .---O---.
    | | .-. o o
    | | |-----.-----.-----.| | .----..-----.-----.
    | | | __ | ---'| '--.| .-'| | |
    | | | | | |--- || --'| | | ' | | | |
    '---'---'--'--'--. |-----''----''--' '-----'-'-'-'
    -' |
    '---'

    The Angstrom Distribution MPU-001 ttyO0

    Angstrom v2012.01-core - Kernel 3.2.0

    MPU-001 login: root
    Password:
    root@MPU-001:~# nandtest -m -p 1 /dev/mtd12
    ECC corrections: 0
    ECC failures : 0
    Bad blocks : 11
    BBT blocks : 0
    Bad block at 0x07a40000
    09d00000: erasi[ 152.616851] Unable to handle kernel NULL pointer dereference at virtual address 00000200
    [ 152.625427] pgd = cf1dc000
    [ 152.628204] [00000200] *pgd=8e51e831, *pte=00000000, *ppte=00000000
    [ 152.634735] Internal error: Oops: 80000007 [#1]
    [ 152.639434] Modules linked in:
    [ 152.642578] CPU: 0 Not tainted (3.2.0 #16)
    [ 152.647186] PC is at 0x200
    [ 152.650024] LR is at ktime_get+0x70/0xe4
    [ 152.654083] pc : [<00000200>] lr : [<c005a590>] psr: 60000193
    [ 152.654083] sp : cf265d98 ip : 00000000 fp : 00000000
    [ 152.665985] r10: 00000097 r9 : 00000000 r8 : 00006dc4
    [ 152.671386] r7 : cf265de8 r6 : c060d8d0 r5 : 7fffffff r4 : c05aaa40
    [ 152.678161] r3 : 00000200 r2 : 5eeb96b8 r1 : c05e9ce8 r0 : c05aaa40
    [ 152.684936] Flags: nZCv IRQs off FIQs on Mode SVC_32 ISA ARM Segment user
    [ 152.692413] Control: 10c5387d Table: 8f1dc019 DAC: 00000015
    [ 152.698364] Process nandtest (pid: 323, stack limit = 0xcf2642f0)
    [ 152.704681] Stack: (0xcf265d98 to 0xcf266000)
    [ 152.709197] 5d80: 5eeb96b8 00000000
    [ 152.717681] 5da0: ffffffff 7fffffff c05c5de8 00000000 00000000 cf264000 00000001 c0056c80
    [ 152.726135] 5dc0: cf0f7200 c0261ed0 c05c5de8 87ab3600 00000023 c005efb0 09d00000 00020000
    [ 152.734619] 5de0: 00000000 00000048 cf8066c0 00000000 00000001 c05aaa00 00000044 cf8064c0
    [ 152.743103] 5e00: 00000000 00000000 c061bdd8 cf264000 00000001 c00208c4 c00208a4 c0071ae0
    [ 152.751586] 5e20: cf8064c0 c05aaa00 00007c30 cf8064c0 00000000 00000004 cf265e90 2e4f5e3d
    [ 152.760070] 5e40: 00000000 cf264000 4028f008 c0071c4c cf8064c0 c0073c78 00000044 c007160c
    [ 152.768554] 5e60: 00000044 c00133f4 00000002 00000044 fa200000 c00086e4 86815af2 c01f1d34
    [ 152.777038] 5e80: 20000013 ffffffff cf265ec4 c0012140 ce57bdc0 402aaddc 000041c0 228c282e
    [ 152.785491] 5ea0: a5428ea2 09c8ab4b becaed4a 12d30dd5 2e4f5e3d 00000000 cf264000 4028f008
    [ 152.793975] 5ec0: ca61951c cf265edc 86815af2 c01f1d34 20000013 ffffffff 00020000 ce560000
    [ 152.802459] 5ee0: cfaba400 cf265fa8 00020000 ce560000 00020000 00000000 00020000 c0260ff0
    [ 152.810943] 5f00: 40032000 00000015 cf265f24 c0031a6c 00000000 cfb4fd00 ce41dc00 00000000
    [ 152.819427] 5f20: cf150840 00000002 09d20000 00000000 cf150840 c00b05ec 00000001 00020000
    [ 152.827911] 5f40: cf265fa8 00020000 cf150840 4028f008 cf265fa8 c00126a8 cf264000 00000000
    [ 152.836364] 5f60: 00000000 c00b0850 cf150840 4028f008 cf150840 00000000 4028f008 00020000
    [ 152.844848] 5f80: c00126a8 c00b0ba4 00000003 00000000 00020000 09d00000 00000000 00020000
    [ 152.853332] 5fa0: 000000b5 c0012500 09d00000 00000000 00000003 4028f008 00020000 00000000
    [ 152.861816] 5fc0: 09d00000 00000000 00020000 000000b5 00000003 00020000 09d00000 00000000
    [ 152.870300] 5fe0: 000118a4 bec38bc8 00008828 40202a5c 60000010 00000003 00000000 00000000
    [ 152.878784] [<c005a590>] (ktime_get+0x70/0xe4) from [<c0056c80>] (hrtimer_interrupt+0x40/0x228)
    [ 152.887817] [<c0056c80>] (hrtimer_interrupt+0x40/0x228) from [<c00208c4>] (omap2_gp_timer_interrupt+0x20/0x30)
    [ 152.898193] [<c00208c4>] (omap2_gp_timer_interrupt+0x20/0x30) from [<c0071ae0>] (handle_irq_event_percpu+0x30/0x174)
    [ 152.909118] [<c0071ae0>] (handle_irq_event_percpu+0x30/0x174) from [<c0071c4c>] (handle_irq_event+0x28/0x38)
    [ 152.919311] [<c0071c4c>] (handle_irq_event+0x28/0x38) from [<c0073c78>] (handle_level_irq+0xac/0xd4)
    [ 152.928802] [<c0073c78>] (handle_level_irq+0xac/0xd4) from [<c007160c>] (generic_handle_irq+0x20/0x30)
    [ 152.938476] [<c007160c>] (generic_handle_irq+0x20/0x30) from [<c00133f4>] (handle_IRQ+0x60/0x84)
    [ 152.947570] [<c00133f4>] (handle_IRQ+0x60/0x84) from [<c00086e4>] (omap3_intc_handle_irq+0x5c/0x6c)
    [ 152.956970] [<c00086e4>] (omap3_intc_handle_irq+0x5c/0x6c) from [<c0012140>] (__irq_svc+0x40/0x60)
    [ 152.966247] Exception stack(0xcf265e90 to 0xcf265ed8)
    [ 152.971496] 5e80: ce57bdc0 402aaddc 000041c0 228c282e
    [ 152.979980] 5ea0: a5428ea2 09c8ab4b becaed4a 12d30dd5 2e4f5e3d 00000000 cf264000 4028f008
    [ 152.988433] 5ec0: ca61951c cf265edc 86815af2 c01f1d34 20000013 ffffffff
    [ 152.995300] [<c0012140>] (__irq_svc+0x40/0x60) from [<c01f1d34>] (__copy_from_user+0x60/0x3ac)
    [ 153.004241] Code: bad PC value
    09d00000:[ 153.007415] ---[ end trace db3b2dbff3185c2f ]---
    writing...[ 153.013580] Kernel panic - not syncing: Fatal exception in interrupt

  • Another crash message:

    root@MPU-001:~# nandtest -m -p1 /dev/mtd12
    ECC corrections: 0
    ECC failures : 0
    Bad blocks : 11
    BBT blocks : 0
    04820000: erasi[ 114.606170] Unable to handle kernel NULL pointer dereference at virtual address 00000000
    [ 114.614715] pgd = cf1bc000
    [ 114.617492] [00000000] *pgd=8f144831, *pte=00000000, *ppte=00000000
    [ 114.624023] Internal error: Oops: 80000007 [#1]
    [ 114.628723] Modules linked in:
    [ 114.631866] CPU: 0 Not tainted (3.2.0 #18)
    [ 114.636474] PC is at 0x0
    [ 114.639129] LR is at handle_irq_event_percpu+0x30/0x174
    [ 114.644531] pc : [<00000000>] lr : [<c0071b1c>] psr: 40000193
    [ 114.644531] sp : cfbdfd00 ip : 00000000 fp : 00000001
    [ 114.656433] r10: cf9a0000 r9 : c061bdd8 r8 : 00000000
    [ 114.661834] r7 : 00000000 r6 : cf8064c0 r5 : 00000044 r4 : c05aaa00
    [ 114.668609] r3 : 00000000 r2 : 00006fe5 r1 : 00000000 r0 : 00000044
    [ 114.675384] Flags: nZcv IRQs off FIQs on Mode SVC_32 ISA ARM Segment user
    [ 114.682861] Control: 10c5387d Table: 8f1bc019 DAC: 00000015
    [ 114.688812] Process nandtest (pid: 280, stack limit = 0xcfbde2f0)
    [ 114.695129] Stack: (0xcfbdfd00 to 0xcfbe0000)
    [ 114.699645] fd00: cf8064c0 c05aaa00 00006fe5 cf8064c0 00000000 00000004 cfbdfd70 0000002a
    [ 114.708129] fd20: 0000000e cf9a0000 00000200 c0071c88 cf8064c0 c0073cb4 00000044 c0071648
    [ 114.716613] fd40: 00000044 c00133f4 00000002 00000044 fa200000 c00086e4 c001fe6c c001fa00
    [ 114.725097] fd60: 80000013 ffffffff cfbdfda4 c0012140 40000000 00000014 000001f4 d084c000
    [ 114.733551] fd80: 00000036 6afea000 cfab3800 cfab3810 0000002a 0000000e cf9a0000 00000200
    [ 114.742034] fda0: cf160400 cfbdfdb8 c001fe6c c001fa00 80000013 ffffffff 00000036 c026dddc
    [ 114.750518] fdc0: 00000001 cf160600 00000200 cfab3a40 00000000 cfab3810 cf160600 c026903c
    [ 114.759002] fde0: cfab3810 c062a93c cf160000 cfab3a40 cfab3810 cf160000 00029040 cfbdfe98
    [ 114.767486] fe00: 00029040 00000000 00000000 c026878c cfab3810 cfab3a40 cf160000 cfab3a40
    [ 114.775970] fe20: 00000800 cfab3810 00020000 c0268d54 00000001 00000000 cf09d4cc 0003ffff
    [ 114.784454] fe40: 00029040 00000000 00000001 ffffffff 00000000 cf160000 c024153c 00000040
    [ 114.792907] fe60: cf160000 0000003f 00000000 14820000 00000000 cfab3810 00020000 14840000
    [ 114.801391] fe80: 00000000 cfbde000 402a3008 c026a980 cfbdfe98 cf032415 00000000 00020000
    [ 114.809875] fea0: 00000000 c024153c cf9ce400 c0232354 cf160000 00000000 cf9ce400 10000000
    [ 114.818359] fec0: 00000000 04840000 00000000 00020000 00000000 c025f480 00020000 cfbdff38
    [ 114.826843] fee0: cf160000 cfbdffa8 00020000 00020000 cf160000 cfaba400 cfbdffa8 c02610fc
    [ 114.835327] ff00: 00020000 cfbdff38 cf160000 c0031aa8 00000000 cf07b940 cf09d400 00000000
    [ 114.843811] ff20: cfbfc7c0 00000002 04840000 00000000 cfbfc7c0 c00b0628 00000001 00020000
    [ 114.852264] ff40: cfbdffa8 00020000 cfbfc7c0 402a3008 cfbdffa8 c00126a8 cfbde000 00000000
    [ 114.860748] ff60: 00000000 c00b088c cfbfc7c0 402a3008 cfbfc7c0 00000000 402a3008 00020000
    [ 114.869232] ff80: c00126a8 c00b0be0 00000003 00000000 00020000 04820000 00000000 00020000
    [ 114.877716] ffa0: 000000b5 c0012500 04820000 00000000 00000003 402a3008 00020000 00000000
    [ 114.886199] ffc0: 04820000 00000000 00020000 000000b5 00000003 00020000 04820000 00000000
    [ 114.894683] ffe0: 000118a4 bef4abd8 00008828 40216a5c 60000010 00000003 ffffffff ffffffff
    [ 114.903167] [<c0071b1c>] (handle_irq_event_percpu+0x30/0x174) from [<c0071c88>] (handle_irq_event+0x28/0x38)
    [ 114.913360] [<c0071c88>] (handle_irq_event+0x28/0x38) from [<c0073cb4>] (handle_level_irq+0xac/0xd4)
    [ 114.922851] [<c0073cb4>] (handle_level_irq+0xac/0xd4) from [<c0071648>] (generic_handle_irq+0x20/0x30)
    [ 114.932525] [<c0071648>] (generic_handle_irq+0x20/0x30) from [<c00133f4>] (handle_IRQ+0x60/0x84)
    [ 114.941650] [<c00133f4>] (handle_IRQ+0x60/0x84) from [<c00086e4>] (omap3_intc_handle_irq+0x5c/0x6c)
    [ 114.951019] [<c00086e4>] (omap3_intc_handle_irq+0x5c/0x6c) from [<c0012140>] (__irq_svc+0x40/0x60)
    [ 114.960296] Exception stack(0xcfbdfd70 to 0xcfbdfdb8)
    [ 114.965545] fd60: 40000000 00000014 000001f4 d084c000
    [ 114.974029] fd80: 00000036 6afea000 cfab3800 cfab3810 0000002a 0000000e cf9a0000 00000200
    [ 114.982513] fda0: cf160400 cfbdfdb8 c001fe6c c001fa00 80000013 ffffffff
    [ 114.989379] [<c0012140>] (__irq_svc+0x40/0x60) from [<c001fa00>] (gpmc_read_reg+0x10/0x1c)
    [ 114.997955] [<c001fa00>] (gpmc_read_reg+0x10/0x1c) from [<c001fe6c>] (gpmc_read_status+0x48/0x78)
    [ 115.007141] [<c001fe6c>] (gpmc_read_status+0x48/0x78) from [<c026dddc>] (omap_write_buf_pref+0xf4/0x118)
    [ 115.016998] [<c026dddc>] (omap_write_buf_pref+0xf4/0x118) from [<c026903c>] (nand_write_page_hwecc+0x68/0xcc)
    [ 115.027282] [<c026903c>] (nand_write_page_hwecc+0x68/0xcc) from [<c026878c>] (nand_write_page+0x44/0xa8)
    [ 115.037109] [<c026878c>] (nand_write_page+0x44/0xa8) from [<c0268d54>] (nand_do_write_ops+0x2e8/0x37c)
    [ 115.046752] [<c0268d54>] (nand_do_write_ops+0x2e8/0x37c) from [<c026a980>] (nand_write+0x78/0x9c)
    [ 115.055969] [<c026a980>] (nand_write+0x78/0x9c) from [<c025f480>] (part_write+0x78/0x80)
    [ 115.064361] [<c025f480>] (part_write+0x78/0x80) from [<c02610fc>] (mtd_write+0x184/0x1ec)
    [ 115.072845] [<c02610fc>] (mtd_write+0x184/0x1ec) from [<c00b088c>] (vfs_write+0xb0/0x138)
    [ 115.081329] [<c00b088c>] (vfs_write+0xb0/0x138) from [<c00b0be0>] (sys_pwrite64+0x54/0x74)
    [ 115.089904] [<c00b0be0>] (sys_pwrite64+0x54/0x74) from [<c0012500>] (ret_fast_syscall+0x0/0x30)
    [ 115.098937] Code: bad PC value
    04820000:[ 115.102111] ---[ end trace 5356e0ef0cd42206 ]---
    writing...[ 115.108276] Kernel panic - not syncing: Fatal exception in interrupt

  • Test with /dev/mtd11. It seems that /dev/mtd11 is little better:(

    root@MPU-001:~# nandtest -m -p 3 /dev/mtd11
    ECC corrections: 0
    ECC failures : 0
    Bad blocks : 0
    BBT blocks : 0
    0ffe0000: checking...
    Finished pass 1 successfully
    01e40000: reading...
    1 bit(s) ECC corrected at 01e40000
    0ffe0000: checking...
    Finished pass 2 successfully
    04ca0000: reading...
    1 bit(s) ECC corrected at 04ca0000
    0d460000: reading...Segmentation fault

  • Frisky,

    I have sent you the updated code. Let me know whether it helps.

  • Renjith,

    I can't find the attached files neither in the ticket nor in the mail you sent:) Please re-send them, thank you!

  • Hi !

    I use the beaglebone with the same nand as your use (MT29F4G16ABA).

    I apply the patch "nand_16bits_uboot.txt".

    I compiled u-boot, it run well on SD, but when i write it on the NAND and boot on it, the system freeze in MLO :

    U-Boot SPL 2011.09 (Aug 28 2012 - 14:06:00)
    Texas Instruments Revision detection unimplemented


    I try to debug, and watch when it's happen, and i saw that it freeze when MLO call "i2c_init()".

    So i wonder why it can boot well on SD, and not on NAND ?

  • Sokha,

    I never tried to boot on NAND as my board doesn't need this. my board boots on SPI FLASH or SD card. which wait status are you using for NAND FLASH? as I know, wait 1 can't be used as boot signal on NAND, as per TI's errata. 

    -Frisky-

  • I use WAIT 0, and i configure SYS_BOOT [15..0] with : "0100001101010100"

    P1 and P2 is connected to the expansion header of beaglebone

  • Hi, Steve:

    I had similar problem. I try to apply the three patches you provided. Are these patches eventually go to the next release. Do you have some kind of doc to explain the change? like why the nand access wait time is increased? Is it necessary?

     Thank you!

    Jin