public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot-Users] [PATCH] Fix OneNAND erase command
@ 2008-03-31  1:40 Kyungmin Park
  2008-04-14  6:33 ` Wolfgang Denk
  0 siblings, 1 reply; 2+ messages in thread
From: Kyungmin Park @ 2008-03-31  1:40 UTC (permalink / raw)
  To: u-boot

It mis-calculates the block address.
Also fix DECLARE_GLOBAL_DATA_PTR in env_onenand.

Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
---
diff --git a/common/cmd_onenand.c b/common/cmd_onenand.c
index dcda099..aff11d1 100644
--- a/common/cmd_onenand.c
+++ b/common/cmd_onenand.c
@@ -44,14 +44,28 @@ int do_onenand(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
 	default:
 		/* At least 4 args */
 		if (strncmp(argv[1], "erase", 5) == 0) {
-			struct erase_info instr;
+			struct erase_info instr = {
+				.callback	= NULL,
+			};
 			ulong start, end;
 			ulong block;
-
-			start = simple_strtoul(argv[2], NULL, 10);
-			end = simple_strtoul(argv[3], NULL, 10);
-			start -= (unsigned long)onenand_chip.base;
-			end -= (unsigned long)onenand_chip.base;
+			char *endtail;
+
+			if (strncmp(argv[2], "block", 5) == 0) {
+				start = simple_strtoul(argv[3], NULL, 10);
+				endtail = strchr(argv[3], '-');
+				end = simple_strtoul(endtail + 1, NULL, 10);
+			} else {
+				start = simple_strtoul(argv[2], NULL, 10);
+				end = simple_strtoul(argv[3], NULL, 10);
+				start -= (unsigned long)onenand_chip.base;
+				end -= (unsigned long)onenand_chip.base;
+
+				start >>= onenand_chip.erase_shift;
+				end >>= onenand_chip.erase_shift;
+				/* Don't include the end block */
+				end--;
+			}
 
 			if (!end || end < 0)
 				end = start;
diff --git a/common/env_onenand.c b/common/env_onenand.c
index 5888f75..ac8a8c1 100644
--- a/common/env_onenand.c
+++ b/common/env_onenand.c
@@ -52,22 +52,21 @@ static unsigned char onenand_env[MAX_ONENAND_PAGESIZE];
 env_t *env_ptr = (env_t *) onenand_env;
 #endif /* ENV_IS_EMBEDDED */
 
+DECLARE_GLOBAL_DATA_PTR;
+
 uchar env_get_char_spec(int index)
 {
-	DECLARE_GLOBAL_DATA_PTR;
-
 	return (*((uchar *) (gd->env_addr + index)));
 }
 
 void env_relocate_spec(void)
 {
-	DECLARE_GLOBAL_DATA_PTR;
 	unsigned long env_addr;
 	int use_default = 0;
 	size_t retlen;
 
 	env_addr = CFG_ENV_ADDR;
-	env_addr -= (unsigned long)onenand_chip.base;
+	env_addr -= (unsigned long) onenand_chip.base;
 
 	/* Check OneNAND exist */
 	if (onenand_mtd.oobblock)
@@ -95,7 +94,9 @@ void env_relocate_spec(void)
 int saveenv(void)
 {
 	unsigned long env_addr = CFG_ENV_ADDR;
-	struct erase_info instr;
+	struct erase_info instr = {
+		.callback	= NULL,
+	};
 	size_t retlen;
 
 	instr.len = CFG_ENV_SIZE;
@@ -108,7 +109,7 @@ int saveenv(void)
 
 	/* update crc */
 	env_ptr->crc =
-	    crc32(0, env_ptr->data, onenand_mtd.oobblock - ENV_HEADER_SIZE);
+	    crc32(0, env_ptr->data, ONENAND_ENV_SIZE(onenand_mtd));
 
 	env_addr -= (unsigned long)onenand_chip.base;
 	if (onenand_write(&onenand_mtd, env_addr, onenand_mtd.oobblock, &retlen,
@@ -122,8 +123,6 @@ int saveenv(void)
 
 int env_init(void)
 {
-	DECLARE_GLOBAL_DATA_PTR;
-
 	/* use default */
 	gd->env_addr = (ulong) & default_environment[0];
 	gd->env_valid = 1;

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* [U-Boot-Users] [PATCH] Fix OneNAND erase command
  2008-03-31  1:40 [U-Boot-Users] [PATCH] Fix OneNAND erase command Kyungmin Park
@ 2008-04-14  6:33 ` Wolfgang Denk
  0 siblings, 0 replies; 2+ messages in thread
From: Wolfgang Denk @ 2008-04-14  6:33 UTC (permalink / raw)
  To: u-boot

In message <20080331014019.GA30858@party> you wrote:
> It mis-calculates the block address.
> Also fix DECLARE_GLOBAL_DATA_PTR in env_onenand.
> 
> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
> ---
> diff --git a/common/cmd_onenand.c b/common/cmd_onenand.c

Applied, thanks.

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Our OS who art in CPU, UNIX be thy name.
Thy programs run, thy syscalls done,
In kernel as it is in user!

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2008-04-14  6:33 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-03-31  1:40 [U-Boot-Users] [PATCH] Fix OneNAND erase command Kyungmin Park
2008-04-14  6:33 ` Wolfgang Denk

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox