This patch provides a support to read a flash using 'dofr'
read instruction(rd_inst) for 'sf read' and 'sf update' commands.

'dofr' will effectively increases the data transfer rate
by up to two times, as compared to the afr(Array Fast Read).

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

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

Signed-off-by: Jagannadha Sutradharudu Teki <[email protected]>
---
 common/cmd_sf.c          |   10 +++++++---
 include/spi_flash_inst.h |    1 +
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/common/cmd_sf.c b/common/cmd_sf.c
index 3d9c93e..b971d2a 100644
--- a/common/cmd_sf.c
+++ b/common/cmd_sf.c
@@ -281,6 +281,8 @@ static int sf_parse_rd_inst_arg(char *arg, u8 *rd_inst)
                *rd_inst = CMD_READ_ARRAY_FAST;
        else if (strcmp(arg, "asr") == 0)
                *rd_inst = CMD_READ_ARRAY_SLOW;
+       else if (strcmp(arg, "dofr") == 0)
+               *rd_inst = CMD_READ_DUAL_OUTPUT_FAST;
        else
                return 1;
 
@@ -630,9 +632,10 @@ 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 `rd_inst' read 
instructions\n"
+       "                                 afr | asr | dofr `rd_inst' read 
instructions\n"
        "                                 afr (Array Fast Read, 0bh)\n"
        "                                 asr (Array Slow Read, 02b)\n"
+       "                                 dofr (Dual Output Fast Read, 3bh)\n"
        "sf write wr_inst addr offset len\n"
        "                               - write `len' bytes from memory\n"
        "                                 at `addr' to flash at `offset' 
using\n"
@@ -647,8 +650,9 @@ U_BOOT_CMD(
        "                                 pp | qpp `wr_inst' write instructions 
and\n"
        "                                 pp (Page Program, 02h)\n"
        "                                 qpp (Quad Page Program, 32h)\n"
-       "                                 afr | asr `rd_inst' read 
instructions\n"
+       "                                 afr | asr | dofr `rd_inst' read 
instructions\n"
        "                                 afr (Array Fast Read, 0bh)\n"
-       "                                 asr (Array Slow Read, 02b)"
+       "                                 asr (Array Slow Read, 02b)\n"
+       "                                 dofr (Dual Output Fast Read, 3bh)"
        SF_TEST_HELP
 );
diff --git a/include/spi_flash_inst.h b/include/spi_flash_inst.h
index 85c8e70..f8fcf5e 100644
--- a/include/spi_flash_inst.h
+++ b/include/spi_flash_inst.h
@@ -31,5 +31,6 @@
 /* Read commands */
 #define CMD_READ_ARRAY_FAST            0x0b
 #define CMD_READ_ARRAY_SLOW            0x03
+#define CMD_READ_DUAL_OUTPUT_FAST      0x3b
 
 #endif /* _SPI_FLASH_INST_H_ */
-- 
1.7.0.4

_______________________________________________
U-Boot mailing list
[email protected]
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to