public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [PATCH v3 01/27] sf: Simplify fastest read cmd code
@ 2016-08-11  8:07 Jagan Teki
  2016-08-11  8:07 ` [U-Boot] [PATCH v3 02/27] sf: Remove e_rd_cmd from param table Jagan Teki
                   ` (25 more replies)
  0 siblings, 26 replies; 27+ messages in thread
From: Jagan Teki @ 2016-08-11  8:07 UTC (permalink / raw)
  To: u-boot

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 <sjg@chromium.org>
Cc: Bin Meng <bmeng.cn@gmail.com>
Cc: Michal Simek <michal.simek@xilinx.com>
Cc: Siva Durga Prasad Paladugu <sivadur@xilinx.com>
Cc: Vignesh R <vigneshr@ti.com>
Cc: Mugunthan V N <mugunthanvnm@ti.com>
Signed-off-by: Jagan Teki <jteki@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

^ permalink raw reply related	[flat|nested] 27+ messages in thread

end of thread, other threads:[~2016-08-11  8:07 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-08-11  8:07 [U-Boot] [PATCH v3 01/27] sf: Simplify fastest read cmd code Jagan Teki
2016-08-11  8:07 ` [U-Boot] [PATCH v3 02/27] sf: Remove e_rd_cmd from param table Jagan Teki
2016-08-11  8:07 ` [U-Boot] [PATCH v3 03/27] spi: Use mode for rx mode flags Jagan Teki
2016-08-11  8:07 ` [U-Boot] [PATCH v3 04/27] spi: Remove SPI_RX_FAST Jagan Teki
2016-08-11  8:07 ` [U-Boot] [PATCH v3 05/27] sf: Remove SECT_32K Jagan Teki
2016-08-11  8:07 ` [U-Boot] [PATCH v3 06/27] sf: Add CONFIG_SPI_FLASH_USE_4K_SECTORS in spi_flash Jagan Teki
2016-08-11  8:07 ` [U-Boot] [PATCH v3 07/27] sf: Move flags macro's to spi_flash_params{} members Jagan Teki
2016-08-11  8:07 ` [U-Boot] [PATCH v3 08/27] sf: Adopt flash table INFO macro from Linux Jagan Teki
2016-08-11  8:07 ` [U-Boot] [PATCH v3 09/27] sf: Add JEDEC_ID and JEDEC_EXT macro Jagan Teki
2016-08-11  8:07 ` [U-Boot] [PATCH v3 10/27] sf: Rename spi_flash_params => spi_flash_info Jagan Teki
2016-08-11  8:07 ` [U-Boot] [PATCH v3 11/27] sf: Add JEDEC_MFR Jagan Teki
2016-08-11  8:07 ` [U-Boot] [PATCH v3 12/27] sf: Simplify lock ops detection code Jagan Teki
2016-08-11  8:07 ` [U-Boot] [PATCH v3 13/27] sf: sandbox: Fix ID exctract from spi_flash_info Jagan Teki
2016-08-11  8:07 ` [U-Boot] [PATCH v3 14/27] sf: Cleanup spi_flash_info{} Jagan Teki
2016-08-11  8:07 ` [U-Boot] [PATCH v3 15/27] sf: Cleanup sf_params Jagan Teki
2016-08-11  8:07 ` [U-Boot] [PATCH v3 16/27] sf: nr_sectors -> n_sectors Jagan Teki
2016-08-11  8:07 ` [U-Boot] [PATCH v3 17/27] sf: Add SPI_FLASH_MAX_ID_LEN Jagan Teki
2016-08-11  8:07 ` [U-Boot] [PATCH v3 18/27] sf: Increase max id length by 1 byte Jagan Teki
2016-08-11  8:07 ` [U-Boot] [PATCH v3 19/27] sf: Add INFO6 flash_info macro Jagan Teki
2016-08-11  8:07 ` [U-Boot] [PATCH v3 20/27] sf: params: Add S25FS256S_64K spi flash support Jagan Teki
2016-08-11  8:07 ` [U-Boot] [PATCH v3 21/27] sf: Remove legacy idcode detection code Jagan Teki
2016-08-11  8:07 ` [U-Boot] [PATCH v3 22/27] sf: Remove non-meaningful comments Jagan Teki
2016-08-11  8:07 ` [U-Boot] [PATCH v3 23/27] sf: Rename sf_params.c to spi_flash_ids Jagan Teki
2016-08-11  8:07 ` [U-Boot] [PATCH v3 24/27] sf: ids: Use small letter's with flash name Jagan Teki
2016-08-11  8:07 ` [U-Boot] [PATCH v3 25/27] sf: ids: Use small letter in ext_jedec Jagan Teki
2016-08-11  8:07 ` [U-Boot] [PATCH v3 26/27] sf: Rename few local functions Jagan Teki
2016-08-11  8:07 ` [U-Boot] [PATCH v3 27/27] spi: Remove dual flash code Jagan Teki

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox