From ce33ef997cfeb7b77300227a6ffab9936ea51940 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= Date: Thu, 11 Jun 2020 09:07:04 +0200 Subject: bcm63xx: switch to upstream NAND patches MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Álvaro Fernández Rojas --- ...wnand-brcmnand-improve-hamming-oob-layout.patch | 92 ++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 target/linux/bcm63xx/patches-5.4/021-v5.8-mtd-rawnand-brcmnand-improve-hamming-oob-layout.patch (limited to 'target/linux/bcm63xx/patches-5.4/021-v5.8-mtd-rawnand-brcmnand-improve-hamming-oob-layout.patch') diff --git a/target/linux/bcm63xx/patches-5.4/021-v5.8-mtd-rawnand-brcmnand-improve-hamming-oob-layout.patch b/target/linux/bcm63xx/patches-5.4/021-v5.8-mtd-rawnand-brcmnand-improve-hamming-oob-layout.patch new file mode 100644 index 0000000000..1df2411035 --- /dev/null +++ b/target/linux/bcm63xx/patches-5.4/021-v5.8-mtd-rawnand-brcmnand-improve-hamming-oob-layout.patch @@ -0,0 +1,92 @@ +From d00358d7a1c50718232799e1ee10955bcd73795a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= +Date: Tue, 12 May 2020 09:57:33 +0200 +Subject: [PATCH] mtd: rawnand: brcmnand: improve hamming oob layout +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +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 +Signed-off-by: Miquel Raynal +Link: https://lore.kernel.org/linux-mtd/20200512075733.745374-3-noltari@gmail.com +--- + drivers/mtd/nand/raw/brcmnand/brcmnand.c | 35 +++++++++++------------- + 1 file changed, 16 insertions(+), 19 deletions(-) + +--- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c ++++ b/drivers/mtd/nand/raw/brcmnand/brcmnand.c +@@ -1003,33 +1003,30 @@ static int brcmnand_hamming_ooblayout_fr + 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 bytes 0 and 1. +- */ +- if (cfg->page_size > 512) { +- oobregion->offset += 2; +- oobregion->length -= 2; +- } else { +- oobregion->length--; +- } ++ if (cfg->page_size > 512) { ++ /* Large page NAND uses first 2 bytes for BBI */ ++ oobregion->offset = 2; ++ } else { ++ /* Small page NAND uses last byte before ECC for BBI */ ++ oobregion->offset = 0; ++ next--; + } + } + ++ oobregion->length = next - oobregion->offset; ++ + return 0; + } + -- cgit v1.2.3