Skip to content

Commit 8586bc8

Browse files
committed
mtd: spinand: Add support for read DTR operations
Advanced SPI-NAND chips are capable of reading data much faster by leveraging DTR support. This support extends to dual and quad configurations. Create macros defining all possible read from cache DTR variants: - SPINAND_PAGE_READ_FROM_CACHE_DTR_OP - SPINAND_PAGE_READ_FROM_CACHE_X2_DTR_OP - SPINAND_PAGE_READ_FROM_CACHE_X4_DTR_OP - SPINAND_PAGE_READ_FROM_CACHE_DUALIO_DTR_OP - SPINAND_PAGE_READ_FROM_CACHE_QUADIO_DTR_OP Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
1 parent 666c299 commit 8586bc8

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed

include/linux/mtd/spinand.h

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,13 @@
8787
SPI_MEM_OP_DUMMY(ndummy, 1), \
8888
SPI_MEM_OP_DATA_IN(len, buf, 1))
8989

90+
#define SPINAND_PAGE_READ_FROM_CACHE_DTR_OP(addr, ndummy, buf, len, freq) \
91+
SPI_MEM_OP(SPI_MEM_OP_CMD(0x0d, 1), \
92+
SPI_MEM_DTR_OP_ADDR(2, addr, 1), \
93+
SPI_MEM_DTR_OP_DUMMY(ndummy, 1), \
94+
SPI_MEM_DTR_OP_DATA_IN(len, buf, 1), \
95+
SPI_MEM_OP_MAX_FREQ(freq))
96+
9097
#define SPINAND_PAGE_READ_FROM_CACHE_X2_OP(addr, ndummy, buf, len) \
9198
SPI_MEM_OP(SPI_MEM_OP_CMD(0x3b, 1), \
9299
SPI_MEM_OP_ADDR(2, addr, 1), \
@@ -99,6 +106,13 @@
99106
SPI_MEM_OP_DUMMY(ndummy, 1), \
100107
SPI_MEM_OP_DATA_IN(len, buf, 2))
101108

109+
#define SPINAND_PAGE_READ_FROM_CACHE_X2_DTR_OP(addr, ndummy, buf, len, freq) \
110+
SPI_MEM_OP(SPI_MEM_OP_CMD(0x3d, 1), \
111+
SPI_MEM_DTR_OP_ADDR(2, addr, 1), \
112+
SPI_MEM_DTR_OP_DUMMY(ndummy, 1), \
113+
SPI_MEM_DTR_OP_DATA_IN(len, buf, 2), \
114+
SPI_MEM_OP_MAX_FREQ(freq))
115+
102116
#define SPINAND_PAGE_READ_FROM_CACHE_X4_OP(addr, ndummy, buf, len) \
103117
SPI_MEM_OP(SPI_MEM_OP_CMD(0x6b, 1), \
104118
SPI_MEM_OP_ADDR(2, addr, 1), \
@@ -111,6 +125,13 @@
111125
SPI_MEM_OP_DUMMY(ndummy, 1), \
112126
SPI_MEM_OP_DATA_IN(len, buf, 4))
113127

128+
#define SPINAND_PAGE_READ_FROM_CACHE_X4_DTR_OP(addr, ndummy, buf, len, freq) \
129+
SPI_MEM_OP(SPI_MEM_OP_CMD(0x6d, 1), \
130+
SPI_MEM_DTR_OP_ADDR(2, addr, 1), \
131+
SPI_MEM_DTR_OP_DUMMY(ndummy, 1), \
132+
SPI_MEM_DTR_OP_DATA_IN(len, buf, 4), \
133+
SPI_MEM_OP_MAX_FREQ(freq))
134+
114135
#define SPINAND_PAGE_READ_FROM_CACHE_DUALIO_OP(addr, ndummy, buf, len) \
115136
SPI_MEM_OP(SPI_MEM_OP_CMD(0xbb, 1), \
116137
SPI_MEM_OP_ADDR(2, addr, 2), \
@@ -123,6 +144,13 @@
123144
SPI_MEM_OP_DUMMY(ndummy, 2), \
124145
SPI_MEM_OP_DATA_IN(len, buf, 2))
125146

147+
#define SPINAND_PAGE_READ_FROM_CACHE_DUALIO_DTR_OP(addr, ndummy, buf, len, freq) \
148+
SPI_MEM_OP(SPI_MEM_OP_CMD(0xbd, 1), \
149+
SPI_MEM_DTR_OP_ADDR(2, addr, 2), \
150+
SPI_MEM_DTR_OP_DUMMY(ndummy, 2), \
151+
SPI_MEM_DTR_OP_DATA_IN(len, buf, 2), \
152+
SPI_MEM_OP_MAX_FREQ(freq))
153+
126154
#define SPINAND_PAGE_READ_FROM_CACHE_QUADIO_OP(addr, ndummy, buf, len) \
127155
SPI_MEM_OP(SPI_MEM_OP_CMD(0xeb, 1), \
128156
SPI_MEM_OP_ADDR(2, addr, 4), \
@@ -135,6 +163,13 @@
135163
SPI_MEM_OP_DUMMY(ndummy, 4), \
136164
SPI_MEM_OP_DATA_IN(len, buf, 4))
137165

166+
#define SPINAND_PAGE_READ_FROM_CACHE_QUADIO_DTR_OP(addr, ndummy, buf, len, freq) \
167+
SPI_MEM_OP(SPI_MEM_OP_CMD(0xed, 1), \
168+
SPI_MEM_DTR_OP_ADDR(2, addr, 4), \
169+
SPI_MEM_DTR_OP_DUMMY(ndummy, 4), \
170+
SPI_MEM_DTR_OP_DATA_IN(len, buf, 4), \
171+
SPI_MEM_OP_MAX_FREQ(freq))
172+
138173
#define SPINAND_PROG_EXEC_OP(addr) \
139174
SPI_MEM_OP(SPI_MEM_OP_CMD(0x10, 1), \
140175
SPI_MEM_OP_ADDR(3, addr, 1), \

0 commit comments

Comments
 (0)