Commit 58b89a1f authored by Brian Norris's avatar Brian Norris

mtd: spi-nor: unify read opcode variants with ST SPI FSM

serial_flash_cmds.h defines our opcodes a little differently. Let's
borrow its naming, since it's borrowed from the SFDP standard, and it's
more extensible.

This prepares us for merging serial_flash_cmds.h and spi-nor.h opcode
listing.
Signed-off-by: default avatarBrian Norris <computersforpeace@gmail.com>
Reviewed-by: default avatarMarek Vasut <marex@denx.de>
Acked-by: default avatarHuang Shijie <b32955@freescale.com>
parent b02e7f3e
...@@ -294,12 +294,12 @@ static void fsl_qspi_init_lut(struct fsl_qspi *q) ...@@ -294,12 +294,12 @@ static void fsl_qspi_init_lut(struct fsl_qspi *q)
lut_base = SEQID_QUAD_READ * 4; lut_base = SEQID_QUAD_READ * 4;
if (q->nor_size <= SZ_16M) { if (q->nor_size <= SZ_16M) {
cmd = SPINOR_OP_QUAD_READ; cmd = SPINOR_OP_READ_1_1_4;
addrlen = ADDR24BIT; addrlen = ADDR24BIT;
dummy = 8; dummy = 8;
} else { } else {
/* use the 4-byte address */ /* use the 4-byte address */
cmd = SPINOR_OP_QUAD_READ; cmd = SPINOR_OP_READ_1_1_4;
addrlen = ADDR32BIT; addrlen = ADDR32BIT;
dummy = 8; dummy = 8;
} }
...@@ -388,7 +388,7 @@ static void fsl_qspi_init_lut(struct fsl_qspi *q) ...@@ -388,7 +388,7 @@ static void fsl_qspi_init_lut(struct fsl_qspi *q)
static int fsl_qspi_get_seqid(struct fsl_qspi *q, u8 cmd) static int fsl_qspi_get_seqid(struct fsl_qspi *q, u8 cmd)
{ {
switch (cmd) { switch (cmd) {
case SPINOR_OP_QUAD_READ: case SPINOR_OP_READ_1_1_4:
return SEQID_QUAD_READ; return SEQID_QUAD_READ;
case SPINOR_OP_WREN: case SPINOR_OP_WREN:
return SEQID_WREN; return SEQID_WREN;
......
...@@ -1014,16 +1014,16 @@ int spi_nor_scan(struct spi_nor *nor, const struct spi_device_id *id, ...@@ -1014,16 +1014,16 @@ int spi_nor_scan(struct spi_nor *nor, const struct spi_device_id *id,
/* Default commands */ /* Default commands */
switch (nor->flash_read) { switch (nor->flash_read) {
case SPI_NOR_QUAD: case SPI_NOR_QUAD:
nor->read_opcode = SPINOR_OP_QUAD_READ; nor->read_opcode = SPINOR_OP_READ_1_1_4;
break; break;
case SPI_NOR_DUAL: case SPI_NOR_DUAL:
nor->read_opcode = SPINOR_OP_DUAL_READ; nor->read_opcode = SPINOR_OP_READ_1_1_2;
break; break;
case SPI_NOR_FAST: case SPI_NOR_FAST:
nor->read_opcode = SPINOR_OP_FAST_READ; nor->read_opcode = SPINOR_OP_READ_FAST;
break; break;
case SPI_NOR_NORMAL: case SPI_NOR_NORMAL:
nor->read_opcode = SPINOR_OP_NORM_READ; nor->read_opcode = SPINOR_OP_READ;
break; break;
default: default:
dev_err(dev, "No Read opcode defined\n"); dev_err(dev, "No Read opcode defined\n");
...@@ -1041,16 +1041,16 @@ int spi_nor_scan(struct spi_nor *nor, const struct spi_device_id *id, ...@@ -1041,16 +1041,16 @@ int spi_nor_scan(struct spi_nor *nor, const struct spi_device_id *id,
/* Dedicated 4-byte command set */ /* Dedicated 4-byte command set */
switch (nor->flash_read) { switch (nor->flash_read) {
case SPI_NOR_QUAD: case SPI_NOR_QUAD:
nor->read_opcode = SPINOR_OP_QUAD_READ_4B; nor->read_opcode = SPINOR_OP_READ4_1_1_4;
break; break;
case SPI_NOR_DUAL: case SPI_NOR_DUAL:
nor->read_opcode = SPINOR_OP_DUAL_READ_4B; nor->read_opcode = SPINOR_OP_READ4_1_1_2;
break; break;
case SPI_NOR_FAST: case SPI_NOR_FAST:
nor->read_opcode = SPINOR_OP_FAST_READ_4B; nor->read_opcode = SPINOR_OP_READ4_FAST;
break; break;
case SPI_NOR_NORMAL: case SPI_NOR_NORMAL:
nor->read_opcode = SPINOR_OP_NORM_READ_4B; nor->read_opcode = SPINOR_OP_READ4;
break; break;
} }
nor->program_opcode = SPINOR_OP_PP_4B; nor->program_opcode = SPINOR_OP_PP_4B;
......
...@@ -10,14 +10,22 @@ ...@@ -10,14 +10,22 @@
#ifndef __LINUX_MTD_SPI_NOR_H #ifndef __LINUX_MTD_SPI_NOR_H
#define __LINUX_MTD_SPI_NOR_H #define __LINUX_MTD_SPI_NOR_H
/*
* Note on opcode nomenclature: some opcodes have a format like
* SPINOR_OP_FUNCTION{4,}_x_y_z. The numbers x, y, and z stand for the number
* of I/O lines used for the opcode, address, and data (respectively). The
* FUNCTION has an optional suffix of '4', to represent an opcode which
* requires a 4-byte (32-bit) address.
*/
/* Flash opcodes. */ /* Flash opcodes. */
#define SPINOR_OP_WREN 0x06 /* Write enable */ #define SPINOR_OP_WREN 0x06 /* Write enable */
#define SPINOR_OP_RDSR 0x05 /* Read status register */ #define SPINOR_OP_RDSR 0x05 /* Read status register */
#define SPINOR_OP_WRSR 0x01 /* Write status register 1 byte */ #define SPINOR_OP_WRSR 0x01 /* Write status register 1 byte */
#define SPINOR_OP_NORM_READ 0x03 /* Read data bytes (low frequency) */ #define SPINOR_OP_READ 0x03 /* Read data bytes (low frequency) */
#define SPINOR_OP_FAST_READ 0x0b /* Read data bytes (high frequency) */ #define SPINOR_OP_READ_FAST 0x0b /* Read data bytes (high frequency) */
#define SPINOR_OP_DUAL_READ 0x3b /* Read data bytes (Dual SPI) */ #define SPINOR_OP_READ_1_1_2 0x3b /* Read data bytes (Dual SPI) */
#define SPINOR_OP_QUAD_READ 0x6b /* Read data bytes (Quad SPI) */ #define SPINOR_OP_READ_1_1_4 0x6b /* Read data bytes (Quad SPI) */
#define SPINOR_OP_PP 0x02 /* Page program (up to 256 bytes) */ #define SPINOR_OP_PP 0x02 /* Page program (up to 256 bytes) */
#define SPINOR_OP_BE_4K 0x20 /* Erase 4KiB block */ #define SPINOR_OP_BE_4K 0x20 /* Erase 4KiB block */
#define SPINOR_OP_BE_4K_PMC 0xd7 /* Erase 4KiB block on PMC chips */ #define SPINOR_OP_BE_4K_PMC 0xd7 /* Erase 4KiB block on PMC chips */
...@@ -28,10 +36,10 @@ ...@@ -28,10 +36,10 @@
#define SPINOR_OP_RDCR 0x35 /* Read configuration register */ #define SPINOR_OP_RDCR 0x35 /* Read configuration register */
/* 4-byte address opcodes - used on Spansion and some Macronix flashes. */ /* 4-byte address opcodes - used on Spansion and some Macronix flashes. */
#define SPINOR_OP_NORM_READ_4B 0x13 /* Read data bytes (low frequency) */ #define SPINOR_OP_READ4 0x13 /* Read data bytes (low frequency) */
#define SPINOR_OP_FAST_READ_4B 0x0c /* Read data bytes (high frequency) */ #define SPINOR_OP_READ4_FAST 0x0c /* Read data bytes (high frequency) */
#define SPINOR_OP_DUAL_READ_4B 0x3c /* Read data bytes (Dual SPI) */ #define SPINOR_OP_READ4_1_1_2 0x3c /* Read data bytes (Dual SPI) */
#define SPINOR_OP_QUAD_READ_4B 0x6c /* Read data bytes (Quad SPI) */ #define SPINOR_OP_READ4_1_1_4 0x6c /* Read data bytes (Quad SPI) */
#define SPINOR_OP_PP_4B 0x12 /* Page program (up to 256 bytes) */ #define SPINOR_OP_PP_4B 0x12 /* Page program (up to 256 bytes) */
#define SPINOR_OP_SE_4B 0xdc /* Sector erase (usually 64KiB) */ #define SPINOR_OP_SE_4B 0xdc /* Sector erase (usually 64KiB) */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment