[U-Boot] [PATCH] NAND: cmd_nand.c: fix invalid pointers to static relocated chip names

gvv at horse.lst.loc gvv at horse.lst.loc
Mon Jan 19 13:58:03 CET 2009


When U-boot starting from NAND the pointers to chip names are set before relocation.
If the original memory block is overwritten after relocation that led to invalid
string data in the nand utility.

Signed-off-by: Valeriy Glushkov <gvv at lstec.com>
---
diff --git a/common/cmd_nand.c b/common/cmd_nand.c
index b94a2bf..14925cd 100644
--- a/common/cmd_nand.c
+++ b/common/cmd_nand.c
@@ -10,6 +10,7 @@
 
 #include <common.h>
 
+DECLARE_GLOBAL_DATA_PTR;
 
 #ifndef CONFIG_NAND_LEGACY
 /*
@@ -193,7 +194,7 @@ int do_nand(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
 		for (i = 0; i < CFG_MAX_NAND_DEVICE; i++) {
 			if (nand_info[i].name)
 				printf("Device %d: %s, sector size %u KiB\n",
-				       i, nand_info[i].name,
+				       i, nand_info[i].name + gd->reloc_off,
 				       nand_info[i].erasesize >> 10);
 		}
 		return 0;
@@ -207,7 +208,7 @@ int do_nand(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
 				puts("\nno devices available\n");
 			else
 				printf("\nDevice %d: %s\n", nand_curr_device,
-				       nand_info[nand_curr_device].name);
+				       nand_info[nand_curr_device].name + gd->reloc_off);
 			return 0;
 		}
 		dev = (int)simple_strtoul(argv[2], NULL, 10);
@@ -215,7 +216,7 @@ int do_nand(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
 			puts("No such device\n");
 			return 1;
 		}
-		printf("Device %d: %s", dev, nand_info[dev].name);
+		printf("Device %d: %s", dev, nand_info[dev].name + gd->reloc_off);
 		puts("... is now current device\n");
 		nand_curr_device = dev;
 
@@ -993,8 +994,8 @@ int do_nandboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 	show_boot_progress (55);
 
 	printf ("\nLoading from device %d: %s at 0x%lx (offset 0x%lx)\n",
-	    dev, nand_dev_desc[dev].name, nand_dev_desc[dev].IO_ADDR,
-	    offset);
+	    dev, nand_dev_desc[dev].name + gd->reloc_off,
+	    nand_dev_desc[dev].IO_ADDR, offset);
 
 	if (nand_legacy_rw (nand_dev_desc + dev, NANDRW_READ, offset,
 			    SECTORSIZE, NULL, (u_char *)addr)) {
-- 
1.5.2.5



More information about the U-Boot mailing list