All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v4 00/10] mtd: nand: rework nand_ecc_ctrl interface for OOB
@ 2012-05-02 17:14 Brian Norris
  2012-05-02 17:14 ` [PATCH v4 01/10] mtd: nand: add 'oob_required' argument to NAND {read, write}_page interfaces Brian Norris
                   ` (10 more replies)
  0 siblings, 11 replies; 19+ messages in thread
From: Brian Norris @ 2012-05-02 17:14 UTC (permalink / raw)
  To: linux-mtd
  Cc: Florian Fainelli, Jamie Iles, Prabhakar Kushwaha, Mike Dunn,
	Kevin Cernekee, eric miao, Axel Lin, Li Yang, Bastian Hecht,
	Mike Frysinger, Lei Wen, Scott Wood, Thomas Gleixner, Bryan Wu,
	Artem Bityutskiy, Wolfram Sang, Matthieu CASTET, Huang Shijie,
	Shmulik Ladkani, Jiandong Zheng, Brian Norris, David Woodhouse

Hello,

This is the fourth version of my patches to change the nand_chip and
nand_ecc_ctrl interfaces so that the nand_ecc_ctrl functions have information
about whether the higher layers actually need OOB data to be read/written
from/to the NAND device.

Changes for v4, somewhat ordered by importance:
 
  Fixup unsafe behavior for Freescale NAND drivers (thanks Scott)

  Rebase on auto-increment fixes (sent separately; not accepted yet). Some of
  the nand_base support I provided was not sound for NAND that used
  auto-increment. But we always had NAND_NO_AUTOINCR set, so I killed the
  option and dropped support for auto-increment, making the nand_base changes
  sound again.

  Rebase on top of Mike Dunn's bitflip threshold patch. There wasn't really any
  conflict; just trivial automerges.

  Applied Ack's, Reviewed-by's

Please refer to previous communications for other info.

I could not compile all the affected drivers, since some required ARCH-specific
builds that I am not familiar with.

Developers: if you care about your driver, please compile test and review to be
sure I'm doing things safely for you.

Note to the maintainers: please do NOT accept any of the patches 3-10 without
an explicit ACK from someone who knows the driver (I included Ack's for 6, 7,
and 8). I think they're simple, but I am not certain. And it is totally safe to
ignore one or several of those patches independently.

Thanks for reviewing!

Brian

Brian Norris (10):
  mtd: nand: add 'oob_required' argument to NAND {read,write}_page
    interfaces
  mtd: nand: pass proper 'oob_required' parameter
  mtd: Blackfin NFC: utilize oob_required parameter
  mtd: cafe_nand: utilize oob_required parameter
  mtd: denali: utilize oob_required parameter
  mtd: eLBC NAND: utilize oob_required parameter
  mtd: IFC NAND: utilize oob_required parameter
  mtd: gpmi-nand: utilize oob_requested parameter
  mtd: nand: utilize oob_required parameter
  mtd: pxa3xx_nand: utilize oob_required parameter

 drivers/mtd/nand/atmel_nand.c          |    5 +-
 drivers/mtd/nand/bcm_umi_bch.c         |   10 +++--
 drivers/mtd/nand/bcm_umi_nand.c        |    2 +-
 drivers/mtd/nand/bf5xx_nand.c          |   10 +++--
 drivers/mtd/nand/cafe_nand.c           |   16 +++++---
 drivers/mtd/nand/denali.c              |   12 +++--
 drivers/mtd/nand/docg4.c               |   12 +++---
 drivers/mtd/nand/fsl_elbc_nand.c       |   14 +++----
 drivers/mtd/nand/fsl_ifc_nand.c        |   13 +++---
 drivers/mtd/nand/fsmc_nand.c           |    3 +-
 drivers/mtd/nand/gpmi-nand/gpmi-nand.c |   41 ++++++++++---------
 drivers/mtd/nand/nand_base.c           |   70 ++++++++++++++++++++------------
 drivers/mtd/nand/pxa3xx_nand.c         |   11 +++--
 drivers/mtd/nand/sh_flctl.c            |    4 +-
 include/linux/mtd/nand.h               |   11 +++--
 15 files changed, 134 insertions(+), 100 deletions(-)

-- 
1.7.5.4.2.g519b1

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH v4 01/10] mtd: nand: add 'oob_required' argument to NAND {read, write}_page interfaces
  2012-05-02 17:14 [PATCH v4 00/10] mtd: nand: rework nand_ecc_ctrl interface for OOB Brian Norris
@ 2012-05-02 17:14 ` Brian Norris
  2012-05-03 17:16   ` Mike Dunn
  2012-05-02 17:14 ` [PATCH v4 02/10] mtd: nand: pass proper 'oob_required' parameter Brian Norris
                   ` (9 subsequent siblings)
  10 siblings, 1 reply; 19+ messages in thread
From: Brian Norris @ 2012-05-02 17:14 UTC (permalink / raw)
  To: linux-mtd
  Cc: Li Yang, Mike Dunn, Prabhakar Kushwaha, Artem Bityutskiy,
	Lei Wen, Kevin Cernekee, Wolfram Sang, Matthieu CASTET,
	Huang Shijie, Shmulik Ladkani, Jiandong Zheng, Florian Fainelli,
	Scott Wood, Jamie Iles, Thomas Gleixner, Brian Norris,
	David Woodhouse, Axel Lin, Bastian Hecht

New NAND controllers can perform read/write via HW engines which don't expose
OOB data in their DMA mode. To reflect this, we should rework the nand_chip /
nand_ecc_ctrl interfaces that assume that drivers will always read/write OOB
data in the nand_chip.oob_poi buffer. A better interface includes a boolean
argument that explicitly tells the callee when OOB data is requested by the
calling layer (for reading/writing to/from nand_chip.oob_poi).

This patch adds the 'oob_required' parameter to each relevant {read,write}_page
interface; all 'oob_required' parameters are left unused for now. The next
patch will set the parameter properly in the nand_base.c callers, and follow-up
patches will make use of 'oob_required' in some of the callee functions.

Note that currently, there is no harm in ignoring the 'oob_required' parameter
and *always* utilizing nand_chip.oob_poi, but there can be
performance/complexity/design benefits from avoiding filling oob_poi in the
common case. I will try to implement this for some drivers which can be ported
easily.

Note: I couldn't compile-test all of these easily, as some had ARCH
dependencies.

Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Reviewed-by: Shmulik Ladkani <shmulik.ladkani@gmail.com>
Acked-by: Jiandong Zheng <jdzheng@broadcom.com>
---
 drivers/mtd/nand/atmel_nand.c          |    5 ++-
 drivers/mtd/nand/bcm_umi_bch.c         |   10 +++--
 drivers/mtd/nand/bcm_umi_nand.c        |    2 +-
 drivers/mtd/nand/bf5xx_nand.c          |    4 +-
 drivers/mtd/nand/cafe_nand.c           |   13 ++++---
 drivers/mtd/nand/denali.c              |    8 ++--
 drivers/mtd/nand/docg4.c               |   12 +++---
 drivers/mtd/nand/fsl_elbc_nand.c       |   11 ++----
 drivers/mtd/nand/fsl_ifc_nand.c        |   10 ++---
 drivers/mtd/nand/fsmc_nand.c           |    3 +-
 drivers/mtd/nand/gpmi-nand/gpmi-nand.c |    8 ++--
 drivers/mtd/nand/nand_base.c           |   56 ++++++++++++++++++++------------
 drivers/mtd/nand/pxa3xx_nand.c         |    5 ++-
 drivers/mtd/nand/sh_flctl.c            |    4 +-
 include/linux/mtd/nand.h               |   11 +++---
 15 files changed, 90 insertions(+), 72 deletions(-)

diff --git a/drivers/mtd/nand/atmel_nand.c b/drivers/mtd/nand/atmel_nand.c
index 9a7876e..97ac671 100644
--- a/drivers/mtd/nand/atmel_nand.c
+++ b/drivers/mtd/nand/atmel_nand.c
@@ -324,9 +324,10 @@ static int atmel_nand_calculate(struct mtd_info *mtd,
  * mtd:        mtd info structure
  * chip:       nand chip info structure
  * buf:        buffer to store read data
+ * oob_required:    caller expects OOB data read to chip->oob_poi
  */
-static int atmel_nand_read_page(struct mtd_info *mtd,
-		struct nand_chip *chip, uint8_t *buf, int page)
+static int atmel_nand_read_page(struct mtd_info *mtd, struct nand_chip *chip,
+				uint8_t *buf, int oob_required, int page)
 {
 	int eccsize = chip->ecc.size;
 	int eccbytes = chip->ecc.bytes;
diff --git a/drivers/mtd/nand/bcm_umi_bch.c b/drivers/mtd/nand/bcm_umi_bch.c
index f8472b4..5914bb3 100644
--- a/drivers/mtd/nand/bcm_umi_bch.c
+++ b/drivers/mtd/nand/bcm_umi_bch.c
@@ -22,9 +22,9 @@
 
 /* ---- Private Function Prototypes -------------------------------------- */
 static int bcm_umi_bch_read_page_hwecc(struct mtd_info *mtd,
-	struct nand_chip *chip, uint8_t *buf, int page);
+	struct nand_chip *chip, uint8_t *buf, int oob_required, int page);
 static void bcm_umi_bch_write_page_hwecc(struct mtd_info *mtd,
-	struct nand_chip *chip, const uint8_t *buf);
+	struct nand_chip *chip, const uint8_t *buf, int oob_required);
 
 /* ---- Private Variables ------------------------------------------------ */
 
