From: Scott Wood <scottwood@freescale.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 1/2] mtd: vf610_nfc: mark page as dirty on block erase
Date: Mon, 30 Mar 2015 15:46:35 -0500 [thread overview]
Message-ID: <1427748395.22867.185.camel@freescale.com> (raw)
In-Reply-To: <1a5c9a187ce3db91d1222ed8df7bbc0d@agner.ch>
On Mon, 2015-03-30 at 22:14 +0200, Stefan Agner wrote:
> On 2015-03-30 19:02, Bill Pringlemeir wrote:
> > On 24 Mar 2015, stefan at agner.ch wrote:
> >
> >> The driver tries to re-use the page buffer by storing the page
> >> number of the current page in the buffer. The page is only read
> >> if the requested page number is not currently in the buffer. When
> >> a block is erased, the page number is marked as invalid if the
> >> erased page equals the one currently in the cache. However, since
> >> a erase block consists of multiple pages, also other page numbers
> >> could be affected.
> >>
> >> The commands to reproduce this issue (on a written page):
> >>> nand dump 0x800
> >>> nand erase 0x0 0x20000
> >>> nand dump 0x800
> >>
> >> The second nand dump command returns the data from the buffer,
> >> while in fact the page is erased (0xff).
> >>
> >> Avoid the hassle to calculate whether the page is affected or not,
> >> but set the page buffer unconditionally to invalid instead.
> >>
> >> Signed-off-by: Stefan Agner <stefan@agner.ch>
> >> ---
> >> This are two bug fixes which would be nice if they would still
> >> make it into 2015.04...
> >>
> >> drivers/mtd/nand/vf610_nfc.c | 3 +--
> >> 1 file changed, 1 insertion(+), 2 deletions(-)
> >>
> >> diff --git a/drivers/mtd/nand/vf610_nfc.c
> >> b/drivers/mtd/nand/vf610_nfc.c index 928d58b..9de971c 100644 ---
> >> a/drivers/mtd/nand/vf610_nfc.c +++ b/drivers/mtd/nand/vf610_nfc.c @@
> >> -369,8 +369,7 @@ static void vf610_nfc_command(struct mtd_info *mtd,
> >> unsigned command, break;
> >>
> >> case NAND_CMD_ERASE1: - if (nfc->page == page) - nfc->page =
> >> -1; + nfc->page = -1; vf610_nfc_send_commands(nfc->regs, command,
> >> NAND_CMD_ERASE2, ERASE_CMD_CODE); vf610_nfc_addr_cycle(mtd, column,
> >> page);
> >
> > This change looks sensible. It is also possible that because sub-pages
> > were removed that we could just remove the caching all together. It is
> > possible that a higher layer may intentionally want to program and then
> > do a read to verify.
>
> Hm, I now realize that this actually happened somewhat by accident. Back
> when I migrated the driver to U-Boot, I removed the hwctl function since
> it was an empty function. This probably lead to the problem with sub
> page writes, which is why sub-page writes has been removed (by adding
> NAND_NO_SUBPAGE_WRITE).
Subpages can be supported without hwctl, by implementing the appropriate
commands -- if the hardware supports it (e.g. some controllers only want
to do ECC on full pages). There's a comment in the driver saying that
"NFC does not support sub-page reads and writes".
If hwctl was empty it probably means that this controller does not
expose an interface that matches well with hwctl.
> However, in order to avoid a full page getting allocated and memcpy'ed
> when only writing a part of a page, we actually could re-enable that
> feature. But I'm not sure about the semantics of a subpage writes: Does
> the stack makes sure that the rest of the bytes are in the cache (e.g.
> read before write)? From what I understand, a subpage write would only
> copy (via vf610_nfc_write_buf) the data required into the the page
> cache, which then gets written to the device. Who makes sure that the
> rest of the page contains sound data?
If the rest of the page is all 0xff it shouldn't affect the existing
data -- as long as the controller isn't writing some non-0xff ECC bytes
as a result.
It's moot if subpage writes are disabled, though.
> > I guess we want to stay the same as the mainline Linux you are
> > submitting. I haven't benchmarked the updates since sub-pages were
> > removed to see if this is worth it. I think it was only ~10-20% in some
> > benchmark I was doing with the 'caching'.
>
> I think it mainly makes sense when the higher layer reads OOB and then
> the main data or visa-verse. I saw such access patterns at least in
> U-Boot.
Wouldn't it make more sense to not read a full page every time OOB is
read?
> > At least in the small, this is a minimal change that is correct.
> >
> > Ack-by: Bill Pringlemeir <bpringlemeir@nbsps.com>
>
> Thanks for the Ack. If still possible, it would be nice to see that in
> 2015.04... :-)
I'd rather see the caching removed entirely.
-Scott
next prev parent reply other threads:[~2015-03-30 20:46 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-24 16:54 [U-Boot] [PATCH 1/2] mtd: vf610_nfc: mark page as dirty on block erase Stefan Agner
2015-03-24 16:54 ` [U-Boot] [PATCH 2/2] mtd: vf610_nfc: specify transfer size before each transfer Stefan Agner
2015-03-30 17:02 ` [U-Boot] [PATCH 1/2] mtd: vf610_nfc: mark page as dirty on block erase Bill Pringlemeir
2015-03-30 20:14 ` Stefan Agner
2015-03-30 20:46 ` Scott Wood [this message]
2015-03-30 20:34 ` Scott Wood
2015-03-30 20:40 ` Stefan Agner
2015-03-30 20:48 ` Scott Wood
2015-03-30 21:26 ` Stefan Agner
2015-03-30 22:15 ` Scott Wood
2015-03-30 22:24 ` Stefan Agner
2015-03-31 4:34 ` Scott Wood
2015-03-31 15:02 ` Bill Pringlemeir
2015-04-02 23:48 ` Scott Wood
2015-04-03 18:09 ` Stefan Agner
2015-04-03 20:15 ` Scott Wood
2015-04-03 20:28 ` Stefan Agner
2015-04-03 21:03 ` Scott Wood
2015-04-07 14:06 ` Bill Pringlemeir
2015-04-07 16:02 ` Scott Wood
2015-04-07 17:54 ` Bill Pringlemeir
2015-04-07 21:09 ` Scott Wood
2015-03-30 21:35 ` Bill Pringlemeir
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=1427748395.22867.185.camel@freescale.com \
--to=scottwood@freescale.com \
--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.