[U-Boot] [PATCH 3/3 V2] ARM: mxs: Fix NAND FCB flashing

Marek Vasut marex at denx.de
Tue Aug 27 23:49:41 CEST 2013


Fix the method of flashing FCB blocks into NAND. The new env
writes all four FCB blocks and also does not scrub such a big
part of the NAND. This fixed complains about busted NAND blocks
in Linux.

Signed-off-by: Marek Vasut <marex at denx.de>
Cc: Fabio Estevam <fabio.estevam at freescale.com>
Cc: Stefano Babic <sbabic at denx.de>
---
 include/configs/m28evk.h  |   23 +++++++++++++++++++++--
 include/configs/mx28evk.h |   23 +++++++++++++++++++++--
 2 files changed, 42 insertions(+), 4 deletions(-)

V2: Write the whole stride (64 pages) in the FCB case, not only one page.

diff --git a/include/configs/m28evk.h b/include/configs/m28evk.h
index eba8759..6e1ecbe 100644
--- a/include/configs/m28evk.h
+++ b/include/configs/m28evk.h
@@ -170,11 +170,30 @@
 		"nand info ; "						\
 		"setexpr fcb_sz ${update_nand_stride} * ${update_nand_count};" \
 		"setexpr update_nand_fcb ${fcb_sz} * ${nand_writesize}\0" \
+	"update_nand_write_fcb="					\
+		"setenv i ${update_nand_count} ; "			\
+		"setenv update_nand_offset 0x0 ; "			\
+		"setexpr update_nand_step "				\
+			"${update_nand_stride} * ${nand_writesize} ; "	\
+		"while test ${i} -gt 0 ; do "				\
+			"echo ${update_nand_offset} ; "			\
+			"nand scrub -y ${update_nand_offset} "		\
+				"${nand_erasesize} ; "			\
+			"nand write.raw ${loadaddr} "			\
+				"${update_nand_offset} "		\
+				"${update_nand_stride} ; "		\
+			"setexpr i ${i} - 1 ; "				\
+			"setexpr update_nand_offset "			\
+				"${update_nand_offset} + "		\
+				"${update_nand_step} ; "		\
+		"done ; "						\
+		"setenv i ; "						\
+		"setenv update_nand_offset ; "				\
+		"setenv update_nand_step\0"				\
 	"update_nand_full="		/* Update FCB, DBBT and FW */	\
 		"if tftp ${update_nand_full_filename} ; then "		\
 		"run update_nand_get_fcb_size ; "			\
-		"nand scrub -y 0x0 ${filesize} ; "			\
-		"nand write.raw ${loadaddr} 0x0 ${fcb_sz} ; "	\
+		"run update_nand_write_fcb ; "				\
 		"setexpr update_off ${loadaddr} + ${update_nand_fcb} ; " \
 		"setexpr update_sz ${filesize} - ${update_nand_fcb} ; " \
 		"nand write ${update_off} ${update_nand_fcb} ${update_sz} ; " \
diff --git a/include/configs/mx28evk.h b/include/configs/mx28evk.h
index 07f88ca..e2324d6 100644
--- a/include/configs/mx28evk.h
+++ b/include/configs/mx28evk.h
@@ -172,11 +172,30 @@
 		"nand info ; " \
 		"setexpr fcb_sz ${update_nand_stride} * ${update_nand_count};" \
 		"setexpr update_nand_fcb ${fcb_sz} * ${nand_writesize}\0" \
+	"update_nand_write_fcb="					\
+		"setenv i ${update_nand_count} ; "			\
+		"setenv update_nand_offset 0x0 ; "			\
+		"setexpr update_nand_step "				\
+			"${update_nand_stride} * ${nand_writesize} ; "	\
+		"while test ${i} -gt 0 ; do "				\
+			"echo ${update_nand_offset} ; "			\
+			"nand scrub -y ${update_nand_offset} "		\
+				"${nand_erasesize} ; "			\
+			"nand write.raw ${loadaddr} "			\
+				"${update_nand_offset} "		\
+				"${update_nand_stride} ; "		\
+			"setexpr i ${i} - 1 ; "				\
+			"setexpr update_nand_offset "			\
+				"${update_nand_offset} + "		\
+				"${update_nand_step} ; "		\
+		"done ; "						\
+		"setenv i ; "						\
+		"setenv update_nand_offset ; "				\
+		"setenv update_nand_step\0"				\
 	"update_nand_full="		    /* Update FCB, DBBT and FW */ \
 		"if tftp ${update_nand_full_filename} ; then " \
 		"run update_nand_get_fcb_size ; " \
-		"nand scrub -y 0x0 ${filesize} ; " \
-		"nand write.raw ${loadaddr} 0x0 ${fcb_sz} ; " \
+		"run update_nand_write_fcb ; "				\
 		"setexpr update_off ${loadaddr} + ${update_nand_fcb} ; " \
 		"setexpr update_sz ${filesize} - ${update_nand_fcb} ; " \
 		"nand write ${update_off} ${update_nand_fcb} ${update_sz} ; " \
-- 
1.7.10.4



More information about the U-Boot mailing list