[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20230522173813.08afe6b8@xps-13>
Date: Mon, 22 May 2023 17:38:13 +0200
From: Miquel Raynal <miquel.raynal@...tlin.com>
To: Arseniy Krasnov <AVKrasnov@...rdevices.ru>
Cc: Liang Yang <liang.yang@...ogic.com>,
Richard Weinberger <richard@....at>,
Vignesh Raghavendra <vigneshr@...com>,
Neil Armstrong <neil.armstrong@...aro.org>,
Kevin Hilman <khilman@...libre.com>,
Jerome Brunet <jbrunet@...libre.com>,
Martin Blumenstingl <martin.blumenstingl@...glemail.com>,
Jianxin Pan <jianxin.pan@...ogic.com>,
Yixun Lan <yixun.lan@...ogic.com>, <oxffffaa@...il.com>,
<kernel@...rdevices.ru>, <linux-mtd@...ts.infradead.org>,
<linux-arm-kernel@...ts.infradead.org>,
<linux-amlogic@...ts.infradead.org>, <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH v4 3/5] mtd: rawnand: meson: always read whole OOB bytes
Hi Arseniy,
AVKrasnov@...rdevices.ru wrote on Mon, 15 May 2023 12:44:37 +0300:
> This changes size of read access to OOB area by reading all bytes of
> OOB (free bytes + ECC engine bytes).
This is normally up to the user (user in your case == jffs2). The
controller driver should expose a number of user accessible bytes and
then when users want the OOB area, they should access it entirely. On
top of that read, they can extract (or "write only") the user bytes.
> Signed-off-by: Arseniy Krasnov <AVKrasnov@...rdevices.ru>
> ---
> drivers/mtd/nand/raw/meson_nand.c | 24 ++++++++++++++++++++++++
> 1 file changed, 24 insertions(+)
>
> diff --git a/drivers/mtd/nand/raw/meson_nand.c b/drivers/mtd/nand/raw/meson_nand.c
> index 8526a6b87720..a31106c943d7 100644
> --- a/drivers/mtd/nand/raw/meson_nand.c
> +++ b/drivers/mtd/nand/raw/meson_nand.c
> @@ -755,6 +755,30 @@ static int __meson_nfc_read_oob(struct nand_chip *nand, int page,
> u32 oob_bytes;
> u32 page_size;
> int ret;
> + int i;
> +
> + /* Read ECC codes and user bytes. */
> + for (i = 0; i < nand->ecc.steps; i++) {
> + u32 ecc_offs = nand->ecc.size * (i + 1) +
> + NFC_OOB_PER_ECC(nand) * i;
> +
> + ret = nand_read_page_op(nand, page, 0, NULL, 0);
> + if (ret)
> + return ret;
> +
> + /* Use temporary buffer, because 'nand_change_read_column_op()'
> + * seems work with some alignment, so we can't read data to
> + * 'oob_buf' directly.
DMA?
> + */
> + ret = nand_change_read_column_op(nand, ecc_offs, meson_chip->oob_buf,
> + NFC_OOB_PER_ECC(nand), false);
> + if (ret)
> + return ret;
> +
> + memcpy(oob_buf + i * NFC_OOB_PER_ECC(nand),
> + meson_chip->oob_buf,
> + NFC_OOB_PER_ECC(nand));
> + }
>
> oob_bytes = meson_nfc_get_oob_bytes(nand);
>
Thanks,
Miquèl
Powered by blists - more mailing lists