Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1286038

[PATCH 18/23] mtd: nand: bch: switch to nand_ecclayout_pos

From Boris Brezillon <boris.brezillon@free-electrons.com>
Newsgroups linux.kernel
Subject [PATCH 18/23] mtd: nand: bch: switch to nand_ecclayout_pos
Date 2015-12-07 23:30 +0100
Message-ID <qDcsb-2fH-41@gated-at.bofh.it> (permalink)
References <qDcs9-2fH-1@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
 drivers/mtd/nand/nand_bch.c | 33 +++++++++++----------------------
 1 file changed, 11 insertions(+), 22 deletions(-)

diff --git a/drivers/mtd/nand/nand_bch.c b/drivers/mtd/nand/nand_bch.c
index 9cff544..2937b49 100644
--- a/drivers/mtd/nand/nand_bch.c
+++ b/drivers/mtd/nand/nand_bch.c
@@ -32,13 +32,11 @@
 /**
  * struct nand_bch_control - private NAND BCH control structure
  * @bch:       BCH control structure
- * @ecclayout: private ecc layout for this BCH configuration
  * @errloc:    error location array
  * @eccmask:   XOR ecc mask, allows erased pages to be decoded as valid
  */
 struct nand_bch_control {
 	struct bch_control   *bch;
-	struct nand_ecclayout ecclayout;
 	unsigned int         *errloc;
 	unsigned char        *eccmask;
 };
