From: Siva Durga Prasad Paladugu Date: Tue, 27 Jan 2015 10:57:47 +0000 (+0530) Subject: sf: Add support for ISSI flash parts X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3cb6ef9cb1f6586300f02254a288d0e614a5367a;p=thirdparty%2Fu-boot.git sf: Add support for ISSI flash parts Added support for ISSI flash parts IS25LP032, IS25LP064 and IS25LP128. Signed-off-by: Siva Durga Prasad Paladugu Signed-off-by: Michal Simek --- diff --git a/drivers/mtd/spi/sf_internal.h b/drivers/mtd/spi/sf_internal.h index 785f7a96fed..0e675083894 100644 --- a/drivers/mtd/spi/sf_internal.h +++ b/drivers/mtd/spi/sf_internal.h @@ -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 diff --git a/drivers/mtd/spi/sf_params.c b/drivers/mtd/spi/sf_params.c index c12e8c6fe7e..0a2ad4c7e23 100644 --- a/drivers/mtd/spi/sf_params.c +++ b/drivers/mtd/spi/sf_params.c @@ -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 */ /* diff --git a/drivers/mtd/spi/sf_probe.c b/drivers/mtd/spi/sf_probe.c index 41abe8100f2..067eca8dc23 100644 --- a/drivers/mtd/spi/sf_probe.c +++ b/drivers/mtd/spi/sf_probe.c @@ -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)