public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [PATCH] NAND: fixed bugs in nand_[read,write]_skip_bad()
@ 2008-11-18 17:27 Valeriy Glushkov
  2008-11-21 10:57 ` [U-Boot] [PATCH] NAND: fixed bugs in nand_[read, write]_skip_bad() Valeriy Glushkov
  2008-11-21 17:22 ` Scott Wood
  0 siblings, 2 replies; 5+ messages in thread
From: Valeriy Glushkov @ 2008-11-18 17:27 UTC (permalink / raw)
  To: u-boot

- fixed bugs in nand_[read,write]_skip_bad() to double speed
- added printing of dots to show progress

Signed-off-by: Valeriy Glushkov <gvv@lstec.com>
---
 drivers/mtd/nand/nand_base.c |   16 ++++++++++++++--
 drivers/mtd/nand/nand_util.c |    6 ++++--
 2 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
index 00c9d4a..e4da6b1 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
@@ -1136,8 +1136,11 @@ static int nand_do_read_ops(struct mtd_info *mtd, 
loff_t from,
     ret = chip->ecc.read_page_raw(mtd, chip, bufpoi);
    else
     ret = chip->ecc.read_page(mtd, chip, bufpoi);
-   if (ret < 0)
+   if (ret < 0) {
+    printf("nand_read_opts: page 0x%x error %d\n",
+     realpage, ret);
     break;
+   }

    /* Transfer not aligned data */
    if (!aligned) {
@@ -1190,6 +1193,9 @@ static int nand_do_read_ops(struct mtd_info *mtd, 
loff_t from,
   /* Increment page address */
   realpage++;

+  if( !((realpage << chip->page_shift) & 0xfffff) )
+   debug(".");
+
   page = realpage & chip->pagemask;
   /* Check, if we cross a chip boundary */
   if (!page) {
@@ -1828,8 +1834,11 @@ static int nand_do_write_ops(struct mtd_info *mtd, 
loff_t to,

   ret = chip->write_page(mtd, chip, wbuf, page, cached,
            (ops->mode == MTD_OOB_RAW));
-  if (ret)
+  if (ret) {
+   printf("nand_write_opts: page 0x%x error %d\n",
+    realpage, ret);
    break;
+  }

   writelen -= bytes;
   if (!writelen)
@@ -1839,6 +1848,9 @@ static int nand_do_write_ops(struct mtd_info *mtd, 
loff_t to,
   buf += bytes;
   realpage++;

+  if( !((realpage << chip->page_shift) & 0xfffff) )
+   debug(".");
+
   page = realpage & chip->pagemask;
   /* Check, if we cross a chip boundary */
   if (!page) {
diff --git a/drivers/mtd/nand/nand_util.c b/drivers/mtd/nand/nand_util.c
index 52b3d21..818a876 100644
--- a/drivers/mtd/nand/nand_util.c
+++ b/drivers/mtd/nand/nand_util.c
@@ -498,8 +498,8 @@ int nand_write_skip_bad(nand_info_t *nand, size_t 
offset, size_t *length,
   if (rval != 0) {
    printf ("NAND write to offset %x failed %d\n",
     offset, rval);
-   return rval;
   }
+  return rval;
  }

  while (left_to_write > 0) {
@@ -513,6 +513,7 @@ int nand_write_skip_bad(nand_info_t *nand, size_t 
offset, size_t *length,
    continue;
   }

+  debug(",");
   if (left_to_write < (nand->erasesize - block_offset))
    write_size = left_to_write;
   else
@@ -568,8 +569,8 @@ int nand_read_skip_bad(nand_info_t *nand, size_t offset, 
size_t *length,
   if (rval != 0) {
    printf ("NAND read from offset %x failed %d\n",
     offset, rval);
-   return rval;
   }
+  return rval;
  }

  while (left_to_read > 0) {
@@ -583,6 +584,7 @@ int nand_read_skip_bad(nand_info_t *nand, size_t offset, 
size_t *length,
    continue;
   }

+  debug(",");
   if (left_to_read < (nand->erasesize - block_offset))
    read_length = left_to_read;
   else
-- 
1.5.2.5

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

* [U-Boot] [PATCH] NAND: fixed bugs in nand_[read, write]_skip_bad()
  2008-11-18 17:27 [U-Boot] [PATCH] NAND: fixed bugs in nand_[read,write]_skip_bad() Valeriy Glushkov
@ 2008-11-21 10:57 ` Valeriy Glushkov
  2008-11-21 17:22 ` Scott Wood
  1 sibling, 0 replies; 5+ messages in thread
From: Valeriy Glushkov @ 2008-11-21 10:57 UTC (permalink / raw)
  To: u-boot

Anybody interested in the patch?

----- Original Message ----- 
From: "Valeriy Glushkov" <gvv@lstec.com>
To: <u-boot@lists.denx.de>
Sent: 18 ?????? 2008 ?. 19:27
Subject: [U-Boot] [PATCH] NAND: fixed bugs in nand_[read,write]_skip_bad()


>- fixed bugs in nand_[read,write]_skip_bad() to double speed
> - added printing of dots to show progress
>
> Signed-off-by: Valeriy Glushkov <gvv@lstec.com>
> ---
> drivers/mtd/nand/nand_base.c |   16 ++++++++++++++--
> drivers/mtd/nand/nand_util.c |    6 ++++--
> 2 files changed, 18 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
> index 00c9d4a..e4da6b1 100644
> --- a/drivers/mtd/nand/nand_base.c
> +++ b/drivers/mtd/nand/nand_base.c
> @@ -1136,8 +1136,11 @@ static int nand_do_read_ops(struct mtd_info *mtd,
> loff_t from,
>     ret = chip->ecc.read_page_raw(mtd, chip, bufpoi);
>    else
>     ret = chip->ecc.read_page(mtd, chip, bufpoi);
> -   if (ret < 0)
> +   if (ret < 0) {
> +    printf("nand_read_opts: page 0x%x error %d\n",
> +     realpage, ret);
>     break;
> +   }
>
>    /* Transfer not aligned data */
>    if (!aligned) {
> @@ -1190,6 +1193,9 @@ static int nand_do_read_ops(struct mtd_info *mtd,
> loff_t from,
>   /* Increment page address */
>   realpage++;
>
> +  if( !((realpage << chip->page_shift) & 0xfffff) )
> +   debug(".");
> +
>   page = realpage & chip->pagemask;
>   /* Check, if we cross a chip boundary */
>   if (!page) {
> @@ -1828,8 +1834,11 @@ static int nand_do_write_ops(struct mtd_info *mtd,
> loff_t to,
>
>   ret = chip->write_page(mtd, chip, wbuf, page, cached,
>            (ops->mode == MTD_OOB_RAW));
> -  if (ret)
> +  if (ret) {
> +   printf("nand_write_opts: page 0x%x error %d\n",
> +    realpage, ret);
>    break;
> +  }
>
>   writelen -= bytes;
>   if (!writelen)
> @@ -1839,6 +1848,9 @@ static int nand_do_write_ops(struct mtd_info *mtd,
> loff_t to,
>   buf += bytes;
>   realpage++;
>
> +  if( !((realpage << chip->page_shift) & 0xfffff) )
> +   debug(".");
> +
>   page = realpage & chip->pagemask;
>   /* Check, if we cross a chip boundary */
>   if (!page) {
> diff --git a/drivers/mtd/nand/nand_util.c b/drivers/mtd/nand/nand_util.c
> index 52b3d21..818a876 100644
> --- a/drivers/mtd/nand/nand_util.c
> +++ b/drivers/mtd/nand/nand_util.c
> @@ -498,8 +498,8 @@ int nand_write_skip_bad(nand_info_t *nand, size_t
> offset, size_t *length,
>   if (rval != 0) {
>    printf ("NAND write to offset %x failed %d\n",
>     offset, rval);
> -   return rval;
>   }
> +  return rval;
>  }
>
>  while (left_to_write > 0) {
> @@ -513,6 +513,7 @@ int nand_write_skip_bad(nand_info_t *nand, size_t
> offset, size_t *length,
>    continue;
>   }
>
> +  debug(",");
>   if (left_to_write < (nand->erasesize - block_offset))
>    write_size = left_to_write;
>   else
> @@ -568,8 +569,8 @@ int nand_read_skip_bad(nand_info_t *nand, size_t 
> offset,
> size_t *length,
>   if (rval != 0) {
>    printf ("NAND read from offset %x failed %d\n",
>     offset, rval);
> -   return rval;
>   }
> +  return rval;
>  }
>
>  while (left_to_read > 0) {
> @@ -583,6 +584,7 @@ int nand_read_skip_bad(nand_info_t *nand, size_t 
> offset,
> size_t *length,
>    continue;
>   }
>
> +  debug(",");
>   if (left_to_read < (nand->erasesize - block_offset))
>    read_length = left_to_read;
>   else
> -- 
> 1.5.2.5
>
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot 

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

* [U-Boot] [PATCH] NAND: fixed bugs in nand_[read, write]_skip_bad()
  2008-11-18 17:27 [U-Boot] [PATCH] NAND: fixed bugs in nand_[read,write]_skip_bad() Valeriy Glushkov
  2008-11-21 10:57 ` [U-Boot] [PATCH] NAND: fixed bugs in nand_[read, write]_skip_bad() Valeriy Glushkov
@ 2008-11-21 17:22 ` Scott Wood
  2008-11-25 14:36   ` [U-Boot] [PATCH v2] " Valeriy Glushkov
  1 sibling, 1 reply; 5+ messages in thread
From: Scott Wood @ 2008-11-21 17:22 UTC (permalink / raw)
  To: u-boot

On Tue, Nov 18, 2008 at 07:27:29PM +0200, Valeriy Glushkov wrote:
> - fixed bugs in nand_[read,write]_skip_bad() to double speed

Changelog should specify what the bugs are.

> - added printing of dots to show progress
> 
> Signed-off-by: Valeriy Glushkov <gvv@lstec.com>
> ---
>  drivers/mtd/nand/nand_base.c |   16 ++++++++++++++--
>  drivers/mtd/nand/nand_util.c |    6 ++++--
>  2 files changed, 18 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
> index 00c9d4a..e4da6b1 100644
> --- a/drivers/mtd/nand/nand_base.c
> +++ b/drivers/mtd/nand/nand_base.c
> @@ -1136,8 +1136,11 @@ static int nand_do_read_ops(struct mtd_info *mtd, 
> loff_t from,
>      ret = chip->ecc.read_page_raw(mtd, chip, bufpoi);
>     else
>      ret = chip->ecc.read_page(mtd, chip, bufpoi);
> -   if (ret < 0)
> +   if (ret < 0) {
> +    printf("nand_read_opts: page 0x%x error %d\n",
> +     realpage, ret);
>      break;
> +   }

This patch is whitespace-damaged.

> 
>     /* Transfer not aligned data */
>     if (!aligned) {
> @@ -1190,6 +1193,9 @@ static int nand_do_read_ops(struct mtd_info *mtd, 
> loff_t from,
>    /* Increment page address */
>    realpage++;
> 
> +  if( !((realpage << chip->page_shift) & 0xfffff) )

if (!(xxx)), not if( !(xxx) ).

> +   debug(".");

Should progress meters really be debug()?

Maybe space it out according to percentage, rather than a fixed interval.

>    page = realpage & chip->pagemask;
>    /* Check, if we cross a chip boundary */
>    if (!page) {
> @@ -1828,8 +1834,11 @@ static int nand_do_write_ops(struct mtd_info *mtd, 
> loff_t to,
> 
>    ret = chip->write_page(mtd, chip, wbuf, page, cached,
>             (ops->mode == MTD_OOB_RAW));
> -  if (ret)
> +  if (ret) {
> +   printf("nand_write_opts: page 0x%x error %d\n",
> +    realpage, ret);
>     break;
> +  }
> 
>    writelen -= bytes;
>    if (!writelen)
> @@ -1839,6 +1848,9 @@ static int nand_do_write_ops(struct mtd_info *mtd, 
> loff_t to,
>    buf += bytes;
>    realpage++;
> 
> +  if( !((realpage << chip->page_shift) & 0xfffff) )
> +   debug(".");
> +
>    page = realpage & chip->pagemask;
>    /* Check, if we cross a chip boundary */
>    if (!page) {
> diff --git a/drivers/mtd/nand/nand_util.c b/drivers/mtd/nand/nand_util.c
> index 52b3d21..818a876 100644
> --- a/drivers/mtd/nand/nand_util.c
> +++ b/drivers/mtd/nand/nand_util.c
> @@ -498,8 +498,8 @@ int nand_write_skip_bad(nand_info_t *nand, size_t 
> offset, size_t *length,
>    if (rval != 0) {
>     printf ("NAND write to offset %x failed %d\n",
>      offset, rval);
> -   return rval;
>    }
> +  return rval;
>   }

This bit should be posted in a separate patch, as it's a bugfix that can
go in outside the merge window.

Or, we could just get rid of this altogether and always use the loop.

-Scott

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

* [U-Boot]  [PATCH v2] NAND: fixed bugs in nand_[read, write]_skip_bad()
  2008-11-21 17:22 ` Scott Wood
@ 2008-11-25 14:36   ` Valeriy Glushkov
  2008-11-25 16:47     ` Scott Wood
  0 siblings, 1 reply; 5+ messages in thread
From: Valeriy Glushkov @ 2008-11-25 14:36 UTC (permalink / raw)
  To: u-boot

- fixed bugs with returning from nand_[read,write]_skip_bad() to double 
read/write speed

Signed-off-by: Valeriy Glushkov <gvv@lstec.com>
---

diff --git a/drivers/mtd/nand/nand_util.c b/drivers/mtd/nand/nand_util.c
index 52b3d21..818a876 100644
--- a/drivers/mtd/nand/nand_util.c
+++ b/drivers/mtd/nand/nand_util.c
@@ -498,8 +498,8 @@ int nand_write_skip_bad(nand_info_t *nand, size_t 
offset, size_t *length,
   if (rval != 0) {
    printf ("NAND write to offset %x failed %d\n",
     offset, rval);
-   return rval;
   }
+  return rval;
  }

  while (left_to_write > 0) {
@@ -568,8 +569,8 @@ int nand_read_skip_bad(nand_info_t *nand, size_t offset, 
size_t *length,
   if (rval != 0) {
    printf ("NAND read from offset %x failed %d\n",
     offset, rval);
-   return rval;
   }
+  return rval;
  }

  while (left_to_read > 0) {
-- 
1.5.2.5

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

* [U-Boot] [PATCH v2] NAND: fixed bugs in nand_[read, write]_skip_bad()
  2008-11-25 14:36   ` [U-Boot] [PATCH v2] " Valeriy Glushkov
@ 2008-11-25 16:47     ` Scott Wood
  0 siblings, 0 replies; 5+ messages in thread
From: Scott Wood @ 2008-11-25 16:47 UTC (permalink / raw)
  To: u-boot

Valeriy Glushkov wrote:
> - fixed bugs with returning from nand_[read,write]_skip_bad() to double 
> read/write speed
> 
> Signed-off-by: Valeriy Glushkov <gvv@lstec.com>

Patch is still whitespace-damaged; applied by hand to u-boot-nand-flash.

In the future, do not use Outlook to send patches.  Either use a mail 
client that does not alter the contents of the e-mail, or use git 
send-email.

-Scott

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

end of thread, other threads:[~2008-11-25 16:47 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-11-18 17:27 [U-Boot] [PATCH] NAND: fixed bugs in nand_[read,write]_skip_bad() Valeriy Glushkov
2008-11-21 10:57 ` [U-Boot] [PATCH] NAND: fixed bugs in nand_[read, write]_skip_bad() Valeriy Glushkov
2008-11-21 17:22 ` Scott Wood
2008-11-25 14:36   ` [U-Boot] [PATCH v2] " Valeriy Glushkov
2008-11-25 16:47     ` Scott Wood

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