mtd: spi-nor: fsl-quadspi: fix unsupported cmd when run flash_erase
authorFrank Li <Frank.Li@freescale.com>
Tue, 4 Aug 2015 15:26:16 +0000 (10:26 -0500)
committerBrian Norris <computersforpeace@gmail.com>
Thu, 6 Aug 2015 17:07:45 +0000 (10:07 -0700)
Erase function will use cmd 0x20 (SPINOR_OP_BE_4K) if kenrel enable option
CONFIG_MTD_SPI_NOR_USE_4K_SECTORS.

This command is not in fsl-quadspi driver LUT. So driver continue report
fsl-quadspi 21e0000.qspi: Unsupported cmd 0x20.

This patch fix this issue.

Signed-off-by: Frank Li <Frank.Li@freescale.com>
Acked-by: Han Xu <Han.xu@freescale.com>
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
drivers/mtd/spi-nor/fsl-quadspi.c

index 0144821a3692e1a3de5ab2a6a3113f42e76aca35..d32b7e04cccab780fcee0b0a3d84319b083f713b 100644 (file)
@@ -397,14 +397,8 @@ static void fsl_qspi_init_lut(struct fsl_qspi *q)
        /* Erase a sector */
        lut_base = SEQID_SE * 4;
 
-       if (q->nor_size <= SZ_16M) {
-               cmd = SPINOR_OP_SE;
-               addrlen = ADDR24BIT;
-       } else {
-               /* use the 4-byte address */
-               cmd = SPINOR_OP_SE;
-               addrlen = ADDR32BIT;
-       }
+       cmd = q->nor[0].erase_opcode;
+       addrlen = q->nor_size <= SZ_16M ? ADDR24BIT : ADDR32BIT;
 
        writel(LUT0(CMD, PAD1, cmd) | LUT1(ADDR, PAD1, addrlen),
                        base + QUADSPI_LUT(lut_base));
@@ -473,6 +467,8 @@ static int fsl_qspi_get_seqid(struct fsl_qspi *q, u8 cmd)
        case SPINOR_OP_BRWR:
                return SEQID_BRWR;
        default:
+               if (cmd == q->nor[0].erase_opcode)
+                       return SEQID_SE;
                dev_err(q->dev, "Unsupported cmd 0x%.2x\n", cmd);
                break;
        }