xref: /aosp_15_r20/external/flashrom/flashchips.c (revision 0d6140be3aa665ecc836e8907834fcd3e3b018fc)
1 /*
2  * This file is part of the flashrom project.
3  *
4  * Copyright (C) 2000 Silicon Integrated System Corporation
5  * Copyright (C) 2004 Tyan Corp
6  * Copyright (C) 2005-2008 coresystems GmbH <[email protected]>
7  * Copyright (C) 2006-2009 Carl-Daniel Hailfinger
8  * Copyright (C) 2009 Sean Nelson <[email protected]>
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  */
20 
21 #include "flash.h"
22 #include "flashchips.h"
23 #include "chipdrivers.h"
24 
25 /**
26  * List of supported flash chips.
27  *
28  * Temporarily, this file is sorted alphabetically by vendor and name to
29  * assist with merging the Chromium fork of flashrom.
30  *
31  * The usual intention is that that this list is sorted by vendor, then chip
32  * family and chip density, which is useful for the output of 'flashrom -L'.
33  */
34 const struct flashchip flashchips[] = {
35 
36 	/*
37 	 * .vendor		= Vendor name
38 	 * .name		= Chip name
39 	 * .bustype		= Supported flash bus types (Parallel, LPC...)
40 	 * .manufacture_id	= Manufacturer chip ID
41 	 * .model_id		= Model chip ID
42 	 * .total_size		= Total size in (binary) kbytes
43 	 * .page_size		= Page or eraseblock(?) size in bytes
44 	 * .tested		= Test status
45 	 * .probe		= Probe function
46 	 * .probe_timing	= Probe function delay
47 	 * .block_erasers[]	= Array of erase layouts and erase functions
48 	 * {
49 	 *	.eraseblocks[]	= Array of { blocksize, blockcount }
50 	 *	.block_erase	= Block erase function
51 	 * }
52 	 * .printlock		= Chip lock status function
53 	 * .unlock		= Chip unlock function
54 	 * .write		= Chip write function
55 	 * .read		= Chip read function
56 	 * .voltage		= Voltage range in millivolt
57 	 */
58 
59 	{
60 		.vendor		= "AMD",
61 		.name		= "Am29F002(N)BB",
62 		.bustype	= BUS_PARALLEL,
63 		.manufacture_id	= AMD_ID,
64 		.model_id	= AMD_AM29F002BB,
65 		.total_size	= 256,
66 		.page_size	= 256,
67 		.feature_bits	= FEATURE_SHORT_RESET | FEATURE_ADDR_2AA,
68 		.tested		= TEST_UNTESTED,
69 		.probe		= PROBE_JEDEC,
70 		.probe_timing	= TIMING_ZERO,
71 		.block_erasers	=
72 		{
73 			{
74 				.eraseblocks = {
75 					{16 * 1024, 1},
76 					{8 * 1024, 2},
77 					{32 * 1024, 1},
78 					{64 * 1024, 3},
79 				},
80 				.block_erase = JEDEC_SECTOR_ERASE,
81 			}, {
82 				.eraseblocks = { {256 * 1024, 1} },
83 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
84 			},
85 		},
86 		.write		= WRITE_JEDEC1,
87 		.read		= READ_MEMMAPPED,
88 		.voltage	= {4750, 5250}, /* 4.75-5.25V for type -55, others 4.5-5.5V */
89 	},
90 
91 	{
92 		.vendor		= "AMD",
93 		.name		= "Am29F002(N)BT",
94 		.bustype	= BUS_PARALLEL,
95 		.manufacture_id	= AMD_ID,
96 		.model_id	= AMD_AM29F002BT,
97 		.total_size	= 256,
98 		.page_size	= 256,
99 		.feature_bits	= FEATURE_EITHER_RESET | FEATURE_ADDR_2AA,
100 		.tested		= TEST_UNTESTED,
101 		.probe		= PROBE_JEDEC,
102 		.probe_timing	= TIMING_ZERO,
103 		.block_erasers	=
104 		{
105 			{
106 				.eraseblocks = {
107 					{64 * 1024, 3},
108 					{32 * 1024, 1},
109 					{8 * 1024, 2},
110 					{16 * 1024, 1},
111 				},
112 				.block_erase = JEDEC_SECTOR_ERASE,
113 			}, {
114 				.eraseblocks = { {256 * 1024, 1} },
115 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
116 			},
117 		},
118 		.write		= WRITE_JEDEC1,
119 		.read		= READ_MEMMAPPED,
120 		.voltage	= {4750, 5250}, /* 4.75-5.25V for type -55, others 4.5-5.5V */
121 	},
122 
123 	{
124 		.vendor		= "AMD",
125 		.name		= "Am29F010",
126 		.bustype	= BUS_PARALLEL,
127 		.manufacture_id	= AMD_ID,
128 		.model_id	= AMD_AM29F010,
129 		.total_size	= 128,
130 		.page_size	= 16 * 1024,
131 		.feature_bits	= FEATURE_SHORT_RESET,
132 		.tested		= TEST_UNTESTED,
133 		.probe		= PROBE_JEDEC,
134 		.probe_timing	= TIMING_ZERO,
135 		.block_erasers	=
136 		{
137 			{
138 				.eraseblocks = { {16 * 1024, 8} },
139 				.block_erase = JEDEC_SECTOR_ERASE,
140 			}, {
141 				.eraseblocks = { {128 * 1024, 1} },
142 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
143 			},
144 		},
145 		.write		= WRITE_JEDEC1,
146 		.read		= READ_MEMMAPPED,
147 		.voltage	= {4500, 5500},
148 	},
149 
150 	{
151 		.vendor		= "AMD",
152 		.name		= "Am29F010A/B",
153 		.bustype	= BUS_PARALLEL,
154 		.manufacture_id	= AMD_ID,
155 		.model_id	= AMD_AM29F010,
156 		.total_size	= 128,
157 		.page_size	= 16 * 1024,
158 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
159 		.tested		= TEST_OK_PRE,
160 		.probe		= PROBE_JEDEC,
161 		.probe_timing	= TIMING_ZERO,
162 		.block_erasers	=
163 		{
164 			{
165 				.eraseblocks = { {16 * 1024, 8} },
166 				.block_erase = JEDEC_SECTOR_ERASE,
167 			}, {
168 				.eraseblocks = { {128 * 1024, 1} },
169 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
170 			},
171 		},
172 		.write		= WRITE_JEDEC1,
173 		.read		= READ_MEMMAPPED,
174 		.voltage	= {4500, 5500},
175 	},
176 
177 	{
178 		.vendor		= "AMD",
179 		.name		= "Am29F016D",
180 		.bustype	= BUS_PARALLEL,
181 		.manufacture_id	= AMD_ID,
182 		.model_id	= AMD_AM29F016D,
183 		.total_size	= 2 * 1024,
184 		.page_size	= 64 * 1024,
185 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
186 		.tested		= TEST_UNTESTED,
187 		.probe		= PROBE_JEDEC,
188 		.probe_timing	= TIMING_ZERO,
189 		.block_erasers	=
190 		{
191 			{
192 				.eraseblocks = { {64 * 1024, 32} },
193 				.block_erase = JEDEC_SECTOR_ERASE,
194 			}, {
195 				.eraseblocks = { {2048 * 1024, 1} },
196 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
197 			},
198 		},
199 		.write		= WRITE_JEDEC1,
200 		.read		= READ_MEMMAPPED,
201 		.voltage	= {4500, 5500},
202 	},
203 
204 	{
205 		.vendor		= "AMD",
206 		.name		= "Am29F040",
207 		.bustype	= BUS_PARALLEL,
208 		.manufacture_id	= AMD_ID,
209 		.model_id	= AMD_AM29F040,
210 		.total_size	= 512,
211 		.page_size	= 64 * 1024,
212 		.feature_bits	= FEATURE_EITHER_RESET,
213 		.tested		= TEST_UNTESTED,
214 		.probe		= PROBE_JEDEC,
215 		.probe_timing	= TIMING_ZERO,
216 		.block_erasers	=
217 		{
218 			{
219 				.eraseblocks = { {64 * 1024, 8} },
220 				.block_erase = JEDEC_SECTOR_ERASE,
221 			}, {
222 				.eraseblocks = { {512 * 1024, 1} },
223 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
224 			},
225 		},
226 		.write		= WRITE_JEDEC1,
227 		.read		= READ_MEMMAPPED,
228 		.voltage	= {4500, 5500},
229 	},
230 
231 	{
232 		.vendor		= "AMD",
233 		.name		= "Am29F040B",
234 		.bustype	= BUS_PARALLEL,
235 		.manufacture_id	= AMD_ID,
236 		.model_id	= AMD_AM29F040,
237 		.total_size	= 512,
238 		.page_size	= 64 * 1024,
239 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
240 		.tested		= TEST_UNTESTED,
241 		.probe		= PROBE_JEDEC,
242 		.probe_timing	= TIMING_ZERO,
243 		.block_erasers	=
244 		{
245 			{
246 				.eraseblocks = { {64 * 1024, 8} },
247 				.block_erase = JEDEC_SECTOR_ERASE,
248 			}, {
249 				.eraseblocks = { {512 * 1024, 1} },
250 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
251 			},
252 		},
253 		.write		= WRITE_JEDEC1,
254 		.read		= READ_MEMMAPPED,
255 		.voltage	= {4500, 5500},
256 	},
257 
258 	{
259 		.vendor		= "AMD",
260 		.name		= "Am29F080",
261 		.bustype	= BUS_PARALLEL,
262 		.manufacture_id	= AMD_ID,
263 		.model_id	= AMD_AM29F080,
264 		.total_size	= 1024,
265 		.page_size	= 64 * 1024,
266 		.feature_bits	= FEATURE_EITHER_RESET,
267 		.tested		= TEST_UNTESTED,
268 		.probe		= PROBE_JEDEC,
269 		.probe_timing	= TIMING_ZERO,
270 		.block_erasers	=
271 		{
272 			{
273 				.eraseblocks = { {64 * 1024, 16} },
274 				.block_erase = JEDEC_SECTOR_ERASE,
275 			}, {
276 				.eraseblocks = { {1024 * 1024, 1} },
277 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
278 			},
279 		},
280 		.write		= WRITE_JEDEC1,
281 		.read		= READ_MEMMAPPED,
282 		.voltage	= {4500, 5500},
283 	},
284 
285 	{
286 		.vendor		= "AMD",
287 		.name		= "Am29F080B",
288 		.bustype	= BUS_PARALLEL,
289 		.manufacture_id	= AMD_ID,
290 		.model_id	= AMD_AM29F080,
291 		.total_size	= 1024,
292 		.page_size	= 64 * 1024,
293 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
294 		.tested		= TEST_UNTESTED,
295 		.probe		= PROBE_JEDEC,
296 		.probe_timing	= TIMING_ZERO,
297 		.block_erasers	=
298 		{
299 			{
300 				.eraseblocks = { {64 * 1024, 16} },
301 				.block_erase = JEDEC_SECTOR_ERASE,
302 			}, {
303 				.eraseblocks = { {1024 * 1024, 1} },
304 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
305 			},
306 		},
307 		.write		= WRITE_JEDEC1,
308 		.read		= READ_MEMMAPPED,
309 		.voltage	= {4500, 5500},
310 	},
311 
312 	{
313 		.vendor		= "AMD",
314 		.name		= "Am29LV001BB",
315 		.bustype	= BUS_PARALLEL,
316 		.manufacture_id	= AMD_ID,
317 		.model_id	= AMD_AM29LV001BB,
318 		.total_size	= 128,
319 		.page_size	= 64 * 1024, /* unused */
320 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
321 		.tested		= TEST_OK_PREW,
322 		.probe		= PROBE_JEDEC,
323 		.probe_timing	= TIMING_ZERO,
324 		.block_erasers	=
325 		{
326 			{
327 				.eraseblocks = {
328 					{8 * 1024, 1},
329 					{4 * 1024, 2},
330 					{16 * 1024, 7},
331 				},
332 				.block_erase = JEDEC_SECTOR_ERASE,
333 			}, {
334 				.eraseblocks = { {128 * 1024, 1} },
335 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
336 			},
337 		},
338 		.write		= WRITE_JEDEC1,
339 		.read		= READ_MEMMAPPED,
340 		.voltage	= {3000, 3600}, /* 3.0-3.6V for type -45R, others 2.7-3.6V */
341 	},
342 
343 	{
344 		.vendor		= "AMD",
345 		.name		= "Am29LV001BT",
346 		.bustype	= BUS_PARALLEL,
347 		.manufacture_id	= AMD_ID,
348 		.model_id	= AMD_AM29LV001BT,
349 		.total_size	= 128,
350 		.page_size	= 64 * 1024, /* unused */
351 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
352 		.tested		= TEST_UNTESTED,
353 		.probe		= PROBE_JEDEC,
354 		.probe_timing	= TIMING_ZERO,
355 		.block_erasers	=
356 		{
357 			{
358 				.eraseblocks = {
359 					{16 * 1024, 7},
360 					{4 * 1024, 2},
361 					{8 * 1024, 1},
362 				},
363 				.block_erase = JEDEC_SECTOR_ERASE,
364 			}, {
365 				.eraseblocks = { {128 * 1024, 1} },
366 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
367 			},
368 		},
369 		.write		= WRITE_JEDEC1,
370 		.read		= READ_MEMMAPPED,
371 		.voltage	= {3000, 3600}, /* 3.0-3.6V for type -45R, others 2.7-3.6V */
372 	},
373 
374 	{
375 		.vendor		= "AMD",
376 		.name		= "Am29LV002BB",
377 		.bustype	= BUS_PARALLEL,
378 		.manufacture_id	= AMD_ID,
379 		.model_id	= AMD_AM29LV002BB,
380 		.total_size	= 256,
381 		.page_size	= 64 * 1024, /* unused */
382 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
383 		.tested		= TEST_UNTESTED,
384 		.probe		= PROBE_JEDEC,
385 		.probe_timing	= TIMING_ZERO,
386 		.block_erasers	=
387 		{
388 			{
389 				.eraseblocks = {
390 					{16 * 1024, 1},
391 					{8 * 1024, 2},
392 					{32 * 1024, 1},
393 					{64 * 1024, 3},
394 				},
395 				.block_erase = JEDEC_SECTOR_ERASE,
396 			}, {
397 				.eraseblocks = { {256 * 1024, 1} },
398 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
399 			},
400 		},
401 		.write		= WRITE_JEDEC1,
402 		.read		= READ_MEMMAPPED,
403 		.voltage	= {3000, 3600}, /* 3.0-3.6V for type -55, others 2.7-3.6V */
404 	},
405 
406 	{
407 		.vendor		= "AMD",
408 		.name		= "Am29LV002BT",
409 		.bustype	= BUS_PARALLEL,
410 		.manufacture_id	= AMD_ID,
411 		.model_id	= AMD_AM29LV002BT,
412 		.total_size	= 256,
413 		.page_size	= 64 * 1024, /* unused */
414 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
415 		.tested		= TEST_UNTESTED,
416 		.probe		= PROBE_JEDEC,
417 		.probe_timing	= TIMING_ZERO,
418 		.block_erasers	=
419 		{
420 			{
421 				.eraseblocks = {
422 					{64 * 1024, 3},
423 					{32 * 1024, 1},
424 					{8 * 1024, 2},
425 					{16 * 1024, 1},
426 				},
427 				.block_erase = JEDEC_SECTOR_ERASE,
428 			}, {
429 				.eraseblocks = { {256 * 1024, 1} },
430 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
431 			},
432 		},
433 		.write		= WRITE_JEDEC1,
434 		.read		= READ_MEMMAPPED,
435 		.voltage	= {3000, 3600}, /* 3.0-3.6V for type -55, others 2.7-3.6V */
436 	},
437 
438 	{
439 		.vendor		= "AMD",
440 		.name		= "Am29LV004BB",
441 		.bustype	= BUS_PARALLEL,
442 		.manufacture_id	= AMD_ID,
443 		.model_id	= AMD_AM29LV004BB,
444 		.total_size	= 512,
445 		.page_size	= 64 * 1024, /* unused */
446 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
447 		.tested		= TEST_UNTESTED,
448 		.probe		= PROBE_JEDEC,
449 		.probe_timing	= TIMING_ZERO,
450 		.block_erasers	=
451 		{
452 			{
453 				.eraseblocks = {
454 					{16 * 1024, 1},
455 					{8 * 1024, 2},
456 					{32 * 1024, 1},
457 					{64 * 1024, 7},
458 				},
459 				.block_erase = JEDEC_SECTOR_ERASE,
460 			}, {
461 				.eraseblocks = { {512 * 1024, 1} },
462 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
463 			},
464 		},
465 		.write		= WRITE_JEDEC1,
466 		.read		= READ_MEMMAPPED,
467 		.voltage	= {2700, 3600},
468 	},
469 
470 	{
471 		.vendor		= "AMD",
472 		.name		= "Am29LV004BT",
473 		.bustype	= BUS_PARALLEL,
474 		.manufacture_id	= AMD_ID,
475 		.model_id	= AMD_AM29LV004BT,
476 		.total_size	= 512,
477 		.page_size	= 64 * 1024, /* unused */
478 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
479 		.tested		= TEST_UNTESTED,
480 		.probe		= PROBE_JEDEC,
481 		.probe_timing	= TIMING_ZERO,
482 		.block_erasers	=
483 		{
484 			{
485 				.eraseblocks = {
486 					{64 * 1024, 7},
487 					{32 * 1024, 1},
488 					{8 * 1024, 2},
489 					{16 * 1024, 1},
490 				},
491 				.block_erase = JEDEC_SECTOR_ERASE,
492 			}, {
493 				.eraseblocks = { {512 * 1024, 1} },
494 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
495 			},
496 		},
497 		.write		= WRITE_JEDEC1,
498 		.read		= READ_MEMMAPPED,
499 		.voltage	= {2700, 3600},
500 	},
501 
502 	{
503 		.vendor		= "AMD",
504 		.name		= "Am29LV008BB",
505 		.bustype	= BUS_PARALLEL,
506 		.manufacture_id	= AMD_ID,
507 		.model_id	= AMD_AM29LV008BB,
508 		.total_size	= 1024,
509 		.page_size	= 64 * 1024, /* unused */
510 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
511 		.tested		= TEST_OK_PREW,
512 		.probe		= PROBE_JEDEC,
513 		.probe_timing	= TIMING_ZERO,
514 		.block_erasers	=
515 		{
516 			{
517 				.eraseblocks = {
518 					{16 * 1024, 1},
519 					{8 * 1024, 2},
520 					{32 * 1024, 1},
521 					{64 * 1024, 15},
522 				},
523 				.block_erase = JEDEC_SECTOR_ERASE,
524 			}, {
525 				.eraseblocks = { {1024 * 1024, 1} },
526 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
527 			},
528 		},
529 		.write		= WRITE_JEDEC1,
530 		.read		= READ_MEMMAPPED,
531 		.voltage	= {3000, 3600}, /* 3.0-3.6V for type -70R, others 2.7-3.6V */
532 	},
533 
534 	{
535 		.vendor		= "AMD",
536 		.name		= "Am29LV008BT",
537 		.bustype	= BUS_PARALLEL,
538 		.manufacture_id	= AMD_ID,
539 		.model_id	= AMD_AM29LV008BT,
540 		.total_size	= 1024,
541 		.page_size	= 64 * 1024, /* unused */
542 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
543 		.tested		= TEST_UNTESTED,
544 		.probe		= PROBE_JEDEC,
545 		.probe_timing	= TIMING_ZERO,
546 		.block_erasers	=
547 		{
548 			{
549 				.eraseblocks = {
550 					{64 * 1024, 15},
551 					{32 * 1024, 1},
552 					{8 * 1024, 2},
553 					{16 * 1024, 1},
554 				},
555 				.block_erase = JEDEC_SECTOR_ERASE,
556 			}, {
557 				.eraseblocks = { {1024 * 1024, 1} },
558 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
559 			},
560 		},
561 		.write		= WRITE_JEDEC1,
562 		.read		= READ_MEMMAPPED,
563 		.voltage	= {3000, 3600}, /* 3.0-3.6V for type -70R, others 2.7-3.6V */
564 	},
565 
566 	{
567 		.vendor		= "AMD",
568 		.name		= "Am29LV040B",
569 		.bustype	= BUS_PARALLEL,
570 		.manufacture_id	= AMD_ID,
571 		.model_id	= AMD_AM29LV040B,
572 		.total_size	= 512,
573 		.page_size	= 64 * 1024,
574 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
575 		.tested		= TEST_OK_PREW,
576 		.probe		= PROBE_JEDEC,
577 		.probe_timing	= TIMING_ZERO,
578 		.block_erasers	=
579 		{
580 			{
581 				.eraseblocks = { {64 * 1024, 8} },
582 				.block_erase = JEDEC_SECTOR_ERASE,
583 			}, {
584 				.eraseblocks = { {512 * 1024, 1} },
585 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
586 			},
587 		},
588 		.write		= WRITE_JEDEC1,
589 		.read		= READ_MEMMAPPED,
590 		.voltage	= {3000, 3600}, /* 3.0-3.6V for type -60R, others 2.7-3.6V*/
591 	},
592 
593 	{
594 		.vendor		= "AMD",
595 		.name		= "Am29LV081B",
596 		.bustype	= BUS_PARALLEL,
597 		.manufacture_id	= AMD_ID,
598 		.model_id	= AMD_AM29LV080B,
599 		.total_size	= 1024,
600 		.page_size	= 64 * 1024,
601 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, /* datasheet specifies address as don't care */
602 		.tested		= TEST_UNTESTED,
603 		.probe		= PROBE_JEDEC,
604 		.probe_timing	= TIMING_ZERO,
605 		.block_erasers	=
606 		{
607 			{
608 				.eraseblocks = { {64 * 1024, 16} },
609 				.block_erase = JEDEC_SECTOR_ERASE,
610 			}, {
611 				.eraseblocks = { {1024 * 1024, 1} },
612 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
613 			},
614 		},
615 		.write		= WRITE_JEDEC1,
616 		.read		= READ_MEMMAPPED,
617 		.voltage	= {3000, 3600}, /* 3.0-3.6V for type -70R, others 2.7-3.6V */
618 	},
619 
620 	{
621 		.vendor		= "AMIC",
622 		.name		= "A25L010",
623 		.bustype	= BUS_SPI,
624 		.manufacture_id	= AMIC_ID_NOPREFIX,
625 		.model_id	= AMIC_A25L010,
626 		.total_size	= 128,
627 		.page_size	= 256,
628 		.feature_bits	= FEATURE_WRSR_WREN,
629 		.tested		= TEST_UNTESTED,
630 		.probe		= PROBE_SPI_RDID,
631 		.probe_timing	= TIMING_ZERO,
632 		.block_erasers	=
633 		{
634 			{
635 				.eraseblocks = { { 4 * 1024, 32 } },
636 				.block_erase = SPI_BLOCK_ERASE_20,
637 			}, {
638 				.eraseblocks = { { 64 * 1024, 2 } },
639 				.block_erase = SPI_BLOCK_ERASE_D8,
640 			}, {
641 				.eraseblocks = { { 128 * 1024, 1 } },
642 				.block_erase = SPI_BLOCK_ERASE_C7,
643 			}
644 		},
645 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
646 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
647 		.write		= SPI_CHIP_WRITE256,
648 		.read		= SPI_CHIP_READ,
649 		.voltage	= {2700, 3600},
650 	},
651 
652 	{
653 		.vendor		= "AMIC",
654 		.name		= "A25L016",
655 		.bustype	= BUS_SPI,
656 		.manufacture_id	= AMIC_ID_NOPREFIX,
657 		.model_id	= AMIC_A25L016,
658 		.total_size	= 2048,
659 		.page_size	= 256,
660 		.feature_bits	= FEATURE_WRSR_WREN,
661 		.tested		= TEST_UNTESTED,
662 		.probe		= PROBE_SPI_RDID,
663 		.probe_timing	= TIMING_ZERO,
664 		.block_erasers	=
665 		{
666 			{
667 				.eraseblocks = { { 4 * 1024, 512 } },
668 				.block_erase = SPI_BLOCK_ERASE_20,
669 			}, {
670 				.eraseblocks = { { 64 * 1024, 32 } },
671 				.block_erase = SPI_BLOCK_ERASE_D8,
672 			}, {
673 				.eraseblocks = { { 2048 * 1024, 1 } },
674 				.block_erase = SPI_BLOCK_ERASE_C7,
675 			}
676 		},
677 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
678 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
679 		.write		= SPI_CHIP_WRITE256,
680 		.read		= SPI_CHIP_READ,
681 		.voltage	= {2700, 3600},
682 	},
683 
684 	{
685 		.vendor		= "AMIC",
686 		.name		= "A25L020",
687 		.bustype	= BUS_SPI,
688 		.manufacture_id	= AMIC_ID_NOPREFIX,
689 		.model_id	= AMIC_A25L020,
690 		.total_size	= 256,
691 		.page_size	= 256,
692 		.feature_bits	= FEATURE_WRSR_WREN,
693 		.tested		= TEST_UNTESTED,
694 		.probe		= PROBE_SPI_RDID,
695 		.probe_timing	= TIMING_ZERO,
696 		.block_erasers	=
697 		{
698 			{
699 				.eraseblocks = { { 4 * 1024, 64 } },
700 				.block_erase = SPI_BLOCK_ERASE_20,
701 			}, {
702 				.eraseblocks = { { 64 * 1024, 4 } },
703 				.block_erase = SPI_BLOCK_ERASE_D8,
704 			}, {
705 				.eraseblocks = { { 256 * 1024, 1 } },
706 				.block_erase = SPI_BLOCK_ERASE_C7,
707 			}
708 		},
709 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
710 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
711 		.write		= SPI_CHIP_WRITE256,
712 		.read		= SPI_CHIP_READ,
713 		.voltage	= {2700, 3600},
714 	},
715 
716 	{
717 		.vendor		= "AMIC",
718 		.name		= "A25L032",
719 		.bustype	= BUS_SPI,
720 		.manufacture_id	= AMIC_ID_NOPREFIX,
721 		.model_id	= AMIC_A25L032,
722 		.total_size	= 4096,
723 		.page_size	= 256,
724 		/* OTP: 64B total; read 0x4B, 0x48; write 0x42 */
725 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
726 		.tested		= TEST_OK_PREW,
727 		.probe		= PROBE_SPI_RDID,
728 		.probe_timing	= TIMING_ZERO,
729 		.block_erasers	=
730 		{
731 			{
732 				.eraseblocks = { { 4 * 1024, 1024 } },
733 				.block_erase = SPI_BLOCK_ERASE_20,
734 			}, {
735 				.eraseblocks = { { 64 * 1024, 64 } },
736 				.block_erase = SPI_BLOCK_ERASE_52,
737 			}, {
738 				.eraseblocks = { { 64 * 1024, 64 } },
739 				.block_erase = SPI_BLOCK_ERASE_D8,
740 			}, {
741 				.eraseblocks = { { 4096 * 1024, 1 } },
742 				.block_erase = SPI_BLOCK_ERASE_60,
743 			}, {
744 				.eraseblocks = { { 4096 * 1024, 1 } },
745 				.block_erase = SPI_BLOCK_ERASE_C7,
746 			}
747 		},
748 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_SRWD_SEC_TB_BP2_WELWIP,
749 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD, /* TODO: 2nd status reg (read with 0x35) */
750 		.write		= SPI_CHIP_WRITE256,
751 		.read		= SPI_CHIP_READ,
752 		.voltage	= {2700, 3600},
753 	},
754 
755 	{
756 		.vendor		= "AMIC",
757 		.name		= "A25L040",
758 		.bustype	= BUS_SPI,
759 		.manufacture_id	= AMIC_ID_NOPREFIX,
760 		.model_id	= AMIC_A25L040,
761 		.total_size	= 512,
762 		.page_size	= 256,
763 		.feature_bits	= FEATURE_WRSR_WREN,
764 		.tested		= TEST_UNTESTED,
765 		.probe		= PROBE_SPI_RDID,
766 		.probe_timing	= TIMING_ZERO,
767 		.block_erasers	=
768 		{
769 			{
770 				.eraseblocks = { { 4 * 1024, 128 } },
771 				.block_erase = SPI_BLOCK_ERASE_20,
772 			}, {
773 				.eraseblocks = { { 64 * 1024, 8 } },
774 				.block_erase = SPI_BLOCK_ERASE_D8,
775 			}, {
776 				.eraseblocks = { { 512 * 1024, 1 } },
777 				.block_erase = SPI_BLOCK_ERASE_C7,
778 			}
779 		},
780 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
781 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
782 		.write		= SPI_CHIP_WRITE256,
783 		.read		= SPI_CHIP_READ,
784 		.voltage	= {2700, 3600},
785 	},
786 
787 	{
788 		.vendor		= "AMIC",
789 		.name		= "A25L05PT",
790 		.bustype	= BUS_SPI,
791 		.manufacture_id	= AMIC_ID,
792 		.model_id	= AMIC_A25L05PT,
793 		.total_size	= 64,
794 		.page_size	= 256,
795 		.feature_bits	= FEATURE_WRSR_WREN,
796 		.tested		= TEST_UNTESTED,
797 		.probe		= PROBE_SPI_RDID4,
798 		.probe_timing	= TIMING_ZERO,
799 		.block_erasers	=
800 		{
801 			{
802 				.eraseblocks = {
803 					{32 * 1024, 1},
804 					{16 * 1024, 1},
805 					{8 * 1024, 1},
806 					{4 * 1024, 2},
807 				},
808 				.block_erase = SPI_BLOCK_ERASE_D8,
809 			}, {
810 				.eraseblocks = { {64 * 1024, 1} },
811 				.block_erase = SPI_BLOCK_ERASE_C7,
812 			}
813 		},
814 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP1_SRWD,
815 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
816 		.write		= SPI_CHIP_WRITE256,
817 		.read		= SPI_CHIP_READ,
818 		.voltage	= {2700, 3600},
819 	},
820 
821 	{
822 		.vendor		= "AMIC",
823 		.name		= "A25L05PU",
824 		.bustype	= BUS_SPI,
825 		.manufacture_id	= AMIC_ID,
826 		.model_id	= AMIC_A25L05PU,
827 		.total_size	= 64,
828 		.page_size	= 256,
829 		.feature_bits	= FEATURE_WRSR_WREN,
830 		.tested		= TEST_UNTESTED,
831 		.probe		= PROBE_SPI_RDID4,
832 		.probe_timing	= TIMING_ZERO,
833 		.block_erasers	=
834 		{
835 			{
836 				.eraseblocks = {
837 					{4 * 1024, 2},
838 					{8 * 1024, 1},
839 					{16 * 1024, 1},
840 					{32 * 1024, 1},
841 				},
842 				.block_erase = SPI_BLOCK_ERASE_D8,
843 			}, {
844 				.eraseblocks = { {64 * 1024, 1} },
845 				.block_erase = SPI_BLOCK_ERASE_C7,
846 			}
847 		},
848 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP1_SRWD,
849 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
850 		.write		= SPI_CHIP_WRITE256,
851 		.read		= SPI_CHIP_READ,
852 		.voltage	= {2700, 3600},
853 	},
854 
855 	{
856 		.vendor		= "AMIC",
857 		.name		= "A25L080",
858 		.bustype	= BUS_SPI,
859 		.manufacture_id	= AMIC_ID_NOPREFIX,
860 		.model_id	= AMIC_A25L080,
861 		.total_size	= 1024,
862 		.page_size	= 256,
863 		.feature_bits	= FEATURE_WRSR_WREN,
864 		.tested		= TEST_UNTESTED,
865 		.probe		= PROBE_SPI_RDID,
866 		.probe_timing	= TIMING_ZERO,
867 		.block_erasers	=
868 		{
869 			{
870 				.eraseblocks = { { 4 * 1024, 256 } },
871 				.block_erase = SPI_BLOCK_ERASE_20,
872 			}, {
873 				.eraseblocks = { { 64 * 1024, 16 } },
874 				.block_erase = SPI_BLOCK_ERASE_D8,
875 			}, {
876 				.eraseblocks = { { 1024 * 1024, 1 } },
877 				.block_erase = SPI_BLOCK_ERASE_C7,
878 			}
879 		},
880 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
881 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
882 		.write		= SPI_CHIP_WRITE256,
883 		.read		= SPI_CHIP_READ,
884 		.voltage	= {2700, 3600},
885 	},
886 
887 	{
888 		.vendor		= "AMIC",
889 		.name		= "A25L10PT",
890 		.bustype	= BUS_SPI,
891 		.manufacture_id	= AMIC_ID,
892 		.model_id	= AMIC_A25L10PT,
893 		.total_size	= 128,
894 		.page_size	= 256,
895 		.feature_bits	= FEATURE_WRSR_WREN,
896 		.tested		= TEST_UNTESTED,
897 		.probe		= PROBE_SPI_RDID4,
898 		.probe_timing	= TIMING_ZERO,
899 		.block_erasers	=
900 		{
901 			{
902 				.eraseblocks = {
903 					{64 * 1024, 1},
904 					{32 * 1024, 1},
905 					{16 * 1024, 1},
906 					{8 * 1024, 1},
907 					{4 * 1024, 2},
908 				},
909 				.block_erase = SPI_BLOCK_ERASE_D8,
910 			}, {
911 				.eraseblocks = { {128 * 1024, 1} },
912 				.block_erase = SPI_BLOCK_ERASE_C7,
913 			}
914 		},
915 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP1_SRWD,
916 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
917 		.write		= SPI_CHIP_WRITE256,
918 		.read		= SPI_CHIP_READ,
919 		.voltage	= {2700, 3600},
920 	},
921 
922 	{
923 		.vendor		= "AMIC",
924 		.name		= "A25L10PU",
925 		.bustype	= BUS_SPI,
926 		.manufacture_id	= AMIC_ID,
927 		.model_id	= AMIC_A25L10PU,
928 		.total_size	= 128,
929 		.page_size	= 256,
930 		.feature_bits	= FEATURE_WRSR_WREN,
931 		.tested		= TEST_UNTESTED,
932 		.probe		= PROBE_SPI_RDID4,
933 		.probe_timing	= TIMING_ZERO,
934 		.block_erasers	=
935 		{
936 			{
937 				.eraseblocks = {
938 					{4 * 1024, 2},
939 					{8 * 1024, 1},
940 					{16 * 1024, 1},
941 					{32 * 1024, 1},
942 					{64 * 1024, 1},
943 				},
944 				.block_erase = SPI_BLOCK_ERASE_D8,
945 			}, {
946 				.eraseblocks = { {128 * 1024, 1} },
947 				.block_erase = SPI_BLOCK_ERASE_C7,
948 			}
949 		},
950 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP1_SRWD,
951 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
952 		.write		= SPI_CHIP_WRITE256,
953 		.read		= SPI_CHIP_READ,
954 		.voltage	= {2700, 3600},
955 	},
956 
957 	{
958 		.vendor		= "AMIC",
959 		.name		= "A25L16PT",
960 		.bustype	= BUS_SPI,
961 		.manufacture_id	= AMIC_ID,
962 		.model_id	= AMIC_A25L16PT,
963 		.total_size	= 2048,
964 		.page_size	= 256,
965 		.feature_bits	= FEATURE_WRSR_WREN,
966 		.tested		= TEST_UNTESTED,
967 		.probe		= PROBE_SPI_RDID4,
968 		.probe_timing	= TIMING_ZERO,
969 		.block_erasers	=
970 		{
971 			{
972 				.eraseblocks = {
973 					{64 * 1024, 31},
974 					{32 * 1024, 1},
975 					{16 * 1024, 1},
976 					{8 * 1024, 1},
977 					{4 * 1024, 2},
978 				},
979 				.block_erase = SPI_BLOCK_ERASE_D8,
980 			}, {
981 				.eraseblocks = { {2048 * 1024, 1} },
982 				.block_erase = SPI_BLOCK_ERASE_60,
983 			}, {
984 				.eraseblocks = { {2048 * 1024, 1} },
985 				.block_erase = SPI_BLOCK_ERASE_C7,
986 			}
987 		},
988 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
989 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
990 		.write		= SPI_CHIP_WRITE256,
991 		.read		= SPI_CHIP_READ,
992 		.voltage	= {2700, 3600},
993 	},
994 
995 	{
996 		.vendor		= "AMIC",
997 		.name		= "A25L16PU",
998 		.bustype	= BUS_SPI,
999 		.manufacture_id	= AMIC_ID,
1000 		.model_id	= AMIC_A25L16PU,
1001 		.total_size	= 2048,
1002 		.page_size	= 256,
1003 		.feature_bits	= FEATURE_WRSR_WREN,
1004 		.tested		= TEST_OK_PR,
1005 		.probe		= PROBE_SPI_RDID4,
1006 		.probe_timing	= TIMING_ZERO,
1007 		.block_erasers	=
1008 		{
1009 			{
1010 				.eraseblocks = {
1011 					{4 * 1024, 2},
1012 					{8 * 1024, 1},
1013 					{16 * 1024, 1},
1014 					{32 * 1024, 1},
1015 					{64 * 1024, 31},
1016 				},
1017 				.block_erase = SPI_BLOCK_ERASE_D8,
1018 			}, {
1019 				.eraseblocks = { {2048 * 1024, 1} },
1020 				.block_erase = SPI_BLOCK_ERASE_60,
1021 			}, {
1022 				.eraseblocks = { {2048 * 1024, 1} },
1023 				.block_erase = SPI_BLOCK_ERASE_C7,
1024 			}
1025 		},
1026 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
1027 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
1028 		.write		= SPI_CHIP_WRITE256,
1029 		.read		= SPI_CHIP_READ,
1030 		.voltage	= {2700, 3600},
1031 	},
1032 
1033 	{
1034 		.vendor		= "AMIC",
1035 		.name		= "A25L20PT",
1036 		.bustype	= BUS_SPI,
1037 		.manufacture_id	= AMIC_ID,
1038 		.model_id	= AMIC_A25L20PT,
1039 		.total_size	= 256,
1040 		.page_size	= 256,
1041 		.feature_bits	= FEATURE_WRSR_WREN,
1042 		.tested		= TEST_UNTESTED,
1043 		.probe		= PROBE_SPI_RDID4,
1044 		.probe_timing	= TIMING_ZERO,
1045 		.block_erasers	=
1046 		{
1047 			{
1048 				.eraseblocks = {
1049 					{64 * 1024, 3},
1050 					{32 * 1024, 1},
1051 					{16 * 1024, 1},
1052 					{8 * 1024, 1},
1053 					{4 * 1024, 2},
1054 				},
1055 				.block_erase = SPI_BLOCK_ERASE_D8,
1056 			}, {
1057 				.eraseblocks = { {256 * 1024, 1} },
1058 				.block_erase = SPI_BLOCK_ERASE_C7,
1059 			}
1060 		},
1061 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP1_SRWD,
1062 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
1063 		.write		= SPI_CHIP_WRITE256,
1064 		.read		= SPI_CHIP_READ,
1065 		.voltage	= {2700, 3600},
1066 	},
1067 
1068 	{
1069 		.vendor		= "AMIC",
1070 		.name		= "A25L20PU",
1071 		.bustype	= BUS_SPI,
1072 		.manufacture_id	= AMIC_ID,
1073 		.model_id	= AMIC_A25L20PU,
1074 		.total_size	= 256,
1075 		.page_size	= 256,
1076 		.feature_bits	= FEATURE_WRSR_WREN,
1077 		.tested		= TEST_UNTESTED,
1078 		.probe		= PROBE_SPI_RDID4,
1079 		.probe_timing	= TIMING_ZERO,
1080 		.block_erasers	=
1081 		{
1082 			{
1083 				.eraseblocks = {
1084 					{4 * 1024, 2},
1085 					{8 * 1024, 1},
1086 					{16 * 1024, 1},
1087 					{32 * 1024, 1},
1088 					{64 * 1024, 3},
1089 				},
1090 				.block_erase = SPI_BLOCK_ERASE_D8,
1091 			}, {
1092 				.eraseblocks = { {256 * 1024, 1} },
1093 				.block_erase = SPI_BLOCK_ERASE_C7,
1094 			}
1095 		},
1096 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP1_SRWD,
1097 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
1098 		.write		= SPI_CHIP_WRITE256,
1099 		.read		= SPI_CHIP_READ,
1100 		.voltage	= {2700, 3600},
1101 	},
1102 
1103 	/* The A25L40P{T,U} chips are distinguished by their
1104 	 * erase block layouts, but without any distinction in RDID.
1105 	 * This inexplicable quirk was verified by Rudolf Marek
1106 	 * and discussed on the flashrom mailing list on 2010-07-12.
1107 	 */
1108 	{
1109 		.vendor		= "AMIC",
1110 		.name		= "A25L40PT",
1111 		.bustype	= BUS_SPI,
1112 		.manufacture_id	= AMIC_ID,
1113 		.model_id	= AMIC_A25L40PT,
1114 		.total_size	= 512,
1115 		.page_size	= 256,
1116 		.feature_bits	= FEATURE_WRSR_WREN,
1117 		.tested		= TEST_OK_PR,
1118 		.probe		= PROBE_SPI_RDID4,
1119 		.probe_timing	= TIMING_ZERO,
1120 		.block_erasers	=
1121 		{
1122 			{
1123 				.eraseblocks = {
1124 					{64 * 1024, 7},
1125 					{32 * 1024, 1},
1126 					{16 * 1024, 1},
1127 					{8 * 1024, 1},
1128 					{4 * 1024, 2},
1129 				},
1130 				.block_erase = SPI_BLOCK_ERASE_D8,
1131 			}, {
1132 				.eraseblocks = { {512 * 1024, 1} },
1133 				.block_erase = SPI_BLOCK_ERASE_C7,
1134 			}
1135 		},
1136 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
1137 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
1138 		.write		= SPI_CHIP_WRITE256,
1139 		.read		= SPI_CHIP_READ,
1140 		.voltage	= {2700, 3600},
1141 	},
1142 
1143 	{
1144 		.vendor		= "AMIC",
1145 		.name		= "A25L40PU",
1146 		.bustype	= BUS_SPI,
1147 		.manufacture_id	= AMIC_ID,
1148 		.model_id	= AMIC_A25L40PU,
1149 		.total_size	= 512,
1150 		.page_size	= 256,
1151 		.feature_bits	= FEATURE_WRSR_WREN,
1152 		.tested		= TEST_OK_PREW,
1153 		.probe		= PROBE_SPI_RDID4,
1154 		.probe_timing	= TIMING_ZERO,
1155 		.block_erasers	=
1156 		{
1157 			{
1158 				.eraseblocks = {
1159 					{4 * 1024, 2},
1160 					{8 * 1024, 1},
1161 					{16 * 1024, 1},
1162 					{32 * 1024, 1},
1163 					{64 * 1024, 7},
1164 				},
1165 				.block_erase = SPI_BLOCK_ERASE_D8,
1166 			}, {
1167 				.eraseblocks = { {512 * 1024, 1} },
1168 				.block_erase = SPI_BLOCK_ERASE_C7,
1169 			}
1170 		},
1171 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
1172 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
1173 		.write		= SPI_CHIP_WRITE256,
1174 		.read		= SPI_CHIP_READ,
1175 		.voltage	= {2700, 3600},
1176 	},
1177 
1178 	{
1179 		.vendor		= "AMIC",
1180 		.name		= "A25L512",
1181 		.bustype	= BUS_SPI,
1182 		.manufacture_id	= AMIC_ID_NOPREFIX,
1183 		.model_id	= AMIC_A25L512,
1184 		.total_size	= 64,
1185 		.page_size	= 256,
1186 		.feature_bits	= FEATURE_WRSR_WREN,
1187 		.tested		= TEST_UNTESTED,
1188 		.probe		= PROBE_SPI_RDID,
1189 		.probe_timing	= TIMING_ZERO,
1190 		.block_erasers	=
1191 		{
1192 			{
1193 				.eraseblocks = { { 4 * 1024, 16 } },
1194 				.block_erase = SPI_BLOCK_ERASE_20,
1195 			}, {
1196 				.eraseblocks = { { 64 * 1024, 1 } },
1197 				.block_erase = SPI_BLOCK_ERASE_D8,
1198 			}, {
1199 				.eraseblocks = { { 64 * 1024, 1 } },
1200 				.block_erase = SPI_BLOCK_ERASE_C7,
1201 			}
1202 		},
1203 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
1204 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
1205 		.write		= SPI_CHIP_WRITE256,
1206 		.read		= SPI_CHIP_READ,
1207 		.voltage	= {2700, 3600},
1208 	},
1209 
1210 	{
1211 		.vendor		= "AMIC",
1212 		.name		= "A25L80P",
1213 		.bustype	= BUS_SPI,
1214 		.manufacture_id	= AMIC_ID,
1215 		.model_id	= AMIC_A25L80P,
1216 		.total_size	= 1024,
1217 		.page_size	= 256,
1218 		.feature_bits	= FEATURE_WRSR_WREN,
1219 		.tested		= TEST_OK_PRE,
1220 		.probe		= PROBE_SPI_RDID4,
1221 		.probe_timing	= TIMING_ZERO,
1222 		.block_erasers	=
1223 		{
1224 			{
1225 				.eraseblocks = {
1226 					{4 * 1024, 2},
1227 					{8 * 1024, 1},
1228 					{16 * 1024, 1},
1229 					{32 * 1024, 1},
1230 					{64 * 1024, 15},
1231 				},
1232 				.block_erase = SPI_BLOCK_ERASE_D8,
1233 			}, {
1234 				.eraseblocks = { {1024 * 1024, 1} },
1235 				.block_erase = SPI_BLOCK_ERASE_C7,
1236 			}
1237 		},
1238 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
1239 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
1240 		.write		= SPI_CHIP_WRITE256,
1241 		.read		= SPI_CHIP_READ,
1242 		.voltage	= {2700, 3600},
1243 	},
1244 
1245 	{
1246 		.vendor		= "AMIC",
1247 		.name		= "A25LQ032/A25LQ32A",
1248 		.bustype	= BUS_SPI,
1249 		.manufacture_id	= AMIC_ID_NOPREFIX,
1250 		.model_id	= AMIC_A25LQ032,
1251 		.total_size	= 4096,
1252 		.page_size	= 256,
1253 		/* A25LQ32A supports SFDP */
1254 		/* OTP: 64B total; read 0x4B, 0x48; write 0x42 */
1255 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
1256 		.tested		= TEST_UNTESTED,
1257 		.probe		= PROBE_SPI_RDID,
1258 		.probe_timing	= TIMING_ZERO,
1259 		.block_erasers	=
1260 		{
1261 			{
1262 				.eraseblocks = { { 4 * 1024, 1024 } },
1263 				.block_erase = SPI_BLOCK_ERASE_20,
1264 			}, {
1265 				.eraseblocks = { { 64 * 1024, 64 } },
1266 				.block_erase = SPI_BLOCK_ERASE_52,
1267 			}, {
1268 				.eraseblocks = { { 64 * 1024, 64 } },
1269 				.block_erase = SPI_BLOCK_ERASE_D8,
1270 			}, {
1271 				.eraseblocks = { { 4096 * 1024, 1 } },
1272 				.block_erase = SPI_BLOCK_ERASE_60,
1273 			}, {
1274 				.eraseblocks = { { 4096 * 1024, 1 } },
1275 				.block_erase = SPI_BLOCK_ERASE_C7,
1276 			}
1277 		},
1278 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_SRWD_SEC_TB_BP2_WELWIP,
1279 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD, /* TODO: 2nd status reg (read with 0x35) */
1280 		.write		= SPI_CHIP_WRITE256,
1281 		.read		= SPI_CHIP_READ,
1282 		.voltage	= {2700, 3600},
1283 	},
1284 
1285 	{
1286 		.vendor		= "AMIC",
1287 		.name		= "A25LQ16",
1288 		.bustype	= BUS_SPI,
1289 		.manufacture_id	= AMIC_ID_NOPREFIX,
1290 		.model_id	= AMIC_A25LQ16,
1291 		.total_size	= 2048,
1292 		.page_size	= 256,
1293 		/* supports SFDP */
1294 		/* OTP: 64B total; read 0x4B, 0x48; write 0x42 */
1295 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
1296 		.tested		= TEST_UNTESTED,
1297 		.probe		= PROBE_SPI_RDID,
1298 		.probe_timing	= TIMING_ZERO,
1299 		.block_erasers	=
1300 		{
1301 			{
1302 				.eraseblocks = { { 4 * 1024, 512 } },
1303 				.block_erase = SPI_BLOCK_ERASE_20,
1304 			}, {
1305 				.eraseblocks = { { 64 * 1024, 32 } },
1306 				.block_erase = SPI_BLOCK_ERASE_52,
1307 			}, {
1308 				.eraseblocks = { { 64 * 1024, 32 } },
1309 				.block_erase = SPI_BLOCK_ERASE_D8,
1310 			}, {
1311 				.eraseblocks = { { 2048 * 1024, 1 } },
1312 				.block_erase = SPI_BLOCK_ERASE_60,
1313 			}, {
1314 				.eraseblocks = { { 2048 * 1024, 1 } },
1315 				.block_erase = SPI_BLOCK_ERASE_C7,
1316 			}
1317 		},
1318 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_SRWD_SEC_TB_BP2_WELWIP,
1319 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD, /* TODO: 2nd status reg (read with 0x35) */
1320 		.write		= SPI_CHIP_WRITE256,
1321 		.read		= SPI_CHIP_READ,
1322 		.voltage	= {2700, 3600},
1323 	},
1324 
1325 	{
1326 		.vendor		= "AMIC",
1327 		.name		= "A25LQ64",
1328 		.bustype	= BUS_SPI,
1329 		.manufacture_id	= AMIC_ID_NOPREFIX,
1330 		.model_id	= AMIC_A25LQ64,
1331 		.total_size	= 8192,
1332 		.page_size	= 256,
1333 		/* supports SFDP */
1334 		/* OTP: 512B total; enter 0xB1, exit 0xC1 */
1335 		/* QPI enable 0x35, disable 0xF5 */
1336 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
1337 		.tested		= TEST_UNTESTED,
1338 		.probe		= PROBE_SPI_RDID,
1339 		.probe_timing	= TIMING_ZERO,
1340 		.block_erasers	=
1341 		{
1342 			{
1343 				.eraseblocks = { { 4 * 1024, 2048 } },
1344 				.block_erase = SPI_BLOCK_ERASE_20,
1345 			}, {
1346 				.eraseblocks = { { 32 * 1024, 256 } },
1347 				.block_erase = SPI_BLOCK_ERASE_52,
1348 			}, {
1349 				.eraseblocks = { { 64 * 1024, 128 } },
1350 				.block_erase = SPI_BLOCK_ERASE_D8,
1351 			}, {
1352 				.eraseblocks = { { 8192 * 1024, 1 } },
1353 				.block_erase = SPI_BLOCK_ERASE_60,
1354 			}, {
1355 				.eraseblocks = { { 8192 * 1024, 1 } },
1356 				.block_erase = SPI_BLOCK_ERASE_C7,
1357 			}
1358 		},
1359 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enhance (sic!) */
1360 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
1361 		.write		= SPI_CHIP_WRITE256,
1362 		.read		= SPI_CHIP_READ,
1363 		.voltage	= {2700, 3600},
1364 	},
1365 
1366 	{
1367 		.vendor		= "AMIC",
1368 		.name		= "A29002B",
1369 		.bustype	= BUS_PARALLEL,
1370 		.manufacture_id	= AMIC_ID_NOPREFIX,
1371 		.model_id	= AMIC_A29002B,
1372 		.total_size	= 256,
1373 		.page_size	= 64 * 1024,
1374 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
1375 		.tested		= TEST_UNTESTED,
1376 		.probe		= PROBE_JEDEC,
1377 		.probe_timing	= TIMING_ZERO,
1378 		.block_erasers	=
1379 		{
1380 			{
1381 				.eraseblocks = {
1382 					{16 * 1024, 1},
1383 					{8 * 1024, 2},
1384 					{32 * 1024, 1},
1385 					{64 * 1024, 3},
1386 				},
1387 				.block_erase = JEDEC_SECTOR_ERASE,
1388 			}, {
1389 				.eraseblocks = { {256 * 1024, 1} },
1390 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
1391 			},
1392 		},
1393 		.write		= WRITE_JEDEC1,
1394 		.read		= READ_MEMMAPPED,
1395 		.voltage	= {4500, 5500},
1396 	},
1397 
1398 	{
1399 		.vendor		= "AMIC",
1400 		.name		= "A29002T",
1401 		.bustype	= BUS_PARALLEL,
1402 		.manufacture_id	= AMIC_ID_NOPREFIX,
1403 		.model_id	= AMIC_A29002T,
1404 		.total_size	= 256,
1405 		.page_size	= 64 * 1024,
1406 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
1407 		.tested		= TEST_OK_PREW,
1408 		.probe		= PROBE_JEDEC,
1409 		.probe_timing	= TIMING_ZERO,
1410 		.block_erasers	=
1411 		{
1412 			{
1413 				.eraseblocks = {
1414 					{64 * 1024, 3},
1415 					{32 * 1024, 1},
1416 					{8 * 1024, 2},
1417 					{16 * 1024, 1},
1418 				},
1419 				.block_erase = JEDEC_SECTOR_ERASE,
1420 			}, {
1421 				.eraseblocks = { {256 * 1024, 1} },
1422 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
1423 			},
1424 		},
1425 		.write		= WRITE_JEDEC1,
1426 		.read		= READ_MEMMAPPED,
1427 		.voltage	= {4500, 5500},
1428 	},
1429 
1430 	{
1431 		.vendor		= "AMIC",
1432 		.name		= "A29040B",
1433 		.bustype	= BUS_PARALLEL,
1434 		.manufacture_id	= AMIC_ID_NOPREFIX,
1435 		.model_id	= AMIC_A29040B,
1436 		.total_size	= 512,
1437 		.page_size	= 64 * 1024,
1438 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
1439 		.tested		= TEST_OK_PREW,
1440 		.probe		= PROBE_JEDEC,
1441 		.probe_timing	= TIMING_ZERO,
1442 		.block_erasers	=
1443 		{
1444 			{
1445 				.eraseblocks = { {64 * 1024, 8} },
1446 				.block_erase = JEDEC_SECTOR_ERASE,
1447 			}, {
1448 				.eraseblocks = { {512 * 1024, 1} },
1449 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
1450 			},
1451 		},
1452 		.write		= WRITE_JEDEC1,
1453 		.read		= READ_MEMMAPPED,
1454 		.voltage	= {4500, 5500},
1455 	},
1456 
1457 	{
1458 		.vendor		= "AMIC",
1459 		.name		= "A49LF040A",
1460 		.bustype	= BUS_LPC,
1461 		.manufacture_id	= AMIC_ID_NOPREFIX,
1462 		.model_id	= AMIC_A49LF040A,
1463 		.total_size	= 512,
1464 		.page_size	= 64 * 1024,
1465 		.feature_bits	= FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
1466 		.tested		= TEST_OK_PR,
1467 		.probe		= PROBE_JEDEC,
1468 		.probe_timing	= TIMING_ZERO,	/* routine is wrapper to probe_jedec (pm49fl00x.c) */
1469 		.block_erasers	=
1470 		{
1471 			{
1472 				.eraseblocks = { {64 * 1024, 8} },
1473 				.block_erase = JEDEC_BLOCK_ERASE,
1474 			}, {
1475 				.eraseblocks = { {512 * 1024, 1} },
1476 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
1477 			}
1478 		},
1479 		.unlock		= UNLOCK_REGSPACE2_UNIFORM_64K,
1480 		.write		= WRITE_JEDEC1,
1481 		.read		= READ_MEMMAPPED,
1482 		.voltage	= {3000, 3600},
1483 	},
1484 
1485 	{
1486 		.vendor		= "Atmel",
1487 		.name		= "AT25DF011",
1488 		.bustype	= BUS_SPI,
1489 		.manufacture_id	= ATMEL_ID,
1490 		.model_id	= ATMEL_AT25DF011,
1491 		.total_size	= 128,
1492 		.page_size	= 256,
1493 		/* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */
1494 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
1495 		.tested		= TEST_OK_PREW,
1496 		.probe		= PROBE_SPI_RDID,
1497 		.probe_timing	= TIMING_ZERO,
1498 		.block_erasers	=
1499 		{
1500 			{
1501 				.eraseblocks = { {4 * 1024, 32} },
1502 				.block_erase = SPI_BLOCK_ERASE_20,
1503 			}, {
1504 				.eraseblocks = { {32 * 1024, 4} },
1505 				.block_erase = SPI_BLOCK_ERASE_52,
1506 			}, {
1507 				.eraseblocks = { {32 * 1024, 4} },
1508 				.block_erase = SPI_BLOCK_ERASE_D8,
1509 			}, {
1510 				.eraseblocks = { {128 * 1024, 1} },
1511 				.block_erase = SPI_BLOCK_ERASE_60,
1512 			}, {
1513 				.eraseblocks = { {128 * 1024, 1} },
1514 				.block_erase = SPI_BLOCK_ERASE_C7,
1515 			}
1516 		},
1517 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_AT25DF,
1518 		.unlock		= SPI_DISABLE_BLOCKPROTECT_AT2X_GLOBAL_UNPROTECT,
1519 		.write		= SPI_CHIP_WRITE256,
1520 		.read		= SPI_CHIP_READ,
1521 		.voltage	= {1650, 3600},
1522 	},
1523 
1524 	{
1525 		.vendor		= "Atmel",
1526 		.name		= "AT25DF021",
1527 		.bustype	= BUS_SPI,
1528 		.manufacture_id	= ATMEL_ID,
1529 		.model_id	= ATMEL_AT25DF021,
1530 		.total_size	= 256,
1531 		.page_size	= 256,
1532 		/* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */
1533 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
1534 		.tested		= TEST_UNTESTED,
1535 		.probe		= PROBE_SPI_RDID,
1536 		.probe_timing	= TIMING_ZERO,
1537 		.block_erasers	=
1538 		{
1539 			{
1540 				.eraseblocks = { {4 * 1024, 64} },
1541 				.block_erase = SPI_BLOCK_ERASE_20,
1542 			}, {
1543 				.eraseblocks = { {32 * 1024, 8} },
1544 				.block_erase = SPI_BLOCK_ERASE_52,
1545 			}, {
1546 				.eraseblocks = { {64 * 1024, 4} },
1547 				.block_erase = SPI_BLOCK_ERASE_D8,
1548 			}, {
1549 				.eraseblocks = { {256 * 1024, 1} },
1550 				.block_erase = SPI_BLOCK_ERASE_60,
1551 			}, {
1552 				.eraseblocks = { {256 * 1024, 1} },
1553 				.block_erase = SPI_BLOCK_ERASE_C7,
1554 			}
1555 		},
1556 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_AT25DF,
1557 		.unlock		= SPI_DISABLE_BLOCKPROTECT_AT2X_GLOBAL_UNPROTECT,
1558 		.write		= SPI_CHIP_WRITE256,
1559 		.read		= SPI_CHIP_READ,
1560 		.voltage	= {2700, 3600}, /* 2.3-3.6V & 2.7-3.6V models available */
1561 	},
1562 
1563 	{
1564 		.vendor		= "Atmel",
1565 		.name		= "AT25DF021A",
1566 		.bustype	= BUS_SPI,
1567 		.manufacture_id	= ATMEL_ID,
1568 		.model_id	= ATMEL_AT25DF021A,
1569 		.total_size	= 256,
1570 		.page_size	= 256,
1571 		/* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */
1572 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
1573 		.tested		= TEST_OK_PREW,
1574 		.probe		= PROBE_SPI_RDID,
1575 		.probe_timing	= TIMING_ZERO,
1576 		.block_erasers	=
1577 		{
1578 			{
1579 				.eraseblocks = { {4 * 1024, 64} },
1580 				.block_erase = SPI_BLOCK_ERASE_20,
1581 			}, {
1582 				.eraseblocks = { {32 * 1024, 8} },
1583 				.block_erase = SPI_BLOCK_ERASE_52,
1584 			}, {
1585 				.eraseblocks = { {64 * 1024, 4} },
1586 				.block_erase = SPI_BLOCK_ERASE_D8,
1587 			}, {
1588 				.eraseblocks = { {256 * 1024, 1} },
1589 				.block_erase = SPI_BLOCK_ERASE_60,
1590 			}, {
1591 				.eraseblocks = { {256 * 1024, 1} },
1592 				.block_erase = SPI_BLOCK_ERASE_C7,
1593 			}
1594 		},
1595 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_AT25DF,
1596 		.unlock		= SPI_DISABLE_BLOCKPROTECT_AT2X_GLOBAL_UNPROTECT,
1597 		.write		= SPI_CHIP_WRITE256,
1598 		.read		= SPI_CHIP_READ,
1599 		.voltage	= {1650, 3600},
1600 	},
1601 
1602 	{
1603 		.vendor		= "Atmel",
1604 		.name		= "AT25DF041A",
1605 		.bustype	= BUS_SPI,
1606 		.manufacture_id	= ATMEL_ID,
1607 		.model_id	= ATMEL_AT25DF041A,
1608 		.total_size	= 512,
1609 		.page_size	= 256,
1610 		.feature_bits	= FEATURE_WRSR_WREN,
1611 		.tested		= TEST_OK_PREW,
1612 		.probe		= PROBE_SPI_RDID,
1613 		.probe_timing	= TIMING_ZERO,
1614 		.block_erasers	=
1615 		{
1616 			{
1617 				.eraseblocks = { {4 * 1024, 128} },
1618 				.block_erase = SPI_BLOCK_ERASE_20,
1619 			}, {
1620 				.eraseblocks = { {32 * 1024, 16} },
1621 				.block_erase = SPI_BLOCK_ERASE_52,
1622 			}, {
1623 				.eraseblocks = { {64 * 1024, 8} },
1624 				.block_erase = SPI_BLOCK_ERASE_D8,
1625 			}, {
1626 				.eraseblocks = { {512 * 1024, 1} },
1627 				.block_erase = SPI_BLOCK_ERASE_60,
1628 			}, {
1629 				.eraseblocks = { {512 * 1024, 1} },
1630 				.block_erase = SPI_BLOCK_ERASE_C7,
1631 			}
1632 		},
1633 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_AT25DF,
1634 		.unlock		= SPI_DISABLE_BLOCKPROTECT_AT2X_GLOBAL_UNPROTECT,
1635 		.write		= SPI_CHIP_WRITE256,
1636 		.read		= SPI_CHIP_READ,
1637 		.voltage	= {2700, 3600}, /* 2.3-3.6V & 2.7-3.6V models available */
1638 	},
1639 
1640 	{
1641 		.vendor		= "Atmel",
1642 		.name		= "AT25DF081",
1643 		.bustype	= BUS_SPI,
1644 		.manufacture_id	= ATMEL_ID,
1645 		.model_id	= ATMEL_AT25DF081,
1646 		.total_size	= 1024,
1647 		.page_size	= 256,
1648 		.feature_bits	= FEATURE_WRSR_WREN,
1649 		.tested		= TEST_UNTESTED,
1650 		.probe		= PROBE_SPI_RDID,
1651 		.probe_timing	= TIMING_ZERO,
1652 		.block_erasers	=
1653 		{
1654 			{
1655 				.eraseblocks = { {4 * 1024, 256} },
1656 				.block_erase = SPI_BLOCK_ERASE_20,
1657 			}, {
1658 				.eraseblocks = { {32 * 1024, 32} },
1659 				.block_erase = SPI_BLOCK_ERASE_52,
1660 			}, {
1661 				.eraseblocks = { {64 * 1024, 16} },
1662 				.block_erase = SPI_BLOCK_ERASE_D8,
1663 			}, {
1664 				.eraseblocks = { {1024 * 1024, 1} },
1665 				.block_erase = SPI_BLOCK_ERASE_60,
1666 			}, {
1667 				.eraseblocks = { {1024 * 1024, 1} },
1668 				.block_erase = SPI_BLOCK_ERASE_C7,
1669 			}
1670 		},
1671 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_AT25DF,
1672 		.unlock		= SPI_DISABLE_BLOCKPROTECT_AT2X_GLOBAL_UNPROTECT,
1673 		.write		= SPI_CHIP_WRITE256,
1674 		.read		= SPI_CHIP_READ,
1675 		.voltage	= {1600, 2000}, /* Datasheet says range is 1.65-1.95 V */
1676 	},
1677 
1678 	{
1679 		.vendor		= "Atmel",
1680 		.name		= "AT25DF081A",
1681 		.bustype	= BUS_SPI,
1682 		.manufacture_id	= ATMEL_ID,
1683 		.model_id	= ATMEL_AT25DF081A,
1684 		.total_size	= 1024,
1685 		.page_size	= 256,
1686 		.feature_bits	= FEATURE_WRSR_WREN,
1687 		.tested		= TEST_UNTESTED,
1688 		.probe		= PROBE_SPI_RDID,
1689 		.probe_timing	= TIMING_ZERO,
1690 		.block_erasers	=
1691 		{
1692 			{
1693 				.eraseblocks = { {4 * 1024, 256} },
1694 				.block_erase = SPI_BLOCK_ERASE_20,
1695 			}, {
1696 				.eraseblocks = { {32 * 1024, 32} },
1697 				.block_erase = SPI_BLOCK_ERASE_52,
1698 			}, {
1699 				.eraseblocks = { {64 * 1024, 16} },
1700 				.block_erase = SPI_BLOCK_ERASE_D8,
1701 			}, {
1702 				.eraseblocks = { {1024 * 1024, 1} },
1703 				.block_erase = SPI_BLOCK_ERASE_60,
1704 			}, {
1705 				.eraseblocks = { {1024 * 1024, 1} },
1706 				.block_erase = SPI_BLOCK_ERASE_C7,
1707 			}
1708 		},
1709 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_AT25DF_SEC,
1710 		.unlock		= SPI_DISABLE_BLOCKPROTECT_AT2X_GLOBAL_UNPROTECT_SEC,
1711 		.write		= SPI_CHIP_WRITE256,
1712 		.read		= SPI_CHIP_READ,
1713 		.voltage	= {2700, 3600},
1714 	},
1715 
1716 	{
1717 		.vendor		= "Atmel",
1718 		.name		= "AT25DF161",
1719 		.bustype	= BUS_SPI,
1720 		.manufacture_id	= ATMEL_ID,
1721 		.model_id	= ATMEL_AT25DF161,
1722 		.total_size	= 2048,
1723 		.page_size	= 256,
1724 		.feature_bits	= FEATURE_WRSR_WREN,
1725 		.tested		= TEST_OK_PREW,
1726 		.probe		= PROBE_SPI_RDID,
1727 		.probe_timing	= TIMING_ZERO,
1728 		.block_erasers	=
1729 		{
1730 			{
1731 				.eraseblocks = { {4 * 1024, 512} },
1732 				.block_erase = SPI_BLOCK_ERASE_20,
1733 			}, {
1734 				.eraseblocks = { {32 * 1024, 64} },
1735 				.block_erase = SPI_BLOCK_ERASE_52,
1736 			}, {
1737 				.eraseblocks = { {64 * 1024, 32} },
1738 				.block_erase = SPI_BLOCK_ERASE_D8,
1739 			}, {
1740 				.eraseblocks = { {2 * 1024 * 1024, 1} },
1741 				.block_erase = SPI_BLOCK_ERASE_60,
1742 			}, {
1743 				.eraseblocks = { {2 * 1024 * 1024, 1} },
1744 				.block_erase = SPI_BLOCK_ERASE_C7,
1745 			}
1746 		},
1747 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_AT25DF_SEC,
1748 		.unlock		= SPI_DISABLE_BLOCKPROTECT_AT2X_GLOBAL_UNPROTECT_SEC,
1749 		.write		= SPI_CHIP_WRITE256,
1750 		.read		= SPI_CHIP_READ,
1751 		.voltage	= {2700, 3600},
1752 	},
1753 
1754 	/*The AT26DF321 has the same ID as the AT25DF321. */
1755 	{
1756 		.vendor		= "Atmel",
1757 		.name		= "AT25DF321",
1758 		.bustype	= BUS_SPI,
1759 		.manufacture_id	= ATMEL_ID,
1760 		.model_id	= ATMEL_AT25DF321,
1761 		.total_size	= 4096,
1762 		.page_size	= 256,
1763 		.feature_bits	= FEATURE_WRSR_WREN,
1764 		.tested		= TEST_OK_PREW,
1765 		.probe		= PROBE_SPI_RDID,
1766 		.probe_timing	= TIMING_ZERO,
1767 		.block_erasers	=
1768 		{
1769 			{
1770 				.eraseblocks = { {4 * 1024, 1024} },
1771 				.block_erase = SPI_BLOCK_ERASE_20,
1772 			}, {
1773 				.eraseblocks = { {32 * 1024, 128} },
1774 				.block_erase = SPI_BLOCK_ERASE_52,
1775 			}, {
1776 				.eraseblocks = { {64 * 1024, 64} },
1777 				.block_erase = SPI_BLOCK_ERASE_D8,
1778 			}, {
1779 				.eraseblocks = { {4 * 1024 * 1024, 1} },
1780 				.block_erase = SPI_BLOCK_ERASE_60,
1781 			}, {
1782 				.eraseblocks = { {4 * 1024 * 1024, 1} },
1783 				.block_erase = SPI_BLOCK_ERASE_C7,
1784 			}
1785 		},
1786 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_AT25DF,
1787 		.unlock		= SPI_DISABLE_BLOCKPROTECT_AT2X_GLOBAL_UNPROTECT,
1788 		.write		= SPI_CHIP_WRITE256,
1789 		.read		= SPI_CHIP_READ,
1790 		.voltage	= {2700, 3600},
1791 	},
1792 
1793 	{
1794 		.vendor		= "Atmel",
1795 		.name		= "AT25DF321A",
1796 		.bustype	= BUS_SPI,
1797 		.manufacture_id	= ATMEL_ID,
1798 		.model_id	= ATMEL_AT25DF321A,
1799 		.total_size	= 4096,
1800 		.page_size	= 256,
1801 		/* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */
1802 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
1803 		.tested		= TEST_OK_PREW,
1804 		.probe		= PROBE_SPI_RDID,
1805 		.probe_timing	= TIMING_ZERO,
1806 		.block_erasers	=
1807 		{
1808 			{
1809 				.eraseblocks = { {4 * 1024, 1024} },
1810 				.block_erase = SPI_BLOCK_ERASE_20,
1811 			}, {
1812 				.eraseblocks = { {32 * 1024, 128} },
1813 				.block_erase = SPI_BLOCK_ERASE_52,
1814 			}, {
1815 				.eraseblocks = { {64 * 1024, 64} },
1816 				.block_erase = SPI_BLOCK_ERASE_D8,
1817 			}, {
1818 				.eraseblocks = { {4 * 1024 * 1024, 1} },
1819 				.block_erase = SPI_BLOCK_ERASE_60,
1820 			}, {
1821 				.eraseblocks = { {4 * 1024 * 1024, 1} },
1822 				.block_erase = SPI_BLOCK_ERASE_C7,
1823 			}
1824 		},
1825 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_AT25DF_SEC,
1826 		.unlock		= SPI_DISABLE_BLOCKPROTECT_AT2X_GLOBAL_UNPROTECT_SEC,
1827 		.write		= SPI_CHIP_WRITE256,
1828 		.read		= SPI_CHIP_READ,
1829 		.voltage	= {2700, 3600},
1830 	},
1831 
1832 	{
1833 		.vendor		= "Atmel",
1834 		.name		= "AT25DF641(A)",
1835 		.bustype	= BUS_SPI,
1836 		.manufacture_id	= ATMEL_ID,
1837 		.model_id	= ATMEL_AT25DF641,
1838 		.total_size	= 8192,
1839 		.page_size	= 256,
1840 		.feature_bits	= FEATURE_WRSR_WREN,
1841 		.tested		= TEST_OK_PREW,
1842 		.probe		= PROBE_SPI_RDID,
1843 		.probe_timing	= TIMING_ZERO,
1844 		.block_erasers	=
1845 		{
1846 			{
1847 				.eraseblocks = { {4 * 1024, 2048} },
1848 				.block_erase = SPI_BLOCK_ERASE_20,
1849 			}, {
1850 				.eraseblocks = { {32 * 1024, 256} },
1851 				.block_erase = SPI_BLOCK_ERASE_52,
1852 			}, {
1853 				.eraseblocks = { {64 * 1024, 128} },
1854 				.block_erase = SPI_BLOCK_ERASE_D8,
1855 			}, {
1856 				.eraseblocks = { {8 * 1024 * 1024, 1} },
1857 				.block_erase = SPI_BLOCK_ERASE_60,
1858 			}, {
1859 				.eraseblocks = { {8 * 1024 * 1024, 1} },
1860 				.block_erase = SPI_BLOCK_ERASE_C7,
1861 			}
1862 		},
1863 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_AT25DF_SEC,
1864 		.unlock		= SPI_DISABLE_BLOCKPROTECT_AT2X_GLOBAL_UNPROTECT_SEC,
1865 		.write		= SPI_CHIP_WRITE256,
1866 		.read		= SPI_CHIP_READ,
1867 		.voltage	= {2700, 3600},
1868 	},
1869 
1870 	{
1871 		.vendor		= "Atmel",
1872 		.name		= "AT25DL081",
1873 		.bustype	= BUS_SPI,
1874 		.manufacture_id	= ATMEL_ID,
1875 		.model_id	= ATMEL_AT25DF081,
1876 		.total_size	= 1024,
1877 		.page_size	= 256,
1878 		/* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */
1879 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
1880 		.tested		= TEST_UNTESTED,
1881 		.probe		= PROBE_SPI_RDID,
1882 		.probe_timing	= TIMING_ZERO,
1883 		.block_erasers	=
1884 		{
1885 			{
1886 				.eraseblocks = { {4 * 1024, 256} },
1887 				.block_erase = SPI_BLOCK_ERASE_20,
1888 			}, {
1889 				.eraseblocks = { {32 * 1024, 32} },
1890 				.block_erase = SPI_BLOCK_ERASE_52,
1891 			}, {
1892 				.eraseblocks = { {64 * 1024, 16} },
1893 				.block_erase = SPI_BLOCK_ERASE_D8,
1894 			}, {
1895 				.eraseblocks = { {1 * 1024 * 1024, 1} },
1896 				.block_erase = SPI_BLOCK_ERASE_60,
1897 			}, {
1898 				.eraseblocks = { {1 * 1024 * 1024, 1} },
1899 				.block_erase = SPI_BLOCK_ERASE_C7,
1900 			}
1901 		},
1902 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_AT25DF_SEC,
1903 		.unlock		= SPI_DISABLE_BLOCKPROTECT_AT2X_GLOBAL_UNPROTECT_SEC,
1904 		.write		= SPI_CHIP_WRITE256, /* Dual I/O  (0xA2) supported */
1905 		.read		= SPI_CHIP_READ, /* Fast read (0x0B), dual I/O  (0x3B) supported */
1906 		.voltage	= {1650, 1950},
1907 	},
1908 
1909 	{
1910 		.vendor		= "Atmel",
1911 		.name		= "AT25DL161",
1912 		.bustype	= BUS_SPI,
1913 		.manufacture_id	= ATMEL_ID,
1914 		.model_id	= ATMEL_AT25DL161,
1915 		.total_size	= 2048,
1916 		.page_size	= 256,
1917 		/* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */
1918 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
1919 		.tested		= TEST_UNTESTED,
1920 		.probe		= PROBE_SPI_RDID,
1921 		.probe_timing	= TIMING_ZERO,
1922 		.block_erasers	=
1923 		{
1924 			{
1925 				.eraseblocks = { {4 * 1024, 512} },
1926 				.block_erase = SPI_BLOCK_ERASE_20,
1927 			}, {
1928 				.eraseblocks = { {32 * 1024, 64} },
1929 				.block_erase = SPI_BLOCK_ERASE_52,
1930 			}, {
1931 				.eraseblocks = { {64 * 1024, 32} },
1932 				.block_erase = SPI_BLOCK_ERASE_D8,
1933 			}, {
1934 				.eraseblocks = { {2 * 1024 * 1024, 1} },
1935 				.block_erase = SPI_BLOCK_ERASE_60,
1936 			}, {
1937 				.eraseblocks = { {2 * 1024 * 1024, 1} },
1938 				.block_erase = SPI_BLOCK_ERASE_C7,
1939 			}
1940 		},
1941 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_AT25DF_SEC,
1942 		.unlock		= SPI_DISABLE_BLOCKPROTECT_AT2X_GLOBAL_UNPROTECT_SEC,
1943 		.write		= SPI_CHIP_WRITE256, /* Dual I/O  (0xA2) supported */
1944 		.read		= SPI_CHIP_READ, /* Fast read (0x0B), dual I/O  (0x3B) supported */
1945 		.voltage	= {1650, 1950},
1946 	},
1947 
1948 	{
1949 		.vendor		= "Atmel",
1950 		.name		= "AT25DQ161",
1951 		.bustype	= BUS_SPI,
1952 		.manufacture_id	= ATMEL_ID,
1953 		.model_id	= ATMEL_AT25DQ161,
1954 		.total_size	= 2048,
1955 		.page_size	= 256,
1956 		/* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */
1957 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
1958 		.tested		= TEST_UNTESTED,
1959 		.probe		= PROBE_SPI_RDID,
1960 		.probe_timing	= TIMING_ZERO,
1961 		.block_erasers	=
1962 		{
1963 			{
1964 				.eraseblocks = { {4 * 1024, 512} },
1965 				.block_erase = SPI_BLOCK_ERASE_20,
1966 			}, {
1967 				.eraseblocks = { {32 * 1024, 64} },
1968 				.block_erase = SPI_BLOCK_ERASE_52,
1969 			}, {
1970 				.eraseblocks = { {64 * 1024, 32} },
1971 				.block_erase = SPI_BLOCK_ERASE_D8,
1972 			}, {
1973 				.eraseblocks = { {2 * 1024 * 1024, 1} },
1974 				.block_erase = SPI_BLOCK_ERASE_60,
1975 			}, {
1976 				.eraseblocks = { {2 * 1024 * 1024, 1} },
1977 				.block_erase = SPI_BLOCK_ERASE_C7,
1978 			}
1979 		},
1980 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_AT25DF_SEC,
1981 		.unlock		= SPI_DISABLE_BLOCKPROTECT_AT2X_GLOBAL_UNPROTECT_SEC,
1982 		.write		= SPI_CHIP_WRITE256,
1983 		.read		= SPI_CHIP_READ,
1984 		.voltage	= {2700, 3600},
1985 	},
1986 
1987 	{
1988 		.vendor		= "Atmel",
1989 		/* The A suffix indicates 33MHz instead of 20MHz clock rate.
1990 		 * All other properties seem to be the same.*/
1991 		.name		= "AT25F1024(A)",
1992 		.bustype	= BUS_SPI,
1993 		.manufacture_id	= ATMEL_ID,
1994 		.model_id	= ATMEL_AT25F1024,
1995 		.total_size	= 128,
1996 		.page_size	= 256,
1997 		.feature_bits	= FEATURE_WRSR_WREN,
1998 		.tested		= TEST_OK_PREW,
1999 		.probe		= PROBE_SPI_AT25F,
2000 		.probe_timing	= TIMING_ZERO,
2001 		.block_erasers	=
2002 		{
2003 			{
2004 				.eraseblocks = { {32 * 1024, 4} },
2005 				.block_erase = SPI_BLOCK_ERASE_52,
2006 			}, {
2007 				.eraseblocks = { {128 * 1024, 1} },
2008 				.block_erase = SPI_BLOCK_ERASE_62,
2009 			}
2010 		},
2011 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_AT25F,
2012 		.unlock		= SPI_DISABLE_BLOCKPROTECT_AT25F,
2013 		.write		= SPI_CHIP_WRITE256,
2014 		.read		= SPI_CHIP_READ,
2015 		.voltage	= {2700, 3600},
2016 	},
2017 
2018 	{
2019 		.vendor		= "Atmel",
2020 		.name		= "AT25F2048",
2021 		.bustype	= BUS_SPI,
2022 		.manufacture_id	= ATMEL_ID,
2023 		.model_id	= ATMEL_AT25F2048,
2024 		.total_size	= 256,
2025 		.page_size	= 256,
2026 		.feature_bits	= FEATURE_WRSR_WREN,
2027 		.tested		= TEST_UNTESTED,
2028 		.probe		= PROBE_SPI_AT25F,
2029 		.probe_timing	= TIMING_ZERO,
2030 		.block_erasers	=
2031 		{
2032 			{
2033 				.eraseblocks = { {64 * 1024, 4} },
2034 				.block_erase = SPI_BLOCK_ERASE_52,
2035 			}, {
2036 				.eraseblocks = { {256 * 1024, 1} },
2037 				.block_erase = SPI_BLOCK_ERASE_62,
2038 			}
2039 		},
2040 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_AT25F,
2041 		.unlock		= SPI_DISABLE_BLOCKPROTECT_AT25F,
2042 		.write		= SPI_CHIP_WRITE256,
2043 		.read		= SPI_CHIP_READ,
2044 		.voltage	= {2700, 3600},
2045 	},
2046 
2047 	{
2048 		.vendor		= "Atmel",
2049 		.name		= "AT25F4096",
2050 		.bustype	= BUS_SPI,
2051 		.manufacture_id	= ATMEL_ID,
2052 		.model_id	= ATMEL_AT25F4096,
2053 		.total_size	= 512,
2054 		.page_size	= 256,
2055 		.feature_bits	= FEATURE_WRSR_WREN,
2056 		.tested		= TEST_OK_PREW,
2057 		.probe		= PROBE_SPI_AT25F,
2058 		.probe_timing	= TIMING_ZERO,
2059 		.block_erasers	=
2060 		{
2061 			{
2062 				.eraseblocks = { {64 * 1024, 8} },
2063 				.block_erase = SPI_BLOCK_ERASE_52,
2064 			}, {
2065 				.eraseblocks = { {512 * 1024, 1} },
2066 				.block_erase = SPI_BLOCK_ERASE_62,
2067 			}
2068 		},
2069 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_AT25F4096,
2070 		/* "Bits 5-6 are 0s when device is not in an internal write cycle." Better leave them alone: */
2071 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD,
2072 		.write		= SPI_CHIP_WRITE256,
2073 		.read		= SPI_CHIP_READ,
2074 		.voltage	= {2700, 3600},
2075 	},
2076 
2077 	{
2078 		.vendor		= "Atmel",
2079 		.name		= "AT25F512",
2080 		.bustype	= BUS_SPI,
2081 		.manufacture_id	= ATMEL_ID,
2082 		.model_id	= ATMEL_AT25F512,
2083 		.total_size	= 64,
2084 		.page_size	= 256,
2085 		.feature_bits	= FEATURE_WRSR_WREN,
2086 		.tested		= TEST_OK_PREW,
2087 		.probe		= PROBE_SPI_AT25F,
2088 		.probe_timing	= TIMING_ZERO,
2089 		.block_erasers	=
2090 		{
2091 			{
2092 				.eraseblocks = { {32 * 1024, 2} },
2093 				.block_erase = SPI_BLOCK_ERASE_52,
2094 			}, {
2095 				.eraseblocks = { {64 * 1024, 1} },
2096 				.block_erase = SPI_BLOCK_ERASE_62,
2097 			}
2098 		},
2099 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_AT25F,
2100 		.unlock		= SPI_DISABLE_BLOCKPROTECT_AT25F,
2101 		.write		= SPI_CHIP_WRITE256,
2102 		.read		= SPI_CHIP_READ,
2103 		.voltage	= {2700, 3600},
2104 	},
2105 
2106 	{
2107 		.vendor		= "Atmel",
2108 		.name		= "AT25F512A",
2109 		.bustype	= BUS_SPI,
2110 		.manufacture_id	= ATMEL_ID,
2111 		.model_id	= ATMEL_AT25F512A,
2112 		.total_size	= 64,
2113 		.page_size	= 128,
2114 		.feature_bits	= FEATURE_WRSR_WREN,
2115 		.tested		= TEST_OK_PREW,
2116 		.probe		= PROBE_SPI_AT25F,
2117 		.probe_timing	= TIMING_ZERO,
2118 		.block_erasers	=
2119 		{
2120 			{
2121 				.eraseblocks = { {32 * 1024, 2} },
2122 				.block_erase = SPI_BLOCK_ERASE_52,
2123 			}, {
2124 				.eraseblocks = { {64 * 1024, 1} },
2125 				.block_erase = SPI_BLOCK_ERASE_62,
2126 			}
2127 		},
2128 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_AT25F512A,
2129 		/* FIXME: It is not correct to use this one, because the BP1 bit is N/A. */
2130 		.unlock		= SPI_DISABLE_BLOCKPROTECT_AT25F512A,
2131 		.write		= SPI_CHIP_WRITE256,
2132 		.read		= SPI_CHIP_READ,
2133 		.voltage	= {2700, 3600},
2134 	},
2135 
2136 	{
2137 		.vendor		= "Atmel",
2138 		.name		= "AT25F512B",
2139 		.bustype	= BUS_SPI,
2140 		.manufacture_id	= ATMEL_ID,
2141 		.model_id	= ATMEL_AT25F512B,
2142 		.total_size	= 64,
2143 		.page_size	= 256,
2144 		/* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */
2145 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
2146 		.tested		= TEST_UNTESTED,
2147 		.probe		= PROBE_SPI_RDID,
2148 		.probe_timing	= TIMING_ZERO,
2149 		.block_erasers	=
2150 		{
2151 			{
2152 				.eraseblocks = { {4 * 1024, 16} },
2153 				.block_erase = SPI_BLOCK_ERASE_20,
2154 			}, {
2155 				.eraseblocks = { {32 * 1024, 2} },
2156 				.block_erase = SPI_BLOCK_ERASE_52,
2157 			}, {
2158 				.eraseblocks = { {32 * 1024, 2} },
2159 				.block_erase = SPI_BLOCK_ERASE_D8,
2160 			}, {
2161 				.eraseblocks = { {64 * 1024, 1} },
2162 				.block_erase = SPI_BLOCK_ERASE_60,
2163 			}, {
2164 				.eraseblocks = { {64 * 1024, 1} },
2165 				.block_erase = SPI_BLOCK_ERASE_C7,
2166 			}, {
2167 				.eraseblocks = { {64 * 1024, 1} },
2168 				.block_erase = SPI_BLOCK_ERASE_62,
2169 			}
2170 		},
2171 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_AT25F512B,
2172 		.unlock		= SPI_DISABLE_BLOCKPROTECT_AT25F512B,
2173 		.write		= SPI_CHIP_WRITE256,
2174 		.read		= SPI_CHIP_READ,
2175 		.voltage	= {2700, 3600},
2176 	},
2177 
2178 	{
2179 		.vendor		= "Atmel",
2180 		.name		= "AT25FS010",
2181 		.bustype	= BUS_SPI,
2182 		.manufacture_id	= ATMEL_ID,
2183 		.model_id	= ATMEL_AT25FS010,
2184 		.total_size	= 128,
2185 		.page_size	= 256,
2186 		.feature_bits	= FEATURE_WRSR_WREN,
2187 		.tested		= TEST_OK_PREW,
2188 		.probe		= PROBE_SPI_RDID,
2189 		.probe_timing	= TIMING_ZERO,
2190 		.block_erasers	=
2191 		{
2192 			{
2193 				.eraseblocks = { {4 * 1024, 32} },
2194 				.block_erase = SPI_BLOCK_ERASE_20,
2195 			}, {
2196 				.eraseblocks = { {4 * 1024, 32} },
2197 				.block_erase = SPI_BLOCK_ERASE_D7,
2198 			}, {
2199 				.eraseblocks = { {32 * 1024, 4} },
2200 				.block_erase = SPI_BLOCK_ERASE_52,
2201 			}, {
2202 				.eraseblocks = { {32 * 1024, 4} },
2203 				.block_erase = SPI_BLOCK_ERASE_D8,
2204 			}, {
2205 				.eraseblocks = { {128 * 1024, 1} },
2206 				.block_erase = SPI_BLOCK_ERASE_60,
2207 			}, {
2208 				.eraseblocks = { {128 * 1024, 1} },
2209 				.block_erase = SPI_BLOCK_ERASE_C7,
2210 			}
2211 		},
2212 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_AT25FS010,
2213 		.unlock		= SPI_DISABLE_BLOCKPROTECT_AT25FS010,
2214 		.write		= SPI_CHIP_WRITE256,
2215 		.read		= SPI_CHIP_READ,
2216 		.voltage	= {2700, 3600},
2217 	},
2218 
2219 	{
2220 		.vendor		= "Atmel",
2221 		.name		= "AT25FS040",
2222 		.bustype	= BUS_SPI,
2223 		.manufacture_id	= ATMEL_ID,
2224 		.model_id	= ATMEL_AT25FS040,
2225 		.total_size	= 512,
2226 		.page_size	= 256,
2227 		.feature_bits	= FEATURE_WRSR_WREN,
2228 		.tested		= TEST_UNTESTED,
2229 		.probe		= PROBE_SPI_RDID,
2230 		.probe_timing	= TIMING_ZERO,
2231 		.block_erasers	=
2232 		{
2233 			{
2234 				.eraseblocks = { {4 * 1024, 128} },
2235 				.block_erase = SPI_BLOCK_ERASE_20,
2236 			}, {
2237 				.eraseblocks = { {64 * 1024, 8} },
2238 				.block_erase = SPI_BLOCK_ERASE_52,
2239 			}, {
2240 				.eraseblocks = { {64 * 1024, 8} },
2241 				.block_erase = SPI_BLOCK_ERASE_D8,
2242 			}, {
2243 				.eraseblocks = { {512 * 1024, 1} },
2244 				.block_erase = SPI_BLOCK_ERASE_60,
2245 			}, {
2246 				.eraseblocks = { {512 * 1024, 1} },
2247 				.block_erase = SPI_BLOCK_ERASE_C7,
2248 			}
2249 		},
2250 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_AT25FS040,
2251 		.unlock		= SPI_DISABLE_BLOCKPROTECT_AT25FS040,
2252 		.write		= SPI_CHIP_WRITE256,
2253 		.read		= SPI_CHIP_READ,
2254 		.voltage	= {2700, 3600},
2255 	},
2256 
2257 	{
2258 		.vendor		= "Atmel",
2259 		.name		= "AT25SF041",
2260 		.bustype	= BUS_SPI,
2261 		.manufacture_id	= ATMEL_ID,
2262 		.model_id	= ATMEL_AT25SF041,
2263 		.total_size	= 512,
2264 		.page_size	= 256,
2265 		.feature_bits	= FEATURE_WRSR_WREN,
2266 		.tested		= TEST_OK_PREW,
2267 		.probe		= PROBE_SPI_RDID,
2268 		.probe_timing	= TIMING_ZERO,
2269 		.block_erasers	=
2270 		{
2271 			{
2272 				.eraseblocks = { {4 * 1024, 128} },
2273 				.block_erase = SPI_BLOCK_ERASE_20,
2274 			}, {
2275 				.eraseblocks = { {32 * 1024, 16} },
2276 				.block_erase = SPI_BLOCK_ERASE_52,
2277 			}, {
2278 				.eraseblocks = { {64 * 1024, 8} },
2279 				.block_erase = SPI_BLOCK_ERASE_D8,
2280 			}, {
2281 				.eraseblocks = { {512 * 1024, 1} },
2282 				.block_erase = SPI_BLOCK_ERASE_60,
2283 			}, {
2284 				.eraseblocks = { {512 * 1024, 1} },
2285 				.block_erase = SPI_BLOCK_ERASE_C7,
2286 			}
2287 		},
2288 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN,
2289 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
2290 		.write		= SPI_CHIP_WRITE256,
2291 		.read		= SPI_CHIP_READ,
2292 		.voltage	= {2500, 3600},
2293 	},
2294 
2295 	{
2296 		.vendor		= "Atmel",
2297 		.name		= "AT25SF081",
2298 		.bustype	= BUS_SPI,
2299 		.manufacture_id	= ATMEL_ID,
2300 		.model_id	= ATMEL_AT25SF081,
2301 		.total_size	= 1024,
2302 		.page_size	= 256,
2303 		.feature_bits	= FEATURE_WRSR_WREN,
2304 		.tested		= TEST_OK_PREW,
2305 		.probe		= PROBE_SPI_RDID,
2306 		.probe_timing	= TIMING_ZERO,
2307 		.block_erasers	=
2308 		{
2309 			{
2310 				.eraseblocks = { {4 * 1024, 256} },
2311 				.block_erase = SPI_BLOCK_ERASE_20,
2312 			}, {
2313 				.eraseblocks = { {32 * 1024, 32} },
2314 				.block_erase = SPI_BLOCK_ERASE_52,
2315 			}, {
2316 				.eraseblocks = { {64 * 1024, 16} },
2317 				.block_erase = SPI_BLOCK_ERASE_D8,
2318 			}, {
2319 				.eraseblocks = { {1024 * 1024, 1} },
2320 				.block_erase = SPI_BLOCK_ERASE_60,
2321 			}, {
2322 				.eraseblocks = { {1024 * 1024, 1} },
2323 				.block_erase = SPI_BLOCK_ERASE_C7,
2324 			}
2325 		},
2326 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN,
2327 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
2328 		.write		= SPI_CHIP_WRITE256,
2329 		.read		= SPI_CHIP_READ,
2330 		.voltage	= {2300, 3600},
2331 	},
2332 
2333 	{
2334 		.vendor		= "Atmel",
2335 		.name		= "AT25SF128A",
2336 		.bustype	= BUS_SPI,
2337 		.manufacture_id	= ATMEL_ID,
2338 		.model_id	= ATMEL_AT25SF128A,
2339 		.total_size	= 16384,
2340 		.page_size	= 256,
2341 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
2342 		.tested		= TEST_OK_PR,
2343 		.probe		= PROBE_SPI_RDID,
2344 		.probe_timing	= TIMING_ZERO,
2345 		.block_erasers	=
2346 		{
2347 			{
2348 				.eraseblocks = { {4 * 1024, 4096} },
2349 				.block_erase = SPI_BLOCK_ERASE_20,
2350 			}, {
2351 				.eraseblocks = { {32 * 1024, 512} },
2352 				.block_erase = SPI_BLOCK_ERASE_52,
2353 			}, {
2354 				.eraseblocks = { {64 * 1024, 256} },
2355 				.block_erase = SPI_BLOCK_ERASE_D8,
2356 			}, {
2357 				.eraseblocks = { {16 * 1024 * 1024, 1} },
2358 				.block_erase = SPI_BLOCK_ERASE_60,
2359 			}, {
2360 				.eraseblocks = { {16 * 1024 * 1024, 1} },
2361 				.block_erase = SPI_BLOCK_ERASE_C7,
2362 			}
2363 		},
2364 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP4_SRWD,
2365 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP4_SRWD,
2366 		.write		= SPI_CHIP_WRITE256,
2367 		.read		= SPI_CHIP_READ,
2368 		.voltage	= {1700, 2000},
2369 	},
2370 
2371 	{
2372 		.vendor		= "Atmel",
2373 		.name		= "AT25SF161",
2374 		.bustype	= BUS_SPI,
2375 		.manufacture_id	= ATMEL_ID,
2376 		.model_id	= ATMEL_AT25SF161,
2377 		.total_size	= 2048,
2378 		.page_size	= 256,
2379 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
2380 		.tested		= TEST_OK_PREW,
2381 		.probe		= PROBE_SPI_RDID,
2382 		.probe_timing	= TIMING_ZERO,
2383 		.block_erasers	=
2384 		{
2385 			{
2386 				.eraseblocks = { {4 * 1024, 512} },
2387 				.block_erase = SPI_BLOCK_ERASE_20,
2388 			}, {
2389 				.eraseblocks = { {32 * 1024, 64} },
2390 				.block_erase = SPI_BLOCK_ERASE_52,
2391 			}, {
2392 				.eraseblocks = { {64 * 1024, 32} },
2393 				.block_erase = SPI_BLOCK_ERASE_D8,
2394 			}, {
2395 				.eraseblocks = { {2048 * 1024, 1} },
2396 				.block_erase = SPI_BLOCK_ERASE_60,
2397 			}, {
2398 				.eraseblocks = { {2048 * 1024, 1} },
2399 				.block_erase = SPI_BLOCK_ERASE_C7,
2400 			}
2401 		},
2402 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN,
2403 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
2404 		.write		= SPI_CHIP_WRITE256,
2405 		.read		= SPI_CHIP_READ,
2406 		.voltage	= {2500, 3600},
2407 	},
2408 
2409 	{
2410 		.vendor		= "Atmel",
2411 		.name		= "AT25SF321",
2412 		.bustype	= BUS_SPI,
2413 		.manufacture_id	= ATMEL_ID,
2414 		.model_id	= ATMEL_AT25SF321,
2415 		.total_size	= 4096,
2416 		.page_size	= 256,
2417 		.feature_bits	= FEATURE_WRSR_WREN,
2418 		.tested		= TEST_OK_PR,
2419 		.probe		= PROBE_SPI_RDID,
2420 		.probe_timing	= TIMING_ZERO,
2421 		.block_erasers	=
2422 		{
2423 			{
2424 				.eraseblocks = { {4 * 1024, 1024} },
2425 				.block_erase = SPI_BLOCK_ERASE_20,
2426 			}, {
2427 				.eraseblocks = { {32 * 1024, 128} },
2428 				.block_erase = SPI_BLOCK_ERASE_52,
2429 			}, {
2430 				.eraseblocks = { {64 * 1024, 64} },
2431 				.block_erase = SPI_BLOCK_ERASE_D8,
2432 			}, {
2433 				.eraseblocks = { {4096 * 1024, 1} },
2434 				.block_erase = SPI_BLOCK_ERASE_60,
2435 			}, {
2436 				.eraseblocks = { {4096 * 1024, 1} },
2437 				.block_erase = SPI_BLOCK_ERASE_C7,
2438 			}
2439 		},
2440 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN,
2441 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
2442 		.write		= SPI_CHIP_WRITE256,
2443 		.read		= SPI_CHIP_READ,
2444 		.voltage	= {2500, 3600},
2445 	},
2446 
2447 	{
2448 		.vendor		= "Atmel",
2449 		.name		= "AT25SL128A",
2450 		.bustype	= BUS_SPI,
2451 		.manufacture_id	= ATMEL_ID,
2452 		.model_id	= ATMEL_AT25SL128A,
2453 		.total_size	= 16384,
2454 		.page_size	= 256,
2455 		/* supports SFDP */
2456 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI | FEATURE_WRSR2,
2457 		.tested		= TEST_OK_PREW,
2458 		.probe		= PROBE_SPI_RDID,
2459 		.probe_timing	= TIMING_ZERO,
2460 		.block_erasers	=
2461 		{
2462 			{
2463 				.eraseblocks = { {4 * 1024, 4096} },
2464 				.block_erase = SPI_BLOCK_ERASE_20,
2465 			}, {
2466 				.eraseblocks = { {32 * 1024, 512} },
2467 				.block_erase = SPI_BLOCK_ERASE_52,
2468 			}, {
2469 				.eraseblocks = { {64 * 1024, 256} },
2470 				.block_erase = SPI_BLOCK_ERASE_D8,
2471 			}, {
2472 				.eraseblocks = { {16 * 1024 * 1024, 1} },
2473 				.block_erase = SPI_BLOCK_ERASE_60,
2474 			}, {
2475 				.eraseblocks = { {16 * 1024 * 1024, 1} },
2476 				.block_erase = SPI_BLOCK_ERASE_C7,
2477 			}
2478 		},
2479 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
2480 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
2481 		.write		= SPI_CHIP_WRITE256,
2482 		.read		= SPI_CHIP_READ,
2483 		.voltage	= {1700, 2000},
2484 		.reg_bits	=
2485 		{
2486 			.srp    = {STATUS1, 7, RW},
2487 			.srl    = {STATUS2, 0, RW},
2488 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
2489 			.tb     = {STATUS1, 5, RW},
2490 			.sec    = {STATUS1, 6, RW},
2491 			.cmp    = {STATUS2, 6, RW},
2492 		},
2493 		.decode_range	= DECODE_RANGE_SPI25,
2494 	},
2495 
2496 	{
2497 		.vendor		= "Atmel",
2498 		.name		= "AT26DF041",
2499 		.bustype	= BUS_SPI,
2500 		.manufacture_id	= ATMEL_ID,
2501 		.model_id	= ATMEL_AT26DF041,
2502 		.total_size	= 512,
2503 		.page_size	= 256,
2504 		/* does not support EWSR nor WREN and has no writable status register bits whatsoever */
2505 		.tested		= TEST_OK_PREW,
2506 		.probe		= PROBE_SPI_RDID,
2507 		.probe_timing	= TIMING_ZERO,
2508 		.block_erasers	=
2509 		{
2510 			{
2511 				.eraseblocks = { {256, 2048} },
2512 				.block_erase = SPI_BLOCK_ERASE_81,
2513 			}, {
2514 				.eraseblocks = { {2 * 1024, 256} },
2515 				.block_erase = SPI_BLOCK_ERASE_50,
2516 			}, {
2517 				.eraseblocks = { {4 * 1024, 128} },
2518 				.block_erase = SPI_BLOCK_ERASE_20,
2519 			}
2520 		},
2521 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN,
2522 		/* Supports also an incompatible page write (of exactly 256 B) and an auto-erasing write. */
2523 		.write		= SPI_CHIP_WRITE1,
2524 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
2525 		.voltage	= {2700, 3600}, /* 3.0-3.6V for higher speed, 2.7-3.6V normal */
2526 	},
2527 
2528 	{
2529 		.vendor		= "Atmel",
2530 		.name		= "AT26DF081A",
2531 		.bustype	= BUS_SPI,
2532 		.manufacture_id	= ATMEL_ID,
2533 		.model_id	= ATMEL_AT26DF081A,
2534 		.total_size	= 1024,
2535 		.page_size	= 256,
2536 		.feature_bits	= FEATURE_WRSR_WREN,
2537 		.tested		= TEST_OK_PREW,
2538 		.probe		= PROBE_SPI_RDID,
2539 		.probe_timing	= TIMING_ZERO,
2540 		.block_erasers	=
2541 		{
2542 			{
2543 				.eraseblocks = { {4 * 1024, 256} },
2544 				.block_erase = SPI_BLOCK_ERASE_20,
2545 			}, {
2546 				.eraseblocks = { {32 * 1024, 32} },
2547 				.block_erase = SPI_BLOCK_ERASE_52,
2548 			}, {
2549 				.eraseblocks = { {64 * 1024, 16} },
2550 				.block_erase = SPI_BLOCK_ERASE_D8,
2551 			}, {
2552 				.eraseblocks = { {1024 * 1024, 1} },
2553 				.block_erase = SPI_BLOCK_ERASE_60,
2554 			}, {
2555 				.eraseblocks = { {1024 * 1024, 1} },
2556 				.block_erase = SPI_BLOCK_ERASE_C7,
2557 			}
2558 		},
2559 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_AT26DF081A,
2560 		.unlock		= SPI_DISABLE_BLOCKPROTECT_AT2X_GLOBAL_UNPROTECT,
2561 		.write		= SPI_CHIP_WRITE256,
2562 		.read		= SPI_CHIP_READ,
2563 		.voltage	= {2700, 3600},
2564 	},
2565 
2566 	{
2567 		.vendor		= "Atmel",
2568 		.name		= "AT26DF161",
2569 		.bustype	= BUS_SPI,
2570 		.manufacture_id	= ATMEL_ID,
2571 		.model_id	= ATMEL_AT26DF161,
2572 		.total_size	= 2048,
2573 		.page_size	= 256,
2574 		.feature_bits	= FEATURE_WRSR_WREN,
2575 		.tested		= TEST_OK_PREW,
2576 		.probe		= PROBE_SPI_RDID,
2577 		.probe_timing	= TIMING_ZERO,
2578 		.block_erasers	=
2579 		{
2580 			{
2581 				.eraseblocks = { {4 * 1024, 512} },
2582 				.block_erase = SPI_BLOCK_ERASE_20,
2583 			}, {
2584 				.eraseblocks = { {32 * 1024, 64} },
2585 				.block_erase = SPI_BLOCK_ERASE_52,
2586 			}, {
2587 				.eraseblocks = { {64 * 1024, 32} },
2588 				.block_erase = SPI_BLOCK_ERASE_D8,
2589 			}, {
2590 				.eraseblocks = { {2 * 1024 * 1024, 1} },
2591 				.block_erase = SPI_BLOCK_ERASE_60,
2592 			}, {
2593 				.eraseblocks = { {2 * 1024 * 1024, 1} },
2594 				.block_erase = SPI_BLOCK_ERASE_C7,
2595 			}
2596 		},
2597 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_AT25DF,
2598 		.unlock		= SPI_DISABLE_BLOCKPROTECT_AT2X_GLOBAL_UNPROTECT,
2599 		.write		= SPI_CHIP_WRITE256,
2600 		.read		= SPI_CHIP_READ,
2601 		.voltage	= {2700, 3600},
2602 	},
2603 
2604 	{
2605 		.vendor		= "Atmel",
2606 		.name		= "AT26DF161A",
2607 		.bustype	= BUS_SPI,
2608 		.manufacture_id	= ATMEL_ID,
2609 		.model_id	= ATMEL_AT26DF161A,
2610 		.total_size	= 2048,
2611 		.page_size	= 256,
2612 		.feature_bits	= FEATURE_WRSR_WREN,
2613 		.tested		= TEST_OK_PREW,
2614 		.probe		= PROBE_SPI_RDID,
2615 		.probe_timing	= TIMING_ZERO,
2616 		.block_erasers	=
2617 		{
2618 			{
2619 				.eraseblocks = { {4 * 1024, 512} },
2620 				.block_erase = SPI_BLOCK_ERASE_20,
2621 			}, {
2622 				.eraseblocks = { {32 * 1024, 64} },
2623 				.block_erase = SPI_BLOCK_ERASE_52,
2624 			}, {
2625 				.eraseblocks = { {64 * 1024, 32} },
2626 				.block_erase = SPI_BLOCK_ERASE_D8,
2627 			}, {
2628 				.eraseblocks = { {2 * 1024 * 1024, 1} },
2629 				.block_erase = SPI_BLOCK_ERASE_60,
2630 			}, {
2631 				.eraseblocks = { {2 * 1024 * 1024, 1} },
2632 				.block_erase = SPI_BLOCK_ERASE_C7,
2633 			}
2634 		},
2635 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_AT26DF081A,
2636 		.unlock		= SPI_DISABLE_BLOCKPROTECT_AT2X_GLOBAL_UNPROTECT,
2637 		.write		= SPI_CHIP_WRITE256,
2638 		.read		= SPI_CHIP_READ,
2639 		.voltage	= {2700, 3600},
2640 	},
2641 
2642 	{
2643 		.vendor		= "Atmel",
2644 		.name		= "AT26F004",
2645 		.bustype	= BUS_SPI,
2646 		.manufacture_id	= ATMEL_ID,
2647 		.model_id	= ATMEL_AT26F004,
2648 		.total_size	= 512,
2649 		.page_size	= 256,
2650 		.feature_bits	= FEATURE_WRSR_WREN,
2651 		.tested		= {.probe = NT, .read = NT, .erase = NT, .write = BAD, .wp = NA},
2652 		.probe		= PROBE_SPI_RDID,
2653 		.probe_timing	= TIMING_ZERO,
2654 		.block_erasers	=
2655 		{
2656 			{
2657 				.eraseblocks = { {4 * 1024, 128} },
2658 				.block_erase = SPI_BLOCK_ERASE_20,
2659 			}, {
2660 				.eraseblocks = { {32 * 1024, 16} },
2661 				.block_erase = SPI_BLOCK_ERASE_52,
2662 			}, {
2663 				.eraseblocks = { {64 * 1024, 8} },
2664 				.block_erase = SPI_BLOCK_ERASE_D8,
2665 			}, {
2666 				.eraseblocks = { {512 * 1024, 1} },
2667 				.block_erase = SPI_BLOCK_ERASE_60,
2668 			}, {
2669 				.eraseblocks = { {512 * 1024, 1} },
2670 				.block_erase = SPI_BLOCK_ERASE_C7,
2671 			}
2672 		},
2673 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
2674 		.write		= 0, /* Incompatible Page write */
2675 		.read		= SPI_CHIP_READ,
2676 		.voltage	= {2700, 3600},
2677 	},
2678 
2679 	{
2680 		.vendor		= "Atmel",
2681 		.name		= "AT29C010A",
2682 		.bustype	= BUS_PARALLEL,
2683 		.manufacture_id	= ATMEL_ID,
2684 		.model_id	= ATMEL_AT29C010A,
2685 		.total_size	= 128,
2686 		.page_size	= 128,
2687 		.feature_bits	= FEATURE_LONG_RESET,
2688 		.tested		= TEST_OK_PREW,
2689 		.probe		= PROBE_JEDEC,
2690 		.probe_timing	= 10000, /* 10mS, Enter=Exec */
2691 		.block_erasers	=
2692 		{
2693 			{
2694 				.eraseblocks = { {128 * 1024, 1} },
2695 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
2696 			}
2697 		},
2698 		.write		= WRITE_JEDEC,	/* FIXME */
2699 		.read		= READ_MEMMAPPED,
2700 		.voltage	= {4500, 5500},
2701 	},
2702 
2703 	{
2704 		.vendor		= "Atmel",
2705 		.name		= "AT29C020",
2706 		.bustype	= BUS_PARALLEL,
2707 		.manufacture_id	= ATMEL_ID,
2708 		.model_id	= ATMEL_AT29C020,
2709 		.total_size	= 256,
2710 		.page_size	= 256,
2711 		.feature_bits	= FEATURE_LONG_RESET,
2712 		.tested		= TEST_OK_PREW,
2713 		.probe		= PROBE_JEDEC,
2714 		.probe_timing	= 10000,			/* 10ms */
2715 		.block_erasers	=
2716 		{
2717 			{
2718 				.eraseblocks = { {256 * 1024, 1} },
2719 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
2720 			}
2721 		},
2722 		.write		= WRITE_JEDEC,
2723 		.read		= READ_MEMMAPPED,
2724 		.voltage	= {4500, 5500},
2725 	},
2726 
2727 	{
2728 		.vendor		= "Atmel",
2729 		.name		= "AT29C040A",
2730 		.bustype	= BUS_PARALLEL,
2731 		.manufacture_id	= ATMEL_ID,
2732 		.model_id	= ATMEL_AT29C040A,
2733 		.total_size	= 512,
2734 		.page_size	= 256,
2735 		.feature_bits	= FEATURE_LONG_RESET,
2736 		.tested		= TEST_UNTESTED,
2737 		.probe		= PROBE_JEDEC,
2738 		.probe_timing	= 10000,			/* 10 ms */
2739 		.block_erasers	=
2740 		{
2741 			{
2742 				.eraseblocks = { {512 * 1024, 1} },
2743 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
2744 			}
2745 		},
2746 		.write		= WRITE_JEDEC,
2747 		.read		= READ_MEMMAPPED,
2748 		.voltage	= {4500, 5500},
2749 	},
2750 
2751 	{
2752 		.vendor		= "Atmel",
2753 		.name		= "AT29C512",
2754 		.bustype	= BUS_PARALLEL,
2755 		.manufacture_id	= ATMEL_ID,
2756 		.model_id	= ATMEL_AT29C512,
2757 		.total_size	= 64,
2758 		.page_size	= 128,
2759 		.feature_bits	= FEATURE_LONG_RESET,
2760 		.tested		= TEST_OK_PREW,
2761 		.probe		= PROBE_JEDEC,
2762 		.probe_timing	= 10000, /* 10mS, Enter=Exec */
2763 		.block_erasers	=
2764 		{
2765 			{
2766 				.eraseblocks = { {64 * 1024, 1} },
2767 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
2768 			}
2769 		},
2770 		.write		= WRITE_JEDEC,
2771 		.read		= READ_MEMMAPPED,
2772 		.voltage	= {4500, 5500},
2773 	},
2774 
2775 	{
2776 		.vendor		= "Atmel",
2777 		.name		= "AT45CS1282",
2778 		.bustype	= BUS_SPI,
2779 		.manufacture_id	= ATMEL_ID,
2780 		.model_id	= ATMEL_AT45CS1282,
2781 		.total_size	= 16896, /* No power of two sizes */
2782 		.page_size	= 1056, /* No power of two sizes */
2783 		/* does not support EWSR nor WREN and has no writable status register bits whatsoever */
2784 		/* OTP: 128B total, 64B pre-programmed; read 0x77 (4 dummy bytes); write 0x9A (via buffer) */
2785 		.feature_bits	= FEATURE_OTP,
2786 		.tested		= TEST_UNTESTED,
2787 		.probe		= PROBE_SPI_RDID,
2788 		.probe_timing	= TIMING_ZERO,
2789 		.block_erasers	=
2790 		{
2791 			{
2792 				.eraseblocks = {
2793 					{8 * 1056, 1},    /* sector 0a:      opcode 50h */
2794 					{248 * 1056, 1},  /* sector 0b:      opcode 7Ch */
2795 					{256 * 1056, 63}, /* sectors 1 - 63: opcode 7Ch */
2796 				},
2797 				.block_erase = SPI_ERASE_AT45CS_SECTOR,
2798 			}
2799 		},
2800 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN,
2801 		.write		= SPI_WRITE_AT45DB,
2802 		.read		= SPI_READ_AT45DB,
2803 		.voltage	= {2700, 3600},
2804 		.gran		= WRITE_GRAN_1056BYTES,
2805 	},
2806 
2807 	{
2808 		.vendor		= "Atmel",
2809 		.name		= "AT45DB011D",
2810 		.bustype	= BUS_SPI,
2811 		.manufacture_id	= ATMEL_ID,
2812 		.model_id	= ATMEL_AT45DB011D,
2813 		.total_size	= 128, /* or 132, determined from status register */
2814 		.page_size	= 256, /* or 264, determined from status register */
2815 		/* does not support EWSR nor WREN and has no writable status register bits whatsoever */
2816 		/* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */
2817 		.feature_bits	= FEATURE_OTP,
2818 		.tested		= TEST_OK_PREW,
2819 		.probe		= PROBE_SPI_AT45DB,
2820 		.probe_timing	= TIMING_ZERO,
2821 		.block_erasers	=
2822 		{
2823 			{
2824 				.eraseblocks = { {256, 512} },
2825 				.block_erase = SPI_ERASE_AT45DB_PAGE,
2826 			}, {
2827 				.eraseblocks = { {8 * 256, 512/8} },
2828 				.block_erase = SPI_ERASE_AT45DB_BLOCK,
2829 			}, {
2830 				.eraseblocks = {
2831 					{8 * 256, 1},
2832 					{120 * 256, 1},
2833 					{128 * 256, 3},
2834 				},
2835 				.block_erase = SPI_ERASE_AT45DB_SECTOR
2836 			}, {
2837 				.eraseblocks = { {128 * 1024, 1} },
2838 				.block_erase = SPI_ERASE_AT45DB_CHIP,
2839 			}
2840 		},
2841 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_AT45DB,
2842 		.unlock		= SPI_DISABLE_BLOCKPROTECT_AT45DB, /* Impossible if locked down or #WP is low */
2843 		/* granularity will be set by the probing function. */
2844 		.write		= SPI_WRITE_AT45DB,
2845 		.read		= SPI_READ_AT45DB, /* Fast read (0x0B) supported */
2846 		.voltage	= {2700, 3600},
2847 	},
2848 
2849 	{
2850 		.vendor		= "Atmel",
2851 		.name		= "AT45DB021D",
2852 		.bustype	= BUS_SPI,
2853 		.manufacture_id	= ATMEL_ID,
2854 		.model_id	= ATMEL_AT45DB021D,
2855 		.total_size	= 256, /* or 264, determined from status register */
2856 		.page_size	= 256, /* or 264, determined from status register */
2857 		/* does not support EWSR nor WREN and has no writable status register bits whatsoever */
2858 		/* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */
2859 		.feature_bits	= FEATURE_OTP,
2860 		.tested		= TEST_OK_PREW,
2861 		.probe		= PROBE_SPI_AT45DB,
2862 		.probe_timing	= TIMING_ZERO,
2863 		.block_erasers	=
2864 		{
2865 			{
2866 				.eraseblocks = { {256, 1024} },
2867 				.block_erase = SPI_ERASE_AT45DB_PAGE,
2868 			}, {
2869 				.eraseblocks = { {8 * 256, 1024/8} },
2870 				.block_erase = SPI_ERASE_AT45DB_BLOCK,
2871 			}, {
2872 				.eraseblocks = {
2873 					{8 * 256, 1},
2874 					{120 * 256, 1},
2875 					{128 * 256, 7},
2876 				},
2877 				.block_erase = SPI_ERASE_AT45DB_SECTOR
2878 			}, {
2879 				.eraseblocks = { {256 * 1024, 1} },
2880 				.block_erase = SPI_ERASE_AT45DB_CHIP,
2881 			}
2882 		},
2883 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_AT45DB,
2884 		.unlock		= SPI_DISABLE_BLOCKPROTECT_AT45DB, /* Impossible if locked down or #WP is low */
2885 		/* granularity will be set by the probing function. */
2886 		.write		= SPI_WRITE_AT45DB,
2887 		.read		= SPI_READ_AT45DB, /* Fast read (0x0B) supported */
2888 		.voltage	= {2700, 3600},
2889 	},
2890 
2891 	{
2892 		.vendor		= "Atmel",
2893 		.name		= "AT45DB041D",
2894 		.bustype	= BUS_SPI,
2895 		.manufacture_id	= ATMEL_ID,
2896 		.model_id	= ATMEL_AT45DB041D,
2897 		.total_size	= 512, /* or 528, determined from status register */
2898 		.page_size	= 256, /* or 264, determined from status register */
2899 		/* does not support EWSR nor WREN and has no writable status register bits whatsoever */
2900 		/* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */
2901 		.feature_bits	= FEATURE_OTP,
2902 		.tested		= TEST_OK_PREW,
2903 		.probe		= PROBE_SPI_AT45DB,
2904 		.probe_timing	= TIMING_ZERO,
2905 		.block_erasers	=
2906 		{
2907 			{
2908 				.eraseblocks = { {256, 2048} },
2909 				.block_erase = SPI_ERASE_AT45DB_PAGE,
2910 			}, {
2911 				.eraseblocks = { {8 * 256, 2048/8} },
2912 				.block_erase = SPI_ERASE_AT45DB_BLOCK,
2913 			}, {
2914 				.eraseblocks = {
2915 					{8 * 256, 1},
2916 					{248 * 256, 1},
2917 					{256 * 256, 7},
2918 				},
2919 				.block_erase = SPI_ERASE_AT45DB_SECTOR
2920 			}, {
2921 				.eraseblocks = { {512 * 1024, 1} },
2922 				.block_erase = SPI_ERASE_AT45DB_CHIP,
2923 			}
2924 		},
2925 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_AT45DB,
2926 		.unlock		= SPI_DISABLE_BLOCKPROTECT_AT45DB, /* Impossible if locked down or #WP is low */
2927 		/* granularity will be set by the probing function. */
2928 		.write		= SPI_WRITE_AT45DB,
2929 		.read		= SPI_READ_AT45DB, /* Fast read (0x0B) supported */
2930 		.voltage	= {2700, 3600}, /* 2.5-3.6V & 2.7-3.6V models available */
2931 	},
2932 
2933 	{
2934 		.vendor		= "Atmel",
2935 		.name		= "AT45DB081D",
2936 		.bustype	= BUS_SPI,
2937 		.manufacture_id	= ATMEL_ID,
2938 		.model_id	= ATMEL_AT45DB081D,
2939 		.total_size	= 1024, /* or 1056, determined from status register */
2940 		.page_size	= 256, /* or 264, determined from status register */
2941 		/* does not support EWSR nor WREN and has no writable status register bits whatsoever */
2942 		/* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */
2943 		.feature_bits	= FEATURE_OTP,
2944 		.tested		= TEST_OK_PREW,
2945 		.probe		= PROBE_SPI_AT45DB,
2946 		.probe_timing	= TIMING_ZERO,
2947 		.block_erasers	=
2948 		{
2949 			{
2950 				.eraseblocks = { {256, 4096} },
2951 				.block_erase = SPI_ERASE_AT45DB_PAGE,
2952 			}, {
2953 				.eraseblocks = { {8 * 256, 4096/8} },
2954 				.block_erase = SPI_ERASE_AT45DB_BLOCK,
2955 			}, {
2956 				.eraseblocks = {
2957 					{8 * 256, 1},
2958 					{248 * 256, 1},
2959 					{256 * 256, 15},
2960 				},
2961 				.block_erase = SPI_ERASE_AT45DB_SECTOR
2962 			}, {
2963 				.eraseblocks = { {1024 * 1024, 1} },
2964 				.block_erase = SPI_ERASE_AT45DB_CHIP,
2965 			}
2966 		},
2967 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_AT45DB,
2968 		.unlock		= SPI_DISABLE_BLOCKPROTECT_AT45DB, /* Impossible if locked down or #WP is low */
2969 		/* granularity will be set by the probing function. */
2970 		.write		= SPI_WRITE_AT45DB,
2971 		.read		= SPI_READ_AT45DB, /* Fast read (0x0B) supported */
2972 		.voltage	= {2700, 3600}, /* 2.5-3.6V & 2.7-3.6V models available */
2973 	},
2974 
2975 	{
2976 		.vendor		= "Atmel",
2977 		.name		= "AT45DB161D",
2978 		.bustype	= BUS_SPI,
2979 		.manufacture_id	= ATMEL_ID,
2980 		.model_id	= ATMEL_AT45DB161D,
2981 		.total_size	= 2048, /* or 2112, determined from status register */
2982 		.page_size	= 512, /* or 528, determined from status register */
2983 		/* does not support EWSR nor WREN and has no writable status register bits whatsoever */
2984 		/* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */
2985 		.feature_bits	= FEATURE_OTP,
2986 		.tested		= TEST_OK_PREW,
2987 		.probe		= PROBE_SPI_AT45DB,
2988 		.probe_timing	= TIMING_ZERO,
2989 		.block_erasers	=
2990 		{
2991 			{
2992 				.eraseblocks = { {512, 4096} },
2993 				.block_erase = SPI_ERASE_AT45DB_PAGE,
2994 			}, {
2995 				.eraseblocks = { {8 * 512, 4096/8} },
2996 				.block_erase = SPI_ERASE_AT45DB_BLOCK,
2997 			}, {
2998 				.eraseblocks = {
2999 					{8 * 512, 1},
3000 					{248 * 512, 1},
3001 					{256 * 512, 15},
3002 				},
3003 				.block_erase = SPI_ERASE_AT45DB_SECTOR
3004 			}, {
3005 				.eraseblocks = { {2048 * 1024, 1} },
3006 				.block_erase = SPI_ERASE_AT45DB_CHIP,
3007 			}
3008 		},
3009 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_AT45DB,
3010 		.unlock		= SPI_DISABLE_BLOCKPROTECT_AT45DB, /* Impossible if locked down or #WP is low */
3011 		/* granularity will be set by the probing function. */
3012 		.write		= SPI_WRITE_AT45DB,
3013 		.read		= SPI_READ_AT45DB, /* Fast read (0x0B) supported */
3014 		.voltage	= {2700, 3600}, /* 2.5-3.6V & 2.7-3.6V models available */
3015 	},
3016 
3017 	{
3018 		.vendor		= "Atmel",
3019 		.name		= "AT45DB321C",
3020 		.bustype	= BUS_SPI,
3021 		.manufacture_id	= ATMEL_ID,
3022 		.model_id	= ATMEL_AT45DB321C,
3023 		.total_size	= 4224, /* No power of two sizes */
3024 		.page_size	= 528, /* No power of two sizes */
3025 		/* does not support EWSR nor WREN and has no writable status register bits whatsoever */
3026 		/* OTP: 128B total, 64B pre-programmed; read 0x77 (4 dummy bytes); write 0x9A (via buffer) */
3027 		.feature_bits	= FEATURE_OTP,
3028 		.tested		= TEST_UNTESTED,
3029 		.probe		= PROBE_SPI_RDID,
3030 		.probe_timing	= TIMING_ZERO,
3031 		.block_erasers	=
3032 		{
3033 			{
3034 				.eraseblocks = { {528, 8192} },
3035 				.block_erase = SPI_ERASE_AT45DB_PAGE,
3036 			}, {
3037 				.eraseblocks = { {8 * 528, 8192/8} },
3038 				.block_erase = SPI_ERASE_AT45DB_BLOCK,
3039 			}, /* Although the datasheets describes sectors (which can be write protected)
3040 			    * there seems to be no erase functions for them.
3041 			{
3042 				.eraseblocks = {
3043 					{8 * 528, 1},
3044 					{120 * 528, 1},
3045 					{128 * 528, 63},
3046 				},
3047 				.block_erase = SPI_ERASE_AT45DB_SECTOR
3048 			}, */ {
3049 				.eraseblocks = { {4224 * 1024, 1} },
3050 				.block_erase = SPI_ERASE_AT45DB_CHIP,
3051 			}
3052 		},
3053 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_AT45DB, /* Bit 0 is undefined, no lockdown */
3054 		.write		= SPI_WRITE_AT45DB,
3055 		.read		= SPI_READ_AT45DB_E8, /* 3 address and 4 dummy bytes */
3056 		.voltage	= {2700, 3600},
3057 		.gran		= WRITE_GRAN_528BYTES,
3058 	},
3059 
3060 	{
3061 		.vendor		= "Atmel",
3062 		.name		= "AT45DB321D",
3063 		.bustype	= BUS_SPI,
3064 		.manufacture_id	= ATMEL_ID,
3065 		.model_id	= ATMEL_AT45DB321D,
3066 		.total_size	= 4096, /* or 4224, determined from status register */
3067 		.page_size	= 512, /* or 528, determined from status register */
3068 		/* does not support EWSR nor WREN and has no writable status register bits whatsoever */
3069 		/* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */
3070 		.feature_bits	= FEATURE_OTP,
3071 		.tested		= TEST_OK_PREW,
3072 		.probe		= PROBE_SPI_AT45DB,
3073 		.probe_timing	= TIMING_ZERO,
3074 		.block_erasers	=
3075 		{
3076 			{
3077 				.eraseblocks = { {512, 8192} },
3078 				.block_erase = SPI_ERASE_AT45DB_PAGE,
3079 			}, {
3080 				.eraseblocks = { {8 * 512, 8192/8} },
3081 				.block_erase = SPI_ERASE_AT45DB_BLOCK,
3082 			}, {
3083 				.eraseblocks = {
3084 					{8 * 512, 1},
3085 					{120 * 512, 1},
3086 					{128 * 512, 63},
3087 				},
3088 				.block_erase = SPI_ERASE_AT45DB_SECTOR
3089 			}, {
3090 				.eraseblocks = { {4096 * 1024, 1} },
3091 				.block_erase = SPI_ERASE_AT45DB_CHIP,
3092 			}
3093 		},
3094 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_AT45DB,
3095 		.unlock		= SPI_DISABLE_BLOCKPROTECT_AT45DB, /* Impossible if locked down or #WP is low */
3096 		/* granularity will be set by the probing function. */
3097 		.write		= SPI_WRITE_AT45DB,
3098 		.read		= SPI_READ_AT45DB, /* Fast read (0x0B) supported */
3099 		.voltage	= {2700, 3600}, /* 2.5-3.6V & 2.7-3.6V models available */
3100 	},
3101 
3102 	{
3103 		.vendor		= "Atmel",
3104 		.name		= "AT45DB321E",
3105 		.bustype	= BUS_SPI,
3106 		.manufacture_id	= ATMEL_ID,
3107 		.model_id	= ATMEL_AT45DB321C,
3108 		.total_size	= 4096, /* or 4224, determined from status register */
3109 		.page_size	= 512, /* or 528, determined from status register */
3110 		/* does not support EWSR nor WREN and has no writable status register bits whatsoever */
3111 		/* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */
3112 		.feature_bits	= FEATURE_OTP,
3113 		.tested		= TEST_UNTESTED,
3114 		.probe		= PROBE_SPI_AT45DB,
3115 		.probe_timing	= TIMING_ZERO,
3116 		.block_erasers	=
3117 		{
3118 			{
3119 				.eraseblocks = { {512, 8192} },
3120 				.block_erase = SPI_ERASE_AT45DB_PAGE,
3121 			}, {
3122 				.eraseblocks = { {8 * 512, 8192/8} },
3123 				.block_erase = SPI_ERASE_AT45DB_BLOCK,
3124 			}, {
3125 				.eraseblocks = {
3126 					{8 * 512, 1},
3127 					{120 * 512, 1},
3128 					{128 * 512, 63},
3129 				},
3130 				.block_erase = SPI_ERASE_AT45DB_SECTOR
3131 			}, {
3132 				.eraseblocks = { {4096 * 1024, 1} },
3133 				.block_erase = SPI_ERASE_AT45DB_CHIP,
3134 			}
3135 		},
3136 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_AT45DB, /* has a 2nd status register */
3137 		.unlock		= SPI_DISABLE_BLOCKPROTECT_AT45DB, /* Impossible if locked down or #WP is low */
3138 		/* granularity will be set by the probing function. */
3139 		.write		= SPI_WRITE_AT45DB,
3140 		.read		= SPI_READ_AT45DB, /* Fast read (0x0B) supported */
3141 		.voltage	= {2500, 3600}, /* 2.3-3.6V & 2.5-3.6V models available */
3142 	},
3143 
3144 	{
3145 		.vendor		= "Atmel",
3146 		.name		= "AT45DB642D",
3147 		.bustype	= BUS_SPI,
3148 		.manufacture_id	= ATMEL_ID,
3149 		.model_id	= ATMEL_AT45DB642D,
3150 		.total_size	= 8192, /* or 8448, determined from status register */
3151 		.page_size	= 1024, /* or 1056, determined from status register */
3152 		/* does not support EWSR nor WREN and has no writable status register bits whatsoever */
3153 		/* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */
3154 		.feature_bits	= FEATURE_OTP,
3155 		.tested		= TEST_OK_PREW,
3156 		.probe		= PROBE_SPI_AT45DB,
3157 		.probe_timing	= TIMING_ZERO,
3158 		.block_erasers	=
3159 		{
3160 			{
3161 				.eraseblocks = { {1024, 8192} },
3162 				.block_erase = SPI_ERASE_AT45DB_PAGE,
3163 			}, {
3164 				.eraseblocks = { {8 * 1024, 8192/8} },
3165 				.block_erase = SPI_ERASE_AT45DB_BLOCK,
3166 			}, {
3167 				.eraseblocks = {
3168 					{8 * 1024, 1},
3169 					{248 * 1024, 1},
3170 					{256 * 1024, 31},
3171 				},
3172 				.block_erase = SPI_ERASE_AT45DB_SECTOR
3173 			}, {
3174 				.eraseblocks = { {8192 * 1024, 1} },
3175 				.block_erase = SPI_ERASE_AT45DB_CHIP,
3176 			}
3177 		},
3178 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_AT45DB,
3179 		.unlock		= SPI_DISABLE_BLOCKPROTECT_AT45DB, /* Impossible if locked down or #WP is low */
3180 		/* granularity will be set by the probing function. */
3181 		.write		= SPI_WRITE_AT45DB,
3182 		.read		= SPI_READ_AT45DB, /* Fast read (0x0B) supported */
3183 		.voltage	= {2700, 3600},
3184 	},
3185 
3186 	{
3187 		.vendor		= "Atmel",
3188 		.name		= "AT49(H)F010",
3189 		.bustype	= BUS_PARALLEL,
3190 		.manufacture_id	= ATMEL_ID,
3191 		.model_id	= ATMEL_AT49F010,
3192 		.total_size	= 128,
3193 		.page_size	= 0, /* unused */
3194 		.feature_bits	= FEATURE_EITHER_RESET,
3195 		.tested		= TEST_OK_PREW,
3196 		.probe		= PROBE_JEDEC,
3197 		.probe_timing	= TIMING_ZERO,	/* Datasheet has no timing info specified */
3198 		.block_erasers	=
3199 		{
3200 			{
3201 				.eraseblocks = { {128 * 1024, 1} },
3202 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
3203 			}
3204 		},
3205 		.printlock	= PRINTLOCK_AT49F,
3206 		.write		= WRITE_JEDEC1,
3207 		.read		= READ_MEMMAPPED,
3208 		.voltage	= {4500, 5500},
3209 	},
3210 
3211 	{
3212 		.vendor		= "Atmel",
3213 		.name		= "AT49BV512",
3214 		.bustype	= BUS_PARALLEL,
3215 		.manufacture_id	= ATMEL_ID,
3216 		.model_id	= ATMEL_AT49BV512,
3217 		.total_size	= 64,
3218 		.page_size	= 64,
3219 		.feature_bits	= FEATURE_EITHER_RESET,
3220 		.tested		= TEST_OK_PREW,
3221 		.probe		= PROBE_JEDEC,
3222 		.probe_timing	= TIMING_ZERO,	/* Datasheet has no timing info specified */
3223 		.block_erasers	=
3224 		{
3225 			{
3226 				.eraseblocks = { {64 * 1024, 1} },
3227 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
3228 			}
3229 		},
3230 		.write		= WRITE_JEDEC1,
3231 		.read		= READ_MEMMAPPED,
3232 		.voltage	= {2700, 3600},
3233 	},
3234 
3235 	{
3236 		.vendor		= "Atmel",
3237 		.name		= "AT49F002(N)",
3238 		.bustype	= BUS_PARALLEL,
3239 		.manufacture_id	= ATMEL_ID,
3240 		.model_id	= ATMEL_AT49F002N,
3241 		.total_size	= 256,
3242 		.page_size	= 256,
3243 		.feature_bits	= FEATURE_EITHER_RESET,
3244 		.tested		= TEST_UNTESTED,
3245 		.probe		= PROBE_JEDEC,
3246 		.probe_timing	= TIMING_ZERO,	/* Datasheet has no timing info specified */
3247 		.block_erasers	=
3248 		{
3249 			{
3250 				.eraseblocks = {
3251 					{16 * 1024, 1},
3252 					{8 * 1024, 2},
3253 					{96 * 1024, 1},
3254 					{128 * 1024, 1},
3255 				},
3256 				.block_erase = JEDEC_SECTOR_ERASE,
3257 			}, {
3258 				.eraseblocks = { {256 * 1024, 1} },
3259 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
3260 			}
3261 		},
3262 		.write		= WRITE_JEDEC1,
3263 		.read		= READ_MEMMAPPED,
3264 		.voltage	= {4500, 5500},
3265 	},
3266 
3267 	{
3268 		.vendor		= "Atmel",
3269 		.name		= "AT49F002(N)T",
3270 		.bustype	= BUS_PARALLEL,
3271 		.manufacture_id	= ATMEL_ID,
3272 		.model_id	= ATMEL_AT49F002NT,
3273 		.total_size	= 256,
3274 		.page_size	= 256,
3275 		.feature_bits	= FEATURE_EITHER_RESET,
3276 		.tested		= TEST_OK_PR,
3277 		.probe		= PROBE_JEDEC,
3278 		.probe_timing	= TIMING_ZERO,	/* Datasheet has no timing info specified */
3279 		.block_erasers	=
3280 		{
3281 			{
3282 				.eraseblocks = {
3283 					{128 * 1024, 1},
3284 					{96 * 1024, 1},
3285 					{8 * 1024, 2},
3286 					{16 * 1024, 1},
3287 				},
3288 				.block_erase = JEDEC_SECTOR_ERASE,
3289 			}, {
3290 				.eraseblocks = { {256 * 1024, 1} },
3291 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
3292 			}
3293 		},
3294 		.write		= WRITE_JEDEC1,
3295 		.read		= READ_MEMMAPPED,
3296 		.voltage	= {4500, 5500},
3297 	},
3298 
3299 	{
3300 		.vendor		= "Atmel",
3301 		.name		= "AT49F020",
3302 		.bustype	= BUS_PARALLEL,
3303 		.manufacture_id	= ATMEL_ID,
3304 		.model_id	= ATMEL_AT49F020,
3305 		.total_size	= 256,
3306 		.page_size	= 0, /* unused */
3307 		.feature_bits	= FEATURE_EITHER_RESET,
3308 		.tested		= TEST_OK_PRE,
3309 		.probe		= PROBE_JEDEC,
3310 		.probe_timing	= TIMING_ZERO,	/* Datasheet has no timing info specified */
3311 		.block_erasers	=
3312 		{
3313 			{
3314 				.eraseblocks = { {256 * 1024, 1} },
3315 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
3316 			}
3317 			/* Chip features an optional permanent write protection
3318 			 * of the first 8 kB. The erase function is the same as
3319 			 * above, but 00000H to 01FFFH will not be erased.
3320 			 * FIXME: add another eraser when partial erasers are
3321 			 * supported.
3322 			 */
3323 		},
3324 		.printlock	= PRINTLOCK_AT49F,
3325 		.write		= WRITE_JEDEC1,
3326 		.read		= READ_MEMMAPPED,
3327 		.voltage	= {4500, 5500},
3328 	},
3329 
3330 	{
3331 		.vendor		= "Atmel",
3332 		.name		= "AT49F040",
3333 		.bustype	= BUS_PARALLEL,
3334 		.manufacture_id	= ATMEL_ID,
3335 		.model_id	= ATMEL_AT49F040,
3336 		.total_size	= 512,
3337 		.page_size	= 0, /* unused */
3338 		.feature_bits	= FEATURE_EITHER_RESET,
3339 		.tested		= TEST_UNTESTED,
3340 		.probe		= PROBE_JEDEC,
3341 		.probe_timing	= TIMING_ZERO,  /* Datasheet has no timing info specified */
3342 		.block_erasers	=
3343 		{
3344 			{
3345 				.eraseblocks = { {512 * 1024, 1} },
3346 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
3347 			}
3348 			/* Chip features an optional permanent write protection
3349 			 * of the first 16 kB. The erase function is the same as
3350 			 * above, but 00000H to 03FFFH will not be erased.
3351 			 * FIXME: add another eraser when partial erasers are
3352 			 * supported.
3353 			 */
3354 		},
3355 		.printlock	= PRINTLOCK_AT49F,
3356 		.write		= WRITE_JEDEC1,
3357 		.read		= READ_MEMMAPPED,
3358 		.voltage	= {4500, 5500},
3359 	},
3360 
3361 	{
3362 		.vendor		= "Atmel",
3363 		.name		= "AT49F080",
3364 		.bustype	= BUS_PARALLEL,
3365 		.manufacture_id	= ATMEL_ID,
3366 		.model_id	= ATMEL_AT49F080,
3367 		.total_size	= 1024,
3368 		.page_size	= 0, /* unused */
3369 		.feature_bits	= FEATURE_EITHER_RESET,
3370 		.tested		= TEST_UNTESTED,
3371 		.probe		= PROBE_JEDEC,
3372 		.probe_timing	= TIMING_ZERO,  /* Datasheet has no timing info specified */
3373 		.block_erasers	=
3374 		{
3375 			{
3376 				.eraseblocks = { {1024 * 1024, 1} },
3377 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
3378 			}
3379 			/* Chip features an optional permanent write protection
3380 			 * of the first 16 kB. The erase function is the same as
3381 			 * above, but 00000H to 03FFFH will not be erased.
3382 			 * FIXME: add another eraser when partial erasers are
3383 			 * supported.
3384 			 */
3385 		},
3386 		.printlock	= PRINTLOCK_AT49F,
3387 		.write		= WRITE_JEDEC1,
3388 		.read		= READ_MEMMAPPED,
3389 		.voltage	= {4500, 5500},
3390 	},
3391 
3392 	{
3393 		/* 'top' version of AT49F080. equal in all aspects but the boot block address */
3394 		.vendor		= "Atmel",
3395 		.name		= "AT49F080T",
3396 		.bustype	= BUS_PARALLEL,
3397 		.manufacture_id	= ATMEL_ID,
3398 		.model_id	= ATMEL_AT49F080T,
3399 		.total_size	= 1024,
3400 		.page_size	= 0, /* unused */
3401 		.feature_bits	= FEATURE_EITHER_RESET,
3402 		.tested		= TEST_UNTESTED,
3403 		.probe		= PROBE_JEDEC,
3404 		.probe_timing	= TIMING_ZERO,  /* Datasheet has no timing info specified */
3405 		.block_erasers	=
3406 		{
3407 			{
3408 				.eraseblocks = { {1024 * 1024, 1} },
3409 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
3410 			}
3411 			/* Chip features an optional permanent write protection
3412 			 * of the first 16 kB. The erase function is the same as
3413 			 * above, but FC000H to FFFFFH will not be erased.
3414 			 * FIXME: add another eraser when partial erasers are
3415 			 * supported.
3416 			 */
3417 		},
3418 		.printlock	= PRINTLOCK_AT49F,
3419 		.write		= WRITE_JEDEC1,
3420 		.read		= READ_MEMMAPPED,
3421 		.voltage	= {4500, 5500},
3422 	},
3423 
3424 	{
3425 		.vendor		= "Atmel",
3426 		.name		= "AT49LH002",
3427 		.bustype	= BUS_LPC | BUS_FWH, /* A/A Mux */
3428 		.manufacture_id	= ATMEL_ID,
3429 		.model_id	= ATMEL_AT49LH002,
3430 		.total_size	= 256,
3431 		.page_size	= 0, /* unused */
3432 		.feature_bits	= FEATURE_REGISTERMAP,
3433 		.tested		= TEST_UNTESTED,
3434 		.probe		= PROBE_AT82802AB,
3435 		.probe_timing	= TIMING_ZERO,
3436 		.block_erasers	=
3437 		{
3438 			{
3439 				.eraseblocks = {
3440 					{64 * 1024, 3},
3441 					{32 * 1024, 1},
3442 					{8 * 1024, 2},
3443 					{16 * 1024, 1},
3444 				},
3445 				.block_erase = NO_BLOCK_ERASE_FUNC, /* TODO: Implement. */
3446 			}, {
3447 				.eraseblocks = {
3448 					{64 * 1024, 4},
3449 				},
3450 				.block_erase = ERASE_BLOCK_82802AB,
3451 			},
3452 		},
3453 		.printlock	= PRINTLOCK_REGSPACE2_BLOCK_ERASER_0,
3454 		.unlock		= UNLOCK_REGSPACE2_BLOCK_ERASER_0,
3455 		.write		= WRITE_82802AB,
3456 		.read		= READ_MEMMAPPED,
3457 		.voltage	= {3000, 3600},
3458 	},
3459 
3460 	{
3461 		.vendor		= "Atmel",
3462 		.name		= "AT49LH004",
3463 		.bustype	= BUS_LPC | BUS_FWH, /* A/A Mux */
3464 		.manufacture_id	= ATMEL_ID,
3465 		.model_id	= ATMEL_AT49LH004,
3466 		.total_size	= 512,
3467 		.page_size	= 0, /* unused */
3468 		.feature_bits	= FEATURE_REGISTERMAP,
3469 		.tested		= TEST_UNTESTED,
3470 		.probe		= PROBE_AT82802AB,
3471 		.probe_timing	= TIMING_ZERO,
3472 		.block_erasers	=
3473 		{
3474 			{
3475 				.eraseblocks = {
3476 					{64 * 1024, 7},
3477 					{32 * 1024, 1},
3478 					{8 * 1024, 2},
3479 					{16 * 1024, 1},
3480 				},
3481 				.block_erase = ERASE_BLOCK_82802AB,
3482 			}, {
3483 				.eraseblocks = {
3484 					{64 * 1024, 8},
3485 				},
3486 				.block_erase = NO_BLOCK_ERASE_FUNC, /* TODO: Implement. */
3487 			},
3488 		},
3489 		.printlock	= PRINTLOCK_REGSPACE2_BLOCK_ERASER_0,
3490 		.unlock		= UNLOCK_REGSPACE2_BLOCK_ERASER_0,
3491 		.write		= WRITE_82802AB,
3492 		.read		= READ_MEMMAPPED,
3493 		.voltage	= {3000, 3600},
3494 	},
3495 
3496 	{
3497 		.vendor		= "Atmel",
3498 		.name		= "AT49LH00B4",
3499 		.bustype	= BUS_LPC | BUS_FWH, /* A/A Mux */
3500 		.manufacture_id	= ATMEL_ID,
3501 		.model_id	= ATMEL_AT49LH00B4,
3502 		.total_size	= 512,
3503 		.page_size	= 0, /* unused */
3504 		.feature_bits	= FEATURE_REGISTERMAP,
3505 		.tested		= TEST_UNTESTED,
3506 		.probe		= PROBE_AT82802AB,
3507 		.probe_timing	= TIMING_ZERO,
3508 		.block_erasers	=
3509 		{
3510 			{
3511 				.eraseblocks = {
3512 					{8 * 1024, 2},
3513 					{16 * 1024, 1},
3514 					{32 * 1024, 1},
3515 					{64 * 1024, 7},
3516 				},
3517 				.block_erase = NO_BLOCK_ERASE_FUNC, /* TODO: Implement. */
3518 			}, {
3519 				.eraseblocks = {
3520 					{64 * 1024, 8},
3521 				},
3522 				.block_erase = ERASE_BLOCK_82802AB,
3523 			},
3524 		},
3525 		.printlock	= PRINTLOCK_REGSPACE2_BLOCK_ERASER_0,
3526 		.unlock		= UNLOCK_REGSPACE2_BLOCK_ERASER_0,
3527 		.write		= WRITE_82802AB,
3528 		.read		= READ_MEMMAPPED,
3529 		.voltage	= {3000, 3600},
3530 	},
3531 
3532 	{
3533 		.vendor		= "Boya/BoHong Microelectronics",
3534 		.name		= "B.25D16A",
3535 		.bustype	= BUS_SPI,
3536 		.manufacture_id	= BOYA_BOHONG_ID,
3537 		.model_id	= BOYA_BOHONG_B_25D16A,
3538 		.total_size	= 2048,
3539 		.page_size	= 256,
3540 		.feature_bits	= FEATURE_WRSR_WREN,
3541 		.tested		= TEST_OK_PR,
3542 		.probe		= PROBE_SPI_RDID,
3543 		.probe_timing	= TIMING_ZERO,
3544 		.block_erasers	=
3545 		{
3546 			{
3547 				.eraseblocks = { {4 * 1024, 512} },
3548 				.block_erase = SPI_BLOCK_ERASE_20,
3549 			}, {
3550 				.eraseblocks = { {32 * 1024, 64} },
3551 				.block_erase = SPI_BLOCK_ERASE_52,
3552 			}, {
3553 				.eraseblocks = { {64 * 1024, 32} },
3554 				.block_erase = SPI_BLOCK_ERASE_D8,
3555 			}, {
3556 				.eraseblocks = { {2 * 1024 * 1024, 1} },
3557 				.block_erase = SPI_BLOCK_ERASE_60,
3558 			}, {
3559 				.eraseblocks = { {2 * 1024 * 1024, 1} },
3560 				.block_erase = SPI_BLOCK_ERASE_C7,
3561 			}
3562 		},
3563 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
3564 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD,
3565 		.write		= SPI_CHIP_WRITE256,
3566 		.read		= SPI_CHIP_READ,
3567 		.voltage	= {2700, 3600},
3568 	},
3569 
3570 	{
3571 		.vendor		= "Boya/BoHong Microelectronics",
3572 		.name		= "B.25D80A",
3573 		.bustype	= BUS_SPI,
3574 		.manufacture_id	= BOYA_BOHONG_ID,
3575 		.model_id	= BOYA_BOHONG_B__25D80A,
3576 		.total_size	= 1024,
3577 		.page_size	= 256,
3578 		.feature_bits	= FEATURE_WRSR_WREN,
3579 		.tested		= TEST_OK_PR,
3580 		.probe		= PROBE_SPI_RDID,
3581 		.probe_timing	= TIMING_ZERO,
3582 		.block_erasers	=
3583 		{
3584 			{
3585 				.eraseblocks = { {4 * 1024, 256} },
3586 				.block_erase = SPI_BLOCK_ERASE_20,
3587 			}, {
3588 				.eraseblocks = { {32 * 1024, 32} },
3589 				.block_erase = SPI_BLOCK_ERASE_52,
3590 			}, {
3591 				.eraseblocks = { {64 * 1024, 16} },
3592 				.block_erase = SPI_BLOCK_ERASE_D8,
3593 			}, {
3594 				.eraseblocks = { {1 * 1024 * 1024, 1} },
3595 				.block_erase = SPI_BLOCK_ERASE_60,
3596 			}, {
3597 				.eraseblocks = { {1 * 1024 * 1024, 1} },
3598 				.block_erase = SPI_BLOCK_ERASE_C7,
3599 			}
3600 		},
3601 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
3602 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD,
3603 		.write		= SPI_CHIP_WRITE256,
3604 		.read		= SPI_CHIP_READ,
3605 		.voltage	= {2700, 3600},
3606 	},
3607 
3608 	{
3609 		.vendor		= "Boya/BoHong Microelectronics",
3610 		.name		= "B.25Q64AS",
3611 		.bustype	= BUS_SPI,
3612 		.manufacture_id	= BOYA_BOHONG_ID,
3613 		.model_id	= BOYA_BOHONG_B_25Q64AS,
3614 		.total_size	= 8192,
3615 		.page_size	= 256,
3616 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
3617 		.tested		= TEST_OK_PREW,
3618 		.probe		= PROBE_SPI_RDID,
3619 		.probe_timing	= TIMING_ZERO,
3620 		.block_erasers	=
3621 		{
3622 			{
3623 				.eraseblocks = { {4 * 1024, 2048} },
3624 				.block_erase = SPI_BLOCK_ERASE_20,
3625 			}, {
3626 				.eraseblocks = { {32 * 1024, 256} },
3627 				.block_erase = SPI_BLOCK_ERASE_52,
3628 			}, {
3629 				.eraseblocks = { {64 * 1024, 128} },
3630 				.block_erase = SPI_BLOCK_ERASE_D8,
3631 			}, {
3632 				.eraseblocks = { {16 * 512 * 1024, 1} },
3633 				.block_erase = SPI_BLOCK_ERASE_60,
3634 			}, {
3635 				.eraseblocks = { {16 * 512 * 1024, 1} },
3636 				.block_erase = SPI_BLOCK_ERASE_C7,
3637 			}
3638 		},
3639 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN,
3640 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP4_SRWD,
3641 		.write		= SPI_CHIP_WRITE256,
3642 		.read		= SPI_CHIP_READ,
3643 		.voltage	= {2700, 3600},
3644 	},
3645 
3646 	{
3647 		.vendor		= "Boya/BoHong Microelectronics",
3648 		.name		= "B.25Q128AS",
3649 		.bustype	= BUS_SPI,
3650 		.manufacture_id	= BOYA_BOHONG_ID,
3651 		.model_id	= BOYA_BOHONG_B_25Q128AS,
3652 		.total_size	= 16384,
3653 		.page_size	= 256,
3654 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
3655 		.tested		= TEST_OK_PREW,
3656 		.probe		= PROBE_SPI_RDID,
3657 		.probe_timing	= TIMING_ZERO,
3658 		.block_erasers	=
3659 		{
3660 			{
3661 				.eraseblocks = { {4 * 1024, 4096} },
3662 				.block_erase = SPI_BLOCK_ERASE_20,
3663 			}, {
3664 				.eraseblocks = { {32 * 1024, 512} },
3665 				.block_erase = SPI_BLOCK_ERASE_52,
3666 			}, {
3667 				.eraseblocks = { {64 * 1024, 256} },
3668 				.block_erase = SPI_BLOCK_ERASE_D8,
3669 			}, {
3670 				.eraseblocks = { {16 * 1024 * 1024, 1} },
3671 				.block_erase = SPI_BLOCK_ERASE_60,
3672 			}, {
3673 				.eraseblocks = { {16 * 1024 * 1024, 1} },
3674 				.block_erase = SPI_BLOCK_ERASE_C7,
3675 			}
3676 		},
3677 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN,
3678 		.unlock		= SPI_DISABLE_BLOCKPROTECT_AT25FS040,
3679 		.write		= SPI_CHIP_WRITE256,
3680 		.read		= SPI_CHIP_READ,
3681 		.voltage	= {2700, 3600},
3682 	},
3683 
3684 	{
3685 		.vendor		= "Bright",
3686 		.name		= "BM29F040",
3687 		.bustype	= BUS_PARALLEL,
3688 		.manufacture_id	= BRIGHT_ID,
3689 		.model_id	= BRIGHT_BM29F040,
3690 		.total_size	= 512,
3691 		.page_size	= 64 * 1024,
3692 		.feature_bits	= FEATURE_EITHER_RESET,
3693 		.tested		= TEST_OK_PR,
3694 		.probe		= PROBE_JEDEC,
3695 		.probe_timing	= TIMING_ZERO,
3696 		.block_erasers	=
3697 		{
3698 			{
3699 				.eraseblocks = { {64 * 1024, 8} },
3700 				.block_erase = JEDEC_SECTOR_ERASE,
3701 			}, {
3702 				.eraseblocks = { {512 * 1024, 1} },
3703 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
3704 			},
3705 		},
3706 		.write		= WRITE_JEDEC1,
3707 		.read		= READ_MEMMAPPED,
3708 		.voltage	= {4500, 5500},
3709 	},
3710 
3711 	{
3712 		.vendor		= "Catalyst",
3713 		.name		= "CAT28F512",
3714 		.bustype	= BUS_PARALLEL,
3715 		.manufacture_id	= CATALYST_ID,
3716 		.model_id	= CATALYST_CAT28F512,
3717 		.total_size	= 64,
3718 		.page_size	= 0, /* unused */
3719 		.feature_bits	= 0,
3720 		.tested		= {.probe = OK, .read = OK, .erase = BAD, .write = BAD, .wp = NA},
3721 		.probe		= PROBE_JEDEC, /* FIXME! */
3722 		.probe_timing	= TIMING_ZERO,
3723 		.block_erasers	=
3724 		{
3725 			{
3726 				.eraseblocks = { {64 * 1024, 1} },
3727 				.block_erase = NO_BLOCK_ERASE_FUNC, /* TODO */
3728 			},
3729 		},
3730 		.write		= 0, /* TODO */
3731 		.read		= READ_MEMMAPPED,
3732 		.voltage	= {4500, 5500},
3733 	},
3734 
3735 	{
3736 		.vendor		= "ENE",
3737 		.name		= "KB9012 (EDI)",
3738 		.bustype	= BUS_SPI,
3739 		.total_size	= 128,
3740 		.page_size	= 128,
3741 		.feature_bits	= FEATURE_ERASED_ZERO,
3742 		.tested		= TEST_OK_PREW,
3743 		.spi_cmd_set	= SPI_EDI,
3744 		.probe		= PROBE_EDI_KB9012,
3745 		.probe_timing	= TIMING_ZERO,
3746 		.block_erasers	=
3747 		{
3748 			{
3749 				.eraseblocks = { {128, 1024} },
3750 				.block_erase = EDI_CHIP_BLOCK_ERASE,
3751 			},
3752 		},
3753 		.write		= EDI_CHIP_WRITE,
3754 		.read		= EDI_CHIP_READ,
3755 		.voltage	= {2700, 3600},
3756 		.gran		= WRITE_GRAN_128BYTES,
3757 	},
3758 
3759 	{
3760 		.vendor		= "ESI",
3761 		.name		= "ES25P16",
3762 		.bustype	= BUS_SPI,
3763 		.manufacture_id	= EXCEL_ID_NOPREFIX,
3764 		.model_id	= EXCEL_ES25P16,
3765 		.total_size	= 2 * 1024,
3766 		.page_size	= 256,
3767 		/* 256-byte parameter page separate from memory array:
3768 		 * supports read (0x53), fast read (0x5B), erase (0xD5) and program (0x52) instructions. */
3769 		.feature_bits	= FEATURE_WRSR_WREN,
3770 		.tested		= TEST_UNTESTED,
3771 		.probe		= PROBE_SPI_RDID,
3772 		.probe_timing	= TIMING_ZERO,
3773 		.block_erasers	=
3774 		{
3775 			{
3776 				.eraseblocks = { {64 * 1024, 32} },
3777 				.block_erase = SPI_BLOCK_ERASE_D8,
3778 			}, {
3779 				.eraseblocks = { {2 * 1024 * 1024, 1} },
3780 				.block_erase = SPI_BLOCK_ERASE_C7,
3781 			}
3782 		},
3783 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
3784 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD,
3785 		.write		= SPI_CHIP_WRITE256,
3786 		.read		= SPI_CHIP_READ, /* Fast Read (0x0B) supported */
3787 		.voltage	= {2700, 3600},
3788 	},
3789 
3790 	{
3791 		.vendor		= "ESI",
3792 		.name		= "ES25P40",
3793 		.bustype	= BUS_SPI,
3794 		.manufacture_id	= EXCEL_ID_NOPREFIX,
3795 		.model_id	= EXCEL_ES25P40,
3796 		.total_size	= 512,
3797 		.page_size	= 256,
3798 		/* 256-byte parameter page separate from memory array:
3799 		 * supports read (0x53), fast read (0x5B), erase (0xD5) and program (0x52) instructions. */
3800 		.feature_bits	= FEATURE_WRSR_WREN,
3801 		.tested		= TEST_UNTESTED,
3802 		.probe		= PROBE_SPI_RDID,
3803 		.probe_timing	= TIMING_ZERO,
3804 		.block_erasers	=
3805 		{
3806 			{
3807 				.eraseblocks = { {64 * 1024, 8} },
3808 				.block_erase = SPI_BLOCK_ERASE_D8,
3809 			}, {
3810 				.eraseblocks = { {512 * 1024, 1} },
3811 				.block_erase = SPI_BLOCK_ERASE_C7,
3812 			}
3813 		},
3814 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
3815 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD,
3816 		.write		= SPI_CHIP_WRITE256,
3817 		.read		= SPI_CHIP_READ, /* Fast Read (0x0B) supported */
3818 		.voltage	= {2700, 3600},
3819 	},
3820 
3821 	{
3822 		.vendor		= "ESI",
3823 		.name		= "ES25P80",
3824 		.bustype	= BUS_SPI,
3825 		.manufacture_id	= EXCEL_ID_NOPREFIX,
3826 		.model_id	= EXCEL_ES25P80,
3827 		.total_size	= 1024,
3828 		.page_size	= 256,
3829 		/* 256-byte parameter page separate from memory array:
3830 		 * supports read (0x53), fast read (0x5B), erase (0xD5) and program (0x52) instructions. */
3831 		.feature_bits	= FEATURE_WRSR_WREN,
3832 		.tested		= TEST_UNTESTED,
3833 		.probe		= PROBE_SPI_RDID,
3834 		.probe_timing	= TIMING_ZERO,
3835 		.block_erasers	=
3836 		{
3837 			{
3838 				.eraseblocks = { {64 * 1024, 16} },
3839 				.block_erase = SPI_BLOCK_ERASE_D8,
3840 			}, {
3841 				.eraseblocks = { {1024 * 1024, 1} },
3842 				.block_erase = SPI_BLOCK_ERASE_C7,
3843 			}
3844 		},
3845 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
3846 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD,
3847 		.write		= SPI_CHIP_WRITE256,
3848 		.read		= SPI_CHIP_READ, /* Fast Read (0x0B) supported */
3849 		.voltage	= {2700, 3600},
3850 	},
3851 
3852 	{
3853 		.vendor		= "ESMT",
3854 		.name		= "F25L008A",
3855 		.bustype	= BUS_SPI,
3856 		.manufacture_id	= ESMT_ID,
3857 		.model_id	= ESMT_F25L008A,
3858 		.total_size	= 1024,
3859 		.page_size	= 256,
3860 		.feature_bits	= FEATURE_WRSR_EITHER,
3861 		.tested		= TEST_OK_PREW,
3862 		.probe		= PROBE_SPI_RDID,
3863 		.probe_timing	= TIMING_ZERO,
3864 		.block_erasers	=
3865 		{
3866 			{
3867 				.eraseblocks = { {4 * 1024, 256} },
3868 				.block_erase = SPI_BLOCK_ERASE_20,
3869 			}, {
3870 				.eraseblocks = { {64 * 1024, 16} },
3871 				.block_erase = SPI_BLOCK_ERASE_D8,
3872 			}, {
3873 				.eraseblocks = { {1024 * 1024, 1} },
3874 				.block_erase = SPI_BLOCK_ERASE_60,
3875 			}, {
3876 				.eraseblocks = { {1024 * 1024, 1} },
3877 				.block_erase = SPI_BLOCK_ERASE_C7,
3878 			}
3879 		},
3880 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
3881 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
3882 		.write		= SPI_CHIP_WRITE1,
3883 		.read		= SPI_CHIP_READ,
3884 		.voltage	= {2700, 3600},
3885 	},
3886 
3887 	{
3888 		.vendor		= "ESMT",
3889 		.name		= "F25L32PA",
3890 		.bustype	= BUS_SPI,
3891 		.manufacture_id	= ESMT_ID,
3892 		.model_id	= ESMT_F25L32PA,
3893 		.total_size	= 4096,
3894 		.page_size	= 256,
3895 		.feature_bits	= FEATURE_WRSR_EITHER | FEATURE_OTP,
3896 		.tested		= TEST_UNTESTED,
3897 		.probe		= PROBE_SPI_RDID,
3898 		.probe_timing	= TIMING_ZERO,
3899 		.block_erasers	=
3900 		{
3901 			{
3902 				.eraseblocks = { {4 * 1024, 1024} },
3903 				.block_erase = SPI_BLOCK_ERASE_20,
3904 			}, {
3905 				.eraseblocks = { {64 * 1024, 64} },
3906 				.block_erase = SPI_BLOCK_ERASE_D8,
3907 			}, {
3908 				.eraseblocks = { {4 * 1024 * 1024, 1} },
3909 				.block_erase = SPI_BLOCK_ERASE_60,
3910 			}, {
3911 				.eraseblocks = { {4 * 1024 * 1024, 1} },
3912 				.block_erase = SPI_BLOCK_ERASE_C7,
3913 			}
3914 		},
3915 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_BPL,
3916 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
3917 		.write		= SPI_CHIP_WRITE256,
3918 		.read		= SPI_CHIP_READ,
3919 		.voltage	= {2700, 3600},
3920 	},
3921 
3922 	{
3923 		.vendor		= "ESMT",
3924 		.name		= "F49B002UA",
3925 		.bustype	= BUS_PARALLEL,
3926 		.manufacture_id	= ESMT_ID,
3927 		.model_id	= ESMT_F49B002UA,
3928 		.total_size	= 256,
3929 		.page_size	= 4096,
3930 		.feature_bits	= FEATURE_EITHER_RESET,
3931 		.tested		= TEST_UNTESTED,
3932 		.probe		= PROBE_JEDEC,
3933 		.probe_timing	= TIMING_ZERO,	/* Datasheet has no timing info specified */
3934 		.block_erasers	=
3935 		{
3936 			{
3937 				.eraseblocks = {
3938 					{128 * 1024, 1},
3939 					{96 * 1024, 1},
3940 					{8 * 1024, 2},
3941 					{16 * 1024, 1},
3942 				},
3943 				.block_erase = JEDEC_SECTOR_ERASE,
3944 			}, {
3945 				.eraseblocks = { {256 * 1024, 1} },
3946 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
3947 			}
3948 		},
3949 		.write		= WRITE_JEDEC1,
3950 		.read		= READ_MEMMAPPED,
3951 		.voltage	= {4500, 5500},
3952 	},
3953 
3954 	{
3955 		.vendor		= "Eon",
3956 		.name		= "EN25B05",
3957 		.bustype	= BUS_SPI,
3958 		.manufacture_id	= EON_ID_NOPREFIX,
3959 		.model_id	= EON_EN25B05,
3960 		.total_size	= 64,
3961 		.page_size	= 256,
3962 		.feature_bits	= FEATURE_WRSR_WREN,
3963 		.tested		= TEST_UNTESTED,
3964 		.probe		= PROBE_SPI_RDID,
3965 		.probe_timing	= TIMING_ZERO,
3966 		.block_erasers	=
3967 		{
3968 			{
3969 				.eraseblocks = {
3970 					{4 * 1024, 2},
3971 					{8 * 1024, 1},
3972 					{16 * 1024, 1},
3973 					{32 * 1024, 1},
3974 				},
3975 				.block_erase = SPI_BLOCK_ERASE_D8,
3976 			}, {
3977 				.eraseblocks = { {64 * 1024, 1} },
3978 				.block_erase = SPI_BLOCK_ERASE_C7,
3979 			}
3980 		},
3981 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
3982 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
3983 		.write		= SPI_CHIP_WRITE256,
3984 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
3985 		.voltage	= {2700, 3600},
3986 	},
3987 
3988 	{
3989 		.vendor		= "Eon",
3990 		.name		= "EN25B05T",
3991 		.bustype	= BUS_SPI,
3992 		.manufacture_id	= EON_ID_NOPREFIX,
3993 		.model_id	= EON_EN25B05,
3994 		.total_size	= 64,
3995 		.page_size	= 256,
3996 		.feature_bits	= FEATURE_WRSR_WREN,
3997 		.tested		= TEST_UNTESTED,
3998 		.probe		= PROBE_SPI_RDID,
3999 		.probe_timing	= TIMING_ZERO,
4000 		.block_erasers	=
4001 		{
4002 			{
4003 				.eraseblocks = {
4004 					{32 * 1024, 1},
4005 					{16 * 1024, 1},
4006 					{8 * 1024, 1},
4007 					{4 * 1024, 2},
4008 				},
4009 				.block_erase = SPI_BLOCK_ERASE_D8,
4010 			}, {
4011 				.eraseblocks = { {64 * 1024, 1} },
4012 				.block_erase = SPI_BLOCK_ERASE_C7,
4013 			}
4014 		},
4015 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
4016 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
4017 		.write		= SPI_CHIP_WRITE256,
4018 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
4019 		.voltage	= {2700, 3600},
4020 	},
4021 
4022 	{
4023 		.vendor		= "Eon",
4024 		.name		= "EN25B10",
4025 		.bustype	= BUS_SPI,
4026 		.manufacture_id	= EON_ID_NOPREFIX,
4027 		.model_id	= EON_EN25B10,
4028 		.total_size	= 128,
4029 		.page_size	= 256,
4030 		.feature_bits	= FEATURE_WRSR_WREN,
4031 		.tested		= TEST_UNTESTED,
4032 		.probe		= PROBE_SPI_RDID,
4033 		.probe_timing	= TIMING_ZERO,
4034 		.block_erasers	=
4035 		{
4036 			{
4037 				.eraseblocks = {
4038 					{4 * 1024, 2},
4039 					{8 * 1024, 1},
4040 					{16 * 1024, 1},
4041 					{32 * 1024, 3},
4042 				},
4043 				.block_erase = SPI_BLOCK_ERASE_D8,
4044 			}, {
4045 				.eraseblocks = { {128 * 1024, 1} },
4046 				.block_erase = SPI_BLOCK_ERASE_C7,
4047 			}
4048 		},
4049 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
4050 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
4051 		.write		= SPI_CHIP_WRITE256,
4052 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
4053 		.voltage	= {2700, 3600},
4054 	},
4055 
4056 	{
4057 		.vendor		= "Eon",
4058 		.name		= "EN25B10T",
4059 		.bustype	= BUS_SPI,
4060 		.manufacture_id	= EON_ID_NOPREFIX,
4061 		.model_id	= EON_EN25B10,
4062 		.total_size	= 128,
4063 		.page_size	= 256,
4064 		.feature_bits	= FEATURE_WRSR_WREN,
4065 		.tested		= TEST_OK_PREW,
4066 		.probe		= PROBE_SPI_RDID,
4067 		.probe_timing	= TIMING_ZERO,
4068 		.block_erasers	=
4069 		{
4070 			{
4071 				.eraseblocks = {
4072 					{32 * 1024, 3},
4073 					{16 * 1024, 1},
4074 					{8 * 1024, 1},
4075 					{4 * 1024, 2},
4076 				},
4077 				.block_erase = SPI_BLOCK_ERASE_D8,
4078 			}, {
4079 				.eraseblocks = { {128 * 1024, 1} },
4080 				.block_erase = SPI_BLOCK_ERASE_C7,
4081 			}
4082 		},
4083 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
4084 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
4085 		.write		= SPI_CHIP_WRITE256,
4086 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
4087 		.voltage	= {2700, 3600},
4088 	},
4089 
4090 	{
4091 		.vendor		= "Eon",
4092 		.name		= "EN25B16",
4093 		.bustype	= BUS_SPI,
4094 		.manufacture_id	= EON_ID_NOPREFIX,
4095 		.model_id	= EON_EN25B16,
4096 		.total_size	= 2048,
4097 		.page_size	= 256,
4098 		.feature_bits	= FEATURE_WRSR_WREN,
4099 		.tested		= TEST_UNTESTED,
4100 		.probe		= PROBE_SPI_RDID,
4101 		.probe_timing	= TIMING_ZERO,
4102 		.block_erasers	=
4103 		{
4104 			{
4105 				.eraseblocks = {
4106 					{4 * 1024, 2},
4107 					{8 * 1024, 1},
4108 					{16 * 1024, 1},
4109 					{32 * 1024, 1},
4110 					{64 * 1024, 31},
4111 				},
4112 				.block_erase = SPI_BLOCK_ERASE_D8,
4113 			}, {
4114 				.eraseblocks = { {2 * 1024 * 1024, 1} },
4115 				.block_erase = SPI_BLOCK_ERASE_C7,
4116 			}
4117 		},
4118 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
4119 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
4120 		.write		= SPI_CHIP_WRITE256,
4121 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
4122 		.voltage	= {2700, 3600},
4123 	},
4124 
4125 	{
4126 		.vendor		= "Eon",
4127 		.name		= "EN25B16T",
4128 		.bustype	= BUS_SPI,
4129 		.manufacture_id	= EON_ID_NOPREFIX,
4130 		.model_id	= EON_EN25B16,
4131 		.total_size	= 2048,
4132 		.page_size	= 256,
4133 		.feature_bits	= FEATURE_WRSR_WREN,
4134 		.tested		= TEST_UNTESTED,
4135 		.probe		= PROBE_SPI_RDID,
4136 		.probe_timing	= TIMING_ZERO,
4137 		.block_erasers	=
4138 		{
4139 			{
4140 				.eraseblocks = {
4141 					{64 * 1024, 31},
4142 					{32 * 1024, 1},
4143 					{16 * 1024, 1},
4144 					{8 * 1024, 1},
4145 					{4 * 1024, 2},
4146 				},
4147 				.block_erase = SPI_BLOCK_ERASE_D8,
4148 			}, {
4149 				.eraseblocks = { {2 * 1024 * 1024, 1} },
4150 				.block_erase = SPI_BLOCK_ERASE_C7,
4151 			}
4152 		},
4153 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
4154 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
4155 		.write		= SPI_CHIP_WRITE256,
4156 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
4157 		.voltage	= {2700, 3600},
4158 	},
4159 
4160 	{
4161 		.vendor		= "Eon",
4162 		.name		= "EN25B20",
4163 		.bustype	= BUS_SPI,
4164 		.manufacture_id	= EON_ID_NOPREFIX,
4165 		.model_id	= EON_EN25B20,
4166 		.total_size	= 256,
4167 		.page_size	= 256,
4168 		.feature_bits	= FEATURE_WRSR_WREN,
4169 		.tested		= TEST_UNTESTED,
4170 		.probe		= PROBE_SPI_RDID,
4171 		.probe_timing	= TIMING_ZERO,
4172 		.block_erasers	=
4173 		{
4174 			{
4175 				.eraseblocks = {
4176 					{4 * 1024, 2},
4177 					{8 * 1024, 1},
4178 					{16 * 1024, 1},
4179 					{32 * 1024, 1},
4180 					{64 * 1024, 3}
4181 				},
4182 				.block_erase = SPI_BLOCK_ERASE_D8,
4183 			}, {
4184 				.eraseblocks = { {256 * 1024, 1} },
4185 				.block_erase = SPI_BLOCK_ERASE_C7,
4186 			}
4187 		},
4188 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
4189 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
4190 		.write		= SPI_CHIP_WRITE256,
4191 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
4192 		.voltage	= {2700, 3600},
4193 	},
4194 
4195 	{
4196 		.vendor		= "Eon",
4197 		.name		= "EN25B20T",
4198 		.bustype	= BUS_SPI,
4199 		.manufacture_id	= EON_ID_NOPREFIX,
4200 		.model_id	= EON_EN25B20,
4201 		.total_size	= 256,
4202 		.page_size	= 256,
4203 		.feature_bits	= FEATURE_WRSR_WREN,
4204 		.tested		= TEST_UNTESTED,
4205 		.probe		= PROBE_SPI_RDID,
4206 		.probe_timing	= TIMING_ZERO,
4207 		.block_erasers	=
4208 		{
4209 			{
4210 				.eraseblocks = {
4211 					{64 * 1024, 3},
4212 					{32 * 1024, 1},
4213 					{16 * 1024, 1},
4214 					{8 * 1024, 1},
4215 					{4 * 1024, 2},
4216 				},
4217 				.block_erase = SPI_BLOCK_ERASE_D8,
4218 			}, {
4219 				.eraseblocks = { {256 * 1024, 1} },
4220 				.block_erase = SPI_BLOCK_ERASE_C7,
4221 			}
4222 		},
4223 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
4224 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
4225 		.write		= SPI_CHIP_WRITE256,
4226 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
4227 		.voltage	= {2700, 3600},
4228 	},
4229 
4230 	{
4231 		.vendor		= "Eon",
4232 		.name		= "EN25B32",
4233 		.bustype	= BUS_SPI,
4234 		.manufacture_id	= EON_ID_NOPREFIX,
4235 		.model_id	= EON_EN25B32,
4236 		.total_size	= 4096,
4237 		.page_size	= 256,
4238 		/* OTP: 512B total; enter 0x3A */
4239 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
4240 		.tested		= TEST_UNTESTED,
4241 		.probe		= PROBE_SPI_RDID,
4242 		.probe_timing	= TIMING_ZERO,
4243 		.block_erasers	=
4244 		{
4245 			{
4246 				.eraseblocks = {
4247 					{4 * 1024, 2},
4248 					{8 * 1024, 1},
4249 					{16 * 1024, 1},
4250 					{32 * 1024, 1},
4251 					{64 * 1024, 63},
4252 				},
4253 				.block_erase = SPI_BLOCK_ERASE_D8,
4254 			}, {
4255 				.eraseblocks = { {4 * 1024 * 1024, 1} },
4256 				.block_erase = SPI_BLOCK_ERASE_C7,
4257 			}
4258 		},
4259 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
4260 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
4261 		.write		= SPI_CHIP_WRITE256,
4262 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
4263 		.voltage	= {2700, 3600},
4264 	},
4265 
4266 	{
4267 		.vendor		= "Eon",
4268 		.name		= "EN25B32T",
4269 		.bustype	= BUS_SPI,
4270 		.manufacture_id	= EON_ID_NOPREFIX,
4271 		.model_id	= EON_EN25B32,
4272 		.total_size	= 4096,
4273 		.page_size	= 256,
4274 		/* OTP: 512B total; enter 0x3A */
4275 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
4276 		.tested		= TEST_UNTESTED,
4277 		.probe		= PROBE_SPI_RDID,
4278 		.probe_timing	= TIMING_ZERO,
4279 		.block_erasers	=
4280 		{
4281 			{
4282 				.eraseblocks = {
4283 					{64 * 1024, 63},
4284 					{32 * 1024, 1},
4285 					{16 * 1024, 1},
4286 					{8 * 1024, 1},
4287 					{4 * 1024, 2},
4288 				},
4289 				.block_erase = SPI_BLOCK_ERASE_D8,
4290 			}, {
4291 				.eraseblocks = { {4 * 1024 * 1024, 1} },
4292 				.block_erase = SPI_BLOCK_ERASE_C7,
4293 			}
4294 		},
4295 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
4296 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
4297 		.write		= SPI_CHIP_WRITE256,
4298 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
4299 		.voltage	= {2700, 3600},
4300 	},
4301 
4302 	{
4303 		.vendor		= "Eon",
4304 		.name		= "EN25B40",
4305 		.bustype	= BUS_SPI,
4306 		.manufacture_id	= EON_ID_NOPREFIX,
4307 		.model_id	= EON_EN25B40,
4308 		.total_size	= 512,
4309 		.page_size	= 256,
4310 		.feature_bits	= FEATURE_WRSR_WREN,
4311 		.tested		= TEST_UNTESTED,
4312 		.probe		= PROBE_SPI_RDID,
4313 		.probe_timing	= TIMING_ZERO,
4314 		.block_erasers	=
4315 		{
4316 			{
4317 				.eraseblocks = {
4318 					{4 * 1024, 2},
4319 					{8 * 1024, 1},
4320 					{16 * 1024, 1},
4321 					{32 * 1024, 1},
4322 					{64 * 1024, 7}
4323 				},
4324 				.block_erase = SPI_BLOCK_ERASE_D8,
4325 			}, {
4326 				.eraseblocks = { {512 * 1024, 1} },
4327 				.block_erase = SPI_BLOCK_ERASE_C7,
4328 			}
4329 		},
4330 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
4331 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
4332 		.write		= SPI_CHIP_WRITE256,
4333 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
4334 		.voltage	= {2700, 3600},
4335 	},
4336 
4337 	{
4338 		.vendor		= "Eon",
4339 		.name		= "EN25B40T",
4340 		.bustype	= BUS_SPI,
4341 		.manufacture_id	= EON_ID_NOPREFIX,
4342 		.model_id	= EON_EN25B40,
4343 		.total_size	= 512,
4344 		.page_size	= 256,
4345 		.feature_bits	= FEATURE_WRSR_WREN,
4346 		.tested		= TEST_UNTESTED,
4347 		.probe		= PROBE_SPI_RDID,
4348 		.probe_timing	= TIMING_ZERO,
4349 		.block_erasers	=
4350 		{
4351 			{
4352 				.eraseblocks = {
4353 					{64 * 1024, 7},
4354 					{32 * 1024, 1},
4355 					{16 * 1024, 1},
4356 					{8 * 1024, 1},
4357 					{4 * 1024, 2},
4358 				},
4359 				.block_erase = SPI_BLOCK_ERASE_D8,
4360 			}, {
4361 				.eraseblocks = { {512 * 1024, 1} },
4362 				.block_erase = SPI_BLOCK_ERASE_C7,
4363 			}
4364 		},
4365 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
4366 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
4367 		.write		= SPI_CHIP_WRITE256,
4368 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
4369 		.voltage	= {2700, 3600},
4370 	},
4371 
4372 	{
4373 		.vendor		= "Eon",
4374 		.name		= "EN25B64",
4375 		.bustype	= BUS_SPI,
4376 		.manufacture_id	= EON_ID_NOPREFIX,
4377 		.model_id	= EON_EN25B64,
4378 		.total_size	= 8192,
4379 		.page_size	= 256,
4380 		/* OTP: 512B total; enter 0x3A */
4381 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
4382 		.tested		= TEST_UNTESTED,
4383 		.probe		= PROBE_SPI_RDID,
4384 		.probe_timing	= TIMING_ZERO,
4385 		.block_erasers	=
4386 		{
4387 			{
4388 				.eraseblocks = {
4389 					{4 * 1024, 2},
4390 					{8 * 1024, 1},
4391 					{16 * 1024, 1},
4392 					{32 * 1024, 1},
4393 					{64 * 1024, 127},
4394 				},
4395 				.block_erase = SPI_BLOCK_ERASE_D8,
4396 			}, {
4397 				.eraseblocks = { {8 * 1024 * 1024, 1} },
4398 				.block_erase = SPI_BLOCK_ERASE_C7,
4399 			}
4400 		},
4401 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
4402 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
4403 		.write		= SPI_CHIP_WRITE256,
4404 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
4405 		.voltage	= {2700, 3600},
4406 	},
4407 
4408 	{
4409 		.vendor		= "Eon",
4410 		.name		= "EN25B64T",
4411 		.bustype	= BUS_SPI,
4412 		.manufacture_id	= EON_ID_NOPREFIX,
4413 		.model_id	= EON_EN25B64,
4414 		.total_size	= 8192,
4415 		.page_size	= 256,
4416 		/* OTP: 512B total; enter 0x3A */
4417 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
4418 		.tested		= TEST_UNTESTED,
4419 		.probe		= PROBE_SPI_RDID,
4420 		.probe_timing	= TIMING_ZERO,
4421 		.block_erasers	=
4422 		{
4423 			{
4424 				.eraseblocks = {
4425 					{64 * 1024, 127},
4426 					{32 * 1024, 1},
4427 					{16 * 1024, 1},
4428 					{8 * 1024, 1},
4429 					{4 * 1024, 2},
4430 				},
4431 				.block_erase = SPI_BLOCK_ERASE_D8,
4432 			}, {
4433 				.eraseblocks = { {8 * 1024 * 1024, 1} },
4434 				.block_erase = SPI_BLOCK_ERASE_C7,
4435 			}
4436 		},
4437 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
4438 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
4439 		.write		= SPI_CHIP_WRITE256,
4440 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
4441 		.voltage	= {2700, 3600},
4442 	},
4443 
4444 	{
4445 		.vendor		= "Eon",
4446 		.name		= "EN25B80",
4447 		.bustype	= BUS_SPI,
4448 		.manufacture_id	= EON_ID_NOPREFIX,
4449 		.model_id	= EON_EN25B80,
4450 		.total_size	= 1024,
4451 		.page_size	= 256,
4452 		.feature_bits	= FEATURE_WRSR_WREN,
4453 		.tested		= TEST_UNTESTED,
4454 		.probe		= PROBE_SPI_RDID,
4455 		.probe_timing	= TIMING_ZERO,
4456 		.block_erasers	=
4457 		{
4458 			{
4459 				.eraseblocks = {
4460 					{4 * 1024, 2},
4461 					{8 * 1024, 1},
4462 					{16 * 1024, 1},
4463 					{32 * 1024, 1},
4464 					{64 * 1024, 15}
4465 				},
4466 				.block_erase = SPI_BLOCK_ERASE_D8,
4467 			}, {
4468 				.eraseblocks = { {1024 * 1024, 1} },
4469 				.block_erase = SPI_BLOCK_ERASE_C7,
4470 			}
4471 		},
4472 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
4473 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
4474 		.write		= SPI_CHIP_WRITE256,
4475 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
4476 		.voltage	= {2700, 3600},
4477 	},
4478 
4479 	{
4480 		.vendor		= "Eon",
4481 		.name		= "EN25B80T",
4482 		.bustype	= BUS_SPI,
4483 		.manufacture_id	= EON_ID_NOPREFIX,
4484 		.model_id	= EON_EN25B80,
4485 		.total_size	= 1024,
4486 		.page_size	= 256,
4487 		.feature_bits	= FEATURE_WRSR_WREN,
4488 		.tested		= TEST_UNTESTED,
4489 		.probe		= PROBE_SPI_RDID,
4490 		.probe_timing	= TIMING_ZERO,
4491 		.block_erasers	=
4492 		{
4493 			{
4494 				.eraseblocks = {
4495 					{64 * 1024, 15},
4496 					{32 * 1024, 1},
4497 					{16 * 1024, 1},
4498 					{8 * 1024, 1},
4499 					{4 * 1024, 2},
4500 				},
4501 				.block_erase = SPI_BLOCK_ERASE_D8,
4502 			}, {
4503 				.eraseblocks = { {1024 * 1024, 1} },
4504 				.block_erase = SPI_BLOCK_ERASE_C7,
4505 			}
4506 		},
4507 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
4508 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
4509 		.write		= SPI_CHIP_WRITE256,
4510 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
4511 		.voltage	= {2700, 3600},
4512 	},
4513 
4514 	{
4515 		.vendor		= "Eon",
4516 		.name		= "EN25F05",
4517 		.bustype	= BUS_SPI,
4518 		.manufacture_id	= EON_ID_NOPREFIX,
4519 		.model_id	= EON_EN25F05,
4520 		.total_size	= 64,
4521 		.page_size	= 256,
4522 		.feature_bits	= FEATURE_WRSR_WREN,
4523 		.tested		= TEST_OK_PREW,
4524 		.probe		= PROBE_SPI_RDID,
4525 		.probe_timing	= TIMING_ZERO,
4526 		.block_erasers	=
4527 		{
4528 			{
4529 				.eraseblocks = { {4 * 1024, 16} },
4530 				.block_erase = SPI_BLOCK_ERASE_20,
4531 			}, {
4532 				.eraseblocks = { {32 * 1024, 2} },
4533 				.block_erase = SPI_BLOCK_ERASE_D8,
4534 			}, {
4535 				.eraseblocks = { {32 * 1024, 2} },
4536 				.block_erase = SPI_BLOCK_ERASE_52,
4537 			}, {
4538 				.eraseblocks = { {64 * 1024, 1} },
4539 				.block_erase = SPI_BLOCK_ERASE_60,
4540 			}, {
4541 				.eraseblocks = { {64 * 1024, 1} },
4542 				.block_erase = SPI_BLOCK_ERASE_C7,
4543 			}
4544 		},
4545 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
4546 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
4547 		.write		= SPI_CHIP_WRITE256,
4548 		.read		= SPI_CHIP_READ,
4549 		.voltage	= {2700, 3600},
4550 	},
4551 
4552 	{
4553 		.vendor		= "Eon",
4554 		.name		= "EN25F10",
4555 		.bustype	= BUS_SPI,
4556 		.manufacture_id	= EON_ID_NOPREFIX,
4557 		.model_id	= EON_EN25F10,
4558 		.total_size	= 128,
4559 		.page_size	= 256,
4560 		.feature_bits	= FEATURE_WRSR_WREN,
4561 		.tested		= TEST_OK_PREW,
4562 		.probe		= PROBE_SPI_RDID,
4563 		.probe_timing	= TIMING_ZERO,
4564 		.block_erasers	=
4565 		{
4566 			{
4567 				.eraseblocks = { {4 * 1024, 32} },
4568 				.block_erase = SPI_BLOCK_ERASE_20,
4569 			}, {
4570 				.eraseblocks = { {32 * 1024, 4} },
4571 				.block_erase = SPI_BLOCK_ERASE_D8,
4572 			}, {
4573 				.eraseblocks = { {32 * 1024, 4} },
4574 				.block_erase = SPI_BLOCK_ERASE_52,
4575 			}, {
4576 				.eraseblocks = { {128 * 1024, 1} },
4577 				.block_erase = SPI_BLOCK_ERASE_60,
4578 			}, {
4579 				.eraseblocks = { {128 * 1024, 1} },
4580 				.block_erase = SPI_BLOCK_ERASE_C7,
4581 			}
4582 		},
4583 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
4584 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
4585 		.write		= SPI_CHIP_WRITE256,
4586 		.read		= SPI_CHIP_READ,
4587 		.voltage	= {2700, 3600},
4588 	},
4589 
4590 	{
4591 		.vendor		= "Eon",
4592 		.name		= "EN25F16",
4593 		.bustype	= BUS_SPI,
4594 		.manufacture_id	= EON_ID_NOPREFIX,
4595 		.model_id	= EON_EN25F16,
4596 		.total_size	= 2048,
4597 		.page_size	= 256,
4598 		.feature_bits	= FEATURE_WRSR_WREN,
4599 		.tested		= TEST_OK_PREW,
4600 		.probe		= PROBE_SPI_RDID,
4601 		.probe_timing	= TIMING_ZERO,
4602 		.block_erasers	=
4603 		{
4604 			{
4605 				.eraseblocks = { {4 * 1024, 512} },
4606 				.block_erase = SPI_BLOCK_ERASE_20,
4607 			}, {
4608 				.eraseblocks = { {64 * 1024, 32} },
4609 				.block_erase = SPI_BLOCK_ERASE_D8,
4610 			}, {
4611 				.eraseblocks = { {2 * 1024 * 1024, 1} },
4612 				.block_erase = SPI_BLOCK_ERASE_60,
4613 			}, {
4614 				.eraseblocks = { {2 * 1024 * 1024, 1} },
4615 				.block_erase = SPI_BLOCK_ERASE_C7,
4616 			}
4617 		},
4618 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
4619 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
4620 		.write		= SPI_CHIP_WRITE256,
4621 		.read		= SPI_CHIP_READ,
4622 		.voltage	= {2700, 3600},
4623 	},
4624 
4625 	{
4626 		.vendor		= "Eon",
4627 		.name		= "EN25F20",
4628 		.bustype	= BUS_SPI,
4629 		.manufacture_id	= EON_ID_NOPREFIX,
4630 		.model_id	= EON_EN25F20,
4631 		.total_size	= 256,
4632 		.page_size	= 256,
4633 		.feature_bits	= FEATURE_WRSR_WREN,
4634 		.tested		= TEST_UNTESTED,
4635 		.probe		= PROBE_SPI_RDID,
4636 		.probe_timing	= TIMING_ZERO,
4637 		.block_erasers	=
4638 		{
4639 			{
4640 				.eraseblocks = { {4 * 1024, 64} },
4641 				.block_erase = SPI_BLOCK_ERASE_20,
4642 			}, {
4643 				.eraseblocks = { {64 * 1024, 4} },
4644 				.block_erase = SPI_BLOCK_ERASE_D8,
4645 			}, {
4646 				.eraseblocks = { {64 * 1024, 4} },
4647 				.block_erase = SPI_BLOCK_ERASE_52,
4648 			}, {
4649 				.eraseblocks = { {256 * 1024, 1} },
4650 				.block_erase = SPI_BLOCK_ERASE_60,
4651 			}, {
4652 				.eraseblocks = { {256 * 1024, 1} },
4653 				.block_erase = SPI_BLOCK_ERASE_C7,
4654 			}
4655 		},
4656 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
4657 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
4658 		.write		= SPI_CHIP_WRITE256,
4659 		.read		= SPI_CHIP_READ,
4660 		.voltage	= {2700, 3600},
4661 	},
4662 
4663 	{
4664 		.vendor		= "Eon",
4665 		.name		= "EN25F32",
4666 		.bustype	= BUS_SPI,
4667 		.manufacture_id	= EON_ID_NOPREFIX,
4668 		.model_id	= EON_EN25F32,
4669 		.total_size	= 4096,
4670 		.page_size	= 256,
4671 		.feature_bits	= FEATURE_WRSR_WREN,
4672 		.tested		= TEST_OK_PREW,
4673 		.probe		= PROBE_SPI_RDID,
4674 		.probe_timing	= TIMING_ZERO,
4675 		.block_erasers	=
4676 		{
4677 			{
4678 				.eraseblocks = { {4 * 1024, 1024} },
4679 				.block_erase = SPI_BLOCK_ERASE_20,
4680 			}, {
4681 				.eraseblocks = { {64 * 1024, 64} },
4682 				.block_erase = SPI_BLOCK_ERASE_D8,
4683 			}, {
4684 				.eraseblocks = { {4 * 1024 * 1024, 1} },
4685 				.block_erase = SPI_BLOCK_ERASE_60,
4686 			}, {
4687 				.eraseblocks = { {4 * 1024 * 1024, 1} },
4688 				.block_erase = SPI_BLOCK_ERASE_C7,
4689 			}
4690 		},
4691 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
4692 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
4693 		.write		= SPI_CHIP_WRITE256,
4694 		.read		= SPI_CHIP_READ,
4695 		.voltage	= {2700, 3600},
4696 	},
4697 
4698 	{
4699 		.vendor		= "Eon",
4700 		.name		= "EN25F40",
4701 		.bustype	= BUS_SPI,
4702 		.manufacture_id	= EON_ID_NOPREFIX,
4703 		.model_id	= EON_EN25F40,
4704 		.total_size	= 512,
4705 		.page_size	= 256,
4706 		.feature_bits	= FEATURE_WRSR_WREN,
4707 		.tested		= TEST_OK_PREW,
4708 		.probe		= PROBE_SPI_RDID,
4709 		.probe_timing	= TIMING_ZERO,
4710 		.block_erasers	=
4711 		{
4712 			{
4713 				.eraseblocks = { {4 * 1024, 128} },
4714 				.block_erase = SPI_BLOCK_ERASE_20,
4715 			}, {
4716 				.eraseblocks = { {64 * 1024, 8} },
4717 				.block_erase = SPI_BLOCK_ERASE_D8,
4718 			}, {
4719 				.eraseblocks = { {512 * 1024, 1} },
4720 				.block_erase = SPI_BLOCK_ERASE_60,
4721 			}, {
4722 				.eraseblocks = { {512 * 1024, 1} },
4723 				.block_erase = SPI_BLOCK_ERASE_C7,
4724 			},
4725 		},
4726 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
4727 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
4728 		.write		= SPI_CHIP_WRITE256,
4729 		.read		= SPI_CHIP_READ,
4730 		.voltage	= {2700, 3600},
4731 	},
4732 
4733 	{
4734 		.vendor		= "Eon",
4735 		.name		= "EN25F64",
4736 		.bustype	= BUS_SPI,
4737 		.manufacture_id	= EON_ID_NOPREFIX,
4738 		.model_id	= EON_EN25F64,
4739 		.total_size	= 8192,
4740 		.page_size	= 256,
4741 		.feature_bits	= FEATURE_WRSR_WREN,
4742 		.tested		= TEST_OK_PREW,
4743 		.probe		= PROBE_SPI_RDID,
4744 		.probe_timing	= TIMING_ZERO,
4745 		.block_erasers	=
4746 		{
4747 			{
4748 				.eraseblocks = { {4 * 1024, 2048} },
4749 				.block_erase = SPI_BLOCK_ERASE_20,
4750 			}, {
4751 				.eraseblocks = { {64 * 1024, 128} },
4752 				.block_erase = SPI_BLOCK_ERASE_D8,
4753 			}, {
4754 				.eraseblocks = { {8 * 1024 * 1024, 1} },
4755 				.block_erase = SPI_BLOCK_ERASE_60,
4756 			}, {
4757 				.eraseblocks = { {8 * 1024 * 1024, 1} },
4758 				.block_erase = SPI_BLOCK_ERASE_C7,
4759 			}
4760 		},
4761 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
4762 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
4763 		.write		= SPI_CHIP_WRITE256,
4764 		.read		= SPI_CHIP_READ,
4765 		.voltage	= {2700, 3600},
4766 	},
4767 
4768 	{
4769 		.vendor		= "Eon",
4770 		.name		= "EN25F80",
4771 		.bustype	= BUS_SPI,
4772 		.manufacture_id	= EON_ID_NOPREFIX,
4773 		.model_id	= EON_EN25F80,
4774 		.total_size	= 1024,
4775 		.page_size	= 256,
4776 		.feature_bits	= FEATURE_WRSR_WREN,
4777 		.tested		= TEST_OK_PREW,
4778 		.probe		= PROBE_SPI_RDID,
4779 		.probe_timing	= TIMING_ZERO,
4780 		.block_erasers	=
4781 		{
4782 			{
4783 				.eraseblocks = { {4 * 1024, 256} },
4784 				.block_erase = SPI_BLOCK_ERASE_20,
4785 			}, {
4786 				.eraseblocks = { {64 * 1024, 16} },
4787 				.block_erase = SPI_BLOCK_ERASE_D8,
4788 			}, {
4789 				.eraseblocks = { {1024 * 1024, 1} },
4790 				.block_erase = SPI_BLOCK_ERASE_60,
4791 			}, {
4792 				.eraseblocks = { {1024 * 1024, 1} },
4793 				.block_erase = SPI_BLOCK_ERASE_C7,
4794 			}
4795 		},
4796 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
4797 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
4798 		.write		= SPI_CHIP_WRITE256,
4799 		.read		= SPI_CHIP_READ,
4800 		.voltage	= {2700, 3600},
4801 	},
4802 
4803 	{
4804 		.vendor		= "Eon",
4805 		.name		= "EN25P05",
4806 		.bustype	= BUS_SPI,
4807 		.manufacture_id	= EON_ID_NOPREFIX,
4808 		.model_id	= EON_EN25B05,
4809 		.total_size	= 64,
4810 		.page_size	= 256,
4811 		.feature_bits	= FEATURE_WRSR_WREN,
4812 		.tested		= TEST_UNTESTED,
4813 		.probe		= PROBE_SPI_RDID,
4814 		.probe_timing	= TIMING_ZERO,
4815 		.block_erasers	=
4816 		{
4817 			{
4818 				.eraseblocks = {
4819 					{32 * 1024, 2} },
4820 				.block_erase = SPI_BLOCK_ERASE_D8,
4821 			}, {
4822 				.eraseblocks = { {64 * 1024, 1} },
4823 				.block_erase = SPI_BLOCK_ERASE_C7,
4824 			}
4825 		},
4826 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
4827 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
4828 		.write		= SPI_CHIP_WRITE256,
4829 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
4830 		.voltage	= {2700, 3600},
4831 	},
4832 
4833 	{
4834 		.vendor		= "Eon",
4835 		.name		= "EN25P10",
4836 		.bustype	= BUS_SPI,
4837 		.manufacture_id	= EON_ID_NOPREFIX,
4838 		.model_id	= EON_EN25B10,
4839 		.total_size	= 128,
4840 		.page_size	= 256,
4841 		.feature_bits	= FEATURE_WRSR_WREN,
4842 		.tested		= TEST_UNTESTED,
4843 		.probe		= PROBE_SPI_RDID,
4844 		.probe_timing	= TIMING_ZERO,
4845 		.block_erasers	=
4846 		{
4847 			{
4848 				.eraseblocks = { {32 * 1024, 4} },
4849 				.block_erase = SPI_BLOCK_ERASE_D8,
4850 			}, {
4851 				.eraseblocks = { {128 * 1024, 1} },
4852 				.block_erase = SPI_BLOCK_ERASE_C7,
4853 			}
4854 		},
4855 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
4856 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
4857 		.write		= SPI_CHIP_WRITE256,
4858 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
4859 		.voltage	= {2700, 3600},
4860 	},
4861 
4862 	{
4863 		.vendor		= "Eon",
4864 		.name		= "EN25P16",
4865 		.bustype	= BUS_SPI,
4866 		.manufacture_id	= EON_ID_NOPREFIX,
4867 		.model_id	= EON_EN25B16,
4868 		.total_size	= 2048,
4869 		.page_size	= 256,
4870 		.feature_bits	= FEATURE_WRSR_WREN,
4871 		.tested		= TEST_UNTESTED,
4872 		.probe		= PROBE_SPI_RDID,
4873 		.probe_timing	= TIMING_ZERO,
4874 		.block_erasers	=
4875 		{
4876 			{
4877 				.eraseblocks = { {64 * 1024, 32} },
4878 				.block_erase = SPI_BLOCK_ERASE_D8,
4879 			}, {
4880 				.eraseblocks = { {2 * 1024 * 1024, 1} },
4881 				.block_erase = SPI_BLOCK_ERASE_C7,
4882 			}
4883 		},
4884 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
4885 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
4886 		.write		= SPI_CHIP_WRITE256,
4887 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
4888 		.voltage	= {2700, 3600},
4889 	},
4890 
4891 	{
4892 		.vendor		= "Eon",
4893 		.name		= "EN25P20",
4894 		.bustype	= BUS_SPI,
4895 		.manufacture_id	= EON_ID_NOPREFIX,
4896 		.model_id	= EON_EN25B20,
4897 		.total_size	= 256,
4898 		.page_size	= 256,
4899 		.feature_bits	= FEATURE_WRSR_WREN,
4900 		.tested		= TEST_UNTESTED,
4901 		.probe		= PROBE_SPI_RDID,
4902 		.probe_timing	= TIMING_ZERO,
4903 		.block_erasers	=
4904 		{
4905 			{
4906 				.eraseblocks = { {64 * 1024, 4} },
4907 				.block_erase = SPI_BLOCK_ERASE_D8,
4908 			}, {
4909 				.eraseblocks = { {256 * 1024, 1} },
4910 				.block_erase = SPI_BLOCK_ERASE_C7,
4911 			}
4912 		},
4913 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
4914 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
4915 		.write		= SPI_CHIP_WRITE256,
4916 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
4917 		.voltage	= {2700, 3600},
4918 	},
4919 
4920 	{
4921 		.vendor		= "Eon",
4922 		.name		= "EN25P32", /* Uniform version of EN25B32 */
4923 		.bustype	= BUS_SPI,
4924 		.manufacture_id	= EON_ID_NOPREFIX,
4925 		.model_id	= EON_EN25B32,
4926 		.total_size	= 4096,
4927 		.page_size	= 256,
4928 		/* OTP: 512B total; enter 0x3A */
4929 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
4930 		.tested		= TEST_UNTESTED,
4931 		.probe		= PROBE_SPI_RDID,
4932 		.probe_timing	= TIMING_ZERO,
4933 		.block_erasers	=
4934 		{
4935 			{
4936 				.eraseblocks = { {64 * 1024, 64} },
4937 				.block_erase = SPI_BLOCK_ERASE_D8,
4938 			}, {
4939 				.eraseblocks = { {4 * 1024 * 1024, 1} },
4940 				.block_erase = SPI_BLOCK_ERASE_C7,
4941 			}
4942 		},
4943 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
4944 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
4945 		.write		= SPI_CHIP_WRITE256,
4946 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
4947 		.voltage	= {2700, 3600},
4948 	},
4949 
4950 	{
4951 		.vendor		= "Eon",
4952 		.name		= "EN25P40",
4953 		.bustype	= BUS_SPI,
4954 		.manufacture_id	= EON_ID_NOPREFIX,
4955 		.model_id	= EON_EN25B40,
4956 		.total_size	= 512,
4957 		.page_size	= 256,
4958 		.feature_bits	= FEATURE_WRSR_WREN,
4959 		.tested		= TEST_UNTESTED,
4960 		.probe		= PROBE_SPI_RDID,
4961 		.probe_timing	= TIMING_ZERO,
4962 		.block_erasers	=
4963 		{
4964 			{
4965 				.eraseblocks = { {64 * 1024, 8} },
4966 				.block_erase = SPI_BLOCK_ERASE_D8,
4967 			}, {
4968 				.eraseblocks = { {512 * 1024, 1} },
4969 				.block_erase = SPI_BLOCK_ERASE_C7,
4970 			}
4971 		},
4972 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
4973 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
4974 		.write		= SPI_CHIP_WRITE256,
4975 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
4976 		.voltage	= {2700, 3600},
4977 	},
4978 
4979 	{
4980 		.vendor		= "Eon",
4981 		.name		= "EN25P64",
4982 		.bustype	= BUS_SPI,
4983 		.manufacture_id	= EON_ID_NOPREFIX,
4984 		.model_id	= EON_EN25B64,
4985 		.total_size	= 8192,
4986 		.page_size	= 256,
4987 		/* OTP: 512B total; enter 0x3A */
4988 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
4989 		.tested		= TEST_UNTESTED,
4990 		.probe		= PROBE_SPI_RDID,
4991 		.probe_timing	= TIMING_ZERO,
4992 		.block_erasers	=
4993 		{
4994 			{
4995 				.eraseblocks = { {64 * 1024, 128} },
4996 				.block_erase = SPI_BLOCK_ERASE_D8,
4997 			}, {
4998 				.eraseblocks = { {8 * 1024 * 1024, 1} },
4999 				.block_erase = SPI_BLOCK_ERASE_C7,
5000 			}
5001 		},
5002 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
5003 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
5004 		.write		= SPI_CHIP_WRITE256,
5005 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
5006 		.voltage	= {2700, 3600},
5007 	},
5008 
5009 	{
5010 		.vendor		= "Eon",
5011 		.name		= "EN25P80",
5012 		.bustype	= BUS_SPI,
5013 		.manufacture_id	= EON_ID_NOPREFIX,
5014 		.model_id	= EON_EN25B80,
5015 		.total_size	= 1024,
5016 		.page_size	= 256,
5017 		.feature_bits	= FEATURE_WRSR_WREN,
5018 		.tested		= TEST_UNTESTED,
5019 		.probe		= PROBE_SPI_RDID,
5020 		.probe_timing	= TIMING_ZERO,
5021 		.block_erasers	=
5022 		{
5023 			{
5024 				.eraseblocks = { {64 * 1024, 16} },
5025 				.block_erase = SPI_BLOCK_ERASE_D8,
5026 			}, {
5027 				.eraseblocks = { {1024 * 1024, 1} },
5028 				.block_erase = SPI_BLOCK_ERASE_C7,
5029 			}
5030 		},
5031 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
5032 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
5033 		.write		= SPI_CHIP_WRITE256,
5034 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
5035 		.voltage	= {2700, 3600},
5036 	},
5037 
5038 	{
5039 		.vendor		= "Eon",
5040 		.name		= "EN25Q128",
5041 		.bustype	= BUS_SPI,
5042 		.manufacture_id	= EON_ID_NOPREFIX,
5043 		.model_id	= EON_EN25Q128,
5044 		.total_size	= 16384,
5045 		.page_size	= 256,
5046 		/* OTP: 512B total; enter 0x3A */
5047 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
5048 		.tested		= TEST_OK_PREW,
5049 		.probe		= PROBE_SPI_RDID,
5050 		.probe_timing	= TIMING_ZERO,
5051 		.block_erasers	=
5052 		{
5053 			{
5054 				.eraseblocks = { {4 * 1024, 4096} },
5055 				.block_erase = SPI_BLOCK_ERASE_20,
5056 			}, {
5057 				.eraseblocks = { {64 * 1024, 256} },
5058 				.block_erase = SPI_BLOCK_ERASE_D8,
5059 			}, {
5060 				.eraseblocks = { {16 * 1024 * 1024, 1} },
5061 				.block_erase = SPI_BLOCK_ERASE_60,
5062 			}, {
5063 				.eraseblocks = { {16 * 1024 * 1024, 1} },
5064 				.block_erase = SPI_BLOCK_ERASE_C7,
5065 			}
5066 		},
5067 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
5068 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
5069 		.write		= SPI_CHIP_WRITE256,
5070 		.read		= SPI_CHIP_READ,
5071 	},
5072 
5073 	{
5074 		/* Note: EN25D16 is an evil twin which shares the model ID
5075 		   but has different write protection capabilities */
5076 		.vendor		= "Eon",
5077 		.name		= "EN25Q16",
5078 		.bustype	= BUS_SPI,
5079 		.manufacture_id	= EON_ID_NOPREFIX,
5080 		.model_id	= EON_EN25Q16,
5081 		.total_size	= 2048,
5082 		.page_size	= 256,
5083 		/* OTP: D16 512B/Q16 128B total; enter 0x3A */
5084 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
5085 		.tested		= TEST_UNTESTED,
5086 		.probe		= PROBE_SPI_RDID,
5087 		.probe_timing	= TIMING_ZERO,
5088 		.block_erasers	=
5089 		{
5090 			{
5091 				.eraseblocks = { {4 * 1024, 512} },
5092 				.block_erase = SPI_BLOCK_ERASE_20,
5093 			}, {
5094 				.eraseblocks = { {64 * 1024, 32} },
5095 				.block_erase = SPI_BLOCK_ERASE_D8,
5096 			}, {
5097 				/* not supported by Q16 version */
5098 				.eraseblocks = { {64 * 1024, 32} },
5099 				.block_erase = SPI_BLOCK_ERASE_52,
5100 			}, {
5101 				.eraseblocks = { {2 * 1024 * 1024, 1} },
5102 				.block_erase = SPI_BLOCK_ERASE_60,
5103 			}, {
5104 				.eraseblocks = { {2 * 1024 * 1024, 1} },
5105 				.block_erase = SPI_BLOCK_ERASE_C7,
5106 			}
5107 		},
5108 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
5109 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
5110 		.write		= SPI_CHIP_WRITE256,
5111 		.read		= SPI_CHIP_READ,
5112 		.voltage	= {2700, 3600},
5113 	},
5114 
5115 	{
5116 		.vendor		= "Eon",
5117 		.name		= "EN25Q32(A/B)",
5118 		.bustype	= BUS_SPI,
5119 		.manufacture_id	= EON_ID_NOPREFIX,
5120 		.model_id	= EON_EN25Q32,
5121 		.total_size	= 4096,
5122 		.page_size	= 256,
5123 		/* OTP: 512B total; enter 0x3A */
5124 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
5125 		.tested		= TEST_OK_PREW,
5126 		.probe		= PROBE_SPI_RDID,
5127 		.probe_timing	= TIMING_ZERO,
5128 		.block_erasers	=
5129 		{
5130 			{
5131 				.eraseblocks = { {4 * 1024, 1024} },
5132 				.block_erase = SPI_BLOCK_ERASE_20,
5133 			}, {
5134 				.eraseblocks = { {64 * 1024, 64} },
5135 				.block_erase = SPI_BLOCK_ERASE_D8,
5136 			}, {
5137 				.eraseblocks = { {4 * 1024 * 1024, 1} },
5138 				.block_erase = SPI_BLOCK_ERASE_60,
5139 			}, {
5140 				.eraseblocks = { {4 * 1024 * 1024, 1} },
5141 				.block_erase = SPI_BLOCK_ERASE_C7,
5142 			}
5143 		},
5144 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
5145 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
5146 		.write		= SPI_CHIP_WRITE256,
5147 		.read		= SPI_CHIP_READ,
5148 		.voltage	= {2700, 3600},
5149 	},
5150 
5151 	{
5152 		.vendor		= "Eon",
5153 		.name		= "EN25Q40",
5154 		.bustype	= BUS_SPI,
5155 		.manufacture_id	= EON_ID_NOPREFIX,
5156 		.model_id	= EON_EN25Q40,
5157 		.total_size	= 512,
5158 		.page_size	= 256,
5159 		/* OTP: 256B total; enter 0x3A */
5160 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
5161 		.tested		= TEST_UNTESTED,
5162 		.probe		= PROBE_SPI_RDID,
5163 		.probe_timing	= TIMING_ZERO,
5164 		.block_erasers	=
5165 		{
5166 			{
5167 				.eraseblocks = { {4 * 1024, 128} },
5168 				.block_erase = SPI_BLOCK_ERASE_20,
5169 			}, {
5170 				.eraseblocks = { {64 * 1024, 8} },
5171 				.block_erase = SPI_BLOCK_ERASE_D8,
5172 			}, {
5173 				.eraseblocks = { {512 * 1024, 1} },
5174 				.block_erase = SPI_BLOCK_ERASE_60,
5175 			}, {
5176 				.eraseblocks = { {512 * 1024, 1} },
5177 				.block_erase = SPI_BLOCK_ERASE_C7,
5178 			}
5179 		},
5180 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
5181 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
5182 		.write		= SPI_CHIP_WRITE256,
5183 		.read		= SPI_CHIP_READ,
5184 		.voltage	= {2700, 3600},
5185 	},
5186 
5187 	{
5188 		.vendor		= "Eon",
5189 		.name		= "EN25Q64",
5190 		.bustype	= BUS_SPI,
5191 		.manufacture_id	= EON_ID_NOPREFIX,
5192 		.model_id	= EON_EN25Q64,
5193 		.total_size	= 8192,
5194 		.page_size	= 256,
5195 		/* OTP: 512B total; enter 0x3A */
5196 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
5197 		.tested		= TEST_OK_PREW,
5198 		.probe		= PROBE_SPI_RDID,
5199 		.probe_timing	= TIMING_ZERO,
5200 		.block_erasers	=
5201 		{
5202 			{
5203 				.eraseblocks = { {4 * 1024, 2048} },
5204 				.block_erase = SPI_BLOCK_ERASE_20,
5205 			}, {
5206 				.eraseblocks = { {64 * 1024, 128} },
5207 				.block_erase = SPI_BLOCK_ERASE_D8,
5208 			}, {
5209 				.eraseblocks = { {8 * 1024 * 1024, 1} },
5210 				.block_erase = SPI_BLOCK_ERASE_60,
5211 			}, {
5212 				.eraseblocks = { {8 * 1024 * 1024, 1} },
5213 				.block_erase = SPI_BLOCK_ERASE_C7,
5214 			}
5215 		},
5216 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
5217 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
5218 		.write		= SPI_CHIP_WRITE256,
5219 		.read		= SPI_CHIP_READ,
5220 		.voltage	= {2700, 3600},
5221 	},
5222 
5223 	{
5224 		.vendor		= "Eon",
5225 		.name		= "EN25Q80(A)",
5226 		.bustype	= BUS_SPI,
5227 		.manufacture_id	= EON_ID_NOPREFIX,
5228 		.model_id	= EON_EN25Q80,
5229 		.total_size	= 1024,
5230 		.page_size	= 256,
5231 		/* OTP: 256B total; enter 0x3A */
5232 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
5233 		.tested		= TEST_UNTESTED,
5234 		.probe		= PROBE_SPI_RDID,
5235 		.probe_timing	= TIMING_ZERO,
5236 		.block_erasers	=
5237 		{
5238 			{
5239 				.eraseblocks = { {4 * 1024, 256} },
5240 				.block_erase = SPI_BLOCK_ERASE_20,
5241 			}, {
5242 				.eraseblocks = { {64 * 1024, 16} },
5243 				.block_erase = SPI_BLOCK_ERASE_D8,
5244 			}, {
5245 				.eraseblocks = { {1024 * 1024, 1} },
5246 				.block_erase = SPI_BLOCK_ERASE_60,
5247 			}, {
5248 				.eraseblocks = { {1024 * 1024, 1} },
5249 				.block_erase = SPI_BLOCK_ERASE_C7,
5250 			}
5251 		},
5252 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
5253 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
5254 		.write		= SPI_CHIP_WRITE256,
5255 		.read		= SPI_CHIP_READ,
5256 		.voltage	= {2700, 3600},
5257 	},
5258 
5259 	{
5260 		.vendor		= "Eon",
5261 		.name		= "EN25QH128",
5262 		.bustype	= BUS_SPI,
5263 		.manufacture_id	= EON_ID_NOPREFIX,
5264 		.model_id	= EON_EN25QH128,
5265 		.total_size	= 16384,
5266 		.page_size	= 256,
5267 		/* supports SFDP */
5268 		/* OTP: 512B total; enter 0x3A */
5269 		/* QPI enable 0x38, disable 0xFF */
5270 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
5271 		.tested		= TEST_OK_PREW,
5272 		.probe		= PROBE_SPI_RDID,
5273 		.probe_timing	= TIMING_ZERO,
5274 		.block_erasers	=
5275 		{
5276 			{
5277 				.eraseblocks = { {4 * 1024, 4096} },
5278 				.block_erase = SPI_BLOCK_ERASE_20,
5279 			}, {
5280 				.eraseblocks = { {64 * 1024, 256} },
5281 				.block_erase = SPI_BLOCK_ERASE_D8,
5282 			}, {
5283 				.eraseblocks = { { 16384 * 1024, 1} },
5284 				.block_erase = SPI_BLOCK_ERASE_60,
5285 			}, {
5286 				.eraseblocks = { { 16384 * 1024, 1} },
5287 				.block_erase = SPI_BLOCK_ERASE_C7,
5288 			}
5289 		},
5290 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enable */
5291 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
5292 		.write		= SPI_CHIP_WRITE256,
5293 		.read		= SPI_CHIP_READ,
5294 		.voltage	= {2700, 3600},
5295 		.reg_bits	=
5296 		{
5297 			.srp    = {STATUS1, 7, RW},
5298 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
5299 			.tb     = {STATUS1, 5, RW}, /* Called BP3 in datasheet, acts like TB */
5300 		},
5301 		.decode_range	= DECODE_RANGE_SPI25,
5302 	},
5303 
5304 	{
5305 		.vendor		= "Eon",
5306 		.name		= "EN25QH16",
5307 		.bustype	= BUS_SPI,
5308 		.manufacture_id	= EON_ID_NOPREFIX,
5309 		.model_id	= EON_EN25QH16,
5310 		.total_size	= 2048,
5311 		.page_size	= 256,
5312 		/* supports SFDP */
5313 		/* OTP: 512B total; enter 0x3A */
5314 		/* QPI enable 0x38, disable 0xFF */
5315 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
5316 		.tested		= TEST_OK_PREW,
5317 		.probe		= PROBE_SPI_RDID,
5318 		.probe_timing	= TIMING_ZERO,
5319 		.block_erasers	=
5320 		{
5321 			{
5322 				.eraseblocks = { {4 * 1024, 512} },
5323 				.block_erase = SPI_BLOCK_ERASE_20,
5324 			}, {
5325 				.eraseblocks = { {64 * 1024, 32} },
5326 				.block_erase = SPI_BLOCK_ERASE_D8,
5327 			}, {
5328 				.eraseblocks = { {1024 * 2048, 1} },
5329 				.block_erase = SPI_BLOCK_ERASE_60,
5330 			}, {
5331 				.eraseblocks = { {1024 * 2048, 1} },
5332 				.block_erase = SPI_BLOCK_ERASE_C7,
5333 			}
5334 		},
5335 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enable */
5336 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
5337 		.write		= SPI_CHIP_WRITE256,
5338 		.read		= SPI_CHIP_READ,
5339 		.voltage	= {2700, 3600},
5340 	},
5341 
5342 	{
5343 		.vendor		= "Eon",
5344 		.name		= "EN25QH32",
5345 		.bustype	= BUS_SPI,
5346 		.manufacture_id	= EON_ID_NOPREFIX,
5347 		.model_id	= EON_EN25QH32,
5348 		.total_size	= 4096,
5349 		.page_size	= 256,
5350 		/* supports SFDP */
5351 		/* OTP: 512B total; enter 0x3A */
5352 		/* QPI enable 0x38, disable 0xFF */
5353 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
5354 		.tested		= TEST_OK_PREW,
5355 		.probe		= PROBE_SPI_RDID,
5356 		.probe_timing	= TIMING_ZERO,
5357 		.block_erasers	=
5358 		{
5359 			{
5360 				.eraseblocks = { {4 * 1024, 1024} },
5361 				.block_erase = SPI_BLOCK_ERASE_20,
5362 			}, {
5363 				.eraseblocks = { {64 * 1024, 64} },
5364 				.block_erase = SPI_BLOCK_ERASE_D8,
5365 			}, {
5366 				.eraseblocks = { {1024 * 4096, 1} },
5367 				.block_erase = SPI_BLOCK_ERASE_60,
5368 			}, {
5369 				.eraseblocks = { {1024 * 4096, 1} },
5370 				.block_erase = SPI_BLOCK_ERASE_C7,
5371 			}
5372 		},
5373 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enable */
5374 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
5375 		.write		= SPI_CHIP_WRITE256,
5376 		.read		= SPI_CHIP_READ,
5377 		.voltage	= {2700, 3600},
5378 		.reg_bits	=
5379 		{
5380 			.srp    = {STATUS1, 7, RW},
5381 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
5382 			.tb     = {STATUS1, 5, RW}, /* Called BP3 in datasheet, acts like TB */
5383 		},
5384 		.decode_range	= DECODE_RANGE_SPI25,
5385 	},
5386 
5387 	{
5388 		.vendor		= "Eon",
5389 		.name		= "EN25QH32B",
5390 		.bustype	= BUS_SPI,
5391 		.manufacture_id	= EON_ID_NOPREFIX,
5392 		.model_id	= EON_EN25QH32,
5393 		.total_size	= 4096,
5394 		.page_size	= 256,
5395 		/* supports SFDP */
5396 		/* OTP: 1536B total; enter 0x3A */
5397 		/* QPI enable 0x38, disable 0xFF */
5398 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
5399 		.tested		= TEST_OK_PREW,
5400 		.probe		= PROBE_SPI_RDID,
5401 		.probe_timing	= TIMING_ZERO,
5402 		.block_erasers	=
5403 		{
5404 			{
5405 				.eraseblocks = { {4 * 1024, 1024} },
5406 				.block_erase = SPI_BLOCK_ERASE_20,
5407 			}, {
5408 				.eraseblocks = { {32 * 1024, 128} },
5409 				.block_erase = SPI_BLOCK_ERASE_52,
5410 			}, {
5411 				.eraseblocks = { {64 * 1024, 64} },
5412 				.block_erase = SPI_BLOCK_ERASE_D8,
5413 			}, {
5414 				.eraseblocks = { {1024 * 4096, 1} },
5415 				.block_erase = SPI_BLOCK_ERASE_60,
5416 			}, {
5417 				.eraseblocks = { {1024 * 4096, 1} },
5418 				.block_erase = SPI_BLOCK_ERASE_C7,
5419 			}
5420 		},
5421 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enable */
5422 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
5423 		.write		= SPI_CHIP_WRITE256,
5424 		.read		= SPI_CHIP_READ,
5425 		.voltage	= {2700, 3600},
5426 	},
5427 
5428 	{
5429 		.vendor		= "Eon",
5430 		.name		= "EN25QH64",
5431 		.bustype	= BUS_SPI,
5432 		.manufacture_id	= EON_ID_NOPREFIX,
5433 		.model_id	= EON_EN25QH64,
5434 		.total_size	= 8192,
5435 		.page_size	= 256,
5436 		/* supports SFDP */
5437 		/* OTP: 512B total; enter 0x3A */
5438 		/* QPI enable 0x38, disable 0xFF */
5439 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
5440 		.tested		= TEST_OK_PREW,
5441 		.probe		= PROBE_SPI_RDID,
5442 		.probe_timing	= TIMING_ZERO,
5443 		.block_erasers	=
5444 		{
5445 			{
5446 				.eraseblocks = { {4 * 1024, 2048} },
5447 				.block_erase = SPI_BLOCK_ERASE_20,
5448 			}, {
5449 				.eraseblocks = { {64 * 1024, 128} },
5450 				.block_erase = SPI_BLOCK_ERASE_D8,
5451 			}, {
5452 				.eraseblocks = { { 8192 * 1024, 1} },
5453 				.block_erase = SPI_BLOCK_ERASE_60,
5454 			}, {
5455 				.eraseblocks = { { 8192 * 1024, 1} },
5456 				.block_erase = SPI_BLOCK_ERASE_C7,
5457 			}
5458 		},
5459 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enable */
5460 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
5461 		.write		= SPI_CHIP_WRITE256,
5462 		.read		= SPI_CHIP_READ,
5463 		.voltage	= {2700, 3600},
5464 		.reg_bits	=
5465 		{
5466 			.srp    = {STATUS1, 7, RW},
5467 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
5468 			.tb     = {STATUS1, 5, RW}, /* Called BP3 in datasheet, acts like TB */
5469 		},
5470 		.decode_range	= DECODE_RANGE_SPI25_64K_BLOCK,
5471 	},
5472 
5473 	{
5474 		.vendor		= "Eon",
5475 		.name		= "EN25QH64A",
5476 		.bustype	= BUS_SPI,
5477 		.manufacture_id	= EON_ID_NOPREFIX,
5478 		.model_id	= EON_EN25QH64,
5479 		.total_size	= 8192,
5480 		.page_size	= 256,
5481 		/* supports SFDP */
5482 		/* OTP: 512B total; enter 0x3A */
5483 		/* QPI enable 0x38, disable 0xFF */
5484 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
5485 		.tested		= TEST_OK_PREW,
5486 		.probe		= PROBE_SPI_RDID,
5487 		.probe_timing	= TIMING_ZERO,
5488 		.block_erasers	=
5489 		{
5490 			{
5491 				.eraseblocks = { {4 * 1024, 2048} },
5492 				.block_erase = SPI_BLOCK_ERASE_20,
5493 			}, {
5494 				.eraseblocks = { {32 * 1024, 256} },
5495 				.block_erase = SPI_BLOCK_ERASE_52,
5496 			}, {
5497 				.eraseblocks = { {64 * 1024, 128} },
5498 				.block_erase = SPI_BLOCK_ERASE_D8,
5499 			}, {
5500 				.eraseblocks = { { 8192 * 1024, 1} },
5501 				.block_erase = SPI_BLOCK_ERASE_60,
5502 			}, {
5503 				.eraseblocks = { { 8192 * 1024, 1} },
5504 				.block_erase = SPI_BLOCK_ERASE_C7,
5505 			}
5506 		},
5507 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enable */
5508 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
5509 		.write		= SPI_CHIP_WRITE256,
5510 		.read		= SPI_CHIP_READ,
5511 		.voltage	= {2700, 3600},
5512 	},
5513 
5514 	{
5515 		.vendor		= "Eon",
5516 		.name		= "EN25S10",
5517 		.bustype	= BUS_SPI,
5518 		.manufacture_id	= EON_ID_NOPREFIX,
5519 		.model_id	= EON_EN25S10,
5520 		.total_size	= 128,
5521 		.page_size	= 256,
5522 		/* OTP: 256B total; enter 0x3A */
5523 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
5524 		.tested		= TEST_UNTESTED,
5525 		.probe		= PROBE_SPI_RDID,
5526 		.probe_timing	= TIMING_ZERO,
5527 		.block_erasers	=
5528 		{
5529 			{
5530 				.eraseblocks = { {4 * 1024, 32} },
5531 				.block_erase = SPI_BLOCK_ERASE_20,
5532 			},  {
5533 				.eraseblocks = { {32 * 1024, 4} },
5534 				.block_erase = SPI_BLOCK_ERASE_52,
5535 			}, {
5536 				.eraseblocks = { {128 * 1024, 1} },
5537 				.block_erase = SPI_BLOCK_ERASE_60,
5538 			}, {
5539 				.eraseblocks = { {128 * 1024, 1} },
5540 				.block_erase = SPI_BLOCK_ERASE_C7,
5541 			}
5542 		},
5543 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
5544 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
5545 		.write		= SPI_CHIP_WRITE256,
5546 		.read		= SPI_CHIP_READ,
5547 		.voltage	= {1650, 1950},
5548 	},
5549 
5550 	{
5551 		.vendor		= "Eon",
5552 		.name		= "EN25S16",
5553 		.bustype	= BUS_SPI,
5554 		.manufacture_id	= EON_ID_NOPREFIX,
5555 		.model_id	= EON_EN25S16,
5556 		.total_size	= 2048,
5557 		.page_size	= 256,
5558 		/* OTP: 512B total; enter 0x3A */
5559 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
5560 		.tested		= TEST_UNTESTED,
5561 		.probe		= PROBE_SPI_RDID,
5562 		.probe_timing	= TIMING_ZERO,
5563 		.block_erasers	=
5564 		{
5565 			{
5566 				.eraseblocks = { {4 * 1024, 512} },
5567 				.block_erase = SPI_BLOCK_ERASE_20,
5568 			}, {
5569 				.eraseblocks = { {32 * 1024, 64} },
5570 				.block_erase = SPI_BLOCK_ERASE_D8,
5571 			}, {
5572 				.eraseblocks = { {64 * 1024, 32} },
5573 				.block_erase = SPI_BLOCK_ERASE_52,
5574 			}, {
5575 				.eraseblocks = { {2048 * 1024, 1} },
5576 				.block_erase = SPI_BLOCK_ERASE_60,
5577 			}, {
5578 				.eraseblocks = { {2048 * 1024, 1} },
5579 				.block_erase = SPI_BLOCK_ERASE_C7,
5580 			}
5581 		},
5582 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_EN25S_WP,
5583 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
5584 		.write		= SPI_CHIP_WRITE256,
5585 		.read		= SPI_CHIP_READ,
5586 		.voltage	= {1650, 1950},
5587 	},
5588 
5589 	{
5590 		.vendor		= "Eon",
5591 		.name		= "EN25S20",
5592 		.bustype	= BUS_SPI,
5593 		.manufacture_id	= EON_ID_NOPREFIX,
5594 		.model_id	= EON_EN25S20,
5595 		.total_size	= 256,
5596 		.page_size	= 256,
5597 		/* OTP: 256B total; enter 0x3A */
5598 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
5599 		.tested		= TEST_UNTESTED,
5600 		.probe		= PROBE_SPI_RDID,
5601 		.probe_timing	= TIMING_ZERO,
5602 		.block_erasers	=
5603 		{
5604 			{
5605 				.eraseblocks = { {4 * 1024, 64} },
5606 				.block_erase = SPI_BLOCK_ERASE_20,
5607 			}, {
5608 				.eraseblocks = { {64 * 1024, 4} },
5609 				.block_erase = SPI_BLOCK_ERASE_D8,
5610 			}, {
5611 				.eraseblocks = { {256 * 1024, 1} },
5612 				.block_erase = SPI_BLOCK_ERASE_60,
5613 			}, {
5614 				.eraseblocks = { {256 * 1024, 1} },
5615 				.block_erase = SPI_BLOCK_ERASE_C7,
5616 			}
5617 		},
5618 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
5619 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
5620 		.write		= SPI_CHIP_WRITE256,
5621 		.read		= SPI_CHIP_READ,
5622 		.voltage	= {1650, 1950},
5623 	},
5624 
5625 	{
5626 		.vendor		= "Eon",
5627 		.name		= "EN25S32",
5628 		.bustype	= BUS_SPI,
5629 		.manufacture_id	= EON_ID_NOPREFIX,
5630 		.model_id	= EON_EN25S32,
5631 		.total_size	= 4096,
5632 		.page_size	= 256,
5633 		/* OTP: 512B total; enter 0x3A */
5634 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
5635 		.tested		= TEST_UNTESTED,
5636 		.probe		= PROBE_SPI_RDID,
5637 		.probe_timing	= TIMING_ZERO,
5638 		.block_erasers	=
5639 		{
5640 			{
5641 				.eraseblocks = { {4 * 1024, 1024} },
5642 				.block_erase = SPI_BLOCK_ERASE_20,
5643 			}, {
5644 				.eraseblocks = { {32 * 1024, 128} },
5645 				.block_erase = SPI_BLOCK_ERASE_52,
5646 			}, {
5647 				.eraseblocks = { {64 * 1024, 64} },
5648 				.block_erase = SPI_BLOCK_ERASE_D8,
5649 			}, {
5650 				.eraseblocks = { {4096 * 1024, 1} },
5651 				.block_erase = SPI_BLOCK_ERASE_60,
5652 			}, {
5653 				.eraseblocks = { {4096 * 1024, 1} },
5654 				.block_erase = SPI_BLOCK_ERASE_C7,
5655 			}
5656 		},
5657 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_EN25S_WP,
5658 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
5659 		.write		= SPI_CHIP_WRITE256,
5660 		.read		= SPI_CHIP_READ,
5661 		.voltage	= {1650, 1950},
5662 	},
5663 
5664 	{
5665 		.vendor		= "Eon",
5666 		.name		= "EN25S40",
5667 		.bustype	= BUS_SPI,
5668 		.manufacture_id	= EON_ID_NOPREFIX,
5669 		.model_id	= EON_EN25S40,
5670 		.total_size	= 512,
5671 		.page_size	= 256,
5672 		/* OTP: 256B total; enter 0x3A */
5673 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
5674 		.tested		= TEST_OK_PREW,
5675 		.probe		= PROBE_SPI_RDID,
5676 		.probe_timing	= TIMING_ZERO,
5677 		.block_erasers	=
5678 		{
5679 			{
5680 				.eraseblocks = { {4 * 1024, 128} },
5681 				.block_erase = SPI_BLOCK_ERASE_20,
5682 			}, {
5683 				.eraseblocks = { {64 * 1024, 8} },
5684 				.block_erase = SPI_BLOCK_ERASE_D8,
5685 			}, {
5686 				.eraseblocks = { {512 * 1024, 1} },
5687 				.block_erase = SPI_BLOCK_ERASE_60,
5688 			}, {
5689 				.eraseblocks = { {512 * 1024, 1} },
5690 				.block_erase = SPI_BLOCK_ERASE_C7,
5691 			}
5692 		},
5693 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
5694 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
5695 		.write		= SPI_CHIP_WRITE256,
5696 		.read		= SPI_CHIP_READ,
5697 		.voltage	= {1650, 1950},
5698 	},
5699 
5700 	{
5701 		.vendor		= "Eon",
5702 		.name		= "EN25S64",
5703 		.bustype	= BUS_SPI,
5704 		.manufacture_id	= EON_ID_NOPREFIX,
5705 		.model_id	= EON_EN25S64,
5706 		.total_size	= 8192,
5707 		.page_size	= 256,
5708 		/* OTP: 512B total; enter 0x3A */
5709 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
5710 		.tested		= TEST_OK_PREW,
5711 		.probe		= PROBE_SPI_RDID,
5712 		.probe_timing	= TIMING_ZERO,
5713 		.block_erasers	=
5714 		{
5715 			{
5716 				.eraseblocks = { {4 * 1024, 2048} },
5717 				.block_erase = SPI_BLOCK_ERASE_20,
5718 			}, {
5719 				.eraseblocks = { {64 * 1024, 128} },
5720 				.block_erase = SPI_BLOCK_ERASE_D8,
5721 			}, {
5722 				.eraseblocks = { {8192 * 1024, 1} },
5723 				.block_erase = SPI_BLOCK_ERASE_60,
5724 			}, {
5725 				.eraseblocks = { {8192 * 1024, 1} },
5726 				.block_erase = SPI_BLOCK_ERASE_C7,
5727 			}
5728 		},
5729 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_EN25S_WP,
5730 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
5731 		.write		= SPI_CHIP_WRITE256,
5732 		.read		= SPI_CHIP_READ,
5733 		.voltage	= {1650, 1950},
5734 	},
5735 
5736 	{
5737 		.vendor		= "Eon",
5738 		.name		= "EN25S80",
5739 		.bustype	= BUS_SPI,
5740 		.manufacture_id	= EON_ID_NOPREFIX,
5741 		.model_id	= EON_EN25S80,
5742 		.total_size	= 1024,
5743 		.page_size	= 256,
5744 		/* OTP: 256B total; enter 0x3A */
5745 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
5746 		.tested		= TEST_UNTESTED,
5747 		.probe		= PROBE_SPI_RDID,
5748 		.probe_timing	= TIMING_ZERO,
5749 		.block_erasers	=
5750 		{
5751 			{
5752 				.eraseblocks = { {4 * 1024, 256} },
5753 				.block_erase = SPI_BLOCK_ERASE_20,
5754 			}, {
5755 				.eraseblocks = { {64 * 1024, 16} },
5756 				.block_erase = SPI_BLOCK_ERASE_D8,
5757 			}, {
5758 				.eraseblocks = { {1024 * 1024, 1} },
5759 				.block_erase = SPI_BLOCK_ERASE_60,
5760 			}, {
5761 				.eraseblocks = { {1024 * 1024, 1} },
5762 				.block_erase = SPI_BLOCK_ERASE_C7,
5763 			}
5764 		},
5765 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
5766 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
5767 		.write		= SPI_CHIP_WRITE256,
5768 		.read		= SPI_CHIP_READ,
5769 		.voltage	= {1650, 1950},
5770 	},
5771 
5772 	{
5773 		.vendor		= "Eon",
5774 		.name		= "EN29F002(A)(N)B",
5775 		.bustype	= BUS_PARALLEL,
5776 		.manufacture_id	= EON_ID,
5777 		.model_id	= EON_EN29F002B,
5778 		.total_size	= 256,
5779 		.page_size	= 256,
5780 		.feature_bits	= FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
5781 		.tested		= TEST_OK_PREW,
5782 		.probe		= PROBE_JEDEC,
5783 		.probe_timing	= TIMING_ZERO,	/* Datasheet has no timing info specified */
5784 		.block_erasers	=
5785 		{
5786 			{
5787 				.eraseblocks = {
5788 					{16 * 1024, 1},
5789 					{8 * 1024, 2},
5790 					{32 * 1024, 1},
5791 					{64 * 1024, 3},
5792 				},
5793 				.block_erase = JEDEC_SECTOR_ERASE,
5794 			}, {
5795 				.eraseblocks = { {256 * 1024, 1} },
5796 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
5797 			},
5798 		},
5799 		.write		= WRITE_JEDEC1,
5800 		.read		= READ_MEMMAPPED,
5801 		.voltage	= {4500, 5500},
5802 	},
5803 
5804 	{
5805 		.vendor		= "Eon",
5806 		.name		= "EN29F002(A)(N)T",
5807 		.bustype	= BUS_PARALLEL,
5808 		.manufacture_id	= EON_ID,
5809 		.model_id	= EON_EN29F002T,
5810 		.total_size	= 256,
5811 		.page_size	= 256,
5812 		.feature_bits	= FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
5813 		.tested		= TEST_OK_PREW,
5814 		.probe		= PROBE_JEDEC,
5815 		.probe_timing	= TIMING_ZERO,	/* Datasheet has no timing info specified */
5816 		.block_erasers	=
5817 		{
5818 			{
5819 				.eraseblocks = {
5820 					{64 * 1024, 3},
5821 					{32 * 1024, 1},
5822 					{8 * 1024, 2},
5823 					{16 * 1024, 1},
5824 				},
5825 				.block_erase = JEDEC_SECTOR_ERASE,
5826 			}, {
5827 				.eraseblocks = { {256 * 1024, 1} },
5828 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
5829 			},
5830 		},
5831 		.write		= WRITE_JEDEC1,
5832 		.read		= READ_MEMMAPPED,
5833 		.voltage	= {4500, 5500},
5834 	},
5835 
5836 	{
5837 		.vendor		= "Eon",
5838 		.name		= "EN29F010",
5839 		.bustype	= BUS_PARALLEL,
5840 		.manufacture_id	= EON_ID,
5841 		.model_id	= EON_EN29F010,
5842 		.total_size	= 128,
5843 		.page_size	= 128,
5844 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
5845 		.tested		= TEST_OK_PRE,
5846 		.probe		= PROBE_JEDEC,
5847 		.probe_timing	= TIMING_ZERO,	/* Datasheet has no timing info specified */
5848 		.block_erasers	=
5849 		{
5850 			{
5851 				.eraseblocks = { {16 * 1024, 8} },
5852 				.block_erase = JEDEC_SECTOR_ERASE,
5853 			},
5854 			{
5855 				.eraseblocks = { {128 * 1024, 1} },
5856 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
5857 			},
5858 		},
5859 		.write		= WRITE_JEDEC1,
5860 		.read		= READ_MEMMAPPED,
5861 		.voltage	= {4500, 5500},
5862 	},
5863 
5864 	{
5865 		.vendor		= "Eon",
5866 		.name		= "EN29GL064(A)B",
5867 		.bustype	= BUS_PARALLEL,
5868 		.manufacture_id	= EON_ID,
5869 		.model_id	= EON_EN29GL064B,
5870 		.total_size	= 8192,
5871 		.page_size	= 128 * 1024, /* actual page size is 16 */
5872 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
5873 		.tested		= TEST_UNTESTED,
5874 		.probe		= PROBE_JEDEC_29GL,
5875 		.probe_timing	= TIMING_ZERO,
5876 		.block_erasers	=
5877 		{
5878 			{
5879 				.eraseblocks = {
5880 					{8 * 1024, 8},
5881 					{64 * 1024, 127},
5882 				},
5883 				.block_erase = JEDEC_SECTOR_ERASE,
5884 			}, {
5885 				.eraseblocks = { {8 * 1024 * 1024, 1} },
5886 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
5887 			},
5888 		},
5889 		.write		= WRITE_JEDEC1,
5890 		.read		= READ_MEMMAPPED,
5891 		.voltage	= {2700, 3600},
5892 	},
5893 
5894 	{
5895 		.vendor		= "Eon",
5896 		.name		= "EN29GL064(A)T",
5897 		.bustype	= BUS_PARALLEL,
5898 		.manufacture_id	= EON_ID,
5899 		.model_id	= EON_EN29GL064T,
5900 		.total_size	= 8192,
5901 		.page_size	= 128 * 1024, /* actual page size is 16 */
5902 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
5903 		.tested		= TEST_UNTESTED,
5904 		.probe		= PROBE_JEDEC_29GL,
5905 		.probe_timing	= TIMING_ZERO,
5906 		.block_erasers	=
5907 		{
5908 			{
5909 				.eraseblocks = {
5910 					{64 * 1024, 127},
5911 					{8 * 1024, 8},
5912 				},
5913 				.block_erase = JEDEC_SECTOR_ERASE,
5914 			}, {
5915 				.eraseblocks = { {8 * 1024 * 1024, 1} },
5916 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
5917 			},
5918 		},
5919 		.write		= WRITE_JEDEC1,
5920 		.read		= READ_MEMMAPPED,
5921 		.voltage	= {2700, 3600},
5922 	},
5923 
5924 	{
5925 		.vendor		= "Eon",
5926 		.name		= "EN29GL064H/L",
5927 		.bustype	= BUS_PARALLEL,
5928 		.manufacture_id	= EON_ID,
5929 		.model_id	= EON_EN29GL064HL,
5930 		.total_size	= 8192,
5931 		.page_size	= 128 * 1024, /* actual page size is 16 */
5932 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
5933 		.tested		= TEST_UNTESTED,
5934 		.probe		= PROBE_JEDEC_29GL,
5935 		.probe_timing	= TIMING_ZERO,
5936 		.block_erasers	=
5937 		{
5938 			{
5939 				.eraseblocks = { {64 * 1024, 128} },
5940 				.block_erase = JEDEC_SECTOR_ERASE,
5941 			}, {
5942 				.eraseblocks = { {8 * 1024 * 1024, 1} },
5943 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
5944 			},
5945 		},
5946 		.write		= WRITE_JEDEC1,
5947 		.read		= READ_MEMMAPPED,
5948 		.voltage	= {2700, 3600},
5949 	},
5950 
5951 	{
5952 		.vendor		= "Eon",
5953 		.name		= "EN29GL128",
5954 		.bustype	= BUS_PARALLEL,
5955 		.manufacture_id	= EON_ID,
5956 		.model_id	= EON_EN29GL128HL,
5957 		.total_size	= 16384,
5958 		.page_size	= 128 * 1024, /* actual page size is 16 */
5959 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
5960 		.tested		= TEST_UNTESTED,
5961 		.probe		= PROBE_JEDEC_29GL,
5962 		.probe_timing	= TIMING_ZERO,
5963 		.block_erasers	=
5964 		{
5965 			{
5966 				.eraseblocks = { {128 * 1024, 128} },
5967 				.block_erase = JEDEC_SECTOR_ERASE,
5968 			}, {
5969 				.eraseblocks = { {16 * 1024 * 1024, 1} },
5970 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
5971 			},
5972 		},
5973 		.write		= WRITE_JEDEC1,
5974 		.read		= READ_MEMMAPPED,
5975 		.voltage	= {2700, 3600},
5976 	},
5977 
5978 	{
5979 		.vendor		= "Eon",
5980 		.name		= "EN29LV040(A)",
5981 		.bustype	= BUS_PARALLEL,
5982 		.manufacture_id	= EON_ID,
5983 		.model_id	= EON_EN29LV040,
5984 		.total_size	= 512,
5985 		.page_size	= 4 * 1024,
5986 		.tested		= TEST_OK_PREW,
5987 		.probe		= PROBE_JEDEC,
5988 		.probe_timing	= TIMING_ZERO,
5989 		.block_erasers	=
5990 		{
5991 			{
5992 				.eraseblocks = { {64 * 1024, 8} },
5993 				.block_erase = JEDEC_SECTOR_ERASE,
5994 			},
5995 			{
5996 				.eraseblocks = { {512 * 1024, 1} },
5997 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
5998 			},
5999 		},
6000 		.write		= WRITE_JEDEC1,
6001 		.read		= READ_MEMMAPPED,
6002 		.voltage	= {3000, 3600}, /* 3.0-3.6V for type -45R and 55R, others 2.7-3.6V */
6003 	},
6004 
6005 	{
6006 		.vendor		= "Eon",
6007 		.name		= "EN29LV640B",
6008 		.bustype	= BUS_PARALLEL,
6009 		.manufacture_id	= EON_ID,
6010 		.model_id	= EON_EN29LV640B,
6011 		.total_size	= 8192,
6012 		.page_size	= 8192,
6013 		.feature_bits	= FEATURE_ADDR_SHIFTED,
6014 		.tested		= TEST_OK_PREW,
6015 		.probe		= PROBE_EN29LV640B,
6016 		.probe_timing	= TIMING_ZERO,	/* Datasheet has no timing info specified */
6017 		.block_erasers	=
6018 		{
6019 			{
6020 				.eraseblocks = {
6021 					{8 * 1024, 8},
6022 					{64 * 1024, 127},
6023 				},
6024 				.block_erase = JEDEC_BLOCK_ERASE,
6025 			}, {
6026 				.eraseblocks = { {8 * 1024 * 1024, 1} },
6027 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
6028 			},
6029 		},
6030 		.write		= WRITE_EN29LV640B,
6031 		.read		= READ_MEMMAPPED,
6032 		.voltage	= {2700, 3600},
6033 	},
6034 
6035 	{
6036 		.vendor		= "Fudan",
6037 		.name		= "FM25F005",
6038 		.bustype	= BUS_SPI,
6039 		.manufacture_id	= FUDAN_ID_NOPREFIX,
6040 		.model_id	= FUDAN_FM25F005,
6041 		.total_size	= 64,
6042 		.page_size	= 256,
6043 		/* OTP: 256B total; enter 0x3A */
6044 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
6045 		.tested		= TEST_UNTESTED,
6046 		.probe		= PROBE_SPI_RDID,
6047 		.probe_timing	= TIMING_ZERO,
6048 		.block_erasers	= {
6049 			{
6050 				.eraseblocks = { {4 * 1024, 16} },
6051 				.block_erase = SPI_BLOCK_ERASE_20,
6052 			}, {
6053 				.eraseblocks = { {32 * 1024, 2} },
6054 				.block_erase = SPI_BLOCK_ERASE_52,
6055 			}, {
6056 				.eraseblocks = { {64 * 1024, 1} },
6057 				.block_erase = SPI_BLOCK_ERASE_D8,
6058 			}, {
6059 				.eraseblocks = { {64 * 1024, 1} },
6060 				.block_erase = SPI_BLOCK_ERASE_60,
6061 			}, {
6062 				.eraseblocks = { {64 * 1024, 1} },
6063 				.block_erase = SPI_BLOCK_ERASE_C7,
6064 			}
6065 		},
6066 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_TB_BPL,
6067 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD,
6068 		.write		= SPI_CHIP_WRITE256,
6069 		.read		= SPI_CHIP_READ, /* Fast read (0x0B), dual I/O  (0x3B) supported */
6070 		.voltage	= {2700, 3600}, /* 2.3-2.7V acceptable results in lower performance */
6071 	},
6072 
6073 	{
6074 		.vendor		= "Fudan",
6075 		.name		= "FM25F01",
6076 		.bustype	= BUS_SPI,
6077 		.manufacture_id	= FUDAN_ID_NOPREFIX,
6078 		.model_id	= FUDAN_FM25F01,
6079 		.total_size	= 128,
6080 		.page_size	= 256,
6081 		/* OTP: 256B total; enter 0x3A */
6082 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
6083 		.tested		= TEST_OK_PREW,
6084 		.probe		= PROBE_SPI_RDID,
6085 		.probe_timing	= TIMING_ZERO,
6086 		.block_erasers	= {
6087 			{
6088 				.eraseblocks = { {4 * 1024, 32} },
6089 				.block_erase = SPI_BLOCK_ERASE_20,
6090 			}, {
6091 				.eraseblocks = { {32 * 1024, 4} },
6092 				.block_erase = SPI_BLOCK_ERASE_52,
6093 			}, {
6094 				.eraseblocks = { {64 * 1024, 2} },
6095 				.block_erase = SPI_BLOCK_ERASE_D8,
6096 			}, {
6097 				.eraseblocks = { {128 * 1024, 1} },
6098 				.block_erase = SPI_BLOCK_ERASE_60,
6099 			}, {
6100 				.eraseblocks = { {128 * 1024, 1} },
6101 				.block_erase = SPI_BLOCK_ERASE_C7,
6102 			}
6103 		},
6104 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_TB_BPL,
6105 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD,
6106 		.write		= SPI_CHIP_WRITE256,
6107 		.read		= SPI_CHIP_READ, /* Fast read (0x0B), dual I/O  (0x3B) supported */
6108 		.voltage	= {2700, 3600}, /* 2.3-2.7V acceptable results in lower performance */
6109 	},
6110 
6111 	{
6112 		.vendor		= "Fudan",
6113 		.name		= "FM25F02(A)",
6114 		.bustype	= BUS_SPI,
6115 		.manufacture_id	= FUDAN_ID_NOPREFIX,
6116 		.model_id	= FUDAN_FM25F02,
6117 		.total_size	= 256,
6118 		.page_size	= 256,
6119 		/* OTP: 256B total; enter 0x3A, (A version only:) read ID 0x4B */
6120 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
6121 		.tested		= TEST_UNTESTED,
6122 		.probe		= PROBE_SPI_RDID,
6123 		.probe_timing	= TIMING_ZERO,
6124 		.block_erasers	= {
6125 			{
6126 				.eraseblocks = { {4 * 1024, 64} },
6127 				.block_erase = SPI_BLOCK_ERASE_20,
6128 			}, {
6129 				.eraseblocks = { {32 * 1024, 8} },
6130 				.block_erase = SPI_BLOCK_ERASE_52,
6131 			}, {
6132 				.eraseblocks = { {64 * 1024, 4} },
6133 				.block_erase = SPI_BLOCK_ERASE_D8,
6134 			}, {
6135 				.eraseblocks = { {1024 * 256, 1} },
6136 				.block_erase = SPI_BLOCK_ERASE_60,
6137 			}, {
6138 				.eraseblocks = { {1024 * 256, 1} },
6139 				.block_erase = SPI_BLOCK_ERASE_C7,
6140 			},
6141 		},
6142 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_TB_BPL,
6143 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD,
6144 		.write		= SPI_CHIP_WRITE256,
6145 		.read		= SPI_CHIP_READ, /* Fast read (0x0B), dual I/O  (0x3B) supported */
6146 		.voltage	= {2700, 3600}, /* 2.3-2.7V acceptable results in lower performance */
6147 	},
6148 
6149 	{
6150 		.vendor		= "Fudan",
6151 		.name		= "FM25F04(A)",
6152 		.bustype	= BUS_SPI,
6153 		.manufacture_id	= FUDAN_ID_NOPREFIX,
6154 		.model_id	= FUDAN_FM25F04,
6155 		.total_size	= 512,
6156 		.page_size	= 256,
6157 		/* OTP: 256B total; enter 0x3A, (A version only:) read ID 0x4B */
6158 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
6159 		.tested		= TEST_UNTESTED,
6160 		.probe		= PROBE_SPI_RDID,
6161 		.probe_timing	= TIMING_ZERO,
6162 		.block_erasers	= {
6163 			{
6164 				.eraseblocks = { {4 * 1024, 128} },
6165 				.block_erase = SPI_BLOCK_ERASE_20,
6166 			}, {
6167 				.eraseblocks = { {32 * 1024, 16} },
6168 				.block_erase = SPI_BLOCK_ERASE_52,
6169 			}, {
6170 				.eraseblocks = { {64 * 1024, 8} },
6171 				.block_erase = SPI_BLOCK_ERASE_D8,
6172 			}, {
6173 				.eraseblocks = { {1024 * 512, 1} },
6174 				.block_erase = SPI_BLOCK_ERASE_60,
6175 			}, {
6176 				.eraseblocks = { {1024 * 512, 1} },
6177 				.block_erase = SPI_BLOCK_ERASE_C7,
6178 			},
6179 		},
6180 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_TB_BPL,
6181 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD,
6182 		.write		= SPI_CHIP_WRITE256,
6183 		.read		= SPI_CHIP_READ, /* Fast read (0x0B), dual I/O  (0x3B) supported */
6184 		.voltage	= {2700, 3600},
6185 	},
6186 
6187 	{
6188 		.vendor		= "Fudan",
6189 		.name		= "FM25Q04",
6190 		.bustype	= BUS_SPI,
6191 		.manufacture_id	= FUDAN_ID_NOPREFIX,
6192 		.model_id	= FUDAN_FM25Q04,
6193 		.total_size	= 512,
6194 		.page_size	= 256,
6195 		/* supports SFDP */
6196 		/* QPI enable 0x38, disable 0xFF */
6197 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
6198 		.tested		= TEST_UNTESTED,
6199 		.probe		= PROBE_SPI_RDID,
6200 		.probe_timing	= TIMING_ZERO,
6201 		.block_erasers	= {
6202 			{
6203 				/* 128 * 4KB sectors */
6204 				.eraseblocks = { {4 * 1024, 128} },
6205 				.block_erase = SPI_BLOCK_ERASE_20,
6206 			}, {
6207 				/* 16 * 32KB blocks */
6208 				.eraseblocks = { {32 * 1024, 16} },
6209 				.block_erase = SPI_BLOCK_ERASE_52,
6210 			}, {
6211 				/* 8 * 64KB blocks  */
6212 				.eraseblocks = { {64 * 1024, 8} },
6213 				.block_erase = SPI_BLOCK_ERASE_D8,
6214 			}, {
6215 				/* Full chip erase (0x60)  */
6216 				.eraseblocks = { {512 * 1024, 1} },
6217 				.block_erase = SPI_BLOCK_ERASE_60,
6218 			}, {
6219 				/* Full chip erase (0xC7)  */
6220 				.eraseblocks = { {512 * 1024, 1} },
6221 				.block_erase = SPI_BLOCK_ERASE_C7,
6222 			},
6223 		},
6224 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_TB_BPL,
6225 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD,
6226 		.write		= SPI_CHIP_WRITE256,
6227 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
6228 		.voltage	= {2700, 3600},
6229 	},
6230 
6231 	{
6232 		.vendor		= "Fudan",
6233 		.name		= "FM25Q08",
6234 		.bustype	= BUS_SPI,
6235 		.manufacture_id	= FUDAN_ID_NOPREFIX,
6236 		.model_id	= FUDAN_FM25Q08,
6237 		.total_size	= 1024,
6238 		.page_size	= 256,
6239 		/* supports SFDP */
6240 		/* OTP: 1024B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
6241 		/* QPI enable 0x38, disable 0xFF */
6242 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
6243 		.tested		= TEST_OK_PREW,
6244 		.probe		= PROBE_SPI_RDID,
6245 		.probe_timing	= TIMING_ZERO,
6246 		.block_erasers	= {
6247 			{
6248 				.eraseblocks = { {4 * 1024, 256} },
6249 				.block_erase = SPI_BLOCK_ERASE_20,
6250 			}, {
6251 				.eraseblocks = { {32 * 1024, 32} },
6252 				.block_erase = SPI_BLOCK_ERASE_52,
6253 			}, {
6254 				.eraseblocks = { {64 * 1024, 16} },
6255 				.block_erase = SPI_BLOCK_ERASE_D8,
6256 			}, {
6257 				.eraseblocks = { {1024 * 1024, 1} },
6258 				.block_erase = SPI_BLOCK_ERASE_60,
6259 			}, {
6260 				.eraseblocks = { {1024 * 1024, 1} },
6261 				.block_erase = SPI_BLOCK_ERASE_C7,
6262 			},
6263 		},
6264 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_TB_BPL, /* bit6 selects size of protected blocks; TODO: SR2 */
6265 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD,
6266 		.write		= SPI_CHIP_WRITE256,
6267 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
6268 		.voltage	= {2700, 3600},
6269 	},
6270 
6271 	{
6272 		.vendor		= "Fudan",
6273 		.name		= "FM25Q16",
6274 		.bustype	= BUS_SPI,
6275 		.manufacture_id	= FUDAN_ID_NOPREFIX,
6276 		.model_id	= FUDAN_FM25Q16,
6277 		.total_size	= 2048,
6278 		.page_size	= 256,
6279 		/* supports SFDP */
6280 		/* OTP: 1024B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
6281 		/* QPI enable 0x38, disable 0xFF */
6282 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
6283 		.tested		= TEST_OK_PR,
6284 		.probe		= PROBE_SPI_RDID,
6285 		.probe_timing	= TIMING_ZERO,
6286 		.block_erasers	= {
6287 			{
6288 				.eraseblocks = { {4 * 1024, 512} },
6289 				.block_erase = SPI_BLOCK_ERASE_20,
6290 			}, {
6291 				.eraseblocks = { {32 * 1024, 64} },
6292 				.block_erase = SPI_BLOCK_ERASE_52,
6293 			}, {
6294 				.eraseblocks = { {64 * 1024, 32} },
6295 				.block_erase = SPI_BLOCK_ERASE_D8,
6296 			}, {
6297 				.eraseblocks = { {2 * 1024 * 1024, 1} },
6298 				.block_erase = SPI_BLOCK_ERASE_60,
6299 			}, {
6300 				.eraseblocks = { {2 * 1024 * 1024, 1} },
6301 				.block_erase = SPI_BLOCK_ERASE_C7,
6302 			}
6303 		},
6304 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_TB_BPL, /* bit6 selects size of protected blocks; TODO: SR2 */
6305 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD,
6306 		.write		= SPI_CHIP_WRITE256,
6307 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
6308 		.voltage	= {2700, 3600},
6309 	},
6310 
6311 	{
6312 		.vendor		= "Fudan",
6313 		.name		= "FM25Q32",
6314 		.bustype	= BUS_SPI,
6315 		.manufacture_id	= FUDAN_ID_NOPREFIX,
6316 		.model_id	= FUDAN_FM25Q32,
6317 		.total_size	= 4096,
6318 		.page_size	= 256,
6319 		/* supports SFDP */
6320 		/* OTP: 1024B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
6321 		/* QPI enable 0x38, disable 0xFF */
6322 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
6323 		.tested		= TEST_UNTESTED,
6324 		.probe		= PROBE_SPI_RDID,
6325 		.probe_timing	= TIMING_ZERO,
6326 		.block_erasers	= {
6327 			{
6328 				.eraseblocks = { {4 * 1024, 1024} },
6329 				.block_erase = SPI_BLOCK_ERASE_20,
6330 			}, {
6331 				.eraseblocks = { {32 * 1024, 128} },
6332 				.block_erase = SPI_BLOCK_ERASE_52,
6333 			}, {
6334 				.eraseblocks = { {64 * 1024, 64} },
6335 				.block_erase = SPI_BLOCK_ERASE_D8,
6336 			}, {
6337 				.eraseblocks = { {4 * 1024 * 1024, 1} },
6338 				.block_erase = SPI_BLOCK_ERASE_60,
6339 			}, {
6340 				.eraseblocks = { {4 * 1024 * 1024, 1} },
6341 				.block_erase = SPI_BLOCK_ERASE_C7,
6342 			},
6343 		},
6344 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_TB_BPL, /* bit6 selects size of protected blocks; TODO: SR2 */
6345 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD,
6346 		.write		= SPI_CHIP_WRITE256,
6347 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
6348 		.voltage	= {2700, 3600},
6349 	},
6350 
6351 	{
6352 		.vendor		= "Fudan",
6353 		.name		= "FM25Q64",
6354 		.bustype	= BUS_SPI,
6355 		.manufacture_id	= FUDAN_ID_NOPREFIX,
6356 		.model_id	= FUDAN_FM25Q64,
6357 		.total_size	= 8192,
6358 		.page_size	= 256,
6359 		/* supports SFDP */
6360 		/* QPI enable 0x38, disable 0xFF */
6361 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
6362 		.tested		= TEST_UNTESTED,
6363 		.probe		= PROBE_SPI_RDID,
6364 		.probe_timing	= TIMING_ZERO,
6365 		.block_erasers	= {
6366 			{
6367 				/* 2048 * 4KB sectors */
6368 				.eraseblocks = { {4 * 1024, 2048} },
6369 				.block_erase = SPI_BLOCK_ERASE_20,
6370 			}, {
6371 				/* 256 * 32KB blocks */
6372 				.eraseblocks = { {32 * 1024, 256} },
6373 				.block_erase = SPI_BLOCK_ERASE_52,
6374 			}, {
6375 				/* 128 * 64KB blocks  */
6376 				.eraseblocks = { {64 * 1024, 128} },
6377 				.block_erase = SPI_BLOCK_ERASE_D8,
6378 			}, {
6379 				/* Full chip erase (0x60)  */
6380 				.eraseblocks = { {8 * 1024 * 1024, 1} },
6381 				.block_erase = SPI_BLOCK_ERASE_60,
6382 			}, {
6383 				/* Full chip erase (0xC7)  */
6384 				.eraseblocks = { {8 * 1024 * 1024, 1} },
6385 				.block_erase = SPI_BLOCK_ERASE_C7,
6386 			},
6387 		},
6388 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_TB_BPL, /* bit6 selects size of protected blocks; TODO: SR2 */
6389 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD,
6390 		.write		= SPI_CHIP_WRITE256,
6391 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
6392 		.voltage	= {2700, 3600},
6393 	},
6394 
6395 	{
6396 		.vendor		= "Fudan",
6397 		.name		= "FM25Q128",
6398 		.bustype	= BUS_SPI,
6399 		.manufacture_id	= FUDAN_ID_NOPREFIX,
6400 		.model_id	= FUDAN_FM25Q128,
6401 		.total_size	= 16384,
6402 		.page_size	= 256,
6403 		/* supports SFDP */
6404 		/* QPI enable 0x38, disable 0xFF */
6405 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
6406 		.tested		= TEST_OK_PR,
6407 		.probe		= PROBE_SPI_RDID,
6408 		.probe_timing	= TIMING_ZERO,
6409 		.block_erasers	= {
6410 			{
6411 				/* 4096 * 4KB sectors */
6412 				.eraseblocks = { {4 * 1024, 4096} },
6413 				.block_erase = SPI_BLOCK_ERASE_20,
6414 			}, {
6415 				/* 512 * 32KB blocks */
6416 				.eraseblocks = { {32 * 1024, 512} },
6417 				.block_erase = SPI_BLOCK_ERASE_52,
6418 			}, {
6419 				/* 256 * 64KB blocks  */
6420 				.eraseblocks = { {64 * 1024, 256} },
6421 				.block_erase = SPI_BLOCK_ERASE_D8,
6422 			}, {
6423 				/* Full chip erase (0x60)  */
6424 				.eraseblocks = { {16 * 1024 * 1024, 1} },
6425 				.block_erase = SPI_BLOCK_ERASE_60,
6426 			}, {
6427 				/* Full chip erase (0xC7)  */
6428 				.eraseblocks = { {16 * 1024 * 1024, 1} },
6429 				.block_erase = SPI_BLOCK_ERASE_C7,
6430 			},
6431 		},
6432 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_TB_BPL, /* bit6 selects size of protected blocks; TODO: SR2 */
6433 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD,
6434 		.write		= SPI_CHIP_WRITE256,
6435 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
6436 		.voltage	= {2700, 3600},
6437 	},
6438 
6439 	{
6440 		.vendor		= "Fujitsu",
6441 		.name		= "MBM29F004BC",
6442 		.bustype	= BUS_PARALLEL,
6443 		.manufacture_id	= FUJITSU_ID,
6444 		.model_id	= FUJITSU_MBM29F004BC,
6445 		.total_size	= 512,
6446 		.page_size	= 64 * 1024,
6447 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
6448 		.tested		= TEST_UNTESTED,
6449 		.probe		= PROBE_JEDEC,
6450 		.probe_timing	= TIMING_ZERO,	/* Datasheet has no timing info specified */
6451 		.block_erasers	=
6452 		{
6453 			{
6454 				.eraseblocks = {
6455 					{16 * 1024, 1},
6456 					{8 * 1024, 2},
6457 					{32 * 1024, 1},
6458 					{64 * 1024, 7},
6459 				},
6460 				.block_erase = JEDEC_SECTOR_ERASE,
6461 			}, {
6462 				.eraseblocks = { {512 * 1024, 1} },
6463 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
6464 			},
6465 		},
6466 		.write		= 0,
6467 		.read		= READ_MEMMAPPED,
6468 		.voltage	= {4500, 5500},
6469 	},
6470 
6471 	{
6472 		.vendor		= "Fujitsu",
6473 		.name		= "MBM29F004TC",
6474 		.bustype	= BUS_PARALLEL,
6475 		.manufacture_id	= FUJITSU_ID,
6476 		.model_id	= FUJITSU_MBM29F004TC,
6477 		.total_size	= 512,
6478 		.page_size	= 64 * 1024,
6479 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
6480 		.tested		= TEST_UNTESTED,
6481 		.probe		= PROBE_JEDEC,
6482 		.probe_timing	= TIMING_ZERO,	/* Datasheet has no timing info specified */
6483 		.block_erasers	=
6484 		{
6485 			{
6486 				.eraseblocks = {
6487 					{64 * 1024, 7},
6488 					{32 * 1024, 1},
6489 					{8 * 1024, 2},
6490 					{16 * 1024, 1},
6491 				},
6492 				.block_erase = JEDEC_SECTOR_ERASE,
6493 			}, {
6494 				.eraseblocks = { {512 * 1024, 1} },
6495 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
6496 			},
6497 		},
6498 		.write		= 0,
6499 		.read		= READ_MEMMAPPED,
6500 		.voltage	= {4500, 5500},
6501 	},
6502 
6503 	{
6504 		/* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
6505 		.vendor		= "Fujitsu",
6506 		.name		= "MBM29F400BC",
6507 		.bustype	= BUS_PARALLEL,
6508 		.manufacture_id	= FUJITSU_ID,
6509 		.model_id	= FUJITSU_MBM29F400BC,
6510 		.total_size	= 512,
6511 		.page_size	= 64 * 1024,
6512 		.feature_bits	= FEATURE_ADDR_SHIFTED | FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
6513 		.tested		= TEST_UNTESTED,
6514 		.probe		= PROBE_JEDEC,
6515 		.probe_timing	= 10, // FIXME: check datasheet. Using the 10 us from probe_m29f400bt
6516 		.block_erasers	=
6517 		{
6518 			{
6519 				.eraseblocks = {
6520 					{16 * 1024, 1},
6521 					{8 * 1024, 2},
6522 					{32 * 1024, 1},
6523 					{64 * 1024, 7},
6524 				},
6525 				.block_erase = JEDEC_SECTOR_ERASE,
6526 			}, {
6527 				.eraseblocks = { {512 * 1024, 1} },
6528 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
6529 			},
6530 		},
6531 		.write		= WRITE_JEDEC1,
6532 		.read		= READ_MEMMAPPED,
6533 		.voltage	= {4750, 5250}, /* 4.75-5.25V for type -55, others 4.5-5.5V */
6534 	},
6535 
6536 	{
6537 		.vendor		= "Fujitsu",
6538 		.name		= "MBM29F400TC",
6539 		.bustype	= BUS_PARALLEL,
6540 		.manufacture_id	= FUJITSU_ID,
6541 		.model_id	= FUJITSU_MBM29F400TC,
6542 		.total_size	= 512,
6543 		.page_size	= 64 * 1024,
6544 		.feature_bits	= FEATURE_ADDR_SHIFTED | FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
6545 		.tested		= TEST_UNTESTED,
6546 		.probe		= PROBE_JEDEC,
6547 		.probe_timing	= 10, // FIXME: check datasheet. Using the 10 us from probe_m29f400bt
6548 		.block_erasers	=
6549 		{
6550 			{
6551 				.eraseblocks = {
6552 					{64 * 1024, 7},
6553 					{32 * 1024, 1},
6554 					{8 * 1024, 2},
6555 					{16 * 1024, 1},
6556 				},
6557 				.block_erase = JEDEC_SECTOR_ERASE,
6558 			}, {
6559 				.eraseblocks = { {512 * 1024, 1} },
6560 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
6561 			},
6562 		},
6563 		.write		= WRITE_JEDEC1,
6564 		.read		= READ_MEMMAPPED,
6565 		.voltage	= {4750, 5250}, /* 4.75-5.25V for type -55, others 4.5-5.5V */
6566 	},
6567 
6568 	{
6569 		.vendor		= "Fujitsu",
6570 		.name		= "MBM29LV160BE",
6571 		.bustype	= BUS_PARALLEL,
6572 		.manufacture_id	= FUJITSU_ID,
6573 		.model_id	= FUJITSU_MBM29LV160BE,
6574 		.total_size	= 2 * 1024,
6575 		.page_size	= 0,
6576 		.feature_bits	= FEATURE_ADDR_SHIFTED | FEATURE_SHORT_RESET,
6577 		.tested		= TEST_UNTESTED,
6578 		.probe		= PROBE_JEDEC,
6579 		.probe_timing	= 10, // FIXME: check datasheet. Using the 10 us from probe_m29f400bt
6580 		.block_erasers	=
6581 		{
6582 			{
6583 				.eraseblocks = {
6584 					{16 * 1024, 1},
6585 					{8 * 1024, 2},
6586 					{32 * 1024, 1},
6587 					{64 * 1024, 31},
6588 				},
6589 				.block_erase = JEDEC_BLOCK_ERASE,
6590 			}, {
6591 				.eraseblocks = { {2048 * 1024, 1} },
6592 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
6593 			},
6594 		},
6595 		.write		= WRITE_JEDEC1, /* Supports a fast mode too */
6596 		.read		= READ_MEMMAPPED,
6597 		.voltage	= {3000, 3600}, /* 3.0-3.6V for type -70, others 2.7-3.6V */
6598 	},
6599 
6600 	{
6601 		.vendor		= "Fujitsu",
6602 		.name		= "MBM29LV160TE",
6603 		.bustype	= BUS_PARALLEL,
6604 		.manufacture_id	= FUJITSU_ID,
6605 		.model_id	= FUJITSU_MBM29LV160TE,
6606 		.total_size	= 2 * 1024,
6607 		.page_size	= 0,
6608 		.feature_bits	= FEATURE_ADDR_SHIFTED | FEATURE_SHORT_RESET,
6609 		.tested		= TEST_UNTESTED,
6610 		.probe		= PROBE_JEDEC,
6611 		.probe_timing	= 10, // FIXME: check datasheet. Using the 10 us from probe_m29f400bt
6612 		.block_erasers	=
6613 		{
6614 			{
6615 				.eraseblocks = {
6616 					{64 * 1024, 31},
6617 					{32 * 1024, 1},
6618 					{8 * 1024, 2},
6619 					{16 * 1024, 1},
6620 				},
6621 				.block_erase = JEDEC_BLOCK_ERASE,
6622 			}, {
6623 				.eraseblocks = { {2048 * 1024, 1} },
6624 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
6625 			},
6626 		},
6627 		.write		= WRITE_JEDEC1, /* Supports a fast mode too */
6628 		.read		= READ_MEMMAPPED,
6629 		.voltage	= {3000, 3600}, /* 3.0-3.6V for type -70, others 2.7-3.6V */
6630 	},
6631 
6632 	{
6633 		.vendor		= "GigaDevice",
6634 		.name		= "GD25B128B/GD25Q128B",
6635 		.bustype	= BUS_SPI,
6636 		.manufacture_id	= GIGADEVICE_ID,
6637 		.model_id	= GIGADEVICE_GD25Q128,
6638 		.total_size	= 16384,
6639 		.page_size	= 256,
6640 		/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
6641 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
6642 		.tested		= TEST_OK_PREW,
6643 		.probe		= PROBE_SPI_RDID,
6644 		.probe_timing	= TIMING_ZERO,
6645 		.block_erasers	=
6646 		{
6647 			{
6648 				.eraseblocks = { {4 * 1024, 4096} },
6649 				.block_erase = SPI_BLOCK_ERASE_20,
6650 			}, {
6651 				.eraseblocks = { {32 * 1024, 512} },
6652 				.block_erase = SPI_BLOCK_ERASE_52,
6653 			}, {
6654 				.eraseblocks = { {64 * 1024, 256} },
6655 				.block_erase = SPI_BLOCK_ERASE_D8,
6656 			}, {
6657 				.eraseblocks = { {16 * 1024 * 1024, 1} },
6658 				.block_erase = SPI_BLOCK_ERASE_60,
6659 			}, {
6660 				.eraseblocks = { {16 * 1024 * 1024, 1} },
6661 				.block_erase = SPI_BLOCK_ERASE_C7,
6662 			}
6663 		},
6664 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP4_SRWD,
6665 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP4_SRWD, /* TODO: 2nd status reg (read with 0x35) */
6666 		.write		= SPI_CHIP_WRITE256,
6667 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
6668 		.voltage	= {2700, 3600},
6669 	},
6670 
6671 	{
6672 		.vendor		= "GigaDevice",
6673 		.name		= "GD25LF128E",
6674 		.bustype	= BUS_SPI,
6675 		.manufacture_id	= GIGADEVICE_ID,
6676 		.model_id	= GIGADEVICE_GD25LF128E,
6677 		.total_size	= 16384,
6678 		.page_size	= 256,
6679 		/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
6680 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_WRSR_EXT2,
6681 		.tested		= TEST_OK_PREWB,
6682 		.probe		= PROBE_SPI_RDID,
6683 		.probe_timing	= TIMING_ZERO,
6684 		.block_erasers	=
6685 		{
6686 			{
6687 				.eraseblocks = { {4 * 1024, 4096} },
6688 				.block_erase = SPI_BLOCK_ERASE_20,
6689 			}, {
6690 				.eraseblocks = { {32 * 1024, 512} },
6691 				.block_erase = SPI_BLOCK_ERASE_52,
6692 			}, {
6693 				.eraseblocks = { {64 * 1024, 256} },
6694 				.block_erase = SPI_BLOCK_ERASE_D8,
6695 			}, {
6696 				.eraseblocks = { {16 * 1024 * 1024, 1} },
6697 				.block_erase = SPI_BLOCK_ERASE_60,
6698 			}, {
6699 				.eraseblocks = { {16 * 1024 * 1024, 1} },
6700 				.block_erase = SPI_BLOCK_ERASE_C7,
6701 			}
6702 		},
6703 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP4_SRWD,
6704 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP4_SRWD, /* TODO: 2nd status reg (read with 0x35) */
6705 		.write		= SPI_CHIP_WRITE256,
6706 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
6707 		.voltage	= {1695, 1950},
6708 		.reg_bits	=
6709 		{
6710 			.srp    = {STATUS1, 7, RW},
6711 			.srl    = {STATUS2, 0, RW},
6712 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
6713 			.tb     = {STATUS1, 5, RW}, /* Called BP3 in datasheet, acts like TB */
6714 			.sec    = {STATUS1, 6, RW}, /* Called BP4 in datasheet, acts like SEC */
6715 			.cmp    = {STATUS2, 6, RW},
6716 		},
6717 		.decode_range	= DECODE_RANGE_SPI25,
6718 	},
6719 
6720 	{
6721 		.vendor		= "GigaDevice",
6722 		.name		= "GD25LF256F",
6723 		.bustype	= BUS_SPI,
6724 		.manufacture_id	= GIGADEVICE_ID,
6725 		.model_id	= GIGADEVICE_GD25LF256F,
6726 		.total_size	= 32768,
6727 		.page_size	= 256,
6728 		/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
6729 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_WRSR_EXT2 | FEATURE_4BA,
6730 		.tested		= TEST_OK_PREWB,
6731 		.probe		= PROBE_SPI_RDID,
6732 		.probe_timing	= TIMING_ZERO,
6733 		.block_erasers	=
6734 		{
6735 			{
6736 				.eraseblocks = { {4 * 1024, 8192} },
6737 				.block_erase = SPI_BLOCK_ERASE_21,
6738 			}, {
6739 				.eraseblocks = { {4 * 1024, 8192} },
6740 				.block_erase = SPI_BLOCK_ERASE_20,
6741 			}, {
6742 				.eraseblocks = { {32 * 1024, 1024} },
6743 				.block_erase = SPI_BLOCK_ERASE_5C,
6744 			}, {
6745 				.eraseblocks = { {32 * 1024, 1024} },
6746 				.block_erase = SPI_BLOCK_ERASE_52,
6747 			}, {
6748 				.eraseblocks = { {64 * 1024, 512} },
6749 				.block_erase = SPI_BLOCK_ERASE_DC,
6750 			}, {
6751 				.eraseblocks = { {64 * 1024, 512} },
6752 				.block_erase = SPI_BLOCK_ERASE_D8,
6753 			}, {
6754 				.eraseblocks = { {32 * 1024 * 1024, 1} },
6755 				.block_erase = SPI_BLOCK_ERASE_60,
6756 			}, {
6757 				.eraseblocks = { {32 * 1024 * 1024, 1} },
6758 				.block_erase = SPI_BLOCK_ERASE_C7,
6759 			}
6760 		},
6761 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP4_SRWD,
6762 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP4_SRWD, /* TODO: 2nd status reg (read with 0x35) */
6763 		.write		= SPI_CHIP_WRITE256,
6764 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
6765 		.voltage	= {1650, 2000},
6766 		.reg_bits	=
6767 		{
6768 			.srp    = {STATUS1, 7, RW},
6769 			.srl    = {STATUS2, 0, RW},
6770 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}, {STATUS1, 5, RW}},
6771 			.tb    = {STATUS1, 6, RW}, /* Called BP4 in datasheet, acts like TB */
6772 			.cmp    = {STATUS2, 6, RW},
6773 		},
6774 		.decode_range	= DECODE_RANGE_SPI25,
6775 	},
6776 
6777 	{
6778 		.vendor		= "GigaDevice",
6779 		.name		= "GD25LF512MF",
6780 		.bustype	= BUS_SPI,
6781 		.manufacture_id	= GIGADEVICE_ID,
6782 		.model_id	= GIGADEVICE_GD25LF512MF,
6783 		.total_size	= 65536,
6784 		.page_size	= 256,
6785 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_WRSR_EXT2 | FEATURE_4BA,
6786 		.tested		= TEST_OK_PREWB,
6787 		.probe		= PROBE_SPI_RDID,
6788 		.probe_timing	= TIMING_ZERO,
6789 		.block_erasers	=
6790 		{
6791 			{
6792 				.eraseblocks = { {4 * 1024, 16384} },
6793 				.block_erase = SPI_BLOCK_ERASE_21,
6794 			}, {
6795 				.eraseblocks = { {4 * 1024, 16384} },
6796 				.block_erase = SPI_BLOCK_ERASE_20,
6797 			}, {
6798 				.eraseblocks = { {32 * 1024, 2048} },
6799 				.block_erase = SPI_BLOCK_ERASE_5C,
6800 			}, {
6801 				.eraseblocks = { {32 * 1024, 2048} },
6802 				.block_erase = SPI_BLOCK_ERASE_52,
6803 			}, {
6804 				.eraseblocks = { {64 * 1024, 1024} },
6805 				.block_erase = SPI_BLOCK_ERASE_DC,
6806 			}, {
6807 				.eraseblocks = { {64 * 1024, 1024} },
6808 				.block_erase = SPI_BLOCK_ERASE_D8,
6809 			}, {
6810 				.eraseblocks = { {64 * 1024 * 1024, 1} },
6811 				.block_erase = SPI_BLOCK_ERASE_60,
6812 			}, {
6813 				.eraseblocks = { {64 * 1024 * 1024, 1} },
6814 				.block_erase = SPI_BLOCK_ERASE_C7,
6815 			}
6816 		},
6817 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP4_SRWD, /* TODO: 2nd status reg (read with 0x35) */
6818 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP4_SRWD,
6819 		.write		= SPI_CHIP_WRITE256,
6820 		.read		= SPI_CHIP_READ,
6821 		.voltage	= {1695, 1950},
6822 		.reg_bits	=
6823 		{
6824 			.srp    = {STATUS1, 7, RW},
6825 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}, {STATUS1, 5, RW}},
6826 			.tb     = {STATUS1, 6, RW},	/* Called BP4 in datasheet, acts like TB */
6827 			.srl    = {STATUS2, 0, RW},
6828 			.cmp    = {STATUS2, 6, RW},
6829 		},
6830 		.decode_range	= DECODE_RANGE_SPI25,
6831 	},
6832 
6833 	{
6834 		.vendor		= "GigaDevice",
6835 		.name		= "GD25LQ128E/GD25LB128E/GD25LR128E/GD25LQ128D/GD25LQ128C",
6836 		.bustype	= BUS_SPI,
6837 		.manufacture_id	= GIGADEVICE_ID,
6838 		.model_id	= GIGADEVICE_GD25LQ128CD,
6839 		.total_size	= 16384,
6840 		.page_size	= 256,
6841 		/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
6842 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_WRSR_EXT2,
6843 		.tested		= TEST_OK_PREWB,
6844 		.probe		= PROBE_SPI_RDID,
6845 		.probe_timing	= TIMING_ZERO,
6846 		.block_erasers	=
6847 		{
6848 			{
6849 				.eraseblocks = { {4 * 1024, 4096} },
6850 				.block_erase = SPI_BLOCK_ERASE_20,
6851 			}, {
6852 				.eraseblocks = { {32 * 1024, 512} },
6853 				.block_erase = SPI_BLOCK_ERASE_52,
6854 			}, {
6855 				.eraseblocks = { {64 * 1024, 256} },
6856 				.block_erase = SPI_BLOCK_ERASE_D8,
6857 			}, {
6858 				.eraseblocks = { {16 * 1024 * 1024, 1} },
6859 				.block_erase = SPI_BLOCK_ERASE_60,
6860 			}, {
6861 				.eraseblocks = { {16 * 1024 * 1024, 1} },
6862 				.block_erase = SPI_BLOCK_ERASE_C7,
6863 			}
6864 		},
6865 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP4_SRWD,
6866 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP4_SRWD, /* TODO: 2nd status reg (read with 0x35) */
6867 		.write		= SPI_CHIP_WRITE256,
6868 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
6869 		.voltage	= {1695, 1950},
6870 		.reg_bits	=
6871 		{
6872 			.srp    = {STATUS1, 7, RW},
6873 			.srl    = {STATUS2, 0, RW},
6874 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
6875 			.tb     = {STATUS1, 5, RW}, /* Called BP3 in datasheet, acts like TB */
6876 			.sec    = {STATUS1, 6, RW}, /* Called BP4 in datasheet, acts like SEC */
6877 			.cmp    = {STATUS2, 6, RW},
6878 		},
6879 		.decode_range	= DECODE_RANGE_SPI25,
6880 	},
6881 
6882 	{
6883 		.vendor		= "GigaDevice",
6884 		.name		= "GD25LQ255E",
6885 		.bustype	= BUS_SPI,
6886 		.manufacture_id	= GIGADEVICE_ID,
6887 		.model_id	= GIGADEVICE_GD25LQ255E,
6888 		.total_size	= 32768,
6889 		.page_size	= 256,
6890 		/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
6891 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_WRSR_EXT2 | FEATURE_4BA,
6892 		.tested		= TEST_OK_PREWB,
6893 		.probe		= PROBE_SPI_RDID,
6894 		.probe_timing	= TIMING_ZERO,
6895 		.block_erasers	=
6896 		{
6897 			{
6898 				.eraseblocks = { {4 * 1024, 8192} },
6899 				.block_erase = SPI_BLOCK_ERASE_21,
6900 			}, {
6901 				.eraseblocks = { {4 * 1024, 8192} },
6902 				.block_erase = SPI_BLOCK_ERASE_20,
6903 			}, {
6904 				.eraseblocks = { {32 * 1024, 1024} },
6905 				.block_erase = SPI_BLOCK_ERASE_5C,
6906 			}, {
6907 				.eraseblocks = { {32 * 1024, 1024} },
6908 				.block_erase = SPI_BLOCK_ERASE_52,
6909 			}, {
6910 				.eraseblocks = { {64 * 1024, 512} },
6911 				.block_erase = SPI_BLOCK_ERASE_DC,
6912 			}, {
6913 				.eraseblocks = { {64 * 1024, 512} },
6914 				.block_erase = SPI_BLOCK_ERASE_D8,
6915 			}, {
6916 				.eraseblocks = { {32 * 1024 * 1024, 1} },
6917 				.block_erase = SPI_BLOCK_ERASE_60,
6918 			}, {
6919 				.eraseblocks = { {32 * 1024 * 1024, 1} },
6920 				.block_erase = SPI_BLOCK_ERASE_C7,
6921 			}
6922 		},
6923 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP4_SRWD,
6924 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP4_SRWD, /* TODO: 2nd status reg (read with 0x35) */
6925 		.write		= SPI_CHIP_WRITE256,
6926 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
6927 		.voltage	= {1650, 2000},
6928 		.reg_bits	=
6929 		{
6930 			.srp    = {STATUS1, 7, RW},
6931 			.srl    = {STATUS2, 0, RW},
6932 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
6933 			.tb     = {STATUS1, 5, RW}, /* Called BP3 in datasheet, acts like TB */
6934 			.sec    = {STATUS1, 6, RW}, /* Called BP4 in datasheet, acts like SEC */
6935 			.cmp    = {STATUS2, 6, RW},
6936 		},
6937 		.decode_range	= DECODE_RANGE_SPI25,
6938 	},
6939 
6940 	{
6941 		.vendor		= "GigaDevice",
6942 		.name		= "GD25LQ16",
6943 		.bustype	= BUS_SPI,
6944 		.manufacture_id	= GIGADEVICE_ID,
6945 		.model_id	= GIGADEVICE_GD25LQ16,
6946 		.total_size	= 2048,
6947 		.page_size	= 256,
6948 		/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
6949 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
6950 		.tested		= TEST_UNTESTED,
6951 		.probe		= PROBE_SPI_RDID,
6952 		.probe_timing	= TIMING_ZERO,
6953 		.block_erasers	=
6954 		{
6955 			{
6956 				.eraseblocks = { {4 * 1024, 512} },
6957 				.block_erase = SPI_BLOCK_ERASE_20,
6958 			}, {
6959 				.eraseblocks = { {32 * 1024, 64} },
6960 				.block_erase = SPI_BLOCK_ERASE_52,
6961 			}, {
6962 				.eraseblocks = { {64 * 1024, 32} },
6963 				.block_erase = SPI_BLOCK_ERASE_D8,
6964 			}, {
6965 				.eraseblocks = { {2 * 1024 * 1024, 1} },
6966 				.block_erase = SPI_BLOCK_ERASE_60,
6967 			}, {
6968 				.eraseblocks = { {2 * 1024 * 1024, 1} },
6969 				.block_erase = SPI_BLOCK_ERASE_C7,
6970 			}
6971 		},
6972 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP4_SRWD,
6973 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP4_SRWD, /* TODO: 2nd status reg (read with 0x35) */
6974 		.write		= SPI_CHIP_WRITE256,
6975 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
6976 		.voltage	= {1695, 1950},
6977 	},
6978 
6979 	{
6980 		.vendor		= "GigaDevice",
6981 		.name		= "GD25LQ32",
6982 		.bustype	= BUS_SPI,
6983 		.manufacture_id	= GIGADEVICE_ID,
6984 		.model_id	= GIGADEVICE_GD25LQ32,
6985 		.total_size	= 4096,
6986 		.page_size	= 256,
6987 		/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
6988 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
6989 		.tested		= TEST_OK_PREW,
6990 		.probe		= PROBE_SPI_RDID,
6991 		.probe_timing	= TIMING_ZERO,
6992 		.block_erasers	=
6993 		{
6994 			{
6995 				.eraseblocks = { {4 * 1024, 1024} },
6996 				.block_erase = SPI_BLOCK_ERASE_20,
6997 			}, {
6998 				.eraseblocks = { {32 * 1024, 128} },
6999 				.block_erase = SPI_BLOCK_ERASE_52,
7000 			}, {
7001 				.eraseblocks = { {64 * 1024, 64} },
7002 				.block_erase = SPI_BLOCK_ERASE_D8,
7003 			}, {
7004 				.eraseblocks = { {4 * 1024 * 1024, 1} },
7005 				.block_erase = SPI_BLOCK_ERASE_60,
7006 			}, {
7007 				.eraseblocks = { {4 * 1024 * 1024, 1} },
7008 				.block_erase = SPI_BLOCK_ERASE_C7,
7009 			}
7010 		},
7011 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP4_SRWD,
7012 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP4_SRWD, /* TODO: 2nd status reg (read with 0x35) */
7013 		.write		= SPI_CHIP_WRITE256,
7014 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
7015 		.voltage	= {1695, 1950},
7016 	},
7017 
7018 	{
7019 		.vendor		= "GigaDevice",
7020 		.name		= "GD25LQ40",
7021 		.bustype	= BUS_SPI,
7022 		.manufacture_id	= GIGADEVICE_ID,
7023 		.model_id	= GIGADEVICE_GD25LQ40,
7024 		.total_size	= 512,
7025 		.page_size	= 256,
7026 		/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
7027 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
7028 		.tested		= TEST_UNTESTED,
7029 		.probe		= PROBE_SPI_RDID,
7030 		.probe_timing	= TIMING_ZERO,
7031 		.block_erasers	=
7032 		{
7033 			{
7034 				.eraseblocks = { {4 * 1024, 128} },
7035 				.block_erase = SPI_BLOCK_ERASE_20,
7036 			}, {
7037 				.eraseblocks = { {32 * 1024, 16} },
7038 				.block_erase = SPI_BLOCK_ERASE_52,
7039 			}, {
7040 				.eraseblocks = { {64 * 1024, 8} },
7041 				.block_erase = SPI_BLOCK_ERASE_D8,
7042 			}, {
7043 				.eraseblocks = { {512 * 1024, 1} },
7044 				.block_erase = SPI_BLOCK_ERASE_60,
7045 			}, {
7046 				.eraseblocks = { {512 * 1024, 1} },
7047 				.block_erase = SPI_BLOCK_ERASE_C7,
7048 			}
7049 		},
7050 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP4_SRWD,
7051 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP4_SRWD, /* TODO: 2nd status reg (read with 0x35) */
7052 		.write		= SPI_CHIP_WRITE256,
7053 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
7054 		.voltage	= {1695, 1950},
7055 	},
7056 
7057 	{
7058 		.vendor		= "GigaDevice",
7059 		.name		= "GD25LQ64(B)",
7060 		.bustype	= BUS_SPI,
7061 		.manufacture_id	= GIGADEVICE_ID,
7062 		.model_id	= GIGADEVICE_GD25LQ64,
7063 		.total_size	= 8192,
7064 		.page_size	= 256,
7065 		/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
7066 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_WRSR_EXT2,
7067 		.tested		= TEST_OK_PREWB,
7068 		.probe		= PROBE_SPI_RDID,
7069 		.probe_timing	= TIMING_ZERO,
7070 		.block_erasers	=
7071 		{
7072 			{
7073 				.eraseblocks = { {4 * 1024, 2048} },
7074 				.block_erase = SPI_BLOCK_ERASE_20,
7075 			}, {
7076 				.eraseblocks = { {32 * 1024, 256} },
7077 				.block_erase = SPI_BLOCK_ERASE_52,
7078 			}, {
7079 				.eraseblocks = { {64 * 1024, 128} },
7080 				.block_erase = SPI_BLOCK_ERASE_D8,
7081 			}, {
7082 				.eraseblocks = { {8 * 1024 * 1024, 1} },
7083 				.block_erase = SPI_BLOCK_ERASE_60,
7084 			}, {
7085 				.eraseblocks = { {8 * 1024 * 1024, 1} },
7086 				.block_erase = SPI_BLOCK_ERASE_C7,
7087 			}
7088 		},
7089 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP4_SRWD,
7090 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP4_SRWD, /* TODO: 2nd status reg (read with 0x35) */
7091 		.write		= SPI_CHIP_WRITE256,
7092 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
7093 		.voltage	= {1695, 1950},
7094 		.reg_bits	=
7095 		{
7096 			.srp    = {STATUS1, 7, RW},
7097 			.srl    = {STATUS2, 0, RW},
7098 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
7099 			.tb     = {STATUS1, 5, RW}, /* Called BP3 in datasheet, acts like TB */
7100 			.sec    = {STATUS1, 6, RW}, /* Called BP4 in datasheet, acts like SEC */
7101 			.cmp    = {STATUS2, 6, RW},
7102 		},
7103 		.decode_range	= DECODE_RANGE_SPI25,
7104 	},
7105 
7106 	{
7107 		.vendor		= "GigaDevice",
7108 		.name		= "GD25LQ80",
7109 		.bustype	= BUS_SPI,
7110 		.manufacture_id	= GIGADEVICE_ID,
7111 		.model_id	= GIGADEVICE_GD25LQ80,
7112 		.total_size	= 1024,
7113 		.page_size	= 256,
7114 		/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
7115 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
7116 		.tested		= TEST_UNTESTED,
7117 		.probe		= PROBE_SPI_RDID,
7118 		.probe_timing	= TIMING_ZERO,
7119 		.block_erasers	=
7120 		{
7121 			{
7122 				.eraseblocks = { {4 * 1024, 256} },
7123 				.block_erase = SPI_BLOCK_ERASE_20,
7124 			}, {
7125 				.eraseblocks = { {32 * 1024, 32} },
7126 				.block_erase = SPI_BLOCK_ERASE_52,
7127 			}, {
7128 				.eraseblocks = { {64 * 1024, 16} },
7129 				.block_erase = SPI_BLOCK_ERASE_D8,
7130 			}, {
7131 				.eraseblocks = { {1 * 1024 * 1024, 1} },
7132 				.block_erase = SPI_BLOCK_ERASE_60,
7133 			}, {
7134 				.eraseblocks = { {1 * 1024 * 1024, 1} },
7135 				.block_erase = SPI_BLOCK_ERASE_C7,
7136 			}
7137 		},
7138 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP4_SRWD,
7139 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP4_SRWD, /* TODO: 2nd status reg (read with 0x35) */
7140 		.write		= SPI_CHIP_WRITE256,
7141 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
7142 		.voltage	= {1695, 1950},
7143 	},
7144 
7145 	{
7146 		.vendor         = "GigaDevice",
7147 		.name           = "GD25LB256E/GD25LR256E",
7148 		.bustype        = BUS_SPI,
7149 		.manufacture_id = GIGADEVICE_ID,
7150 		.model_id       = GIGADEVICE_GD25LR256E,
7151 		.total_size     = 32768,
7152 		.page_size      = 256,
7153 		.feature_bits   = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI | FEATURE_4BA,
7154 		.tested         = TEST_OK_PREWB,
7155 		.probe          = PROBE_SPI_RDID,
7156 		.probe_timing   = TIMING_ZERO,
7157 		.block_erasers  =
7158 		{
7159 			{
7160 				.eraseblocks = { {4 * 1024, 8192} },
7161 				.block_erase = SPI_BLOCK_ERASE_21,
7162 			}, {
7163 				.eraseblocks = { {4 * 1024, 8192} },
7164 				.block_erase = SPI_BLOCK_ERASE_20,
7165 			}, {
7166 				.eraseblocks = { {32 * 1024, 1024} },
7167 				.block_erase = SPI_BLOCK_ERASE_5C,
7168 			}, {
7169 				.eraseblocks = { {32 * 1024, 1024} },
7170 				.block_erase = SPI_BLOCK_ERASE_52,
7171 			}, {
7172 				.eraseblocks = { {64 * 1024, 512} },
7173 				.block_erase = SPI_BLOCK_ERASE_DC,
7174 			}, {
7175 				.eraseblocks = { {64 * 1024, 512} },
7176 				.block_erase = SPI_BLOCK_ERASE_D8,
7177 			}, {
7178 				.eraseblocks = { {32 * 1024 * 1024, 1} },
7179 				.block_erase = SPI_BLOCK_ERASE_60,
7180 			}, {
7181 				.eraseblocks = { {32 * 1024 * 1024, 1} },
7182 				.block_erase = SPI_BLOCK_ERASE_C7,
7183 			}
7184 		},
7185 		.printlock      = SPI_PRETTYPRINT_STATUS_REGISTER_BP4_SRWD,
7186 		.unlock         = SPI_DISABLE_BLOCKPROTECT_BP4_SRWD,
7187 		.write          = SPI_CHIP_WRITE256,
7188 		.read           = SPI_CHIP_READ,
7189 		.voltage        = {1650, 2000},
7190 		.reg_bits       =
7191 		{
7192 			.srp    = {STATUS1, 7, RW},
7193 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}, {STATUS1, 5, RW}},
7194 			.tb     = {STATUS1, 6, RW}, /* Called BP4 in datasheet, acts like TB */
7195 		},
7196 		.decode_range   = DECODE_RANGE_SPI25,
7197 
7198 	},
7199 
7200 	{
7201 		.vendor		= "GigaDevice",
7202 		.name		= "GD25LB256F/GD25LR256F",
7203 		.bustype	= BUS_SPI,
7204 		.manufacture_id	= GIGADEVICE_ID,
7205 		.model_id	= GIGADEVICE_GD25LQ255E,
7206 		.total_size	= 32768,
7207 		.page_size	= 256,
7208 		/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
7209 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_WRSR_EXT2 | FEATURE_4BA,
7210 		.tested		= TEST_OK_PREWB,
7211 		.probe		= PROBE_SPI_RDID,
7212 		.probe_timing	= TIMING_ZERO,
7213 		.block_erasers	=
7214 		{
7215 			{
7216 				.eraseblocks = { {4 * 1024, 8192} },
7217 				.block_erase = SPI_BLOCK_ERASE_21,
7218 			}, {
7219 				.eraseblocks = { {4 * 1024, 8192} },
7220 				.block_erase = SPI_BLOCK_ERASE_20,
7221 			}, {
7222 				.eraseblocks = { {32 * 1024, 1024} },
7223 				.block_erase = SPI_BLOCK_ERASE_5C,
7224 			}, {
7225 				.eraseblocks = { {32 * 1024, 1024} },
7226 				.block_erase = SPI_BLOCK_ERASE_52,
7227 			}, {
7228 				.eraseblocks = { {64 * 1024, 512} },
7229 				.block_erase = SPI_BLOCK_ERASE_DC,
7230 			}, {
7231 				.eraseblocks = { {64 * 1024, 512} },
7232 				.block_erase = SPI_BLOCK_ERASE_D8,
7233 			}, {
7234 				.eraseblocks = { {32 * 1024 * 1024, 1} },
7235 				.block_erase = SPI_BLOCK_ERASE_60,
7236 			}, {
7237 				.eraseblocks = { {32 * 1024 * 1024, 1} },
7238 				.block_erase = SPI_BLOCK_ERASE_C7,
7239 			}
7240 		},
7241 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP4_SRWD,
7242 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP4_SRWD, /* TODO: 2nd status reg (read with 0x35) */
7243 		.write		= SPI_CHIP_WRITE256,
7244 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
7245 		.voltage	= {1650, 2000},
7246 		.reg_bits	=
7247 		{
7248 			.srp    = {STATUS1, 7, RW},
7249 			.srl    = {STATUS2, 0, RW},
7250 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}, {STATUS1, 5, RW}},
7251 			.tb     = {STATUS1, 6, RW}, /* Called BP4 in datasheet, acts like TB */
7252 			.cmp    = {STATUS2, 6, RW},
7253 		},
7254 		.decode_range	= DECODE_RANGE_SPI25,
7255 	},
7256 
7257 	{
7258 		.vendor		= "GigaDevice",
7259 		.name		= "GD25LB512MF/GD25LR512MF",
7260 		.bustype	= BUS_SPI,
7261 		.manufacture_id	= GIGADEVICE_ID,
7262 		.model_id	= GIGADEVICE_GD25LB512MF,
7263 		.total_size	= 65536,
7264 		.page_size	= 256,
7265 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_WRSR_EXT2 | FEATURE_4BA,
7266 		.tested		= TEST_OK_PREWB,
7267 		.probe		= PROBE_SPI_RDID,
7268 		.probe_timing	= TIMING_ZERO,
7269 		.block_erasers	=
7270 		{
7271 			{
7272 				.eraseblocks = { {4 * 1024, 16384} },
7273 				.block_erase = SPI_BLOCK_ERASE_21,
7274 			}, {
7275 				.eraseblocks = { {4 * 1024, 16384} },
7276 				.block_erase = SPI_BLOCK_ERASE_20,
7277 			}, {
7278 				.eraseblocks = { {32 * 1024, 2048} },
7279 				.block_erase = SPI_BLOCK_ERASE_5C,
7280 			}, {
7281 				.eraseblocks = { {32 * 1024, 2048} },
7282 				.block_erase = SPI_BLOCK_ERASE_52,
7283 			}, {
7284 				.eraseblocks = { {64 * 1024, 1024} },
7285 				.block_erase = SPI_BLOCK_ERASE_DC,
7286 			}, {
7287 				.eraseblocks = { {64 * 1024, 1024} },
7288 				.block_erase = SPI_BLOCK_ERASE_D8,
7289 			}, {
7290 				.eraseblocks = { {64 * 1024 * 1024, 1} },
7291 				.block_erase = SPI_BLOCK_ERASE_60,
7292 			}, {
7293 				.eraseblocks = { {64 * 1024 * 1024, 1} },
7294 				.block_erase = SPI_BLOCK_ERASE_C7,
7295 			}
7296 		},
7297 		.printlock      = SPI_PRETTYPRINT_STATUS_REGISTER_BP4_SRWD,
7298 		.unlock         = SPI_DISABLE_BLOCKPROTECT_BP4_SRWD,
7299 		.write		= SPI_CHIP_WRITE256,
7300 		.read		= SPI_CHIP_READ,
7301 		.voltage	= {1695, 1950},
7302 		.reg_bits	=
7303 		{
7304 			.srp    = {STATUS1, 7, RW},
7305 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}, {STATUS1, 5, RW}},
7306 			.tb     = {STATUS1, 6, RW},	/* Called BP4 in datasheet, acts like TB */
7307 			.srl    = {STATUS2, 0, RW},
7308 			.cmp    = {STATUS2, 6, RW},
7309 		},
7310 		.decode_range	= DECODE_RANGE_SPI25,
7311 	},
7312 
7313 	{
7314 		.vendor         = "GigaDevice",
7315 		.name           = "GD25LB512ME/GD25LR512ME",
7316 		.bustype        = BUS_SPI,
7317 		.manufacture_id = GIGADEVICE_ID,
7318 		.model_id       = GIGADEVICE_GD25LR512ME,
7319 		.total_size     = 65536,
7320 		.page_size      = 256,
7321 		/* OTP: 4096B total; read 0x48; write 0x42, erase 0x44 */
7322 		.feature_bits   = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI | FEATURE_4BA,
7323 		.tested         = TEST_OK_PREWB,
7324 		.probe          = PROBE_SPI_RDID,
7325 		.probe_timing   = TIMING_ZERO,
7326 		.block_erasers  =
7327 		{
7328 			{
7329 				.eraseblocks = { {4 * 1024, 16384} },
7330 				.block_erase = SPI_BLOCK_ERASE_21,
7331 			}, {
7332 				.eraseblocks = { {4 * 1024, 16384} },
7333 				.block_erase = SPI_BLOCK_ERASE_20,
7334 			}, {
7335 				.eraseblocks = { {32 * 1024, 2048} },
7336 				.block_erase = SPI_BLOCK_ERASE_5C,
7337 			}, {
7338 				.eraseblocks = { {32 * 1024, 2048} },
7339 				.block_erase = SPI_BLOCK_ERASE_52,
7340 			}, {
7341 				.eraseblocks = { {64 * 1024, 1024} },
7342 				.block_erase = SPI_BLOCK_ERASE_DC,
7343 			}, {
7344 				.eraseblocks = { {64 * 1024, 1024} },
7345 				.block_erase = SPI_BLOCK_ERASE_D8,
7346 			}, {
7347 				.eraseblocks = { {64 * 1024 * 1024, 1} },
7348 				.block_erase = SPI_BLOCK_ERASE_60,
7349 			}, {
7350 				.eraseblocks = { {64 * 1024 * 1024, 1} },
7351 				.block_erase = SPI_BLOCK_ERASE_C7,
7352 			}
7353 		},
7354 		.printlock      = SPI_PRETTYPRINT_STATUS_REGISTER_BP4_SRWD,
7355 		.unlock         = SPI_DISABLE_BLOCKPROTECT_BP4_SRWD,
7356 		.write          = SPI_CHIP_WRITE256,
7357 		.read           = SPI_CHIP_READ,
7358 		.voltage        = {1650, 2000},
7359 		.reg_bits       =
7360 		{
7361 			.srp    = {STATUS1, 7, RW},
7362 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}, {STATUS1, 5, RW}},
7363 			.tb     = {STATUS1, 6, RW}, /* Called BP4 in datasheet, acts like TB */
7364 		},
7365 		.decode_range   = DECODE_RANGE_SPI25,
7366 	},
7367 
7368 	{
7369 		.vendor		= "GigaDevice",
7370 		.name		= "GD25Q10",
7371 		.bustype	= BUS_SPI,
7372 		.manufacture_id	= GIGADEVICE_ID,
7373 		.model_id	= GIGADEVICE_GD25Q10,
7374 		.total_size	= 128,
7375 		.page_size	= 256,
7376 		.feature_bits	= FEATURE_WRSR_WREN,
7377 		.tested		= TEST_UNTESTED,
7378 		.probe		= PROBE_SPI_RDID,
7379 		.probe_timing	= TIMING_ZERO,
7380 		.block_erasers	=
7381 		{
7382 			{
7383 				.eraseblocks = { {4 * 1024, 32} },
7384 				.block_erase = SPI_BLOCK_ERASE_20,
7385 			}, {
7386 				.eraseblocks = { {32 * 1024, 4} },
7387 				.block_erase = SPI_BLOCK_ERASE_52,
7388 			}, {
7389 				.eraseblocks = { {64 * 1024, 2} },
7390 				.block_erase = SPI_BLOCK_ERASE_D8,
7391 			}, {
7392 				.eraseblocks = { {128 * 1024, 1} },
7393 				.block_erase = SPI_BLOCK_ERASE_60,
7394 			}, {
7395 				.eraseblocks = { {128 * 1024, 1} },
7396 				.block_erase = SPI_BLOCK_ERASE_C7,
7397 			}
7398 		},
7399 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP4_SRWD,
7400 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP4_SRWD, /* TODO: 2nd status reg (read with 0x35) */
7401 		.write		= SPI_CHIP_WRITE256,
7402 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
7403 		.voltage	= {2700, 3600},
7404 	},
7405 
7406 	{
7407 		.vendor		= "GigaDevice",
7408 		.name		= "GD25Q127C/GD25Q128E",
7409 		.bustype	= BUS_SPI,
7410 		.manufacture_id	= GIGADEVICE_ID,
7411 		.model_id	= GIGADEVICE_GD25Q128,
7412 		.total_size	= 16384,
7413 		.page_size	= 256,
7414 		/* OTP: 3072B total; read 0x48; write 0x42, erase 0x44 */
7415 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_WRSR2,
7416 		.tested		= TEST_OK_PREWB,
7417 		.probe		= PROBE_SPI_RDID,
7418 		.probe_timing	= TIMING_ZERO,
7419 		.block_erasers	=
7420 		{
7421 			{
7422 				.eraseblocks = { {4 * 1024, 4096} },
7423 				.block_erase = SPI_BLOCK_ERASE_20,
7424 			}, {
7425 				.eraseblocks = { {32 * 1024, 512} },
7426 				.block_erase = SPI_BLOCK_ERASE_52,
7427 			}, {
7428 				.eraseblocks = { {64 * 1024, 256} },
7429 				.block_erase = SPI_BLOCK_ERASE_D8,
7430 			}, {
7431 				.eraseblocks = { {16 * 1024 * 1024, 1} },
7432 				.block_erase = SPI_BLOCK_ERASE_60,
7433 			}, {
7434 				.eraseblocks = { {16 * 1024 * 1024, 1} },
7435 				.block_erase = SPI_BLOCK_ERASE_C7,
7436 			}
7437 		},
7438 		/* TODO: 2nd status reg (read 0x35, write 0x31) and 3rd status reg (read 0x15, write 0x11) */
7439 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP4_SRWD,
7440 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP4_SRWD,
7441 		.write		= SPI_CHIP_WRITE256,
7442 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
7443 		.voltage	= {2700, 3600},
7444 		.reg_bits	=
7445 		{
7446 			.srp    = {STATUS1, 7, RW},
7447 			.srl    = {STATUS2, 0, RW},
7448 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
7449 			.tb     = {STATUS1, 5, RW}, /* Called BP3 in datasheet, acts like TB */
7450 			.sec    = {STATUS1, 6, RW}, /* Called BP4 in datasheet, acts like SEC */
7451 			.cmp    = {STATUS2, 6, RW},
7452 		},
7453 		.decode_range	= DECODE_RANGE_SPI25,
7454 	},
7455 
7456 	{
7457 		.vendor		= "GigaDevice",
7458 		.name		= "GD25Q128C",
7459 		.bustype	= BUS_SPI,
7460 		.manufacture_id	= GIGADEVICE_ID,
7461 		.model_id	= GIGADEVICE_GD25Q128,
7462 		.total_size	= 16384,
7463 		.page_size	= 256,
7464 		/* OTP: 1536B total; read 0x48; write 0x42, erase 0x44 */
7465 		/* QPI: enable 0x38, disable 0xFF */
7466 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI | FEATURE_WRSR2,
7467 		.tested		= TEST_OK_PREWB,
7468 		.probe		= PROBE_SPI_RDID,
7469 		.probe_timing	= TIMING_ZERO,
7470 		.block_erasers	=
7471 		{
7472 			{
7473 				.eraseblocks = { {4 * 1024, 4096} },
7474 				.block_erase = SPI_BLOCK_ERASE_20,
7475 			}, {
7476 				.eraseblocks = { {32 * 1024, 512} },
7477 				.block_erase = SPI_BLOCK_ERASE_52,
7478 			}, {
7479 				.eraseblocks = { {64 * 1024, 256} },
7480 				.block_erase = SPI_BLOCK_ERASE_D8,
7481 			}, {
7482 				.eraseblocks = { {16 * 1024 * 1024, 1} },
7483 				.block_erase = SPI_BLOCK_ERASE_60,
7484 			}, {
7485 				.eraseblocks = { {16 * 1024 * 1024, 1} },
7486 				.block_erase = SPI_BLOCK_ERASE_C7,
7487 			}
7488 		},
7489 		/* TODO: 2nd status reg (read 0x35, write 0x31) and 3rd status reg (read 0x15, write 0x11) */
7490 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP4_SRWD,
7491 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP4_SRWD,
7492 		.write		= SPI_CHIP_WRITE256,
7493 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
7494 		.voltage	= {2700, 3600},
7495 		.reg_bits	=
7496 		{
7497 			.srp    = {STATUS1, 7, RW},
7498 			.srl    = {STATUS2, 0, RW},
7499 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
7500 			.tb     = {STATUS1, 5, RW}, /* Called BP3 in datasheet, acts like TB */
7501 			.sec    = {STATUS1, 6, RW}, /* Called BP4 in datasheet, acts like SEC */
7502 			.cmp    = {STATUS2, 6, RW},
7503 		},
7504 		.decode_range	= DECODE_RANGE_SPI25,
7505 	},
7506 
7507 	{
7508 		.vendor		= "GigaDevice",
7509 		.name		= "GD25Q16(B)",
7510 		.bustype	= BUS_SPI,
7511 		.manufacture_id	= GIGADEVICE_ID,
7512 		.model_id	= GIGADEVICE_GD25Q16,
7513 		.total_size	= 2048,
7514 		.page_size	= 256,
7515 		/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 (B version only) */
7516 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
7517 		.tested		= TEST_OK_PREW,
7518 		.probe		= PROBE_SPI_RDID,
7519 		.probe_timing	= TIMING_ZERO,
7520 		.block_erasers	=
7521 		{
7522 			{
7523 				.eraseblocks = { {4 * 1024, 512} },
7524 				.block_erase = SPI_BLOCK_ERASE_20,
7525 			}, {
7526 				.eraseblocks = { {32 * 1024, 64} },
7527 				.block_erase = SPI_BLOCK_ERASE_52,
7528 			}, {
7529 				.eraseblocks = { {64 * 1024, 32} },
7530 				.block_erase = SPI_BLOCK_ERASE_D8,
7531 			}, {
7532 				.eraseblocks = { {2 * 1024 * 1024, 1} },
7533 				.block_erase = SPI_BLOCK_ERASE_60,
7534 			}, {
7535 				.eraseblocks = { {2 * 1024 * 1024, 1} },
7536 				.block_erase = SPI_BLOCK_ERASE_C7,
7537 			}
7538 		},
7539 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP4_SRWD,
7540 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP4_SRWD, /* TODO: 2nd status reg (read with 0x35) */
7541 		.write		= SPI_CHIP_WRITE256,
7542 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
7543 		.voltage	= {2700, 3600},
7544 	},
7545 
7546 	{
7547 		.vendor		= "GigaDevice",
7548 		.name		= "GD25Q20(B)",
7549 		.bustype	= BUS_SPI,
7550 		.manufacture_id	= GIGADEVICE_ID,
7551 		.model_id	= GIGADEVICE_GD25Q20,
7552 		.total_size	= 256,
7553 		.page_size	= 256,
7554 		.feature_bits	= FEATURE_WRSR_WREN,
7555 		.tested		= TEST_OK_PREW,
7556 		.probe		= PROBE_SPI_RDID,
7557 		.probe_timing	= TIMING_ZERO,
7558 		.block_erasers	=
7559 		{
7560 			{
7561 				.eraseblocks = { {4 * 1024, 64} },
7562 				.block_erase = SPI_BLOCK_ERASE_20,
7563 			}, {
7564 				.eraseblocks = { {32 * 1024, 8} },
7565 				.block_erase = SPI_BLOCK_ERASE_52,
7566 			}, {
7567 				.eraseblocks = { {64 * 1024, 4} },
7568 				.block_erase = SPI_BLOCK_ERASE_D8,
7569 			}, {
7570 				.eraseblocks = { {256 * 1024, 1} },
7571 				.block_erase = SPI_BLOCK_ERASE_60,
7572 			}, {
7573 				.eraseblocks = { {256 * 1024, 1} },
7574 				.block_erase = SPI_BLOCK_ERASE_C7,
7575 			}
7576 		},
7577 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP4_SRWD,
7578 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP4_SRWD, /* TODO: 2nd status reg (read with 0x35) */
7579 		.write		= SPI_CHIP_WRITE256,
7580 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
7581 		.voltage	= {2700, 3600},
7582 	},
7583 
7584 	{
7585 		.vendor		= "GigaDevice",
7586 		.name		= "GD25Q256D/GD25Q256E",
7587 		.bustype	= BUS_SPI,
7588 		.manufacture_id	= GIGADEVICE_ID,
7589 		.model_id	= GIGADEVICE_GD25Q256D,
7590 		.total_size	= 32768,
7591 		.page_size	= 256,
7592 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA |
7593 				  FEATURE_WRSR_EXT2 | FEATURE_WRSR2 | FEATURE_WRSR3,
7594 		.tested		= TEST_OK_PREWB,
7595 		.probe		= PROBE_SPI_RDID,
7596 		.probe_timing	= TIMING_ZERO,
7597 		.block_erasers	=
7598 		{
7599 			{
7600 				.eraseblocks = { {4 * 1024, 8192} },
7601 				.block_erase = SPI_BLOCK_ERASE_21,
7602 			}, {
7603 				.eraseblocks = { {4 * 1024, 8192} },
7604 				.block_erase = SPI_BLOCK_ERASE_20,
7605 			}, {
7606 				.eraseblocks = { {32 * 1024, 1024} },
7607 				.block_erase = SPI_BLOCK_ERASE_5C,
7608 			}, {
7609 				.eraseblocks = { {32 * 1024, 1024} },
7610 				.block_erase = SPI_BLOCK_ERASE_52,
7611 			}, {
7612 				.eraseblocks = { {64 * 1024, 512} },
7613 				.block_erase = SPI_BLOCK_ERASE_DC,
7614 			}, {
7615 				.eraseblocks = { {64 * 1024, 512} },
7616 				.block_erase = SPI_BLOCK_ERASE_D8,
7617 			}, {
7618 				.eraseblocks = { {32 * 1024 * 1024, 1} },
7619 				.block_erase = SPI_BLOCK_ERASE_60,
7620 			}, {
7621 				.eraseblocks = { {32 * 1024 * 1024, 1} },
7622 				.block_erase = SPI_BLOCK_ERASE_C7,
7623 			}
7624 		},
7625 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD,
7626 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
7627 		.write		= SPI_CHIP_WRITE256,
7628 		.read		= SPI_CHIP_READ,
7629 		.voltage	= {2700, 3600},
7630 		.reg_bits	=
7631 		{
7632 			.srp    = {STATUS1, 7, RW},
7633 			.srl    = {STATUS2, 6, RW},
7634 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}, {STATUS1, 5, RW}},
7635 			.tb     = {STATUS1, 6, RW},
7636 		},
7637 		.decode_range	= DECODE_RANGE_SPI25,
7638 	},
7639 
7640 	{
7641 		.vendor		= "GigaDevice",
7642 		.name		= "GD25Q32(B)",
7643 		.bustype	= BUS_SPI,
7644 		.manufacture_id	= GIGADEVICE_ID,
7645 		.model_id	= GIGADEVICE_GD25Q32,
7646 		.total_size	= 4096,
7647 		.page_size	= 256,
7648 		/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
7649 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_WRSR2,
7650 		.tested		= TEST_OK_PREWB,
7651 		.probe		= PROBE_SPI_RDID,
7652 		.probe_timing	= TIMING_ZERO,
7653 		.block_erasers	=
7654 		{
7655 			{
7656 				.eraseblocks = { {4 * 1024, 1024} },
7657 				.block_erase = SPI_BLOCK_ERASE_20,
7658 			}, {
7659 				.eraseblocks = { {32 * 1024, 128} },
7660 				.block_erase = SPI_BLOCK_ERASE_52,
7661 			}, {
7662 				.eraseblocks = { {64 * 1024, 64} },
7663 				.block_erase = SPI_BLOCK_ERASE_D8,
7664 			}, {
7665 				.eraseblocks = { {4 * 1024 * 1024, 1} },
7666 				.block_erase = SPI_BLOCK_ERASE_60,
7667 			}, {
7668 				.eraseblocks = { {4 * 1024 * 1024, 1} },
7669 				.block_erase = SPI_BLOCK_ERASE_C7,
7670 			}
7671 		},
7672 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP4_SRWD,
7673 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP4_SRWD, /* TODO: 2nd status reg (read with 0x35) */
7674 		.write		= SPI_CHIP_WRITE256,
7675 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
7676 		.voltage	= {2700, 3600},
7677 		.reg_bits	=
7678 		{
7679 			.srp    = {STATUS1, 7, RW},
7680 			.srl    = {STATUS2, 0, RW},
7681 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
7682 			.tb     = {STATUS1, 5, RW}, /* Called BP3 in datasheet, acts like TB */
7683 			.sec    = {STATUS1, 6, RW}, /* Called BP4 in datasheet, acts like SEC */
7684 			.cmp    = {STATUS2, 6, RW},
7685 		},
7686 		.decode_range	= DECODE_RANGE_SPI25,
7687 	},
7688 
7689 	{
7690 		.vendor		= "GigaDevice",
7691 		.name		= "GD25Q40(B)",
7692 		.bustype	= BUS_SPI,
7693 		.manufacture_id	= GIGADEVICE_ID,
7694 		.model_id	= GIGADEVICE_GD25Q40,
7695 		.total_size	= 512,
7696 		.page_size	= 256,
7697 		.feature_bits	= FEATURE_WRSR_WREN,
7698 		.tested		= TEST_OK_PREW,
7699 		.probe		= PROBE_SPI_RDID,
7700 		.probe_timing	= TIMING_ZERO,
7701 		.block_erasers	=
7702 		{
7703 			{
7704 				.eraseblocks = { {4 * 1024, 128} },
7705 				.block_erase = SPI_BLOCK_ERASE_20,
7706 			}, {
7707 				.eraseblocks = { {32 * 1024, 16} },
7708 				.block_erase = SPI_BLOCK_ERASE_52,
7709 			}, {
7710 				.eraseblocks = { {64 * 1024, 8} },
7711 				.block_erase = SPI_BLOCK_ERASE_D8,
7712 			}, {
7713 				.eraseblocks = { {512 * 1024, 1} },
7714 				.block_erase = SPI_BLOCK_ERASE_60,
7715 			}, {
7716 				.eraseblocks = { {512 * 1024, 1} },
7717 				.block_erase = SPI_BLOCK_ERASE_C7,
7718 			}
7719 		},
7720 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP4_SRWD,
7721 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP4_SRWD, /* TODO: 2nd status reg (read with 0x35) */
7722 		.write		= SPI_CHIP_WRITE256,
7723 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
7724 		.voltage	= {2700, 3600},
7725 	},
7726 
7727 	{
7728 		.vendor		= "GigaDevice",
7729 		.name		= "GD25Q512",
7730 		.bustype	= BUS_SPI,
7731 		.manufacture_id	= GIGADEVICE_ID,
7732 		.model_id	= GIGADEVICE_GD25Q512,
7733 		.total_size	= 64,
7734 		.page_size	= 256,
7735 		.feature_bits	= FEATURE_WRSR_WREN,
7736 		.tested		= TEST_OK_PREW,
7737 		.probe		= PROBE_SPI_RDID,
7738 		.probe_timing	= TIMING_ZERO,
7739 		.block_erasers	=
7740 		{
7741 			{
7742 				.eraseblocks = { {4 * 1024, 16} },
7743 				.block_erase = SPI_BLOCK_ERASE_20,
7744 			}, {
7745 				.eraseblocks = { {32 * 1024, 2} },
7746 				.block_erase = SPI_BLOCK_ERASE_52,
7747 			}, {
7748 				.eraseblocks = { {64 * 1024, 1} },
7749 				.block_erase = SPI_BLOCK_ERASE_60,
7750 			}, {
7751 				.eraseblocks = { {64 * 1024, 1} },
7752 				.block_erase = SPI_BLOCK_ERASE_C7,
7753 			}
7754 		},
7755 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP4_SRWD,
7756 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP4_SRWD, /* TODO: 2nd status reg (read with 0x35) */
7757 		.write		= SPI_CHIP_WRITE256,
7758 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
7759 		.voltage	= {2700, 3600},
7760 	},
7761 
7762 	{
7763 		.vendor		= "GigaDevice",
7764 		.name		= "GD25Q64(B)",
7765 		.bustype	= BUS_SPI,
7766 		.manufacture_id	= GIGADEVICE_ID,
7767 		.model_id	= GIGADEVICE_GD25Q64,
7768 		.total_size	= 8192,
7769 		.page_size	= 256,
7770 		/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
7771 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_WRSR2,
7772 		.tested		= TEST_OK_PREWB,
7773 		.probe		= PROBE_SPI_RDID,
7774 		.probe_timing	= TIMING_ZERO,
7775 		.block_erasers	=
7776 		{
7777 			{
7778 				.eraseblocks = { {4 * 1024, 2048} },
7779 				.block_erase = SPI_BLOCK_ERASE_20,
7780 			}, {
7781 				.eraseblocks = { {32 * 1024, 256} },
7782 				.block_erase = SPI_BLOCK_ERASE_52,
7783 			}, {
7784 				.eraseblocks = { {64 * 1024, 128} },
7785 				.block_erase = SPI_BLOCK_ERASE_D8,
7786 			}, {
7787 				.eraseblocks = { {8 * 1024 * 1024, 1} },
7788 				.block_erase = SPI_BLOCK_ERASE_60,
7789 			}, {
7790 				.eraseblocks = { {8 * 1024 * 1024, 1} },
7791 				.block_erase = SPI_BLOCK_ERASE_C7,
7792 			}
7793 		},
7794 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP4_SRWD,
7795 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP4_SRWD, /* TODO: 2nd status reg (read with 0x35) */
7796 		.write		= SPI_CHIP_WRITE256,
7797 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
7798 		.voltage	= {2700, 3600},
7799 		.reg_bits	=
7800 		{
7801 			.srp    = {STATUS1, 7, RW},
7802 			.srl    = {STATUS2, 0, RW},
7803 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
7804 			.tb     = {STATUS1, 5, RW}, /* Called BP3 in datasheet, acts like TB */
7805 			.sec    = {STATUS1, 6, RW}, /* Called BP4 in datasheet, acts like SEC */
7806 			.cmp    = {STATUS2, 6, RW},
7807 		},
7808 		.decode_range	= DECODE_RANGE_SPI25,
7809 	},
7810 
7811 	{
7812 		.vendor		= "GigaDevice",
7813 		.name		= "GD25Q80(B)",
7814 		.bustype	= BUS_SPI,
7815 		.manufacture_id	= GIGADEVICE_ID,
7816 		.model_id	= GIGADEVICE_GD25Q80,
7817 		.total_size	= 1024,
7818 		.page_size	= 256,
7819 		/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 (B version only) */
7820 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
7821 		.tested		= TEST_OK_PREW,
7822 		.probe		= PROBE_SPI_RDID,
7823 		.probe_timing	= TIMING_ZERO,
7824 		.block_erasers	=
7825 		{
7826 			{
7827 				.eraseblocks = { {4 * 1024, 256} },
7828 				.block_erase = SPI_BLOCK_ERASE_20,
7829 			}, {
7830 				.eraseblocks = { {32 * 1024, 32} },
7831 				.block_erase = SPI_BLOCK_ERASE_52,
7832 			}, {
7833 				.eraseblocks = { {64 * 1024, 16} },
7834 				.block_erase = SPI_BLOCK_ERASE_D8,
7835 			}, {
7836 				.eraseblocks = { {1024 * 1024, 1} },
7837 				.block_erase = SPI_BLOCK_ERASE_60,
7838 			}, {
7839 				.eraseblocks = { {1024 * 1024, 1} },
7840 				.block_erase = SPI_BLOCK_ERASE_C7,
7841 			}
7842 		},
7843 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP4_SRWD,
7844 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP4_SRWD, /* TODO: 2nd status reg (read with 0x35) */
7845 		.write		= SPI_CHIP_WRITE256,
7846 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
7847 		.voltage	= {2700, 3600},
7848 	},
7849 
7850 	{
7851 		.vendor		= "GigaDevice",
7852 		.name		= "GD25T80",
7853 		.bustype	= BUS_SPI,
7854 		.manufacture_id	= GIGADEVICE_ID,
7855 		.model_id	= GIGADEVICE_GD25T80,
7856 		.total_size	= 1024,
7857 		.page_size	= 256,
7858 		/* OTP: 256B total; enter 0x3A */
7859 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
7860 		.tested		= TEST_UNTESTED,
7861 		.probe		= PROBE_SPI_RDID,
7862 		.probe_timing	= TIMING_ZERO,
7863 		.block_erasers	=
7864 		{
7865 			{
7866 				.eraseblocks = { {4 * 1024, 256} },
7867 				.block_erase = SPI_BLOCK_ERASE_20,
7868 			}, {
7869 				.eraseblocks = { {64 * 1024, 16} },
7870 				.block_erase = SPI_BLOCK_ERASE_52,
7871 			}, {
7872 				.eraseblocks = { {64 * 1024, 16} },
7873 				.block_erase = SPI_BLOCK_ERASE_D8,
7874 			}, {
7875 				.eraseblocks = { {1024 * 1024, 1} },
7876 				.block_erase = SPI_BLOCK_ERASE_60,
7877 			}, {
7878 				.eraseblocks = { {1024 * 1024, 1} },
7879 				.block_erase = SPI_BLOCK_ERASE_C7,
7880 			}
7881 		},
7882 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
7883 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
7884 		.write		= SPI_CHIP_WRITE256,
7885 		.read		= SPI_CHIP_READ,
7886 		.voltage	= {2700, 3600},
7887 	},
7888 
7889 	{
7890 		.vendor		= "GigaDevice",
7891 		.name		= "GD25VQ16C",
7892 		.bustype	= BUS_SPI,
7893 		.manufacture_id	= GIGADEVICE_ID,
7894 		.model_id	= GIGADEVICE_GD25VQ16C,
7895 		.total_size	= 2 * 1024,
7896 		.page_size	= 256,
7897 		/* Supports SFDP */
7898 		/* OTP: 1024B total; read 0x48, write 0x42, erase 0x44 */
7899 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
7900 		.tested		= TEST_UNTESTED,
7901 		.probe		= PROBE_SPI_RDID,
7902 		.probe_timing	= TIMING_ZERO,
7903 		.block_erasers	=
7904 		{
7905 			{
7906 				.eraseblocks = { { 4 * 1024, 512} },
7907 				.block_erase = SPI_BLOCK_ERASE_20,
7908 			}, {
7909 				.eraseblocks = { { 32 * 1024, 64} },
7910 				.block_erase = SPI_BLOCK_ERASE_52,
7911 			}, {
7912 				.eraseblocks = { { 64 * 1024, 32} },
7913 				.block_erase = SPI_BLOCK_ERASE_D8,
7914 			}, {
7915 				.eraseblocks = { {2 * 1024 * 1024, 1} },
7916 				.block_erase = SPI_BLOCK_ERASE_60,
7917 			}, {
7918 				.eraseblocks = { {2 * 1024 * 1024, 1} },
7919 				.block_erase = SPI_BLOCK_ERASE_C7,
7920 			}
7921 		},
7922 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP4_SRWD,
7923 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP4_SRWD, /* TODO: 2nd status reg (read with 0x35) */
7924 		.write		= SPI_CHIP_WRITE256,
7925 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
7926 		.voltage	= {2300, 3600},
7927 	},
7928 
7929 	{
7930 		.vendor		= "GigaDevice",
7931 		.name		= "GD25VQ21B",
7932 		.bustype	= BUS_SPI,
7933 		.manufacture_id	= GIGADEVICE_ID,
7934 		.model_id	= GIGADEVICE_GD25VQ21B,
7935 		.total_size	= 256,
7936 		.page_size	= 256,
7937 		/* OTP: 1536B total; read 0x48, write 0x42, erase 0x44 */
7938 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
7939 		.tested		= TEST_UNTESTED,
7940 		.probe		= PROBE_SPI_RDID,
7941 		.probe_timing	= TIMING_ZERO,
7942 		.block_erasers	=
7943 		{
7944 			{
7945 				.eraseblocks = { { 4 * 1024, 64} },
7946 				.block_erase = SPI_BLOCK_ERASE_20,
7947 			}, {
7948 				.eraseblocks = { { 32 * 1024, 8} },
7949 				.block_erase = SPI_BLOCK_ERASE_52,
7950 			}, {
7951 				.eraseblocks = { { 64 * 1024, 4} },
7952 				.block_erase = SPI_BLOCK_ERASE_D8,
7953 			}, {
7954 				.eraseblocks = { {256 * 1024, 1} },
7955 				.block_erase = SPI_BLOCK_ERASE_60,
7956 			}, {
7957 				.eraseblocks = { {256 * 1024, 1} },
7958 				.block_erase = SPI_BLOCK_ERASE_C7,
7959 			}
7960 		},
7961 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP4_SRWD,
7962 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP4_SRWD, /* TODO: 2nd status reg (read with 0x35) */
7963 		.write		= SPI_CHIP_WRITE256,
7964 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
7965 		.voltage	= {2300, 3600},
7966 	},
7967 
7968 	{
7969 		.vendor		= "GigaDevice",
7970 		.name		= "GD25VQ40C",
7971 		.bustype	= BUS_SPI,
7972 		.manufacture_id	= GIGADEVICE_ID,
7973 		.model_id	= GIGADEVICE_GD25VQ41B,
7974 		.total_size	= 512,
7975 		.page_size	= 256,
7976 		/* Supports SFDP */
7977 		/* OTP: 1024B total; read 0x48, write 0x42, erase 0x44 */
7978 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
7979 		.tested		= TEST_UNTESTED,
7980 		.probe		= PROBE_SPI_RDID,
7981 		.probe_timing	= TIMING_ZERO,
7982 		.block_erasers	=
7983 		{
7984 			{
7985 				.eraseblocks = { { 4 * 1024, 128} },
7986 				.block_erase = SPI_BLOCK_ERASE_20,
7987 			}, {
7988 				.eraseblocks = { { 32 * 1024, 16} },
7989 				.block_erase = SPI_BLOCK_ERASE_52,
7990 			}, {
7991 				.eraseblocks = { { 64 * 1024, 8} },
7992 				.block_erase = SPI_BLOCK_ERASE_D8,
7993 			}, {
7994 				.eraseblocks = { {512 * 1024, 1} },
7995 				.block_erase = SPI_BLOCK_ERASE_60,
7996 			}, {
7997 				.eraseblocks = { {512 * 1024, 1} },
7998 				.block_erase = SPI_BLOCK_ERASE_C7,
7999 			}
8000 		},
8001 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP4_SRWD,
8002 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP4_SRWD, /* TODO: 2nd status reg (read with 0x35) */
8003 		.write		= SPI_CHIP_WRITE256,
8004 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
8005 		.voltage	= {2300, 3600},
8006 	},
8007 
8008 	{
8009 		.vendor		= "GigaDevice",
8010 		.name		= "GD25VQ41B",
8011 		.bustype	= BUS_SPI,
8012 		.manufacture_id	= GIGADEVICE_ID,
8013 		.model_id	= GIGADEVICE_GD25VQ41B,
8014 		.total_size	= 512,
8015 		.page_size	= 256,
8016 		/* OTP: 1536B total; read 0x48, write 0x42, erase 0x44 */
8017 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
8018 		.tested		= TEST_OK_PREW,
8019 		.probe		= PROBE_SPI_RDID,
8020 		.probe_timing	= TIMING_ZERO,
8021 		.block_erasers	=
8022 		{
8023 			{
8024 				.eraseblocks = { { 4 * 1024, 128} },
8025 				.block_erase = SPI_BLOCK_ERASE_20,
8026 			}, {
8027 				.eraseblocks = { { 32 * 1024, 16} },
8028 				.block_erase = SPI_BLOCK_ERASE_52,
8029 			}, {
8030 				.eraseblocks = { { 64 * 1024, 8} },
8031 				.block_erase = SPI_BLOCK_ERASE_D8,
8032 			}, {
8033 				.eraseblocks = { {512 * 1024, 1} },
8034 				.block_erase = SPI_BLOCK_ERASE_60,
8035 			}, {
8036 				.eraseblocks = { {512 * 1024, 1} },
8037 				.block_erase = SPI_BLOCK_ERASE_C7,
8038 			}
8039 		},
8040 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP4_SRWD,
8041 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP4_SRWD, /* TODO: 2nd status reg (read with 0x35) */
8042 		.write		= SPI_CHIP_WRITE256,
8043 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
8044 		.voltage	= {2300, 3600},
8045 	},
8046 
8047 	{
8048 		.vendor		= "GigaDevice",
8049 		.name		= "GD25VQ80C",
8050 		.bustype	= BUS_SPI,
8051 		.manufacture_id	= GIGADEVICE_ID,
8052 		.model_id	= GIGADEVICE_GD25VQ80C,
8053 		.total_size	= 1024,
8054 		.page_size	= 256,
8055 		/* Supports SFDP */
8056 		/* OTP: 1024B total; read 0x48, write 0x42, erase 0x44 */
8057 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
8058 		.tested		= TEST_UNTESTED,
8059 		.probe		= PROBE_SPI_RDID,
8060 		.probe_timing	= TIMING_ZERO,
8061 		.block_erasers	=
8062 		{
8063 			{
8064 				.eraseblocks = { { 4 * 1024, 256} },
8065 				.block_erase = SPI_BLOCK_ERASE_20,
8066 			}, {
8067 				.eraseblocks = { { 32 * 1024, 32} },
8068 				.block_erase = SPI_BLOCK_ERASE_52,
8069 			}, {
8070 				.eraseblocks = { { 64 * 1024, 16} },
8071 				.block_erase = SPI_BLOCK_ERASE_D8,
8072 			}, {
8073 				.eraseblocks = { {1024 * 1024, 1} },
8074 				.block_erase = SPI_BLOCK_ERASE_60,
8075 			}, {
8076 				.eraseblocks = { {1024 * 1024, 1} },
8077 				.block_erase = SPI_BLOCK_ERASE_C7,
8078 			}
8079 		},
8080 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP4_SRWD,
8081 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP4_SRWD, /* TODO: 2nd status reg (read with 0x35) */
8082 		.write		= SPI_CHIP_WRITE256,
8083 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
8084 		.voltage	= {2300, 3600},
8085 	},
8086 
8087 {
8088 		.vendor		= "GigaDevice",
8089 		.name		= "GD25F64F",
8090 		.bustype	= BUS_SPI,
8091 		.manufacture_id	= GIGADEVICE_ID,
8092 		.model_id	= GIGADEVICE_GD25F64F,
8093 		.total_size	= 8192,
8094 		.page_size	= 256,
8095 		/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
8096 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_WRSR2 | FEATURE_WRSR3,
8097 		.tested		= TEST_OK_PREWB,
8098 		.probe		= PROBE_SPI_RDID,
8099 		.probe_timing	= TIMING_ZERO,
8100 		.block_erasers	=
8101 		{
8102 			{
8103 				.eraseblocks = { {4 * 1024, 2048} },
8104 				.block_erase = SPI_BLOCK_ERASE_20,
8105 			}, {
8106 				.eraseblocks = { {32 * 1024, 256} },
8107 				.block_erase = SPI_BLOCK_ERASE_52,
8108 			}, {
8109 				.eraseblocks = { {64 * 1024, 128} },
8110 				.block_erase = SPI_BLOCK_ERASE_D8,
8111 			}, {
8112 				.eraseblocks = { {8 * 1024 * 1024, 1} },
8113 				.block_erase = SPI_BLOCK_ERASE_60,
8114 			}, {
8115 				.eraseblocks = { {8 * 1024 * 1024, 1} },
8116 				.block_erase = SPI_BLOCK_ERASE_C7,
8117 			}
8118 		},
8119 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP4_SRWD,
8120 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP4_SRWD, /* TODO: 2nd status reg (read with 0x35) */
8121 		.write		= SPI_CHIP_WRITE256,
8122 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
8123 		.voltage	= {2700, 3600},
8124 		.reg_bits	=
8125 		{
8126 			.srp    = {STATUS1, 7, RW},
8127 			.srl    = {STATUS2, 0, RW},
8128 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
8129 			.tb     = {STATUS1, 5, RW}, /* Called BP3 in datasheet, acts like TB */
8130 			.sec    = {STATUS1, 6, RW}, /* Called BP4 in datasheet, acts like SEC */
8131 			.cmp    = {STATUS3, 4, RW},
8132 		},
8133 		.decode_range	= DECODE_RANGE_SPI25,
8134 	},
8135 
8136 {
8137 		.vendor		= "GigaDevice",
8138 		.name		= "GD25F128F",
8139 		.bustype	= BUS_SPI,
8140 		.manufacture_id	= GIGADEVICE_ID,
8141 		.model_id	= GIGADEVICE_GD25F128F,
8142 		.total_size	= 16384,
8143 		.page_size	= 256,
8144 		/* OTP: 3x2048B; read 0x48; write 0x42, erase 0x44 */
8145 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_WRSR2 | FEATURE_WRSR3,
8146 		.tested		= TEST_OK_PREWB,
8147 		.probe		= PROBE_SPI_RDID,
8148 		.probe_timing	= TIMING_ZERO,
8149 		.block_erasers	=
8150 		{
8151 			{
8152 				.eraseblocks = { {4 * 1024, 4096} },
8153 				.block_erase = SPI_BLOCK_ERASE_20,
8154 			}, {
8155 				.eraseblocks = { {32 * 1024, 512} },
8156 				.block_erase = SPI_BLOCK_ERASE_52,
8157 			}, {
8158 				.eraseblocks = { {64 * 1024, 256} },
8159 				.block_erase = SPI_BLOCK_ERASE_D8,
8160 			}, {
8161 				.eraseblocks = { {16 * 1024 * 1024, 1} },
8162 				.block_erase = SPI_BLOCK_ERASE_60,
8163 			}, {
8164 				.eraseblocks = { {16 * 1024 * 1024, 1} },
8165 				.block_erase = SPI_BLOCK_ERASE_C7,
8166 			}
8167 		},
8168 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP4_SRWD,
8169 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP4_SRWD, /* TODO: 2nd status reg (read with 0x35) */
8170 		.write		= SPI_CHIP_WRITE256,
8171 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
8172 		.voltage	= {2700, 3600},
8173 		.reg_bits	=
8174 		{
8175 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}, {STATUS1, 5, RW}},
8176 			.tb     = {STATUS1, 6, RW},	/* Called BP4 in datasheet, acts like TB */
8177 		},
8178 		.decode_range	= DECODE_RANGE_SPI25,
8179 	},
8180 
8181 	{
8182 		.vendor		= "GigaDevice",
8183 		.name		= "GD25F256F",
8184 		.bustype	= BUS_SPI,
8185 		.manufacture_id	= GIGADEVICE_ID,
8186 		.model_id	= GIGADEVICE_GD25F256F,
8187 		.total_size	= 32768,
8188 		.page_size	= 256,
8189 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI | FEATURE_WRSR2 | FEATURE_WRSR3 | FEATURE_4BA,
8190 		.tested		= TEST_OK_PREWB,
8191 		.probe		= PROBE_SPI_RDID,
8192 		.probe_timing	= TIMING_ZERO,
8193 		.block_erasers	=
8194 		{
8195 			{
8196 				.eraseblocks = { {4 * 1024, 8192} },
8197 				.block_erase = SPI_BLOCK_ERASE_21,
8198 			}, {
8199 				.eraseblocks = { {4 * 1024, 8192} },
8200 				.block_erase = SPI_BLOCK_ERASE_20,
8201 			}, {
8202 				.eraseblocks = { {32 * 1024, 1024} },
8203 				.block_erase = SPI_BLOCK_ERASE_5C,
8204 			}, {
8205 				.eraseblocks = { {32 * 1024, 1024} },
8206 				.block_erase = SPI_BLOCK_ERASE_52,
8207 			}, {
8208 				.eraseblocks = { {64 * 1024, 512} },
8209 				.block_erase = SPI_BLOCK_ERASE_DC,
8210 			}, {
8211 				.eraseblocks = { {64 * 1024, 512} },
8212 				.block_erase = SPI_BLOCK_ERASE_D8,
8213 			}, {
8214 				.eraseblocks = { {32 * 1024 * 1024, 1} },
8215 				.block_erase = SPI_BLOCK_ERASE_60,
8216 			}, {
8217 				.eraseblocks = { {32 * 1024 * 1024, 1} },
8218 				.block_erase = SPI_BLOCK_ERASE_C7,
8219 			}
8220 		},
8221 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP4_SRWD,
8222 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP4_SRWD,
8223 		.write		= SPI_CHIP_WRITE256,
8224 		.read		= SPI_CHIP_READ,
8225 		.voltage	= {2700, 3600},
8226 		.reg_bits	=
8227 		{
8228 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}, {STATUS1, 5, RW}},
8229 			.tb     = {STATUS1, 6, RW},	/* Called BP4 in datasheet, acts like TB */
8230 		},
8231 		.decode_range	= DECODE_RANGE_SPI25,
8232 	},
8233 
8234 	{
8235 		.vendor		= "GigaDevice",
8236 		.name		= "GD25WQ80E",
8237 		.bustype	= BUS_SPI,
8238 		.manufacture_id	= GIGADEVICE_ID,
8239 		.model_id	= GIGADEVICE_GD25WQ80E,
8240 		.total_size	= 1024,
8241 		.page_size	= 256,
8242 		.feature_bits	= FEATURE_WRSR_WREN,
8243 		.tested		= TEST_OK_PREW,
8244 		.probe		= PROBE_SPI_RDID,
8245 		.probe_timing	= TIMING_ZERO,
8246 		.block_erasers	=
8247 		{
8248 			{
8249 				.eraseblocks = { {4 * 1024, 256} },
8250 				.block_erase = SPI_BLOCK_ERASE_20,
8251 			}, {
8252 				.eraseblocks = { {32 * 1024, 32} },
8253 				.block_erase = SPI_BLOCK_ERASE_52,
8254 			}, {
8255 				.eraseblocks = { {64 * 1024, 16} },
8256 				.block_erase = SPI_BLOCK_ERASE_D8,
8257 			}, {
8258 				.eraseblocks = { {1 * 1024 * 1024, 1} },
8259 				.block_erase = SPI_BLOCK_ERASE_60,
8260 			}, {
8261 				.eraseblocks = { {1 * 1024 * 1024, 1} },
8262 				.block_erase = SPI_BLOCK_ERASE_C7,
8263 			}
8264 		},
8265 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP4_SRWD,
8266 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP4_SRWD,
8267 		.write		= SPI_CHIP_WRITE256,
8268 		.read		= SPI_CHIP_READ,
8269 		.voltage	= {1650, 3600},
8270 	},
8271 
8272 	{
8273 		.vendor		= "Hyundai",
8274 		.name		= "HY29F002B",
8275 		.bustype	= BUS_PARALLEL,
8276 		.manufacture_id	= HYUNDAI_ID,
8277 		.model_id	= HYUNDAI_HY29F002B,
8278 		.total_size	= 256,
8279 		.page_size	= 256 * 1024,
8280 		.feature_bits	= FEATURE_EITHER_RESET, /* Some revisions may need FEATURE_ADDR_2AA */
8281 		.tested		= TEST_UNTESTED,
8282 		.probe		= PROBE_JEDEC,
8283 		.probe_timing	= TIMING_ZERO, /* Datasheet has no timing info specified */
8284 		.block_erasers	=
8285 		{
8286 			{
8287 				.eraseblocks = {
8288 					{16 * 1024, 1},
8289 					{8 * 1024, 2},
8290 					{32 * 1024, 1},
8291 					{64 * 1024, 3},
8292 				},
8293 				.block_erase = JEDEC_SECTOR_ERASE,
8294 			}, {
8295 				.eraseblocks = { {256 * 1024, 1} },
8296 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
8297 			},
8298 		},
8299 		.write		= WRITE_JEDEC1,
8300 		.read		= READ_MEMMAPPED,
8301 		.voltage	= {4750, 5250}, /* 4.75-5.25V for type -45, others 4.5-5.5V */
8302 	},
8303 
8304 	{
8305 		.vendor		= "Hyundai",
8306 		.name		= "HY29F002T",
8307 		.bustype	= BUS_PARALLEL,
8308 		.manufacture_id	= HYUNDAI_ID,
8309 		.model_id	= HYUNDAI_HY29F002T,
8310 		.total_size	= 256,
8311 		.page_size	= 256 * 1024,
8312 		.feature_bits	= FEATURE_EITHER_RESET, /* Some revisions may need FEATURE_ADDR_2AA */
8313 		.tested		= TEST_OK_PRE,
8314 		.probe		= PROBE_JEDEC,
8315 		.probe_timing	= TIMING_ZERO, /* Datasheet has no timing info specified */
8316 		.block_erasers	=
8317 		{
8318 			{
8319 				.eraseblocks = {
8320 					{64 * 1024, 3},
8321 					{32 * 1024, 1},
8322 					{8 * 1024, 2},
8323 					{16 * 1024, 1},
8324 				},
8325 				.block_erase = JEDEC_SECTOR_ERASE,
8326 			}, {
8327 				.eraseblocks = { {256 * 1024, 1} },
8328 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
8329 			},
8330 		},
8331 		.write		= WRITE_JEDEC1,
8332 		.read		= READ_MEMMAPPED,
8333 		.voltage	= {4750, 5250}, /* 4.75-5.25V for type -45, others 4.5-5.5V */
8334 	},
8335 
8336 	{
8337 		.vendor		= "Hyundai",
8338 		.name		= "HY29F040A",
8339 		.bustype	= BUS_PARALLEL,
8340 		.manufacture_id	= HYUNDAI_ID,
8341 		.model_id	= HYUNDAI_HY29F040A,
8342 		.total_size	= 512,
8343 		.page_size	= 64 * 1024,
8344 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
8345 		.tested		= TEST_UNTESTED,
8346 		.probe		= PROBE_JEDEC,
8347 		.probe_timing	= TIMING_ZERO,
8348 		.block_erasers	=
8349 		{
8350 			{
8351 				.eraseblocks = { {64 * 1024, 8} },
8352 				.block_erase = JEDEC_SECTOR_ERASE,
8353 			}, {
8354 				.eraseblocks = { {512 * 1024, 1} },
8355 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
8356 			},
8357 		},
8358 		.write		= WRITE_JEDEC1,
8359 		.read		= READ_MEMMAPPED,
8360 		.voltage	= {4500, 5500},
8361 	},
8362 
8363 	{
8364 		.vendor		= "ISSI",
8365 		.name		= "IS25LP016",
8366 		.bustype	= BUS_SPI,
8367 		.manufacture_id = ISSI_ID_SPI,
8368 		.model_id	= ISSI_IS25LP016,
8369 		.total_size	= 2048,
8370 		.page_size	= 256,
8371 		/* OTP: 1024B total; read 0x48; write 0x42 */
8372 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
8373 		.tested		= TEST_OK_PREW,
8374 		.probe		= PROBE_SPI_RDID,
8375 		.probe_timing	= TIMING_ZERO,
8376 		.block_erasers	=
8377 		{
8378 			{
8379 				.eraseblocks = { {4 * 1024, 512} },
8380 				.block_erase = SPI_BLOCK_ERASE_20,
8381 			}, {
8382 				.eraseblocks = { {4 * 1024, 512} },
8383 				.block_erase = SPI_BLOCK_ERASE_D7,
8384 			}, {
8385 				.eraseblocks = { {32 * 1024, 64} },
8386 				.block_erase = SPI_BLOCK_ERASE_52,
8387 			}, {
8388 				.eraseblocks = { {64 * 1024, 32} },
8389 				.block_erase = SPI_BLOCK_ERASE_D8,
8390 			}, {
8391 				.eraseblocks = { {2 * 1024 * 1024, 1} },
8392 				.block_erase = SPI_BLOCK_ERASE_60,
8393 			}, {
8394 				.eraseblocks = { {2 * 1024 * 1024, 1} },
8395 				.block_erase = SPI_BLOCK_ERASE_C7,
8396 			}
8397 		},
8398 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
8399 		.write		= SPI_CHIP_WRITE256,
8400 		.read		= SPI_CHIP_READ,
8401 		.voltage	= {2300, 3600},
8402 	},
8403 
8404 	{
8405 		.vendor		= "ISSI",
8406 		.name		= "IS25LP064",
8407 		.bustype	= BUS_SPI,
8408 		.manufacture_id	= ISSI_ID_SPI,
8409 		.model_id	= ISSI_IS25LP064,
8410 		.total_size	= 8192,
8411 		.page_size	= 256,
8412 		/* OTP: 1024B total; read 0x48; write 0x42 */
8413 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
8414 		.tested		= TEST_OK_PREW,
8415 		.probe		= PROBE_SPI_RDID,
8416 		.probe_timing	= TIMING_ZERO,
8417 		.block_erasers	=
8418 		{
8419 			{
8420 				.eraseblocks = { {4 * 1024, 2048} },
8421 				.block_erase = SPI_BLOCK_ERASE_20,
8422 			}, {
8423 				.eraseblocks = { {4 * 1024, 2048} },
8424 				.block_erase = SPI_BLOCK_ERASE_D7,
8425 			}, {
8426 				.eraseblocks = { {32 * 1024, 256} },
8427 				.block_erase = SPI_BLOCK_ERASE_52,
8428 			}, {
8429 				.eraseblocks = { {64 * 1024, 128} },
8430 				.block_erase = SPI_BLOCK_ERASE_D8,
8431 			}, {
8432 				.eraseblocks = { {8 * 1024 * 1024, 1} },
8433 				.block_erase = SPI_BLOCK_ERASE_60,
8434 			}, {
8435 				.eraseblocks = { {8 * 1024 * 1024, 1} },
8436 				.block_erase = SPI_BLOCK_ERASE_C7,
8437 			}
8438 		},
8439 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
8440 		.write		= SPI_CHIP_WRITE256,
8441 		.read		= SPI_CHIP_READ,
8442 		.voltage	= {2300, 3600},
8443 	},
8444 
8445 	{
8446 		.vendor		= "ISSI",
8447 		.name		= "IS25LP128",
8448 		.bustype	= BUS_SPI,
8449 		.manufacture_id	= ISSI_ID_SPI,
8450 		.model_id	= ISSI_IS25LP128,
8451 		.total_size	= 16384,
8452 		.page_size	= 256,
8453 		/* OTP: 1024B total; read 0x48; write 0x42 */
8454 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
8455 		.tested		= TEST_OK_PREW,
8456 		.probe		= PROBE_SPI_RDID,
8457 		.probe_timing	= TIMING_ZERO,
8458 		.block_erasers	=
8459 		{
8460 			{
8461 				.eraseblocks = { {4 * 1024, 4096} },
8462 				.block_erase = SPI_BLOCK_ERASE_20,
8463 			}, {
8464 				.eraseblocks = { {4 * 1024, 4096} },
8465 				.block_erase = SPI_BLOCK_ERASE_D7,
8466 			}, {
8467 				.eraseblocks = { {32 * 1024, 512} },
8468 				.block_erase = SPI_BLOCK_ERASE_52,
8469 			}, {
8470 				.eraseblocks = { {64 * 1024, 256} },
8471 				.block_erase = SPI_BLOCK_ERASE_D8,
8472 			}, {
8473 				.eraseblocks = { {16 * 1024 * 1024, 1} },
8474 				.block_erase = SPI_BLOCK_ERASE_60,
8475 			}, {
8476 				.eraseblocks = { {16 * 1024 * 1024, 1} },
8477 				.block_erase = SPI_BLOCK_ERASE_C7,
8478 			}
8479 		},
8480 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
8481 		.write		= SPI_CHIP_WRITE256,
8482 		.read		= SPI_CHIP_READ,
8483 		.voltage	= {2300, 3600},
8484 	},
8485 
8486 	{
8487 		.vendor		= "ISSI",
8488 		.name		= "IS25LP256",
8489 		.bustype	= BUS_SPI,
8490 		.manufacture_id	= ISSI_ID_SPI,
8491 		.model_id	= ISSI_IS25LP256,
8492 		.total_size	= 32768,
8493 		.page_size	= 256,
8494 		/* supports SFDP */
8495 		/* OTP: 1024B total; read 0x68; write 0x62, erase 0x64, read ID 0x4B */
8496 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP |
8497 				  FEATURE_4BA | FEATURE_4BA_ENTER_EAR7 | FEATURE_4BA_EAR_1716,
8498 		.tested		= TEST_OK_PREW,
8499 		.probe		= PROBE_SPI_RDID,
8500 		.probe_timing	= TIMING_ZERO,
8501 		.block_erasers	=
8502 		{
8503 			{
8504 				.eraseblocks = { {4 * 1024, 8192} },
8505 				.block_erase = SPI_BLOCK_ERASE_21,
8506 			}, {
8507 				.eraseblocks = { {4 * 1024, 8192} },
8508 				.block_erase = SPI_BLOCK_ERASE_20,
8509 				/* could also use SPI_BLOCK_ERASE_D7 */
8510 			}, {
8511 				.eraseblocks = { {32 * 1024, 1024} },
8512 				.block_erase = SPI_BLOCK_ERASE_5C,
8513 			}, {
8514 				.eraseblocks = { {32 * 1024, 1024} },
8515 				.block_erase = SPI_BLOCK_ERASE_52,
8516 			}, {
8517 				.eraseblocks = { {64 * 1024, 512} },
8518 				.block_erase = SPI_BLOCK_ERASE_DC,
8519 			}, {
8520 				.eraseblocks = { {64 * 1024, 512} },
8521 				.block_erase = SPI_BLOCK_ERASE_D8,
8522 			}, {
8523 				.eraseblocks = { {32 * 1024 * 1024, 1} },
8524 				.block_erase = SPI_BLOCK_ERASE_60,
8525 			}, {
8526 				.eraseblocks = { {32 * 1024 * 1024, 1} },
8527 				.block_erase = SPI_BLOCK_ERASE_C7,
8528 			}
8529 		},
8530 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
8531 		.write		= SPI_CHIP_WRITE256,
8532 		.read		= SPI_CHIP_READ,
8533 		.voltage	= {2300, 3600},
8534 	},
8535 
8536 
8537 	{
8538 		.vendor		= "ISSI",
8539 		.name		= "IS25LQ016",
8540 		.bustype	= BUS_SPI,
8541 		.manufacture_id	= ISSI_ID_SPI,
8542 		.model_id	= ISSI_IS25LQ016,
8543 		.total_size	= 2048,
8544 		.page_size	= 256,
8545 		/* OTP: 256B total; read 0x4b; write 0xb1 */
8546 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
8547 		.tested		= TEST_OK_PREW,
8548 		.probe		= PROBE_SPI_RDID,
8549 		.probe_timing	= TIMING_ZERO,
8550 		.block_erasers	=
8551 		{
8552 			{
8553 				.eraseblocks = { {4 * 1024, 512} },
8554 				.block_erase = SPI_BLOCK_ERASE_20,
8555 			}, {
8556 				.eraseblocks = { {4 * 1024, 512} },
8557 				.block_erase = SPI_BLOCK_ERASE_D7,
8558 			}, {
8559 				.eraseblocks = { {64 * 1024, 32} },
8560 				.block_erase = SPI_BLOCK_ERASE_D8,
8561 			}, {
8562 				.eraseblocks = { {2 * 1024 * 1024, 1} },
8563 				.block_erase = SPI_BLOCK_ERASE_60,
8564 			}, {
8565 				.eraseblocks = { {2 * 1024 * 1024, 1} },
8566 				.block_erase = SPI_BLOCK_ERASE_C7,
8567 			}
8568 		},
8569 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD,
8570 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
8571 		.write		= SPI_CHIP_WRITE256,
8572 		.read		= SPI_CHIP_READ,
8573 		.voltage	= {2300, 3600},
8574 	},
8575 
8576 	{
8577 		.vendor		= "ISSI",
8578 		.name		= "IS25WP016",
8579 		.bustype	= BUS_SPI,
8580 		.manufacture_id	= ISSI_ID_SPI,
8581 		.model_id	= ISSI_IS25WP016,
8582 		.total_size	= 2048,
8583 		.page_size	= 256,
8584 		/* OTP: 1024B total; read 0x48; write 0x42 */
8585 		/* QPI enable 0x35, disable 0xF5 */
8586 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
8587 		.tested		= TEST_OK_PREW,
8588 		.probe		= PROBE_SPI_RDID,
8589 		.probe_timing	= TIMING_ZERO,
8590 		.block_erasers	=
8591 		{
8592 			{
8593 				.eraseblocks = { {4 * 1024, 512} },
8594 				.block_erase = SPI_BLOCK_ERASE_20,
8595 			}, {
8596 				.eraseblocks = { {4 * 1024, 512} },
8597 				.block_erase = SPI_BLOCK_ERASE_D7,
8598 			}, {
8599 				.eraseblocks = { {32 * 1024, 64} },
8600 				.block_erase = SPI_BLOCK_ERASE_52,
8601 			}, {
8602 				.eraseblocks = { {64 * 1024, 32} },
8603 				.block_erase = SPI_BLOCK_ERASE_D8,
8604 			}, {
8605 				.eraseblocks = { {2 * 1024 * 1024, 1} },
8606 				.block_erase = SPI_BLOCK_ERASE_60,
8607 			}, {
8608 				.eraseblocks = { {2 * 1024 * 1024, 1} },
8609 				.block_erase = SPI_BLOCK_ERASE_C7,
8610 			}
8611 		},
8612 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
8613 		.write		= SPI_CHIP_WRITE256,
8614 		.read		= SPI_CHIP_READ,
8615 		.voltage	= {1650, 1950},
8616 	},
8617 
8618 	{
8619 		.vendor		= "ISSI",
8620 		.name		= "IS25WP020",
8621 		.bustype	= BUS_SPI,
8622 		.manufacture_id	= ISSI_ID_SPI,
8623 		.model_id	= ISSI_IS25WP020,
8624 		.total_size	= 256,
8625 		.page_size	= 256,
8626 		/* OTP: 1024B total; read 0x48; write 0x42 */
8627 		/* QPI enable 0x35, disable 0xF5 */
8628 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
8629 		.tested		= TEST_UNTESTED,
8630 		.probe		= PROBE_SPI_RDID,
8631 		.probe_timing	= TIMING_ZERO,
8632 		.block_erasers	=
8633 		{
8634 			{
8635 				.eraseblocks = { {4 * 1024, 64} },
8636 				.block_erase = SPI_BLOCK_ERASE_20,
8637 			}, {
8638 				.eraseblocks = { {4 * 1024, 64} },
8639 				.block_erase = SPI_BLOCK_ERASE_D7,
8640 			}, {
8641 				.eraseblocks = { {32 * 1024, 8} },
8642 				.block_erase = SPI_BLOCK_ERASE_52,
8643 			}, {
8644 				.eraseblocks = { {64 * 1024, 4} },
8645 				.block_erase = SPI_BLOCK_ERASE_D8,
8646 			}, {
8647 				.eraseblocks = { {256 * 1024, 1} },
8648 				.block_erase = SPI_BLOCK_ERASE_60,
8649 			}, {
8650 				.eraseblocks = { {256 * 1024, 1} },
8651 				.block_erase = SPI_BLOCK_ERASE_C7,
8652 			}
8653 		},
8654 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
8655 		.write		= SPI_CHIP_WRITE256,
8656 		.read		= SPI_CHIP_READ,
8657 		.voltage	= {1650, 1950},
8658 	},
8659 
8660 	{
8661 		.vendor		= "ISSI",
8662 		.name		= "IS25WP032",
8663 		.bustype	= BUS_SPI,
8664 		.manufacture_id	= ISSI_ID_SPI,
8665 		.model_id	= ISSI_IS25WP032,
8666 		.total_size	= 4096,
8667 		.page_size	= 256,
8668 		/* OTP: 1024B total; read 0x48; write 0x42 */
8669 		/* QPI enable 0x35, disable 0xF5 */
8670 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
8671 		.tested		= TEST_UNTESTED,
8672 		.probe		= PROBE_SPI_RDID,
8673 		.probe_timing	= TIMING_ZERO,
8674 		.block_erasers	=
8675 		{
8676 			{
8677 				.eraseblocks = { {4 * 1024, 1024} },
8678 				.block_erase = SPI_BLOCK_ERASE_20,
8679 			}, {
8680 				.eraseblocks = { {4 * 1024, 1024} },
8681 				.block_erase = SPI_BLOCK_ERASE_D7,
8682 			}, {
8683 				.eraseblocks = { {32 * 1024, 128} },
8684 				.block_erase = SPI_BLOCK_ERASE_52,
8685 			}, {
8686 				.eraseblocks = { {64 * 1024, 64} },
8687 				.block_erase = SPI_BLOCK_ERASE_D8,
8688 			}, {
8689 				.eraseblocks = { {4 * 1024 * 1024, 1} },
8690 				.block_erase = SPI_BLOCK_ERASE_60,
8691 			}, {
8692 				.eraseblocks = { {4 * 1024 * 1024, 1} },
8693 				.block_erase = SPI_BLOCK_ERASE_C7,
8694 			}
8695 		},
8696 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
8697 		.write		= SPI_CHIP_WRITE256,
8698 		.read		= SPI_CHIP_READ,
8699 		.voltage	= {1650, 1950},
8700 	},
8701 
8702 	{
8703 		.vendor		= "ISSI",
8704 		.name		= "IS25WP040",
8705 		.bustype	= BUS_SPI,
8706 		.manufacture_id	= ISSI_ID_SPI,
8707 		.model_id	= ISSI_IS25WP040,
8708 		.total_size	= 512,
8709 		.page_size	= 256,
8710 		/* OTP: 1024B total; read 0x48; write 0x42 */
8711 		/* QPI enable 0x35, disable 0xF5 */
8712 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
8713 		.tested		= TEST_UNTESTED,
8714 		.probe		= PROBE_SPI_RDID,
8715 		.probe_timing	= TIMING_ZERO,
8716 		.block_erasers	=
8717 		{
8718 			{
8719 				.eraseblocks = { {4 * 1024, 128} },
8720 				.block_erase = SPI_BLOCK_ERASE_20,
8721 			}, {
8722 				.eraseblocks = { {4 * 1024, 128} },
8723 				.block_erase = SPI_BLOCK_ERASE_D7,
8724 			}, {
8725 				.eraseblocks = { {32 * 1024, 16} },
8726 				.block_erase = SPI_BLOCK_ERASE_52,
8727 			}, {
8728 				.eraseblocks = { {64 * 1024, 8} },
8729 				.block_erase = SPI_BLOCK_ERASE_D8,
8730 			}, {
8731 				.eraseblocks = { {512 * 1024, 1} },
8732 				.block_erase = SPI_BLOCK_ERASE_60,
8733 			}, {
8734 				.eraseblocks = { {512 * 1024, 1} },
8735 				.block_erase = SPI_BLOCK_ERASE_C7,
8736 			}
8737 		},
8738 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
8739 		.write		= SPI_CHIP_WRITE256,
8740 		.read		= SPI_CHIP_READ,
8741 		.voltage	= {1650, 1950},
8742 	},
8743 
8744 	{
8745 		.vendor		= "ISSI",
8746 		.name		= "IS25WP064",
8747 		.bustype	= BUS_SPI,
8748 		.manufacture_id	= ISSI_ID_SPI,
8749 		.model_id	= ISSI_IS25WP064,
8750 		.total_size	= 8192,
8751 		.page_size	= 256,
8752 		/* OTP: 1024B total; read 0x48; write 0x42 */
8753 		/* QPI enable 0x35, disable 0xF5 */
8754 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
8755 		.tested		= TEST_OK_PREW,
8756 		.probe		= PROBE_SPI_RDID,
8757 		.probe_timing	= TIMING_ZERO,
8758 		.block_erasers	=
8759 		{
8760 			{
8761 				.eraseblocks = { {4 * 1024, 2048} },
8762 				.block_erase = SPI_BLOCK_ERASE_20,
8763 			}, {
8764 				.eraseblocks = { {4 * 1024, 2048} },
8765 				.block_erase = SPI_BLOCK_ERASE_D7,
8766 			}, {
8767 				.eraseblocks = { {32 * 1024, 256} },
8768 				.block_erase = SPI_BLOCK_ERASE_52,
8769 			}, {
8770 				.eraseblocks = { {64 * 1024, 128} },
8771 				.block_erase = SPI_BLOCK_ERASE_D8,
8772 			}, {
8773 				.eraseblocks = { {8 * 1024 * 1024, 1} },
8774 				.block_erase = SPI_BLOCK_ERASE_60,
8775 			}, {
8776 				.eraseblocks = { {8 * 1024 * 1024, 1} },
8777 				.block_erase = SPI_BLOCK_ERASE_C7,
8778 			}
8779 		},
8780 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
8781 		.write		= SPI_CHIP_WRITE256,
8782 		.read		= SPI_CHIP_READ,
8783 		.voltage	= {1650, 1950},
8784 	},
8785 
8786 	{
8787 		.vendor		= "ISSI",
8788 		.name		= "IS25WP080",
8789 		.bustype	= BUS_SPI,
8790 		.manufacture_id	= ISSI_ID_SPI,
8791 		.model_id	= ISSI_IS25WP080,
8792 		.total_size	= 1024,
8793 		.page_size	= 256,
8794 		/* OTP: 1024B total; read 0x48; write 0x42 */
8795 		/* QPI enable 0x35, disable 0xF5 */
8796 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
8797 		.tested		= TEST_OK_PREW,
8798 		.probe		= PROBE_SPI_RDID,
8799 		.probe_timing	= TIMING_ZERO,
8800 		.block_erasers	=
8801 		{
8802 			{
8803 				.eraseblocks = { {4 * 1024, 256} },
8804 				.block_erase = SPI_BLOCK_ERASE_20,
8805 			}, {
8806 				.eraseblocks = { {4 * 1024, 256} },
8807 				.block_erase = SPI_BLOCK_ERASE_D7,
8808 			}, {
8809 				.eraseblocks = { {32 * 1024, 32} },
8810 				.block_erase = SPI_BLOCK_ERASE_52,
8811 			}, {
8812 				.eraseblocks = { {64 * 1024, 16} },
8813 				.block_erase = SPI_BLOCK_ERASE_D8,
8814 			}, {
8815 				.eraseblocks = { {1024 * 1024, 1} },
8816 				.block_erase = SPI_BLOCK_ERASE_60,
8817 			}, {
8818 				.eraseblocks = { {1024 * 1024, 1} },
8819 				.block_erase = SPI_BLOCK_ERASE_C7,
8820 			}
8821 		},
8822 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
8823 		.write		= SPI_CHIP_WRITE256,
8824 		.read		= SPI_CHIP_READ,
8825 		.voltage	= {1650, 1950},
8826 	},
8827 
8828 	{
8829 		.vendor		= "ISSI",
8830 		.name		= "IS25WP128",
8831 		.bustype	= BUS_SPI,
8832 		.manufacture_id	= ISSI_ID_SPI,
8833 		.model_id	= ISSI_IS25WP128,
8834 		.total_size	= 16384,
8835 		.page_size	= 256,
8836 		/* OTP: 1024B total; read 0x48; write 0x42 */
8837 		/* QPI enable 0x35, disable 0xF5 */
8838 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
8839 		.tested		= TEST_OK_PREW,
8840 		.probe		= PROBE_SPI_RDID,
8841 		.probe_timing	= TIMING_ZERO,
8842 		.block_erasers	=
8843 		{
8844 			{
8845 				.eraseblocks = { {4 * 1024, 4096} },
8846 				.block_erase = SPI_BLOCK_ERASE_20,
8847 			}, {
8848 				.eraseblocks = { {4 * 1024, 4096} },
8849 				.block_erase = SPI_BLOCK_ERASE_D7,
8850 			}, {
8851 				.eraseblocks = { {32 * 1024, 512} },
8852 				.block_erase = SPI_BLOCK_ERASE_52,
8853 			}, {
8854 				.eraseblocks = { {64 * 1024, 256} },
8855 				.block_erase = SPI_BLOCK_ERASE_D8,
8856 			}, {
8857 				.eraseblocks = { {16 * 1024 * 1024, 1} },
8858 				.block_erase = SPI_BLOCK_ERASE_60,
8859 			}, {
8860 				.eraseblocks = { {16 * 1024 * 1024, 1} },
8861 				.block_erase = SPI_BLOCK_ERASE_C7,
8862 			}
8863 		},
8864 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
8865 		.write		= SPI_CHIP_WRITE256,
8866 		.read		= SPI_CHIP_READ,
8867 		.voltage	= {1650, 1950},
8868 	},
8869 
8870 	{
8871 		.vendor		= "ISSI",
8872 		.name		= "IS25WP256",
8873 		.bustype	= BUS_SPI,
8874 		.manufacture_id	= ISSI_ID_SPI,
8875 		.model_id	= ISSI_IS25WP256,
8876 		.total_size	= 32768,
8877 		.page_size	= 256,
8878 		/* supports SFDP */
8879 		/* OTP: 1024B total; read 0x68; write 0x62, erase 0x64, read ID 0x4B */
8880 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP |
8881 				  FEATURE_4BA | FEATURE_4BA_ENTER_EAR7 | FEATURE_4BA_EAR_1716,
8882 		.tested		= TEST_OK_PREW,
8883 		.probe		= PROBE_SPI_RDID,
8884 		.probe_timing	= TIMING_ZERO,
8885 		.block_erasers	=
8886 		{
8887 			{
8888 				.eraseblocks = { {4 * 1024, 8192} },
8889 				.block_erase = SPI_BLOCK_ERASE_21,
8890 			}, {
8891 				.eraseblocks = { {4 * 1024, 8192} },
8892 				.block_erase = SPI_BLOCK_ERASE_20,
8893 				/* could also use SPI_BLOCK_ERASE_D7 */
8894 			}, {
8895 				.eraseblocks = { {32 * 1024, 1024} },
8896 				.block_erase = SPI_BLOCK_ERASE_5C,
8897 			}, {
8898 				.eraseblocks = { {32 * 1024, 1024} },
8899 				.block_erase = SPI_BLOCK_ERASE_52,
8900 			}, {
8901 				.eraseblocks = { {64 * 1024, 512} },
8902 				.block_erase = SPI_BLOCK_ERASE_DC,
8903 			}, {
8904 				.eraseblocks = { {64 * 1024, 512} },
8905 				.block_erase = SPI_BLOCK_ERASE_D8,
8906 			}, {
8907 				.eraseblocks = { {32 * 1024 * 1024, 1} },
8908 				.block_erase = SPI_BLOCK_ERASE_60,
8909 			}, {
8910 				.eraseblocks = { {32 * 1024 * 1024, 1} },
8911 				.block_erase = SPI_BLOCK_ERASE_C7,
8912 			}
8913 		},
8914 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
8915 		.write		= SPI_CHIP_WRITE256,
8916 		.read		= SPI_CHIP_READ,
8917 		.voltage	= {1650, 1950},
8918 	},
8919 
8920 	{
8921 		.vendor		= "ISSI",
8922 		.name		= "IS25WQ040",
8923 		.bustype	= BUS_SPI,
8924 		.manufacture_id	= ISSI_ID_SPI,
8925 		.model_id	= ISSI_IS25WQ040,
8926 		.total_size	= 512,
8927 		.page_size	= 256,
8928 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
8929 		.tested		= TEST_OK_PREW,
8930 		.probe		= PROBE_SPI_RDID,
8931 		.probe_timing	= TIMING_ZERO,
8932 		.block_erasers	=
8933 		{
8934 			{
8935 				.eraseblocks = { {4 * 1024, 128} },
8936 				.block_erase = SPI_BLOCK_ERASE_20,
8937 			}, {
8938 				.eraseblocks = { {4 * 1024, 128} },
8939 				.block_erase = SPI_BLOCK_ERASE_D7,
8940 			}, {
8941 				.eraseblocks = { {32 * 1024, 16} },
8942 				.block_erase = SPI_BLOCK_ERASE_52,
8943 			}, {
8944 				.eraseblocks = { {64 * 1024, 8} },
8945 				.block_erase = SPI_BLOCK_ERASE_D8,
8946 			}, {
8947 				.eraseblocks = { {512 * 1024, 1} },
8948 				.block_erase = SPI_BLOCK_ERASE_60,
8949 			}, {
8950 				.eraseblocks = { {512 * 1024, 1} },
8951 				.block_erase = SPI_BLOCK_ERASE_C7,
8952 			}
8953 		},
8954 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
8955 		.write		= SPI_CHIP_WRITE256,
8956 		.read		= SPI_CHIP_READ,
8957 		.voltage	= {1650, 1950},
8958 	},
8959 
8960 	{
8961 		.vendor		= "ISSI",
8962 		.name		= "IS29GL064B",
8963 		.bustype	= BUS_PARALLEL,
8964 		.manufacture_id	= ISSI_ID,
8965 		.model_id	= ISSI_PMC_IS29GL064B,
8966 		.total_size	= 8192,
8967 		.page_size	= 128 * 1024, /* actual page size is 16 */
8968 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
8969 		.tested		= TEST_UNTESTED,
8970 		.probe		= PROBE_JEDEC_29GL,
8971 		.probe_timing	= TIMING_ZERO,
8972 		.block_erasers	=
8973 		{
8974 			{
8975 				.eraseblocks = {
8976 					{8 * 1024, 8},
8977 					{64 * 1024, 127},
8978 				},
8979 				.block_erase = JEDEC_SECTOR_ERASE,
8980 			}, {
8981 				.eraseblocks = { {8 * 1024 * 1024, 1} },
8982 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
8983 			},
8984 		},
8985 		.write		= WRITE_JEDEC1,
8986 		.read		= READ_MEMMAPPED,
8987 		.voltage	= {2700, 3600},
8988 	},
8989 
8990 	{
8991 		.vendor		= "ISSI",
8992 		.name		= "IS29GL064H/L",
8993 		.bustype	= BUS_PARALLEL,
8994 		.manufacture_id	= ISSI_ID,
8995 		.model_id	= ISSI_PMC_IS29GL064HL,
8996 		.total_size	= 8192,
8997 		.page_size	= 128 * 1024, /* actual page size is 16 */
8998 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
8999 		.tested		= TEST_UNTESTED,
9000 		.probe		= PROBE_JEDEC_29GL,
9001 		.probe_timing	= TIMING_ZERO,
9002 		.block_erasers	=
9003 		{
9004 			{
9005 				.eraseblocks = { {64 * 1024, 128} },
9006 				.block_erase = JEDEC_SECTOR_ERASE,
9007 			}, {
9008 				.eraseblocks = { {8 * 1024 * 1024, 1} },
9009 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
9010 			},
9011 		},
9012 		.write		= WRITE_JEDEC1,
9013 		.read		= READ_MEMMAPPED,
9014 		.voltage	= {2700, 3600},
9015 	},
9016 
9017 	{
9018 		.vendor		= "ISSI",
9019 		.name		= "IS29GL064T",
9020 		.bustype	= BUS_PARALLEL,
9021 		.manufacture_id	= ISSI_ID,
9022 		.model_id	= ISSI_PMC_IS29GL064T,
9023 		.total_size	= 8192,
9024 		.page_size	= 128 * 1024, /* actual page size is 16 */
9025 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
9026 		.tested		= TEST_UNTESTED,
9027 		.probe		= PROBE_JEDEC_29GL,
9028 		.probe_timing	= TIMING_ZERO,
9029 		.block_erasers	=
9030 		{
9031 			{
9032 				.eraseblocks = {
9033 					{64 * 1024, 127},
9034 					{8 * 1024, 8},
9035 				},
9036 				.block_erase = JEDEC_SECTOR_ERASE,
9037 			}, {
9038 				.eraseblocks = { {8 * 1024 * 1024, 1} },
9039 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
9040 			},
9041 		},
9042 		.write		= WRITE_JEDEC1,
9043 		.read		= READ_MEMMAPPED,
9044 		.voltage	= {2700, 3600},
9045 	},
9046 
9047 	{
9048 		.vendor		= "ISSI",
9049 		.name		= "IS29GL128H/L",
9050 		.bustype	= BUS_PARALLEL,
9051 		.manufacture_id	= ISSI_ID,
9052 		.model_id	= ISSI_PMC_IS29GL128HL,
9053 		.total_size	= 16384,
9054 		.page_size	= 128 * 1024, /* actual page size is 16 */
9055 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
9056 		.tested		= TEST_UNTESTED,
9057 		.probe		= PROBE_JEDEC_29GL,
9058 		.probe_timing	= TIMING_ZERO,
9059 		.block_erasers	=
9060 		{
9061 			{
9062 				.eraseblocks = { {128 * 1024, 128} },
9063 				.block_erase = JEDEC_SECTOR_ERASE,
9064 			}, {
9065 				.eraseblocks = { {16 * 1024 * 1024, 1} },
9066 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
9067 			},
9068 		},
9069 		.write		= WRITE_JEDEC1,
9070 		.read		= READ_MEMMAPPED,
9071 		.voltage	= {2700, 3600},
9072 	},
9073 
9074 	{
9075 		.vendor		= "Intel",
9076 		.name		= "25F160S33B8",
9077 		.bustype	= BUS_SPI,
9078 		.manufacture_id	= INTEL_ID,
9079 		.model_id	= INTEL_25F160S33B8,
9080 		.total_size	= 2048,
9081 		.page_size	= 256,
9082 		/* OTP: 506B total (2x 8B, 30x 16B, 1x 10B); read 0x4B; write 0x42 */
9083 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
9084 		.tested		= TEST_UNTESTED,
9085 		.probe		= PROBE_SPI_RDID,
9086 		.probe_timing	= TIMING_ZERO,
9087 		.block_erasers	=
9088 		{
9089 			{
9090 				/* This chip supports erasing of the 8 so-called "parameter blocks" with
9091 				 * opcode 0x40. Trying to access an address outside these 8 8kB blocks does
9092 				 * have no effect on the memory contents, but sets a flag in the SR.
9093 				.eraseblocks = {
9094 					{8 * 1024, 8},
9095 					{64 * 1024, 31} // inaccessible
9096 				},
9097 				.block_erase = SPI_BLOCK_ERASE_40,
9098 			}, { */
9099 				.eraseblocks = { {64 * 1024, 32} },
9100 				.block_erase = SPI_BLOCK_ERASE_D8,
9101 			}, {
9102 				.eraseblocks = { {2 * 1024 * 1024, 1} },
9103 				.block_erase = SPI_BLOCK_ERASE_C7,
9104 			}
9105 		},
9106 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_EP_SRWD,
9107 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_EP_SRWD,
9108 		.write		= SPI_CHIP_WRITE256,
9109 		.read		= SPI_CHIP_READ,	/* also fast read 0x0B */
9110 		.voltage	= {2700, 3600},
9111 	},
9112 
9113 	{
9114 		.vendor		= "Intel",
9115 		.name		= "25F160S33T8",
9116 		.bustype	= BUS_SPI,
9117 		.manufacture_id	= INTEL_ID,
9118 		.model_id	= INTEL_25F160S33T8,
9119 		.total_size	= 2048,
9120 		.page_size	= 256,
9121 		/* OTP: 506B total (2x 8B, 30x 16B, 1x 10B); read 0x4B; write 0x42 */
9122 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
9123 		.tested		= TEST_UNTESTED,
9124 		.probe		= PROBE_SPI_RDID,
9125 		.probe_timing	= TIMING_ZERO,
9126 		.block_erasers	=
9127 		{
9128 			{
9129 				/* This chip supports erasing of the 8 so-called "parameter blocks" with
9130 				 * opcode 0x40. Trying to access an address outside these 8 8kB blocks does
9131 				 * have no effect on the memory contents, but sets a flag in the SR.
9132 				.eraseblocks = {
9133 					{64 * 1024, 31}, // inaccessible
9134 					{8 * 1024, 8}
9135 				},
9136 				.block_erase = SPI_BLOCK_ERASE_40,
9137 			}, { */
9138 				.eraseblocks = { {64 * 1024, 32} },
9139 				.block_erase = SPI_BLOCK_ERASE_D8,
9140 			}, {
9141 				.eraseblocks = { {2 * 1024 * 1024, 1} },
9142 				.block_erase = SPI_BLOCK_ERASE_C7,
9143 			}
9144 		},
9145 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_EP_SRWD,
9146 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_EP_SRWD,
9147 		.write		= SPI_CHIP_WRITE256,
9148 		.read		= SPI_CHIP_READ,	/* also fast read 0x0B */
9149 		.voltage	= {2700, 3600},
9150 	},
9151 
9152 	{
9153 		.vendor		= "Intel",
9154 		.name		= "25F320S33B8",
9155 		.bustype	= BUS_SPI,
9156 		.manufacture_id	= INTEL_ID,
9157 		.model_id	= INTEL_25F320S33B8,
9158 		.total_size	= 4096,
9159 		.page_size	= 256,
9160 		/* OTP: 506B total (2x 8B, 30x 16B, 1x 10B); read 0x4B; write 0x42 */
9161 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
9162 		.tested		= TEST_UNTESTED,
9163 		.probe		= PROBE_SPI_RDID,
9164 		.probe_timing	= TIMING_ZERO,
9165 		.block_erasers	=
9166 		{
9167 			{
9168 				/* This chip supports erasing of the 8 so-called "parameter blocks" with
9169 				 * opcode 0x40. Trying to access an address outside these 8 8kB blocks does
9170 				 * have no effect on the memory contents, but sets a flag in the SR.
9171 				.eraseblocks = {
9172 					{8 * 1024, 8},
9173 					{64 * 1024, 63} // inaccessible
9174 				},
9175 				.block_erase = SPI_BLOCK_ERASE_40,
9176 			}, { */
9177 				.eraseblocks = { {64 * 1024, 64} },
9178 				.block_erase = SPI_BLOCK_ERASE_D8,
9179 			}, {
9180 				.eraseblocks = { {4 * 1024 * 1024, 1} },
9181 				.block_erase = SPI_BLOCK_ERASE_C7,
9182 			}
9183 		},
9184 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_EP_SRWD,
9185 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_EP_SRWD,
9186 		.write		= SPI_CHIP_WRITE256,
9187 		.read		= SPI_CHIP_READ,	/* also fast read 0x0B */
9188 		.voltage	= {2700, 3600},
9189 	},
9190 
9191 	{
9192 		.vendor		= "Intel",
9193 		.name		= "25F320S33T8",
9194 		.bustype	= BUS_SPI,
9195 		.manufacture_id	= INTEL_ID,
9196 		.model_id	= INTEL_25F320S33T8,
9197 		.total_size	= 4096,
9198 		.page_size	= 256,
9199 		/* OTP: 506B total (2x 8B, 30x 16B, 1x 10B); read 0x4B; write 0x42 */
9200 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
9201 		.tested		= TEST_UNTESTED,
9202 		.probe		= PROBE_SPI_RDID,
9203 		.probe_timing	= TIMING_ZERO,
9204 		.block_erasers	=
9205 		{
9206 			{
9207 				/* This chip supports erasing of the 8 so-called "parameter blocks" with
9208 				 * opcode 0x40. Trying to access an address outside these 8 8kB blocks does
9209 				 * have no effect on the memory contents, but sets a flag in the SR.
9210 				.eraseblocks = {
9211 					{64 * 1024, 63}, // inaccessible
9212 					{8 * 1024, 8}
9213 				},
9214 				.block_erase = SPI_BLOCK_ERASE_40,
9215 			}, { */
9216 				.eraseblocks = { {64 * 1024, 64} },
9217 				.block_erase = SPI_BLOCK_ERASE_D8,
9218 			}, {
9219 				.eraseblocks = { {4 * 1024 * 1024, 1} },
9220 				.block_erase = SPI_BLOCK_ERASE_C7,
9221 			}
9222 		},
9223 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_EP_SRWD,
9224 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_EP_SRWD,
9225 		.write		= SPI_CHIP_WRITE256,
9226 		.read		= SPI_CHIP_READ,	/* also fast read 0x0B */
9227 		.voltage	= {2700, 3600},
9228 	},
9229 
9230 	{
9231 		.vendor		= "Intel",
9232 		.name		= "25F640S33B8",
9233 		.bustype	= BUS_SPI,
9234 		.manufacture_id	= INTEL_ID,
9235 		.model_id	= INTEL_25F640S33B8,
9236 		.total_size	= 8192,
9237 		.page_size	= 256,
9238 		/* OTP: 506B total (2x 8B, 30x 16B, 1x 10B); read 0x4B; write 0x42 */
9239 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
9240 		.tested		= TEST_OK_PREW,
9241 		.probe		= PROBE_SPI_RDID,
9242 		.probe_timing	= TIMING_ZERO,
9243 		.block_erasers	=
9244 		{
9245 			{
9246 				/* This chip supports erasing of the 8 so-called "parameter blocks" with
9247 				 * opcode 0x40. Trying to access an address outside these 8 8kB blocks does
9248 				 * have no effect on the memory contents, but sets a flag in the SR.
9249 				.eraseblocks = {
9250 					{8 * 1024, 8},
9251 					{64 * 1024, 127} // inaccessible
9252 				},
9253 				.block_erase = SPI_BLOCK_ERASE_40,
9254 			}, { */
9255 				.eraseblocks = { {64 * 1024, 128} },
9256 				.block_erase = SPI_BLOCK_ERASE_D8,
9257 			}, {
9258 				.eraseblocks = { {8 * 1024 * 1024, 1} },
9259 				.block_erase = SPI_BLOCK_ERASE_C7,
9260 			}
9261 		},
9262 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_EP_SRWD,
9263 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_EP_SRWD,
9264 		.write		= SPI_CHIP_WRITE256,
9265 		.read		= SPI_CHIP_READ,	/* also fast read 0x0B */
9266 		.voltage	= {2700, 3600},
9267 	},
9268 
9269 	{
9270 		.vendor		= "Intel",
9271 		.name		= "25F640S33T8",
9272 		.bustype	= BUS_SPI,
9273 		.manufacture_id	= INTEL_ID,
9274 		.model_id	= INTEL_25F640S33T8,
9275 		.total_size	= 8192,
9276 		.page_size	= 256,
9277 		/* OTP: 506B total (2x 8B, 30x 16B, 1x 10B); read 0x4B; write 0x42 */
9278 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
9279 		.tested		= TEST_UNTESTED,
9280 		.probe		= PROBE_SPI_RDID,
9281 		.probe_timing	= TIMING_ZERO,
9282 		.block_erasers	=
9283 		{
9284 			{
9285 				/* This chip supports erasing of the 8 so-called "parameter blocks" with
9286 				 * opcode 0x40. Trying to access an address outside these 8 8kB blocks does
9287 				 * have no effect on the memory contents, but sets a flag in the SR.
9288 				.eraseblocks = {
9289 					{64 * 1024, 127}, // inaccessible
9290 					{8 * 1024, 8}
9291 				},
9292 				.block_erase = SPI_BLOCK_ERASE_40,
9293 			}, { */
9294 				.eraseblocks = { {64 * 1024, 128} },
9295 				.block_erase = SPI_BLOCK_ERASE_D8,
9296 			}, {
9297 				.eraseblocks = { {8 * 1024 * 1024, 1} },
9298 				.block_erase = SPI_BLOCK_ERASE_C7,
9299 			}
9300 		},
9301 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_EP_SRWD,
9302 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_EP_SRWD,
9303 		.write		= SPI_CHIP_WRITE256,
9304 		.read		= SPI_CHIP_READ,	/* also fast read 0x0B */
9305 		.voltage	= {2700, 3600},
9306 	},
9307 
9308 	{
9309 		.vendor		= "Intel",
9310 		.name		= "28F001BN/BX-B",
9311 		.bustype	= BUS_PARALLEL,
9312 		.manufacture_id	= INTEL_ID,
9313 		.model_id	= INTEL_28F001B,
9314 		.total_size	= 128,
9315 		.page_size	= 128 * 1024, /* 8k + 2x4k + 112k */
9316 		.tested		= TEST_UNTESTED,
9317 		.probe		= PROBE_JEDEC,
9318 		.probe_timing	= TIMING_ZERO,	/* Datasheet has no timing info specified */
9319 		.block_erasers	=
9320 		{
9321 			{
9322 				.eraseblocks = {
9323 					{8 * 1024, 1},
9324 					{4 * 1024, 2},
9325 					{112 * 1024, 1},
9326 				},
9327 				.block_erase = ERASE_BLOCK_82802AB,
9328 			},
9329 		},
9330 		.write		= WRITE_82802AB,
9331 		.read		= READ_MEMMAPPED,
9332 		.voltage	= {4500, 5500},
9333 	},
9334 
9335 	{
9336 		.vendor		= "Intel",
9337 		.name		= "28F001BN/BX-T",
9338 		.bustype	= BUS_PARALLEL,
9339 		.manufacture_id	= INTEL_ID,
9340 		.model_id	= INTEL_28F001T,
9341 		.total_size	= 128,
9342 		.page_size	= 128 * 1024, /* 112k + 2x4k + 8k */
9343 		.tested		= TEST_OK_PREW,
9344 		.probe		= PROBE_JEDEC,
9345 		.probe_timing	= TIMING_ZERO,	/* Datasheet has no timing info specified */
9346 		.block_erasers	=
9347 		{
9348 			{
9349 				.eraseblocks = {
9350 					{112 * 1024, 1},
9351 					{4 * 1024, 2},
9352 					{8 * 1024, 1},
9353 				},
9354 				.block_erase = ERASE_BLOCK_82802AB,
9355 			},
9356 		},
9357 		.write		= WRITE_82802AB,
9358 		.read		= READ_MEMMAPPED,
9359 		.voltage	= {4500, 5500},
9360 	},
9361 
9362 	{
9363 		.vendor		= "Intel",
9364 		.name		= "28F002BC/BL/BV/BX-T",
9365 		.bustype	= BUS_PARALLEL,
9366 		.manufacture_id	= INTEL_ID,
9367 		.model_id	= INTEL_28F002T,
9368 		.total_size	= 256,
9369 		.page_size	= 256 * 1024,
9370 		.tested		= TEST_OK_PRE,
9371 		.probe		= PROBE_AT82802AB,
9372 		.probe_timing	= TIMING_ZERO, /* Datasheet has no timing info specified */
9373 		.block_erasers	=
9374 		{
9375 			{
9376 				.eraseblocks = {
9377 					{128 * 1024, 1},
9378 					{96 * 1024, 1},
9379 					{8 * 1024, 2},
9380 					{16 * 1024, 1},
9381 				},
9382 				.block_erase = ERASE_BLOCK_82802AB,
9383 			},
9384 		},
9385 		.write		= WRITE_82802AB,
9386 		.read		= READ_MEMMAPPED,
9387 	},
9388 
9389 	{
9390 		.vendor		= "Intel",
9391 		.name		= "28F004B5/BE/BV/BX-B",
9392 		.bustype	= BUS_PARALLEL,
9393 		.manufacture_id	= INTEL_ID,
9394 		.model_id	= INTEL_28F004B,
9395 		.total_size	= 512,
9396 		.page_size	= 128 * 1024, /* maximal block size */
9397 		.tested		= TEST_UNTESTED,
9398 		.probe		= PROBE_AT82802AB,
9399 		.probe_timing	= TIMING_ZERO,	/* Datasheet has no timing info specified */
9400 		.block_erasers	=
9401 		{
9402 			{
9403 				.eraseblocks = {
9404 					{16 * 1024, 1},
9405 					{8 * 1024, 2},
9406 					{96 * 1024, 1},
9407 					{128 * 1024, 3},
9408 				},
9409 				.block_erase = ERASE_BLOCK_82802AB,
9410 			},
9411 		},
9412 		.write		= WRITE_82802AB,
9413 		.read		= READ_MEMMAPPED,
9414 	},
9415 
9416 	{
9417 		.vendor		= "Intel",
9418 		.name		= "28F004B5/BE/BV/BX-T",
9419 		.bustype	= BUS_PARALLEL,
9420 		.manufacture_id	= INTEL_ID,
9421 		.model_id	= INTEL_28F004T,
9422 		.total_size	= 512,
9423 		.page_size	= 128 * 1024, /* maximal block size */
9424 		.tested		= TEST_UNTESTED,
9425 		.probe		= PROBE_AT82802AB,
9426 		.probe_timing	= TIMING_ZERO,	/* Datasheet has no timing info specified */
9427 		.block_erasers	=
9428 		{
9429 			{
9430 				.eraseblocks = {
9431 					{128 * 1024, 3},
9432 					{96 * 1024, 1},
9433 					{8 * 1024, 2},
9434 					{16 * 1024, 1},
9435 				},
9436 				.block_erase = ERASE_BLOCK_82802AB,
9437 			},
9438 		},
9439 		.write		= WRITE_82802AB,
9440 		.read		= READ_MEMMAPPED,
9441 	},
9442 
9443 	{
9444 		.vendor		= "Intel",
9445 		.name		= "28F008S3/S5/SC",
9446 		.bustype	= BUS_PARALLEL,
9447 		.manufacture_id	= INTEL_ID,
9448 		.model_id	= INTEL_28F004S3,
9449 		.total_size	= 512,
9450 		.page_size	= 256,
9451 		.tested		= TEST_UNTESTED,
9452 		.probe		= PROBE_AT82802AB,
9453 		.probe_timing	= TIMING_ZERO,	/* Datasheet has no timing info specified */
9454 		.block_erasers	=
9455 		{
9456 			{
9457 				.eraseblocks = { {64 * 1024, 8} },
9458 				.block_erase = ERASE_BLOCK_82802AB,
9459 			},
9460 		},
9461 		.unlock		= UNLOCK_28F004S5,
9462 		.write		= WRITE_82802AB,
9463 		.read		= READ_MEMMAPPED,
9464 	},
9465 
9466 	{
9467 		.vendor		= "Intel",
9468 		.name		= "28F400BV/BX/CE/CV-B",
9469 		.bustype	= BUS_PARALLEL,
9470 		.manufacture_id	= INTEL_ID,
9471 		.model_id	= INTEL_28F400B,
9472 		.total_size	= 512,
9473 		.page_size	= 128 * 1024, /* maximal block size */
9474 		.feature_bits	= FEATURE_ADDR_SHIFTED,
9475 		.tested		= TEST_UNTESTED,
9476 		.probe		= PROBE_AT82802AB,
9477 		.probe_timing	= TIMING_ZERO,	/* Datasheet has no timing info specified */
9478 		.block_erasers	=
9479 		{
9480 			{
9481 				.eraseblocks = {
9482 					{16 * 1024, 1},
9483 					{8 * 1024, 2},
9484 					{96 * 1024, 1},
9485 					{128 * 1024, 3},
9486 				},
9487 				.block_erase = ERASE_BLOCK_82802AB,
9488 			},
9489 		},
9490 		.write		= WRITE_82802AB,
9491 		.read		= READ_MEMMAPPED,
9492 	},
9493 
9494 	{
9495 		.vendor		= "Intel",
9496 		.name		= "28F400BV/BX/CE/CV-T",
9497 		.bustype	= BUS_PARALLEL,
9498 		.manufacture_id	= INTEL_ID,
9499 		.model_id	= INTEL_28F400T,
9500 		.total_size	= 512,
9501 		.page_size	= 128 * 1024, /* maximal block size */
9502 		.feature_bits	= FEATURE_ADDR_SHIFTED,
9503 		.tested		= TEST_UNTESTED,
9504 		.probe		= PROBE_AT82802AB,
9505 		.probe_timing	= TIMING_ZERO,	/* Datasheet has no timing info specified */
9506 		.block_erasers	=
9507 		{
9508 			{
9509 				.eraseblocks = {
9510 					{128 * 1024, 3},
9511 					{96 * 1024, 1},
9512 					{8 * 1024, 2},
9513 					{16 * 1024, 1},
9514 				},
9515 				.block_erase = ERASE_BLOCK_82802AB,
9516 			},
9517 		},
9518 		.write		= WRITE_82802AB,
9519 		.read		= READ_MEMMAPPED,
9520 	},
9521 
9522 	{
9523 		.vendor		= "Intel",
9524 		.name		= "AT82802AB",
9525 		.bustype	= BUS_FWH,
9526 		.manufacture_id	= INTEL_ID,
9527 		.model_id	= INTEL_82802AB,
9528 		.total_size	= 512,
9529 		.page_size	= 64 * 1024,
9530 		.feature_bits	= FEATURE_REGISTERMAP,
9531 		.tested		= TEST_OK_PREW,
9532 		.probe		= PROBE_AT82802AB,
9533 		.probe_timing	= TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
9534 		.block_erasers	=
9535 		{
9536 			{
9537 				.eraseblocks = { {64 * 1024, 8} },
9538 				.block_erase = ERASE_BLOCK_82802AB,
9539 			},
9540 		},
9541 		.unlock		= UNLOCK_REGSPACE2_UNIFORM_64K,
9542 		.write		= WRITE_82802AB,
9543 		.read		= READ_MEMMAPPED,
9544 		.voltage	= {3000, 3600},
9545 	},
9546 
9547 	{
9548 		.vendor		= "Intel",
9549 		.name		= "82802AC",
9550 		.bustype	= BUS_FWH,
9551 		.manufacture_id	= INTEL_ID,
9552 		.model_id	= INTEL_82802AC,
9553 		.total_size	= 1024,
9554 		.page_size	= 64 * 1024,
9555 		.feature_bits	= FEATURE_REGISTERMAP,
9556 		.tested		= TEST_OK_PR,
9557 		.probe		= PROBE_AT82802AB,
9558 		.probe_timing	= TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
9559 		.block_erasers	=
9560 		{
9561 			{
9562 				.eraseblocks = { {64 * 1024, 16} },
9563 				.block_erase = ERASE_BLOCK_82802AB,
9564 			},
9565 		},
9566 		.unlock		= UNLOCK_REGSPACE2_UNIFORM_64K,
9567 		.write		= WRITE_82802AB,
9568 		.read		= READ_MEMMAPPED,
9569 		.voltage	= {3000, 3600},
9570 	},
9571 
9572 	{
9573 		.vendor		= "Macronix",
9574 		.name		= "MX23L12854",
9575 		.bustype	= BUS_SPI,
9576 		.manufacture_id	= MACRONIX_ID,
9577 		.model_id	= MACRONIX_MX23L12854,
9578 		.total_size	= 16384,
9579 		.page_size	= 256,
9580 		.tested		= {.probe = NT, .read = NT, .erase = NA, .write = NA, .wp = NA},
9581 		.probe		= PROBE_SPI_RDID,
9582 		.probe_timing	= TIMING_ZERO,
9583 		.write		= 0, /* MX23L12854 is a mask ROM, so it is read-only */
9584 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
9585 		.voltage	= {3000, 3600},
9586 	},
9587 
9588 	{
9589 		.vendor		= "Macronix",
9590 		.name		= "MX23L1654",
9591 		.bustype	= BUS_SPI,
9592 		.manufacture_id	= MACRONIX_ID,
9593 		.model_id	= MACRONIX_MX23L1654,
9594 		.total_size	= 2048,
9595 		.page_size	= 256,
9596 		.tested		= {.probe = NT, .read = NT, .erase = NA, .write = NA, .wp = NA},
9597 		.probe		= PROBE_SPI_RDID,
9598 		.probe_timing	= TIMING_ZERO,
9599 		.write		= 0, /* MX23L1654 is a mask ROM, so it is read-only */
9600 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
9601 		.voltage	= {3000, 3600},
9602 	},
9603 
9604 	{
9605 		.vendor		= "Macronix",
9606 		.name		= "MX23L3254",
9607 		.bustype	= BUS_SPI,
9608 		.manufacture_id	= MACRONIX_ID,
9609 		.model_id	= MACRONIX_MX23L3254,
9610 		.total_size	= 4096,
9611 		.page_size	= 256,
9612 		.tested		= {.probe = OK, .read = OK, .erase = NA, .write = NA, .wp = NA},
9613 		.probe		= PROBE_SPI_RDID,
9614 		.probe_timing	= TIMING_ZERO,
9615 		.write		= 0, /* MX23L3254 is a mask ROM, so it is read-only */
9616 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
9617 		.voltage	= {3000, 3600},
9618 	},
9619 
9620 	{
9621 		.vendor		= "Macronix",
9622 		.name		= "MX23L6454",
9623 		.bustype	= BUS_SPI,
9624 		.manufacture_id	= MACRONIX_ID,
9625 		.model_id	= MACRONIX_MX23L6454,
9626 		.total_size	= 8192,
9627 		.page_size	= 256,
9628 		.tested		= {.probe = OK, .read = OK, .erase = NA, .write = NA, .wp = NA},
9629 		.probe		= PROBE_SPI_RDID,
9630 		.probe_timing	= TIMING_ZERO,
9631 		.write		= 0, /* MX23L6454 is a mask ROM, so it is read-only */
9632 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
9633 		.voltage	= {3000, 3600},
9634 	},
9635 
9636 	{
9637 		.vendor		= "Macronix",
9638 		.name		= "MX25L1005(C)/MX25L1006E",
9639 		.bustype	= BUS_SPI,
9640 		.manufacture_id	= MACRONIX_ID,
9641 		.model_id	= MACRONIX_MX25L1005,
9642 		.total_size	= 128,
9643 		.page_size	= 256,
9644 		/* MX25L1006E supports SFDP */
9645 		.feature_bits	= FEATURE_WRSR_WREN,
9646 		.tested		= TEST_OK_PREW,
9647 		.probe		= PROBE_SPI_RDID,
9648 		.probe_timing	= TIMING_ZERO,
9649 		.block_erasers	=
9650 		{
9651 			{
9652 				.eraseblocks = { {4 * 1024, 32} },
9653 				.block_erase = SPI_BLOCK_ERASE_20,
9654 			}, {
9655 				.eraseblocks = { {64 * 1024, 2} },
9656 				.block_erase = SPI_BLOCK_ERASE_D8,
9657 			}, {
9658 				.eraseblocks = { {128 * 1024, 1} },
9659 				.block_erase = SPI_BLOCK_ERASE_60,
9660 			}, {
9661 				.eraseblocks = { {128 * 1024, 1} },
9662 				.block_erase = SPI_BLOCK_ERASE_C7,
9663 			},
9664 		},
9665 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP1_SRWD,
9666 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
9667 		.write		= SPI_CHIP_WRITE256,
9668 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported, MX25L1006E supports dual I/O */
9669 		.voltage	= {2700, 3600},
9670 	},
9671 
9672 	{
9673 		.vendor		= "Macronix",
9674 		.name		= "MX25L12805D",
9675 		.bustype	= BUS_SPI,
9676 		.manufacture_id	= MACRONIX_ID,
9677 		.model_id	= MACRONIX_MX25L12805D,
9678 		.total_size	= 16384,
9679 		.page_size	= 256,
9680 		/* OTP: 64B total; enter 0xB1, exit 0xC1 */
9681 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
9682 		.tested		= TEST_OK_PREW,
9683 		.probe		= PROBE_SPI_RDID,
9684 		.probe_timing	= TIMING_ZERO,
9685 		.block_erasers	=
9686 		{
9687 			{
9688 				.eraseblocks = { {4 * 1024, 4096} },
9689 				.block_erase = SPI_BLOCK_ERASE_20,
9690 			}, {
9691 				.eraseblocks = { {64 * 1024, 256} },
9692 				.block_erase = SPI_BLOCK_ERASE_D8,
9693 			}, {
9694 				.eraseblocks = { {16 * 1024 * 1024, 1} },
9695 				.block_erase = SPI_BLOCK_ERASE_60,
9696 			}, {
9697 				.eraseblocks = { {16 * 1024 * 1024, 1} },
9698 				.block_erase = SPI_BLOCK_ERASE_C7,
9699 			}
9700 		},
9701 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD,
9702 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
9703 		.write		= SPI_CHIP_WRITE256,
9704 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
9705 		.voltage	= {2700, 3600},
9706 	},
9707 
9708 	{
9709 		.vendor		= "Macronix",
9710 		.name		= "MX25L12833F",
9711 		.bustype	= BUS_SPI,
9712 		.manufacture_id	= MACRONIX_ID,
9713 		.model_id	= MACRONIX_MX25L12805D,
9714 		.total_size	= 16384,
9715 		.page_size	= 256,
9716 		/* OTP: 1KB total; enter 0xB1, exit 0xC1 */
9717 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_CFGR | FEATURE_SCUR,
9718 		.tested		= TEST_OK_PREWB,
9719 		.probe		= PROBE_SPI_RDID,
9720 		.probe_timing	= TIMING_ZERO,
9721 		.block_erasers	=
9722 		{
9723 			{
9724 				.eraseblocks = { {4 * 1024, 4096} },
9725 				.block_erase = SPI_BLOCK_ERASE_20,
9726 			}, {
9727 				.eraseblocks = { {32 * 1024, 512} },
9728 				.block_erase = SPI_BLOCK_ERASE_52,
9729 			}, {
9730 				.eraseblocks = { {64 * 1024, 256} },
9731 				.block_erase = SPI_BLOCK_ERASE_D8,
9732 			}, {
9733 				.eraseblocks = { {16 * 1024 * 1024, 1} },
9734 				.block_erase = SPI_BLOCK_ERASE_60,
9735 			}, {
9736 				.eraseblocks = { {16 * 1024 * 1024, 1} },
9737 				.block_erase = SPI_BLOCK_ERASE_C7,
9738 			}
9739 		},
9740 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enable */
9741 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
9742 		.write		= SPI_CHIP_WRITE256,
9743 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
9744 		.voltage	= {2700, 3600},
9745 		.reg_bits	=
9746 		{
9747 			.srp    = {STATUS1, 7, RW},
9748 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}, {STATUS1, 5, RW}},
9749 			.tb     = {CONFIG, 3, OTP},
9750 			.wps    = {SECURITY, 7, OTP}, /* This bit is set by WPSEL command */
9751 		},
9752 		.decode_range	= DECODE_RANGE_SPI25,
9753         },
9754 
9755 	{
9756 		.vendor		= "Macronix",
9757 		.name		= "MX25L12835F/MX25L12873F",
9758 		.bustype	= BUS_SPI,
9759 		.manufacture_id	= MACRONIX_ID,
9760 		.model_id	= MACRONIX_MX25L12805D,
9761 		.total_size	= 16384,
9762 		.page_size	= 256,
9763 		/* OTP: 512B total; enter 0xB1, exit 0xC1 */
9764 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_CFGR | FEATURE_SCUR,
9765 		.tested		= TEST_OK_PREW,
9766 		.probe		= PROBE_SPI_RDID,
9767 		.probe_timing	= TIMING_ZERO,
9768 		.block_erasers	=
9769 		{
9770 			{
9771 				.eraseblocks = { {4 * 1024, 4096} },
9772 				.block_erase = SPI_BLOCK_ERASE_20,
9773 			}, {
9774 				.eraseblocks = { {32 * 1024, 512} },
9775 				.block_erase = SPI_BLOCK_ERASE_52,
9776 			}, {
9777 				.eraseblocks = { {64 * 1024, 256} },
9778 				.block_erase = SPI_BLOCK_ERASE_D8,
9779 			}, {
9780 				.eraseblocks = { {16 * 1024 * 1024, 1} },
9781 				.block_erase = SPI_BLOCK_ERASE_60,
9782 			}, {
9783 				.eraseblocks = { {16 * 1024 * 1024, 1} },
9784 				.block_erase = SPI_BLOCK_ERASE_C7,
9785 			}
9786 		},
9787 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enable */
9788 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
9789 		.write		= SPI_CHIP_WRITE256,
9790 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
9791 		.voltage	= {2700, 3600},
9792 		.reg_bits	=
9793 		{
9794 			.srp    = {STATUS1, 7, RW},
9795 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}, {STATUS1, 5, RW}},
9796 			.tb     = {CONFIG, 3, OTP},
9797 			.wps    = {SECURITY, 7, OTP}, /* This bit is set by WPSEL command */
9798 		},
9799 		.decode_range	= DECODE_RANGE_SPI25,
9800 	},
9801 
9802 	{
9803 		.vendor		= "Macronix",
9804 		.name		= "MX25L12845E/MX25L12865E",
9805 		.bustype	= BUS_SPI,
9806 		.manufacture_id	= MACRONIX_ID,
9807 		.model_id	= MACRONIX_MX25L12805D,
9808 		.total_size	= 16384,
9809 		.page_size	= 256,
9810 		/* OTP: 512B total; enter 0xB1, exit 0xC1 */
9811 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_SCUR,
9812 		.tested		= TEST_OK_PREW,
9813 		.probe		= PROBE_SPI_RDID,
9814 		.probe_timing	= TIMING_ZERO,
9815 		.block_erasers	=
9816 		{
9817 			{
9818 				.eraseblocks = { {4 * 1024, 4096} },
9819 				.block_erase = SPI_BLOCK_ERASE_20,
9820 			}, {
9821 				.eraseblocks = { {32 * 1024, 512} },
9822 				.block_erase = SPI_BLOCK_ERASE_52,
9823 			}, {
9824 				.eraseblocks = { {64 * 1024, 256} },
9825 				.block_erase = SPI_BLOCK_ERASE_D8,
9826 			}, {
9827 				.eraseblocks = { {16 * 1024 * 1024, 1} },
9828 				.block_erase = SPI_BLOCK_ERASE_60,
9829 			}, {
9830 				.eraseblocks = { {16 * 1024 * 1024, 1} },
9831 				.block_erase = SPI_BLOCK_ERASE_C7,
9832 			}
9833 		},
9834 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enable */
9835 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
9836 		.write		= SPI_CHIP_WRITE256,
9837 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
9838 		.voltage	= {2700, 3600},
9839 		.reg_bits	=
9840 		{
9841 			.srp    = {STATUS1, 7, RW},
9842 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}, {STATUS1, 5, RW}},
9843 			.wps    = {SECURITY, 7, OTP}, /* This bit is set by WPSEL command */
9844 		},
9845 		.decode_range	= DECODE_RANGE_SPI25,
9846 	},
9847 
9848 	{
9849 		.vendor		= "Macronix",
9850 		.name		= "MX25L12850F",
9851 		.bustype	= BUS_SPI,
9852 		.manufacture_id	= MACRONIX_ID,
9853 		.model_id	= MACRONIX_MX25L12805D,
9854 		.total_size	= 16384,
9855 		.page_size	= 256,
9856 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_CFGR,
9857 		.tested		= TEST_OK_PREWB,
9858 		.probe		= PROBE_SPI_RDID,
9859 		.probe_timing	= TIMING_ZERO,
9860 		.block_erasers	=
9861 		{
9862 			{
9863 				.eraseblocks = { {4 * 1024, 4096} },
9864 				.block_erase = SPI_BLOCK_ERASE_20,
9865 			}, {
9866 				.eraseblocks = { {32 * 1024, 512} },
9867 				.block_erase = SPI_BLOCK_ERASE_52,
9868 			}, {
9869 				.eraseblocks = { {64 * 1024, 256} },
9870 				.block_erase = SPI_BLOCK_ERASE_D8,
9871 			}, {
9872 				.eraseblocks = { {16 * 1024 * 1024, 1} },
9873 				.block_erase = SPI_BLOCK_ERASE_60,
9874 			}, {
9875 				.eraseblocks = { {16 * 1024 * 1024, 1} },
9876 				.block_erase = SPI_BLOCK_ERASE_C7,
9877 			}
9878 		},
9879 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enable */
9880 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
9881 		.write		= SPI_CHIP_WRITE256,
9882 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
9883 		.voltage	= {2700, 3600},
9884 		.reg_bits	=
9885 		{
9886 			.srp    = {STATUS1, 7, RW},
9887 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW},  {STATUS1, 5, RW}},
9888 			.tb     = {CONFIG, 3, OTP}
9889 		},
9890 
9891 		.decode_range	= DECODE_RANGE_SPI25,
9892 	},
9893 
9894 	{
9895 		.vendor		= "Macronix",
9896 		.name		= "MX25L1605",
9897 		.bustype	= BUS_SPI,
9898 		.manufacture_id	= MACRONIX_ID,
9899 		.model_id	= MACRONIX_MX25L1605,
9900 		.total_size	= 2048,
9901 		.page_size	= 256,
9902 		.feature_bits	= FEATURE_WRSR_WREN,
9903 		.tested		= TEST_OK_PREW,
9904 		.probe		= PROBE_SPI_RDID,
9905 		.probe_timing	= TIMING_ZERO,
9906 		.block_erasers	=
9907 		{
9908 			{
9909 				.eraseblocks = { {64 * 1024, 32} },
9910 				.block_erase = SPI_BLOCK_ERASE_20,
9911 			}, {
9912 				.eraseblocks = { {64 * 1024, 32} },
9913 				.block_erase = SPI_BLOCK_ERASE_D8,
9914 			}, {
9915 				.eraseblocks = { {2 * 1024 * 1024, 1} },
9916 				.block_erase = SPI_BLOCK_ERASE_60,
9917 			}, {
9918 				.eraseblocks = { {2 * 1024 * 1024, 1} },
9919 				.block_erase = SPI_BLOCK_ERASE_C7,
9920 			},
9921 		},
9922 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD, /* bit6: error flag */
9923 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
9924 		.write		= SPI_CHIP_WRITE256,
9925 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
9926 		.voltage	= {2700, 3600},
9927 	},
9928 
9929 	{
9930 		.vendor		= "Macronix",
9931 		.name		= "MX25V16066", /* was called KH25V16066 in rev v1.3 */
9932 		.bustype	= BUS_SPI,
9933 		.manufacture_id	= MACRONIX_ID,
9934 		.model_id	= MACRONIX_MX25L1605,
9935 		.total_size	= 2048, /* 16M-bits */
9936 		.page_size	= 256,
9937 		.feature_bits	= FEATURE_WRSR_WREN,
9938 		.tested		= TEST_OK_PR,
9939 		.probe		= PROBE_SPI_RDID,
9940 		.probe_timing	= TIMING_ZERO,
9941 		.block_erasers	=
9942 		{
9943 			{
9944 				.eraseblocks = { {4 * 1024, 512} },
9945 				.block_erase = SPI_BLOCK_ERASE_20,
9946 			}, {
9947 				.eraseblocks = { {32 * 1024, 64} },
9948 				.block_erase = SPI_BLOCK_ERASE_52,
9949 			}, {
9950 				.eraseblocks = { {64 * 1024, 32} },
9951 				.block_erase = SPI_BLOCK_ERASE_D8,
9952 			}, {
9953 				.eraseblocks = { {2 * 1024 * 1024, 1} },
9954 				.block_erase = SPI_BLOCK_ERASE_60,
9955 			}, {
9956 				.eraseblocks = { {2 * 1024 * 1024, 1} },
9957 				.block_erase = SPI_BLOCK_ERASE_C7,
9958 			},
9959 		},
9960 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD,
9961 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
9962 		.write		= SPI_CHIP_WRITE256,
9963 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
9964 		.voltage	= {2700, 3600},
9965 	},
9966 
9967 	{
9968 		.vendor		= "Macronix",
9969 		.name		= "MX25L1605A/MX25L1606E/MX25L1608E",
9970 		.bustype	= BUS_SPI,
9971 		.manufacture_id	= MACRONIX_ID,
9972 		.model_id	= MACRONIX_MX25L1605,
9973 		.total_size	= 2048,
9974 		.page_size	= 256,
9975 		/* OTP: 64B total; enter 0xB1, exit 0xC1 (MX25L1606E and MX25L1608E only) */
9976 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
9977 		.tested		= TEST_OK_PREW,
9978 		.probe		= PROBE_SPI_RDID,
9979 		.probe_timing	= TIMING_ZERO,
9980 		.block_erasers	=
9981 		{
9982 			{
9983 				.eraseblocks = { {4 * 1024, 512} },
9984 				.block_erase = SPI_BLOCK_ERASE_20,
9985 			}, {
9986 				.eraseblocks = { {64 * 1024, 32} },
9987 				.block_erase = SPI_BLOCK_ERASE_52,
9988 			}, {
9989 				.eraseblocks = { {64 * 1024, 32} },
9990 				.block_erase = SPI_BLOCK_ERASE_D8,
9991 			}, {
9992 				.eraseblocks = { {2 * 1024 * 1024, 1} },
9993 				.block_erase = SPI_BLOCK_ERASE_60,
9994 			}, {
9995 				.eraseblocks = { {2 * 1024 * 1024, 1} },
9996 				.block_erase = SPI_BLOCK_ERASE_C7,
9997 			},
9998 		},
9999 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* MX25L1605A bp2 only */
10000 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
10001 		.write		= SPI_CHIP_WRITE256,
10002 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported (MX25L1608E supports dual-I/O read) */
10003 		.voltage	= {2700, 3600},
10004 	},
10005 
10006 	{
10007 		.vendor		= "Macronix",
10008 		.name		= "MX25L1605D/MX25L1608D/MX25L1673E",
10009 		.bustype	= BUS_SPI,
10010 		.manufacture_id	= MACRONIX_ID,
10011 		.model_id	= MACRONIX_MX25L1605,
10012 		.total_size	= 2048,
10013 		.page_size	= 256,
10014 		.feature_bits	= FEATURE_WRSR_WREN,
10015 		.tested		= TEST_OK_PREW,
10016 		.probe		= PROBE_SPI_RDID,
10017 		.probe_timing	= TIMING_ZERO,
10018 		.block_erasers	=
10019 		{
10020 			{
10021 				.eraseblocks = { {4 * 1024, 512} },
10022 				.block_erase = SPI_BLOCK_ERASE_20,
10023 			}, {
10024 				.eraseblocks = { {64 * 1024, 32} },
10025 				.block_erase = SPI_BLOCK_ERASE_D8,
10026 			}, {
10027 				.eraseblocks = { {2 * 1024 * 1024, 1} },
10028 				.block_erase = SPI_BLOCK_ERASE_60,
10029 			}, {
10030 				.eraseblocks = { {2 * 1024 * 1024, 1} },
10031 				.block_erase = SPI_BLOCK_ERASE_C7,
10032 			},
10033 		},
10034 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6: Continuously Program (CP) mode, for 73E is quad enable */
10035 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
10036 		.write		= SPI_CHIP_WRITE256,
10037 		.read		= SPI_CHIP_READ, /* Fast read (0x0B), dual I/O supported */
10038 		.voltage	= {2700, 3600},
10039 	},
10040 
10041 	{
10042 		.vendor		= "Macronix",
10043 		.name		= "MX25L1635D",
10044 		.bustype	= BUS_SPI,
10045 		.manufacture_id	= MACRONIX_ID,
10046 		.model_id	= MACRONIX_MX25L1635D,
10047 		.total_size	= 2048,
10048 		.page_size	= 256,
10049 		/* OTP: 64B total; enter 0xB1, exit 0xC1 */
10050 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
10051 		.tested		= TEST_OK_PREW,
10052 		.probe		= PROBE_SPI_RDID,
10053 		.probe_timing	= TIMING_ZERO,
10054 		.block_erasers	=
10055 		{
10056 			{
10057 				.eraseblocks = { {4 * 1024, 512} },
10058 				.block_erase = SPI_BLOCK_ERASE_20,
10059 			}, {
10060 				.eraseblocks = { {64 * 1024, 32} },
10061 				.block_erase = SPI_BLOCK_ERASE_D8,
10062 			}, {
10063 				.eraseblocks = { {2 * 1024 * 1024, 1} },
10064 				.block_erase = SPI_BLOCK_ERASE_60,
10065 			}, {
10066 				.eraseblocks = { {2 * 1024 * 1024, 1} },
10067 				.block_erase = SPI_BLOCK_ERASE_C7,
10068 			}
10069 		},
10070 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enable */
10071 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
10072 		.write		= SPI_CHIP_WRITE256,
10073 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
10074 		.voltage	= {2700, 3600},
10075 	},
10076 
10077 	{
10078 		.vendor		= "Macronix",
10079 		.name		= "MX25L1633E",
10080 		.bustype	= BUS_SPI,
10081 		.manufacture_id	= MACRONIX_ID,
10082 		.model_id	= MACRONIX_MX25L1635D,
10083 		.total_size	= 2048,
10084 		.page_size	= 256,
10085 		/* OTP: 64B total; enter 0xB1, exit 0xC1 */
10086 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP ,
10087 		.tested		= TEST_OK_PREWB,
10088 		.probe		= PROBE_SPI_RDID,
10089 		.probe_timing	= TIMING_ZERO,
10090 		.block_erasers	=
10091 		{
10092 			{
10093 				.eraseblocks = { {4 * 1024, 512} },
10094 				.block_erase = SPI_BLOCK_ERASE_20,
10095 			}, {
10096 				.eraseblocks = { {64 * 1024, 32} },
10097 				.block_erase = SPI_BLOCK_ERASE_D8,
10098 			}, {
10099 				.eraseblocks = { {2 * 1024 * 1024, 1} },
10100 				.block_erase = SPI_BLOCK_ERASE_60,
10101 			}, {
10102 				.eraseblocks = { {2 * 1024 * 1024, 1} },
10103 				.block_erase = SPI_BLOCK_ERASE_C7,
10104 			}
10105 		},
10106 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enable */
10107 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
10108 		.write		= SPI_CHIP_WRITE256,
10109 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
10110 		.voltage	= {2700, 3600},
10111 		.reg_bits	=
10112 		{
10113 			.srp    = {STATUS1, 7, RW},
10114 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW},  {STATUS1, 5, RW}},
10115 		},
10116 
10117 		.decode_range	= DECODE_RANGE_SPI25,
10118 	},
10119 
10120 	{
10121 		.vendor		= "Macronix",
10122 		.name		= "MX25L1635E/MX25L1636E",
10123 		.bustype	= BUS_SPI,
10124 		.manufacture_id	= MACRONIX_ID,
10125 		.model_id	= MACRONIX_MX25L1635E,
10126 		.total_size	= 2048,
10127 		.page_size	= 256,
10128 		/* OTP: 512B total; enter 0xB1, exit 0xC1 */
10129 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
10130 		.tested		= TEST_OK_PREWB,
10131 		.probe		= PROBE_SPI_RDID,
10132 		.probe_timing	= TIMING_ZERO,
10133 		.block_erasers	=
10134 		{
10135 			{
10136 				.eraseblocks = { {4 * 1024, 512} },
10137 				.block_erase = SPI_BLOCK_ERASE_20,
10138 			}, {
10139 				.eraseblocks = { {64 * 1024, 32} },
10140 				.block_erase = SPI_BLOCK_ERASE_D8,
10141 			}, {
10142 				.eraseblocks = { {2 * 1024 * 1024, 1} },
10143 				.block_erase = SPI_BLOCK_ERASE_60,
10144 			}, {
10145 				.eraseblocks = { {2 * 1024 * 1024, 1} },
10146 				.block_erase = SPI_BLOCK_ERASE_C7,
10147 			}
10148 		},
10149 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enable */
10150 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
10151 		.write		= SPI_CHIP_WRITE256,
10152 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
10153 		.voltage	= {2700, 3600},
10154 		.reg_bits	=
10155 		{
10156 			.srp    = {STATUS1, 7, RW},
10157 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW},  {STATUS1, 5, RW}},
10158 		},
10159 
10160 		.decode_range	= DECODE_RANGE_SPI25,
10161 	},
10162 
10163 	{
10164 		.vendor		= "Macronix",
10165 		.name		= "MX25L2005(C)/MX25L2006E",
10166 		.bustype	= BUS_SPI,
10167 		.manufacture_id	= MACRONIX_ID,
10168 		.model_id	= MACRONIX_MX25L2005,
10169 		.total_size	= 256,
10170 		.page_size	= 256,
10171 		.feature_bits	= FEATURE_WRSR_WREN,
10172 		.tested		= TEST_OK_PREW,
10173 		.probe		= PROBE_SPI_RDID,
10174 		.probe_timing	= TIMING_ZERO,
10175 		.block_erasers	=
10176 		{
10177 			{
10178 				.eraseblocks = { {4 * 1024, 64} },
10179 				.block_erase = SPI_BLOCK_ERASE_20,
10180 			}, {
10181 				.eraseblocks = { {64 * 1024, 4} },
10182 				.block_erase = SPI_BLOCK_ERASE_52,
10183 			}, {
10184 				.eraseblocks = { {64 * 1024, 4} },
10185 				.block_erase = SPI_BLOCK_ERASE_D8,
10186 			}, {
10187 				.eraseblocks = { {256 * 1024, 1} },
10188 				.block_erase = SPI_BLOCK_ERASE_60,
10189 			}, {
10190 				.eraseblocks = { {256 * 1024, 1} },
10191 				.block_erase = SPI_BLOCK_ERASE_C7,
10192 			},
10193 		},
10194 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP1_SRWD,
10195 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
10196 		.write		= SPI_CHIP_WRITE256,
10197 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
10198 		.voltage	= {2700, 3600},
10199 	},
10200 
10201 	{
10202 		.vendor		= "Macronix",
10203 		.name		= "MX25L25635F/MX25L25645G",
10204 		.bustype	= BUS_SPI,
10205 		.manufacture_id	= MACRONIX_ID,
10206 		.model_id	= MACRONIX_MX25L25635F,
10207 		.total_size	= 32768,
10208 		.page_size	= 256,
10209 		/* OTP: 512B total; enter 0xB1, exit 0xC1 */
10210 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA,
10211 		.tested		= TEST_OK_PREW,
10212 		.probe		= PROBE_SPI_RDID,
10213 		.probe_timing	= TIMING_ZERO,
10214 		.block_erasers	=
10215 		{
10216 			{
10217 				.eraseblocks = { {4 * 1024, 8192} },
10218 				.block_erase = SPI_BLOCK_ERASE_21,
10219 			}, {
10220 				.eraseblocks = { {4 * 1024, 8192} },
10221 				.block_erase = SPI_BLOCK_ERASE_20,
10222 			}, {
10223 				.eraseblocks = { {32 * 1024, 1024} },
10224 				.block_erase = SPI_BLOCK_ERASE_5C,
10225 			}, {
10226 				.eraseblocks = { {32 * 1024, 1024} },
10227 				.block_erase = SPI_BLOCK_ERASE_52,
10228 			}, {
10229 				.eraseblocks = { {64 * 1024, 512} },
10230 				.block_erase = SPI_BLOCK_ERASE_DC,
10231 			}, {
10232 				.eraseblocks = { {64 * 1024, 512} },
10233 				.block_erase = SPI_BLOCK_ERASE_D8,
10234 			}, {
10235 				.eraseblocks = { {32 * 1024 * 1024, 1} },
10236 				.block_erase = SPI_BLOCK_ERASE_60,
10237 			}, {
10238 				.eraseblocks = { {32 * 1024 * 1024, 1} },
10239 				.block_erase = SPI_BLOCK_ERASE_C7,
10240 			}
10241 		},
10242 		/* TODO: security register and SBLK/SBULK; MX25L12835F: configuration register */
10243 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enable */
10244 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
10245 		.write		= SPI_CHIP_WRITE256,
10246 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
10247 		.voltage	= {2700, 3600},
10248 	},
10249 
10250 	{
10251 		.vendor		= "Macronix",
10252 		.name		= "MX25L3205(A)",
10253 		.bustype	= BUS_SPI,
10254 		.manufacture_id	= MACRONIX_ID,
10255 		.model_id	= MACRONIX_MX25L3205,
10256 		.total_size	= 4096,
10257 		.page_size	= 256,
10258 		.feature_bits	= FEATURE_WRSR_WREN,
10259 		.tested		= TEST_OK_PREW,
10260 		.probe		= PROBE_SPI_RDID,
10261 		.probe_timing	= TIMING_ZERO,
10262 		.block_erasers	=
10263 		{
10264 			{
10265 				.eraseblocks = { {64 * 1024, 64} },
10266 				.block_erase = SPI_BLOCK_ERASE_20,
10267 			}, {
10268 				.eraseblocks = { {64 * 1024, 64} },
10269 				.block_erase = SPI_BLOCK_ERASE_D8,
10270 			}, {
10271 				.eraseblocks = { {4 * 1024 * 1024, 1} },
10272 				.block_erase = SPI_BLOCK_ERASE_60,
10273 			}, {
10274 				.eraseblocks = { {4 * 1024 * 1024, 1} },
10275 				.block_erase = SPI_BLOCK_ERASE_C7,
10276 			},
10277 		},
10278 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD, /* bit6: error flag */
10279 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
10280 		.write		= SPI_CHIP_WRITE256,
10281 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
10282 		.voltage	= {2700, 3600},
10283 	},
10284 
10285 	{
10286 		.vendor		= "Macronix",
10287 		.name		= "MX25L3205D/MX25L3208D",
10288 		.bustype	= BUS_SPI,
10289 		.manufacture_id	= MACRONIX_ID,
10290 		.model_id	= MACRONIX_MX25L3205,
10291 		.total_size	= 4096,
10292 		.page_size	= 256,
10293 		/* OTP: 64B total; enter 0xB1, exit 0xC1 */
10294 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
10295 		.tested		= TEST_OK_PREW,
10296 		.probe		= PROBE_SPI_RDID,
10297 		.probe_timing	= TIMING_ZERO,
10298 		.block_erasers	=
10299 		{
10300 			{
10301 				.eraseblocks = { {4 * 1024, 1024} },
10302 				.block_erase = SPI_BLOCK_ERASE_20,
10303 			}, {
10304 				.eraseblocks = { {64 * 1024, 64} },
10305 				.block_erase = SPI_BLOCK_ERASE_D8,
10306 			}, {
10307 				.eraseblocks = { {4 * 1024 * 1024, 1} },
10308 				.block_erase = SPI_BLOCK_ERASE_60,
10309 			}, {
10310 				.eraseblocks = { {4 * 1024 * 1024, 1} },
10311 				.block_erase = SPI_BLOCK_ERASE_C7,
10312 			},
10313 		},
10314 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6: continuously program mode */
10315 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
10316 		.write		= SPI_CHIP_WRITE256,
10317 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and dual I/O supported */
10318 		.voltage	= {2700, 3600},
10319 	},
10320 
10321 	{
10322 		.vendor		= "Macronix",
10323 		.name		= "MX25L3206E/MX25L3208E",
10324 		.bustype	= BUS_SPI,
10325 		.manufacture_id	= MACRONIX_ID,
10326 		.model_id	= MACRONIX_MX25L3205,
10327 		.total_size	= 4096,
10328 		.page_size	= 256,
10329 		/* OTP: 64B total; enter 0xB1, exit 0xC1 */
10330 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
10331 		.tested		= TEST_OK_PREWB,
10332 		.probe		= PROBE_SPI_RDID,
10333 		.probe_timing	= TIMING_ZERO,
10334 		.block_erasers	=
10335 		{
10336 			{
10337 				.eraseblocks = { {4 * 1024, 1024} },
10338 				.block_erase = SPI_BLOCK_ERASE_20,
10339 			}, {
10340 				.eraseblocks = { {64 * 1024, 64} },
10341 				.block_erase = SPI_BLOCK_ERASE_D8,
10342 			}, {
10343 				.eraseblocks = { {64 * 1024, 64} },
10344 				.block_erase = SPI_BLOCK_ERASE_52,
10345 			}, {
10346 				.eraseblocks = { {4 * 1024 * 1024, 1} },
10347 				.block_erase = SPI_BLOCK_ERASE_60,
10348 			}, {
10349 				.eraseblocks = { {4 * 1024 * 1024, 1} },
10350 				.block_erase = SPI_BLOCK_ERASE_C7,
10351 			},
10352 		},
10353 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD,
10354 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
10355 		.write		= SPI_CHIP_WRITE256,
10356 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and dual I/O supported */
10357 		.voltage	= {2700, 3600},
10358 		.reg_bits	=
10359 		{
10360 			.srp    = {STATUS1, 7, RW},
10361 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
10362 			.cmp    = {STATUS1, 5, RW}, /* Called BP3 in datasheet, acts like CMP */
10363 		},
10364 		.decode_range	= DECODE_RANGE_SPI25_BIT_CMP,
10365 	},
10366         {
10367 		.vendor		= "Macronix",
10368 		.name		= "MX25L3273F",
10369 		.bustype	= BUS_SPI,
10370 		.manufacture_id	= MACRONIX_ID,
10371 		.model_id	= MACRONIX_MX25L3205,
10372 		.total_size	= 4096,
10373 		.page_size	= 256,
10374 		/* OTP: 512B total; enter 0xB1, exit 0xC1 */
10375 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_CFGR,
10376 		.tested		= TEST_OK_PREWB,
10377 		.probe		= PROBE_SPI_RDID,
10378 		.probe_timing	= TIMING_ZERO,
10379 		.block_erasers	=
10380 		{
10381 			{
10382 				.eraseblocks = { {4 * 1024, 1024} },
10383 				.block_erase = SPI_BLOCK_ERASE_20,
10384 			}, {
10385 				.eraseblocks = { {32 * 1024, 128} },
10386 				.block_erase = SPI_BLOCK_ERASE_52,
10387 			}, {
10388 				.eraseblocks = { {64 * 1024, 64} },
10389 				.block_erase = SPI_BLOCK_ERASE_D8,
10390 			}, {
10391 				.eraseblocks = { {4 * 1024 * 1024, 1} },
10392 				.block_erase = SPI_BLOCK_ERASE_60,
10393 			}, {
10394 				.eraseblocks = { {4 * 1024 * 1024, 1} },
10395 				.block_erase = SPI_BLOCK_ERASE_C7,
10396 			}
10397 		},
10398 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit 6 is quad enable */
10399 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
10400 		.write		= SPI_CHIP_WRITE256,
10401 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
10402 		.voltage	= {2650, 3600},
10403 		.reg_bits	=
10404 		{
10405 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW},  {STATUS1, 5, RW}},
10406 			.tb     = {CONFIG, 3, OTP}
10407 		},
10408 
10409 		.decode_range	= DECODE_RANGE_SPI25,
10410         },
10411 
10412         {
10413 		.vendor		= "Macronix",
10414 		.name		= "MX25L3239E",
10415 		.bustype	= BUS_SPI,
10416 		.manufacture_id	= MACRONIX_ID,
10417 		.model_id	= MACRONIX_MX25L3239E,
10418 		.total_size	= 4096,
10419 		.page_size	= 256,
10420 		/* OTP: 512B total; enter 0xB1, exit 0xC1 */
10421 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_CFGR | FEATURE_SCUR ,
10422 		.tested		= TEST_OK_PREWB,
10423 		.probe		= PROBE_SPI_RDID,
10424 		.probe_timing	= TIMING_ZERO,
10425 		.block_erasers	=
10426 		{
10427 			{
10428 				.eraseblocks = { {4 * 1024, 1024} },
10429 				.block_erase = SPI_BLOCK_ERASE_20,
10430 			}, {
10431 				.eraseblocks = { {32 * 1024, 128} },
10432 				.block_erase = SPI_BLOCK_ERASE_52,
10433 			}, {
10434 				.eraseblocks = { {64 * 1024, 64} },
10435 				.block_erase = SPI_BLOCK_ERASE_D8,
10436 			}, {
10437 				.eraseblocks = { {4 * 1024 * 1024, 1} },
10438 				.block_erase = SPI_BLOCK_ERASE_60,
10439 			}, {
10440 				.eraseblocks = { {4 * 1024 * 1024, 1} },
10441 				.block_erase = SPI_BLOCK_ERASE_C7,
10442 			}
10443 		},
10444 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit 6 is quad enable */
10445 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
10446 		.write		= SPI_CHIP_WRITE256,
10447 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
10448 		.voltage	= {2700, 3600},
10449 		.reg_bits	=
10450 		{
10451 			.srp    = {STATUS1, 7, RW},
10452 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW},  {STATUS1, 5, RW}},
10453 			.tb     = {CONFIG, 3, OTP},
10454 			.wps    = {SECURITY, 7, OTP}, /* This bit is set by WPSEL command */
10455 		},
10456 
10457 		.decode_range	= DECODE_RANGE_SPI25,
10458 	},
10459 
10460 	{
10461 		.vendor		= "Macronix",
10462 		.name		= "MX25L3235D",
10463 		.bustype	= BUS_SPI,
10464 		.manufacture_id	= MACRONIX_ID,
10465 		.model_id	= MACRONIX_MX25L3235D,
10466 		.total_size	= 4096,
10467 		.page_size	= 256,
10468 		/* OTP: 256B total; enter 0xB1, exit 0xC1 */
10469 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
10470 		.tested		= TEST_UNTESTED,
10471 		.probe		= PROBE_SPI_RDID,
10472 		.probe_timing	= TIMING_ZERO,
10473 		.block_erasers	=
10474 		{
10475 			{
10476 				.eraseblocks = { {4 * 1024, 1024} },
10477 				.block_erase = SPI_BLOCK_ERASE_20,
10478 			}, {
10479 				.eraseblocks = { {64 * 1024, 64} },
10480 				.block_erase = SPI_BLOCK_ERASE_D8,
10481 			}, {
10482 				.eraseblocks = { {4 * 1024 * 1024, 1} },
10483 				.block_erase = SPI_BLOCK_ERASE_60,
10484 			}, {
10485 				.eraseblocks = { {4 * 1024 * 1024, 1} },
10486 				.block_erase = SPI_BLOCK_ERASE_C7,
10487 			}
10488 		},
10489 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enable */
10490 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
10491 		.write		= SPI_CHIP_WRITE256,
10492 		.read		= SPI_CHIP_READ,
10493 		.voltage	= {2700, 3600},
10494 	},
10495 
10496 	{
10497 		.vendor		= "Macronix",
10498 		.name		= "MX25L3233F/MX25L3273E",
10499 		.bustype	= BUS_SPI,
10500 		.manufacture_id	= MACRONIX_ID,
10501 		.model_id	= MACRONIX_MX25L3205,
10502 		.total_size	= 4096,
10503 		.page_size	= 256,
10504 		/* OTP: 512B total; enter 0xB1, exit 0xC1 */
10505 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
10506 		.tested		= TEST_OK_PREW,
10507 		.probe		= PROBE_SPI_RDID,
10508 		.probe_timing	= TIMING_ZERO,
10509 		.block_erasers	=
10510 		{
10511 			{
10512 				.eraseblocks = { {4 * 1024, 1024} },
10513 				.block_erase = SPI_BLOCK_ERASE_20,
10514 			}, {
10515 				.eraseblocks = { {32 * 1024, 128} },
10516 				.block_erase = SPI_BLOCK_ERASE_52,
10517 			}, {
10518 				.eraseblocks = { {64 * 1024, 64} },
10519 				.block_erase = SPI_BLOCK_ERASE_D8,
10520 			}, {
10521 				.eraseblocks = { {4 * 1024 * 1024, 1} },
10522 				.block_erase = SPI_BLOCK_ERASE_60,
10523 			}, {
10524 				.eraseblocks = { {4 * 1024 * 1024, 1} },
10525 				.block_erase = SPI_BLOCK_ERASE_C7,
10526 			},
10527 		},
10528 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD,
10529 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
10530 		.write		= SPI_CHIP_WRITE256,
10531 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and dual I/O supported */
10532 		.voltage	= {2700, 3600}, /* 33F 2.65V..3.6V */
10533 	},
10534 
10535 	{
10536 		.vendor		= "Macronix",
10537 		.name		= "MX25L3255E",
10538 		.bustype	= BUS_SPI,
10539 		.manufacture_id	= MACRONIX_ID,
10540 		.model_id	= MACRONIX_MX25L3255E,
10541 		.total_size	= 4096,
10542 		.page_size	= 256,
10543 		/* OTP: 4K total; enter 0xB1, exit 0xC1 */
10544 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
10545 		.tested		= TEST_OK_PREW,
10546 		.probe		= PROBE_SPI_RDID,
10547 		.probe_timing	= TIMING_ZERO,
10548 		.block_erasers	=
10549 		{
10550 			{
10551 				.eraseblocks = { {4 * 1024, 1024} },
10552 				.block_erase = SPI_BLOCK_ERASE_20,
10553 			}, {
10554 				.eraseblocks = { {32 * 1024, 128} },
10555 				.block_erase = SPI_BLOCK_ERASE_52,
10556 			}, {
10557 				.eraseblocks = { {64 * 1024, 64} },
10558 				.block_erase = SPI_BLOCK_ERASE_D8,
10559 			}, {
10560 				.eraseblocks = { {4 * 1024 * 1024, 1} },
10561 				.block_erase = SPI_BLOCK_ERASE_60,
10562 			}, {
10563 				.eraseblocks = { {4 * 1024 * 1024, 1} },
10564 				.block_erase = SPI_BLOCK_ERASE_C7,
10565 			},
10566 		},
10567 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD,
10568 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
10569 		.write		= SPI_CHIP_WRITE256,
10570 		/* Fast read (0x0B), 2x and 4x I/O supported */
10571 		.read		= SPI_CHIP_READ,
10572 		.voltage	= {2700, 3600},
10573 	},
10574 
10575 	{
10576 		.vendor		= "Macronix",
10577 		.name		= "MX25L4005(A/C)/MX25L4006E",
10578 		.bustype	= BUS_SPI,
10579 		.manufacture_id	= MACRONIX_ID,
10580 		.model_id	= MACRONIX_MX25L4005,
10581 		.total_size	= 512,
10582 		.page_size	= 256,
10583 		.feature_bits	= FEATURE_WRSR_WREN,
10584 		.tested		= TEST_OK_PREW,
10585 		.probe		= PROBE_SPI_RDID,
10586 		.probe_timing	= TIMING_ZERO,
10587 		.block_erasers	=
10588 		{
10589 			{
10590 				.eraseblocks = { {4 * 1024, 128} },
10591 				.block_erase = SPI_BLOCK_ERASE_20,
10592 			}, {
10593 				.eraseblocks = { {64 * 1024, 8} },
10594 				.block_erase = SPI_BLOCK_ERASE_52,
10595 			}, {
10596 				.eraseblocks = { {64 * 1024, 8} },
10597 				.block_erase = SPI_BLOCK_ERASE_D8,
10598 			}, {
10599 				.eraseblocks = { {512 * 1024, 1} },
10600 				.block_erase = SPI_BLOCK_ERASE_60,
10601 			}, {
10602 				.eraseblocks = { {512 * 1024, 1} },
10603 				.block_erase = SPI_BLOCK_ERASE_C7,
10604 			},
10605 		},
10606 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
10607 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
10608 		.write		= SPI_CHIP_WRITE256,
10609 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
10610 		.voltage	= {2700, 3600},
10611 	},
10612 
10613 	{
10614 		.vendor		= "Macronix",
10615 		.name		= "MX25L512(E)/MX25V512(C)",
10616 		.bustype	= BUS_SPI,
10617 		.manufacture_id	= MACRONIX_ID,
10618 		.model_id	= MACRONIX_MX25L512,
10619 		.total_size	= 64,
10620 		.page_size	= 256,
10621 		/* MX25L512E supports SFDP */
10622 		.feature_bits	= FEATURE_WRSR_WREN,
10623 		.tested		= TEST_OK_PREW,
10624 		.probe		= PROBE_SPI_RDID,
10625 		.probe_timing	= TIMING_ZERO,
10626 		.block_erasers	=
10627 		{
10628 			{
10629 				.eraseblocks = { {4 * 1024, 16} },
10630 				.block_erase = SPI_BLOCK_ERASE_20,
10631 			}, {
10632 				.eraseblocks = { {64 * 1024, 1} },
10633 				.block_erase = SPI_BLOCK_ERASE_52,
10634 			}, {
10635 				.eraseblocks = { {64 * 1024, 1} },
10636 				.block_erase = SPI_BLOCK_ERASE_D8,
10637 			}, {
10638 				.eraseblocks = { {64 * 1024, 1} },
10639 				.block_erase = SPI_BLOCK_ERASE_60,
10640 			}, {
10641 				.eraseblocks = { {64 * 1024, 1} },
10642 				.block_erase = SPI_BLOCK_ERASE_C7,
10643 			},
10644 		},
10645 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP1_SRWD,
10646 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
10647 		.write		= SPI_CHIP_WRITE256,
10648 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported, MX25L512E supports dual I/O */
10649 		.voltage	= {2700, 3600}, /* 2.35-3.6V for MX25V512(C) */
10650 	},
10651 
10652 	{
10653 		.vendor		= "Macronix",
10654 		.name		= "MX25L5121E",
10655 		.bustype	= BUS_SPI,
10656 		.manufacture_id	= MACRONIX_ID,
10657 		.model_id	= MACRONIX_MX25L5121E,
10658 		.total_size	= 64,
10659 		.page_size	= 32,
10660 		.feature_bits	= FEATURE_WRSR_WREN,
10661 		.tested		= TEST_OK_PREW,
10662 		.probe		= PROBE_SPI_RDID,
10663 		.probe_timing	= TIMING_ZERO,
10664 		.block_erasers	=
10665 		{
10666 			{
10667 				.eraseblocks = { {4 * 1024, 16} },
10668 				.block_erase = SPI_BLOCK_ERASE_20,
10669 			}, {
10670 				.eraseblocks = { {64 * 1024, 1} },
10671 				.block_erase = SPI_BLOCK_ERASE_52,
10672 			}, {
10673 				.eraseblocks = { {64 * 1024, 1} },
10674 				.block_erase = SPI_BLOCK_ERASE_D8,
10675 			}, {
10676 				.eraseblocks = { {64 * 1024, 1} },
10677 				.block_erase = SPI_BLOCK_ERASE_60,
10678 			}, {
10679 				.eraseblocks = { {64 * 1024, 1} },
10680 				.block_erase = SPI_BLOCK_ERASE_C7,
10681 			},
10682 		},
10683 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP1_SRWD,
10684 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
10685 		.write		= SPI_CHIP_WRITE256,
10686 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
10687 		.voltage	= {2700, 3600},
10688 	},
10689 
10690 	{
10691 		.vendor		= "Macronix",
10692 		.name		= "MX25L6405",
10693 		.bustype	= BUS_SPI,
10694 		.manufacture_id	= MACRONIX_ID,
10695 		.model_id	= MACRONIX_MX25L6405,
10696 		.total_size	= 8192,
10697 		.page_size	= 256,
10698 		/* Has an additional 512B EEPROM sector */
10699 		.feature_bits	= FEATURE_WRSR_WREN,
10700 		.tested		= TEST_OK_PREW,
10701 		.probe		= PROBE_SPI_RDID,
10702 		.probe_timing	= TIMING_ZERO,
10703 		.block_erasers	=
10704 		{
10705 			{
10706 				.eraseblocks = { {64 * 1024, 128} },
10707 				.block_erase = SPI_BLOCK_ERASE_20,
10708 			}, {
10709 				.eraseblocks = { {64 * 1024, 128} },
10710 				.block_erase = SPI_BLOCK_ERASE_D8,
10711 			}, {
10712 				.eraseblocks = { {8 * 1024 * 1024, 1} },
10713 				.block_erase = SPI_BLOCK_ERASE_60,
10714 			}, {
10715 				.eraseblocks = { {8 * 1024 * 1024, 1} },
10716 				.block_erase = SPI_BLOCK_ERASE_C7,
10717 			}
10718 		},
10719 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6: error flag */
10720 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
10721 		.write		= SPI_CHIP_WRITE256,
10722 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
10723 		.voltage	= {2700, 3600},
10724 		.reg_bits	=
10725 		{
10726 			.srp    = {STATUS1, 7, RW},
10727 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}, {STATUS1, 5, RW}},
10728 		},
10729 		.decode_range	= DECODE_RANGE_SPI25,
10730 	},
10731 
10732 	{
10733 		.vendor		= "Macronix",
10734 		.name		= "MX25L6405D",
10735 		.bustype	= BUS_SPI,
10736 		.manufacture_id	= MACRONIX_ID,
10737 		.model_id	= MACRONIX_MX25L6405,
10738 		.total_size	= 8192,
10739 		.page_size	= 256,
10740 		/* OTP: 64B total; enter 0xB1, exit 0xC1 */
10741 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
10742 		.tested		= TEST_OK_PREW,
10743 		.probe		= PROBE_SPI_RDID,
10744 		.probe_timing	= TIMING_ZERO,
10745 		.block_erasers	=
10746 		{
10747 			{
10748 				.eraseblocks = { {4 * 1024, 2048} },
10749 				.block_erase = SPI_BLOCK_ERASE_20,
10750 			}, {
10751 				.eraseblocks = { {64 * 1024, 128} },
10752 				.block_erase = SPI_BLOCK_ERASE_D8,
10753 			}, {
10754 				.eraseblocks = { {8 * 1024 * 1024, 1} },
10755 				.block_erase = SPI_BLOCK_ERASE_60,
10756 			}, {
10757 				.eraseblocks = { {8 * 1024 * 1024, 1} },
10758 				.block_erase = SPI_BLOCK_ERASE_C7,
10759 			}
10760 		},
10761 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6: continuously program mode */
10762 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
10763 		.write		= SPI_CHIP_WRITE256,
10764 		.read		= SPI_CHIP_READ, /* Fast read (0x0B), dual I/O read (0xBB) supported */
10765 		.voltage	= {2700, 3600},
10766 		.reg_bits	=
10767 		{
10768 			.srp    = {STATUS1, 7, RW},
10769 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
10770 			.cmp    = {STATUS1, 5, RW}, /* Called BP3 in datasheet, acts like CMP */
10771 		},
10772 		.decode_range	= DECODE_RANGE_SPI25_BIT_CMP,
10773 	},
10774 
10775 	{
10776 		.vendor		= "Macronix",
10777 		.name		= "MX25L6406E/MX25L6408E",
10778 		.bustype	= BUS_SPI,
10779 		.manufacture_id	= MACRONIX_ID,
10780 		.model_id	= MACRONIX_MX25L6405,
10781 		.total_size	= 8192,
10782 		.page_size	= 256,
10783 		/* MX25L6406E supports SFDP */
10784 		/* OTP: 06E 64B total; enter 0xB1, exit 0xC1 */
10785 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
10786 		.tested		= TEST_OK_PREWB,
10787 		.probe		= PROBE_SPI_RDID,
10788 		.probe_timing	= TIMING_ZERO,
10789 		.block_erasers	=
10790 		{
10791 			{
10792 				.eraseblocks = { {4 * 1024, 2048} },
10793 				.block_erase = SPI_BLOCK_ERASE_20,
10794 			}, {
10795 				.eraseblocks = { {64 * 1024, 128} },
10796 				.block_erase = SPI_BLOCK_ERASE_52,
10797 			}, {
10798 				.eraseblocks = { {64 * 1024, 128} },
10799 				.block_erase = SPI_BLOCK_ERASE_D8,
10800 			}, {
10801 				.eraseblocks = { {8 * 1024 * 1024, 1} },
10802 				.block_erase = SPI_BLOCK_ERASE_60,
10803 			}, {
10804 				.eraseblocks = { {8 * 1024 * 1024, 1} },
10805 				.block_erase = SPI_BLOCK_ERASE_C7,
10806 			}
10807 		},
10808 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD,
10809 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
10810 		.write		= SPI_CHIP_WRITE256,
10811 		.read		= SPI_CHIP_READ, /* Fast read (0x0B), dual I/O read supported */
10812 		.voltage	= {2700, 3600},
10813 		.reg_bits	=
10814 		{
10815 			.srp    = {STATUS1, 7, RW},
10816 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
10817 			.cmp    = {STATUS1, 5, RW}, /* Called BP3 in datasheet, acts like CMP */
10818 		},
10819 		.decode_range	= DECODE_RANGE_SPI25_BIT_CMP,
10820 	},
10821 
10822 	{
10823 		.vendor		= "Macronix",
10824 		.name		= "MX25L6436E/MX25L6445E/MX25L6465E",
10825 		.bustype	= BUS_SPI,
10826 		.manufacture_id	= MACRONIX_ID,
10827 		.model_id	= MACRONIX_MX25L6405,
10828 		.total_size	= 8192,
10829 		.page_size	= 256,
10830 		/* supports SFDP */
10831 		/* OTP: 512B total; enter 0xB1, exit 0xC1 */
10832 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_SCUR,
10833 		.tested		= TEST_OK_PREWB,
10834 		.probe		= PROBE_SPI_RDID,
10835 		.probe_timing	= TIMING_ZERO,
10836 		.block_erasers	=
10837 		{
10838 			{
10839 				.eraseblocks = { {4 * 1024, 2048} },
10840 				.block_erase = SPI_BLOCK_ERASE_20,
10841 			}, {
10842 				.eraseblocks = { {32 * 1024, 256} },
10843 				.block_erase = SPI_BLOCK_ERASE_52,
10844 			}, {
10845 				.eraseblocks = { {64 * 1024, 128} },
10846 				.block_erase = SPI_BLOCK_ERASE_D8,
10847 			}, {
10848 				.eraseblocks = { {8 * 1024 * 1024, 1} },
10849 				.block_erase = SPI_BLOCK_ERASE_60,
10850 			}, {
10851 				.eraseblocks = { {8 * 1024 * 1024, 1} },
10852 				.block_erase = SPI_BLOCK_ERASE_C7,
10853 			}
10854 		},
10855 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enable */
10856 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
10857 		.write		= SPI_CHIP_WRITE256,
10858 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
10859 		.voltage	= {2700, 3600},
10860 		.reg_bits	=
10861 		{
10862 			.srp    = {STATUS1, 7, RW},
10863 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}, {STATUS1, 5, RW}},
10864 			.wps    = {SECURITY, 7, OTP}, /* This bit is set by WPSEL command */
10865 		},
10866 		.decode_range	= DECODE_RANGE_SPI25_2X_BLOCK,
10867 	},
10868 
10869 	{
10870 		.vendor		= "Macronix",
10871 		.name		= "MX25L6473E",
10872 		.bustype	= BUS_SPI,
10873 		.manufacture_id	= MACRONIX_ID,
10874 		.model_id	= MACRONIX_MX25L6405,
10875 		.total_size	= 8192,
10876 		.page_size	= 256,
10877 		/* supports SFDP */
10878 		/* OTP: 512B total; enter 0xB1, exit 0xC1 */
10879 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_WRSR_EXT2 | FEATURE_SCUR,
10880 		.tested		= TEST_OK_PREW,
10881 		.probe		= PROBE_SPI_RDID,
10882 		.probe_timing	= TIMING_ZERO,
10883 		.block_erasers	=
10884 		{
10885 			{
10886 				.eraseblocks = { {4 * 1024, 2048} },
10887 				.block_erase = SPI_BLOCK_ERASE_20,
10888 			}, {
10889 				.eraseblocks = { {32 * 1024, 256} },
10890 				.block_erase = SPI_BLOCK_ERASE_52,
10891 			}, {
10892 				.eraseblocks = { {64 * 1024, 128} },
10893 				.block_erase = SPI_BLOCK_ERASE_D8,
10894 			}, {
10895 				.eraseblocks = { {8 * 1024 * 1024, 1} },
10896 				.block_erase = SPI_BLOCK_ERASE_60,
10897 			}, {
10898 				.eraseblocks = { {8 * 1024 * 1024, 1} },
10899 				.block_erase = SPI_BLOCK_ERASE_C7,
10900 			}
10901 		},
10902 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enable */
10903 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
10904 		.write		= SPI_CHIP_WRITE256,
10905 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
10906 		.voltage	= {2700, 3600},
10907 		.reg_bits	=
10908 		{
10909 			.srp    = {STATUS1, 7, RW},
10910 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}, {STATUS1, 5, RW}},
10911 			.tb     = {CONFIG, 3, OTP},
10912 			.wps    = {SECURITY, 7, OTP}, /* This bit is set by WPSEL command */
10913 		},
10914 		.decode_range	= DECODE_RANGE_SPI25,
10915 	},
10916 
10917 	{
10918 		.vendor		= "Macronix",
10919 		.name		= "MX25L6473F",
10920 		.bustype	= BUS_SPI,
10921 		.manufacture_id	= MACRONIX_ID,
10922 		.model_id	= MACRONIX_MX25L6405,
10923 		.total_size	= 8192,
10924 		.page_size	= 256,
10925 		/* supports SFDP */
10926 		/* OTP: 512B total; enter 0xB1, exit 0xC1 */
10927 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_WRSR_EXT2,
10928 		.tested		= TEST_OK_PREW,
10929 		.probe		= PROBE_SPI_RDID,
10930 		.probe_timing	= TIMING_ZERO,
10931 		.block_erasers	=
10932 		{
10933 			{
10934 				.eraseblocks = { {4 * 1024, 2048} },
10935 				.block_erase = SPI_BLOCK_ERASE_20,
10936 			}, {
10937 				.eraseblocks = { {32 * 1024, 256} },
10938 				.block_erase = SPI_BLOCK_ERASE_52,
10939 			}, {
10940 				.eraseblocks = { {64 * 1024, 128} },
10941 				.block_erase = SPI_BLOCK_ERASE_D8,
10942 			}, {
10943 				.eraseblocks = { {8 * 1024 * 1024, 1} },
10944 				.block_erase = SPI_BLOCK_ERASE_60,
10945 			}, {
10946 				.eraseblocks = { {8 * 1024 * 1024, 1} },
10947 				.block_erase = SPI_BLOCK_ERASE_C7,
10948 			}
10949 		},
10950 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enable */
10951 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
10952 		.write		= SPI_CHIP_WRITE256,
10953 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
10954 		.voltage	= {2700, 3600},
10955 		.reg_bits	=
10956 		{
10957 			.srp    = {STATUS1, 7, RW},
10958 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}, {STATUS1, 5, RW}},
10959 			.tb     = {CONFIG, 3, OTP},
10960 		},
10961 		.decode_range	= DECODE_RANGE_SPI25,
10962 	},
10963 
10964 	{
10965 		.vendor		= "Macronix",
10966 		.name		= "MX25L6495F",
10967 		.bustype	= BUS_SPI,
10968 		.manufacture_id	= MACRONIX_ID,
10969 		.model_id	= MACRONIX_MX25L6495F,
10970 		.total_size	= 8192,
10971 		.page_size	= 256,
10972 		/* OTP: 1024B total; enter 0xB1, exit 0xC1 */
10973 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
10974 		.tested		= TEST_OK_PREW,
10975 		.probe		= PROBE_SPI_RDID,
10976 		.probe_timing	= TIMING_ZERO,
10977 		.block_erasers	=
10978 		{
10979 			{
10980 				.eraseblocks = { {4 * 1024, 2048} },
10981 				.block_erase = SPI_BLOCK_ERASE_20,
10982 			}, {
10983 				.eraseblocks = { {32 * 1024, 256} },
10984 				.block_erase = SPI_BLOCK_ERASE_52,
10985 			}, {
10986 				.eraseblocks = { {64 * 1024, 128} },
10987 				.block_erase = SPI_BLOCK_ERASE_D8,
10988 			}, {
10989 				.eraseblocks = { {8 * 1024 * 1024, 1} },
10990 				.block_erase = SPI_BLOCK_ERASE_60,
10991 			}, {
10992 				.eraseblocks = { {8 * 1024 * 1024, 1} },
10993 				.block_erase = SPI_BLOCK_ERASE_C7,
10994 			}
10995 		},
10996 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
10997 		.write		= SPI_CHIP_WRITE256,
10998 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
10999 		.voltage	= {2700, 3600},
11000 	},
11001 
11002 	{
11003 		.vendor		= "Macronix",
11004 		.name		= "MX25L8005/MX25L8006E/MX25L8008E/MX25V8005",
11005 		.bustype	= BUS_SPI,
11006 		.manufacture_id	= MACRONIX_ID,
11007 		.model_id	= MACRONIX_MX25L8005,
11008 		.total_size	= 1024,
11009 		.page_size	= 256,
11010 		/* MX25L8006E, MX25L8008E support SFDP */
11011 		/* OTP: 64B total; enter 0xB1, exit 0xC1 (MX25L8006E, MX25L8008E only) */
11012 		.feature_bits	= FEATURE_WRSR_WREN,
11013 		.tested		= TEST_OK_PREW,
11014 		.probe		= PROBE_SPI_RDID,
11015 		.probe_timing	= TIMING_ZERO,
11016 		.block_erasers	=
11017 		{
11018 			{
11019 				.eraseblocks = { {4 * 1024, 256} },
11020 				.block_erase = SPI_BLOCK_ERASE_20,
11021 			}, {
11022 				.eraseblocks = { {64 * 1024, 16} },
11023 				.block_erase = SPI_BLOCK_ERASE_52,
11024 			}, {
11025 				.eraseblocks = { {64 * 1024, 16} },
11026 				.block_erase = SPI_BLOCK_ERASE_D8,
11027 			}, {
11028 				.eraseblocks = { {1024 * 1024, 1} },
11029 				.block_erase = SPI_BLOCK_ERASE_60,
11030 			}, {
11031 				.eraseblocks = { {1024 * 1024, 1} },
11032 				.block_erase = SPI_BLOCK_ERASE_C7,
11033 			},
11034 		},
11035 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
11036 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
11037 		.write		= SPI_CHIP_WRITE256,
11038 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
11039 		.voltage	= {2700, 3600}, /* 2.35-3.6V for MX25V8005 */
11040 	},
11041 
11042 	{
11043 		.vendor		= "Macronix",
11044 		.name		= "MX25R1635F",
11045 		.bustype	= BUS_SPI,
11046 		.manufacture_id	= MACRONIX_ID,
11047 		.model_id	= MACRONIX_MX25R1635F,
11048 		.total_size	= 2048,
11049 		.page_size	= 256,
11050 		/* OTP: 1024B total; enter 0xB1, exit 0xC1 */
11051 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_CFGR,
11052 		.tested		= TEST_OK_PREWB,
11053 		.probe		= PROBE_SPI_RDID,
11054 		.probe_timing	= TIMING_ZERO,
11055 		.block_erasers	=
11056 		{
11057 			{
11058 				.eraseblocks = { {4 * 1024, 512} },
11059 				.block_erase = SPI_BLOCK_ERASE_20,
11060 			}, {
11061 				.eraseblocks = { {32 * 1024, 64} },
11062 				.block_erase = SPI_BLOCK_ERASE_52,
11063 			}, {
11064 				.eraseblocks = { {64 * 1024, 32} },
11065 				.block_erase = SPI_BLOCK_ERASE_D8,
11066 			}, {
11067 				.eraseblocks = { {2 * 1024 * 1024, 1} },
11068 				.block_erase = SPI_BLOCK_ERASE_60,
11069 			}, {
11070 				.eraseblocks = { {2 * 1024 * 1024, 1} },
11071 				.block_erase = SPI_BLOCK_ERASE_C7,
11072 			}
11073 		},
11074 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit 6 is quad enable */
11075 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
11076 		.write		= SPI_CHIP_WRITE256,
11077 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
11078 		.voltage	= {1650, 3600},
11079 		.reg_bits	=
11080 		{
11081 			.srp    = {STATUS1, 7, RW},
11082 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW},  {STATUS1, 5, RW}},
11083 			.tb     = {CONFIG, 3, OTP}
11084 		},
11085 
11086 		.decode_range	= DECODE_RANGE_SPI25,
11087 	},
11088 
11089 	{
11090 		.vendor		= "Macronix",
11091 		.name		= "MX25R2035F",
11092 		.bustype	= BUS_SPI,
11093 		.manufacture_id	= MACRONIX_ID,
11094 		.model_id	= MACRONIX_MX25R2035F,
11095 		.total_size	= 256,
11096 		.page_size	= 256,
11097 		/* OTP: 1024B total; enter 0xB1, exit 0xC1 */
11098 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_CFGR,
11099 		.tested		= TEST_OK_PREWB,
11100 		.probe		= PROBE_SPI_RDID,
11101 		.probe_timing	= TIMING_ZERO,
11102 		.block_erasers	=
11103 		{
11104 			{
11105 				.eraseblocks = { {4 * 1024, 64} },
11106 				.block_erase = SPI_BLOCK_ERASE_20,
11107 			}, {
11108 				.eraseblocks = { {32 * 1024, 8} },
11109 				.block_erase = SPI_BLOCK_ERASE_52,
11110 			}, {
11111 				.eraseblocks = { {64 * 1024, 4} },
11112 				.block_erase = SPI_BLOCK_ERASE_D8,
11113 			}, {
11114 				.eraseblocks = { {1 * 256 * 1024, 1} },
11115 				.block_erase = SPI_BLOCK_ERASE_60,
11116 			}, {
11117 				.eraseblocks = { {1 * 256 * 1024, 1} },
11118 				.block_erase = SPI_BLOCK_ERASE_C7,
11119 			}
11120 		},
11121 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit 6 is quad enable */
11122 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
11123 		.write		= SPI_CHIP_WRITE256,
11124 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
11125 		.voltage	= {1650, 3600},
11126 		.reg_bits	=
11127 		{
11128 			.srp    = {STATUS1, 7, RW},
11129 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW},  {STATUS1, 5, RW}},
11130 			.tb     = {CONFIG, 3, OTP}
11131 		},
11132 
11133 		.decode_range	= DECODE_RANGE_SPI25,
11134 	},
11135 
11136 	{
11137 		.vendor		= "Macronix",
11138 		.name		= "MX25R3235F",
11139 		.bustype	= BUS_SPI,
11140 		.manufacture_id	= MACRONIX_ID,
11141 		.model_id	= MACRONIX_MX25R3235F,
11142 		.total_size	= 4096,
11143 		.page_size	= 256,
11144 		/* OTP: 1024B total; enter 0xB1, exit 0xC1 */
11145 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
11146 		.tested		= TEST_OK_PREW,
11147 		.probe		= PROBE_SPI_RDID,
11148 		.probe_timing	= TIMING_ZERO,
11149 		.block_erasers	=
11150 		{
11151 			{
11152 				.eraseblocks = { {4 * 1024, 1024} },
11153 				.block_erase = SPI_BLOCK_ERASE_20,
11154 			}, {
11155 				.eraseblocks = { {32 * 1024, 128} },
11156 				.block_erase = SPI_BLOCK_ERASE_52,
11157 			}, {
11158 				.eraseblocks = { {64 * 1024, 64} },
11159 				.block_erase = SPI_BLOCK_ERASE_D8,
11160 			}, {
11161 				.eraseblocks = { {4 * 1024 * 1024, 1} },
11162 				.block_erase = SPI_BLOCK_ERASE_60,
11163 			}, {
11164 				.eraseblocks = { {4 * 1024 * 1024, 1} },
11165 				.block_erase = SPI_BLOCK_ERASE_C7,
11166 			}
11167 		},
11168 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit 6 is quad enable */
11169 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
11170 		.write		= SPI_CHIP_WRITE256,
11171 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
11172 		.voltage	= {1650, 3600},
11173 	},
11174 
11175 	{
11176 		.vendor		= "Macronix",
11177 		.name		= "MX25R4035F",
11178 		.bustype	= BUS_SPI,
11179 		.manufacture_id	= MACRONIX_ID,
11180 		.model_id	= MACRONIX_MX25R4035F,
11181 		.total_size	= 512,
11182 		.page_size	= 256,
11183 		/* OTP: 1024B total; enter 0xB1, exit 0xC1 */
11184 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_CFGR,
11185 		.tested		= TEST_OK_PREWB,
11186 		.probe		= PROBE_SPI_RDID,
11187 		.probe_timing	= TIMING_ZERO,
11188 		.block_erasers	=
11189 		{
11190 			{
11191 				.eraseblocks = { {4 * 1024, 128} },
11192 				.block_erase = SPI_BLOCK_ERASE_20,
11193 			}, {
11194 				.eraseblocks = { {32 * 1024, 16} },
11195 				.block_erase = SPI_BLOCK_ERASE_52,
11196 			}, {
11197 				.eraseblocks = { {64 * 1024, 8} },
11198 				.block_erase = SPI_BLOCK_ERASE_D8,
11199 			}, {
11200 				.eraseblocks = { {1 * 512 * 1024, 1} },
11201 				.block_erase = SPI_BLOCK_ERASE_60,
11202 			}, {
11203 				.eraseblocks = { {1 * 512 * 1024, 1} },
11204 				.block_erase = SPI_BLOCK_ERASE_C7,
11205 			}
11206 		},
11207 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit 6 is quad enable */
11208 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
11209 		.write		= SPI_CHIP_WRITE256,
11210 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
11211 		.voltage	= {1650, 3600},
11212 		.reg_bits	=
11213 		{
11214 			.srp    = {STATUS1, 7, RW},
11215 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW},  {STATUS1, 5, RW}},
11216 			.tb     = {CONFIG, 3, OTP}
11217 		},
11218 
11219 		.decode_range	= DECODE_RANGE_SPI25,
11220 	},
11221 
11222 	{
11223 		.vendor		= "Macronix",
11224 		.name		= "MX25R6435F",
11225 		.bustype	= BUS_SPI,
11226 		.manufacture_id	= MACRONIX_ID,
11227 		.model_id	= MACRONIX_MX25R6435F,
11228 		.total_size	= 8192,
11229 		.page_size	= 256,
11230 		/* OTP: 1024B total; enter 0xB1, exit 0xC1 */
11231 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
11232 		.tested		= TEST_OK_PREW,
11233 		.probe		= PROBE_SPI_RDID,
11234 		.probe_timing	= TIMING_ZERO,
11235 		.block_erasers	=
11236 		{
11237 			{
11238 				.eraseblocks = { {4 * 1024, 2048} },
11239 				.block_erase = SPI_BLOCK_ERASE_20,
11240 			}, {
11241 				.eraseblocks = { {32 * 1024, 256} },
11242 				.block_erase = SPI_BLOCK_ERASE_52,
11243 			}, {
11244 				.eraseblocks = { {64 * 1024, 128} },
11245 				.block_erase = SPI_BLOCK_ERASE_D8,
11246 			}, {
11247 				.eraseblocks = { {8 * 1024 * 1024, 1} },
11248 				.block_erase = SPI_BLOCK_ERASE_60,
11249 			}, {
11250 				.eraseblocks = { {8 * 1024 * 1024, 1} },
11251 				.block_erase = SPI_BLOCK_ERASE_C7,
11252 			}
11253 		},
11254 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enable */
11255 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
11256 		.write		= SPI_CHIP_WRITE256,
11257 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
11258 		.voltage	= {1650, 3600},
11259 	},
11260 
11261 	{
11262 		.vendor		= "Macronix",
11263 		.name		= "MX25R8035F",
11264 		.bustype	= BUS_SPI,
11265 		.manufacture_id	= MACRONIX_ID,
11266 		.model_id	= MACRONIX_MX25R8035F,
11267 		.total_size	= 1024,
11268 		.page_size	= 256,
11269 		/* OTP: 1024B total; enter 0xB1, exit 0xC1 */
11270 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_CFGR,
11271 		.tested		= TEST_OK_PREWB,
11272 		.probe		= PROBE_SPI_RDID,
11273 		.probe_timing	= TIMING_ZERO,
11274 		.block_erasers	=
11275 		{
11276 			{
11277 				.eraseblocks = { {4 * 1024, 256} },
11278 				.block_erase = SPI_BLOCK_ERASE_20,
11279 			}, {
11280 				.eraseblocks = { {32 * 1024, 32} },
11281 				.block_erase = SPI_BLOCK_ERASE_52,
11282 			}, {
11283 				.eraseblocks = { {64 * 1024, 16} },
11284 				.block_erase = SPI_BLOCK_ERASE_D8,
11285 			}, {
11286 				.eraseblocks = { {1 * 1024 * 1024, 1} },
11287 				.block_erase = SPI_BLOCK_ERASE_60,
11288 			}, {
11289 				.eraseblocks = { {1 * 1024 * 1024, 1} },
11290 				.block_erase = SPI_BLOCK_ERASE_C7,
11291 			}
11292 		},
11293 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit 6 is quad enable */
11294 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
11295 		.write		= SPI_CHIP_WRITE256,
11296 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
11297 		.voltage	= {1650, 3600},
11298 		.reg_bits	=
11299 		{
11300 			.srp    = {STATUS1, 7, RW},
11301 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW},  {STATUS1, 5, RW}},
11302 			.tb     = {CONFIG, 3, OTP}
11303 		},
11304 
11305 		.decode_range	= DECODE_RANGE_SPI25,
11306 	},
11307 
11308 	{
11309 		.vendor		= "Macronix",
11310 		.name		= "MX25V4035F",
11311 		.bustype	= BUS_SPI,
11312 		.manufacture_id	= MACRONIX_ID,
11313 		.model_id	= MACRONIX_MX25V4035F,
11314 		.total_size	= 512,
11315 		.page_size	= 256,
11316 		/* OTP: 8KiB total; enter 0xB1, exit 0xC1 */
11317 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI | FEATURE_SCUR,
11318 		.tested		= TEST_UNTESTED,
11319 		.probe		= PROBE_SPI_RDID,
11320 		.probe_timing	= TIMING_ZERO,
11321 		.block_erasers	=
11322 		{
11323 			{
11324 				.eraseblocks = { { 4 * 1024, 128} },
11325 				.block_erase = SPI_BLOCK_ERASE_20,
11326 			}, {
11327 				.eraseblocks = { {32 * 1024,  16} },
11328 				.block_erase = SPI_BLOCK_ERASE_52,
11329 			}, {
11330 				.eraseblocks = { {64 * 1024,   8} },
11331 				.block_erase = SPI_BLOCK_ERASE_D8,
11332 			}, {
11333 				.eraseblocks = { {512 * 1024, 1} },
11334 				.block_erase = SPI_BLOCK_ERASE_C7,
11335 			}
11336 		},
11337 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enable */
11338 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
11339 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
11340 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
11341 		.voltage	= {2300, 3600},
11342 	},
11343 	{
11344 		.vendor		= "Macronix",
11345 		.name		= "MX25V8035F",
11346 		.bustype	= BUS_SPI,
11347 		.manufacture_id	= MACRONIX_ID,
11348 		.model_id	= MACRONIX_MX25V8035F,
11349 		.total_size	= 1024,
11350 		.page_size	= 256,
11351 		/* OTP: 8KiB total; enter 0xB1, exit 0xC1 */
11352 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI | FEATURE_SCUR,
11353 		.tested		= TEST_UNTESTED,
11354 		.probe		= PROBE_SPI_RDID,
11355 		.probe_timing	= TIMING_ZERO,
11356 		.block_erasers	=
11357 		{
11358 			{
11359 				.eraseblocks = { { 4 * 1024, 256} },
11360 				.block_erase = SPI_BLOCK_ERASE_20,
11361 			}, {
11362 				.eraseblocks = { {32 * 1024,  32} },
11363 				.block_erase = SPI_BLOCK_ERASE_52,
11364 			}, {
11365 				.eraseblocks = { {64 * 1024,  16} },
11366 				.block_erase = SPI_BLOCK_ERASE_D8,
11367 			}, {
11368 				.eraseblocks = { {1 * 1024 * 1024, 1} },
11369 				.block_erase = SPI_BLOCK_ERASE_C7,
11370 			}
11371 		},
11372 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enable */
11373 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
11374 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
11375 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
11376 		.voltage	= {2300, 3600},
11377 	},
11378 	{
11379 		.vendor		= "Macronix",
11380 		.name		= "MX25V1635F",
11381 		.bustype	= BUS_SPI,
11382 		.manufacture_id	= MACRONIX_ID,
11383 		.model_id	= MACRONIX_MX25V1635F,
11384 		.total_size	= 2048,
11385 		.page_size	= 256,
11386 		/* OTP: 8KiB total; enter 0xB1, exit 0xC1 */
11387 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI | FEATURE_SCUR,
11388 		.tested		= TEST_OK_PREW,
11389 		.probe		= PROBE_SPI_RDID,
11390 		.probe_timing	= TIMING_ZERO,
11391 		.block_erasers	=
11392 		{
11393 			{
11394 				.eraseblocks = { { 4 * 1024, 512} },
11395 				.block_erase = SPI_BLOCK_ERASE_20,
11396 			}, {
11397 				.eraseblocks = { {32 * 1024,  64} },
11398 				.block_erase = SPI_BLOCK_ERASE_52,
11399 			}, {
11400 				.eraseblocks = { {64 * 1024,  32} },
11401 				.block_erase = SPI_BLOCK_ERASE_D8,
11402 			}, {
11403 				.eraseblocks = { {2 * 1024 * 1024, 1} },
11404 				.block_erase = SPI_BLOCK_ERASE_60,
11405 			}
11406 		},
11407 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enable */
11408 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
11409 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
11410 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
11411 		.voltage	= {2300, 3600},
11412 	},
11413 
11414 	{
11415 		.vendor		= "Macronix",
11416 		.name		= "MX25U12835F",
11417 		.bustype	= BUS_SPI,
11418 		.manufacture_id	= MACRONIX_ID,
11419 		.model_id	= MACRONIX_MX25U12835E,
11420 		.total_size	= 16384,
11421 		.page_size	= 256,
11422 		/* OTP: 512B total; enter 0xB1, exit 0xC1 */
11423 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
11424 		.tested		= TEST_OK_PREW,
11425 		.probe		= PROBE_SPI_RDID,
11426 		.probe_timing	= TIMING_ZERO,
11427 		.block_erasers	=
11428 		{
11429 			{
11430 				.eraseblocks = { {4 * 1024, 4096} },
11431 				.block_erase = SPI_BLOCK_ERASE_20,
11432 			}, {
11433 				.eraseblocks = { {32 * 1024, 512} },
11434 				.block_erase = SPI_BLOCK_ERASE_52,
11435 			}, {
11436 				.eraseblocks = { {64 * 1024, 256} },
11437 				.block_erase = SPI_BLOCK_ERASE_D8,
11438 			}, {
11439 				.eraseblocks = { {16 * 1024 * 1024, 1} },
11440 				.block_erase = SPI_BLOCK_ERASE_60,
11441 			}, {
11442 				.eraseblocks = { {16 * 1024 * 1024, 1} },
11443 				.block_erase = SPI_BLOCK_ERASE_C7,
11444 			}
11445 		},
11446 		/* TODO: security register */
11447 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enable */
11448 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
11449 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
11450 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
11451 		.voltage	= {1650, 2000},
11452 	},
11453 
11454 	{
11455 		.vendor		= "Macronix",
11456 		.name		= "MX25U1635E",
11457 		.bustype	= BUS_SPI,
11458 		.manufacture_id	= MACRONIX_ID,
11459 		.model_id	= MACRONIX_MX25U1635E,
11460 		.total_size	= 2048,
11461 		.page_size	= 256,
11462 		/* OTP: 512B total; enter 0xB1, exit 0xC1 */
11463 		/* QPI enable 0x35, disable 0xF5 (0xFF et al. work too) */
11464 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
11465 		.tested		= TEST_OK_PR,
11466 		.probe		= PROBE_SPI_RDID,
11467 		.probe_timing	= TIMING_ZERO,
11468 		.block_erasers	=
11469 		{
11470 			{
11471 				.eraseblocks = { {4 * 1024, 512} },
11472 				.block_erase = SPI_BLOCK_ERASE_20,
11473 			}, {
11474 				.eraseblocks = { {32 * 1024, 64} },
11475 				.block_erase = SPI_BLOCK_ERASE_52,
11476 			}, {
11477 				.eraseblocks = { {64 * 1024, 32} },
11478 				.block_erase = SPI_BLOCK_ERASE_D8,
11479 			}, {
11480 				.eraseblocks = { {2 * 1024 * 1024, 1} },
11481 				.block_erase = SPI_BLOCK_ERASE_60,
11482 			}, {
11483 				.eraseblocks = { {2 * 1024 * 1024, 1} },
11484 				.block_erase = SPI_BLOCK_ERASE_C7,
11485 			}
11486 		},
11487 		/* TODO: security register */
11488 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enable */
11489 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
11490 		.write		= SPI_CHIP_WRITE256,
11491 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
11492 		.voltage	= {1650, 2000},
11493 	},
11494 
11495 	{
11496 		.vendor		= "Macronix",
11497 		.name		= "MX25U25635F",
11498 		.bustype	= BUS_SPI,
11499 		.manufacture_id	= MACRONIX_ID,
11500 		.model_id	= MACRONIX_MX25U25635F,
11501 		.total_size	= 32768,
11502 		.page_size	= 256,
11503 		/* OTP: 512B total; enter 0xB1, exit 0xC1 */
11504 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI | FEATURE_4BA,
11505 		.tested		= TEST_OK_PREW,
11506 		.probe		= PROBE_SPI_RDID,
11507 		.probe_timing	= TIMING_ZERO,
11508 		.block_erasers	=
11509 		{
11510 			{
11511 				.eraseblocks = { {4 * 1024, 8192} },
11512 				.block_erase = SPI_BLOCK_ERASE_21,
11513 			}, {
11514 				.eraseblocks = { {4 * 1024, 8192} },
11515 				.block_erase = SPI_BLOCK_ERASE_20,
11516 			}, {
11517 				.eraseblocks = { {32 * 1024, 1024} },
11518 				.block_erase = SPI_BLOCK_ERASE_5C,
11519 			}, {
11520 				.eraseblocks = { {32 * 1024, 1024} },
11521 				.block_erase = SPI_BLOCK_ERASE_52,
11522 			}, {
11523 				.eraseblocks = { {64 * 1024, 512} },
11524 				.block_erase = SPI_BLOCK_ERASE_DC,
11525 			}, {
11526 				.eraseblocks = { {64 * 1024, 512} },
11527 				.block_erase = SPI_BLOCK_ERASE_D8,
11528 			}, {
11529 				.eraseblocks = { {32 * 1024 * 1024, 1} },
11530 				.block_erase = SPI_BLOCK_ERASE_60,
11531 			}, {
11532 				.eraseblocks = { {32 * 1024 * 1024, 1} },
11533 				.block_erase = SPI_BLOCK_ERASE_C7,
11534 			}
11535 		},
11536 		/* TODO: security register */
11537 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enable */
11538 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
11539 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
11540 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
11541 		.voltage	= {1650, 2000},
11542 	},
11543 
11544 	{
11545 		.vendor		= "Macronix",
11546 		.name		= "MX25U25643G",
11547 		.bustype	= BUS_SPI,
11548 		.manufacture_id	= MACRONIX_ID,
11549 		.model_id	= MACRONIX_MX25U25635F,
11550 		.total_size	= 32768,
11551 		.page_size	= 256,
11552 		/* OTP: 512B total; enter 0xB1, exit 0xC1 */
11553 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI | FEATURE_4BA | FEATURE_CFGR | FEATURE_SCUR,
11554 		.tested		= TEST_OK_PREWB,
11555 		.probe		= PROBE_SPI_RDID,
11556 		.probe_timing	= TIMING_ZERO,
11557 		.block_erasers	=
11558 		{
11559 			{
11560 				.eraseblocks = { {4 * 1024, 8192} },
11561 				.block_erase = SPI_BLOCK_ERASE_21,
11562 			}, {
11563 				.eraseblocks = { {4 * 1024, 8192} },
11564 				.block_erase = SPI_BLOCK_ERASE_20,
11565 			}, {
11566 				.eraseblocks = { {32 * 1024, 1024} },
11567 				.block_erase = SPI_BLOCK_ERASE_5C,
11568 			}, {
11569 				.eraseblocks = { {32 * 1024, 1024} },
11570 				.block_erase = SPI_BLOCK_ERASE_52,
11571 			}, {
11572 				.eraseblocks = { {64 * 1024, 512} },
11573 				.block_erase = SPI_BLOCK_ERASE_DC,
11574 			}, {
11575 				.eraseblocks = { {64 * 1024, 512} },
11576 				.block_erase = SPI_BLOCK_ERASE_D8,
11577 			}, {
11578 				.eraseblocks = { {32 * 1024 * 1024, 1} },
11579 				.block_erase = SPI_BLOCK_ERASE_60,
11580 			}, {
11581 				.eraseblocks = { {32 * 1024 * 1024, 1} },
11582 				.block_erase = SPI_BLOCK_ERASE_C7,
11583 			}
11584 		},
11585 		/* TODO: security register */
11586 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enable */
11587 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
11588 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
11589 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
11590 		.voltage	= {1650, 2000},
11591 		.reg_bits	=
11592 		{
11593 			.srp    = {STATUS1, 7, RW},
11594 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}, {STATUS1, 5, RW}},
11595 			.tb     = {CONFIG, 3, OTP},
11596 			.wps    = {SECURITY, 7, OTP}, /* This bit is set by WPSEL command */
11597 		},
11598 		.decode_range	= DECODE_RANGE_SPI25,
11599 	},
11600 
11601 	{
11602 		.vendor		= "Macronix",
11603 		.name		= "MX25U25645G",
11604 		.bustype	= BUS_SPI,
11605 		.manufacture_id	= MACRONIX_ID,
11606 		.model_id	= MACRONIX_MX25U25635F,
11607 		.total_size	= 32768,
11608 		.page_size	= 256,
11609 		/* OTP: 1024B total; enter 0xB1, exit 0xC1 */
11610 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI | FEATURE_4BA | FEATURE_CFGR | FEATURE_SCUR,
11611 		.tested		= TEST_OK_PREWB,
11612 		.probe		= PROBE_SPI_RDID,
11613 		.probe_timing	= TIMING_ZERO,
11614 		.block_erasers	=
11615 		{
11616 			{
11617 				.eraseblocks = { {4 * 1024, 8192} },
11618 				.block_erase = SPI_BLOCK_ERASE_21,
11619 			}, {
11620 				.eraseblocks = { {4 * 1024, 8192} },
11621 				.block_erase = SPI_BLOCK_ERASE_20,
11622 			}, {
11623 				.eraseblocks = { {32 * 1024, 1024} },
11624 				.block_erase = SPI_BLOCK_ERASE_5C,
11625 			}, {
11626 				.eraseblocks = { {32 * 1024, 1024} },
11627 				.block_erase = SPI_BLOCK_ERASE_52,
11628 			}, {
11629 				.eraseblocks = { {64 * 1024, 512} },
11630 				.block_erase = SPI_BLOCK_ERASE_DC,
11631 			}, {
11632 				.eraseblocks = { {64 * 1024, 512} },
11633 				.block_erase = SPI_BLOCK_ERASE_D8,
11634 			}, {
11635 				.eraseblocks = { {32 * 1024 * 1024, 1} },
11636 				.block_erase = SPI_BLOCK_ERASE_60,
11637 			}, {
11638 				.eraseblocks = { {32 * 1024 * 1024, 1} },
11639 				.block_erase = SPI_BLOCK_ERASE_C7,
11640 			}
11641 		},
11642 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enable */
11643 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
11644 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
11645 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
11646 		.voltage	= {1700, 2000},
11647 		.reg_bits	=
11648 		{
11649 			.srp    = {STATUS1, 7, RW},
11650 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}, {STATUS1, 5, RW}},
11651 			.tb     = {CONFIG, 3, OTP},
11652 			.wps    = {SECURITY, 7, OTP}, /* This bit is set by WPSEL command */
11653 		},
11654 		.decode_range	= DECODE_RANGE_SPI25,
11655 	},
11656 
11657 	{
11658 		.vendor		= "Macronix",
11659 		.name		= "MX25U3235E/F",
11660 		.bustype	= BUS_SPI,
11661 		.manufacture_id	= MACRONIX_ID,
11662 		.model_id	= MACRONIX_MX25U3235E,
11663 		.total_size	= 4096,
11664 		.page_size	= 256,
11665 		/* F model supports SFDP */
11666 		/* OTP: 512B total; enter 0xB1, exit 0xC1 */
11667 		/* QPI enable 0x35, disable 0xF5 (0xFF et al. work too) */
11668 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
11669 		.tested		= TEST_OK_PREW,
11670 		.probe		= PROBE_SPI_RDID,
11671 		.probe_timing	= TIMING_ZERO,
11672 		.block_erasers	=
11673 		{
11674 			{
11675 				.eraseblocks = { {4 * 1024, 1024} },
11676 				.block_erase = SPI_BLOCK_ERASE_20,
11677 			}, {
11678 				.eraseblocks = { {32 * 1024, 128} },
11679 				.block_erase = SPI_BLOCK_ERASE_52,
11680 			}, {
11681 				.eraseblocks = { {64 * 1024, 64} },
11682 				.block_erase = SPI_BLOCK_ERASE_D8,
11683 			}, {
11684 				.eraseblocks = { {4 * 1024 * 1024, 1} },
11685 				.block_erase = SPI_BLOCK_ERASE_60,
11686 			}, {
11687 				.eraseblocks = { {4 * 1024 * 1024, 1} },
11688 				.block_erase = SPI_BLOCK_ERASE_C7,
11689 			}
11690 		},
11691 		/* TODO: security register */
11692 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enable */
11693 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
11694 		.write		= SPI_CHIP_WRITE256,
11695 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
11696 		.voltage	= {1650, 2000},
11697 	},
11698 
11699 	{
11700 		.vendor		= "Macronix",
11701 		.name		= "MX25U51245G",
11702 		.bustype	= BUS_SPI,
11703 		.manufacture_id	= MACRONIX_ID,
11704 		.model_id	= MACRONIX_MX25U51245G,
11705 		.total_size	= 65536,
11706 		.page_size	= 256,
11707 		/* OTP: 512B factory programmed and 512B customer programmed; enter 0xB1, exit 0xC1 */
11708 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI | FEATURE_4BA,
11709 		.tested		= TEST_OK_PREW,
11710 		.probe		= PROBE_SPI_RDID,
11711 		.probe_timing	= TIMING_ZERO,
11712 		.block_erasers	=
11713 		{
11714 			{
11715 				.eraseblocks = { {4 * 1024, 16384} },
11716 				.block_erase = SPI_BLOCK_ERASE_21,
11717 			}, {
11718 				.eraseblocks = { {4 * 1024, 16384} },
11719 				.block_erase = SPI_BLOCK_ERASE_20,
11720 			}, {
11721 				.eraseblocks = { {32 * 1024, 2048} },
11722 				.block_erase = SPI_BLOCK_ERASE_5C,
11723 			}, {
11724 				.eraseblocks = { {32 * 1024, 2048} },
11725 				.block_erase = SPI_BLOCK_ERASE_52,
11726 			}, {
11727 				.eraseblocks = { {64 * 1024, 1024} },
11728 				.block_erase = SPI_BLOCK_ERASE_DC,
11729 			}, {
11730 				.eraseblocks = { {64 * 1024, 1024} },
11731 				.block_erase = SPI_BLOCK_ERASE_D8,
11732 			}, {
11733 				.eraseblocks = { {64 * 1024 * 1024, 1} },
11734 				.block_erase = SPI_BLOCK_ERASE_60,
11735 			}, {
11736 				.eraseblocks = { {64 * 1024 * 1024, 1} },
11737 				.block_erase = SPI_BLOCK_ERASE_C7,
11738 			}
11739 		},
11740 		/* TODO: security register */
11741 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enable */
11742 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
11743 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
11744 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
11745 		.voltage	= {1650, 2000},
11746 	},
11747 
11748 	{
11749 		.vendor		= "Macronix",
11750 		.name		= "MX25U6435E/F",
11751 		.bustype	= BUS_SPI,
11752 		.manufacture_id	= MACRONIX_ID,
11753 		.model_id	= MACRONIX_MX25U6435E,
11754 		.total_size	= 8192,
11755 		.page_size	= 256,
11756 		/* F model supports SFDP */
11757 		/* OTP: 512B total; enter 0xB1, exit 0xC1 */
11758 		/* QPI enable 0x35, disable 0xF5 (0xFF et al. work too) */
11759 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
11760 		.tested		= TEST_OK_PREW,
11761 		.probe		= PROBE_SPI_RDID,
11762 		.probe_timing	= TIMING_ZERO,
11763 		.block_erasers	=
11764 		{
11765 			{
11766 				.eraseblocks = { {4 * 1024, 2048} },
11767 				.block_erase = SPI_BLOCK_ERASE_20,
11768 			}, {
11769 				.eraseblocks = { {32 * 1024, 256} },
11770 				.block_erase = SPI_BLOCK_ERASE_52,
11771 			}, {
11772 				.eraseblocks = { {64 * 1024, 128} },
11773 				.block_erase = SPI_BLOCK_ERASE_D8,
11774 			}, {
11775 				.eraseblocks = { {8 * 1024 * 1024, 1} },
11776 				.block_erase = SPI_BLOCK_ERASE_60,
11777 			}, {
11778 				.eraseblocks = { {8 * 1024 * 1024, 1} },
11779 				.block_erase = SPI_BLOCK_ERASE_C7,
11780 			}
11781 		},
11782 		/* TODO: security register */
11783 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enable */
11784 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
11785 		.write		= SPI_CHIP_WRITE256,
11786 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
11787 		.voltage	= {1650, 2000},
11788 	},
11789 
11790 	{
11791 		.vendor		= "Macronix",
11792 		.name		= "MX25U8032E",
11793 		.bustype	= BUS_SPI,
11794 		.manufacture_id	= MACRONIX_ID,
11795 		.model_id	= MACRONIX_MX25U8032E,
11796 		.total_size	= 1024,
11797 		.page_size	= 256,
11798 		/* OTP: 512B total; enter 0xB1, exit 0xC1 */
11799 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
11800 		.tested		= TEST_OK_PREW,
11801 		.probe		= PROBE_SPI_RDID,
11802 		.probe_timing	= TIMING_ZERO,
11803 		.block_erasers	=
11804 		{
11805 			{
11806 				.eraseblocks = { {4 * 1024, 256} },
11807 				.block_erase = SPI_BLOCK_ERASE_20,
11808 			}, {
11809 				.eraseblocks = { {32 * 1024, 32} },
11810 				.block_erase = SPI_BLOCK_ERASE_52,
11811 			}, {
11812 				.eraseblocks = { {64 * 1024, 16} },
11813 				.block_erase = SPI_BLOCK_ERASE_D8,
11814 			}, {
11815 				.eraseblocks = { {1024 * 1024, 1} },
11816 				.block_erase = SPI_BLOCK_ERASE_60,
11817 			}, {
11818 				.eraseblocks = { {1024 * 1024, 1} },
11819 				.block_erase = SPI_BLOCK_ERASE_C7,
11820 			}
11821 		},
11822 		/* TODO: security register */
11823 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enable */
11824 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
11825 		.write		= SPI_CHIP_WRITE256,
11826 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
11827 		.voltage	= {1650, 2000},
11828 	},
11829 
11830 	{
11831 		.vendor		= "Macronix",
11832 		.name		= "MX29F001B",
11833 		.bustype	= BUS_PARALLEL,
11834 		.manufacture_id	= MACRONIX_ID,
11835 		.model_id	= MACRONIX_MX29F001B,
11836 		.total_size	= 128,
11837 		.page_size	= 32 * 1024,
11838 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
11839 		.tested		= TEST_UNTESTED,
11840 		.probe		= PROBE_JEDEC,
11841 		.probe_timing	= TIMING_ZERO,
11842 		.block_erasers	=
11843 		{
11844 			{
11845 				.eraseblocks = {
11846 					{8 * 1024, 1},
11847 					{4 * 1024, 2},
11848 					{8 * 1024, 2},
11849 					{32 * 1024, 1},
11850 					{64 * 1024, 1},
11851 				},
11852 				.block_erase = JEDEC_SECTOR_ERASE,
11853 			}, {
11854 				.eraseblocks = { {128 * 1024, 1} },
11855 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
11856 			}
11857 		},
11858 		.write		= WRITE_JEDEC1,
11859 		.read		= READ_MEMMAPPED,
11860 		.voltage	= {4500, 5500},
11861 	},
11862 
11863 	{
11864 		.vendor		= "Macronix",
11865 		.name		= "MX29F001T",
11866 		.bustype	= BUS_PARALLEL,
11867 		.manufacture_id	= MACRONIX_ID,
11868 		.model_id	= MACRONIX_MX29F001T,
11869 		.total_size	= 128,
11870 		.page_size	= 32 * 1024,
11871 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
11872 		.tested		= TEST_OK_PREW,
11873 		.probe		= PROBE_JEDEC,
11874 		.probe_timing	= TIMING_ZERO,
11875 		.block_erasers	=
11876 		{
11877 			{
11878 				.eraseblocks = {
11879 					{64 * 1024, 1},
11880 					{32 * 1024, 1},
11881 					{8 * 1024, 2},
11882 					{4 * 1024, 2},
11883 					{8 * 1024, 1},
11884 				},
11885 				.block_erase = JEDEC_SECTOR_ERASE,
11886 			}, {
11887 				.eraseblocks = { {128 * 1024, 1} },
11888 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
11889 			}
11890 		},
11891 		.write		= WRITE_JEDEC1,
11892 		.read		= READ_MEMMAPPED,
11893 		.voltage	= {4500, 5500},
11894 	},
11895 
11896 	{
11897 		.vendor		= "Macronix",
11898 		.name		= "MX29F002(N)B",
11899 		.bustype	= BUS_PARALLEL,
11900 		.manufacture_id	= MACRONIX_ID,
11901 		.model_id	= MACRONIX_MX29F002B,
11902 		.total_size	= 256,
11903 		.page_size	= 64 * 1024,
11904 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
11905 		.tested		= TEST_UNTESTED,
11906 		.probe		= PROBE_JEDEC,
11907 		.probe_timing	= TIMING_ZERO,
11908 		.block_erasers	=
11909 		{
11910 			{
11911 				.eraseblocks = {
11912 					{16 * 1024, 1},
11913 					{8 * 1024, 2},
11914 					{32 * 1024, 1},
11915 					{64 * 1024, 3},
11916 				},
11917 				.block_erase = JEDEC_SECTOR_ERASE,
11918 			}, {
11919 				.eraseblocks = { {256 * 1024, 1} },
11920 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
11921 			},
11922 		},
11923 		.write		= WRITE_JEDEC1,
11924 		.read		= READ_MEMMAPPED,
11925 		.voltage	= {4500, 5500},
11926 	},
11927 
11928 	{
11929 		.vendor		= "Macronix",
11930 		.name		= "MX29F002(N)T",
11931 		.bustype	= BUS_PARALLEL,
11932 		.manufacture_id	= MACRONIX_ID,
11933 		.model_id	= MACRONIX_MX29F002T,
11934 		.total_size	= 256,
11935 		.page_size	= 64 * 1024,
11936 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
11937 		.tested		= TEST_OK_PREW,
11938 		.probe		= PROBE_JEDEC,
11939 		.probe_timing	= TIMING_ZERO,
11940 		.block_erasers	=
11941 		{
11942 			{
11943 				.eraseblocks = {
11944 					{64 * 1024, 3},
11945 					{32 * 1024, 1},
11946 					{8 * 1024, 2},
11947 					{16 * 1024, 1},
11948 				},
11949 				.block_erase = JEDEC_SECTOR_ERASE,
11950 			}, {
11951 				.eraseblocks = { {256 * 1024, 1} },
11952 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
11953 			},
11954 		},
11955 		.write		= WRITE_JEDEC1,
11956 		.read		= READ_MEMMAPPED,
11957 		.voltage	= {4500, 5500},
11958 	},
11959 
11960 	{
11961 		.vendor		= "Macronix",
11962 		.name		= "MX29F022(N)B",
11963 		.bustype	= BUS_PARALLEL,
11964 		.manufacture_id	= MACRONIX_ID,
11965 		.model_id	= MACRONIX_MX29F022B,
11966 		.total_size	= 256,
11967 		.page_size	= 0, /* unused */
11968 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
11969 		.tested		= TEST_UNTESTED,
11970 		.probe		= PROBE_JEDEC,
11971 		.probe_timing	= TIMING_ZERO,
11972 		.block_erasers	=
11973 		{
11974 			{
11975 				.eraseblocks = {
11976 					{16 * 1024, 1},
11977 					{8 * 1024, 2},
11978 					{32 * 1024, 1},
11979 					{64 * 1024, 3},
11980 				},
11981 				.block_erase = JEDEC_SECTOR_ERASE,
11982 			}, {
11983 				.eraseblocks = { {256 * 1024, 1} },
11984 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
11985 			}
11986 		},
11987 		.write		= WRITE_JEDEC1,
11988 		.read		= READ_MEMMAPPED,
11989 		.voltage	= {4500, 5500},
11990 	},
11991 
11992 	{
11993 		.vendor		= "Macronix",
11994 		.name		= "MX29F022(N)T",
11995 		.bustype	= BUS_PARALLEL,
11996 		.manufacture_id	= MACRONIX_ID,
11997 		.model_id	= MACRONIX_MX29F022T,
11998 		.total_size	= 256,
11999 		.page_size	= 0, /* unused */
12000 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
12001 		.tested		= TEST_OK_PREW,
12002 		.probe		= PROBE_JEDEC,
12003 		.probe_timing	= TIMING_ZERO,
12004 		.block_erasers	=
12005 		{
12006 			{
12007 				.eraseblocks = {
12008 					{64 * 1024, 3},
12009 					{32 * 1024, 1},
12010 					{8 * 1024, 2},
12011 					{16 * 1024, 1},
12012 				},
12013 				.block_erase = JEDEC_SECTOR_ERASE,
12014 			}, {
12015 				.eraseblocks = { {256 * 1024, 1} },
12016 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
12017 			}
12018 		},
12019 		.write		= WRITE_JEDEC1,
12020 		.read		= READ_MEMMAPPED,
12021 		.voltage	= {4500, 5500},
12022 	},
12023 
12024 	{
12025 		.vendor		= "Macronix",
12026 		.name		= "MX29F040",
12027 		.bustype	= BUS_PARALLEL,
12028 		.manufacture_id	= MACRONIX_ID,
12029 		.model_id	= MACRONIX_MX29F040,
12030 		.total_size	= 512,
12031 		.page_size	= 64 * 1024,
12032 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
12033 		.tested		= TEST_UNTESTED,
12034 		.probe		= PROBE_JEDEC,
12035 		.probe_timing	= TIMING_ZERO,
12036 		.block_erasers	=
12037 		{
12038 			{
12039 				.eraseblocks = { {64 * 1024, 8} },
12040 				.block_erase = JEDEC_SECTOR_ERASE,
12041 			}, {
12042 				.eraseblocks = { {512 * 1024, 1} },
12043 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
12044 			},
12045 		},
12046 		.write		= WRITE_JEDEC1,
12047 		.read		= READ_MEMMAPPED,
12048 		.voltage	= {4500, 5500},
12049 	},
12050 
12051 	{
12052 		.vendor		= "Macronix",
12053 		.name		= "MX29GL128F",
12054 		.bustype	= BUS_PARALLEL,
12055 		.manufacture_id	= MACRONIX_ID,
12056 		.model_id	= MACRONIX_MX29GL128F,
12057 		.total_size	= 16384,
12058 		.page_size	= 128 * 1024, /* actual page size is 16 */
12059 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
12060 		.tested		= TEST_UNTESTED,
12061 		.probe		= PROBE_JEDEC_29GL,
12062 		.probe_timing	= TIMING_ZERO,
12063 		.block_erasers	=
12064 		{
12065 			{
12066 				.eraseblocks = { {128 * 1024, 128} },
12067 				.block_erase = JEDEC_SECTOR_ERASE,
12068 			}, {
12069 				.eraseblocks = { {16 * 1024 * 1024, 1} },
12070 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
12071 			},
12072 		},
12073 		.write		= WRITE_JEDEC1,
12074 		.read		= READ_MEMMAPPED,
12075 		.voltage	= {2700, 3600},
12076 	},
12077 
12078 	{
12079 		.vendor		= "Macronix",
12080 		.name		= "MX29GL320EB",
12081 		.bustype	= BUS_PARALLEL,
12082 		.manufacture_id	= MACRONIX_ID,
12083 		.model_id	= MACRONIX_MX29GL320EB,
12084 		.total_size	= 4096,
12085 		.page_size	= 128 * 1024, /* actual page size is 16 */
12086 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
12087 		.tested		= TEST_UNTESTED,
12088 		.probe		= PROBE_JEDEC_29GL,
12089 		.probe_timing	= TIMING_ZERO,
12090 		.block_erasers	=
12091 		{
12092 			{
12093 				.eraseblocks = {
12094 					{8 * 1024, 8},
12095 					{64 * 1024, 63},
12096 				},
12097 				.block_erase = JEDEC_SECTOR_ERASE,
12098 			}, {
12099 				.eraseblocks = { {4 * 1024 * 1024, 1} },
12100 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
12101 			},
12102 		},
12103 		.write		= WRITE_JEDEC1,
12104 		.read		= READ_MEMMAPPED,
12105 		.voltage	= {2700, 3600},
12106 	},
12107 
12108 	{
12109 		.vendor		= "Macronix",
12110 		.name		= "MX29GL320EH/L",
12111 		.bustype	= BUS_PARALLEL,
12112 		.manufacture_id	= MACRONIX_ID,
12113 		.model_id	= MACRONIX_MX29GL320EHL,
12114 		.total_size	= 4096,
12115 		.page_size	= 128 * 1024, /* actual page size is 16 */
12116 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
12117 		.tested		= TEST_UNTESTED,
12118 		.probe		= PROBE_JEDEC_29GL,
12119 		.probe_timing	= TIMING_ZERO,
12120 		.block_erasers	=
12121 		{
12122 			{
12123 				.eraseblocks = { {64 * 1024, 64} },
12124 				.block_erase = JEDEC_SECTOR_ERASE,
12125 			}, {
12126 				.eraseblocks = { {4 * 1024 * 1024, 1} },
12127 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
12128 			},
12129 		},
12130 		.write		= WRITE_JEDEC1,
12131 		.read		= READ_MEMMAPPED,
12132 		.voltage	= {2700, 3600},
12133 	},
12134 
12135 	{
12136 		.vendor		= "Macronix",
12137 		.name		= "MX29GL320ET",
12138 		.bustype	= BUS_PARALLEL,
12139 		.manufacture_id	= MACRONIX_ID,
12140 		.model_id	= MACRONIX_MX29GL320ET,
12141 		.total_size	= 4096,
12142 		.page_size	= 128 * 1024, /* actual page size is 16 */
12143 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
12144 		.tested		= TEST_UNTESTED,
12145 		.probe		= PROBE_JEDEC_29GL,
12146 		.probe_timing	= TIMING_ZERO,
12147 		.block_erasers	=
12148 		{
12149 			{
12150 				.eraseblocks = {
12151 					{64 * 1024, 63},
12152 					{8 * 1024, 8},
12153 				},
12154 				.block_erase = JEDEC_SECTOR_ERASE,
12155 			}, {
12156 				.eraseblocks = { {4 * 1024 * 1024, 1} },
12157 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
12158 			},
12159 		},
12160 		.write		= WRITE_JEDEC1,
12161 		.read		= READ_MEMMAPPED,
12162 		.voltage	= {2700, 3600},
12163 	},
12164 
12165 	{
12166 		.vendor		= "Macronix",
12167 		.name		= "MX29GL640EB",
12168 		.bustype	= BUS_PARALLEL,
12169 		.manufacture_id	= MACRONIX_ID,
12170 		.model_id	= MACRONIX_MX29GL640EB,
12171 		.total_size	= 8192,
12172 		.page_size	= 128 * 1024, /* actual page size is 16 */
12173 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
12174 		.tested		= TEST_UNTESTED,
12175 		.probe		= PROBE_JEDEC_29GL,
12176 		.probe_timing	= TIMING_ZERO,
12177 		.block_erasers	=
12178 		{
12179 			{
12180 				.eraseblocks = {
12181 					{8 * 1024, 8},
12182 					{64 * 1024, 127},
12183 				},
12184 				.block_erase = JEDEC_SECTOR_ERASE,
12185 			}, {
12186 				.eraseblocks = { {8 * 1024 * 1024, 1} },
12187 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
12188 			},
12189 		},
12190 		.write		= WRITE_JEDEC1,
12191 		.read		= READ_MEMMAPPED,
12192 		.voltage	= {2700, 3600},
12193 	},
12194 
12195 	{
12196 		.vendor		= "Macronix",
12197 		.name		= "MX29GL640EH/L",
12198 		.bustype	= BUS_PARALLEL,
12199 		.manufacture_id	= MACRONIX_ID,
12200 		.model_id	= MACRONIX_MX29GL640EHL,
12201 		.total_size	= 8192,
12202 		.page_size	= 128 * 1024, /* actual page size is 16 */
12203 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
12204 		.tested		= TEST_UNTESTED,
12205 		.probe		= PROBE_JEDEC_29GL,
12206 		.probe_timing	= TIMING_ZERO,
12207 		.block_erasers	=
12208 		{
12209 			{
12210 				.eraseblocks = { {64 * 1024, 128} },
12211 				.block_erase = JEDEC_SECTOR_ERASE,
12212 			}, {
12213 				.eraseblocks = { {8 * 1024 * 1024, 1} },
12214 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
12215 			},
12216 		},
12217 		.write		= WRITE_JEDEC1,
12218 		.read		= READ_MEMMAPPED,
12219 		.voltage	= {2700, 3600},
12220 	},
12221 
12222 	{
12223 		.vendor		= "Macronix",
12224 		.name		= "MX29GL640ET",
12225 		.bustype	= BUS_PARALLEL,
12226 		.manufacture_id	= MACRONIX_ID,
12227 		.model_id	= MACRONIX_MX29GL640ET,
12228 		.total_size	= 8192,
12229 		.page_size	= 128 * 1024, /* actual page size is 16 */
12230 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
12231 		.tested		= TEST_UNTESTED,
12232 		.probe		= PROBE_JEDEC_29GL,
12233 		.probe_timing	= TIMING_ZERO,
12234 		.block_erasers	=
12235 		{
12236 			{
12237 				.eraseblocks = {
12238 					{64 * 1024, 127},
12239 					{8 * 1024, 8},
12240 				},
12241 				.block_erase = JEDEC_SECTOR_ERASE,
12242 			}, {
12243 				.eraseblocks = { {8 * 1024 * 1024, 1} },
12244 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
12245 			},
12246 		},
12247 		.write		= WRITE_JEDEC1,
12248 		.read		= READ_MEMMAPPED,
12249 		.voltage	= {2700, 3600},
12250 	},
12251 
12252 	{
12253 		.vendor		= "Macronix",
12254 		.name		= "MX29LV040",
12255 		.bustype	= BUS_PARALLEL,
12256 		.manufacture_id	= MACRONIX_ID,
12257 		.model_id	= MACRONIX_MX29LV040,
12258 		.total_size	= 512,
12259 		.page_size	= 64 * 1024,
12260 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
12261 		.tested		= TEST_UNTESTED,
12262 		.probe		= PROBE_JEDEC,
12263 		.probe_timing	= TIMING_ZERO,
12264 		.block_erasers	=
12265 		{
12266 			{
12267 				.eraseblocks = { {64 * 1024, 8} },
12268 				.block_erase = JEDEC_SECTOR_ERASE,
12269 			}, {
12270 				.eraseblocks = { {512 * 1024, 1} },
12271 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
12272 			},
12273 		},
12274 		.write		= WRITE_JEDEC1,
12275 		.read		= READ_MEMMAPPED,
12276 		.voltage	= {2700, 3600},
12277 	},
12278 
12279 	{
12280 		.vendor		= "Macronix",
12281 		.name		= "MX66L51235F/MX25L51245G",
12282 		.bustype	= BUS_SPI,
12283 		.manufacture_id	= MACRONIX_ID,
12284 		.model_id	= MACRONIX_MX66L51235F,
12285 		.total_size	= 65536,
12286 		.page_size	= 256,
12287 		/* OTP: 512B total; enter 0xB1, exit 0xC1 */
12288 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA,
12289 		.tested		= TEST_OK_PREW,
12290 		.probe		= PROBE_SPI_RDID,
12291 		.probe_timing	= TIMING_ZERO,
12292 		.block_erasers	=
12293 		{
12294 			{
12295 				.eraseblocks = { {4 * 1024, 16384} },
12296 				.block_erase = SPI_BLOCK_ERASE_21,
12297 			}, {
12298 				.eraseblocks = { {4 * 1024, 16384} },
12299 				.block_erase = SPI_BLOCK_ERASE_20,
12300 			}, {
12301 				.eraseblocks = { {32 * 1024, 2048} },
12302 				.block_erase = SPI_BLOCK_ERASE_5C,
12303 			}, {
12304 				.eraseblocks = { {32 * 1024, 2048} },
12305 				.block_erase = SPI_BLOCK_ERASE_52,
12306 			}, {
12307 				.eraseblocks = { {64 * 1024, 1024} },
12308 				.block_erase = SPI_BLOCK_ERASE_DC,
12309 			}, {
12310 				.eraseblocks = { {64 * 1024, 1024} },
12311 				.block_erase = SPI_BLOCK_ERASE_D8,
12312 			}, {
12313 				.eraseblocks = { {64 * 1024 * 1024, 1} },
12314 				.block_erase = SPI_BLOCK_ERASE_60,
12315 			}, {
12316 				.eraseblocks = { {64 * 1024 * 1024, 1} },
12317 				.block_erase = SPI_BLOCK_ERASE_C7,
12318 			}
12319 		},
12320 		/* TODO: security register and SBLK/SBULK; MX25L12835F: configuration register */
12321 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enable */
12322 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
12323 		.write		= SPI_CHIP_WRITE256,
12324 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
12325 		.voltage	= {2700, 3600},
12326 	},
12327 
12328 	{
12329 		.vendor		= "Macronix",
12330 		.name		= "MX66L1G45G",
12331 		.bustype	= BUS_SPI,
12332 		.manufacture_id	= MACRONIX_ID,
12333 		.model_id	= MACRONIX_MX66L1G45G,
12334 		.total_size	= 131072,
12335 		.page_size	= 256,
12336 		/* OTP: 512B total; enter 0xB1, exit 0xC1 */
12337 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA,
12338 		.tested		= TEST_OK_PREW,
12339 		.probe		= PROBE_SPI_RDID,
12340 		.probe_timing	= TIMING_ZERO,
12341 		.block_erasers	=
12342 		{
12343 			{
12344 				.eraseblocks = { {4 * 1024, 32768} },
12345 				.block_erase = SPI_BLOCK_ERASE_21,
12346 			}, {
12347 				.eraseblocks = { {4 * 1024, 32768} },
12348 				.block_erase = SPI_BLOCK_ERASE_20,
12349 			}, {
12350 				.eraseblocks = { {32 * 1024, 4096} },
12351 				.block_erase = SPI_BLOCK_ERASE_5C,
12352 			}, {
12353 				.eraseblocks = { {32 * 1024, 4096} },
12354 				.block_erase = SPI_BLOCK_ERASE_52,
12355 			}, {
12356 				.eraseblocks = { {64 * 1024, 2048} },
12357 				.block_erase = SPI_BLOCK_ERASE_DC,
12358 			}, {
12359 				.eraseblocks = { {64 * 1024, 2048} },
12360 				.block_erase = SPI_BLOCK_ERASE_D8,
12361 			}, {
12362 				.eraseblocks = { {128 * 1024 * 1024, 1} },
12363 				.block_erase = SPI_BLOCK_ERASE_60,
12364 			}, {
12365 				.eraseblocks = { {128 * 1024 * 1024, 1} },
12366 				.block_erase = SPI_BLOCK_ERASE_C7,
12367 			}
12368 		},
12369 		/* TODO: security register and SBLK/SBULK, configuration register */
12370 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enable */
12371 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
12372 		.write		= SPI_CHIP_WRITE256,
12373 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
12374 		.voltage	= {2700, 3600},
12375 	},
12376 
12377 	{
12378 		.vendor		= "Macronix",
12379 		.name		= "MX77L25650F",
12380 		.bustype	= BUS_SPI,
12381 		.manufacture_id	= MACRONIX_ID,
12382 		.model_id	= MACRONIX_MX77L25650F,
12383 		.total_size	= 32768,
12384 		.page_size	= 256,
12385 		/* OTP: 512B total; enter 0xB1, exit 0xC1 */
12386 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA,
12387 		.tested		= TEST_OK_PREW,
12388 		.probe		= PROBE_SPI_RDID,
12389 		.probe_timing	= TIMING_ZERO,
12390 		.block_erasers	=
12391 		{
12392 			{
12393 				.eraseblocks = { {4 * 1024, 8192} },
12394 				.block_erase = SPI_BLOCK_ERASE_20,
12395 			}, {
12396 				.eraseblocks = { {32 * 1024, 1024} },
12397 				.block_erase = SPI_BLOCK_ERASE_52,
12398 			}, {
12399 				.eraseblocks = { {64 * 1024, 512} },
12400 				.block_erase = SPI_BLOCK_ERASE_D8,
12401 			}, {
12402 				.eraseblocks = { {32 * 1024 * 1024, 1} },
12403 				.block_erase = SPI_BLOCK_ERASE_60,
12404 			}, {
12405 				.eraseblocks = { {32 * 1024 * 1024, 1} },
12406 				.block_erase = SPI_BLOCK_ERASE_C7,
12407 			}
12408 		},
12409 		/* TODO: block WP, security register, configuration register */
12410 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enable */
12411 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
12412 		.write		= SPI_CHIP_WRITE256,
12413 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
12414 		.voltage	= {2700, 3600},
12415 	},
12416 
12417 	{
12418 		.vendor		= "Macronix",
12419 		.name		= "MX77U51250F",
12420 		.bustype	= BUS_SPI,
12421 		.manufacture_id	= MACRONIX_ID,
12422 		.model_id	= MACRONIX_MX77U51250F,
12423 		.total_size	= 65536,
12424 		.page_size	= 256,
12425 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_CFGR | FEATURE_4BA,
12426 		.tested		= TEST_OK_PREW,
12427 		.probe		= PROBE_SPI_RDID,
12428 		.probe_timing	= TIMING_ZERO,
12429 		.block_erasers	=
12430 		{
12431 			{
12432 				.eraseblocks = { {4 * 1024, 16384} },
12433 				.block_erase = SPI_BLOCK_ERASE_20,
12434 			}, {
12435 				.eraseblocks = { {32 * 1024, 2048} },
12436 				.block_erase = SPI_BLOCK_ERASE_52,
12437 			}, {
12438 				.eraseblocks = { {64 * 1024, 1024} },
12439 				.block_erase = SPI_BLOCK_ERASE_D8,
12440 			}, {
12441 				.eraseblocks = { {64 * 1024 * 1024, 1} },
12442 				.block_erase = SPI_BLOCK_ERASE_60,
12443 			}, {
12444 				.eraseblocks = { {64 * 1024 * 1024, 1} },
12445 				.block_erase = SPI_BLOCK_ERASE_C7,
12446 			}
12447 		},
12448 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enable */
12449 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
12450 		.write		= SPI_CHIP_WRITE256,
12451 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
12452 		.voltage	= {1650, 2000},
12453 	},
12454 
12455 	/* The ST M25P05 is a bit of a problem. It has the same ID as the
12456 	 * ST M25P05-A in RES mode, but supports only 128 byte writes instead
12457 	 * of 256 byte writes. We rely heavily on the fact that PROBE_SPI_RES1
12458 	 * only is successful if RDID does not work.
12459 	 */
12460 	{
12461 		.vendor		= "Micron/Numonyx/ST",
12462 		.name		= "M25P05",
12463 		.bustype	= BUS_SPI,
12464 		.manufacture_id	= 0, /* Not used. */
12465 		.model_id	= ST_M25P05_RES,
12466 		.total_size	= 64,
12467 		.page_size	= 256,
12468 		.feature_bits	= FEATURE_WRSR_WREN,
12469 		.tested		= TEST_UNTESTED,
12470 		.probe		= PROBE_SPI_RES1,
12471 		.probe_timing	= TIMING_ZERO,
12472 		.block_erasers	=
12473 		{
12474 			{
12475 				.eraseblocks = { {32 * 1024, 2} },
12476 				.block_erase = SPI_BLOCK_ERASE_D8,
12477 			}, {
12478 				.eraseblocks = { {64 * 1024, 1} },
12479 				.block_erase = SPI_BLOCK_ERASE_C7,
12480 			}
12481 		},
12482 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* TODO: check */
12483 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
12484 		.write		= SPI_CHIP_WRITE1, /* 128 */
12485 		.read		= SPI_CHIP_READ,
12486 		.voltage	= {2700, 3600},
12487 	},
12488 
12489 	{
12490 		.vendor		= "Micron/Numonyx/ST",
12491 		.name		= "M25P05-A",
12492 		.bustype	= BUS_SPI,
12493 		.manufacture_id	= ST_ID,
12494 		.model_id	= ST_M25P05A,
12495 		.total_size	= 64,
12496 		.page_size	= 256,
12497 		.feature_bits	= FEATURE_WRSR_WREN,
12498 		.tested		= TEST_OK_PREW,
12499 		.probe		= PROBE_SPI_RDID,
12500 		.probe_timing	= TIMING_ZERO,
12501 		.block_erasers	=
12502 		{
12503 			{
12504 				.eraseblocks = { {32 * 1024, 2} },
12505 				.block_erase = SPI_BLOCK_ERASE_D8,
12506 			}, {
12507 				.eraseblocks = { {64 * 1024, 1} },
12508 				.block_erase = SPI_BLOCK_ERASE_C7,
12509 			}
12510 		},
12511 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* TODO: check */
12512 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
12513 		.write		= SPI_CHIP_WRITE256,
12514 		.read		= SPI_CHIP_READ,
12515 		.voltage	= {2700, 3600},
12516 	},
12517 
12518 	/* The ST M25P10 has the same problem as the M25P05. */
12519 	{
12520 		.vendor		= "Micron/Numonyx/ST",
12521 		.name		= "M25P10",
12522 		.bustype	= BUS_SPI,
12523 		.manufacture_id	= 0, /* Not used. */
12524 		.model_id	= ST_M25P10_RES,
12525 		.total_size	= 128,
12526 		.page_size	= 256,
12527 		.feature_bits	= FEATURE_WRSR_WREN,
12528 		.tested		= TEST_UNTESTED,
12529 		.probe		= PROBE_SPI_RES1,
12530 		.probe_timing	= TIMING_ZERO,
12531 		.block_erasers	=
12532 		{
12533 			{
12534 				.eraseblocks = { {32 * 1024, 4} },
12535 				.block_erase = SPI_BLOCK_ERASE_D8,
12536 			}, {
12537 				.eraseblocks = { {128 * 1024, 1} },
12538 				.block_erase = SPI_BLOCK_ERASE_C7,
12539 			}
12540 		},
12541 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* TODO: check */
12542 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
12543 		.write		= SPI_CHIP_WRITE1, /* 128 */
12544 		.read		= SPI_CHIP_READ,
12545 		.voltage	= {2700, 3600},
12546 	},
12547 
12548 	{
12549 		.vendor		= "Micron/Numonyx/ST",
12550 		.name		= "M25P10-A",
12551 		.bustype	= BUS_SPI,
12552 		.manufacture_id	= ST_ID,
12553 		.model_id	= ST_M25P10A,
12554 		.total_size	= 128,
12555 		.page_size	= 256,
12556 		.feature_bits	= FEATURE_WRSR_WREN,
12557 		.tested		= TEST_OK_PREW,
12558 		.probe		= PROBE_SPI_RDID,
12559 		.probe_timing	= TIMING_ZERO,
12560 		.block_erasers	=
12561 		{
12562 			{
12563 				.eraseblocks = { {32 * 1024, 4} },
12564 				.block_erase = SPI_BLOCK_ERASE_D8,
12565 			}, {
12566 				.eraseblocks = { {128 * 1024, 1} },
12567 				.block_erase = SPI_BLOCK_ERASE_C7,
12568 			}
12569 		},
12570 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* TODO: check */
12571 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
12572 		.write		= SPI_CHIP_WRITE256,
12573 		.read		= SPI_CHIP_READ,
12574 		.voltage	= {2700, 3600},
12575 	},
12576 
12577 	{
12578 		.vendor		= "Micron/Numonyx/ST",
12579 		.name		= "M25P128",
12580 		.bustype	= BUS_SPI,
12581 		.manufacture_id	= ST_ID,
12582 		.model_id	= ST_M25P128,
12583 		.total_size	= 16384,
12584 		.page_size	= 256,
12585 		.feature_bits	= FEATURE_WRSR_WREN,
12586 		.tested		= TEST_OK_PREW,
12587 		.probe		= PROBE_SPI_RDID,
12588 		.probe_timing	= TIMING_ZERO,
12589 		.block_erasers	=
12590 		{
12591 			{
12592 				.eraseblocks = { {256 * 1024, 64} },
12593 				.block_erase = SPI_BLOCK_ERASE_D8,
12594 			}, {
12595 				.eraseblocks = { {16 * 1024 * 1024, 1} },
12596 				.block_erase = SPI_BLOCK_ERASE_C7,
12597 			}
12598 		},
12599 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* TODO: check */
12600 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
12601 		.write		= SPI_CHIP_WRITE256,
12602 		.read		= SPI_CHIP_READ,
12603 		.voltage	= {2700, 3600},
12604 	},
12605 
12606 	{
12607 		.vendor		= "Micron/Numonyx/ST",
12608 		.name		= "M25P16",
12609 		.bustype	= BUS_SPI,
12610 		.manufacture_id	= ST_ID,
12611 		.model_id	= ST_M25P16,
12612 		.total_size	= 2048,
12613 		.page_size	= 256,
12614 		.feature_bits	= FEATURE_WRSR_WREN,
12615 		.tested		= TEST_OK_PREW,
12616 		.probe		= PROBE_SPI_RDID,
12617 		.probe_timing	= TIMING_ZERO,
12618 		.block_erasers	=
12619 		{
12620 			{
12621 				.eraseblocks = { {64 * 1024, 32} },
12622 				.block_erase = SPI_BLOCK_ERASE_D8,
12623 			}, {
12624 				.eraseblocks = { {2 * 1024 * 1024, 1} },
12625 				.block_erase = SPI_BLOCK_ERASE_C7,
12626 			}
12627 		},
12628 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* TODO: check */
12629 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
12630 		.write		= SPI_CHIP_WRITE256,
12631 		.read		= SPI_CHIP_READ,
12632 		.voltage	= {2700, 3600},
12633 	},
12634 
12635 	{
12636 		.vendor		= "Micron/Numonyx/ST", /* Numonyx */
12637 		.name		= "M25P20",
12638 		.bustype	= BUS_SPI,
12639 		.manufacture_id	= ST_ID,
12640 		.model_id	= ST_M25P20,
12641 		.total_size	= 256,
12642 		.page_size	= 256,
12643 		.feature_bits	= FEATURE_WRSR_WREN,
12644 		.tested		= TEST_UNTESTED,
12645 		.probe		= PROBE_SPI_RDID,
12646 		.probe_timing	= TIMING_ZERO,
12647 		.block_erasers	=
12648 		{
12649 			{
12650 				.eraseblocks = { {64 * 1024, 4} },
12651 				.block_erase = SPI_BLOCK_ERASE_D8,
12652 			}, {
12653 				.eraseblocks = { {256 * 1024, 1} },
12654 				.block_erase = SPI_BLOCK_ERASE_C7,
12655 			}
12656 		},
12657 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP1_SRWD,
12658 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
12659 		.write		= SPI_CHIP_WRITE256,
12660 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
12661 		.voltage	= {2700, 3600},
12662 	},
12663 
12664 	{
12665 		.vendor		= "Micron/Numonyx/ST",
12666 		.name		= "M25P20-old",
12667 		.bustype	= BUS_SPI,
12668 		.manufacture_id	= 0, /* Not used. */
12669 		.model_id	= ST_M25P20_RES,
12670 		.total_size	= 256,
12671 		.page_size	= 256,
12672 		.feature_bits	= FEATURE_WRSR_WREN,
12673 		.tested		= TEST_OK_PREW,
12674 		.probe		= PROBE_SPI_RES1,
12675 		.probe_timing	= TIMING_ZERO,
12676 		.block_erasers	=
12677 		{
12678 			{
12679 				.eraseblocks = { {64 * 1024, 4} },
12680 				.block_erase = SPI_BLOCK_ERASE_D8,
12681 			}, {
12682 				.eraseblocks = { {256 * 1024, 1} },
12683 				.block_erase = SPI_BLOCK_ERASE_C7,
12684 			}
12685 		},
12686 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP1_SRWD,
12687 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
12688 		.write		= SPI_CHIP_WRITE256,
12689 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
12690 		.voltage	= {2700, 3600},
12691 	},
12692 
12693 	{
12694 		.vendor		= "Micron/Numonyx/ST",
12695 		.name		= "M25P32",
12696 		.bustype	= BUS_SPI,
12697 		.manufacture_id	= ST_ID,
12698 		.model_id	= ST_M25P32,
12699 		.total_size	= 4096,
12700 		.page_size	= 256,
12701 		.feature_bits	= FEATURE_WRSR_WREN,
12702 		.tested		= TEST_OK_PREW,
12703 		.probe		= PROBE_SPI_RDID,
12704 		.probe_timing	= TIMING_ZERO,
12705 		.block_erasers	=
12706 		{
12707 			{
12708 				.eraseblocks = { {64 * 1024, 64} },
12709 				.block_erase = SPI_BLOCK_ERASE_D8,
12710 			}, {
12711 				.eraseblocks = { {4 * 1024 * 1024, 1} },
12712 				.block_erase = SPI_BLOCK_ERASE_C7,
12713 			}
12714 		},
12715 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* TODO: check */
12716 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
12717 		.write		= SPI_CHIP_WRITE256,
12718 		.read		= SPI_CHIP_READ,
12719 		.voltage	= {2700, 3600},
12720 	},
12721 
12722 	{
12723 		.vendor		= "Micron/Numonyx/ST", /* Numonyx */
12724 		.name		= "M25P40",
12725 		.bustype	= BUS_SPI,
12726 		.manufacture_id	= ST_ID,
12727 		.model_id	= ST_M25P40,
12728 		.total_size	= 512,
12729 		.page_size	= 256,
12730 		.feature_bits	= FEATURE_WRSR_WREN,
12731 		.tested		= TEST_OK_PREW,
12732 		.probe		= PROBE_SPI_RDID,
12733 		.probe_timing	= TIMING_ZERO,
12734 		.block_erasers	=
12735 		{
12736 			{
12737 				.eraseblocks = { {64 * 1024, 8} },
12738 				.block_erase = SPI_BLOCK_ERASE_D8,
12739 			}, {
12740 				.eraseblocks = { {512 * 1024, 1} },
12741 				.block_erase = SPI_BLOCK_ERASE_C7,
12742 			}
12743 		},
12744 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* TODO: check */
12745 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
12746 		.write		= SPI_CHIP_WRITE256,
12747 		.read		= SPI_CHIP_READ,
12748 		.voltage	= {2700, 3600},
12749 	},
12750 
12751 	{
12752 		.vendor		= "Micron/Numonyx/ST",
12753 		.name		= "M25P40-old",
12754 		.bustype	= BUS_SPI,
12755 		.manufacture_id	= 0, /* Not used. */
12756 		.model_id	= ST_M25P40_RES,
12757 		.total_size	= 512,
12758 		.page_size	= 256,
12759 		.feature_bits	= FEATURE_WRSR_WREN,
12760 		.tested		= TEST_UNTESTED,
12761 		.probe		= PROBE_SPI_RES1,
12762 		.probe_timing	= TIMING_ZERO,
12763 		.block_erasers	=
12764 		{
12765 			{
12766 				.eraseblocks = { {64 * 1024, 8} },
12767 				.block_erase = SPI_BLOCK_ERASE_D8,
12768 			}, {
12769 				.eraseblocks = { {512 * 1024, 1} },
12770 				.block_erase = SPI_BLOCK_ERASE_C7,
12771 			}
12772 		},
12773 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* TODO: check */
12774 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
12775 		.write		= SPI_CHIP_WRITE256,
12776 		.read		= SPI_CHIP_READ,
12777 	},
12778 
12779 	{
12780 		.vendor		= "Micron/Numonyx/ST",
12781 		.name		= "M25P64",
12782 		.bustype	= BUS_SPI,
12783 		.manufacture_id	= ST_ID,
12784 		.model_id	= ST_M25P64,
12785 		.total_size	= 8192,
12786 		.page_size	= 256,
12787 		.feature_bits	= FEATURE_WRSR_WREN,
12788 		.tested		= TEST_OK_PREW,
12789 		.probe		= PROBE_SPI_RDID,
12790 		.probe_timing	= TIMING_ZERO,
12791 		.block_erasers	=
12792 		{
12793 			{
12794 				.eraseblocks = { {64 * 1024, 128} },
12795 				.block_erase = SPI_BLOCK_ERASE_D8,
12796 			}, {
12797 				.eraseblocks = { {8 * 1024 * 1024, 1} },
12798 				.block_erase = SPI_BLOCK_ERASE_C7,
12799 			}
12800 		},
12801 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* TODO: check */
12802 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
12803 		.write		= SPI_CHIP_WRITE256,
12804 		.read		= SPI_CHIP_READ,
12805 		.voltage	= {2700, 3600},
12806 	},
12807 
12808 	{
12809 		.vendor		= "Micron/Numonyx/ST",
12810 		.name		= "M25P80",
12811 		.bustype	= BUS_SPI,
12812 		.manufacture_id	= ST_ID,
12813 		.model_id	= ST_M25P80,
12814 		.total_size	= 1024,
12815 		.page_size	= 256,
12816 		.feature_bits	= FEATURE_WRSR_WREN,
12817 		.tested		= TEST_OK_PREW,
12818 		.probe		= PROBE_SPI_RDID,
12819 		.probe_timing	= TIMING_ZERO,
12820 		.block_erasers	=
12821 		{
12822 			{
12823 				.eraseblocks = { {64 * 1024, 16} },
12824 				.block_erase = SPI_BLOCK_ERASE_D8,
12825 			}, {
12826 				.eraseblocks = { {1024 * 1024, 1} },
12827 				.block_erase = SPI_BLOCK_ERASE_C7,
12828 			}
12829 		},
12830 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* TODO: check */
12831 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
12832 		.write		= SPI_CHIP_WRITE256,
12833 		.read		= SPI_CHIP_READ,
12834 		.voltage	= {2700, 3600},
12835 	},
12836 
12837 	{
12838 		.vendor		= "Micron/Numonyx/ST",
12839 		.name		= "M25PE10",
12840 		.bustype	= BUS_SPI,
12841 		.manufacture_id	= ST_ID,
12842 		.model_id	= ST_M25PE10,
12843 		.total_size	= 128,
12844 		.page_size	= 256,
12845 		.feature_bits	= FEATURE_WRSR_WREN,
12846 		.tested		= TEST_UNTESTED,
12847 		.probe		= PROBE_SPI_RDID,
12848 		.probe_timing	= TIMING_ZERO,
12849 		.block_erasers	=
12850 		{
12851 			{
12852 				.eraseblocks = { {4 * 1024, 32} },
12853 				.block_erase = SPI_BLOCK_ERASE_20,
12854 			}, {
12855 				.eraseblocks = { {64 * 1024, 2} },
12856 				.block_erase = SPI_BLOCK_ERASE_D8,
12857 			}, {
12858 				.eraseblocks = { {128 * 1024, 1} },
12859 				.block_erase = SPI_BLOCK_ERASE_C7,
12860 			}
12861 		},
12862 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
12863 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
12864 		.write		= SPI_CHIP_WRITE256,
12865 		.read		= SPI_CHIP_READ,
12866 		.voltage	= {2700, 3600},
12867 	},
12868 
12869 	{
12870 		.vendor		= "Micron/Numonyx/ST",
12871 		.name		= "M25PE16",
12872 		.bustype	= BUS_SPI,
12873 		.manufacture_id	= ST_ID,
12874 		.model_id	= ST_M25PE16,
12875 		.total_size	= 2048,
12876 		.page_size	= 256,
12877 		.feature_bits	= FEATURE_WRSR_WREN,
12878 		.tested		= TEST_UNTESTED,
12879 		.probe		= PROBE_SPI_RDID,
12880 		.probe_timing	= TIMING_ZERO,
12881 		.block_erasers	=
12882 		{
12883 			{
12884 				.eraseblocks = { {4 * 1024, 512} },
12885 				.block_erase = SPI_BLOCK_ERASE_20,
12886 			}, {
12887 				.eraseblocks = { {64 * 1024, 32} },
12888 				.block_erase = SPI_BLOCK_ERASE_D8,
12889 			}, {
12890 				.eraseblocks = { {2 * 1024 * 1024, 1} },
12891 				.block_erase = SPI_BLOCK_ERASE_C7,
12892 			}
12893 		},
12894 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
12895 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
12896 		.write		= SPI_CHIP_WRITE256,
12897 		.read		= SPI_CHIP_READ,
12898 		.voltage	= {2700, 3600},
12899 	},
12900 
12901 	{
12902 		.vendor		= "Micron/Numonyx/ST",
12903 		.name		= "M25PE20",
12904 		.bustype	= BUS_SPI,
12905 		.manufacture_id	= ST_ID,
12906 		.model_id	= ST_M25PE20,
12907 		.total_size	= 256,
12908 		.page_size	= 256,
12909 		.feature_bits	= FEATURE_WRSR_WREN,
12910 		.tested		= TEST_UNTESTED,
12911 		.probe		= PROBE_SPI_RDID,
12912 		.probe_timing	= TIMING_ZERO,
12913 		.block_erasers	=
12914 		{
12915 			{
12916 				.eraseblocks = { {4 * 1024, 64} },
12917 				.block_erase = SPI_BLOCK_ERASE_20,
12918 			}, {
12919 				.eraseblocks = { {64 * 1024, 4} },
12920 				.block_erase = SPI_BLOCK_ERASE_D8,
12921 			}, {
12922 				.eraseblocks = { {256 * 1024, 1} },
12923 				.block_erase = SPI_BLOCK_ERASE_C7,
12924 			}
12925 		},
12926 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
12927 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
12928 		.write		= SPI_CHIP_WRITE256,
12929 		.read		= SPI_CHIP_READ,
12930 		.voltage	= {2700, 3600},
12931 	},
12932 
12933 	{
12934 		.vendor		= "Micron/Numonyx/ST",
12935 		.name		= "M25PE40",
12936 		.bustype	= BUS_SPI,
12937 		.manufacture_id	= ST_ID,
12938 		.model_id	= ST_M25PE40,
12939 		.total_size	= 512,
12940 		.page_size	= 256,
12941 		.feature_bits	= FEATURE_WRSR_WREN,
12942 		.tested		= TEST_OK_PREW,
12943 		.probe		= PROBE_SPI_RDID,
12944 		.probe_timing	= TIMING_ZERO,
12945 		.block_erasers	=
12946 		{
12947 			{
12948 				.eraseblocks = { {4 * 1024, 128} },
12949 				.block_erase = SPI_BLOCK_ERASE_20,
12950 			}, {
12951 				.eraseblocks = { {64 * 1024, 8} },
12952 				.block_erase = SPI_BLOCK_ERASE_D8,
12953 			}, {
12954 				.eraseblocks = { {512 * 1024, 1} },
12955 				.block_erase = SPI_BLOCK_ERASE_C7,
12956 			}
12957 		},
12958 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
12959 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
12960 		.write		= SPI_CHIP_WRITE256,
12961 		.read		= SPI_CHIP_READ,
12962 		.voltage	= {2700, 3600},
12963 	},
12964 
12965 	{
12966 		.vendor		= "Micron/Numonyx/ST",
12967 		.name		= "M25PE80",
12968 		.bustype	= BUS_SPI,
12969 		.manufacture_id	= ST_ID,
12970 		.model_id	= ST_M25PE80,
12971 		.total_size	= 1024,
12972 		.page_size	= 256,
12973 		.feature_bits	= FEATURE_WRSR_WREN,
12974 		.tested		= TEST_OK_PREW,
12975 		.probe		= PROBE_SPI_RDID,
12976 		.probe_timing	= TIMING_ZERO,
12977 		.block_erasers	=
12978 		{
12979 			{
12980 				.eraseblocks = { {4 * 1024, 256} },
12981 				.block_erase = SPI_BLOCK_ERASE_20,
12982 			}, {
12983 				.eraseblocks = { {64 * 1024, 16} },
12984 				.block_erase = SPI_BLOCK_ERASE_D8,
12985 			}, {
12986 				.eraseblocks = { {1024 * 1024, 1} },
12987 				.block_erase = SPI_BLOCK_ERASE_C7,
12988 			}
12989 		},
12990 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
12991 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
12992 		.write		= SPI_CHIP_WRITE256,
12993 		.read		= SPI_CHIP_READ,
12994 		.voltage	= {2700, 3600},
12995 	},
12996 
12997 	{
12998 		.vendor		= "Micron/Numonyx/ST",
12999 		.name		= "M25PX16",
13000 		.bustype	= BUS_SPI,
13001 		.manufacture_id	= ST_ID,
13002 		.model_id	= ST_M25PX16,
13003 		.total_size	= 2048,
13004 		.page_size	= 256,
13005 		/* OTP: 64B total; read 0x4B; write 0x42 */
13006 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
13007 		.tested		= TEST_OK_PREW,
13008 		.probe		= PROBE_SPI_RDID,
13009 		.probe_timing	= TIMING_ZERO,
13010 		.block_erasers	=
13011 		{
13012 			{
13013 				.eraseblocks = { { 4 * 1024, 512 } },
13014 				.block_erase = SPI_BLOCK_ERASE_20,
13015 			}, {
13016 				.eraseblocks = { {64 * 1024, 32} },
13017 				.block_erase = SPI_BLOCK_ERASE_D8,
13018 			}, {
13019 				.eraseblocks = { {2 * 1024 * 1024, 1} },
13020 				.block_erase = SPI_BLOCK_ERASE_C7,
13021 			}
13022 		},
13023 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD, /* bit5: T/B */
13024 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD, /* TODO: per 64kB sector lock registers */
13025 		.write		= SPI_CHIP_WRITE256,
13026 		.read		= SPI_CHIP_READ,
13027 		.voltage	= {2300, 3600},
13028 	},
13029 
13030 	{
13031 		.vendor		= "Micron/Numonyx/ST",
13032 		.name		= "M25PX32",
13033 		.bustype	= BUS_SPI,
13034 		.manufacture_id	= ST_ID,
13035 		.model_id	= ST_M25PX32,
13036 		.total_size	= 4096,
13037 		.page_size	= 256,
13038 		/* OTP: 64B total; read 0x4B; write 0x42 */
13039 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
13040 		.tested		= TEST_OK_PRE,
13041 		.probe		= PROBE_SPI_RDID,
13042 		.probe_timing	= TIMING_ZERO,
13043 		.block_erasers	=
13044 		{
13045 			{
13046 				.eraseblocks = { { 4 * 1024, 1024 } },
13047 				.block_erase = SPI_BLOCK_ERASE_20,
13048 			}, {
13049 				.eraseblocks = { {64 * 1024, 64} },
13050 				.block_erase = SPI_BLOCK_ERASE_D8,
13051 			}, {
13052 				.eraseblocks = { {4 * 1024 * 1024, 1} },
13053 				.block_erase = SPI_BLOCK_ERASE_C7,
13054 			}
13055 		},
13056 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD, /* bit5: T/B */
13057 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD, /* TODO: per 64kB sector lock registers */
13058 		.write		= SPI_CHIP_WRITE256,
13059 		.read		= SPI_CHIP_READ,
13060 		.voltage	= {2700, 3600},
13061 	},
13062 
13063 	{
13064 		.vendor		= "Micron/Numonyx/ST",
13065 		.name		= "M25PX64",
13066 		.bustype	= BUS_SPI,
13067 		.manufacture_id	= ST_ID,
13068 		.model_id	= ST_M25PX64,
13069 		.total_size	= 8192,
13070 		.page_size	= 256,
13071 		/* OTP: 64B total; read 0x4B; write 0x42 */
13072 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
13073 		.tested		= TEST_OK_PREW,
13074 		.probe		= PROBE_SPI_RDID,
13075 		.probe_timing	= TIMING_ZERO,
13076 		.block_erasers	=
13077 		{
13078 			{
13079 				.eraseblocks = { { 4 * 1024, 2048 } },
13080 				.block_erase = SPI_BLOCK_ERASE_20,
13081 			}, {
13082 				.eraseblocks = { {64 * 1024, 128} },
13083 				.block_erase = SPI_BLOCK_ERASE_D8,
13084 			}, {
13085 				.eraseblocks = { {8 * 1024 * 1024, 1} },
13086 				.block_erase = SPI_BLOCK_ERASE_C7,
13087 			}
13088 		},
13089 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD, /* bit5: T/B */
13090 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD, /* TODO: per 64kB sector lock registers */
13091 		.write		= SPI_CHIP_WRITE256,
13092 		.read		= SPI_CHIP_READ,
13093 		.voltage	= {2700, 3600},
13094 	},
13095 
13096 	{
13097 		.vendor		= "Micron/Numonyx/ST",
13098 		.name		= "M25PX80",
13099 		.bustype	= BUS_SPI,
13100 		.manufacture_id	= ST_ID,
13101 		.model_id	= ST_M25PX80,
13102 		.total_size	= 1024,
13103 		.page_size	= 256,
13104 		/* OTP: 64B total; read 0x4B, write 0x42 */
13105 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
13106 		.tested		= TEST_OK_PREW,
13107 		.probe		= PROBE_SPI_RDID,
13108 		.probe_timing	= TIMING_ZERO,
13109 		.block_erasers	=
13110 		{
13111 			{
13112 				.eraseblocks = { { 4 * 1024, 256 } },
13113 				.block_erase = SPI_BLOCK_ERASE_20,
13114 			}, {
13115 				.eraseblocks = { {64 * 1024, 16} },
13116 				.block_erase = SPI_BLOCK_ERASE_D8,
13117 			}, {
13118 				.eraseblocks = { {1024 * 1024, 1} },
13119 				.block_erase = SPI_BLOCK_ERASE_C7,
13120 			}
13121 		},
13122 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD, /* bit5: T/B */
13123 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD, /* TODO: per 64kB sector lock registers */
13124 		.write		= SPI_CHIP_WRITE256,
13125 		.read		= SPI_CHIP_READ,
13126 		.voltage	= {2700, 3600},
13127 	},
13128 
13129 	{
13130 		.vendor		= "Micron/Numonyx/ST",
13131 		.name		= "M45PE10",
13132 		.bustype	= BUS_SPI,
13133 		.manufacture_id	= ST_ID,
13134 		.model_id	= ST_M45PE10,
13135 		.total_size	= 128,
13136 		.page_size	= 256,
13137 		.tested		= TEST_UNTESTED,
13138 		.probe		= PROBE_SPI_RDID,
13139 		.probe_timing	= TIMING_ZERO,
13140 		.block_erasers	=
13141 		{
13142 			{
13143 				.eraseblocks = { {256, 512} },
13144 				.block_erase = SPI_BLOCK_ERASE_DB,
13145 			}, {
13146 				.eraseblocks = { {64 * 1024, 2} },
13147 				.block_erase = SPI_BLOCK_ERASE_D8,
13148 			}
13149 		},
13150 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_DEFAULT_WELWIP,
13151 		.unlock		= NO_BLOCKPROTECT_FUNC, /* #WP pin write-protects lower 64kB. */
13152 		.write		= SPI_CHIP_WRITE256, /* Page write (similar to PP but allows 0->1 changes) */
13153 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
13154 		.voltage	= {2700, 3600},
13155 	},
13156 
13157 	{
13158 		.vendor		= "Micron/Numonyx/ST",
13159 		.name		= "M45PE16",
13160 		.bustype	= BUS_SPI,
13161 		.manufacture_id	= ST_ID,
13162 		.model_id	= ST_M45PE16,
13163 		.total_size	= 2048,
13164 		.page_size	= 256,
13165 		.tested		= TEST_UNTESTED,
13166 		.probe		= PROBE_SPI_RDID,
13167 		.probe_timing	= TIMING_ZERO,
13168 		.block_erasers	=
13169 		{
13170 			{
13171 				.eraseblocks = { {256, 8192} },
13172 				.block_erase = SPI_BLOCK_ERASE_DB,
13173 			}, {
13174 				.eraseblocks = { {64 * 1024, 32} },
13175 				.block_erase = SPI_BLOCK_ERASE_D8,
13176 			}
13177 		},
13178 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_DEFAULT_WELWIP,
13179 		.unlock		= NO_BLOCKPROTECT_FUNC, /* #WP pin write-protects lower 64kB. */
13180 		.write		= SPI_CHIP_WRITE256, /* Page write (similar to PP but allows 0->1 changes) */
13181 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
13182 		.voltage	= {2700, 3600},
13183 	},
13184 
13185 	{
13186 		.vendor		= "Micron/Numonyx/ST",
13187 		.name		= "M45PE20",
13188 		.bustype	= BUS_SPI,
13189 		.manufacture_id	= ST_ID,
13190 		.model_id	= ST_M45PE20,
13191 		.total_size	= 256,
13192 		.page_size	= 256,
13193 		.tested		= TEST_UNTESTED,
13194 		.probe		= PROBE_SPI_RDID,
13195 		.probe_timing	= TIMING_ZERO,
13196 		.block_erasers	=
13197 		{
13198 			{
13199 				.eraseblocks = { {256, 1024} },
13200 				.block_erase = SPI_BLOCK_ERASE_DB,
13201 			}, {
13202 				.eraseblocks = { {64 * 1024, 4} },
13203 				.block_erase = SPI_BLOCK_ERASE_D8,
13204 			}
13205 		},
13206 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_DEFAULT_WELWIP,
13207 		.unlock		= NO_BLOCKPROTECT_FUNC, /* #WP pin write-protects lower 64kB. */
13208 		.write		= SPI_CHIP_WRITE256, /* Page write (similar to PP but allows 0->1 changes) */
13209 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
13210 		.voltage	= {2700, 3600},
13211 	},
13212 
13213 	{
13214 		.vendor		= "Micron/Numonyx/ST",
13215 		.name		= "M45PE40",
13216 		.bustype	= BUS_SPI,
13217 		.manufacture_id	= ST_ID,
13218 		.model_id	= ST_M45PE40,
13219 		.total_size	= 512,
13220 		.page_size	= 256,
13221 		.tested		= TEST_UNTESTED,
13222 		.probe		= PROBE_SPI_RDID,
13223 		.probe_timing	= TIMING_ZERO,
13224 		.block_erasers	=
13225 		{
13226 			{
13227 				.eraseblocks = { {256, 2048} },
13228 				.block_erase = SPI_BLOCK_ERASE_DB,
13229 			}, {
13230 				.eraseblocks = { {64 * 1024, 8} },
13231 				.block_erase = SPI_BLOCK_ERASE_D8,
13232 			}
13233 		},
13234 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_DEFAULT_WELWIP,
13235 		.unlock		= NO_BLOCKPROTECT_FUNC, /* #WP pin write-protects lower 64kB. */
13236 		.write		= SPI_CHIP_WRITE256, /* Page write supported (similar to PP but allows 0->1 changes) */
13237 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
13238 		.voltage	= {2700, 3600},
13239 	},
13240 
13241 	{
13242 		.vendor		= "Micron/Numonyx/ST",
13243 		.name		= "M45PE80",
13244 		.bustype	= BUS_SPI,
13245 		.manufacture_id	= ST_ID,
13246 		.model_id	= ST_M45PE80,
13247 		.total_size	= 1024,
13248 		.page_size	= 256,
13249 		.tested		= TEST_UNTESTED,
13250 		.probe		= PROBE_SPI_RDID,
13251 		.probe_timing	= TIMING_ZERO,
13252 		.block_erasers	=
13253 		{
13254 			{
13255 				.eraseblocks = { {256, 4096} },
13256 				.block_erase = SPI_BLOCK_ERASE_DB,
13257 			}, {
13258 				.eraseblocks = { {64 * 1024, 16} },
13259 				.block_erase = SPI_BLOCK_ERASE_D8,
13260 			}
13261 		},
13262 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_DEFAULT_WELWIP,
13263 		.unlock		= NO_BLOCKPROTECT_FUNC, /* #WP pin write-protects lower 64kB. */
13264 		.write		= SPI_CHIP_WRITE256, /* Page write (similar to PP but allows 0->1 changes) */
13265 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
13266 		.voltage	= {2700, 3600},
13267 	},
13268 
13269 	{
13270 		.vendor		= "Micron/Numonyx/ST",
13271 		.name		= "N25Q00A..1G", /* ..1G = 1.8V, uniform 64KB/4KB blocks/sectors */
13272 		.bustype	= BUS_SPI,
13273 		.manufacture_id	= ST_ID,
13274 		.model_id	= ST_N25Q00A__1G,
13275 		.total_size	= 131072,
13276 		.page_size	= 256,
13277 		/* supports SFDP */
13278 		/* OTP: 64B total; read 0x4B, write 0x42 */
13279 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA_WREN,
13280 		.tested		= TEST_UNTESTED,
13281 		.probe		= PROBE_SPI_RDID,
13282 		.probe_timing	= TIMING_ZERO,
13283 		.block_erasers	=
13284 		{
13285 			{
13286 				.eraseblocks = { {4 * 1024, 32768} },
13287 				.block_erase = SPI_BLOCK_ERASE_21,
13288 			}, {
13289 				.eraseblocks = { {4 * 1024, 32768} },
13290 				.block_erase = SPI_BLOCK_ERASE_20,
13291 			}, {
13292 				.eraseblocks = { {64 * 1024, 2048} },
13293 				.block_erase = SPI_BLOCK_ERASE_DC,
13294 			}, {
13295 				.eraseblocks = { {64 * 1024, 2048} },
13296 				.block_erase = SPI_BLOCK_ERASE_D8,
13297 			}, {
13298 				.eraseblocks = { {32768 * 1024, 4} },
13299 				.block_erase = SPI_BLOCK_ERASE_C4,
13300 			}
13301 		},
13302 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_N25Q, /* TODO: config, lock, flag regs */
13303 		.unlock		= SPI_DISABLE_BLOCKPROTECT_N25Q, /* TODO: per 64kB sector lock registers */
13304 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
13305 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
13306 		.voltage	= {1700, 2000},
13307 	},
13308 
13309 	{
13310 		.vendor		= "Micron/Numonyx/ST",
13311 		.name		= "N25Q00A..3G", /* ..3G = 3V, uniform 64KB/4KB blocks/sectors */
13312 		.bustype	= BUS_SPI,
13313 		.manufacture_id	= ST_ID,
13314 		.model_id	= ST_N25Q00A__3G,
13315 		.total_size	= 131072,
13316 		.page_size	= 256,
13317 		/* supports SFDP */
13318 		/* OTP: 64B total; read 0x4B, write 0x42 */
13319 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA_WREN,
13320 		.tested		= TEST_UNTESTED,
13321 		.probe		= PROBE_SPI_RDID,
13322 		.probe_timing	= TIMING_ZERO,
13323 		.block_erasers	=
13324 		{
13325 			{
13326 				.eraseblocks = { {4 * 1024, 32768} },
13327 				.block_erase = SPI_BLOCK_ERASE_21,
13328 			}, {
13329 				.eraseblocks = { {4 * 1024, 32768} },
13330 				.block_erase = SPI_BLOCK_ERASE_20,
13331 			}, {
13332 				.eraseblocks = { {64 * 1024, 2048} },
13333 				.block_erase = SPI_BLOCK_ERASE_DC,
13334 			}, {
13335 				.eraseblocks = { {64 * 1024, 2048} },
13336 				.block_erase = SPI_BLOCK_ERASE_D8,
13337 			}, {
13338 				.eraseblocks = { {32768 * 1024, 4} },
13339 				.block_erase = SPI_BLOCK_ERASE_C4,
13340 			}
13341 		},
13342 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_N25Q, /* TODO: config, lock, flag regs */
13343 		.unlock		= SPI_DISABLE_BLOCKPROTECT_N25Q, /* TODO: per 64kB sector lock registers */
13344 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
13345 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
13346 		.voltage	= {2700, 3600},
13347 	},
13348 
13349 	{
13350 		.vendor		= "Micron/Numonyx/ST",
13351 		.name		= "N25Q016",
13352 		.bustype	= BUS_SPI,
13353 		.manufacture_id	= ST_ID,
13354 		.model_id	= ST_N25Q016__1E,
13355 		.total_size	= 2048,
13356 		.page_size	= 256,
13357 		/* supports SFDP */
13358 		/* OTP: 64B total; read 0x4B, write 0x42 */
13359 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
13360 		.tested		= TEST_UNTESTED,
13361 		.probe		= PROBE_SPI_RDID,
13362 		.probe_timing	= TIMING_ZERO,
13363 		.block_erasers	=
13364 		{
13365 			{
13366 				.eraseblocks = { {4 * 1024, 512} },
13367 				.block_erase = SPI_BLOCK_ERASE_20,
13368 			}, {
13369 				.eraseblocks = { {32 * 1024, 64} },
13370 				.block_erase = SPI_BLOCK_ERASE_52,
13371 			}, {
13372 				.eraseblocks = { {64 * 1024, 32} },
13373 				.block_erase = SPI_BLOCK_ERASE_D8,
13374 			}, {
13375 				.eraseblocks = { {2 * 1024 * 1024, 1} },
13376 				.block_erase = SPI_BLOCK_ERASE_C7,
13377 			}
13378 		},
13379 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_N25Q, /* TODO: config, lock, flag regs */
13380 		.unlock		= SPI_DISABLE_BLOCKPROTECT_N25Q, /* TODO: per 64kB sector lock registers */
13381 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
13382 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
13383 		.voltage	= {1700, 2000},
13384 	},
13385 
13386 	{
13387 		.vendor		= "Micron/Numonyx/ST",
13388 		.name		= "N25Q032..1E",
13389 		.bustype	= BUS_SPI,
13390 		.manufacture_id	= ST_ID,
13391 		.model_id	= ST_N25Q032__1E,
13392 		.total_size	= 4096,
13393 		.page_size	= 256,
13394 		/* supports SFDP */
13395 		/* OTP: 64B total; read 0x4B, write 0x42 */
13396 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
13397 		.tested		= TEST_UNTESTED,
13398 		.probe		= PROBE_SPI_RDID,
13399 		.probe_timing	= TIMING_ZERO,
13400 		.block_erasers	=
13401 		{
13402 			{
13403 				.eraseblocks = { {4 * 1024, 1024} },
13404 				.block_erase = SPI_BLOCK_ERASE_20,
13405 			}, {
13406 				.eraseblocks = { {64 * 1024, 64} },
13407 				.block_erase = SPI_BLOCK_ERASE_D8,
13408 			}, {
13409 				.eraseblocks = { {4 * 1024 * 1024, 1} },
13410 				.block_erase = SPI_BLOCK_ERASE_C7,
13411 			}
13412 		},
13413 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_N25Q, /* TODO: config, lock, flag regs */
13414 		.unlock		= SPI_DISABLE_BLOCKPROTECT_N25Q, /* TODO: per 64kB sector lock registers */
13415 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
13416 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
13417 		.voltage	= {1700, 2000},
13418 		.reg_bits	=
13419 		{
13420 			/*
13421 			 * There is also a volatile lock register per 64KiB sector, which is not
13422 			 * mutually exclusive with BP-based protection.
13423 			 */
13424 			.srp    = {STATUS1, 7, RW},
13425 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
13426 			.tb     = {STATUS1, 5, RW},
13427 		},
13428 		.decode_range	= DECODE_RANGE_SPI25,
13429 	},
13430 
13431 	{
13432 		.vendor		= "Micron/Numonyx/ST",
13433 		.name		= "N25Q032..3E",
13434 		.bustype	= BUS_SPI,
13435 		.manufacture_id	= ST_ID,
13436 		.model_id	= ST_N25Q032__3E,
13437 		.total_size	= 4096,
13438 		.page_size	= 256,
13439 		/* supports SFDP */
13440 		/* OTP: 64B total; read 0x4B, write 0x42 */
13441 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
13442 		.tested		= TEST_OK_PREW,
13443 		.probe		= PROBE_SPI_RDID,
13444 		.probe_timing	= TIMING_ZERO,
13445 		.block_erasers	=
13446 		{
13447 			{
13448 				.eraseblocks = { {4 * 1024, 1024} },
13449 				.block_erase = SPI_BLOCK_ERASE_20,
13450 			}, {
13451 				.eraseblocks = { {64 * 1024, 64} },
13452 				.block_erase = SPI_BLOCK_ERASE_D8,
13453 			}, {
13454 				.eraseblocks = { {4 * 1024 * 1024, 1} },
13455 				.block_erase = SPI_BLOCK_ERASE_C7,
13456 			}
13457 		},
13458 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_N25Q, /* TODO: config, lock, flag regs */
13459 		.unlock		= SPI_DISABLE_BLOCKPROTECT_N25Q, /* TODO: per 64kB sector lock registers */
13460 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
13461 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
13462 		.voltage	= {2700, 3600},
13463 		.reg_bits	=
13464 		{
13465 			/*
13466 			 * There is also a volatile lock register per 64KiB sector, which is not
13467 			 * mutually exclusive with BP-based protection.
13468 			 */
13469 			.srp    = {STATUS1, 7, RW},
13470 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
13471 			.tb     = {STATUS1, 5, RW},
13472 		},
13473 		.decode_range	= DECODE_RANGE_SPI25,
13474 	},
13475 
13476 	{
13477 		.vendor		= "Micron/Numonyx/ST",
13478 		.name		= "N25Q064..1E", /* ..1E = 1.8V, uniform 64KB/4KB blocks/sectors */
13479 		.bustype	= BUS_SPI,
13480 		.manufacture_id	= ST_ID,
13481 		.model_id	= ST_N25Q064__1E,
13482 		.total_size	= 8192,
13483 		.page_size	= 256,
13484 		/* supports SFDP */
13485 		/* OTP: 64B total; read 0x4B, write 0x42 */
13486 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
13487 		.tested		= TEST_OK_PREW,
13488 		.probe		= PROBE_SPI_RDID,
13489 		.probe_timing	= TIMING_ZERO,
13490 		.block_erasers	=
13491 		{
13492 			{
13493 				.eraseblocks = { {4 * 1024, 2048 } },
13494 				.block_erase = SPI_BLOCK_ERASE_20,
13495 			}, {
13496 				.eraseblocks = { {64 * 1024, 128} },
13497 				.block_erase = SPI_BLOCK_ERASE_D8,
13498 			}, {
13499 				.eraseblocks = { {8 * 1024 * 1024, 1} },
13500 				.block_erase = SPI_BLOCK_ERASE_C7,
13501 			}
13502 		},
13503 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_N25Q, /* TODO: config, lock, flag regs */
13504 		.unlock		= SPI_DISABLE_BLOCKPROTECT_N25Q, /* TODO: per 64kB sector lock registers */
13505 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
13506 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
13507 		.voltage	= {1700, 2000},
13508 		.reg_bits	=
13509 		{
13510 			/*
13511 			 * There is also a volatile lock register per 64KiB sector, which is not
13512 			 * mutually exclusive with BP-based protection.
13513 			 */
13514 			.srp    = {STATUS1, 7, RW},
13515 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}, {STATUS1, 6, RW}},
13516 			.tb     = {STATUS1, 5, RW},
13517 		},
13518 		.decode_range	= DECODE_RANGE_SPI25,
13519 	},
13520 
13521 	{
13522 		.vendor		= "Micron/Numonyx/ST",
13523 		.name		= "N25Q064..3E", /* ..3E = 3V, uniform 64KB/4KB blocks/sectors */
13524 		.bustype	= BUS_SPI,
13525 		.manufacture_id	= ST_ID,
13526 		.model_id	= ST_N25Q064__3E,
13527 		.total_size	= 8192,
13528 		.page_size	= 256,
13529 		/* supports SFDP */
13530 		/* OTP: 64B total; read 0x4B, write 0x42 */
13531 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
13532 		.tested		= TEST_OK_PREW,
13533 		.probe		= PROBE_SPI_RDID,
13534 		.probe_timing	= TIMING_ZERO,
13535 		.block_erasers	=
13536 		{
13537 			{
13538 				.eraseblocks = { {4 * 1024, 2048 } },
13539 				.block_erase = SPI_BLOCK_ERASE_20,
13540 			}, {
13541 				.eraseblocks = { {64 * 1024, 128} },
13542 				.block_erase = SPI_BLOCK_ERASE_D8,
13543 			}, {
13544 				.eraseblocks = { {8 * 1024 * 1024, 1} },
13545 				.block_erase = SPI_BLOCK_ERASE_C7,
13546 			}
13547 		},
13548 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_N25Q, /* TODO: config, lock, flag regs */
13549 		.unlock		= SPI_DISABLE_BLOCKPROTECT_N25Q, /* TODO: per 64kB sector lock registers */
13550 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
13551 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
13552 		.voltage	= {2700, 3600},
13553 		.reg_bits	=
13554 		{
13555 			/*
13556 			 * There is also a volatile lock register per 64KiB sector, which is not
13557 			 * mutually exclusive with BP-based protection.
13558 			 */
13559 			.srp    = {STATUS1, 7, RW},
13560 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}, {STATUS1, 6, RW}},
13561 			.tb     = {STATUS1, 5, RW},
13562 		},
13563 		.decode_range	= DECODE_RANGE_SPI25,
13564 	},
13565 
13566 	{
13567 		.vendor		= "Micron/Numonyx/ST",
13568 		.name		= "N25Q128..1E", /* ..1E = 1.8V, uniform 64KB/4KB blocks/sectors */
13569 		.bustype	= BUS_SPI,
13570 		.manufacture_id	= ST_ID,
13571 		.model_id	= ST_N25Q128__1E,
13572 		.total_size	= 16384,
13573 		.page_size	= 256,
13574 		/* supports SFDP */
13575 		/* OTP: 64B total; read 0x4B, write 0x42 */
13576 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
13577 		.tested		= TEST_OK_PREW,
13578 		.probe		= PROBE_SPI_RDID,
13579 		.probe_timing	= TIMING_ZERO,
13580 		.block_erasers	=
13581 		{
13582 			{
13583 				.eraseblocks = { {4 * 1024, 4096 } },
13584 				.block_erase = SPI_BLOCK_ERASE_20,
13585 			}, {
13586 				.eraseblocks = { {64 * 1024, 256} },
13587 				.block_erase = SPI_BLOCK_ERASE_D8,
13588 			}, {
13589 				.eraseblocks = { {16384 * 1024, 1} },
13590 				.block_erase = SPI_BLOCK_ERASE_C7,
13591 			}
13592 		},
13593 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_N25Q, /* TODO: config, lock, flag regs */
13594 		.unlock		= SPI_DISABLE_BLOCKPROTECT_N25Q, /* TODO: per 64kB sector lock registers */
13595 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
13596 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
13597 		.voltage	= {1700, 2000},
13598 	},
13599 
13600 	{
13601 		.vendor		= "Micron/Numonyx/ST",
13602 		.name		= "N25Q128..3E", /* ..3E = 3V, uniform 64KB/4KB blocks/sectors */
13603 		.bustype	= BUS_SPI,
13604 		.manufacture_id	= ST_ID,
13605 		.model_id	= ST_N25Q128__3E,
13606 		.total_size	= 16384,
13607 		.page_size	= 256,
13608 		/* supports SFDP */
13609 		/* OTP: 64B total; read 0x4B, write 0x42 */
13610 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
13611 		.tested		= TEST_OK_PREW,
13612 		.probe		= PROBE_SPI_RDID,
13613 		.probe_timing	= TIMING_ZERO,
13614 		.block_erasers	=
13615 		{
13616 			{
13617 				.eraseblocks = { {4 * 1024, 4096 } },
13618 				.block_erase = SPI_BLOCK_ERASE_20,
13619 			}, {
13620 				.eraseblocks = { {64 * 1024, 256} },
13621 				.block_erase = SPI_BLOCK_ERASE_D8,
13622 			}, {
13623 				.eraseblocks = { {16384 * 1024, 1} },
13624 				.block_erase = SPI_BLOCK_ERASE_C7,
13625 			}
13626 		},
13627 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_N25Q, /* TODO: config, lock, flag regs */
13628 		.unlock		= SPI_DISABLE_BLOCKPROTECT_N25Q, /* TODO: per 64kB sector lock registers */
13629 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
13630 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
13631 		.voltage	= {2700, 3600},
13632 	},
13633 
13634 	{
13635 		.vendor		= "Micron/Numonyx/ST",
13636 		.name		= "N25Q256..1E", /* ..1E = 1.8V, uniform 64KB/4KB blocks/sectors */
13637 		.bustype	= BUS_SPI,
13638 		.manufacture_id	= ST_ID,
13639 		.model_id	= ST_N25Q256__1E,
13640 		.total_size	= 32768,
13641 		.page_size	= 256,
13642 		/* supports SFDP */
13643 		/* OTP: 64B total; read 0x4B, write 0x42 */
13644 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA_WREN,
13645 		.tested		= TEST_UNTESTED,
13646 		.probe		= PROBE_SPI_RDID,
13647 		.probe_timing	= TIMING_ZERO,
13648 		.block_erasers	=
13649 		{
13650 			{
13651 				.eraseblocks = { {4 * 1024, 8192} },
13652 				.block_erase = SPI_BLOCK_ERASE_21,
13653 			}, {
13654 				.eraseblocks = { {4 * 1024, 8192} },
13655 				.block_erase = SPI_BLOCK_ERASE_20,
13656 			}, {
13657 				.eraseblocks = { {64 * 1024, 512} },
13658 				.block_erase = SPI_BLOCK_ERASE_DC,
13659 			}, {
13660 				.eraseblocks = { {64 * 1024, 512} },
13661 				.block_erase = SPI_BLOCK_ERASE_D8,
13662 			}, {
13663 				.eraseblocks = { {32768 * 1024, 1} },
13664 				.block_erase = SPI_BLOCK_ERASE_C7,
13665 			}
13666 		},
13667 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_N25Q, /* TODO: config, lock, flag regs */
13668 		.unlock		= SPI_DISABLE_BLOCKPROTECT_N25Q, /* TODO: per 64kB sector lock registers */
13669 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
13670 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
13671 		.voltage	= {1700, 2000},
13672 	},
13673 
13674 	{
13675 		.vendor		= "Micron/Numonyx/ST",
13676 		.name		= "N25Q256..3E", /* ..3E = 3V, uniform 64KB/4KB blocks/sectors */
13677 		.bustype	= BUS_SPI,
13678 		.manufacture_id	= ST_ID,
13679 		.model_id	= ST_N25Q256__3E,
13680 		.total_size	= 32768,
13681 		.page_size	= 256,
13682 		/* supports SFDP */
13683 		/* OTP: 64B total; read 0x4B, write 0x42 */
13684 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA_WREN,
13685 		.tested		= TEST_UNTESTED,
13686 		.probe		= PROBE_SPI_RDID,
13687 		.probe_timing	= TIMING_ZERO,
13688 		.block_erasers	=
13689 		{
13690 			{
13691 				.eraseblocks = { {4 * 1024, 8192} },
13692 				.block_erase = SPI_BLOCK_ERASE_21,
13693 			}, {
13694 				.eraseblocks = { {4 * 1024, 8192} },
13695 				.block_erase = SPI_BLOCK_ERASE_20,
13696 			}, {
13697 				.eraseblocks = { {64 * 1024, 512} },
13698 				.block_erase = SPI_BLOCK_ERASE_DC,
13699 			}, {
13700 				.eraseblocks = { {64 * 1024, 512} },
13701 				.block_erase = SPI_BLOCK_ERASE_D8,
13702 			}, {
13703 				.eraseblocks = { {32768 * 1024, 1} },
13704 				.block_erase = SPI_BLOCK_ERASE_C7,
13705 			}
13706 		},
13707 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_N25Q, /* TODO: config, lock, flag regs */
13708 		.unlock		= SPI_DISABLE_BLOCKPROTECT_N25Q, /* TODO: per 64kB sector lock registers */
13709 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
13710 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
13711 		.voltage	= {2700, 3600},
13712 	},
13713 
13714 	{
13715 		.vendor		= "Micron/Numonyx/ST",
13716 		.name		= "N25Q512..1G", /* ..1G = 1.8V, uniform 64KB/4KB blocks/sectors */
13717 		.bustype	= BUS_SPI,
13718 		.manufacture_id	= ST_ID,
13719 		.model_id	= ST_N25Q512__1G,
13720 		.total_size	= 65536,
13721 		.page_size	= 256,
13722 		/* supports SFDP */
13723 		/* OTP: 64B total; read 0x4B, write 0x42 */
13724 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA_WREN,
13725 		.tested		= TEST_UNTESTED,
13726 		.probe		= PROBE_SPI_RDID,
13727 		.probe_timing	= TIMING_ZERO,
13728 		.block_erasers	=
13729 		{
13730 			{
13731 				.eraseblocks = { {4 * 1024, 16384} },
13732 				.block_erase = SPI_BLOCK_ERASE_21,
13733 			}, {
13734 				.eraseblocks = { {4 * 1024, 16384} },
13735 				.block_erase = SPI_BLOCK_ERASE_20,
13736 			}, {
13737 				.eraseblocks = { {64 * 1024, 1024} },
13738 				.block_erase = SPI_BLOCK_ERASE_DC,
13739 			}, {
13740 				.eraseblocks = { {64 * 1024, 1024} },
13741 				.block_erase = SPI_BLOCK_ERASE_D8,
13742 			}, {
13743 				.eraseblocks = { {32768 * 1024, 2} },
13744 				.block_erase = SPI_BLOCK_ERASE_C4,
13745 			}
13746 		},
13747 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_N25Q, /* TODO: config, lock, flag regs */
13748 		.unlock		= SPI_DISABLE_BLOCKPROTECT_N25Q, /* TODO: per 64kB sector lock registers */
13749 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
13750 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
13751 		.voltage	= {1700, 2000},
13752 	},
13753 
13754 	{
13755 		.vendor		= "Micron/Numonyx/ST",
13756 		.name		= "N25Q512..3G", /* ..3G = 3V, uniform 64KB/4KB blocks/sectors */
13757 		.bustype	= BUS_SPI,
13758 		.manufacture_id	= ST_ID,
13759 		.model_id	= ST_N25Q512__3G,
13760 		.total_size	= 65536,
13761 		.page_size	= 256,
13762 		/* supports SFDP */
13763 		/* OTP: 64B total; read 0x4B, write 0x42 */
13764 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA_WREN,
13765 		.tested		= TEST_OK_PREW,
13766 		.probe		= PROBE_SPI_RDID,
13767 		.probe_timing	= TIMING_ZERO,
13768 		.block_erasers	=
13769 		{
13770 			{
13771 				.eraseblocks = { {4 * 1024, 16384} },
13772 				.block_erase = SPI_BLOCK_ERASE_21,
13773 			}, {
13774 				.eraseblocks = { {4 * 1024, 16384} },
13775 				.block_erase = SPI_BLOCK_ERASE_20,
13776 			}, {
13777 				.eraseblocks = { {64 * 1024, 1024} },
13778 				.block_erase = SPI_BLOCK_ERASE_DC,
13779 			}, {
13780 				.eraseblocks = { {64 * 1024, 1024} },
13781 				.block_erase = SPI_BLOCK_ERASE_D8,
13782 			}, {
13783 				.eraseblocks = { {32768 * 1024, 2} },
13784 				.block_erase = SPI_BLOCK_ERASE_C4,
13785 			}
13786 		},
13787 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_N25Q, /* TODO: config, lock, flag regs */
13788 		.unlock		= SPI_DISABLE_BLOCKPROTECT_N25Q, /* TODO: per 64kB sector lock registers */
13789 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
13790 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
13791 		.voltage	= {2700, 3600},
13792 	},
13793 
13794 	{
13795 		.vendor		= "Micron",
13796 		.name		= "MT25QL01G", /* L = 3V, uniform 64KB/4KB blocks/sectors */
13797 		.bustype	= BUS_SPI,
13798 		.manufacture_id	= ST_ID,
13799 		.model_id	= ST_N25Q00A__3G,
13800 		.total_size	= 131072,
13801 		.page_size	= 256,
13802 		/* supports SFDP */
13803 		/* OTP: 64B total; read 0x4B, write 0x42 */
13804 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA_WREN,
13805 		.tested		= TEST_OK_PREW,
13806 		.probe		= PROBE_SPI_RDID,
13807 		.probe_timing	= TIMING_ZERO,
13808 		.block_erasers	=
13809 		{
13810 			{
13811 				.eraseblocks = { {4 * 1024, 32768} },
13812 				.block_erase = SPI_BLOCK_ERASE_21,
13813 			}, {
13814 				.eraseblocks = { {4 * 1024, 32768} },
13815 				.block_erase = SPI_BLOCK_ERASE_20,
13816 			}, {
13817 				.eraseblocks = { {32 * 1024, 4096} },
13818 				.block_erase = SPI_BLOCK_ERASE_5C,
13819 			}, {
13820 				.eraseblocks = { {32 * 1024, 4096} },
13821 				.block_erase = SPI_BLOCK_ERASE_52,
13822 			}, {
13823 				.eraseblocks = { {64 * 1024, 2048} },
13824 				.block_erase = SPI_BLOCK_ERASE_DC,
13825 			}, {
13826 				.eraseblocks = { {64 * 1024, 2048} },
13827 				.block_erase = SPI_BLOCK_ERASE_D8,
13828 			}, {
13829 				.eraseblocks = { {65536 * 1024, 2} },
13830 				.block_erase = SPI_BLOCK_ERASE_C4,
13831 			}
13832 		},
13833 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_N25Q, /* TODO: config, lock, flag regs */
13834 		.unlock		= SPI_DISABLE_BLOCKPROTECT_N25Q, /* TODO: per 64kB sector lock registers */
13835 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
13836 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
13837 		.voltage	= {2700, 3600},
13838 	},
13839 
13840 	{
13841 		.vendor		= "Micron",
13842 		.name		= "MT25QU01G", /* U = 1.8V, uniform 64KB/4KB blocks/sectors */
13843 		.bustype	= BUS_SPI,
13844 		.manufacture_id	= ST_ID,
13845 		.model_id	= ST_N25Q00A__1G,
13846 		.total_size	= 131072,
13847 		.page_size	= 256,
13848 		/* supports SFDP */
13849 		/* OTP: 64B total; read 0x4B, write 0x42 */
13850 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA_WREN,
13851 		.tested		= TEST_UNTESTED,
13852 		.probe		= PROBE_SPI_RDID,
13853 		.probe_timing	= TIMING_ZERO,
13854 		.block_erasers	=
13855 		{
13856 			{
13857 				.eraseblocks = { {4 * 1024, 32768} },
13858 				.block_erase = SPI_BLOCK_ERASE_21,
13859 			}, {
13860 				.eraseblocks = { {4 * 1024, 32768} },
13861 				.block_erase = SPI_BLOCK_ERASE_20,
13862 			}, {
13863 				.eraseblocks = { {32 * 1024, 4096} },
13864 				.block_erase = SPI_BLOCK_ERASE_5C,
13865 			}, {
13866 				.eraseblocks = { {32 * 1024, 4096} },
13867 				.block_erase = SPI_BLOCK_ERASE_52,
13868 			}, {
13869 				.eraseblocks = { {64 * 1024, 2048} },
13870 				.block_erase = SPI_BLOCK_ERASE_DC,
13871 			}, {
13872 				.eraseblocks = { {64 * 1024, 2048} },
13873 				.block_erase = SPI_BLOCK_ERASE_D8,
13874 			}, {
13875 				.eraseblocks = { {65536 * 1024, 2} },
13876 				.block_erase = SPI_BLOCK_ERASE_C4,
13877 			}
13878 		},
13879 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_N25Q, /* TODO: config, lock, flag regs */
13880 		.unlock		= SPI_DISABLE_BLOCKPROTECT_N25Q, /* TODO: per 64kB sector lock registers */
13881 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
13882 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
13883 		.voltage	= {1700, 2000},
13884 	},
13885 
13886 	{
13887 		.vendor		= "Micron",
13888 		.name		= "MT25QL02G", /* L = 3V, uniform 64KB/4KB blocks/sectors */
13889 		.bustype	= BUS_SPI,
13890 		.manufacture_id	= ST_ID,
13891 		.model_id	= ST_MT25QL02G,
13892 		.total_size	= 262144,
13893 		.page_size	= 256,
13894 		/* supports SFDP */
13895 		/* OTP: 64B total; read 0x4B, write 0x42 */
13896 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA_WREN,
13897 		.tested		= TEST_UNTESTED,
13898 		.probe		= PROBE_SPI_RDID,
13899 		.probe_timing	= TIMING_ZERO,
13900 		.block_erasers	=
13901 		{
13902 			{
13903 				.eraseblocks = { {4 * 1024, 65536} },
13904 				.block_erase = SPI_BLOCK_ERASE_21,
13905 			}, {
13906 				.eraseblocks = { {4 * 1024, 65536} },
13907 				.block_erase = SPI_BLOCK_ERASE_20,
13908 			}, {
13909 				.eraseblocks = { {32 * 1024, 8192} },
13910 				.block_erase = SPI_BLOCK_ERASE_5C,
13911 			}, {
13912 				.eraseblocks = { {32 * 1024, 8192} },
13913 				.block_erase = SPI_BLOCK_ERASE_52,
13914 			}, {
13915 				.eraseblocks = { {64 * 1024, 4096} },
13916 				.block_erase = SPI_BLOCK_ERASE_DC,
13917 			}, {
13918 				.eraseblocks = { {64 * 1024, 4096} },
13919 				.block_erase = SPI_BLOCK_ERASE_D8,
13920 			}, {
13921 				.eraseblocks = { {65536 * 1024, 4} },
13922 				.block_erase = SPI_BLOCK_ERASE_C4,
13923 			}
13924 		},
13925 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_N25Q, /* TODO: config, lock, flag regs */
13926 		.unlock		= SPI_DISABLE_BLOCKPROTECT_N25Q, /* TODO: per 64kB sector lock registers */
13927 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
13928 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
13929 		.voltage	= {2700, 3600},
13930 	},
13931 
13932 	{
13933 		.vendor		= "Micron",
13934 		.name		= "MT25QU02G", /* U = 1.8V, uniform 64KB/4KB blocks/sectors */
13935 		.bustype	= BUS_SPI,
13936 		.manufacture_id	= ST_ID,
13937 		.model_id	= ST_MT25QU02G,
13938 		.total_size	= 262144,
13939 		.page_size	= 256,
13940 		/* supports SFDP */
13941 		/* OTP: 64B total; read 0x4B, write 0x42 */
13942 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA_WREN,
13943 		.tested		= TEST_UNTESTED,
13944 		.probe		= PROBE_SPI_RDID,
13945 		.probe_timing	= TIMING_ZERO,
13946 		.block_erasers	=
13947 		{
13948 			{
13949 				.eraseblocks = { {4 * 1024, 65536} },
13950 				.block_erase = SPI_BLOCK_ERASE_21,
13951 			}, {
13952 				.eraseblocks = { {4 * 1024, 65536} },
13953 				.block_erase = SPI_BLOCK_ERASE_20,
13954 			}, {
13955 				.eraseblocks = { {32 * 1024, 8192} },
13956 				.block_erase = SPI_BLOCK_ERASE_5C,
13957 			}, {
13958 				.eraseblocks = { {32 * 1024, 8192} },
13959 				.block_erase = SPI_BLOCK_ERASE_52,
13960 			}, {
13961 				.eraseblocks = { {64 * 1024, 4096} },
13962 				.block_erase = SPI_BLOCK_ERASE_DC,
13963 			}, {
13964 				.eraseblocks = { {64 * 1024, 4096} },
13965 				.block_erase = SPI_BLOCK_ERASE_D8,
13966 			}, {
13967 				.eraseblocks = { {65536 * 1024, 4} },
13968 				.block_erase = SPI_BLOCK_ERASE_C4,
13969 			}
13970 		},
13971 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_N25Q, /* TODO: config, lock, flag regs */
13972 		.unlock		= SPI_DISABLE_BLOCKPROTECT_N25Q, /* TODO: per 64kB sector lock registers */
13973 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
13974 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
13975 		.voltage	= {1700, 2000},
13976 	},
13977 
13978 	{
13979 		.vendor		= "Micron",
13980 		.name		= "MT25QU128", /* U = 1.8V, uniform 64KB/4KB blocks/sectors */
13981 		.bustype	= BUS_SPI,
13982 		.manufacture_id	= ST_ID,
13983 		.model_id	= ST_N25Q128__1E,
13984 		.total_size	= 16384,
13985 		.page_size	= 256,
13986 		/* supports SFDP */
13987 		/* OTP: 64B total; read 0x4B, write 0x42 */
13988 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA_WREN,
13989 		.tested		= TEST_UNTESTED,
13990 		.probe		= PROBE_SPI_RDID,
13991 		.probe_timing	= TIMING_ZERO,
13992 		.block_erasers	=
13993 		{
13994 			{
13995 				.eraseblocks = { {4 * 1024, 4096} },
13996 				.block_erase = SPI_BLOCK_ERASE_20,
13997 			}, {
13998 				.eraseblocks = { {32 * 1024, 512} },
13999 				.block_erase = SPI_BLOCK_ERASE_52,
14000 			}, {
14001 				.eraseblocks = { {64 * 1024, 256} },
14002 				.block_erase = SPI_BLOCK_ERASE_D8,
14003 			}, {
14004 				.eraseblocks = { {16384 * 1024, 1} },
14005 				.block_erase = SPI_BLOCK_ERASE_C7,
14006 			}, {
14007 				.eraseblocks = { {16384 * 1024, 1} },
14008 				.block_erase = SPI_BLOCK_ERASE_60,
14009 			}
14010 		},
14011 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_N25Q, /* TODO: config, lock, flag regs */
14012 		.unlock		= SPI_DISABLE_BLOCKPROTECT_N25Q, /* TODO: per 64kB sector lock registers */
14013 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
14014 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
14015 		.voltage	= {1700, 2000},
14016 	},
14017 
14018 	{
14019 		.vendor		= "Micron",
14020 		.name		= "MT25QL128", /* L = 3V, uniform 64KB/4KB blocks/sectors */
14021 		.bustype	= BUS_SPI,
14022 		.manufacture_id	= ST_ID,
14023 		.model_id	= ST_N25Q128__3E,
14024 		.total_size	= 16384,
14025 		.page_size	= 256,
14026 		/* supports SFDP */
14027 		/* OTP: 64B total; read 0x4B, write 0x42 */
14028 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
14029 		.tested		= TEST_OK_PREW,
14030 		.probe		= PROBE_SPI_RDID,
14031 		.probe_timing	= TIMING_ZERO,
14032 		.block_erasers	=
14033 		{
14034 			{
14035 				.eraseblocks = { {4 * 1024, 4096} },
14036 				.block_erase = SPI_BLOCK_ERASE_20,
14037 			}, {
14038 				.eraseblocks = { {32 * 1024, 512} },
14039 				.block_erase = SPI_BLOCK_ERASE_52,
14040 			}, {
14041 				.eraseblocks = { {64 * 1024, 256} },
14042 				.block_erase = SPI_BLOCK_ERASE_D8,
14043 			}, {
14044 				.eraseblocks = { {16384 * 1024, 1} },
14045 				.block_erase = SPI_BLOCK_ERASE_C7,
14046 			}, {
14047 				.eraseblocks = { {16384 * 1024, 1} },
14048 				.block_erase = SPI_BLOCK_ERASE_60,
14049 			}
14050 		},
14051 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_N25Q, /* TODO: config, lock, flag regs */
14052 		.unlock		= SPI_DISABLE_BLOCKPROTECT_N25Q, /* TODO: per 64kB sector lock registers */
14053 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
14054 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
14055 		.voltage	= {2700, 3600},
14056 	},
14057 
14058 	{
14059 		.vendor		= "Micron",
14060 		.name		= "MT25QL256", /* L = 3V, uniform 64KB/4KB blocks/sectors */
14061 		.bustype	= BUS_SPI,
14062 		.manufacture_id	= ST_ID,
14063 		.model_id	= ST_N25Q256__3E,
14064 		.total_size	= 32768,
14065 		.page_size	= 256,
14066 		/* supports SFDP */
14067 		/* OTP: 64B total; read 0x4B, write 0x42 */
14068 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA_WREN,
14069 		.tested		= TEST_OK_PREW,
14070 		.probe		= PROBE_SPI_RDID,
14071 		.probe_timing	= TIMING_ZERO,
14072 		.block_erasers	=
14073 		{
14074 			{
14075 				.eraseblocks = { {4 * 1024, 8192} },
14076 				.block_erase = SPI_BLOCK_ERASE_21,
14077 			}, {
14078 				.eraseblocks = { {4 * 1024, 8192} },
14079 				.block_erase = SPI_BLOCK_ERASE_20,
14080 			}, {
14081 				.eraseblocks = { {32 * 1024, 1024} },
14082 				.block_erase = SPI_BLOCK_ERASE_5C,
14083 			}, {
14084 				.eraseblocks = { {32 * 1024, 1024} },
14085 				.block_erase = SPI_BLOCK_ERASE_52,
14086 			}, {
14087 				.eraseblocks = { {64 * 1024, 512} },
14088 				.block_erase = SPI_BLOCK_ERASE_DC,
14089 			}, {
14090 				.eraseblocks = { {64 * 1024, 512} },
14091 				.block_erase = SPI_BLOCK_ERASE_D8,
14092 			}, {
14093 				.eraseblocks = { {32768 * 1024, 1} },
14094 				.block_erase = SPI_BLOCK_ERASE_C7,
14095 			}, {
14096 				.eraseblocks = { {32768 * 1024, 1} },
14097 				.block_erase = SPI_BLOCK_ERASE_60,
14098 			}
14099 		},
14100 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_N25Q, /* TODO: config, lock, flag regs */
14101 		.unlock		= SPI_DISABLE_BLOCKPROTECT_N25Q, /* TODO: per 64kB sector lock registers */
14102 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
14103 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
14104 		.voltage	= {2700, 3600},
14105 	},
14106 
14107 	{
14108 		.vendor		= "Micron",
14109 		.name		= "MT25QU256", /* U = 1.8V, uniform 64KB/4KB blocks/sectors */
14110 		.bustype	= BUS_SPI,
14111 		.manufacture_id	= ST_ID,
14112 		.model_id	= ST_N25Q256__1E,
14113 		.total_size	= 32768,
14114 		.page_size	= 256,
14115 		/* supports SFDP */
14116 		/* OTP: 64B total; read 0x4B, write 0x42 */
14117 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA_WREN,
14118 		.tested		= TEST_OK_PREW,
14119 		.probe		= PROBE_SPI_RDID,
14120 		.probe_timing	= TIMING_ZERO,
14121 		.block_erasers	=
14122 		{
14123 			{
14124 				.eraseblocks = { {4 * 1024, 8192} },
14125 				.block_erase = SPI_BLOCK_ERASE_21,
14126 			}, {
14127 				.eraseblocks = { {4 * 1024, 8192} },
14128 				.block_erase = SPI_BLOCK_ERASE_20,
14129 			}, {
14130 				.eraseblocks = { {32 * 1024, 1024} },
14131 				.block_erase = SPI_BLOCK_ERASE_5C,
14132 			}, {
14133 				.eraseblocks = { {32 * 1024, 1024} },
14134 				.block_erase = SPI_BLOCK_ERASE_52,
14135 			}, {
14136 				.eraseblocks = { {64 * 1024, 512} },
14137 				.block_erase = SPI_BLOCK_ERASE_DC,
14138 			}, {
14139 				.eraseblocks = { {64 * 1024, 512} },
14140 				.block_erase = SPI_BLOCK_ERASE_D8,
14141 			}, {
14142 				.eraseblocks = { {32768 * 1024, 1} },
14143 				.block_erase = SPI_BLOCK_ERASE_C7,
14144 			}, {
14145 				.eraseblocks = { {32768 * 1024, 1} },
14146 				.block_erase = SPI_BLOCK_ERASE_60,
14147 			}
14148 		},
14149 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_N25Q, /* TODO: config, lock, flag regs */
14150 		.unlock		= SPI_DISABLE_BLOCKPROTECT_N25Q, /* TODO: per 64kB sector lock registers */
14151 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
14152 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
14153 		.voltage	= {1700, 2000},
14154 	},
14155 
14156 	{
14157 		.vendor		= "Micron",
14158 		.name		= "MT25QL512", /* L = 3V, uniform 64KB/4KB blocks/sectors */
14159 		.bustype	= BUS_SPI,
14160 		.manufacture_id	= ST_ID,
14161 		.model_id	= ST_N25Q512__3G,
14162 		.total_size	= 65536,
14163 		.page_size	= 256,
14164 		/* supports SFDP */
14165 		/* OTP: 64B total; read 0x4B, write 0x42 */
14166 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA_WREN,
14167 		.tested		= TEST_OK_PREW,
14168 		.probe		= PROBE_SPI_RDID,
14169 		.probe_timing	= TIMING_ZERO,
14170 		.block_erasers	=
14171 		{
14172 			{
14173 				.eraseblocks = { {4 * 1024, 16384} },
14174 				.block_erase = SPI_BLOCK_ERASE_21,
14175 			}, {
14176 				.eraseblocks = { {4 * 1024, 16384} },
14177 				.block_erase = SPI_BLOCK_ERASE_20,
14178 			}, {
14179 				.eraseblocks = { {32 * 1024, 2048} },
14180 				.block_erase = SPI_BLOCK_ERASE_5C,
14181 			}, {
14182 				.eraseblocks = { {32 * 1024, 2048} },
14183 				.block_erase = SPI_BLOCK_ERASE_52,
14184 			}, {
14185 				.eraseblocks = { {64 * 1024, 1024} },
14186 				.block_erase = SPI_BLOCK_ERASE_DC,
14187 			}, {
14188 				.eraseblocks = { {64 * 1024, 1024} },
14189 				.block_erase = SPI_BLOCK_ERASE_D8,
14190 			}, {
14191 				.eraseblocks = { {65536 * 1024, 1} },
14192 				.block_erase = SPI_BLOCK_ERASE_C7,
14193 			}, {
14194 				.eraseblocks = { {65536 * 1024, 1} },
14195 				.block_erase = SPI_BLOCK_ERASE_60,
14196 			}
14197 		},
14198 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_N25Q, /* TODO: config, lock, flag regs */
14199 		.unlock		= SPI_DISABLE_BLOCKPROTECT_N25Q, /* TODO: per 64kB sector lock registers */
14200 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
14201 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
14202 		.voltage	= {2700, 3600},
14203 		.reg_bits	=
14204 		{
14205 			.srp    = {STATUS1, 7, RW},
14206 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}, {STATUS1, 6, RW}},
14207 			.tb     = {STATUS1, 5, RW},
14208 		},
14209 		.decode_range	= DECODE_RANGE_SPI25,
14210 	},
14211 
14212 	{
14213 		.vendor		= "Micron",
14214 		.name		= "MT25QU512", /* U = 1.8V, uniform 64KB/4KB blocks/sectors */
14215 		.bustype	= BUS_SPI,
14216 		.manufacture_id	= ST_ID,
14217 		.model_id	= ST_N25Q512__1G,
14218 		.total_size	= 65536,
14219 		.page_size	= 256,
14220 		/* supports SFDP */
14221 		/* OTP: 64B total; read 0x4B, write 0x42 */
14222 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA_WREN,
14223 		.tested		= TEST_OK_PREW,
14224 		.probe		= PROBE_SPI_RDID,
14225 		.probe_timing	= TIMING_ZERO,
14226 		.block_erasers	=
14227 		{
14228 			{
14229 				.eraseblocks = { {4 * 1024, 16384} },
14230 				.block_erase = SPI_BLOCK_ERASE_21,
14231 			}, {
14232 				.eraseblocks = { {4 * 1024, 16384} },
14233 				.block_erase = SPI_BLOCK_ERASE_20,
14234 			}, {
14235 				.eraseblocks = { {32 * 1024, 2048} },
14236 				.block_erase = SPI_BLOCK_ERASE_5C,
14237 			}, {
14238 				.eraseblocks = { {32 * 1024, 2048} },
14239 				.block_erase = SPI_BLOCK_ERASE_52,
14240 			}, {
14241 				.eraseblocks = { {64 * 1024, 1024} },
14242 				.block_erase = SPI_BLOCK_ERASE_DC,
14243 			}, {
14244 				.eraseblocks = { {64 * 1024, 1024} },
14245 				.block_erase = SPI_BLOCK_ERASE_D8,
14246 			}, {
14247 				.eraseblocks = { {65536 * 1024, 1} },
14248 				.block_erase = SPI_BLOCK_ERASE_C7,
14249 			}, {
14250 				.eraseblocks = { {65536 * 1024, 1} },
14251 				.block_erase = SPI_BLOCK_ERASE_60,
14252 			}
14253 		},
14254 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_N25Q, /* TODO: config, lock, flag regs */
14255 		.unlock		= SPI_DISABLE_BLOCKPROTECT_N25Q, /* TODO: per 64kB sector lock registers */
14256 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
14257 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
14258 		.voltage	= {1700, 2000},
14259 	},
14260 
14261 	{
14262 		.vendor		= "MoselVitelic",
14263 		.name		= "V29C51000B",
14264 		.bustype	= BUS_PARALLEL,
14265 		.manufacture_id	= SYNCMOS_MVC_ID,
14266 		.model_id	= MVC_V29C51000B,
14267 		.total_size	= 64,
14268 		.page_size	= 512,
14269 		.feature_bits	= FEATURE_EITHER_RESET,
14270 		.tested		= TEST_UNTESTED,
14271 		.probe		= PROBE_JEDEC,
14272 		.probe_timing	= TIMING_ZERO,
14273 		.block_erasers	=
14274 		{
14275 			{
14276 				.eraseblocks = { {512, 128} },
14277 				.block_erase = JEDEC_SECTOR_ERASE,
14278 			}, {
14279 				.eraseblocks = { {64 * 1024, 1} },
14280 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
14281 			},
14282 		},
14283 		.write		= WRITE_JEDEC1,
14284 		.read		= READ_MEMMAPPED,
14285 		.voltage	= {4500, 5500},
14286 	},
14287 
14288 	{
14289 		.vendor		= "MoselVitelic",
14290 		.name		= "V29C51000T",
14291 		.bustype	= BUS_PARALLEL,
14292 		.manufacture_id	= SYNCMOS_MVC_ID,
14293 		.model_id	= MVC_V29C51000T,
14294 		.total_size	= 64,
14295 		.page_size	= 512,
14296 		.feature_bits	= FEATURE_EITHER_RESET,
14297 		.tested		= TEST_UNTESTED,
14298 		.probe		= PROBE_JEDEC,
14299 		.probe_timing	= TIMING_ZERO,
14300 		.block_erasers	=
14301 		{
14302 			{
14303 				.eraseblocks = { {512, 128} },
14304 				.block_erase = JEDEC_SECTOR_ERASE,
14305 			}, {
14306 				.eraseblocks = { {64 * 1024, 1} },
14307 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
14308 			},
14309 		},
14310 		.write		= WRITE_JEDEC1,
14311 		.read		= READ_MEMMAPPED,
14312 		.voltage	= {4500, 5500},
14313 	},
14314 
14315 	{
14316 		.vendor		= "MoselVitelic",
14317 		.name		= "V29C51400B",
14318 		.bustype	= BUS_PARALLEL,
14319 		.manufacture_id	= SYNCMOS_MVC_ID,
14320 		.model_id	= MVC_V29C51400B,
14321 		.total_size	= 512,
14322 		.page_size	= 1024,
14323 		.feature_bits	= FEATURE_EITHER_RESET,
14324 		.tested		= TEST_UNTESTED,
14325 		.probe		= PROBE_JEDEC,
14326 		.probe_timing	= TIMING_ZERO,
14327 		.block_erasers	=
14328 		{
14329 			{
14330 				.eraseblocks = { {1024, 512} },
14331 				.block_erase = JEDEC_SECTOR_ERASE,
14332 			}, {
14333 				.eraseblocks = { {512 * 1024, 1} },
14334 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
14335 			},
14336 		},
14337 		.write		= WRITE_JEDEC1,
14338 		.read		= READ_MEMMAPPED,
14339 		.voltage	= {4500, 5500},
14340 	},
14341 
14342 	{
14343 		.vendor		= "MoselVitelic",
14344 		.name		= "V29C51400T",
14345 		.bustype	= BUS_PARALLEL,
14346 		.manufacture_id	= SYNCMOS_MVC_ID,
14347 		.model_id	= MVC_V29C51400T,
14348 		.total_size	= 512,
14349 		.page_size	= 1024,
14350 		.feature_bits	= FEATURE_EITHER_RESET,
14351 		.tested		= TEST_UNTESTED,
14352 		.probe		= PROBE_JEDEC,
14353 		.probe_timing	= TIMING_ZERO,
14354 		.block_erasers	=
14355 		{
14356 			{
14357 				.eraseblocks = { {1024, 512} },
14358 				.block_erase = JEDEC_SECTOR_ERASE,
14359 			}, {
14360 				.eraseblocks = { {512 * 1024, 1} },
14361 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
14362 			},
14363 		},
14364 		.write		= WRITE_JEDEC1,
14365 		.read		= READ_MEMMAPPED,
14366 		.voltage	= {4500, 5500},
14367 	},
14368 
14369 	{
14370 		.vendor		= "MoselVitelic",
14371 		.name		= "V29LC51000",
14372 		.bustype	= BUS_PARALLEL,
14373 		.manufacture_id	= SYNCMOS_MVC_ID,
14374 		.model_id	= MVC_V29LC51000,
14375 		.total_size	= 64,
14376 		.page_size	= 512,
14377 		.feature_bits	= FEATURE_EITHER_RESET,
14378 		.tested		= TEST_UNTESTED,
14379 		.probe		= PROBE_JEDEC,
14380 		.probe_timing	= TIMING_ZERO,
14381 		.block_erasers	=
14382 		{
14383 			{
14384 				.eraseblocks = { {512, 128} },
14385 				.block_erase = JEDEC_SECTOR_ERASE,
14386 			}, {
14387 				.eraseblocks = { {64 * 1024, 1} },
14388 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
14389 			},
14390 		},
14391 		.write		= WRITE_JEDEC1,
14392 		.read		= READ_MEMMAPPED,
14393 		.voltage	= {4500, 5500},
14394 	},
14395 
14396 	{
14397 		.vendor		= "MoselVitelic",
14398 		.name		= "V29LC51001",
14399 		.bustype	= BUS_PARALLEL,
14400 		.manufacture_id	= SYNCMOS_MVC_ID,
14401 		.model_id	= MVC_V29LC51001,
14402 		.total_size	= 128,
14403 		.page_size	= 512,
14404 		.feature_bits	= FEATURE_EITHER_RESET,
14405 		.tested		= TEST_UNTESTED,
14406 		.probe		= PROBE_JEDEC,
14407 		.probe_timing	= TIMING_ZERO,
14408 		.block_erasers	=
14409 		{
14410 			{
14411 				.eraseblocks = { {512, 256} },
14412 				.block_erase = JEDEC_SECTOR_ERASE,
14413 			}, {
14414 				.eraseblocks = { {128 * 1024, 1} },
14415 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
14416 			},
14417 		},
14418 		.write		= WRITE_JEDEC1,
14419 		.read		= READ_MEMMAPPED,
14420 		.voltage	= {4500, 5500},
14421 	},
14422 
14423 	{
14424 		.vendor		= "MoselVitelic",
14425 		.name		= "V29LC51002",
14426 		.bustype	= BUS_PARALLEL,
14427 		.manufacture_id	= SYNCMOS_MVC_ID,
14428 		.model_id	= MVC_V29LC51002,
14429 		.total_size	= 256,
14430 		.page_size	= 512,
14431 		.feature_bits	= FEATURE_EITHER_RESET,
14432 		.tested		= TEST_UNTESTED,
14433 		.probe		= PROBE_JEDEC,
14434 		.probe_timing	= TIMING_ZERO,
14435 		.block_erasers	=
14436 		{
14437 			{
14438 				.eraseblocks = { {512, 512} },
14439 				.block_erase = JEDEC_SECTOR_ERASE,
14440 			}, {
14441 				.eraseblocks = { {256 * 1024, 1} },
14442 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
14443 			},
14444 		},
14445 		.write		= WRITE_JEDEC1,
14446 		.read		= READ_MEMMAPPED,
14447 		.voltage	= {4500, 5500},
14448 	},
14449 
14450 	{
14451 		.vendor		= "Nantronics",
14452 		.name		= "N25S10",
14453 		.bustype	= BUS_SPI,
14454 		.manufacture_id	= NANTRONICS_ID_NOPREFIX,
14455 		.model_id	= NANTRONICS_N25S10,
14456 		.total_size	= 128,
14457 		.page_size	= 256,
14458 		.feature_bits	= FEATURE_WRSR_WREN,
14459 		.tested		= TEST_UNTESTED,
14460 		.probe		= PROBE_SPI_RDID,
14461 		.probe_timing	= TIMING_ZERO,
14462 		.block_erasers	=
14463 		{
14464 			{
14465 				.eraseblocks = { {4 * 1024, 32} },
14466 				.block_erase = SPI_BLOCK_ERASE_20,
14467 			}, {
14468 				.eraseblocks = { {4 * 1024, 32} },
14469 				.block_erase = SPI_BLOCK_ERASE_D7,
14470 			}, {
14471 				.eraseblocks = { {32 * 1024, 4} },
14472 				.block_erase = SPI_BLOCK_ERASE_52,
14473 			}, {
14474 				.eraseblocks = { {64 * 1024, 2} },
14475 				.block_erase = SPI_BLOCK_ERASE_D8,
14476 			}, {
14477 				.eraseblocks = { {128 * 1024, 1} },
14478 				.block_erase = SPI_BLOCK_ERASE_60,
14479 			}, {
14480 				.eraseblocks = { {128 * 1024, 1} },
14481 				.block_erase = SPI_BLOCK_ERASE_C7,
14482 			}
14483 		},
14484 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD,
14485 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
14486 		.write		= SPI_CHIP_WRITE256,
14487 		.read		= SPI_CHIP_READ, /* Fast read (0x0B), dual I/O read (0x3B) supported */
14488 		.voltage	= {2700, 3600},
14489 	},
14490 
14491 	{
14492 		.vendor		= "Nantronics",
14493 		.name		= "N25S16",
14494 		.bustype	= BUS_SPI,
14495 		.manufacture_id	= NANTRONICS_ID_NOPREFIX,
14496 		.model_id	= NANTRONICS_N25S16,
14497 		.total_size	= 2048,
14498 		.page_size	= 256,
14499 		.feature_bits	= FEATURE_WRSR_WREN,
14500 		.tested		= TEST_UNTESTED,
14501 		.probe		= PROBE_SPI_RDID,
14502 		.probe_timing	= TIMING_ZERO,
14503 		.block_erasers	=
14504 		{
14505 			{
14506 				.eraseblocks = { {4 * 1024, 512} },
14507 				.block_erase = SPI_BLOCK_ERASE_20,
14508 			}, {
14509 				.eraseblocks = { {64 * 1024, 32} },
14510 				.block_erase = SPI_BLOCK_ERASE_D8,
14511 			}, {
14512 				.eraseblocks = { {2048 * 1024, 1} },
14513 				.block_erase = SPI_BLOCK_ERASE_60,
14514 			}, {
14515 				.eraseblocks = { {2048 * 1024, 1} },
14516 				.block_erase = SPI_BLOCK_ERASE_C7,
14517 			}
14518 		},
14519 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD,
14520 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
14521 		.write		= SPI_CHIP_WRITE256,
14522 		.read		= SPI_CHIP_READ, /* Fast read (0x0B), dual I/O read (0x3B) supported */
14523 		.voltage	= {2700, 3600},
14524 	},
14525 
14526 	{
14527 		.vendor		= "Nantronics",
14528 		.name		= "N25S20",
14529 		.bustype	= BUS_SPI,
14530 		.manufacture_id	= NANTRONICS_ID_NOPREFIX,
14531 		.model_id	= NANTRONICS_N25S20,
14532 		.total_size	= 256,
14533 		.page_size	= 256,
14534 		.feature_bits	= FEATURE_WRSR_WREN,
14535 		.tested		= TEST_UNTESTED,
14536 		.probe		= PROBE_SPI_RDID,
14537 		.probe_timing	= TIMING_ZERO,
14538 		.block_erasers	=
14539 		{
14540 			{
14541 				.eraseblocks = { {4 * 1024, 64} },
14542 				.block_erase = SPI_BLOCK_ERASE_20,
14543 			}, {
14544 				.eraseblocks = { {4 * 1024, 64} },
14545 				.block_erase = SPI_BLOCK_ERASE_D7,
14546 			}, {
14547 				.eraseblocks = { {32 * 1024, 8} },
14548 				.block_erase = SPI_BLOCK_ERASE_52,
14549 			}, {
14550 				.eraseblocks = { {64 * 1024, 4} },
14551 				.block_erase = SPI_BLOCK_ERASE_D8,
14552 			}, {
14553 				.eraseblocks = { {256 * 1024, 1} },
14554 				.block_erase = SPI_BLOCK_ERASE_60,
14555 			}, {
14556 				.eraseblocks = { {256 * 1024, 1} },
14557 				.block_erase = SPI_BLOCK_ERASE_C7,
14558 			}
14559 		},
14560 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD,
14561 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
14562 		.write		= SPI_CHIP_WRITE256,
14563 		.read		= SPI_CHIP_READ, /* Fast read (0x0B), dual I/O read (0x3B) supported */
14564 		.voltage	= {2700, 3600},
14565 	},
14566 
14567 	{
14568 		.vendor		= "Nantronics",
14569 		.name		= "N25S40",
14570 		.bustype	= BUS_SPI,
14571 		.manufacture_id	= NANTRONICS_ID_NOPREFIX,
14572 		.model_id	= NANTRONICS_N25S40,
14573 		.total_size	= 512,
14574 		.page_size	= 256,
14575 		.feature_bits	= FEATURE_WRSR_WREN,
14576 		.tested		= TEST_UNTESTED,
14577 		.probe		= PROBE_SPI_RDID,
14578 		.probe_timing	= TIMING_ZERO,
14579 		.block_erasers	=
14580 		{
14581 			{
14582 				.eraseblocks = { {4 * 1024, 128} },
14583 				.block_erase = SPI_BLOCK_ERASE_20,
14584 			}, {
14585 				.eraseblocks = { {4 * 1024, 128} },
14586 				.block_erase = SPI_BLOCK_ERASE_D7,
14587 			}, {
14588 				.eraseblocks = { {32 * 1024, 16} },
14589 				.block_erase = SPI_BLOCK_ERASE_52,
14590 			}, {
14591 				.eraseblocks = { {64 * 1024, 8} },
14592 				.block_erase = SPI_BLOCK_ERASE_D8,
14593 			}, {
14594 				.eraseblocks = { {512 * 1024, 1} },
14595 				.block_erase = SPI_BLOCK_ERASE_60,
14596 			}, {
14597 				.eraseblocks = { {512 * 1024, 1} },
14598 				.block_erase = SPI_BLOCK_ERASE_C7,
14599 			}
14600 		},
14601 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD,
14602 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
14603 		.write		= SPI_CHIP_WRITE256,
14604 		.read		= SPI_CHIP_READ, /* Fast read (0x0B), dual I/O read (0x3B) supported */
14605 		.voltage	= {2700, 3600},
14606 	},
14607 
14608 	{
14609 		.vendor		= "Nantronics",
14610 		.name		= "N25S80",
14611 		.bustype	= BUS_SPI,
14612 		.manufacture_id	= NANTRONICS_ID_NOPREFIX,
14613 		.model_id	= NANTRONICS_N25S80,
14614 		.total_size	= 1024,
14615 		.page_size	= 256,
14616 		.feature_bits	= FEATURE_WRSR_WREN,
14617 		.tested		= TEST_UNTESTED,
14618 		.probe		= PROBE_SPI_RDID,
14619 		.probe_timing	= TIMING_ZERO,
14620 		.block_erasers	=
14621 		{
14622 			{
14623 				.eraseblocks = { {4 * 1024, 256} },
14624 				.block_erase = SPI_BLOCK_ERASE_20,
14625 			}, {
14626 				.eraseblocks = { {32 * 1024, 32} },
14627 				.block_erase = SPI_BLOCK_ERASE_52,
14628 			}, {
14629 				.eraseblocks = { {64 * 1024, 16} },
14630 				.block_erase = SPI_BLOCK_ERASE_D8,
14631 			}, {
14632 				.eraseblocks = { {1024 * 1024, 1} },
14633 				.block_erase = SPI_BLOCK_ERASE_60,
14634 			}, {
14635 				.eraseblocks = { {1024 * 1024, 1} },
14636 				.block_erase = SPI_BLOCK_ERASE_C7,
14637 			}
14638 		},
14639 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD,
14640 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
14641 		.write		= SPI_CHIP_WRITE256,
14642 		.read		= SPI_CHIP_READ, /* Fast read (0x0B), dual I/O read (0x3B) supported */
14643 		.voltage	= {2700, 3600},
14644 	},
14645 
14646 	{
14647 		.vendor		= "PMC",
14648 		.name		= "Pm25LD010(C)",
14649 		.bustype	= BUS_SPI,
14650 		.manufacture_id	= PMC_ID,
14651 		.model_id	= PMC_PM25LD010,
14652 		.total_size	= 128,
14653 		.page_size	= 256,
14654 		.feature_bits	= FEATURE_WRSR_WREN,
14655 		.tested		= TEST_OK_PREW,
14656 		.probe		= PROBE_SPI_RDID,
14657 		.probe_timing	= TIMING_ZERO,
14658 		.block_erasers	=
14659 		{
14660 			{
14661 				.eraseblocks = { {4 * 1024, 32} },
14662 				.block_erase = SPI_BLOCK_ERASE_20,
14663 			}, {
14664 				.eraseblocks = { {4 * 1024, 32} },
14665 				.block_erase = SPI_BLOCK_ERASE_D7,
14666 			}, {
14667 				.eraseblocks = { {32 * 1024, 4} },
14668 				.block_erase = SPI_BLOCK_ERASE_D8,
14669 			}, {
14670 				.eraseblocks = { {128 * 1024, 1} },
14671 				.block_erase = SPI_BLOCK_ERASE_60,
14672 			}, {
14673 				.eraseblocks = { {128 * 1024, 1} },
14674 				.block_erase = SPI_BLOCK_ERASE_C7,
14675 			}
14676 		},
14677 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
14678 		.unlock		= SPI_DISABLE_BLOCKPROTECT, /* FIXME: C version supports "Safe Guard" */
14679 		.write		= SPI_CHIP_WRITE256,
14680 		.read		= SPI_CHIP_READ, /* Fast read (0x0B), dual I/O supported */
14681 		.voltage	= {2700, 3600}, /* 2.3-3.6V for Pm25LD010 */
14682 	},
14683 
14684 	{
14685 		.vendor		= "PMC",
14686 		.name		= "Pm25LD020(C)",
14687 		.bustype	= BUS_SPI,
14688 		.manufacture_id	= PMC_ID,
14689 		.model_id	= PMC_PM25LD020,
14690 		.total_size	= 256,
14691 		.page_size	= 256,
14692 		.feature_bits	= FEATURE_WRSR_WREN,
14693 		.tested		= TEST_OK_PREW,
14694 		.probe		= PROBE_SPI_RDID,
14695 		.probe_timing	= TIMING_ZERO,
14696 		.block_erasers	=
14697 		{
14698 			{
14699 				.eraseblocks = { {4 * 1024, 64} },
14700 				.block_erase = SPI_BLOCK_ERASE_20,
14701 			}, {
14702 				.eraseblocks = { {4 * 1024, 64} },
14703 				.block_erase = SPI_BLOCK_ERASE_D7,
14704 			}, {
14705 				.eraseblocks = { {64 * 1024, 4} },
14706 				.block_erase = SPI_BLOCK_ERASE_D8,
14707 			}, {
14708 				.eraseblocks = { {256 * 1024, 1} },
14709 				.block_erase = SPI_BLOCK_ERASE_60,
14710 			}, {
14711 				.eraseblocks = { {256 * 1024, 1} },
14712 				.block_erase = SPI_BLOCK_ERASE_C7,
14713 			}
14714 		},
14715 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
14716 		.unlock		= SPI_DISABLE_BLOCKPROTECT, /* FIXME: C version supports "Safe Guard" */
14717 		.write		= SPI_CHIP_WRITE256,
14718 		.read		= SPI_CHIP_READ, /* Fast read (0x0B), dual I/O supported */
14719 		.voltage	= {2700, 3600}, /* 2.3-3.6V for Pm25LD020 */
14720 	},
14721 
14722 	{
14723 		.vendor		= "PMC",
14724 		.name		= "Pm25LD040(C)",
14725 		.bustype	= BUS_SPI,
14726 		.manufacture_id	= PMC_ID,
14727 		.model_id	= PMC_PM25LV040,
14728 		.total_size	= 512,
14729 		.page_size	= 256,
14730 		.feature_bits	= FEATURE_WRSR_WREN,
14731 		.tested		= TEST_OK_PREW,
14732 		.probe		= PROBE_SPI_RDID,
14733 		.probe_timing	= TIMING_ZERO,
14734 		.block_erasers	=
14735 		{
14736 			{
14737 				.eraseblocks = { {4 * 1024, 128} },
14738 				.block_erase = SPI_BLOCK_ERASE_20,
14739 			}, {
14740 				.eraseblocks = { {4 * 1024, 128} },
14741 				.block_erase = SPI_BLOCK_ERASE_D7,
14742 			}, {
14743 				.eraseblocks = { {64 * 1024, 8} },
14744 				.block_erase = SPI_BLOCK_ERASE_D8,
14745 			}, {
14746 				.eraseblocks = { {512 * 1024, 1} },
14747 				.block_erase = SPI_BLOCK_ERASE_60,
14748 			}, {
14749 				.eraseblocks = { {512 * 1024, 1} },
14750 				.block_erase = SPI_BLOCK_ERASE_C7,
14751 			}
14752 		},
14753 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
14754 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
14755 		.write		= SPI_CHIP_WRITE256,
14756 		.read		= SPI_CHIP_READ, /* Fast read (0x0B), dual I/O supported */
14757 		.voltage	= {2700, 3600}, /* 2.3-3.6V for Pm25LD040 */
14758 	},
14759 
14760 	{
14761 		.vendor		= "PMC",
14762 		.name		= "Pm25LD256C",
14763 		.bustype	= BUS_SPI,
14764 		.manufacture_id	= PMC_ID,
14765 		.model_id	= PMC_PM25LD256C,
14766 		.total_size	= 32,
14767 		.page_size	= 256,
14768 		.feature_bits	= FEATURE_WRSR_WREN,
14769 		.tested		= TEST_UNTESTED,
14770 		.probe		= PROBE_SPI_RDID,
14771 		.probe_timing	= TIMING_ZERO,
14772 		.block_erasers	=
14773 		{
14774 			{
14775 				.eraseblocks = { {4 * 1024, 8} },
14776 				.block_erase = SPI_BLOCK_ERASE_20,
14777 			}, {
14778 				.eraseblocks = { {4 * 1024, 8} },
14779 				.block_erase = SPI_BLOCK_ERASE_D7,
14780 			}, {
14781 				.eraseblocks = { {32 * 1024, 1} },
14782 				.block_erase = SPI_BLOCK_ERASE_D8,
14783 			}, {
14784 				.eraseblocks = { {32 * 1024, 1} },
14785 				.block_erase = SPI_BLOCK_ERASE_60,
14786 			}, {
14787 				.eraseblocks = { {32 * 1024, 1} },
14788 				.block_erase = SPI_BLOCK_ERASE_C7,
14789 			}
14790 		},
14791 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
14792 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
14793 		.write		= SPI_CHIP_WRITE256,
14794 		.read		= SPI_CHIP_READ, /* Fast read (0x0B), dual I/O supported */
14795 		.voltage	= {2700, 3600},
14796 	},
14797 
14798 	{
14799 		.vendor		= "PMC",
14800 		.name		= "Pm25LD512(C)",
14801 		.bustype	= BUS_SPI,
14802 		.manufacture_id	= PMC_ID,
14803 		.model_id	= PMC_PM25LD512,
14804 		.total_size	= 64,
14805 		.page_size	= 256,
14806 		.feature_bits	= FEATURE_WRSR_WREN,
14807 		.tested		= TEST_OK_PREW,
14808 		.probe		= PROBE_SPI_RDID,
14809 		.probe_timing	= TIMING_ZERO,
14810 		.block_erasers	=
14811 		{
14812 			{
14813 				.eraseblocks = { {4 * 1024, 16} },
14814 				.block_erase = SPI_BLOCK_ERASE_20,
14815 			}, {
14816 				.eraseblocks = { {4 * 1024, 16} },
14817 				.block_erase = SPI_BLOCK_ERASE_D7,
14818 			}, {
14819 				.eraseblocks = { {32 * 1024, 2} },
14820 				.block_erase = SPI_BLOCK_ERASE_D8,
14821 			}, {
14822 				.eraseblocks = { {64 * 1024, 1} },
14823 				.block_erase = SPI_BLOCK_ERASE_60,
14824 			}, {
14825 				.eraseblocks = { {64 * 1024, 1} },
14826 				.block_erase = SPI_BLOCK_ERASE_C7,
14827 			}
14828 		},
14829 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
14830 		.unlock		= SPI_DISABLE_BLOCKPROTECT, /* FIXME: C version supports "Safe Guard" */
14831 		.write		= SPI_CHIP_WRITE256,
14832 		.read		= SPI_CHIP_READ, /* Fast read (0x0B), dual I/O supported */
14833 		.voltage	= {2300, 3600},
14834 	},
14835 
14836 	{
14837 		.vendor		= "PMC",
14838 		.name		= "Pm25LQ016",
14839 		.bustype	= BUS_SPI,
14840 		.manufacture_id	= PMC_ID,
14841 		.model_id	= PMC_PM25LQ016,
14842 		.total_size	= 2048,
14843 		.page_size	= 256,
14844 		/* OTP: 256B total; read 0x4B, write 0xB1 */
14845 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
14846 		.tested		= TEST_UNTESTED,
14847 		.probe		= PROBE_SPI_RDID,
14848 		.probe_timing	= TIMING_ZERO,
14849 		.block_erasers	=
14850 		{
14851 			{
14852 				.eraseblocks = { {4 * 1024, 512} },
14853 				.block_erase = SPI_BLOCK_ERASE_20,
14854 			}, {
14855 				.eraseblocks = { {4 * 1024, 512} },
14856 				.block_erase = SPI_BLOCK_ERASE_D7,
14857 			}, {
14858 				.eraseblocks = { {64 * 1024, 32} },
14859 				.block_erase = SPI_BLOCK_ERASE_D8,
14860 			}, {
14861 				.eraseblocks = { {2048 * 1024, 1} },
14862 				.block_erase = SPI_BLOCK_ERASE_60,
14863 			}, {
14864 				.eraseblocks = { {2048 * 1024, 1} },
14865 				.block_erase = SPI_BLOCK_ERASE_C7,
14866 			}
14867 		},
14868 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enable */
14869 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
14870 		.write		= SPI_CHIP_WRITE256,
14871 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
14872 		.voltage	= {2300, 3600},
14873 	},
14874 
14875 	{
14876 		.vendor		= "PMC",
14877 		.name		= "Pm25LQ020",
14878 		.bustype	= BUS_SPI,
14879 		.manufacture_id	= PMC_ID,
14880 		.model_id	= PMC_PM25LQ020,
14881 		.total_size	= 256,
14882 		.page_size	= 256,
14883 		/* OTP: 256B total; read 0x4B, write 0xB1 */
14884 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
14885 		.tested		= TEST_UNTESTED,
14886 		.probe		= PROBE_SPI_RDID,
14887 		.probe_timing	= TIMING_ZERO,
14888 		.block_erasers	=
14889 		{
14890 			{
14891 				.eraseblocks = { {4 * 1024, 64} },
14892 				.block_erase = SPI_BLOCK_ERASE_20,
14893 			}, {
14894 				.eraseblocks = { {4 * 1024, 64} },
14895 				.block_erase = SPI_BLOCK_ERASE_D7,
14896 			}, {
14897 				.eraseblocks = { {64 * 1024, 4} },
14898 				.block_erase = SPI_BLOCK_ERASE_D8,
14899 			}, {
14900 				.eraseblocks = { {256 * 1024, 1} },
14901 				.block_erase = SPI_BLOCK_ERASE_60,
14902 			}, {
14903 				.eraseblocks = { {256 * 1024, 1} },
14904 				.block_erase = SPI_BLOCK_ERASE_C7,
14905 			}
14906 		},
14907 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enable */
14908 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
14909 		.write		= SPI_CHIP_WRITE256,
14910 		.read		= SPI_CHIP_READ,
14911 		.voltage	= {2300, 3600},
14912 	},
14913 
14914 	{
14915 		.vendor		= "PMC",
14916 		.name		= "Pm25LQ032C",
14917 		.bustype	= BUS_SPI,
14918 		.manufacture_id	= PMC_ID,
14919 		.model_id	= PMC_PM25LQ032C,
14920 		.total_size	= 4096,
14921 		.page_size	= 256,
14922 		/* OTP: 64B total; read 0x4B, write 0xB1 */
14923 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
14924 		.tested		= TEST_OK_PREW,
14925 		.probe		= PROBE_SPI_RDID,
14926 		.probe_timing	= TIMING_ZERO,
14927 		.block_erasers	=
14928 		{
14929 			{
14930 				.eraseblocks = { {4 * 1024, 1024} },
14931 				.block_erase = SPI_BLOCK_ERASE_20,
14932 			}, {
14933 				.eraseblocks = { {4 * 1024, 1024} },
14934 				.block_erase = SPI_BLOCK_ERASE_D7,
14935 			}, {
14936 				.eraseblocks = { {64 * 1024, 64} },
14937 				.block_erase = SPI_BLOCK_ERASE_D8,
14938 			}, {
14939 				.eraseblocks = { {4096 * 1024, 1} },
14940 				.block_erase = SPI_BLOCK_ERASE_60,
14941 			}, {
14942 				.eraseblocks = { {4096 * 1024, 1} },
14943 				.block_erase = SPI_BLOCK_ERASE_C7,
14944 			}
14945 		},
14946 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enable */
14947 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
14948 		.write		= SPI_CHIP_WRITE256,
14949 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
14950 		.voltage	= {2700, 3600},
14951 	},
14952 
14953 	{
14954 		.vendor		= "PMC",
14955 		.name		= "Pm25LQ040",
14956 		.bustype	= BUS_SPI,
14957 		.manufacture_id	= PMC_ID,
14958 		.model_id	= PMC_PM25LQ040,
14959 		.total_size	= 512,
14960 		.page_size	= 256,
14961 		/* OTP: 256B total; read 0x4B, write 0xB1 */
14962 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
14963 		.tested		= TEST_UNTESTED,
14964 		.probe		= PROBE_SPI_RDID,
14965 		.probe_timing	= TIMING_ZERO,
14966 		.block_erasers	=
14967 		{
14968 			{
14969 				.eraseblocks = { {4 * 1024, 128} },
14970 				.block_erase = SPI_BLOCK_ERASE_20,
14971 			}, {
14972 				.eraseblocks = { {4 * 1024, 128} },
14973 				.block_erase = SPI_BLOCK_ERASE_D7,
14974 			}, {
14975 				.eraseblocks = { {64 * 1024, 8} },
14976 				.block_erase = SPI_BLOCK_ERASE_D8,
14977 			}, {
14978 				.eraseblocks = { {512 * 1024, 1} },
14979 				.block_erase = SPI_BLOCK_ERASE_60,
14980 			}, {
14981 				.eraseblocks = { {512 * 1024, 1} },
14982 				.block_erase = SPI_BLOCK_ERASE_C7,
14983 			}
14984 		},
14985 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enable */
14986 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
14987 		.write		= SPI_CHIP_WRITE256,
14988 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
14989 		.voltage	= {2300, 3600},
14990 	},
14991 
14992 	{
14993 		.vendor		= "PMC",
14994 		.name		= "Pm25LQ080",
14995 		.bustype	= BUS_SPI,
14996 		.manufacture_id	= PMC_ID,
14997 		.model_id	= PMC_PM25LQ080,
14998 		.total_size	= 1024,
14999 		.page_size	= 256,
15000 		/* OTP: 64B total; read 0x4B, write 0xB1 */
15001 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
15002 		.tested		= TEST_UNTESTED,
15003 		.probe		= PROBE_SPI_RDID,
15004 		.probe_timing	= TIMING_ZERO,
15005 		.block_erasers	=
15006 		{
15007 			{
15008 				.eraseblocks = { {4 * 1024, 256} },
15009 				.block_erase = SPI_BLOCK_ERASE_20,
15010 			}, {
15011 				.eraseblocks = { {4 * 1024, 256} },
15012 				.block_erase = SPI_BLOCK_ERASE_D7,
15013 			}, {
15014 				.eraseblocks = { {64 * 1024, 16} },
15015 				.block_erase = SPI_BLOCK_ERASE_D8,
15016 			}, {
15017 				.eraseblocks = { {1024 * 1024, 1} },
15018 				.block_erase = SPI_BLOCK_ERASE_60,
15019 			}, {
15020 				.eraseblocks = { {1024 * 1024, 1} },
15021 				.block_erase = SPI_BLOCK_ERASE_C7,
15022 			}
15023 		},
15024 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD, /* bit6 is quad enable */
15025 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
15026 		.write		= SPI_CHIP_WRITE256,
15027 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
15028 		.voltage	= {2300, 3600},
15029 	},
15030 
15031 	{
15032 		.vendor		= "PMC",
15033 		.name		= "Pm25LV010",
15034 		.bustype	= BUS_SPI,
15035 		.manufacture_id	= PMC_ID_NOPREFIX,
15036 		.model_id	= PMC_PM25LV010,
15037 		.total_size	= 128,
15038 		.page_size	= 256,
15039 		.feature_bits	= FEATURE_WRSR_WREN,
15040 		.tested		= TEST_OK_PREW,
15041 		.probe		= PROBE_SPI_RES2, /* The continuation code is transferred as the 3rd byte m( */
15042 		.probe_timing	= TIMING_ZERO,
15043 		.block_erasers	=
15044 		{
15045 			{
15046 				.eraseblocks = { {4 * 1024, 32} },
15047 				.block_erase = SPI_BLOCK_ERASE_D7,
15048 			}, {
15049 				.eraseblocks = { {32 * 1024, 4} },
15050 				.block_erase = SPI_BLOCK_ERASE_D8,
15051 			}, {
15052 				.eraseblocks = { {128 * 1024, 1} },
15053 				.block_erase = SPI_BLOCK_ERASE_C7,
15054 			}
15055 		},
15056 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP1_SRWD,
15057 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
15058 		.write		= SPI_CHIP_WRITE256,
15059 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
15060 		.voltage	= {2700, 3600},
15061 	},
15062 
15063 	{
15064 		.vendor		= "PMC",
15065 		.name		= "Pm25LV010A",
15066 		.bustype	= BUS_SPI,
15067 		.manufacture_id	= PMC_ID,
15068 		.model_id	= PMC_PM25LV010,
15069 		.total_size	= 128,
15070 		.page_size	= 256,
15071 		.feature_bits	= FEATURE_WRSR_WREN,
15072 		.tested		= TEST_OK_PREW,
15073 		.probe		= PROBE_SPI_RDID,
15074 		.probe_timing	= TIMING_ZERO,
15075 		.block_erasers	=
15076 		{
15077 			{
15078 				.eraseblocks = { {4 * 1024, 32} },
15079 				.block_erase = SPI_BLOCK_ERASE_D7,
15080 			}, {
15081 				.eraseblocks = { {32 * 1024, 4} },
15082 				.block_erase = SPI_BLOCK_ERASE_D8,
15083 			}, {
15084 				.eraseblocks = { {128 * 1024, 1} },
15085 				.block_erase = SPI_BLOCK_ERASE_C7,
15086 			}
15087 		},
15088 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP1_SRWD,
15089 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
15090 		.write		= SPI_CHIP_WRITE256,
15091 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
15092 		.voltage	= {2700, 3600},
15093 	},
15094 
15095 	{
15096 		.vendor		= "PMC",
15097 		.name		= "Pm25LV016B",
15098 		.bustype	= BUS_SPI,
15099 		.manufacture_id	= PMC_ID,
15100 		.model_id	= PMC_PM25LV016B,
15101 		.total_size	= 2048,
15102 		.page_size	= 256,
15103 		.feature_bits	= FEATURE_WRSR_WREN,
15104 		.tested		= TEST_UNTESTED,
15105 		.probe		= PROBE_SPI_RDID,
15106 		.probe_timing	= TIMING_ZERO,
15107 		.block_erasers	=
15108 		{
15109 			{
15110 				.eraseblocks = { {4 * 1024, 512} },
15111 				.block_erase = SPI_BLOCK_ERASE_D7,
15112 			}, {
15113 				.eraseblocks = { {4 * 1024, 512} },
15114 				.block_erase = SPI_BLOCK_ERASE_20,
15115 			}, {
15116 				.eraseblocks = { {64 * 1024, 32} },
15117 				.block_erase = SPI_BLOCK_ERASE_D8,
15118 			}, {
15119 				.eraseblocks = { {2 * 1024 * 1024, 1} },
15120 				.block_erase = SPI_BLOCK_ERASE_60,
15121 			}, {
15122 				.eraseblocks = { {2 * 1024 * 1024, 1} },
15123 				.block_erase = SPI_BLOCK_ERASE_C7,
15124 			}
15125 		},
15126 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
15127 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
15128 		.write		= SPI_CHIP_WRITE256,
15129 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
15130 		.voltage	= {2700, 3600},
15131 	},
15132 
15133 	{
15134 		.vendor		= "PMC",
15135 		.name		= "Pm25LV020",
15136 		.bustype	= BUS_SPI,
15137 		.manufacture_id	= PMC_ID,
15138 		.model_id	= PMC_PM25LV020,
15139 		.total_size	= 256,
15140 		.page_size	= 256,
15141 		.feature_bits	= FEATURE_WRSR_WREN,
15142 		.tested		= TEST_UNTESTED,
15143 		.probe		= PROBE_SPI_RDID,
15144 		.probe_timing	= TIMING_ZERO,
15145 		.block_erasers	=
15146 		{
15147 			{
15148 				.eraseblocks = { {4 * 1024, 64} },
15149 				.block_erase = SPI_BLOCK_ERASE_D7,
15150 			}, {
15151 				.eraseblocks = { {64 * 1024, 4} },
15152 				.block_erase = SPI_BLOCK_ERASE_D8,
15153 			}, {
15154 				.eraseblocks = { {256 * 1024, 1} },
15155 				.block_erase = SPI_BLOCK_ERASE_C7,
15156 			}
15157 		},
15158 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
15159 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
15160 		.write		= SPI_CHIP_WRITE256,
15161 		.read		= SPI_CHIP_READ,
15162 		.voltage	= {2700, 3600},
15163 	},
15164 
15165 	{
15166 		.vendor		= "PMC",
15167 		.name		= "Pm25LV040",
15168 		.bustype	= BUS_SPI,
15169 		.manufacture_id	= PMC_ID,
15170 		.model_id	= PMC_PM25LV040,
15171 		.total_size	= 512,
15172 		.page_size	= 256,
15173 		.feature_bits	= FEATURE_WRSR_WREN,
15174 		.tested		= TEST_OK_PREW,
15175 		.probe		= PROBE_SPI_RDID,
15176 		.probe_timing	= TIMING_ZERO,
15177 		.block_erasers	=
15178 		{
15179 			{
15180 				.eraseblocks = { {4 * 1024, 128} },
15181 				.block_erase = SPI_BLOCK_ERASE_D7,
15182 			}, {
15183 				.eraseblocks = { {64 * 1024, 8} },
15184 				.block_erase = SPI_BLOCK_ERASE_D8,
15185 			}, {
15186 				.eraseblocks = { {512 * 1024, 1} },
15187 				.block_erase = SPI_BLOCK_ERASE_C7,
15188 			}
15189 		},
15190 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
15191 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
15192 		.write		= SPI_CHIP_WRITE256,
15193 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
15194 		.voltage	= {2700, 3600},
15195 	},
15196 
15197 	{
15198 		.vendor		= "PMC",
15199 		.name		= "Pm25LV080B",
15200 		.bustype	= BUS_SPI,
15201 		.manufacture_id	= PMC_ID,
15202 		.model_id	= PMC_PM25LV080B,
15203 		.total_size	= 1024,
15204 		.page_size	= 256,
15205 		.feature_bits	= FEATURE_WRSR_WREN,
15206 		.tested		= TEST_UNTESTED,
15207 		.probe		= PROBE_SPI_RDID,
15208 		.probe_timing	= TIMING_ZERO,
15209 		.block_erasers	=
15210 		{
15211 			{
15212 				.eraseblocks = { {4 * 1024, 256} },
15213 				.block_erase = SPI_BLOCK_ERASE_D7,
15214 			}, {
15215 				.eraseblocks = { {4 * 1024, 256} },
15216 				.block_erase = SPI_BLOCK_ERASE_20,
15217 			}, {
15218 				.eraseblocks = { {64 * 1024, 16} },
15219 				.block_erase = SPI_BLOCK_ERASE_D8,
15220 			}, {
15221 				.eraseblocks = { {1024 * 1024, 1} },
15222 				.block_erase = SPI_BLOCK_ERASE_60,
15223 			}, {
15224 				.eraseblocks = { {1024 * 1024, 1} },
15225 				.block_erase = SPI_BLOCK_ERASE_C7,
15226 			}
15227 		},
15228 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
15229 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
15230 		.write		= SPI_CHIP_WRITE256,
15231 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
15232 		.voltage	= {2700, 3600},
15233 	},
15234 
15235 	{
15236 		.vendor		= "PMC",
15237 		.name		= "Pm25LV512(A)",
15238 		.bustype	= BUS_SPI,
15239 		.manufacture_id	= PMC_ID_NOPREFIX,
15240 		.model_id	= PMC_PM25LV512,
15241 		.total_size	= 64,
15242 		.page_size	= 256,
15243 		.feature_bits	= FEATURE_WRSR_WREN,
15244 		.tested		= TEST_OK_PREW,
15245 		.probe		= PROBE_SPI_RES2, /* The continuation code is transferred as the 3rd byte m( */
15246 		.probe_timing	= TIMING_ZERO,
15247 		.block_erasers	=
15248 		{
15249 			{
15250 				.eraseblocks = { {4 * 1024, 16} },
15251 				.block_erase = SPI_BLOCK_ERASE_D7,
15252 			}, {
15253 				.eraseblocks = { {32 * 1024, 2} },
15254 				.block_erase = SPI_BLOCK_ERASE_D8,
15255 			}, {
15256 				.eraseblocks = { {64 * 1024, 1} },
15257 				.block_erase = SPI_BLOCK_ERASE_C7,
15258 			}
15259 		},
15260 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP1_SRWD,
15261 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
15262 		.write		= SPI_CHIP_WRITE256,
15263 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
15264 		.voltage	= {2700, 3600},
15265 	},
15266 
15267 	{
15268 		.vendor		= "PMC",
15269 		.name		= "Pm29F002B",
15270 		.bustype	= BUS_PARALLEL,
15271 		.manufacture_id	= PMC_ID_NOPREFIX,
15272 		.model_id	= PMC_PM29F002B,
15273 		.total_size	= 256,
15274 		.page_size	= 8 * 1024,
15275 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
15276 		.tested		= TEST_UNTESTED,
15277 		.probe		= PROBE_JEDEC,
15278 		.probe_timing	= TIMING_FIXME,
15279 		.block_erasers	=
15280 		{
15281 			{
15282 				.eraseblocks = {
15283 					{16 * 1024, 1},
15284 					{8 * 1024, 2},
15285 					{96 * 1024, 1},
15286 					{128 * 1024, 1},
15287 				},
15288 				.block_erase = JEDEC_SECTOR_ERASE,
15289 			}, {
15290 				.eraseblocks = { {256 * 1024, 1} },
15291 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
15292 			},
15293 		},
15294 		.write		= WRITE_JEDEC1,
15295 		.read		= READ_MEMMAPPED,
15296 		.voltage	= {4500, 5500},
15297 	},
15298 
15299 	{
15300 		.vendor		= "PMC",
15301 		.name		= "Pm29F002T",
15302 		.bustype	= BUS_PARALLEL,
15303 		.manufacture_id	= PMC_ID_NOPREFIX,
15304 		.model_id	= PMC_PM29F002T,
15305 		.total_size	= 256,
15306 		.page_size	= 8 * 1024,
15307 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
15308 		.tested		= TEST_OK_PREW,
15309 		.probe		= PROBE_JEDEC,
15310 		.probe_timing	= TIMING_FIXME,
15311 		.block_erasers	=
15312 		{
15313 			{
15314 				.eraseblocks = {
15315 					{128 * 1024, 1},
15316 					{96 * 1024, 1},
15317 					{8 * 1024, 2},
15318 					{16 * 1024, 1},
15319 				},
15320 				.block_erase = JEDEC_SECTOR_ERASE,
15321 			}, {
15322 				.eraseblocks = { {256 * 1024, 1} },
15323 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
15324 			},
15325 		},
15326 		.write		= WRITE_JEDEC1,
15327 		.read		= READ_MEMMAPPED,
15328 		.voltage	= {4500, 5500},
15329 	},
15330 
15331 	{
15332 		.vendor		= "PMC",
15333 		.name		= "Pm39LV010",
15334 		.bustype	= BUS_PARALLEL,
15335 		.manufacture_id	= PMC_ID_NOPREFIX,
15336 		.model_id	= PMC_PM39F010,	/* Pm39LV010 and Pm39F010 have identical IDs but different voltage */
15337 		.total_size	= 128,
15338 		.page_size	= 4096,
15339 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
15340 		.tested		= TEST_OK_PREW,
15341 		.probe		= PROBE_JEDEC,
15342 		.probe_timing	= TIMING_ZERO,	/* Datasheet has no timing info specified */
15343 		.block_erasers	=
15344 		{
15345 			{
15346 				.eraseblocks = { {4 * 1024, 32} },
15347 				.block_erase = JEDEC_SECTOR_ERASE,
15348 			}, {
15349 				.eraseblocks = { {64 * 1024, 2} },
15350 				.block_erase = JEDEC_BLOCK_ERASE,
15351 			}, {
15352 				.eraseblocks = { {128 * 1024, 1} },
15353 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
15354 			}
15355 		},
15356 		.write		= WRITE_JEDEC1,
15357 		.read		= READ_MEMMAPPED,
15358 		.voltage	= {2700, 3600},
15359 	},
15360 
15361 	{
15362 		.vendor		= "PMC",
15363 		.name		= "Pm39LV020",
15364 		.bustype	= BUS_PARALLEL,
15365 		.manufacture_id	= PMC_ID_NOPREFIX,
15366 		.model_id	= PMC_PM39LV020,
15367 		.total_size	= 256,
15368 		.page_size	= 4096,
15369 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
15370 		.tested		= TEST_UNTESTED,
15371 		.probe		= PROBE_JEDEC,
15372 		.probe_timing	= TIMING_ZERO,	/* Datasheet has no timing info specified */
15373 		.block_erasers	=
15374 		{
15375 			{
15376 				.eraseblocks = { {4 * 1024, 64} },
15377 				.block_erase = JEDEC_SECTOR_ERASE,
15378 			}, {
15379 				.eraseblocks = { {64 * 1024, 4} },
15380 				.block_erase = JEDEC_BLOCK_ERASE,
15381 			}, {
15382 				.eraseblocks = { {256 * 1024, 1} },
15383 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
15384 			}
15385 		},
15386 		.write		= WRITE_JEDEC1,
15387 		.read		= READ_MEMMAPPED,
15388 		.voltage	= {2700, 3600},
15389 	},
15390 
15391 	{
15392 		.vendor		= "PMC",
15393 		.name		= "Pm39LV040",
15394 		.bustype	= BUS_PARALLEL,
15395 		.manufacture_id	= PMC_ID_NOPREFIX,
15396 		.model_id	= PMC_PM39LV040,
15397 		.total_size	= 512,
15398 		.page_size	= 4096,
15399 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
15400 		.tested		= TEST_OK_PR,
15401 		.probe		= PROBE_JEDEC,
15402 		.probe_timing	= TIMING_ZERO,	/* Datasheet has no timing info specified */
15403 		.block_erasers	=
15404 		{
15405 			{
15406 				.eraseblocks = { {4 * 1024, 128} },
15407 				.block_erase = JEDEC_SECTOR_ERASE,
15408 			}, {
15409 				.eraseblocks = { {64 * 1024, 8} },
15410 				.block_erase = JEDEC_BLOCK_ERASE,
15411 			}, {
15412 				.eraseblocks = { {512 * 1024, 1} },
15413 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
15414 			}
15415 		},
15416 		.write		= WRITE_JEDEC1,
15417 		.read		= READ_MEMMAPPED,
15418 		.voltage	= {2700, 3600},
15419 	},
15420 
15421 	{
15422 		.vendor		= "PMC",
15423 		.name		= "Pm39LV512",
15424 		.bustype	= BUS_PARALLEL,
15425 		.manufacture_id	= PMC_ID_NOPREFIX,
15426 		.model_id	= PMC_PM39LV512,
15427 		.total_size	= 64,
15428 		.page_size	= 4096,
15429 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
15430 		.tested		= TEST_OK_PREW,
15431 		.probe		= PROBE_JEDEC,
15432 		.probe_timing	= TIMING_ZERO,	/* Datasheet has no timing info specified */
15433 		.block_erasers	=
15434 		{
15435 			{
15436 				.eraseblocks = { {4 * 1024, 16} },
15437 				.block_erase = JEDEC_SECTOR_ERASE,
15438 			}, {
15439 				.eraseblocks = { {64 * 1024, 1} },
15440 				.block_erase = JEDEC_BLOCK_ERASE,
15441 			}, {
15442 				.eraseblocks = { {64 * 1024, 1} },
15443 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
15444 			}
15445 		},
15446 		.write		= WRITE_JEDEC1,
15447 		.read		= READ_MEMMAPPED,
15448 		.voltage	= {2700, 3600},
15449 	},
15450 
15451 	{
15452 		.vendor		= "PMC",
15453 		.name		= "Pm49FL002",
15454 		.bustype	= BUS_LPC | BUS_FWH, /* A/A Mux */
15455 		.manufacture_id	= PMC_ID_NOPREFIX,
15456 		.model_id	= PMC_PM49FL002,
15457 		.total_size	= 256,
15458 		.page_size	= 16 * 1024,
15459 		.feature_bits	= FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
15460 		.tested		= TEST_OK_PR,
15461 		.probe		= PROBE_JEDEC,
15462 		.probe_timing	= TIMING_ZERO,	/* routine is wrapper to JEDEC (pm49fl00x.c) */
15463 		.block_erasers	=
15464 		{
15465 			{
15466 				.eraseblocks = { {4 * 1024, 64} },
15467 				.block_erase = JEDEC_SECTOR_ERASE,
15468 			}, {
15469 				.eraseblocks = { {16 * 1024, 16} },
15470 				.block_erase = JEDEC_BLOCK_ERASE,
15471 			}, {
15472 				.eraseblocks = { {256 * 1024, 1} },
15473 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
15474 			}
15475 		},
15476 		.unlock		= UNLOCK_REGSPACE2_UNIFORM_32K,
15477 		.write		= WRITE_JEDEC1,
15478 		.read		= READ_MEMMAPPED,
15479 		.voltage	= {3000, 3600},
15480 	},
15481 
15482 	{
15483 		.vendor		= "PMC",
15484 		.name		= "Pm49FL004",
15485 		.bustype	= BUS_LPC | BUS_FWH, /* A/A Mux */
15486 		.manufacture_id	= PMC_ID_NOPREFIX,
15487 		.model_id	= PMC_PM49FL004,
15488 		.total_size	= 512,
15489 		.page_size	= 64 * 1024,
15490 		.feature_bits	= FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
15491 		.tested		= TEST_OK_PREW,
15492 		.probe		= PROBE_JEDEC,
15493 		.probe_timing	= TIMING_ZERO,
15494 		.block_erasers	=
15495 		{
15496 			{
15497 				.eraseblocks = { {4 * 1024, 128} },
15498 				.block_erase = JEDEC_SECTOR_ERASE,
15499 			}, {
15500 				.eraseblocks = { {64 * 1024, 8} },
15501 				.block_erase = JEDEC_BLOCK_ERASE,
15502 			}, {
15503 				.eraseblocks = { {512 * 1024, 1} },
15504 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
15505 			}
15506 		},
15507 		.unlock		= UNLOCK_REGSPACE2_UNIFORM_64K,
15508 		.write		= WRITE_JEDEC1,
15509 		.read		= READ_MEMMAPPED,
15510 		.voltage	= {3000, 3600},
15511 	},
15512 
15513 	{
15514 		.vendor		= "PUYA",
15515 		.name		= "P25Q06H",
15516 		.bustype	= BUS_SPI,
15517 		.manufacture_id	= PUYA_ID,
15518 		.model_id	= PUYA_P25Q06H,
15519 		.total_size	= 64,
15520 		.page_size	= 256,
15521 		/* supports SFDP */
15522 		/* OTP: 3 x 512 bytes */
15523 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
15524 		.tested		= TEST_UNTESTED,
15525 		.probe		= PROBE_SPI_RDID,
15526 		.probe_timing	= TIMING_ZERO,
15527 		.block_erasers	=
15528 		{
15529 			{
15530 				.eraseblocks = { {256, 256} },
15531 				.block_erase = SPI_BLOCK_ERASE_81,
15532 			}, {
15533 				.eraseblocks = { {4 * 1024, 16} },
15534 				.block_erase = SPI_BLOCK_ERASE_20,
15535 			}, {
15536 				.eraseblocks = { {32 * 1024, 2} },
15537 				.block_erase = SPI_BLOCK_ERASE_52,
15538 			}, {
15539 				.eraseblocks = { {64 * 1024, 1} },
15540 				.block_erase = SPI_BLOCK_ERASE_D8,
15541 			}, {
15542 				.eraseblocks = { {64 * 1024, 1} },
15543 				.block_erase = SPI_BLOCK_ERASE_60,
15544 			}, {
15545 				.eraseblocks = { {64 * 1024, 1} },
15546 				.block_erase = SPI_BLOCK_ERASE_C7,
15547 			}
15548 		},
15549 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP4_SRWD,
15550 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP4_SRWD,
15551 		.write		= SPI_CHIP_WRITE256,
15552 		.read		= SPI_CHIP_READ,
15553 		.voltage	= {2300, 3600},
15554 	},
15555 
15556 	{
15557 		.vendor		= "PUYA",
15558 		.name		= "P25Q11H",
15559 		.bustype	= BUS_SPI,
15560 		.manufacture_id	= PUYA_ID,
15561 		.model_id	= PUYA_P25Q11H,
15562 		.total_size	= 128,
15563 		.page_size	= 256,
15564 		/* supports SFDP */
15565 		/* OTP: 3 x 512 bytes */
15566 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
15567 		.tested		= TEST_UNTESTED,
15568 		.probe		= PROBE_SPI_RDID,
15569 		.probe_timing	= TIMING_ZERO,
15570 		.block_erasers	=
15571 		{
15572 			{
15573 				.eraseblocks = { {256, 512} },
15574 				.block_erase = SPI_BLOCK_ERASE_81,
15575 			}, {
15576 				.eraseblocks = { {4 * 1024, 32} },
15577 				.block_erase = SPI_BLOCK_ERASE_20,
15578 			}, {
15579 				.eraseblocks = { {32 * 1024, 4} },
15580 				.block_erase = SPI_BLOCK_ERASE_52,
15581 			}, {
15582 				.eraseblocks = { {64 * 1024, 2} },
15583 				.block_erase = SPI_BLOCK_ERASE_D8,
15584 			}, {
15585 				.eraseblocks = { {128 * 1024, 1} },
15586 				.block_erase = SPI_BLOCK_ERASE_60,
15587 			}, {
15588 				.eraseblocks = { {128 * 1024, 1} },
15589 				.block_erase = SPI_BLOCK_ERASE_C7,
15590 			}
15591 		},
15592 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP4_SRWD,
15593 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP4_SRWD,
15594 		.write		= SPI_CHIP_WRITE256,
15595 		.read		= SPI_CHIP_READ,
15596 		.voltage	= {2300, 3600},
15597 	},
15598 
15599 	{
15600 		.vendor		= "PUYA",
15601 		.name		= "P25Q21H",
15602 		.bustype	= BUS_SPI,
15603 		.manufacture_id	= PUYA_ID,
15604 		.model_id	= PUYA_P25Q21H,
15605 		.total_size	= 256,
15606 		.page_size	= 256,
15607 		/* supports SFDP */
15608 		/* OTP: 3 x 512 bytes */
15609 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
15610 		.tested		= TEST_OK_PREW,
15611 		.probe		= PROBE_SPI_RDID,
15612 		.probe_timing	= TIMING_ZERO,
15613 		.block_erasers	=
15614 		{
15615 			{
15616 				.eraseblocks = { {256, 1024} },
15617 				.block_erase = SPI_BLOCK_ERASE_81,
15618 			}, {
15619 				.eraseblocks = { {4 * 1024, 64} },
15620 				.block_erase = SPI_BLOCK_ERASE_20,
15621 			}, {
15622 				.eraseblocks = { {32 * 1024, 8} },
15623 				.block_erase = SPI_BLOCK_ERASE_52,
15624 			}, {
15625 				.eraseblocks = { {64 * 1024, 4} },
15626 				.block_erase = SPI_BLOCK_ERASE_D8,
15627 			}, {
15628 				.eraseblocks = { {256 * 1024, 1} },
15629 				.block_erase = SPI_BLOCK_ERASE_60,
15630 			}, {
15631 				.eraseblocks = { {256 * 1024, 1} },
15632 				.block_erase = SPI_BLOCK_ERASE_C7,
15633 			}
15634 		},
15635 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP4_SRWD,
15636 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP4_SRWD,
15637 		.write		= SPI_CHIP_WRITE256,
15638 		.read		= SPI_CHIP_READ,
15639 		.voltage	= {2300, 3600},
15640 	},
15641 
15642 	{
15643 		.vendor		= "SST",
15644 		.name		= "SST25LF020A",
15645 		.bustype	= BUS_SPI,
15646 		.manufacture_id	= SST_ID,
15647 		.model_id	= SST_SST25VF020_REMS,
15648 		.total_size	= 256,
15649 		.page_size	= 256,
15650 		.feature_bits	= FEATURE_WRSR_EWSR,
15651 		.tested		= TEST_OK_PREW,
15652 		.probe		= PROBE_SPI_REMS,
15653 		.probe_timing	= TIMING_ZERO,
15654 		.block_erasers	=
15655 		{
15656 			{
15657 				.eraseblocks = { {4 * 1024, 64} },
15658 				.block_erase = SPI_BLOCK_ERASE_20,
15659 			}, {
15660 				.eraseblocks = { {32 * 1024, 8} },
15661 				.block_erase = SPI_BLOCK_ERASE_52,
15662 			}, {
15663 				.eraseblocks = { {256 * 1024, 1} },
15664 				.block_erase = SPI_BLOCK_ERASE_60,
15665 			},
15666 		},
15667 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_SST25, /* FIXME: No BP2 & 3 */
15668 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
15669 		.write		= SPI_CHIP_WRITE1, /* AAI supported, but opcode is 0xAF */
15670 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
15671 		.voltage	= {2700, 3600},
15672 	},
15673 
15674 	{
15675 		.vendor		= "SST",
15676 		.name		= "SST25LF040A",
15677 		.bustype	= BUS_SPI,
15678 		.manufacture_id	= SST_ID,
15679 		.model_id	= SST_SST25VF040_REMS,
15680 		.total_size	= 512,
15681 		.page_size	= 256,
15682 		.feature_bits	= FEATURE_WRSR_EWSR,
15683 		.tested		= TEST_OK_PREW,
15684 		.probe		= PROBE_SPI_RES2,
15685 		.probe_timing	= TIMING_ZERO,
15686 		.block_erasers	=
15687 		{
15688 			{
15689 				.eraseblocks = { {4 * 1024, 128} },
15690 				.block_erase = SPI_BLOCK_ERASE_20,
15691 			}, {
15692 				.eraseblocks = { {32 * 1024, 16} },
15693 				.block_erase = SPI_BLOCK_ERASE_52,
15694 			}, {
15695 				.eraseblocks = { {512 * 1024, 1} },
15696 				.block_erase = SPI_BLOCK_ERASE_60,
15697 			},
15698 		},
15699 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_SST25, /* TODO: check */
15700 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
15701 		.write		= SPI_CHIP_WRITE1, /* AAI supported, but opcode is 0xAF */
15702 		.read		= SPI_CHIP_READ,
15703 		.voltage	= {3000, 3600},
15704 	},
15705 
15706 	{
15707 		.vendor		= "SST",
15708 		.name		= "SST25LF080(A)",
15709 		.bustype	= BUS_SPI,
15710 		.manufacture_id	= SST_ID,
15711 		.model_id	= SST_SST25VF080_REMS,
15712 		.total_size	= 1024,
15713 		.page_size	= 256,
15714 		.feature_bits	= FEATURE_WRSR_EITHER,
15715 		.tested		= TEST_UNTESTED,
15716 		.probe		= PROBE_SPI_RES2,
15717 		.probe_timing	= TIMING_ZERO,
15718 		.block_erasers	=
15719 		{
15720 			{
15721 				.eraseblocks = { {4 * 1024, 256} },
15722 				.block_erase = SPI_BLOCK_ERASE_20,
15723 			}, {
15724 				.eraseblocks = { {32 * 1024, 32} },
15725 				.block_erase = SPI_BLOCK_ERASE_52,
15726 			}, {
15727 				.eraseblocks = { {1024 * 1024, 1} },
15728 				.block_erase = SPI_BLOCK_ERASE_60,
15729 			},
15730 		},
15731 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_SST25, /* TODO: check */
15732 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
15733 		.write		= SPI_CHIP_WRITE1, /* AAI supported, but opcode is 0xAF */
15734 		.read		= SPI_CHIP_READ,
15735 		.voltage	= {3000, 3600},
15736 	},
15737 
15738 	{
15739 		.vendor		= "SST",
15740 		.name		= "SST25VF010(A)",
15741 		.bustype	= BUS_SPI,
15742 		.manufacture_id	= SST_ID,
15743 		.model_id	= SST_SST25VF010_REMS,
15744 		.total_size	= 128,
15745 		.page_size	= 256,
15746 		.feature_bits	= FEATURE_WRSR_EWSR,
15747 		.tested		= TEST_OK_PREW,
15748 		.probe		= PROBE_SPI_REMS,
15749 		.probe_timing	= TIMING_ZERO,
15750 		.block_erasers	=
15751 		{
15752 			{
15753 				.eraseblocks = { {4 * 1024, 32} },
15754 				.block_erase = SPI_BLOCK_ERASE_20,
15755 			}, {
15756 				.eraseblocks = { {32 * 1024, 4} },
15757 				.block_erase = SPI_BLOCK_ERASE_52,
15758 			}, {
15759 				.eraseblocks = { {32 * 1024, 4} },
15760 				.block_erase = SPI_BLOCK_ERASE_D8, /* Supported by SST25VF010A only */
15761 			}, {
15762 				.eraseblocks = { {128 * 1024, 1} },
15763 				.block_erase = SPI_BLOCK_ERASE_60,
15764 			}, {
15765 				.eraseblocks = { {128 * 1024, 1} },
15766 				.block_erase = SPI_BLOCK_ERASE_C7, /* Supported by SST25VF010A only */
15767 			},
15768 		},
15769 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_SST25, /* FIXME: No BP2 & 3 */
15770 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
15771 		.write		= SPI_CHIP_WRITE1, /* AAI supported, but opcode is 0xAF */
15772 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported by SST25VF010A only */
15773 		.voltage	= {2700, 3600},
15774 	},
15775 
15776 	{
15777 		.vendor		= "SST",
15778 		.name		= "SST25VF016B",
15779 		.bustype	= BUS_SPI,
15780 		.manufacture_id	= SST_ID,
15781 		.model_id	= SST_SST25VF016B,
15782 		.total_size	= 2048,
15783 		.page_size	= 256,
15784 		.feature_bits	= FEATURE_WRSR_EITHER,
15785 		.tested		= TEST_OK_PREW,
15786 		.probe		= PROBE_SPI_RDID,
15787 		.probe_timing	= TIMING_ZERO,
15788 		.block_erasers	=
15789 		{
15790 			{
15791 				.eraseblocks = { {4 * 1024, 512} },
15792 				.block_erase = SPI_BLOCK_ERASE_20,
15793 			}, {
15794 				.eraseblocks = { {32 * 1024, 64} },
15795 				.block_erase = SPI_BLOCK_ERASE_52,
15796 			}, {
15797 				.eraseblocks = { {64 * 1024, 32} },
15798 				.block_erase = SPI_BLOCK_ERASE_D8,
15799 			}, {
15800 				.eraseblocks = { {2 * 1024 * 1024, 1} },
15801 				.block_erase = SPI_BLOCK_ERASE_60,
15802 			}, {
15803 				.eraseblocks = { {2 * 1024 * 1024, 1} },
15804 				.block_erase = SPI_BLOCK_ERASE_C7,
15805 			},
15806 		},
15807 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_SST25VF016,
15808 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
15809 		.write		= SPI_WRITE_AAI,
15810 		.read		= SPI_CHIP_READ,
15811 		.voltage	= {2700, 3600},
15812 	},
15813 
15814 	{
15815 		.vendor		= "SST",
15816 		.name		= "SST25VF020",
15817 		.bustype	= BUS_SPI,
15818 		.manufacture_id	= SST_ID,
15819 		.model_id	= SST_SST25VF020_REMS,
15820 		.total_size	= 256,
15821 		.page_size	= 256,
15822 		.feature_bits	= FEATURE_WRSR_EWSR,
15823 		.tested		= TEST_UNTESTED,
15824 		.probe		= PROBE_SPI_REMS,
15825 		.probe_timing	= TIMING_ZERO,
15826 		.block_erasers	=
15827 		{
15828 			{
15829 				.eraseblocks = { {4 * 1024, 64} },
15830 				.block_erase = SPI_BLOCK_ERASE_20,
15831 			}, {
15832 				.eraseblocks = { {32 * 1024, 8} },
15833 				.block_erase = SPI_BLOCK_ERASE_52,
15834 			}, {
15835 				.eraseblocks = { {256 * 1024, 1} },
15836 				.block_erase = SPI_BLOCK_ERASE_60,
15837 			},
15838 		},
15839 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_SST25, /* FIXME: No BP2 & 3 */
15840 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
15841 		.write		= SPI_CHIP_WRITE1, /* AAI supported, but opcode is 0xAF */
15842 		.read		= SPI_CHIP_READ, /* only */
15843 		.voltage	= {2700, 3600},
15844 	},
15845 
15846 	{
15847 		.vendor		= "SST",
15848 		.name		= "SST25VF020B",
15849 		.bustype	= BUS_SPI,
15850 		.manufacture_id	= SST_ID,
15851 		.model_id	= SST_SST25VF020B,
15852 		.total_size	= 256,
15853 		.page_size	= 256,
15854 		.feature_bits	= FEATURE_WRSR_EWSR,
15855 		.tested		= TEST_OK_PREW,
15856 		.probe		= PROBE_SPI_RDID,
15857 		.probe_timing	= TIMING_ZERO,
15858 		.block_erasers	=
15859 		{
15860 			{
15861 				.eraseblocks = { {4 * 1024, 64} },
15862 				.block_erase = SPI_BLOCK_ERASE_20,
15863 			}, {
15864 				.eraseblocks = { {32 * 1024, 8} },
15865 				.block_erase = SPI_BLOCK_ERASE_52,
15866 			}, {
15867 				.eraseblocks = { {64 * 1024, 4} },
15868 				.block_erase = SPI_BLOCK_ERASE_D8,
15869 			}, {
15870 				.eraseblocks = { {256 * 1024, 1} },
15871 				.block_erase = SPI_BLOCK_ERASE_60,
15872 			}, {
15873 				.eraseblocks = { {256 * 1024, 1} },
15874 				.block_erase = SPI_BLOCK_ERASE_C7,
15875 			},
15876 		},
15877 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_SST25, /* FIXME: No BP2 & 3 and 2nd SR */
15878 		.unlock		= SPI_DISABLE_BLOCKPROTECT, /* FIXME: 2nd SR */
15879 		.write		= SPI_WRITE_AAI, /* AAI supported (0xAD) */
15880 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
15881 		.voltage	= {2700, 3600},
15882 	},
15883 
15884 	{
15885 		.vendor		= "SST",
15886 		.name		= "SST25VF032B",
15887 		.bustype	= BUS_SPI,
15888 		.manufacture_id	= SST_ID,
15889 		.model_id	= SST_SST25VF032B,
15890 		.total_size	= 4096,
15891 		.page_size	= 256,
15892 		.feature_bits	= FEATURE_WRSR_EWSR,
15893 		.tested		= TEST_OK_PREW,
15894 		.probe		= PROBE_SPI_RDID,
15895 		.probe_timing	= TIMING_ZERO,
15896 		.block_erasers	=
15897 		{
15898 			{
15899 				.eraseblocks = { {4 * 1024, 1024} },
15900 				.block_erase = SPI_BLOCK_ERASE_20,
15901 			}, {
15902 				.eraseblocks = { {32 * 1024, 128} },
15903 				.block_erase = SPI_BLOCK_ERASE_52,
15904 			}, {
15905 				.eraseblocks = { {64 * 1024, 64} },
15906 				.block_erase = SPI_BLOCK_ERASE_D8,
15907 			}, {
15908 				.eraseblocks = { {4 * 1024 * 1024, 1} },
15909 				.block_erase = SPI_BLOCK_ERASE_60,
15910 			}, {
15911 				.eraseblocks = { {4 * 1024 * 1024, 1} },
15912 				.block_erase = SPI_BLOCK_ERASE_C7,
15913 			},
15914 		},
15915 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_SST25, /* TODO: check */
15916 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
15917 		.write		= SPI_WRITE_AAI,
15918 		.read		= SPI_CHIP_READ,
15919 		.voltage	= {2700, 3600},
15920 	},
15921 
15922 	{
15923 		.vendor		= "SST",
15924 		.name		= "SST25VF040",
15925 		.bustype	= BUS_SPI,
15926 		.manufacture_id	= SST_ID,
15927 		.model_id	= SST_SST25VF040_REMS,
15928 		.total_size	= 512,
15929 		.page_size	= 256,
15930 		.feature_bits	= FEATURE_WRSR_EWSR,
15931 		.tested		= TEST_OK_PR,
15932 		.probe		= PROBE_SPI_REMS,
15933 		.probe_timing	= TIMING_ZERO,
15934 		.block_erasers	=
15935 		{
15936 			{
15937 				.eraseblocks = { {4 * 1024, 128} },
15938 				.block_erase = SPI_BLOCK_ERASE_20,
15939 			}, {
15940 				.eraseblocks = { {32 * 1024, 16} },
15941 				.block_erase = SPI_BLOCK_ERASE_52,
15942 			}, {
15943 				.eraseblocks = { {512 * 1024, 1} },
15944 				.block_erase = SPI_BLOCK_ERASE_60,
15945 			},
15946 		},
15947 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_SST25, /* TODO: check */
15948 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
15949 		.write		= SPI_CHIP_WRITE1, /* AAI supported, but opcode is 0xAF */
15950 		.read		= SPI_CHIP_READ,
15951 		.voltage	= {2700, 3600},
15952 	},
15953 
15954 	{
15955 		.vendor		= "SST",
15956 		.name		= "SST25VF040B",
15957 		.bustype	= BUS_SPI,
15958 		.manufacture_id	= SST_ID,
15959 		.model_id	= SST_SST25VF040B,
15960 		.total_size	= 512,
15961 		.page_size	= 256,
15962 		.feature_bits	= FEATURE_WRSR_EWSR,
15963 		.tested		= TEST_OK_PREW,
15964 		.probe		= PROBE_SPI_RDID,
15965 		.probe_timing	= TIMING_ZERO,
15966 		.block_erasers	=
15967 		{
15968 			{
15969 				.eraseblocks = { {4 * 1024, 128} },
15970 				.block_erase = SPI_BLOCK_ERASE_20,
15971 			}, {
15972 				.eraseblocks = { {32 * 1024, 16} },
15973 				.block_erase = SPI_BLOCK_ERASE_52,
15974 			}, {
15975 				.eraseblocks = { {64 * 1024, 8} },
15976 				.block_erase = SPI_BLOCK_ERASE_D8,
15977 			}, {
15978 				.eraseblocks = { {512 * 1024, 1} },
15979 				.block_erase = SPI_BLOCK_ERASE_60,
15980 			}, {
15981 				.eraseblocks = { {512 * 1024, 1} },
15982 				.block_erase = SPI_BLOCK_ERASE_C7,
15983 			},
15984 		},
15985 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_SST25VF040B,
15986 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
15987 		.write		= SPI_WRITE_AAI, /* AAI supported (0xAD) */
15988 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
15989 		.voltage	= {2700, 3600},
15990 	},
15991 
15992 	{
15993 		.vendor		= "SST",
15994 		.name		= "SST25VF040B.REMS",
15995 		.bustype	= BUS_SPI,
15996 		.manufacture_id	= SST_ID,
15997 		.model_id	= SST_SST25VF040B_REMS,
15998 		.total_size	= 512,
15999 		.page_size	= 256,
16000 		.feature_bits	= FEATURE_WRSR_EWSR,
16001 		.tested		= TEST_OK_PREW,
16002 		.probe		= PROBE_SPI_REMS,
16003 		.probe_timing	= TIMING_ZERO,
16004 		.block_erasers	=
16005 		{
16006 			{
16007 				.eraseblocks = { {4 * 1024, 128} },
16008 				.block_erase = SPI_BLOCK_ERASE_20,
16009 			}, {
16010 				.eraseblocks = { {32 * 1024, 16} },
16011 				.block_erase = SPI_BLOCK_ERASE_52,
16012 			}, {
16013 				.eraseblocks = { {64 * 1024, 8} },
16014 				.block_erase = SPI_BLOCK_ERASE_D8,
16015 			}, {
16016 				.eraseblocks = { {512 * 1024, 1} },
16017 				.block_erase = SPI_BLOCK_ERASE_60,
16018 			}, {
16019 				.eraseblocks = { {512 * 1024, 1} },
16020 				.block_erase = SPI_BLOCK_ERASE_C7,
16021 			},
16022 		},
16023 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_SST25VF040B,
16024 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
16025 		.write		= SPI_WRITE_AAI,
16026 		.read		= SPI_CHIP_READ,
16027 		.voltage	= {2700, 3600},
16028 	},
16029 
16030 	{
16031 		.vendor		= "SST",
16032 		.name		= "SST25VF064C",
16033 		.bustype	= BUS_SPI,
16034 		.manufacture_id	= SST_ID,
16035 		.model_id	= SST_SST25VF064C,
16036 		.total_size	= 8192,
16037 		.page_size	= 256,
16038 		.feature_bits	= FEATURE_WRSR_EWSR,
16039 		.tested		= TEST_OK_PREW,
16040 		.probe		= PROBE_SPI_RDID,
16041 		.probe_timing	= TIMING_ZERO,
16042 		.block_erasers	=
16043 		{
16044 			{
16045 				.eraseblocks = { {4 * 1024, 2048} },
16046 				.block_erase = SPI_BLOCK_ERASE_20,
16047 			}, {
16048 				.eraseblocks = { {32 * 1024, 256} },
16049 				.block_erase = SPI_BLOCK_ERASE_52,
16050 			}, {
16051 				.eraseblocks = { {64 * 1024, 128} },
16052 				.block_erase = SPI_BLOCK_ERASE_D8,
16053 			}, {
16054 				.eraseblocks = { {8 * 1024 * 1024, 1} },
16055 				.block_erase = SPI_BLOCK_ERASE_60,
16056 			}, {
16057 				.eraseblocks = { {8 * 1024 * 1024, 1} },
16058 				.block_erase = SPI_BLOCK_ERASE_C7,
16059 			},
16060 		},
16061 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_SST25, /* TODO: check */
16062 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
16063 		.write		= SPI_CHIP_WRITE256,
16064 		.read		= SPI_CHIP_READ,
16065 		.voltage	= {2700, 3600},
16066 	},
16067 
16068 	{
16069 		.vendor		= "SST",
16070 		.name		= "SST25VF080B",
16071 		.bustype	= BUS_SPI,
16072 		.manufacture_id	= SST_ID,
16073 		.model_id	= SST_SST25VF080B,
16074 		.total_size	= 1024,
16075 		.page_size	= 256,
16076 		.feature_bits	= FEATURE_WRSR_EWSR,
16077 		.tested		= TEST_OK_PREW,
16078 		.probe		= PROBE_SPI_RDID,
16079 		.probe_timing	= TIMING_ZERO,
16080 		.block_erasers	=
16081 		{
16082 			{
16083 				.eraseblocks = { {4 * 1024, 256} },
16084 				.block_erase = SPI_BLOCK_ERASE_20,
16085 			}, {
16086 				.eraseblocks = { {32 * 1024, 32} },
16087 				.block_erase = SPI_BLOCK_ERASE_52,
16088 			}, {
16089 				.eraseblocks = { {64 * 1024, 16} },
16090 				.block_erase = SPI_BLOCK_ERASE_D8,
16091 			}, {
16092 				.eraseblocks = { {1024 * 1024, 1} },
16093 				.block_erase = SPI_BLOCK_ERASE_60,
16094 			}, {
16095 				.eraseblocks = { {1024 * 1024, 1} },
16096 				.block_erase = SPI_BLOCK_ERASE_C7,
16097 			},
16098 		},
16099 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_SST25, /* TODO: check */
16100 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
16101 		.write		= SPI_WRITE_AAI,
16102 		.read		= SPI_CHIP_READ,
16103 		.voltage	= {2700, 3600},
16104 	},
16105 
16106 	{
16107 		.vendor		= "SST",
16108 		.name		= "SST25VF512(A)",
16109 		.bustype	= BUS_SPI,
16110 		.manufacture_id	= SST_ID,
16111 		.model_id	= SST_SST25VF512_REMS,
16112 		.total_size	= 64,
16113 		.page_size	= 256,
16114 		.feature_bits	= FEATURE_WRSR_EWSR,
16115 		.tested		= TEST_OK_PREW,
16116 		.probe		= PROBE_SPI_REMS,
16117 		.probe_timing	= TIMING_ZERO,
16118 		.block_erasers	=
16119 		{
16120 			{
16121 				.eraseblocks = { {4 * 1024, 16} },
16122 				.block_erase = SPI_BLOCK_ERASE_20,
16123 			}, {
16124 				.eraseblocks = { {32 * 1024, 2} },
16125 				.block_erase = SPI_BLOCK_ERASE_52,
16126 			}, {
16127 				.eraseblocks = { {32 * 1024, 2} },
16128 				.block_erase = SPI_BLOCK_ERASE_D8, /* Supported by SST25VF512A only */
16129 			}, {
16130 				.eraseblocks = { {64 * 1024, 1} },
16131 				.block_erase = SPI_BLOCK_ERASE_60,
16132 			}, {
16133 				.eraseblocks = { {64 * 1024, 1} },
16134 				.block_erase = SPI_BLOCK_ERASE_C7, /* Supported by SST25VF512A only */
16135 			},
16136 		},
16137 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_SST25, /* FIXME: No BP2 & 3 */
16138 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
16139 		.write		= SPI_CHIP_WRITE1, /* AAI supported, but opcode is 0xAF */
16140 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported by SST25VF512A only */
16141 		.voltage	= {2700, 3600},
16142 	},
16143 
16144 	{
16145 		.vendor		= "SST",
16146 		.name		= "SST25WF010",
16147 		.bustype	= BUS_SPI,
16148 		.manufacture_id	= SST_ID,
16149 		.model_id	= SST_SST25WF010,
16150 		.total_size	= 128,
16151 		.page_size	= 256,
16152 		.feature_bits	= FEATURE_WRSR_EITHER,
16153 		.tested		= TEST_UNTESTED,
16154 		.probe		= PROBE_SPI_RDID,
16155 		.probe_timing	= TIMING_ZERO,
16156 		.block_erasers	=
16157 		{
16158 			{
16159 				.eraseblocks = { {4 * 1024, 32} },
16160 				.block_erase = SPI_BLOCK_ERASE_20,
16161 			}, {
16162 				.eraseblocks = { {32 * 1024, 4} },
16163 				.block_erase = SPI_BLOCK_ERASE_52,
16164 			}, {
16165 				.eraseblocks = { {1024 * 128, 1} },
16166 				.block_erase = SPI_BLOCK_ERASE_60,
16167 			}, {
16168 				.eraseblocks = { {1024 * 128, 1} },
16169 				.block_erase = SPI_BLOCK_ERASE_C7,
16170 			},
16171 		},
16172 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_SST25, /* FIXME: does not have a BP3 */
16173 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD,
16174 		.write		= SPI_WRITE_AAI,
16175 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
16176 		.voltage	= {1650, 1950},
16177 	},
16178 
16179 	{
16180 		.vendor		= "SST",
16181 		.name		= "SST25WF020",
16182 		.bustype	= BUS_SPI,
16183 		.manufacture_id	= SST_ID,
16184 		.model_id	= SST_SST25WF020,
16185 		.total_size	= 256,
16186 		.page_size	= 256,
16187 		.feature_bits	= FEATURE_WRSR_EITHER,
16188 		.tested		= TEST_UNTESTED,
16189 		.probe		= PROBE_SPI_RDID,
16190 		.probe_timing	= TIMING_ZERO,
16191 		.block_erasers	=
16192 		{
16193 			{
16194 				.eraseblocks = { {4 * 1024, 64} },
16195 				.block_erase = SPI_BLOCK_ERASE_20,
16196 			}, {
16197 				.eraseblocks = { {32 * 1024, 8} },
16198 				.block_erase = SPI_BLOCK_ERASE_52,
16199 			}, {
16200 				.eraseblocks = { {64 * 1024, 4} },
16201 				.block_erase = SPI_BLOCK_ERASE_D8,
16202 			}, {
16203 				.eraseblocks = { {1024 * 256, 1} },
16204 				.block_erase = SPI_BLOCK_ERASE_60,
16205 			}, {
16206 				.eraseblocks = { {1024 * 256, 1} },
16207 				.block_erase = SPI_BLOCK_ERASE_C7,
16208 			},
16209 		},
16210 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_SST25, /* FIXME: does not have a BP3 */
16211 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD,
16212 		.write		= SPI_WRITE_AAI,
16213 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
16214 		.voltage	= {1650, 1950},
16215 	},
16216 
16217 	{
16218 		.vendor		= "SST",
16219 		.name		= "SST25WF020A",
16220 		.bustype	= BUS_SPI,
16221 		.manufacture_id	= SANYO_ID, /* See flashchips.h */
16222 		.model_id	= SST_SST25WF020A,
16223 		.total_size	= 256,
16224 		.page_size	= 256,
16225 		.feature_bits	= FEATURE_WRSR_WREN,
16226 		.tested		= TEST_UNTESTED,
16227 		.probe		= PROBE_SPI_RDID,
16228 		.probe_timing	= TIMING_ZERO,
16229 		.block_erasers	=
16230 		{
16231 			{
16232 				.eraseblocks = { {4 * 1024, 64} },
16233 				.block_erase = SPI_BLOCK_ERASE_20,
16234 			}, {
16235 				.eraseblocks = { {64 * 1024, 4} },
16236 				.block_erase = SPI_BLOCK_ERASE_D8,
16237 			}, {
16238 				.eraseblocks = { {256 * 1024, 1} },
16239 				.block_erase = SPI_BLOCK_ERASE_60,
16240 			}, {
16241 				.eraseblocks = { {256 * 1024, 1} },
16242 				.block_erase = SPI_BLOCK_ERASE_C7,
16243 			},
16244 		},
16245 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_TB_BPL,
16246 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD,
16247 		.write		= SPI_CHIP_WRITE256,
16248 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
16249 		.voltage	= {1650, 1950},
16250 	},
16251 
16252 	{
16253 		.vendor		= "SST",
16254 		.name		= "SST25WF040",
16255 		.bustype	= BUS_SPI,
16256 		.manufacture_id	= SST_ID,
16257 		.model_id	= SST_SST25WF040,
16258 		.total_size	= 512,
16259 		.page_size	= 256,
16260 		.feature_bits	= FEATURE_WRSR_EITHER,
16261 		.tested		= TEST_UNTESTED,
16262 		.probe		= PROBE_SPI_RDID,
16263 		.probe_timing	= TIMING_ZERO,
16264 		.block_erasers	=
16265 		{
16266 			{
16267 				.eraseblocks = { {4 * 1024, 128} },
16268 				.block_erase = SPI_BLOCK_ERASE_20,
16269 			}, {
16270 				.eraseblocks = { {32 * 1024, 16} },
16271 				.block_erase = SPI_BLOCK_ERASE_52,
16272 			}, {
16273 				.eraseblocks = { {64 * 1024, 8} },
16274 				.block_erase = SPI_BLOCK_ERASE_D8,
16275 			}, {
16276 				.eraseblocks = { {1024 * 512, 1} },
16277 				.block_erase = SPI_BLOCK_ERASE_60,
16278 			}, {
16279 				.eraseblocks = { {1024 * 512, 1} },
16280 				.block_erase = SPI_BLOCK_ERASE_C7,
16281 			},
16282 		},
16283 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_SST25, /* FIXME: does not have a BP3 */
16284 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD,
16285 		.write		= SPI_WRITE_AAI,
16286 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
16287 		.voltage	= {1650, 1950},
16288 	},
16289 
16290 	{
16291 		.vendor		= "SST",
16292 		.name		= "SST25WF040B",
16293 		.bustype	= BUS_SPI,
16294 		.manufacture_id	= SANYO_ID, /* See flashchips.h */
16295 		.model_id	= SST_SST25WF040B,
16296 		.total_size	= 512,
16297 		.page_size	= 256,
16298 		.feature_bits	= FEATURE_WRSR_WREN,
16299 		.tested		= TEST_UNTESTED,
16300 		.probe		= PROBE_SPI_RDID,
16301 		.probe_timing	= TIMING_ZERO,
16302 		.block_erasers	=
16303 		{
16304 			{
16305 				.eraseblocks = { {4 * 1024, 128} },
16306 				.block_erase = SPI_BLOCK_ERASE_20,
16307 			}, {
16308 				.eraseblocks = { {64 * 1024, 8} },
16309 				.block_erase = SPI_BLOCK_ERASE_D8,
16310 			}, {
16311 				.eraseblocks = { {512 * 1024, 1} },
16312 				.block_erase = SPI_BLOCK_ERASE_60,
16313 			}, {
16314 				.eraseblocks = { {512 * 1024, 1} },
16315 				.block_erase = SPI_BLOCK_ERASE_C7,
16316 			},
16317 		},
16318 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_TB_BPL,
16319 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD,
16320 		.write		= SPI_CHIP_WRITE256,
16321 		.read		= SPI_CHIP_READ, /* Fast read (0x0B), dual O (0x3B), dual I/O read (0xBB) supported */
16322 		.voltage	= {1650, 1950},
16323 	},
16324 
16325 	{
16326 		.vendor		= "SST",
16327 		.name		= "SST25WF080",
16328 		.bustype	= BUS_SPI,
16329 		.manufacture_id	= SST_ID,
16330 		.model_id	= SST_SST25WF080,
16331 		.total_size	= 1024,
16332 		.page_size	= 256,
16333 		.feature_bits	= FEATURE_WRSR_EITHER,
16334 		.tested		= TEST_OK_PREW,
16335 		.probe		= PROBE_SPI_RDID,
16336 		.probe_timing	= TIMING_ZERO,
16337 		.block_erasers	=
16338 		{
16339 			{
16340 				.eraseblocks = { {4 * 1024, 256} },
16341 				.block_erase = SPI_BLOCK_ERASE_20,
16342 			}, {
16343 				.eraseblocks = { {32 * 1024, 32} },
16344 				.block_erase = SPI_BLOCK_ERASE_52,
16345 			}, {
16346 				.eraseblocks = { {64 * 1024, 16} },
16347 				.block_erase = SPI_BLOCK_ERASE_D8,
16348 			}, {
16349 				.eraseblocks = { {1024 * 1024, 1} },
16350 				.block_erase = SPI_BLOCK_ERASE_60,
16351 			}, {
16352 				.eraseblocks = { {1024 * 1024, 1} },
16353 				.block_erase = SPI_BLOCK_ERASE_C7,
16354 			},
16355 		},
16356 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_SST25, /* *does* have a BP3 but it is useless */
16357 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
16358 		.write		= SPI_WRITE_AAI,
16359 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
16360 		.voltage	= {1650, 1950},
16361 	},
16362 
16363 	{
16364 		.vendor		= "SST",
16365 		.name		= "SST25WF080B",
16366 		.bustype	= BUS_SPI,
16367 		.manufacture_id	= SANYO_ID, /* See flashchips.h */
16368 		.model_id	= SST_SST25WF080B,
16369 		.total_size	= 1024,
16370 		.page_size	= 256,
16371 		.feature_bits	= FEATURE_WRSR_WREN,
16372 		.tested		= TEST_OK_PREW,
16373 		.probe		= PROBE_SPI_RDID,
16374 		.probe_timing	= TIMING_ZERO,
16375 		.block_erasers	=
16376 		{
16377 			{
16378 				.eraseblocks = { {4 * 1024, 256} },
16379 				.block_erase = SPI_BLOCK_ERASE_20,
16380 			}, {
16381 				.eraseblocks = { {64 * 1024, 16} },
16382 				.block_erase = SPI_BLOCK_ERASE_D8,
16383 			}, {
16384 				.eraseblocks = { {1024 * 1024, 1} },
16385 				.block_erase = SPI_BLOCK_ERASE_60,
16386 			}, {
16387 				.eraseblocks = { {1024 * 1024, 1} },
16388 				.block_erase = SPI_BLOCK_ERASE_C7,
16389 			},
16390 		},
16391 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_TB_BPL,
16392 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD,
16393 		.write		= SPI_CHIP_WRITE256,
16394 		.read		= SPI_CHIP_READ, /* Fast read (0x0B), dual O (0x3B), dual I/O read (0xBB) supported */
16395 		.voltage	= {1650, 1950},
16396 	},
16397 
16398 	{
16399 		.vendor		= "SST",
16400 		.name		= "SST25WF512",
16401 		.bustype	= BUS_SPI,
16402 		.manufacture_id	= SST_ID,
16403 		.model_id	= SST_SST25WF512,
16404 		.total_size	= 64,
16405 		.page_size	= 256,
16406 		.feature_bits	= FEATURE_WRSR_EITHER,
16407 		.tested		= TEST_UNTESTED,
16408 		.probe		= PROBE_SPI_RDID,
16409 		.probe_timing	= TIMING_ZERO,
16410 		.block_erasers	=
16411 		{
16412 			{
16413 				.eraseblocks = { {4 * 1024, 16} },
16414 				.block_erase = SPI_BLOCK_ERASE_20,
16415 			}, {
16416 				.eraseblocks = { {32 * 1024, 2} },
16417 				.block_erase = SPI_BLOCK_ERASE_52,
16418 			}, {
16419 				.eraseblocks = { {1024 * 64, 1} },
16420 				.block_erase = SPI_BLOCK_ERASE_60,
16421 			}, {
16422 				.eraseblocks = { {1024 * 64, 1} },
16423 				.block_erase = SPI_BLOCK_ERASE_C7,
16424 			},
16425 		},
16426 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_SST25, /* FIXME: does not have a BP3 */
16427 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD,
16428 		.write		= SPI_WRITE_AAI,
16429 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
16430 		.voltage	= {1650, 1950},
16431 	},
16432 
16433 	{
16434 		.vendor		= "SST",
16435 		.name		= "SST26VF016B(A)",
16436 		.bustype	= BUS_SPI,
16437 		.manufacture_id	= SST_ID,
16438 		.model_id	= SST_SST26VF016B,
16439 		.total_size	= 2048,
16440 		.page_size	= 256,
16441 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
16442 		.tested		= TEST_OK_PREW,
16443 		.probe		= PROBE_SPI_RDID,
16444 		.probe_timing	= TIMING_ZERO,
16445 		.block_erasers	=
16446 		{
16447 			{
16448 				.eraseblocks = { {4 * 1024, 512} },
16449 				.block_erase = SPI_BLOCK_ERASE_20,
16450 			}, {
16451 				.eraseblocks = {
16452 					{8 * 1024, 4},
16453 					{32 * 1024, 1},
16454 					{64 * 1024, 30},
16455 					{32 * 1024, 1},
16456 					{8 * 1024, 4},
16457 				},
16458 				.block_erase = SPI_BLOCK_ERASE_D8,
16459 			}, {
16460 				.eraseblocks = { {2 * 1024 * 1024, 1} },
16461 				.block_erase = SPI_BLOCK_ERASE_C7,
16462 			},
16463 		},
16464 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
16465 		.unlock		= SPI_DISABLE_BLOCKPROTECT_SST26_GLOBAL_UNPROTECT,
16466 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
16467 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
16468 		.voltage	= {2700, 3600},
16469 	},
16470 
16471 	{
16472 		.vendor		= "SST",
16473 		.name		= "SST26VF032B(A)",
16474 		.bustype	= BUS_SPI,
16475 		.manufacture_id	= SST_ID,
16476 		.model_id	= SST_SST26VF032B,
16477 		.total_size	= 4096,
16478 		.page_size	= 256,
16479 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
16480 		.tested		= TEST_UNTESTED,
16481 		.probe		= PROBE_SPI_RDID,
16482 		.probe_timing	= TIMING_ZERO,
16483 		.block_erasers	=
16484 		{
16485 			{
16486 				.eraseblocks = { {4 * 1024, 1024} },
16487 				.block_erase = SPI_BLOCK_ERASE_20,
16488 			}, {
16489 				.eraseblocks = {
16490 					{8 * 1024, 4},
16491 					{32 * 1024, 1},
16492 					{64 * 1024, 62},
16493 					{32 * 1024, 1},
16494 					{8 * 1024, 4},
16495 				},
16496 				.block_erase = SPI_BLOCK_ERASE_D8,
16497 			}, {
16498 				.eraseblocks = { {4 * 1024 * 1024, 1} },
16499 				.block_erase = SPI_BLOCK_ERASE_C7,
16500 			},
16501 		},
16502 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
16503 		.unlock		= SPI_DISABLE_BLOCKPROTECT_SST26_GLOBAL_UNPROTECT,
16504 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
16505 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
16506 		.voltage	= {2700, 3600},
16507 	},
16508 
16509 	{
16510 		.vendor		= "SST",
16511 		.name		= "SST26VF064B(A)",
16512 		.bustype	= BUS_SPI,
16513 		.manufacture_id	= SST_ID,
16514 		.model_id	= SST_SST26VF064B,
16515 		.total_size	= 8192,
16516 		.page_size	= 256,
16517 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
16518 		.tested		= TEST_OK_PREW,
16519 		.probe		= PROBE_SPI_RDID,
16520 		.probe_timing	= TIMING_ZERO,
16521 		.block_erasers	=
16522 		{
16523 			{
16524 				.eraseblocks = { {4 * 1024, 2048} },
16525 				.block_erase = SPI_BLOCK_ERASE_20,
16526 			}, {
16527 				.eraseblocks = {
16528 					{8 * 1024, 4},
16529 					{32 * 1024, 1},
16530 					{64 * 1024, 126},
16531 					{32 * 1024, 1},
16532 					{8 * 1024, 4},
16533 				},
16534 				.block_erase = SPI_BLOCK_ERASE_D8,
16535 			}, {
16536 				.eraseblocks = { {8 * 1024 * 1024, 1} },
16537 				.block_erase = SPI_BLOCK_ERASE_C7,
16538 			},
16539 		},
16540 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
16541 		.unlock		= SPI_DISABLE_BLOCKPROTECT_SST26_GLOBAL_UNPROTECT,
16542 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
16543 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
16544 		.voltage	= {2700, 3600},
16545 	},
16546 
16547 	{
16548 		.vendor		= "SST",
16549 		.name		= "SST28SF040A",
16550 		.bustype	= BUS_PARALLEL,
16551 		.manufacture_id	= SST_ID,
16552 		.model_id	= SST_SST28SF040,
16553 		.total_size	= 512,
16554 		.page_size	= 256,
16555 		.feature_bits	= 0,
16556 		.tested		= TEST_UNTESTED,
16557 		.probe		= PROBE_AT82802AB,
16558 		.probe_timing	= TIMING_IGNORED, /* routine doesn't use probe_timing (sst28sf040.c) */
16559 		.block_erasers	=
16560 		{
16561 			{
16562 				.eraseblocks = { {128, 4096} },
16563 				.block_erase = ERASE_SECTOR_28SF040,
16564 			}, {
16565 				.eraseblocks = { {512 * 1024, 1} },
16566 				.block_erase = ERASE_CHIP_28SF040,
16567 			}
16568 		},
16569 		.unlock		= UNPROTECT_28SF040,
16570 		.write		= WRITE_28SF040,
16571 		.read		= READ_MEMMAPPED,
16572 		.voltage	= {4500, 5500},
16573 	},
16574 
16575 	{
16576 		.vendor		= "SST",
16577 		.name		= "SST29EE010",
16578 		.bustype	= BUS_PARALLEL,
16579 		.manufacture_id	= SST_ID,
16580 		.model_id	= SST_SST29EE010,
16581 		.total_size	= 128,
16582 		.page_size	= 128,
16583 		.feature_bits	= FEATURE_LONG_RESET,
16584 		.tested		= TEST_OK_PR,
16585 		.probe		= PROBE_JEDEC,
16586 		.probe_timing	= 10,
16587 		.block_erasers	=
16588 		{
16589 			{
16590 				.eraseblocks = { {128 * 1024, 1} },
16591 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
16592 			}
16593 		},
16594 		.write		= WRITE_JEDEC,
16595 		.read		= READ_MEMMAPPED,
16596 		.voltage	= {4500, 5500},
16597 	},
16598 
16599 	{
16600 		.vendor		= "SST",
16601 		.name		= "SST29EE020A",
16602 		.bustype	= BUS_PARALLEL,
16603 		.manufacture_id	= SST_ID,
16604 		.model_id	= SST_SST29EE020A,
16605 		.total_size	= 256,
16606 		.page_size	= 128,
16607 		.feature_bits	= FEATURE_LONG_RESET,
16608 		.tested		= TEST_OK_PRE,
16609 		.probe		= PROBE_JEDEC,
16610 		.probe_timing	= 10,
16611 		.block_erasers	=
16612 		{
16613 			{
16614 				.eraseblocks = { {256 * 1024, 1} },
16615 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
16616 			}
16617 		},
16618 		.write		= WRITE_JEDEC,
16619 		.read		= READ_MEMMAPPED,
16620 		.voltage	= {4500, 5500},
16621 	},
16622 
16623 	{
16624 		.vendor		= "SST",
16625 		.name		= "SST29LE010",
16626 		.bustype	= BUS_PARALLEL,
16627 		.manufacture_id	= SST_ID,
16628 		.model_id	= SST_SST29LE010,
16629 		.total_size	= 128,
16630 		.page_size	= 128,
16631 		.feature_bits	= FEATURE_LONG_RESET,
16632 		.tested		= TEST_UNTESTED,
16633 		.probe		= PROBE_JEDEC,
16634 		.probe_timing	= 10,
16635 		.block_erasers	=
16636 		{
16637 			{
16638 				.eraseblocks = { {128 * 1024, 1} },
16639 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
16640 			}
16641 		},
16642 		.write		= WRITE_JEDEC,
16643 		.read		= READ_MEMMAPPED,
16644 		.voltage	= {3000, 3600},
16645 	},
16646 
16647 	{
16648 		.vendor		= "SST",
16649 		.name		= "SST29LE020",
16650 		.bustype	= BUS_PARALLEL,
16651 		.manufacture_id	= SST_ID,
16652 		.model_id	= SST_SST29LE020,
16653 		.total_size	= 256,
16654 		.page_size	= 128,
16655 		.feature_bits	= FEATURE_LONG_RESET,
16656 		.tested		= TEST_OK_PRE,
16657 		.probe		= PROBE_JEDEC,
16658 		.probe_timing	= 10,
16659 		.block_erasers	=
16660 		{
16661 			{
16662 				.eraseblocks = { {256 * 1024, 1} },
16663 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
16664 			}
16665 		},
16666 		.write		= WRITE_JEDEC,
16667 		.read		= READ_MEMMAPPED,
16668 		.voltage	= {3000, 3600},
16669 	},
16670 
16671 	{
16672 		.vendor		= "SST",
16673 		.name		= "SST39SF010A",
16674 		.bustype	= BUS_PARALLEL,
16675 		.manufacture_id	= SST_ID,
16676 		.model_id	= SST_SST39SF010,
16677 		.total_size	= 128,
16678 		.page_size	= 4096,
16679 		.feature_bits	= FEATURE_EITHER_RESET,
16680 		.tested		= TEST_OK_PREW,
16681 		.probe		= PROBE_JEDEC,
16682 		.probe_timing	= 1,			/* 150 ns */
16683 		.block_erasers	=
16684 		{
16685 			{
16686 				.eraseblocks = { {4 * 1024, 32} },
16687 				.block_erase = JEDEC_SECTOR_ERASE,
16688 			}, {
16689 				.eraseblocks = { {128 * 1024, 1} },
16690 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
16691 			}
16692 		},
16693 		.write		= WRITE_JEDEC1,
16694 		.read		= READ_MEMMAPPED,
16695 		.voltage	= {4500, 5500},
16696 	},
16697 
16698 	{
16699 		.vendor		= "SST",
16700 		.name		= "SST39SF020A",
16701 		.bustype	= BUS_PARALLEL,
16702 		.manufacture_id	= SST_ID,
16703 		.model_id	= SST_SST39SF020,
16704 		.total_size	= 256,
16705 		.page_size	= 4096,
16706 		.feature_bits	= FEATURE_EITHER_RESET,
16707 		.tested		= TEST_OK_PREW,
16708 		.probe		= PROBE_JEDEC,
16709 		.probe_timing	= 1,			/* 150 ns */
16710 		.block_erasers	=
16711 		{
16712 			{
16713 				.eraseblocks = { {4 * 1024, 64} },
16714 				.block_erase = JEDEC_SECTOR_ERASE,
16715 			}, {
16716 				.eraseblocks = { {256 * 1024, 1} },
16717 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
16718 			}
16719 		},
16720 		.write		= WRITE_JEDEC1,
16721 		.read		= READ_MEMMAPPED,
16722 		.voltage	= {4500, 5500},
16723 	},
16724 
16725 	{
16726 		.vendor		= "SST",
16727 		.name		= "SST39SF040",
16728 		.bustype	= BUS_PARALLEL,
16729 		.manufacture_id	= SST_ID,
16730 		.model_id	= SST_SST39SF040,
16731 		.total_size	= 512,
16732 		.page_size	= 4096,
16733 		.feature_bits	= FEATURE_EITHER_RESET,
16734 		.tested		= TEST_OK_PREW,
16735 		.probe		= PROBE_JEDEC,
16736 		.probe_timing	= 1,			/* 150 ns */
16737 		.block_erasers	=
16738 		{
16739 			{
16740 				.eraseblocks = { {4 * 1024, 128} },
16741 				.block_erase = JEDEC_SECTOR_ERASE,
16742 			}, {
16743 				.eraseblocks = { {512 * 1024, 1} },
16744 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
16745 			}
16746 		},
16747 		.write		= WRITE_JEDEC1,
16748 		.read		= READ_MEMMAPPED,
16749 		.voltage	= {4500, 5500},
16750 	},
16751 
16752 	{
16753 		.vendor		= "SST",
16754 		.name		= "SST39SF512",
16755 		.bustype	= BUS_PARALLEL,
16756 		.manufacture_id	= SST_ID,
16757 		.model_id	= SST_SST39SF512,
16758 		.total_size	= 64,
16759 		.page_size	= 4096,
16760 		.feature_bits	= FEATURE_EITHER_RESET,
16761 		.tested		= TEST_OK_PREW,
16762 		.probe		= PROBE_JEDEC,
16763 		.probe_timing	= 1,			/* 150 ns */
16764 		.block_erasers	=
16765 		{
16766 			{
16767 				.eraseblocks = { {4 * 1024, 16} },
16768 				.block_erase = JEDEC_SECTOR_ERASE,
16769 			}, {
16770 				.eraseblocks = { {64 * 1024, 1} },
16771 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
16772 			}
16773 		},
16774 		.write		= WRITE_JEDEC1,
16775 		.read		= READ_MEMMAPPED,
16776 		.voltage	= {4500, 5500},
16777 	},
16778 
16779 	{
16780 		.vendor		= "SST",
16781 		.name		= "SST39VF010",
16782 		.bustype	= BUS_PARALLEL,
16783 		.manufacture_id	= SST_ID,
16784 		.model_id	= SST_SST39VF010,
16785 		.total_size	= 128,
16786 		.page_size	= 4096,
16787 		.feature_bits	= FEATURE_EITHER_RESET,
16788 		.tested		= TEST_OK_PREW,
16789 		.probe		= PROBE_JEDEC,
16790 		.probe_timing	= 1,			/* 150 ns */
16791 		.block_erasers	=
16792 		{
16793 			{
16794 				.eraseblocks = { {4 * 1024, 32} },
16795 				.block_erase = JEDEC_SECTOR_ERASE,
16796 			}, {
16797 				.eraseblocks = { {128 * 1024, 1} },
16798 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
16799 			}
16800 		},
16801 		.write		= WRITE_JEDEC1,
16802 		.read		= READ_MEMMAPPED,
16803 		.voltage	= {2700, 3600},
16804 	},
16805 
16806 	{
16807 		.vendor		= "SST",
16808 		.name		= "SST39VF020",
16809 		.bustype	= BUS_PARALLEL,
16810 		.manufacture_id	= SST_ID,
16811 		.model_id	= SST_SST39VF020,
16812 		.total_size	= 256,
16813 		.page_size	= 4096,
16814 		.feature_bits	= FEATURE_EITHER_RESET,
16815 		.tested		= TEST_OK_PREW,
16816 		.probe		= PROBE_JEDEC,
16817 		.probe_timing	= 1,			/* 150 ns */
16818 		.block_erasers	=
16819 		{
16820 			{
16821 				.eraseblocks = { {4 * 1024, 64} },
16822 				.block_erase = JEDEC_SECTOR_ERASE,
16823 			}, {
16824 				.eraseblocks = { {256 * 1024, 1} },
16825 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
16826 			}
16827 		},
16828 		.write		= WRITE_JEDEC1,
16829 		.read		= READ_MEMMAPPED,
16830 		.voltage	= {2700, 3600},
16831 	},
16832 
16833 	{
16834 		.vendor		= "SST",
16835 		.name		= "SST39VF040",
16836 		.bustype	= BUS_PARALLEL,
16837 		.manufacture_id	= SST_ID,
16838 		.model_id	= SST_SST39VF040,
16839 		.total_size	= 512,
16840 		.page_size	= 4096,
16841 		.feature_bits	= FEATURE_EITHER_RESET,
16842 		.tested		= TEST_OK_PREW,
16843 		.probe		= PROBE_JEDEC,
16844 		.probe_timing	= 1,			/* 150 ns */
16845 		.block_erasers	=
16846 		{
16847 			{
16848 				.eraseblocks = { {4 * 1024, 128} },
16849 				.block_erase = JEDEC_SECTOR_ERASE,
16850 			}, {
16851 				.eraseblocks = { {512 * 1024, 1} },
16852 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
16853 			}
16854 		},
16855 		.write		= WRITE_JEDEC1,
16856 		.read		= READ_MEMMAPPED,
16857 		.voltage	= {2700, 3600},
16858 	},
16859 
16860 	{
16861 		.vendor		= "SST",
16862 		.name		= "SST39VF080",
16863 		.bustype	= BUS_PARALLEL,
16864 		.manufacture_id	= SST_ID,
16865 		.model_id	= SST_SST39VF080,
16866 		.total_size	= 1024,
16867 		.page_size	= 4096,
16868 		.feature_bits	= FEATURE_EITHER_RESET,
16869 		.tested		= TEST_UNTESTED,
16870 		.probe		= PROBE_JEDEC,
16871 		.probe_timing	= 1,			/* 150 ns */
16872 		.block_erasers	=
16873 		{
16874 			{
16875 				.eraseblocks = { {4 * 1024, 256} },
16876 				.block_erase = JEDEC_SECTOR_ERASE,
16877 			}, {
16878 				.eraseblocks = { {64 * 1024, 16} },
16879 				.block_erase = JEDEC_BLOCK_ERASE,
16880 			}, {
16881 				.eraseblocks = { {1024 * 1024, 1} },
16882 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
16883 			}
16884 		},
16885 		.write		= WRITE_JEDEC1,
16886 		.read		= READ_MEMMAPPED,
16887 		.voltage	= {2700, 3600},
16888 	},
16889 
16890 	{
16891 		.vendor		= "SST",
16892 		.name		= "SST39VF512",
16893 		.bustype	= BUS_PARALLEL,
16894 		.manufacture_id	= SST_ID,
16895 		.model_id	= SST_SST39VF512,
16896 		.total_size	= 64,
16897 		.page_size	= 4096,
16898 		.feature_bits	= FEATURE_EITHER_RESET,
16899 		.tested		= TEST_OK_PREW,
16900 		.probe		= PROBE_JEDEC,
16901 		.probe_timing	= 1,			/* 150 ns */
16902 		.block_erasers	=
16903 		{
16904 			{
16905 				.eraseblocks = { {4 * 1024, 16} },
16906 				.block_erase = JEDEC_SECTOR_ERASE,
16907 			}, {
16908 				.eraseblocks = { {64 * 1024, 1} },
16909 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
16910 			}
16911 		},
16912 		.write		= WRITE_JEDEC1,
16913 		.read		= READ_MEMMAPPED,
16914 		.voltage	= {2700, 3600},
16915 	},
16916 
16917 	{
16918 		.vendor		= "SST",
16919 		.name		= "SST49LF002A/B",
16920 		.bustype	= BUS_FWH, /* A/A Mux */
16921 		.manufacture_id	= SST_ID,
16922 		.model_id	= SST_SST49LF002A,
16923 		.total_size	= 256,
16924 		.page_size	= 16 * 1024,
16925 		.feature_bits	= FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
16926 		.tested		= TEST_OK_PREW,
16927 		.probe		= PROBE_JEDEC,
16928 		.probe_timing	= 1,		/* 150 ns */
16929 		.block_erasers	=
16930 		{
16931 			{
16932 				.eraseblocks = { {4 * 1024, 64} },
16933 				.block_erase = JEDEC_SECTOR_ERASE,
16934 			}, {
16935 				.eraseblocks = { {16 * 1024, 16} },
16936 				.block_erase = JEDEC_BLOCK_ERASE,
16937 			}, {
16938 				.eraseblocks = { {256 * 1024, 1} },
16939 				.block_erase = NO_BLOCK_ERASE_FUNC, /* AA 55 80 AA 55 10, only in A/A mux mode */
16940 			}
16941 		},
16942 		.printlock	= PRINTLOCK_SST_FWHUB,
16943 		.unlock		= UNLOCK_SST_FWHUB,
16944 		.write		= WRITE_JEDEC1,
16945 		.read		= READ_MEMMAPPED,
16946 		.voltage	= {3000, 3600},
16947 	},
16948 
16949 	{
16950 		.vendor		= "SST",
16951 		.name		= "SST49LF003A/B",
16952 		.bustype	= BUS_FWH, /* A/A Mux */
16953 		.manufacture_id	= SST_ID,
16954 		.model_id	= SST_SST49LF003A,
16955 		.total_size	= 384,
16956 		.page_size	= 64 * 1024,
16957 		.feature_bits	= FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
16958 		.tested		= TEST_OK_PREW,
16959 		.probe		= PROBE_JEDEC,
16960 		.probe_timing	= 1,		/* 150 ns */
16961 		.block_erasers	=
16962 		{
16963 			{
16964 				.eraseblocks = { {4 * 1024, 96} },
16965 				.block_erase = JEDEC_SECTOR_ERASE,
16966 			}, {
16967 				.eraseblocks = { {64 * 1024, 6} },
16968 				.block_erase = JEDEC_BLOCK_ERASE,
16969 			}, {
16970 				.eraseblocks = { {384 * 1024, 1} },
16971 				.block_erase = NO_BLOCK_ERASE_FUNC, /* AA 55 80 AA 55 10, only in A/A mux mode */
16972 			}
16973 		},
16974 		.printlock	= PRINTLOCK_SST_FWHUB,
16975 		.unlock		= UNLOCK_SST_FWHUB,
16976 		.write		= WRITE_JEDEC1,
16977 		.read		= READ_MEMMAPPED,
16978 		.voltage	= {3000, 3600},
16979 	},
16980 
16981 	{
16982 		/* Contrary to the data sheet, TBL# on the SST49LF004B affects the top 128kB (instead of 64kB)
16983 		 * and is only honored for 64k block erase, but not 4k sector erase.
16984 		 */
16985 		.vendor		= "SST",
16986 		.name		= "SST49LF004A/B",
16987 		.bustype	= BUS_FWH, /* A/A Mux */
16988 		.manufacture_id	= SST_ID,
16989 		.model_id	= SST_SST49LF004A,
16990 		.total_size	= 512,
16991 		.page_size	= 64 * 1024,
16992 		.feature_bits	= FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
16993 		.tested		= TEST_OK_PREW,
16994 		.probe		= PROBE_JEDEC,
16995 		.probe_timing	= 1,		/* 150 ns */
16996 		.block_erasers	=
16997 		{
16998 			{
16999 				.eraseblocks = { {4 * 1024, 128} },
17000 				.block_erase = JEDEC_SECTOR_ERASE,
17001 			}, {
17002 				.eraseblocks = { {64 * 1024, 8} },
17003 				.block_erase = JEDEC_BLOCK_ERASE,
17004 			}, {
17005 				.eraseblocks = { {512 * 1024, 1} },
17006 				.block_erase = NO_BLOCK_ERASE_FUNC, /* AA 55 80 AA 55 10, only in A/A mux mode */
17007 			},
17008 		},
17009 		.printlock	= PRINTLOCK_SST_FWHUB,
17010 		.unlock		= UNLOCK_SST_FWHUB,
17011 		.write		= WRITE_JEDEC1,
17012 		.read		= READ_MEMMAPPED,
17013 		.voltage	= {3000, 3600},
17014 	},
17015 
17016 	{
17017 		.vendor		= "SST",
17018 		.name		= "SST49LF004C",
17019 		.bustype	= BUS_FWH,
17020 		.manufacture_id	= SST_ID,
17021 		.model_id	= SST_SST49LF004C,
17022 		.total_size	= 512,
17023 		.page_size	= 4 * 1024,
17024 		.feature_bits	= FEATURE_REGISTERMAP,
17025 		.tested		= TEST_UNTESTED,
17026 		.probe		= PROBE_AT82802AB,
17027 		.probe_timing	= TIMING_IGNORED, /* routine doesn't use probe_timing (sst49lfxxxc.c) */
17028 		.block_erasers	=
17029 		{
17030 			{
17031 				.eraseblocks = { {4 * 1024, 128} },
17032 				.block_erase = ERASE_SECTOR_49LFXXXC,
17033 			}, {
17034 				.eraseblocks = {
17035 					{64 * 1024, 7},
17036 					{32 * 1024, 1},
17037 					{8 * 1024, 2},
17038 					{16 * 1024, 1},
17039 				},
17040 				.block_erase = ERASE_BLOCK_82802AB,
17041 			}
17042 		},
17043 		.printlock	= PRINTLOCK_REGSPACE2_BLOCK_ERASER_1,
17044 		.unlock		= UNLOCK_REGSPACE2_BLOCK_ERASER_1,
17045 		.write		= WRITE_82802AB,
17046 		.read		= READ_MEMMAPPED,
17047 		.voltage	= {3000, 3600},
17048 	},
17049 
17050 	{
17051 		.vendor		= "SST",
17052 		.name		= "SST49LF008A",
17053 		.bustype	= BUS_FWH, /* A/A Mux */
17054 		.manufacture_id	= SST_ID,
17055 		.model_id	= SST_SST49LF008A,
17056 		.total_size	= 1024,
17057 		.page_size	= 64 * 1024,
17058 		.feature_bits	= FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
17059 		.tested		= TEST_OK_PREW,
17060 		.probe		= PROBE_JEDEC,
17061 		.probe_timing	= 1,		/* 150 ns */
17062 		.block_erasers	=
17063 		{
17064 			{
17065 				.eraseblocks = { {4 * 1024, 256} },
17066 				.block_erase = JEDEC_SECTOR_ERASE,
17067 			}, {
17068 				.eraseblocks = { {64 * 1024, 16} },
17069 				.block_erase = JEDEC_BLOCK_ERASE,
17070 			}, {
17071 				.eraseblocks = { {1024 * 1024, 1} },
17072 				.block_erase = NO_BLOCK_ERASE_FUNC, /* AA 55 80 AA 55 10, only in A/A mux mode */
17073 			}
17074 		},
17075 		.printlock	= PRINTLOCK_SST_FWHUB,
17076 		.unlock		= UNLOCK_SST_FWHUB,
17077 		.write		= WRITE_JEDEC1,
17078 		.read		= READ_MEMMAPPED,
17079 		.voltage	= {3000, 3600},
17080 	},
17081 
17082 	{
17083 		.vendor		= "SST",
17084 		.name		= "SST49LF008C",
17085 		.bustype	= BUS_FWH,
17086 		.manufacture_id	= SST_ID,
17087 		.model_id	= SST_SST49LF008C,
17088 		.total_size	= 1024,
17089 		.page_size	= 4 * 1024,
17090 		.feature_bits	= FEATURE_REGISTERMAP,
17091 		.tested		= TEST_UNTESTED,
17092 		.probe		= PROBE_AT82802AB,
17093 		.probe_timing	= TIMING_IGNORED, /* routine doesn't use probe_timing (sst49lfxxxc.c) */
17094 		.block_erasers	=
17095 		{
17096 			{
17097 				.eraseblocks = { {4 * 1024, 256} },
17098 				.block_erase = ERASE_SECTOR_49LFXXXC,
17099 			}, {
17100 				.eraseblocks = {
17101 					{64 * 1024, 15},
17102 					{32 * 1024, 1},
17103 					{8 * 1024, 2},
17104 					{16 * 1024, 1},
17105 				},
17106 				.block_erase = ERASE_BLOCK_82802AB,
17107 			}
17108 		},
17109 		.printlock	= PRINTLOCK_REGSPACE2_BLOCK_ERASER_1,
17110 		.unlock		= UNLOCK_REGSPACE2_BLOCK_ERASER_1,
17111 		.write		= WRITE_82802AB,
17112 		.read		= READ_MEMMAPPED,
17113 		.voltage	= {3000, 3600},
17114 	},
17115 
17116 	{
17117 		.vendor		= "SST",
17118 		.name		= "SST49LF016C",
17119 		.bustype	= BUS_FWH,
17120 		.manufacture_id	= SST_ID,
17121 		.model_id	= SST_SST49LF016C,
17122 		.total_size	= 2048,
17123 		.page_size	= 4 * 1024,
17124 		.feature_bits	= FEATURE_REGISTERMAP,
17125 		.tested		= TEST_OK_PREW,
17126 		.probe		= PROBE_AT82802AB,
17127 		.probe_timing	= TIMING_IGNORED, /* routine doesn't use probe_timing (sst49lfxxxc.c) */
17128 		.block_erasers	=
17129 		{
17130 			{
17131 				.eraseblocks = { {4 * 1024, 512} },
17132 				.block_erase = ERASE_SECTOR_49LFXXXC,
17133 			}, {
17134 				.eraseblocks = {
17135 					{64 * 1024, 31},
17136 					{32 * 1024, 1},
17137 					{8 * 1024, 2},
17138 					{16 * 1024, 1},
17139 				},
17140 				.block_erase = ERASE_BLOCK_82802AB,
17141 			}
17142 		},
17143 		.printlock	= PRINTLOCK_REGSPACE2_BLOCK_ERASER_1,
17144 		.unlock		= UNLOCK_REGSPACE2_BLOCK_ERASER_1,
17145 		.write		= WRITE_82802AB,
17146 		.read		= READ_MEMMAPPED,
17147 		.voltage	= {3000, 3600},
17148 	},
17149 
17150 	{
17151 		.vendor		= "SST",
17152 		.name		= "SST49LF020",
17153 		.bustype	= BUS_LPC,
17154 		.manufacture_id	= SST_ID,
17155 		.model_id	= SST_SST49LF020,
17156 		.total_size	= 256,
17157 		.page_size	= 16 * 1024,
17158 		.feature_bits	= FEATURE_EITHER_RESET,
17159 		.tested		= TEST_OK_PREW,
17160 		.probe		= PROBE_JEDEC,
17161 		.probe_timing	= 1,			/* 150 ns */
17162 		.block_erasers	=
17163 		{
17164 			{
17165 				.eraseblocks = { {4 * 1024, 64} },
17166 				.block_erase = JEDEC_SECTOR_ERASE,
17167 			}, {
17168 				.eraseblocks = { {16 * 1024, 16} },
17169 				.block_erase = JEDEC_BLOCK_ERASE,
17170 			}, {
17171 				.eraseblocks = { {256 * 1024, 1} },
17172 				.block_erase = NO_BLOCK_ERASE_FUNC,
17173 			}
17174 		},
17175 		.write		= WRITE_JEDEC1,
17176 		.read		= READ_MEMMAPPED,
17177 		.voltage	= {3000, 3600},
17178 	},
17179 
17180 	{
17181 		.vendor		= "SST",
17182 		.name		= "SST49LF020A",
17183 		.bustype	= BUS_LPC,
17184 		.manufacture_id	= SST_ID,
17185 		.model_id	= SST_SST49LF020A,
17186 		.total_size	= 256,
17187 		.page_size	= 4 * 1024,
17188 		.feature_bits	= FEATURE_EITHER_RESET,
17189 		.tested		= TEST_OK_PRE,
17190 		.probe		= PROBE_JEDEC,
17191 		.probe_timing	= 1,			/* 150 ns */
17192 		.block_erasers	=
17193 		{
17194 			{
17195 				.eraseblocks = { {4 * 1024, 64} },
17196 				.block_erase = JEDEC_SECTOR_ERASE,
17197 			}, {
17198 				.eraseblocks = { {16 * 1024, 16} },
17199 				.block_erase = JEDEC_BLOCK_ERASE,
17200 			}, {
17201 				.eraseblocks = { {256 * 1024, 1} },
17202 				.block_erase = NO_BLOCK_ERASE_FUNC,
17203 			}
17204 		},
17205 		.write		= WRITE_JEDEC1,
17206 		.read		= READ_MEMMAPPED,
17207 		.voltage	= {3000, 3600},
17208 	},
17209 
17210 	{
17211 		.vendor		= "SST",
17212 		.name		= "SST49LF040",
17213 		.bustype	= BUS_LPC,
17214 		.manufacture_id	= SST_ID,
17215 		.model_id	= SST_SST49LF040,
17216 		.total_size	= 512,
17217 		.page_size	= 4096,
17218 		.feature_bits	= FEATURE_EITHER_RESET,
17219 		.tested		= TEST_OK_PREW,
17220 		.probe		= PROBE_JEDEC,
17221 		.probe_timing	= 1,			/* 150 ns */
17222 		.block_erasers	=
17223 		{
17224 			{
17225 				.eraseblocks = { {4 * 1024, 128} },
17226 				.block_erase = JEDEC_SECTOR_ERASE,
17227 			}, {
17228 				.eraseblocks = { {64 * 1024, 8} },
17229 				.block_erase = JEDEC_BLOCK_ERASE,
17230 			}, {
17231 				.eraseblocks = { {512 * 1024, 1} },
17232 				.block_erase = NO_BLOCK_ERASE_FUNC,
17233 			}
17234 		},
17235 		.write		= WRITE_JEDEC1,
17236 		.read		= READ_MEMMAPPED,
17237 		.voltage	= {3000, 3600},
17238 	},
17239 
17240 	{
17241 		.vendor		= "SST",
17242 		.name		= "SST49LF040B",
17243 		.bustype	= BUS_LPC, /* A/A Mux */
17244 		.manufacture_id	= SST_ID,
17245 		.model_id	= SST_SST49LF040B,
17246 		.total_size	= 512,
17247 		.page_size	= 64 * 1024,
17248 		.feature_bits	= FEATURE_EITHER_RESET | FEATURE_REGISTERMAP,
17249 		.tested		= TEST_OK_PREW,
17250 		.probe		= PROBE_JEDEC,
17251 		.probe_timing	= 1,		/* 150ns */
17252 		.block_erasers	=
17253 		{
17254 			{
17255 				.eraseblocks = { {4 * 1024, 128} },
17256 				.block_erase = JEDEC_SECTOR_ERASE,
17257 			}, {
17258 				.eraseblocks = { {64 * 1024, 8} },
17259 				.block_erase = JEDEC_BLOCK_ERASE,
17260 			}, {
17261 				.eraseblocks = { {512 * 1024, 1} },
17262 				.block_erase = NO_BLOCK_ERASE_FUNC,
17263 			}
17264 		},
17265 		.unlock		= UNLOCK_REGSPACE2_UNIFORM_64K,
17266 		.write		= WRITE_JEDEC1,
17267 		.read		= READ_MEMMAPPED,
17268 		.voltage	= {3000, 3600},
17269 	},
17270 
17271 	{
17272 		.vendor		= "SST",
17273 		.name		= "SST49LF080A",
17274 		.bustype	= BUS_LPC, /* A/A Mux */
17275 		.manufacture_id	= SST_ID,
17276 		.model_id	= SST_SST49LF080A,
17277 		.total_size	= 1024,
17278 		.page_size	= 4096,
17279 		.feature_bits	= FEATURE_EITHER_RESET,
17280 		.tested		= TEST_OK_PREW,
17281 		.probe		= PROBE_JEDEC,
17282 		.probe_timing	= TIMING_FIXME,
17283 		.block_erasers	=
17284 		{
17285 			{
17286 				.eraseblocks = { {4 * 1024, 256} },
17287 				.block_erase = JEDEC_SECTOR_ERASE,
17288 			}, {
17289 				.eraseblocks = { {64 * 1024, 16} },
17290 				.block_erase = JEDEC_BLOCK_ERASE,
17291 			}, {
17292 				.eraseblocks = { {1024 * 1024, 1} },
17293 				.block_erase = NO_BLOCK_ERASE_FUNC,
17294 			}
17295 		},
17296 		.write		= WRITE_JEDEC1,
17297 		.read		= READ_MEMMAPPED,
17298 		.voltage	= {3000, 3600},
17299 	},
17300 
17301 	{
17302 		.vendor		= "SST",
17303 		.name		= "SST49LF160C",
17304 		.bustype	= BUS_LPC,
17305 		.manufacture_id	= SST_ID,
17306 		.model_id	= SST_SST49LF160C,
17307 		.total_size	= 2048,
17308 		.page_size	= 4 * 1024,
17309 		.feature_bits	= FEATURE_REGISTERMAP,
17310 		.tested		= TEST_OK_PR,
17311 		.probe		= PROBE_AT82802AB,
17312 		.probe_timing	= TIMING_IGNORED, /* routine doesn't use probe_timing (sst49lfxxxc.c) */
17313 		.block_erasers	=
17314 		{
17315 			{
17316 				.eraseblocks = { {4 * 1024, 512} },
17317 				.block_erase = ERASE_SECTOR_49LFXXXC,
17318 			}, {
17319 				.eraseblocks = {
17320 					{64 * 1024, 31},
17321 					{32 * 1024, 1},
17322 					{8 * 1024, 2},
17323 					{16 * 1024, 1},
17324 				},
17325 				.block_erase = ERASE_BLOCK_82802AB,
17326 			}
17327 		},
17328 		.printlock	= PRINTLOCK_REGSPACE2_BLOCK_ERASER_1,
17329 		.unlock		= UNLOCK_REGSPACE2_BLOCK_ERASER_1,
17330 		.write		= WRITE_82802AB,
17331 		.read		= READ_MEMMAPPED,
17332 		.voltage	= {3000, 3600},
17333 	},
17334 
17335 	{
17336 		.vendor		= "ST",
17337 		.name		= "M29F002B",
17338 		.bustype	= BUS_PARALLEL,
17339 		.manufacture_id	= ST_ID,
17340 		.model_id	= ST_M29F002B,
17341 		.total_size	= 256,
17342 		.page_size	= 64 * 1024,
17343 		.feature_bits	= FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
17344 		.tested		= TEST_UNTESTED,
17345 		.probe		= PROBE_JEDEC,
17346 		.probe_timing	= TIMING_ZERO,	/* Datasheet has no timing info specified */
17347 		.block_erasers	=
17348 		{
17349 			{
17350 				.eraseblocks = {
17351 					{16 * 1024, 1},
17352 					{8 * 1024, 2},
17353 					{32 * 1024, 1},
17354 					{64 * 1024, 3},
17355 				},
17356 				.block_erase = JEDEC_SECTOR_ERASE,
17357 			}, {
17358 				.eraseblocks = { {256 * 1024, 1} },
17359 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
17360 			}
17361 		},
17362 		.write		= WRITE_JEDEC1,
17363 		.read		= READ_MEMMAPPED,
17364 		.voltage	= {4750, 5250}, /* 4.75-5.25V for type -X, others 4.5-5.5V */
17365 	},
17366 
17367 	{
17368 		.vendor		= "ST",
17369 		.name		= "M29F002T/NT",
17370 		.bustype	= BUS_PARALLEL,
17371 		.manufacture_id	= ST_ID,
17372 		.model_id	= ST_M29F002T,
17373 		.total_size	= 256,
17374 		.page_size	= 64 * 1024,
17375 		.feature_bits	= FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
17376 		.tested		= TEST_OK_PREW,
17377 		.probe		= PROBE_JEDEC,
17378 		.probe_timing	= TIMING_ZERO,	/* Datasheet has no timing info specified */
17379 		.block_erasers	=
17380 		{
17381 			{
17382 				.eraseblocks = {
17383 					{64 * 1024, 3},
17384 					{32 * 1024, 1},
17385 					{8 * 1024, 2},
17386 					{16 * 1024, 1},
17387 				},
17388 				.block_erase = JEDEC_SECTOR_ERASE,
17389 			}, {
17390 				.eraseblocks = { {256 * 1024, 1} },
17391 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
17392 			}
17393 		},
17394 		.write		= WRITE_JEDEC1,
17395 		.read		= READ_MEMMAPPED,
17396 		.voltage	= {4750, 5250}, /* 4.75-5.25V for type -X, others 4.5-5.5V */
17397 	},
17398 
17399 	{
17400 		.vendor		= "ST",
17401 		.name		= "M29F040B",
17402 		.bustype	= BUS_PARALLEL,
17403 		.manufacture_id	= ST_ID,
17404 		.model_id	= ST_M29F040B,
17405 		.total_size	= 512,
17406 		.page_size	= 64 * 1024,
17407 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
17408 		.tested		= TEST_UNTESTED,
17409 		.probe		= PROBE_JEDEC,
17410 		.probe_timing	= TIMING_ZERO, /* datasheet specifies no timing */
17411 		.block_erasers	=
17412 		{
17413 			{
17414 				.eraseblocks = { {64 * 1024, 8} },
17415 				.block_erase = JEDEC_SECTOR_ERASE,
17416 			}, {
17417 				.eraseblocks = { {512 * 1024, 1} },
17418 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
17419 			}
17420 		},
17421 		.write		= WRITE_JEDEC1,
17422 		.read		= READ_MEMMAPPED,
17423 		.voltage	= {4500, 5500},
17424 	},
17425 
17426 	{
17427 		/* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
17428 		.vendor		= "ST",
17429 		.name		= "M29F400BB",
17430 		.bustype	= BUS_PARALLEL,
17431 		.manufacture_id	= ST_ID,
17432 		.model_id	= ST_M29F400BB,
17433 		.total_size	= 512,
17434 		.page_size	= 64 * 1024,
17435 		.feature_bits	= FEATURE_ADDR_SHIFTED | FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
17436 		.tested		= TEST_UNTESTED,
17437 		.probe		= PROBE_JEDEC,
17438 		.probe_timing	= 10, // FIXME: check datasheet. Using the 10 us from probe_m29f400bt
17439 		.block_erasers	=
17440 		{
17441 			{
17442 				.eraseblocks = {
17443 					{16 * 1024, 1},
17444 					{8 * 1024, 2},
17445 					{32 * 1024, 1},
17446 					{64 * 1024, 7},
17447 				},
17448 				.block_erase = JEDEC_SECTOR_ERASE,
17449 			}, {
17450 				.eraseblocks = { {512 * 1024, 1} },
17451 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
17452 			}
17453 		},
17454 		.write		= WRITE_JEDEC1,
17455 		.read		= READ_MEMMAPPED,
17456 		.voltage	= {4500, 5500},
17457 	},
17458 
17459 	{
17460 		/* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
17461 		.vendor		= "ST",
17462 		.name		= "M29F400BT",
17463 		.bustype	= BUS_PARALLEL,
17464 		.manufacture_id	= ST_ID,
17465 		.model_id	= ST_M29F400BT,
17466 		.total_size	= 512,
17467 		.page_size	= 64 * 1024,
17468 		.feature_bits	= FEATURE_ADDR_SHIFTED | FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
17469 		.tested		= TEST_UNTESTED,
17470 		.probe		= PROBE_JEDEC,
17471 		.probe_timing	= 10, // FIXME: check datasheet. Using the 10 us from probe_m29f400bt
17472 		.block_erasers	=
17473 		{
17474 			{
17475 				.eraseblocks = {
17476 					{64 * 1024, 7},
17477 					{32 * 1024, 1},
17478 					{8 * 1024, 2},
17479 					{16 * 1024, 1},
17480 				},
17481 				.block_erase = JEDEC_SECTOR_ERASE,
17482 			}, {
17483 				.eraseblocks = { {512 * 1024, 1} },
17484 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
17485 			}
17486 		},
17487 		.write		= WRITE_JEDEC1,
17488 		.read		= READ_MEMMAPPED,
17489 		.voltage	= {4500, 5500},
17490 	},
17491 
17492 	{
17493 		.vendor		= "ST",
17494 		.name		= "M29W010B",
17495 		.bustype	= BUS_PARALLEL,
17496 		.manufacture_id	= ST_ID,
17497 		.model_id	= ST_M29W010B,
17498 		.total_size	= 128,
17499 		.page_size	= 16 * 1024,
17500 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
17501 		.tested		= TEST_UNTESTED,
17502 		.probe		= PROBE_JEDEC,
17503 		.probe_timing	= TIMING_ZERO,	/* Datasheet has no timing info specified */
17504 		.block_erasers	=
17505 		{
17506 			{
17507 				.eraseblocks = { {16 * 1024, 8} },
17508 				.block_erase = JEDEC_SECTOR_ERASE,
17509 			}, {
17510 				.eraseblocks = { {128 * 1024, 1} },
17511 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
17512 			}
17513 		},
17514 		.write		= WRITE_JEDEC1,
17515 		.read		= READ_MEMMAPPED,
17516 		.voltage	= {2700, 3600},
17517 	},
17518 
17519 	{
17520 		.vendor		= "ST",
17521 		.name		= "M29W040B",
17522 		.bustype	= BUS_PARALLEL,
17523 		.manufacture_id	= ST_ID,
17524 		.model_id	= ST_M29W040B,
17525 		.total_size	= 512,
17526 		.page_size	= 64 * 1024,
17527 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
17528 		.tested		= TEST_UNTESTED,
17529 		.probe		= PROBE_JEDEC,
17530 		.probe_timing	= TIMING_ZERO,	/* Datasheet has no timing info specified */
17531 		.block_erasers	=
17532 		{
17533 			{
17534 				.eraseblocks = { {64 * 1024, 8} },
17535 				.block_erase = JEDEC_SECTOR_ERASE,
17536 			}, {
17537 				.eraseblocks = { {512 * 1024, 1} },
17538 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
17539 			}
17540 		},
17541 		.write		= WRITE_JEDEC1,
17542 		.read		= READ_MEMMAPPED,
17543 		.voltage	= {2700, 3600},
17544 	},
17545 
17546 	{
17547 		.vendor		= "ST",
17548 		.name		= "M29W512B",
17549 		.bustype	= BUS_PARALLEL,
17550 		.manufacture_id	= ST_ID,
17551 		.model_id	= ST_M29W512B,
17552 		.total_size	= 64,
17553 		.page_size	= 64 * 1024,
17554 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
17555 		.tested		= TEST_OK_PREW,
17556 		.probe		= PROBE_JEDEC,
17557 		.probe_timing	= TIMING_ZERO,
17558 		.block_erasers	=
17559 		{
17560 			{
17561 				.eraseblocks = { {64 * 1024, 1} },
17562 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
17563 			}
17564 		},
17565 		.write		= WRITE_JEDEC1,
17566 		.read		= READ_MEMMAPPED,
17567 		.voltage	= {2700, 3600},
17568 	},
17569 
17570 	{
17571 		.vendor		= "ST",
17572 		.name		= "M50FLW040A",
17573 		.bustype	= BUS_FWH | BUS_LPC, /* A/A Mux */
17574 		.manufacture_id	= ST_ID,
17575 		.model_id	= ST_M50FLW040A,
17576 		.total_size	= 512,
17577 		.page_size	= 0,
17578 		.feature_bits	= FEATURE_REGISTERMAP,
17579 		.tested		= TEST_UNTESTED,
17580 		.probe		= PROBE_AT82802AB,
17581 		.probe_timing	= TIMING_FIXME,
17582 		.block_erasers	=
17583 		{
17584 			{
17585 				.eraseblocks = {
17586 					{4 * 1024, 16}, /* sector */
17587 					{64 * 1024, 5}, /* block */
17588 					{4 * 1024, 16}, /* sector */
17589 					{4 * 1024, 16}, /* sector */
17590 				},
17591 				.block_erase = STM50_SECTOR_ERASE,
17592 			}, {
17593 				.eraseblocks = { {64 * 1024, 8} },
17594 				.block_erase = ERASE_BLOCK_82802AB,
17595 			}
17596 		},
17597 		.unlock		= UNLOCK_REGSPACE2_UNIFORM_64K,
17598 		.write		= WRITE_82802AB,
17599 		.read		= READ_MEMMAPPED,
17600 		.voltage	= {3000, 3600}, /* Also has 12V fast program & erase */
17601 	},
17602 
17603 	{
17604 		.vendor		= "ST",
17605 		.name		= "M50FLW040B",
17606 		.bustype	= BUS_FWH | BUS_LPC, /* A/A Mux */
17607 		.manufacture_id	= ST_ID,
17608 		.model_id	= ST_M50FLW040B,
17609 		.total_size	= 512,
17610 		.page_size	= 0,
17611 		.feature_bits	= FEATURE_REGISTERMAP,
17612 		.tested		= TEST_UNTESTED,
17613 		.probe		= PROBE_AT82802AB,
17614 		.probe_timing	= TIMING_FIXME,
17615 		.block_erasers	=
17616 		{
17617 			{
17618 				.eraseblocks = {
17619 					{4 * 1024, 16}, /* sector */
17620 					{4 * 1024, 16}, /* sector */
17621 					{64 * 1024, 5}, /* block */
17622 					{4 * 1024, 16}, /* sector */
17623 				},
17624 				.block_erase = STM50_SECTOR_ERASE,
17625 			}, {
17626 				.eraseblocks = { {64 * 1024, 8} },
17627 				.block_erase = ERASE_BLOCK_82802AB,
17628 			}
17629 		},
17630 		.unlock		= UNLOCK_REGSPACE2_UNIFORM_64K,
17631 		.write		= WRITE_82802AB,
17632 		.read		= READ_MEMMAPPED,
17633 		.voltage	= {3000, 3600}, /* Also has 12V fast program & erase */
17634 	},
17635 
17636 	{
17637 		.vendor		= "ST",
17638 		.name		= "M50FLW080A",
17639 		.bustype	= BUS_FWH | BUS_LPC, /* A/A Mux */
17640 		.manufacture_id	= ST_ID,
17641 		.model_id	= ST_M50FLW080A,
17642 		.total_size	= 1024,
17643 		.page_size	= 0,
17644 		.feature_bits	= FEATURE_REGISTERMAP,
17645 		.tested		= TEST_OK_PR,
17646 		.probe		= PROBE_AT82802AB,
17647 		.probe_timing	= TIMING_FIXME,
17648 		.block_erasers	=
17649 		{
17650 			{
17651 				.eraseblocks = {
17652 					{4 * 1024, 16}, /* sector */
17653 					{64 * 1024, 13}, /* block */
17654 					{4 * 1024, 16}, /* sector */
17655 					{4 * 1024, 16}, /* sector */
17656 				},
17657 				.block_erase = STM50_SECTOR_ERASE,
17658 			}, {
17659 				.eraseblocks = { {64 * 1024, 16} },
17660 				.block_erase = ERASE_BLOCK_82802AB,
17661 			}
17662 		},
17663 		.printlock	= PRINTLOCK_REGSPACE2_BLOCK_ERASER_0,
17664 		.unlock		= UNLOCK_REGSPACE2_BLOCK_ERASER_0,
17665 		.write		= WRITE_82802AB,
17666 		.read		= READ_MEMMAPPED,
17667 		.voltage	= {3000, 3600}, /* Also has 12V fast program & erase */
17668 	},
17669 
17670 	{
17671 		.vendor		= "ST",
17672 		.name		= "M50FLW080B",
17673 		.bustype	= BUS_FWH | BUS_LPC, /* A/A Mux */
17674 		.manufacture_id	= ST_ID,
17675 		.model_id	= ST_M50FLW080B,
17676 		.total_size	= 1024,
17677 		.page_size	= 0,
17678 		.feature_bits	= FEATURE_REGISTERMAP,
17679 		.tested		= TEST_UNTESTED,
17680 		.probe		= PROBE_AT82802AB,
17681 		.probe_timing	= TIMING_FIXME,
17682 		.block_erasers	=
17683 		{
17684 			{
17685 				.eraseblocks = {
17686 					{4 * 1024, 16}, /* sector */
17687 					{4 * 1024, 16}, /* sector */
17688 					{64 * 1024, 13}, /* block */
17689 					{4 * 1024, 16}, /* sector */
17690 				},
17691 				.block_erase = STM50_SECTOR_ERASE,
17692 			}, {
17693 				.eraseblocks = { {64 * 1024, 16} },
17694 				.block_erase = ERASE_BLOCK_82802AB,
17695 			}
17696 		},
17697 		.printlock	= PRINTLOCK_REGSPACE2_BLOCK_ERASER_0,
17698 		.unlock		= UNLOCK_REGSPACE2_BLOCK_ERASER_0,
17699 		.write		= WRITE_82802AB,
17700 		.read		= READ_MEMMAPPED,
17701 		.voltage	= {3000, 3600}, /* Also has 12V fast program & erase */
17702 	},
17703 
17704 	{
17705 		.vendor		= "ST",
17706 		.name		= "M50FW002",
17707 		.bustype	= BUS_FWH, /* A/A Mux */
17708 		.manufacture_id	= ST_ID,
17709 		.model_id	= ST_M50FW002,
17710 		.total_size	= 256,
17711 		.page_size	= 0,
17712 		.feature_bits	= FEATURE_REGISTERMAP,
17713 		.tested		= TEST_OK_PR,
17714 		.probe		= PROBE_AT82802AB,
17715 		.probe_timing	= TIMING_IGNORED, /* routine doesn't use probe_timing (82802ab.c) */
17716 		.block_erasers	=
17717 		{
17718 			{
17719 				.eraseblocks = {
17720 					{64 * 1024, 3},
17721 					{32 * 1024, 1},
17722 					{8 * 1024, 2},
17723 					{16 * 1024, 1},
17724 				},
17725 				.block_erase = ERASE_BLOCK_82802AB,
17726 			}, {
17727 				.eraseblocks = { {256 * 1024, 1} },
17728 				.block_erase = NO_BLOCK_ERASE_FUNC, /* Only in A/A mux mode */
17729 			}
17730 		},
17731 		.printlock	= PRINTLOCK_REGSPACE2_BLOCK_ERASER_0,
17732 		.unlock		= UNLOCK_REGSPACE2_BLOCK_ERASER_0,
17733 		.write		= WRITE_82802AB,
17734 		.read		= READ_MEMMAPPED,
17735 		.voltage	= {3000, 3600}, /* Also has 12V fast program & erase */
17736 	},
17737 
17738 	{
17739 		.vendor		= "ST",
17740 		.name		= "M50FW016",
17741 		.bustype	= BUS_FWH, /* A/A Mux */
17742 		.manufacture_id	= ST_ID,
17743 		.model_id	= ST_M50FW016,
17744 		.total_size	= 2048,
17745 		.page_size	= 0,
17746 		.feature_bits	= FEATURE_REGISTERMAP,
17747 		.tested		= TEST_UNTESTED,
17748 		.probe		= PROBE_AT82802AB,
17749 		.probe_timing	= TIMING_IGNORED, /* routine doesn't use probe_timing (82802ab.c) */
17750 		.block_erasers	=
17751 		{
17752 			{
17753 				.eraseblocks = { {64 * 1024, 32} },
17754 				.block_erase = ERASE_BLOCK_82802AB,
17755 			}
17756 		},
17757 		.unlock		= UNLOCK_REGSPACE2_UNIFORM_64K,
17758 		.write		= WRITE_82802AB,
17759 		.read		= READ_MEMMAPPED,
17760 		.voltage	= {3000, 3600}, /* Also has 12V fast program & erase */
17761 	},
17762 
17763 	{
17764 		.vendor		= "ST",
17765 		.name		= "M50FW040",
17766 		.bustype	= BUS_FWH, /* A/A Mux */
17767 		.manufacture_id	= ST_ID,
17768 		.model_id	= ST_M50FW040,
17769 		.total_size	= 512,
17770 		.page_size	= 0,
17771 		.feature_bits	= FEATURE_REGISTERMAP,
17772 		.tested		= TEST_OK_PR,
17773 		.probe		= PROBE_AT82802AB,
17774 		.probe_timing	= TIMING_IGNORED, /* routine doesn't use probe_timing (82802ab.c) */
17775 		.block_erasers	=
17776 		{
17777 			{
17778 				.eraseblocks = { {64 * 1024, 8} },
17779 				.block_erase = ERASE_BLOCK_82802AB,
17780 			}
17781 		},
17782 		.unlock		= UNLOCK_REGSPACE2_UNIFORM_64K,
17783 		.write		= WRITE_82802AB,
17784 		.read		= READ_MEMMAPPED,
17785 		.voltage	= {3000, 3600}, /* Also has 12V fast program & erase */
17786 	},
17787 
17788 	{
17789 		.vendor		= "ST",
17790 		.name		= "M50FW080",
17791 		.bustype	= BUS_FWH, /* A/A Mux */
17792 		.manufacture_id	= ST_ID,
17793 		.model_id	= ST_M50FW080,
17794 		.total_size	= 1024,
17795 		.page_size	= 0,
17796 		.feature_bits	= FEATURE_REGISTERMAP,
17797 		.tested		= TEST_OK_PR,
17798 		.probe		= PROBE_AT82802AB,
17799 		.probe_timing	= TIMING_IGNORED, /* routine doesn't use probe_timing (82802ab.c) */
17800 		.block_erasers	=
17801 		{
17802 			{
17803 				.eraseblocks = { {64 * 1024, 16} },
17804 				.block_erase = ERASE_BLOCK_82802AB,
17805 			}
17806 		},
17807 		.unlock		= UNLOCK_REGSPACE2_UNIFORM_64K,
17808 		.write		= WRITE_82802AB,
17809 		.read		= READ_MEMMAPPED,
17810 		.voltage	= {3000, 3600}, /* Also has 12V fast program & erase */
17811 	},
17812 
17813 	{
17814 		.vendor		= "ST",
17815 		.name		= "M50LPW080",
17816 		.bustype	= BUS_LPC, /* A/A Mux */
17817 		.manufacture_id	= ST_ID,
17818 		.model_id	= ST_M50LPW080,
17819 		.total_size	= 1024,
17820 		.page_size	= 0,
17821 		.feature_bits	= FEATURE_REGISTERMAP,
17822 		.tested		= TEST_UNTESTED,
17823 		.probe		= PROBE_AT82802AB,
17824 		.probe_timing	= TIMING_ZERO,	/* Datasheet has no timing info specified */
17825 		.block_erasers	=
17826 		{
17827 			{
17828 				.eraseblocks = { {64 * 1024, 16} },
17829 				.block_erase = ERASE_BLOCK_82802AB,
17830 			}
17831 		},
17832 		.unlock		= UNLOCK_REGSPACE2_UNIFORM_64K,
17833 		.write		= WRITE_82802AB,
17834 		.read		= READ_MEMMAPPED,
17835 		.voltage	= {3000, 3600}, /* Also has 12V fast program & erase */
17836 	},
17837 
17838 	{
17839 		.vendor		= "ST",
17840 		.name		= "M50LPW116",
17841 		.bustype	= BUS_LPC, /* A/A Mux */
17842 		.manufacture_id	= ST_ID,
17843 		.model_id	= ST_M50LPW116,
17844 		.total_size	= 2048,
17845 		.page_size	= 0,
17846 		.feature_bits	= FEATURE_REGISTERMAP,
17847 		.tested		= TEST_UNTESTED,
17848 		.probe		= PROBE_AT82802AB,
17849 		.probe_timing	= TIMING_ZERO,	/* Datasheet has no timing info specified */
17850 		.block_erasers	=
17851 		{
17852 			{
17853 				.eraseblocks = {
17854 					{4 * 1024, 16},
17855 					{64 * 1024, 30},
17856 					{32 * 1024, 1},
17857 					{8 * 1024, 2},
17858 					{16 * 1024, 1},
17859 				},
17860 				.block_erase = ERASE_BLOCK_82802AB,
17861 			}
17862 		},
17863 		.printlock	= PRINTLOCK_REGSPACE2_BLOCK_ERASER_0,
17864 		.unlock		= UNLOCK_REGSPACE2_BLOCK_ERASER_0,
17865 		.write		= WRITE_82802AB,
17866 		.read		= READ_MEMMAPPED,
17867 		.voltage	= {3000, 3600}, /* Also has 12V fast program & erase */
17868 	},
17869 
17870 	{
17871 		.vendor		= "ST",
17872 		.name		= "M95M02",
17873 		.bustype	= BUS_SPI,
17874 		.manufacture_id	= ST_ID,
17875 		.model_id	= ST_M95M02,
17876 		.total_size	= 256,
17877 		.page_size	= 256,
17878 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_NO_ERASE | FEATURE_ERASED_ZERO,
17879 		.tested		= TEST_OK_PREW,
17880 		.probe		= PROBE_SPI_ST95,
17881 		.probe_timing	= TIMING_ZERO,
17882 		.block_erasers	=
17883 		{
17884 			{
17885 				.eraseblocks = { {256 * 1024, 1} },
17886 				.block_erase = SPI_BLOCK_ERASE_EMULATION,
17887 			}
17888 		},
17889 
17890 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP1_SRWD,
17891 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP1_SRWD,
17892 		.write		= SPI_CHIP_WRITE256,
17893 		.read		= SPI_CHIP_READ,
17894 		.voltage	= {2500, 5500},
17895 	},
17896 
17897 	{
17898 		.vendor		= "Sanyo",
17899 		.name		= "LE25FU106B",
17900 		.bustype	= BUS_SPI,
17901 		.manufacture_id	= SANYO_ID,
17902 		.model_id	= SANYO_LE25FU106B,
17903 		.total_size	= 128,
17904 		.page_size	= 256,
17905 		.feature_bits	= FEATURE_WRSR_WREN,
17906 		.tested		= TEST_UNTESTED,
17907 		.probe		= PROBE_SPI_RES2,
17908 		.probe_timing	= TIMING_ZERO,
17909 		.block_erasers	=
17910 		{
17911 			/* FIXME: Is this correct?
17912 			{
17913 				.eraseblocks = { {2 * 1024, 64} },
17914 				.block_erase = SPI_BLOCK_ERASE_D7,
17915 			},*/
17916 			{
17917 				.eraseblocks = { {32 * 1024, 4} },
17918 				.block_erase = SPI_BLOCK_ERASE_D8,
17919 			}, {
17920 				.eraseblocks = { {128 * 1024, 1} },
17921 				.block_erase = SPI_BLOCK_ERASE_C7,
17922 			}
17923 		},
17924 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP1_SRWD,
17925 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP1_SRWD,
17926 		.write		= SPI_CHIP_WRITE256,
17927 		.read		= SPI_CHIP_READ,
17928 		.voltage	= {2300, 3600},
17929 	},
17930 
17931 	{
17932 		.vendor		= "Sanyo",
17933 		.name		= "LE25FU206",
17934 		.bustype	= BUS_SPI,
17935 		.manufacture_id	= SANYO_ID,
17936 		.model_id	= SANYO_LE25FU206,
17937 		.total_size	= 256,
17938 		.page_size	= 256,
17939 		.feature_bits	= FEATURE_WRSR_WREN,
17940 		.tested		= TEST_UNTESTED,
17941 		.probe		= PROBE_SPI_RES2,
17942 		.probe_timing	= TIMING_ZERO,
17943 		.block_erasers	=
17944 		{
17945 			{
17946 				.eraseblocks = { {4 * 1024, 64} },
17947 				.block_erase = SPI_BLOCK_ERASE_D7,
17948 			}, {
17949 				.eraseblocks = { {64 * 1024, 4} },
17950 				.block_erase = SPI_BLOCK_ERASE_D8,
17951 			}, {
17952 				.eraseblocks = { {256 * 1024, 1} },
17953 				.block_erase = SPI_BLOCK_ERASE_C7,
17954 			}
17955 		},
17956 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP1_SRWD,
17957 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP1_SRWD,
17958 		.write		= SPI_CHIP_WRITE256,
17959 		.read		= SPI_CHIP_READ,
17960 		.voltage	= {2300, 3600},
17961 	},
17962 
17963 	{
17964 		.vendor		= "Sanyo",
17965 		.name		= "LE25FU206A",
17966 		.bustype	= BUS_SPI,
17967 		.manufacture_id	= SANYO_ID,
17968 		.model_id	= SANYO_LE25FU206A,
17969 		.total_size	= 256,
17970 		.page_size	= 256,
17971 		.tested		= TEST_UNTESTED,
17972 		.probe		= PROBE_SPI_RDID,
17973 		.probe_timing	= TIMING_ZERO,
17974 		.block_erasers	=
17975 		{
17976 			{
17977 				.eraseblocks = { {4 * 1024, 64} },
17978 				.block_erase = SPI_BLOCK_ERASE_20,
17979 			}, {
17980 				.eraseblocks = { {4 * 1024, 64} },
17981 				.block_erase = SPI_BLOCK_ERASE_D7,
17982 			}, {
17983 				.eraseblocks = { {64 * 1024, 4} },
17984 				.block_erase = SPI_BLOCK_ERASE_D8,
17985 			}, {
17986 				.eraseblocks = { {256 * 1024, 1} },
17987 				.block_erase = SPI_BLOCK_ERASE_60,
17988 			}, {
17989 				.eraseblocks = { {256 * 1024, 1} },
17990 				.block_erase = SPI_BLOCK_ERASE_C7,
17991 			}
17992 		},
17993 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
17994 		.unlock		= SPI_DISABLE_BLOCKPROTECT, /* #WP pin write-protects SRWP bit. */
17995 		.write		= SPI_CHIP_WRITE256,
17996 		.read		= SPI_CHIP_READ,
17997 		.voltage	= {2300, 3600},
17998 	},
17999 
18000 	{
18001 		.vendor		= "Sanyo",
18002 		.name		= "LE25FU406B",
18003 		.bustype	= BUS_SPI,
18004 		.manufacture_id	= SANYO_ID,
18005 		.model_id	= SANYO_LE25FU406B,
18006 		.total_size	= 512,
18007 		.page_size	= 256,
18008 		.feature_bits	= FEATURE_WRSR_WREN,
18009 		.tested		= TEST_OK_PREW,
18010 		.probe		= PROBE_SPI_RES2,
18011 		.probe_timing	= TIMING_ZERO,
18012 		.block_erasers	=
18013 		{
18014 			{
18015 				.eraseblocks = { {4 * 1024, 128} },
18016 				.block_erase = SPI_BLOCK_ERASE_D7,
18017 			}, {
18018 				.eraseblocks = { {64 * 1024, 8} },
18019 				.block_erase = SPI_BLOCK_ERASE_D8,
18020 			}, {
18021 				.eraseblocks = { {512 * 1024, 1} },
18022 				.block_erase = SPI_BLOCK_ERASE_C7,
18023 				}
18024 		},
18025 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
18026 		.unlock		= SPI_DISABLE_BLOCKPROTECT, /* #WP pin write-protects SRWP bit. */
18027 		.write		= SPI_CHIP_WRITE256,
18028 		.read		= SPI_CHIP_READ,
18029 		.voltage	= {2300, 3600},
18030 	},
18031 
18032 	{
18033 		.vendor		= "Sanyo",
18034 		.name		= "LE25FU406C/LE25U40CMC",
18035 		.bustype	= BUS_SPI,
18036 		.manufacture_id	= SANYO_ID,
18037 		.model_id	= SANYO_LE25FU406C,
18038 		.total_size	= 512,
18039 		.page_size	= 256,
18040 		.feature_bits	= FEATURE_WRSR_WREN,
18041 		.tested		= TEST_OK_PREW,
18042 		.probe		= PROBE_SPI_RDID,
18043 		.probe_timing	= TIMING_ZERO,
18044 		.block_erasers	=
18045 		{
18046 			{
18047 				.eraseblocks = { {4 * 1024, 128} },
18048 				.block_erase = SPI_BLOCK_ERASE_20,
18049 			}, {
18050 				.eraseblocks = { {4 * 1024, 128} },
18051 				.block_erase = SPI_BLOCK_ERASE_D7,
18052 			}, {
18053 				.eraseblocks = { {64 * 1024, 8} },
18054 				.block_erase = SPI_BLOCK_ERASE_D8,
18055 			}, {
18056 				.eraseblocks = { {512 * 1024, 1} },
18057 				.block_erase = SPI_BLOCK_ERASE_60,
18058 			}, {
18059 				.eraseblocks = { {512 * 1024, 1} },
18060 				.block_erase = SPI_BLOCK_ERASE_C7,
18061 				}
18062 		},
18063 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
18064 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD,
18065 		.write		= SPI_CHIP_WRITE256,
18066 		.read		= SPI_CHIP_READ, /* Fast read (0x0B), dual read (0x3B) and dual I/O (0xBB) supported */
18067 		.voltage	= {2300, 3600},
18068 	},
18069 
18070 	{
18071 		.vendor		= "Sanyo",
18072 		.name		= "LE25FW106",
18073 		.bustype	= BUS_SPI,
18074 		.manufacture_id	= SANYO_ID,
18075 		.model_id	= SANYO_LE25FW106,
18076 		.total_size	= 128,
18077 		.page_size	= 256,
18078 		.feature_bits	= FEATURE_WRSR_WREN,
18079 		.tested		= TEST_OK_PREW,
18080 		.probe		= PROBE_SPI_RES2,
18081 		.probe_timing	= TIMING_ZERO,
18082 		.block_erasers	=
18083 		{
18084 			{
18085 				.eraseblocks = { {2 * 1024, 64} },
18086 				.block_erase = SPI_BLOCK_ERASE_D7,
18087 			}, {
18088 				.eraseblocks = { {32 * 1024, 4} },
18089 				.block_erase = SPI_BLOCK_ERASE_D8,
18090 			}, {
18091 				.eraseblocks = { {128 * 1024, 1} },
18092 				.block_erase = SPI_BLOCK_ERASE_C7,
18093 			}
18094 		},
18095 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP1_SRWD, /* FIXME: Add ERSER error flag. */
18096 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP1_SRWD,
18097 		.write		= SPI_CHIP_WRITE256,
18098 		.read		= SPI_CHIP_READ,
18099 		.voltage	= {2700, 3600},
18100 	},
18101 
18102 	{
18103 		.vendor		= "Sanyo",
18104 		.name		= "LE25FW203A",
18105 		.bustype	= BUS_SPI,
18106 		.manufacture_id	= SANYO_ID,
18107 		.model_id	= SANYO_LE25FW203A,
18108 		.total_size	= 256,
18109 		.page_size	= 256,
18110 		.tested		= TEST_UNTESTED,
18111 		.probe		= PROBE_SPI_RDID,
18112 		.probe_timing	= TIMING_ZERO,
18113 		.block_erasers	=
18114 		{
18115 			{
18116 				.eraseblocks = { {256, 1024} },
18117 				.block_erase = SPI_BLOCK_ERASE_DB,
18118 			}, {
18119 				.eraseblocks = { {64 * 1024, 4} },
18120 				.block_erase = SPI_BLOCK_ERASE_D8,
18121 			}, {
18122 				.eraseblocks = { {256 * 1024, 1} },
18123 				.block_erase = SPI_BLOCK_ERASE_C7,
18124 			}
18125 		},
18126 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_DEFAULT_WELWIP,
18127 		.unlock		= NO_BLOCKPROTECT_FUNC, /* #WP pin write-protects lower 64kB. */
18128 		.write		= SPI_CHIP_WRITE256,
18129 		.read		= SPI_CHIP_READ,
18130 		.voltage	= {2700, 3600},
18131 	},
18132 
18133 	{
18134 		.vendor		= "Sanyo",
18135 		.name		= "LE25FW403A",
18136 		.bustype	= BUS_SPI,
18137 		.manufacture_id	= SANYO_ID,
18138 		.model_id	= SANYO_LE25FW403A,
18139 		.total_size	= 512,
18140 		.page_size	= 256,
18141 		.tested		= TEST_UNTESTED,
18142 		.probe		= PROBE_SPI_RDID,
18143 		.probe_timing	= TIMING_ZERO,
18144 		.block_erasers	=
18145 		{
18146 			{
18147 				.eraseblocks = { {256, 2 * 1024} },
18148 				.block_erase = SPI_BLOCK_ERASE_DB,
18149 			}, {
18150 				.eraseblocks = { {64 * 1024, 8} },
18151 				.block_erase = SPI_BLOCK_ERASE_D8,
18152 			}, {
18153 				.eraseblocks = { {512 * 1024, 1} },
18154 				.block_erase = SPI_BLOCK_ERASE_C7,
18155 			}
18156 		},
18157 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_DEFAULT_WELWIP,
18158 		.unlock		= NO_BLOCKPROTECT_FUNC, /* #WP pin write-protects lower 64kB. */
18159 		.write		= SPI_CHIP_WRITE256,
18160 		.read		= SPI_CHIP_READ,
18161 		.voltage	= {2700, 3600},
18162 	},
18163 
18164 	{
18165 		.vendor		= "Sanyo",
18166 		.name		= "LE25FW406A",
18167 		.bustype	= BUS_SPI,
18168 		.manufacture_id	= SANYO_ID,
18169 		.model_id	= SANYO_LE25FW406A,
18170 		.total_size	= 512,
18171 		.page_size	= 256,
18172 		.feature_bits	= FEATURE_WRSR_WREN,
18173 		.tested		= TEST_OK_PREW,
18174 		.probe		= PROBE_SPI_RES2,
18175 		.probe_timing	= TIMING_ZERO,
18176 		.block_erasers	=
18177 		{
18178 			{
18179 				.eraseblocks = { {4 * 1024, 128} },
18180 				.block_erase = SPI_BLOCK_ERASE_D7,
18181 			}, {
18182 				.eraseblocks = { {64 * 1024, 8} },
18183 				.block_erase = SPI_BLOCK_ERASE_D8,
18184 			}, {
18185 				.eraseblocks = { {512 * 1024, 1} },
18186 				.block_erase = SPI_BLOCK_ERASE_C7,
18187 			}
18188 		},
18189 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN,
18190 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
18191 		.write		= SPI_CHIP_WRITE256,
18192 		.read		= SPI_CHIP_READ,
18193 		.voltage	= {2700, 3600},
18194 	},
18195 
18196 	{
18197 		.vendor		= "Sanyo",
18198 		.name		= "LE25FW418A",
18199 		.bustype	= BUS_SPI,
18200 		.manufacture_id	= SANYO_ID,
18201 		.model_id	= SANYO_LE25FW418A,
18202 		.total_size	= 512,
18203 		.page_size	= 256,
18204 		.feature_bits	= FEATURE_WRSR_WREN,
18205 		.tested		= TEST_UNTESTED,
18206 		.probe		= PROBE_SPI_RES2,
18207 		.probe_timing	= TIMING_ZERO,
18208 		.block_erasers	=
18209 		{
18210 			{
18211 				.eraseblocks = { {4 * 1024, 128} },
18212 				.block_erase = SPI_BLOCK_ERASE_D7,
18213 			}, {
18214 				.eraseblocks = { {64 * 1024, 8} },
18215 				.block_erase = SPI_BLOCK_ERASE_D8,
18216 			}, {
18217 				.eraseblocks = { {512 * 1024, 1} },
18218 				.block_erase = SPI_BLOCK_ERASE_C7,
18219 			}
18220 		},
18221 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
18222 		.unlock		= SPI_DISABLE_BLOCKPROTECT, /* #WP pin write-protects SRWP bit. */
18223 		.write		= SPI_CHIP_WRITE256,
18224 		.read		= SPI_CHIP_READ, /* some quad-read supported ("HD_READ mode") */
18225 		.voltage	= {2700, 3600},
18226 	},
18227 
18228 	{
18229 		.vendor		= "Sanyo",
18230 		.name		= "LE25FW806",
18231 		.bustype	= BUS_SPI,
18232 		.manufacture_id	= SANYO_ID,
18233 		.model_id	= SANYO_LE25FW806,
18234 		.total_size	= 1024,
18235 		.page_size	= 256,
18236 		.feature_bits	= FEATURE_WRSR_WREN,
18237 		.tested		= TEST_UNTESTED,
18238 		.probe		= PROBE_SPI_RES2,
18239 		.probe_timing	= TIMING_ZERO,
18240 		.block_erasers	=
18241 		{
18242 			{
18243 				.eraseblocks = { {4 * 1024, 256} },
18244 				.block_erase = SPI_BLOCK_ERASE_20,
18245 			}, {
18246 				.eraseblocks = { {4 * 1024, 256} },
18247 				.block_erase = SPI_BLOCK_ERASE_D7,
18248 			}, {
18249 				.eraseblocks = { {64 * 1024, 16} },
18250 				.block_erase = SPI_BLOCK_ERASE_D8,
18251 			}, {
18252 				.eraseblocks = { {1024 * 1024, 1} },
18253 				.block_erase = SPI_BLOCK_ERASE_C7,
18254 			}
18255 		},
18256 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
18257 		.unlock		= SPI_DISABLE_BLOCKPROTECT, /* #WP pin write-protects SRWP bit. */
18258 		.write		= SPI_CHIP_WRITE256,
18259 		.read		= SPI_CHIP_READ,
18260 		.voltage	= {2700, 3600},
18261 	},
18262 
18263 	{
18264 		.vendor		= "Sanyo",
18265 		.name		= "LE25FW808",
18266 		.bustype	= BUS_SPI,
18267 		.manufacture_id	= SANYO_ID,
18268 		.model_id	= SANYO_LE25FW808,
18269 		.total_size	= 1024,
18270 		.page_size	= 256,
18271 		.feature_bits	= FEATURE_WRSR_WREN,
18272 		.tested		= TEST_UNTESTED,
18273 		.probe		= PROBE_SPI_RES2,
18274 		.probe_timing	= TIMING_ZERO,
18275 		.block_erasers	=
18276 		{
18277 			{
18278 				.eraseblocks = { {8 * 1024, 128} },
18279 				.block_erase = SPI_BLOCK_ERASE_D7,
18280 			}, {
18281 				.eraseblocks = { {64 * 1024, 16} },
18282 				.block_erase = SPI_BLOCK_ERASE_D8,
18283 			}, {
18284 				.eraseblocks = { {1024 * 1024, 1} },
18285 				.block_erase = SPI_BLOCK_ERASE_C7,
18286 			}
18287 		},
18288 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
18289 		.unlock		= SPI_DISABLE_BLOCKPROTECT, /* #WP pin write-protects SRWP bit. */
18290 		.write		= SPI_CHIP_WRITE256,
18291 		.read		= SPI_CHIP_READ, /* some quad-read supported ("HD_READ mode") */
18292 		.voltage	= {2700, 3600},
18293 	},
18294 
18295 	{
18296 		.vendor		= "Sharp",
18297 		.name		= "LH28F008BJT-BTLZ1",
18298 		.bustype	= BUS_PARALLEL,
18299 		.manufacture_id	= SHARP_ID,
18300 		.model_id	= SHARP_LH28F008BJ__PB,
18301 		.total_size	= 1024,
18302 		.page_size	= 64 * 1024,
18303 		.tested		= TEST_OK_PREW,
18304 		.probe		= PROBE_AT82802AB,
18305 		.probe_timing	= TIMING_ZERO,
18306 		.block_erasers	=
18307 		{
18308 			{
18309 				.eraseblocks = {
18310 					{8 * 1024, 8},
18311 					{64 * 1024, 15}
18312 				 },
18313 				.block_erase = ERASE_BLOCK_82802AB,
18314 			}, {
18315 				.eraseblocks = { {1024 * 1024, 1} },
18316 				.block_erase = ERASE_SECTOR_49LFXXXC,
18317 			}
18318 		},
18319 		.unlock		= UNLOCK_LH28F008BJT,
18320 		.write		= WRITE_82802AB,
18321 		.read		= READ_MEMMAPPED,
18322 		.voltage	= {2700, 3600},
18323 	},
18324 
18325 	{
18326 		.vendor		= "Sharp",
18327 		.name		= "LHF00L04",
18328 		.bustype	= BUS_FWH, /* A/A Mux */
18329 		.manufacture_id	= SHARP_ID,
18330 		.model_id	= SHARP_LHF00L04,
18331 		.total_size	= 1024,
18332 		.page_size	= 64 * 1024,
18333 		.feature_bits	= FEATURE_EITHER_RESET | FEATURE_REGISTERMAP,
18334 		.tested		= TEST_UNTESTED,
18335 		.probe		= PROBE_AT82802AB,
18336 		.probe_timing	= TIMING_ZERO,
18337 		.block_erasers	=
18338 		{
18339 			{
18340 				.eraseblocks = {
18341 					{64 * 1024, 15},
18342 					{8 * 1024, 8}
18343 				 },
18344 				.block_erase = ERASE_BLOCK_82802AB,
18345 			}, {
18346 				.eraseblocks = {
18347 					{1024 * 1024, 1}
18348 				},
18349 				.block_erase = NO_BLOCK_ERASE_FUNC, /* 30 D0, only in A/A mux mode */
18350 			},
18351 		},
18352 		.unlock		= UNLOCK_REGSPACE2_UNIFORM_64K,
18353 		.write		= WRITE_82802AB,
18354 		.read		= READ_MEMMAPPED,
18355 		.voltage	= {3000, 3600},
18356 	},
18357 
18358 	{
18359 		.vendor		= "Spansion",
18360 		.name		= "S25FL004A",
18361 		.bustype	= BUS_SPI,
18362 		.manufacture_id	= SPANSION_ID,
18363 		.model_id	= SPANSION_S25FL004A,
18364 		.total_size	= 512,
18365 		.page_size	= 256,
18366 		.feature_bits	= FEATURE_WRSR_WREN,
18367 		.tested		= TEST_UNTESTED,
18368 		.probe		= PROBE_SPI_RDID,
18369 		.probe_timing	= TIMING_ZERO,
18370 		.block_erasers	=
18371 		{
18372 			{
18373 				.eraseblocks = { {64 * 1024, 8} },
18374 				.block_erase = SPI_BLOCK_ERASE_D8,
18375 			}, {
18376 				.eraseblocks = { {512 * 1024, 1} },
18377 				.block_erase = SPI_BLOCK_ERASE_C7,
18378 			}
18379 		},
18380 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
18381 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
18382 		.write		= SPI_CHIP_WRITE256,
18383 		.read		= SPI_CHIP_READ,
18384 		.voltage	= {2700, 3600},
18385 	},
18386 
18387 	{
18388 		.vendor		= "Spansion",
18389 		.name		= "S25FL008A",
18390 		.bustype	= BUS_SPI,
18391 		.manufacture_id	= SPANSION_ID,
18392 		.model_id	= SPANSION_S25FL008A,
18393 		.total_size	= 1024,
18394 		.page_size	= 256,
18395 		.feature_bits	= FEATURE_WRSR_WREN,
18396 		.tested		= TEST_OK_PRE,
18397 		.probe		= PROBE_SPI_RDID,
18398 		.probe_timing	= TIMING_ZERO,
18399 		.block_erasers	=
18400 		{
18401 			{
18402 				.eraseblocks = { {64 * 1024, 16} },
18403 				.block_erase = SPI_BLOCK_ERASE_D8,
18404 			}, {
18405 				.eraseblocks = { {1024 * 1024, 1} },
18406 				.block_erase = SPI_BLOCK_ERASE_C7,
18407 			}
18408 		},
18409 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
18410 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
18411 		.write		= SPI_CHIP_WRITE256,
18412 		.read		= SPI_CHIP_READ,
18413 		.voltage	= {2700, 3600},
18414 	},
18415 
18416 	{
18417 		.vendor		= "Spansion",
18418 		.name		= "S25FL016A",
18419 		.bustype	= BUS_SPI,
18420 		.manufacture_id	= SPANSION_ID,
18421 		.model_id	= SPANSION_S25FL016A,
18422 		.total_size	= 2048,
18423 		.page_size	= 256,
18424 		.feature_bits	= FEATURE_WRSR_WREN,
18425 		.tested		= TEST_OK_PREW,
18426 		.probe		= PROBE_SPI_RDID,
18427 		.probe_timing	= TIMING_ZERO,
18428 		.block_erasers	=
18429 		{
18430 			{
18431 				.eraseblocks = { {64 * 1024, 32} },
18432 				.block_erase = SPI_BLOCK_ERASE_D8,
18433 			}, {
18434 				.eraseblocks = { {2 * 1024 * 1024, 1} },
18435 				.block_erase = SPI_BLOCK_ERASE_C7,
18436 			}
18437 		},
18438 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
18439 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
18440 		.write		= SPI_CHIP_WRITE256,
18441 		.read		= SPI_CHIP_READ,
18442 		.voltage	= {2700, 3600},
18443 	},
18444 
18445 	{
18446 		.vendor		= "Spansion",
18447 		.name		= "S25FL032A/P",
18448 		.bustype	= BUS_SPI,
18449 		.manufacture_id	= SPANSION_ID,
18450 		.model_id	= SPANSION_S25FL032A,
18451 		.total_size	= 4096,
18452 		.page_size	= 256,
18453 		.feature_bits	= FEATURE_WRSR_WREN,
18454 		.tested		= TEST_OK_PREW,
18455 		.probe		= PROBE_SPI_RDID,
18456 		.probe_timing	= TIMING_ZERO,
18457 		.block_erasers	=
18458 		{
18459 			{
18460 				.eraseblocks = { {64 * 1024, 64} },
18461 				.block_erase = SPI_BLOCK_ERASE_D8,
18462 			}, {
18463 				.eraseblocks = { {4 * 1024 * 1024, 1} },
18464 				.block_erase = SPI_BLOCK_ERASE_C7,
18465 			}
18466 		},
18467 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
18468 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
18469 		.write		= SPI_CHIP_WRITE256,
18470 		.read		= SPI_CHIP_READ,
18471 		.voltage	= {2700, 3600},
18472 	},
18473 
18474 	{
18475 		.vendor		= "Spansion",
18476 		.name		= "S25FL064A/P",
18477 		.bustype	= BUS_SPI,
18478 		.manufacture_id	= SPANSION_ID,
18479 		.model_id	= SPANSION_S25FL064A,
18480 		.total_size	= 8192,
18481 		.page_size	= 256,
18482 		.feature_bits	= FEATURE_WRSR_WREN,
18483 		.tested		= TEST_OK_PREW,
18484 		.probe		= PROBE_SPI_RDID,
18485 		.probe_timing	= TIMING_ZERO,
18486 		.block_erasers	=
18487 		{
18488 			{
18489 				.eraseblocks = { {64 * 1024, 128} },
18490 				.block_erase = SPI_BLOCK_ERASE_D8,
18491 			}, {
18492 				.eraseblocks = { {8 * 1024 * 1024, 1} },
18493 				.block_erase = SPI_BLOCK_ERASE_C7,
18494 			}
18495 		},
18496 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
18497 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
18498 		.write		= SPI_CHIP_WRITE256,
18499 		.read		= SPI_CHIP_READ,
18500 		.voltage	= {2700, 3600},
18501 	},
18502 
18503 	{
18504 		.vendor		= "Spansion",
18505 		.name		= "S25FL116K/S25FL216K", /* FIXME: separate them */
18506 		.bustype	= BUS_SPI,
18507 		.manufacture_id	= SPANSION_ID,
18508 		.model_id	= SPANSION_S25FL216,
18509 		.total_size	= 2048,
18510 		.page_size	= 256,
18511 		/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 (S25FL116K only) */
18512 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
18513 		.tested		= TEST_UNTESTED,
18514 		.probe		= PROBE_SPI_RDID,
18515 		.probe_timing	= TIMING_ZERO,
18516 		.block_erasers	=
18517 		{
18518 			{
18519 				.eraseblocks = { {4 * 1024, 512} },
18520 				.block_erase = SPI_BLOCK_ERASE_20,
18521 			}, {
18522 				.eraseblocks = { {64 * 1024, 32} },
18523 				.block_erase = SPI_BLOCK_ERASE_D8,
18524 			}, {
18525 				.eraseblocks = { { 2048 * 1024, 1} },
18526 				.block_erase = SPI_BLOCK_ERASE_60,
18527 			}, {
18528 				.eraseblocks = { { 2048 * 1024, 1} },
18529 				.block_erase = SPI_BLOCK_ERASE_C7,
18530 			}
18531 		},
18532 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD,
18533 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD, /* #WP pin write-protects SRWP bit. */
18534 		.write		= SPI_CHIP_WRITE256,
18535 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and dual I/O (0x3B) supported */
18536 		.voltage	= {2700, 3600},
18537 	},
18538 
18539 	{
18540 		.vendor		= "Spansion",
18541 		.name		= "S25FL127S-256kB", /* uniform 256kB sectors */
18542 		.bustype	= BUS_SPI,
18543 		.manufacture_id	= SPANSION_ID,
18544 		.model_id	= SPANSION_S25FL128,
18545 		.total_size	= 16384,
18546 		.page_size	= 512,
18547 		/* supports 4B addressing */
18548 		/* OTP: 1024B total, 32B reserved; read 0x4B; write 0x42 */
18549 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
18550 		.tested		= TEST_UNTESTED,
18551 		.probe		= PROBE_SPI_RDID,
18552 		.probe_timing	= TIMING_ZERO,
18553 		.block_erasers	=
18554 		{
18555 			{
18556 				.eraseblocks = { {256 * 1024, 64} },
18557 				.block_erase = SPI_BLOCK_ERASE_D8,
18558 			}, {
18559 				.eraseblocks = { { 16384 * 1024, 1} },
18560 				.block_erase = SPI_BLOCK_ERASE_60,
18561 			}, {
18562 				.eraseblocks = { { 16384 * 1024, 1} },
18563 				.block_erase = SPI_BLOCK_ERASE_C7,
18564 			}
18565 		},
18566 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
18567 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD, /* #WP pin write-protects SRWP bit. */
18568 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
18569 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
18570 		.voltage	= {2700, 3600},
18571 	},
18572 
18573 	{
18574 		.vendor		= "Spansion",
18575 		.name		= "S25FL127S-64kB", /* hybrid: 32 (top or bottom) 4 kB sub-sectors + 64 kB sectors */
18576 		.bustype	= BUS_SPI,
18577 		.manufacture_id	= SPANSION_ID,
18578 		.model_id	= SPANSION_S25FL128,
18579 		.total_size	= 16384,
18580 		.page_size	= 256,
18581 		/* supports 4B addressing */
18582 		/* OTP: 1024B total, 32B reserved; read 0x4B; write 0x42 */
18583 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
18584 		.tested		= TEST_OK_PREW,
18585 		/* FIXME: we should distinguish the configuration on probing time like we do for AT45DB chips */
18586 		.probe		= PROBE_SPI_RDID,
18587 		.probe_timing	= TIMING_ZERO,
18588 		.block_erasers	=
18589 		{
18590 			{
18591 				/* This chip supports erasing of 32 so-called "parameter sectors" with
18592 				 * opcode 0x20 which may be configured to be on top or bottom of the address
18593 				 * space. Trying to access an address outside these 4kB blocks does have no
18594 				 * effect on the memory contents, e.g.
18595 				.eraseblocks = {
18596 					{4 * 1024, 32},
18597 					{64 * 1024, 254} // inaccessible
18598 				},
18599 				.block_erase = SPI_BLOCK_ERASE_20,
18600 			}, { */
18601 				.eraseblocks = { { 64 * 1024, 256} },
18602 				.block_erase = SPI_BLOCK_ERASE_D8,
18603 			}, {
18604 				.eraseblocks = { { 16384 * 1024, 1} },
18605 				.block_erase = SPI_BLOCK_ERASE_60,
18606 			}, {
18607 				.eraseblocks = { { 16384 * 1024, 1} },
18608 				.block_erase = SPI_BLOCK_ERASE_C7,
18609 			}
18610 		},
18611 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
18612 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD, /* #WP pin write-protects SRWP bit. */
18613 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
18614 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
18615 		.voltage	= {2700, 3600},
18616 	},
18617 
18618 	{
18619 		.vendor		= "Spansion",
18620 		.name		= "S25FL128L",
18621 		.bustype	= BUS_SPI,
18622 		.manufacture_id	= SPANSION_ID,
18623 		.model_id	= SPANSION_S25FL128L,
18624 		.total_size	= 16384,
18625 		.page_size	= 256,
18626 		/* 4 x 256B Security Region (OTP) */
18627 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_WRSR_EXT3 | FEATURE_OTP,
18628 		.tested		= TEST_OK_PREW,
18629 		.probe		= PROBE_SPI_RDID,
18630 		.probe_timing	= TIMING_ZERO,
18631 		.block_erasers	=
18632 		{
18633 			{
18634 				.eraseblocks = { {4 * 1024, 4096} },
18635 				.block_erase = SPI_BLOCK_ERASE_20,
18636 			}, {
18637 				.eraseblocks = { {32 * 1024, 512} },
18638 				.block_erase = SPI_BLOCK_ERASE_52,
18639 			}, {
18640 				.eraseblocks = { {64 * 1024, 256} },
18641 				.block_erase = SPI_BLOCK_ERASE_D8,
18642 			}, {
18643 				.eraseblocks = { {16384 * 1024, 1} },
18644 				.block_erase = SPI_BLOCK_ERASE_60,
18645 			}, {
18646 				.eraseblocks = { {16384 * 1024, 1} },
18647 				.block_erase = SPI_BLOCK_ERASE_C7,
18648 			}
18649 		},
18650 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
18651 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD,
18652 		.write		= SPI_CHIP_WRITE256,
18653 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
18654 		.voltage	= {2700, 3600},
18655 		.reg_bits	=
18656 		{
18657 			/*
18658 			 * Note: This chip has a read-only Status Register 2 that is not
18659 			 *	 counted here. Registers are mapped as follows:
18660 			 *	 STATUS1 ... Status Register 1
18661 			 *	 STATUS2 ... Configuration Register 1
18662 			 *	 STATUS3 ... Configuration Register 2
18663 			 */
18664 			.srp	= {STATUS1, 7, RW},
18665 			.srl	= {STATUS2, 0, RW},
18666 			.bp	= {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
18667 			.tb	= {STATUS1, 5, RW},
18668 			.sec	= {STATUS1, 6, RW},
18669 			.cmp	= {STATUS2, 6, RW},
18670 			.wps	= {STATUS3, 2, RW},
18671 		},
18672 		.decode_range	= DECODE_RANGE_SPI25,
18673 	},
18674 
18675 	{
18676 		.vendor		= "Spansion",
18677 		.name		= "S25FL128P......0", /* uniform 64 kB sectors */
18678 		.bustype	= BUS_SPI,
18679 		.manufacture_id	= SPANSION_ID,
18680 		.model_id	= SPANSION_S25FL128,
18681 		.total_size	= 16384,
18682 		.page_size	= 256,
18683 		.feature_bits	= FEATURE_WRSR_WREN,
18684 		.tested		= TEST_OK_PREW,
18685 		.probe		= PROBE_SPI_RDID,
18686 		.probe_timing	= TIMING_ZERO,
18687 		.block_erasers	=
18688 		{
18689 			{
18690 				.eraseblocks = { {64 * 1024, 256} },
18691 				.block_erase = SPI_BLOCK_ERASE_20,
18692 			}, {
18693 				.eraseblocks = { {64 * 1024, 256} },
18694 				.block_erase = SPI_BLOCK_ERASE_D8,
18695 			}, {
18696 				.eraseblocks = { { 16384 * 1024, 1} },
18697 				.block_erase = SPI_BLOCK_ERASE_60,
18698 			}, {
18699 				.eraseblocks = { { 16384 * 1024, 1} },
18700 				.block_erase = SPI_BLOCK_ERASE_C7,
18701 			}
18702 		},
18703 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD,
18704 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
18705 		.write		= SPI_CHIP_WRITE256,
18706 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
18707 		.voltage	= {2700, 3600},
18708 	},
18709 
18710 	{
18711 		.vendor		= "Spansion",
18712 		.name		= "S25FL128P......1", /* uniform 256kB sectors */
18713 		.bustype	= BUS_SPI,
18714 		.manufacture_id	= SPANSION_ID,
18715 		.model_id	= SPANSION_S25FL128,
18716 		.total_size	= 16384,
18717 		.page_size	= 256,
18718 		.feature_bits	= FEATURE_WRSR_WREN,
18719 		.tested		= TEST_UNTESTED,
18720 		.probe		= PROBE_SPI_RDID,
18721 		.probe_timing	= TIMING_ZERO,
18722 		.block_erasers	=
18723 		{
18724 			{
18725 				.eraseblocks = { {256 * 1024, 64} },
18726 				.block_erase = SPI_BLOCK_ERASE_D8,
18727 			}, {
18728 				.eraseblocks = { { 16384 * 1024, 1} },
18729 				.block_erase = SPI_BLOCK_ERASE_C7,
18730 			}
18731 		},
18732 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
18733 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD,
18734 		.write		= SPI_CHIP_WRITE256,
18735 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
18736 		.voltage	= {2700, 3600},
18737 	},
18738 
18739 	{
18740 		.vendor		= "Spansion",
18741 		.name		= "S25FL128S......0", /* hybrid: 32 (top or bottom) 4 kB sub-sectors + 64 kB sectors */
18742 		.bustype	= BUS_SPI,
18743 		.manufacture_id	= SPANSION_ID,
18744 		.model_id	= SPANSION_S25FL128,
18745 		.total_size	= 16384,
18746 		.page_size	= 256,
18747 		/* supports 4B addressing */
18748 		/* OTP: 1024B total, 32B reserved; read 0x4B; write 0x42 */
18749 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
18750 		.tested		= TEST_OK_PREW,
18751 		.probe		= PROBE_SPI_RDID,
18752 		.probe_timing	= TIMING_ZERO,
18753 		.block_erasers	=
18754 		{
18755 			{
18756 				/* This chip supports erasing of the 32 so-called "parameter sectors" with
18757 				 * opcode 0x20. Trying to access an address outside these 4kB blocks does
18758 				 * have no effect on the memory contents, but sets a flag in the SR.
18759 				.eraseblocks = {
18760 					{4 * 1024, 32},
18761 					{64 * 1024, 254} // inaccessible
18762 				},
18763 				.block_erase = SPI_BLOCK_ERASE_20,
18764 			}, { */
18765 				.eraseblocks = { { 64 * 1024, 256} },
18766 				.block_erase = SPI_BLOCK_ERASE_D8,
18767 			}, {
18768 				.eraseblocks = { { 16384 * 1024, 1} },
18769 				.block_erase = SPI_BLOCK_ERASE_60,
18770 			}, {
18771 				.eraseblocks = { { 16384 * 1024, 1} },
18772 				.block_erase = SPI_BLOCK_ERASE_C7,
18773 			}
18774 		},
18775 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_EP_SRWD, /* TODO: SR2 and many others */
18776 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD, /* TODO: various other locks */
18777 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
18778 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
18779 		.voltage	= {2700, 3600},
18780 	},
18781 
18782 	{
18783 		.vendor		= "Spansion",
18784 		.name		= "S25FL128S......1", /* uniform 256 kB sectors */
18785 		.bustype	= BUS_SPI,
18786 		.manufacture_id	= SPANSION_ID,
18787 		.model_id	= SPANSION_S25FL128,
18788 		.total_size	= 16384,
18789 		.page_size	= 512,
18790 		/* supports 4B addressing */
18791 		/* OTP: 1024B total, 32B reserved; read 0x4B; write 0x42 */
18792 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
18793 		.tested		= TEST_UNTESTED,
18794 		.probe		= PROBE_SPI_RDID,
18795 		.probe_timing	= TIMING_ZERO,
18796 		.block_erasers	=
18797 		{
18798 			{
18799 				.eraseblocks = { {256 * 1024, 64} },
18800 				.block_erase = SPI_BLOCK_ERASE_D8,
18801 			}, {
18802 				.eraseblocks = { { 16384 * 1024, 1} },
18803 				.block_erase = SPI_BLOCK_ERASE_60,
18804 			}, {
18805 				.eraseblocks = { { 16384 * 1024, 1} },
18806 				.block_erase = SPI_BLOCK_ERASE_C7,
18807 			}
18808 		},
18809 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_EP_SRWD, /* TODO: SR2 and many others */
18810 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD, /* TODO: various other locks */
18811 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
18812 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
18813 		.voltage	= {2700, 3600},
18814 	},
18815 
18816 	{
18817 		.vendor		= "Spansion",
18818 		.name		= "S25FL128S_UL Uniform 128 kB Sectors",
18819 		.bustype	= BUS_SPI,
18820 		.manufacture_id	= SPANSION_ID,
18821 		.model_id	= SPANSION_S25FL128S_UL,
18822 		.total_size	= 16384,
18823 		.page_size	= 256,
18824 		.feature_bits	= FEATURE_WRSR_WREN,
18825 		.tested		= TEST_UNTESTED,
18826 		.probe		= PROBE_SPI_BIG_SPANSION,
18827 		.probe_timing	= TIMING_ZERO,
18828 		.block_erasers	=
18829 		{
18830 			{
18831 				.eraseblocks = { {128 * 1024, 128} },
18832 				.block_erase = SPI_BLOCK_ERASE_D8,
18833 			}, {
18834 				.eraseblocks = { {16 * 1024 * 1024, 1} },
18835 				.block_erase = SPI_BLOCK_ERASE_60,
18836 			}, {
18837 				.eraseblocks = { {16 * 1024 * 1024, 1} },
18838 				.block_erase = SPI_BLOCK_ERASE_C7,
18839 			},
18840 		},
18841 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
18842 		.write		= SPI_CHIP_WRITE256,
18843 		.read		= SPI_CHIP_READ,
18844 		.voltage	= {1700, 2000},
18845 	},
18846 
18847 	{
18848 		.vendor		= "Spansion",
18849 		.name		= "S25FL128S_US Uniform 64 kB Sectors",
18850 		.bustype	= BUS_SPI,
18851 		.manufacture_id	= SPANSION_ID,
18852 		.model_id	= SPANSION_S25FL128S_US,
18853 		.total_size	= 16384,
18854 		.page_size	= 256,
18855 		.feature_bits	= FEATURE_WRSR_WREN,
18856 		.tested		= TEST_UNTESTED,
18857 		.probe		= PROBE_SPI_BIG_SPANSION,
18858 		.probe_timing	= TIMING_ZERO,
18859 		.block_erasers	=
18860 		{
18861 			{
18862 				.eraseblocks = { {64 * 1024, 256} },
18863 				.block_erase = SPI_BLOCK_ERASE_D8,
18864 			}, {
18865 				.eraseblocks = { {16 * 1024 * 1024, 1} },
18866 				.block_erase = SPI_BLOCK_ERASE_60,
18867 			}, {
18868 				.eraseblocks = { {16 * 1024 * 1024, 1} },
18869 				.block_erase = SPI_BLOCK_ERASE_C7,
18870 			},
18871 		},
18872 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
18873 		.write		= SPI_CHIP_WRITE256,
18874 		.read		= SPI_CHIP_READ,
18875 		.voltage	= {1700, 2000},
18876 	},
18877 
18878 	{
18879 		.vendor		= "Spansion",
18880 		.name		= "S25FL129P......0", /* hybrid: 32 (top or bottom) 4 kB sub-sectors + 64 kB sectors */
18881 		.bustype	= BUS_SPI,
18882 		.manufacture_id	= SPANSION_ID,
18883 		.model_id	= SPANSION_S25FL128,
18884 		.total_size	= 16384,
18885 		.page_size	= 256,
18886 		/* OTP: 506B total, 16B reserved; read 0x4B; write 0x42 */
18887 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
18888 		.tested		= TEST_OK_PREW,
18889 		.probe		= PROBE_SPI_RDID,
18890 		.probe_timing	= TIMING_ZERO,
18891 		.block_erasers	=
18892 		{
18893 			{
18894 			/* FIXME: This chip supports erasing of the 32 so-called "parameter sectors" with
18895 			 * opcode 0x20. Trying to access an address outside these 4kB blocks does have no
18896 			 * effect on the memory contents, but sets a flag in the SR.
18897 				.eraseblocks = {
18898 					{4 * 1024, 32},
18899 					{64 * 1024, 254} // inaccessible
18900 				},
18901 				.block_erase = SPI_BLOCK_ERASE_20,
18902 			}, { */
18903 			/* FIXME: Additionally it also supports erase opcode 40h for the respective 2*4 kB pairs
18904 				.eraseblocks = {
18905 					{8 * 1024, 16},
18906 					{64 * 1024, 254} // inaccessible
18907 				},
18908 				.block_erase = SPI_BLOCK_ERASE_40,
18909 			}, { */
18910 				.eraseblocks = { { 64 * 1024, 256} },
18911 				.block_erase = SPI_BLOCK_ERASE_D8,
18912 			}, {
18913 				.eraseblocks = { { 16384 * 1024, 1} },
18914 				.block_erase = SPI_BLOCK_ERASE_60,
18915 			}, {
18916 				.eraseblocks = { { 16384 * 1024, 1} },
18917 				.block_erase = SPI_BLOCK_ERASE_C7,
18918 			}
18919 		},
18920 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_EP_SRWD, /* TODO: Configuration register */
18921 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD,
18922 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
18923 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
18924 		.voltage	= {2700, 3600},
18925 	},
18926 
18927 	{
18928 		.vendor		= "Spansion",
18929 		.name		= "S25FL129P......1", /* uniform 256 kB sectors */
18930 		.bustype	= BUS_SPI,
18931 		.manufacture_id	= SPANSION_ID,
18932 		.model_id	= SPANSION_S25FL128,
18933 		.total_size	= 16384,
18934 		.page_size	= 256,
18935 		/* OTP: 506B total, 16B reserved; read 0x4B; write 0x42 */
18936 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
18937 		.tested		= TEST_UNTESTED,
18938 		.probe		= PROBE_SPI_RDID,
18939 		.probe_timing	= TIMING_ZERO,
18940 		.block_erasers	=
18941 		{
18942 			{
18943 				.eraseblocks = { {256 * 1024, 64} },
18944 				.block_erase = SPI_BLOCK_ERASE_D8,
18945 			}, {
18946 				.eraseblocks = { { 16384 * 1024, 1} },
18947 				.block_erase = SPI_BLOCK_ERASE_60,
18948 			}, {
18949 				.eraseblocks = { { 16384 * 1024, 1} },
18950 				.block_erase = SPI_BLOCK_ERASE_C7,
18951 			}
18952 		},
18953 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_EP_SRWD, /* TODO: Configuration register */
18954 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD,
18955 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
18956 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
18957 		.voltage	= {2700, 3600},
18958 	},
18959 
18960 	{
18961 		.vendor		= "Spansion",
18962 		.name		= "S25FL132K",
18963 		.bustype	= BUS_SPI,
18964 		.manufacture_id	= SPANSION_ID,
18965 		.model_id	= SPANSION_S25FL132K,
18966 		.total_size	= 4096,
18967 		.page_size	= 256,
18968 		/* OTP: 768B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
18969 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
18970 		.tested		= TEST_UNTESTED,
18971 		.probe		= PROBE_SPI_RDID,
18972 		.probe_timing	= TIMING_ZERO,
18973 		.block_erasers	=
18974 		{
18975 			{
18976 				.eraseblocks = { {4 * 1024, 1024} },
18977 				.block_erase = SPI_BLOCK_ERASE_20,
18978 			}, {
18979 				.eraseblocks = { {64 * 1024, 64} },
18980 				.block_erase = SPI_BLOCK_ERASE_D8,
18981 			}, {
18982 				.eraseblocks = { { 4096 * 1024, 1} },
18983 				.block_erase = SPI_BLOCK_ERASE_60,
18984 			}, {
18985 				.eraseblocks = { { 4096 * 1024, 1} },
18986 				.block_erase = SPI_BLOCK_ERASE_C7,
18987 			}
18988 		},
18989 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD, /* TODO: improve */
18990 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD, /* #WP pin write-protects SRWP bit. */
18991 		.write		= SPI_CHIP_WRITE256,
18992 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
18993 		.voltage	= {2700, 3600},
18994 	},
18995 
18996 	{
18997 		.vendor		= "Spansion",
18998 		.name		= "S25FL164K",
18999 		.bustype	= BUS_SPI,
19000 		.manufacture_id	= SPANSION_ID,
19001 		.model_id	= SPANSION_S25FL164K,
19002 		.total_size	= 8192,
19003 		.page_size	= 256,
19004 		/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44 */
19005 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
19006 		.tested		= TEST_OK_PREW,
19007 		.probe		= PROBE_SPI_RDID,
19008 		.probe_timing	= TIMING_ZERO,
19009 		.block_erasers	=
19010 		{
19011 			{
19012 				.eraseblocks = { {4 * 1024, 2048} },
19013 				.block_erase = SPI_BLOCK_ERASE_20,
19014 			}, {
19015 				.eraseblocks = { {64 * 1024, 128} },
19016 				.block_erase = SPI_BLOCK_ERASE_D8,
19017 			}, {
19018 				.eraseblocks = { { 8192 * 1024, 1} },
19019 				.block_erase = SPI_BLOCK_ERASE_60,
19020 			}, {
19021 				.eraseblocks = { { 8192 * 1024, 1} },
19022 				.block_erase = SPI_BLOCK_ERASE_C7,
19023 			}
19024 		},
19025 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD, /* TODO: improve */
19026 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD, /* #WP pin write-protects SRWP bit. */
19027 		.write		= SPI_CHIP_WRITE256,
19028 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
19029 		.voltage	= {2700, 3600},
19030 	},
19031 
19032 	{
19033 		.vendor		= "Spansion",
19034 		.name		= "S25FL204K",
19035 		.bustype	= BUS_SPI,
19036 		.manufacture_id	= SPANSION_ID,
19037 		.model_id	= SPANSION_S25FL204,
19038 		.total_size	= 512,
19039 		.page_size	= 256,
19040 		.feature_bits	= FEATURE_WRSR_WREN,
19041 		.tested		= TEST_OK_PR,
19042 		.probe		= PROBE_SPI_RDID,
19043 		.probe_timing	= TIMING_ZERO,
19044 		.block_erasers	=
19045 		{
19046 			{
19047 				.eraseblocks = { {4 * 1024, 128} },
19048 				.block_erase = SPI_BLOCK_ERASE_20,
19049 			}, {
19050 				.eraseblocks = { {64 * 1024, 8} },
19051 				.block_erase = SPI_BLOCK_ERASE_D8,
19052 			}, {
19053 				.eraseblocks = { { 512 * 1024, 1} },
19054 				.block_erase = SPI_BLOCK_ERASE_60,
19055 			}, {
19056 				.eraseblocks = { { 512 * 1024, 1} },
19057 				.block_erase = SPI_BLOCK_ERASE_C7,
19058 			}
19059 		},
19060 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD,
19061 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD, /* #WP pin write-protects SRWP bit. */
19062 		.write		= SPI_CHIP_WRITE256,
19063 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and dual I/O (0x3B) supported */
19064 		.voltage	= {2700, 3600},
19065 	},
19066 
19067 	{
19068 		.vendor		= "Spansion",
19069 		.name		= "S25FL208K",
19070 		.bustype	= BUS_SPI,
19071 		.manufacture_id	= SPANSION_ID,
19072 		.model_id	= SPANSION_S25FL208,
19073 		.total_size	= 1024,
19074 		.page_size	= 256,
19075 		.feature_bits	= FEATURE_WRSR_WREN,
19076 		.tested		= TEST_OK_PREW,
19077 		.probe		= PROBE_SPI_RDID,
19078 		.probe_timing	= TIMING_ZERO,
19079 		.block_erasers	=
19080 		{
19081 			{
19082 				.eraseblocks = { {4 * 1024, 256} },
19083 				.block_erase = SPI_BLOCK_ERASE_20,
19084 			}, {
19085 				.eraseblocks = { {64 * 1024, 16} },
19086 				.block_erase = SPI_BLOCK_ERASE_D8,
19087 			}, {
19088 				.eraseblocks = { { 1024 * 1024, 1} },
19089 				.block_erase = SPI_BLOCK_ERASE_60,
19090 			}, {
19091 				.eraseblocks = { { 1024 * 1024, 1} },
19092 				.block_erase = SPI_BLOCK_ERASE_C7,
19093 			}
19094 		},
19095 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD,
19096 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD, /* #WP pin write-protects SRWP bit. */
19097 		.write		= SPI_CHIP_WRITE256,
19098 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and dual I/O (0x3B) supported */
19099 		.voltage	= {2700, 3600},
19100 	},
19101 
19102 	{
19103 		.vendor		= "Spansion",
19104 		.name		= "S25FL256L",
19105 		.bustype	= BUS_SPI,
19106 		.manufacture_id	= SPANSION_ID,
19107 		.model_id	= SPANSION_S25FL256L,
19108 		.total_size	= 32768,
19109 		.page_size	= 256,
19110 		/* 4 x 256B Security Region (OTP) */
19111 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_WRSR_EXT3 | FEATURE_OTP |
19112 				  FEATURE_4BA_ENTER | FEATURE_4BA_NATIVE,
19113 		.tested		= TEST_UNTESTED,
19114 		.probe		= PROBE_SPI_RDID,
19115 		.probe_timing	= TIMING_ZERO,
19116 		.block_erasers	=
19117 		{
19118 			{
19119 				.eraseblocks = { {4 * 1024, 8192} },
19120 				.block_erase = SPI_BLOCK_ERASE_21,
19121 			}, {
19122 				.eraseblocks = { {4 * 1024, 8192} },
19123 				.block_erase = SPI_BLOCK_ERASE_20,
19124 			}, {
19125 				.eraseblocks = { {32 * 1024, 1024} },
19126 				.block_erase = SPI_BLOCK_ERASE_53,
19127 			}, {
19128 				.eraseblocks = { {32 * 1024, 1024} },
19129 				.block_erase = SPI_BLOCK_ERASE_52,
19130 			}, {
19131 				.eraseblocks = { {64 * 1024, 512} },
19132 				.block_erase = SPI_BLOCK_ERASE_DC,
19133 			}, {
19134 				.eraseblocks = { {64 * 1024, 512} },
19135 				.block_erase = SPI_BLOCK_ERASE_D8,
19136 			}, {
19137 				.eraseblocks = { {32768 * 1024, 1} },
19138 				.block_erase = SPI_BLOCK_ERASE_60,
19139 			}, {
19140 				.eraseblocks = { {32768 * 1024, 1} },
19141 				.block_erase = SPI_BLOCK_ERASE_C7,
19142 			}
19143 		},
19144 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD,
19145 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP3_SRWD,
19146 		.write		= SPI_CHIP_WRITE256,
19147 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
19148 		.voltage	= {2700, 3600},
19149 		.reg_bits	=
19150 		{
19151 			/*
19152 			 * Note: This chip has a read-only Status Register 2 that is not
19153 			 *	 counted here. Registers are mapped as follows:
19154 			 *	 STATUS1 ... Status Register 1
19155 			 *	 STATUS2 ... Configuration Register 1
19156 			 *	 STATUS3 ... Configuration Register 2
19157 			 */
19158 			.srp	= {STATUS1, 7, RW},
19159 			.srl	= {STATUS2, 0, RW},
19160 			.bp	= {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}, {STATUS1, 5, RW}},
19161 			.tb	= {STATUS1, 6, RW},
19162 			.cmp	= {STATUS2, 6, RW},
19163 			.wps	= {STATUS3, 2, RW},
19164 		},
19165 		.decode_range	= DECODE_RANGE_SPI25,
19166 	},
19167 
19168 	{
19169 		.vendor		= "Spansion",
19170 		.name		= "S25FL256S Large Sectors",
19171 		.bustype	= BUS_SPI,
19172 		.manufacture_id	= SPANSION_ID,
19173 		.model_id	= SPANSION_S25FL256S_UL,
19174 		.total_size	= 16384,  /* This is just half the size.... */
19175 		.page_size	= 256,
19176 		.feature_bits	= FEATURE_WRSR_WREN,
19177 		.tested		= TEST_UNTESTED,
19178 		.probe		= PROBE_SPI_BIG_SPANSION,
19179 		.probe_timing	= TIMING_ZERO,
19180 		.block_erasers	=
19181 		{
19182 			{
19183 				.eraseblocks = { {256 * 1024, 64} },
19184 				.block_erase = S25FL_BLOCK_ERASE,
19185 			}, {
19186 				.eraseblocks = { {16 * 1024 * 1024, 1} },
19187 				.block_erase = SPI_BLOCK_ERASE_60,
19188 			},
19189 		},
19190 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
19191 		.write		= SPI_CHIP_WRITE256,
19192 		.read		= SPI_CHIP_READ,
19193 		.voltage	= {1700, 2000},
19194 	},
19195 
19196 	{
19197 		.vendor		= "Spansion",
19198 		.name		= "S25FL256S Small Sectors",
19199 		.bustype	= BUS_SPI,
19200 		.manufacture_id	= SPANSION_ID,
19201 		.model_id	= SPANSION_S25FL256S_US,
19202 		.total_size	= 16384,   /* This is just half the size.... */
19203 		.page_size	= 256,
19204 		.feature_bits	= FEATURE_WRSR_WREN,
19205 		.tested		= TEST_OK_PREW,
19206 		.probe		= PROBE_SPI_BIG_SPANSION,
19207 		.probe_timing	= TIMING_ZERO,
19208 		.block_erasers	=
19209 		{
19210 			{
19211 				.eraseblocks = { {64 * 1024, 256} },
19212 				.block_erase = S25FL_BLOCK_ERASE,
19213 			}, {
19214 				.eraseblocks = { {16 * 1024 * 1024, 1} },
19215 				.block_erase = SPI_BLOCK_ERASE_60,
19216 			},
19217 		},
19218 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
19219 		.write		= SPI_CHIP_WRITE256,
19220 		.read		= SPI_CHIP_READ,
19221 		.voltage	= {1700, 2000},
19222 	},
19223 
19224 	{
19225 		.vendor		= "Spansion",
19226 		.name		= "S25FL256S......0", /* hybrid: 32 (top or bottom) 4 kB sub-sectors + 64 kB sectors */
19227 		.bustype	= BUS_SPI,
19228 		.manufacture_id	= SPANSION_ID,
19229 		.model_id	= SPANSION_S25FL256,
19230 		.total_size	= 32768,
19231 		.page_size	= 256,
19232 		/* OTP: 1024B total, 32B reserved; read 0x4B; write 0x42 */
19233 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP |
19234 				  FEATURE_4BA_NATIVE | FEATURE_4BA_ENTER_EAR7 | FEATURE_4BA_EAR_1716,
19235 		.tested		= TEST_OK_PREW,
19236 		.probe		= PROBE_SPI_RDID,
19237 		.probe_timing	= TIMING_ZERO,
19238 		.block_erasers	=
19239 		{
19240 			{
19241 				/* This chip supports erasing of the 32 so-called "parameter sectors" with
19242 				 * opcode 0x20. Trying to access an address outside these 4kB blocks does
19243 				 * have no effect on the memory contents, but sets a flag in the SR.
19244 				.eraseblocks = {
19245 					{4 * 1024, 32},
19246 					{64 * 1024, 254} // inaccessible
19247 				},
19248 				.block_erase = SPI_BLOCK_ERASE_20,
19249 			}, { */
19250 				.eraseblocks = { { 64 * 1024, 512} },
19251 				.block_erase = SPI_BLOCK_ERASE_DC,
19252 			}, {
19253 				.eraseblocks = { { 64 * 1024, 512} },
19254 				.block_erase = SPI_BLOCK_ERASE_D8,
19255 			}, {
19256 				.eraseblocks = { { 32768 * 1024, 1} },
19257 				.block_erase = SPI_BLOCK_ERASE_60,
19258 			}, {
19259 				.eraseblocks = { { 32768 * 1024, 1} },
19260 				.block_erase = SPI_BLOCK_ERASE_C7,
19261 			}
19262 		},
19263 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_EP_SRWD, /* TODO: SR2 and many others */
19264 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD, /* TODO: various other locks */
19265 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
19266 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
19267 		.voltage	= {2700, 3600},
19268 	},
19269 
19270 	{
19271 		.vendor		= "Spansion",
19272 		.name		= "S25FL512S",
19273 		.bustype	= BUS_SPI,
19274 		.manufacture_id	= SPANSION_ID,
19275 		.model_id	= SPANSION_S25FL512,
19276 		.total_size	= 65536, /* 512 Mb (=> 64 MB)) */
19277 		.page_size	= 256,
19278 		/* OTP: 1024B total, 32B reserved; read 0x4B; write 0x42 */
19279 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP |
19280 				  FEATURE_4BA_NATIVE | FEATURE_4BA_ENTER_EAR7 | FEATURE_4BA_EAR_1716,
19281 		.tested		= TEST_UNTESTED,
19282 		.probe		= PROBE_SPI_RDID,
19283 		.probe_timing	= TIMING_ZERO,
19284 		.block_erasers	=
19285 		{
19286 			{
19287 				.eraseblocks = { { 256 * 1024, 256} },
19288 				.block_erase = SPI_BLOCK_ERASE_DC,
19289 			}, {
19290 				.eraseblocks = { { 256 * 1024, 256} },
19291 				.block_erase = SPI_BLOCK_ERASE_D8,
19292 			}, {
19293 				.eraseblocks = { { 65536 * 1024, 1} },
19294 				.block_erase = SPI_BLOCK_ERASE_60,
19295 			}, {
19296 				.eraseblocks = { { 65536 * 1024, 1} },
19297 				.block_erase = SPI_BLOCK_ERASE_C7,
19298 			}
19299 		},
19300 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_EP_SRWD, /* TODO: SR2 and many others */
19301 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD, /* TODO: various other locks */
19302 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported, IGNORE for now */
19303 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
19304 		.voltage	= {2700, 3600},
19305 	},
19306 
19307 	{
19308 		.vendor		= "Spansion",
19309 		.name		= "S25FS128S Large Sectors",
19310 		.bustype	= BUS_SPI,
19311 		.manufacture_id	= SPANSION_ID,
19312 		.model_id	= SPANSION_S25FS128S_L,
19313 		.total_size	= 16384,
19314 		.page_size	= 256,
19315 		.feature_bits	= FEATURE_WRSR_WREN,
19316 		.tested		= TEST_UNTESTED,
19317 		.probe		= PROBE_SPI_BIG_SPANSION,
19318 		.probe_timing	= TIMING_ZERO,
19319 		.block_erasers	=
19320 		{
19321 			{
19322 				.eraseblocks = { {64 * 1024, 256} },
19323 				.block_erase = S25FS_BLOCK_ERASE_D8,
19324 			}, {
19325 				.eraseblocks = { {16 * 1024 * 1024, 1} },
19326 				.block_erase = SPI_BLOCK_ERASE_60,
19327 			}, {
19328 				.eraseblocks = { {16 * 1024 * 1024, 1} },
19329 				.block_erase = SPI_BLOCK_ERASE_C7,
19330 			},
19331 		},
19332 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
19333 		.write		= SPI_CHIP_WRITE256,
19334 		.read		= SPI_CHIP_READ,
19335 		.voltage	= {1700, 2000},
19336 	},
19337 
19338 	{
19339 		.vendor		= "Spansion",
19340 		.name		= "S25FS128S Small Sectors",
19341 		.bustype	= BUS_SPI,
19342 		.manufacture_id	= SPANSION_ID,
19343 		.model_id	= SPANSION_S25FS128S_S,
19344 		.total_size	= 16384,
19345 		.page_size	= 256,
19346 		.feature_bits	= FEATURE_WRSR_WREN,
19347 		.tested		= TEST_OK_PREW,
19348 		.probe		= PROBE_SPI_BIG_SPANSION,
19349 		.probe_timing	= TIMING_ZERO,
19350 		.block_erasers	=
19351 		{
19352 			{
19353 				.eraseblocks = { {64 * 1024, 256} },
19354 				.block_erase = S25FS_BLOCK_ERASE_D8,
19355 			}, {
19356 				.eraseblocks = { {16 * 1024 * 1024, 1} },
19357 				.block_erase = SPI_BLOCK_ERASE_60,
19358 			}, {
19359 				.eraseblocks = { {16 * 1024 * 1024, 1} },
19360 				.block_erase = SPI_BLOCK_ERASE_C7,
19361 			},
19362 		},
19363 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
19364 		.write		= SPI_CHIP_WRITE256,
19365 		.read		= SPI_CHIP_READ,
19366 		.voltage	= {1700, 2000},
19367 	},
19368 
19369 	{
19370 		.vendor		= "SyncMOS/MoselVitelic",
19371 		.name		= "{F,S,V}29C51001B",
19372 		.bustype	= BUS_PARALLEL,
19373 		.manufacture_id	= SYNCMOS_MVC_ID,
19374 		.model_id	= SM_MVC_29C51001B,
19375 		.total_size	= 128,
19376 		.page_size	= 512,
19377 		.feature_bits	= FEATURE_EITHER_RESET,
19378 		.tested		= TEST_UNTESTED,
19379 		.probe		= PROBE_JEDEC,
19380 		.probe_timing	= TIMING_ZERO,	/* Datasheet has no timing info specified */
19381 		.block_erasers	=
19382 		{
19383 			{
19384 				.eraseblocks = { {512, 256} },
19385 				.block_erase = JEDEC_SECTOR_ERASE,
19386 			}, {
19387 				.eraseblocks = { {128 * 1024, 1} },
19388 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
19389 			},
19390 		},
19391 		.write		= WRITE_JEDEC1,
19392 		.read		= READ_MEMMAPPED,
19393 		.voltage	= {4500, 5500},
19394 	},
19395 
19396 	{
19397 		.vendor		= "SyncMOS/MoselVitelic",
19398 		.name		= "{F,S,V}29C51001T",
19399 		.bustype	= BUS_PARALLEL,
19400 		.manufacture_id	= SYNCMOS_MVC_ID,
19401 		.model_id	= SM_MVC_29C51001T,
19402 		.total_size	= 128,
19403 		.page_size	= 512,
19404 		.feature_bits	= FEATURE_EITHER_RESET,
19405 		.tested		= TEST_UNTESTED,
19406 		.probe		= PROBE_JEDEC,
19407 		.probe_timing	= TIMING_ZERO,	/* Datasheet has no timing info specified */
19408 		.block_erasers	=
19409 		{
19410 			{
19411 				.eraseblocks = { {512, 256} },
19412 				.block_erase = JEDEC_SECTOR_ERASE,
19413 			}, {
19414 				.eraseblocks = { {128 * 1024, 1} },
19415 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
19416 			},
19417 		},
19418 		.write		= WRITE_JEDEC1,
19419 		.read		= READ_MEMMAPPED,
19420 		.voltage	= {4500, 5500},
19421 	},
19422 
19423 	{
19424 		.vendor		= "SyncMOS/MoselVitelic",
19425 		.name		= "{F,S,V}29C51002B",
19426 		.bustype	= BUS_PARALLEL,
19427 		.manufacture_id	= SYNCMOS_MVC_ID,
19428 		.model_id	= SM_MVC_29C51002B,
19429 		.total_size	= 256,
19430 		.page_size	= 512,
19431 		.feature_bits	= FEATURE_EITHER_RESET,
19432 		.tested		= TEST_UNTESTED,
19433 		.probe		= PROBE_JEDEC,
19434 		.probe_timing	= TIMING_ZERO,	/* Datasheet has no timing info specified */
19435 		.block_erasers	=
19436 		{
19437 			{
19438 				.eraseblocks = { {512, 512} },
19439 				.block_erase = JEDEC_SECTOR_ERASE,
19440 			}, {
19441 				.eraseblocks = { {256 * 1024, 1} },
19442 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
19443 			},
19444 		},
19445 		.write		= WRITE_JEDEC1,
19446 		.read		= READ_MEMMAPPED,
19447 	},
19448 
19449 	{
19450 		.vendor		= "SyncMOS/MoselVitelic",
19451 		.name		= "{F,S,V}29C51002T",
19452 		.bustype	= BUS_PARALLEL,
19453 		.manufacture_id	= SYNCMOS_MVC_ID,
19454 		.model_id	= SM_MVC_29C51002T,
19455 		.total_size	= 256,
19456 		.page_size	= 512,
19457 		.feature_bits	= FEATURE_EITHER_RESET,
19458 		.tested		= TEST_OK_PREW,
19459 		.probe		= PROBE_JEDEC,
19460 		.probe_timing	= TIMING_ZERO,	/* Datasheet has no timing info specified */
19461 		.block_erasers	=
19462 		{
19463 			{
19464 				.eraseblocks = { {512, 512} },
19465 				.block_erase = JEDEC_SECTOR_ERASE,
19466 			}, {
19467 				.eraseblocks = { {256 * 1024, 1} },
19468 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
19469 			},
19470 		},
19471 		.write		= WRITE_JEDEC1,
19472 		.read		= READ_MEMMAPPED,
19473 	},
19474 
19475 	{
19476 		.vendor		= "SyncMOS/MoselVitelic",
19477 		.name		= "{F,S,V}29C51004B",
19478 		.bustype	= BUS_PARALLEL,
19479 		.manufacture_id	= SYNCMOS_MVC_ID,
19480 		.model_id	= SM_MVC_29C51004B,
19481 		.total_size	= 512,
19482 		.page_size	= 1024,
19483 		.feature_bits	= FEATURE_EITHER_RESET,
19484 		.tested		= TEST_UNTESTED,
19485 		.probe		= PROBE_JEDEC,
19486 		.probe_timing	= TIMING_ZERO,
19487 		.block_erasers	=
19488 		{
19489 			{
19490 				.eraseblocks = { {1024, 512} },
19491 				.block_erase = JEDEC_SECTOR_ERASE,
19492 			}, {
19493 				.eraseblocks = { {512 * 1024, 1} },
19494 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
19495 			},
19496 		},
19497 		.write		= WRITE_JEDEC1,
19498 		.read		= READ_MEMMAPPED,
19499 		.voltage	= {4500, 5500},
19500 	},
19501 
19502 	{
19503 		.vendor		= "SyncMOS/MoselVitelic",
19504 		.name		= "{F,S,V}29C51004T",
19505 		.bustype	= BUS_PARALLEL,
19506 		.manufacture_id	= SYNCMOS_MVC_ID,
19507 		.model_id	= SM_MVC_29C51004T,
19508 		.total_size	= 512,
19509 		.page_size	= 1024,
19510 		.feature_bits	= FEATURE_EITHER_RESET,
19511 		.tested		= TEST_UNTESTED,
19512 		.probe		= PROBE_JEDEC,
19513 		.probe_timing	= TIMING_ZERO,
19514 		.block_erasers	=
19515 		{
19516 			{
19517 				.eraseblocks = { {1024, 512} },
19518 				.block_erase = JEDEC_SECTOR_ERASE,
19519 			}, {
19520 				.eraseblocks = { {512 * 1024, 1} },
19521 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
19522 			},
19523 		},
19524 		.write		= WRITE_JEDEC1,
19525 		.read		= READ_MEMMAPPED,
19526 		.voltage	= {4500, 5500},
19527 	},
19528 
19529 	{
19530 		.vendor		= "SyncMOS/MoselVitelic",
19531 		.name		= "{S,V}29C31004B",
19532 		.bustype	= BUS_PARALLEL,
19533 		.manufacture_id	= SYNCMOS_MVC_ID,
19534 		.model_id	= SM_MVC_29C31004B,
19535 		.total_size	= 512,
19536 		.page_size	= 1024,
19537 		.feature_bits	= FEATURE_EITHER_RESET,
19538 		.tested		= TEST_UNTESTED,
19539 		.probe		= PROBE_JEDEC,
19540 		.probe_timing	= TIMING_ZERO,	/* Datasheet has no timing info specified */
19541 		.block_erasers	=
19542 		{
19543 			{
19544 				.eraseblocks = { {1024, 512} },
19545 				.block_erase = JEDEC_SECTOR_ERASE,
19546 			}, {
19547 				.eraseblocks = { {512 * 1024, 1} },
19548 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
19549 			},
19550 		},
19551 		.write		= WRITE_JEDEC1,
19552 		.read		= READ_MEMMAPPED,
19553 		.voltage	= {3000, 3600},
19554 	},
19555 
19556 	{
19557 		.vendor		= "SyncMOS/MoselVitelic",
19558 		.name		= "{S,V}29C31004T",
19559 		.bustype	= BUS_PARALLEL,
19560 		.manufacture_id	= SYNCMOS_MVC_ID,
19561 		.model_id	= SM_MVC_29C31004T,
19562 		.total_size	= 512,
19563 		.page_size	= 1024,
19564 		.feature_bits	= FEATURE_EITHER_RESET,
19565 		.tested		= TEST_UNTESTED,
19566 		.probe		= PROBE_JEDEC,
19567 		.probe_timing	= TIMING_ZERO,	/* Datasheet has no timing info specified */
19568 		.block_erasers	=
19569 		{
19570 			{
19571 				.eraseblocks = { {1024, 512} },
19572 				.block_erase = JEDEC_SECTOR_ERASE,
19573 			}, {
19574 				.eraseblocks = { {512 * 1024, 1} },
19575 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
19576 			},
19577 		},
19578 		.write		= WRITE_JEDEC1,
19579 		.read		= READ_MEMMAPPED,
19580 		.voltage	= {3000, 3600},
19581 	},
19582 
19583 	{
19584 		.vendor		= "TI",
19585 		.name		= "TMS29F002RB",
19586 		.bustype	= BUS_PARALLEL,
19587 		.manufacture_id	= TI_OLD_ID,
19588 		.model_id	= TI_TMS29F002RB,
19589 		.total_size	= 256,
19590 		.page_size	= 16384, /* Non-uniform sectors */
19591 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
19592 		.tested		= TEST_UNTESTED,
19593 		.probe		= PROBE_JEDEC,
19594 		.probe_timing	= TIMING_ZERO,	/* Datasheet has no timing info specified */
19595 		.block_erasers	=
19596 		{
19597 			{
19598 				.eraseblocks = {
19599 					{16 * 1024, 1},
19600 					{8 * 1024, 2},
19601 					{32 * 1024, 1},
19602 					{64 * 1024, 3},
19603 				},
19604 				.block_erase = JEDEC_SECTOR_ERASE,
19605 			}, {
19606 				.eraseblocks = { {256 * 1024, 1} },
19607 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
19608 			},
19609 		},
19610 		.write		= WRITE_JEDEC1,
19611 		.read		= READ_MEMMAPPED,
19612 		.voltage	= {4500, 5500},
19613 	},
19614 
19615 	{
19616 		.vendor		= "TI",
19617 		.name		= "TMS29F002RT",
19618 		.bustype	= BUS_PARALLEL,
19619 		.manufacture_id	= TI_OLD_ID,
19620 		.model_id	= TI_TMS29F002RT,
19621 		.total_size	= 256,
19622 		.page_size	= 16384, /* Non-uniform sectors */
19623 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
19624 		.tested		= TEST_UNTESTED,
19625 		.probe		= PROBE_JEDEC,
19626 		.probe_timing	= TIMING_ZERO,	/* Datasheet has no timing info specified */
19627 		.block_erasers	=
19628 		{
19629 			{
19630 				.eraseblocks = {
19631 					{64 * 1024, 3},
19632 					{32 * 1024, 1},
19633 					{8 * 1024, 2},
19634 					{16 * 1024, 1},
19635 				},
19636 				.block_erase = JEDEC_SECTOR_ERASE,
19637 			}, {
19638 				.eraseblocks = { {256 * 1024, 1} },
19639 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
19640 			},
19641 		},
19642 		.write		= WRITE_JEDEC1,
19643 		.read		= READ_MEMMAPPED,
19644 		.voltage	= {4500, 5500},
19645 	},
19646 
19647 	{
19648 		.vendor		= "Winbond",
19649 		.name		= "W25P16",
19650 		.bustype	= BUS_SPI,
19651 		.manufacture_id	= WINBOND_NEX_ID,
19652 		.model_id	= WINBOND_NEX_W25P16,
19653 		.total_size	= 2048,
19654 		.page_size	= 256,
19655 		.feature_bits	= FEATURE_WRSR_WREN,
19656 		.tested		= TEST_UNTESTED,
19657 		.probe		= PROBE_SPI_RDID,
19658 		.probe_timing	= TIMING_ZERO,
19659 		.block_erasers	=
19660 		{
19661 			{
19662 				.eraseblocks = { {64 * 1024, 32} },
19663 				.block_erase = SPI_BLOCK_ERASE_D8,
19664 			}, {
19665 				.eraseblocks = { {2048 * 1024, 1} },
19666 				.block_erase = SPI_BLOCK_ERASE_C7,
19667 			}
19668 		},
19669 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
19670 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
19671 		.write		= SPI_CHIP_WRITE256,
19672 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
19673 		.voltage	= {2700, 3600},
19674 	},
19675 
19676 	{
19677 		.vendor		= "Winbond",
19678 		.name		= "W25P32",
19679 		.bustype	= BUS_SPI,
19680 		.manufacture_id	= WINBOND_NEX_ID,
19681 		.model_id	= WINBOND_NEX_W25P32,
19682 		.total_size	= 4096,
19683 		.page_size	= 256,
19684 		.feature_bits	= FEATURE_WRSR_WREN,
19685 		.tested		= TEST_UNTESTED,
19686 		.probe		= PROBE_SPI_RDID,
19687 		.probe_timing	= TIMING_ZERO,
19688 		.block_erasers	=
19689 		{
19690 			{
19691 				.eraseblocks = { {64 * 1024, 64} },
19692 				.block_erase = SPI_BLOCK_ERASE_D8,
19693 			}, {
19694 				.eraseblocks = { {4096 * 1024, 1} },
19695 				.block_erase = SPI_BLOCK_ERASE_C7,
19696 			}
19697 		},
19698 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
19699 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
19700 		.write		= SPI_CHIP_WRITE256,
19701 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
19702 		.voltage	= {2700, 3600},
19703 	},
19704 
19705 	{
19706 		.vendor		= "Winbond",
19707 		.name		= "W25P80",
19708 		.bustype	= BUS_SPI,
19709 		.manufacture_id	= WINBOND_NEX_ID,
19710 		.model_id	= WINBOND_NEX_W25P80,
19711 		.total_size	= 1024,
19712 		.page_size	= 256,
19713 		.feature_bits	= FEATURE_WRSR_WREN,
19714 		.tested		= TEST_UNTESTED,
19715 		.probe		= PROBE_SPI_RDID,
19716 		.probe_timing	= TIMING_ZERO,
19717 		.block_erasers	=
19718 		{
19719 			{
19720 				.eraseblocks = { {64 * 1024, 16} },
19721 				.block_erase = SPI_BLOCK_ERASE_D8,
19722 			}, {
19723 				.eraseblocks = { {1024 * 1024, 1} },
19724 				.block_erase = SPI_BLOCK_ERASE_C7,
19725 			}
19726 		},
19727 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
19728 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
19729 		.write		= SPI_CHIP_WRITE256,
19730 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) supported */
19731 		.voltage	= {2700, 3600},
19732 	},
19733 
19734 	{
19735 		.vendor		= "Winbond",
19736 		.name		= "W25Q128.V",
19737 		.bustype	= BUS_SPI,
19738 		.manufacture_id	= WINBOND_NEX_ID,
19739 		.model_id	= WINBOND_NEX_W25Q128_V,
19740 		.total_size	= 16384,
19741 		.page_size	= 256,
19742 		/* supports SFDP */
19743 		/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
19744 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP |
19745 				  FEATURE_WRSR_EXT2 | FEATURE_WRSR2 | FEATURE_WRSR3,
19746 		.tested		= TEST_OK_PREWB,
19747 		.probe		= PROBE_SPI_RDID,
19748 		.probe_timing	= TIMING_ZERO,
19749 		.block_erasers	=
19750 		{
19751 			{
19752 				.eraseblocks = { {4 * 1024, 4096} },
19753 				.block_erase = SPI_BLOCK_ERASE_20,
19754 			}, {
19755 				.eraseblocks = { {32 * 1024, 512} },
19756 				.block_erase = SPI_BLOCK_ERASE_52,
19757 			}, {
19758 				.eraseblocks = { {64 * 1024, 256} },
19759 				.block_erase = SPI_BLOCK_ERASE_D8,
19760 			}, {
19761 				.eraseblocks = { {16 * 1024 * 1024, 1} },
19762 				.block_erase = SPI_BLOCK_ERASE_60,
19763 			}, {
19764 				.eraseblocks = { {16 * 1024 * 1024, 1} },
19765 				.block_erase = SPI_BLOCK_ERASE_C7,
19766 			}
19767 		},
19768 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_SRWD_SEC_TB_BP2_WELWIP,
19769 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
19770 		.write		= SPI_CHIP_WRITE256,
19771 		.read		= SPI_CHIP_READ,
19772 		.voltage	= {2700, 3600},
19773 		.reg_bits	=
19774 		{
19775 			.srp	= {STATUS1, 7, RW},
19776 			.srl	= {STATUS2, 0, RW},
19777 			.bp	= {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
19778 			.tb	= {STATUS1, 5, RW},
19779 			.sec	= {STATUS1, 6, RW},
19780 			.cmp	= {STATUS2, 6, RW},
19781 			.wps	= {STATUS3, 2, RW},
19782 		},
19783 		.decode_range	= DECODE_RANGE_SPI25,
19784 	},
19785 
19786 	{
19787 		.vendor		= "Winbond",
19788 		.name		= "W25Q128.V..M",
19789 		.bustype	= BUS_SPI,
19790 		.manufacture_id	= WINBOND_NEX_ID,
19791 		.model_id	= WINBOND_NEX_W25Q128_V_M,
19792 		.total_size	= 16384,
19793 		.page_size	= 256,
19794 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI | FEATURE_WRSR2,
19795 		.tested		= TEST_OK_PREWB,
19796 		.probe		= PROBE_SPI_RDID,
19797 		.probe_timing	= TIMING_ZERO,
19798 		.block_erasers	=
19799 		{
19800 			{
19801 				.eraseblocks = { {4 * 1024, 4096} },
19802 				.block_erase = SPI_BLOCK_ERASE_20,
19803 			}, {
19804 				.eraseblocks = { {32 * 1024, 512} },
19805 				.block_erase = SPI_BLOCK_ERASE_52,
19806 			}, {
19807 				.eraseblocks = { {64 * 1024, 256} },
19808 				.block_erase = SPI_BLOCK_ERASE_D8,
19809 			}, {
19810 				.eraseblocks = { {16 * 1024 * 1024, 1} },
19811 				.block_erase = SPI_BLOCK_ERASE_60,
19812 			}, {
19813 				.eraseblocks = { {16 * 1024 * 1024, 1} },
19814 				.block_erase = SPI_BLOCK_ERASE_C7,
19815 			}
19816 		},
19817 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_SRWD_SEC_TB_BP2_WELWIP,
19818 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
19819 		.write		= SPI_CHIP_WRITE256,
19820 		.read		= SPI_CHIP_READ,
19821 		.voltage	= {2700, 3600},
19822 		.reg_bits	=
19823 		{
19824 			.srp    = {STATUS1, 7, RW},
19825 			.srl    = {STATUS2, 0, RW},
19826 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
19827 			.tb     = {STATUS1, 5, RW},
19828 			.sec    = {STATUS1, 6, RW},
19829 			.cmp    = {STATUS2, 6, RW},
19830 		},
19831 		.decode_range	= DECODE_RANGE_SPI25,
19832 	},
19833 
19834 	{
19835 		.vendor		= "Winbond",
19836 		.name		= "W25Q128.W",
19837 		.bustype	= BUS_SPI,
19838 		.manufacture_id	= WINBOND_NEX_ID,
19839 		.model_id	= WINBOND_NEX_W25Q128_W,
19840 		.total_size	= 16384,
19841 		.page_size	= 256,
19842 		/* supports SFDP */
19843 		/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
19844 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI | FEATURE_WRSR2,
19845 		.tested		= TEST_OK_PREW,
19846 		.probe		= PROBE_SPI_RDID,
19847 		.probe_timing	= TIMING_ZERO,
19848 		.block_erasers	=
19849 		{
19850 			{
19851 				.eraseblocks = { {4 * 1024, 4096} },
19852 				.block_erase = SPI_BLOCK_ERASE_20,
19853 			}, {
19854 				.eraseblocks = { {32 * 1024, 512} },
19855 				.block_erase = SPI_BLOCK_ERASE_52,
19856 			}, {
19857 				.eraseblocks = { {64 * 1024, 256} },
19858 				.block_erase = SPI_BLOCK_ERASE_D8,
19859 			}, {
19860 				.eraseblocks = { {16 * 1024 * 1024, 1} },
19861 				.block_erase = SPI_BLOCK_ERASE_60,
19862 			}, {
19863 				.eraseblocks = { {16 * 1024 * 1024, 1} },
19864 				.block_erase = SPI_BLOCK_ERASE_C7,
19865 			}
19866 		},
19867 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_SRWD_SEC_TB_BP2_WELWIP,
19868 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
19869 		.write		= SPI_CHIP_WRITE256,
19870 		.read		= SPI_CHIP_READ,
19871 		.voltage	= {1650, 1950},
19872 		.reg_bits	=
19873 		{
19874 			.srp    = {STATUS1, 7, RW},
19875 			.srl    = {STATUS2, 0, RW},
19876 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
19877 			.tb     = {STATUS1, 5, RW},
19878 			.sec    = {STATUS1, 6, RW},
19879 			.cmp    = {STATUS2, 6, RW},
19880 		},
19881 		.decode_range	= DECODE_RANGE_SPI25,
19882 	},
19883 
19884 	{
19885 		.vendor		= "Winbond",
19886 		.name		= "W25Q128.JW.DTR",
19887 		.bustype	= BUS_SPI,
19888 		.manufacture_id	= WINBOND_NEX_ID,
19889 		.model_id	= WINBOND_NEX_W25Q128_DTR,
19890 		.total_size	= 16384,
19891 		.page_size	= 256,
19892 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI | FEATURE_WRSR2,
19893 		.tested		= TEST_OK_PREW,
19894 		.probe		= PROBE_SPI_RDID,
19895 		.probe_timing	= TIMING_ZERO,
19896 		.block_erasers	=
19897 		{
19898 			{
19899 				.eraseblocks = { {4 * 1024, 4096} },
19900 				.block_erase = SPI_BLOCK_ERASE_20,
19901 			}, {
19902 				.eraseblocks = { {32 * 1024, 512} },
19903 				.block_erase = SPI_BLOCK_ERASE_52,
19904 			}, {
19905 				.eraseblocks = { {64 * 1024, 256} },
19906 				.block_erase = SPI_BLOCK_ERASE_D8,
19907 			}, {
19908 				.eraseblocks = { {16 * 1024 * 1024, 1} },
19909 				.block_erase = SPI_BLOCK_ERASE_60,
19910 			}, {
19911 				.eraseblocks = { {16 * 1024 * 1024, 1} },
19912 				.block_erase = SPI_BLOCK_ERASE_C7,
19913 			}
19914 		},
19915 		.printlock      = SPI_PRETTYPRINT_STATUS_REGISTER_SRWD_SEC_TB_BP2_WELWIP,
19916 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
19917 		.write		= SPI_CHIP_WRITE256,
19918 		.read		= SPI_CHIP_READ,
19919 		.voltage	= {1650, 1950},
19920 		.reg_bits	=
19921 		{
19922 			.srp    = {STATUS1, 7, RW},
19923 			.srl    = {STATUS2, 0, RW},
19924 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
19925 			.tb     = {STATUS1, 5, RW},
19926 			.sec    = {STATUS1, 6, RW},
19927 			.cmp    = {STATUS2, 6, RW},
19928 		},
19929 		.decode_range	= DECODE_RANGE_SPI25,
19930 	},
19931 
19932 	{
19933 		.vendor		= "Winbond",
19934 		.name		= "W25Q16JV_M",
19935 		.bustype	= BUS_SPI,
19936 		.manufacture_id	= WINBOND_NEX_ID,
19937 		.model_id	= WINBOND_NEX_W25Q16JV_M,
19938 		.total_size	= 2048,
19939 		.page_size	= 256,
19940 		/* supports SFDP */
19941 		/* OTP: 3x 256B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
19942 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI |
19943 				  FEATURE_WRSR2 | FEATURE_WRSR3,
19944 		.tested		= TEST_OK_PREW,
19945 		.probe		= PROBE_SPI_RDID,
19946 		.probe_timing	= TIMING_ZERO,
19947 		.block_erasers	=
19948 		{
19949 			{
19950 				.eraseblocks = { {4 * 1024, 512} },
19951 				.block_erase = SPI_BLOCK_ERASE_20,
19952 			}, {
19953 				.eraseblocks = { {32 * 1024, 64} },
19954 				.block_erase = SPI_BLOCK_ERASE_52,
19955 			}, {
19956 				.eraseblocks = { {64 * 1024, 32} },
19957 				.block_erase = SPI_BLOCK_ERASE_D8,
19958 			}, {
19959 				.eraseblocks = { {2 * 1024 * 1024, 1} },
19960 				.block_erase = SPI_BLOCK_ERASE_60,
19961 			}, {
19962 				.eraseblocks = { {2 * 1024 * 1024, 1} },
19963 				.block_erase = SPI_BLOCK_ERASE_C7,
19964 			}
19965 		},
19966 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_SRWD_SEC_TB_BP2_WELWIP,
19967 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
19968 		.write		= SPI_CHIP_WRITE256,
19969 		.read		= SPI_CHIP_READ,
19970 		.voltage	= {2700, 3600},
19971 		.reg_bits	=
19972 		{
19973 			.srp    = {STATUS1, 7, RW},
19974 			.sec    = {STATUS1, 6, RW},
19975 			.tb     = {STATUS1, 5, RW},
19976 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
19977 			.cmp    = {STATUS2, 6, RW},
19978 			.srl    = {STATUS2, 0, RW},
19979 			.wps    = {STATUS3, 2, RW},
19980 		},
19981 		.decode_range	= DECODE_RANGE_SPI25,
19982 	},
19983 
19984 	{
19985 		.vendor		= "Winbond",
19986 		.name		= "W25Q16.V",
19987 		.bustype	= BUS_SPI,
19988 		.manufacture_id	= WINBOND_NEX_ID,
19989 		.model_id	= WINBOND_NEX_W25Q16_V,
19990 		.total_size	= 2048,
19991 		.page_size	= 256,
19992 		/* supports SFDP */
19993 		/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
19994 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_WRSR2,
19995 		.tested		= TEST_OK_PREWB,
19996 		.probe		= PROBE_SPI_RDID,
19997 		.probe_timing	= TIMING_ZERO,
19998 		.block_erasers	=
19999 		{
20000 			{
20001 				.eraseblocks = { {4 * 1024, 512} },
20002 				.block_erase = SPI_BLOCK_ERASE_20,
20003 			}, {
20004 				.eraseblocks = { {32 * 1024, 64} },
20005 				.block_erase = SPI_BLOCK_ERASE_52,
20006 			}, {
20007 				.eraseblocks = { {64 * 1024, 32} },
20008 				.block_erase = SPI_BLOCK_ERASE_D8,
20009 			}, {
20010 				.eraseblocks = { {2 * 1024 * 1024, 1} },
20011 				.block_erase = SPI_BLOCK_ERASE_60,
20012 			}, {
20013 				.eraseblocks = { {2 * 1024 * 1024, 1} },
20014 				.block_erase = SPI_BLOCK_ERASE_C7,
20015 			}
20016 		},
20017 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_SRWD_SEC_TB_BP2_WELWIP,
20018 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
20019 		.write		= SPI_CHIP_WRITE256,
20020 		.read		= SPI_CHIP_READ,
20021 		.voltage	= {2700, 3600},
20022 		.reg_bits	=
20023 		{
20024 			.srp    = {STATUS1, 7, RW},
20025 			.srl    = {STATUS2, 0, RW},
20026 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
20027 			.tb     = {STATUS1, 5, RW},
20028 			.sec    = {STATUS1, 6, RW},
20029 			.cmp    = {STATUS2, 6, RW},
20030 		},
20031 		.decode_range	= DECODE_RANGE_SPI25,
20032 	},
20033 
20034 	{
20035 		.vendor		= "Winbond",
20036 		.name		= "W25Q16.W",
20037 		.bustype	= BUS_SPI,
20038 		.manufacture_id	= WINBOND_NEX_ID,
20039 		.model_id	= WINBOND_NEX_W25Q16_W,
20040 		.total_size	= 2048,
20041 		.page_size	= 256,
20042 		/* OTP: 256B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
20043 		/* QPI enable 0x38, disable 0xFF */
20044 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
20045 		.tested		= TEST_UNTESTED,
20046 		.probe		= PROBE_SPI_RDID,
20047 		.probe_timing	= TIMING_ZERO,
20048 		.block_erasers	=
20049 		{
20050 			{
20051 				.eraseblocks = { {4 * 1024, 512} },
20052 				.block_erase = SPI_BLOCK_ERASE_20,
20053 			}, {
20054 				.eraseblocks = { {32 * 1024, 64} },
20055 				.block_erase = SPI_BLOCK_ERASE_52,
20056 			}, {
20057 				.eraseblocks = { {64 * 1024, 32} },
20058 				.block_erase = SPI_BLOCK_ERASE_D8,
20059 			}, {
20060 				.eraseblocks = { {2 * 1024 * 1024, 1} },
20061 				.block_erase = SPI_BLOCK_ERASE_60,
20062 			}, {
20063 				.eraseblocks = { {2 * 1024 * 1024, 1} },
20064 				.block_erase = SPI_BLOCK_ERASE_C7,
20065 			}
20066 		},
20067 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
20068 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
20069 		.write		= SPI_CHIP_WRITE256,
20070 		.read		= SPI_CHIP_READ,
20071 		.voltage	= {1700, 1950}, /* Fast read (0x0B) and multi I/O supported */
20072 	},
20073 
20074 	{
20075 		.vendor		= "Winbond",
20076 		.name		= "W25Q20.W",
20077 		.bustype	= BUS_SPI,
20078 		.manufacture_id	= WINBOND_NEX_ID,
20079 		.model_id	= WINBOND_NEX_W25Q20_W,
20080 		.total_size	= 256,
20081 		.page_size	= 256,
20082 		/* OTP: 256B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
20083 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
20084 		.tested		= TEST_UNTESTED,
20085 		.probe		= PROBE_SPI_RDID,
20086 		.probe_timing	= TIMING_ZERO,
20087 		.block_erasers	=
20088 		{
20089 			{
20090 				.eraseblocks = { {4 * 1024, 64} },
20091 				.block_erase = SPI_BLOCK_ERASE_20,
20092 			}, {
20093 				.eraseblocks = { {32 * 1024, 8} },
20094 				.block_erase = SPI_BLOCK_ERASE_52,
20095 			}, {
20096 				.eraseblocks = { {64 * 1024, 4} },
20097 				.block_erase = SPI_BLOCK_ERASE_D8,
20098 			}, {
20099 				.eraseblocks = { {256 * 1024, 1} },
20100 				.block_erase = SPI_BLOCK_ERASE_60,
20101 			}, {
20102 				.eraseblocks = { {256 * 1024, 1} },
20103 				.block_erase = SPI_BLOCK_ERASE_C7,
20104 			}
20105 		},
20106 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
20107 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
20108 		.write		= SPI_CHIP_WRITE256,
20109 		.read		= SPI_CHIP_READ,
20110 		.voltage	= {1700, 1950}, /* Fast read (0x0B) and multi I/O supported */
20111 	},
20112 
20113 	{
20114 		.vendor		= "Winbond",
20115 		.name		= "W25Q256FV",
20116 		.bustype	= BUS_SPI,
20117 		.manufacture_id	= WINBOND_NEX_ID,
20118 		.model_id	= WINBOND_NEX_W25Q256_V,
20119 		.total_size	= 32768,
20120 		.page_size	= 256,
20121 		/* supports SFDP */
20122 		/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
20123 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA_ENTER_WREN |
20124 				  FEATURE_4BA_EAR_C5C8 | FEATURE_4BA_READ | FEATURE_4BA_FAST_READ |
20125 				  FEATURE_WRSR2,
20126 		.tested		= TEST_OK_PREW,
20127 		.probe		= PROBE_SPI_RDID,
20128 		.probe_timing	= TIMING_ZERO,
20129 		.block_erasers	=
20130 		{
20131 			{
20132 				.eraseblocks = { {4 * 1024, 8192} },
20133 				.block_erase = SPI_BLOCK_ERASE_20,
20134 			}, {
20135 				.eraseblocks = { {32 * 1024, 1024} },
20136 				.block_erase = SPI_BLOCK_ERASE_52,
20137 			}, {
20138 				.eraseblocks = { {64 * 1024, 512} },
20139 				.block_erase = SPI_BLOCK_ERASE_D8,
20140 			}, {
20141 				.eraseblocks = { {32 * 1024 * 1024, 1} },
20142 				.block_erase = SPI_BLOCK_ERASE_60,
20143 			}, {
20144 				.eraseblocks = { {32 * 1024 * 1024, 1} },
20145 				.block_erase = SPI_BLOCK_ERASE_C7,
20146 			}
20147 		},
20148 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD,
20149 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
20150 		.write		= SPI_CHIP_WRITE256,
20151 		.read		= SPI_CHIP_READ,
20152 		.voltage	= {2700, 3600},
20153 		.reg_bits	=
20154 		{
20155 			.srp    = {STATUS1, 7, RW},
20156 			.srl    = {STATUS2, 0, RW},
20157 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}, {STATUS1, 5, RW}},
20158 			.tb     = {STATUS1, 6, RW},
20159 			.cmp    = {STATUS2, 6, RW},
20160 		},
20161 		.decode_range	= DECODE_RANGE_SPI25,
20162 	},
20163 
20164 	{
20165 		.vendor		= "Winbond",
20166 		.name		= "W25Q256JV_Q",
20167 		.bustype	= BUS_SPI,
20168 		.manufacture_id	= WINBOND_NEX_ID,
20169 		.model_id	= WINBOND_NEX_W25Q256_V,
20170 		.total_size	= 32768,
20171 		.page_size	= 256,
20172 		/* supports SFDP */
20173 		/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
20174 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA | FEATURE_WRSR2,
20175 		.tested		= TEST_UNTESTED,
20176 		.probe		= PROBE_SPI_RDID,
20177 		.probe_timing	= TIMING_ZERO,
20178 		.block_erasers	=
20179 		{
20180 			{
20181 				.eraseblocks = { {4 * 1024, 8192} },
20182 				.block_erase = SPI_BLOCK_ERASE_21,
20183 			}, {
20184 				.eraseblocks = { {4 * 1024, 8192} },
20185 				.block_erase = SPI_BLOCK_ERASE_20,
20186 			}, {
20187 				.eraseblocks = { {32 * 1024, 1024} },
20188 				.block_erase = SPI_BLOCK_ERASE_52,
20189 			}, {
20190 				.eraseblocks = { {64 * 1024, 512} },
20191 				.block_erase = SPI_BLOCK_ERASE_DC,
20192 			}, {
20193 				.eraseblocks = { {64 * 1024, 512} },
20194 				.block_erase = SPI_BLOCK_ERASE_D8,
20195 			}, {
20196 				.eraseblocks = { {32 * 1024 * 1024, 1} },
20197 				.block_erase = SPI_BLOCK_ERASE_60,
20198 			}, {
20199 				.eraseblocks = { {32 * 1024 * 1024, 1} },
20200 				.block_erase = SPI_BLOCK_ERASE_C7,
20201 			}
20202 		},
20203 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD,
20204 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
20205 		.write		= SPI_CHIP_WRITE256,
20206 		.read		= SPI_CHIP_READ,
20207 		.voltage	= {2700, 3600},
20208 		.reg_bits	=
20209 		{
20210 			.srp    = {STATUS1, 7, RW},
20211 			.srl    = {STATUS2, 0, RW},
20212 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}, {STATUS1, 5, RW}},
20213 			.tb     = {STATUS1, 6, RW},
20214 			.cmp    = {STATUS2, 6, RW},
20215 		},
20216 		.decode_range	= DECODE_RANGE_SPI25,
20217 	},
20218 
20219 	{
20220 		.vendor		= "Winbond",
20221 		.name		= "W25Q256JV_M",
20222 		.bustype	= BUS_SPI,
20223 		.manufacture_id	= WINBOND_NEX_ID,
20224 		.model_id	= WINBOND_NEX_W25Q256JV_M,
20225 		.total_size	= 32768,
20226 		.page_size	= 256,
20227 		/* supports SFDP */
20228 		/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
20229 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA | FEATURE_WRSR2,
20230 		.tested		= TEST_OK_PREW,
20231 		.probe		= PROBE_SPI_RDID,
20232 		.probe_timing	= TIMING_ZERO,
20233 		.block_erasers	=
20234 		{
20235 			{
20236 				.eraseblocks = { {4 * 1024, 8192} },
20237 				.block_erase = SPI_BLOCK_ERASE_21,
20238 			}, {
20239 				.eraseblocks = { {4 * 1024, 8192} },
20240 				.block_erase = SPI_BLOCK_ERASE_20,
20241 			}, {
20242 				.eraseblocks = { {32 * 1024, 1024} },
20243 				.block_erase = SPI_BLOCK_ERASE_52,
20244 			}, {
20245 				.eraseblocks = { {64 * 1024, 512} },
20246 				.block_erase = SPI_BLOCK_ERASE_DC,
20247 			}, {
20248 				.eraseblocks = { {64 * 1024, 512} },
20249 				.block_erase = SPI_BLOCK_ERASE_D8,
20250 			}, {
20251 				.eraseblocks = { {32 * 1024 * 1024, 1} },
20252 				.block_erase = SPI_BLOCK_ERASE_60,
20253 			}, {
20254 				.eraseblocks = { {32 * 1024 * 1024, 1} },
20255 				.block_erase = SPI_BLOCK_ERASE_C7,
20256 			}
20257 		},
20258 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD,
20259 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
20260 		.write		= SPI_CHIP_WRITE256,
20261 		.read		= SPI_CHIP_READ,
20262 		.voltage	= {2700, 3600},
20263 		.reg_bits	=
20264 		{
20265 			.srp    = {STATUS1, 7, RW},
20266 			.srl    = {STATUS2, 0, RW},
20267 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}, {STATUS1, 5, RW}},
20268 			.tb     = {STATUS1, 6, RW},
20269 			.cmp    = {STATUS2, 6, RW},
20270 		},
20271 		.decode_range	= DECODE_RANGE_SPI25,
20272 	},
20273 
20274 	{
20275 		.vendor		= "Winbond",
20276 		.name		= "W25Q256JW",
20277 		.bustype	= BUS_SPI,
20278 		.manufacture_id	= WINBOND_NEX_ID,
20279 		.model_id	= WINBOND_NEX_W25Q256_W,
20280 		.total_size	= 32768,
20281 		.page_size	= 256,
20282 		/* supports SFDP */
20283 		/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
20284 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA,
20285 		.tested		= TEST_OK_PREW,
20286 		.probe		= PROBE_SPI_RDID,
20287 		.probe_timing	= TIMING_ZERO,
20288 		.block_erasers	=
20289 		{
20290 			{
20291 				.eraseblocks = { {4 * 1024, 8192} },
20292 				.block_erase = SPI_BLOCK_ERASE_21,
20293 			}, {
20294 				.eraseblocks = { {4 * 1024, 8192} },
20295 				.block_erase = SPI_BLOCK_ERASE_20,
20296 			}, {
20297 				.eraseblocks = { {32 * 1024, 1024} },
20298 				.block_erase = SPI_BLOCK_ERASE_52,
20299 			}, {
20300 				.eraseblocks = { {64 * 1024, 512} },
20301 				.block_erase = SPI_BLOCK_ERASE_DC,
20302 			}, {
20303 				.eraseblocks = { {64 * 1024, 512} },
20304 				.block_erase = SPI_BLOCK_ERASE_D8,
20305 			}, {
20306 				.eraseblocks = { {32 * 1024 * 1024, 1} },
20307 				.block_erase = SPI_BLOCK_ERASE_60,
20308 			}, {
20309 				.eraseblocks = { {32 * 1024 * 1024, 1} },
20310 				.block_erase = SPI_BLOCK_ERASE_C7,
20311 			}
20312 		},
20313 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD,
20314 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
20315 		.write		= SPI_CHIP_WRITE256,
20316 		.read		= SPI_CHIP_READ,
20317 		.voltage	= {1650, 1950},
20318 	},
20319 
20320 	{
20321 		.vendor		= "Winbond",
20322 		.name		= "W25Q256JW_DTR",
20323 		.bustype	= BUS_SPI,
20324 		.manufacture_id	= WINBOND_NEX_ID,
20325 		.model_id	= WINBOND_NEX_W25Q256_DTR,
20326 		.total_size	= 32768,
20327 		.page_size	= 256,
20328 		/* supports SFDP */
20329 		/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
20330 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA | FEATURE_WRSR2
20331 				  | FEATURE_WRSR3,
20332 		.tested		= TEST_OK_PREWB,
20333 		.probe		= PROBE_SPI_RDID,
20334 		.probe_timing	= TIMING_ZERO,
20335 		.block_erasers	=
20336 		{
20337 			{
20338 				.eraseblocks = { {4 * 1024, 8192} },
20339 				.block_erase = SPI_BLOCK_ERASE_21,
20340 			}, {
20341 				.eraseblocks = { {4 * 1024, 8192} },
20342 				.block_erase = SPI_BLOCK_ERASE_20,
20343 			}, {
20344 				.eraseblocks = { {32 * 1024, 1024} },
20345 				.block_erase = SPI_BLOCK_ERASE_52,
20346 			}, {
20347 				.eraseblocks = { {64 * 1024, 512} },
20348 				.block_erase = SPI_BLOCK_ERASE_DC,
20349 			}, {
20350 				.eraseblocks = { {64 * 1024, 512} },
20351 				.block_erase = SPI_BLOCK_ERASE_D8,
20352 			}, {
20353 				.eraseblocks = { {32 * 1024 * 1024, 1} },
20354 				.block_erase = SPI_BLOCK_ERASE_60,
20355 			}, {
20356 				.eraseblocks = { {32 * 1024 * 1024, 1} },
20357 				.block_erase = SPI_BLOCK_ERASE_C7,
20358 			}
20359 		},
20360 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP3_SRWD,
20361 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
20362 		.write		= SPI_CHIP_WRITE256,
20363 		.read		= SPI_CHIP_READ,
20364 		.voltage	= {1700, 1950},
20365 		.reg_bits	=
20366 		{
20367 			.srp	= {STATUS1, 7, RW},
20368 			.srl	= {STATUS2, 0, RW},
20369 			.bp	= {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}, {STATUS1, 5, RW}},
20370 			.tb	= {STATUS1, 6, RW},
20371 			.cmp	= {STATUS2, 6, RW},
20372 			.wps	= {STATUS3, 2, RW},
20373 		},
20374 		.decode_range	= DECODE_RANGE_SPI25,
20375 	},
20376 
20377 	{
20378 		.vendor		= "Winbond",
20379 		.name		= "W25Q32BV/W25Q32CV/W25Q32DV",
20380 		.bustype	= BUS_SPI,
20381 		.manufacture_id	= WINBOND_NEX_ID,
20382 		.model_id	= WINBOND_NEX_W25Q32_V,
20383 		.total_size	= 4096,
20384 		.page_size	= 256,
20385 		/* supports SFDP */
20386 		/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
20387 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_WRSR_EXT2,
20388 		.tested		= TEST_OK_PREW,
20389 		.probe		= PROBE_SPI_RDID,
20390 		.probe_timing	= TIMING_ZERO,
20391 		.block_erasers	=
20392 		{
20393 			{
20394 				.eraseblocks = { {4 * 1024, 1024} },
20395 				.block_erase = SPI_BLOCK_ERASE_20,
20396 			}, {
20397 				.eraseblocks = { {32 * 1024, 128} },
20398 				.block_erase = SPI_BLOCK_ERASE_52,
20399 			}, {
20400 				.eraseblocks = { {64 * 1024, 64} },
20401 				.block_erase = SPI_BLOCK_ERASE_D8,
20402 			}, {
20403 				.eraseblocks = { {4 * 1024 * 1024, 1} },
20404 				.block_erase = SPI_BLOCK_ERASE_60,
20405 			}, {
20406 				.eraseblocks = { {4 * 1024 * 1024, 1} },
20407 				.block_erase = SPI_BLOCK_ERASE_C7,
20408 			}
20409 		},
20410 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_SRWD_SEC_TB_BP2_WELWIP,
20411 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
20412 		.write		= SPI_CHIP_WRITE256,
20413 		.read		= SPI_CHIP_READ,
20414 		.voltage	= {2700, 3600},
20415 		.reg_bits	=
20416 		{
20417 			.srp    = {STATUS1, 7, RW},
20418 			.srl    = {STATUS2, 0, RW},
20419 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
20420 			.tb     = {STATUS1, 5, RW},
20421 			.sec    = {STATUS1, 6, RW},
20422 			.cmp    = {STATUS2, 6, RW},
20423 		},
20424 		.decode_range	= DECODE_RANGE_SPI25,
20425 	},
20426 
20427 	{
20428 		.vendor		= "Winbond",
20429 		.name		= "W25Q32FV",
20430 		.bustype	= BUS_SPI,
20431 		.manufacture_id	= WINBOND_NEX_ID,
20432 		.model_id	= WINBOND_NEX_W25Q32_V,
20433 		.total_size	= 4096,
20434 		.page_size	= 256,
20435 		/* supports SFDP */
20436 		/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
20437 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI |
20438 				  FEATURE_WRSR_EXT2 | FEATURE_WRSR2 | FEATURE_WRSR3,
20439 		.tested		= TEST_OK_PREW,
20440 		.probe		= PROBE_SPI_RDID,
20441 		.probe_timing	= TIMING_ZERO,
20442 		.block_erasers	=
20443 		{
20444 			{
20445 				.eraseblocks = { {4 * 1024, 1024} },
20446 				.block_erase = SPI_BLOCK_ERASE_20,
20447 			}, {
20448 				.eraseblocks = { {32 * 1024, 128} },
20449 				.block_erase = SPI_BLOCK_ERASE_52,
20450 			}, {
20451 				.eraseblocks = { {64 * 1024, 64} },
20452 				.block_erase = SPI_BLOCK_ERASE_D8,
20453 			}, {
20454 				.eraseblocks = { {4 * 1024 * 1024, 1} },
20455 				.block_erase = SPI_BLOCK_ERASE_60,
20456 			}, {
20457 				.eraseblocks = { {4 * 1024 * 1024, 1} },
20458 				.block_erase = SPI_BLOCK_ERASE_C7,
20459 			}
20460 		},
20461 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_SRWD_SEC_TB_BP2_WELWIP,
20462 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
20463 		.write		= SPI_CHIP_WRITE256,
20464 		.read		= SPI_CHIP_READ,
20465 		.voltage	= {2700, 3600},
20466 		.reg_bits	=
20467 		{
20468 			.srp    = {STATUS1, 7, RW},
20469 			.srl    = {STATUS2, 0, RW},
20470 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
20471 			.tb     = {STATUS1, 5, RW},
20472 			.sec    = {STATUS1, 6, RW},
20473 			.cmp    = {STATUS2, 6, RW},
20474 			.wps    = {STATUS3, 2, RW},
20475 		},
20476 		.decode_range	= DECODE_RANGE_SPI25,
20477 	},
20478 
20479 	{
20480 		.vendor		= "Winbond",
20481 		.name		= "W25Q32JV_M",
20482 		.bustype	= BUS_SPI,
20483 		.manufacture_id	= WINBOND_NEX_ID,
20484 		.model_id	= WINBOND_NEX_W25Q32JV_M,
20485 		.total_size	= 4096,
20486 		.page_size	= 256,
20487 		/* supports SFDP */
20488 		/* OTP: 3x 256B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
20489 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI |
20490 				  FEATURE_WRSR2 | FEATURE_WRSR3,
20491 		.tested		= TEST_OK_PREW,
20492 		.probe		= PROBE_SPI_RDID,
20493 		.probe_timing	= TIMING_ZERO,
20494 		.block_erasers	=
20495 		{
20496 			{
20497 				.eraseblocks = { {4 * 1024, 1024} },
20498 				.block_erase = SPI_BLOCK_ERASE_20,
20499 			}, {
20500 				.eraseblocks = { {32 * 1024, 128} },
20501 				.block_erase = SPI_BLOCK_ERASE_52,
20502 			}, {
20503 				.eraseblocks = { {64 * 1024, 64} },
20504 				.block_erase = SPI_BLOCK_ERASE_D8,
20505 			}, {
20506 				.eraseblocks = { {4 * 1024 * 1024, 1} },
20507 				.block_erase = SPI_BLOCK_ERASE_60,
20508 			}, {
20509 				.eraseblocks = { {4 * 1024 * 1024, 1} },
20510 				.block_erase = SPI_BLOCK_ERASE_C7,
20511 			}
20512 		},
20513 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_SRWD_SEC_TB_BP2_WELWIP,
20514 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
20515 		.write		= SPI_CHIP_WRITE256,
20516 		.read		= SPI_CHIP_READ,
20517 		.voltage	= {2700, 3600},
20518 		.reg_bits	=
20519 		{
20520 			.srp    = {STATUS1, 7, RW},
20521 			.sec    = {STATUS1, 6, RW},
20522 			.tb     = {STATUS1, 5, RW},
20523 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
20524 			.cmp    = {STATUS2, 6, RW},
20525 			.srl    = {STATUS2, 0, RW},
20526 			.wps    = {STATUS3, 2, RW},
20527 		},
20528 		.decode_range	= DECODE_RANGE_SPI25,
20529 	},
20530 
20531 	{
20532 		.vendor		= "Winbond",
20533 		.name		= "W25Q32JV",
20534 		.bustype	= BUS_SPI,
20535 		.manufacture_id	= WINBOND_NEX_ID,
20536 		.model_id	= WINBOND_NEX_W25Q32_V,
20537 		.total_size	= 4096,
20538 		.page_size	= 256,
20539 		/* supports SFDP */
20540 		/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
20541 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP |
20542 				  FEATURE_WRSR_EXT2 | FEATURE_WRSR2 | FEATURE_WRSR3,
20543 		.tested		= TEST_OK_PREW,
20544 		.probe		= PROBE_SPI_RDID,
20545 		.probe_timing	= TIMING_ZERO,
20546 		.block_erasers	=
20547 		{
20548 			{
20549 				.eraseblocks = { {4 * 1024, 1024} },
20550 				.block_erase = SPI_BLOCK_ERASE_20,
20551 			}, {
20552 				.eraseblocks = { {32 * 1024, 128} },
20553 				.block_erase = SPI_BLOCK_ERASE_52,
20554 			}, {
20555 				.eraseblocks = { {64 * 1024, 64} },
20556 				.block_erase = SPI_BLOCK_ERASE_D8,
20557 			}, {
20558 				.eraseblocks = { {4 * 1024 * 1024, 1} },
20559 				.block_erase = SPI_BLOCK_ERASE_60,
20560 			}, {
20561 				.eraseblocks = { {4 * 1024 * 1024, 1} },
20562 				.block_erase = SPI_BLOCK_ERASE_C7,
20563 			}
20564 		},
20565 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_SRWD_SEC_TB_BP2_WELWIP,
20566 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
20567 		.write		= SPI_CHIP_WRITE256,
20568 		.read		= SPI_CHIP_READ,
20569 		.voltage	= {2700, 3600},
20570 		.reg_bits	=
20571 		{
20572 			.srp    = {STATUS1, 7, RW},
20573 			.srl    = {STATUS2, 0, RW},
20574 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
20575 			.tb     = {STATUS1, 5, RW},
20576 			.sec    = {STATUS1, 6, RW},
20577 			.cmp    = {STATUS2, 6, RW},
20578 			.wps    = {STATUS3, 2, RW},
20579 		},
20580 		.decode_range	= DECODE_RANGE_SPI25,
20581 	},
20582 
20583 	{
20584 		.vendor		= "Winbond",
20585 		.name		= "W25Q32BW/W25Q32CW/W25Q32DW",
20586 		.bustype	= BUS_SPI,
20587 		.manufacture_id	= WINBOND_NEX_ID,
20588 		.model_id	= WINBOND_NEX_W25Q32_W,
20589 		.total_size	= 4096,
20590 		.page_size	= 256,
20591 		/* OTP: 1024B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
20592 		/* QPI enable 0x38, disable 0xFF */
20593 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI | FEATURE_WRSR_EXT2,
20594 		.tested		= TEST_OK_PREW,
20595 		.probe		= PROBE_SPI_RDID,
20596 		.probe_timing	= TIMING_ZERO,
20597 		.block_erasers	=
20598 		{
20599 			{
20600 				.eraseblocks = { {4 * 1024, 1024} },
20601 				.block_erase = SPI_BLOCK_ERASE_20,
20602 			}, {
20603 				.eraseblocks = { {32 * 1024, 128} },
20604 				.block_erase = SPI_BLOCK_ERASE_52,
20605 			}, {
20606 				.eraseblocks = { {64 * 1024, 64} },
20607 				.block_erase = SPI_BLOCK_ERASE_D8,
20608 			}, {
20609 				.eraseblocks = { {4 * 1024 * 1024, 1} },
20610 				.block_erase = SPI_BLOCK_ERASE_60,
20611 			}, {
20612 				.eraseblocks = { {4 * 1024 * 1024, 1} },
20613 				.block_erase = SPI_BLOCK_ERASE_C7,
20614 			}
20615 		},
20616 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_SRWD_SEC_TB_BP2_WELWIP,
20617 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
20618 		.write		= SPI_CHIP_WRITE256,
20619 		.read		= SPI_CHIP_READ,
20620 		.voltage	= {1700, 1950}, /* Fast read (0x0B) and multi I/O supported */
20621 		.reg_bits	=
20622 		{
20623 			.srp    = {STATUS1, 7, RW},
20624 			.srl    = {STATUS2, 0, RW},
20625 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
20626 			.tb     = {STATUS1, 5, RW},
20627 			.sec    = {STATUS1, 6, RW},
20628 			.cmp    = {STATUS2, 6, RW},
20629 		},
20630 		.decode_range	= DECODE_RANGE_SPI25,
20631 	},
20632 
20633 	{
20634 		.vendor		= "Winbond",
20635 		.name		= "W25Q32FW",
20636 		.bustype	= BUS_SPI,
20637 		.manufacture_id	= WINBOND_NEX_ID,
20638 		.model_id	= WINBOND_NEX_W25Q32_W,
20639 		.total_size	= 4096,
20640 		.page_size	= 256,
20641 		/* OTP: 768B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
20642 		/* QPI enable 0x38, disable 0xFF */
20643 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI |
20644 				  FEATURE_WRSR_EXT2 | FEATURE_WRSR2 | FEATURE_WRSR3,
20645 		.tested		= TEST_OK_PREW,
20646 		.probe		= PROBE_SPI_RDID,
20647 		.probe_timing	= TIMING_ZERO,
20648 		.block_erasers	=
20649 		{
20650 			{
20651 				.eraseblocks = { {4 * 1024, 1024} },
20652 				.block_erase = SPI_BLOCK_ERASE_20,
20653 			}, {
20654 				.eraseblocks = { {32 * 1024, 128} },
20655 				.block_erase = SPI_BLOCK_ERASE_52,
20656 			}, {
20657 				.eraseblocks = { {64 * 1024, 64} },
20658 				.block_erase = SPI_BLOCK_ERASE_D8,
20659 			}, {
20660 				.eraseblocks = { {4 * 1024 * 1024, 1} },
20661 				.block_erase = SPI_BLOCK_ERASE_60,
20662 			}, {
20663 				.eraseblocks = { {4 * 1024 * 1024, 1} },
20664 				.block_erase = SPI_BLOCK_ERASE_C7,
20665 			}
20666 		},
20667 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_SRWD_SEC_TB_BP2_WELWIP,
20668 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
20669 		.write		= SPI_CHIP_WRITE256,
20670 		.read		= SPI_CHIP_READ,
20671 		.voltage	= {1700, 1950}, /* Fast read (0x0B) and multi I/O supported */
20672 		.reg_bits	=
20673 		{
20674 			.srp    = {STATUS1, 7, RW},
20675 			.srl    = {STATUS2, 0, RW},
20676 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
20677 			.tb     = {STATUS1, 5, RW},
20678 			.sec    = {STATUS1, 6, RW},
20679 			.cmp    = {STATUS2, 6, RW},
20680 			.wps    = {STATUS3, 2, RW},
20681 		},
20682 		.decode_range	= DECODE_RANGE_SPI25,
20683 	},
20684 
20685 	{
20686 		.vendor		= "Winbond",
20687 		.name		= "W25Q32JW...Q",
20688 		.bustype	= BUS_SPI,
20689 		.manufacture_id	= WINBOND_NEX_ID,
20690 		.model_id	= WINBOND_NEX_W25Q32_W,
20691 		.total_size	= 4096,
20692 		.page_size	= 256,
20693 		/* OTP: 768B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
20694 		/* QPI enable 0x38, disable 0xFF */
20695 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP |
20696 				  FEATURE_WRSR_EXT2 | FEATURE_WRSR2 | FEATURE_WRSR3,
20697 		.tested		= TEST_OK_PREW,
20698 		.probe		= PROBE_SPI_RDID,
20699 		.probe_timing	= TIMING_ZERO,
20700 		.block_erasers	=
20701 		{
20702 			{
20703 				.eraseblocks = { {4 * 1024, 1024} },
20704 				.block_erase = SPI_BLOCK_ERASE_20,
20705 			}, {
20706 				.eraseblocks = { {32 * 1024, 128} },
20707 				.block_erase = SPI_BLOCK_ERASE_52,
20708 			}, {
20709 				.eraseblocks = { {64 * 1024, 64} },
20710 				.block_erase = SPI_BLOCK_ERASE_D8,
20711 			}, {
20712 				.eraseblocks = { {4 * 1024 * 1024, 1} },
20713 				.block_erase = SPI_BLOCK_ERASE_60,
20714 			}, {
20715 				.eraseblocks = { {4 * 1024 * 1024, 1} },
20716 				.block_erase = SPI_BLOCK_ERASE_C7,
20717 			}
20718 		},
20719 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_SRWD_SEC_TB_BP2_WELWIP,
20720 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
20721 		.write		= SPI_CHIP_WRITE256,
20722 		.read		= SPI_CHIP_READ,
20723 		.voltage	= {1700, 1950}, /* Fast read (0x0B) and multi I/O supported */
20724 		.reg_bits	=
20725 		{
20726 			.srp    = {STATUS1, 7, RW},
20727 			.srl    = {STATUS2, 0, RW},
20728 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
20729 			.tb     = {STATUS1, 5, RW},
20730 			.sec    = {STATUS1, 6, RW},
20731 			.cmp    = {STATUS2, 6, RW},
20732 			.wps    = {STATUS3, 2, RW},
20733 		},
20734 		.decode_range	= DECODE_RANGE_SPI25,
20735 	},
20736 
20737 	{
20738 		.vendor		= "Winbond",
20739 		.name		= "W25Q32JW...M",
20740 		.bustype	= BUS_SPI,
20741 		.manufacture_id	= WINBOND_NEX_ID,
20742 		.model_id	= WINBOND_NEX_W25Q32JW_M,
20743 		.total_size	= 4096,
20744 		.page_size	= 256,
20745 		/* OTP: 768B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
20746 		/* QPI enable 0x38, disable 0xFF */
20747 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP |
20748 				  FEATURE_WRSR2 | FEATURE_WRSR3 | FEATURE_WRSR_EXT2,
20749 		.tested		= TEST_OK_PREW,
20750 		.probe		= PROBE_SPI_RDID,
20751 		.probe_timing	= TIMING_ZERO,
20752 		.block_erasers	=
20753 		{
20754 			{
20755 				.eraseblocks = { {4 * 1024, 1024} },
20756 				.block_erase = SPI_BLOCK_ERASE_20,
20757 			}, {
20758 				.eraseblocks = { {32 * 1024, 128} },
20759 				.block_erase = SPI_BLOCK_ERASE_52,
20760 			}, {
20761 				.eraseblocks = { {64 * 1024, 64} },
20762 				.block_erase = SPI_BLOCK_ERASE_D8,
20763 			}, {
20764 				.eraseblocks = { {4 * 1024 * 1024, 1} },
20765 				.block_erase = SPI_BLOCK_ERASE_60,
20766 			}, {
20767 				.eraseblocks = { {4 * 1024 * 1024, 1} },
20768 				.block_erase = SPI_BLOCK_ERASE_C7,
20769 			}
20770 		},
20771 		.printlock      = SPI_PRETTYPRINT_STATUS_REGISTER_SRWD_SEC_TB_BP2_WELWIP,
20772 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD,
20773 		.write		= SPI_CHIP_WRITE256,
20774 		.read		= SPI_CHIP_READ,
20775 		.voltage	= {1700, 1950},
20776 		.reg_bits	=
20777 		{
20778 			.srp    = {STATUS1, 7, RW},
20779 			.srl    = {STATUS2, 0, RW},
20780 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
20781 			.tb     = {STATUS1, 5, RW},
20782 			.sec    = {STATUS1, 6, RW},
20783 			.cmp    = {STATUS2, 6, RW},
20784 			.wps    = {STATUS3, 2, RW},
20785 		},
20786 		.decode_range	= DECODE_RANGE_SPI25,
20787 	},
20788 
20789 	{
20790 		.vendor		= "Winbond",
20791 		.name		= "W25Q40.V",
20792 		.bustype	= BUS_SPI,
20793 		.manufacture_id	= WINBOND_NEX_ID,
20794 		.model_id	= WINBOND_NEX_W25Q40_V,
20795 		.total_size	= 512,
20796 		.page_size	= 256,
20797 		/* supports SFDP */
20798 		/* OTP: 756B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
20799 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
20800 		.tested		= TEST_OK_PREW,
20801 		.probe		= PROBE_SPI_RDID,
20802 		.probe_timing	= TIMING_ZERO,
20803 		.block_erasers	=
20804 		{
20805 			{
20806 				.eraseblocks = { {4 * 1024, 128} },
20807 				.block_erase = SPI_BLOCK_ERASE_20,
20808 			}, {
20809 				.eraseblocks = { {32 * 1024, 16} },
20810 				.block_erase = SPI_BLOCK_ERASE_52,
20811 			}, {
20812 				.eraseblocks = { {64 * 1024, 8} },
20813 				.block_erase = SPI_BLOCK_ERASE_D8,
20814 			}, {
20815 				.eraseblocks = { {512 * 1024, 1} },
20816 				.block_erase = SPI_BLOCK_ERASE_60,
20817 			}, {
20818 				.eraseblocks = { {512 * 1024, 1} },
20819 				.block_erase = SPI_BLOCK_ERASE_C7,
20820 			}
20821 		},
20822 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
20823 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
20824 		.write		= SPI_CHIP_WRITE256, /* Multi I/O supported */
20825 		.read		= SPI_CHIP_READ, /* Fast read (0x0B) and multi I/O supported */
20826 		.voltage	= {2700, 3600},
20827 	},
20828 
20829 	{
20830 		.vendor		= "Winbond",
20831 		.name		= "W25Q40BW",
20832 		.bustype	= BUS_SPI,
20833 		.manufacture_id	= WINBOND_NEX_ID,
20834 		.model_id	= WINBOND_NEX_W25Q40BW,
20835 		.total_size	= 512,
20836 		.page_size	= 256,
20837 		/* OTP: 256B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
20838 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
20839 		.tested		= TEST_OK_PREW,
20840 		.probe		= PROBE_SPI_RDID,
20841 		.probe_timing	= TIMING_ZERO,
20842 		.block_erasers	=
20843 		{
20844 			{
20845 				.eraseblocks = { {4 * 1024, 128} },
20846 				.block_erase = SPI_BLOCK_ERASE_20,
20847 			}, {
20848 				.eraseblocks = { {32 * 1024, 16} },
20849 				.block_erase = SPI_BLOCK_ERASE_52,
20850 			}, {
20851 				.eraseblocks = { {64 * 1024, 8} },
20852 				.block_erase = SPI_BLOCK_ERASE_D8,
20853 			}, {
20854 				.eraseblocks = { {512 * 1024, 1} },
20855 				.block_erase = SPI_BLOCK_ERASE_60,
20856 			}, {
20857 				.eraseblocks = { {512 * 1024, 1} },
20858 				.block_erase = SPI_BLOCK_ERASE_C7,
20859 			}
20860 		},
20861 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
20862 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
20863 		.write		= SPI_CHIP_WRITE256,
20864 		.read		= SPI_CHIP_READ,
20865 		.voltage	= {1700, 1950}, /* Fast read (0x0B) and multi I/O supported */
20866 	},
20867 
20868 	{
20869 		.vendor		= "Winbond",
20870 		.name		= "W25Q40EW",
20871 		.bustype	= BUS_SPI,
20872 		.manufacture_id	= WINBOND_NEX_ID,
20873 		.model_id	= WINBOND_NEX_W25Q40EW,
20874 		.total_size	= 512,
20875 		.page_size	= 256,
20876 		/* OTP: 3*256B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
20877 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
20878 		.tested		= TEST_OK_PREW,
20879 		.probe		= PROBE_SPI_RDID,
20880 		.probe_timing	= TIMING_ZERO,
20881 		.block_erasers	=
20882 		{
20883 			{
20884 				.eraseblocks = { {4 * 1024, 128} },
20885 				.block_erase = SPI_BLOCK_ERASE_20,
20886 			}, {
20887 				.eraseblocks = { {32 * 1024, 16} },
20888 				.block_erase = SPI_BLOCK_ERASE_52,
20889 			}, {
20890 				.eraseblocks = { {64 * 1024, 8} },
20891 				.block_erase = SPI_BLOCK_ERASE_D8,
20892 			}, {
20893 				.eraseblocks = { {512 * 1024, 1} },
20894 				.block_erase = SPI_BLOCK_ERASE_60,
20895 			}, {
20896 				.eraseblocks = { {512 * 1024, 1} },
20897 				.block_erase = SPI_BLOCK_ERASE_C7,
20898 			}
20899 		},
20900 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
20901 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
20902 		.write		= SPI_CHIP_WRITE256,
20903 		.read		= SPI_CHIP_READ,
20904 		.voltage	= {1650, 1950}, /* Fast read (0x0B) and multi I/O supported */
20905 	},
20906 
20907 	{
20908 		.vendor		= "Winbond",
20909 		.name		= "W25Q512JV",
20910 		.bustype	= BUS_SPI,
20911 		.manufacture_id	= WINBOND_NEX_ID,
20912 		.model_id	= WINBOND_NEX_W25Q512JV,
20913 		.total_size	= 64 * 1024,
20914 		.page_size	= 256,
20915 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA,
20916 		.tested		= TEST_OK_PREW,
20917 		.probe		= PROBE_SPI_RDID,
20918 		.probe_timing	= TIMING_ZERO,
20919 		.block_erasers	=
20920 		{
20921 			{
20922 				.eraseblocks = { {4 * 1024, 16384} },
20923 				.block_erase = SPI_BLOCK_ERASE_21,
20924 			}, {
20925 				.eraseblocks = { {4 * 1024, 16384} },
20926 				.block_erase = SPI_BLOCK_ERASE_20,
20927 			}, {
20928 				.eraseblocks = { {32 * 1024, 2048} },
20929 				.block_erase = SPI_BLOCK_ERASE_52,
20930 			}, {
20931 				.eraseblocks = { {64 * 1024, 1024} },
20932 				.block_erase = SPI_BLOCK_ERASE_DC,
20933 			}, {
20934 				.eraseblocks = { {64 * 1024, 1024} },
20935 				.block_erase = SPI_BLOCK_ERASE_D8,
20936 			}, {
20937 				.eraseblocks = { {64 * 1024 * 1024, 1} },
20938 				.block_erase = SPI_BLOCK_ERASE_60,
20939 			}, {
20940 				.eraseblocks = { {64 * 1024 * 1024, 1} },
20941 				.block_erase = SPI_BLOCK_ERASE_C7,
20942 			}
20943 		},
20944 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN,
20945 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
20946 		.write		= SPI_CHIP_WRITE256,
20947 		.read		= SPI_CHIP_READ,
20948 		.voltage	= {2700, 3600},
20949 	},
20950 
20951 	{
20952 		.vendor         = "Winbond",
20953 		.name           = "W25Q512NW-IM",
20954 		.bustype        = BUS_SPI,
20955 		.manufacture_id = WINBOND_NEX_ID,
20956 		.model_id       = WINBOND_NEX_W25Q512NW_IM,
20957 		.total_size     = 64 * 1024,
20958 		.page_size      = 256,
20959 		.feature_bits   = FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA  | FEATURE_WRSR2
20960 				  | FEATURE_WRSR3,
20961 		.tested         = TEST_OK_PREWB,
20962 		.probe          = PROBE_SPI_RDID,
20963 		.probe_timing   = TIMING_ZERO,
20964 		.block_erasers  =
20965 		{
20966 			{
20967 				.eraseblocks = { {4 * 1024, 16384} },
20968 				.block_erase = SPI_BLOCK_ERASE_21,
20969 			}, {
20970 				.eraseblocks = { {4 * 1024, 16384} },
20971 				.block_erase = SPI_BLOCK_ERASE_20,
20972 			}, {
20973 				.eraseblocks = { {32 * 1024, 2048} },
20974 				.block_erase = SPI_BLOCK_ERASE_52,
20975 			}, {
20976 				.eraseblocks = { {64 * 1024, 1024} },
20977 				.block_erase = SPI_BLOCK_ERASE_DC,
20978 			}, {
20979 				.eraseblocks = { {64 * 1024, 1024} },
20980 				.block_erase = SPI_BLOCK_ERASE_D8,
20981 			}, {
20982 				.eraseblocks = { {64 * 1024 * 1024, 1} },
20983 				.block_erase = SPI_BLOCK_ERASE_60,
20984 			}, {
20985 				.eraseblocks = { {64 * 1024 * 1024, 1} },
20986 				.block_erase = SPI_BLOCK_ERASE_C7,
20987 			}
20988 		},
20989 		.unlock         = SPI_DISABLE_BLOCKPROTECT,
20990 		.write          = SPI_CHIP_WRITE256,
20991 		.read           = SPI_CHIP_READ,
20992 		.voltage        = {1650, 1950},
20993 		.reg_bits       =
20994 		{
20995 			.srp	= {STATUS1, 7, RW},
20996 			.srl	= {STATUS2, 0, RW},
20997 			.bp	= {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}, {STATUS1, 5, RW}},
20998 			.tb	= {STATUS1, 6, RW},
20999 			.cmp	= {STATUS2, 6, RW},
21000 			.wps	= {STATUS3, 2, RW},
21001 		},
21002 		.decode_range	= DECODE_RANGE_SPI25,
21003 	},
21004 
21005 	{
21006 		.vendor		= "Winbond",
21007 		.name		= "W25Q64BV/W25Q64CV/W25Q64FV",
21008 		.bustype	= BUS_SPI,
21009 		.manufacture_id	= WINBOND_NEX_ID,
21010 		.model_id	= WINBOND_NEX_W25Q64_V,
21011 		.total_size	= 8192,
21012 		.page_size	= 256,
21013 		/* supports SFDP */
21014 		/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
21015 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_WRSR2,
21016 		.tested		= TEST_OK_PREWB,
21017 		.probe		= PROBE_SPI_RDID,
21018 		.probe_timing	= TIMING_ZERO,
21019 		.block_erasers	=
21020 		{
21021 			{
21022 				.eraseblocks = { {4 * 1024, 2048} },
21023 				.block_erase = SPI_BLOCK_ERASE_20,
21024 			}, {
21025 				.eraseblocks = { {32 * 1024, 256} },
21026 				.block_erase = SPI_BLOCK_ERASE_52,
21027 			}, {
21028 				.eraseblocks = { {64 * 1024, 128} },
21029 				.block_erase = SPI_BLOCK_ERASE_D8,
21030 			}, {
21031 				.eraseblocks = { {8 * 1024 * 1024, 1} },
21032 				.block_erase = SPI_BLOCK_ERASE_60,
21033 			}, {
21034 				.eraseblocks = { {8 * 1024 * 1024, 1} },
21035 				.block_erase = SPI_BLOCK_ERASE_C7,
21036 			}
21037 		},
21038 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_SRWD_SEC_TB_BP2_WELWIP,
21039 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
21040 		.write		= SPI_CHIP_WRITE256,
21041 		.read		= SPI_CHIP_READ,
21042 		.voltage	= {2700, 3600},
21043 		.reg_bits	=
21044 		{
21045 			.srp	= {STATUS1, 7, RW},
21046 			.srl	= {STATUS2, 0, RW},
21047 			.bp	= {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
21048 			.tb	= {STATUS1, 5, RW},
21049 			.sec	= {STATUS1, 6, RW},
21050 			.cmp	= {STATUS2, 6, RW},
21051 		},
21052 		.decode_range	= DECODE_RANGE_SPI25,
21053 	},
21054 
21055 	{
21056 		.vendor		= "Winbond",
21057 		.name		= "W25Q64JV-.Q",
21058 		.bustype	= BUS_SPI,
21059 		.manufacture_id	= WINBOND_NEX_ID,
21060 		.model_id	= WINBOND_NEX_W25Q64_V,
21061 		.total_size	= 8192,
21062 		.page_size	= 256,
21063 		/* supports SFDP */
21064 		/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
21065 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP |
21066 				  FEATURE_WRSR_EXT2 | FEATURE_WRSR2 | FEATURE_WRSR3,
21067 		.tested		= TEST_OK_PREW,
21068 		.probe		= PROBE_SPI_RDID,
21069 		.probe_timing	= TIMING_ZERO,
21070 		.block_erasers	=
21071 		{
21072 			{
21073 				.eraseblocks = { {4 * 1024, 2048} },
21074 				.block_erase = SPI_BLOCK_ERASE_20,
21075 			}, {
21076 				.eraseblocks = { {32 * 1024, 256} },
21077 				.block_erase = SPI_BLOCK_ERASE_52,
21078 			}, {
21079 				.eraseblocks = { {64 * 1024, 128} },
21080 				.block_erase = SPI_BLOCK_ERASE_D8,
21081 			}, {
21082 				.eraseblocks = { {8 * 1024 * 1024, 1} },
21083 				.block_erase = SPI_BLOCK_ERASE_60,
21084 			}, {
21085 				.eraseblocks = { {8 * 1024 * 1024, 1} },
21086 				.block_erase = SPI_BLOCK_ERASE_C7,
21087 			}
21088 		},
21089 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
21090 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
21091 		.write		= SPI_CHIP_WRITE256,
21092 		.read		= SPI_CHIP_READ,
21093 		.voltage	= {2700, 3600},
21094 		.reg_bits	=
21095 		{
21096 			.srp	= {STATUS1, 7, RW},
21097 			.srl	= {STATUS2, 0, RW},
21098 			.bp	= {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
21099 			.tb	= {STATUS1, 5, RW},
21100 			.sec	= {STATUS1, 6, RW},
21101 			.cmp	= {STATUS2, 6, RW},
21102 			.wps	= {STATUS3, 2, RW},
21103 		},
21104 		.decode_range	= DECODE_RANGE_SPI25,
21105 	},
21106 
21107 	{
21108 		.vendor		= "Winbond",
21109 		.name		= "W25Q64JV-.M",
21110 		.bustype	= BUS_SPI,
21111 		.manufacture_id	= WINBOND_NEX_ID,
21112 		.model_id	= WINBOND_NEX_W25Q64JV,
21113 		.total_size	= 8192,
21114 		.page_size	= 256,
21115 		/* supports SFDP */
21116 		/* QPI enable 0x38 */
21117 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
21118 		.tested		= TEST_OK_PREW,
21119 		.probe		= PROBE_SPI_RDID,
21120 		.probe_timing	= TIMING_ZERO,
21121 		.block_erasers	=
21122 		{
21123 			{
21124 				.eraseblocks = { {4 * 1024, 2048} },
21125 				.block_erase = SPI_BLOCK_ERASE_20,
21126 			}, {
21127 				.eraseblocks = { {32 * 1024, 256} },
21128 				.block_erase = SPI_BLOCK_ERASE_52,
21129 			}, {
21130 				.eraseblocks = { {64 * 1024, 128} },
21131 				.block_erase = SPI_BLOCK_ERASE_D8,
21132 			}, {
21133 				.eraseblocks = { {8 * 1024 * 1024, 1} },
21134 				.block_erase = SPI_BLOCK_ERASE_60,
21135 			}, {
21136 				.eraseblocks = { {8 * 1024 * 1024, 1} },
21137 				.block_erase = SPI_BLOCK_ERASE_C7,
21138 			}
21139 		},
21140 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_TB_BPL,
21141 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP2_SRWD,
21142 		.write		= SPI_CHIP_WRITE256,
21143 		.read		= SPI_CHIP_READ,
21144 		.voltage	= {2700, 3600},
21145 	},
21146 
21147 	{
21148 		.vendor		= "Winbond",
21149 		.name		= "W25Q64.W",
21150 		.bustype	= BUS_SPI,
21151 		.manufacture_id	= WINBOND_NEX_ID,
21152 		.model_id	= WINBOND_NEX_W25Q64_W,
21153 		.total_size	= 8192,
21154 		.page_size	= 256,
21155 		/* OTP: 256B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
21156 		/* QPI enable 0x38, disable 0xFF */
21157 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI | FEATURE_WRSR2,
21158 		.tested		= TEST_OK_PREWB,
21159 		.probe		= PROBE_SPI_RDID,
21160 		.probe_timing	= TIMING_ZERO,
21161 		.block_erasers	=
21162 		{
21163 			{
21164 				.eraseblocks = { {4 * 1024, 2048} },
21165 				.block_erase = SPI_BLOCK_ERASE_20,
21166 			}, {
21167 				.eraseblocks = { {32 * 1024, 256} },
21168 				.block_erase = SPI_BLOCK_ERASE_52,
21169 			}, {
21170 				.eraseblocks = { {64 * 1024, 128} },
21171 				.block_erase = SPI_BLOCK_ERASE_D8,
21172 			}, {
21173 				.eraseblocks = { {8 * 1024 * 1024, 1} },
21174 				.block_erase = SPI_BLOCK_ERASE_60,
21175 			}, {
21176 				.eraseblocks = { {8 * 1024 * 1024, 1} },
21177 				.block_erase = SPI_BLOCK_ERASE_C7,
21178 			}
21179 		},
21180 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_SRWD_SEC_TB_BP2_WELWIP,
21181 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
21182 		.write		= SPI_CHIP_WRITE256,
21183 		.read		= SPI_CHIP_READ,
21184 		.voltage	= {1700, 1950}, /* Fast read (0x0B) and multi I/O supported */
21185 		.reg_bits	=
21186 		{
21187 			.srp    = {STATUS1, 7, RW},
21188 			.srl    = {STATUS2, 0, RW},
21189 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
21190 			.tb     = {STATUS1, 5, RW},
21191 			.sec    = {STATUS1, 6, RW},
21192 			.cmp    = {STATUS2, 6, RW},
21193 		},
21194 		.decode_range	= DECODE_RANGE_SPI25,
21195 	},
21196 
21197 	{
21198 		.vendor		= "Winbond",
21199 		.name		= "W25Q64JW...M",
21200 		.bustype	= BUS_SPI,
21201 		.manufacture_id	= WINBOND_NEX_ID,
21202 		.model_id	= WINBOND_NEX_W25Q64JW_M,
21203 		.total_size	= 8192,
21204 		.page_size	= 256,
21205 		/* OTP: 256B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
21206 		/* QPI enable 0x38, disable 0xFF */
21207 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI | FEATURE_WRSR2 | FEATURE_WRSR3,
21208 		.tested		= TEST_OK_PREW,
21209 		.probe		= PROBE_SPI_RDID,
21210 		.probe_timing	= TIMING_ZERO,
21211 		.block_erasers	=
21212 		{
21213 			{
21214 				.eraseblocks = { {4 * 1024, 2048} },
21215 				.block_erase = SPI_BLOCK_ERASE_20,
21216 			}, {
21217 				.eraseblocks = { {32 * 1024, 256} },
21218 				.block_erase = SPI_BLOCK_ERASE_52,
21219 			}, {
21220 				.eraseblocks = { {64 * 1024, 128} },
21221 				.block_erase = SPI_BLOCK_ERASE_D8,
21222 			}, {
21223 				.eraseblocks = { {8 * 1024 * 1024, 1} },
21224 				.block_erase = SPI_BLOCK_ERASE_60,
21225 			}, {
21226 				.eraseblocks = { {8 * 1024 * 1024, 1} },
21227 				.block_erase = SPI_BLOCK_ERASE_C7,
21228 			}
21229 		},
21230 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_SRWD_SEC_TB_BP2_WELWIP,
21231 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
21232 		.write		= SPI_CHIP_WRITE256,
21233 		.read		= SPI_CHIP_READ,
21234 		.voltage	= {1700, 1950}, /* Fast read (0x0B) and multi I/O supported */
21235 		.reg_bits	=
21236 		{
21237 			.srp    = {STATUS1, 7, RW},
21238 			.srl    = {STATUS2, 0, RW},
21239 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
21240 			.tb     = {STATUS1, 5, RW},
21241 			.sec    = {STATUS1, 6, RW},
21242 			.cmp    = {STATUS2, 6, RW},
21243 			.wps	= {STATUS3, 2, RW},
21244 		},
21245 		.decode_range	= DECODE_RANGE_SPI25,
21246 	},
21247 
21248 	{
21249 		.vendor		= "Winbond",
21250 		.name		= "W25Q80.V",
21251 		.bustype	= BUS_SPI,
21252 		.manufacture_id	= WINBOND_NEX_ID,
21253 		.model_id	= WINBOND_NEX_W25Q80_V,
21254 		.total_size	= 1024,
21255 		.page_size	= 256,
21256 		/* supports SFDP */
21257 		/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
21258 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
21259 		.tested		= TEST_OK_PREW,
21260 		.probe		= PROBE_SPI_RDID,
21261 		.probe_timing	= TIMING_ZERO,
21262 		.block_erasers	=
21263 		{
21264 			{
21265 				.eraseblocks = { {4 * 1024, 256} },
21266 				.block_erase = SPI_BLOCK_ERASE_20,
21267 			}, {
21268 				.eraseblocks = { {32 * 1024, 32} },
21269 				.block_erase = SPI_BLOCK_ERASE_52,
21270 			}, {
21271 				.eraseblocks = { {64 * 1024, 16} },
21272 				.block_erase = SPI_BLOCK_ERASE_D8,
21273 			}, {
21274 				.eraseblocks = { {1024 * 1024, 1} },
21275 				.block_erase = SPI_BLOCK_ERASE_60,
21276 			}, {
21277 				.eraseblocks = { {1024 * 1024, 1} },
21278 				.block_erase = SPI_BLOCK_ERASE_C7,
21279 			}
21280 		},
21281 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
21282 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
21283 		.write		= SPI_CHIP_WRITE256,
21284 		.read		= SPI_CHIP_READ,
21285 		.voltage	= {2700, 3600},
21286 	},
21287 
21288 	{
21289 		.vendor		= "Winbond",
21290 		.name		= "W25Q80BW",
21291 		.bustype	= BUS_SPI,
21292 		.manufacture_id	= WINBOND_NEX_ID,
21293 		.model_id	= WINBOND_NEX_W25Q80BW,
21294 		.total_size	= 1024,
21295 		.page_size	= 256,
21296 		/* OTP: 256B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
21297 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
21298 		.tested		= TEST_OK_PREW,
21299 		.probe		= PROBE_SPI_RDID,
21300 		.probe_timing	= TIMING_ZERO,
21301 		.block_erasers	=
21302 		{
21303 			{
21304 				.eraseblocks = { {4 * 1024, 256} },
21305 				.block_erase = SPI_BLOCK_ERASE_20,
21306 			}, {
21307 				.eraseblocks = { {32 * 1024, 32} },
21308 				.block_erase = SPI_BLOCK_ERASE_52,
21309 			}, {
21310 				.eraseblocks = { {64 * 1024, 16} },
21311 				.block_erase = SPI_BLOCK_ERASE_D8,
21312 			}, {
21313 				.eraseblocks = { {1 * 1024 * 1024, 1} },
21314 				.block_erase = SPI_BLOCK_ERASE_60,
21315 			}, {
21316 				.eraseblocks = { {1 * 1024 * 1024, 1} },
21317 				.block_erase = SPI_BLOCK_ERASE_C7,
21318 			}
21319 		},
21320 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
21321 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
21322 		.write		= SPI_CHIP_WRITE256,
21323 		.read		= SPI_CHIP_READ,
21324 		.voltage	= {1700, 1950}, /* Fast read (0x0B) and multi I/O supported */
21325 	},
21326 
21327 	{
21328 		.vendor		= "Winbond",
21329 		.name		= "W25Q80EW",
21330 		.bustype	= BUS_SPI,
21331 		.manufacture_id	= WINBOND_NEX_ID,
21332 		.model_id	= WINBOND_NEX_W25Q80EW,
21333 		.total_size	= 1024,
21334 		.page_size	= 256,
21335 		/* OTP: 3*256B total; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
21336 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP,
21337 		.tested		= TEST_OK_PREW,
21338 		.probe		= PROBE_SPI_RDID,
21339 		.probe_timing	= TIMING_ZERO,
21340 		.block_erasers	=
21341 		{
21342 			{
21343 				.eraseblocks = { {4 * 1024, 256} },
21344 				.block_erase = SPI_BLOCK_ERASE_20,
21345 			}, {
21346 				.eraseblocks = { {32 * 1024, 32} },
21347 				.block_erase = SPI_BLOCK_ERASE_52,
21348 			}, {
21349 				.eraseblocks = { {64 * 1024, 16} },
21350 				.block_erase = SPI_BLOCK_ERASE_D8,
21351 			}, {
21352 				.eraseblocks = { {1 * 1024 * 1024, 1} },
21353 				.block_erase = SPI_BLOCK_ERASE_60,
21354 			}, {
21355 				.eraseblocks = { {1 * 1024 * 1024, 1} },
21356 				.block_erase = SPI_BLOCK_ERASE_C7,
21357 			}
21358 		},
21359 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
21360 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
21361 		.write		= SPI_CHIP_WRITE256,
21362 		.read		= SPI_CHIP_READ,
21363 		.voltage	= {1650, 1950}, /* Fast read (0x0B) and multi I/O supported */
21364 	},
21365 
21366 	{
21367 		.vendor		= "Winbond",
21368 		.name		= "W25X05",
21369 		.bustype	= BUS_SPI,
21370 		.manufacture_id	= WINBOND_NEX_ID,
21371 		.model_id	= WINBOND_NEX_W25X05,
21372 		.total_size	= 64,
21373 		.page_size	= 256,
21374 		.feature_bits	= FEATURE_WRSR_WREN,
21375 		.tested		= TEST_OK_PREW,
21376 		.probe		= PROBE_SPI_RDID,
21377 		.probe_timing	= TIMING_ZERO,
21378 		.block_erasers	=
21379 		{
21380 			{
21381 				.eraseblocks = { {4 * 1024, 16} },
21382 				.block_erase = SPI_BLOCK_ERASE_20,
21383 			}, {
21384 				.eraseblocks = { {32 * 1024, 2} },
21385 				.block_erase = SPI_BLOCK_ERASE_52,
21386 			}, {
21387 				.eraseblocks = { {64 * 1024, 1} },
21388 				.block_erase = SPI_BLOCK_ERASE_D8,
21389 			}
21390 		},
21391 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN,
21392 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
21393 		.write		= SPI_CHIP_WRITE256,
21394 		.read		= SPI_CHIP_READ,
21395 		.voltage	= {2300, 3600},
21396 		.reg_bits	=
21397 		{
21398 			/* W25X05 is single 64KiB block without any smaller WP granularity */
21399 			/* According to datasheet W25X05 has 2 BP bits, any non-zero value protects ALL.*/
21400 			.srp    = {STATUS1, 7, RW},
21401 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}},
21402 		},
21403 		.decode_range	= DECODE_RANGE_SPI25,
21404 	},
21405 
21406 	{
21407 		.vendor		= "Winbond",
21408 		.name		= "W25X10",
21409 		.bustype	= BUS_SPI,
21410 		.manufacture_id	= WINBOND_NEX_ID,
21411 		.model_id	= WINBOND_NEX_W25X10,
21412 		.total_size	= 128,
21413 		.page_size	= 256,
21414 		.feature_bits	= FEATURE_WRSR_WREN,
21415 		.tested		= TEST_OK_PREW,
21416 		.probe		= PROBE_SPI_RDID,
21417 		.probe_timing	= TIMING_ZERO,
21418 		.block_erasers	=
21419 		{
21420 			{
21421 				.eraseblocks = { {4 * 1024, 32} },
21422 				.block_erase = SPI_BLOCK_ERASE_20,
21423 			}, {
21424 				.eraseblocks = { {64 * 1024, 2} },
21425 				.block_erase = SPI_BLOCK_ERASE_D8,
21426 			}, {
21427 				.eraseblocks = { {128 * 1024, 1} },
21428 				.block_erase = SPI_BLOCK_ERASE_C7,
21429 			}
21430 		},
21431 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
21432 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
21433 		.write		= SPI_CHIP_WRITE256,
21434 		.read		= SPI_CHIP_READ,
21435 		.voltage	= {2700, 3600},
21436 		.reg_bits	=
21437 		{
21438 			.srp    = {STATUS1, 7, RW},
21439 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}},
21440 			.tb     = {STATUS1, 5, RW},
21441 		},
21442 		.decode_range	= DECODE_RANGE_SPI25,
21443 	},
21444 
21445 	{
21446 		.vendor		= "Winbond",
21447 		.name		= "W25X16",
21448 		.bustype	= BUS_SPI,
21449 		.manufacture_id	= WINBOND_NEX_ID,
21450 		.model_id	= WINBOND_NEX_W25X16,
21451 		.total_size	= 2048,
21452 		.page_size	= 256,
21453 		.feature_bits	= FEATURE_WRSR_WREN,
21454 		.tested		= TEST_OK_PREW,
21455 		.probe		= PROBE_SPI_RDID,
21456 		.probe_timing	= TIMING_ZERO,
21457 		.block_erasers	=
21458 		{
21459 			{
21460 				.eraseblocks = { {4 * 1024, 512} },
21461 				.block_erase = SPI_BLOCK_ERASE_20,
21462 			}, {
21463 				.eraseblocks = { {32 * 1024, 64} },
21464 				.block_erase = SPI_BLOCK_ERASE_52,
21465 			}, {
21466 				.eraseblocks = { {64 * 1024, 32} },
21467 				.block_erase = SPI_BLOCK_ERASE_D8,
21468 			}, {
21469 				.eraseblocks = { {2 * 1024 * 1024, 1} },
21470 				.block_erase = SPI_BLOCK_ERASE_60,
21471 			}, {
21472 				.eraseblocks = { {2 * 1024 * 1024, 1} },
21473 				.block_erase = SPI_BLOCK_ERASE_C7,
21474 			}
21475 		},
21476 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
21477 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
21478 		.write		= SPI_CHIP_WRITE256,
21479 		.read		= SPI_CHIP_READ,
21480 		.voltage	= {2700, 3600},
21481 		.reg_bits	=
21482 		{
21483 			.srp    = {STATUS1, 7, RW},
21484 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
21485 			.tb     = {STATUS1, 5, RW},
21486 		},
21487 		.decode_range	= DECODE_RANGE_SPI25,
21488 	},
21489 
21490 	{
21491 		.vendor		= "Winbond",
21492 		.name		= "W25X20",
21493 		.bustype	= BUS_SPI,
21494 		.manufacture_id	= WINBOND_NEX_ID,
21495 		.model_id	= WINBOND_NEX_W25X20,
21496 		.total_size	= 256,
21497 		.page_size	= 256,
21498 		.feature_bits	= FEATURE_WRSR_WREN,
21499 		.tested		= TEST_OK_PREWB,
21500 		.probe		= PROBE_SPI_RDID,
21501 		.probe_timing	= TIMING_ZERO,
21502 		.block_erasers	=
21503 		{
21504 			{
21505 				.eraseblocks = { {4 * 1024, 64} },
21506 				.block_erase = SPI_BLOCK_ERASE_20,
21507 			}, {
21508 				.eraseblocks = { {64 * 1024, 4} },
21509 				.block_erase = SPI_BLOCK_ERASE_D8,
21510 			}, {
21511 				.eraseblocks = { {256 * 1024, 1} },
21512 				.block_erase = SPI_BLOCK_ERASE_C7,
21513 			}
21514 		},
21515 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
21516 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
21517 		.write		= SPI_CHIP_WRITE256,
21518 		.read		= SPI_CHIP_READ,
21519 		.voltage	= {2700, 3600},
21520 		.reg_bits	=
21521 		{
21522 			.srp    = {STATUS1, 7, RW},
21523 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}},
21524 			.tb     = {STATUS1, 5, RW},
21525 		},
21526 		.decode_range	= DECODE_RANGE_SPI25,
21527 	},
21528 
21529 	{
21530 		.vendor		= "Winbond",
21531 		.name		= "W25X32",
21532 		.bustype	= BUS_SPI,
21533 		.manufacture_id	= WINBOND_NEX_ID,
21534 		.model_id	= WINBOND_NEX_W25X32,
21535 		.total_size	= 4096,
21536 		.page_size	= 256,
21537 		.feature_bits	= FEATURE_WRSR_WREN,
21538 		.tested		= TEST_OK_PREW,
21539 		.probe		= PROBE_SPI_RDID,
21540 		.probe_timing	= TIMING_ZERO,
21541 		.block_erasers	=
21542 		{
21543 			{
21544 				.eraseblocks = { {4 * 1024, 1024} },
21545 				.block_erase = SPI_BLOCK_ERASE_20,
21546 			}, {
21547 				.eraseblocks = { {32 * 1024, 128} },
21548 				.block_erase = SPI_BLOCK_ERASE_52,
21549 			}, {
21550 				.eraseblocks = { {64 * 1024, 64} },
21551 				.block_erase = SPI_BLOCK_ERASE_D8,
21552 			}, {
21553 				.eraseblocks = { {4 * 1024 * 1024, 1} },
21554 				.block_erase = SPI_BLOCK_ERASE_60,
21555 			}, {
21556 				.eraseblocks = { {4 * 1024 * 1024, 1} },
21557 				.block_erase = SPI_BLOCK_ERASE_C7,
21558 			}
21559 		},
21560 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
21561 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
21562 		.write		= SPI_CHIP_WRITE256,
21563 		.read		= SPI_CHIP_READ,
21564 		.voltage	= {2700, 3600},
21565 		.reg_bits	=
21566 		{
21567 			.srp    = {STATUS1, 7, RW},
21568 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
21569 			.tb     = {STATUS1, 5, RW},
21570 		},
21571 		.decode_range	= DECODE_RANGE_SPI25,
21572 	},
21573 
21574 	{
21575 		.vendor		= "Winbond",
21576 		.name		= "W25X40",
21577 		.bustype	= BUS_SPI,
21578 		.manufacture_id	= WINBOND_NEX_ID,
21579 		.model_id	= WINBOND_NEX_W25X40,
21580 		.total_size	= 512,
21581 		.page_size	= 256,
21582 		.feature_bits	= FEATURE_WRSR_WREN,
21583 		.tested		= TEST_OK_PREW,
21584 		.probe		= PROBE_SPI_RDID,
21585 		.probe_timing	= TIMING_ZERO,
21586 		.block_erasers	=
21587 		{
21588 			{
21589 				.eraseblocks = { {4 * 1024, 128} },
21590 				.block_erase = SPI_BLOCK_ERASE_20,
21591 			}, {
21592 				.eraseblocks = { {64 * 1024, 8} },
21593 				.block_erase = SPI_BLOCK_ERASE_D8,
21594 			}, {
21595 				.eraseblocks = { {512 * 1024, 1} },
21596 				.block_erase = SPI_BLOCK_ERASE_C7,
21597 			}
21598 		},
21599 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
21600 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
21601 		.write		= SPI_CHIP_WRITE256,
21602 		.read		= SPI_CHIP_READ,
21603 		.voltage	= {2700, 3600},
21604 		.reg_bits	=
21605 		{
21606 			.srp    = {STATUS1, 7, RW},
21607 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
21608 			.tb     = {STATUS1, 5, RW},
21609 		},
21610 		.decode_range	= DECODE_RANGE_SPI25,
21611 	},
21612 
21613 	{
21614 		.vendor		= "Winbond",
21615 		.name		= "W25X64",
21616 		.bustype	= BUS_SPI,
21617 		.manufacture_id	= WINBOND_NEX_ID,
21618 		.model_id	= WINBOND_NEX_W25X64,
21619 		.total_size	= 8192,
21620 		.page_size	= 256,
21621 		.feature_bits	= FEATURE_WRSR_WREN,
21622 		.tested		= TEST_OK_PREW,
21623 		.probe		= PROBE_SPI_RDID,
21624 		.probe_timing	= TIMING_ZERO,
21625 		.block_erasers	=
21626 		{
21627 			{
21628 				.eraseblocks = { {4 * 1024, 2048} },
21629 				.block_erase = SPI_BLOCK_ERASE_20,
21630 			}, {
21631 				.eraseblocks = { {32 * 1024, 256} },
21632 				.block_erase = SPI_BLOCK_ERASE_52,
21633 			}, {
21634 				.eraseblocks = { {64 * 1024, 128} },
21635 				.block_erase = SPI_BLOCK_ERASE_D8,
21636 			}, {
21637 				.eraseblocks = { {8 * 1024 * 1024, 1} },
21638 				.block_erase = SPI_BLOCK_ERASE_60,
21639 			}, {
21640 				.eraseblocks = { {8 * 1024 * 1024, 1} },
21641 				.block_erase = SPI_BLOCK_ERASE_C7,
21642 			}
21643 		},
21644 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
21645 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
21646 		.write		= SPI_CHIP_WRITE256,
21647 		.read		= SPI_CHIP_READ,
21648 		.voltage	= {2700, 3600},
21649 		.reg_bits	=
21650 		{
21651 			.srp    = {STATUS1, 7, RW},
21652 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
21653 			.tb     = {STATUS1, 5, RW},
21654 		},
21655 		.decode_range	= DECODE_RANGE_SPI25,
21656 	},
21657 
21658 	{
21659 		.vendor		= "Winbond",
21660 		.name		= "W25X80",
21661 		.bustype	= BUS_SPI,
21662 		.manufacture_id	= WINBOND_NEX_ID,
21663 		.model_id	= WINBOND_NEX_W25X80,
21664 		.total_size	= 1024,
21665 		.page_size	= 256,
21666 		.feature_bits	= FEATURE_WRSR_WREN,
21667 		.tested		= TEST_OK_PREW,
21668 		.probe		= PROBE_SPI_RDID,
21669 		.probe_timing	= TIMING_ZERO,
21670 		.block_erasers	=
21671 		{
21672 			{
21673 				.eraseblocks = { {4 * 1024, 256} },
21674 				.block_erase = SPI_BLOCK_ERASE_20,
21675 			}, {
21676 				.eraseblocks = { {64 * 1024, 16} },
21677 				.block_erase = SPI_BLOCK_ERASE_D8,
21678 			}, {
21679 				.eraseblocks = { {1024 * 1024, 1} },
21680 				.block_erase = SPI_BLOCK_ERASE_C7,
21681 			}
21682 		},
21683 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
21684 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
21685 		.write		= SPI_CHIP_WRITE256,
21686 		.read		= SPI_CHIP_READ,
21687 		.voltage	= {2700, 3600},
21688 		.reg_bits	=
21689 		{
21690 			.srp    = {STATUS1, 7, RW},
21691 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
21692 			.tb     = {STATUS1, 5, RW},
21693 		},
21694 		.decode_range	= DECODE_RANGE_SPI25,
21695 	},
21696 
21697 	/* W29EE011, W29EE012, W29C010M, W29C011A do not support probe_jedec according to the datasheet, but it works for newer(?) steppings. */
21698 	{
21699 		.vendor		= "Winbond",
21700 		.name		= "W29C010(M)/W29C011A/W29EE011/W29EE012",
21701 		.bustype	= BUS_PARALLEL,
21702 		.manufacture_id	= WINBOND_ID,
21703 		.model_id	= WINBOND_W29C010,
21704 		.total_size	= 128,
21705 		.page_size	= 128,
21706 		.feature_bits	= FEATURE_LONG_RESET,
21707 		.tested		= TEST_OK_PREW,
21708 		.probe		= PROBE_JEDEC,
21709 		.probe_timing	= 10,		/* used datasheet for the W29C011A */
21710 		.block_erasers	=
21711 		{
21712 			{
21713 				.eraseblocks = { {128 * 1024, 1} },
21714 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
21715 			}
21716 		},
21717 		.write		= WRITE_JEDEC,
21718 		.read		= READ_MEMMAPPED,
21719 	},
21720 
21721 	{
21722 		.vendor		= "Winbond",
21723 		.name		= "W29C010(M)/W29C011A/W29EE011/W29EE012-old",
21724 		.bustype	= BUS_PARALLEL,
21725 		.manufacture_id	= WINBOND_ID,
21726 		.model_id	= WINBOND_W29C010,
21727 		.total_size	= 128,
21728 		.page_size	= 128,
21729 		.feature_bits	= FEATURE_LONG_RESET,
21730 		.tested		= TEST_OK_PREW,
21731 		.probe		= PROBE_W29EE011,
21732 		.probe_timing	= TIMING_IGNORED, /* routine doesn't use probe_timing (w29ee011.c) */
21733 		.block_erasers	=
21734 		{
21735 			{
21736 				.eraseblocks = { {128 * 1024, 1} },
21737 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
21738 			}
21739 		},
21740 		.write		= WRITE_JEDEC,
21741 		.read		= READ_MEMMAPPED,
21742 	},
21743 
21744 	{
21745 		.vendor		= "Winbond",
21746 		.name		= "W29C020(C)/W29C022",
21747 		.bustype	= BUS_PARALLEL,
21748 		.manufacture_id	= WINBOND_ID,
21749 		.model_id	= WINBOND_W29C020,
21750 		.total_size	= 256,
21751 		.page_size	= 128,
21752 		.feature_bits	= FEATURE_LONG_RESET,
21753 		.tested		= TEST_OK_PREW,
21754 		.probe		= PROBE_JEDEC,
21755 		.probe_timing	= 10,
21756 		.block_erasers	=
21757 		{
21758 			{
21759 				.eraseblocks = { {256 * 1024, 1} },
21760 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
21761 			}
21762 		},
21763 		.write		= WRITE_JEDEC,
21764 		.read		= READ_MEMMAPPED,
21765 		.voltage	= {4500, 5500},
21766 	},
21767 
21768 	{
21769 		.vendor		= "Winbond",
21770 		.name		= "W29C040/P",
21771 		.bustype	= BUS_PARALLEL,
21772 		.manufacture_id	= WINBOND_ID,
21773 		.model_id	= WINBOND_W29C040,
21774 		.total_size	= 512,
21775 		.page_size	= 256,
21776 		.feature_bits	= FEATURE_LONG_RESET,
21777 		.tested		= TEST_UNTESTED,
21778 		.probe		= PROBE_JEDEC,
21779 		.probe_timing	= 10,
21780 		.block_erasers	=
21781 		{
21782 			{
21783 				.eraseblocks = { {512 * 1024, 1} },
21784 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
21785 			}
21786 		},
21787 		.write		= WRITE_JEDEC,
21788 		.read		= READ_MEMMAPPED,
21789 		.voltage	= {4500, 5500},
21790 	},
21791 
21792 	{
21793 		.vendor		= "Winbond",
21794 		.name		= "W29C512A/W29EE512",
21795 		.bustype	= BUS_PARALLEL,
21796 		.manufacture_id	= WINBOND_ID,
21797 		.model_id	= WINBOND_W29C512A,
21798 		.total_size	= 64,
21799 		.page_size	= 128,
21800 		.feature_bits	= FEATURE_LONG_RESET,
21801 		.tested		= TEST_OK_PREW,
21802 		.probe		= PROBE_JEDEC,
21803 		.probe_timing	= 10,
21804 		.block_erasers	=
21805 		{
21806 			{
21807 				.eraseblocks = { {64 * 1024, 1} },
21808 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
21809 			}
21810 		},
21811 		.write		= WRITE_JEDEC,
21812 		.read		= READ_MEMMAPPED,
21813 		.voltage	= {4500, 5500},
21814 	},
21815 
21816 	{
21817 		.vendor		= "Winbond",
21818 		.name		= "W29GL032CB",
21819 		.bustype	= BUS_PARALLEL,
21820 		.manufacture_id	= AMD_ID, /* WTF: "Industry Standard compatible Manufacturer ID code of 01h" */
21821 		.model_id	= WINBOND_W29GL032CB,
21822 		.total_size	= 4096,
21823 		.page_size	= 128 * 1024, /* actual page size is 16 */
21824 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
21825 		.tested		= TEST_UNTESTED,
21826 		.probe		= PROBE_JEDEC_29GL,
21827 		.probe_timing	= TIMING_ZERO,
21828 		.block_erasers	=
21829 		{
21830 			{
21831 				.eraseblocks = {
21832 					{8 * 1024, 8},
21833 					{64 * 1024, 63},
21834 				},
21835 				.block_erase = JEDEC_SECTOR_ERASE,
21836 			}, {
21837 				.eraseblocks = { {4 * 1024 * 1024, 1} },
21838 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
21839 			},
21840 		},
21841 		.write		= WRITE_JEDEC1,
21842 		.read		= READ_MEMMAPPED,
21843 		.voltage	= {2700, 3600},
21844 	},
21845 
21846 	{
21847 		.vendor		= "Winbond",
21848 		.name		= "W29GL032CH/L",
21849 		.bustype	= BUS_PARALLEL,
21850 		.manufacture_id	= AMD_ID, /* WTF: "Industry Standard compatible Manufacturer ID code of 01h" */
21851 		.model_id	= WINBOND_W29GL032CHL,
21852 		.total_size	= 4096,
21853 		.page_size	= 128 * 1024, /* actual page size is 16 */
21854 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
21855 		.tested		= TEST_UNTESTED,
21856 		.probe		= PROBE_JEDEC_29GL,
21857 		.probe_timing	= TIMING_ZERO,
21858 		.block_erasers	=
21859 		{
21860 			{
21861 				.eraseblocks = { {64 * 1024, 64} },
21862 				.block_erase = JEDEC_SECTOR_ERASE,
21863 			}, {
21864 				.eraseblocks = { {4 * 1024 * 1024, 1} },
21865 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
21866 			},
21867 		},
21868 		.write		= WRITE_JEDEC1,
21869 		.read		= READ_MEMMAPPED,
21870 		.voltage	= {2700, 3600},
21871 	},
21872 
21873 	{
21874 		.vendor		= "Winbond",
21875 		.name		= "W29GL032CT",
21876 		.bustype	= BUS_PARALLEL,
21877 		.manufacture_id	= AMD_ID, /* WTF: "Industry Standard compatible Manufacturer ID code of 01h" */
21878 		.model_id	= WINBOND_W29GL032CT,
21879 		.total_size	= 4096,
21880 		.page_size	= 128 * 1024, /* actual page size is 16 */
21881 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
21882 		.tested		= TEST_UNTESTED,
21883 		.probe		= PROBE_JEDEC_29GL,
21884 		.probe_timing	= TIMING_ZERO,
21885 		.block_erasers	=
21886 		{
21887 			{
21888 				.eraseblocks = {
21889 					{64 * 1024, 63},
21890 					{8 * 1024, 8},
21891 				},
21892 				.block_erase = JEDEC_SECTOR_ERASE,
21893 			}, {
21894 				.eraseblocks = { {4 * 1024 * 1024, 1} },
21895 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
21896 			},
21897 		},
21898 		.write		= WRITE_JEDEC1,
21899 		.read		= READ_MEMMAPPED,
21900 		.voltage	= {2700, 3600},
21901 	},
21902 
21903 	{
21904 		.vendor		= "Winbond",
21905 		.name		= "W29GL064CB",
21906 		.bustype	= BUS_PARALLEL,
21907 		.manufacture_id	= AMD_ID, /* WTF: "Industry Standard compatible Manufacturer ID code of 01h" */
21908 		.model_id	= WINBOND_W29GL064CB,
21909 		.total_size	= 8192,
21910 		.page_size	= 128 * 1024, /* actual page size is 16 */
21911 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
21912 		.tested		= TEST_UNTESTED,
21913 		.probe		= PROBE_JEDEC_29GL,
21914 		.probe_timing	= TIMING_ZERO,
21915 		.block_erasers	=
21916 		{
21917 			{
21918 				.eraseblocks = {
21919 					{8 * 1024, 8},
21920 					{64 * 1024, 127},
21921 				},
21922 				.block_erase = JEDEC_SECTOR_ERASE,
21923 			}, {
21924 				.eraseblocks = { {8 * 1024 * 1024, 1} },
21925 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
21926 			},
21927 		},
21928 		.write		= WRITE_JEDEC1,
21929 		.read		= READ_MEMMAPPED,
21930 		.voltage	= {2700, 3600},
21931 	},
21932 
21933 	{
21934 		.vendor		= "Winbond",
21935 		.name		= "W29GL064CH/L",
21936 		.bustype	= BUS_PARALLEL,
21937 		.manufacture_id	= AMD_ID, /* WTF: "Industry Standard compatible Manufacturer ID code of 01h" */
21938 		.model_id	= WINBOND_W29GL064CHL,
21939 		.total_size	= 8192,
21940 		.page_size	= 128 * 1024, /* actual page size is 16 */
21941 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
21942 		.tested		= TEST_UNTESTED,
21943 		.probe		= PROBE_JEDEC_29GL,
21944 		.probe_timing	= TIMING_ZERO,
21945 		.block_erasers	=
21946 		{
21947 			{
21948 				.eraseblocks = { {64 * 1024, 128} },
21949 				.block_erase = JEDEC_SECTOR_ERASE,
21950 			}, {
21951 				.eraseblocks = { {8 * 1024 * 1024, 1} },
21952 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
21953 			},
21954 		},
21955 		.write		= WRITE_JEDEC1,
21956 		.read		= READ_MEMMAPPED,
21957 		.voltage	= {2700, 3600},
21958 	},
21959 
21960 	{
21961 		.vendor		= "Winbond",
21962 		.name		= "W29GL064CT",
21963 		.bustype	= BUS_PARALLEL,
21964 		.manufacture_id	= AMD_ID, /* WTF: "Industry Standard compatible Manufacturer ID code of 01h" */
21965 		.model_id	= WINBOND_W29GL064CT,
21966 		.total_size	= 8192,
21967 		.page_size	= 128 * 1024, /* actual page size is 16 */
21968 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
21969 		.tested		= TEST_UNTESTED,
21970 		.probe		= PROBE_JEDEC_29GL,
21971 		.probe_timing	= TIMING_ZERO,
21972 		.block_erasers	=
21973 		{
21974 			{
21975 				.eraseblocks = {
21976 					{64 * 1024, 127},
21977 					{8 * 1024, 8},
21978 				},
21979 				.block_erase = JEDEC_SECTOR_ERASE,
21980 			}, {
21981 				.eraseblocks = { {8 * 1024 * 1024, 1} },
21982 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
21983 			},
21984 		},
21985 		.write		= WRITE_JEDEC1,
21986 		.read		= READ_MEMMAPPED,
21987 		.voltage	= {2700, 3600},
21988 	},
21989 
21990 	{
21991 		.vendor		= "Winbond",
21992 		.name		= "W29GL128C",
21993 		.bustype	= BUS_PARALLEL,
21994 		.manufacture_id	= AMD_ID, /* WTF: "Industry Standard compatible Manufacturer ID code of 01h" */
21995 		.model_id	= WINBOND_W29GL128CHL,
21996 		.total_size	= 16384,
21997 		.page_size	= 128 * 1024, /* actual page size is 16 */
21998 		.feature_bits	= FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
21999 		.tested		= TEST_UNTESTED,
22000 		.probe		= PROBE_JEDEC_29GL,
22001 		.probe_timing	= TIMING_ZERO,
22002 		.block_erasers	=
22003 		{
22004 			{
22005 				.eraseblocks = { {128 * 1024, 128} },
22006 				.block_erase = JEDEC_SECTOR_ERASE,
22007 			}, {
22008 				.eraseblocks = { {16 * 1024 * 1024, 1} },
22009 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
22010 			},
22011 		},
22012 		.write		= WRITE_JEDEC1,
22013 		.read		= READ_MEMMAPPED,
22014 		.voltage	= {2700, 3600},
22015 	},
22016 
22017 	{
22018 		.vendor		= "Winbond",
22019 		.name		= "W39F010",
22020 		.bustype	= BUS_PARALLEL,
22021 		.manufacture_id	= WINBOND_ID,
22022 		.model_id	= WINBOND_W39F010,
22023 		.total_size	= 128,
22024 		.page_size	= 4 * 1024,
22025 		.feature_bits	= FEATURE_EITHER_RESET,
22026 		.tested		= TEST_OK_PREW,
22027 		.probe		= PROBE_JEDEC,
22028 		.probe_timing	= 10,
22029 		.block_erasers	=
22030 		{
22031 			{
22032 				.eraseblocks = { {4 * 1024, 32} },
22033 				.block_erase = JEDEC_BLOCK_ERASE,
22034 			}, {
22035 				.eraseblocks = { {128 * 1024, 1} },
22036 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
22037 			}
22038 		},
22039 		.printlock	= PRINTLOCK_W39F010,
22040 		.write		= WRITE_JEDEC1,
22041 		.read		= READ_MEMMAPPED,
22042 		.voltage	= {4500, 5500},
22043 	},
22044 
22045 	{
22046 		.vendor		= "Winbond",
22047 		.name		= "W39L010",
22048 		.bustype	= BUS_PARALLEL,
22049 		.manufacture_id	= WINBOND_ID,
22050 		.model_id	= WINBOND_W39L010,
22051 		.total_size	= 128,
22052 		.page_size	= 4 * 1024,
22053 		.feature_bits	= FEATURE_EITHER_RESET,
22054 		.tested		= TEST_UNTESTED,
22055 		.probe		= PROBE_JEDEC,
22056 		.probe_timing	= 10,
22057 		.block_erasers	=
22058 		{
22059 			{
22060 				.eraseblocks = { {4 * 1024, 32} },
22061 				.block_erase = JEDEC_BLOCK_ERASE,
22062 			}, {
22063 				.eraseblocks = { {128 * 1024, 1} },
22064 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
22065 			}
22066 		},
22067 		.printlock	= PRINTLOCK_W39L010,
22068 		.write		= WRITE_JEDEC1,
22069 		.read		= READ_MEMMAPPED,
22070 		.voltage	= {3000, 3600},
22071 	},
22072 
22073 	{
22074 		.vendor		= "Winbond",
22075 		.name		= "W39L020",
22076 		.bustype	= BUS_PARALLEL,
22077 		.manufacture_id	= WINBOND_ID,
22078 		.model_id	= WINBOND_W39L020,
22079 		.total_size	= 256,
22080 		.page_size	= 4 * 1024,
22081 		.feature_bits	= FEATURE_EITHER_RESET,
22082 		.tested		= TEST_UNTESTED,
22083 		.probe		= PROBE_JEDEC,
22084 		.probe_timing	= 10,
22085 		.block_erasers	=
22086 		{
22087 			{
22088 				.eraseblocks = { {4 * 1024, 64} },
22089 				.block_erase = JEDEC_BLOCK_ERASE,
22090 			}, {
22091 				.eraseblocks = { {64 * 1024, 4} },
22092 				.block_erase = JEDEC_SECTOR_ERASE,
22093 			}, {
22094 				.eraseblocks = { {256 * 1024, 1} },
22095 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
22096 			}
22097 		},
22098 		.printlock	= PRINTLOCK_W39L020,
22099 		.write		= WRITE_JEDEC1,
22100 		.read		= READ_MEMMAPPED,
22101 		.voltage	= {3000, 3600},
22102 	},
22103 
22104 	{
22105 		.vendor		= "Winbond",
22106 		.name		= "W39L040",
22107 		.bustype	= BUS_PARALLEL,
22108 		.manufacture_id	= WINBOND_ID,
22109 		.model_id	= WINBOND_W39L040,
22110 		.total_size	= 512,
22111 		.page_size	= 64 * 1024,
22112 		.feature_bits	= FEATURE_EITHER_RESET,
22113 		.tested		= TEST_OK_PR,
22114 		.probe		= PROBE_JEDEC,
22115 		.probe_timing	= 10,
22116 		.block_erasers	=
22117 		{
22118 			{
22119 				.eraseblocks = { {4 * 1024, 128} },
22120 				.block_erase = JEDEC_BLOCK_ERASE,
22121 			}, {
22122 				.eraseblocks = { {64 * 1024, 8} },
22123 				.block_erase = JEDEC_SECTOR_ERASE,
22124 			}, {
22125 				.eraseblocks = { {512 * 1024, 1} },
22126 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
22127 			}
22128 		},
22129 		.printlock	= PRINTLOCK_W39L040,
22130 		.write		= WRITE_JEDEC1,
22131 		.read		= READ_MEMMAPPED,
22132 		.voltage	= {3000, 3600},
22133 	},
22134 
22135 	{
22136 		.vendor		= "Winbond",
22137 		.name		= "W39V040A",
22138 		.bustype	= BUS_LPC,
22139 		.manufacture_id	= WINBOND_ID,
22140 		.model_id	= WINBOND_W39V040A,
22141 		.total_size	= 512,
22142 		.page_size	= 64 * 1024,
22143 		.feature_bits	= FEATURE_EITHER_RESET,
22144 		.tested		= TEST_OK_PREW,
22145 		.probe		= PROBE_JEDEC,
22146 		.probe_timing	= 10,
22147 		.block_erasers	=
22148 		{
22149 			{
22150 				.eraseblocks = { {64 * 1024, 8} },
22151 				.block_erase = JEDEC_SECTOR_ERASE,
22152 			}, {
22153 				.eraseblocks = { {512 * 1024, 1} },
22154 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
22155 			}
22156 		},
22157 		.printlock	= PRINTLOCK_W39V040A,
22158 		.write		= WRITE_JEDEC1,
22159 		.read		= READ_MEMMAPPED,
22160 		.voltage	= {3000, 3600},
22161 	},
22162 
22163 	{
22164 		.vendor		= "Winbond",
22165 		.name		= "W39V040B",
22166 		.bustype	= BUS_LPC,
22167 		.manufacture_id	= WINBOND_ID,
22168 		.model_id	= WINBOND_W39V040B,
22169 		.total_size	= 512,
22170 		.page_size	= 64 * 1024,
22171 		.feature_bits	= FEATURE_EITHER_RESET,
22172 		.tested		= TEST_OK_PREW,
22173 		.probe		= PROBE_JEDEC,
22174 		.probe_timing	= 10,
22175 		.block_erasers	=
22176 		{
22177 			{
22178 				.eraseblocks = { {64 * 1024, 8} },
22179 				.block_erase = JEDEC_SECTOR_ERASE,
22180 			}, {
22181 				.eraseblocks = { {512 * 1024, 1} },
22182 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
22183 			}
22184 		},
22185 		.printlock	= PRINTLOCK_W39V040B,
22186 		.write		= WRITE_JEDEC1,
22187 		.read		= READ_MEMMAPPED,
22188 		.voltage	= {3000, 3600},
22189 	},
22190 
22191 	{
22192 		.vendor		= "Winbond",
22193 		.name		= "W39V040C",
22194 		.bustype	= BUS_LPC,
22195 		.manufacture_id	= WINBOND_ID,
22196 		.model_id	= WINBOND_W39V040C,
22197 		.total_size	= 512,
22198 		.page_size	= 64 * 1024,
22199 		.feature_bits	= FEATURE_EITHER_RESET,
22200 		.tested		= TEST_OK_PREW,
22201 		.probe		= PROBE_JEDEC,
22202 		.probe_timing	= 10,
22203 		.block_erasers	=
22204 		{
22205 			{
22206 				.eraseblocks = { {64 * 1024, 8} },
22207 				.block_erase = JEDEC_SECTOR_ERASE,
22208 			}, {
22209 				.eraseblocks = { {512 * 1024, 1} },
22210 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
22211 			}
22212 		},
22213 		.printlock	= PRINTLOCK_W39V040C,
22214 		.write		= WRITE_JEDEC1,
22215 		.read		= READ_MEMMAPPED,
22216 		.voltage	= {3000, 3600},
22217 	},
22218 
22219 	{
22220 		.vendor		= "Winbond",
22221 		.name		= "W39V040FA",
22222 		.bustype	= BUS_FWH,
22223 		.manufacture_id	= WINBOND_ID,
22224 		.model_id	= WINBOND_W39V040FA,
22225 		.total_size	= 512,
22226 		.page_size	= 64 * 1024,
22227 		.feature_bits	= FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
22228 		.tested		= TEST_OK_PREW,
22229 		.probe		= PROBE_JEDEC,
22230 		.probe_timing	= 10,
22231 		.block_erasers	=
22232 		{
22233 			{
22234 				.eraseblocks = { {4 * 1024, 128} },
22235 				.block_erase = JEDEC_BLOCK_ERASE,
22236 			}, {
22237 				.eraseblocks = { {64 * 1024, 8} },
22238 				.block_erase = JEDEC_SECTOR_ERASE,
22239 			}, {
22240 				.eraseblocks = { {512 * 1024, 1} },
22241 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
22242 			}
22243 		},
22244 		.printlock	= PRINTLOCK_W39V040FA,
22245 		.unlock		= UNLOCK_REGSPACE2_UNIFORM_64K,
22246 		.write		= WRITE_JEDEC1,
22247 		.read		= READ_MEMMAPPED,
22248 		.voltage	= {3000, 3600},
22249 	},
22250 
22251 	{
22252 		.vendor		= "Winbond",
22253 		.name		= "W39V040FB",
22254 		.bustype	= BUS_FWH,
22255 		.manufacture_id	= WINBOND_ID,
22256 		.model_id	= WINBOND_W39V040B,
22257 		.total_size	= 512,
22258 		.page_size	= 64 * 1024,
22259 		.feature_bits	= FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
22260 		.tested		= TEST_OK_PREW,
22261 		.probe		= PROBE_JEDEC,
22262 		.probe_timing	= 10,
22263 		.block_erasers	=
22264 		{
22265 			{
22266 				.eraseblocks = { {64 * 1024, 8} },
22267 				.block_erase = JEDEC_SECTOR_ERASE,
22268 			}, {
22269 				.eraseblocks = { {512 * 1024, 1} },
22270 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
22271 			}
22272 		},
22273 		.printlock	= PRINTLOCK_W39V040FB,
22274 		.unlock		= UNLOCK_REGSPACE2_UNIFORM_64K,
22275 		.write		= WRITE_JEDEC1,
22276 		.read		= READ_MEMMAPPED,
22277 		.voltage	= {3000, 3600}, /* Also has 12V fast program */
22278 	},
22279 
22280 	{
22281 		.vendor		= "Winbond",
22282 		.name		= "W39V040FC",
22283 		.bustype	= BUS_FWH,
22284 		.manufacture_id	= WINBOND_ID,
22285 		.model_id	= WINBOND_W39V040C,
22286 		.total_size	= 512,
22287 		.page_size	= 64 * 1024,
22288 		.feature_bits	= FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
22289 		.tested		= TEST_OK_PREW,
22290 		.probe		= PROBE_JEDEC,
22291 		.probe_timing	= 10,
22292 		.block_erasers	=
22293 		{
22294 			{
22295 				.eraseblocks = { {64 * 1024, 8} },
22296 				.block_erase = JEDEC_SECTOR_ERASE,
22297 			}, {
22298 				.eraseblocks = { {512 * 1024, 1} },
22299 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
22300 			}
22301 		},
22302 		.printlock	= PRINTLOCK_W39V040FC,
22303 		.write		= WRITE_JEDEC1,
22304 		.read		= READ_MEMMAPPED,
22305 		.voltage	= {3000, 3600}, /* Also has 12V fast program */
22306 	},
22307 
22308 	{
22309 		.vendor		= "Winbond",
22310 		.name		= "W39V080A",
22311 		.bustype	= BUS_LPC,
22312 		.manufacture_id	= WINBOND_ID,
22313 		.model_id	= WINBOND_W39V080A,
22314 		.total_size	= 1024,
22315 		.page_size	= 64 * 1024,
22316 		.feature_bits	= FEATURE_EITHER_RESET,
22317 		.tested		= TEST_OK_PREW,
22318 		.probe		= PROBE_JEDEC,
22319 		.probe_timing	= 10,
22320 		.block_erasers	=
22321 		{
22322 			{
22323 				.eraseblocks = { {64 * 1024, 16} },
22324 				.block_erase = JEDEC_SECTOR_ERASE,
22325 			}, {
22326 				.eraseblocks = { {1024 * 1024, 1} },
22327 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
22328 			}
22329 		},
22330 		.printlock	= PRINTLOCK_W39V080A,
22331 		.write		= WRITE_JEDEC1,
22332 		.read		= READ_MEMMAPPED,
22333 		.voltage	= {3000, 3600},
22334 	},
22335 
22336 	{
22337 		.vendor		= "Winbond",
22338 		.name		= "W39V080FA",
22339 		.bustype	= BUS_FWH,
22340 		.manufacture_id	= WINBOND_ID,
22341 		.model_id	= WINBOND_W39V080FA,
22342 		.total_size	= 1024,
22343 		.page_size	= 64 * 1024,
22344 		.feature_bits	= FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
22345 		.tested		= TEST_OK_PREW,
22346 		.probe		= PROBE_JEDEC,
22347 		.probe_timing	= 10,
22348 		.block_erasers	=
22349 		{
22350 			{
22351 				.eraseblocks = { {64 * 1024, 16} },
22352 				.block_erase = JEDEC_SECTOR_ERASE,
22353 			}, {
22354 				.eraseblocks = { {1024 * 1024, 1} },
22355 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
22356 			}
22357 		},
22358 		.printlock	= PRINTLOCK_W39V080FA,
22359 		.unlock		= UNLOCK_REGSPACE2_UNIFORM_64K,
22360 		.write		= WRITE_JEDEC1,
22361 		.read		= READ_MEMMAPPED,
22362 		.voltage	= {3000, 3600}, /* Also has 12V fast program */
22363 	},
22364 
22365 	{
22366 		.vendor		= "Winbond",
22367 		.name		= "W39V080FA (dual mode)",
22368 		.bustype	= BUS_FWH,
22369 		.manufacture_id	= WINBOND_ID,
22370 		.model_id	= WINBOND_W39V080FA_DM,
22371 		.total_size	= 512,
22372 		.page_size	= 64 * 1024,
22373 		.feature_bits	= FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
22374 		.tested		= TEST_UNTESTED,
22375 		.probe		= PROBE_JEDEC,
22376 		.probe_timing	= 10,
22377 		.block_erasers	=
22378 		{
22379 			{
22380 				.eraseblocks = { {64 * 1024, 8} },
22381 				.block_erase = JEDEC_SECTOR_ERASE,
22382 			}, {
22383 				.eraseblocks = { {512 * 1024, 1} },
22384 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
22385 			}
22386 		},
22387 		.printlock	= PRINTLOCK_W39V080FA_DUAL,
22388 		.write		= WRITE_JEDEC1,
22389 		.read		= READ_MEMMAPPED,
22390 		.voltage	= {3000, 3600}, /* Also has 12V fast program */
22391 	},
22392 
22393 	{
22394 		.vendor		= "Winbond",
22395 		.name		= "W49F002U/N",
22396 		.bustype	= BUS_PARALLEL,
22397 		.manufacture_id	= WINBOND_ID,
22398 		.model_id	= WINBOND_W49F002U,
22399 		.total_size	= 256,
22400 		.page_size	= 128,
22401 		.feature_bits	= FEATURE_EITHER_RESET,
22402 		.tested		= TEST_OK_PREW,
22403 		.probe		= PROBE_JEDEC,
22404 		.probe_timing	= 10,
22405 		.block_erasers	=
22406 		{
22407 			{
22408 				.eraseblocks = {
22409 					{128 * 1024, 1},
22410 					{96 * 1024, 1},
22411 					{8 * 1024, 2},
22412 					{16 * 1024, 1},
22413 				},
22414 				.block_erase = JEDEC_SECTOR_ERASE,
22415 			}, {
22416 				.eraseblocks = { {256 * 1024, 1} },
22417 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
22418 			}
22419 		},
22420 		.write		= WRITE_JEDEC1,
22421 		.read		= READ_MEMMAPPED,
22422 		.voltage	= {4500, 5500},
22423 	},
22424 
22425 	{
22426 		.vendor		= "Winbond",
22427 		.name		= "W49F020",
22428 		.bustype	= BUS_PARALLEL,
22429 		.manufacture_id	= WINBOND_ID,
22430 		.model_id	= WINBOND_W49F020,
22431 		.total_size	= 256,
22432 		.page_size	= 128,
22433 		.feature_bits	= FEATURE_EITHER_RESET,
22434 		.tested		= TEST_OK_PROBE,
22435 		.probe		= PROBE_JEDEC,
22436 		.probe_timing	= 10,
22437 		.block_erasers	=
22438 		{
22439 			{
22440 				.eraseblocks = { {256 * 1024, 1} },
22441 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
22442 			}
22443 		},
22444 		.write		= WRITE_JEDEC1,
22445 		.read		= READ_MEMMAPPED,
22446 		.voltage	= {4500, 5500},
22447 	},
22448 
22449 	{
22450 		.vendor		= "Winbond",
22451 		.name		= "W49V002A",
22452 		.bustype	= BUS_LPC,
22453 		.manufacture_id	= WINBOND_ID,
22454 		.model_id	= WINBOND_W49V002A,
22455 		.total_size	= 256,
22456 		.page_size	= 128,
22457 		.feature_bits	= FEATURE_EITHER_RESET,
22458 		.tested		= TEST_OK_PREW,
22459 		.probe		= PROBE_JEDEC,
22460 		.probe_timing	= 10,
22461 		.block_erasers	=
22462 		{
22463 			{
22464 				.eraseblocks = {
22465 					{64 * 1024, 3},
22466 					{32 * 1024, 1},
22467 					{8 * 1024, 2},
22468 					{16 * 1024, 1},
22469 				},
22470 				.block_erase = JEDEC_SECTOR_ERASE,
22471 			}, {
22472 				.eraseblocks = { {256 * 1024, 1} },
22473 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
22474 			}
22475 		},
22476 		.write		= WRITE_JEDEC1,
22477 		.read		= READ_MEMMAPPED,
22478 		.voltage	= {3000, 3600},
22479 	},
22480 
22481 	{
22482 		.vendor		= "Winbond",
22483 		.name		= "W49V002FA",
22484 		.bustype	= BUS_FWH,
22485 		.manufacture_id	= WINBOND_ID,
22486 		.model_id	= WINBOND_W49V002FA,
22487 		.total_size	= 256,
22488 		.page_size	= 128,
22489 		.feature_bits	= FEATURE_EITHER_RESET,
22490 		.tested		= TEST_OK_PREW,
22491 		.probe		= PROBE_JEDEC,
22492 		.probe_timing	= 10,
22493 		.block_erasers	=
22494 		{
22495 			{
22496 				.eraseblocks = {
22497 					{64 * 1024, 3},
22498 					{32 * 1024, 1},
22499 					{8 * 1024, 2},
22500 					{16 * 1024, 1},
22501 				},
22502 				.block_erase = JEDEC_SECTOR_ERASE,
22503 			}, {
22504 				.eraseblocks = { {256 * 1024, 1} },
22505 				.block_erase = JEDEC_CHIP_BLOCK_ERASE,
22506 			}
22507 		},
22508 		.write		= WRITE_JEDEC1,
22509 		.read		= READ_MEMMAPPED,
22510 		.voltage	= {3000, 3600},
22511 	},
22512 
22513 	{
22514 		.vendor		= "XMC",
22515 		.name		= "XM25QH80B",
22516 		.bustype	= BUS_SPI,
22517 		.manufacture_id	= ST_ID,
22518 		.model_id	= ST_M45PE80,
22519 		.total_size	= 1024,
22520 		.page_size	= 256,
22521 		.feature_bits	= FEATURE_WRSR_WREN,
22522 		.tested		= TEST_OK_PREW,
22523 		.probe		= PROBE_SPI_RDID,
22524 		.probe_timing	= TIMING_ZERO,
22525 		.block_erasers	=
22526 		{
22527 			{
22528 				.eraseblocks = { {4 * 1024, 256} },
22529 				.block_erase = SPI_BLOCK_ERASE_20,
22530 			}, {
22531 				.eraseblocks = { {32 * 1024, 32} },
22532 				.block_erase = SPI_BLOCK_ERASE_52,
22533 			}, {
22534 				.eraseblocks = { {64 * 1024, 16} },
22535 				.block_erase = SPI_BLOCK_ERASE_D8,
22536 			}, {
22537 				.eraseblocks = { {1 * 1024 * 1024, 1} },
22538 				.block_erase = SPI_BLOCK_ERASE_60,
22539 			}, {
22540 				.eraseblocks = { {1 * 1024 * 1024, 1} },
22541 				.block_erase = SPI_BLOCK_ERASE_C7,
22542 			}
22543 		},
22544 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP2_SRWD,
22545 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
22546 		.write		= SPI_CHIP_WRITE256,
22547 		.read		= SPI_CHIP_READ,
22548 		.voltage	= {2700, 3600},
22549 	},
22550 
22551 	{
22552 		.vendor		= "XMC",
22553 		.name		= "XM25QU80B",
22554 		.bustype	= BUS_SPI,
22555 		.manufacture_id	= ST_ID,
22556 		.model_id	= XMC_XM25QU80B,
22557 		.total_size	= 1024,
22558 		.page_size	= 256,
22559 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
22560 		.tested		= TEST_OK_PREW,
22561 		.probe		= PROBE_SPI_RDID,
22562 		.probe_timing	= TIMING_ZERO,
22563 		.block_erasers	=
22564 		{
22565 			{
22566 				.eraseblocks = { {4 * 1024, 256 } },
22567 				.block_erase = SPI_BLOCK_ERASE_20,
22568 			}, {
22569 				.eraseblocks = { {32 * 1024, 32} },
22570 				.block_erase = SPI_BLOCK_ERASE_52,
22571 			}, {
22572 				.eraseblocks = { {64 * 1024, 16} },
22573 				.block_erase = SPI_BLOCK_ERASE_D8,
22574 			}, {
22575 				.eraseblocks = { {1 * 1024 * 1024, 1} },
22576 				.block_erase = SPI_BLOCK_ERASE_60,
22577 			}, {
22578 				.eraseblocks = { {1 * 1024 * 1024, 1} },
22579 				.block_erase = SPI_BLOCK_ERASE_C7,
22580 			}
22581 		},
22582 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN,
22583 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
22584 		.write		= SPI_CHIP_WRITE256,
22585 		.read		= SPI_CHIP_READ,
22586 		.voltage	= {1650, 1950},
22587 	},
22588 
22589 	{
22590 		.vendor		= "XMC",
22591 		.name		= "XM25QH16C/XM25QH16D",
22592 		.bustype	= BUS_SPI,
22593 		.manufacture_id	= ST_ID,
22594 		.model_id	= XMC_XM25QH16C,
22595 		.total_size	= 2048,
22596 		.page_size	= 256,
22597 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
22598 		.tested		= TEST_OK_PREW,
22599 		.probe		= PROBE_SPI_RDID,
22600 		.probe_timing	= TIMING_ZERO,
22601 		.block_erasers	=
22602 		{
22603 			{
22604 				.eraseblocks = { {4 * 1024, 512} },
22605 				.block_erase = SPI_BLOCK_ERASE_20,
22606 			}, {
22607 				.eraseblocks = { {32 * 1024, 64} },
22608 				.block_erase = SPI_BLOCK_ERASE_52,
22609 			}, {
22610 				.eraseblocks = { {64 * 1024, 32} },
22611 				.block_erase = SPI_BLOCK_ERASE_D8,
22612 			}, {
22613 				.eraseblocks = { {2 * 1024 * 1024, 1} },
22614 				.block_erase = SPI_BLOCK_ERASE_60,
22615 			}, {
22616 				.eraseblocks = { {2 * 1024 * 1024, 1} },
22617 				.block_erase = SPI_BLOCK_ERASE_C7,
22618 			}
22619 		},
22620 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN,
22621 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
22622 		.write		= SPI_CHIP_WRITE256,
22623 		.read		= SPI_CHIP_READ,
22624 		.voltage	= {2700, 3600},
22625 	},
22626 
22627 	{
22628 		.vendor		= "XMC",
22629 		.name		= "XM25QU16C",
22630 		.bustype	= BUS_SPI,
22631 		.manufacture_id	= ST_ID,
22632 		.model_id	= XMC_XM25QU16C,
22633 		.total_size	= 2048,
22634 		.page_size	= 256,
22635 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
22636 		.tested		= TEST_OK_PREW,
22637 		.probe		= PROBE_SPI_RDID,
22638 		.probe_timing	= TIMING_ZERO,
22639 		.block_erasers	=
22640 		{
22641 			{
22642 				.eraseblocks = { {4 * 1024, 512} },
22643 				.block_erase = SPI_BLOCK_ERASE_20,
22644 			}, {
22645 				.eraseblocks = { {32 * 1024, 64} },
22646 				.block_erase = SPI_BLOCK_ERASE_52,
22647 			}, {
22648 				.eraseblocks = { {64 * 1024, 32} },
22649 				.block_erase = SPI_BLOCK_ERASE_D8,
22650 			}, {
22651 				.eraseblocks = { {2 * 1024 * 1024, 1} },
22652 				.block_erase = SPI_BLOCK_ERASE_60,
22653 			}, {
22654 				.eraseblocks = { {2 * 1024 * 1024, 1} },
22655 				.block_erase = SPI_BLOCK_ERASE_C7,
22656 			}
22657 		},
22658 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN,
22659 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
22660 		.write		= SPI_CHIP_WRITE256,
22661 		.read		= SPI_CHIP_READ,
22662 		.voltage	= {1650, 1950},
22663 	},
22664 
22665 	{
22666 		.vendor		= "XMC",
22667 		.name		= "XM25QH32C/XM25QH32D",
22668 		.bustype	= BUS_SPI,
22669 		.manufacture_id	= ST_ID,
22670 		.model_id	= XMC_XM25QH32C,
22671 		.total_size	= 4096,
22672 		.page_size	= 256,
22673 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
22674 		.tested		= TEST_OK_PREW,
22675 		.probe		= PROBE_SPI_RDID,
22676 		.probe_timing	= TIMING_ZERO,
22677 		.block_erasers	=
22678 		{
22679 			{
22680 				.eraseblocks = { {4 * 1024, 1024} },
22681 				.block_erase = SPI_BLOCK_ERASE_20,
22682 			}, {
22683 				.eraseblocks = { {32 * 1024, 128} },
22684 				.block_erase = SPI_BLOCK_ERASE_52,
22685 			}, {
22686 				.eraseblocks = { {64 * 1024, 64} },
22687 				.block_erase = SPI_BLOCK_ERASE_D8,
22688 			}, {
22689 				.eraseblocks = { {4 * 1024 * 1024, 1} },
22690 				.block_erase = SPI_BLOCK_ERASE_60,
22691 			}, {
22692 				.eraseblocks = { {4 * 1024 * 1024, 1} },
22693 				.block_erase = SPI_BLOCK_ERASE_C7,
22694 			}
22695 		},
22696 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN,
22697 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
22698 		.write		= SPI_CHIP_WRITE256,
22699 		.read		= SPI_CHIP_READ,
22700 		.voltage	= {2700, 3600},
22701 	},
22702 
22703 	{
22704 		.vendor		= "XMC",
22705 		.name		= "XM25QU32C",
22706 		.bustype	= BUS_SPI,
22707 		.manufacture_id	= ST_ID,
22708 		.model_id	= XMC_XM25QU32C,
22709 		.total_size	= 4096,
22710 		.page_size	= 256,
22711 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
22712 		.tested		= TEST_OK_PREW,
22713 		.probe		= PROBE_SPI_RDID,
22714 		.probe_timing	= TIMING_ZERO,
22715 		.block_erasers	=
22716 		{
22717 			{
22718 				.eraseblocks = { {4 * 1024, 1024} },
22719 				.block_erase = SPI_BLOCK_ERASE_20,
22720 			}, {
22721 				.eraseblocks = { {32 * 1024, 128} },
22722 				.block_erase = SPI_BLOCK_ERASE_52,
22723 			}, {
22724 				.eraseblocks = { {64 * 1024, 64} },
22725 				.block_erase = SPI_BLOCK_ERASE_D8,
22726 			}, {
22727 				.eraseblocks = { {4 * 1024 * 1024, 1} },
22728 				.block_erase = SPI_BLOCK_ERASE_60,
22729 			}, {
22730 				.eraseblocks = { {4 * 1024 * 1024, 1} },
22731 				.block_erase = SPI_BLOCK_ERASE_C7,
22732 			}
22733 		},
22734 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN,
22735 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
22736 		.write		= SPI_CHIP_WRITE256,
22737 		.read		= SPI_CHIP_READ,
22738 		.voltage	= {1650, 1950},
22739 	},
22740 
22741 	{
22742 		.vendor		= "XMC",
22743 		.name		= "XM25QH64C/XM25QH64D",
22744 		.bustype	= BUS_SPI,
22745 		.manufacture_id	= ST_ID,
22746 		.model_id	= XMC_XM25QH64C,
22747 		.total_size	= 8192,
22748 		.page_size	= 256,
22749 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
22750 		.tested		= TEST_OK_PREW,
22751 		.probe		= PROBE_SPI_RDID,
22752 		.probe_timing	= TIMING_ZERO,
22753 		.block_erasers	=
22754 		{
22755 			{
22756 				.eraseblocks = { {4 * 1024, 2048} },
22757 				.block_erase = SPI_BLOCK_ERASE_20,
22758 			}, {
22759 				.eraseblocks = { {32 * 1024, 256} },
22760 				.block_erase = SPI_BLOCK_ERASE_52,
22761 			}, {
22762 				.eraseblocks = { {64 * 1024, 128} },
22763 				.block_erase = SPI_BLOCK_ERASE_D8,
22764 			}, {
22765 				.eraseblocks = { {8 * 1024 * 1024, 1} },
22766 				.block_erase = SPI_BLOCK_ERASE_60,
22767 			}, {
22768 				.eraseblocks = { {8 * 1024 * 1024, 1} },
22769 				.block_erase = SPI_BLOCK_ERASE_C7,
22770 			}
22771 		},
22772 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN,
22773 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
22774 		.write		= SPI_CHIP_WRITE256,
22775 		.read		= SPI_CHIP_READ,
22776 		.voltage	= {2700, 3600},
22777 	},
22778 
22779 	{
22780 		.vendor		= "XMC",
22781 		.name		= "XM25QU64C/XM25LU64C",
22782 		.bustype	= BUS_SPI,
22783 		.manufacture_id	= ST_ID,
22784 		.model_id	= XMC_XM25QU64C,
22785 		.total_size	= 8192,
22786 		.page_size	= 256,
22787 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
22788 		.tested		= TEST_OK_PREW,
22789 		.probe		= PROBE_SPI_RDID,
22790 		.probe_timing	= TIMING_ZERO,
22791 		.block_erasers	=
22792 		{
22793 			{
22794 				.eraseblocks = { {4 * 1024, 2048} },
22795 				.block_erase = SPI_BLOCK_ERASE_20,
22796 			}, {
22797 				.eraseblocks = { {32 * 1024, 256} },
22798 				.block_erase = SPI_BLOCK_ERASE_52,
22799 			}, {
22800 				.eraseblocks = { {64 * 1024, 128} },
22801 				.block_erase = SPI_BLOCK_ERASE_D8,
22802 			}, {
22803 				.eraseblocks = { {8 * 1024 * 1024, 1} },
22804 				.block_erase = SPI_BLOCK_ERASE_60,
22805 			}, {
22806 				.eraseblocks = { {8 * 1024 * 1024, 1} },
22807 				.block_erase = SPI_BLOCK_ERASE_C7,
22808 			}
22809 		},
22810 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN,
22811 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
22812 		.write		= SPI_CHIP_WRITE256,
22813 		.read		= SPI_CHIP_READ,
22814 		.voltage	= {1650, 1950},
22815 	},
22816 
22817 	{
22818 		.vendor		= "XMC",
22819 		.name		= "XM25QH128A",
22820 		.bustype	= BUS_SPI,
22821 		.manufacture_id	= ST_ID,
22822 		.model_id	= XMC_XM25QH128A,
22823 		.total_size	= 16384,
22824 		.page_size	= 256,
22825 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI | FEATURE_WRSR2,
22826 		.tested		= TEST_OK_PREW,
22827 		.probe		= PROBE_SPI_RDID,
22828 		.probe_timing	= TIMING_ZERO,
22829 		.block_erasers	=
22830 		{
22831 			{
22832 				.eraseblocks = { {4 * 1024, 4096} },
22833 				.block_erase = SPI_BLOCK_ERASE_20,
22834 			}, {
22835 				.eraseblocks = { {32 * 1024, 512} },
22836 				.block_erase = SPI_BLOCK_ERASE_52,
22837 			}, {
22838 				.eraseblocks = { {64 * 1024, 256} },
22839 				.block_erase = SPI_BLOCK_ERASE_D8,
22840 			}, {
22841 				.eraseblocks = { {16 * 1024 * 1024, 1} },
22842 				.block_erase = SPI_BLOCK_ERASE_60,
22843 			}, {
22844 				.eraseblocks = { {16 * 1024 * 1024, 1} },
22845 				.block_erase = SPI_BLOCK_ERASE_C7,
22846 			}
22847 		},
22848 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN,
22849 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
22850 		.write		= SPI_CHIP_WRITE256,
22851 		.read		= SPI_CHIP_READ,
22852 		.voltage	= {2700, 3600},
22853 		.reg_bits	=
22854 		{
22855 			.srp    = {STATUS1, 7, RW},
22856 			.srl    = {STATUS2, 0, RW},
22857 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
22858 			.tb     = {STATUS1, 5, RW},
22859 			.sec    = {STATUS1, 6, RW},
22860 			.cmp    = {STATUS2, 6, RW},
22861 		},
22862 		.decode_range	= DECODE_RANGE_SPI25,
22863 	},
22864 
22865 	{
22866 		.vendor		= "XMC",
22867 		.name		= "XM25QH128C/XM25QH128D",
22868 		.bustype	= BUS_SPI,
22869 		.manufacture_id	= ST_ID,
22870 		.model_id	= XMC_XM25QH128C,
22871 		.total_size	= 16384,
22872 		.page_size	= 256,
22873 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI | FEATURE_WRSR2,
22874 		.tested		= TEST_OK_PREW,
22875 		.probe		= PROBE_SPI_RDID,
22876 		.probe_timing	= TIMING_ZERO,
22877 		.block_erasers	=
22878 		{
22879 			{
22880 				.eraseblocks = { {4 * 1024, 4096} },
22881 				.block_erase = SPI_BLOCK_ERASE_20,
22882 			}, {
22883 				.eraseblocks = { {32 * 1024, 512} },
22884 				.block_erase = SPI_BLOCK_ERASE_52,
22885 			}, {
22886 				.eraseblocks = { {64 * 1024, 256} },
22887 				.block_erase = SPI_BLOCK_ERASE_D8,
22888 			}, {
22889 				.eraseblocks = { {16 * 1024 * 1024, 1} },
22890 				.block_erase = SPI_BLOCK_ERASE_60,
22891 			}, {
22892 				.eraseblocks = { {16 * 1024 * 1024, 1} },
22893 				.block_erase = SPI_BLOCK_ERASE_C7,
22894 			}
22895 		},
22896 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_SRWD_SEC_TB_BP2_WELWIP,
22897 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
22898 		.write		= SPI_CHIP_WRITE256,
22899 		.read		= SPI_CHIP_READ,
22900 		.voltage	= {2700, 3600},
22901 		.reg_bits	=
22902 		{
22903 			.srp    = {STATUS1, 7, RW},
22904 			.srl    = {STATUS2, 0, RW},
22905 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}},
22906 			.tb     = {STATUS1, 5, RW},
22907 			.sec    = {STATUS1, 6, RW},
22908 			.cmp    = {STATUS2, 6, RW},
22909 		},
22910 		.decode_range	= DECODE_RANGE_SPI25,
22911 	},
22912 
22913 	{
22914 		.vendor		= "XMC",
22915 		.name		= "XM25QU128C/XM25QU128D",
22916 		.bustype	= BUS_SPI,
22917 		.manufacture_id	= ST_ID,
22918 		.model_id	= XMC_XM25QU128C,
22919 		.total_size	= 16384,
22920 		.page_size	= 256,
22921 		/* supports SFDP */
22922 		/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
22923 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
22924 		.tested		= TEST_OK_PREW,
22925 		.probe		= PROBE_SPI_RDID,
22926 		.probe_timing	= TIMING_ZERO,
22927 		.block_erasers	=
22928 		{
22929 			{
22930 				.eraseblocks = { {4 * 1024, 4096} },
22931 				.block_erase = SPI_BLOCK_ERASE_20,
22932 			}, {
22933 				.eraseblocks = { {32 * 1024, 512} },
22934 				.block_erase = SPI_BLOCK_ERASE_52,
22935 			}, {
22936 				.eraseblocks = { {64 * 1024, 256} },
22937 				.block_erase = SPI_BLOCK_ERASE_D8,
22938 			}, {
22939 				.eraseblocks = { {16 * 1024 * 1024, 1} },
22940 				.block_erase = SPI_BLOCK_ERASE_60,
22941 			}, {
22942 				.eraseblocks = { {16 * 1024 * 1024, 1} },
22943 				.block_erase = SPI_BLOCK_ERASE_C7,
22944 			}
22945 		},
22946 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
22947 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
22948 		.write		= SPI_CHIP_WRITE256,
22949 		.read		= SPI_CHIP_READ,
22950 		.voltage	= {1650, 1950},
22951 	},
22952 
22953 	{
22954 		.vendor		= "XMC",
22955 		.name		= "XM25QH256C/XM25QH256D",
22956 		.bustype	= BUS_SPI,
22957 		.manufacture_id	= ST_ID,
22958 		.model_id	= XMC_XM25QH256C,
22959 		.total_size	= 32768,
22960 		.page_size	= 256,
22961 		/* supports SFDP */
22962 		/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
22963 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA_ENTER_WREN |
22964 				  FEATURE_4BA_EAR_C5C8 | FEATURE_4BA_READ | FEATURE_4BA_FAST_READ |
22965 				  FEATURE_4BA_WRITE | FEATURE_WRSR2,
22966 		.tested		= TEST_OK_PREW,
22967 		.probe		= PROBE_SPI_RDID,
22968 		.probe_timing	= TIMING_ZERO,
22969 		.block_erasers	=
22970 		{
22971 			{
22972 				.eraseblocks = { {4 * 1024, 8192} },
22973 				.block_erase = SPI_BLOCK_ERASE_20,
22974 			}, {
22975 				.eraseblocks = { {32 * 1024, 1024} },
22976 				.block_erase = SPI_BLOCK_ERASE_52,
22977 			}, {
22978 				.eraseblocks = { {64 * 1024, 512} },
22979 				.block_erase = SPI_BLOCK_ERASE_D8,
22980 			}, {
22981 				.eraseblocks = { {32 * 1024 * 1024, 1} },
22982 				.block_erase = SPI_BLOCK_ERASE_60,
22983 			}, {
22984 				.eraseblocks = { {32 * 1024 * 1024, 1} },
22985 				.block_erase = SPI_BLOCK_ERASE_C7,
22986 			}
22987 		},
22988 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
22989 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
22990 		.write		= SPI_CHIP_WRITE256,
22991 		.read		= SPI_CHIP_READ,
22992 		.voltage	= {2700, 3600},
22993 		.reg_bits	=
22994 		{
22995 			.srp    = {STATUS1, 7, RW},
22996 			.srl    = {STATUS2, 0, RW},
22997 			.bp     = {{STATUS1, 2, RW}, {STATUS1, 3, RW}, {STATUS1, 4, RW}, {STATUS1, 5, RW}},
22998 			.tb     = {STATUS1, 6, RW},
22999 		},
23000 		.decode_range	= DECODE_RANGE_SPI25,
23001 	},
23002 
23003 	{
23004 		.vendor		= "XMC",
23005 		.name		= "XM25QU256C/XM25QU256D",
23006 		.bustype	= BUS_SPI,
23007 		.manufacture_id	= ST_ID,
23008 		.model_id	= XMC_XM25QU256C,
23009 		.total_size	= 32768,
23010 		.page_size	= 256,
23011 		/* supports SFDP */
23012 		/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
23013 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA_ENTER_WREN
23014 			| FEATURE_4BA_EAR_C5C8 | FEATURE_4BA_READ | FEATURE_4BA_FAST_READ
23015 			| FEATURE_4BA_WRITE,
23016 		.tested		= TEST_OK_PREW,
23017 		.probe		= PROBE_SPI_RDID,
23018 		.probe_timing	= TIMING_ZERO,
23019 		.block_erasers	=
23020 		{
23021 			{
23022 				.eraseblocks = { {4 * 1024, 8192} },
23023 				.block_erase = SPI_BLOCK_ERASE_20,
23024 			}, {
23025 				.eraseblocks = { {32 * 1024, 1024} },
23026 				.block_erase = SPI_BLOCK_ERASE_52,
23027 			}, {
23028 				.eraseblocks = { {64 * 1024, 512} },
23029 				.block_erase = SPI_BLOCK_ERASE_D8,
23030 			}, {
23031 				.eraseblocks = { {32 * 1024 * 1024, 1} },
23032 				.block_erase = SPI_BLOCK_ERASE_60,
23033 			}, {
23034 				.eraseblocks = { {32 * 1024 * 1024, 1} },
23035 				.block_erase = SPI_BLOCK_ERASE_C7,
23036 			}
23037 		},
23038 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
23039 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
23040 		.write		= SPI_CHIP_WRITE256,
23041 		.read		= SPI_CHIP_READ,
23042 		.voltage	= {1650, 1950},
23043 	},
23044 
23045 	{
23046 		.vendor		= "XMC",
23047 		.name		= "XM25RU256C",
23048 		.bustype	= BUS_SPI,
23049 		.manufacture_id	= ST_ID,
23050 		.model_id	= XMC_XM25RU256C,
23051 		.total_size	= 32768,
23052 		.page_size	= 256,
23053 		/* supports SFDP */
23054 		/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
23055 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA_ENTER_WREN |
23056 				  FEATURE_4BA_EAR_C5C8 | FEATURE_4BA_READ | FEATURE_4BA_FAST_READ |
23057 				  FEATURE_4BA_WRITE,
23058 		.tested		= TEST_OK_PREW,
23059 		.probe		= PROBE_SPI_RDID,
23060 		.probe_timing	= TIMING_ZERO,
23061 		.block_erasers	=
23062 		{
23063 			{
23064 				.eraseblocks = { {4 * 1024, 8192} },
23065 				.block_erase = SPI_BLOCK_ERASE_20,
23066 			}, {
23067 				.eraseblocks = { {32 * 1024, 1024} },
23068 				.block_erase = SPI_BLOCK_ERASE_52,
23069 			}, {
23070 				.eraseblocks = { {64 * 1024, 512} },
23071 				.block_erase = SPI_BLOCK_ERASE_D8,
23072 			}, {
23073 				.eraseblocks = { {32 * 1024 * 1024, 1} },
23074 				.block_erase = SPI_BLOCK_ERASE_60,
23075 			}, {
23076 				.eraseblocks = { {32 * 1024 * 1024, 1} },
23077 				.block_erase = SPI_BLOCK_ERASE_C7,
23078 			}
23079 		},
23080 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
23081 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
23082 		.write		= SPI_CHIP_WRITE256,
23083 		.read		= SPI_CHIP_READ,
23084 		.voltage	= {1650, 1950},
23085 	},
23086 
23087 	{
23088 		.vendor		= "XMC",
23089 		.name		= "XM25QH512C/XM25QH512D",
23090 		.bustype	= BUS_SPI,
23091 		.manufacture_id	= ST_ID,
23092 		.model_id	= XMC_XM25QH512C,
23093 		.total_size	= 64 * 1024,
23094 		.page_size	= 256,
23095 		/* supports SFDP */
23096 		/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
23097 		/* FOUR_BYTE_ADDR: supports 4-bytes addressing mode */
23098 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA_ENTER_WREN
23099 			| FEATURE_4BA_EAR_C5C8 | FEATURE_4BA_READ | FEATURE_4BA_FAST_READ,
23100 		.tested		= TEST_OK_PREW,
23101 		.probe		= PROBE_SPI_RDID,
23102 		.probe_timing	= TIMING_ZERO,
23103 		.block_erasers	=
23104 		{
23105 			{
23106 				.eraseblocks = { {4 * 1024, 16384} },
23107 				.block_erase = SPI_BLOCK_ERASE_21,
23108 			}, {
23109 				.eraseblocks = { {4 * 1024, 16384} },
23110 				.block_erase = SPI_BLOCK_ERASE_20,
23111 			}, {
23112 				.eraseblocks = { {32 * 1024, 2048} },
23113 				.block_erase = SPI_BLOCK_ERASE_52,
23114 			}, {
23115 				.eraseblocks = { {64 * 1024, 1024} },
23116 				.block_erase = SPI_BLOCK_ERASE_DC,
23117 			}, {
23118 				.eraseblocks = { {64 * 1024, 1024} },
23119 				.block_erase = SPI_BLOCK_ERASE_D8,
23120 			}, {
23121 				.eraseblocks = { {64 * 1024 * 1024, 1} },
23122 				.block_erase = SPI_BLOCK_ERASE_60,
23123 			}, {
23124 				.eraseblocks = { {64 * 1024 * 1024, 1} },
23125 				.block_erase = SPI_BLOCK_ERASE_C7,
23126 			}
23127 		},
23128 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
23129 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
23130 		.write		= SPI_CHIP_WRITE256,
23131 		.read		= SPI_CHIP_READ,
23132 		.voltage	= {2700, 3600},
23133 	},
23134 
23135 	{
23136 		.vendor		= "XMC",
23137 		.name		= "XM25QU512C/XM25QU512D",
23138 		.bustype	= BUS_SPI,
23139 		.manufacture_id	= ST_ID,
23140 		.model_id	= XMC_XM25QU512C,
23141 		.total_size	= 64 * 1024,
23142 		.page_size	= 256,
23143 		/* supports SFDP */
23144 		/* OTP: 1024B total, 256B reserved; read 0x48; write 0x42, erase 0x44, read ID 0x4B */
23145 		/* FOUR_BYTE_ADDR: supports 4-bytes addressing mode */
23146 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_4BA_ENTER_WREN
23147 			| FEATURE_4BA_EAR_C5C8 | FEATURE_4BA_READ | FEATURE_4BA_FAST_READ,
23148 		.tested		= TEST_OK_PREW,
23149 		.probe		= PROBE_SPI_RDID,
23150 		.probe_timing	= TIMING_ZERO,
23151 		.block_erasers	=
23152 		{
23153 			{
23154 				.eraseblocks = { {4 * 1024, 16384} },
23155 				.block_erase = SPI_BLOCK_ERASE_21,
23156 			}, {
23157 				.eraseblocks = { {4 * 1024, 16384} },
23158 				.block_erase = SPI_BLOCK_ERASE_20,
23159 			}, {
23160 				.eraseblocks = { {32 * 1024, 2048} },
23161 				.block_erase = SPI_BLOCK_ERASE_52,
23162 			}, {
23163 				.eraseblocks = { {64 * 1024, 1024} },
23164 				.block_erase = SPI_BLOCK_ERASE_DC,
23165 			}, {
23166 				.eraseblocks = { {64 * 1024, 1024} },
23167 				.block_erase = SPI_BLOCK_ERASE_D8,
23168 			}, {
23169 				.eraseblocks = { {64 * 1024 * 1024, 1} },
23170 				.block_erase = SPI_BLOCK_ERASE_60,
23171 			}, {
23172 				.eraseblocks = { {64 * 1024 * 1024, 1} },
23173 				.block_erase = SPI_BLOCK_ERASE_C7,
23174 			}
23175 		},
23176 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
23177 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
23178 		.write		= SPI_CHIP_WRITE256,
23179 		.read		= SPI_CHIP_READ,
23180 		.voltage	= {1650, 1950},
23181 	},
23182 
23183 	{
23184 		.vendor		= "XTX Technology Limited",
23185 		.name		= "XT25F02E",
23186 		.bustype	= BUS_SPI,
23187 		.manufacture_id	= XTX_ID,
23188 		.model_id	= XTX_XT25F02E,
23189 		.total_size	= 256,
23190 		.page_size	= 256,
23191 		.feature_bits	= FEATURE_WRSR_WREN,
23192 		.tested		= TEST_OK_PREW,
23193 		.probe		= PROBE_SPI_RDID,
23194 		.probe_timing	= TIMING_ZERO,
23195 		.block_erasers	=
23196 		{
23197 			{
23198 				.eraseblocks = { {4 * 1024, 64} },
23199 				.block_erase = SPI_BLOCK_ERASE_20,
23200 			}, {
23201 				.eraseblocks = { {64 * 1024, 4} },
23202 				.block_erase = SPI_BLOCK_ERASE_D8,
23203 			}, {
23204 				.eraseblocks = { {256 * 1024, 1} },
23205 				.block_erase = SPI_BLOCK_ERASE_60,
23206 			}, {
23207 				.eraseblocks = { {256 * 1024, 1} },
23208 				.block_erase = SPI_BLOCK_ERASE_C7,
23209 			}
23210 		},
23211 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP1_SRWD,
23212 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP1_SRWD,
23213 		.write		= SPI_CHIP_WRITE256,
23214 		.read		= SPI_CHIP_READ,
23215 		.voltage	= {2700, 3600},
23216 	},
23217 
23218 	{
23219 		.vendor		= "XTX Technology Limited",
23220 		.name		= "XT25F64B",
23221 		.bustype	= BUS_SPI,
23222 		.manufacture_id	= XTX_ID,
23223 		.model_id	= XTX_XT25F64B,
23224 		.total_size	= 8 * 1024,
23225 		.page_size	= 256,
23226 		/* Supports SFDP */
23227 		/* OTP: 4 x 256 bytes */
23228 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
23229 		.tested		= TEST_OK_PREW,
23230 		.probe		= PROBE_SPI_RDID,
23231 		.probe_timing	= TIMING_ZERO,
23232 		.block_erasers	=
23233 		{
23234 			{
23235 				.eraseblocks = { {4 * 1024, 2048} },
23236 				.block_erase = SPI_BLOCK_ERASE_20,
23237 			}, {
23238 				.eraseblocks = { {32 * 1024, 256} },
23239 				.block_erase = SPI_BLOCK_ERASE_52,
23240 			}, {
23241 				.eraseblocks = { {64 * 1024, 128} },
23242 				.block_erase = SPI_BLOCK_ERASE_D8,
23243 			}, {
23244 				.eraseblocks = { {8 * 1024 * 1024, 1} },
23245 				.block_erase = SPI_BLOCK_ERASE_60,
23246 			}, {
23247 				.eraseblocks = { {8 * 1024 * 1024, 1} },
23248 				.block_erase = SPI_BLOCK_ERASE_C7,
23249 			}
23250 		},
23251 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP4_SRWD,
23252 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP4_SRWD,
23253 		.write		= SPI_CHIP_WRITE256,
23254 		.read		= SPI_CHIP_READ,
23255 		.voltage	= {2700, 3600},
23256 	},
23257 
23258 	{
23259 		.vendor		= "XTX Technology Limited",
23260 		.name		= "XT25F128B",
23261 		.bustype	= BUS_SPI,
23262 		.manufacture_id	= XTX_ID,
23263 		.model_id	= XTX_XT25F128B,
23264 		.total_size	= 16 * 1024,
23265 		.page_size	= 256,
23266 		/* Supports SFDP */
23267 		/* OTP: 4 x 256 bytes */
23268 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
23269 		.tested		= TEST_OK_PREW,
23270 		.probe		= PROBE_SPI_RDID,
23271 		.probe_timing	= TIMING_ZERO,
23272 		.block_erasers	=
23273 		{
23274 			{
23275 				.eraseblocks = { {4 * 1024, 4096} },
23276 				.block_erase = SPI_BLOCK_ERASE_20,
23277 			}, {
23278 				.eraseblocks = { {32 * 1024, 512} },
23279 				.block_erase = SPI_BLOCK_ERASE_52,
23280 			}, {
23281 				.eraseblocks = { {64 * 1024, 256} },
23282 				.block_erase = SPI_BLOCK_ERASE_D8,
23283 			}, {
23284 				.eraseblocks = { {16 * 1024 * 1024, 1} },
23285 				.block_erase = SPI_BLOCK_ERASE_60,
23286 			}, {
23287 				.eraseblocks = { {16 * 1024 * 1024, 1} },
23288 				.block_erase = SPI_BLOCK_ERASE_C7,
23289 			}
23290 		},
23291 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_BP4_SRWD,
23292 		.unlock		= SPI_DISABLE_BLOCKPROTECT_BP4_SRWD,
23293 		.write		= SPI_CHIP_WRITE256,
23294 		.read		= SPI_CHIP_READ,
23295 		.voltage	= {2700, 3600},
23296 	},
23297 
23298 	{
23299 		.vendor		= "Zetta Device",
23300 		.name		= "ZD25D20",
23301 		.bustype	= BUS_SPI,
23302 		.manufacture_id	= ZETTA_ID,
23303 		.model_id	= ZETTA_ZD25D20,
23304 		.total_size	= 256,
23305 		.page_size	= 256,
23306 		.feature_bits	= FEATURE_WRSR_WREN,
23307 		.tested		= TEST_UNTESTED,
23308 		.probe		= PROBE_SPI_RDID,
23309 		.probe_timing	= TIMING_ZERO,
23310 		.block_erasers	=
23311 		{
23312 			{
23313 				.eraseblocks = { {4 * 1024, 64} },
23314 				.block_erase = SPI_BLOCK_ERASE_20,
23315 			}, {
23316 				.eraseblocks = { {32 * 1024, 8} },
23317 				.block_erase = SPI_BLOCK_ERASE_52,
23318 			}, {
23319 				.eraseblocks = { {64 * 1024, 4} },
23320 				.block_erase = SPI_BLOCK_ERASE_D8,
23321 			}, {
23322 				.eraseblocks = { {256 * 1024, 1} },
23323 				.block_erase = SPI_BLOCK_ERASE_60,
23324 			}, {
23325 				.eraseblocks = { {256 * 1024, 1} },
23326 				.block_erase = SPI_BLOCK_ERASE_C7,
23327 			}
23328 		},
23329 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
23330 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
23331 		.write		= SPI_CHIP_WRITE256,
23332 		.read		= SPI_CHIP_READ,
23333 		.voltage	= {2700, 3600},
23334 	},
23335 
23336 	{
23337 		.vendor		= "Zetta Device",
23338 		.name		= "ZD25D40",
23339 		.bustype	= BUS_SPI,
23340 		.manufacture_id	= ZETTA_ID,
23341 		.model_id	= ZETTA_ZD25D40,
23342 		.total_size	= 512,
23343 		.page_size	= 256,
23344 		.feature_bits	= FEATURE_WRSR_WREN,
23345 		.tested		= TEST_UNTESTED,
23346 		.probe		= PROBE_SPI_RDID,
23347 		.probe_timing	= TIMING_ZERO,
23348 		.block_erasers	=
23349 		{
23350 			{
23351 				.eraseblocks = { {4 * 1024, 128} },
23352 				.block_erase = SPI_BLOCK_ERASE_20,
23353 			}, {
23354 				.eraseblocks = { {32 * 1024, 16} },
23355 				.block_erase = SPI_BLOCK_ERASE_52,
23356 			}, {
23357 				.eraseblocks = { {64 * 1024, 8} },
23358 				.block_erase = SPI_BLOCK_ERASE_D8,
23359 			}, {
23360 				.eraseblocks = { {512 * 1024, 1} },
23361 				.block_erase = SPI_BLOCK_ERASE_60,
23362 			}, {
23363 				.eraseblocks = { {512 * 1024, 1} },
23364 				.block_erase = SPI_BLOCK_ERASE_C7,
23365 			}
23366 		},
23367 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
23368 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
23369 		.write		= SPI_CHIP_WRITE256,
23370 		.read		= SPI_CHIP_READ,
23371 		.voltage	= {2700, 3600},
23372 	},
23373 
23374 	{
23375 		.vendor		= "Zetta Device",
23376 		.name		= "ZD25LQ128",
23377 		.bustype	= BUS_SPI,
23378 		.manufacture_id	= ZETTA_ID,
23379 		.model_id	= ZETTA_ZD25LQ128_REMS,
23380 		.total_size	= 16384,
23381 		.page_size	= 256,
23382 		.feature_bits	= FEATURE_WRSR_WREN,
23383 		.tested		= TEST_OK_PREW,
23384 		.probe		= PROBE_SPI_REMS,
23385 		.probe_timing	= TIMING_ZERO,
23386 		.block_erasers	=
23387 		{
23388 			{
23389 				.eraseblocks = { {4 * 1024, 4096} },
23390 				.block_erase = SPI_BLOCK_ERASE_20,
23391 			}, {
23392 				.eraseblocks = { {32 * 1024, 512} },
23393 				.block_erase = SPI_BLOCK_ERASE_52,
23394 			}, {
23395 				.eraseblocks = { {64 * 1024, 256} },
23396 				.block_erase = SPI_BLOCK_ERASE_D8,
23397 			}, {
23398 				.eraseblocks = { {16 * 1024 * 1024, 1} },
23399 				.block_erase = SPI_BLOCK_ERASE_60,
23400 			}, {
23401 				.eraseblocks = { {16 * 1024 * 1024, 1} },
23402 				.block_erase = SPI_BLOCK_ERASE_C7,
23403 			}
23404 		},
23405 		.printlock	= SPI_PRETTYPRINT_STATUS_REGISTER_PLAIN, /* TODO: improve */
23406 		.unlock		= SPI_DISABLE_BLOCKPROTECT,
23407 		.write		= SPI_CHIP_WRITE256,
23408 		.read		= SPI_CHIP_READ,
23409 		.voltage	= {1650, 1950},
23410 	},
23411 
23412 	{
23413 		.vendor		= "Unknown",
23414 		.name		= "SFDP-capable chip",
23415 		.bustype	= BUS_SPI,
23416 		.manufacture_id	= GENERIC_MANUF_ID,
23417 		.model_id	= SFDP_DEVICE_ID,
23418 		.total_size	= 0, /* set by probing function */
23419 		.page_size	= 0, /* set by probing function */
23420 		.feature_bits	= 0, /* set by probing function */
23421 		/* We present our own "report this" text hence we do not */
23422 		/* want the default "This flash part has status UNTESTED..." */
23423 		/* text to be printed. */
23424 		.tested		= TEST_OK_PREW,
23425 		.probe		= PROBE_SPI_SFDP,
23426 		.block_erasers	= {}, /* set by probing function */
23427 		.unlock		= SPI_DISABLE_BLOCKPROTECT, /* is this safe? */
23428 		.write		= 0, /* set by probing function */
23429 		.read		= SPI_CHIP_READ,
23430 		/* FIXME: some vendor extensions define this */
23431 		.voltage	= {0},
23432 	},
23433 
23434 	{
23435 		.vendor		= "Programmer",
23436 		.name		= "Opaque flash chip",
23437 		.bustype	= BUS_PROG,
23438 		.manufacture_id	= PROGMANUF_ID,
23439 		.model_id	= PROGDEV_ID,
23440 		.total_size	= 0,
23441 		.page_size	= 256,
23442 		/* probe is assumed to work, rest will be filled in by probe */
23443 		.tested		= TEST_OK_PROBE,
23444 		.probe		= PROBE_OPAQUE,
23445 		/* eraseblock sizes will be set by the probing function */
23446 		.block_erasers	=
23447 		{
23448 			{
23449 				.block_erase = OPAQUE_ERASE,
23450 			}
23451 		},
23452 		.write		= WRITE_OPAQUE,
23453 		.read		= READ_OPAQUE,
23454 	},
23455 
23456 	{
23457 		.vendor		= "AMIC",
23458 		.name		= "unknown AMIC SPI chip",
23459 		.bustype	= BUS_SPI,
23460 		.manufacture_id	= AMIC_ID,
23461 		.model_id	= GENERIC_DEVICE_ID,
23462 		.total_size	= 0,
23463 		.page_size	= 256,
23464 		.tested		= TEST_BAD_PREW,
23465 		.probe		= PROBE_SPI_RDID4,
23466 		.probe_timing	= TIMING_ZERO,
23467 		.write		= 0,
23468 		.read		= 0,
23469 	},
23470 
23471 	{
23472 		.vendor		= "Atmel",
23473 		.name		= "unknown Atmel SPI chip",
23474 		.bustype	= BUS_SPI,
23475 		.manufacture_id	= ATMEL_ID,
23476 		.model_id	= GENERIC_DEVICE_ID,
23477 		.total_size	= 0,
23478 		.page_size	= 256,
23479 		.tested		= TEST_BAD_PREW,
23480 		.probe		= PROBE_SPI_RDID,
23481 		.probe_timing	= TIMING_ZERO,
23482 		.write		= 0,
23483 		.read		= 0,
23484 	},
23485 
23486 	{
23487 		.vendor		= "Eon",
23488 		.name		= "unknown Eon SPI chip",
23489 		.bustype	= BUS_SPI,
23490 		.manufacture_id	= EON_ID_NOPREFIX,
23491 		.model_id	= GENERIC_DEVICE_ID,
23492 		.total_size	= 0,
23493 		.page_size	= 256,
23494 		.tested		= TEST_BAD_PREW,
23495 		.probe		= PROBE_SPI_RDID,
23496 		.probe_timing	= TIMING_ZERO,
23497 		.write		= 0,
23498 		.read		= 0,
23499 	},
23500 
23501 	{
23502 		.vendor		= "Macronix",
23503 		.name		= "unknown Macronix SPI chip",
23504 		.bustype	= BUS_SPI,
23505 		.manufacture_id	= MACRONIX_ID,
23506 		.model_id	= GENERIC_DEVICE_ID,
23507 		.total_size	= 0,
23508 		.page_size	= 256,
23509 		.tested		= TEST_BAD_PREW,
23510 		.probe		= PROBE_SPI_RDID,
23511 		.probe_timing	= TIMING_ZERO,
23512 		.write		= 0,
23513 		.read		= 0,
23514 	},
23515 
23516 	{
23517 		.vendor		= "PMC",
23518 		.name		= "unknown PMC SPI chip",
23519 		.bustype	= BUS_SPI,
23520 		.manufacture_id	= PMC_ID,
23521 		.model_id	= GENERIC_DEVICE_ID,
23522 		.total_size	= 0,
23523 		.page_size	= 256,
23524 		.tested		= TEST_BAD_PREW,
23525 		.probe		= PROBE_SPI_RDID,
23526 		.probe_timing	= TIMING_ZERO,
23527 		.write		= 0,
23528 		.read		= 0,
23529 	},
23530 
23531 	{
23532 		.vendor		= "SST",
23533 		.name		= "unknown SST SPI chip",
23534 		.bustype	= BUS_SPI,
23535 		.manufacture_id	= SST_ID,
23536 		.model_id	= GENERIC_DEVICE_ID,
23537 		.total_size	= 0,
23538 		.page_size	= 256,
23539 		.tested		= TEST_BAD_PREW,
23540 		.probe		= PROBE_SPI_RDID,
23541 		.probe_timing	= TIMING_ZERO,
23542 		.write		= 0,
23543 		.read		= 0,
23544 	},
23545 
23546 	{
23547 		.vendor		= "ST",
23548 		.name		= "unknown ST SPI chip",
23549 		.bustype	= BUS_SPI,
23550 		.manufacture_id	= ST_ID,
23551 		.model_id	= GENERIC_DEVICE_ID,
23552 		.total_size	= 0,
23553 		.page_size	= 256,
23554 		.tested		= TEST_BAD_PREW,
23555 		.probe		= PROBE_SPI_RDID,
23556 		.probe_timing	= TIMING_ZERO,
23557 		.write		= 0,
23558 		.read		= 0,
23559 	},
23560 
23561 	{
23562 		.vendor		= "Sanyo",
23563 		.name		= "unknown Sanyo SPI chip",
23564 		.bustype	= BUS_SPI,
23565 		.manufacture_id	= SANYO_ID,
23566 		.model_id	= GENERIC_DEVICE_ID,
23567 		.total_size	= 0,
23568 		.page_size	= 256,
23569 		.tested		= TEST_BAD_PREW,
23570 		.probe		= PROBE_SPI_RDID,
23571 		.probe_timing	= TIMING_ZERO,
23572 		.write		= 0,
23573 		.read		= 0,
23574 	},
23575 
23576 	{
23577 		.vendor		= "Winbond",
23578 		.name		= "unknown Winbond (ex Nexcom) SPI chip",
23579 		.bustype	= BUS_SPI,
23580 		.manufacture_id	= WINBOND_NEX_ID,
23581 		.model_id	= GENERIC_DEVICE_ID,
23582 		.total_size	= 0,
23583 		.page_size	= 256,
23584 		.tested		= TEST_BAD_PREW,
23585 		.probe		= PROBE_SPI_RDID,
23586 		.probe_timing	= TIMING_ZERO,
23587 		.write		= 0,
23588 		.read		= 0,
23589 	},
23590 
23591 	{
23592 		.vendor		= "Generic",
23593 		.name		= "unknown SPI chip (RDID)",
23594 		.bustype	= BUS_SPI,
23595 		.manufacture_id	= GENERIC_MANUF_ID,
23596 		.model_id	= GENERIC_DEVICE_ID,
23597 		.total_size	= 0,
23598 		.page_size	= 256,
23599 		.tested		= TEST_BAD_PREW,
23600 		.probe		= PROBE_SPI_RDID,
23601 		.write		= 0,
23602 	},
23603 
23604 	{
23605 		.vendor		= "Generic",
23606 		.name		= "unknown SPI chip (REMS)",
23607 		.bustype	= BUS_SPI,
23608 		.manufacture_id	= GENERIC_MANUF_ID,
23609 		.model_id	= GENERIC_DEVICE_ID,
23610 		.total_size	= 0,
23611 		.page_size	= 256,
23612 		.tested		= TEST_BAD_PREW,
23613 		.probe		= PROBE_SPI_REMS,
23614 		.write		= 0,
23615 	},
23616 
23617 	{0}
23618 };
23619 
23620 const unsigned int flashchips_size = ARRAY_SIZE(flashchips);
23621