From: Boris Brezillon <boris.brezillon@collabora.com>
To: Miquel Raynal <miquel.raynal@bootlin.com>
Cc: Vignesh Raghavendra <vigneshr@ti.com>,
Tudor Ambarus <Tudor.Ambarus@microchip.com>,
Richard Weinberger <richard@nod.at>,
Zoltan Szubbocsev <zszubbocsev@micron.com>,
linux-mtd@lists.infradead.org,
Thomas Petazzoni <thomas.petazzoni@bootlin.com>,
tglx@linutronix.de,
Piotr Wojtaszczyk <WojtaszczykP@cumminsallison.com>,
Bean Huo <beanhuo@micron.com>
Subject: Re: [PATCH v2 2/3] mtd: rawnand: Add the nand_chip->write_oob hook
Date: Sun, 3 May 2020 17:09:24 +0200 [thread overview]
Message-ID: <20200503170924.52f9d9d6@collabora.com> (raw)
In-Reply-To: <20200503114029.30257-3-miquel.raynal@bootlin.com>
On Sun, 3 May 2020 13:40:28 +0200
Miquel Raynal <miquel.raynal@bootlin.com> wrote:
> With the same approach as for the ->erase hook, in order to solve an
> issue with Micron NANDs, we must be able to overload the write
> operation. With this in mind, we create a ->write_oob hook in the
> nand_chip structure which points by default to the
> currently in use nand_write_oob() helper, renamed
> nand_write_oob_nand() for the parallel with the nand_erase_nand()
> one.
First of all, I must say I hate the hook name. Having mtd->_write_oob()
that writes both OOB and data is confusing, and you're pulling this
confusing name to the raw NAND layer.
>
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> ---
> drivers/mtd/nand/raw/internals.h | 2 ++
> drivers/mtd/nand/raw/nand_base.c | 8 ++++++++
> include/linux/mtd/rawnand.h | 3 +++
> 3 files changed, 13 insertions(+)
>
> diff --git a/drivers/mtd/nand/raw/internals.h b/drivers/mtd/nand/raw/internals.h
> index 9d0caadf940e..caf534a6586a 100644
> --- a/drivers/mtd/nand/raw/internals.h
> +++ b/drivers/mtd/nand/raw/internals.h
> @@ -81,6 +81,8 @@ int nand_bbm_get_next_page(struct nand_chip *chip, int page);
> int nand_markbad_bbm(struct nand_chip *chip, loff_t ofs);
> int nand_erase_nand(struct nand_chip *chip, struct erase_info *instr,
> int allowbbt);
> +int nand_write_oob_nand(struct nand_chip *chip, loff_t to,
> + struct mtd_oob_ops *ops);
> int onfi_fill_data_interface(struct nand_chip *chip,
> enum nand_data_interface_type type,
> int timing_mode);
> diff --git a/drivers/mtd/nand/raw/nand_base.c b/drivers/mtd/nand/raw/nand_base.c
> index 7c7ac722d88b..f9cf30949f49 100644
> --- a/drivers/mtd/nand/raw/nand_base.c
> +++ b/drivers/mtd/nand/raw/nand_base.c
> @@ -4121,6 +4121,13 @@ static int nand_write_oob(struct mtd_info *mtd, loff_t to,
> struct mtd_oob_ops *ops)
> {
> struct nand_chip *chip = mtd_to_nand(mtd);
> +
> + return chip->write_oob(chip, to, ops);
> +}
> +
> +int nand_write_oob_nand(struct nand_chip *chip, loff_t to,
> + struct mtd_oob_ops *ops)
Hm, what happens next time we have a similar name, do we suffix it with
_nand_nand? :P
> +{
> int ret;
>
> ops->retlen = 0;
> @@ -4423,6 +4430,7 @@ static void nand_set_defaults(struct nand_chip *chip)
> chip->buf_align = 1;
>
> chip->erase = nand_erase_nand;
> + chip->write_oob = nand_write_oob_nand;
> }
>
> /* Sanitize ONFI strings so we can safely print them */
> diff --git a/include/linux/mtd/rawnand.h b/include/linux/mtd/rawnand.h
> index 505c13f7a2ba..7fbbd5d7088f 100644
> --- a/include/linux/mtd/rawnand.h
> +++ b/include/linux/mtd/rawnand.h
> @@ -1021,6 +1021,7 @@ struct nand_legacy {
> * @setup_read_retry: [FLASHSPECIFIC] flash (vendor) specific function for
> * setting the read-retry mode. Mostly needed for MLC NAND.
> * @erase: Raw NAND erase operation.
> + * @write_oob: Raw NAND write operation.
> * @ecc: [BOARDSPECIFIC] ECC control structure
> * @buf_align: minimum buffer alignment required by a platform
> * @oob_poi: "poison value buffer," used for laying out OOB data
> @@ -1092,6 +1093,8 @@ struct nand_chip {
> int (*setup_read_retry)(struct nand_chip *chip, int retry_mode);
> int (*erase)(struct nand_chip *chip, struct erase_info *instr,
> int allowbbt);
> + int (*write_oob)(struct nand_chip *chip, loff_t to,
> + struct mtd_oob_ops *ops);
>
Okay, so I'm not sure duplicating the nand_write_oob() logic is the
best option here. I'd rather go for a post write_page() hook.
Note that we probably want a post read_page() hook so we can flag
pages as written by analyzing what's returned to the caller. That would
saves us unneeded writes when the page has been read.
> unsigned int options;
> unsigned int bbt_options;
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
next prev parent reply other threads:[~2020-05-03 15:09 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-03 11:40 [PATCH v2 0/3] Fix proposal for the Micron shallow erase issue Miquel Raynal
2020-05-03 11:40 ` [PATCH v2 1/3] mtd: rawnand: Add the nand_chip->erase hook Miquel Raynal
2020-05-03 15:01 ` Boris Brezillon
2020-05-03 11:40 ` [PATCH v2 2/3] mtd: rawnand: Add the nand_chip->write_oob hook Miquel Raynal
2020-05-03 15:09 ` Boris Brezillon [this message]
2020-05-03 17:02 ` Miquel Raynal
2020-05-03 11:40 ` [PATCH v2 3/3] mtd: rawnand: micron: Address the shallow erase issue Miquel Raynal
2020-05-03 16:10 ` Steve deRosier
2020-05-03 16:34 ` Boris Brezillon
2020-05-03 16:36 ` Miquel Raynal
2020-05-03 19:57 ` Steve deRosier
2020-05-06 8:37 ` [EXT] " Bean Huo (beanhuo)
2020-05-06 8:28 ` [EXT] " Bean Huo (beanhuo)
2020-05-06 8:45 ` Boris Brezillon
2020-05-06 15:50 ` Bean Huo (beanhuo)
2020-05-06 16:04 ` Boris Brezillon
2020-05-06 16:09 ` Bean Huo (beanhuo)
2020-05-06 16:29 ` Boris Brezillon
2020-05-06 16:50 ` Bean Huo (beanhuo)
2020-05-06 18:44 ` Richard Weinberger
2020-05-06 19:01 ` Boris Brezillon
2020-05-06 19:23 ` Richard Weinberger
2020-05-06 20:40 ` Boris Brezillon
2020-05-06 20:59 ` Richard Weinberger
2020-05-06 21:11 ` Boris Brezillon
2020-05-07 9:28 ` Bean Huo (beanhuo)
2020-05-07 9:40 ` Boris Brezillon
2020-05-07 9:28 ` Bean Huo (beanhuo)
2020-05-07 9:30 ` Boris Brezillon
2020-05-07 10:02 ` Richard Weinberger
2020-05-07 12:20 ` Richard Weinberger
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=20200503170924.52f9d9d6@collabora.com \
--to=boris.brezillon@collabora.com \
--cc=Tudor.Ambarus@microchip.com \
--cc=WojtaszczykP@cumminsallison.com \
--cc=beanhuo@micron.com \
--cc=linux-mtd@lists.infradead.org \
--cc=miquel.raynal@bootlin.com \
--cc=richard@nod.at \
--cc=tglx@linutronix.de \
--cc=thomas.petazzoni@bootlin.com \
--cc=vigneshr@ti.com \
--cc=zszubbocsev@micron.com \
/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.