mtd: nand: cleanup ONFI printed errors, warnings

Linux-MTD Mailing List linux-mtd at lists.infradead.org
Wed Nov 13 13:59:02 EST 2013


Gitweb:     http://git.infradead.org/?p=mtd-2.6.git;a=commit;h=c7f23a70635895b5125aeb5593aaf8cb44d3a088
Commit:     c7f23a70635895b5125aeb5593aaf8cb44d3a088
Parent:     535ab9033433c00116e446beaac96503c7282fd1
Author:     Brian Norris <computersforpeace at gmail.com>
AuthorDate: Tue Aug 13 10:51:55 2013 -0700
Committer:  Brian Norris <computersforpeace at gmail.com>
CommitDate: Sun Oct 27 16:27:03 2013 -0700

    mtd: nand: cleanup ONFI printed errors, warnings
    
    The ONFI detection routine is too verbose in some cases and not verbose
    enough in others. This patch refactors it to print only when there are
    significant warnings/errors.
    
    Probing in 16-bit mode:
      It is unnecessary to print until after the READID (address 20h)
      command. READID *has* to work properly in whatever bus width
      configuration we are in, or else no identification mode works. So we
      can silence some useless warnings on systems which come up in 16-bit
      mode and do not even respond with an O-N-F-I string.
    
    Valid parameter page:
      Nobody needs to see this. Do we inform the user every time other
      hardware responds properly? Instead, add an error message if *no*
      uncorrupted parameter pages are found.
    
    ONFI ECC:
      Most drivers don't yet use the reported minimum ECC values, so it
      shouldn't yet be a fatal condition if the extended parameter page is
      incorrect. But we should at least give a warning for the corner cases
      that we don't expect.
    
    ONFI flash detected:
      Nobody needs to see this. This is the expected case, that we detect
      ONFI properly, or else it wasn't ONFI-compliant and is detected by
      some other routine.
    
    Signed-off-by: Brian Norris <computersforpeace at gmail.com>
    Cc: Huang Shijie <b32955 at freescale.com>
    Cc: Ezequiel Garcia <ezequiel.garcia at free-electrons.com>
---
 drivers/mtd/nand/nand_base.c | 24 +++++++++++++++---------
 1 file changed, 15 insertions(+), 9 deletions(-)

diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
index d340b2f..00022b4 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
@@ -2935,29 +2935,34 @@ static int nand_flash_detect_onfi(struct mtd_info *mtd, struct nand_chip *chip,
 	int i;
 	int val;
 
-	/* ONFI need to be probed in 8 bits mode, and 16 bits should be selected with NAND_BUSWIDTH_AUTO */
-	if (chip->options & NAND_BUSWIDTH_16) {
-		pr_err("Trying ONFI probe in 16 bits mode, aborting !\n");
-		return 0;
-	}
 	/* Try ONFI for unknown chip or LP */
 	chip->cmdfunc(mtd, NAND_CMD_READID, 0x20, -1);
 	if (chip->read_byte(mtd) != 'O' || chip->read_byte(mtd) != 'N' ||
 		chip->read_byte(mtd) != 'F' || chip->read_byte(mtd) != 'I')
 		return 0;
 
+	/*
+	 * ONFI must be probed in 8-bit mode or with NAND_BUSWIDTH_AUTO, not
+	 * with NAND_BUSWIDTH_16
+	 */
+	if (chip->options & NAND_BUSWIDTH_16) {
+		pr_err("ONFI cannot be probed in 16-bit mode; aborting\n");
+		return 0;
+	}
+
 	chip->cmdfunc(mtd, NAND_CMD_PARAM, 0, -1);
 	for (i = 0; i < 3; i++) {
 		chip->read_buf(mtd, (uint8_t *)p, sizeof(*p));
 		if (onfi_crc16(ONFI_CRC_BASE, (uint8_t *)p, 254) ==
 				le16_to_cpu(p->crc)) {
-			pr_info("ONFI param page %d valid\n", i);
 			break;
 		}
 	}
 
-	if (i == 3)
+	if (i == 3) {
+		pr_err("Could not find valid ONFI parameter page; aborting\n");
 		return 0;
+	}
 
 	/* Check version */
 	val = le16_to_cpu(p->revision);
@@ -3009,10 +3014,11 @@ static int nand_flash_detect_onfi(struct mtd_info *mtd, struct nand_chip *chip,
 
 		/* The Extended Parameter Page is supported since ONFI 2.1. */
 		if (nand_flash_detect_ext_param_page(mtd, chip, p))
-			pr_info("Failed to detect the extended param page.\n");
+			pr_warn("Failed to detect ONFI extended param page\n");
+	} else {
+		pr_warn("Could not retrieve ONFI ECC requirements\n");
 	}
 
-	pr_info("ONFI flash detected\n");
 	return 1;
 }
 



More information about the linux-mtd-cvs mailing list