diff mbox

[U-Boot,1/2] ARM: mxs: Fix NAND FCB flashing

Message ID 1401405273-450-1-git-send-email-jkrause@posteo.de
State Changes Requested
Delegated to: Stefano Babic
Headers show

Commit Message

Jörg Krause May 29, 2014, 11:14 p.m. UTC
From: Marek Vasut <marex@denx.de>

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@denx.de>
Cc: Fabio Estevam <fabio.estevam@freescale.com>
Cc: Stefano Babic <sbabic@denx.de>
---
 include/configs/m28evk.h  | 23 +++++++++++++++++++++--
 include/configs/mx28evk.h | 23 +++++++++++++++++++++--
 2 files changed, 42 insertions(+), 4 deletions(-)

Comments

Marek Vasut May 29, 2014, 11:42 p.m. UTC | #1
On Friday, May 30, 2014 at 01:14:33 AM, Joerg Krause wrote:
> From: Marek Vasut <marex@denx.de>
> 
> 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.

Please use git send-email to submit patches .

Thanks.

Best regards,
Marek Vasut
diff mbox

Patch

diff --git a/include/configs/m28evk.h b/include/configs/m28evk.h
index 3e387c4..d6275ec 100644
--- a/include/configs/m28evk.h
+++ b/include/configs/m28evk.h
@@ -169,11 +169,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 9b9124a..103b76e 100644
--- a/include/configs/mx28evk.h
+++ b/include/configs/mx28evk.h
@@ -171,11 +171,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_firmware_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.9.3


From 24df742ccc21eb1e3f2453f54d9632b8c670f659 Mon Sep 17 00:00:00 2001
From: Joerg Krause <jkrause@posteo.de>
Date: Fri, 30 May 2014 00:01:22 +0200
Subject: [PATCH 2/2] ARM mxs Fix NAND FCB flashing

This is a fix for the previous patch. 

It is enough to write only a single page for the FCB block instead of the whole stride.

Before writing the DBBT area and the Boot Firmware the flash area is erased.

This patch is nothing more than a workaround. There is a problem of how mxsboot generates the boot image and using the nand write.raw command. The whole story is explained in this thread:
http://lists.denx.de/pipermail/u-boot/2013-April/150950.html

I am not sure if mxsboot or nand write.raw should be fixed instead?

---
 include/configs/m28evk.h  | 3 ++-
 include/configs/mx28evk.h | 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/include/configs/m28evk.h b/include/configs/m28evk.h
index d6275ec..9680706 100644
--- a/include/configs/m28evk.h
+++ b/include/configs/m28evk.h
@@ -180,7 +180,7 @@ 
 				"${nand_erasesize} ; "			\
 			"nand write.raw ${loadaddr} "			\
 				"${update_nand_offset} "		\
-				"${update_nand_stride} ; "		\
+				"0x1 ; "				\
 			"setexpr i ${i} - 1 ; "				\
 			"setexpr update_nand_offset "			\
 				"${update_nand_offset} + "		\
@@ -195,6 +195,7 @@ 
 		"run update_nand_write_fcb ; "				\
 		"setexpr update_off ${loadaddr} + ${update_nand_fcb} ; " \
 		"setexpr update_sz ${filesize} - ${update_nand_fcb} ; " \
+		"nand erase ${update_nand_fcb} ${update_sz} ; " \
 		"nand write ${update_off} ${update_nand_fcb} ${update_sz} ; " \
 		"fi\0"							\
 	"update_nand_firmware="		/* Update only firmware */	\
diff --git a/include/configs/mx28evk.h b/include/configs/mx28evk.h
index 103b76e..447089d 100644
--- a/include/configs/mx28evk.h
+++ b/include/configs/mx28evk.h
@@ -182,7 +182,7 @@ 
 				"${nand_erasesize} ; "			\
 			"nand write.raw ${loadaddr} "			\
 				"${update_nand_offset} "		\
-				"${update_nand_stride} ; "		\
+				"0x1 ; "				\
 			"setexpr i ${i} - 1 ; "				\
 			"setexpr update_nand_offset "			\
 				"${update_nand_offset} + "		\
@@ -197,6 +197,7 @@ 
 		"run update_nand_write_fcb ; "				\
 		"setexpr update_off ${loadaddr} + ${update_nand_fcb} ; " \
 		"setexpr update_sz ${filesize} - ${update_nand_fcb} ; " \
+		"nand erase ${update_nand_fcb} ${update_sz} ; " \
 		"nand write ${update_off} ${update_nand_fcb} ${update_sz} ; " \
 		"fi\0" \
 	"update_nand_firmware="		/* Update only firmware */ \