* [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