1
2
3
4
5
6
7
8
9
10#ifndef _SF_INTERNAL_H_
11#define _SF_INTERNAL_H_
12
13#include <linux/types.h>
14#include <linux/compiler.h>
15
16
17enum spi_dual_flash {
18 SF_SINGLE_FLASH = 0,
19 SF_DUAL_STACKED_FLASH = 1 << 0,
20 SF_DUAL_PARALLEL_FLASH = 1 << 1,
21};
22
23
24enum spi_read_cmds {
25 ARRAY_SLOW = 1 << 0,
26 ARRAY_FAST = 1 << 1,
27 DUAL_OUTPUT_FAST = 1 << 2,
28 DUAL_IO_FAST = 1 << 3,
29 QUAD_OUTPUT_FAST = 1 << 4,
30 QUAD_IO_FAST = 1 << 5,
31};
32
33
34#define RD_NORM (ARRAY_SLOW | ARRAY_FAST)
35#define RD_EXTN (RD_NORM | DUAL_OUTPUT_FAST | DUAL_IO_FAST)
36#define RD_FULL (RD_EXTN | QUAD_OUTPUT_FAST | QUAD_IO_FAST)
37
38
39enum {
40 SECT_4K = 1 << 0,
41 SECT_32K = 1 << 1,
42 E_FSR = 1 << 2,
43 SST_BP = 1 << 3,
44 SST_WP = 1 << 4,
45 WR_QPP = 1 << 5,
46};
47
48#define SST_WR (SST_BP | SST_WP)
49
50#define SPI_FLASH_3B_ADDR_LEN 3
51#define SPI_FLASH_CMD_LEN (1 + SPI_FLASH_3B_ADDR_LEN)
52#define SPI_FLASH_16MB_BOUN 0x1000000
53
54
55#define SPI_FLASH_CFI_MFR_SPANSION 0x01
56#define SPI_FLASH_CFI_MFR_STMICRO 0x20
57#define SPI_FLASH_CFI_MFR_MACRONIX 0xc2
58#define SPI_FLASH_CFI_MFR_WINBOND 0xef
59
60
61#define CMD_ERASE_4K 0x20
62#define CMD_ERASE_32K 0x52
63#define CMD_ERASE_CHIP 0xc7
64#define CMD_ERASE_64K 0xd8
65
66
67#define CMD_WRITE_STATUS 0x01
68#define CMD_PAGE_PROGRAM 0x02
69#define CMD_WRITE_DISABLE 0x04
70#define CMD_READ_STATUS 0x05
71#define CMD_QUAD_PAGE_PROGRAM 0x32
72#define CMD_READ_STATUS1 0x35
73#define CMD_WRITE_ENABLE 0x06
74#define CMD_READ_CONFIG 0x35
75#define CMD_FLAG_STATUS 0x70
76
77
78#define CMD_READ_ARRAY_SLOW 0x03
79#define CMD_READ_ARRAY_FAST 0x0b
80#define CMD_READ_DUAL_OUTPUT_FAST 0x3b
81#define CMD_READ_DUAL_IO_FAST 0xbb
82#define CMD_READ_QUAD_OUTPUT_FAST 0x6b
83#define CMD_READ_QUAD_IO_FAST 0xeb
84#define CMD_READ_ID 0x9f
85
86
87#ifdef CONFIG_SPI_FLASH_BAR
88# define CMD_BANKADDR_BRWR 0x17
89# define CMD_BANKADDR_BRRD 0x16
90# define CMD_EXTNADDR_WREAR 0xC5
91# define CMD_EXTNADDR_RDEAR 0xC8
92#endif
93
94
95#define STATUS_WIP (1 << 0)
96#define STATUS_QEB_WINSPAN (1 << 1)
97#define STATUS_QEB_MXIC (1 << 6)
98#define STATUS_PEC (1 << 7)
99
100#ifdef CONFIG_SYS_SPI_ST_ENABLE_WP_PIN
101#define STATUS_SRWD (1 << 7)
102#endif
103
104
105#define SPI_FLASH_PROG_TIMEOUT (2 * CONFIG_SYS_HZ)
106#define SPI_FLASH_PAGE_ERASE_TIMEOUT (5 * CONFIG_SYS_HZ)
107#define SPI_FLASH_SECTOR_ERASE_TIMEOUT (10 * CONFIG_SYS_HZ)
108
109
110#ifdef CONFIG_SPI_FLASH_SST
111# define CMD_SST_BP 0x02
112# define CMD_SST_AAI_WP 0xAD
113
114int sst_write_wp(struct spi_flash *flash, u32 offset, size_t len,
115 const void *buf);
116int sst_write_bp(struct spi_flash *flash, u32 offset, size_t len,
117 const void *buf);
118#endif
119
120
121
122
123
124
125
126
127
128
129
130
131struct spi_flash_params {
132 const char *name;
133 u32 jedec;
134 u16 ext_jedec;
135 u32 sector_size;
136 u32 nr_sectors;
137 u8 e_rd_cmd;
138 u16 flags;
139};
140
141extern const struct spi_flash_params spi_flash_params_table[];
142
143
144int spi_flash_cmd(struct spi_slave *spi, u8 cmd, void *response, size_t len);
145
146
147
148
149
150int spi_flash_cmd_read(struct spi_slave *spi, const u8 *cmd,
151 size_t cmd_len, void *data, size_t data_len);
152
153
154
155
156
157int spi_flash_cmd_write(struct spi_slave *spi, const u8 *cmd, size_t cmd_len,
158 const void *data, size_t data_len);
159
160
161
162int spi_flash_cmd_erase_ops(struct spi_flash *flash, u32 offset, size_t len);
163
164
165int spi_flash_cmd_read_status(struct spi_flash *flash, u8 *rs);
166
167
168int spi_flash_cmd_write_status(struct spi_flash *flash, u8 ws);
169
170
171int spi_flash_cmd_read_config(struct spi_flash *flash, u8 *rc);
172
173
174int spi_flash_cmd_write_config(struct spi_flash *flash, u8 wc);
175
176
177static inline int spi_flash_cmd_write_enable(struct spi_flash *flash)
178{
179 return spi_flash_cmd(flash->spi, CMD_WRITE_ENABLE, NULL, 0);
180}
181
182
183static inline int spi_flash_cmd_write_disable(struct spi_flash *flash)
184{
185 return spi_flash_cmd(flash->spi, CMD_WRITE_DISABLE, NULL, 0);
186}
187
188
189
190
191
192int spi_flash_cmd_wait_ready(struct spi_flash *flash, unsigned long timeout);
193
194
195
196
197
198
199
200
201
202int spi_flash_write_common(struct spi_flash *flash, const u8 *cmd,
203 size_t cmd_len, const void *buf, size_t buf_len);
204
205
206
207
208
209
210int spi_flash_cmd_write_ops(struct spi_flash *flash, u32 offset,
211 size_t len, const void *buf);
212
213
214
215
216
217int spi_flash_read_common(struct spi_flash *flash, const u8 *cmd,
218 size_t cmd_len, void *data, size_t data_len);
219
220
221int spi_flash_cmd_read_ops(struct spi_flash *flash, u32 offset,
222 size_t len, void *data);
223
224#endif
225