|
@@ -165,6 +165,25 @@ static u8 spi_read_cmds_array[] = {
|
|
|
CMD_READ_QUAD_OUTPUT_FAST,
|
|
|
};
|
|
|
|
|
|
+static int spi_flash_set_qeb(struct spi_flash *flash, u8 idcode0)
|
|
|
+{
|
|
|
+ switch (idcode0) {
|
|
|
+#if defined(CONFIG_SPI_FLASH_SPANSION) || defined(CONFIG_SPI_FLASH_WINBOND)
|
|
|
+ case SPI_FLASH_CFI_MFR_SPANSION:
|
|
|
+ case SPI_FLASH_CFI_MFR_WINBOND:
|
|
|
+ return spi_flash_set_qeb_winspan(flash);
|
|
|
+#endif
|
|
|
+#ifdef CONFIG_SPI_FLASH_STMICRO
|
|
|
+ case SPI_FLASH_CFI_MFR_STMICRO:
|
|
|
+ debug("SF: QEB is volatile for %02x flash\n", idcode0);
|
|
|
+ return 0;
|
|
|
+#endif
|
|
|
+ default:
|
|
|
+ printf("SF: Need set QEB func for %02x flash\n", idcode0);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
static struct spi_flash *spi_flash_validate_params(struct spi_slave *spi,
|
|
|
u8 *idcode)
|
|
|
{
|
|
@@ -250,6 +269,15 @@ static struct spi_flash *spi_flash_validate_params(struct spi_slave *spi,
|
|
|
/* Go for default supported write cmd */
|
|
|
flash->write_cmd = CMD_PAGE_PROGRAM;
|
|
|
|
|
|
+ /* Set the quad enable bit - only for quad commands */
|
|
|
+ if ((flash->read_cmd == CMD_READ_QUAD_OUTPUT_FAST) ||
|
|
|
+ (flash->write_cmd == CMD_QUAD_PAGE_PROGRAM)) {
|
|
|
+ if (spi_flash_set_qeb(flash, idcode[0])) {
|
|
|
+ debug("SF: Fail to set QEB for %02x\n", idcode[0]);
|
|
|
+ return NULL;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/* Poll cmd seclection */
|
|
|
flash->poll_cmd = CMD_READ_STATUS;
|
|
|
#ifdef CONFIG_SPI_FLASH_STMICRO
|