]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
sf: Add support for ISSI flash parts
authorSiva Durga Prasad Paladugu <siva.durga.paladugu@xilinx.com>
Tue, 27 Jan 2015 10:57:47 +0000 (16:27 +0530)
committerMichal Simek <michal.simek@xilinx.com>
Wed, 28 Jan 2015 13:17:35 +0000 (14:17 +0100)
Added support for ISSI flash parts IS25LP032,
IS25LP064 and IS25LP128.

Signed-off-by: Siva Durga Prasad Paladugu <sivadur@xilinx.com>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
drivers/mtd/spi/sf_internal.h
drivers/mtd/spi/sf_params.c
drivers/mtd/spi/sf_probe.c

index 785f7a96fed28d8d7cb8297fa009705e183c9290..0e67508389497d84f95eae7ab83e6fd57684ce20 100644 (file)
@@ -56,6 +56,7 @@ enum {
 #define SPI_FLASH_CFI_MFR_STMICRO      0x20
 #define SPI_FLASH_CFI_MFR_MACRONIX     0xc2
 #define SPI_FLASH_CFI_MFR_WINBOND      0xef
+#define SPI_FLASH_CFI_MFR_ISSI         0x9d
 
 /* Erase commands */
 #define CMD_ERASE_4K                   0x20
index c12e8c6fe7eda06939b685583c3c1b21778e0cf8..0a2ad4c7e235f0abd3f0f248e46a62427d263657 100644 (file)
@@ -122,6 +122,11 @@ const struct spi_flash_params spi_flash_params_table[] = {
        {"W25Q32DW",       0xef6016, 0x0,       64 * 1024,    64, RD_FULL,          WR_QPP | SECT_4K},
        {"W25Q64DW",       0xef6017, 0x0,       64 * 1024,   128, RD_FULL,          WR_QPP | SECT_4K},
        {"W25Q128FW",      0xef6018, 0x0,       64 * 1024,   256, RD_FULL,          WR_QPP | SECT_4K},
+#endif
+#ifdef CONFIG_SPI_FLASH_ISSI
+       {"IS25LP032",      0x9d6016, 0x0,       64 * 1024,    64, RD_EXTN | QUAD_IO_FAST,     WR_QPP},
+       {"IS25LP064",      0x9d6017, 0x0,       64 * 1024,   128, RD_EXTN | QUAD_IO_FAST,     WR_QPP},
+       {"IS25LP128",      0x9d6018, 0x0,       64 * 1024,   256, RD_EXTN | QUAD_IO_FAST,     WR_QPP},
 #endif
        {},     /* Empty entry to terminate the list */
        /*
index 41abe8100f282500066ce47f610e4c8653849916..067eca8dc2366f9f5c285a89306fb67a31e2c436 100644 (file)
@@ -31,7 +31,7 @@ static u8 spi_read_cmds_array[] = {
        CMD_READ_QUAD_IO_FAST,
 };
 
-#ifdef CONFIG_SPI_FLASH_MACRONIX
+#if defined(CONFIG_SPI_FLASH_MACRONIX) || defined(CONFIG_SPI_FLASH_ISSI)
 static int spi_flash_set_qeb_mxic(struct spi_flash *flash)
 {
        u8 qeb_status;
@@ -78,8 +78,9 @@ static int spi_flash_set_qeb_winspan(struct spi_flash *flash)
 static int spi_flash_set_qeb(struct spi_flash *flash, u8 idcode0)
 {
        switch (idcode0) {
-#ifdef CONFIG_SPI_FLASH_MACRONIX
+#if defined(CONFIG_SPI_FLASH_MACRONIX) || defined(CONFIG_SPI_FLASH_ISSI)
        case SPI_FLASH_CFI_MFR_MACRONIX:
+       case SPI_FLASH_CFI_MFR_ISSI:
                return spi_flash_set_qeb_mxic(flash);
 #endif
 #if defined(CONFIG_SPI_FLASH_SPANSION) || defined(CONFIG_SPI_FLASH_WINBOND)
@@ -193,8 +194,11 @@ static int spi_flash_validate_params(struct spi_slave *spi, u8 *idcode,
                        flash->read_cmd = CMD_READ_DUAL_IO_FAST;
                }
        } else {
-               /* Go for default supported read cmd */
-               flash->read_cmd = CMD_READ_ARRAY_FAST;
+               if (idcode[0] == SPI_FLASH_CFI_MFR_ISSI)
+                       flash->read_cmd = CMD_READ_QUAD_IO_FAST;
+               else
+                       /* Go for default supported read cmd */
+                       flash->read_cmd = CMD_READ_ARRAY_FAST;
        }
 
        /* Not require to look for fastest only two write cmds yet */
@@ -237,7 +241,10 @@ static int spi_flash_validate_params(struct spi_slave *spi, u8 *idcode,
         */
        switch (flash->read_cmd) {
        case CMD_READ_QUAD_IO_FAST:
-               flash->dummy_byte = 2;
+               if (idcode[0] == SPI_FLASH_CFI_MFR_ISSI)
+                       flash->dummy_byte = 3;
+               else
+                       flash->dummy_byte = 2;
                break;
        case CMD_READ_DUAL_IO_FAST:
                if (idcode[0] == SPI_FLASH_CFI_MFR_STMICRO)