mtd: rawnand: meson: handle OOB buffer according OOB layout
authorArseniy Krasnov <avkrasnov@salutedevices.com>
Thu, 9 Nov 2023 05:39:53 +0000 (08:39 +0300)
committerMiquel Raynal <miquel.raynal@bootlin.com>
Thu, 30 Nov 2023 10:22:52 +0000 (11:22 +0100)
In case of MTD_OPS_AUTO_OOB mode, MTD/NAND layer fills/reads OOB buffer
according current OOB layout so we need to follow it in the driver.

Signed-off-by: Arseniy Krasnov <avkrasnov@salutedevices.com>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/linux-mtd/20231109053953.3863664-1-avkrasnov@salutedevices.com
drivers/mtd/nand/raw/meson_nand.c

index 7e16a13fb438039bd218cd4768a7a8b844f46ce9..cdb58aca59c083c0d08606532882a637f1db4b3c 100644 (file)
@@ -511,7 +511,7 @@ static void meson_nfc_set_user_byte(struct nand_chip *nand, u8 *oob_buf)
        __le64 *info;
        int i, count;
 
-       for (i = 0, count = 0; i < nand->ecc.steps; i++, count += 2) {
+       for (i = 0, count = 0; i < nand->ecc.steps; i++, count += (2 + nand->ecc.bytes)) {
                info = &meson_chip->info_buf[i];
                *info |= oob_buf[count];
                *info |= oob_buf[count + 1] << 8;
@@ -524,7 +524,7 @@ static void meson_nfc_get_user_byte(struct nand_chip *nand, u8 *oob_buf)
        __le64 *info;
        int i, count;
 
-       for (i = 0, count = 0; i < nand->ecc.steps; i++, count += 2) {
+       for (i = 0, count = 0; i < nand->ecc.steps; i++, count += (2 + nand->ecc.bytes)) {
                info = &meson_chip->info_buf[i];
                oob_buf[count] = *info;
                oob_buf[count + 1] = *info >> 8;