|
@@ -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;
|
|
|
}
|
|
|
|