From: Boris Brezillon <boris.brezillon@bootlin.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v6 04/31] mtd: Fallback to ->_read/write() when ->_read/write_oob() is missing
Date: Thu, 16 Aug 2018 17:36:10 +0200 [thread overview]
Message-ID: <20180816173610.54d032be@bbrezillon> (raw)
In-Reply-To: <20180816153029.15521-5-miquel.raynal@bootlin.com>
On Thu, 16 Aug 2018 17:30:02 +0200
Miquel Raynal <miquel.raynal@bootlin.com> wrote:
> Some MTD sublayers/drivers are implementing ->_read/write() and
> not ->_read/write_oob().
>
> While for NAND devices both are usually valid, for NOR devices, using
> the _oob variant has no real meaning. But, as the MTD layer is supposed
> to hide as much as possible the flash complexity to the user, there is
> no reason to error out while it is just a matter of rewritting things
> internally.
>
> Add a fallback on mtd->_read() (resp. mtd->_write()) when the user calls
> mtd_read_oob() (resp. mtd_write_oob()) while mtd->_read_oob() (resp.
> mtd->_write_oob) is not implemented. There is already a fallback on the
> _oob variant if the former is used.
>
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Reviewed-by: Boris Brezillon <boris.brezillon@bootlin.com>
> ---
> drivers/mtd/mtdcore.c | 26 ++++++++++++++++++++------
> 1 file changed, 20 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c
> index 9a3efe95df..fb1d68d5e2 100644
> --- a/drivers/mtd/mtdcore.c
> +++ b/drivers/mtd/mtdcore.c
> @@ -1047,20 +1047,27 @@ int mtd_read_oob(struct mtd_info *mtd, loff_t from, struct mtd_oob_ops *ops)
> {
> int ret_code;
> ops->retlen = ops->oobretlen = 0;
> - if (!mtd->_read_oob)
> - return -EOPNOTSUPP;
>
> ret_code = mtd_check_oob_ops(mtd, from, ops);
> if (ret_code)
> return ret_code;
>
> + /* Check the validity of a potential fallback on mtd->_read */
> + if (!mtd->_read_oob && (!mtd->_read || ops->oobbuf))
> + return -EOPNOTSUPP;
> +
> + if (mtd->_read_oob)
> + ret_code = mtd->_read_oob(mtd, from, ops);
> + else
> + ret_code = mtd->_read(mtd, from, ops->len, &ops->retlen,
> + ops->datbuf);
> +
> /*
> * In cases where ops->datbuf != NULL, mtd->_read_oob() has semantics
> * similar to mtd->_read(), returning a non-negative integer
> * representing max bitflips. In other cases, mtd->_read_oob() may
> * return -EUCLEAN. In all cases, perform similar logic to mtd_read().
> */
> - ret_code = mtd->_read_oob(mtd, from, ops);
> if (unlikely(ret_code < 0))
> return ret_code;
> if (mtd->ecc_strength == 0)
> @@ -1075,8 +1082,7 @@ int mtd_write_oob(struct mtd_info *mtd, loff_t to,
> int ret;
>
> ops->retlen = ops->oobretlen = 0;
> - if (!mtd->_write_oob)
> - return -EOPNOTSUPP;
> +
> if (!(mtd->flags & MTD_WRITEABLE))
> return -EROFS;
>
> @@ -1084,7 +1090,15 @@ int mtd_write_oob(struct mtd_info *mtd, loff_t to,
> if (ret)
> return ret;
>
> - return mtd->_write_oob(mtd, to, ops);
> + /* Check the validity of a potential fallback on mtd->_write */
> + if (!mtd->_write_oob && (!mtd->_write || ops->oobbuf))
> + return -EOPNOTSUPP;
> +
> + if (mtd->_write_oob)
> + return mtd->_write_oob(mtd, to, ops);
> + else
> + return mtd->_write(mtd, to, ops->len, &ops->retlen,
> + ops->datbuf);
> }
> EXPORT_SYMBOL_GPL(mtd_write_oob);
>
next prev parent reply other threads:[~2018-08-16 15:36 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-08-16 15:29 [U-Boot] [PATCH v6 00/31] SPI-NAND support Miquel Raynal
2018-08-16 15:29 ` [U-Boot] [PATCH v6 01/31] mtd: Fallback to ->_read/write_oob() when ->_read/write() is missing Miquel Raynal
2018-08-16 15:30 ` [U-Boot] [PATCH v6 02/31] mtd: Uninline mtd_write_oob and move it to mtdcore.c Miquel Raynal
2018-08-16 15:30 ` [U-Boot] [PATCH v6 03/31] mtd: Add sanity checks in mtd_write/read_oob() Miquel Raynal
2018-08-16 15:30 ` [U-Boot] [PATCH v6 04/31] mtd: Fallback to ->_read/write() when ->_read/write_oob() is missing Miquel Raynal
2018-08-16 15:36 ` Boris Brezillon [this message]
2018-08-16 15:30 ` [U-Boot] [PATCH v6 05/31] mtd: add get/set of_node/flash_node helpers Miquel Raynal
2018-08-16 15:30 ` [U-Boot] [PATCH v6 06/31] mtd: fix build issue with includes Miquel Raynal
2018-08-16 15:33 ` Boris Brezillon
2018-08-16 15:55 ` Boris Brezillon
2018-08-16 15:30 ` [U-Boot] [PATCH v6 07/31] mtd: move definitions to enlarge their range Miquel Raynal
2018-08-16 15:30 ` [U-Boot] [PATCH v6 08/31] mtd: move all flash categories inside MTD submenu Miquel Raynal
2018-08-16 15:30 ` [U-Boot] [PATCH v6 09/31] mtd: move NAND files into a raw/ subdirectory Miquel Raynal
2018-08-16 15:30 ` [U-Boot] [PATCH v6 10/31] mtd: rename nand into rawnand in Kconfig prompt Miquel Raynal
2018-08-16 15:30 ` [U-Boot] [PATCH v6 11/31] mtd: nand: Add core infrastructure to deal with NAND devices Miquel Raynal
2018-08-16 15:30 ` [U-Boot] [PATCH v6 12/31] mtd: nand: Pass mode information to nand_page_io_req Miquel Raynal
2018-08-16 15:30 ` [U-Boot] [PATCH v6 13/31] spi: Extend the core to ease integration of SPI memory controllers Miquel Raynal
2018-08-16 15:30 ` [U-Boot] [PATCH v6 14/31] mtd: nand: Add core infrastructure to support SPI NANDs Miquel Raynal
2018-08-16 15:30 ` [U-Boot] [PATCH v6 15/31] mtd: spinand: Add initial support for Micron MT29F2G01ABAGD Miquel Raynal
2018-08-16 15:30 ` [U-Boot] [PATCH v6 16/31] mtd: spinand: Add initial support for Winbond W25M02GV Miquel Raynal
2018-08-16 15:30 ` [U-Boot] [PATCH v6 17/31] mtd: spinand: Add initial support for the MX35LF1GE4AB chip Miquel Raynal
2018-08-16 15:30 ` [U-Boot] [PATCH v6 18/31] mtd: spinand: Add initial support for the MX35LF2GE4AB chip Miquel Raynal
2018-08-16 15:30 ` [U-Boot] [PATCH v6 19/31] dt-bindings: Add bindings for SPI NAND devices Miquel Raynal
2018-08-16 15:30 ` [U-Boot] [PATCH v6 20/31] mtd: declare MTD_PARTITIONS symbol in Kconfig Miquel Raynal
2018-08-16 15:46 ` Boris Brezillon
2018-09-03 7:47 ` Jagan Teki
2018-09-03 8:30 ` Miquel Raynal
2018-09-03 8:50 ` Miquel Raynal
2018-08-16 15:30 ` [U-Boot] [PATCH v6 21/31] mtd: mtdpart: balance debug messages Miquel Raynal
2018-08-16 15:30 ` [U-Boot] [PATCH v6 22/31] cmd: ubi: delete useless and misleading definitions Miquel Raynal
2018-08-16 15:50 ` Boris Brezillon
2018-08-16 15:30 ` [U-Boot] [PATCH v6 23/31] cmd: mtdparts: add fallthrough in switch statement Miquel Raynal
2018-08-16 15:30 ` [U-Boot] [PATCH v6 24/31] cmd: mtdparts: accept spi-nand devices Miquel Raynal
2018-08-16 15:53 ` Boris Brezillon
2018-08-16 15:30 ` [U-Boot] [PATCH v6 25/31] cmd: mtdparts: add a generic 'mtdparts' parser Miquel Raynal
2018-08-16 17:04 ` Boris Brezillon
2018-08-16 15:30 ` [U-Boot] [PATCH v6 26/31] mtd: uclass: add probe function Miquel Raynal
2018-08-16 15:30 ` [U-Boot] [PATCH v6 27/31] mtd: move mtdparts_init() declaration Miquel Raynal
2018-08-16 16:05 ` Boris Brezillon
2018-08-20 9:06 ` Miquel Raynal
2018-08-16 15:30 ` [U-Boot] [PATCH v6 28/31] mtd: mtdpart: implement proper partition handling Miquel Raynal
2018-08-16 16:19 ` Boris Brezillon
2018-08-16 15:30 ` [U-Boot] [PATCH v6 29/31] cmd: mtd: add 'mtd' command Miquel Raynal
2018-08-16 16:22 ` Boris Brezillon
2018-08-20 16:08 ` Miquel Raynal
2018-08-20 16:30 ` Boris Brezillon
2018-08-16 19:50 ` Boris Brezillon
2018-08-16 20:38 ` Boris Brezillon
2018-08-16 15:30 ` [U-Boot] [PATCH v6 30/31] cmd: mtdparts: try to probe the MTD devices as a fallback Miquel Raynal
2018-08-16 17:11 ` Boris Brezillon
2018-08-16 15:30 ` [U-Boot] [PATCH v6 31/31] cmd: ubi: clean the partition handling Miquel Raynal
2018-08-16 19:17 ` Boris Brezillon
2018-08-16 16:58 ` [U-Boot] [PATCH v6 00/31] SPI-NAND support Boris Brezillon
2018-08-17 8:38 ` Miquel Raynal
2018-08-30 12:43 ` Miquel Raynal
2018-09-02 18:17 ` Jagan Teki
2018-09-03 6:45 ` Miquel Raynal
2018-09-03 7:45 ` Jagan Teki
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=20180816173610.54d032be@bbrezillon \
--to=boris.brezillon@bootlin.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.