@@ -103,11 +103,12 @@ static struct nand_ecclayout nand_hw_eccoob_4096 = {
 *  @mtd:	mtd info structure
 *  @chip:	nand chip info structure
 *  @buf:	buffer to store read data
+*  @oob_required:	caller expects OOB data read to chip->oob_poi
 *
 ***************************************************************************/
 static int bcm_umi_bch_read_page_hwecc(struct mtd_info *mtd,
 				       struct nand_chip *chip, uint8_t * buf,
-						 int page)
+				       int oob_required, int page)
 {
 	int sectorIdx = 0;
 	int eccsize = chip->ecc.size;
@@ -190,10 +191,11 @@ static int bcm_umi_bch_read_page_hwecc(struct mtd_info *mtd,
 *  @mtd:	mtd info structure
 *  @chip:	nand chip info structure
 *  @buf:	data buffer
+*  @oob_required:	must write chip->oob_poi to OOB
 *
 ***************************************************************************/
 static void bcm_umi_bch_write_page_hwecc(struct mtd_info *mtd,
-	struct nand_chip *chip, const uint8_t *buf)
+	struct nand_chip *chip, const uint8_t *buf, int oob_required)
 {
 	int sectorIdx = 0;
 	int eccsize = chip->ecc.size;
diff --git a/drivers/mtd/nand/bcm_umi_nand.c b/drivers/mtd/nand/bcm_umi_nand.c
index 7134adf..c6d691a 100644
--- a/drivers/mtd/nand/bcm_umi_nand.c
+++ b/drivers/mtd/nand/bcm_umi_nand.c
@@ -341,7 +341,7 @@ static int bcm_umi_nand_verify_buf(struct mtd_info *mtd, const u_char * buf,
 	 * for MLC parts which may have permanently stuck bits.
 	 */
 	struct nand_chip *chip = mtd->priv;
-	int ret = chip->ecc.read_page(mtd, chip, readbackbuf, 0);
+	int ret = chip->ecc.read_page(mtd, chip, readbackbuf, false, 0);
 	if (ret < 0)
 		return -EFAULT;
 	else {
diff --git a/drivers/mtd/nand/bf5xx_nand.c b/drivers/mtd/nand/bf5xx_nand.c
index d7b86b9..3f1c185 100644
--- a/drivers/mtd/nand/bf5xx_nand.c
+++ b/drivers/mtd/nand/bf5xx_nand.c
@@ -558,7 +558,7 @@ static void bf5xx_nand_dma_write_buf(struct mtd_info *mtd,
 }
 
 static int bf5xx_nand_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
-		uint8_t *buf, int page)
+		uint8_t *buf, int oob_required, int page)
 {
 	bf5xx_nand_read_buf(mtd, buf, mtd->writesize);
 	bf5xx_nand_read_buf(mtd, chip->oob_poi, mtd->oobsize);
@@ -567,7 +567,7 @@ static int bf5xx_nand_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip
 }
 
 static void bf5xx_nand_write_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
-		const uint8_t *buf)
+		const uint8_t *buf, int oob_required)
 {
 	bf5xx_nand_write_buf(mtd, buf, mtd->writesize);
 	bf5xx_nand_write_buf(mtd, chip->oob_poi, mtd->oobsize);
diff --git a/drivers/mtd/nand/cafe_nand.c b/drivers/mtd/nand/cafe_nand.c
index 75fb77b..3a6c88d 100644
--- a/drivers/mtd/nand/cafe_nand.c
+++ b/drivers/mtd/nand/cafe_nand.c
@@ -375,12 +375,13 @@ static int cafe_nand_read_oob(struct mtd_info *mtd, struct nand_chip *chip,
  * @mtd:	mtd info structure
  * @chip:	nand chip info structure
  * @buf:	buffer to store read data
+ * @oob_required:	caller expects OOB data read to chip->oob_poi
  *
  * The hw generator calculates the error syndrome automatically. Therefor
  * we need a special oob layout and handling.
  */
 static int cafe_nand_read_page(struct mtd_info *mtd, struct nand_chip *chip,
-			       uint8_t *buf, int page)
+			       uint8_t *buf, int oob_required, int page)
 {
 	struct cafe_priv *cafe = mtd->priv;
 	unsigned int max_bitflips = 0;
@@ -520,7 +521,8 @@ static struct nand_bbt_descr cafe_bbt_mirror_descr_512 = {
 
 
 static void cafe_nand_write_page_lowlevel(struct mtd_info *mtd,
-					  struct nand_chip *chip, const uint8_t *buf)
+					  struct nand_chip *chip,
+					  const uint8_t *buf, int oob_required)
 {
 	struct cafe_priv *cafe = mtd->priv;
 
@@ -532,16 +534,17 @@ static void cafe_nand_write_page_lowlevel(struct mtd_info *mtd,
 }
 
 static int cafe_nand_write_page(struct mtd_info *mtd, struct nand_chip *chip,
-				const uint8_t *buf, int page, int cached, int raw)
+				const uint8_t *buf, int oob_required, int page,
+				int cached, int raw)
 {
 	int status;
 
 	chip->cmdfunc(mtd, NAND_CMD_SEQIN, 0x00, page);
 
 	if (unlikely(raw))
-		chip->ecc.write_page_raw(mtd, chip, buf);
+		chip->ecc.write_page_raw(mtd, chip, buf, oob_required);
 	else
-		chip->ecc.write_page(mtd, chip, buf);
+		chip->ecc.write_page(mtd, chip, buf, oob_required);
 
 	/*
 	 * Cached progamming disabled for now, Not sure if its worth the
diff --git a/drivers/mtd/nand/denali.c b/drivers/mtd/nand/denali.c
index 1b34647..a54c186 100644
--- a/drivers/mtd/nand/denali.c
+++ b/drivers/mtd/nand/denali.c
@@ -1087,7 +1087,7 @@ static void write_page(struct mtd_info *mtd, struct nand_chip *chip,
  * by write_page above.
  * */
 static void denali_write_page(struct mtd_info *mtd, struct nand_chip *chip,
-				const uint8_t *buf)
+				const uint8_t *buf, int oob_required)
 {
 	/* for regular page writes, we let HW handle all the ECC
 	 * data written to the device. */
@@ -1099,7 +1099,7 @@ static void denali_write_page(struct mtd_info *mtd, struct nand_chip *chip,
  * write_page() function above.
  */
 static void denali_write_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
-					const uint8_t *buf)
+					const uint8_t *buf, int oob_required)
 {
 	/* for raw page writes, we want to disable ECC and simply write
 	   whatever data is in the buffer. */
@@ -1122,7 +1122,7 @@ static int denali_read_oob(struct mtd_info *mtd, struct nand_chip *chip,
 }
 
 static int denali_read_page(struct mtd_info *mtd, struct nand_chip *chip,
-			    uint8_t *buf, int page)
+			    uint8_t *buf, int oob_required, int page)
 {
 	unsigned int max_bitflips;
 	struct denali_nand_info *denali = mtd_to_denali(mtd);
@@ -1175,7 +1175,7 @@ static int denali_read_page(struct mtd_info *mtd, struct nand_chip *chip,
 }
 
 static int denali_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
-				uint8_t *buf, int page)
+				uint8_t *buf, int oob_required, int page)
 {
 	struct denali_nand_info *denali = mtd_to_denali(mtd);
 
diff --git a/drivers/mtd/nand/docg4.c b/drivers/mtd/nand/docg4.c
index 1540de2..16221b2 100644
--- a/drivers/mtd/nand/docg4.c
+++ b/drivers/mtd/nand/docg4.c
@@ -787,13 +787,13 @@ static int read_page(struct mtd_info *mtd, struct nand_chip *nand,
 
 
 static int docg4_read_page_raw(struct mtd_info *mtd, struct nand_chip *nand,
-			       uint8_t *buf, int page)
+			       uint8_t *buf, int oob_required, int page)
 {
 	return read_page(mtd, nand, buf, page, false);
 }
 
 static int docg4_read_page(struct mtd_info *mtd, struct nand_chip *nand,
-			   uint8_t *buf, int page)
+			   uint8_t *buf, int oob_required, int page)
 {
 	return read_page(mtd, nand, buf, page, true);
 }
@@ -953,13 +953,13 @@ static void write_page(struct mtd_info *mtd, struct nand_chip *nand,
 }
 
 static void docg4_write_page_raw(struct mtd_info *mtd, struct nand_chip *nand,
-				 const uint8_t *buf)
+				 const uint8_t *buf, int oob_required)
 {
 	return write_page(mtd, nand, buf, false);
 }
 
 static void docg4_write_page(struct mtd_info *mtd, struct nand_chip *nand,
-			     const uint8_t *buf)
+			     const uint8_t *buf, int oob_required)
 {
 	return write_page(mtd, nand, buf, true);
 }
@@ -1003,7 +1003,7 @@ static int __init read_factory_bbt(struct mtd_info *mtd)
 		return -ENOMEM;
 
 	read_page_prologue(mtd, g4_addr);
-	status = docg4_read_page(mtd, nand, buf, DOCG4_FACTORY_BBT_PAGE);
+	status = docg4_read_page(mtd, nand, buf, false, DOCG4_FACTORY_BBT_PAGE);
 	if (status)
 		goto exit;
 
@@ -1080,7 +1080,7 @@ static int docg4_block_markbad(struct mtd_info *mtd, loff_t ofs)
 
 	/* write first page of block */
 	write_page_prologue(mtd, g4_addr);
