[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