[U-Boot] U-Boot: AM335x Booting with environment in NAND: ECC cause failures...
Ulf Samuelsson
arago at emagii.com
Fri Nov 2 10:42:03 CET 2012
Trying to boot from NAND on an AM335x-EVM with environment in NAND
Have cloned "git://arago-project.org/git/projects/u-boot-am33x.git"
and done some minor changes (see below)
All documentation I've read tell me to use "nandecc hw 2" before
programming the NAND.
If I program the kernel and rootfs into the nand by
nandecc hw 2
nand.write ...
and then save the environment, it looks like the environment is saved
with the same ECC algorithm.
This is no good, since U-Boot will always read the environment at boot,
using the incompatible Hamming Mode, so the next reboot will fail.
This looks like a bug to me.
Methinks there should be a configuration item telling which ECC algorithm
to use for the environment, and this is used when reading the
environment at boot,
and when using "saveenv".
Any other read/writes should use the user defined algorithm
Right now, you need to remember to set the ECC to Hamming before every
saveenv
BR
Ulf Samuelsson
-----------------------------------------------------------------
diff --git a/boards.cfg b/boards.cfg
index 55af69f..ec5480c 100644
--- a/boards.cfg
+++ b/boards.cfg
@@ -168,10 +168,11 @@ omap3_pandora arm armv7
pandora -
igep0020 arm armv7 igep0020
isee omap3
igep0030 arm armv7 igep0030
isee omap3
am335x_evm arm armv7 am335x
ti ti81xx
-am335x_evm_restore_flash arm armv7 am335x
ti ti81xx am335x_evm:RESTORE_FLASH
-am335x_evm_spiboot arm armv7 am335x
ti ti81xx am335x_evm:SPI_BOOT
-am335x_evm_uart_usbspl arm armv7 am335x
ti ti81xx am335x_evm:UART_THEN_USB_SPL
-am335x_evm_restore_flash_usbspl arm armv7 am335x
ti ti81xx am335x_evm:RESTORE_FLASH,UART_THEN_USB_SPL
+am335x_evm_nandflash arm armv7 am335x
ti ti81xx am335x_evm:NAND_BOOT
+am335x_evm_restore_flash arm armv7 am335x
ti ti81xx am335x_evm:RESTORE_FLASH
+am335x_evm_spiboot arm armv7 am335x
ti ti81xx am335x_evm:SPI_BOOT
+am335x_evm_uart_usbspl arm armv7 am335x
ti ti81xx am335x_evm:UART_THEN_USB_SPL
+am335x_evm_restore_flash_usbspl arm armv7 am335x
ti ti81xx am335x_evm:RESTORE_FLASH,UART_THEN_USB_SPL
am3517_crane arm armv7 am3517crane
ti omap3
am3517_evm arm armv7 am3517evm
logicpd omap3
am3517_evm_norflash arm armv7 am3517evm
logicpd omap3 am3517_evm:SYS_HAS_NORFLASH
diff --git a/include/configs/am335x_evm.h b/include/configs/am335x_evm.h
index 3ae23b2..4cc5e43 100755
--- a/include/configs/am335x_evm.h
+++ b/include/configs/am335x_evm.h
@@ -16,7 +16,12 @@
#define CONFIG_AM335X
#define CONFIG_TI81XX
#define CONFIG_SYS_NO_FLASH
-#ifndef CONFIG_SPI_BOOT
+#define kB << 10
+#if defined(CONFIG_NAND_BOOT)
+#define CONFIG_NAND_ENV
+#elif defined(CONFIG_SPI_BOOT)
+#define CONFIG_NAND_ENV
+#else
#define CONFIG_NAND_ENV
#endif
@@ -131,29 +136,44 @@
"tftp ${kloadaddr} ${bootfile}; " \
"run net_args; " \
"bootm ${kloadaddr}\0" \
+ "reflash=mmc rescan ; " \
+ "nand erase 0x0 0x280000 ; " \
+ "saveenv ; " \
+ "nandecc hw 2 ; " \
+ "fatload mmc 0 0x81000000 MLO ; " \
+ "nand write 0x81000000 0x0 0x20000 ; " \
+ "nand write 0x81000000 0x20000 0x20000 ; " \
+ "nand write 0x81000000 0x40000 0x20000 ; " \
+ "nand write 0x81000000 0x60000 0x20000 ; " \
+ "fatload mmc 0 0x81000000 u-boot.img ; " \
+ "nand write 0x81000000 0x80000 0x1E0000\0" \
+ "update=mmc rescan ; " \
+ "fatload mmc ${mmc_dev} ${loadaddr} update.env ; " \
+ "env import -t $loadaddr $filesize ; " \
+ "run update\0" \
+ "tiboot=if mmc rescan; then " \
+ "echo SD/MMC found on device ${mmc_dev};" \
+ "if run loadbootenv; then " \
+ "echo Loaded environment from ${bootenv};" \
+ "run importbootenv;" \
+ "fi;" \
+ "if test -n $uenvcmd; then " \
+ "echo Running uenvcmd ...;" \
+ "run uenvcmd;" \
+ "fi;" \
+ "if run mmc_load_uimage; then " \
+ "run mmc_args;" \
+ "bootm ${kloadaddr};" \
+ "fi;" \
+ "fi;" \
+ "run nand_boot;\0" \
+
#ifndef CONFIG_RESTORE_FLASH
/* set to negative value for no autoboot */
#define CONFIG_BOOTDELAY 3
-#define CONFIG_BOOTCOMMAND \
- "if mmc rescan; then " \
- "echo SD/MMC found on device ${mmc_dev};" \
- "if run loadbootenv; then " \
- "echo Loaded environment from ${bootenv};" \
- "run importbootenv;" \
- "fi;" \
- "if test -n $uenvcmd; then " \
- "echo Running uenvcmd ...;" \
- "run uenvcmd;" \
- "fi;" \
- "if run mmc_load_uimage; then " \
- "run mmc_args;" \
- "bootm ${kloadaddr};" \
- "fi;" \
- "fi;" \
- "run nand_boot;" \
-
+#define CONFIG_BOOTCOMMAND "run nand_boot"
#else
#define CONFIG_BOOTDELAY 0
@@ -236,7 +256,7 @@
#define CONFIG_SPL_LDSCRIPT "$(CPUDIR)/omap-common/u-boot-spl.lds"
/* NAND boot config */
-#ifndef CONFIG_SPI_BOOT
+#ifdef CONFIG_NAND_BOOT
#define CONFIG_SPL_NAND_SIMPLE
#define CONFIG_SPL_NAND_SUPPORT
#define CONFIG_SYS_NAND_5_ADDR_CYCLE
@@ -267,6 +287,7 @@
#endif
/* SPI boot config */
+#ifdef CONFIG_SPI_BOOT
#define CONFIG_SPL_SPI_SUPPORT
#define CONFIG_SPL_SPI_FLASH_SUPPORT
#define CONFIG_SPL_SPI_LOAD
@@ -274,6 +295,7 @@
#define CONFIG_SPL_SPI_CS 0
#define CONFIG_SYS_SPI_U_BOOT_OFFS 0x20000
#define CONFIG_SYS_SPI_U_BOOT_SIZE 0x40000
+#endif
/*
* 1MB into the SDRAM to allow for SPL's bss at the beginning of SDRAM.
@@ -361,6 +383,9 @@
#if defined(CONFIG_NAND_ENV)
#undef CONFIG_ENV_IS_NOWHERE
#define CONFIG_ENV_IS_IN_NAND
+#undef CONFIG_ENV_SIZE
+#define CONFIG_ENV_SIZE 0x20000
+
#define CONFIG_SYS_MAX_FLASH_SECT 520 /* max no of sectors in a chip */
#define CONFIG_SYS_MAX_FLASH_BANKS 2 /* max no of flash banks */
#define CONFIG_SYS_MONITOR_LEN (256 << 10) /* Reserve 2 sectors */
More information about the U-Boot
mailing list