From: Jagan Teki <jt...@openedev.com>

Fastest read command code look for fastest read command
taking inputs from spi->mode_rx and flags from param table
and controller mode_rx is always been a priority.

Since mode_rx is always set from controller side this optimized
code doesn't require much and this code required exctra overhead like
1) Maintain e_rx_cmd in param table
2) Maintain mode_rx in spi_slave {}

Hence removed this code, and look for read command from normal
spi->mode from spi_slave{} and params->flags

Cc: Simon Glass <s...@chromium.org>
Cc: Bin Meng <bmeng...@gmail.com>
Cc: Michal Simek <michal.si...@xilinx.com>
Cc: Siva Durga Prasad Paladugu <siva...@xilinx.com>
Cc: Vignesh R <vigne...@ti.com>
Cc: Mugunthan V N <mugunthan...@ti.com>
Signed-off-by: Jagan Teki <jt...@openedev.com>
---
 drivers/mtd/spi/sf_internal.h |  4 ++++
 drivers/mtd/spi/spi_flash.c   | 28 ++++++++++------------------
 2 files changed, 14 insertions(+), 18 deletions(-)

diff --git a/drivers/mtd/spi/sf_internal.h b/drivers/mtd/spi/sf_internal.h
index da2bb7b..c5cb791 100644
--- a/drivers/mtd/spi/sf_internal.h
+++ b/drivers/mtd/spi/sf_internal.h
@@ -46,6 +46,10 @@ enum {
        E_FSR           = BIT(2),
        SST_WR          = BIT(3),
        WR_QPP          = BIT(4),
+       RD_QUAD         = BIT(5),
+       RD_DUAL         = BIT(6),
+       RD_QUADIO       = BIT(7),
+       RD_DUALIO       = BIT(8),
 };
 
 enum spi_nor_option_flags {
diff --git a/drivers/mtd/spi/spi_flash.c b/drivers/mtd/spi/spi_flash.c
index 64d4e0f..5fd408c 100644
--- a/drivers/mtd/spi/spi_flash.c
+++ b/drivers/mtd/spi/spi_flash.c
@@ -1013,15 +1013,8 @@ int spi_flash_scan(struct spi_flash *flash)
        struct spi_slave *spi = flash->spi;
        const struct spi_flash_params *params;
        u16 jedec, ext_jedec;
-       u8 cmd, idcode[5];
+       u8 idcode[5];
        int ret;
-       static u8 spi_read_cmds_array[] = {
-               CMD_READ_ARRAY_SLOW,
-               CMD_READ_ARRAY_FAST,
-               CMD_READ_DUAL_OUTPUT_FAST,
-               CMD_READ_QUAD_OUTPUT_FAST,
-               CMD_READ_DUAL_IO_FAST,
-               CMD_READ_QUAD_IO_FAST };
 
        /* Read the ID codes */
        ret = spi_flash_cmd(spi, CMD_READ_ID, idcode, sizeof(idcode));
@@ -1177,17 +1170,16 @@ int spi_flash_scan(struct spi_flash *flash)
        /* Now erase size becomes valid sector size */
        flash->sector_size = flash->erase_size;
 
-       /* Look for the fastest read cmd */
-       cmd = fls(params->e_rd_cmd & spi->mode_rx);
-       if (cmd) {
-               cmd = spi_read_cmds_array[cmd - 1];
-               flash->read_cmd = cmd;
-       } else {
-               /* Go for default supported read cmd */
-               flash->read_cmd = CMD_READ_ARRAY_FAST;
-       }
+       /* Look for read commands */
+       flash->read_cmd = CMD_READ_ARRAY_FAST;
+       if (spi->mode_rx & SPI_RX_SLOW)
+               flash->read_cmd = CMD_READ_ARRAY_SLOW;
+       else if (spi->mode_rx & SPI_RX_QUAD && params->flags & RD_QUAD)
+               flash->read_cmd = CMD_READ_QUAD_OUTPUT_FAST;
+       else if (spi->mode_rx & SPI_RX_DUAL && params->flags & RD_DUAL)
+               flash->read_cmd = CMD_READ_DUAL_OUTPUT_FAST;
 
-       /* Not require to look for fastest only two write cmds yet */
+       /* Look for write commands */
        if (params->flags & WR_QPP && spi->mode & SPI_TX_QUAD)
                flash->write_cmd = CMD_QUAD_PAGE_PROGRAM;
        else
-- 
2.7.4

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to