@@ -124,7 +122,6 @@ struct nand_bch_control *nand_bch_init(struct mtd_info *mtd)
 {
 	struct nand_chip *nand = mtd_to_nand(mtd);
 	unsigned int m, t, eccsteps, i;
-	struct nand_ecclayout *layout = nand->ecc.layout;
 	struct nand_bch_control *nbc = NULL;
 	unsigned char *erased_page;
 	unsigned int eccsize = nand->ecc.size;
@@ -161,8 +158,17 @@ struct nand_bch_control *nand_bch_init(struct mtd_info *mtd)
 
 	eccsteps = mtd->writesize/eccsize;
 
+	/*
+	 * Rely on the default ecclayout to ooblayout wrapper provided by MTD
+	 * core if ecc.layout is not NULL.
+	 * FIXME: this should be removed when all callers have moved to the
+	 * mtd_ooblayout_ops approach.
+	 */
+	if (nand->ecc.layout)
+		mtd_set_ecclayout(mtd, nand->ecc.layout);
+
 	/* if no ecc placement scheme was provided, build one */
-	if (!layout) {
+	if (!mtd->ooblayout) {
 
 		/* handle large page devices only */
 		if (mtd->oobsize < 64) {
@@ -171,24 +177,7 @@ struct nand_bch_control *nand_bch_init(struct mtd_info *mtd)
 			goto fail;
 		}
 
-		layout = &nbc->ecclayout;
-		layout->eccbytes = eccsteps*eccbytes;
-
-		/* reserve 2 bytes for bad block marker */
-		if (layout->eccbytes+2 > mtd->oobsize) {
-			printk(KERN_WARNING "no suitable oob scheme available "
-			       "for oobsize %d eccbytes %u\n", mtd->oobsize,
-			       eccbytes);
-			goto fail;
-		}
-		/* put ecc bytes at oob tail */
-		for (i = 0; i < layout->eccbytes; i++)
-			layout->eccpos[i] = mtd->oobsize-layout->eccbytes+i;
-
-		layout->oobfree[0].offset = 2;
-		layout->oobfree[0].length = mtd->oobsize-2-layout->eccbytes;
-
-		nand->ecc.layout = layout;
+		mtd_set_ooblayout(mtd, &nand_ooblayout_lp_ops);
 	}
 
 	/* sanity checks */
-- 
2.1.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH 00/23] mtd: rework ECC layout definition Boris Brezillon <boris.brezillon@free-electrons.com> - 2015-12-07 23:30 +0100
  [PATCH 15/23] mtd: create an mtd_ooblayout_ops struct to ease ECC layout definition Boris Brezillon <boris.brezillon@free-electrons.com> - 2015-12-07 23:30 +0100
  [PATCH 21/23] staging: mt29f_spinand: switch to mtd_ooblayout_ops Boris Brezillon <boris.brezillon@free-electrons.com> - 2015-12-07 23:30 +0100
    Re: [linux-sunxi] [PATCH 21/23] staging: mt29f_spinand: switch to mtd_ooblayout_ops Julian Calaby <julian.calaby@gmail.com> - 2015-12-08 01:10 +0100
      Re: [linux-sunxi] [PATCH 21/23] staging: mt29f_spinand: switch to  mtd_ooblayout_ops Boris Brezillon <boris.brezillon@free-electrons.com> - 2015-12-08 09:50 +0100
  [PATCH 03/23] mtd: nftl: kill unused oobinfo field Boris Brezillon <boris.brezillon@free-electrons.com> - 2015-12-07 23:30 +0100
  [PATCH 20/23] mtd: onenand: switch to mtd_ooblayout_ops Boris Brezillon <boris.brezillon@free-electrons.com> - 2015-12-07 23:30 +0100
  [PATCH 01/23] mtd: kill the ecclayout->oobavail field Boris Brezillon <boris.brezillon@free-electrons.com> - 2015-12-07 23:30 +0100
    Re: [linux-sunxi] [PATCH 01/23] mtd: kill the ecclayout->oobavail  field Priit Laes <plaes@plaes.org> - 2015-12-08 07:50 +0100
      Re: [linux-sunxi] [PATCH 01/23] mtd: kill the ecclayout->oobavail  field Boris Brezillon <boris.brezillon@free-electrons.com> - 2015-12-08 09:20 +0100
  [PATCH 23/23] mtd: kill the nand_ecclayout struct Boris Brezillon <boris.brezillon@free-electrons.com> - 2015-12-07 23:30 +0100
  [PATCH 12/23] mtd: use mtd_eccpos() and mtd_oobfree() where appropriate Boris Brezillon <boris.brezillon@free-electrons.com> - 2015-12-07 23:30 +0100
    Re: [PATCH 12/23] mtd: use mtd_eccpos() and mtd_oobfree() where  appropriate kbuild test robot <lkp@intel.com> - 2015-12-08 00:40 +0100
  [PATCH 11/23] mtd: add mtd_eccpos(), mtd_oobfree() and mtd_eccbytes() helper functions Boris Brezillon <boris.brezillon@free-electrons.com> - 2015-12-07 23:30 +0100
  [PATCH 22/23] mtd: nand: kill layout field Boris Brezillon <boris.brezillon@free-electrons.com> - 2015-12-07 23:30 +0100
  [PATCH 18/23] mtd: nand: bch: switch to nand_ecclayout_pos Boris Brezillon <boris.brezillon@free-electrons.com> - 2015-12-07 23:30 +0100
  [PATCH 07/23] staging: mt29f_spinand: kill unused ecclayout field Boris Brezillon <boris.brezillon@free-electrons.com> - 2015-12-07 23:30 +0100
  [PATCH 09/23] mtd: nand: vf610: remove useless mtd->ecclayout assignment Boris Brezillon <boris.brezillon@free-electrons.com> - 2015-12-07 23:30 +0100
    Re: [PATCH 09/23] mtd: nand: vf610: remove useless mtd->ecclayout  assignment Stefan Agner <stefan@agner.ch> - 2015-12-07 23:50 +0100
  [PATCH 10/23] mtd: nand: simplify nand_bch_init() usage Boris Brezillon <boris.brezillon@free-electrons.com> - 2015-12-07 23:40 +0100
  [PATCH 17/23] mtd: nand: implement the default mtd_ooblayout_ops Boris Brezillon <boris.brezillon@free-electrons.com> - 2015-12-07 23:40 +0100
  [PATCH 06/23] mtd: nand: kill unused ->ecclayout field in platform_nand_chip struct Boris Brezillon <boris.brezillon@free-electrons.com> - 2015-12-07 23:40 +0100
  [PATCH 08/23] mtd: nand: lpc32xx_mlc: fix ecc.size Boris Brezillon <boris.brezillon@free-electrons.com> - 2015-12-07 23:40 +0100
  [PATCH 05/23] mtd: nand: jz4770: kill the ->ecc_layout field Boris Brezillon <boris.brezillon@free-electrons.com> - 2015-12-07 23:40 +0100
    Re: [PATCH 05/23] mtd: nand: jz4770: kill the ->ecc_layout field Harvey Hunt <harvey.hunt@imgtec.com> - 2015-12-08 11:40 +0100
      Re: [PATCH 05/23] mtd: nand: jz4770: kill the ->ecc_layout field Boris Brezillon <boris.brezillon@free-electrons.com> - 2015-12-08 11:40 +0100
  [PATCH 04/23] mtd: nand: s3c2410: kill the ->ecc_layout field Boris Brezillon <boris.brezillon@free-electrons.com> - 2015-12-07 23:40 +0100
    Re: [PATCH 04/23] mtd: nand: s3c2410: kill the ->ecc_layout field Krzysztof Kozlowski <k.kozlowski@samsung.com> - 2015-12-08 01:40 +0100
  [PATCH 13/23] mtd: add mtd_set_ecclayout() helper function Boris Brezillon <boris.brezillon@free-electrons.com> - 2015-12-07 23:40 +0100
  [PATCH 02/23] mtd: inftl: kill unused oobinfo field Boris Brezillon <boris.brezillon@free-electrons.com> - 2015-12-07 23:40 +0100
  [PATCH 16/23] mtd: docg3: switch to mtd_ooblayout_ops Boris Brezillon <boris.brezillon@free-electrons.com> - 2015-12-07 23:40 +0100
  [PATCH 14/23] mtd: use mtd_set_ecclayout() where appropriate Boris Brezillon <boris.brezillon@free-electrons.com> - 2015-12-07 23:40 +0100
  Re: [PATCH 19/23] mtd: nand: switch all drivers to mtd_ooblayout_ops Ralf Baechle <ralf@linux-mips.org> - 2015-12-08 11:20 +0100

csiph-web