Hi Álvaro, Álvaro Fernández Rojas <noltari@xxxxxxxxx> wrote on Mon, 4 May 2020 20:59:44 +0200: > The current code generates 8 oob sections: > S1 1-5 > ECC 6-8 > S2 9-15 > S3 16-21 > ECC 22-24 > S4 25-31 > S5 32-37 > ECC 38-40 > S6 41-47 > S7 48-53 > ECC 54-56 > S8 57-63 > > Change it by merging continuous sections: > S1 1-5 > ECC 6-8 > S2 9-21 > ECC 22-24 > S3 25-37 > ECC 38-40 > S4 41-53 > ECC 54-56 > S5 57-63 > > Signed-off-by: Álvaro Fernández Rojas <noltari@xxxxxxxxx> > --- > v2: keep original comment and fix correctly skip byte 6 for small-page nand > > drivers/mtd/nand/raw/brcmnand/brcmnand.c | 34 +++++++++++++----------- > 1 file changed, 18 insertions(+), 16 deletions(-) > > diff --git a/drivers/mtd/nand/raw/brcmnand/brcmnand.c b/drivers/mtd/nand/raw/brcmnand/brcmnand.c > index e4e3ceeac38f..767343e0e6e7 100644 > --- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c > +++ b/drivers/mtd/nand/raw/brcmnand/brcmnand.c > @@ -1100,30 +1100,32 @@ static int brcmnand_hamming_ooblayout_free(struct mtd_info *mtd, int section, > struct brcmnand_cfg *cfg = &host->hwcfg; > int sas = cfg->spare_area_size << cfg->sector_size_1k; > int sectors = cfg->page_size / (512 << cfg->sector_size_1k); > + u32 next; > > - if (section >= sectors * 2) > + if (section > sectors) > return -ERANGE; > > - oobregion->offset = (section / 2) * sas; > + next = (section * sas); > + if (section < sectors) > + next += 6; > > - if (section & 1) { > - oobregion->offset += 9; > - oobregion->length = 7; > + if (section) { > + oobregion->offset = ((section - 1) * sas) + 9; > } else { > - oobregion->length = 6; > - > - /* First sector of each page may have BBI */ > - if (!section) { > - /* > - * Small-page NAND use byte 6 for BBI while large-page > - * NAND use byte 0. > - */ > - if (cfg->page_size > 512) > - oobregion->offset++; > - oobregion->length--; > + /* > + * Small-page NAND use byte 6 for BBI while large-page > + * NAND use byte 0. > + */ > + if (cfg->page_size > 512) { > + oobregion->offset = 1; > + } else { > + oobregion->offset = 0; > + next--; > } > } > > + oobregion->length = next - oobregion->offset; > + > return 0; > } > I'm fine with the two patches but could you please invert the order and add Fixes: + Cc: stable tags on both? on "fix hamming oob layout" please? This way the fix is valid on older versions of the driver an can be backported easily. Thanks, Miquèl