From: Scott Wood <oss@buserror.net>
To: u-boot@lists.denx.de
Subject: [U-Boot] [RFC PATCH 1/1] mtd: nand: fix bug writing 1 byte less than page size
Date: Fri, 15 Jul 2016 13:49:26 -0500 [thread overview]
Message-ID: <1468608566.25630.2.camel@buserror.net> (raw)
In-Reply-To: <1468568703-6675-2-git-send-email-hector.palacios@digi.com>
On Fri, 2016-07-15 at 09:45 +0200, Hector Palacios wrote:
> nand_do_write_ops() determines if it is writing a partial page with the
> formula:
> part_pagewr = (column || writelen < (mtd->writesize - 1))
>
> When 'writelen' is exactly 1 byte less than the NAND page size the formula
> equates to zero, so the code doesn't process it as a partial write, although
> it should.
> As a consequence the function remains in the while(1) loop with 'writelen'
> becoming 0xffffffff and iterating until the watchdog timeout triggers.
>
> To reproduce the issue on a NAND with 2K page (0x800):
> => nand erase.part <partition>
> => nand write $loadaddr <partition> 7ff
>
> Signed-off-by: Hector Palacios <hector.palacios@digi.com>
> ---
> ?drivers/mtd/nand/nand_base.c | 4 ++--
> ?1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
> index 689716753ae6..c8be74849e56 100644
> --- a/drivers/mtd/nand/nand_base.c
> +++ b/drivers/mtd/nand/nand_base.c
> @@ -877,7 +877,7 @@ static int nand_wait(struct mtd_info *mtd, struct
> nand_chip *chip)
> ?
> ?? u32 timer = (CONFIG_SYS_HZ * timeo) / 1000;
> ?? u32 time_start;
> -?
> +
> ?? time_start = get_timer(0);
> ?? while (get_timer(time_start) < timer) {
> ? if (chip->dev_ready) {
This change is unrelated.
> @@ -2411,7 +2411,7 @@ static int nand_do_write_ops(struct mtd_info *mtd,
> loff_t to,
> ? int cached = writelen > bytes && page != blockmask;
> ? uint8_t *wbuf = buf;
> ? int use_bufpoi;
> - int part_pagewr = (column || writelen < (mtd->writesize -
> 1));
> + int part_pagewr = (column || writelen < mtd->writesize);
> ?
> ? if (part_pagewr)
> ? use_bufpoi = 1;
>
Could you send a non-RFC patch? ?This also needs to get fixed in Linux.
-Scott
next prev parent reply other threads:[~2016-07-15 18:49 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-15 7:45 [U-Boot] [RFC PATCH 0/1] bug writing to NAND 1 byte less than page size Hector Palacios
2016-07-15 7:45 ` [U-Boot] [RFC PATCH 1/1] mtd: nand: fix bug writing " Hector Palacios
2016-07-15 18:49 ` Scott Wood [this message]
2016-07-18 7:25 ` Hector Palacios
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1468608566.25630.2.camel@buserror.net \
--to=oss@buserror.net \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.