From: Boris Brezillon <boris.brezillon@collabora.com>
To: Miquel Raynal <miquel.raynal@bootlin.com>
Cc: Michal Simek <monstr@monstr.eu>,
Vignesh Raghavendra <vigneshr@ti.com>,
Tudor Ambarus <Tudor.Ambarus@microchip.com>,
Richard Weinberger <richard@nod.at>,
linux-mtd@lists.infradead.org,
Thomas Petazzoni <thomas.petazzoni@bootlin.com>,
Naga Sureshkumar Relli <nagasure@xilinx.com>
Subject: Re: [PATCH v2 09/11] mtd: rawnand: Expose monolithic read/write_page_raw() helpers
Date: Wed, 29 Apr 2020 18:15:09 +0200 [thread overview]
Message-ID: <20200429181509.657aa2e5@collabora.com> (raw)
In-Reply-To: <20200429155540.22048-10-miquel.raynal@bootlin.com>
On Wed, 29 Apr 2020 17:55:38 +0200
Miquel Raynal <miquel.raynal@bootlin.com> wrote:
> The current nand_read/write_page_raw() helpers are already widely used
> but do not fit the purpose of "constrained" controllers which cannot,
> for instance, separate command/address cycles with data cycles.
>
> Workaround this issue by proposing alternative helpers that cannot be
> used by controller drivers instead.
>
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> ---
> drivers/mtd/nand/raw/nand_base.c | 60 ++++++++++++++++++++++++++++++++
> include/linux/mtd/rawnand.h | 8 +++--
> 2 files changed, 66 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/mtd/nand/raw/nand_base.c b/drivers/mtd/nand/raw/nand_base.c
> index 15a9189b2307..2e525cb5a4e4 100644
> --- a/drivers/mtd/nand/raw/nand_base.c
> +++ b/drivers/mtd/nand/raw/nand_base.c
> @@ -2629,6 +2629,39 @@ int nand_read_page_raw(struct nand_chip *chip, uint8_t *buf, int oob_required,
> }
> EXPORT_SYMBOL(nand_read_page_raw);
>
> +/**
> + * nand_monolithic_read_page_raw - Read raw page data without ECC in one go
Maybe
"Read the full page (data + OOB) with ECC engine disabled"
?
> + * @chip: nand chip info structure
> + * @buf: buffer to store read data
> + * @oob_required: caller requires OOB data read to chip->oob_poi
> + * @page: page number to read
> + */
> +int nand_monolithic_read_page_raw(struct nand_chip *chip, u8 *buf,
> + int oob_required, int page)
> +{
> + struct mtd_info *mtd = nand_to_mtd(chip);
> + unsigned int size = mtd->writesize;
> + u8 *read_buf = buf;
> + int ret;
> +
> + if (oob_required) {
> + size += mtd->oobsize;
> +
> + if (buf != chip->data_buf)
> + read_buf = nand_get_data_buf(chip);
> + }
> +
> + ret = nand_read_page_op(chip, page, 0, read_buf, size);
> + if (ret)
> + return ret;
> +
> + if (buf != chip->data_buf)
> + memcpy(buf, read_buf, mtd->writesize);
> +
> + return 0;
> +}
> +EXPORT_SYMBOL(nand_monolithic_read_page_raw);
> +
> /**
> * nand_read_page_raw_syndrome - [INTERN] read raw page data without ecc
> * @chip: nand chip info structure
> @@ -3636,6 +3669,33 @@ int nand_write_page_raw(struct nand_chip *chip, const uint8_t *buf,
> }
> EXPORT_SYMBOL(nand_write_page_raw);
>
> +/**
> + * nand_monolithic_write_page_raw - Raw page write in one go
Maybe we should have a consistent description for those helpers:
"Write the full page (data + OOB) with ECC engine disabled"
?
> + * @chip: NAND chip info structure
> + * @buf: data buffer
> + * @oob_required: must write chip->oob_poi to OOB
> + * @page: page number to write
> + */
> +int nand_monolithic_write_page_raw(struct nand_chip *chip, const u8 *buf,
> + int oob_required, int page)
> +{
> + struct mtd_info *mtd = nand_to_mtd(chip);
> + unsigned int size = mtd->writesize;
> + u8 *write_buf = (u8 *)buf;
> +
> + if (oob_required) {
> + size += mtd->oobsize;
> +
> + if (buf != chip->data_buf) {
> + write_buf = nand_get_data_buf(chip);
> + memcpy(write_buf, buf, mtd->writesize);
> + }
> + }
> +
> + return nand_prog_page_op(chip, page, 0, write_buf, size);
> +}
> +EXPORT_SYMBOL(nand_monolithic_write_page_raw);
> +
> /**
> * nand_write_page_raw_syndrome - [INTERN] raw page write function
> * @chip: nand chip info structure
> diff --git a/include/linux/mtd/rawnand.h b/include/linux/mtd/rawnand.h
> index d40ad19ba0f6..0da10e99cf39 100644
> --- a/include/linux/mtd/rawnand.h
> +++ b/include/linux/mtd/rawnand.h
> @@ -1328,13 +1328,17 @@ int nand_read_oob_std(struct nand_chip *chip, int page);
> int nand_get_set_features_notsupp(struct nand_chip *chip, int addr,
> u8 *subfeature_param);
>
> -/* Default read_page_raw implementation */
> +/* Default read_page_raw implementations */
Well, nand_monolithic_read_page_raw() is not the default :p. Just drop
the "Default " and it should be good.
> int nand_read_page_raw(struct nand_chip *chip, uint8_t *buf, int oob_required,
> int page);
> +int nand_monolithic_read_page_raw(struct nand_chip *chip, uint8_t *buf,
> + int oob_required, int page);
>
> -/* Default write_page_raw implementation */
> +/* Default write_page_raw implementations */
Ditto.
> int nand_write_page_raw(struct nand_chip *chip, const uint8_t *buf,
> int oob_required, int page);
> +int nand_monolithic_write_page_raw(struct nand_chip *chip, const uint8_t *buf,
> + int oob_required, int page);
>
> /* Reset and initialize a NAND device */
> int nand_reset(struct nand_chip *chip, int chipnr);
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
next prev parent reply other threads:[~2020-04-29 16:15 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-29 15:55 [PATCH v2 00/11] Supporting restricted NAND controllers Miquel Raynal
2020-04-29 15:55 ` [PATCH v2 01/11] mtd: rawnand: Translate obscure bitfields into readable macros Miquel Raynal
2020-04-29 15:55 ` [PATCH v2 02/11] mtd: rawnand: Reorder the nand_chip->options flags Miquel Raynal
2020-04-29 15:55 ` [PATCH v2 03/11] mtd: rawnand: Rename a NAND chip option Miquel Raynal
2020-04-29 16:08 ` Boris Brezillon
2020-04-29 16:22 ` Miquel Raynal
2020-04-29 16:32 ` Boris Brezillon
2020-04-29 16:36 ` Boris Brezillon
2020-04-29 16:54 ` Miquel Raynal
2020-04-29 18:55 ` Boris Brezillon
2020-04-29 15:55 ` [PATCH v2 04/11] mtd: rawnand: Fix comments about the use of bufpoi Miquel Raynal
2020-04-29 15:55 ` [PATCH v2 05/11] mtd: rawnand: Rename the use_bufpoi variables Miquel Raynal
2020-04-29 15:55 ` [PATCH v2 06/11] mtd: rawnand: Avoid indirect access to ->data_buf() Miquel Raynal
2020-04-29 15:55 ` [PATCH v2 07/11] mtd: rawnand: onfi: Adapt the parameter page read to constraint controllers Miquel Raynal
2020-04-29 16:09 ` Boris Brezillon
2020-05-02 8:12 ` Boris Brezillon
2020-05-04 8:16 ` Miquel Raynal
2020-04-29 15:55 ` [PATCH v2 08/11] mtd: rawnand: jedec: " Miquel Raynal
2020-04-29 16:04 ` Boris Brezillon
2020-04-29 16:23 ` Miquel Raynal
2020-05-03 19:06 ` Miquel Raynal
2020-05-03 19:44 ` Boris Brezillon
2020-05-04 8:02 ` Miquel Raynal
2020-04-29 15:55 ` [PATCH v2 09/11] mtd: rawnand: Expose monolithic read/write_page_raw() helpers Miquel Raynal
2020-04-29 16:15 ` Boris Brezillon [this message]
2020-04-29 16:26 ` Miquel Raynal
2020-04-29 16:31 ` Boris Brezillon
2020-04-29 16:52 ` Miquel Raynal
2020-04-29 19:03 ` Boris Brezillon
2020-04-29 15:55 ` [PATCH v2 10/11] mtd: rawnand: Allow controllers to overload soft ECC hooks Miquel Raynal
2020-04-29 16:15 ` Boris Brezillon
2020-04-29 15:55 ` [PATCH v2 11/11] mtd: rawnand: micron: Allow controllers to overload raw accessors Miquel Raynal
2020-04-29 16:16 ` Boris Brezillon
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=20200429181509.657aa2e5@collabora.com \
--to=boris.brezillon@collabora.com \
--cc=Tudor.Ambarus@microchip.com \
--cc=linux-mtd@lists.infradead.org \
--cc=miquel.raynal@bootlin.com \
--cc=monstr@monstr.eu \
--cc=nagasure@xilinx.com \
--cc=richard@nod.at \
--cc=thomas.petazzoni@bootlin.com \
--cc=vigneshr@ti.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.