-	docg4_write_page(mtd, nand, buf);
+	docg4_write_page(mtd, nand, buf, true);
 	ret = pageprog(mtd);
 	if (!ret)
 		mtd->ecc_stats.badblocks++;
diff --git a/drivers/mtd/nand/fsl_elbc_nand.c b/drivers/mtd/nand/fsl_elbc_nand.c
index 4d99587..11e3401 100644
--- a/drivers/mtd/nand/fsl_elbc_nand.c
+++ b/drivers/mtd/nand/fsl_elbc_nand.c
@@ -746,10 +746,8 @@ static int fsl_elbc_chip_init_tail(struct mtd_info *mtd)
 	return 0;
 }
 
-static int fsl_elbc_read_page(struct mtd_info *mtd,
-                              struct nand_chip *chip,
-			      uint8_t *buf,
-			      int page)
+static int fsl_elbc_read_page(struct mtd_info *mtd, struct nand_chip *chip,
+			      uint8_t *buf, int oob_required, int page)
 {
 	struct fsl_elbc_mtd *priv = chip->priv;
 	struct fsl_lbc_ctrl *ctrl = priv->ctrl;
@@ -767,9 +765,8 @@ static int fsl_elbc_read_page(struct mtd_info *mtd,
 /* ECC will be calculated automatically, and errors will be detected in
  * waitfunc.
  */
-static void fsl_elbc_write_page(struct mtd_info *mtd,
-                                struct nand_chip *chip,
-                                const uint8_t *buf)
+static void fsl_elbc_write_page(struct mtd_info *mtd, struct nand_chip *chip,
+				const uint8_t *buf, int oob_required)
 {
 	fsl_elbc_write_buf(mtd, buf, mtd->writesize);
 	fsl_elbc_write_buf(mtd, chip->oob_poi, mtd->oobsize);
diff --git a/drivers/mtd/nand/fsl_ifc_nand.c b/drivers/mtd/nand/fsl_ifc_nand.c
index dffd2fa..c085df3 100644
--- a/drivers/mtd/nand/fsl_ifc_nand.c
+++ b/drivers/mtd/nand/fsl_ifc_nand.c
@@ -698,9 +698,8 @@ static int fsl_ifc_wait(struct mtd_info *mtd, struct nand_chip *chip)
 	return nand_fsr | NAND_STATUS_WP;
 }
 
-static int fsl_ifc_read_page(struct mtd_info *mtd,
-			      struct nand_chip *chip,
-			      uint8_t *buf, int page)
+static int fsl_ifc_read_page(struct mtd_info *mtd, struct nand_chip *chip,
+			     uint8_t *buf, int oob_required, int page)
 {
 	struct fsl_ifc_mtd *priv = chip->priv;
 	struct fsl_ifc_ctrl *ctrl = priv->ctrl;
@@ -721,9 +720,8 @@ static int fsl_ifc_read_page(struct mtd_info *mtd,
 /* ECC will be calculated automatically, and errors will be detected in
  * waitfunc.
  */
-static void fsl_ifc_write_page(struct mtd_info *mtd,
-				struct nand_chip *chip,
-				const uint8_t *buf)
+static void fsl_ifc_write_page(struct mtd_info *mtd, struct nand_chip *chip,
+			       const uint8_t *buf, int oob_required)
 {
 	fsl_ifc_write_buf(mtd, buf, mtd->writesize);
 	fsl_ifc_write_buf(mtd, chip->oob_poi, mtd->oobsize);
diff --git a/drivers/mtd/nand/fsmc_nand.c b/drivers/mtd/nand/fsmc_nand.c
index 6bf59fd..38d2624 100644
--- a/drivers/mtd/nand/fsmc_nand.c
+++ b/drivers/mtd/nand/fsmc_nand.c
@@ -692,6 +692,7 @@ static void fsmc_write_buf_dma(struct mtd_info *mtd, const uint8_t *buf,
  * @mtd:	mtd info structure
  * @chip:	nand chip info structure
  * @buf:	buffer to store read data
+ * @oob_required:	caller expects OOB data read to chip->oob_poi
  * @page:	page number to read
  *
  * This routine is needed for fsmc version 8 as reading from NAND chip has to be
@@ -701,7 +702,7 @@ static void fsmc_write_buf_dma(struct mtd_info *mtd, const uint8_t *buf,
  * max of 8 bits)
  */
 static int fsmc_read_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
-				 uint8_t *buf, int page)
+				 uint8_t *buf, int oob_required, int page)
 {
 	struct fsmc_nand_data *host = container_of(mtd,
 					struct fsmc_nand_data, mtd);
diff --git a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c
index 75b1dde..ec16f2e 100644
--- a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c
+++ b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c
@@ -841,7 +841,7 @@ static void block_mark_swapping(struct gpmi_nand_data *this,
 }
 
 static int gpmi_ecc_read_page(struct mtd_info *mtd, struct nand_chip *chip,
-				uint8_t *buf, int page)
+				uint8_t *buf, int oob_required, int page)
 {
 	struct gpmi_nand_data *this = chip->priv;
 	struct bch_geometry *nfc_geo = &this->bch_geometry;
@@ -927,8 +927,8 @@ exit_nfc:
 	return ret;
 }
 
-static void gpmi_ecc_write_page(struct mtd_info *mtd,
-				struct nand_chip *chip, const uint8_t *buf)
+static void gpmi_ecc_write_page(struct mtd_info *mtd, struct nand_chip *chip,
+				const uint8_t *buf, int oob_required)
 {
 	struct gpmi_nand_data *this = chip->priv;
 	struct bch_geometry *nfc_geo = &this->bch_geometry;
@@ -1308,7 +1308,7 @@ static int mx23_write_transcription_stamp(struct gpmi_nand_data *this)
 		/* Write the first page of the current stride. */
 		dev_dbg(dev, "Writing an NCB fingerprint in page 0x%x\n", page);
 		chip->cmdfunc(mtd, NAND_CMD_SEQIN, 0x00, page);
-		chip->ecc.write_page_raw(mtd, chip, buffer);
+		chip->ecc.write_page_raw(mtd, chip, buffer, false);
 		chip->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1);
 
 		/* Wait for the write to finish. */
diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
index 5ec4d2c..6d4894a 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
@@ -1066,12 +1066,13 @@ EXPORT_SYMBOL(nand_lock);
  * @mtd: mtd info structure
  * @chip: nand chip info structure
  * @buf: buffer to store read data
+ * @oob_required: caller requires OOB data read to chip->oob_poi
  * @page: page number to read
  *
  * Not for syndrome calculating ECC controllers, which use a special oob layout.
  */
 static int nand_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
-			      uint8_t *buf, int page)
+			      uint8_t *buf, int oob_required, int page)
 {
 	chip->read_buf(mtd, buf, mtd->writesize);
 	chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
@@ -1083,13 +1084,14 @@ static int nand_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
  * @mtd: mtd info structure
  * @chip: nand chip info structure
  * @buf: buffer to store read data
+ * @oob_required: caller requires OOB data read to chip->oob_poi
  * @page: page number to read
  *
  * We need a special oob layout and handling even when OOB isn't used.
  */
 static int nand_read_page_raw_syndrome(struct mtd_info *mtd,
-					struct nand_chip *chip,
-					uint8_t *buf, int page)
+				       struct nand_chip *chip, uint8_t *buf,
+				       int oob_required, int page)
 {
 	int eccsize = chip->ecc.size;
 	int eccbytes = chip->ecc.bytes;
@@ -1126,10 +1128,11 @@ static int nand_read_page_raw_syndrome(struct mtd_info *mtd,
  * @mtd: mtd info structure
  * @chip: nand chip info structure
  * @buf: buffer to store read data
+ * @oob_required: caller requires OOB data read to chip->oob_poi
  * @page: page number to read
  */
 static int nand_read_page_swecc(struct mtd_info *mtd, struct nand_chip *chip,
-				uint8_t *buf, int page)
+				uint8_t *buf, int oob_required, int page)
 {
 	int i, eccsize = chip->ecc.size;
 	int eccbytes = chip->ecc.bytes;
@@ -1140,7 +1143,7 @@ static int nand_read_page_swecc(struct mtd_info *mtd, struct nand_chip *chip,
 	uint32_t *eccpos = chip->ecc.layout->eccpos;
 	unsigned int max_bitflips = 0;
 
-	chip->ecc.read_page_raw(mtd, chip, buf, page);
+	chip->ecc.read_page_raw(mtd, chip, buf, 1, page);
 
 	for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize)
 		chip->ecc.calculate(mtd, p, &ecc_calc[i]);
@@ -1263,12 +1266,13 @@ static int nand_read_subpage(struct mtd_info *mtd, struct nand_chip *chip,
  * @mtd: mtd info structure
  * @chip: nand chip info structure
  * @buf: buffer to store read data
+ * @oob_required: caller requires OOB data read to chip->oob_poi
  * @page: page number to read
  *
  * Not for syndrome calculating ECC controllers which need a special oob layout.
  */
 static int nand_read_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
-				uint8_t *buf, int page)
+				uint8_t *buf, int oob_required, int page)
 {
 	int i, eccsize = chip->ecc.size;
 	int eccbytes = chip->ecc.bytes;
@@ -1311,6 +1315,7 @@ static int nand_read_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
  * @mtd: mtd info structure
  * @chip: nand chip info structure
  * @buf: buffer to store read data
+ * @oob_required: caller requires OOB data read to chip->oob_poi
  * @page: page number to read
  *
  * Hardware ECC for large page chips, require OOB to be read first. For this
@@ -1320,7 +1325,7 @@ static int nand_read_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
  * the data area, by overwriting the NAND manufacturer bad block markings.
  */
 static int nand_read_page_hwecc_oob_first(struct mtd_info *mtd,
-	struct nand_chip *chip, uint8_t *buf, int page)
+	struct nand_chip *chip, uint8_t *buf, int oob_required, int page)
 {
 	int i, eccsize = chip->ecc.size;
 	int eccbytes = chip->ecc.bytes;
@@ -1362,13 +1367,14 @@ static int nand_read_page_hwecc_oob_first(struct mtd_info *mtd,
  * @mtd: mtd info structure
  * @chip: nand chip info structure
  * @buf: buffer to store read data
+ * @oob_required: caller requires OOB data read to chip->oob_poi
  * @page: page number to read
  *
  * The hw generator calculates the error syndrome automatically. Therefore we
  * need a special oob layout and handling.
  */
 static int nand_read_page_syndrome(struct mtd_info *mtd, struct nand_chip *chip,
-				   uint8_t *buf, int page)
+				   uint8_t *buf, int oob_required, int page)
 {
 	int i, eccsize = chip->ecc.size;
 	int eccbytes = chip->ecc.bytes;
@@ -1514,14 +1520,14 @@ static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
 			 * the read methods return max bitflips per ecc step.
 			 */
 			if (unlikely(ops->mode == MTD_OPS_RAW))
-				ret = chip->ecc.read_page_raw(mtd, chip,
-							      bufpoi, page);
+				ret = chip->ecc.read_page_raw(mtd, chip, bufpoi,
+							      1, page);
 			else if (!aligned && NAND_SUBPAGE_READ(chip) && !oob)
 				ret = chip->ecc.read_subpage(mtd, chip,
 							col, bytes, bufpoi);
 			else
 				ret = chip->ecc.read_page(mtd, chip, bufpoi,
-							  page);
+							  1, page);
 			if (ret < 0) {
 				if (!aligned)
 					/* Invalidate page cache */
@@ -1913,11 +1919,12 @@ out:
  * @mtd: mtd info structure
  * @chip: nand chip info structure
  * @buf: data buffer
+ * @oob_required: must write chip->oob_poi to OOB
  *
  * Not for syndrome calculating ECC controllers, which use a special oob layout.
  */
 static void nand_write_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
-				const uint8_t *buf)
+				const uint8_t *buf, int oob_required)
 {
 	chip->write_buf(mtd, buf, mtd->writesize);
 	chip->write_buf(mtd, chip->oob_poi, mtd->oobsize);
@@ -1928,12 +1935,13 @@ static void nand_write_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
  * @mtd: mtd info structure
  * @chip: nand chip info structure
  * @buf: data buffer
+ * @oob_required: must write chip->oob_poi to OOB
  *
  * We need a special oob layout and handling even when ECC isn't checked.
  */
 static void nand_write_page_raw_syndrome(struct mtd_info *mtd,
 					struct nand_chip *chip,
-					const uint8_t *buf)
+					const uint8_t *buf, int oob_required)
 {
 	int eccsize = chip->ecc.size;
 	int eccbytes = chip->ecc.bytes;
@@ -1967,9 +1975,10 @@ static void nand_write_page_raw_syndrome(struct mtd_info *mtd,
  * @mtd: mtd info structure
  * @chip: nand chip info structure
  * @buf: data buffer
+ * @oob_required: must write chip->oob_poi to OOB
  */
 static void nand_write_page_swecc(struct mtd_info *mtd, struct nand_chip *chip,
-				  const uint8_t *buf)
+				  const uint8_t *buf, int oob_required)
 {
 	int i, eccsize = chip->ecc.size;
 	int eccbytes = chip->ecc.bytes;
@@ -1985,7 +1994,7 @@ static void nand_write_page_swecc(struct mtd_info *mtd, struct nand_chip *chip,
 	for (i = 0; i < chip->ecc.total; i++)
 		chip->oob_poi[eccpos[i]] = ecc_calc[i];
 
-	chip->ecc.write_page_raw(mtd, chip, buf);
+	chip->ecc.write_page_raw(mtd, chip, buf, 1);
 }
 
 /**
@@ -1993,9 +2002,10 @@ static void nand_write_page_swecc(struct mtd_info *mtd, struct nand_chip *chip,
  * @mtd: mtd info structure
  * @chip: nand chip info structure
  * @buf: data buffer
+ * @oob_required: must write chip->oob_poi to OOB
  */
 static void nand_write_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
-				  const uint8_t *buf)
+				  const uint8_t *buf, int oob_required)
 {
 	int i, eccsize = chip->ecc.size;
 	int eccbytes = chip->ecc.bytes;
@@ -2021,12 +2031,14 @@ static void nand_write_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
  * @mtd: mtd info structure
  * @chip: nand chip info structure
  * @buf: data buffer
+ * @oob_required: must write chip->oob_poi to OOB
  *
  * The hw generator calculates the error syndrome automatically. Therefore we
  * need a special oob layout and handling.
  */
 static void nand_write_page_syndrome(struct mtd_info *mtd,
-				    struct nand_chip *chip, const uint8_t *buf)
+				    struct nand_chip *chip,
+				    const uint8_t *buf, int oob_required)
 {
 	int i, eccsize = chip->ecc.size;
 	int eccbytes = chip->ecc.bytes;
@@ -2065,21 +2077,23 @@ static void nand_write_page_syndrome(struct mtd_info *mtd,
  * @mtd: MTD device structure
  * @chip: NAND chip descriptor
  * @buf: the data to write
+ * @oob_required: must write chip->oob_poi to OOB
  * @page: page number to write
  * @cached: cached programming
  * @raw: use _raw version of write_page
  */
 static int nand_write_page(struct mtd_info *mtd, struct nand_chip *chip,
-			   const uint8_t *buf, int page, int cached, int raw)
+			   const uint8_t *buf, int oob_required, int page,
+			   int cached, int raw)
 {
 	int status;
 
 	chip->cmdfunc(mtd, NAND_CMD_SEQIN, 0x00, page);
 
 	if (unlikely(raw))
-		chip->ecc.write_page_raw(mtd, chip, buf);
+		chip->ecc.write_page_raw(mtd, chip, buf, oob_required);
 	else
-		chip->ecc.write_page(mtd, chip, buf);
+		chip->ecc.write_page(mtd, chip, buf, oob_required);
 
 	/*
 	 * Cached progamming disabled for now. Not sure if it's worth the
@@ -2261,7 +2275,7 @@ static int nand_do_write_ops(struct mtd_info *mtd, loff_t to,
 			memset(chip->oob_poi, 0xff, mtd->oobsize);
 		}
 
-		ret = chip->write_page(mtd, chip, wbuf, page, cached,
+		ret = chip->write_page(mtd, chip, wbuf, 1, page, cached,
 				       (ops->mode == MTD_OPS_RAW));
 		if (ret)
 			break;
diff --git a/drivers/mtd/nand/pxa3xx_nand.c b/drivers/mtd/nand/pxa3xx_nand.c
index 36a32a0..252aaef 100644
--- a/drivers/mtd/nand/pxa3xx_nand.c
+++ b/drivers/mtd/nand/pxa3xx_nand.c
@@ -682,14 +682,15 @@ static void pxa3xx_nand_cmdfunc(struct mtd_info *mtd, unsigned command,
 }
 
 static void pxa3xx_nand_write_page_hwecc(struct mtd_info *mtd,
-		struct nand_chip *chip, const uint8_t *buf)
+		struct nand_chip *chip, const uint8_t *buf, int oob_required)
 {
 	chip->write_buf(mtd, buf, mtd->writesize);
 	chip->write_buf(mtd, chip->oob_poi, mtd->oobsize);
 }
 
 static int pxa3xx_nand_read_page_hwecc(struct mtd_info *mtd,
-		struct nand_chip *chip, uint8_t *buf, int page)
+		struct nand_chip *chip, uint8_t *buf, int oob_required,
+		int page)
 {
 	struct pxa3xx_nand_host *host = mtd->priv;
 	struct pxa3xx_nand_info *info = host->info_data;
diff --git a/drivers/mtd/nand/sh_flctl.c b/drivers/mtd/nand/sh_flctl.c
index 3f0788f..aa9b8a5 100644
--- a/drivers/mtd/nand/sh_flctl.c
+++ b/drivers/mtd/nand/sh_flctl.c
@@ -344,7 +344,7 @@ static void set_cmd_regs(struct mtd_info *mtd, uint32_t cmd, uint32_t flcmcdr_va
 }
 
 static int flctl_read_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
-				uint8_t *buf, int page)
+				uint8_t *buf, int oob_required, int page)
 {
 	int i, eccsize = chip->ecc.size;
 	int eccbytes = chip->ecc.bytes;
@@ -366,7 +366,7 @@ static int flctl_read_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
 }
 
 static void flctl_write_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
-				   const uint8_t *buf)
+				   const uint8_t *buf, int oob_required)
 {
 	int i, eccsize = chip->ecc.size;
 	int eccbytes = chip->ecc.bytes;
diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h
index 627f0c5..adb80b5 100644
--- a/include/linux/mtd/nand.h
+++ b/include/linux/mtd/nand.h
@@ -360,15 +360,15 @@ struct nand_ecc_ctrl {
 	int (*correct)(struct mtd_info *mtd, uint8_t *dat, uint8_t *read_ecc,
 			uint8_t *calc_ecc);
 	int (*read_page_raw)(struct mtd_info *mtd, struct nand_chip *chip,
-			uint8_t *buf, int page);
+			uint8_t *buf, int oob_required, int page);
 	void (*write_page_raw)(struct mtd_info *mtd, struct nand_chip *chip,
-			const uint8_t *buf);
+			const uint8_t *buf, int oob_required);
 	int (*read_page)(struct mtd_info *mtd, struct nand_chip *chip,
-			uint8_t *buf, int page);
+			uint8_t *buf, int oob_required, int page);
 	int (*read_subpage)(struct mtd_info *mtd, struct nand_chip *chip,
 			uint32_t offs, uint32_t len, uint8_t *buf);
 	void (*write_page)(struct mtd_info *mtd, struct nand_chip *chip,
-			const uint8_t *buf);
+			const uint8_t *buf, int oob_required);
 	int (*write_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip,
 			int page);
 	int (*read_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip,
@@ -504,7 +504,8 @@ struct nand_chip {
 	int (*errstat)(struct mtd_info *mtd, struct nand_chip *this, int state,
 			int status, int page);
 	int (*write_page)(struct mtd_info *mtd, struct nand_chip *chip,
-			const uint8_t *buf, int page, int cached, int raw);
+			const uint8_t *buf, int oob_required, int page,
+			int cached, int raw);
 
 	int chip_delay;
 	unsigned int options;
-- 
1.7.5.4.2.g519b1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v4 02/10] mtd: nand: pass proper 'oob_required' parameter
  2012-05-02 17:14 [PATCH v4 00/10] mtd: nand: rework nand_ecc_ctrl interface for OOB Brian Norris
  2012-05-02 17:14 ` [PATCH v4 01/10] mtd: nand: add 'oob_required' argument to NAND {read, write}_page interfaces Brian Norris
@ 2012-05-02 17:14 ` Brian Norris
  2012-05-02 17:14 ` [PATCH v4 03/10] mtd: Blackfin NFC: utilize oob_required parameter Brian Norris
                   ` (8 subsequent siblings)
  10 siblings, 0 replies; 19+ messages in thread
From: Brian Norris @ 2012-05-02 17:14 UTC (permalink / raw)
  To: linux-mtd
  Cc: Li Yang, Mike Dunn, Prabhakar Kushwaha, Artem Bityutskiy,
	Lei Wen, Kevin Cernekee, Wolfram Sang, Matthieu CASTET,
	Huang Shijie, Shmulik Ladkani, Jiandong Zheng, Florian Fainelli,
	Scott Wood, Jamie Iles, Thomas Gleixner, Brian Norris,
	David Woodhouse, Axel Lin, Bastian Hecht

We now have an interface for notifying the nand_ecc_ctrl functions when OOB
data must be returned to the upper layers and when it may be left untouched.
This patch fills in the 'oob_required' parameter properly from
nand_do_{read,write}_ops. When utilized properly in the lower layers, this
parameter can improve performance and/or reduce complexity for NAND HW and SW
that can simply avoid transferring the OOB data.

Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Reviewed-by: Shmulik Ladkani <shmulik.ladkani@gmail.com>
Acked-by: Jiandong Zheng <jdzheng@broadcom.com>
---
 drivers/mtd/nand/nand_base.c |   14 ++++++++------
 1 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
index 6d4894a..464b742 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
@@ -1480,7 +1480,7 @@ static uint8_t *nand_transfer_oob(struct nand_chip *chip, uint8_t *oob,
 static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
 			    struct mtd_oob_ops *ops)
 {
-	int chipnr, page, realpage, col, bytes, aligned;
+	int chipnr, page, realpage, col, bytes, aligned, oob_required;
 	struct nand_chip *chip = mtd->priv;
 	struct mtd_ecc_stats stats;
 	int ret = 0;
@@ -1504,6 +1504,7 @@ static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
 
 	buf = ops->datbuf;
 	oob = ops->oobbuf;
+	oob_required = oob ? 1 : 0;
 
 	while (1) {
 		bytes = min(mtd->writesize - col, readlen);
@@ -1521,13 +1522,14 @@ static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
 			 */
 			if (unlikely(ops->mode == MTD_OPS_RAW))
 				ret = chip->ecc.read_page_raw(mtd, chip, bufpoi,
-							      1, page);
+							      oob_required,
+							      page);
 			else if (!aligned && NAND_SUBPAGE_READ(chip) && !oob)
 				ret = chip->ecc.read_subpage(mtd, chip,
 							col, bytes, bufpoi);
 			else
 				ret = chip->ecc.read_page(mtd, chip, bufpoi,
-							  1, page);
+							  oob_required, page);
 			if (ret < 0) {
 				if (!aligned)
 					/* Invalidate page cache */
@@ -1554,7 +1556,6 @@ static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
 			buf += bytes;
 
 			if (unlikely(oob)) {
-
 				int toread = min(oobreadlen, max_oobsize);
 
 				if (toread) {
@@ -2213,6 +2214,7 @@ static int nand_do_write_ops(struct mtd_info *mtd, loff_t to,
 	uint8_t *oob = ops->oobbuf;
 	uint8_t *buf = ops->datbuf;
 	int ret, subpage;
+	int oob_required = oob ? 1 : 0;
 
 	ops->retlen = 0;
 	if (!writelen)
@@ -2275,8 +2277,8 @@ static int nand_do_write_ops(struct mtd_info *mtd, loff_t to,
 			memset(chip->oob_poi, 0xff, mtd->oobsize);
 		}
 
-		ret = chip->write_page(mtd, chip, wbuf, 1, page, cached,
-				       (ops->mode == MTD_OPS_RAW));
+		ret = chip->write_page(mtd, chip, wbuf, oob_required, page,
+				       cached, (ops->mode == MTD_OPS_RAW));
 		if (ret)
 			break;
 
-- 
1.7.5.4.2.g519b1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v4 03/10] mtd: Blackfin NFC: utilize oob_required parameter
  2012-05-02 17:14 [PATCH v4 00/10] mtd: nand: rework nand_ecc_ctrl interface for OOB Brian Norris
  2012-05-02 17:14 ` [PATCH v4 01/10] mtd: nand: add 'oob_required' argument to NAND {read, write}_page interfaces Brian Norris
  2012-05-02 17:14 ` [PATCH v4 02/10] mtd: nand: pass proper 'oob_required' parameter Brian Norris
@ 2012-05-02 17:14 ` Brian Norris
  2012-05-03  9:55   ` Artem Bityutskiy
  2012-05-02 17:14 ` [PATCH v4 04/10] mtd: cafe_nand: " Brian Norris
                   ` (7 subsequent siblings)
  10 siblings, 1 reply; 19+ messages in thread
From: Brian Norris @ 2012-05-02 17:14 UTC (permalink / raw)
  To: linux-mtd
  Cc: Bryan Wu, Mike Dunn, Mike Frysinger, Artem Bityutskiy,
	Jamie Iles, Brian Norris, David Woodhouse

Don't read/write OOB if the caller doesn't require it.

Signed-off-by: Brian Norris <computersforpeace@gmail.com>
---
 drivers/mtd/nand/bf5xx_nand.c |    6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/mtd/nand/bf5xx_nand.c b/drivers/mtd/nand/bf5xx_nand.c
index 3f1c185..8188416 100644
--- a/drivers/mtd/nand/bf5xx_nand.c
+++ b/drivers/mtd/nand/bf5xx_nand.c
@@ -561,7 +561,8 @@ static int bf5xx_nand_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip
 		uint8_t *buf, int oob_required, int page)
 {
 	bf5xx_nand_read_buf(mtd, buf, mtd->writesize);
-	bf5xx_nand_read_buf(mtd, chip->oob_poi, mtd->oobsize);
+	if (oob_required)
+		bf5xx_nand_read_buf(mtd, chip->oob_poi, mtd->oobsize);
 
 	return 0;
 }
@@ -570,7 +571,8 @@ static void bf5xx_nand_write_page_raw(struct mtd_info *mtd, struct nand_chip *ch
 		const uint8_t *buf, int oob_required)
 {
 	bf5xx_nand_write_buf(mtd, buf, mtd->writesize);
-	bf5xx_nand_write_buf(mtd, chip->oob_poi, mtd->oobsize);
+	if (oob_required)
+		bf5xx_nand_write_buf(mtd, chip->oob_poi, mtd->oobsize);
 }
 
 /*
-- 
1.7.5.4.2.g519b1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v4 04/10] mtd: cafe_nand: utilize oob_required parameter
  2012-05-02 17:14 [PATCH v4 00/10] mtd: nand: rework nand_ecc_ctrl interface for OOB Brian Norris
                   ` (2 preceding siblings ...)
  2012-05-02 17:14 ` [PATCH v4 03/10] mtd: Blackfin NFC: utilize oob_required parameter Brian Norris
@ 2012-05-02 17:14 ` Brian Norris
  2012-05-02 17:14 ` [PATCH v4 05/10] mtd: denali: " Brian Norris
                   ` (6 subsequent siblings)
  10 siblings, 0 replies; 19+ messages in thread
From: Brian Norris @ 2012-05-02 17:14 UTC (permalink / raw)
  To: linux-mtd; +Cc: Brian Norris, David Woodhouse, Artem Bityutskiy

Don't write OOB if the caller doesn't require it.

Signed-off-by: Brian Norris <computersforpeace@gmail.com>
---
 drivers/mtd/nand/cafe_nand.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/drivers/mtd/nand/cafe_nand.c b/drivers/mtd/nand/cafe_nand.c
index 3a6c88d..aa9a0df 100644
--- a/drivers/mtd/nand/cafe_nand.c
+++ b/drivers/mtd/nand/cafe_nand.c
@@ -527,7 +527,8 @@ static void cafe_nand_write_page_lowlevel(struct mtd_info *mtd,
 	struct cafe_priv *cafe = mtd->priv;
 
 	chip->write_buf(mtd, buf, mtd->writesize);
-	chip->write_buf(mtd, chip->oob_poi, mtd->oobsize);
+	if (oob_required)
+		chip->write_buf(mtd, chip->oob_poi, mtd->oobsize);
 
 	/* Set up ECC autogeneration */
 	cafe->ctl2 |= (1<<30);
-- 
1.7.5.4.2.g519b1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v4 05/10] mtd: denali: utilize oob_required parameter
  2012-05-02 17:14 [PATCH v4 00/10] mtd: nand: rework nand_ecc_ctrl interface for OOB Brian Norris
                   ` (3 preceding siblings ...)
  2012-05-02 17:14 ` [PATCH v4 04/10] mtd: cafe_nand: " Brian Norris
@ 2012-05-02 17:14 ` Brian Norris
  2012-05-02 17:15 ` [PATCH v4 06/10] mtd: eLBC NAND: " Brian Norris
                   ` (5 subsequent siblings)
  10 siblings, 0 replies; 19+ messages in thread
From: Brian Norris @ 2012-05-02 17:14 UTC (permalink / raw)
  To: linux-mtd
  Cc: Jamie Iles, Axel Lin, Brian Norris, David Woodhouse, Artem Bityutskiy

Don't return OOB if the caller doesn't require it.

Signed-off-by: Brian Norris <computersforpeace@gmail.com>
---
 drivers/mtd/nand/denali.c |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/drivers/mtd/nand/denali.c b/drivers/mtd/nand/denali.c
index a54c186..daa368c 100644
--- a/drivers/mtd/nand/denali.c
+++ b/drivers/mtd/nand/denali.c
@@ -1208,7 +1208,9 @@ static int denali_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
 	denali_enable_dma(denali, false);
 
 	memcpy(buf, denali->buf.buf, mtd->writesize);
-	memcpy(chip->oob_poi, denali->buf.buf + mtd->writesize, mtd->oobsize);
+	if (oob_required)
+		memcpy(chip->oob_poi, denali->buf.buf + mtd->writesize,
+				mtd->oobsize);
 
 	return 0;
 }
-- 
1.7.5.4.2.g519b1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v4 06/10] mtd: eLBC NAND: utilize oob_required parameter
  2012-05-02 17:14 [PATCH v4 00/10] mtd: nand: rework nand_ecc_ctrl interface for OOB Brian Norris
                   ` (4 preceding siblings ...)
  2012-05-02 17:14 ` [PATCH v4 05/10] mtd: denali: " Brian Norris
@ 2012-05-02 17:15 ` Brian Norris
  2012-05-02 17:15 ` [PATCH v4 07/10] mtd: IFC " Brian Norris
                   ` (4 subsequent siblings)
  10 siblings, 0 replies; 19+ messages in thread
From: Brian Norris @ 2012-05-02 17:15 UTC (permalink / raw)
  To: linux-mtd
  Cc: Scott Wood, Brian Norris, David Woodhouse, Li Yang, Artem Bityutskiy

Don't read OOB if the caller doesn't require it.

Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Reviewed-by: Scott Wood <scottwood@freescale.com>
---
 drivers/mtd/nand/fsl_elbc_nand.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/drivers/mtd/nand/fsl_elbc_nand.c b/drivers/mtd/nand/fsl_elbc_nand.c
index 11e3401..7842938 100644
--- a/drivers/mtd/nand/fsl_elbc_nand.c
+++ b/drivers/mtd/nand/fsl_elbc_nand.c
@@ -754,7 +754,8 @@ static int fsl_elbc_read_page(struct mtd_info *mtd, struct nand_chip *chip,
 	struct fsl_elbc_fcm_ctrl *elbc_fcm_ctrl = ctrl->nand;
 
 	fsl_elbc_read_buf(mtd, buf, mtd->writesize);
-	fsl_elbc_read_buf(mtd, chip->oob_poi, mtd->oobsize);
+	if (oob_required)
+		fsl_elbc_read_buf(mtd, chip->oob_poi, mtd->oobsize);
 
 	if (fsl_elbc_wait(mtd, chip) & NAND_STATUS_FAIL)
 		mtd->ecc_stats.failed++;
-- 
1.7.5.4.2.g519b1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v4 07/10] mtd: IFC NAND: utilize oob_required parameter
  2012-05-02 17:14 [PATCH v4 00/10] mtd: nand: rework nand_ecc_ctrl interface for OOB Brian Norris
                   ` (5 preceding siblings ...)
  2012-05-02 17:15 ` [PATCH v4 06/10] mtd: eLBC NAND: " Brian Norris
@ 2012-05-02 17:15 ` Brian Norris
  2012-05-02 17:15 ` [PATCH v4 08/10] mtd: gpmi-nand: utilize oob_requested parameter Brian Norris
                   ` (3 subsequent siblings)
  10 siblings, 0 replies; 19+ messages in thread
From: Brian Norris @ 2012-05-02 17:15 UTC (permalink / raw)
  To: linux-mtd
  Cc: Scott Wood, Brian Norris, David Woodhouse, Li Yang, Artem Bityutskiy

Don't read OOB if the caller doesn't require it.

Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Reviewed-by: Scott Wood <scottwood@freescale.com>
---
 drivers/mtd/nand/fsl_ifc_nand.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/drivers/mtd/nand/fsl_ifc_nand.c b/drivers/mtd/nand/fsl_ifc_nand.c
index c085df3..9602c1b 100644
--- a/drivers/mtd/nand/fsl_ifc_nand.c
+++ b/drivers/mtd/nand/fsl_ifc_nand.c
@@ -706,7 +706,8 @@ static int fsl_ifc_read_page(struct mtd_info *mtd, struct nand_chip *chip,
 	struct fsl_ifc_nand_ctrl *nctrl = ifc_nand_ctrl;
 
 	fsl_ifc_read_buf(mtd, buf, mtd->writesize);
-	fsl_ifc_read_buf(mtd, chip->oob_poi, mtd->oobsize);
+	if (oob_required)
+		fsl_ifc_read_buf(mtd, chip->oob_poi, mtd->oobsize);
 
 	if (ctrl->nand_stat & IFC_NAND_EVTER_STAT_ECCER)
 		dev_err(priv->dev, "NAND Flash ECC Uncorrectable Error\n");
-- 
1.7.5.4.2.g519b1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v4 08/10] mtd: gpmi-nand: utilize oob_requested parameter
  2012-05-02 17:14 [PATCH v4 00/10] mtd: nand: rework nand_ecc_ctrl interface for OOB Brian Norris
                   ` (6 preceding siblings ...)
  2012-05-02 17:15 ` [PATCH v4 07/10] mtd: IFC " Brian Norris
@ 2012-05-02 17:15 ` Brian Norris
  2012-05-02 17:15 ` [PATCH v4 09/10] mtd: nand: utilize oob_required parameter Brian Norris
                   ` (2 subsequent siblings)
  10 siblings, 0 replies; 19+ messages in thread
From: Brian Norris @ 2012-05-02 17:15 UTC (permalink / raw)
  To: linux-mtd
  Cc: Huang Shijie, Brian Norris, David Woodhouse, Wolfram Sang,
	Artem Bityutskiy

Don't read OOB if the caller didn't request it.

Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Acked-by: Huang Shijie <b32955@freescale.com>
---
 drivers/mtd/nand/gpmi-nand/gpmi-nand.c |   35 +++++++++++++++++--------------
 1 files changed, 19 insertions(+), 16 deletions(-)

diff --git a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c
index ec16f2e..805bcf3 100644
--- a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c
+++ b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c
@@ -907,22 +907,25 @@ static int gpmi_ecc_read_page(struct mtd_info *mtd, struct nand_chip *chip,
 		mtd->ecc_stats.corrected += corrected;
 	}
 
-	/*
-	 * It's time to deliver the OOB bytes. See gpmi_ecc_read_oob() for
-	 * details about our policy for delivering the OOB.
-	 *
-	 * We fill the caller's buffer with set bits, and then copy the block
-	 * mark to th caller's buffer. Note that, if block mark swapping was
-	 * necessary, it has already been done, so we can rely on the first
-	 * byte of the auxiliary buffer to contain the block mark.
-	 */
-	memset(chip->oob_poi, ~0, mtd->oobsize);
-	chip->oob_poi[0] = ((uint8_t *) auxiliary_virt)[0];
+	if (oob_required) {
+		/*
+		 * It's time to deliver the OOB bytes. See gpmi_ecc_read_oob()
+		 * for details about our policy for delivering the OOB.
+		 *
+		 * We fill the caller's buffer with set bits, and then copy the
+		 * block mark to th caller's buffer. Note that, if block mark
+		 * swapping was necessary, it has already been done, so we can
+		 * rely on the first byte of the auxiliary buffer to contain
+		 * the block mark.
+		 */
+		memset(chip->oob_poi, ~0, mtd->oobsize);
+		chip->oob_poi[0] = ((uint8_t *) auxiliary_virt)[0];
 
-	read_page_swap_end(this, buf, mtd->writesize,
-			this->payload_virt, this->payload_phys,
-			nfc_geo->payload_size,
-			payload_virt, payload_phys);
+		read_page_swap_end(this, buf, mtd->writesize,
+				this->payload_virt, this->payload_phys,
+				nfc_geo->payload_size,
+				payload_virt, payload_phys);
+	}
 exit_nfc:
 	return ret;
 }
-- 
1.7.5.4.2.g519b1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v4 09/10] mtd: nand: utilize oob_required parameter
  2012-05-02 17:14 [PATCH v4 00/10] mtd: nand: rework nand_ecc_ctrl interface for OOB Brian Norris
                   ` (7 preceding siblings ...)
  2012-05-02 17:15 ` [PATCH v4 08/10] mtd: gpmi-nand: utilize oob_requested parameter Brian Norris
@ 2012-05-02 17:15 ` Brian Norris
  2012-05-02 17:15 ` [PATCH v4 10/10] mtd: pxa3xx_nand: " Brian Norris
  2012-05-03 10:00 ` [PATCH v4 00/10] mtd: nand: rework nand_ecc_ctrl interface for OOB Artem Bityutskiy
  10 siblings, 0 replies; 19+ messages in thread
From: Brian Norris @ 2012-05-02 17:15 UTC (permalink / raw)
  To: linux-mtd
  Cc: Brian Norris, David Woodhouse, Shmulik Ladkani, Artem Bityutskiy

Don't read/write OOB if the caller doesn't require it.

Signed-off-by: Brian Norris <computersforpeace@gmail.com>
---
v4 note: I think this patch is safe after killing autoincrement in
         nand_do_read_ops()

 drivers/mtd/nand/nand_base.c |    6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
index 464b742..14e9b32 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
@@ -1075,7 +1075,8 @@ static int nand_read_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
 			      uint8_t *buf, int oob_required, int page)
 {
 	chip->read_buf(mtd, buf, mtd->writesize);
-	chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
+	if (oob_required)
+		chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
 	return 0;
 }
 
@@ -1928,7 +1929,8 @@ static void nand_write_page_raw(struct mtd_info *mtd, struct nand_chip *chip,
 				const uint8_t *buf, int oob_required)
 {
 	chip->write_buf(mtd, buf, mtd->writesize);
-	chip->write_buf(mtd, chip->oob_poi, mtd->oobsize);
+	if (oob_required)
+		chip->write_buf(mtd, chip->oob_poi, mtd->oobsize);
 }
 
 /**
-- 
1.7.5.4.2.g519b1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v4 10/10] mtd: pxa3xx_nand: utilize oob_required parameter
  2012-05-02 17:14 [PATCH v4 00/10] mtd: nand: rework nand_ecc_ctrl interface for OOB Brian Norris
                   ` (8 preceding siblings ...)
  2012-05-02 17:15 ` [PATCH v4 09/10] mtd: nand: utilize oob_required parameter Brian Norris
@ 2012-05-02 17:15 ` Brian Norris
  2012-05-03 10:00 ` [PATCH v4 00/10] mtd: nand: rework nand_ecc_ctrl interface for OOB Artem Bityutskiy
  10 siblings, 0 replies; 19+ messages in thread
From: Brian Norris @ 2012-05-02 17:15 UTC (permalink / raw)
  To: linux-mtd
  Cc: Lei Wen, eric miao, Brian Norris, David Woodhouse, Artem Bityutskiy

Don't read/write OOB if the caller doesn't require it.

Signed-off-by: Brian Norris <computersforpeace@gmail.com>
---
 drivers/mtd/nand/pxa3xx_nand.c |    6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/mtd/nand/pxa3xx_nand.c b/drivers/mtd/nand/pxa3xx_nand.c
index 252aaef..8ca303a 100644
--- a/drivers/mtd/nand/pxa3xx_nand.c
+++ b/drivers/mtd/nand/pxa3xx_nand.c
@@ -685,7 +685,8 @@ static void pxa3xx_nand_write_page_hwecc(struct mtd_info *mtd,
 		struct nand_chip *chip, const uint8_t *buf, int oob_required)
 {
 	chip->write_buf(mtd, buf, mtd->writesize);
-	chip->write_buf(mtd, chip->oob_poi, mtd->oobsize);
+	if (oob_required)
+		chip->write_buf(mtd, chip->oob_poi, mtd->oobsize);
 }
 
 static int pxa3xx_nand_read_page_hwecc(struct mtd_info *mtd,
@@ -696,7 +697,8 @@ static int pxa3xx_nand_read_page_hwecc(struct mtd_info *mtd,
 	struct pxa3xx_nand_info *info = host->info_data;
 
 	chip->read_buf(mtd, buf, mtd->writesize);
-	chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
+	if (oob_required)
+		chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
 
 	if (info->retcode == ERR_SBERR) {
 		switch (info->use_ecc) {
-- 
1.7.5.4.2.g519b1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* Re: [PATCH v4 03/10] mtd: Blackfin NFC: utilize oob_required parameter
  2012-05-02 17:14 ` [PATCH v4 03/10] mtd: Blackfin NFC: utilize oob_required parameter Brian Norris
@ 2012-05-03  9:55   ` Artem Bityutskiy
  0 siblings, 0 replies; 19+ messages in thread
From: Artem Bityutskiy @ 2012-05-03  9:55 UTC (permalink / raw)
  To: Mike Frysinger, Brian Norris
  Cc: David Woodhouse, Bryan Wu, Mike Dunn, linux-mtd, Jamie Iles

[-- Attachment #1: Type: text/plain, Size: 278 bytes --]

On Wed, 2012-05-02 at 10:14 -0700, Brian Norris wrote:
> Don't read/write OOB if the caller doesn't require it.
> 
> Signed-off-by: Brian Norris <computersforpeace@gmail.com>

Hi Mike, do you prefer me to accept this patch or drop?

-- 
Best Regards,
Artem Bityutskiy

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v4 00/10] mtd: nand: rework nand_ecc_ctrl interface for OOB
  2012-05-02 17:14 [PATCH v4 00/10] mtd: nand: rework nand_ecc_ctrl interface for OOB Brian Norris
                   ` (9 preceding siblings ...)
  2012-05-02 17:15 ` [PATCH v4 10/10] mtd: pxa3xx_nand: " Brian Norris
@ 2012-05-03 10:00 ` Artem Bityutskiy
  2012-05-03 17:11   ` Mike Dunn
  10 siblings, 1 reply; 19+ messages in thread
From: Artem Bityutskiy @ 2012-05-03 10:00 UTC (permalink / raw)
  To: Brian Norris
  Cc: eric miao, Bryan Wu, Mike Dunn, Mike Frysinger,
	Prabhakar Kushwaha, Lei Wen, Kevin Cernekee, Wolfram Sang,
	Matthieu CASTET, Huang Shijie, linux-mtd, Shmulik Ladkani,
	Jiandong Zheng, Florian Fainelli, Scott Wood, Jamie Iles,
	Thomas Gleixner, Li Yang, David Woodhouse, Axel Lin,
	Bastian Hecht

[-- Attachment #1: Type: text/plain, Size: 421 bytes --]

On Wed, 2012-05-02 at 10:14 -0700, Brian Norris wrote:
> Hello,
> 
> This is the fourth version of my patches to change the nand_chip and
> nand_ecc_ctrl interfaces so that the nand_ecc_ctrl functions have information
> about whether the higher layers actually need OOB data to be read/written
> from/to the NAND device.

Pushed patches 1,2,6,7,8,9 to l2-mtd.git, thanks!

-- 
Best Regards,
Artem Bityutskiy

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v4 00/10] mtd: nand: rework nand_ecc_ctrl interface for OOB
  2012-05-03 10:00 ` [PATCH v4 00/10] mtd: nand: rework nand_ecc_ctrl interface for OOB Artem Bityutskiy
@ 2012-05-03 17:11   ` Mike Dunn
  2012-05-04  7:23     ` Artem Bityutskiy
  0 siblings, 1 reply; 19+ messages in thread
From: Mike Dunn @ 2012-05-03 17:11 UTC (permalink / raw)
  To: linux-mtd

On 05/03/2012 03:00 AM, Artem Bityutskiy wrote:
> On Wed, 2012-05-02 at 10:14 -0700, Brian Norris wrote:
>> Hello,
>>
>> This is the fourth version of my patches to change the nand_chip and
>> nand_ecc_ctrl interfaces so that the nand_ecc_ctrl functions have information
>> about whether the higher layers actually need OOB data to be read/written
>> from/to the NAND device.
> 
> Pushed patches 1,2,6,7,8,9 to l2-mtd.git, thanks!
> 


I compile-tested these patches on all arches.  No warnings or errors on the
files that were touched.

Mike

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v4 01/10] mtd: nand: add 'oob_required' argument to NAND {read, write}_page interfaces
  2012-05-02 17:14 ` [PATCH v4 01/10] mtd: nand: add 'oob_required' argument to NAND {read, write}_page interfaces Brian Norris
@ 2012-05-03 17:16   ` Mike Dunn
  2012-05-03 17:43     ` Shmulik Ladkani
  0 siblings, 1 reply; 19+ messages in thread
From: Mike Dunn @ 2012-05-03 17:16 UTC (permalink / raw)
  To: Brian Norris
  Cc: Artem Bityutskiy, Lei Wen, Kevin Cernekee, Bastian Hecht,
	Wolfram Sang, Matthieu CASTET, Huang Shijie, linux-mtd,
	Shmulik Ladkani, Jiandong Zheng, Florian Fainelli, Scott Wood,
	Jamie Iles, Thomas Gleixner, Li Yang, David Woodhouse, Axel Lin,
	Prabhakar Kushwaha

Hi Brian,

I wonder why the new argument type is int instead of bool.  Sorry if this was
already discussed... I didn't follow the earlier discussions very closely.

Still, it seems inconsistent.  When calling the functions, you sometimes pass
the bool form...


> -	status = docg4_read_page(mtd, nand, buf, DOCG4_FACTORY_BBT_PAGE);
> +	status = docg4_read_page(mtd, nand, buf, false, DOCG4_FACTORY_BBT_PAGE);


and sometimes the int form...


> -	chip->ecc.read_page_raw(mtd, chip, buf, page);
> +	chip->ecc.read_page_raw(mtd, chip, buf, 1, page);


I think inconsistency can be confusing.

Aside from that, you can add my Acked-by for the docg4 driver if you like.

Thanks,
Mike

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v4 01/10] mtd: nand: add 'oob_required' argument to NAND {read, write}_page interfaces
  2012-05-03 17:16   ` Mike Dunn
@ 2012-05-03 17:43     ` Shmulik Ladkani
  2012-05-03 22:34       ` Brian Norris
  0 siblings, 1 reply; 19+ messages in thread
From: Shmulik Ladkani @ 2012-05-03 17:43 UTC (permalink / raw)
  To: Mike Dunn
  Cc: Li Yang, Artem Bityutskiy, Lei Wen, Kevin Cernekee, Wolfram Sang,
	Matthieu CASTET, Huang Shijie, linux-mtd, Bastian Hecht,
	Jiandong Zheng, Florian Fainelli, Scott Wood, Jamie Iles,
	Thomas Gleixner, Brian Norris, David Woodhouse, Axel Lin,
	Prabhakar Kushwaha

Hi Mike,

On Thu, 03 May 2012 10:16:53 -0700 Mike Dunn <mikedunn@newsguy.com> wrote:
> I wonder why the new argument type is int instead of bool.  Sorry if this was
> already discussed... I didn't follow the earlier discussions very closely.

Well, Brian's initial post correctly had a 'bool' parameter in the
suggested interface.

I pointed out that within MTD code, 'int' is very widely used to
indicate boolean types, so I suggested changing to 'int' for consistency
with all other MTD interfaces.

> Still, it seems inconsistent.  When calling the functions, you sometimes pass
> the bool form...
> 
> > -	status = docg4_read_page(mtd, nand, buf, DOCG4_FACTORY_BBT_PAGE);
> > +	status = docg4_read_page(mtd, nand, buf, false, DOCG4_FACTORY_BBT_PAGE);
> 
> and sometimes the int form...
> 
> > -	chip->ecc.read_page_raw(mtd, chip, buf, page);
> > +	chip->ecc.read_page_raw(mtd, chip, buf, 1, page);

I guess the 'true/false' arguments are leftovers from Brian's previous
posts...

I noted these while reviewing, and personally don't mind them, but I
guess '0/1' are more appropriate.

Regards,
Shmulik

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v4 01/10] mtd: nand: add 'oob_required' argument to NAND {read, write}_page interfaces
  2012-05-03 17:43     ` Shmulik Ladkani
@ 2012-05-03 22:34       ` Brian Norris
  2012-05-04  7:58         ` Artem Bityutskiy
  0 siblings, 1 reply; 19+ messages in thread
From: Brian Norris @ 2012-05-03 22:34 UTC (permalink / raw)
  To: Shmulik Ladkani
  Cc: Mike Dunn, Artem Bityutskiy, Lei Wen, Kevin Cernekee,
	Wolfram Sang, Matthieu CASTET, Huang Shijie, linux-mtd,
	Bastian Hecht, Jiandong Zheng, Florian Fainelli, Scott Wood,
	Jamie Iles, Thomas Gleixner, Li Yang, David Woodhouse, Axel Lin,
	Prabhakar Kushwaha

Hi Mike and Shmulik,

On Thu, May 3, 2012 at 10:43 AM, Shmulik Ladkani
<shmulik.ladkani@gmail.com> wrote:
>> Still, it seems inconsistent.  When calling the functions, you sometimes pass
>> the bool form...
>>
>> > -   status = docg4_read_page(mtd, nand, buf, DOCG4_FACTORY_BBT_PAGE);
>> > +   status = docg4_read_page(mtd, nand, buf, false, DOCG4_FACTORY_BBT_PAGE);
>>
>> and sometimes the int form...
>>
>> > -   chip->ecc.read_page_raw(mtd, chip, buf, page);
>> > +   chip->ecc.read_page_raw(mtd, chip, buf, 1, page);
>
> I guess the 'true/false' arguments are leftovers from Brian's previous
> posts...

Yes, accidental leftovers.

> I noted these while reviewing, and personally don't mind them, but I
> guess '0/1' are more appropriate.

Yes, these should all be 0/1. It shouldn't be a significant issue,
except for consistency.

Artem: I fixed these up and sent a fixup patch.

[Mike:] "Aside from that, you can add my Acked-by for the docg4 driver
if you like."

The docg4 stuff already went into l2-mtd-2.6.git; Artem can add the
Acked-by as he rebases.

Brian

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v4 00/10] mtd: nand: rework nand_ecc_ctrl interface for OOB
  2012-05-03 17:11   ` Mike Dunn
