Patchwork [U-Boot,v2,1/2] cmd_sf: Add DIOFR(Dual IO Fast Read) read instruction support

login
register
mail settings
Submitter Jagannadha Sutradharudu Teki
Date Dec. 31, 2012, 12:45 p.m.
Message ID <1356957909-20863-1-git-send-email-jagannadh.teki@gmail.com>
Download mbox | patch
Permalink /patch/208853/
State Superseded
Delegated to: Jagannadha Sutradharudu Teki
Headers show

Comments

Jagannadha Sutradharudu Teki - Dec. 31, 2012, 12:45 p.m.
This patch provides a support to read a flash using 'diofr'
read instruction(rd_inst) for 'sf read' and 'sf update' commands.

'diofr' is similar to the dofr(Dual Output Fast Read) except that it
improves performance throughput by allowing input of the
address bits using two bits per SCK via two input pins.

Example:
read 0x2000 length bytes starting at offset 0x0 to memory at 0x10000
using diofr read instruction.
u-boot> sf read diofr 0x10000 0x0 0x2000

erase and write 0x2000 length bytes from memory at 0x10000 address to
flash offset at 0x0 using pp write instruction and diofr read instruction.
u-boot> sf update pp diofr 0x10000 0x0 0x2000

Signed-off-by: Jagannadha Sutradharudu Teki <jagannadh.teki@gmail.com>
---
Changes in v2: Added command help on U_BOOT_CMD

 common/cmd_sf.c          |   12 ++++++++----
 include/spi_flash_inst.h |    1 +
 2 files changed, 9 insertions(+), 4 deletions(-)

Patch

diff --git a/common/cmd_sf.c b/common/cmd_sf.c
index a07effd..20879e7 100644
--- a/common/cmd_sf.c
+++ b/common/cmd_sf.c
@@ -293,7 +293,9 @@  static int sf_parse_rd_inst_arg(char *arg, u8 *rd_inst, u8 *rd_qeb_req)
 	else if (strcmp(arg, "qofr") == 0) {
 		*rd_inst = CMD_READ_QUAD_OUTPUT_FAST;
 		*rd_qeb_req = 1;
-	} else
+	} else if (strcmp(arg, "diofr") == 0)
+		*rd_inst = CMD_READ_DUAL_IO_FAST;
+	else
 		return 1;
 
 	return 0;
@@ -643,11 +645,12 @@  U_BOOT_CMD(
 	"sf read rd_inst addr offset len\n"
 	"				- read `len' bytes starting at\n"
 	"				  `offset' to memory at `addr' using\n"
-	"				  afr | asr | dofr | qofr `rd_inst' read instructions\n"
+	"				  afr | asr | dofr | qofr | diofr `rd_inst' read instructions\n"
 	"				  afr (Array Fast Read, 0bh)\n"
 	"				  asr (Array Slow Read, 02b)\n"
 	"				  dofr (Dual Output Fast Read, 3bh)\n"
 	"				  qofr (Quad Output Fast Read, 6bh)\n"
+	"				  diofr (Dual Input/Output Fast Read, bbh)\n"
 	"sf write wr_inst addr offset len\n"
 	"				- write `len' bytes from memory\n"
 	"				  at `addr' to flash at `offset' using\n"
@@ -662,10 +665,11 @@  U_BOOT_CMD(
 	"				  pp | qpp `wr_inst' write instructions and\n"
 	"				  pp (Page Program, 02h)\n"
 	"				  qpp (Quad Page Program, 32h)\n"
-	"				  afr | asr | dofr | qofr `rd_inst' read instructions\n"
+	"				  afr | asr | dofr | qofr | diofr `rd_inst' read instructions\n"
 	"				  afr (Array Fast Read, 0bh)\n"
 	"				  asr (Array Slow Read, 02b)\n"
 	"				  dofr (Dual Output Fast Read, 3bh)\n"
-	"				  qofr (Quad Output Fast Read, 6bh)"
+	"				  qofr (Quad Output Fast Read, 6bh)\n"
+	"				  diofr (Dual Input/Output Fast Read, bbh)"
 	SF_TEST_HELP
 );
diff --git a/include/spi_flash_inst.h b/include/spi_flash_inst.h
index 67b22c8..e718e8e 100644
--- a/include/spi_flash_inst.h
+++ b/include/spi_flash_inst.h
@@ -33,5 +33,6 @@ 
 #define CMD_READ_ARRAY_SLOW		0x03
 #define CMD_READ_DUAL_OUTPUT_FAST	0x3b
 #define CMD_READ_QUAD_OUTPUT_FAST	0x6b
+#define CMD_READ_DUAL_IO_FAST		0xbb
 
 #endif /* _SPI_FLASH_INST_H_ */