aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/mtd/nand/nand_base.c14
1 files changed, 3 insertions, 11 deletions
diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
index 6281151e4cb7..79ed8ccf5065 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
@@ -3065,7 +3065,7 @@ static int nand_flash_detect_onfi(struct mtd_info *mtd, struct nand_chip *chip,
3065 int *busw) 3065 int *busw)
3066{ 3066{
3067 struct nand_onfi_params *p = &chip->onfi_params; 3067 struct nand_onfi_params *p = &chip->onfi_params;
3068 int i; 3068 int i, j;
3069 int val; 3069 int val;
3070 3070
3071 /* Try ONFI for unknown chip or LP */ 3071 /* Try ONFI for unknown chip or LP */
@@ -3074,18 +3074,10 @@ static int nand_flash_detect_onfi(struct mtd_info *mtd, struct nand_chip *chip,
3074 chip->read_byte(mtd) != 'F' || chip->read_byte(mtd) != 'I') 3074 chip->read_byte(mtd) != 'F' || chip->read_byte(mtd) != 'I')
3075 return 0; 3075 return 0;
3076 3076
3077 /*
3078 * ONFI must be probed in 8-bit mode or with NAND_BUSWIDTH_AUTO, not
3079 * with NAND_BUSWIDTH_16
3080 */
3081 if (chip->options & NAND_BUSWIDTH_16) {
3082 pr_err("ONFI cannot be probed in 16-bit mode; aborting\n");
3083 return 0;
3084 }
3085
3086 chip->cmdfunc(mtd, NAND_CMD_PARAM, 0, -1); 3077 chip->cmdfunc(mtd, NAND_CMD_PARAM, 0, -1);
3087 for (i = 0; i < 3; i++) { 3078 for (i = 0; i < 3; i++) {
3088 chip->read_buf(mtd, (uint8_t *)p, sizeof(*p)); 3079 for (j = 0; j < sizeof(*p); j++)
3080 ((uint8_t *)p)[j] = chip->read_byte(mtd);
3089 if (onfi_crc16(ONFI_CRC_BASE, (uint8_t *)p, 254) == 3081 if (onfi_crc16(ONFI_CRC_BASE, (uint8_t *)p, 254) ==
3090 le16_to_cpu(p->crc)) { 3082 le16_to_cpu(p->crc)) {
3091 break; 3083 break;