@ 2012-05-04  7:23     ` Artem Bityutskiy
  0 siblings, 0 replies; 19+ messages in thread
From: Artem Bityutskiy @ 2012-05-04  7:23 UTC (permalink / raw)
  To: Mike Dunn; +Cc: linux-mtd

[-- Attachment #1: Type: text/plain, Size: 879 bytes --]

On Thu, 2012-05-03 at 10:11 -0700, Mike Dunn wrote:
> On 05/03/2012 03:00 AM, Artem Bityutskiy wrote:
> > On Wed, 2012-05-02 at 10:14 -0700, Brian Norris wrote:
> >> Hello,
> >>
> >> This is the fourth version of my patches to change the nand_chip and
> >> nand_ecc_ctrl interfaces so that the nand_ecc_ctrl functions have information
> >> about whether the higher layers actually need OOB data to be read/written
> >> from/to the NAND device.
> > 
> > Pushed patches 1,2,6,7,8,9 to l2-mtd.git, thanks!
> > 
> 
> 
> I compile-tested these patches on all arches.  No warnings or errors on the
> files that were touched.

I think the worry is that we do not know the specifics of the drivers
and we may break them, while there is no harm if we do not touch them.
So we wanted to only push those patches which were acked.

-- 
Best Regards,
Artem Bityutskiy

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v4 01/10] mtd: nand: add 'oob_required' argument to NAND {read, write}_page interfaces
  2012-05-03 22:34       ` Brian Norris
