]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
sf: Send Dual IO commands if configured for dual IO
authorSiva Durga Prasad Paladugu <siva.durga.paladugu@xilinx.com>
Wed, 18 Jun 2014 07:19:44 +0000 (12:49 +0530)
committerMichal Simek <michal.simek@xilinx.com>
Tue, 15 Jul 2014 11:10:33 +0000 (13:10 +0200)
Dont send Quad commands and send Dual IO commands if
configured for dual IO.

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

index 083c52491e165c74cfbc6a402270c0fc76758c0d..3f2f0ed810a001c63f21e4ed1d4255c503e06056 100644 (file)
@@ -170,15 +170,21 @@ static struct spi_flash *spi_flash_validate_params(struct spi_slave *spi,
        /* Look for the fastest read cmd */
        cmd = fls(params->e_rd_cmd & flash->spi->op_mode_rx);
        if (cmd) {
-               cmd = spi_read_cmds_array[cmd - 1];
-               flash->read_cmd = cmd;
+               if (flash->spi->dio != SF_DUALIO_FLASH) {
+                       cmd = spi_read_cmds_array[cmd - 1];
+                       flash->read_cmd = cmd;
+               } else {
+                       flash->read_cmd = CMD_READ_DUAL_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 */
-       if (params->flags & WR_QPP && flash->spi->op_mode_tx & SPI_OPM_TX_QPP)
+       if ((params->flags & WR_QPP) &&
+           (flash->spi->op_mode_tx & SPI_OPM_TX_QPP) &&
+           (flash->spi->dio != SF_DUALIO_FLASH))
                flash->write_cmd = CMD_QUAD_PAGE_PROGRAM;
        else
                /* Go for default supported write cmd */
@@ -217,6 +223,12 @@ static struct spi_flash *spi_flash_validate_params(struct spi_slave *spi,
        case CMD_READ_QUAD_IO_FAST:
                flash->dummy_byte = 2;
                break;
+       case CMD_READ_DUAL_IO_FAST:
+               if (idcode[0] == SPI_FLASH_CFI_MFR_STMICRO)
+                       flash->dummy_byte = 2;
+               else
+                       flash->dummy_byte = 1;
+               break;
        case CMD_READ_ARRAY_SLOW:
                flash->dummy_byte = 0;
                break;
index ffd66478b194180e10db2649b96dee8280f77751..3f810dafee0735f2de9ed03d9865ddcc67a3c4b4 100644 (file)
@@ -79,6 +79,7 @@ struct spi_slave {
        unsigned int max_write_size;
        void *memory_map;
        u8 option;
+       u8 dio;
        u8 flags;
 };
 
index 361df365002b18a43d1e91d0ba640e2ed35e2c2e..c488a25a1542733d9fbd3d0bdff196b03715a02a 100644 (file)
@@ -43,6 +43,8 @@ enum spi_dual_flash {
        SF_DUAL_PARALLEL_FLASH = 1 << 1,
 };
 
+#define SF_DUALIO_FLASH        1
+
 /**
  * struct spi_flash_params - SPI/QSPI flash device params structure
  *