[PATCH v2 3/5] cmd: mtd: Add total length of read operation
Liang-Yan Yu
liangyanyu13 at gmail.com
Tue Nov 8 10:49:01 CET 2022
Hi Miquel,
>
> Hi Leo,
>
> liangyanyu13 at gmail.com wrote on Wed, 2 Nov 2022 14:14:30 +0800:
>
> > This patch bypasses the limitation of length for read operations
> > in MTD test module. Thus, the total length of a read operation
> > can be passed down to the continuous read operation in SPI NAND
> > layer.
> >
> > Signed-off-by: Leo Yu <liangyanyu13 at gmail.com>
> > ---
> > cmd/mtd.c | 2 ++
> > include/linux/mtd/mtd.h | 2 ++
> > 2 files changed, 4 insertions(+)
> >
> > diff --git a/cmd/mtd.c b/cmd/mtd.c
> > index ad5cc9827d..0b601e08a3 100644
> > --- a/cmd/mtd.c
> > +++ b/cmd/mtd.c
> > @@ -335,6 +335,8 @@ static int do_mtd_io(struct cmd_tbl *cmdtp, int flag, int argc,
> > io_op.ooblen = woob ? mtd->oobsize : 0;
> > io_op.datbuf = buf;
> > io_op.oobbuf = woob ? &buf[len] : NULL;
> > + /* Total length of this read operation passed by user */
> > + io_op.totallen = len;
>
> Where is this used?
It is used in spinand_mtd_read function (drivers/mtd/nand/spi/core.c)
as a condition to trigger
continuous read mode (please refer to patch[4/5]). This member stores
the total length of a
read operation. The reason why this member is added is because the mtd
command sets
the length of an operation to one page if has_pages flag is set. This
limits spinand_mtd_read
to receive length greater than one page. Which means there is no way
to trigger continuous
mode. Thus, I added this member to bypass the limitation.
> >
> > /* Search for the first good block after the given offset */
> > off = start_off;
> > diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h
> > index ff635bd716..df8a231c82 100644
> > --- a/include/linux/mtd/mtd.h
> > +++ b/include/linux/mtd/mtd.h
> > @@ -79,6 +79,7 @@ struct mtd_erase_region_info {
> > * mode = MTD_OPS_PLACE_OOB or MTD_OPS_RAW)
> > * @datbuf: data buffer - if NULL only oob data are read/written
> > * @oobbuf: oob data buffer
> > + * @totallen: total number of data bytes to read in one read operation (for continuous read mode)
> > */
> > struct mtd_oob_ops {
> > unsigned int mode;
> > @@ -89,6 +90,7 @@ struct mtd_oob_ops {
> > uint32_t ooboffs;
> > uint8_t *datbuf;
> > uint8_t *oobbuf;
> > + size_t totallen;
> > };
> >
> > #ifdef CONFIG_SYS_NAND_MAX_OOBFREE
> > --
> > 2.17.1
> >
>
>
> Thanks,
> Miquèl
Best,
Leo Yu
More information about the U-Boot
mailing list