@ 2012-05-04  7:58         ` Artem Bityutskiy
  0 siblings, 0 replies; 19+ messages in thread
From: Artem Bityutskiy @ 2012-05-04  7:58 UTC (permalink / raw)
  To: Brian Norris
  Cc: Mike Dunn, Lei Wen, Kevin Cernekee, Bastian Hecht, Wolfram Sang,
	Matthieu CASTET, Huang Shijie, linux-mtd, Shmulik Ladkani,
	Jiandong Zheng, Florian Fainelli, Scott Wood, Jamie Iles,
	Thomas Gleixner, Li Yang, David Woodhouse, Axel Lin,
	Prabhakar Kushwaha

[-- Attachment #1: Type: text/plain, Size: 283 bytes --]

On Thu, 2012-05-03 at 15:34 -0700, Brian Norris wrote:
> The docg4 stuff already went into l2-mtd-2.6.git; Artem can add the
> Acked-by as he rebases.

Done, but please guys, provide full tags with the name which I can
copy-paste as is.

-- 
Best Regards,
Artem Bityutskiy

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2012-05-04  7:55 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-05-02 17:14 [PATCH v4 00/10] mtd: nand: rework nand_ecc_ctrl interface for OOB Brian Norris
2012-05-02 17:14 ` [PATCH v4 01/10] mtd: nand: add 'oob_required' argument to NAND {read, write}_page interfaces Brian Norris
2012-05-03 17:16   ` Mike Dunn
2012-05-03 17:43     ` Shmulik Ladkani
2012-05-03 22:34       ` Brian Norris
2012-05-04  7:58         ` Artem Bityutskiy
2012-05-02 17:14 ` [PATCH v4 02/10] mtd: nand: pass proper 'oob_required' parameter Brian Norris
2012-05-02 17:14 ` [PATCH v4 03/10] mtd: Blackfin NFC: utilize oob_required parameter Brian Norris
2012-05-03  9:55   ` Artem Bityutskiy
2012-05-02 17:14 ` [PATCH v4 04/10] mtd: cafe_nand: " Brian Norris
2012-05-02 17:14 ` [PATCH v4 05/10] mtd: denali: " Brian Norris
2012-05-02 17:15 ` [PATCH v4 06/10] mtd: eLBC NAND: " Brian Norris
2012-05-02 17:15 ` [PATCH v4 07/10] mtd: IFC " Brian Norris
2012-05-02 17:15 ` [PATCH v4 08/10] mtd: gpmi-nand: utilize oob_requested parameter Brian Norris
2012-05-02 17:15 ` [PATCH v4 09/10] mtd: nand: utilize oob_required parameter Brian Norris
2012-05-02 17:15 ` [PATCH v4 10/10] mtd: pxa3xx_nand: " Brian Norris
2012-05-03 10:00 ` [PATCH v4 00/10] mtd: nand: rework nand_ecc_ctrl interface for OOB Artem Bityutskiy
2012-05-03 17:11   ` Mike Dunn
2012-05-04  7:23     ` Artem Bityutskiy

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.