1
2
3
4
5
6
7
8
9
10#ifndef __LINUX_MTD_SPI_NOR_H
11#define __LINUX_MTD_SPI_NOR_H
12
13#include <linux/bitops.h>
14#include <linux/mtd/cfi.h>
15#include <linux/mtd/mtd.h>
16
17
18
19
20
21
22
23#define SNOR_MFR_ATMEL CFI_MFR_ATMEL
24#define SNOR_MFR_GIGADEVICE 0xc8
25#define SNOR_MFR_INTEL CFI_MFR_INTEL
26#define SNOR_MFR_MICRON CFI_MFR_ST
27#define SNOR_MFR_MACRONIX CFI_MFR_MACRONIX
28#define SNOR_MFR_SPANSION CFI_MFR_AMD
29#define SNOR_MFR_SST CFI_MFR_SST
30#define SNOR_MFR_WINBOND 0xef
31
32
33
34
35
36
37
38
39
40
41#define SPINOR_OP_WREN 0x06
42#define SPINOR_OP_RDSR 0x05
43#define SPINOR_OP_WRSR 0x01
44#define SPINOR_OP_RDSR2 0x3f
45#define SPINOR_OP_WRSR2 0x3e
46#define SPINOR_OP_READ 0x03
47#define SPINOR_OP_READ_FAST 0x0b
48#define SPINOR_OP_READ_1_1_2 0x3b
49#define SPINOR_OP_READ_1_2_2 0xbb
50#define SPINOR_OP_READ_1_1_4 0x6b
51#define SPINOR_OP_READ_1_4_4 0xeb
52#define SPINOR_OP_PP 0x02
53#define SPINOR_OP_PP_1_1_4 0x32
54#define SPINOR_OP_PP_1_4_4 0x38
55#define SPINOR_OP_BE_4K 0x20
56#define SPINOR_OP_BE_4K_PMC 0xd7
57#define SPINOR_OP_BE_32K 0x52
58#define SPINOR_OP_CHIP_ERASE 0xc7
59#define SPINOR_OP_SE 0xd8
60#define SPINOR_OP_RDID 0x9f
61#define SPINOR_OP_RDSFDP 0x5a
62#define SPINOR_OP_RDCR 0x35
63#define SPINOR_OP_RDFSR 0x70
64#define SPINOR_OP_CLFSR 0x50
65#define SPINOR_OP_RDEAR 0xc8
66#define SPINOR_OP_WREAR 0xc5
67
68
69#define SPINOR_OP_READ_4B 0x13
70#define SPINOR_OP_READ_FAST_4B 0x0c
71#define SPINOR_OP_READ_1_1_2_4B 0x3c
72#define SPINOR_OP_READ_1_2_2_4B 0xbc
73#define SPINOR_OP_READ_1_1_4_4B 0x6c
74#define SPINOR_OP_READ_1_4_4_4B 0xec
75#define SPINOR_OP_PP_4B 0x12
76#define SPINOR_OP_PP_1_1_4_4B 0x34
77#define SPINOR_OP_PP_1_4_4_4B 0x3e
78#define SPINOR_OP_BE_4K_4B 0x21
79#define SPINOR_OP_BE_32K_4B 0x5c
80#define SPINOR_OP_SE_4B 0xdc
81
82
83#define SPINOR_OP_READ_1_1_1_DTR 0x0d
84#define SPINOR_OP_READ_1_2_2_DTR 0xbd
85#define SPINOR_OP_READ_1_4_4_DTR 0xed
86
87#define SPINOR_OP_READ_1_1_1_DTR_4B 0x0e
88#define SPINOR_OP_READ_1_2_2_DTR_4B 0xbe
89#define SPINOR_OP_READ_1_4_4_DTR_4B 0xee
90
91
92#define SPINOR_OP_BP 0x02
93#define SPINOR_OP_WRDI 0x04
94#define SPINOR_OP_AAI_WP 0xad
95
96
97#define SPINOR_OP_XSE 0x50
98#define SPINOR_OP_XPP 0x82
99#define SPINOR_OP_XRDSR 0xd7
100
101#define XSR_PAGESIZE BIT(0)
102#define XSR_RDY BIT(7)
103
104
105
106#define SPINOR_OP_EN4B 0xb7
107#define SPINOR_OP_EX4B 0xe9
108
109
110#define SPINOR_OP_BRWR 0x17
111#define SPINOR_OP_CLSR 0x30
112
113
114#define SPINOR_OP_RD_EVCR 0x65
115#define SPINOR_OP_WD_EVCR 0x61
116
117
118#define SR_WIP BIT(0)
119#define SR_WEL BIT(1)
120
121#define SR_BP0 BIT(2)
122#define SR_BP1 BIT(3)
123#define SR_BP2 BIT(4)
124#define SR_TB BIT(5)
125#define SR_SRWD BIT(7)
126
127#define SR_E_ERR BIT(5)
128#define SR_P_ERR BIT(6)
129
130#define SR_QUAD_EN_MX BIT(6)
131
132
133#define EVCR_QUAD_EN_MICRON BIT(7)
134
135
136#define FSR_READY BIT(7)
137#define FSR_E_ERR BIT(5)
138#define FSR_P_ERR BIT(4)
139#define FSR_PT_ERR BIT(1)
140
141
142#define CR_QUAD_EN_SPAN BIT(1)
143
144
145#define SR2_QUAD_EN_BIT7 BIT(7)
146
147
148#define SNOR_PROTO_INST_MASK GENMASK(23, 16)
149#define SNOR_PROTO_INST_SHIFT 16
150#define SNOR_PROTO_INST(_nbits) \
151 ((((unsigned long)(_nbits)) << SNOR_PROTO_INST_SHIFT) & \
152 SNOR_PROTO_INST_MASK)
153
154#define SNOR_PROTO_ADDR_MASK GENMASK(15, 8)
155#define SNOR_PROTO_ADDR_SHIFT 8
156#define SNOR_PROTO_ADDR(_nbits) \
157 ((((unsigned long)(_nbits)) << SNOR_PROTO_ADDR_SHIFT) & \
158 SNOR_PROTO_ADDR_MASK)
159
160#define SNOR_PROTO_DATA_MASK GENMASK(7, 0)
161#define SNOR_PROTO_DATA_SHIFT 0
162#define SNOR_PROTO_DATA(_nbits) \
163 ((((unsigned long)(_nbits)) << SNOR_PROTO_DATA_SHIFT) & \
164 SNOR_PROTO_DATA_MASK)
165
166#define SNOR_PROTO_IS_DTR BIT(24)
167
168#define SNOR_PROTO_STR(_inst_nbits, _addr_nbits, _data_nbits) \
169 (SNOR_PROTO_INST(_inst_nbits) | \
170 SNOR_PROTO_ADDR(_addr_nbits) | \
171 SNOR_PROTO_DATA(_data_nbits))
172#define SNOR_PROTO_DTR(_inst_nbits, _addr_nbits, _data_nbits) \
173 (SNOR_PROTO_IS_DTR | \
174 SNOR_PROTO_STR(_inst_nbits, _addr_nbits, _data_nbits))
175
176enum spi_nor_protocol {
177 SNOR_PROTO_1_1_1 = SNOR_PROTO_STR(1, 1, 1),
178 SNOR_PROTO_1_1_2 = SNOR_PROTO_STR(1, 1, 2),
179 SNOR_PROTO_1_1_4 = SNOR_PROTO_STR(1, 1, 4),
180 SNOR_PROTO_1_1_8 = SNOR_PROTO_STR(1, 1, 8),
181 SNOR_PROTO_1_2_2 = SNOR_PROTO_STR(1, 2, 2),
182 SNOR_PROTO_1_4_4 = SNOR_PROTO_STR(1, 4, 4),
183 SNOR_PROTO_1_8_8 = SNOR_PROTO_STR(1, 8, 8),
184 SNOR_PROTO_2_2_2 = SNOR_PROTO_STR(2, 2, 2),
185 SNOR_PROTO_4_4_4 = SNOR_PROTO_STR(4, 4, 4),
186 SNOR_PROTO_8_8_8 = SNOR_PROTO_STR(8, 8, 8),
187
188 SNOR_PROTO_1_1_1_DTR = SNOR_PROTO_DTR(1, 1, 1),
189 SNOR_PROTO_1_2_2_DTR = SNOR_PROTO_DTR(1, 2, 2),
190 SNOR_PROTO_1_4_4_DTR = SNOR_PROTO_DTR(1, 4, 4),
191 SNOR_PROTO_1_8_8_DTR = SNOR_PROTO_DTR(1, 8, 8),
192};
193
194static inline bool spi_nor_protocol_is_dtr(enum spi_nor_protocol proto)
195{
196 return !!(proto & SNOR_PROTO_IS_DTR);
197}
198
199static inline u8 spi_nor_get_protocol_inst_nbits(enum spi_nor_protocol proto)
200{
201 return ((unsigned long)(proto & SNOR_PROTO_INST_MASK)) >>
202 SNOR_PROTO_INST_SHIFT;
203}
204
205static inline u8 spi_nor_get_protocol_addr_nbits(enum spi_nor_protocol proto)
206{
207 return ((unsigned long)(proto & SNOR_PROTO_ADDR_MASK)) >>
208 SNOR_PROTO_ADDR_SHIFT;
209}
210
211static inline u8 spi_nor_get_protocol_data_nbits(enum spi_nor_protocol proto)
212{
213 return ((unsigned long)(proto & SNOR_PROTO_DATA_MASK)) >>
214 SNOR_PROTO_DATA_SHIFT;
215}
216
217static inline u8 spi_nor_get_protocol_width(enum spi_nor_protocol proto)
218{
219 return spi_nor_get_protocol_data_nbits(proto);
220}
221
222#define SPI_NOR_MAX_CMD_SIZE 8
223enum spi_nor_ops {
224 SPI_NOR_OPS_READ = 0,
225 SPI_NOR_OPS_WRITE,
226 SPI_NOR_OPS_ERASE,
227 SPI_NOR_OPS_LOCK,
228 SPI_NOR_OPS_UNLOCK,
229};
230
231enum spi_nor_option_flags {
232 SNOR_F_USE_FSR = BIT(0),
233 SNOR_F_HAS_SR_TB = BIT(1),
234 SNOR_F_NO_OP_CHIP_ERASE = BIT(2),
235 SNOR_F_S3AN_ADDR_DEFAULT = BIT(3),
236 SNOR_F_READY_XSR_RDY = BIT(4),
237 SNOR_F_USE_CLSR = BIT(5),
238};
239
240
241
242
243
244struct flash_info;
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282struct spi_nor {
283 struct mtd_info mtd;
284 struct mutex lock;
285 struct device *dev;
286 const struct flash_info *info;
287 u32 page_size;
288 u8 addr_width;
289 u8 erase_opcode;
290 u8 read_opcode;
291 u8 read_dummy;
292 u8 program_opcode;
293 enum spi_nor_protocol read_proto;
294 enum spi_nor_protocol write_proto;
295 enum spi_nor_protocol reg_proto;
296 bool sst_write_second;
297 u32 flags;
298 u8 cmd_buf[SPI_NOR_MAX_CMD_SIZE];
299
300 int (*prepare)(struct spi_nor *nor, enum spi_nor_ops ops);
301 void (*unprepare)(struct spi_nor *nor, enum spi_nor_ops ops);
302 int (*read_reg)(struct spi_nor *nor, u8 opcode, u8 *buf, int len);
303 int (*write_reg)(struct spi_nor *nor, u8 opcode, u8 *buf, int len);
304
305 ssize_t (*read)(struct spi_nor *nor, loff_t from,
306 size_t len, u_char *read_buf);
307 ssize_t (*write)(struct spi_nor *nor, loff_t to,
308 size_t len, const u_char *write_buf);
309 int (*erase)(struct spi_nor *nor, loff_t offs);
310
311 int (*flash_lock)(struct spi_nor *nor, loff_t ofs, uint64_t len);
312 int (*flash_unlock)(struct spi_nor *nor, loff_t ofs, uint64_t len);
313 int (*flash_is_locked)(struct spi_nor *nor, loff_t ofs, uint64_t len);
314 int (*quad_enable)(struct spi_nor *nor);
315
316 void *priv;
317};
318
319static inline void spi_nor_set_flash_node(struct spi_nor *nor,
320 struct device_node *np)
321{
322 mtd_set_of_node(&nor->mtd, np);
323}
324
325static inline struct device_node *spi_nor_get_flash_node(struct spi_nor *nor)
326{
327 return mtd_get_of_node(&nor->mtd);
328}
329
330
331
332
333
334
335struct spi_nor_hwcaps {
336 u32 mask;
337};
338
339
340
341
342
343
344
345
346#define SNOR_HWCAPS_READ_MASK GENMASK(14, 0)
347#define SNOR_HWCAPS_READ BIT(0)
348#define SNOR_HWCAPS_READ_FAST BIT(1)
349#define SNOR_HWCAPS_READ_1_1_1_DTR BIT(2)
350
351#define SNOR_HWCAPS_READ_DUAL GENMASK(6, 3)
352#define SNOR_HWCAPS_READ_1_1_2 BIT(3)
353#define SNOR_HWCAPS_READ_1_2_2 BIT(4)
354#define SNOR_HWCAPS_READ_2_2_2 BIT(5)
355#define SNOR_HWCAPS_READ_1_2_2_DTR BIT(6)
356
357#define SNOR_HWCAPS_READ_QUAD GENMASK(10, 7)
358#define SNOR_HWCAPS_READ_1_1_4 BIT(7)
359#define SNOR_HWCAPS_READ_1_4_4 BIT(8)
360#define SNOR_HWCAPS_READ_4_4_4 BIT(9)
361#define SNOR_HWCAPS_READ_1_4_4_DTR BIT(10)
362
363#define SNOR_HWCPAS_READ_OCTO GENMASK(14, 11)
364#define SNOR_HWCAPS_READ_1_1_8 BIT(11)
365#define SNOR_HWCAPS_READ_1_8_8 BIT(12)
366#define SNOR_HWCAPS_READ_8_8_8 BIT(13)
367#define SNOR_HWCAPS_READ_1_8_8_DTR BIT(14)
368
369
370
371
372
373
374
375
376
377
378#define SNOR_HWCAPS_PP_MASK GENMASK(22, 16)
379#define SNOR_HWCAPS_PP BIT(16)
380
381#define SNOR_HWCAPS_PP_QUAD GENMASK(19, 17)
382#define SNOR_HWCAPS_PP_1_1_4 BIT(17)
383#define SNOR_HWCAPS_PP_1_4_4 BIT(18)
384#define SNOR_HWCAPS_PP_4_4_4 BIT(19)
385
386#define SNOR_HWCAPS_PP_OCTO GENMASK(22, 20)
387#define SNOR_HWCAPS_PP_1_1_8 BIT(20)
388#define SNOR_HWCAPS_PP_1_8_8 BIT(21)
389#define SNOR_HWCAPS_PP_8_8_8 BIT(22)
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405int spi_nor_scan(struct spi_nor *nor, const char *name,
406 const struct spi_nor_hwcaps *hwcaps);
407
408
409
410
411
412void spi_nor_restore(struct spi_nor *nor);
413
414#endif
415