blob: 5904e2bd53c5dea042f151a46d08733bfa0c6d4a [file] [log] [blame]
Ollie Lho184a4042005-11-26 21:55:36 +00001/*
Uwe Hermannd1107642007-08-29 17:52:32 +00002 * This file is part of the flashrom project.
Ollie Lho184a4042005-11-26 21:55:36 +00003 *
Uwe Hermannd22a1d42007-09-09 20:21:05 +00004 * Copyright (C) 2000 Silicon Integrated System Corporation
5 * Copyright (C) 2004 Tyan Corp
Stefan Reinauer4c390c82008-07-02 13:33:09 +00006 * Copyright (C) 2005-2008 coresystems GmbH <stepan@openbios.org>
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00007 * Copyright (C) 2006-2009 Carl-Daniel Hailfinger
Sean Nelsonc57a9202010-01-04 17:15:23 +00008 * Copyright (C) 2009 Sean Nelson <audiohacked@gmail.com>
Uwe Hermannd1107642007-08-29 17:52:32 +00009 *
Stefan Reinauerce532972007-05-23 17:20:56 +000010 * 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.
Ollie Lho184a4042005-11-26 21:55:36 +000014 *
Stefan Reinauerce532972007-05-23 17:20:56 +000015 * 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.
Ollie Lho184a4042005-11-26 21:55:36 +000019 *
Stefan Reinauerce532972007-05-23 17:20:56 +000020 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
Uwe Hermannd1107642007-08-29 17:52:32 +000022 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Ollie Lho184a4042005-11-26 21:55:36 +000023 */
24
25#include "flash.h"
Carl-Daniel Hailfinger08454642009-06-15 14:14:48 +000026#include "flashchips.h"
Sean Nelson14ba6682010-02-26 05:48:29 +000027#include "chipdrivers.h"
Ollie Lho184a4042005-11-26 21:55:36 +000028
Uwe Hermannfc425e82008-03-16 02:06:25 +000029/**
Uwe Hermanna9720402009-05-21 15:55:46 +000030 * List of supported flash chips.
Uwe Hermannfc425e82008-03-16 02:06:25 +000031 *
32 * Please keep the list sorted by vendor name and chip name, so that
33 * the output of 'flashrom -L' is alphabetically sorted.
34 */
Carl-Daniel Hailfinger4c823182011-05-04 00:39:50 +000035const struct flashchip flashchips[] = {
Uwe Hermannfc425e82008-03-16 02:06:25 +000036
Carl-Daniel Hailfinger21eedec2009-07-23 12:42:01 +000037 /*
38 * .vendor = Vendor name
39 * .name = Chip name
40 * .bustype = Supported flash bus types (Parallel, LPC...)
41 * .manufacture_id = Manufacturer chip ID
42 * .model_id = Model chip ID
43 * .total_size = Total size in (binary) kbytes
44 * .page_size = Page or eraseblock(?) size in bytes
45 * .tested = Test status
46 * .probe = Probe function
47 * .probe_timing = Probe function delay
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +000048 * .block_erasers[] = Array of erase layouts and erase functions
49 * {
50 * .eraseblocks[] = Array of { blocksize, blockcount }
51 * .block_erase = Block erase function
52 * }
Sean Nelson6e0b9122010-02-19 00:52:10 +000053 * .printlock = Chip lock status function
54 * .unlock = Chip unlock function
Carl-Daniel Hailfinger21eedec2009-07-23 12:42:01 +000055 * .write = Chip write function
56 * .read = Chip read function
Steven Zakuleccbe370e2011-06-03 07:26:31 +000057 * .voltage = Voltage range in millivolt
FENG yu ningff692fb2008-12-08 18:15:10 +000058 */
59
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000060 {
61 .vendor = "AMD",
Uwe Hermanna8b37272009-06-19 15:54:39 +000062 .name = "Am29F010A/B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +000063 .bustype = BUS_PARALLEL,
Uwe Hermanna8b37272009-06-19 15:54:39 +000064 .manufacture_id = AMD_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +000065 .model_id = AMD_AM29F010B, /* Same as Am29F010A */
Uwe Hermanna8b37272009-06-19 15:54:39 +000066 .total_size = 128,
67 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +000068 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +000069 .tested = TEST_OK_PRE,
Sean Nelson35727f72010-01-28 23:55:12 +000070 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +000071 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +000072 .block_erasers =
73 {
74 {
75 .eraseblocks = { {16 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +000076 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +000077 }, {
78 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +000079 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +000080 },
81 },
Sean Nelson35727f72010-01-28 23:55:12 +000082 .write = write_jedec_1,
Uwe Hermanna8b37272009-06-19 15:54:39 +000083 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +000084 .voltage = {4500, 5500},
Uwe Hermanna8b37272009-06-19 15:54:39 +000085 },
86
87 {
88 .vendor = "AMD",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000089 .name = "Am29F002(N)BB",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +000090 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000091 .manufacture_id = AMD_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +000092 .model_id = AMD_AM29F002BB,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000093 .total_size = 256,
94 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +000095 .feature_bits = FEATURE_SHORT_RESET | FEATURE_ADDR_2AA,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000096 .tested = TEST_UNTESTED,
97 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +000098 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +000099 .block_erasers =
100 {
101 {
102 .eraseblocks = {
103 {16 * 1024, 1},
104 {8 * 1024, 2},
105 {32 * 1024, 1},
106 {64 * 1024, 3},
107 },
108 .block_erase = erase_sector_jedec,
109 }, {
110 .eraseblocks = { {256 * 1024, 1} },
111 .block_erase = erase_chip_block_jedec,
112 },
113 },
Michael Karcher1c296ca2009-11-27 17:49:42 +0000114 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000115 .read = read_memmapped,
Steven Zakulec7d257b42011-07-19 08:50:18 +0000116 .voltage = {4750, 5250}, /* 4.75-5.25V for type -55, others 4.5-5.5V */
FENG yu ningff692fb2008-12-08 18:15:10 +0000117 },
118
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000119 {
120 .vendor = "AMD",
121 .name = "Am29F002(N)BT",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +0000122 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000123 .manufacture_id = AMD_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +0000124 .model_id = AMD_AM29F002BT,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000125 .total_size = 256,
126 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +0000127 .feature_bits = FEATURE_EITHER_RESET | FEATURE_ADDR_2AA,
128 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000129 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +0000130 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000131 .block_erasers =
132 {
133 {
134 .eraseblocks = {
135 {64 * 1024, 3},
136 {32 * 1024, 1},
137 {8 * 1024, 2},
138 {16 * 1024, 1},
139 },
140 .block_erase = erase_sector_jedec,
141 }, {
142 .eraseblocks = { {256 * 1024, 1} },
143 .block_erase = erase_chip_block_jedec,
144 },
145 },
Michael Karcher1c296ca2009-11-27 17:49:42 +0000146 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000147 .read = read_memmapped,
Steven Zakulec7d257b42011-07-19 08:50:18 +0000148 .voltage = {4750, 5250}, /* 4.75-5.25V for type -55, others 4.5-5.5V */
FENG yu ningff692fb2008-12-08 18:15:10 +0000149 },
150
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000151 {
152 .vendor = "AMD",
153 .name = "Am29F016D",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +0000154 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000155 .manufacture_id = AMD_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +0000156 .model_id = AMD_AM29F016D,
Sean Nelson72a9a022009-12-22 22:15:33 +0000157 .total_size = 2 * 1024,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000158 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000159 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000160 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +0000161 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +0000162 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000163 .block_erasers =
164 {
165 {
166 .eraseblocks = { {64 * 1024, 32} },
Sean Nelson35727f72010-01-28 23:55:12 +0000167 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000168 }, {
169 .eraseblocks = { {2048 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000170 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000171 },
172 },
Sean Nelson35727f72010-01-28 23:55:12 +0000173 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000174 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000175 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +0000176 },
177
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000178 {
179 .vendor = "AMD",
180 .name = "Am29F040B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +0000181 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000182 .manufacture_id = AMD_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +0000183 .model_id = AMD_AM29F040B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000184 .total_size = 512,
185 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000186 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
187 .tested = TEST_UNTESTED,
188 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +0000189 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000190 .block_erasers =
191 {
192 {
193 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +0000194 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000195 }, {
196 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000197 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000198 },
199 },
Sean Nelson35727f72010-01-28 23:55:12 +0000200 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000201 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000202 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +0000203 },
204
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000205 {
206 .vendor = "AMD",
Peter Stuge8440cc02009-01-25 23:55:12 +0000207 .name = "Am29F080B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +0000208 .bustype = BUS_PARALLEL,
Mateusz Murawski5bae4382009-06-02 00:38:14 +0000209 .manufacture_id = AMD_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +0000210 .model_id = AMD_AM29F080B,
Peter Stuge8440cc02009-01-25 23:55:12 +0000211 .total_size = 1024,
212 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000213 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +0000214 .tested = TEST_UNTESTED,
215 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +0000216 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000217 .block_erasers =
218 {
219 {
220 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson35727f72010-01-28 23:55:12 +0000221 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000222 }, {
223 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000224 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000225 },
226 },
Sean Nelson35727f72010-01-28 23:55:12 +0000227 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000228 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000229 .voltage = {4500, 5500},
Peter Stuge8440cc02009-01-25 23:55:12 +0000230 },
231
232 {
233 .vendor = "AMD",
Carl-Daniel Hailfingerc753e5b2011-02-05 12:11:17 +0000234 .name = "Am29LV001BB",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +0000235 .bustype = BUS_PARALLEL,
Carl-Daniel Hailfingerc753e5b2011-02-05 12:11:17 +0000236 .manufacture_id = AMD_ID,
237 .model_id = AMD_AM29LV001BB,
238 .total_size = 128,
239 .page_size = 64 * 1024, /* unused */
240 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
241 .tested = TEST_OK_PREW,
242 .probe = probe_jedec,
243 .probe_timing = TIMING_ZERO,
244 .block_erasers =
245 {
246 {
247 .eraseblocks = {
248 {8 * 1024, 1},
249 {4 * 1024, 2},
250 {16 * 1024, 7},
251 },
252 .block_erase = erase_sector_jedec,
253 }, {
254 .eraseblocks = { {128 * 1024, 1} },
255 .block_erase = erase_chip_block_jedec,
256 },
257 },
258 .write = write_jedec_1,
259 .read = read_memmapped,
Steven Zakulec7d257b42011-07-19 08:50:18 +0000260 .voltage = {3000, 3600}, /* 3.0-3.6V for type -45R, others 2.7-3.6V */
Carl-Daniel Hailfingerc753e5b2011-02-05 12:11:17 +0000261 },
262
263 {
264 .vendor = "AMD",
265 .name = "Am29LV001BT",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +0000266 .bustype = BUS_PARALLEL,
Carl-Daniel Hailfingerc753e5b2011-02-05 12:11:17 +0000267 .manufacture_id = AMD_ID,
268 .model_id = AMD_AM29LV001BT,
269 .total_size = 128,
270 .page_size = 64 * 1024, /* unused */
271 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
272 .tested = TEST_UNTESTED,
273 .probe = probe_jedec,
274 .probe_timing = TIMING_ZERO,
275 .block_erasers =
276 {
277 {
278 .eraseblocks = {
279 {16 * 1024, 7},
280 {4 * 1024, 2},
281 {8 * 1024, 1},
282 },
283 .block_erase = erase_sector_jedec,
284 }, {
285 .eraseblocks = { {128 * 1024, 1} },
286 .block_erase = erase_chip_block_jedec,
287 },
288 },
289 .write = write_jedec_1,
290 .read = read_memmapped,
Steven Zakulec7d257b42011-07-19 08:50:18 +0000291 .voltage = {3000, 3600}, /* 3.0-3.6V for type -45R, others 2.7-3.6V */
Carl-Daniel Hailfingerc753e5b2011-02-05 12:11:17 +0000292 },
293
294 {
295 .vendor = "AMD",
296 .name = "Am29LV002BB",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +0000297 .bustype = BUS_PARALLEL,
Carl-Daniel Hailfingerc753e5b2011-02-05 12:11:17 +0000298 .manufacture_id = AMD_ID,
299 .model_id = AMD_AM29LV002BB,
300 .total_size = 256,
301 .page_size = 64 * 1024, /* unused */
302 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
303 .tested = TEST_UNTESTED,
304 .probe = probe_jedec,
305 .probe_timing = TIMING_ZERO,
306 .block_erasers =
307 {
308 {
309 .eraseblocks = {
310 {16 * 1024, 1},
311 {8 * 1024, 2},
312 {32 * 1024, 1},
313 {64 * 1024, 3},
314 },
315 .block_erase = erase_sector_jedec,
316 }, {
317 .eraseblocks = { {256 * 1024, 1} },
318 .block_erase = erase_chip_block_jedec,
319 },
320 },
321 .write = write_jedec_1,
322 .read = read_memmapped,
Steven Zakulec7d257b42011-07-19 08:50:18 +0000323 .voltage = {3000, 3600}, /* 3.0-3.6V for type -55, others 2.7-3.6V */
Carl-Daniel Hailfingerc753e5b2011-02-05 12:11:17 +0000324 },
325
326 {
327 .vendor = "AMD",
328 .name = "Am29LV002BT",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +0000329 .bustype = BUS_PARALLEL,
Carl-Daniel Hailfingerc753e5b2011-02-05 12:11:17 +0000330 .manufacture_id = AMD_ID,
331 .model_id = AMD_AM29LV002BT,
332 .total_size = 256,
333 .page_size = 64 * 1024, /* unused */
334 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
335 .tested = TEST_UNTESTED,
336 .probe = probe_jedec,
337 .probe_timing = TIMING_ZERO,
338 .block_erasers =
339 {
340 {
341 .eraseblocks = {
342 {64 * 1024, 3},
343 {32 * 1024, 1},
344 {8 * 1024, 2},
345 {16 * 1024, 1},
346 },
347 .block_erase = erase_sector_jedec,
348 }, {
349 .eraseblocks = { {256 * 1024, 1} },
350 .block_erase = erase_chip_block_jedec,
351 },
352 },
353 .write = write_jedec_1,
354 .read = read_memmapped,
Steven Zakulec7d257b42011-07-19 08:50:18 +0000355 .voltage = {3000, 3600}, /* 3.0-3.6V for type -55, others 2.7-3.6V */
Carl-Daniel Hailfingerc753e5b2011-02-05 12:11:17 +0000356 },
357
358 {
359 .vendor = "AMD",
360 .name = "Am29LV004BB",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +0000361 .bustype = BUS_PARALLEL,
Carl-Daniel Hailfingerc753e5b2011-02-05 12:11:17 +0000362 .manufacture_id = AMD_ID,
363 .model_id = AMD_AM29LV004BB,
364 .total_size = 512,
365 .page_size = 64 * 1024, /* unused */
366 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
367 .tested = TEST_UNTESTED,
368 .probe = probe_jedec,
369 .probe_timing = TIMING_ZERO,
370 .block_erasers =
371 {
372 {
373 .eraseblocks = {
374 {16 * 1024, 1},
375 {8 * 1024, 2},
376 {32 * 1024, 1},
377 {64 * 1024, 7},
378 },
379 .block_erase = erase_sector_jedec,
380 }, {
381 .eraseblocks = { {512 * 1024, 1} },
382 .block_erase = erase_chip_block_jedec,
383 },
384 },
385 .write = write_jedec_1,
386 .read = read_memmapped,
Steven Zakulec7d257b42011-07-19 08:50:18 +0000387 .voltage = {2700, 3600},
Carl-Daniel Hailfingerc753e5b2011-02-05 12:11:17 +0000388 },
389
390 {
391 .vendor = "AMD",
392 .name = "Am29LV004BT",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +0000393 .bustype = BUS_PARALLEL,
Carl-Daniel Hailfingerc753e5b2011-02-05 12:11:17 +0000394 .manufacture_id = AMD_ID,
395 .model_id = AMD_AM29LV004BT,
396 .total_size = 512,
397 .page_size = 64 * 1024, /* unused */
398 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
399 .tested = TEST_UNTESTED,
400 .probe = probe_jedec,
401 .probe_timing = TIMING_ZERO,
402 .block_erasers =
403 {
404 {
405 .eraseblocks = {
406 {64 * 1024, 7},
407 {32 * 1024, 1},
408 {8 * 1024, 2},
409 {16 * 1024, 1},
410 },
411 .block_erase = erase_sector_jedec,
412 }, {
413 .eraseblocks = { {512 * 1024, 1} },
414 .block_erase = erase_chip_block_jedec,
415 },
416 },
417 .write = write_jedec_1,
418 .read = read_memmapped,
Steven Zakulec7d257b42011-07-19 08:50:18 +0000419 .voltage = {2700, 3600},
Carl-Daniel Hailfingerc753e5b2011-02-05 12:11:17 +0000420 },
421
422 {
423 .vendor = "AMD",
424 .name = "Am29LV008BB",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +0000425 .bustype = BUS_PARALLEL,
Carl-Daniel Hailfingerc753e5b2011-02-05 12:11:17 +0000426 .manufacture_id = AMD_ID,
427 .model_id = AMD_AM29LV008BB,
428 .total_size = 1024,
429 .page_size = 64 * 1024, /* unused */
430 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Uwe Hermann09ebd522011-08-25 22:54:23 +0000431 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingerc753e5b2011-02-05 12:11:17 +0000432 .probe = probe_jedec,
433 .probe_timing = TIMING_ZERO,
434 .block_erasers =
435 {
436 {
437 .eraseblocks = {
438 {16 * 1024, 1},
439 {8 * 1024, 2},
440 {32 * 1024, 1},
441 {64 * 1024, 15},
442 },
443 .block_erase = erase_sector_jedec,
444 }, {
445 .eraseblocks = { {1024 * 1024, 1} },
446 .block_erase = erase_chip_block_jedec,
447 },
448 },
449 .write = write_jedec_1,
450 .read = read_memmapped,
Steven Zakulec7d257b42011-07-19 08:50:18 +0000451 .voltage = {3000, 3600} /* 3.0-3.6V for type -70R, others 2.7-3.6V */
Carl-Daniel Hailfingerc753e5b2011-02-05 12:11:17 +0000452 },
453
454 {
455 .vendor = "AMD",
456 .name = "Am29LV008BT",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +0000457 .bustype = BUS_PARALLEL,
Carl-Daniel Hailfingerc753e5b2011-02-05 12:11:17 +0000458 .manufacture_id = AMD_ID,
459 .model_id = AMD_AM29LV008BT,
460 .total_size = 1024,
461 .page_size = 64 * 1024, /* unused */
462 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
463 .tested = TEST_UNTESTED,
464 .probe = probe_jedec,
465 .probe_timing = TIMING_ZERO,
466 .block_erasers =
467 {
468 {
469 .eraseblocks = {
470 {64 * 1024, 15},
471 {32 * 1024, 1},
472 {8 * 1024, 2},
473 {16 * 1024, 1},
474 },
475 .block_erase = erase_sector_jedec,
476 }, {
477 .eraseblocks = { {1024 * 1024, 1} },
478 .block_erase = erase_chip_block_jedec,
479 },
480 },
481 .write = write_jedec_1,
482 .read = read_memmapped,
Steven Zakulec7d257b42011-07-19 08:50:18 +0000483 .voltage = {3000, 3600} /* 3.0-3.6V for type -70R, others 2.7-3.6V */
Carl-Daniel Hailfingerc753e5b2011-02-05 12:11:17 +0000484 },
485
486 {
487 .vendor = "AMD",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000488 .name = "Am29LV040B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +0000489 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000490 .manufacture_id = AMD_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +0000491 .model_id = AMD_AM29LV040B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000492 .total_size = 512,
493 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000494 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +0000495 .tested = TEST_OK_PRE,
Sean Nelson35727f72010-01-28 23:55:12 +0000496 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +0000497 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000498 .block_erasers =
499 {
500 {
501 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +0000502 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000503 }, {
504 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000505 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000506 },
507 },
Sean Nelson35727f72010-01-28 23:55:12 +0000508 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000509 .read = read_memmapped,
Steven Zakulec7d257b42011-07-19 08:50:18 +0000510 .voltage = {3000, 3600}, /* 3.0-3.6V for type -60R, others 2.7-3.6V*/
FENG yu ningff692fb2008-12-08 18:15:10 +0000511 },
512
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000513 {
Peter Stuge8440cc02009-01-25 23:55:12 +0000514 .vendor = "AMD",
515 .name = "Am29LV081B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +0000516 .bustype = BUS_PARALLEL,
Mateusz Murawski5bae4382009-06-02 00:38:14 +0000517 .manufacture_id = AMD_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +0000518 .model_id = AMD_AM29LV080B,
Peter Stuge8440cc02009-01-25 23:55:12 +0000519 .total_size = 1024,
520 .page_size = 64 * 1024,
David Borg204f4652010-12-04 03:26:40 +0000521 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, /* datasheet specifies address as don't care */
Peter Stuge8440cc02009-01-25 23:55:12 +0000522 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +0000523 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +0000524 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000525 .block_erasers =
526 {
527 {
528 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson35727f72010-01-28 23:55:12 +0000529 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000530 }, {
531 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000532 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000533 },
534 },
Sean Nelson35727f72010-01-28 23:55:12 +0000535 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000536 .read = read_memmapped,
Steven Zakulec7d257b42011-07-19 08:50:18 +0000537 .voltage = {3000, 3600}, /* 3.0-3.6V for type -70R, others 2.7-3.6V */
Peter Stuge8440cc02009-01-25 23:55:12 +0000538 },
539
540 {
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000541 .vendor = "AMIC",
542 .name = "A25L05PT",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +0000543 .bustype = BUS_SPI,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000544 .manufacture_id = AMIC_ID,
545 .model_id = AMIC_A25L05PT,
546 .total_size = 64,
547 .page_size = 256,
548 .tested = TEST_UNTESTED,
549 .probe = probe_spi_rdid4,
550 .probe_timing = TIMING_ZERO,
551 .block_erasers =
552 {
553 {
554 .eraseblocks = {
555 {32 * 1024, 1},
556 {16 * 1024, 1},
557 {8 * 1024, 1},
558 {4 * 1024, 2},
559 },
560 .block_erase = spi_block_erase_d8,
561 }, {
562 .eraseblocks = { {64 * 1024, 1} },
563 .block_erase = spi_block_erase_c7,
564 }
565 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000566 .printlock = spi_prettyprint_status_register_amic_a25l05p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000567 .unlock = spi_disable_blockprotect,
568 .write = spi_chip_write_256,
569 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000570 .voltage = {2700, 3600},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000571 },
572
573 {
574 .vendor = "AMIC",
575 .name = "A25L05PU",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +0000576 .bustype = BUS_SPI,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000577 .manufacture_id = AMIC_ID,
578 .model_id = AMIC_A25L05PU,
579 .total_size = 64,
580 .page_size = 256,
581 .tested = TEST_UNTESTED,
582 .probe = probe_spi_rdid4,
583 .probe_timing = TIMING_ZERO,
584 .block_erasers =
585 {
586 {
587 .eraseblocks = {
588 {4 * 1024, 2},
589 {8 * 1024, 1},
590 {16 * 1024, 1},
591 {32 * 1024, 1},
592 },
593 .block_erase = spi_block_erase_d8,
594 }, {
595 .eraseblocks = { {64 * 1024, 1} },
596 .block_erase = spi_block_erase_c7,
597 }
598 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000599 .printlock = spi_prettyprint_status_register_amic_a25l05p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000600 .unlock = spi_disable_blockprotect,
601 .write = spi_chip_write_256,
602 .read = spi_chip_read,
Steven Zakulec7d257b42011-07-19 08:50:18 +0000603 .voltage = {2700, 3600},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000604 },
605
606 {
607 .vendor = "AMIC",
608 .name = "A25L10PT",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +0000609 .bustype = BUS_SPI,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000610 .manufacture_id = AMIC_ID,
611 .model_id = AMIC_A25L10PT,
612 .total_size = 128,
613 .page_size = 256,
614 .tested = TEST_UNTESTED,
615 .probe = probe_spi_rdid4,
616 .probe_timing = TIMING_ZERO,
617 .block_erasers =
618 {
619 {
620 .eraseblocks = {
621 {64 * 1024, 1},
622 {32 * 1024, 1},
623 {16 * 1024, 1},
624 {8 * 1024, 1},
625 {4 * 1024, 2},
626 },
627 .block_erase = spi_block_erase_d8,
628 }, {
629 .eraseblocks = { {128 * 1024, 1} },
630 .block_erase = spi_block_erase_c7,
631 }
632 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000633 .printlock = spi_prettyprint_status_register_amic_a25l05p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000634 .unlock = spi_disable_blockprotect,
635 .write = spi_chip_write_256,
636 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000637 .voltage = {2700, 3600},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000638 },
639
640 {
641 .vendor = "AMIC",
642 .name = "A25L10PU",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +0000643 .bustype = BUS_SPI,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000644 .manufacture_id = AMIC_ID,
645 .model_id = AMIC_A25L10PU,
646 .total_size = 128,
647 .page_size = 256,
648 .tested = TEST_UNTESTED,
649 .probe = probe_spi_rdid4,
650 .probe_timing = TIMING_ZERO,
651 .block_erasers =
652 {
653 {
654 .eraseblocks = {
655 {4 * 1024, 2},
656 {8 * 1024, 1},
657 {16 * 1024, 1},
658 {32 * 1024, 1},
659 {64 * 1024, 1},
660 },
661 .block_erase = spi_block_erase_d8,
662 }, {
663 .eraseblocks = { {128 * 1024, 1} },
664 .block_erase = spi_block_erase_c7,
665 }
666 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000667 .printlock = spi_prettyprint_status_register_amic_a25l05p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000668 .unlock = spi_disable_blockprotect,
669 .write = spi_chip_write_256,
670 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000671 .voltage = {2700, 3600},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000672 },
673
674 {
675 .vendor = "AMIC",
676 .name = "A25L20PT",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +0000677 .bustype = BUS_SPI,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000678 .manufacture_id = AMIC_ID,
679 .model_id = AMIC_A25L20PT,
680 .total_size = 256,
681 .page_size = 256,
682 .tested = TEST_UNTESTED,
683 .probe = probe_spi_rdid4,
684 .probe_timing = TIMING_ZERO,
685 .block_erasers =
686 {
687 {
688 .eraseblocks = {
689 {64 * 1024, 3},
690 {32 * 1024, 1},
691 {16 * 1024, 1},
692 {8 * 1024, 1},
693 {4 * 1024, 2},
694 },
695 .block_erase = spi_block_erase_d8,
696 }, {
697 .eraseblocks = { {256 * 1024, 1} },
698 .block_erase = spi_block_erase_c7,
699 }
700 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000701 .printlock = spi_prettyprint_status_register_amic_a25l05p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000702 .unlock = spi_disable_blockprotect,
703 .write = spi_chip_write_256,
704 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000705 .voltage = {2700, 3600},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000706 },
707
708 {
709 .vendor = "AMIC",
710 .name = "A25L20PU",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +0000711 .bustype = BUS_SPI,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000712 .manufacture_id = AMIC_ID,
713 .model_id = AMIC_A25L20PU,
714 .total_size = 256,
715 .page_size = 256,
716 .tested = TEST_UNTESTED,
717 .probe = probe_spi_rdid4,
718 .probe_timing = TIMING_ZERO,
719 .block_erasers =
720 {
721 {
722 .eraseblocks = {
723 {4 * 1024, 2},
724 {8 * 1024, 1},
725 {16 * 1024, 1},
726 {32 * 1024, 1},
727 {64 * 1024, 3},
728 },
729 .block_erase = spi_block_erase_d8,
730 }, {
731 .eraseblocks = { {256 * 1024, 1} },
732 .block_erase = spi_block_erase_c7,
733 }
734 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000735 .printlock = spi_prettyprint_status_register_amic_a25l05p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000736 .unlock = spi_disable_blockprotect,
737 .write = spi_chip_write_256,
738 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000739 .voltage = {2700, 3600},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000740 },
741
742 /* The A25L40P{T,U} chips are distinguished by their
743 * erase block layouts, but without any distinction in RDID.
744 * This inexplicable quirk was verified by Rudolf Marek
745 * and discussed on the flashrom mailing list on 2010-07-12.
746 */
747 {
748 .vendor = "AMIC",
749 .name = "A25L40PT",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +0000750 .bustype = BUS_SPI,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000751 .manufacture_id = AMIC_ID,
752 .model_id = AMIC_A25L40PT,
753 .total_size = 512,
754 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +0000755 .tested = TEST_OK_PR,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000756 .probe = probe_spi_rdid4,
757 .probe_timing = TIMING_ZERO,
758 .block_erasers =
759 {
760 {
761 .eraseblocks = {
762 {64 * 1024, 7},
763 {32 * 1024, 1},
764 {16 * 1024, 1},
765 {8 * 1024, 1},
766 {4 * 1024, 2},
767 },
768 .block_erase = spi_block_erase_d8,
769 }, {
770 .eraseblocks = { {512 * 1024, 1} },
771 .block_erase = spi_block_erase_c7,
772 }
773 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000774 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000775 .unlock = spi_disable_blockprotect,
776 .write = spi_chip_write_256,
777 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000778 .voltage = {2700, 3600},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000779 },
780
781 {
782 .vendor = "AMIC",
783 .name = "A25L40PU",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +0000784 .bustype = BUS_SPI,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000785 .manufacture_id = AMIC_ID,
786 .model_id = AMIC_A25L40PU,
787 .total_size = 512,
788 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +0000789 .tested = TEST_OK_PR,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000790 .probe = probe_spi_rdid4,
791 .probe_timing = TIMING_ZERO,
792 .block_erasers =
793 {
794 {
795 .eraseblocks = {
796 {4 * 1024, 2},
797 {8 * 1024, 1},
798 {16 * 1024, 1},
799 {32 * 1024, 1},
800 {64 * 1024, 7},
801 },
802 .block_erase = spi_block_erase_d8,
803 }, {
804 .eraseblocks = { {512 * 1024, 1} },
805 .block_erase = spi_block_erase_c7,
806 }
807 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000808 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000809 .unlock = spi_disable_blockprotect,
810 .write = spi_chip_write_256,
811 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000812 .voltage = {2700, 3600},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000813 },
814
815 {
816 .vendor = "AMIC",
817 .name = "A25L80P",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +0000818 .bustype = BUS_SPI,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000819 .manufacture_id = AMIC_ID,
820 .model_id = AMIC_A25L80P,
821 .total_size = 1024,
822 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +0000823 .tested = TEST_OK_PRE,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000824 .probe = probe_spi_rdid4,
825 .probe_timing = TIMING_ZERO,
826 .block_erasers =
827 {
828 {
829 .eraseblocks = {
830 {4 * 1024, 2},
831 {8 * 1024, 1},
832 {16 * 1024, 1},
833 {32 * 1024, 1},
834 {64 * 1024, 15},
835 },
836 .block_erase = spi_block_erase_d8,
837 }, {
838 .eraseblocks = { {1024 * 1024, 1} },
839 .block_erase = spi_block_erase_c7,
840 }
841 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000842 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000843 .unlock = spi_disable_blockprotect,
844 .write = spi_chip_write_256,
845 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000846 .voltage = {2700, 3600},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000847 },
848
849 {
850 .vendor = "AMIC",
851 .name = "A25L16PT",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +0000852 .bustype = BUS_SPI,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000853 .manufacture_id = AMIC_ID,
854 .model_id = AMIC_A25L16PT,
855 .total_size = 2048,
856 .page_size = 256,
857 .tested = TEST_UNTESTED,
858 .probe = probe_spi_rdid4,
859 .probe_timing = TIMING_ZERO,
860 .block_erasers =
861 {
862 {
863 .eraseblocks = {
864 {64 * 1024, 31},
865 {32 * 1024, 1},
866 {16 * 1024, 1},
867 {8 * 1024, 1},
868 {4 * 1024, 2},
869 },
870 .block_erase = spi_block_erase_d8,
871 }, {
872 .eraseblocks = { {2048 * 1024, 1} },
873 .block_erase = spi_block_erase_60,
874 }, {
875 .eraseblocks = { {2048 * 1024, 1} },
876 .block_erase = spi_block_erase_c7,
877 }
878 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000879 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000880 .unlock = spi_disable_blockprotect,
881 .write = spi_chip_write_256,
882 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000883 .voltage = {2700, 3600},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000884 },
885
886 {
887 .vendor = "AMIC",
888 .name = "A25L16PU",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +0000889 .bustype = BUS_SPI,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000890 .manufacture_id = AMIC_ID,
891 .model_id = AMIC_A25L16PU,
892 .total_size = 2048,
893 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +0000894 .tested = TEST_OK_PR,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000895 .probe = probe_spi_rdid4,
896 .probe_timing = TIMING_ZERO,
897 .block_erasers =
898 {
899 {
900 .eraseblocks = {
901 {4 * 1024, 2},
902 {8 * 1024, 1},
903 {16 * 1024, 1},
904 {32 * 1024, 1},
905 {64 * 1024, 31},
906 },
907 .block_erase = spi_block_erase_d8,
908 }, {
909 .eraseblocks = { {2048 * 1024, 1} },
910 .block_erase = spi_block_erase_60,
911 }, {
912 .eraseblocks = { {2048 * 1024, 1} },
913 .block_erase = spi_block_erase_c7,
914 }
915 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000916 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000917 .unlock = spi_disable_blockprotect,
918 .write = spi_chip_write_256,
919 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000920 .voltage = {2700, 3600},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000921 },
922
923 {
924 .vendor = "AMIC",
Dan Lenski11617122010-07-29 15:00:40 +0000925 .name = "A25L512",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +0000926 .bustype = BUS_SPI,
Dan Lenski11617122010-07-29 15:00:40 +0000927 .manufacture_id = AMIC_ID_NOPREFIX,
928 .model_id = AMIC_A25L512,
929 .total_size = 64,
930 .page_size = 256,
David Hendricks6c51cfd2010-09-03 03:32:22 +0000931 .feature_bits = FEATURE_WRSR_WREN,
Dan Lenski11617122010-07-29 15:00:40 +0000932 .tested = TEST_UNTESTED,
933 .probe = probe_spi_rdid,
934 .probe_timing = TIMING_ZERO,
935 .block_erasers =
936 {
937 {
938 .eraseblocks = { { 4 * 1024, 16 } },
939 .block_erase = spi_block_erase_20,
940 }, {
941 .eraseblocks = { { 64 * 1024, 1 } },
942 .block_erase = spi_block_erase_d8,
943 }, {
944 .eraseblocks = { { 64 * 1024, 1 } },
945 .block_erase = spi_block_erase_c7,
946 }
947 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000948 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Dan Lenski11617122010-07-29 15:00:40 +0000949 .unlock = spi_disable_blockprotect,
950 .write = spi_chip_write_256,
951 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000952 .voltage = {2700, 3600},
Dan Lenski11617122010-07-29 15:00:40 +0000953 },
954
955 {
956 .vendor = "AMIC",
957 .name = "A25L010",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +0000958 .bustype = BUS_SPI,
Dan Lenski11617122010-07-29 15:00:40 +0000959 .manufacture_id = AMIC_ID_NOPREFIX,
960 .model_id = AMIC_A25L010,
961 .total_size = 128,
962 .page_size = 256,
David Hendricks6c51cfd2010-09-03 03:32:22 +0000963 .feature_bits = FEATURE_WRSR_WREN,
Dan Lenski11617122010-07-29 15:00:40 +0000964 .tested = TEST_UNTESTED,
965 .probe = probe_spi_rdid,
966 .probe_timing = TIMING_ZERO,
967 .block_erasers =
968 {
969 {
970 .eraseblocks = { { 4 * 1024, 32 } },
971 .block_erase = spi_block_erase_20,
972 }, {
973 .eraseblocks = { { 64 * 1024, 2 } },
974 .block_erase = spi_block_erase_d8,
975 }, {
976 .eraseblocks = { { 128 * 1024, 1 } },
977 .block_erase = spi_block_erase_c7,
978 }
979 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000980 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Dan Lenski11617122010-07-29 15:00:40 +0000981 .unlock = spi_disable_blockprotect,
982 .write = spi_chip_write_256,
983 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000984 .voltage = {2700, 3600},
Dan Lenski11617122010-07-29 15:00:40 +0000985 },
986
987 {
988 .vendor = "AMIC",
989 .name = "A25L020",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +0000990 .bustype = BUS_SPI,
Dan Lenski11617122010-07-29 15:00:40 +0000991 .manufacture_id = AMIC_ID_NOPREFIX,
992 .model_id = AMIC_A25L020,
993 .total_size = 256,
994 .page_size = 256,
David Hendricks6c51cfd2010-09-03 03:32:22 +0000995 .feature_bits = FEATURE_WRSR_WREN,
Dan Lenski11617122010-07-29 15:00:40 +0000996 .tested = TEST_UNTESTED,
997 .probe = probe_spi_rdid,
998 .probe_timing = TIMING_ZERO,
999 .block_erasers =
1000 {
1001 {
1002 .eraseblocks = { { 4 * 1024, 64 } },
1003 .block_erase = spi_block_erase_20,
1004 }, {
1005 .eraseblocks = { { 64 * 1024, 4 } },
1006 .block_erase = spi_block_erase_d8,
1007 }, {
1008 .eraseblocks = { { 256 * 1024, 1 } },
1009 .block_erase = spi_block_erase_c7,
1010 }
1011 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +00001012 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Dan Lenski11617122010-07-29 15:00:40 +00001013 .unlock = spi_disable_blockprotect,
1014 .write = spi_chip_write_256,
1015 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001016 .voltage = {2700, 3600},
Dan Lenski11617122010-07-29 15:00:40 +00001017 },
1018
1019 {
1020 .vendor = "AMIC",
1021 .name = "A25L040",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001022 .bustype = BUS_SPI,
Dan Lenski11617122010-07-29 15:00:40 +00001023 .manufacture_id = AMIC_ID_NOPREFIX,
1024 .model_id = AMIC_A25L040,
1025 .total_size = 512,
1026 .page_size = 256,
David Hendricks6c51cfd2010-09-03 03:32:22 +00001027 .feature_bits = FEATURE_WRSR_WREN,
Dan Lenski11617122010-07-29 15:00:40 +00001028 .tested = TEST_UNTESTED,
1029 .probe = probe_spi_rdid,
1030 .probe_timing = TIMING_ZERO,
1031 .block_erasers =
1032 {
1033 {
1034 .eraseblocks = { { 4 * 1024, 128 } },
1035 .block_erase = spi_block_erase_20,
1036 }, {
1037 .eraseblocks = { { 64 * 1024, 8 } },
1038 .block_erase = spi_block_erase_d8,
1039 }, {
1040 .eraseblocks = { { 512 * 1024, 1 } },
1041 .block_erase = spi_block_erase_c7,
1042 }
1043 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +00001044 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Dan Lenski11617122010-07-29 15:00:40 +00001045 .unlock = spi_disable_blockprotect,
1046 .write = spi_chip_write_256,
1047 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001048 .voltage = {2700, 3600},
Dan Lenski11617122010-07-29 15:00:40 +00001049 },
1050
1051 {
1052 .vendor = "AMIC",
1053 .name = "A25L080",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001054 .bustype = BUS_SPI,
Dan Lenski11617122010-07-29 15:00:40 +00001055 .manufacture_id = AMIC_ID_NOPREFIX,
1056 .model_id = AMIC_A25L080,
1057 .total_size = 1024,
1058 .page_size = 256,
David Hendricks6c51cfd2010-09-03 03:32:22 +00001059 .feature_bits = FEATURE_WRSR_WREN,
Dan Lenski11617122010-07-29 15:00:40 +00001060 .tested = TEST_UNTESTED,
1061 .probe = probe_spi_rdid,
1062 .probe_timing = TIMING_ZERO,
1063 .block_erasers =
1064 {
1065 {
1066 .eraseblocks = { { 4 * 1024, 256 } },
1067 .block_erase = spi_block_erase_20,
1068 }, {
1069 .eraseblocks = { { 64 * 1024, 16 } },
1070 .block_erase = spi_block_erase_d8,
1071 }, {
1072 .eraseblocks = { { 1024 * 1024, 1 } },
1073 .block_erase = spi_block_erase_c7,
1074 }
1075 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +00001076 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Dan Lenski11617122010-07-29 15:00:40 +00001077 .unlock = spi_disable_blockprotect,
1078 .write = spi_chip_write_256,
1079 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001080 .voltage = {2700, 3600},
Dan Lenski11617122010-07-29 15:00:40 +00001081 },
1082
1083 {
1084 .vendor = "AMIC",
1085 .name = "A25L016",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001086 .bustype = BUS_SPI,
Dan Lenski11617122010-07-29 15:00:40 +00001087 .manufacture_id = AMIC_ID_NOPREFIX,
1088 .model_id = AMIC_A25L016,
1089 .total_size = 2048,
1090 .page_size = 256,
David Hendricks6c51cfd2010-09-03 03:32:22 +00001091 .feature_bits = FEATURE_WRSR_WREN,
Dan Lenski11617122010-07-29 15:00:40 +00001092 .tested = TEST_UNTESTED,
1093 .probe = probe_spi_rdid,
1094 .probe_timing = TIMING_ZERO,
1095 .block_erasers =
1096 {
1097 {
1098 .eraseblocks = { { 4 * 1024, 512 } },
1099 .block_erase = spi_block_erase_20,
1100 }, {
1101 .eraseblocks = { { 64 * 1024, 32 } },
1102 .block_erase = spi_block_erase_d8,
1103 }, {
1104 .eraseblocks = { { 2048 * 1024, 1 } },
1105 .block_erase = spi_block_erase_c7,
1106 }
1107 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +00001108 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Dan Lenski11617122010-07-29 15:00:40 +00001109 .unlock = spi_disable_blockprotect,
1110 .write = spi_chip_write_256,
1111 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001112 .voltage = {2700, 3600},
Dan Lenski11617122010-07-29 15:00:40 +00001113 },
1114
1115 {
1116 .vendor = "AMIC",
1117 .name = "A25L032",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001118 .bustype = BUS_SPI,
Dan Lenski11617122010-07-29 15:00:40 +00001119 .manufacture_id = AMIC_ID_NOPREFIX,
1120 .model_id = AMIC_A25L032,
1121 .total_size = 4096,
1122 .page_size = 256,
Daniel Lenski65922a32012-02-15 23:40:23 +00001123 /* OTP: 64B total; read 0x4B, 0x48; write 0x42 */
1124 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
Dan Lenski11617122010-07-29 15:00:40 +00001125 .tested = TEST_UNTESTED,
1126 .probe = probe_spi_rdid,
1127 .probe_timing = TIMING_ZERO,
1128 .block_erasers =
1129 {
1130 {
1131 .eraseblocks = { { 4 * 1024, 1024 } },
1132 .block_erase = spi_block_erase_20,
1133 }, {
1134 .eraseblocks = { { 64 * 1024, 64 } },
1135 .block_erase = spi_block_erase_52,
1136 }, {
1137 .eraseblocks = { { 64 * 1024, 64 } },
1138 .block_erase = spi_block_erase_d8,
1139 }, {
1140 .eraseblocks = { { 4096 * 1024, 1 } },
1141 .block_erase = spi_block_erase_60,
1142 }, {
1143 .eraseblocks = { { 4096 * 1024, 1 } },
1144 .block_erase = spi_block_erase_c7,
1145 }
1146 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +00001147 .printlock = spi_prettyprint_status_register_amic_a25l032,
Dan Lenski11617122010-07-29 15:00:40 +00001148 .unlock = NULL, /* Two status reg bytes (read with 0x35 and 0x05) */
1149 .write = spi_chip_write_256,
1150 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001151 .voltage = {2700, 3600},
Dan Lenski11617122010-07-29 15:00:40 +00001152 },
1153
1154 {
1155 .vendor = "AMIC",
1156 .name = "A25LQ032",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001157 .bustype = BUS_SPI,
Dan Lenski11617122010-07-29 15:00:40 +00001158 .manufacture_id = AMIC_ID_NOPREFIX,
1159 .model_id = AMIC_A25LQ032,
1160 .total_size = 4096,
1161 .page_size = 256,
Daniel Lenski65922a32012-02-15 23:40:23 +00001162 /* OTP: 64B total; read 0x4B, 0x48; write 0x42 */
1163 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
Dan Lenski11617122010-07-29 15:00:40 +00001164 .tested = TEST_UNTESTED,
1165 .probe = probe_spi_rdid,
1166 .probe_timing = TIMING_ZERO,
1167 .block_erasers =
1168 {
1169 {
1170 .eraseblocks = { { 4 * 1024, 1024 } },
1171 .block_erase = spi_block_erase_20,
1172 }, {
1173 .eraseblocks = { { 64 * 1024, 64 } },
1174 .block_erase = spi_block_erase_52,
1175 }, {
1176 .eraseblocks = { { 64 * 1024, 64 } },
1177 .block_erase = spi_block_erase_d8,
1178 }, {
1179 .eraseblocks = { { 4096 * 1024, 1 } },
1180 .block_erase = spi_block_erase_60,
1181 }, {
1182 .eraseblocks = { { 4096 * 1024, 1 } },
1183 .block_erase = spi_block_erase_c7,
1184 }
1185 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +00001186 .printlock = spi_prettyprint_status_register_amic_a25lq032,
Dan Lenski11617122010-07-29 15:00:40 +00001187 .unlock = NULL, /* Two status reg bytes (read with 0x35 and 0x05) */
1188 .write = spi_chip_write_256,
1189 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001190 .voltage = {2700, 3600},
Dan Lenski11617122010-07-29 15:00:40 +00001191 },
1192
1193 {
1194 .vendor = "AMIC",
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001195 .name = "A29002B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001196 .bustype = BUS_PARALLEL,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001197 .manufacture_id = AMIC_ID_NOPREFIX,
1198 .model_id = AMIC_A29002B,
1199 .total_size = 256,
1200 .page_size = 64 * 1024,
1201 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
1202 .tested = TEST_UNTESTED,
1203 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +00001204 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001205 .block_erasers =
1206 {
1207 {
1208 .eraseblocks = {
1209 {16 * 1024, 1},
1210 {8 * 1024, 2},
1211 {32 * 1024, 1},
1212 {64 * 1024, 3},
1213 },
1214 .block_erase = erase_sector_jedec,
1215 }, {
1216 .eraseblocks = { {256 * 1024, 1} },
1217 .block_erase = erase_chip_block_jedec,
1218 },
1219 },
1220 .write = write_jedec_1,
1221 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001222 .voltage = {4500, 5500},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001223 },
1224
1225 {
1226 .vendor = "AMIC",
1227 .name = "A29002T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001228 .bustype = BUS_PARALLEL,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001229 .manufacture_id = AMIC_ID_NOPREFIX,
1230 .model_id = AMIC_A29002T,
1231 .total_size = 256,
1232 .page_size = 64 * 1024,
1233 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Paul Menzel018d4822011-10-21 12:33:07 +00001234 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001235 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +00001236 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001237 .block_erasers =
1238 {
1239 {
1240 .eraseblocks = {
1241 {64 * 1024, 3},
1242 {32 * 1024, 1},
1243 {8 * 1024, 2},
1244 {16 * 1024, 1},
1245 },
1246 .block_erase = erase_sector_jedec,
1247 }, {
1248 .eraseblocks = { {256 * 1024, 1} },
1249 .block_erase = erase_chip_block_jedec,
1250 },
1251 },
1252 .write = write_jedec_1,
1253 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001254 .voltage = {4500, 5500},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001255 },
1256
1257 {
1258 .vendor = "AMIC",
1259 .name = "A29040B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001260 .bustype = BUS_PARALLEL,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001261 .manufacture_id = AMIC_ID_NOPREFIX,
1262 .model_id = AMIC_A29040B,
1263 .total_size = 512,
1264 .page_size = 64 * 1024,
1265 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
1266 .tested = TEST_UNTESTED,
1267 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +00001268 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001269 .block_erasers =
1270 {
1271 {
1272 .eraseblocks = { {64 * 1024, 8} },
1273 .block_erase = erase_sector_jedec,
1274 }, {
1275 .eraseblocks = { {512 * 1024, 1} },
1276 .block_erase = erase_chip_block_jedec,
1277 },
1278 },
1279 .write = write_jedec_1,
1280 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001281 .voltage = {4500, 5500},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001282 },
1283
1284 {
1285 .vendor = "AMIC",
1286 .name = "A49LF040A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001287 .bustype = BUS_LPC,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001288 .manufacture_id = AMIC_ID_NOPREFIX,
1289 .model_id = AMIC_A49LF040A,
1290 .total_size = 512,
1291 .page_size = 64 * 1024,
1292 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stefan Tauneraf2db612011-12-02 21:48:17 +00001293 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001294 .probe = probe_jedec,
1295 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
1296 .block_erasers =
1297 {
1298 {
1299 .eraseblocks = { {64 * 1024, 8} },
1300 .block_erase = erase_block_jedec,
1301 }, {
1302 .eraseblocks = { {512 * 1024, 1} },
1303 .block_erase = erase_chip_block_jedec,
1304 }
1305 },
1306 .unlock = unlock_49fl00x,
1307 .write = write_jedec_1,
1308 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001309 .voltage = {3000, 3600},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001310 },
1311
1312 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001313 .vendor = "Atmel",
1314 .name = "AT25DF021",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001315 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001316 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001317 .model_id = ATMEL_AT25DF021,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001318 .total_size = 256,
1319 .page_size = 256,
Daniel Lenski65922a32012-02-15 23:40:23 +00001320 /* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */
1321 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001322 .tested = TEST_UNTESTED,
1323 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001324 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001325 .block_erasers =
1326 {
1327 {
1328 .eraseblocks = { {4 * 1024, 64} },
1329 .block_erase = spi_block_erase_20,
1330 }, {
1331 .eraseblocks = { {32 * 1024, 8} },
1332 .block_erase = spi_block_erase_52,
1333 }, {
1334 .eraseblocks = { {64 * 1024, 4} },
1335 .block_erase = spi_block_erase_d8,
1336 }, {
1337 .eraseblocks = { {256 * 1024, 1} },
1338 .block_erase = spi_block_erase_60,
1339 }, {
1340 .eraseblocks = { {256 * 1024, 1} },
1341 .block_erase = spi_block_erase_c7,
1342 }
1343 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001344 .printlock = spi_prettyprint_status_register_at25df,
1345 .unlock = spi_disable_blockprotect_at25df,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001346 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001347 .read = spi_chip_read,
Steven Zakulec7d257b42011-07-19 08:50:18 +00001348 .voltage = {2700, 3600}, /* 2.3-3.6V & 2.7-3.6V models available */
FENG yu ningff692fb2008-12-08 18:15:10 +00001349 },
1350
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001351 {
1352 .vendor = "Atmel",
1353 .name = "AT25DF041A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001354 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001355 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001356 .model_id = ATMEL_AT25DF041A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001357 .total_size = 512,
1358 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001359 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001360 .tested = TEST_UNTESTED,
1361 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001362 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001363 .block_erasers =
1364 {
1365 {
1366 .eraseblocks = { {4 * 1024, 128} },
1367 .block_erase = spi_block_erase_20,
1368 }, {
1369 .eraseblocks = { {32 * 1024, 16} },
1370 .block_erase = spi_block_erase_52,
1371 }, {
1372 .eraseblocks = { {64 * 1024, 8} },
1373 .block_erase = spi_block_erase_d8,
1374 }, {
1375 .eraseblocks = { {512 * 1024, 1} },
1376 .block_erase = spi_block_erase_60,
1377 }, {
1378 .eraseblocks = { {512 * 1024, 1} },
1379 .block_erase = spi_block_erase_c7,
1380 }
1381 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001382 .printlock = spi_prettyprint_status_register_at25df,
1383 .unlock = spi_disable_blockprotect_at25df,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001384 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001385 .read = spi_chip_read,
Steven Zakulec7d257b42011-07-19 08:50:18 +00001386 .voltage = {2700, 3600}, /* 2.3-3.6V & 2.7-3.6V models available */
FENG yu ningff692fb2008-12-08 18:15:10 +00001387 },
1388
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001389 {
1390 .vendor = "Atmel",
1391 .name = "AT25DF081",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001392 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001393 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001394 .model_id = ATMEL_AT25DF081,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001395 .total_size = 1024,
1396 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001397 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001398 .tested = TEST_UNTESTED,
1399 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001400 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001401 .block_erasers =
1402 {
1403 {
1404 .eraseblocks = { {4 * 1024, 256} },
1405 .block_erase = spi_block_erase_20,
1406 }, {
1407 .eraseblocks = { {32 * 1024, 32} },
1408 .block_erase = spi_block_erase_52,
1409 }, {
1410 .eraseblocks = { {64 * 1024, 16} },
1411 .block_erase = spi_block_erase_d8,
1412 }, {
1413 .eraseblocks = { {1024 * 1024, 1} },
1414 .block_erase = spi_block_erase_60,
1415 }, {
1416 .eraseblocks = { {1024 * 1024, 1} },
1417 .block_erase = spi_block_erase_c7,
1418 }
1419 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001420 .printlock = spi_prettyprint_status_register_at25df,
1421 .unlock = spi_disable_blockprotect_at25df,
1422 .write = spi_chip_write_256,
1423 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001424 .voltage = {1600, 2000}, /* Datasheet says range is 1.65-1.95 V */
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001425 },
1426
1427 {
1428 .vendor = "Atmel",
1429 .name = "AT25DF081A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001430 .bustype = BUS_SPI,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001431 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001432 .model_id = ATMEL_AT25DF081A,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001433 .total_size = 1024,
1434 .page_size = 256,
1435 .feature_bits = FEATURE_WRSR_WREN,
1436 .tested = TEST_UNTESTED,
1437 .probe = probe_spi_rdid,
1438 .probe_timing = TIMING_ZERO,
1439 .block_erasers =
1440 {
1441 {
1442 .eraseblocks = { {4 * 1024, 256} },
1443 .block_erase = spi_block_erase_20,
1444 }, {
1445 .eraseblocks = { {32 * 1024, 32} },
1446 .block_erase = spi_block_erase_52,
1447 }, {
1448 .eraseblocks = { {64 * 1024, 16} },
1449 .block_erase = spi_block_erase_d8,
1450 }, {
1451 .eraseblocks = { {1024 * 1024, 1} },
1452 .block_erase = spi_block_erase_60,
1453 }, {
1454 .eraseblocks = { {1024 * 1024, 1} },
1455 .block_erase = spi_block_erase_c7,
1456 }
1457 },
1458 .printlock = spi_prettyprint_status_register_at25df_sec,
1459 .unlock = spi_disable_blockprotect_at25df_sec,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001460 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001461 .read = spi_chip_read,
Steven Zakulec7d257b42011-07-19 08:50:18 +00001462 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00001463 },
1464
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001465 {
1466 .vendor = "Atmel",
1467 .name = "AT25DF161",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001468 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001469 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001470 .model_id = ATMEL_AT25DF161,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001471 .total_size = 2048,
1472 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001473 .feature_bits = FEATURE_WRSR_WREN,
Stefan Tauner2abab942012-04-27 20:41:23 +00001474 .tested = TEST_OK_PROBE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001475 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001476 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001477 .block_erasers =
1478 {
1479 {
1480 .eraseblocks = { {4 * 1024, 512} },
1481 .block_erase = spi_block_erase_20,
1482 }, {
1483 .eraseblocks = { {32 * 1024, 64} },
1484 .block_erase = spi_block_erase_52,
1485 }, {
1486 .eraseblocks = { {64 * 1024, 32} },
1487 .block_erase = spi_block_erase_d8,
1488 }, {
1489 .eraseblocks = { {2 * 1024 * 1024, 1} },
1490 .block_erase = spi_block_erase_60,
1491 }, {
1492 .eraseblocks = { {2 * 1024 * 1024, 1} },
1493 .block_erase = spi_block_erase_c7,
1494 }
1495 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001496 .printlock = spi_prettyprint_status_register_at25df_sec,
1497 .unlock = spi_disable_blockprotect_at25df_sec,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001498 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001499 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001500 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00001501 },
1502
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001503 {
1504 .vendor = "Atmel",
1505 .name = "AT25DF321",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001506 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001507 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001508 .model_id = ATMEL_AT25DF321,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001509 .total_size = 4096,
1510 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001511 .feature_bits = FEATURE_WRSR_WREN,
Stefan Taunerd06d9412011-06-12 19:47:55 +00001512 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001513 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001514 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001515 .block_erasers =
1516 {
1517 {
1518 .eraseblocks = { {4 * 1024, 1024} },
1519 .block_erase = spi_block_erase_20,
1520 }, {
1521 .eraseblocks = { {32 * 1024, 128} },
1522 .block_erase = spi_block_erase_52,
1523 }, {
1524 .eraseblocks = { {64 * 1024, 64} },
1525 .block_erase = spi_block_erase_d8,
1526 }, {
1527 .eraseblocks = { {4 * 1024 * 1024, 1} },
1528 .block_erase = spi_block_erase_60,
1529 }, {
1530 .eraseblocks = { {4 * 1024 * 1024, 1} },
1531 .block_erase = spi_block_erase_c7,
1532 }
1533 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001534 .printlock = spi_prettyprint_status_register_at25df,
1535 .unlock = spi_disable_blockprotect_at25df,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001536 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001537 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001538 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00001539 },
1540
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001541 {
1542 .vendor = "Atmel",
1543 .name = "AT25DF321A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001544 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001545 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001546 .model_id = ATMEL_AT25DF321A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001547 .total_size = 4096,
1548 .page_size = 256,
Daniel Lenski65922a32012-02-15 23:40:23 +00001549 /* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */
1550 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
Sylvain "ythier" Hitier3093f8f2011-09-03 11:22:27 +00001551 .tested = TEST_OK_PROBE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001552 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001553 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001554 .block_erasers =
1555 {
1556 {
1557 .eraseblocks = { {4 * 1024, 1024} },
1558 .block_erase = spi_block_erase_20,
1559 }, {
1560 .eraseblocks = { {32 * 1024, 128} },
1561 .block_erase = spi_block_erase_52,
1562 }, {
1563 .eraseblocks = { {64 * 1024, 64} },
1564 .block_erase = spi_block_erase_d8,
1565 }, {
1566 .eraseblocks = { {4 * 1024 * 1024, 1} },
1567 .block_erase = spi_block_erase_60,
1568 }, {
1569 .eraseblocks = { {4 * 1024 * 1024, 1} },
1570 .block_erase = spi_block_erase_c7,
1571 }
1572 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001573 .printlock = spi_prettyprint_status_register_at25df_sec,
1574 .unlock = spi_disable_blockprotect_at25df_sec,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001575 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001576 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001577 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00001578 },
1579
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001580 {
1581 .vendor = "Atmel",
Paul Menzelac427b22012-02-16 21:07:07 +00001582 .name = "AT25DF641(A)",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001583 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001584 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001585 .model_id = ATMEL_AT25DF641,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001586 .total_size = 8192,
1587 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001588 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001589 .tested = TEST_UNTESTED,
1590 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001591 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001592 .block_erasers =
1593 {
1594 {
1595 .eraseblocks = { {4 * 1024, 2048} },
1596 .block_erase = spi_block_erase_20,
1597 }, {
1598 .eraseblocks = { {32 * 1024, 256} },
1599 .block_erase = spi_block_erase_52,
1600 }, {
1601 .eraseblocks = { {64 * 1024, 128} },
1602 .block_erase = spi_block_erase_d8,
1603 }, {
1604 .eraseblocks = { {8 * 1024 * 1024, 1} },
1605 .block_erase = spi_block_erase_60,
1606 }, {
1607 .eraseblocks = { {8 * 1024 * 1024, 1} },
1608 .block_erase = spi_block_erase_c7,
1609 }
1610 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001611 .printlock = spi_prettyprint_status_register_at25df_sec,
1612 .unlock = spi_disable_blockprotect_at25df_sec,
1613 .write = spi_chip_write_256,
1614 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001615 .voltage = {2700, 3600},
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001616 },
1617
1618 {
1619 .vendor = "Atmel",
1620 .name = "AT25DQ161",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001621 .bustype = BUS_SPI,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001622 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001623 .model_id = ATMEL_AT25DQ161,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001624 .total_size = 2048,
1625 .page_size = 256,
Daniel Lenski65922a32012-02-15 23:40:23 +00001626 /* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */
1627 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001628 .tested = TEST_UNTESTED,
1629 .probe = probe_spi_rdid,
1630 .probe_timing = TIMING_ZERO,
1631 .block_erasers =
1632 {
1633 {
1634 .eraseblocks = { {4 * 1024, 512} },
1635 .block_erase = spi_block_erase_20,
1636 }, {
1637 .eraseblocks = { {32 * 1024, 64} },
1638 .block_erase = spi_block_erase_52,
1639 }, {
1640 .eraseblocks = { {64 * 1024, 32} },
1641 .block_erase = spi_block_erase_d8,
1642 }, {
1643 .eraseblocks = { {2 * 1024 * 1024, 1} },
1644 .block_erase = spi_block_erase_60,
1645 }, {
1646 .eraseblocks = { {2 * 1024 * 1024, 1} },
1647 .block_erase = spi_block_erase_c7,
1648 }
1649 },
1650 .printlock = spi_prettyprint_status_register_at25df_sec,
1651 .unlock = spi_disable_blockprotect_at25df_sec,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001652 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001653 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001654 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00001655 },
1656
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001657 {
1658 .vendor = "Atmel",
1659 .name = "AT25F512B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001660 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001661 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001662 .model_id = ATMEL_AT25F512B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001663 .total_size = 64,
1664 .page_size = 256,
Daniel Lenski65922a32012-02-15 23:40:23 +00001665 /* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */
1666 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001667 .tested = TEST_UNTESTED,
1668 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001669 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001670 .block_erasers =
1671 {
1672 {
1673 .eraseblocks = { {4 * 1024, 16} },
1674 .block_erase = spi_block_erase_20,
1675 }, {
1676 .eraseblocks = { {32 * 1024, 2} },
1677 .block_erase = spi_block_erase_52,
1678 }, {
1679 .eraseblocks = { {32 * 1024, 2} },
1680 .block_erase = spi_block_erase_d8,
1681 }, {
1682 .eraseblocks = { {64 * 1024, 1} },
1683 .block_erase = spi_block_erase_60,
1684 }, {
1685 .eraseblocks = { {64 * 1024, 1} },
1686 .block_erase = spi_block_erase_c7,
1687 }
1688 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001689 .printlock = spi_prettyprint_status_register_at25f,
1690 .unlock = spi_disable_blockprotect_at25f,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001691 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001692 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001693 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00001694 },
1695
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001696 {
1697 .vendor = "Atmel",
1698 .name = "AT25FS010",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001699 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001700 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001701 .model_id = ATMEL_AT25FS010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001702 .total_size = 128,
1703 .page_size = 256,
1704 .tested = TEST_UNTESTED,
1705 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001706 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001707 .block_erasers =
1708 {
1709 {
1710 .eraseblocks = { {4 * 1024, 32} },
1711 .block_erase = spi_block_erase_20,
1712 }, {
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001713 .eraseblocks = { {4 * 1024, 32} },
1714 .block_erase = spi_block_erase_d7,
1715 }, {
Sean Nelson89187292009-12-23 12:02:55 +00001716 .eraseblocks = { {32 * 1024, 4} },
1717 .block_erase = spi_block_erase_52,
1718 }, {
1719 .eraseblocks = { {32 * 1024, 4} },
1720 .block_erase = spi_block_erase_d8,
1721 }, {
1722 .eraseblocks = { {128 * 1024, 1} },
1723 .block_erase = spi_block_erase_60,
1724 }, {
1725 .eraseblocks = { {128 * 1024, 1} },
1726 .block_erase = spi_block_erase_c7,
1727 }
1728 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001729 .printlock = spi_prettyprint_status_register_at25fs010,
1730 .unlock = spi_disable_blockprotect_at25fs010,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001731 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001732 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001733 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00001734 },
1735
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001736 {
1737 .vendor = "Atmel",
1738 .name = "AT25FS040",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001739 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001740 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001741 .model_id = ATMEL_AT25FS040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001742 .total_size = 512,
1743 .page_size = 256,
1744 .tested = TEST_UNTESTED,
1745 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001746 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001747 .block_erasers =
1748 {
1749 {
1750 .eraseblocks = { {4 * 1024, 128} },
1751 .block_erase = spi_block_erase_20,
1752 }, {
1753 .eraseblocks = { {64 * 1024, 8} },
1754 .block_erase = spi_block_erase_52,
1755 }, {
1756 .eraseblocks = { {64 * 1024, 8} },
1757 .block_erase = spi_block_erase_d8,
1758 }, {
1759 .eraseblocks = { {512 * 1024, 1} },
1760 .block_erase = spi_block_erase_60,
1761 }, {
1762 .eraseblocks = { {512 * 1024, 1} },
1763 .block_erase = spi_block_erase_c7,
1764 }
1765 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001766 .printlock = spi_prettyprint_status_register_at25fs040,
1767 .unlock = spi_disable_blockprotect_at25fs040,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001768 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001769 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001770 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00001771 },
1772
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001773 {
1774 .vendor = "Atmel",
1775 .name = "AT26DF041",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001776 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001777 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001778 .model_id = ATMEL_AT26DF041,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001779 .total_size = 512,
1780 .page_size = 256,
1781 .tested = TEST_UNTESTED,
1782 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001783 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001784 .block_erasers =
1785 {
1786 {
1787 .eraseblocks = { {4 * 1024, 128} },
1788 .block_erase = spi_block_erase_20,
1789 }
1790 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001791 .write = NULL /* Incompatible Page write */,
1792 .read = spi_chip_read,
Steven Zakulec7d257b42011-07-19 08:50:18 +00001793 .voltage = {2700, 3600}, /* 3.0-3.6V for higher speed, 2.7-3.6V normal */
FENG yu ningff692fb2008-12-08 18:15:10 +00001794 },
1795
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001796 {
1797 .vendor = "Atmel",
1798 .name = "AT26DF081A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001799 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001800 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001801 .model_id = ATMEL_AT26DF081A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001802 .total_size = 1024,
1803 .page_size = 256,
Mathias Krause2c3afa32011-01-17 07:45:54 +00001804 .feature_bits = FEATURE_WRSR_WREN,
1805 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001806 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001807 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001808 .block_erasers =
1809 {
1810 {
1811 .eraseblocks = { {4 * 1024, 256} },
1812 .block_erase = spi_block_erase_20,
1813 }, {
1814 .eraseblocks = { {32 * 1024, 32} },
1815 .block_erase = spi_block_erase_52,
1816 }, {
1817 .eraseblocks = { {64 * 1024, 16} },
1818 .block_erase = spi_block_erase_d8,
1819 }, {
1820 .eraseblocks = { {1024 * 1024, 1} },
1821 .block_erase = spi_block_erase_60,
1822 }, {
1823 .eraseblocks = { {1024 * 1024, 1} },
1824 .block_erase = spi_block_erase_c7,
1825 }
1826 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +00001827 .printlock = spi_prettyprint_status_register_atmel_at26df081a,
Mathias Krause2c3afa32011-01-17 07:45:54 +00001828 .unlock = spi_disable_blockprotect_at25df,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001829 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001830 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001831 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00001832 },
1833
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001834 {
1835 .vendor = "Atmel",
1836 .name = "AT26DF161",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001837 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001838 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001839 .model_id = ATMEL_AT26DF161,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001840 .total_size = 2048,
1841 .page_size = 256,
1842 .tested = TEST_UNTESTED,
1843 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001844 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001845 .block_erasers =
1846 {
1847 {
1848 .eraseblocks = { {4 * 1024, 512} },
1849 .block_erase = spi_block_erase_20,
1850 }, {
1851 .eraseblocks = { {32 * 1024, 64} },
1852 .block_erase = spi_block_erase_52,
1853 }, {
1854 .eraseblocks = { {64 * 1024, 32} },
1855 .block_erase = spi_block_erase_d8,
1856 }, {
1857 .eraseblocks = { {2 * 1024 * 1024, 1} },
1858 .block_erase = spi_block_erase_60,
1859 }, {
1860 .eraseblocks = { {2 * 1024 * 1024, 1} },
1861 .block_erase = spi_block_erase_c7,
1862 }
1863 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +00001864 .printlock = spi_prettyprint_status_register_at25df,
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001865 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001866 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001867 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001868 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00001869 },
1870
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001871 {
1872 .vendor = "Atmel",
1873 .name = "AT26DF161A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001874 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001875 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001876 .model_id = ATMEL_AT26DF161A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001877 .total_size = 2048,
1878 .page_size = 256,
1879 .tested = TEST_UNTESTED,
1880 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001881 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001882 .block_erasers =
1883 {
1884 {
1885 .eraseblocks = { {4 * 1024, 512} },
1886 .block_erase = spi_block_erase_20,
1887 }, {
1888 .eraseblocks = { {32 * 1024, 64} },
1889 .block_erase = spi_block_erase_52,
1890 }, {
1891 .eraseblocks = { {64 * 1024, 32} },
1892 .block_erase = spi_block_erase_d8,
1893 }, {
1894 .eraseblocks = { {2 * 1024 * 1024, 1} },
1895 .block_erase = spi_block_erase_60,
1896 }, {
1897 .eraseblocks = { {2 * 1024 * 1024, 1} },
1898 .block_erase = spi_block_erase_c7,
1899 }
1900 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +00001901 .printlock = spi_prettyprint_status_register_atmel_at26df081a,
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001902 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001903 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001904 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001905 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00001906 },
1907
1908 /*The AT26DF321 has the same ID as the AT25DF321. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001909 /*{
1910 .vendor = "Atmel",
1911 .name = "AT26DF321",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001912 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001913 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001914 .model_id = ATMEL_AT26DF321,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001915 .total_size = 4096,
1916 .page_size = 256,
1917 .tested = TEST_UNTESTED,
1918 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001919 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +00001920 .printlock = spi_prettyprint_status_register_atmel_at26df081a,
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001921 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001922 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001923 .read = spi_chip_read,
1924 },*/
FENG yu ningff692fb2008-12-08 18:15:10 +00001925
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001926 {
1927 .vendor = "Atmel",
1928 .name = "AT26F004",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001929 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001930 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001931 .model_id = ATMEL_AT26F004,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001932 .total_size = 512,
1933 .page_size = 256,
1934 .tested = TEST_UNTESTED,
1935 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001936 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001937 .block_erasers =
1938 {
1939 {
1940 .eraseblocks = { {4 * 1024, 128} },
1941 .block_erase = spi_block_erase_20,
1942 }, {
1943 .eraseblocks = { {32 * 1024, 16} },
1944 .block_erase = spi_block_erase_52,
1945 }, {
1946 .eraseblocks = { {64 * 1024, 8} },
1947 .block_erase = spi_block_erase_d8,
1948 }, {
1949 .eraseblocks = { {512 * 1024, 1} },
1950 .block_erase = spi_block_erase_60,
1951 }, {
1952 .eraseblocks = { {512 * 1024, 1} },
1953 .block_erase = spi_block_erase_c7,
1954 }
1955 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001956 .write = NULL /* Incompatible Page write */,
1957 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001958 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00001959 },
1960
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001961 {
1962 .vendor = "Atmel",
Maciej Pijankabc2bbd22009-06-02 16:45:59 +00001963 .name = "AT29C512",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001964 .bustype = BUS_PARALLEL,
Maciej Pijankabc2bbd22009-06-02 16:45:59 +00001965 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001966 .model_id = ATMEL_AT29C512,
Maciej Pijankabc2bbd22009-06-02 16:45:59 +00001967 .total_size = 64,
1968 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00001969 .feature_bits = FEATURE_LONG_RESET,
Paul Menzelac427b22012-02-16 21:07:07 +00001970 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00001971 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001972 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +00001973 .block_erasers =
1974 {
1975 {
1976 .eraseblocks = { {64 * 1024, 1} },
1977 .block_erase = erase_chip_block_jedec,
1978 }
1979 },
Maciej Pijankabc2bbd22009-06-02 16:45:59 +00001980 .write = write_jedec,
1981 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001982 .voltage = {4500, 5500},
Maciej Pijankabc2bbd22009-06-02 16:45:59 +00001983 },
1984
1985 {
1986 .vendor = "Atmel",
Uwe Hermann8403ccb2009-05-16 21:39:19 +00001987 .name = "AT29C010A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001988 .bustype = BUS_PARALLEL,
Uwe Hermann8403ccb2009-05-16 21:39:19 +00001989 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001990 .model_id = ATMEL_AT29C010A,
Uwe Hermann8403ccb2009-05-16 21:39:19 +00001991 .total_size = 128,
1992 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00001993 .feature_bits = FEATURE_LONG_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00001994 .tested = TEST_OK_PRE,
Uwe Hermann8403ccb2009-05-16 21:39:19 +00001995 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001996 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +00001997 .block_erasers =
1998 {
1999 {
2000 .eraseblocks = { {128 * 1024, 1} },
2001 .block_erase = erase_chip_block_jedec,
2002 }
2003 },
Uwe Hermann8403ccb2009-05-16 21:39:19 +00002004 .write = write_jedec, /* FIXME */
2005 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002006 .voltage = {4500, 5500},
Uwe Hermann8403ccb2009-05-16 21:39:19 +00002007 },
2008
2009 {
2010 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002011 .name = "AT29C020",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002012 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002013 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002014 .model_id = ATMEL_AT29C020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002015 .total_size = 256,
2016 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002017 .feature_bits = FEATURE_LONG_RESET,
2018 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002019 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00002020 .probe_timing = 10000, /* 10ms */
Sean Nelson89187292009-12-23 12:02:55 +00002021 .block_erasers =
2022 {
2023 {
2024 .eraseblocks = { {256 * 1024, 1} },
2025 .block_erase = erase_chip_block_jedec,
2026 }
2027 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002028 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002029 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002030 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00002031 },
2032
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002033 {
2034 .vendor = "Atmel",
2035 .name = "AT29C040A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002036 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002037 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002038 .model_id = ATMEL_AT29C040A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002039 .total_size = 512,
2040 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002041 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002042 .tested = TEST_UNTESTED,
2043 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00002044 .probe_timing = 10000, /* 10 ms */
Sean Nelson89187292009-12-23 12:02:55 +00002045 .block_erasers =
2046 {
2047 {
2048 .eraseblocks = { {512 * 1024, 1} },
2049 .block_erase = erase_chip_block_jedec,
2050 }
2051 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002052 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002053 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002054 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00002055 },
2056
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002057 {
2058 .vendor = "Atmel",
2059 .name = "AT45CS1282",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002060 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002061 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002062 .model_id = ATMEL_AT45CS1282,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002063 .total_size = 16896 /* No power of two sizes */,
2064 .page_size = 1056 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002065 .tested = TEST_BAD_READ,
2066 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002067 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002068 .write = NULL /* Incompatible Page write */,
2069 .read = NULL /* Incompatible read */,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002070 .voltage = {2700, 3600},
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002071 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002072
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002073 {
2074 .vendor = "Atmel",
2075 .name = "AT45DB011D",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002076 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002077 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002078 .model_id = ATMEL_AT45DB011D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002079 .total_size = 128 /* Size can only be determined from status register */,
2080 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002081 .tested = TEST_BAD_READ,
2082 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002083 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002084 .write = NULL,
2085 .read = NULL,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002086 .voltage = {2700, 3600},
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002087 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002088
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002089 {
2090 .vendor = "Atmel",
2091 .name = "AT45DB021D",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002092 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002093 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002094 .model_id = ATMEL_AT45DB021D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002095 .total_size = 256 /* Size can only be determined from status register */,
2096 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002097 .tested = TEST_BAD_READ,
2098 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002099 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002100 .write = NULL,
2101 .read = NULL,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002102 .voltage = {2700, 3600},
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002103 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002104
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002105 {
2106 .vendor = "Atmel",
2107 .name = "AT45DB041D",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002108 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002109 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002110 .model_id = ATMEL_AT45DB041D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002111 .total_size = 512 /* Size can only be determined from status register */,
2112 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002113 .tested = TEST_BAD_READ,
2114 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002115 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002116 .write = NULL,
2117 .read = NULL,
Steven Zakulec7d257b42011-07-19 08:50:18 +00002118 .voltage = {2500, 3600}, /* 2.5-3.6V & 2.7-3.6V models available */
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002119 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002120
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002121 {
2122 .vendor = "Atmel",
2123 .name = "AT45DB081D",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002124 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002125 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002126 .model_id = ATMEL_AT45DB081D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002127 .total_size = 1024 /* Size can only be determined from status register */,
2128 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002129 .tested = TEST_BAD_READ,
2130 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002131 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002132 .write = NULL,
2133 .read = NULL,
Steven Zakulec7d257b42011-07-19 08:50:18 +00002134 .voltage = {2700, 3600}, /* 2.5-3.6V & 2.7-3.6V models available */
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002135 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002136
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002137 {
2138 .vendor = "Atmel",
2139 .name = "AT45DB161D",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002140 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002141 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002142 .model_id = ATMEL_AT45DB161D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002143 .total_size = 2048 /* Size can only be determined from status register */,
2144 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002145 .tested = TEST_BAD_READ,
2146 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002147 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002148 .write = NULL,
2149 .read = NULL,
Steven Zakulec7d257b42011-07-19 08:50:18 +00002150 .voltage = {2700, 3600}, /* 2.5-3.6V & 2.7-3.6V models available */
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002151 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002152
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002153 {
2154 .vendor = "Atmel",
2155 .name = "AT45DB321C",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002156 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002157 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002158 .model_id = ATMEL_AT45DB321C,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002159 .total_size = 4224 /* No power of two sizes */,
2160 .page_size = 528 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002161 .tested = TEST_BAD_READ,
2162 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002163 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002164 .write = NULL,
2165 .read = NULL /* Incompatible read */,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002166 .voltage = {2700, 3600},
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002167 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002168
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002169 {
2170 .vendor = "Atmel",
2171 .name = "AT45DB321D",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002172 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002173 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002174 .model_id = ATMEL_AT45DB321D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002175 .total_size = 4096 /* Size can only be determined from status register */,
2176 .page_size = 512 /* Size can only be determined from status register */,
Daniel Lenski65922a32012-02-15 23:40:23 +00002177 /* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */
2178 .feature_bits = FEATURE_OTP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002179 .tested = TEST_BAD_READ,
2180 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002181 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002182 .write = NULL,
2183 .read = NULL,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002184 .voltage = {2700, 3600},
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002185 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002186
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002187 {
2188 .vendor = "Atmel",
2189 .name = "AT45DB642D",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002190 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002191 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002192 .model_id = ATMEL_AT45DB642D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002193 .total_size = 8192 /* Size can only be determined from status register */,
2194 .page_size = 1024 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002195 .tested = TEST_BAD_READ,
2196 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002197 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002198 .write = NULL,
2199 .read = NULL,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002200 .voltage = {2700, 3600},
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002201 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002202
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002203 {
2204 .vendor = "Atmel",
Uwe Hermannb4dcb712009-05-13 11:36:06 +00002205 .name = "AT49BV512",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002206 .bustype = BUS_PARALLEL,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00002207 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002208 .model_id = ATMEL_AT49BV512,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00002209 .total_size = 64,
2210 .page_size = 64,
Sean Nelson35727f72010-01-28 23:55:12 +00002211 .feature_bits = FEATURE_EITHER_RESET,
Stefan Tauner8179be52011-06-04 13:13:34 +00002212 .tested = TEST_OK_PREW,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00002213 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002214 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00002215 .block_erasers =
2216 {
2217 {
2218 .eraseblocks = { {64 * 1024, 1} },
2219 .block_erase = erase_chip_block_jedec,
2220 }
2221 },
Sean Nelson35727f72010-01-28 23:55:12 +00002222 .write = write_jedec_1,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00002223 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002224 .voltage = {2700, 3600},
Uwe Hermannb4dcb712009-05-13 11:36:06 +00002225 },
2226
2227 {
2228 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002229 .name = "AT49F002(N)",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002230 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002231 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002232 .model_id = ATMEL_AT49F002N,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002233 .total_size = 256,
2234 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002235 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002236 .tested = TEST_UNTESTED,
2237 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002238 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00002239 .block_erasers =
2240 {
2241 {
2242 .eraseblocks = {
2243 {16 * 1024, 1},
2244 {8 * 1024, 2},
2245 {96 * 1024, 1},
2246 {128 * 1024, 1},
2247 },
2248 .block_erase = erase_sector_jedec,
2249 }, {
2250 .eraseblocks = { {256 * 1024, 1} },
2251 .block_erase = erase_chip_block_jedec,
2252 }
2253 },
Sean Nelson35727f72010-01-28 23:55:12 +00002254 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002255 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002256 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00002257 },
2258
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002259 {
2260 .vendor = "Atmel",
2261 .name = "AT49F002(N)T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002262 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002263 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002264 .model_id = ATMEL_AT49F002NT,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002265 .total_size = 256,
2266 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002267 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00002268 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002269 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002270 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00002271 .block_erasers =
2272 {
2273 {
2274 .eraseblocks = {
2275 {128 * 1024, 1},
2276 {96 * 1024, 1},
2277 {8 * 1024, 2},
2278 {16 * 1024, 1},
2279 },
2280 .block_erase = erase_sector_jedec,
2281 }, {
2282 .eraseblocks = { {256 * 1024, 1} },
2283 .block_erase = erase_chip_block_jedec,
2284 }
2285 },
Sean Nelson35727f72010-01-28 23:55:12 +00002286 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002287 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002288 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00002289 },
2290
Daniel Lenskidf90d3a2010-07-22 11:44:38 +00002291 {
Uwe Hermannc74e9772011-09-08 19:55:18 +00002292 .vendor = "Atmel",
David Borgf5a30f62012-04-15 13:16:32 +00002293 .name = "AT49F020",
2294 .bustype = BUS_PARALLEL,
2295 .manufacture_id = ATMEL_ID,
2296 .model_id = ATMEL_AT49F020,
2297 .total_size = 256,
2298 .page_size = 256,
2299 .feature_bits = FEATURE_EITHER_RESET,
2300 .tested = TEST_OK_PRE,
2301 .probe = probe_jedec,
2302 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2303 .block_erasers =
2304 {
2305 {
2306 .eraseblocks = { {256 * 1024, 1} },
2307 .block_erase = erase_chip_block_jedec,
2308 }
2309 /* Chip features an optional permanent write protection
2310 * of the first 8 kB. The erase function is the same as
2311 * above, but 00000H to 01FFFH will not be erased.
2312 * FIXME: add another eraser when partial erasers are
2313 * supported.
2314 */
2315 },
2316 .printlock = printlock_at49f,
2317 .write = write_jedec_1,
2318 .read = read_memmapped,
2319 .voltage = {4500, 5500},
2320 },
2321
2322 {
2323 .vendor = "Atmel",
2324 .name = "AT49F040",
2325 .bustype = BUS_PARALLEL,
2326 .manufacture_id = ATMEL_ID,
2327 .model_id = ATMEL_AT49F040,
2328 .total_size = 512,
2329 .page_size = 512,
2330 .feature_bits = FEATURE_EITHER_RESET,
2331 .tested = TEST_UNTESTED,
2332 .probe = probe_jedec,
2333 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2334 .block_erasers =
2335 {
2336 {
2337 .eraseblocks = { {512 * 1024, 1} },
2338 .block_erase = erase_chip_block_jedec,
2339 }
2340 /* Chip features an optional permanent write protection
2341 * of the first 16 kB. The erase function is the same as
2342 * above, but 00000H to 03FFFH will not be erased.
2343 * FIXME: add another eraser when partial erasers are
2344 * supported.
2345 */
2346 },
2347 .printlock = printlock_at49f,
2348 .write = write_jedec_1,
2349 .read = read_memmapped,
2350 .voltage = {4500, 5500},
2351 },
2352
2353 {
2354 .vendor = "Atmel",
Uwe Hermannc74e9772011-09-08 19:55:18 +00002355 .name = "AT49LH002",
2356 .bustype = BUS_LPC | BUS_FWH, /* A/A Mux */
2357 .manufacture_id = ATMEL_ID,
2358 .model_id = ATMEL_AT49LH002,
2359 .total_size = 256,
2360 .page_size = 0, /* unused */
2361 .feature_bits = FEATURE_REGISTERMAP, /* TODO: LPC OK too? */
2362 .tested = TEST_UNTESTED,
2363 .probe = probe_82802ab, /* TODO: 0xff cmd not documented? */
2364 .probe_timing = TIMING_FIXME,
2365 .block_erasers =
2366 {
2367 {
2368 .eraseblocks = {
2369 {64 * 1024, 3},
2370 {32 * 1024, 1},
2371 {8 * 1024, 2},
2372 {16 * 1024, 1},
2373 },
2374 .block_erase = erase_block_82802ab,
2375 }, {
2376 .eraseblocks = {
2377 {64 * 1024, 4},
2378 },
2379 .block_erase = NULL, /* TODO: Implement. */
2380 },
2381 },
2382 .printlock = NULL, /* TODO */
2383 .unlock = NULL, /* unlock_82802ab() not correct(?) */
2384 .write = write_82802ab,
2385 .read = read_memmapped,
2386 .voltage = {3000, 3600},
2387 },
2388
2389 {
Andrew Morganca081462011-09-13 22:05:44 +00002390 .vendor = "Catalyst",
2391 .name = "CAT28F512",
2392 .bustype = BUS_PARALLEL,
2393 .manufacture_id = CATALYST_ID,
2394 .model_id = CATALYST_CAT28F512,
2395 .total_size = 64,
2396 .page_size = 0, /* unused */
2397 .feature_bits = 0,
2398 .tested = TEST_OK_PR,
2399 .probe = probe_jedec, /* FIXME! */
2400 .probe_timing = TIMING_ZERO,
2401 .block_erasers =
2402 {
2403 {
2404 .eraseblocks = { {64 * 1024, 1} },
2405 .block_erase = NULL, /* TODO */
2406 },
2407 },
2408 .write = NULL, /* TODO */
2409 .read = read_memmapped,
2410 .voltage = {4500, 5500},
2411 },
2412
2413 {
Joshua Roysf1324e02010-09-16 00:51:51 +00002414 .vendor = "Bright",
2415 .name = "BM29F040",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002416 .bustype = BUS_PARALLEL,
Joshua Roysf1324e02010-09-16 00:51:51 +00002417 .manufacture_id = BRIGHT_ID,
2418 .model_id = BRIGHT_BM29F040,
2419 .total_size = 512,
2420 .page_size = 64 * 1024,
2421 .feature_bits = FEATURE_EITHER_RESET,
2422 .tested = TEST_OK_PR,
2423 .probe = probe_jedec,
2424 .probe_timing = TIMING_ZERO,
2425 .block_erasers =
2426 {
2427 {
2428 .eraseblocks = { {64 * 1024, 8} },
2429 .block_erase = erase_sector_jedec,
2430 }, {
2431 .eraseblocks = { {512 * 1024, 1} },
2432 .block_erase = erase_chip_block_jedec,
2433 },
2434 },
2435 .write = write_jedec_1,
2436 .read = read_memmapped,
Steven Zakulec7d257b42011-07-19 08:50:18 +00002437 .voltage = {4500, 5500},
Joshua Roysf1324e02010-09-16 00:51:51 +00002438 },
2439
2440 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002441 .vendor = "EMST",
2442 .name = "F49B002UA",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002443 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002444 .manufacture_id = EMST_ID,
2445 .model_id = EMST_F49B002UA,
2446 .total_size = 256,
2447 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00002448 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002449 .tested = TEST_UNTESTED,
2450 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002451 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00002452 .block_erasers =
2453 {
2454 {
2455 .eraseblocks = {
2456 {128 * 1024, 1},
2457 {96 * 1024, 1},
2458 {8 * 1024, 2},
2459 {16 * 1024, 1},
2460 },
2461 .block_erase = erase_sector_jedec,
2462 }, {
2463 .eraseblocks = { {256 * 1024, 1} },
2464 .block_erase = erase_chip_block_jedec,
2465 }
2466 },
Sean Nelson35727f72010-01-28 23:55:12 +00002467 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002468 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002469 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00002470 },
2471
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002472 {
Michael Karcher80a59ea2010-06-19 22:06:35 +00002473 .vendor = "EMST",
2474 .name = "F25L008A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002475 .bustype = BUS_SPI,
Michael Karcher80a59ea2010-06-19 22:06:35 +00002476 .manufacture_id = EMST_ID,
2477 .model_id = EMST_F25L008A,
2478 .total_size = 1024,
2479 .page_size = 256,
2480 .tested = TEST_UNTESTED,
2481 .probe = probe_spi_rdid,
2482 .probe_timing = TIMING_ZERO,
2483 .block_erasers =
2484 {
2485 {
2486 .eraseblocks = { {4 * 1024, 256} },
2487 .block_erase = spi_block_erase_20,
2488 }, {
2489 .eraseblocks = { {64 * 1024, 16} },
2490 .block_erase = spi_block_erase_d8,
2491 }, {
2492 .eraseblocks = { {1024 * 1024, 1} },
2493 .block_erase = spi_block_erase_60,
2494 }, {
2495 .eraseblocks = { {1024 * 1024, 1} },
2496 .block_erase = spi_block_erase_c7,
2497 }
2498 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002499 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger9a795d82010-07-14 16:19:05 +00002500 .write = spi_chip_write_1,
Michael Karcher4497e862010-07-10 19:34:15 +00002501 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002502 .voltage = {2700, 3600},
Michael Karcher80a59ea2010-06-19 22:06:35 +00002503 },
2504
2505 {
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002506 .vendor = "Eon",
2507 .name = "EN25B05",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002508 .bustype = BUS_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002509 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002510 .model_id = EON_EN25B05,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002511 .total_size = 64,
2512 .page_size = 256,
2513 .tested = TEST_UNTESTED,
2514 .probe = probe_spi_rdid,
2515 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002516 .block_erasers =
2517 {
2518 {
2519 .eraseblocks = {
2520 {4 * 1024, 2},
2521 {8 * 1024, 1},
2522 {16 * 1024, 1},
2523 {32 * 1024, 1},
2524 },
2525 .block_erase = spi_block_erase_d8,
2526 }, {
2527 .eraseblocks = { {64 * 1024, 1} },
2528 .block_erase = spi_block_erase_c7,
2529 }
2530 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002531 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002532 .write = spi_chip_write_256,
2533 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002534 .voltage = {2700, 3600},
Sean Nelson54596372010-01-09 05:30:14 +00002535 },
2536
2537 {
2538 .vendor = "Eon",
2539 .name = "EN25B05T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002540 .bustype = BUS_SPI,
Sean Nelson54596372010-01-09 05:30:14 +00002541 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002542 .model_id = EON_EN25B05,
Sean Nelson54596372010-01-09 05:30:14 +00002543 .total_size = 64,
2544 .page_size = 256,
2545 .tested = TEST_UNTESTED,
2546 .probe = probe_spi_rdid,
2547 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002548 .block_erasers =
2549 {
2550 {
2551 .eraseblocks = {
2552 {32 * 1024, 1},
2553 {16 * 1024, 1},
2554 {8 * 1024, 1},
2555 {4 * 1024, 2},
2556 },
2557 .block_erase = spi_block_erase_d8,
2558 }, {
2559 .eraseblocks = { {64 * 1024, 1} },
2560 .block_erase = spi_block_erase_c7,
2561 }
2562 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002563 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002564 .write = spi_chip_write_256,
2565 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002566 .voltage = {2700, 3600},
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002567 },
2568
2569 {
2570 .vendor = "Eon",
2571 .name = "EN25B10",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002572 .bustype = BUS_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002573 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002574 .model_id = EON_EN25B10,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002575 .total_size = 128,
2576 .page_size = 256,
2577 .tested = TEST_UNTESTED,
2578 .probe = probe_spi_rdid,
2579 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002580 .block_erasers =
2581 {
2582 {
2583 .eraseblocks = {
2584 {4 * 1024, 2},
2585 {8 * 1024, 1},
2586 {16 * 1024, 1},
2587 {32 * 1024, 3},
2588 },
2589 .block_erase = spi_block_erase_d8,
2590 }, {
2591 .eraseblocks = { {128 * 1024, 1} },
2592 .block_erase = spi_block_erase_c7,
2593 }
2594 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002595 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002596 .write = spi_chip_write_256,
2597 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002598 .voltage = {2700, 3600},
Sean Nelson54596372010-01-09 05:30:14 +00002599 },
2600
2601 {
2602 .vendor = "Eon",
2603 .name = "EN25B10T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002604 .bustype = BUS_SPI,
Sean Nelson54596372010-01-09 05:30:14 +00002605 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002606 .model_id = EON_EN25B10,
Sean Nelson54596372010-01-09 05:30:14 +00002607 .total_size = 128,
2608 .page_size = 256,
2609 .tested = TEST_UNTESTED,
2610 .probe = probe_spi_rdid,
2611 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002612 .block_erasers =
2613 {
2614 {
2615 .eraseblocks = {
2616 {32 * 1024, 3},
2617 {16 * 1024, 1},
2618 {8 * 1024, 1},
2619 {4 * 1024, 2},
2620 },
2621 .block_erase = spi_block_erase_d8,
2622 }, {
2623 .eraseblocks = { {128 * 1024, 1} },
2624 .block_erase = spi_block_erase_c7,
2625 }
2626 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002627 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002628 .write = spi_chip_write_256,
2629 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002630 .voltage = {2700, 3600},
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002631 },
2632
2633 {
2634 .vendor = "Eon",
2635 .name = "EN25B20",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002636 .bustype = BUS_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002637 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002638 .model_id = EON_EN25B20,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002639 .total_size = 256,
2640 .page_size = 256,
2641 .tested = TEST_UNTESTED,
2642 .probe = probe_spi_rdid,
2643 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002644 .block_erasers =
2645 {
2646 {
2647 .eraseblocks = {
2648 {4 * 1024, 2},
2649 {8 * 1024, 1},
2650 {16 * 1024, 1},
2651 {32 * 1024, 1},
2652 {64 * 1024, 3}
2653 },
2654 .block_erase = spi_block_erase_d8,
2655 }, {
2656 .eraseblocks = { {256 * 1024, 1} },
2657 .block_erase = spi_block_erase_c7,
2658 }
2659 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002660 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002661 .write = spi_chip_write_256,
2662 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002663 .voltage = {2700, 3600},
Sean Nelson54596372010-01-09 05:30:14 +00002664 },
2665
2666 {
2667 .vendor = "Eon",
2668 .name = "EN25B20T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002669 .bustype = BUS_SPI,
Sean Nelson54596372010-01-09 05:30:14 +00002670 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002671 .model_id = EON_EN25B20,
Sean Nelson54596372010-01-09 05:30:14 +00002672 .total_size = 256,
2673 .page_size = 256,
2674 .tested = TEST_UNTESTED,
2675 .probe = probe_spi_rdid,
2676 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002677 .block_erasers =
2678 {
2679 {
2680 .eraseblocks = {
2681 {64 * 1024, 3},
2682 {32 * 1024, 1},
2683 {16 * 1024, 1},
2684 {8 * 1024, 1},
2685 {4 * 1024, 2},
2686 },
2687 .block_erase = spi_block_erase_d8,
2688 }, {
2689 .eraseblocks = { {256 * 1024, 1} },
2690 .block_erase = spi_block_erase_c7,
2691 }
2692 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002693 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002694 .write = spi_chip_write_256,
2695 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002696 .voltage = {2700, 3600},
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002697 },
2698
2699 {
2700 .vendor = "Eon",
2701 .name = "EN25B40",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002702 .bustype = BUS_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002703 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002704 .model_id = EON_EN25B40,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002705 .total_size = 512,
2706 .page_size = 256,
2707 .tested = TEST_UNTESTED,
2708 .probe = probe_spi_rdid,
2709 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002710 .block_erasers =
2711 {
2712 {
2713 .eraseblocks = {
2714 {4 * 1024, 2},
2715 {8 * 1024, 1},
2716 {16 * 1024, 1},
2717 {32 * 1024, 1},
2718 {64 * 1024, 7}
2719 },
2720 .block_erase = spi_block_erase_d8,
2721 }, {
2722 .eraseblocks = { {512 * 1024, 1} },
2723 .block_erase = spi_block_erase_c7,
2724 }
2725 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002726 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002727 .write = spi_chip_write_256,
2728 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002729 .voltage = {2700, 3600},
Sean Nelson54596372010-01-09 05:30:14 +00002730 },
2731
2732 {
2733 .vendor = "Eon",
2734 .name = "EN25B40T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002735 .bustype = BUS_SPI,
Sean Nelson54596372010-01-09 05:30:14 +00002736 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002737 .model_id = EON_EN25B40,
Sean Nelson54596372010-01-09 05:30:14 +00002738 .total_size = 512,
2739 .page_size = 256,
2740 .tested = TEST_UNTESTED,
2741 .probe = probe_spi_rdid,
2742 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002743 .block_erasers =
2744 {
2745 {
2746 .eraseblocks = {
2747 {64 * 1024, 7},
2748 {32 * 1024, 1},
2749 {16 * 1024, 1},
2750 {8 * 1024, 1},
2751 {4 * 1024, 2},
2752 },
2753 .block_erase = spi_block_erase_d8,
2754 }, {
2755 .eraseblocks = { {512 * 1024, 1} },
2756 .block_erase = spi_block_erase_c7,
2757 }
2758 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002759 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002760 .write = spi_chip_write_256,
2761 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002762 .voltage = {2700, 3600},
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002763 },
2764
2765 {
2766 .vendor = "Eon",
2767 .name = "EN25B80",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002768 .bustype = BUS_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002769 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002770 .model_id = EON_EN25B80,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002771 .total_size = 1024,
2772 .page_size = 256,
2773 .tested = TEST_UNTESTED,
2774 .probe = probe_spi_rdid,
2775 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002776 .block_erasers =
2777 {
2778 {
2779 .eraseblocks = {
2780 {4 * 1024, 2},
2781 {8 * 1024, 1},
2782 {16 * 1024, 1},
2783 {32 * 1024, 1},
2784 {64 * 1024, 15}
2785 },
2786 .block_erase = spi_block_erase_d8,
2787 }, {
2788 .eraseblocks = { {1024 * 1024, 1} },
2789 .block_erase = spi_block_erase_c7,
2790 }
2791 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002792 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002793 .write = spi_chip_write_256,
2794 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002795 .voltage = {2700, 3600},
Sean Nelson54596372010-01-09 05:30:14 +00002796 },
2797
2798 {
2799 .vendor = "Eon",
2800 .name = "EN25B80T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002801 .bustype = BUS_SPI,
Sean Nelson54596372010-01-09 05:30:14 +00002802 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002803 .model_id = EON_EN25B80,
Sean Nelson54596372010-01-09 05:30:14 +00002804 .total_size = 1024,
2805 .page_size = 256,
2806 .tested = TEST_UNTESTED,
2807 .probe = probe_spi_rdid,
2808 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002809 .block_erasers =
2810 {
2811 {
2812 .eraseblocks = {
2813 {64 * 1024, 15},
2814 {32 * 1024, 1},
2815 {16 * 1024, 1},
2816 {8 * 1024, 1},
2817 {4 * 1024, 2},
2818 },
2819 .block_erase = spi_block_erase_d8,
2820 }, {
2821 .eraseblocks = { {1024 * 1024, 1} },
2822 .block_erase = spi_block_erase_c7,
2823 }
2824 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002825 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002826 .write = spi_chip_write_256,
2827 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002828 .voltage = {2700, 3600},
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002829 },
2830
2831 {
2832 .vendor = "Eon",
2833 .name = "EN25B16",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002834 .bustype = BUS_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002835 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002836 .model_id = EON_EN25B16,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002837 .total_size = 2048,
2838 .page_size = 256,
2839 .tested = TEST_UNTESTED,
2840 .probe = probe_spi_rdid,
2841 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002842 .block_erasers =
2843 {
2844 {
2845 .eraseblocks = {
2846 {4 * 1024, 2},
2847 {8 * 1024, 1},
2848 {16 * 1024, 1},
2849 {32 * 1024, 1},
2850 {64 * 1024, 31},
2851 },
2852 .block_erase = spi_block_erase_d8,
2853 }, {
2854 .eraseblocks = { {2 * 1024 * 1024, 1} },
2855 .block_erase = spi_block_erase_c7,
2856 }
2857 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002858 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002859 .write = spi_chip_write_256,
2860 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002861 .voltage = {2700, 3600},
Sean Nelson54596372010-01-09 05:30:14 +00002862 },
2863
2864 {
2865 .vendor = "Eon",
2866 .name = "EN25B16T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002867 .bustype = BUS_SPI,
Sean Nelson54596372010-01-09 05:30:14 +00002868 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002869 .model_id = EON_EN25B16,
Sean Nelson54596372010-01-09 05:30:14 +00002870 .total_size = 2048,
2871 .page_size = 256,
2872 .tested = TEST_UNTESTED,
2873 .probe = probe_spi_rdid,
2874 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002875 .block_erasers =
2876 {
2877 {
2878 .eraseblocks = {
2879 {64 * 1024, 31},
2880 {32 * 1024, 1},
2881 {16 * 1024, 1},
2882 {8 * 1024, 1},
2883 {4 * 1024, 2},
2884 },
2885 .block_erase = spi_block_erase_d8,
2886 }, {
2887 .eraseblocks = { {2 * 1024 * 1024, 1} },
2888 .block_erase = spi_block_erase_c7,
2889 }
2890 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002891 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002892 .write = spi_chip_write_256,
2893 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002894 .voltage = {2700, 3600},
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002895 },
2896
2897 {
2898 .vendor = "Eon",
2899 .name = "EN25B32",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002900 .bustype = BUS_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002901 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002902 .model_id = EON_EN25B32,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002903 .total_size = 4096,
2904 .page_size = 256,
2905 .tested = TEST_UNTESTED,
2906 .probe = probe_spi_rdid,
2907 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002908 .block_erasers =
2909 {
2910 {
2911 .eraseblocks = {
2912 {4 * 1024, 2},
2913 {8 * 1024, 1},
2914 {16 * 1024, 1},
2915 {32 * 1024, 1},
2916 {64 * 1024, 63},
2917 },
2918 .block_erase = spi_block_erase_d8,
2919 }, {
2920 .eraseblocks = { {4 * 1024 * 1024, 1} },
2921 .block_erase = spi_block_erase_c7,
2922 }
2923 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002924 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002925 .write = spi_chip_write_256,
2926 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002927 .voltage = {2700, 3600},
Sean Nelson54596372010-01-09 05:30:14 +00002928 },
2929
2930 {
2931 .vendor = "Eon",
2932 .name = "EN25B32T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002933 .bustype = BUS_SPI,
Sean Nelson54596372010-01-09 05:30:14 +00002934 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002935 .model_id = EON_EN25B32,
Sean Nelson54596372010-01-09 05:30:14 +00002936 .total_size = 4096,
2937 .page_size = 256,
2938 .tested = TEST_UNTESTED,
2939 .probe = probe_spi_rdid,
2940 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002941 .block_erasers =
2942 {
2943 {
2944 .eraseblocks = {
2945 {64 * 1024, 63},
2946 {32 * 1024, 1},
2947 {16 * 1024, 1},
2948 {8 * 1024, 1},
2949 {4 * 1024, 2},
2950 },
2951 .block_erase = spi_block_erase_d8,
2952 }, {
2953 .eraseblocks = { {4 * 1024 * 1024, 1} },
2954 .block_erase = spi_block_erase_c7,
2955 }
2956 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002957 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002958 .write = spi_chip_write_256,
2959 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002960 .voltage = {2700, 3600},
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002961 },
2962
2963 {
2964 .vendor = "Eon",
2965 .name = "EN25B64",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002966 .bustype = BUS_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002967 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002968 .model_id = EON_EN25B64,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002969 .total_size = 8192,
2970 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00002971 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002972 .tested = TEST_UNTESTED,
2973 .probe = probe_spi_rdid,
2974 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002975 .block_erasers =
2976 {
2977 {
2978 .eraseblocks = {
2979 {4 * 1024, 2},
2980 {8 * 1024, 1},
2981 {16 * 1024, 1},
2982 {32 * 1024, 1},
2983 {64 * 1024, 127},
2984 },
2985 .block_erase = spi_block_erase_d8,
2986 }, {
2987 .eraseblocks = { {8 * 1024 * 1024, 1} },
2988 .block_erase = spi_block_erase_c7,
2989 }
2990 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002991 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002992 .write = spi_chip_write_256,
2993 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002994 .voltage = {2700, 3600},
Sean Nelson54596372010-01-09 05:30:14 +00002995 },
2996
2997 {
2998 .vendor = "Eon",
2999 .name = "EN25B64T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003000 .bustype = BUS_SPI,
Sean Nelson54596372010-01-09 05:30:14 +00003001 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003002 .model_id = EON_EN25B64,
Sean Nelson54596372010-01-09 05:30:14 +00003003 .total_size = 8192,
3004 .page_size = 256,
3005 .tested = TEST_UNTESTED,
3006 .probe = probe_spi_rdid,
3007 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003008 .block_erasers =
3009 {
3010 {
3011 .eraseblocks = {
3012 {64 * 1024, 127},
3013 {32 * 1024, 1},
3014 {16 * 1024, 1},
3015 {8 * 1024, 1},
3016 {4 * 1024, 2},
3017 },
3018 .block_erase = spi_block_erase_d8,
3019 }, {
3020 .eraseblocks = { {8 * 1024 * 1024, 1} },
3021 .block_erase = spi_block_erase_c7,
3022 }
3023 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003024 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003025 .write = spi_chip_write_256,
3026 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003027 .voltage = {2700, 3600},
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003028 },
3029
3030 {
3031 .vendor = "Eon",
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003032 .name = "EN25F05",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003033 .bustype = BUS_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003034 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003035 .model_id = EON_EN25F05,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003036 .total_size = 64,
3037 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00003038 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003039 .tested = TEST_UNTESTED,
3040 .probe = probe_spi_rdid,
3041 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003042 .block_erasers =
3043 {
3044 {
3045 .eraseblocks = { {4 * 1024, 16} },
3046 .block_erase = spi_block_erase_20,
3047 }, {
3048 .eraseblocks = { {32 * 1024, 2} },
3049 .block_erase = spi_block_erase_d8,
3050 }, {
3051 .eraseblocks = { {32 * 1024, 2} },
3052 .block_erase = spi_block_erase_52,
3053 }, {
3054 .eraseblocks = { {64 * 1024, 1} },
3055 .block_erase = spi_block_erase_60,
3056 }, {
3057 .eraseblocks = { {64 * 1024, 1} },
3058 .block_erase = spi_block_erase_c7,
3059 }
3060 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003061 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003062 .write = spi_chip_write_256,
3063 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003064 .voltage = {2700, 3600},
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003065 },
3066
3067 {
3068 .vendor = "Eon",
3069 .name = "EN25F10",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003070 .bustype = BUS_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003071 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003072 .model_id = EON_EN25F10,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003073 .total_size = 128,
3074 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00003075 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003076 .tested = TEST_UNTESTED,
3077 .probe = probe_spi_rdid,
3078 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003079 .block_erasers =
3080 {
3081 {
3082 .eraseblocks = { {4 * 1024, 32} },
3083 .block_erase = spi_block_erase_20,
3084 }, {
3085 .eraseblocks = { {32 * 1024, 4} },
3086 .block_erase = spi_block_erase_d8,
3087 }, {
3088 .eraseblocks = { {32 * 1024, 4} },
3089 .block_erase = spi_block_erase_52,
3090 }, {
3091 .eraseblocks = { {128 * 1024, 1} },
3092 .block_erase = spi_block_erase_60,
3093 }, {
3094 .eraseblocks = { {128 * 1024, 1} },
3095 .block_erase = spi_block_erase_c7,
3096 }
3097 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003098 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003099 .write = spi_chip_write_256,
3100 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003101 .voltage = {2700, 3600},
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003102 },
3103
3104 {
3105 .vendor = "Eon",
3106 .name = "EN25F20",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003107 .bustype = BUS_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003108 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003109 .model_id = EON_EN25F20,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003110 .total_size = 256,
3111 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00003112 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003113 .tested = TEST_UNTESTED,
3114 .probe = probe_spi_rdid,
3115 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003116 .block_erasers =
3117 {
3118 {
3119 .eraseblocks = { {4 * 1024, 64} },
3120 .block_erase = spi_block_erase_20,
3121 }, {
3122 .eraseblocks = { {64 * 1024, 4} },
3123 .block_erase = spi_block_erase_d8,
3124 }, {
3125 .eraseblocks = { {64 * 1024, 4} },
3126 .block_erase = spi_block_erase_52,
3127 }, {
3128 .eraseblocks = { {256 * 1024, 1} },
3129 .block_erase = spi_block_erase_60,
3130 }, {
3131 .eraseblocks = { {256 * 1024, 1} },
3132 .block_erase = spi_block_erase_c7,
3133 }
3134 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003135 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003136 .write = spi_chip_write_256,
3137 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003138 .voltage = {2700, 3600},
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003139 },
3140
3141 {
3142 .vendor = "Eon",
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003143 .name = "EN25F40",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003144 .bustype = BUS_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003145 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003146 .model_id = EON_EN25F40,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003147 .total_size = 512,
3148 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00003149 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingerfaaa2b22009-06-22 10:06:28 +00003150 .tested = TEST_OK_PROBE,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003151 .probe = probe_spi_rdid,
3152 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003153 .block_erasers =
3154 {
3155 {
Sean Nelson54596372010-01-09 05:30:14 +00003156 .eraseblocks = { {4 * 1024, 128} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00003157 .block_erase = spi_block_erase_20,
3158 }, {
Sean Nelson54596372010-01-09 05:30:14 +00003159 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00003160 .block_erase = spi_block_erase_d8,
3161 }, {
Sean Nelson54596372010-01-09 05:30:14 +00003162 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00003163 .block_erase = spi_block_erase_60,
3164 }, {
Sean Nelson54596372010-01-09 05:30:14 +00003165 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00003166 .block_erase = spi_block_erase_c7,
3167 },
3168 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003169 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003170 .write = spi_chip_write_256,
3171 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003172 .voltage = {2700, 3600},
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003173 },
3174
3175 {
3176 .vendor = "Eon",
3177 .name = "EN25F80",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003178 .bustype = BUS_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003179 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003180 .model_id = EON_EN25F80,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003181 .total_size = 1024,
3182 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00003183 .feature_bits = FEATURE_WRSR_WREN,
Stefan Tauner716e0982011-07-25 20:38:52 +00003184 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003185 .probe = probe_spi_rdid,
3186 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003187 .block_erasers =
3188 {
3189 {
3190 .eraseblocks = { {4 * 1024, 256} },
3191 .block_erase = spi_block_erase_20,
3192 }, {
3193 .eraseblocks = { {64 * 1024, 16} },
3194 .block_erase = spi_block_erase_d8,
3195 }, {
3196 .eraseblocks = { {1024 * 1024, 1} },
3197 .block_erase = spi_block_erase_60,
3198 }, {
3199 .eraseblocks = { {1024 * 1024, 1} },
3200 .block_erase = spi_block_erase_c7,
3201 }
3202 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003203 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003204 .write = spi_chip_write_256,
3205 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003206 .voltage = {2700, 3600},
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003207 },
3208
3209 {
3210 .vendor = "Eon",
3211 .name = "EN25F16",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003212 .bustype = BUS_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003213 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003214 .model_id = EON_EN25F16,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003215 .total_size = 2048,
3216 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00003217 .feature_bits = FEATURE_WRSR_WREN,
Paul Menzel018d4822011-10-21 12:33:07 +00003218 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003219 .probe = probe_spi_rdid,
3220 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003221 .block_erasers =
3222 {
3223 {
3224 .eraseblocks = { {4 * 1024, 512} },
3225 .block_erase = spi_block_erase_20,
3226 }, {
3227 .eraseblocks = { {64 * 1024, 32} },
3228 .block_erase = spi_block_erase_d8,
3229 }, {
3230 .eraseblocks = { {2 * 1024 * 1024, 1} },
3231 .block_erase = spi_block_erase_60,
3232 }, {
3233 .eraseblocks = { {2 * 1024 * 1024, 1} },
3234 .block_erase = spi_block_erase_c7,
3235 }
3236 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003237 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003238 .write = spi_chip_write_256,
3239 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003240 .voltage = {2700, 3600},
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003241 },
3242
3243 {
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003244 .vendor = "Eon",
3245 .name = "EN25F32",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003246 .bustype = BUS_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003247 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003248 .model_id = EON_EN25F32,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003249 .total_size = 4096,
3250 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00003251 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003252 .tested = TEST_UNTESTED,
3253 .probe = probe_spi_rdid,
3254 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003255 .block_erasers =
3256 {
3257 {
3258 .eraseblocks = { {4 * 1024, 1024} },
3259 .block_erase = spi_block_erase_20,
3260 }, {
3261 .eraseblocks = { {64 * 1024, 64} },
3262 .block_erase = spi_block_erase_d8,
3263 }, {
3264 .eraseblocks = { {4 * 1024 * 1024, 1} },
3265 .block_erase = spi_block_erase_60,
3266 }, {
3267 .eraseblocks = { {4 * 1024 * 1024, 1} },
3268 .block_erase = spi_block_erase_c7,
3269 }
3270 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003271 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003272 .write = spi_chip_write_256,
3273 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003274 .voltage = {2700, 3600},
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003275 },
3276
3277 {
Russ Dill3cd5a122010-03-05 08:44:11 +00003278 .vendor = "Eon",
David Hendricks6d715302011-07-24 22:21:57 +00003279 .name = "EN25Q40",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003280 .bustype = BUS_SPI,
David Hendricks6d715302011-07-24 22:21:57 +00003281 .manufacture_id = EON_ID_NOPREFIX,
3282 .model_id = EON_EN25Q40,
3283 .total_size = 512,
3284 .page_size = 256,
Daniel Lenski65922a32012-02-15 23:40:23 +00003285 /* OTP: 256B total; enter 0x3A */
3286 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
David Hendricks6d715302011-07-24 22:21:57 +00003287 .tested = TEST_UNTESTED,
3288 .probe = probe_spi_rdid,
3289 .probe_timing = TIMING_ZERO,
3290 .block_erasers =
3291 {
3292 {
3293 .eraseblocks = { {4 * 1024, 128} },
3294 .block_erase = spi_block_erase_20,
3295 }, {
3296 .eraseblocks = { {64 * 1024, 8} },
3297 .block_erase = spi_block_erase_d8,
3298 }, {
3299 .eraseblocks = { {512 * 1024, 1} },
3300 .block_erase = spi_block_erase_60,
3301 }, {
3302 .eraseblocks = { {512 * 1024, 1} },
3303 .block_erase = spi_block_erase_c7,
3304 }
3305 },
3306 .unlock = spi_disable_blockprotect,
3307 .write = spi_chip_write_256,
3308 .read = spi_chip_read,
3309 .voltage = {2700, 3600},
3310 },
3311
3312 {
3313 .vendor = "Eon",
3314 .name = "EN25Q80(A)",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003315 .bustype = BUS_SPI,
David Hendricks6d715302011-07-24 22:21:57 +00003316 .manufacture_id = EON_ID_NOPREFIX,
3317 .model_id = EON_EN25Q80,
3318 .total_size = 1024,
3319 .page_size = 256,
Daniel Lenski65922a32012-02-15 23:40:23 +00003320 /* OTP: 256B total; enter 0x3A */
3321 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
David Hendricks6d715302011-07-24 22:21:57 +00003322 .tested = TEST_UNTESTED,
3323 .probe = probe_spi_rdid,
3324 .probe_timing = TIMING_ZERO,
3325 .block_erasers =
3326 {
3327 {
3328 .eraseblocks = { {4 * 1024, 256} },
3329 .block_erase = spi_block_erase_20,
3330 }, {
3331 .eraseblocks = { {64 * 1024, 16} },
3332 .block_erase = spi_block_erase_d8,
3333 }, {
3334 .eraseblocks = { {1024 * 1024, 1} },
3335 .block_erase = spi_block_erase_60,
3336 }, {
3337 .eraseblocks = { {1024 * 1024, 1} },
3338 .block_erase = spi_block_erase_c7,
3339 }
3340 },
3341 .unlock = spi_disable_blockprotect,
3342 .write = spi_chip_write_256,
3343 .read = spi_chip_read,
3344 .voltage = {2700, 3600},
3345 },
3346
3347 {
3348 /* Note: EN25D16 is an evil twin which shares the model ID
3349 but has different write protection capabilities */
3350 .vendor = "Eon",
3351 .name = "EN25Q16",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003352 .bustype = BUS_SPI,
David Hendricks6d715302011-07-24 22:21:57 +00003353 .manufacture_id = EON_ID_NOPREFIX,
3354 .model_id = EON_EN25Q16,
3355 .total_size = 2048,
3356 .page_size = 256,
Daniel Lenski65922a32012-02-15 23:40:23 +00003357 /* OTP: D16 512B/Q16 128B total; enter 0x3A */
3358 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
David Hendricks6d715302011-07-24 22:21:57 +00003359 .tested = TEST_UNTESTED,
3360 .probe = probe_spi_rdid,
3361 .probe_timing = TIMING_ZERO,
3362 .block_erasers =
3363 {
3364 {
3365 .eraseblocks = { {4 * 1024, 512} },
3366 .block_erase = spi_block_erase_20,
3367 }, {
3368 .eraseblocks = { {64 * 1024, 32} },
3369 .block_erase = spi_block_erase_d8,
3370 }, {
3371 /* not supported by Q16 version */
3372 .eraseblocks = { {64 * 1024, 32} },
3373 .block_erase = spi_block_erase_52,
3374 }, {
3375 .eraseblocks = { {2 * 1024 * 1024, 1} },
3376 .block_erase = spi_block_erase_60,
3377 }, {
3378 .eraseblocks = { {2 * 1024 * 1024, 1} },
3379 .block_erase = spi_block_erase_c7,
3380 }
3381 },
3382 .unlock = spi_disable_blockprotect,
3383 .write = spi_chip_write_256,
3384 .read = spi_chip_read,
3385 .voltage = {2700, 3600},
3386 },
3387
3388 {
3389 .vendor = "Eon",
3390 .name = "EN25Q32(A/B)",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003391 .bustype = BUS_SPI,
David Hendricks6d715302011-07-24 22:21:57 +00003392 .manufacture_id = EON_ID_NOPREFIX,
3393 .model_id = EON_EN25Q32,
3394 .total_size = 4096,
3395 .page_size = 256,
Daniel Lenski65922a32012-02-15 23:40:23 +00003396 /* OTP: 512B total; enter 0x3A */
3397 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
Stefan Tauner2abab942012-04-27 20:41:23 +00003398 .tested = TEST_OK_PROBE,
David Hendricks6d715302011-07-24 22:21:57 +00003399 .probe = probe_spi_rdid,
3400 .probe_timing = TIMING_ZERO,
3401 .block_erasers =
3402 {
3403 {
3404 .eraseblocks = { {4 * 1024, 1024} },
3405 .block_erase = spi_block_erase_20,
3406 }, {
3407 .eraseblocks = { {64 * 1024, 64} },
3408 .block_erase = spi_block_erase_d8,
3409 }, {
3410 .eraseblocks = { {4 * 1024 * 1024, 1} },
3411 .block_erase = spi_block_erase_60,
3412 }, {
3413 .eraseblocks = { {4 * 1024 * 1024, 1} },
3414 .block_erase = spi_block_erase_c7,
3415 }
3416 },
3417 .unlock = spi_disable_blockprotect,
3418 .write = spi_chip_write_256,
3419 .read = spi_chip_read,
3420 .voltage = {2700, 3600},
3421 },
3422
3423 {
3424 .vendor = "Eon",
3425 .name = "EN25Q64",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003426 .bustype = BUS_SPI,
David Hendricks6d715302011-07-24 22:21:57 +00003427 .manufacture_id = EON_ID_NOPREFIX,
3428 .model_id = EON_EN25Q64,
3429 .total_size = 8192,
3430 .page_size = 256,
Daniel Lenski65922a32012-02-15 23:40:23 +00003431 /* OTP: 512B total; enter 0x3A */
3432 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
David Hendricks6d715302011-07-24 22:21:57 +00003433 .tested = TEST_UNTESTED,
3434 .probe = probe_spi_rdid,
3435 .probe_timing = TIMING_ZERO,
3436 .block_erasers =
3437 {
3438 {
3439 .eraseblocks = { {4 * 1024, 2048} },
3440 .block_erase = spi_block_erase_20,
3441 }, {
3442 .eraseblocks = { {64 * 1024, 128} },
3443 .block_erase = spi_block_erase_d8,
3444 }, {
3445 .eraseblocks = { {8 * 1024 * 1024, 1} },
3446 .block_erase = spi_block_erase_60,
3447 }, {
3448 .eraseblocks = { {8 * 1024 * 1024, 1} },
3449 .block_erase = spi_block_erase_c7,
3450 }
3451 },
3452 .unlock = spi_disable_blockprotect,
3453 .write = spi_chip_write_256,
3454 .read = spi_chip_read,
3455 .voltage = {2700, 3600},
3456 },
3457
3458 {
3459 .vendor = "Eon",
3460 .name = "EN25Q128",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003461 .bustype = BUS_SPI,
David Hendricks6d715302011-07-24 22:21:57 +00003462 .manufacture_id = EON_ID_NOPREFIX,
3463 .model_id = EON_EN25Q128,
3464 .total_size = 16384,
3465 .page_size = 256,
Daniel Lenski65922a32012-02-15 23:40:23 +00003466 /* OTP: 512B total; enter 0x3A */
3467 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
David Hendricks6d715302011-07-24 22:21:57 +00003468 .tested = TEST_UNTESTED,
3469 .probe = probe_spi_rdid,
3470 .probe_timing = TIMING_ZERO,
3471 .block_erasers =
3472 {
3473 {
3474 .eraseblocks = { {4 * 1024, 4096} },
3475 .block_erase = spi_block_erase_20,
3476 }, {
3477 .eraseblocks = { {64 * 1024, 256} },
3478 .block_erase = spi_block_erase_d8,
3479 }, {
3480 .eraseblocks = { {16 * 1024 * 1024, 1} },
3481 .block_erase = spi_block_erase_60,
3482 }, {
3483 .eraseblocks = { {16 * 1024 * 1024, 1} },
3484 .block_erase = spi_block_erase_c7,
3485 }
3486 },
3487 .unlock = spi_disable_blockprotect,
3488 .write = spi_chip_write_256,
3489 .read = spi_chip_read,
3490 },
3491
3492 {
3493 .vendor = "Eon",
3494 .name = "EN25QH16",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003495 .bustype = BUS_SPI,
David Hendricks6d715302011-07-24 22:21:57 +00003496 .manufacture_id = EON_ID_NOPREFIX,
3497 .model_id = EON_EN25QH16,
3498 .total_size = 2048,
3499 .page_size = 256,
Daniel Lenski65922a32012-02-15 23:40:23 +00003500 /* supports SFDP */
3501 /* OTP: 512B total; enter 0x3A */
3502 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
David Hendricks6d715302011-07-24 22:21:57 +00003503 .tested = TEST_UNTESTED,
3504 .probe = probe_spi_rdid,
3505 .probe_timing = TIMING_ZERO,
3506 .block_erasers =
3507 {
3508 {
3509 .eraseblocks = { {4 * 1024, 512} },
3510 .block_erase = spi_block_erase_20,
3511 }, {
3512 .eraseblocks = { {64 * 1024, 32} },
3513 .block_erase = spi_block_erase_d8,
3514 }, {
3515 .eraseblocks = { {1024 * 2048, 1} },
3516 .block_erase = spi_block_erase_60,
3517 }, {
3518 .eraseblocks = { {1024 * 2048, 1} },
3519 .block_erase = spi_block_erase_c7,
3520 }
3521 },
3522 .unlock = spi_disable_blockprotect,
3523 .write = spi_chip_write_256,
3524 .read = spi_chip_read,
3525 .voltage = {2700, 3600},
3526 },
3527
3528 {
3529 .vendor = "Eon",
Russ Dill3cd5a122010-03-05 08:44:11 +00003530 .name = "EN29F010",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003531 .bustype = BUS_PARALLEL,
Russ Dill3cd5a122010-03-05 08:44:11 +00003532 .manufacture_id = EON_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003533 .model_id = EON_EN29F010,
Russ Dill3cd5a122010-03-05 08:44:11 +00003534 .total_size = 128,
3535 .page_size = 128,
3536 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00003537 .tested = TEST_OK_PRE,
Russ Dill3cd5a122010-03-05 08:44:11 +00003538 .probe = probe_jedec,
3539 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3540 .block_erasers =
3541 {
3542 {
3543 .eraseblocks = { {16 * 1024, 8} },
3544 .block_erase = erase_sector_jedec,
3545 },
3546 {
3547 .eraseblocks = { {128 * 1024, 1} },
3548 .block_erase = erase_chip_block_jedec,
3549 },
3550 },
3551 .write = write_jedec_1,
3552 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003553 .voltage = {4500, 5500},
Russ Dill3cd5a122010-03-05 08:44:11 +00003554 },
3555
3556 {
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00003557 .vendor = "Eon",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003558 .name = "EN29F002(A)(N)B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003559 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003560 .manufacture_id = EON_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003561 .model_id = EON_EN29F002B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003562 .total_size = 256,
3563 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00003564 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00003565 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003566 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003567 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003568 .block_erasers =
3569 {
3570 {
Rudolf Marek47eff6b2012-04-14 22:51:40 +00003571 .eraseblocks = {
Sean Nelson6b11ad22009-12-23 17:05:59 +00003572 {16 * 1024, 1},
Michael Karchere3cb0a12010-03-13 23:47:09 +00003573 {8 * 1024, 2},
3574 {32 * 1024, 1},
3575 {64 * 1024, 3},
Sean Nelson6b11ad22009-12-23 17:05:59 +00003576 },
3577 .block_erase = erase_sector_jedec,
3578 }, {
3579 .eraseblocks = { {256 * 1024, 1} },
3580 .block_erase = erase_chip_block_jedec,
3581 },
3582 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003583 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003584 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003585 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00003586 },
3587
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003588 {
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00003589 .vendor = "Eon",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003590 .name = "EN29F002(A)(N)T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003591 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003592 .manufacture_id = EON_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003593 .model_id = EON_EN29F002T,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003594 .total_size = 256,
3595 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00003596 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Paul Menzel018d4822011-10-21 12:33:07 +00003597 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003598 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003599 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003600 .block_erasers =
3601 {
3602 {
Rudolf Marek47eff6b2012-04-14 22:51:40 +00003603 .eraseblocks = {
Sean Nelson6b11ad22009-12-23 17:05:59 +00003604 {64 * 1024, 3},
Michael Karchere3cb0a12010-03-13 23:47:09 +00003605 {32 * 1024, 1},
3606 {8 * 1024, 2},
3607 {16 * 1024, 1},
Sean Nelson6b11ad22009-12-23 17:05:59 +00003608 },
3609 .block_erase = erase_sector_jedec,
3610 }, {
3611 .eraseblocks = { {256 * 1024, 1} },
3612 .block_erase = erase_chip_block_jedec,
3613 },
3614 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003615 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003616 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003617 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00003618 },
3619
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003620 {
Rudolf Marek47eff6b2012-04-14 22:51:40 +00003621 .vendor = "Eon",
3622 .name = "EN29LV640B",
3623 .bustype = BUS_PARALLEL,
3624 .manufacture_id = EON_ID,
3625 .model_id = EON_EN29LV640B,
3626 .total_size = 8192,
3627 .page_size = 8192,
3628 .feature_bits = 0,
3629 .tested = TEST_OK_PREW,
3630 .probe = probe_en29lv640b,
3631 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3632 .block_erasers =
3633 {
3634 {
3635 .eraseblocks = {
3636 {8 * 1024, 8},
3637 {64 * 1024, 127},
3638 },
3639 .block_erase = block_erase_en29lv640b,
3640 }, {
3641 .eraseblocks = { {8 * 1024 * 1024, 1} },
3642 .block_erase = block_erase_chip_en29lv640b,
3643 },
3644 },
3645 .write = write_en29lv640b,
3646 .read = read_memmapped,
3647 .voltage = {2700, 3600},
3648 },
3649
3650 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003651 .vendor = "Fujitsu",
3652 .name = "MBM29F004BC",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003653 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003654 .manufacture_id = FUJITSU_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003655 .model_id = FUJITSU_MBM29F004BC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003656 .total_size = 512,
3657 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003658 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003659 .tested = TEST_UNTESTED,
3660 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003661 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003662 .block_erasers =
3663 {
3664 {
3665 .eraseblocks = {
3666 {16 * 1024, 1},
3667 {8 * 1024, 2},
3668 {32 * 1024, 1},
3669 {64 * 1024, 7},
3670 },
Sean Nelson35727f72010-01-28 23:55:12 +00003671 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003672 }, {
3673 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003674 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003675 },
3676 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003677 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003678 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003679 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00003680 },
3681
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003682 {
3683 .vendor = "Fujitsu",
3684 .name = "MBM29F004TC",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003685 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003686 .manufacture_id = FUJITSU_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003687 .model_id = FUJITSU_MBM29F004TC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003688 .total_size = 512,
3689 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003690 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003691 .tested = TEST_UNTESTED,
3692 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003693 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003694 .block_erasers =
3695 {
3696 {
3697 .eraseblocks = {
3698 {64 * 1024, 7},
3699 {32 * 1024, 1},
3700 {8 * 1024, 2},
3701 {16 * 1024, 1},
3702 },
Sean Nelson35727f72010-01-28 23:55:12 +00003703 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003704 }, {
3705 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003706 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003707 },
3708 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003709 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003710 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003711 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00003712 },
3713
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003714 {
Sean Nelson35727f72010-01-28 23:55:12 +00003715 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003716 .vendor = "Fujitsu",
3717 .name = "MBM29F400BC",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003718 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003719 .manufacture_id = FUJITSU_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003720 .model_id = FUJITSU_MBM29F400BC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003721 .total_size = 512,
3722 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003723 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00003724 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003725 .probe = probe_m29f400bt,
Paul Menzelc07a41c2011-06-19 17:23:55 +00003726 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003727 .block_erasers =
3728 {
3729 {
3730 .eraseblocks = {
3731 {16 * 1024, 1},
3732 {8 * 1024, 2},
3733 {32 * 1024, 1},
3734 {64 * 1024, 7},
3735 },
3736 .block_erase = block_erase_m29f400bt,
3737 }, {
3738 .eraseblocks = { {512 * 1024, 1} },
3739 .block_erase = block_erase_chip_m29f400bt,
3740 },
3741 },
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00003742 .write = write_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003743 .read = read_memmapped,
Steven Zakulec7d257b42011-07-19 08:50:18 +00003744 .voltage = {4750, 5250}, /* 4.75-5.25V for type -55, others 4.5-5.5V */
FENG yu ningff692fb2008-12-08 18:15:10 +00003745 },
3746
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003747 {
3748 .vendor = "Fujitsu",
3749 .name = "MBM29F400TC",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003750 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003751 .manufacture_id = FUJITSU_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003752 .model_id = FUJITSU_MBM29F400TC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003753 .total_size = 512,
3754 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003755 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003756 .tested = TEST_UNTESTED,
3757 .probe = probe_m29f400bt,
Paul Menzelc07a41c2011-06-19 17:23:55 +00003758 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003759 .block_erasers =
3760 {
3761 {
3762 .eraseblocks = {
3763 {64 * 1024, 7},
3764 {32 * 1024, 1},
3765 {8 * 1024, 2},
3766 {16 * 1024, 1},
3767 },
3768 .block_erase = block_erase_m29f400bt,
3769 }, {
3770 .eraseblocks = { {512 * 1024, 1} },
3771 .block_erase = block_erase_chip_m29f400bt,
3772 },
3773 },
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00003774 .write = write_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003775 .read = read_memmapped,
Steven Zakulec7d257b42011-07-19 08:50:18 +00003776 .voltage = {4750, 5250}, /* 4.75-5.25V for type -55, others 4.5-5.5V */
FENG yu ningff692fb2008-12-08 18:15:10 +00003777 },
3778
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003779 {
Justin Chevrier1525b2a2012-04-14 21:59:23 +00003780 .vendor = "GigaDevice",
3781 .name = "GD25Q20",
3782 .bustype = BUS_SPI,
3783 .manufacture_id = GIGADEVICE_ID,
3784 .model_id = GIGADEVICE_GD25Q20,
3785 .total_size = 256,
3786 .page_size = 256,
3787 .feature_bits = FEATURE_WRSR_WREN,
3788 .tested = TEST_UNTESTED,
3789 .probe = probe_spi_rdid,
3790 .probe_timing = TIMING_ZERO,
3791 .block_erasers =
3792 {
3793 {
3794 .eraseblocks = { {4 * 1024, 64} },
3795 .block_erase = spi_block_erase_20,
3796 }, {
3797 .eraseblocks = { {32 * 1024, 8} },
3798 .block_erase = spi_block_erase_52,
3799 }, {
3800 .eraseblocks = { {64 * 1024, 4} },
3801 .block_erase = spi_block_erase_d8,
3802 }, {
3803 .eraseblocks = { {256 * 1024, 1} },
3804 .block_erase = spi_block_erase_60,
3805 }, {
3806 .eraseblocks = { {256 * 1024, 1} },
3807 .block_erase = spi_block_erase_c7,
3808 }
3809 },
3810 .unlock = spi_disable_blockprotect,
3811 .write = spi_chip_write_256,
3812 .read = spi_chip_read,
3813 .voltage = {2700, 3600},
3814 },
3815
3816 {
3817 .vendor = "GigaDevice",
3818 .name = "GD25Q40",
3819 .bustype = BUS_SPI,
3820 .manufacture_id = GIGADEVICE_ID,
3821 .model_id = GIGADEVICE_GD25Q40,
3822 .total_size = 512,
3823 .page_size = 256,
3824 .feature_bits = FEATURE_WRSR_WREN,
3825 .tested = TEST_UNTESTED,
3826 .probe = probe_spi_rdid,
3827 .probe_timing = TIMING_ZERO,
3828 .block_erasers =
3829 {
3830 {
3831 .eraseblocks = { {4 * 1024, 128} },
3832 .block_erase = spi_block_erase_20,
3833 }, {
3834 .eraseblocks = { {32 * 1024, 16} },
3835 .block_erase = spi_block_erase_52,
3836 }, {
3837 .eraseblocks = { {64 * 1024, 8} },
3838 .block_erase = spi_block_erase_d8,
3839 }, {
3840 .eraseblocks = { {512 * 1024, 1} },
3841 .block_erase = spi_block_erase_60,
3842 }, {
3843 .eraseblocks = { {512 * 1024, 1} },
3844 .block_erase = spi_block_erase_c7,
3845 }
3846 },
3847 .unlock = spi_disable_blockprotect,
3848 .write = spi_chip_write_256,
3849 .read = spi_chip_read,
3850 .voltage = {2700, 3600},
3851 },
3852
3853 {
3854 .vendor = "GigaDevice",
3855 .name = "GD25Q80",
3856 .bustype = BUS_SPI,
3857 .manufacture_id = GIGADEVICE_ID,
3858 .model_id = GIGADEVICE_GD25Q80,
3859 .total_size = 1024,
3860 .page_size = 256,
3861 /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42 */
3862 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
3863 .tested = TEST_OK_PREW,
3864 .probe = probe_spi_rdid,
3865 .probe_timing = TIMING_ZERO,
3866 .block_erasers =
3867 {
3868 {
3869 .eraseblocks = { {4 * 1024, 256} },
3870 .block_erase = spi_block_erase_20,
3871 }, {
3872 .eraseblocks = { {32 * 1024, 32} },
3873 .block_erase = spi_block_erase_52,
3874 }, {
3875 .eraseblocks = { {64 * 1024, 16} },
3876 .block_erase = spi_block_erase_d8,
3877 }, {
3878 .eraseblocks = { {1024 * 1024, 1} },
3879 .block_erase = spi_block_erase_60,
3880 }, {
3881 .eraseblocks = { {1024 * 1024, 1} },
3882 .block_erase = spi_block_erase_c7,
3883 }
3884 },
3885 .unlock = spi_disable_blockprotect,
3886 .write = spi_chip_write_256,
3887 .read = spi_chip_read,
3888 .voltage = {2700, 3600},
3889 },
3890
3891 {
3892 .vendor = "GigaDevice",
3893 .name = "GD25Q16",
3894 .bustype = BUS_SPI,
3895 .manufacture_id = GIGADEVICE_ID,
3896 .model_id = GIGADEVICE_GD25Q16,
3897 .total_size = 2048,
3898 .page_size = 256,
3899 /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42 */
3900 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
3901 .tested = TEST_UNTESTED,
3902 .probe = probe_spi_rdid,
3903 .probe_timing = TIMING_ZERO,
3904 .block_erasers =
3905 {
3906 {
3907 .eraseblocks = { {4 * 1024, 512} },
3908 .block_erase = spi_block_erase_20,
3909 }, {
3910 .eraseblocks = { {32 * 1024, 64} },
3911 .block_erase = spi_block_erase_52,
3912 }, {
3913 .eraseblocks = { {64 * 1024, 32} },
3914 .block_erase = spi_block_erase_d8,
3915 }, {
3916 .eraseblocks = { {2 * 1024 * 1024, 1} },
3917 .block_erase = spi_block_erase_60,
3918 }, {
3919 .eraseblocks = { {2 * 1024 * 1024, 1} },
3920 .block_erase = spi_block_erase_c7,
3921 }
3922 },
3923 .unlock = spi_disable_blockprotect,
3924 .write = spi_chip_write_256,
3925 .read = spi_chip_read,
3926 .voltage = {2700, 3600},
3927 },
3928
3929 {
3930 .vendor = "GigaDevice",
3931 .name = "GD25Q32",
3932 .bustype = BUS_SPI,
3933 .manufacture_id = GIGADEVICE_ID,
3934 .model_id = GIGADEVICE_GD25Q32,
3935 .total_size = 4096,
3936 .page_size = 256,
3937 /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42 */
3938 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
3939 .tested = TEST_UNTESTED,
3940 .probe = probe_spi_rdid,
3941 .probe_timing = TIMING_ZERO,
3942 .block_erasers =
3943 {
3944 {
3945 .eraseblocks = { {4 * 1024, 1024} },
3946 .block_erase = spi_block_erase_20,
3947 }, {
3948 .eraseblocks = { {32 * 1024, 128} },
3949 .block_erase = spi_block_erase_52,
3950 }, {
3951 .eraseblocks = { {64 * 1024, 64} },
3952 .block_erase = spi_block_erase_d8,
3953 }, {
3954 .eraseblocks = { {4 * 1024 * 1024, 1} },
3955 .block_erase = spi_block_erase_60,
3956 }, {
3957 .eraseblocks = { {4 * 1024 * 1024, 1} },
3958 .block_erase = spi_block_erase_c7,
3959 }
3960 },
3961 .unlock = spi_disable_blockprotect,
3962 .write = spi_chip_write_256,
3963 .read = spi_chip_read,
3964 .voltage = {2700, 3600},
3965 },
3966
3967 {
3968 .vendor = "GigaDevice",
3969 .name = "GD25Q64",
3970 .bustype = BUS_SPI,
3971 .manufacture_id = GIGADEVICE_ID,
3972 .model_id = GIGADEVICE_GD25Q64,
3973 .total_size = 8192,
3974 .page_size = 256,
3975 /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42 */
3976 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
3977 .tested = TEST_UNTESTED,
3978 .probe = probe_spi_rdid,
3979 .probe_timing = TIMING_ZERO,
3980 .block_erasers =
3981 {
3982 {
3983 .eraseblocks = { {4 * 1024, 2048} },
3984 .block_erase = spi_block_erase_20,
3985 }, {
3986 .eraseblocks = { {32 * 1024, 256} },
3987 .block_erase = spi_block_erase_52,
3988 }, {
3989 .eraseblocks = { {64 * 1024, 128} },
3990 .block_erase = spi_block_erase_d8,
3991 }, {
3992 .eraseblocks = { {8 * 1024 * 1024, 1} },
3993 .block_erase = spi_block_erase_60,
3994 }, {
3995 .eraseblocks = { {8 * 1024 * 1024, 1} },
3996 .block_erase = spi_block_erase_c7,
3997 }
3998 },
3999 .unlock = spi_disable_blockprotect,
4000 .write = spi_chip_write_256,
4001 .read = spi_chip_read,
4002 },
4003
4004 {
4005 .vendor = "GigaDevice",
4006 .name = "GD25Q128",
4007 .bustype = BUS_SPI,
4008 .manufacture_id = GIGADEVICE_ID,
4009 .model_id = GIGADEVICE_GD25Q128,
4010 .total_size = 16384,
4011 .page_size = 256,
4012 /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42 */
4013 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
4014 .tested = TEST_UNTESTED,
4015 .probe = probe_spi_rdid,
4016 .probe_timing = TIMING_ZERO,
4017 .block_erasers =
4018 {
4019 {
4020 .eraseblocks = { {4 * 1024, 4096} },
4021 .block_erase = spi_block_erase_20,
4022 }, {
4023 .eraseblocks = { {32 * 1024, 512} },
4024 .block_erase = spi_block_erase_52,
4025 }, {
4026 .eraseblocks = { {64 * 1024, 256} },
4027 .block_erase = spi_block_erase_d8,
4028 }, {
4029 .eraseblocks = { {16 * 1024 * 1024, 1} },
4030 .block_erase = spi_block_erase_60,
4031 }, {
4032 .eraseblocks = { {16 * 1024 * 1024, 1} },
4033 .block_erase = spi_block_erase_c7,
4034 }
4035 },
4036 .unlock = spi_disable_blockprotect,
4037 .write = spi_chip_write_256,
4038 .read = spi_chip_read,
4039 },
4040
4041 {
David Borgc96a8bd2010-06-21 16:12:22 +00004042 .vendor = "Hyundai",
4043 .name = "HY29F002T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004044 .bustype = BUS_PARALLEL,
David Borgc96a8bd2010-06-21 16:12:22 +00004045 .manufacture_id = HYUNDAI_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004046 .model_id = HYUNDAI_HY29F002T,
David Borgc96a8bd2010-06-21 16:12:22 +00004047 .total_size = 256,
4048 .page_size = 256 * 1024,
4049 .feature_bits = FEATURE_EITHER_RESET, /* Some revisions may need FEATURE_ADDR_2AA */
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00004050 .tested = TEST_OK_PRE,
David Borgc96a8bd2010-06-21 16:12:22 +00004051 .probe = probe_jedec,
4052 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
4053 .block_erasers =
4054 {
4055 {
4056 .eraseblocks = {
4057 {64 * 1024, 3},
4058 {32 * 1024, 1},
4059 {8 * 1024, 2},
4060 {16 * 1024, 1},
4061 },
4062 .block_erase = erase_sector_jedec,
4063 }, {
4064 .eraseblocks = { {256 * 1024, 1} },
4065 .block_erase = erase_chip_block_jedec,
4066 },
4067 },
4068 .write = write_jedec_1,
4069 .read = read_memmapped,
Steven Zakulec7d257b42011-07-19 08:50:18 +00004070 .voltage = {4750, 5250}, /* 4.75-5.25V for type -45, others 4.5-5.5V */
David Borgc96a8bd2010-06-21 16:12:22 +00004071 },
4072
4073 {
4074 .vendor = "Hyundai",
4075 .name = "HY29F002B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004076 .bustype = BUS_PARALLEL,
David Borgc96a8bd2010-06-21 16:12:22 +00004077 .manufacture_id = HYUNDAI_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004078 .model_id = HYUNDAI_HY29F002B,
David Borgc96a8bd2010-06-21 16:12:22 +00004079 .total_size = 256,
4080 .page_size = 256 * 1024,
4081 .feature_bits = FEATURE_EITHER_RESET, /* Some revisions may need FEATURE_ADDR_2AA */
4082 .tested = TEST_UNTESTED,
4083 .probe = probe_jedec,
4084 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
4085 .block_erasers =
4086 {
4087 {
4088 .eraseblocks = {
4089 {16 * 1024, 1},
4090 {8 * 1024, 2},
4091 {32 * 1024, 1},
4092 {64 * 1024, 3},
4093 },
4094 .block_erase = erase_sector_jedec,
4095 }, {
4096 .eraseblocks = { {256 * 1024, 1} },
4097 .block_erase = erase_chip_block_jedec,
4098 },
4099 },
4100 .write = write_jedec_1,
4101 .read = read_memmapped,
Steven Zakulec7d257b42011-07-19 08:50:18 +00004102 .voltage = {4750, 5250}, /* 4.75-5.25V for type -45, others 4.5-5.5V */
David Borgc96a8bd2010-06-21 16:12:22 +00004103 },
4104
4105 {
Joshua Roysf1324e02010-09-16 00:51:51 +00004106 .vendor = "Hyundai",
4107 .name = "HY29F040A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004108 .bustype = BUS_PARALLEL,
Joshua Roysf1324e02010-09-16 00:51:51 +00004109 .manufacture_id = HYUNDAI_ID,
4110 .model_id = HYUNDAI_HY29F040A,
4111 .total_size = 512,
4112 .page_size = 64 * 1024,
4113 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
4114 .tested = TEST_UNTESTED,
4115 .probe = probe_jedec,
4116 .probe_timing = TIMING_ZERO,
4117 .block_erasers =
4118 {
4119 {
4120 .eraseblocks = { {64 * 1024, 8} },
4121 .block_erase = erase_sector_jedec,
4122 }, {
4123 .eraseblocks = { {512 * 1024, 1} },
4124 .block_erase = erase_chip_block_jedec,
4125 },
4126 },
4127 .write = write_jedec_1,
4128 .read = read_memmapped,
Steven Zakulec7d257b42011-07-19 08:50:18 +00004129 .voltage = {4500, 5500},
Joshua Roysf1324e02010-09-16 00:51:51 +00004130 },
4131
4132 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004133 .vendor = "Intel",
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00004134 .name = "28F001BN/BX-B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004135 .bustype = BUS_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00004136 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00004137 .model_id = INTEL_28F001B,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00004138 .total_size = 128,
4139 .page_size = 128 * 1024, /* 8k + 2x4k + 112k */
Sean Nelsondee4a832010-03-22 04:39:31 +00004140 .tested = TEST_UNTESTED,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00004141 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004142 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00004143 .block_erasers =
4144 {
4145 {
4146 .eraseblocks = {
4147 {8 * 1024, 1},
4148 {4 * 1024, 2},
4149 {112 * 1024, 1},
4150 },
Sean Nelson28accc22010-03-19 18:47:06 +00004151 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00004152 },
4153 },
Sean Nelsondee4a832010-03-22 04:39:31 +00004154 .write = write_82802ab,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00004155 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004156 .voltage = {4500, 5500},
Urja Rannikkoebd7b832009-05-29 12:55:31 +00004157 },
4158
4159 {
4160 .vendor = "Intel",
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00004161 .name = "28F001BN/BX-T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004162 .bustype = BUS_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00004163 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00004164 .model_id = INTEL_28F001T,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00004165 .total_size = 128,
4166 .page_size = 128 * 1024, /* 112k + 2x4k + 8k */
Sylvain "ythier" Hitier3093f8f2011-09-03 11:22:27 +00004167 .tested = TEST_OK_PR,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00004168 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004169 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00004170 .block_erasers =
4171 {
4172 {
Sylvain "ythier" Hitier3093f8f2011-09-03 11:22:27 +00004173 .eraseblocks = {
Sean Nelson54596372010-01-09 05:30:14 +00004174 {112 * 1024, 1},
4175 {4 * 1024, 2},
4176 {8 * 1024, 1},
4177 },
Sean Nelson28accc22010-03-19 18:47:06 +00004178 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00004179 },
4180 },
Sean Nelsondee4a832010-03-22 04:39:31 +00004181 .write = write_82802ab,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00004182 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004183 .voltage = {4500, 5500},
Urja Rannikkoebd7b832009-05-29 12:55:31 +00004184 },
4185
4186 {
4187 .vendor = "Intel",
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00004188 .name = "28F002BC/BL/BV/BX-T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004189 .bustype = BUS_PARALLEL,
Joshua Roysd97c0e02010-07-22 15:20:43 +00004190 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00004191 .model_id = INTEL_28F002T,
Joshua Roysd97c0e02010-07-22 15:20:43 +00004192 .total_size = 256,
4193 .page_size = 256 * 1024,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00004194 .tested = TEST_OK_PRE,
Joshua Roysd97c0e02010-07-22 15:20:43 +00004195 .probe = probe_82802ab,
4196 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
4197 .block_erasers =
4198 {
4199 {
4200 .eraseblocks = {
4201 {128 * 1024, 1},
4202 {96 * 1024, 1},
4203 {8 * 1024, 2},
4204 {16 * 1024, 1},
4205 },
4206 .block_erase = erase_block_82802ab,
4207 },
4208 },
4209 .write = write_82802ab,
4210 .read = read_memmapped,
4211 },
4212
4213 {
4214 .vendor = "Intel",
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00004215 .name = "28F008S3/S5/SC",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004216 .bustype = BUS_PARALLEL,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00004217 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00004218 .model_id = INTEL_28F004S3,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00004219 .total_size = 512,
4220 .page_size = 256,
4221 .tested = TEST_UNTESTED,
4222 .probe = probe_82802ab,
4223 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00004224 .block_erasers =
4225 {
4226 {
4227 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson28accc22010-03-19 18:47:06 +00004228 .block_erase = erase_block_82802ab,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00004229 },
4230 },
Sean Nelsondee4a832010-03-22 04:39:31 +00004231 .unlock = unlock_28f004s5,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00004232 .write = write_82802ab,
4233 .read = read_memmapped,
4234 },
4235
4236 {
4237 .vendor = "Intel",
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00004238 .name = "28F004B5/BE/BV/BX-B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004239 .bustype = BUS_PARALLEL,
Michael Karcherad0010a2010-04-03 10:27:08 +00004240 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00004241 .model_id = INTEL_28F004B,
Michael Karcherad0010a2010-04-03 10:27:08 +00004242 .total_size = 512,
4243 .page_size = 128 * 1024, /* maximal block size */
4244 .tested = TEST_UNTESTED,
4245 .probe = probe_82802ab,
4246 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
4247 .block_erasers =
4248 {
4249 {
4250 .eraseblocks = {
4251 {16 * 1024, 1},
4252 {8 * 1024, 2},
4253 {96 * 1024, 1},
4254 {128 * 1024, 3},
4255 },
4256 .block_erase = erase_block_82802ab,
4257 },
4258 },
4259 .write = write_82802ab,
4260 .read = read_memmapped,
4261 },
4262
4263 {
4264 .vendor = "Intel",
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00004265 .name = "28F004B5/BE/BV/BX-T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004266 .bustype = BUS_PARALLEL,
Michael Karcherad0010a2010-04-03 10:27:08 +00004267 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00004268 .model_id = INTEL_28F004T,
Michael Karcherad0010a2010-04-03 10:27:08 +00004269 .total_size = 512,
4270 .page_size = 128 * 1024, /* maximal block size */
4271 .tested = TEST_UNTESTED,
4272 .probe = probe_82802ab,
4273 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
4274 .block_erasers =
4275 {
4276 {
4277 .eraseblocks = {
4278 {128 * 1024, 3},
4279 {96 * 1024, 1},
4280 {8 * 1024, 2},
4281 {16 * 1024, 1},
4282 },
4283 .block_erase = erase_block_82802ab,
4284 },
4285 },
4286 .write = write_82802ab,
4287 .read = read_memmapped,
4288 },
4289
4290 {
4291 .vendor = "Intel",
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00004292 .name = "28F400BV/BX/CE/CV-B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004293 .bustype = BUS_PARALLEL,
Michael Karcherad0010a2010-04-03 10:27:08 +00004294 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00004295 .model_id = INTEL_28F400B,
Michael Karcherad0010a2010-04-03 10:27:08 +00004296 .total_size = 512,
4297 .page_size = 128 * 1024, /* maximal block size */
4298 .feature_bits = FEATURE_ADDR_SHIFTED,
4299 .tested = TEST_UNTESTED,
4300 .probe = probe_82802ab,
4301 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
4302 .block_erasers =
4303 {
4304 {
4305 .eraseblocks = {
4306 {16 * 1024, 1},
4307 {8 * 1024, 2},
4308 {96 * 1024, 1},
4309 {128 * 1024, 3},
4310 },
4311 .block_erase = erase_block_82802ab,
4312 },
4313 },
4314 .write = write_82802ab,
4315 .read = read_memmapped,
4316 },
4317
4318 {
4319 .vendor = "Intel",
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00004320 .name = "28F400BV/BX/CE/CV-T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004321 .bustype = BUS_PARALLEL,
Michael Karcherad0010a2010-04-03 10:27:08 +00004322 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00004323 .model_id = INTEL_28F400T,
Michael Karcherad0010a2010-04-03 10:27:08 +00004324 .total_size = 512,
4325 .page_size = 128 * 1024, /* maximal block size */
4326 .feature_bits = FEATURE_ADDR_SHIFTED,
4327 .tested = TEST_UNTESTED,
4328 .probe = probe_82802ab,
4329 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
4330 .block_erasers =
4331 {
4332 {
4333 .eraseblocks = {
4334 {128 * 1024, 3},
4335 {96 * 1024, 1},
4336 {8 * 1024, 2},
4337 {16 * 1024, 1},
4338 },
4339 .block_erase = erase_block_82802ab,
4340 },
4341 },
4342 .write = write_82802ab,
4343 .read = read_memmapped,
4344 },
4345
4346 {
4347 .vendor = "Intel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004348 .name = "82802AB",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004349 .bustype = BUS_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004350 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00004351 .model_id = INTEL_82802AB,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004352 .total_size = 512,
4353 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004354 .feature_bits = FEATURE_REGISTERMAP,
Stefan Taunerd06d9412011-06-12 19:47:55 +00004355 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004356 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004357 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00004358 .block_erasers =
4359 {
4360 {
4361 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson28accc22010-03-19 18:47:06 +00004362 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00004363 },
4364 },
Sean Nelson28accc22010-03-19 18:47:06 +00004365 .unlock = unlock_82802ab,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004366 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004367 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004368 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00004369 },
4370
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004371 {
4372 .vendor = "Intel",
4373 .name = "82802AC",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004374 .bustype = BUS_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004375 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00004376 .model_id = INTEL_82802AC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004377 .total_size = 1024,
4378 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004379 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00004380 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004381 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004382 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00004383 .block_erasers =
4384 {
4385 {
4386 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson28accc22010-03-19 18:47:06 +00004387 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00004388 },
4389 },
Sean Nelson28accc22010-03-19 18:47:06 +00004390 .unlock = unlock_82802ab,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004391 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004392 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004393 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00004394 },
4395
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004396 {
4397 .vendor = "Macronix",
4398 .name = "MX25L512",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004399 .bustype = BUS_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004400 .manufacture_id = MACRONIX_ID,
4401 .model_id = MACRONIX_MX25L512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004402 .total_size = 64,
4403 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00004404 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004405 .tested = TEST_UNTESTED,
4406 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004407 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00004408 .block_erasers =
4409 {
4410 {
4411 .eraseblocks = { {4 * 1024, 16} },
4412 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00004413 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00004414 .eraseblocks = { {64 * 1024, 1} },
4415 .block_erase = spi_block_erase_52,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00004416 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00004417 .eraseblocks = { {64 * 1024, 1} },
4418 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00004419 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00004420 .eraseblocks = { {64 * 1024, 1} },
4421 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00004422 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00004423 .eraseblocks = { {64 * 1024, 1} },
4424 .block_erase = spi_block_erase_c7,
4425 },
4426 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004427 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004428 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004429 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004430 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00004431 },
4432
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004433 {
4434 .vendor = "Macronix",
4435 .name = "MX25L1005",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004436 .bustype = BUS_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004437 .manufacture_id = MACRONIX_ID,
4438 .model_id = MACRONIX_MX25L1005,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004439 .total_size = 128,
4440 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00004441 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004442 .tested = TEST_UNTESTED,
4443 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004444 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00004445 .block_erasers =
4446 {
4447 {
4448 .eraseblocks = { {4 * 1024, 32} },
4449 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00004450 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00004451 .eraseblocks = { {64 * 1024, 2} },
4452 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00004453 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00004454 .eraseblocks = { {128 * 1024, 1} },
4455 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00004456 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00004457 .eraseblocks = { {128 * 1024, 1} },
4458 .block_erase = spi_block_erase_c7,
4459 },
4460 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004461 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004462 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004463 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004464 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00004465 },
4466
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004467 {
4468 .vendor = "Macronix",
4469 .name = "MX25L2005",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004470 .bustype = BUS_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004471 .manufacture_id = MACRONIX_ID,
4472 .model_id = MACRONIX_MX25L2005,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004473 .total_size = 256,
4474 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00004475 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004476 .tested = TEST_UNTESTED,
4477 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004478 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00004479 .block_erasers =
4480 {
4481 {
4482 .eraseblocks = { {4 * 1024, 64} },
4483 .block_erase = spi_block_erase_20,
4484 }, {
4485 .eraseblocks = { {64 * 1024, 4} },
4486 .block_erase = spi_block_erase_52,
4487 }, {
4488 .eraseblocks = { {64 * 1024, 4} },
4489 .block_erase = spi_block_erase_d8,
4490 }, {
4491 .eraseblocks = { {256 * 1024, 1} },
4492 .block_erase = spi_block_erase_60,
4493 }, {
4494 .eraseblocks = { {256 * 1024, 1} },
4495 .block_erase = spi_block_erase_c7,
4496 },
4497 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004498 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004499 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004500 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004501 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00004502 },
4503
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004504 {
4505 .vendor = "Macronix",
4506 .name = "MX25L4005",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004507 .bustype = BUS_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004508 .manufacture_id = MACRONIX_ID,
4509 .model_id = MACRONIX_MX25L4005,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004510 .total_size = 512,
4511 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00004512 .feature_bits = FEATURE_WRSR_WREN,
Stefan Tauner8179be52011-06-04 13:13:34 +00004513 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004514 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004515 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00004516 .block_erasers =
4517 {
4518 {
4519 .eraseblocks = { {4 * 1024, 128} },
4520 .block_erase = spi_block_erase_20,
4521 }, {
4522 .eraseblocks = { {64 * 1024, 8} },
4523 .block_erase = spi_block_erase_52,
4524 }, {
4525 .eraseblocks = { {64 * 1024, 8} },
4526 .block_erase = spi_block_erase_d8,
4527 }, {
4528 .eraseblocks = { {512 * 1024, 1} },
4529 .block_erase = spi_block_erase_60,
4530 }, {
4531 .eraseblocks = { {512 * 1024, 1} },
4532 .block_erase = spi_block_erase_c7,
4533 },
4534 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004535 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004536 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004537 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004538 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00004539 },
4540
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004541 {
4542 .vendor = "Macronix",
4543 .name = "MX25L8005",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004544 .bustype = BUS_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004545 .manufacture_id = MACRONIX_ID,
4546 .model_id = MACRONIX_MX25L8005,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004547 .total_size = 1024,
4548 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00004549 .feature_bits = FEATURE_WRSR_WREN,
David Hendricks567b7b82011-05-18 01:31:03 +00004550 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004551 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004552 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00004553 .block_erasers =
4554 {
4555 {
4556 .eraseblocks = { {4 * 1024, 256} },
4557 .block_erase = spi_block_erase_20,
4558 }, {
4559 .eraseblocks = { {64 * 1024, 16} },
4560 .block_erase = spi_block_erase_52,
4561 }, {
4562 .eraseblocks = { {64 * 1024, 16} },
4563 .block_erase = spi_block_erase_d8,
4564 }, {
4565 .eraseblocks = { {1024 * 1024, 1} },
4566 .block_erase = spi_block_erase_60,
4567 }, {
4568 .eraseblocks = { {1024 * 1024, 1} },
4569 .block_erase = spi_block_erase_c7,
4570 },
4571 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004572 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004573 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004574 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004575 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00004576 },
4577
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004578 {
4579 .vendor = "Macronix",
4580 .name = "MX25L1605",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004581 .bustype = BUS_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004582 .manufacture_id = MACRONIX_ID,
4583 .model_id = MACRONIX_MX25L1605,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004584 .total_size = 2048,
4585 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00004586 .feature_bits = FEATURE_WRSR_WREN,
Sven Schnelle4bd8a402011-03-07 10:59:06 +00004587 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004588 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004589 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00004590 .block_erasers =
4591 {
4592 {
4593 .eraseblocks = { {4 * 1024, 512} },
4594 .block_erase = spi_block_erase_20, /* This erase function has 64k blocksize for eLiteFlash */
4595 }, {
4596 .eraseblocks = { {64 * 1024, 32} }, /* Not supported in MX25L1605 (eLiteFlash) and MX25L1605D */
4597 .block_erase = spi_block_erase_52,
4598 }, {
4599 .eraseblocks = { {64 * 1024, 32} },
4600 .block_erase = spi_block_erase_d8,
4601 }, {
4602 .eraseblocks = { {2 * 1024 * 1024, 1} },
4603 .block_erase = spi_block_erase_60,
4604 }, {
4605 .eraseblocks = { {2 * 1024 * 1024, 1} },
4606 .block_erase = spi_block_erase_c7,
4607 },
4608 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004609 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004610 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004611 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004612 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00004613 },
4614
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004615 {
4616 .vendor = "Macronix",
Stephan Guillouxf5c70902009-04-19 23:04:00 +00004617 .name = "MX25L1635D",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004618 .bustype = BUS_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004619 .manufacture_id = MACRONIX_ID,
4620 .model_id = MACRONIX_MX25L1635D,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00004621 .total_size = 2048,
4622 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00004623 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00004624 .tested = TEST_UNTESTED,
4625 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004626 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00004627 .block_erasers =
4628 {
4629 {
4630 .eraseblocks = { {4 * 1024, 512} },
4631 .block_erase = spi_block_erase_20,
4632 }, {
4633 .eraseblocks = { {64 * 1024, 32} },
4634 .block_erase = spi_block_erase_d8,
4635 }, {
4636 .eraseblocks = { {2 * 1024 * 1024, 1} },
4637 .block_erase = spi_block_erase_60,
4638 }, {
4639 .eraseblocks = { {2 * 1024 * 1024, 1} },
4640 .block_erase = spi_block_erase_c7,
4641 }
4642 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004643 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004644 .write = spi_chip_write_256,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00004645 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004646 .voltage = {2700, 3600},
Stephan Guillouxf5c70902009-04-19 23:04:00 +00004647 },
Stephan Guillouxfd315502009-04-20 22:54:13 +00004648
Stephan Guillouxf5c70902009-04-19 23:04:00 +00004649 {
4650 .vendor = "Macronix",
Stephan Guilloux3611b802010-09-13 19:59:28 +00004651 .name = "MX25L1635E",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004652 .bustype = BUS_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004653 .manufacture_id = MACRONIX_ID,
4654 .model_id = MACRONIX_MX25L1635E,
Stephan Guilloux3611b802010-09-13 19:59:28 +00004655 .total_size = 2048,
4656 .page_size = 256,
4657 .feature_bits = FEATURE_WRSR_WREN,
4658 .tested = TEST_UNTESTED,
4659 .probe = probe_spi_rdid,
4660 .probe_timing = TIMING_ZERO,
4661 .block_erasers =
4662 {
4663 {
4664 .eraseblocks = { {4 * 1024, 512} },
4665 .block_erase = spi_block_erase_20,
4666 }, {
4667 .eraseblocks = { {64 * 1024, 32} },
4668 .block_erase = spi_block_erase_d8,
4669 }, {
4670 .eraseblocks = { {2 * 1024 * 1024, 1} },
4671 .block_erase = spi_block_erase_60,
4672 }, {
4673 .eraseblocks = { {2 * 1024 * 1024, 1} },
4674 .block_erase = spi_block_erase_c7,
4675 }
4676 },
4677 .unlock = spi_disable_blockprotect,
4678 .write = spi_chip_write_256,
4679 .read = spi_chip_read,
Steven Zakulec7d257b42011-07-19 08:50:18 +00004680 .voltage = {2700, 3600},
Stephan Guilloux3611b802010-09-13 19:59:28 +00004681 },
4682
4683 {
4684 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004685 .name = "MX25L3205",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004686 .bustype = BUS_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004687 .manufacture_id = MACRONIX_ID,
4688 .model_id = MACRONIX_MX25L3205,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004689 .total_size = 4096,
4690 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00004691 .feature_bits = FEATURE_WRSR_WREN,
David Hendricks22e05322010-12-13 23:54:59 +00004692 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004693 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004694 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00004695 .block_erasers =
4696 {
4697 {
4698 .eraseblocks = { {4 * 1024, 1024} },
4699 .block_erase = spi_block_erase_20,
4700 }, {
4701 .eraseblocks = { {4 * 1024, 1024} },
4702 .block_erase = spi_block_erase_d8,
4703 }, {
4704 .eraseblocks = { {4 * 1024 * 1024, 1} },
4705 .block_erase = spi_block_erase_60,
4706 }, {
4707 .eraseblocks = { {4 * 1024 * 1024, 1} },
4708 .block_erase = spi_block_erase_c7,
4709 },
4710 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004711 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004712 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004713 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004714 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00004715 },
4716
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004717 {
4718 .vendor = "Macronix",
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00004719 .name = "MX25L3235D",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004720 .bustype = BUS_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004721 .manufacture_id = MACRONIX_ID,
4722 .model_id = MACRONIX_MX25L3235D,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00004723 .total_size = 4096,
4724 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00004725 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00004726 .tested = TEST_UNTESTED,
4727 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004728 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00004729 .block_erasers =
4730 {
4731 {
4732 .eraseblocks = { {4 * 1024, 1024} },
4733 .block_erase = spi_block_erase_20,
4734 }, {
4735 .eraseblocks = { {64 * 1024, 64} },
4736 .block_erase = spi_block_erase_d8,
4737 }, {
4738 .eraseblocks = { {4 * 1024 * 1024, 1} },
4739 .block_erase = spi_block_erase_60,
4740 }, {
4741 .eraseblocks = { {4 * 1024 * 1024, 1} },
4742 .block_erase = spi_block_erase_c7,
4743 }
4744 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004745 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004746 .write = spi_chip_write_256,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00004747 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004748 .voltage = {2700, 3600},
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00004749 },
4750
4751 {
4752 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004753 .name = "MX25L6405",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004754 .bustype = BUS_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004755 .manufacture_id = MACRONIX_ID,
4756 .model_id = MACRONIX_MX25L6405,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004757 .total_size = 8192,
4758 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00004759 .feature_bits = FEATURE_WRSR_WREN,
Paul Menzelac427b22012-02-16 21:07:07 +00004760 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004761 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004762 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00004763 .block_erasers =
4764 {
4765 {
4766 .eraseblocks = { {64 * 1024, 128} },
4767 .block_erase = spi_block_erase_20,
4768 }, {
4769 .eraseblocks = { {64 * 1024, 128} },
4770 .block_erase = spi_block_erase_d8,
4771 }, {
4772 .eraseblocks = { {8 * 1024 * 1024, 1} },
4773 .block_erase = spi_block_erase_60,
4774 }, {
4775 .eraseblocks = { {8 * 1024 * 1024, 1} },
4776 .block_erase = spi_block_erase_c7,
4777 }
4778 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004779 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004780 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004781 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004782 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00004783 },
4784
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004785 {
4786 .vendor = "Macronix",
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00004787 .name = "MX25L12805",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004788 .bustype = BUS_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004789 .manufacture_id = MACRONIX_ID,
4790 .model_id = MACRONIX_MX25L12805,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00004791 .total_size = 16384,
4792 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00004793 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00004794 .tested = TEST_UNTESTED,
4795 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004796 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00004797 .block_erasers =
4798 {
4799 {
4800 .eraseblocks = { {4 * 1024, 4096} },
4801 .block_erase = spi_block_erase_20,
4802 }, {
4803 .eraseblocks = { {64 * 1024, 256} },
4804 .block_erase = spi_block_erase_d8,
4805 }, {
4806 .eraseblocks = { {16 * 1024 * 1024, 1} },
4807 .block_erase = spi_block_erase_60,
4808 }, {
4809 .eraseblocks = { {16 * 1024 * 1024, 1} },
4810 .block_erase = spi_block_erase_c7,
4811 }
4812 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004813 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004814 .write = spi_chip_write_256,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00004815 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004816 .voltage = {2700, 3600},
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00004817 },
4818
4819 {
4820 .vendor = "Macronix",
Mark Panajotovic502a9132009-08-24 01:42:24 +00004821 .name = "MX29F001B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004822 .bustype = BUS_PARALLEL,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004823 .manufacture_id = MACRONIX_ID,
4824 .model_id = MACRONIX_MX29F001B,
Mark Panajotovic502a9132009-08-24 01:42:24 +00004825 .total_size = 128,
4826 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004827 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
4828 .tested = TEST_UNTESTED,
4829 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +00004830 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00004831 .block_erasers =
4832 {
4833 {
4834 .eraseblocks = {
4835 {8 * 1024, 1},
4836 {4 * 1024, 2},
4837 {8 * 1024, 2},
4838 {32 * 1024, 1},
4839 {64 * 1024, 1},
4840 },
Sean Nelson35727f72010-01-28 23:55:12 +00004841 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00004842 }, {
4843 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00004844 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00004845 }
4846 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00004847 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00004848 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004849 .voltage = {4500, 5500},
Mark Panajotovic502a9132009-08-24 01:42:24 +00004850 },
4851
4852 {
4853 .vendor = "Macronix",
4854 .name = "MX29F001T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004855 .bustype = BUS_PARALLEL,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004856 .manufacture_id = MACRONIX_ID,
4857 .model_id = MACRONIX_MX29F001T,
Mark Panajotovic502a9132009-08-24 01:42:24 +00004858 .total_size = 128,
4859 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004860 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stefan Tauner74c6ec62011-05-18 01:31:46 +00004861 .tested = TEST_OK_PREW,
Sean Nelson35727f72010-01-28 23:55:12 +00004862 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +00004863 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00004864 .block_erasers =
4865 {
4866 {
4867 .eraseblocks = {
4868 {64 * 1024, 1},
4869 {32 * 1024, 1},
4870 {8 * 1024, 2},
4871 {4 * 1024, 2},
4872 {8 * 1024, 1},
4873 },
Sean Nelson35727f72010-01-28 23:55:12 +00004874 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00004875 }, {
4876 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00004877 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00004878 }
4879 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00004880 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00004881 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004882 .voltage = {4500, 5500},
Mark Panajotovic502a9132009-08-24 01:42:24 +00004883 },
4884
4885 {
4886 .vendor = "Macronix",
Sylvain "ythier" Hitier3093f8f2011-09-03 11:22:27 +00004887 .name = "MX29F002(N)B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004888 .bustype = BUS_PARALLEL,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004889 .manufacture_id = MACRONIX_ID,
4890 .model_id = MACRONIX_MX29F002B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004891 .total_size = 256,
4892 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004893 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004894 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00004895 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +00004896 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00004897 .block_erasers =
4898 {
4899 {
4900 .eraseblocks = {
4901 {16 * 1024, 1},
4902 {8 * 1024, 2},
4903 {32 * 1024, 1},
4904 {64 * 1024, 3},
4905 },
Sean Nelson35727f72010-01-28 23:55:12 +00004906 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00004907 }, {
4908 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00004909 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00004910 },
4911 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00004912 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004913 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004914 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00004915 },
4916
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004917 {
4918 .vendor = "Macronix",
Sylvain "ythier" Hitier3093f8f2011-09-03 11:22:27 +00004919 .name = "MX29F002(N)T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004920 .bustype = BUS_PARALLEL,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004921 .manufacture_id = MACRONIX_ID,
4922 .model_id = MACRONIX_MX29F002T,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004923 .total_size = 256,
4924 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004925 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Paul Menzel018d4822011-10-21 12:33:07 +00004926 .tested = TEST_OK_PREW,
Sean Nelson35727f72010-01-28 23:55:12 +00004927 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +00004928 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00004929 .block_erasers =
4930 {
4931 {
4932 .eraseblocks = {
4933 {64 * 1024, 3},
4934 {32 * 1024, 1},
4935 {8 * 1024, 2},
4936 {16 * 1024, 1},
4937 },
Sean Nelson35727f72010-01-28 23:55:12 +00004938 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00004939 }, {
4940 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00004941 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00004942 },
4943 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00004944 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004945 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004946 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00004947 },
4948
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004949 {
4950 .vendor = "Macronix",
Joshua Roysf1324e02010-09-16 00:51:51 +00004951 .name = "MX29F040",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004952 .bustype = BUS_PARALLEL,
Joshua Roysf1324e02010-09-16 00:51:51 +00004953 .manufacture_id = MACRONIX_ID,
4954 .model_id = MACRONIX_MX29F040,
4955 .total_size = 512,
4956 .page_size = 64 * 1024,
4957 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
4958 .tested = TEST_UNTESTED,
4959 .probe = probe_jedec,
4960 .probe_timing = TIMING_ZERO,
4961 .block_erasers =
4962 {
4963 {
4964 .eraseblocks = { {64 * 1024, 8} },
4965 .block_erase = erase_sector_jedec,
4966 }, {
4967 .eraseblocks = { {512 * 1024, 1} },
4968 .block_erase = erase_chip_block_jedec,
4969 },
4970 },
4971 .write = write_jedec_1,
4972 .read = read_memmapped,
Steven Zakulec7d257b42011-07-19 08:50:18 +00004973 .voltage = {4500, 5500},
Joshua Roysf1324e02010-09-16 00:51:51 +00004974 },
4975
4976 {
4977 .vendor = "Macronix",
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00004978 .name = "MX29LV040",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004979 .bustype = BUS_PARALLEL,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004980 .manufacture_id = MACRONIX_ID,
4981 .model_id = MACRONIX_MX29LV040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004982 .total_size = 512,
4983 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004984 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
4985 .tested = TEST_UNTESTED,
4986 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +00004987 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00004988 .block_erasers =
4989 {
4990 {
4991 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00004992 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00004993 }, {
4994 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00004995 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00004996 },
4997 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00004998 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004999 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005000 .voltage = {2700, 3600},
Carl-Daniel Hailfinger7de86392008-12-10 10:32:05 +00005001 },
5002
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005003 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00005004 .vendor = "MoselVitelic",
5005 .name = "V29C51000B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005006 .bustype = BUS_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00005007 .manufacture_id = SYNCMOS_MVC_ID,
5008 .model_id = MVC_V29C51000B,
5009 .total_size = 64,
5010 .page_size = 512,
5011 .feature_bits = FEATURE_EITHER_RESET,
5012 .tested = TEST_UNTESTED,
5013 .probe = probe_jedec,
5014 .probe_timing = TIMING_ZERO,
5015 .block_erasers =
5016 {
5017 {
5018 .eraseblocks = { {512, 128} },
5019 .block_erase = erase_sector_jedec,
5020 }, {
5021 .eraseblocks = { {64 * 1024, 1} },
5022 .block_erase = erase_chip_block_jedec,
5023 },
5024 },
5025 .write = write_jedec_1,
5026 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005027 .voltage = {4500, 5500},
Mattias Mattsson4c066502010-07-29 20:01:13 +00005028 },
5029
5030 {
5031 .vendor = "MoselVitelic",
5032 .name = "V29C51000T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005033 .bustype = BUS_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00005034 .manufacture_id = SYNCMOS_MVC_ID,
5035 .model_id = MVC_V29C51000T,
5036 .total_size = 64,
5037 .page_size = 512,
5038 .feature_bits = FEATURE_EITHER_RESET,
5039 .tested = TEST_UNTESTED,
5040 .probe = probe_jedec,
5041 .probe_timing = TIMING_ZERO,
5042 .block_erasers =
5043 {
5044 {
5045 .eraseblocks = { {512, 128} },
5046 .block_erase = erase_sector_jedec,
5047 }, {
5048 .eraseblocks = { {64 * 1024, 1} },
5049 .block_erase = erase_chip_block_jedec,
5050 },
5051 },
5052 .write = write_jedec_1,
5053 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005054 .voltage = {4500, 5500},
Mattias Mattsson4c066502010-07-29 20:01:13 +00005055 },
5056
5057 {
5058 .vendor = "MoselVitelic",
5059 .name = "V29C51400B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005060 .bustype = BUS_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00005061 .manufacture_id = SYNCMOS_MVC_ID,
5062 .model_id = MVC_V29C51400B,
5063 .total_size = 512,
5064 .page_size = 1024,
5065 .feature_bits = FEATURE_EITHER_RESET,
5066 .tested = TEST_UNTESTED,
5067 .probe = probe_jedec,
5068 .probe_timing = TIMING_ZERO,
5069 .block_erasers =
5070 {
5071 {
5072 .eraseblocks = { {1024, 512} },
5073 .block_erase = erase_sector_jedec,
5074 }, {
5075 .eraseblocks = { {512 * 1024, 1} },
5076 .block_erase = erase_chip_block_jedec,
5077 },
5078 },
5079 .write = write_jedec_1,
5080 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005081 .voltage = {4500, 5500},
Mattias Mattsson4c066502010-07-29 20:01:13 +00005082 },
5083
5084 {
5085 .vendor = "MoselVitelic",
5086 .name = "V29C51400T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005087 .bustype = BUS_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00005088 .manufacture_id = SYNCMOS_MVC_ID,
5089 .model_id = MVC_V29C51400T,
5090 .total_size = 512,
5091 .page_size = 1024,
5092 .feature_bits = FEATURE_EITHER_RESET,
5093 .tested = TEST_UNTESTED,
5094 .probe = probe_jedec,
5095 .probe_timing = TIMING_ZERO,
5096 .block_erasers =
5097 {
5098 {
5099 .eraseblocks = { {1024, 512} },
5100 .block_erase = erase_sector_jedec,
5101 }, {
5102 .eraseblocks = { {512 * 1024, 1} },
5103 .block_erase = erase_chip_block_jedec,
5104 },
5105 },
5106 .write = write_jedec_1,
5107 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005108 .voltage = {4500, 5500},
Mattias Mattsson4c066502010-07-29 20:01:13 +00005109 },
5110
5111 {
5112 .vendor = "MoselVitelic",
5113 .name = "V29LC51000",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005114 .bustype = BUS_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00005115 .manufacture_id = SYNCMOS_MVC_ID,
5116 .model_id = MVC_V29LC51000,
5117 .total_size = 64,
5118 .page_size = 512,
5119 .feature_bits = FEATURE_EITHER_RESET,
5120 .tested = TEST_UNTESTED,
5121 .probe = probe_jedec,
5122 .probe_timing = TIMING_ZERO,
5123 .block_erasers =
5124 {
5125 {
5126 .eraseblocks = { {512, 128} },
5127 .block_erase = erase_sector_jedec,
5128 }, {
5129 .eraseblocks = { {64 * 1024, 1} },
5130 .block_erase = erase_chip_block_jedec,
5131 },
5132 },
5133 .write = write_jedec_1,
5134 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005135 .voltage = {4500, 5500},
Mattias Mattsson4c066502010-07-29 20:01:13 +00005136 },
5137
5138 {
5139 .vendor = "MoselVitelic",
5140 .name = "V29LC51001",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005141 .bustype = BUS_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00005142 .manufacture_id = SYNCMOS_MVC_ID,
5143 .model_id = MVC_V29LC51001,
5144 .total_size = 128,
5145 .page_size = 512,
5146 .feature_bits = FEATURE_EITHER_RESET,
5147 .tested = TEST_UNTESTED,
5148 .probe = probe_jedec,
5149 .probe_timing = TIMING_ZERO,
5150 .block_erasers =
5151 {
5152 {
5153 .eraseblocks = { {512, 256} },
5154 .block_erase = erase_sector_jedec,
5155 }, {
5156 .eraseblocks = { {128 * 1024, 1} },
5157 .block_erase = erase_chip_block_jedec,
5158 },
5159 },
5160 .write = write_jedec_1,
5161 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005162 .voltage = {4500, 5500},
Mattias Mattsson4c066502010-07-29 20:01:13 +00005163 },
5164
5165 {
5166 .vendor = "MoselVitelic",
5167 .name = "V29LC51002",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005168 .bustype = BUS_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00005169 .manufacture_id = SYNCMOS_MVC_ID,
5170 .model_id = MVC_V29LC51002,
5171 .total_size = 256,
5172 .page_size = 512,
5173 .feature_bits = FEATURE_EITHER_RESET,
5174 .tested = TEST_UNTESTED,
5175 .probe = probe_jedec,
5176 .probe_timing = TIMING_ZERO,
5177 .block_erasers =
5178 {
5179 {
5180 .eraseblocks = { {512, 512} },
5181 .block_erase = erase_sector_jedec,
5182 }, {
5183 .eraseblocks = { {256 * 1024, 1} },
5184 .block_erase = erase_chip_block_jedec,
5185 },
5186 },
5187 .write = write_jedec_1,
5188 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005189 .voltage = {4500, 5500},
Mattias Mattsson4c066502010-07-29 20:01:13 +00005190 },
5191
5192 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005193 .vendor = "Numonyx",
5194 .name = "M25PE10",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005195 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005196 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005197 .model_id = ST_M25PE10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005198 .total_size = 128,
5199 .page_size = 256,
5200 .tested = TEST_UNTESTED,
5201 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005202 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00005203 .block_erasers =
5204 {
5205 {
5206 .eraseblocks = { {4 * 1024, 32} },
5207 .block_erase = spi_block_erase_20,
5208 }, {
5209 .eraseblocks = { {64 * 1024, 2} },
5210 .block_erase = spi_block_erase_d8,
5211 }, {
5212 .eraseblocks = { {128 * 1024, 1} },
5213 .block_erase = spi_block_erase_c7,
5214 }
5215 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005216 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005217 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005218 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005219 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00005220 },
5221
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005222 {
5223 .vendor = "Numonyx",
5224 .name = "M25PE20",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005225 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005226 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005227 .model_id = ST_M25PE20,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005228 .total_size = 256,
5229 .page_size = 256,
5230 .tested = TEST_UNTESTED,
5231 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005232 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00005233 .block_erasers =
5234 {
5235 {
5236 .eraseblocks = { {4 * 1024, 64} },
5237 .block_erase = spi_block_erase_20,
5238 }, {
5239 .eraseblocks = { {64 * 1024, 4} },
5240 .block_erase = spi_block_erase_d8,
5241 }, {
5242 .eraseblocks = { {256 * 1024, 1} },
5243 .block_erase = spi_block_erase_c7,
5244 }
5245 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005246 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005247 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005248 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005249 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00005250 },
5251
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005252 {
5253 .vendor = "Numonyx",
5254 .name = "M25PE40",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005255 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005256 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005257 .model_id = ST_M25PE40,
Sean Nelson5643c072010-01-19 03:23:07 +00005258 .total_size = 512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005259 .page_size = 256,
5260 .tested = TEST_UNTESTED,
5261 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005262 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00005263 .block_erasers =
5264 {
5265 {
5266 .eraseblocks = { {4 * 1024, 128} },
5267 .block_erase = spi_block_erase_20,
5268 }, {
5269 .eraseblocks = { {64 * 1024, 8} },
5270 .block_erase = spi_block_erase_d8,
5271 }, {
5272 .eraseblocks = { {512 * 1024, 1} },
5273 .block_erase = spi_block_erase_c7,
5274 }
5275 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005276 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005277 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005278 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005279 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00005280 },
5281
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005282 {
5283 .vendor = "Numonyx",
5284 .name = "M25PE80",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005285 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005286 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005287 .model_id = ST_M25PE80,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005288 .total_size = 1024,
5289 .page_size = 256,
Paul Menzelac427b22012-02-16 21:07:07 +00005290 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005291 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005292 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00005293 .block_erasers =
5294 {
5295 {
5296 .eraseblocks = { {4 * 1024, 256} },
5297 .block_erase = spi_block_erase_20,
5298 }, {
5299 .eraseblocks = { {64 * 1024, 16} },
5300 .block_erase = spi_block_erase_d8,
5301 }, {
5302 .eraseblocks = { {1024 * 1024, 1} },
5303 .block_erase = spi_block_erase_c7,
5304 }
5305 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005306 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005307 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005308 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005309 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00005310 },
5311
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005312 {
5313 .vendor = "Numonyx",
5314 .name = "M25PE16",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005315 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005316 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005317 .model_id = ST_M25PE16,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005318 .total_size = 2048,
5319 .page_size = 256,
5320 .tested = TEST_UNTESTED,
5321 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005322 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00005323 .block_erasers =
5324 {
5325 {
5326 .eraseblocks = { {4 * 1024, 512} },
5327 .block_erase = spi_block_erase_20,
5328 }, {
5329 .eraseblocks = { {64 * 1024, 32} },
5330 .block_erase = spi_block_erase_d8,
5331 }, {
5332 .eraseblocks = { {2 * 1024 * 1024, 1} },
5333 .block_erase = spi_block_erase_c7,
5334 }
5335 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005336 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005337 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005338 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005339 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00005340 },
5341
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005342 {
Niklas Söderlundae4294f2012-04-14 21:04:03 +00005343 .vendor = "Numonyx",
5344 .name = "N25Q064",
5345 .bustype = BUS_SPI,
5346 .manufacture_id = ST_ID,
5347 .model_id = ST_N25Q064,
5348 .total_size = 8192,
5349 .page_size = 256,
5350 .tested = TEST_OK_PREW,
5351 .probe = probe_spi_rdid,
5352 .probe_timing = TIMING_ZERO,
5353 .block_erasers =
5354 {
5355 {
5356 .eraseblocks = { {4 * 1024, 2048 } },
5357 .block_erase = spi_block_erase_20,
5358 }, {
5359 .eraseblocks = { {64 * 1024, 128} },
5360 .block_erase = spi_block_erase_d8,
5361 }, {
5362 .eraseblocks = { {8 * 1024 * 1024, 1} },
5363 .block_erase = spi_block_erase_c7,
5364 }
5365 },
5366 .unlock = spi_disable_blockprotect,
5367 .write = spi_chip_write_256,
5368 .read = spi_chip_read,
5369 },
5370
5371 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005372 .vendor = "PMC",
5373 .name = "Pm25LV010",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005374 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005375 .manufacture_id = PMC_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005376 .model_id = PMC_PM25LV010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005377 .total_size = 128,
5378 .page_size = 256,
5379 .tested = TEST_UNTESTED,
5380 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005381 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00005382 .block_erasers =
5383 {
5384 {
5385 .eraseblocks = { {4 * 1024, 32} },
5386 .block_erase = spi_block_erase_d7,
5387 }, {
5388 .eraseblocks = { {32 * 1024, 4} },
5389 .block_erase = spi_block_erase_d8,
5390 }, {
5391 .eraseblocks = { {128 * 1024, 1} },
5392 .block_erase = spi_block_erase_c7,
5393 }
5394 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005395 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005396 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005397 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005398 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00005399 },
5400
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005401 {
5402 .vendor = "PMC",
5403 .name = "Pm25LV016B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005404 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005405 .manufacture_id = PMC_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005406 .model_id = PMC_PM25LV016B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005407 .total_size = 2048,
5408 .page_size = 256,
5409 .tested = TEST_UNTESTED,
5410 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005411 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00005412 .block_erasers =
5413 {
5414 {
5415 .eraseblocks = { {4 * 1024, 512} },
5416 .block_erase = spi_block_erase_d7,
5417 }, {
5418 .eraseblocks = { {4 * 1024, 512} },
5419 .block_erase = spi_block_erase_20,
5420 }, {
5421 .eraseblocks = { {64 * 1024, 32} },
5422 .block_erase = spi_block_erase_d8,
5423 }, {
5424 .eraseblocks = { {2 * 1024 * 1024, 1} },
5425 .block_erase = spi_block_erase_60,
5426 }, {
5427 .eraseblocks = { {2 * 1024 * 1024, 1} },
5428 .block_erase = spi_block_erase_c7,
5429 }
5430 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005431 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005432 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005433 .read = spi_chip_read,
Steven Zakulec7d257b42011-07-19 08:50:18 +00005434 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00005435 },
5436
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005437 {
5438 .vendor = "PMC",
5439 .name = "Pm25LV020",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005440 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005441 .manufacture_id = PMC_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005442 .model_id = PMC_PM25LV020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005443 .total_size = 256,
5444 .page_size = 256,
5445 .tested = TEST_UNTESTED,
5446 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005447 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00005448 .block_erasers =
5449 {
5450 {
5451 .eraseblocks = { {4 * 1024, 64} },
5452 .block_erase = spi_block_erase_d7,
5453 }, {
5454 .eraseblocks = { {64 * 1024, 4} },
5455 .block_erase = spi_block_erase_d8,
5456 }, {
5457 .eraseblocks = { {256 * 1024, 1} },
5458 .block_erase = spi_block_erase_c7,
5459 }
5460 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005461 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005462 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005463 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005464 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00005465 },
5466
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005467 {
5468 .vendor = "PMC",
5469 .name = "Pm25LV040",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005470 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005471 .manufacture_id = PMC_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005472 .model_id = PMC_PM25LV040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005473 .total_size = 512,
5474 .page_size = 256,
Stefan Tauner716e0982011-07-25 20:38:52 +00005475 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005476 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005477 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00005478 .block_erasers =
5479 {
5480 {
5481 .eraseblocks = { {4 * 1024, 128} },
5482 .block_erase = spi_block_erase_d7,
5483 }, {
5484 .eraseblocks = { {64 * 1024, 8} },
5485 .block_erase = spi_block_erase_d8,
5486 }, {
5487 .eraseblocks = { {512 * 1024, 1} },
5488 .block_erase = spi_block_erase_c7,
5489 }
5490 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005491 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005492 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005493 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005494 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00005495 },
5496
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005497 {
5498 .vendor = "PMC",
5499 .name = "Pm25LV080B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005500 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005501 .manufacture_id = PMC_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005502 .model_id = PMC_PM25LV080B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005503 .total_size = 1024,
5504 .page_size = 256,
5505 .tested = TEST_UNTESTED,
5506 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005507 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00005508 .block_erasers =
5509 {
5510 {
5511 .eraseblocks = { {4 * 1024, 256} },
5512 .block_erase = spi_block_erase_d7,
5513 }, {
5514 .eraseblocks = { {4 * 1024, 256} },
5515 .block_erase = spi_block_erase_20,
5516 }, {
5517 .eraseblocks = { {64 * 1024, 16} },
5518 .block_erase = spi_block_erase_d8,
5519 }, {
5520 .eraseblocks = { {1024 * 1024, 1} },
5521 .block_erase = spi_block_erase_60,
5522 }, {
5523 .eraseblocks = { {1024 * 1024, 1} },
5524 .block_erase = spi_block_erase_c7,
5525 }
5526 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005527 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005528 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005529 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005530 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00005531 },
5532
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005533 {
5534 .vendor = "PMC",
5535 .name = "Pm25LV512",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005536 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005537 .manufacture_id = PMC_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005538 .model_id = PMC_PM25LV512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005539 .total_size = 64,
5540 .page_size = 256,
5541 .tested = TEST_UNTESTED,
5542 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005543 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00005544 .block_erasers =
5545 {
5546 {
5547 .eraseblocks = { {4 * 1024, 16} },
5548 .block_erase = spi_block_erase_d7,
5549 }, {
5550 .eraseblocks = { {32 * 1024, 2} },
5551 .block_erase = spi_block_erase_d8,
5552 }, {
5553 .eraseblocks = { {64 * 1024, 1} },
5554 .block_erase = spi_block_erase_c7,
5555 }
5556 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005557 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005558 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005559 .read = spi_chip_read,
Steven Zakulec7d257b42011-07-19 08:50:18 +00005560 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00005561 },
5562
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005563 {
5564 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00005565 .name = "Pm29F002T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005566 .bustype = BUS_PARALLEL,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00005567 .manufacture_id = PMC_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005568 .model_id = PMC_PM29F002T,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00005569 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00005570 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005571 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stefan Tauneraf2db612011-12-02 21:48:17 +00005572 .tested = TEST_OK_PREW,
Sean Nelson35727f72010-01-28 23:55:12 +00005573 .probe = probe_jedec,
Stefan Tauneraf2db612011-12-02 21:48:17 +00005574 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00005575 .block_erasers =
5576 {
5577 {
5578 .eraseblocks = {
5579 {128 * 1024, 1},
5580 {96 * 1024, 1},
5581 {8 * 1024, 2},
5582 {16 * 1024, 1},
5583 },
Sean Nelson35727f72010-01-28 23:55:12 +00005584 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00005585 }, {
5586 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00005587 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00005588 },
5589 },
Sean Nelson35727f72010-01-28 23:55:12 +00005590 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00005591 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005592 .voltage = {4500, 5500},
Uwe Hermannf983d9f2009-06-14 21:53:26 +00005593 },
5594
5595 {
5596 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00005597 .name = "Pm29F002B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005598 .bustype = BUS_PARALLEL,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00005599 .manufacture_id = PMC_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005600 .model_id = PMC_PM29F002B,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00005601 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00005602 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005603 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00005604 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005605 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00005606 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00005607 .block_erasers =
5608 {
5609 {
5610 .eraseblocks = {
5611 {16 * 1024, 1},
5612 {8 * 1024, 2},
5613 {96 * 1024, 1},
5614 {128 * 1024, 1},
5615 },
Sean Nelson35727f72010-01-28 23:55:12 +00005616 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00005617 }, {
5618 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00005619 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00005620 },
5621 },
Sean Nelson35727f72010-01-28 23:55:12 +00005622 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00005623 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005624 .voltage = {4500, 5500},
Uwe Hermannf983d9f2009-06-14 21:53:26 +00005625 },
5626
5627 {
5628 .vendor = "PMC",
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00005629 .name = "Pm39LV010",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005630 .bustype = BUS_PARALLEL,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00005631 .manufacture_id = PMC_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005632 .model_id = PMC_PM39F010, /* Pm39LV010 and Pm39F010 have identical IDs but different voltage */
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00005633 .total_size = 128,
5634 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005635 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Paul Menzel018d4822011-10-21 12:33:07 +00005636 .tested = TEST_OK_PREW,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00005637 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005638 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson5643c072010-01-19 03:23:07 +00005639 .block_erasers =
5640 {
5641 {
5642 .eraseblocks = { {4 * 1024, 32} },
5643 .block_erase = erase_sector_jedec,
5644 }, {
5645 .eraseblocks = { {64 * 1024, 2} },
5646 .block_erase = erase_block_jedec,
5647 }, {
5648 .eraseblocks = { {128 * 1024, 1} },
5649 .block_erase = erase_chip_block_jedec,
5650 }
5651 },
Sean Nelson35727f72010-01-28 23:55:12 +00005652 .write = write_jedec_1,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00005653 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005654 .voltage = {2700, 3600},
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00005655 },
5656
5657 {
5658 .vendor = "PMC",
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00005659 .name = "Pm39LV020",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005660 .bustype = BUS_PARALLEL,
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00005661 .manufacture_id = PMC_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005662 .model_id = PMC_PM39LV020,
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00005663 .total_size = 256,
5664 .page_size = 4096,
5665 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
5666 .tested = TEST_UNTESTED,
5667 .probe = probe_jedec,
5668 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
5669 .block_erasers =
5670 {
5671 {
5672 .eraseblocks = { {4 * 1024, 64} },
5673 .block_erase = erase_sector_jedec,
5674 }, {
5675 .eraseblocks = { {64 * 1024, 4} },
5676 .block_erase = erase_block_jedec,
5677 }, {
5678 .eraseblocks = { {256 * 1024, 1} },
5679 .block_erase = erase_chip_block_jedec,
5680 }
5681 },
5682 .write = write_jedec_1,
5683 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005684 .voltage = {2700, 3600},
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00005685 },
5686
5687 {
5688 .vendor = "PMC",
5689 .name = "Pm39LV040",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005690 .bustype = BUS_PARALLEL,
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00005691 .manufacture_id = PMC_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005692 .model_id = PMC_PM39LV040,
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00005693 .total_size = 512,
5694 .page_size = 4096,
5695 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Paul Menzel018d4822011-10-21 12:33:07 +00005696 .tested = TEST_OK_PR,
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00005697 .probe = probe_jedec,
5698 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
5699 .block_erasers =
5700 {
5701 {
5702 .eraseblocks = { {4 * 1024, 128} },
5703 .block_erase = erase_sector_jedec,
5704 }, {
5705 .eraseblocks = { {64 * 1024, 8} },
5706 .block_erase = erase_block_jedec,
5707 }, {
5708 .eraseblocks = { {512 * 1024, 1} },
5709 .block_erase = erase_chip_block_jedec,
5710 }
5711 },
5712 .write = write_jedec_1,
5713 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005714 .voltage = {2700, 3600},
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00005715 },
5716
5717 {
5718 .vendor = "PMC",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005719 .name = "Pm49FL002",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005720 .bustype = BUS_LPC | BUS_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005721 .manufacture_id = PMC_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005722 .model_id = PMC_PM49FL002,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005723 .total_size = 256,
5724 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005725 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stefan Taunerd06d9412011-06-12 19:47:55 +00005726 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00005727 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005728 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00005729 .block_erasers =
5730 {
5731 {
5732 .eraseblocks = { {4 * 1024, 64} },
5733 .block_erase = erase_sector_jedec,
5734 }, {
5735 .eraseblocks = { {16 * 1024, 16} },
5736 .block_erase = erase_block_jedec,
5737 }, {
5738 .eraseblocks = { {256 * 1024, 1} },
5739 .block_erase = erase_chip_block_jedec,
5740 }
5741 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00005742 .unlock = unlock_49fl00x,
Sean Nelson36172342010-02-27 18:01:15 +00005743 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005744 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005745 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00005746 },
5747
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005748 {
5749 .vendor = "PMC",
5750 .name = "Pm49FL004",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005751 .bustype = BUS_LPC | BUS_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005752 .manufacture_id = PMC_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005753 .model_id = PMC_PM49FL004,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005754 .total_size = 512,
5755 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005756 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Idwer Vollering67f28142011-03-06 22:26:23 +00005757 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00005758 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005759 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00005760 .block_erasers =
5761 {
5762 {
5763 .eraseblocks = { {4 * 1024, 128} },
5764 .block_erase = erase_sector_jedec,
5765 }, {
5766 .eraseblocks = { {64 * 1024, 8} },
5767 .block_erase = erase_block_jedec,
5768 }, {
5769 .eraseblocks = { {512 * 1024, 1} },
5770 .block_erase = erase_chip_block_jedec,
5771 }
5772 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00005773 .unlock = unlock_49fl00x,
Sean Nelson36172342010-02-27 18:01:15 +00005774 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005775 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005776 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00005777 },
5778
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005779 {
Sean Nelsond70b09c2009-11-24 02:11:08 +00005780 .vendor = "Sanyo",
5781 .name = "LF25FW203A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005782 .bustype = BUS_SPI,
Sean Nelsond70b09c2009-11-24 02:11:08 +00005783 .manufacture_id = SANYO_ID,
5784 .model_id = SANYO_LE25FW203A,
5785 .total_size = 2048,
5786 .page_size = 256,
5787 .tested = TEST_UNTESTED,
5788 .probe = probe_spi_rdid,
5789 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00005790 .block_erasers =
5791 {
5792 {
5793 .eraseblocks = { {64 * 1024, 32} },
5794 .block_erase = spi_block_erase_d8,
5795 }, {
5796 .eraseblocks = { {2 * 1024 * 1024, 1} },
5797 .block_erase = spi_block_erase_c7,
5798 }
5799 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005800 .unlock = spi_disable_blockprotect,
Sean Nelsond70b09c2009-11-24 02:11:08 +00005801 .write = spi_chip_write_256,
5802 .read = spi_chip_read,
5803 },
5804
5805 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005806 .vendor = "Sharp",
Mattias Mattssonfca3b012011-08-25 22:44:11 +00005807 .name = "LH28F008BJT-BTLZ1",
5808 .bustype = BUS_PARALLEL,
5809 .manufacture_id = SHARP_ID,
5810 .model_id = SHARP_LH28F008BJxxPB,
5811 .total_size = 1024,
5812 .page_size = 64 * 1024,
5813 .tested = TEST_OK_PREW,
5814 .probe = probe_82802ab,
5815 .probe_timing = TIMING_ZERO,
5816 .block_erasers =
5817 {
5818 {
5819 .eraseblocks = {
5820 {8 * 1024, 8},
5821 {64 * 1024, 15}
5822 },
5823 .block_erase = erase_block_82802ab,
5824 }, {
5825 .eraseblocks = { {1024 * 1024, 1} },
5826 .block_erase = erase_sector_49lfxxxc,
5827 }
5828 },
5829 .unlock = unlock_lh28f008bjt,
5830 .write = write_82802ab,
5831 .read = read_memmapped,
5832 .voltage = {2700, 3600},
5833 },
5834
5835 {
5836 .vendor = "Sharp",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005837 .name = "LHF00L04",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005838 .bustype = BUS_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005839 .manufacture_id = SHARP_ID,
5840 .model_id = SHARP_LHF00L04,
5841 .total_size = 1024,
5842 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005843 .feature_bits = FEATURE_EITHER_RESET | FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005844 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005845 .probe = probe_82802ab,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00005846 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00005847 .block_erasers =
5848 {
5849 {
5850 .eraseblocks = {
5851 {64 * 1024, 15},
5852 {8 * 1024, 8}
5853 },
Sean Nelson28accc22010-03-19 18:47:06 +00005854 .block_erase = erase_block_82802ab,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00005855 }, {
5856 .eraseblocks = {
5857 {1024 * 1024, 1}
5858 },
Sean Nelson51c83fb2010-01-20 20:55:53 +00005859 .block_erase = NULL, /* 30 D0, only in A/A mux mode */
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00005860 },
5861 },
Sean Nelson28accc22010-03-19 18:47:06 +00005862 .unlock = unlock_82802ab,
5863 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005864 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005865 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00005866 },
5867
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005868 {
5869 .vendor = "Spansion",
Rudy Hostf4e57772010-11-29 00:37:49 +00005870 .name = "S25FL004A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005871 .bustype = BUS_SPI,
Rudy Hostf4e57772010-11-29 00:37:49 +00005872 .manufacture_id = SPANSION_ID,
5873 .model_id = SPANSION_S25FL004A,
5874 .total_size = 512,
5875 .page_size = 256,
5876 .tested = TEST_UNTESTED,
5877 .probe = probe_spi_rdid,
5878 .probe_timing = TIMING_ZERO,
5879 .block_erasers =
5880 {
5881 {
5882 .eraseblocks = { {64 * 1024, 8} },
5883 .block_erase = spi_block_erase_d8,
5884 }, {
5885 .eraseblocks = { {512 * 1024, 1} },
5886 .block_erase = spi_block_erase_c7,
5887 }
5888 },
5889 .unlock = spi_disable_blockprotect,
5890 .write = spi_chip_write_256,
5891 .read = spi_chip_read,
Steven Zakulec7d257b42011-07-19 08:50:18 +00005892 .voltage = {2700, 3600},
Rudy Hostf4e57772010-11-29 00:37:49 +00005893 },
5894
5895 {
5896 .vendor = "Spansion",
Michael Karcher23ff4602010-01-12 23:29:30 +00005897 .name = "S25FL008A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005898 .bustype = BUS_SPI,
Michael Karcher23ff4602010-01-12 23:29:30 +00005899 .manufacture_id = SPANSION_ID,
5900 .model_id = SPANSION_S25FL008A,
5901 .total_size = 1024,
5902 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005903 .tested = TEST_OK_PRE,
Michael Karcher23ff4602010-01-12 23:29:30 +00005904 .probe = probe_spi_rdid,
5905 .probe_timing = TIMING_ZERO,
Michael Karcher23ff4602010-01-12 23:29:30 +00005906 .block_erasers =
5907 {
5908 {
5909 .eraseblocks = { {64 * 1024, 16} },
5910 .block_erase = spi_block_erase_d8,
5911 }, {
5912 .eraseblocks = { {1024 * 1024, 1} },
5913 .block_erase = spi_block_erase_c7,
5914 }
5915 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005916 .unlock = spi_disable_blockprotect,
Michael Karcher23ff4602010-01-12 23:29:30 +00005917 .write = spi_chip_write_256,
5918 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005919 .voltage = {2700, 3600},
Michael Karcher23ff4602010-01-12 23:29:30 +00005920 },
5921
5922 {
5923 .vendor = "Spansion",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005924 .name = "S25FL016A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005925 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005926 .manufacture_id = SPANSION_ID,
5927 .model_id = SPANSION_S25FL016A,
5928 .total_size = 2048,
5929 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00005930 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005931 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005932 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00005933 .block_erasers =
5934 {
5935 {
5936 .eraseblocks = { {64 * 1024, 32} },
5937 .block_erase = spi_block_erase_d8,
5938 }, {
5939 .eraseblocks = { {2 * 1024 * 1024, 1} },
5940 .block_erase = spi_block_erase_c7,
5941 }
5942 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005943 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005944 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005945 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005946 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00005947 },
5948
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005949 {
Rudy Hostf4e57772010-11-29 00:37:49 +00005950 .vendor = "Spansion",
5951 .name = "S25FL032A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005952 .bustype = BUS_SPI,
Rudy Hostf4e57772010-11-29 00:37:49 +00005953 .manufacture_id = SPANSION_ID,
5954 .model_id = SPANSION_S25FL032A,
5955 .total_size = 4096,
5956 .page_size = 256,
Stefan Tauner2abab942012-04-27 20:41:23 +00005957 .tested = TEST_OK_PR,
Rudy Hostf4e57772010-11-29 00:37:49 +00005958 .probe = probe_spi_rdid,
5959 .probe_timing = TIMING_ZERO,
5960 .block_erasers =
5961 {
5962 {
5963 .eraseblocks = { {64 * 1024, 64} },
5964 .block_erase = spi_block_erase_d8,
5965 }, {
5966 .eraseblocks = { {4 * 1024 * 1024, 1} },
5967 .block_erase = spi_block_erase_c7,
5968 }
5969 },
5970 .unlock = spi_disable_blockprotect,
5971 .write = spi_chip_write_256,
5972 .read = spi_chip_read,
Steven Zakulec7d257b42011-07-19 08:50:18 +00005973 .voltage = {2700, 3600},
Rudy Hostf4e57772010-11-29 00:37:49 +00005974 },
5975
5976 {
5977 .vendor = "Spansion",
5978 .name = "S25FL064A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005979 .bustype = BUS_SPI,
Rudy Hostf4e57772010-11-29 00:37:49 +00005980 .manufacture_id = SPANSION_ID,
5981 .model_id = SPANSION_S25FL064A,
5982 .total_size = 8192,
5983 .page_size = 256,
5984 .tested = TEST_OK_PREW,
5985 .probe = probe_spi_rdid,
5986 .probe_timing = TIMING_ZERO,
5987 .block_erasers =
5988 {
5989 {
5990 .eraseblocks = { {64 * 1024, 128} },
5991 .block_erase = spi_block_erase_d8,
5992 }, {
5993 .eraseblocks = { {8 * 1024 * 1024, 1} },
5994 .block_erase = spi_block_erase_c7,
5995 }
5996 },
5997 .unlock = spi_disable_blockprotect,
5998 .write = spi_chip_write_256,
5999 .read = spi_chip_read,
Steven Zakulec7d257b42011-07-19 08:50:18 +00006000 .voltage = {2700, 3600},
Rudy Hostf4e57772010-11-29 00:37:49 +00006001 },
6002
6003 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006004 .vendor = "SST",
Zeus Castro33670ba2011-08-17 09:50:11 +00006005 .name = "SST25LF040A",
6006 .bustype = BUS_SPI,
6007 .manufacture_id = SST_ID,
6008 .model_id = SST_SST25VF040_REMS,
6009 .total_size = 512,
6010 .page_size = 256,
Uwe Hermann4335ec82011-09-07 20:20:25 +00006011 .tested = TEST_OK_PREW,
Zeus Castro33670ba2011-08-17 09:50:11 +00006012 .probe = probe_spi_res2,
6013 .probe_timing = TIMING_ZERO,
6014 .block_erasers =
6015 {
6016 {
6017 .eraseblocks = { {4 * 1024, 128} },
6018 .block_erase = spi_block_erase_20,
6019 }, {
6020 .eraseblocks = { {32 * 1024, 16} },
6021 .block_erase = spi_block_erase_52,
6022 }, {
6023 .eraseblocks = { {512 * 1024, 1} },
6024 .block_erase = spi_block_erase_60,
6025 },
6026 },
6027 .unlock = spi_disable_blockprotect,
6028 .write = spi_chip_write_1, /* AAI supported, but opcode is 0xAF */
6029 .read = spi_chip_read,
6030 .voltage = {3000, 3600},
6031 },
6032
6033 {
6034 .vendor = "SST",
6035 .name = "SST25LF080A",
6036 .bustype = BUS_SPI,
6037 .manufacture_id = SST_ID,
6038 .model_id = SST_SST25VF080_REMS,
6039 .total_size = 1024,
6040 .page_size = 256,
6041 .tested = TEST_UNTESTED,
6042 .probe = probe_spi_res2,
6043 .probe_timing = TIMING_ZERO,
6044 .block_erasers =
6045 {
6046 {
6047 .eraseblocks = { {4 * 1024, 256} },
6048 .block_erase = spi_block_erase_20,
6049 }, {
6050 .eraseblocks = { {32 * 1024, 32} },
6051 .block_erase = spi_block_erase_52,
6052 }, {
6053 .eraseblocks = { {1024 * 1024, 1} },
6054 .block_erase = spi_block_erase_60,
6055 },
6056 },
6057 .unlock = spi_disable_blockprotect,
6058 .write = spi_chip_write_1, /* AAI supported, but opcode is 0xAF */
6059 .read = spi_chip_read,
6060 .voltage = {3000, 3600},
6061 },
6062
6063 {
6064 .vendor = "SST",
Sylvain "ythier" Hitier3093f8f2011-09-03 11:22:27 +00006065 .name = "SST25VF010",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006066 .bustype = BUS_SPI,
Mark Marshall90021f22010-12-03 14:48:11 +00006067 .manufacture_id = SST_ID,
6068 .model_id = SST_SST25VF010_REMS,
6069 .total_size = 128,
6070 .page_size = 256,
6071 .tested = TEST_OK_PREW,
6072 .probe = probe_spi_rems,
6073 .probe_timing = TIMING_ZERO,
6074 .block_erasers =
6075 {
6076 {
6077 .eraseblocks = { {4 * 1024, 32} },
6078 .block_erase = spi_block_erase_20,
6079 }, {
6080 .eraseblocks = { {32 * 1024, 4} },
6081 .block_erase = spi_block_erase_52,
6082 }, {
6083 .eraseblocks = { {128 * 1024, 1} },
6084 .block_erase = spi_block_erase_60,
6085 },
6086 },
6087 .unlock = spi_disable_blockprotect,
6088 .write = spi_chip_write_1,
6089 .read = spi_chip_read,
Steven Zakulec7d257b42011-07-19 08:50:18 +00006090 .voltage = {2700, 3600},
Mark Marshall90021f22010-12-03 14:48:11 +00006091 },
6092
6093 {
6094 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006095 .name = "SST25VF016B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006096 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006097 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006098 .model_id = SST_SST25VF016B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006099 .total_size = 2048,
6100 .page_size = 256,
Mark Marshall90021f22010-12-03 14:48:11 +00006101 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006102 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006103 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00006104 .block_erasers =
6105 {
6106 {
6107 .eraseblocks = { {4 * 1024, 512} },
6108 .block_erase = spi_block_erase_20,
6109 }, {
6110 .eraseblocks = { {32 * 1024, 64} },
6111 .block_erase = spi_block_erase_52,
6112 }, {
6113 .eraseblocks = { {64 * 1024, 32} },
6114 .block_erase = spi_block_erase_d8,
6115 }, {
6116 .eraseblocks = { {2 * 1024 * 1024, 1} },
6117 .block_erase = spi_block_erase_60,
6118 }, {
6119 .eraseblocks = { {2 * 1024 * 1024, 1} },
6120 .block_erase = spi_block_erase_c7,
6121 },
6122 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006123 .unlock = spi_disable_blockprotect,
Joshua Roys87955bf2011-08-01 18:39:28 +00006124 .write = spi_aai_write,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006125 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006126 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006127 },
6128
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006129 {
6130 .vendor = "SST",
6131 .name = "SST25VF032B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006132 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006133 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006134 .model_id = SST_SST25VF032B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006135 .total_size = 4096,
6136 .page_size = 256,
Stefan Taunerfcf6a8c2011-05-18 01:32:00 +00006137 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006138 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006139 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00006140 .block_erasers =
6141 {
6142 {
6143 .eraseblocks = { {4 * 1024, 1024} },
6144 .block_erase = spi_block_erase_20,
6145 }, {
6146 .eraseblocks = { {32 * 1024, 128} },
6147 .block_erase = spi_block_erase_52,
6148 }, {
6149 .eraseblocks = { {64 * 1024, 64} },
6150 .block_erase = spi_block_erase_d8,
6151 }, {
6152 .eraseblocks = { {4 * 1024 * 1024, 1} },
6153 .block_erase = spi_block_erase_60,
6154 }, {
6155 .eraseblocks = { {4 * 1024 * 1024, 1} },
6156 .block_erase = spi_block_erase_c7,
6157 },
6158 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006159 .unlock = spi_disable_blockprotect,
Helge Wagner1db7a442010-10-05 22:29:08 +00006160 .write = spi_aai_write,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00006161 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006162 .voltage = {2700, 3600},
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00006163 },
6164
6165 {
6166 .vendor = "SST",
Ed Swierk86f4e6d2010-07-21 15:02:22 +00006167 .name = "SST25VF064C",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006168 .bustype = BUS_SPI,
Ed Swierk86f4e6d2010-07-21 15:02:22 +00006169 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006170 .model_id = SST_SST25VF064C,
Ed Swierk86f4e6d2010-07-21 15:02:22 +00006171 .total_size = 8192,
6172 .page_size = 256,
Stefan Tauner8179be52011-06-04 13:13:34 +00006173 .tested = TEST_OK_PREW,
Ed Swierk86f4e6d2010-07-21 15:02:22 +00006174 .probe = probe_spi_rdid,
6175 .probe_timing = TIMING_ZERO,
6176 .block_erasers =
6177 {
6178 {
6179 .eraseblocks = { {4 * 1024, 2048} },
6180 .block_erase = spi_block_erase_20,
6181 }, {
6182 .eraseblocks = { {32 * 1024, 256} },
6183 .block_erase = spi_block_erase_52,
6184 }, {
6185 .eraseblocks = { {64 * 1024, 128} },
6186 .block_erase = spi_block_erase_d8,
6187 }, {
6188 .eraseblocks = { {8 * 1024 * 1024, 1} },
6189 .block_erase = spi_block_erase_60,
6190 }, {
6191 .eraseblocks = { {8 * 1024 * 1024, 1} },
6192 .block_erase = spi_block_erase_c7,
6193 },
6194 },
6195 .unlock = spi_disable_blockprotect,
Helge Wagner1db7a442010-10-05 22:29:08 +00006196 .write = spi_chip_write_256,
Ed Swierk86f4e6d2010-07-21 15:02:22 +00006197 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006198 .voltage = {2700, 3600},
Ed Swierk86f4e6d2010-07-21 15:02:22 +00006199 },
6200
6201 {
6202 .vendor = "SST",
Sylvain "ythier" Hitier3093f8f2011-09-03 11:22:27 +00006203 .name = "SST25VF040",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006204 .bustype = BUS_SPI,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00006205 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006206 .model_id = SST_SST25VF040_REMS,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00006207 .total_size = 512,
6208 .page_size = 256,
6209 .tested = TEST_OK_PR,
6210 .probe = probe_spi_rems,
6211 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00006212 .block_erasers =
6213 {
6214 {
6215 .eraseblocks = { {4 * 1024, 128} },
6216 .block_erase = spi_block_erase_20,
6217 }, {
6218 .eraseblocks = { {32 * 1024, 16} },
6219 .block_erase = spi_block_erase_52,
6220 }, {
6221 .eraseblocks = { {512 * 1024, 1} },
6222 .block_erase = spi_block_erase_60,
6223 },
6224 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006225 .unlock = spi_disable_blockprotect,
Joshua Roys87955bf2011-08-01 18:39:28 +00006226 .write = spi_chip_write_1, /* AAI supported, but opcode is 0xAF */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006227 .read = spi_chip_read,
Steven Zakulec7d257b42011-07-19 08:50:18 +00006228 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006229 },
6230
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006231 {
6232 .vendor = "SST",
6233 .name = "SST25VF040B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006234 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006235 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006236 .model_id = SST_SST25VF040B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006237 .total_size = 512,
6238 .page_size = 256,
6239 .tested = TEST_UNTESTED,
6240 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006241 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00006242 .block_erasers =
6243 {
6244 {
6245 .eraseblocks = { {4 * 1024, 128} },
6246 .block_erase = spi_block_erase_20,
6247 }, {
6248 .eraseblocks = { {32 * 1024, 16} },
6249 .block_erase = spi_block_erase_52,
6250 }, {
6251 .eraseblocks = { {64 * 1024, 8} },
6252 .block_erase = spi_block_erase_d8,
6253 }, {
6254 .eraseblocks = { {512 * 1024, 1} },
6255 .block_erase = spi_block_erase_60,
6256 }, {
6257 .eraseblocks = { {512 * 1024, 1} },
6258 .block_erase = spi_block_erase_c7,
6259 },
6260 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006261 .unlock = spi_disable_blockprotect,
Joshua Roys87955bf2011-08-01 18:39:28 +00006262 .write = spi_aai_write,
Zheng Bao0677dff2009-02-25 08:07:33 +00006263 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006264 .voltage = {2700, 3600},
Zheng Bao0677dff2009-02-25 08:07:33 +00006265 },
6266
6267 {
6268 .vendor = "SST",
Peter Stugefd9217d2009-01-26 03:37:40 +00006269 .name = "SST25VF040B.REMS",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006270 .bustype = BUS_SPI,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00006271 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006272 .model_id = SST_SST25VF040B_REMS,
Peter Stugefd9217d2009-01-26 03:37:40 +00006273 .total_size = 512,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00006274 .page_size = 256,
Peter Stugefd9217d2009-01-26 03:37:40 +00006275 .tested = TEST_OK_PR,
6276 .probe = probe_spi_rems,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006277 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00006278 .block_erasers =
6279 {
6280 {
6281 .eraseblocks = { {4 * 1024, 128} },
6282 .block_erase = spi_block_erase_20,
6283 }, {
6284 .eraseblocks = { {32 * 1024, 16} },
6285 .block_erase = spi_block_erase_52,
6286 }, {
6287 .eraseblocks = { {64 * 1024, 8} },
6288 .block_erase = spi_block_erase_d8,
6289 }, {
6290 .eraseblocks = { {512 * 1024, 1} },
6291 .block_erase = spi_block_erase_60,
6292 }, {
6293 .eraseblocks = { {512 * 1024, 1} },
6294 .block_erase = spi_block_erase_c7,
6295 },
6296 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006297 .unlock = spi_disable_blockprotect,
Joshua Roys87955bf2011-08-01 18:39:28 +00006298 .write = spi_aai_write,
Peter Stugefd9217d2009-01-26 03:37:40 +00006299 .read = spi_chip_read,
Steven Zakulec7d257b42011-07-19 08:50:18 +00006300 .voltage = {2700, 3600},
Peter Stugefd9217d2009-01-26 03:37:40 +00006301 },
6302
6303 {
6304 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006305 .name = "SST25VF080B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006306 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006307 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006308 .model_id = SST_SST25VF080B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006309 .total_size = 1024,
6310 .page_size = 256,
John Schmergec965c2d2011-05-18 11:28:47 +00006311 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006312 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006313 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00006314 .block_erasers =
6315 {
6316 {
6317 .eraseblocks = { {4 * 1024, 256} },
6318 .block_erase = spi_block_erase_20,
6319 }, {
6320 .eraseblocks = { {32 * 1024, 32} },
6321 .block_erase = spi_block_erase_52,
6322 }, {
6323 .eraseblocks = { {64 * 1024, 16} },
6324 .block_erase = spi_block_erase_d8,
6325 }, {
6326 .eraseblocks = { {1024 * 1024, 1} },
6327 .block_erase = spi_block_erase_60,
6328 }, {
6329 .eraseblocks = { {1024 * 1024, 1} },
6330 .block_erase = spi_block_erase_c7,
6331 },
6332 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006333 .unlock = spi_disable_blockprotect,
Joshua Roys87955bf2011-08-01 18:39:28 +00006334 .write = spi_aai_write,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006335 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006336 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006337 },
6338
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006339 {
6340 .vendor = "SST",
6341 .name = "SST28SF040A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006342 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006343 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006344 .model_id = SST_SST28SF040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006345 .total_size = 512,
6346 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00006347 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006348 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006349 .probe = probe_82802ab,
Paul Menzelc07a41c2011-06-19 17:23:55 +00006350 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (sst28sf040.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006351 .block_erasers =
6352 {
6353 {
6354 .eraseblocks = { {128, 4096} },
6355 .block_erase = erase_sector_28sf040,
6356 }, {
6357 .eraseblocks = { {512 * 1024, 1} },
6358 .block_erase = erase_chip_28sf040,
6359 }
6360 },
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00006361 .unlock = unprotect_28sf040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006362 .write = write_28sf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006363 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006364 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00006365 },
6366
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006367 {
6368 .vendor = "SST",
6369 .name = "SST29EE010",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006370 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006371 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006372 .model_id = SST_SST29EE010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006373 .total_size = 128,
6374 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006375 .feature_bits = FEATURE_LONG_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006376 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006377 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00006378 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00006379 .block_erasers =
6380 {
6381 {
6382 .eraseblocks = { {128 * 1024, 1} },
6383 .block_erase = erase_chip_block_jedec,
6384 }
6385 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006386 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006387 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006388 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00006389 },
6390
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006391 {
6392 .vendor = "SST",
6393 .name = "SST29LE010",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006394 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006395 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006396 .model_id = SST_SST29LE010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006397 .total_size = 128,
6398 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006399 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006400 .tested = TEST_UNTESTED,
6401 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00006402 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00006403 .block_erasers =
6404 {
6405 {
6406 .eraseblocks = { {128 * 1024, 1} },
6407 .block_erase = erase_chip_block_jedec,
6408 }
6409 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006410 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006411 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006412 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006413 },
6414
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006415 {
6416 .vendor = "SST",
6417 .name = "SST29EE020A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006418 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006419 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006420 .model_id = SST_SST29EE020A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006421 .total_size = 256,
6422 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006423 .feature_bits = FEATURE_LONG_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006424 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006425 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006426 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00006427 .block_erasers =
6428 {
6429 {
6430 .eraseblocks = { {256 * 1024, 1} },
6431 .block_erase = erase_chip_block_jedec,
6432 }
6433 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006434 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006435 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006436 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00006437 },
6438
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006439 {
6440 .vendor = "SST",
6441 .name = "SST29LE020",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006442 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006443 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006444 .model_id = SST_SST29LE020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006445 .total_size = 256,
6446 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006447 .feature_bits = FEATURE_LONG_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006448 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006449 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00006450 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00006451 .block_erasers =
6452 {
6453 {
6454 .eraseblocks = { {256 * 1024, 1} },
6455 .block_erase = erase_chip_block_jedec,
6456 }
6457 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006458 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006459 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006460 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006461 },
6462
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006463 {
6464 .vendor = "SST",
Uwe Hermann48da3f92010-01-23 15:15:19 +00006465 .name = "SST39SF512",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006466 .bustype = BUS_PARALLEL,
Uwe Hermann48da3f92010-01-23 15:15:19 +00006467 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006468 .model_id = SST_SST39SF512,
Uwe Hermann48da3f92010-01-23 15:15:19 +00006469 .total_size = 64,
6470 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00006471 .feature_bits = FEATURE_EITHER_RESET,
Idwer Vollering7913fb42011-03-07 15:32:58 +00006472 .tested = TEST_OK_PREW,
Uwe Hermann48da3f92010-01-23 15:15:19 +00006473 .probe = probe_jedec,
6474 .probe_timing = 1, /* 150 ns */
Uwe Hermann48da3f92010-01-23 15:15:19 +00006475 .block_erasers =
6476 {
6477 {
6478 .eraseblocks = { {4 * 1024, 16} },
6479 .block_erase = erase_sector_jedec,
6480 }, {
6481 .eraseblocks = { {64 * 1024, 1} },
6482 .block_erase = erase_chip_block_jedec,
6483 }
6484 },
Sean Nelson35727f72010-01-28 23:55:12 +00006485 .write = write_jedec_1,
Uwe Hermann48da3f92010-01-23 15:15:19 +00006486 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006487 .voltage = {4500, 5500},
Uwe Hermann48da3f92010-01-23 15:15:19 +00006488 },
6489
6490 {
6491 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006492 .name = "SST39SF010A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006493 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006494 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006495 .model_id = SST_SST39SF010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006496 .total_size = 128,
6497 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00006498 .feature_bits = FEATURE_EITHER_RESET,
Cristian Măgherușan-Stanciu9932c7b2011-07-07 19:56:58 +00006499 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006500 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00006501 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006502 .block_erasers =
6503 {
6504 {
6505 .eraseblocks = { {4 * 1024, 32} },
6506 .block_erase = erase_sector_jedec,
6507 }, {
6508 .eraseblocks = { {128 * 1024, 1} },
6509 .block_erase = erase_chip_block_jedec,
6510 }
6511 },
Sean Nelson35727f72010-01-28 23:55:12 +00006512 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006513 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006514 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00006515 },
6516
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006517 {
6518 .vendor = "SST",
6519 .name = "SST39SF020A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006520 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006521 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006522 .model_id = SST_SST39SF020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006523 .total_size = 256,
6524 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00006525 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann19f46f22011-06-18 22:56:14 +00006526 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006527 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00006528 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006529 .block_erasers =
6530 {
6531 {
6532 .eraseblocks = { {4 * 1024, 64} },
6533 .block_erase = erase_sector_jedec,
6534 }, {
6535 .eraseblocks = { {256 * 1024, 1} },
6536 .block_erase = erase_chip_block_jedec,
6537 }
6538 },
Sean Nelson35727f72010-01-28 23:55:12 +00006539 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006540 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006541 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00006542 },
6543
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006544 {
6545 .vendor = "SST",
6546 .name = "SST39SF040",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006547 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006548 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006549 .model_id = SST_SST39SF040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006550 .total_size = 512,
6551 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00006552 .feature_bits = FEATURE_EITHER_RESET,
Sylvain "ythier" Hitier3093f8f2011-09-03 11:22:27 +00006553 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006554 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00006555 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006556 .block_erasers =
6557 {
6558 {
6559 .eraseblocks = { {4 * 1024, 128} },
6560 .block_erase = erase_sector_jedec,
6561 }, {
6562 .eraseblocks = { {512 * 1024, 1} },
6563 .block_erase = erase_chip_block_jedec,
6564 }
6565 },
Sean Nelson35727f72010-01-28 23:55:12 +00006566 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006567 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006568 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00006569 },
6570
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006571 {
6572 .vendor = "SST",
6573 .name = "SST39VF512",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006574 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006575 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006576 .model_id = SST_SST39VF512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006577 .total_size = 64,
6578 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00006579 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006580 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006581 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00006582 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006583 .block_erasers =
6584 {
6585 {
6586 .eraseblocks = { {4 * 1024, 16} },
6587 .block_erase = erase_sector_jedec,
6588 }, {
6589 .eraseblocks = { {64 * 1024, 1} },
6590 .block_erase = erase_chip_block_jedec,
6591 }
6592 },
Sean Nelson35727f72010-01-28 23:55:12 +00006593 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006594 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006595 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006596 },
6597
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006598 {
6599 .vendor = "SST",
6600 .name = "SST39VF010",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006601 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006602 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006603 .model_id = SST_SST39VF010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006604 .total_size = 128,
6605 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00006606 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006607 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006608 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00006609 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006610 .block_erasers =
6611 {
6612 {
6613 .eraseblocks = { {4 * 1024, 32} },
6614 .block_erase = erase_sector_jedec,
6615 }, {
6616 .eraseblocks = { {128 * 1024, 1} },
6617 .block_erase = erase_chip_block_jedec,
6618 }
6619 },
Sean Nelson35727f72010-01-28 23:55:12 +00006620 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006621 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006622 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006623 },
6624
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006625 {
6626 .vendor = "SST",
6627 .name = "SST39VF020",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006628 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006629 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006630 .model_id = SST_SST39VF020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006631 .total_size = 256,
6632 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00006633 .feature_bits = FEATURE_EITHER_RESET,
6634 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006635 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00006636 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006637 .block_erasers =
6638 {
6639 {
6640 .eraseblocks = { {4 * 1024, 64} },
6641 .block_erase = erase_sector_jedec,
6642 }, {
6643 .eraseblocks = { {256 * 1024, 1} },
6644 .block_erase = erase_chip_block_jedec,
6645 }
6646 },
Sean Nelson35727f72010-01-28 23:55:12 +00006647 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006648 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006649 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006650 },
6651
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006652 {
6653 .vendor = "SST",
6654 .name = "SST39VF040",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006655 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006656 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006657 .model_id = SST_SST39VF040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006658 .total_size = 512,
6659 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00006660 .feature_bits = FEATURE_EITHER_RESET,
6661 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006662 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00006663 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006664 .block_erasers =
6665 {
6666 {
6667 .eraseblocks = { {4 * 1024, 128} },
6668 .block_erase = erase_sector_jedec,
6669 }, {
6670 .eraseblocks = { {512 * 1024, 1} },
6671 .block_erase = erase_chip_block_jedec,
6672 }
6673 },
Sean Nelson35727f72010-01-28 23:55:12 +00006674 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006675 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006676 .voltage = {2700, 3600},
Carl-Daniel Hailfinger90eff152008-12-08 23:51:45 +00006677 },
FENG yu ningff692fb2008-12-08 18:15:10 +00006678
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006679 {
6680 .vendor = "SST",
Peter Stuge8440cc02009-01-25 23:55:12 +00006681 .name = "SST39VF080",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006682 .bustype = BUS_PARALLEL,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00006683 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006684 .model_id = SST_SST39VF080,
Peter Stuge8440cc02009-01-25 23:55:12 +00006685 .total_size = 1024,
6686 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00006687 .feature_bits = FEATURE_EITHER_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +00006688 .tested = TEST_UNTESTED,
6689 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00006690 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006691 .block_erasers =
6692 {
6693 {
6694 .eraseblocks = { {4 * 1024, 256} },
6695 .block_erase = erase_sector_jedec,
6696 }, {
6697 .eraseblocks = { {64 * 1024, 16} },
6698 .block_erase = erase_block_jedec,
6699 }, {
6700 .eraseblocks = { {1024 * 1024, 1} },
6701 .block_erase = erase_chip_block_jedec,
6702 }
6703 },
Sean Nelson35727f72010-01-28 23:55:12 +00006704 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006705 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006706 .voltage = {2700, 3600},
Peter Stuge8440cc02009-01-25 23:55:12 +00006707 },
6708
6709 {
6710 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006711 .name = "SST49LF002A/B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006712 .bustype = BUS_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006713 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006714 .model_id = SST_SST49LF002A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006715 .total_size = 256,
6716 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006717 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Idwer Vollering67f28142011-03-06 22:26:23 +00006718 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006719 .probe = probe_jedec,
6720 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006721 .block_erasers =
6722 {
6723 {
6724 .eraseblocks = { {4 * 1024, 64} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00006725 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00006726 }, {
6727 .eraseblocks = { {16 * 1024, 16} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00006728 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00006729 }, {
6730 .eraseblocks = { {256 * 1024, 1} },
6731 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
6732 }
6733 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006734 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00006735 .unlock = unlock_sst_fwhub,
6736 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006737 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006738 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006739 },
6740
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006741 {
6742 .vendor = "SST",
6743 .name = "SST49LF003A/B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006744 .bustype = BUS_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006745 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006746 .model_id = SST_SST49LF003A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006747 .total_size = 384,
6748 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006749 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Peter Lemenkov45835c42009-09-25 01:09:18 +00006750 .tested = TEST_OK_PR,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006751 .probe = probe_jedec,
6752 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006753 .block_erasers =
6754 {
6755 {
6756 .eraseblocks = { {4 * 1024, 96} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00006757 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00006758 }, {
6759 .eraseblocks = { {64 * 1024, 6} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00006760 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00006761 }, {
6762 .eraseblocks = { {384 * 1024, 1} },
6763 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
6764 }
6765 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006766 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00006767 .unlock = unlock_sst_fwhub,
6768 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006769 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006770 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006771 },
6772
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006773 {
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00006774 /* Contrary to the data sheet, TBL# on the SST49LF004B affects the top 128kB (instead of 64kB)
6775 * and is only honored for 64k block erase, but not 4k sector erase.
6776 */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006777 .vendor = "SST",
6778 .name = "SST49LF004A/B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006779 .bustype = BUS_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006780 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006781 .model_id = SST_SST49LF004A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006782 .total_size = 512,
6783 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006784 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Idwer Vollering67f28142011-03-06 22:26:23 +00006785 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006786 .probe = probe_jedec,
6787 .probe_timing = 1, /* 150 ns */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00006788 .block_erasers =
6789 {
6790 {
6791 .eraseblocks = { {4 * 1024, 128} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00006792 .block_erase = erase_sector_jedec,
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00006793 }, {
6794 .eraseblocks = { {64 * 1024, 8} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00006795 .block_erase = erase_block_jedec,
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00006796 }, {
6797 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson51c83fb2010-01-20 20:55:53 +00006798 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00006799 },
6800 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006801 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00006802 .unlock = unlock_sst_fwhub,
6803 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006804 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006805 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006806 },
6807
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006808 {
6809 .vendor = "SST",
6810 .name = "SST49LF004C",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006811 .bustype = BUS_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006812 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006813 .model_id = SST_SST49LF004C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006814 .total_size = 512,
6815 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006816 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006817 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006818 .probe = probe_82802ab,
Paul Menzelc07a41c2011-06-19 17:23:55 +00006819 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006820 .block_erasers =
6821 {
6822 {
6823 .eraseblocks = { {4 * 1024, 128} },
6824 .block_erase = erase_sector_49lfxxxc,
6825 }, {
6826 .eraseblocks = {
6827 {64 * 1024, 7},
6828 {32 * 1024, 1},
6829 {8 * 1024, 2},
6830 {16 * 1024, 1},
6831 },
Sean Nelson69e58112010-03-23 17:10:28 +00006832 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00006833 }
6834 },
Sean Nelson69e58112010-03-23 17:10:28 +00006835 .unlock = unlock_49lfxxxc,
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00006836 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006837 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006838 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006839 },
6840
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006841 {
6842 .vendor = "SST",
6843 .name = "SST49LF008A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006844 .bustype = BUS_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006845 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006846 .model_id = SST_SST49LF008A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006847 .total_size = 1024,
6848 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006849 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Paul Menzel018d4822011-10-21 12:33:07 +00006850 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006851 .probe = probe_jedec,
6852 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006853 .block_erasers =
6854 {
6855 {
6856 .eraseblocks = { {4 * 1024, 256} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00006857 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00006858 }, {
6859 .eraseblocks = { {64 * 1024, 16} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00006860 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00006861 }, {
6862 .eraseblocks = { {1024 * 1024, 1} },
6863 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
6864 }
6865 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006866 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00006867 .unlock = unlock_sst_fwhub,
6868 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006869 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006870 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006871 },
6872
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006873 {
6874 .vendor = "SST",
6875 .name = "SST49LF008C",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006876 .bustype = BUS_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006877 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006878 .model_id = SST_SST49LF008C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006879 .total_size = 1024,
6880 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006881 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006882 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006883 .probe = probe_82802ab,
Paul Menzelc07a41c2011-06-19 17:23:55 +00006884 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006885 .block_erasers =
6886 {
6887 {
6888 .eraseblocks = { {4 * 1024, 256} },
6889 .block_erase = erase_sector_49lfxxxc,
6890 }, {
6891 .eraseblocks = {
6892 {64 * 1024, 15},
6893 {32 * 1024, 1},
6894 {8 * 1024, 2},
6895 {16 * 1024, 1},
6896 },
Sean Nelson69e58112010-03-23 17:10:28 +00006897 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00006898 }
6899 },
Sean Nelson69e58112010-03-23 17:10:28 +00006900 .unlock = unlock_49lfxxxc,
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00006901 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006902 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006903 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006904 },
6905
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006906 {
6907 .vendor = "SST",
6908 .name = "SST49LF016C",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006909 .bustype = BUS_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006910 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006911 .model_id = SST_SST49LF016C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006912 .total_size = 2048,
6913 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006914 .feature_bits = FEATURE_REGISTERMAP,
Stefan Tauner2abab942012-04-27 20:41:23 +00006915 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006916 .probe = probe_82802ab,
Paul Menzelc07a41c2011-06-19 17:23:55 +00006917 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006918 .block_erasers =
6919 {
6920 {
6921 .eraseblocks = { {4 * 1024, 512} },
6922 .block_erase = erase_sector_49lfxxxc,
6923 }, {
6924 .eraseblocks = {
6925 {64 * 1024, 31},
6926 {32 * 1024, 1},
6927 {8 * 1024, 2},
6928 {16 * 1024, 1},
6929 },
Sean Nelson69e58112010-03-23 17:10:28 +00006930 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00006931 }
6932 },
Sean Nelson69e58112010-03-23 17:10:28 +00006933 .unlock = unlock_49lfxxxc,
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00006934 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006935 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006936 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006937 },
6938
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006939 {
6940 .vendor = "SST",
6941 .name = "SST49LF020",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006942 .bustype = BUS_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006943 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006944 .model_id = SST_SST49LF020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006945 .total_size = 256,
6946 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006947 .feature_bits = FEATURE_EITHER_RESET,
Stefan Tauner8179be52011-06-04 13:13:34 +00006948 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006949 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00006950 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006951 .block_erasers =
6952 {
6953 {
6954 .eraseblocks = { {4 * 1024, 64} },
6955 .block_erase = erase_sector_jedec,
6956 }, {
6957 .eraseblocks = { {16 * 1024, 16} },
6958 .block_erase = erase_block_jedec,
6959 }, {
6960 .eraseblocks = { {256 * 1024, 1} },
6961 .block_erase = NULL,
6962 }
6963 },
Sean Nelson35727f72010-01-28 23:55:12 +00006964 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006965 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006966 .voltage = {3000, 3600},
Sven Schnellec208dfb2009-01-07 12:35:09 +00006967 },
6968
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006969 {
6970 .vendor = "SST",
6971 .name = "SST49LF020A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006972 .bustype = BUS_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006973 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006974 .model_id = SST_SST49LF020A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006975 .total_size = 256,
Carl-Daniel Hailfingerda654322009-07-23 01:44:38 +00006976 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006977 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006978 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006979 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00006980 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006981 .block_erasers =
6982 {
6983 {
6984 .eraseblocks = { {4 * 1024, 64} },
6985 .block_erase = erase_sector_jedec,
6986 }, {
6987 .eraseblocks = { {16 * 1024, 16} },
6988 .block_erase = erase_block_jedec,
6989 }, {
6990 .eraseblocks = { {256 * 1024, 1} },
6991 .block_erase = NULL,
6992 }
6993 },
Sean Nelson35727f72010-01-28 23:55:12 +00006994 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006995 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006996 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006997 },
6998
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006999 {
7000 .vendor = "SST",
7001 .name = "SST49LF040",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007002 .bustype = BUS_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007003 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00007004 .model_id = SST_SST49LF040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007005 .total_size = 512,
7006 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00007007 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007008 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007009 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00007010 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00007011 .block_erasers =
7012 {
7013 {
7014 .eraseblocks = { {4 * 1024, 128} },
7015 .block_erase = erase_sector_jedec,
7016 }, {
7017 .eraseblocks = { {64 * 1024, 8} },
7018 .block_erase = erase_block_jedec,
7019 }, {
7020 .eraseblocks = { {512 * 1024, 1} },
7021 .block_erase = NULL,
7022 }
7023 },
Sean Nelson35727f72010-01-28 23:55:12 +00007024 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007025 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007026 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007027 },
7028
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007029 {
7030 .vendor = "SST",
7031 .name = "SST49LF040B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007032 .bustype = BUS_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007033 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00007034 .model_id = SST_SST49LF040B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007035 .total_size = 512,
7036 .page_size = 64 * 1024,
Joshua Roysa84b0bd2010-08-16 22:12:39 +00007037 .feature_bits = FEATURE_EITHER_RESET | FEATURE_REGISTERMAP,
Sylvain "ythier" Hitier3093f8f2011-09-03 11:22:27 +00007038 .tested = TEST_OK_PREW,
Sean Nelson51c83fb2010-01-20 20:55:53 +00007039 .probe = probe_jedec,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00007040 .probe_timing = 1, /* 150ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00007041 .block_erasers =
7042 {
7043 {
7044 .eraseblocks = { {4 * 1024, 128} },
7045 .block_erase = erase_sector_jedec,
7046 }, {
7047 .eraseblocks = { {64 * 1024, 8} },
7048 .block_erase = erase_block_jedec,
7049 }, {
7050 .eraseblocks = { {512 * 1024, 1} },
7051 .block_erase = NULL,
7052 }
7053 },
Joshua Roysa84b0bd2010-08-16 22:12:39 +00007054 .unlock = unlock_82802ab,
Sean Nelson35727f72010-01-28 23:55:12 +00007055 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007056 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007057 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007058 },
7059
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007060 {
7061 .vendor = "SST",
7062 .name = "SST49LF080A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007063 .bustype = BUS_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007064 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00007065 .model_id = SST_SST49LF080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007066 .total_size = 1024,
7067 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00007068 .feature_bits = FEATURE_EITHER_RESET,
Brandon Dowdyf07bf322011-03-06 18:31:11 +00007069 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007070 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00007071 .probe_timing = TIMING_FIXME,
Sean Nelson51c83fb2010-01-20 20:55:53 +00007072 .block_erasers =
7073 {
7074 {
7075 .eraseblocks = { {4 * 1024, 256} },
7076 .block_erase = erase_sector_jedec,
7077 }, {
7078 .eraseblocks = { {64 * 1024, 16} },
7079 .block_erase = erase_block_jedec,
7080 }, {
7081 .eraseblocks = { {1024 * 1024, 1} },
7082 .block_erase = NULL,
7083 }
7084 },
Sean Nelson35727f72010-01-28 23:55:12 +00007085 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007086 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007087 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007088 },
7089
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007090 {
7091 .vendor = "SST",
7092 .name = "SST49LF160C",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007093 .bustype = BUS_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007094 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00007095 .model_id = SST_SST49LF160C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007096 .total_size = 2048,
7097 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00007098 .feature_bits = FEATURE_REGISTERMAP,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007099 .tested = TEST_OK_PRE,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00007100 .probe = probe_82802ab,
Paul Menzelc07a41c2011-06-19 17:23:55 +00007101 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00007102 .block_erasers =
7103 {
7104 {
7105 .eraseblocks = { {4 * 1024, 512} },
7106 .block_erase = erase_sector_49lfxxxc,
7107 }, {
7108 .eraseblocks = {
7109 {64 * 1024, 31},
7110 {32 * 1024, 1},
7111 {8 * 1024, 2},
7112 {16 * 1024, 1},
7113 },
Sean Nelson69e58112010-03-23 17:10:28 +00007114 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00007115 }
7116 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00007117 .unlock = unlock_49lfxxxc,
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00007118 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007119 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007120 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007121 },
7122
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007123 {
7124 .vendor = "ST",
7125 .name = "M25P05-A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007126 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007127 .manufacture_id = ST_ID,
7128 .model_id = ST_M25P05A,
7129 .total_size = 64,
7130 .page_size = 256,
7131 .tested = TEST_UNTESTED,
7132 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007133 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00007134 .block_erasers =
7135 {
7136 {
7137 .eraseblocks = { {32 * 1024, 2} },
7138 .block_erase = spi_block_erase_d8,
7139 }, {
7140 .eraseblocks = { {64 * 1024, 1} },
7141 .block_erase = spi_block_erase_c7,
7142 }
7143 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007144 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007145 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007146 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007147 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007148 },
7149
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00007150 /* The ST M25P05 is a bit of a problem. It has the same ID as the
7151 * ST M25P05-A in RES mode, but supports only 128 byte writes instead
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00007152 * of 256 byte writes. We rely heavily on the fact that probe_spi_res1
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00007153 * only is successful if RDID does not work.
7154 */
7155 {
7156 .vendor = "ST",
Sylvain "ythier" Hitier3093f8f2011-09-03 11:22:27 +00007157 .name = "M25P05",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007158 .bustype = BUS_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00007159 .manufacture_id = 0, /* Not used. */
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00007160 .model_id = ST_M25P05_RES,
7161 .total_size = 64,
7162 .page_size = 256,
7163 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00007164 .probe = probe_spi_res1,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00007165 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00007166 .block_erasers =
7167 {
7168 {
7169 .eraseblocks = { {32 * 1024, 2} },
7170 .block_erase = spi_block_erase_d8,
7171 }, {
7172 .eraseblocks = { {64 * 1024, 1} },
7173 .block_erase = spi_block_erase_c7,
7174 }
7175 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007176 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00007177 .write = spi_chip_write_1, /* 128 */
7178 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007179 .voltage = {2700, 3600},
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00007180 },
7181
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007182 {
7183 .vendor = "ST",
7184 .name = "M25P10-A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007185 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007186 .manufacture_id = ST_ID,
7187 .model_id = ST_M25P10A,
7188 .total_size = 128,
7189 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007190 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007191 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007192 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00007193 .block_erasers =
7194 {
7195 {
7196 .eraseblocks = { {32 * 1024, 4} },
7197 .block_erase = spi_block_erase_d8,
7198 }, {
7199 .eraseblocks = { {128 * 1024, 1} },
7200 .block_erase = spi_block_erase_c7,
7201 }
7202 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007203 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007204 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007205 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007206 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007207 },
7208
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00007209 /* The ST M25P10 has the same problem as the M25P05. */
7210 {
7211 .vendor = "ST",
Sylvain "ythier" Hitier3093f8f2011-09-03 11:22:27 +00007212 .name = "M25P10",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007213 .bustype = BUS_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00007214 .manufacture_id = 0, /* Not used. */
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00007215 .model_id = ST_M25P10_RES,
7216 .total_size = 128,
7217 .page_size = 256,
7218 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00007219 .probe = probe_spi_res1,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00007220 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00007221 .block_erasers =
7222 {
7223 {
7224 .eraseblocks = { {32 * 1024, 4} },
7225 .block_erase = spi_block_erase_d8,
7226 }, {
7227 .eraseblocks = { {128 * 1024, 1} },
7228 .block_erase = spi_block_erase_c7,
7229 }
7230 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007231 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00007232 .write = spi_chip_write_1, /* 128 */
7233 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007234 .voltage = {2700, 3600},
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00007235 },
7236
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007237 {
7238 .vendor = "ST",
7239 .name = "M25P20",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007240 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007241 .manufacture_id = ST_ID,
7242 .model_id = ST_M25P20,
7243 .total_size = 256,
7244 .page_size = 256,
7245 .tested = TEST_UNTESTED,
7246 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007247 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00007248 .block_erasers =
7249 {
7250 {
7251 .eraseblocks = { {64 * 1024, 4} },
7252 .block_erase = spi_block_erase_d8,
7253 }, {
7254 .eraseblocks = { {256 * 1024, 1} },
7255 .block_erase = spi_block_erase_c7,
7256 }
7257 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007258 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007259 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007260 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007261 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007262 },
7263
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007264 {
Sylvain "ythier" Hitier3093f8f2011-09-03 11:22:27 +00007265 .vendor = "ST", /* Numonyx */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007266 .name = "M25P40",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007267 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007268 .manufacture_id = ST_ID,
7269 .model_id = ST_M25P40,
7270 .total_size = 512,
7271 .page_size = 256,
Paul Menzelac427b22012-02-16 21:07:07 +00007272 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007273 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007274 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00007275 .block_erasers =
7276 {
7277 {
7278 .eraseblocks = { {64 * 1024, 8} },
7279 .block_erase = spi_block_erase_d8,
7280 }, {
7281 .eraseblocks = { {512 * 1024, 1} },
7282 .block_erase = spi_block_erase_c7,
7283 }
7284 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007285 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007286 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007287 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007288 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007289 },
7290
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007291 {
7292 .vendor = "ST",
7293 .name = "M25P40-old",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007294 .bustype = BUS_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00007295 .manufacture_id = 0, /* Not used. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007296 .model_id = ST_M25P40_RES,
7297 .total_size = 512,
7298 .page_size = 256,
7299 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00007300 .probe = probe_spi_res1,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007301 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00007302 .block_erasers =
7303 {
7304 {
7305 .eraseblocks = { {64 * 1024, 8} },
7306 .block_erase = spi_block_erase_d8,
7307 }, {
7308 .eraseblocks = { {512 * 1024, 1} },
7309 .block_erase = spi_block_erase_c7,
7310 }
7311 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007312 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007313 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007314 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00007315 },
7316
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007317 {
7318 .vendor = "ST",
7319 .name = "M25P80",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007320 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007321 .manufacture_id = ST_ID,
7322 .model_id = ST_M25P80,
7323 .total_size = 1024,
7324 .page_size = 256,
Uwe Hermann19f46f22011-06-18 22:56:14 +00007325 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007326 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007327 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00007328 .block_erasers =
7329 {
7330 {
7331 .eraseblocks = { {64 * 1024, 16} },
7332 .block_erase = spi_block_erase_d8,
7333 }, {
7334 .eraseblocks = { {1024 * 1024, 1} },
7335 .block_erase = spi_block_erase_c7,
7336 }
7337 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007338 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007339 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007340 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007341 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007342 },
7343
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007344 {
7345 .vendor = "ST",
7346 .name = "M25P16",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007347 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007348 .manufacture_id = ST_ID,
7349 .model_id = ST_M25P16,
7350 .total_size = 2048,
7351 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007352 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007353 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007354 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00007355 .block_erasers =
7356 {
7357 {
7358 .eraseblocks = { {64 * 1024, 32} },
7359 .block_erase = spi_block_erase_d8,
7360 }, {
7361 .eraseblocks = { {2 * 1024 * 1024, 1} },
7362 .block_erase = spi_block_erase_c7,
7363 }
7364 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007365 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007366 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007367 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007368 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007369 },
7370
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007371 {
7372 .vendor = "ST",
7373 .name = "M25P32",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007374 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007375 .manufacture_id = ST_ID,
7376 .model_id = ST_M25P32,
7377 .total_size = 4096,
7378 .page_size = 256,
Antony Rheneus0fbba982011-05-26 14:28:51 +00007379 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007380 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007381 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00007382 .block_erasers =
7383 {
7384 {
7385 .eraseblocks = { {64 * 1024, 64} },
7386 .block_erase = spi_block_erase_d8,
7387 }, {
7388 .eraseblocks = { {4 * 1024 * 1024, 1} },
7389 .block_erase = spi_block_erase_c7,
7390 }
7391 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007392 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007393 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007394 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007395 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007396 },
7397
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007398 {
7399 .vendor = "ST",
7400 .name = "M25P64",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007401 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007402 .manufacture_id = ST_ID,
7403 .model_id = ST_M25P64,
7404 .total_size = 8192,
7405 .page_size = 256,
7406 .tested = TEST_UNTESTED,
7407 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007408 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00007409 .block_erasers =
7410 {
7411 {
7412 .eraseblocks = { {64 * 1024, 128} },
7413 .block_erase = spi_block_erase_d8,
7414 }, {
7415 .eraseblocks = { {8 * 1024 * 1024, 1} },
7416 .block_erase = spi_block_erase_c7,
7417 }
7418 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007419 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007420 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007421 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007422 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007423 },
7424
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007425 {
7426 .vendor = "ST",
7427 .name = "M25P128",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007428 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007429 .manufacture_id = ST_ID,
7430 .model_id = ST_M25P128,
7431 .total_size = 16384,
7432 .page_size = 256,
Cristian Măgherușan-Stanciu9932c7b2011-07-07 19:56:58 +00007433 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007434 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007435 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00007436 .block_erasers =
7437 {
7438 {
7439 .eraseblocks = { {256 * 1024, 64} },
7440 .block_erase = spi_block_erase_d8,
7441 }, {
7442 .eraseblocks = { {16 * 1024 * 1024, 1} },
7443 .block_erase = spi_block_erase_c7,
7444 }
7445 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007446 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007447 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007448 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007449 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007450 },
7451
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007452 {
7453 .vendor = "ST",
Carl Worthd1dd72c2011-03-06 18:45:40 +00007454 .name = "M25PX16",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007455 .bustype = BUS_SPI,
Carl Worthd1dd72c2011-03-06 18:45:40 +00007456 .manufacture_id = ST_ID,
7457 .model_id = ST_M25PX16,
7458 .total_size = 2048,
7459 .page_size = 256,
Daniel Lenski65922a32012-02-15 23:40:23 +00007460 /* OTP: 64B total; read 0x4B; write 0x42 */
7461 .feature_bits = FEATURE_OTP,
Carl Worthd1dd72c2011-03-06 18:45:40 +00007462 .tested = TEST_OK_PREW,
7463 .probe = probe_spi_rdid,
7464 .probe_timing = TIMING_ZERO,
7465 .block_erasers =
7466 {
7467 {
7468 .eraseblocks = { { 4 * 1024, 512 } },
7469 .block_erase = spi_block_erase_20,
7470 }, {
7471 .eraseblocks = { {64 * 1024, 32} },
7472 .block_erase = spi_block_erase_d8,
7473 }, {
7474 .eraseblocks = { {2 * 1024 * 1024, 1} },
7475 .block_erase = spi_block_erase_c7,
7476 }
7477 },
7478 .unlock = spi_disable_blockprotect,
7479 .write = spi_chip_write_256,
7480 .read = spi_chip_read,
7481 },
7482
7483 {
7484 .vendor = "ST",
Jason Shriver4119e9b2010-09-14 13:16:01 +00007485 .name = "M25PX32",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007486 .bustype = BUS_SPI,
Jason Shriver4119e9b2010-09-14 13:16:01 +00007487 .manufacture_id = ST_ID,
7488 .model_id = ST_M25PX32,
7489 .total_size = 4096,
7490 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007491 .tested = TEST_OK_PRE,
Jason Shriver4119e9b2010-09-14 13:16:01 +00007492 .probe = probe_spi_rdid,
7493 .probe_timing = TIMING_ZERO,
7494 .block_erasers =
7495 {
7496 {
7497 .eraseblocks = { { 4 * 1024, 1024 } },
7498 .block_erase = spi_block_erase_20,
7499 }, {
7500 .eraseblocks = { {64 * 1024, 64} },
7501 .block_erase = spi_block_erase_d8,
7502 }, {
7503 .eraseblocks = { {4 * 1024 * 1024, 1} },
7504 .block_erase = spi_block_erase_c7,
7505 }
7506 },
7507 .unlock = spi_disable_blockprotect,
7508 .write = spi_chip_write_256,
7509 .read = spi_chip_read,
Steven Zakulec7d257b42011-07-19 08:50:18 +00007510 .voltage = {2700, 3600},
Jason Shriver4119e9b2010-09-14 13:16:01 +00007511 },
7512
7513 {
7514 .vendor = "ST",
7515 .name = "M25PX64",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007516 .bustype = BUS_SPI,
Jason Shriver4119e9b2010-09-14 13:16:01 +00007517 .manufacture_id = ST_ID,
7518 .model_id = ST_M25PX64,
7519 .total_size = 8192,
7520 .page_size = 256,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007521 .tested = TEST_OK_PRE,
Jason Shriver4119e9b2010-09-14 13:16:01 +00007522 .probe = probe_spi_rdid,
7523 .probe_timing = TIMING_ZERO,
7524 .block_erasers =
7525 {
7526 {
7527 .eraseblocks = { { 4 * 1024, 2048 } },
7528 .block_erase = spi_block_erase_20,
7529 }, {
7530 .eraseblocks = { {64 * 1024, 128} },
7531 .block_erase = spi_block_erase_d8,
7532 }, {
7533 .eraseblocks = { {8 * 1024 * 1024, 1} },
7534 .block_erase = spi_block_erase_c7,
7535 }
7536 },
7537 .unlock = spi_disable_blockprotect,
7538 .write = spi_chip_write_256,
7539 .read = spi_chip_read,
7540 },
7541
7542 {
7543 .vendor = "ST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007544 .name = "M29F002B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007545 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007546 .manufacture_id = ST_ID,
7547 .model_id = ST_M29F002B,
7548 .total_size = 256,
7549 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007550 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007551 .tested = TEST_UNTESTED,
7552 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00007553 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00007554 .block_erasers =
7555 {
7556 {
7557 .eraseblocks = {
7558 {16 * 1024, 1},
7559 {8 * 1024, 2},
7560 {32 * 1024, 1},
7561 {64 * 1024, 3},
7562 },
7563 .block_erase = erase_sector_jedec,
7564 }, {
7565 .eraseblocks = { {256 * 1024, 1} },
7566 .block_erase = erase_chip_block_jedec,
7567 }
7568 },
Sean Nelson35727f72010-01-28 23:55:12 +00007569 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007570 .read = read_memmapped,
Steven Zakulec7d257b42011-07-19 08:50:18 +00007571 .voltage = {4750, 5250}, /* 4.75-5.25V for type -X, others 4.5-5.5V */
FENG yu ningff692fb2008-12-08 18:15:10 +00007572 },
7573
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007574 {
7575 .vendor = "ST",
7576 .name = "M29F002T/NT",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007577 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007578 .manufacture_id = ST_ID,
7579 .model_id = ST_M29F002T,
7580 .total_size = 256,
7581 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007582 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
7583 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007584 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00007585 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00007586 .block_erasers =
7587 {
7588 {
7589 .eraseblocks = {
7590 {64 * 1024, 3},
7591 {32 * 1024, 1},
7592 {8 * 1024, 2},
7593 {16 * 1024, 1},
7594 },
7595 .block_erase = erase_sector_jedec,
7596 }, {
7597 .eraseblocks = { {256 * 1024, 1} },
7598 .block_erase = erase_chip_block_jedec,
7599 }
7600 },
Sean Nelson35727f72010-01-28 23:55:12 +00007601 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007602 .read = read_memmapped,
Steven Zakulec7d257b42011-07-19 08:50:18 +00007603 .voltage = {4750, 5250}, /* 4.75-5.25V for type -X, others 4.5-5.5V */
FENG yu ningff692fb2008-12-08 18:15:10 +00007604 },
7605
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007606 {
7607 .vendor = "ST",
7608 .name = "M29F040B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007609 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007610 .manufacture_id = ST_ID,
7611 .model_id = ST_M29F040B,
7612 .total_size = 512,
7613 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007614 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
7615 .tested = TEST_UNTESTED,
7616 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +00007617 .probe_timing = TIMING_ZERO, /* datasheet specifies no timing */
Sean Nelson56358aa2010-01-19 16:08:51 +00007618 .block_erasers =
7619 {
7620 {
7621 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00007622 .block_erase = erase_sector_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00007623 }, {
7624 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00007625 .block_erase = erase_chip_block_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00007626 }
7627 },
Sean Nelson35727f72010-01-28 23:55:12 +00007628 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007629 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007630 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00007631 },
7632
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007633 {
Sean Nelson35727f72010-01-28 23:55:12 +00007634 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007635 .vendor = "ST",
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00007636 .name = "M29F400BB",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007637 .bustype = BUS_PARALLEL,
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00007638 .manufacture_id = ST_ID,
7639 .model_id = ST_M29F400BB,
7640 .total_size = 512,
7641 .page_size = 64 * 1024,
7642 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00007643 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00007644 .probe = probe_m29f400bt,
7645 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (m29f400bt.c) */
7646 .block_erasers =
7647 {
7648 {
7649 .eraseblocks = {
7650 {16 * 1024, 1},
7651 {8 * 1024, 2},
7652 {32 * 1024, 1},
7653 {64 * 1024, 7},
7654 },
7655 .block_erase = block_erase_m29f400bt,
7656 }, {
7657 .eraseblocks = { {512 * 1024, 1} },
7658 .block_erase = block_erase_chip_m29f400bt,
7659 }
7660 },
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00007661 .write = write_m29f400bt,
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00007662 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007663 .voltage = {4500, 5500},
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00007664 },
7665 {
7666 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
7667 .vendor = "ST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007668 .name = "M29F400BT",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007669 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007670 .manufacture_id = ST_ID,
7671 .model_id = ST_M29F400BT,
7672 .total_size = 512,
7673 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007674 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007675 .tested = TEST_UNTESTED,
7676 .probe = probe_m29f400bt,
Paul Menzelc07a41c2011-06-19 17:23:55 +00007677 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (m29f400bt.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00007678 .block_erasers =
7679 {
7680 {
7681 .eraseblocks = {
7682 {64 * 1024, 7},
7683 {32 * 1024, 1},
7684 {8 * 1024, 2},
7685 {16 * 1024, 1},
7686 },
7687 .block_erase = block_erase_m29f400bt,
7688 }, {
7689 .eraseblocks = { {512 * 1024, 1} },
7690 .block_erase = block_erase_chip_m29f400bt,
7691 }
7692 },
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00007693 .write = write_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007694 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007695 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00007696 },
7697
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007698 {
7699 .vendor = "ST",
7700 .name = "M29W010B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007701 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007702 .manufacture_id = ST_ID,
7703 .model_id = ST_M29W010B,
7704 .total_size = 128,
7705 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007706 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007707 .tested = TEST_UNTESTED,
7708 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00007709 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00007710 .block_erasers =
7711 {
7712 {
7713 .eraseblocks = { {16 * 1024, 8}, },
7714 .block_erase = erase_sector_jedec,
7715 }, {
7716 .eraseblocks = { {128 * 1024, 1} },
7717 .block_erase = erase_chip_block_jedec,
7718 }
7719 },
Sean Nelson35727f72010-01-28 23:55:12 +00007720 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007721 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007722 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007723 },
7724
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007725 {
7726 .vendor = "ST",
7727 .name = "M29W040B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007728 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007729 .manufacture_id = ST_ID,
7730 .model_id = ST_M29W040B,
7731 .total_size = 512,
7732 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007733 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007734 .tested = TEST_UNTESTED,
7735 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00007736 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00007737 .block_erasers =
7738 {
7739 {
7740 .eraseblocks = { {64 * 1024, 8}, },
7741 .block_erase = erase_sector_jedec,
7742 }, {
7743 .eraseblocks = { {512 * 1024, 1} },
7744 .block_erase = erase_chip_block_jedec,
7745 }
7746 },
Sean Nelson35727f72010-01-28 23:55:12 +00007747 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007748 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007749 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007750 },
7751
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00007752 {
7753 .vendor = "ST",
7754 .name = "M29W512B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007755 .bustype = BUS_PARALLEL,
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00007756 .manufacture_id = ST_ID,
7757 .model_id = ST_M29W512B,
7758 .total_size = 64,
7759 .page_size = 64 * 1024,
7760 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007761 .tested = TEST_OK_PRE,
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00007762 .probe = probe_jedec,
7763 .probe_timing = TIMING_ZERO,
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00007764 .block_erasers =
7765 {
7766 {
7767 .eraseblocks = { {64 * 1024, 1} },
7768 .block_erase = erase_chip_block_jedec,
7769 }
7770 },
7771 .write = write_jedec_1,
7772 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007773 .voltage = {2700, 3600},
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00007774 },
7775
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007776 {
7777 .vendor = "ST",
7778 .name = "M50FLW040A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007779 .bustype = BUS_FWH | BUS_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007780 .manufacture_id = ST_ID,
7781 .model_id = ST_M50FLW040A,
7782 .total_size = 512,
7783 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00007784 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007785 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00007786 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00007787 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00007788 .block_erasers =
7789 {
7790 {
Sean Nelson329bde72010-01-19 16:39:19 +00007791 .eraseblocks = {
Uwe Hermann431f4f72010-09-05 12:41:25 +00007792 {4 * 1024, 16}, /* sector */
Sean Nelson329bde72010-01-19 16:39:19 +00007793 {64 * 1024, 5}, /* block */
7794 {4 * 1024, 16}, /* sector */
7795 {4 * 1024, 16}, /* sector */
7796 },
7797 .block_erase = NULL,
7798 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00007799 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00007800 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00007801 }
7802 },
Sean Nelson28accc22010-03-19 18:47:06 +00007803 .unlock = unlock_stm50flw0x0x,
7804 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007805 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007806 .voltage = {3000, 3600}, /* Also has 12V fast program & erase */
FENG yu ningff692fb2008-12-08 18:15:10 +00007807 },
7808
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007809 {
7810 .vendor = "ST",
7811 .name = "M50FLW040B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007812 .bustype = BUS_FWH | BUS_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007813 .manufacture_id = ST_ID,
7814 .model_id = ST_M50FLW040B,
7815 .total_size = 512,
7816 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00007817 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007818 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00007819 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00007820 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00007821 .block_erasers =
7822 {
7823 {
Sean Nelson329bde72010-01-19 16:39:19 +00007824 .eraseblocks = {
Uwe Hermann431f4f72010-09-05 12:41:25 +00007825 {4 * 1024, 16}, /* sector */
Sean Nelson329bde72010-01-19 16:39:19 +00007826 {4 * 1024, 16}, /* sector */
7827 {64 * 1024, 5}, /* block */
7828 {4 * 1024, 16}, /* sector */
7829 },
7830 .block_erase = NULL,
7831 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00007832 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00007833 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00007834 }
7835 },
Sean Nelson28accc22010-03-19 18:47:06 +00007836 .unlock = unlock_stm50flw0x0x,
7837 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007838 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007839 .voltage = {3000, 3600}, /* Also has 12V fast program & erase */
FENG yu ningff692fb2008-12-08 18:15:10 +00007840 },
7841
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007842 {
7843 .vendor = "ST",
7844 .name = "M50FLW080A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007845 .bustype = BUS_FWH | BUS_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007846 .manufacture_id = ST_ID,
7847 .model_id = ST_M50FLW080A,
7848 .total_size = 1024,
7849 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00007850 .feature_bits = FEATURE_REGISTERMAP,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007851 .tested = TEST_OK_PRE,
Sean Nelson35727f72010-01-28 23:55:12 +00007852 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00007853 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00007854 .block_erasers =
7855 {
7856 {
Sean Nelson329bde72010-01-19 16:39:19 +00007857 .eraseblocks = {
Uwe Hermann431f4f72010-09-05 12:41:25 +00007858 {4 * 1024, 16}, /* sector */
Sean Nelson329bde72010-01-19 16:39:19 +00007859 {64 * 1024, 13}, /* block */
7860 {4 * 1024, 16}, /* sector */
7861 {4 * 1024, 16}, /* sector */
7862 },
7863 .block_erase = NULL,
7864 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00007865 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00007866 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00007867 }
7868 },
Sean Nelson28accc22010-03-19 18:47:06 +00007869 .unlock = unlock_stm50flw0x0x,
7870 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007871 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007872 .voltage = {3000, 3600}, /* Also has 12V fast program & erase */
FENG yu ningff692fb2008-12-08 18:15:10 +00007873 },
7874
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007875 {
7876 .vendor = "ST",
7877 .name = "M50FLW080B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007878 .bustype = BUS_FWH | BUS_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007879 .manufacture_id = ST_ID,
7880 .model_id = ST_M50FLW080B,
7881 .total_size = 1024,
7882 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00007883 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007884 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00007885 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00007886 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00007887 .block_erasers =
7888 {
7889 {
Sean Nelson329bde72010-01-19 16:39:19 +00007890 .eraseblocks = {
Uwe Hermann431f4f72010-09-05 12:41:25 +00007891 {4 * 1024, 16}, /* sector */
Sean Nelson329bde72010-01-19 16:39:19 +00007892 {4 * 1024, 16}, /* sector */
7893 {64 * 1024, 13}, /* block */
7894 {4 * 1024, 16}, /* sector */
7895 },
7896 .block_erase = NULL,
7897 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00007898 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00007899 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00007900 }
7901 },
Sean Nelson28accc22010-03-19 18:47:06 +00007902 .unlock = unlock_stm50flw0x0x,
7903 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007904 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007905 .voltage = {3000, 3600}, /* Also has 12V fast program & erase */
FENG yu ningff692fb2008-12-08 18:15:10 +00007906 },
7907
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007908 {
7909 .vendor = "ST",
7910 .name = "M50FW002",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007911 .bustype = BUS_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007912 .manufacture_id = ST_ID,
7913 .model_id = ST_M50FW002,
7914 .total_size = 256,
7915 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00007916 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007917 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00007918 .probe = probe_82802ab,
Paul Menzelc07a41c2011-06-19 17:23:55 +00007919 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (sst49lfxxxc.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00007920 .block_erasers =
7921 {
7922 {
7923 .eraseblocks = {
7924 {64 * 1024, 3},
7925 {32 * 1024, 1},
7926 {8 * 1024, 2},
7927 {16 * 1024, 1},
7928 },
Sean Nelson28accc22010-03-19 18:47:06 +00007929 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00007930 }
7931 },
Sean Nelson28accc22010-03-19 18:47:06 +00007932 .unlock = unlock_stm50flw0x0x,
7933 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007934 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007935 .voltage = {3000, 3600}, /* Also has 12V fast program & erase */
FENG yu ningff692fb2008-12-08 18:15:10 +00007936 },
7937
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007938 {
7939 .vendor = "ST",
7940 .name = "M50FW016",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007941 .bustype = BUS_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007942 .manufacture_id = ST_ID,
7943 .model_id = ST_M50FW016,
7944 .total_size = 2048,
7945 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00007946 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007947 .tested = TEST_UNTESTED,
7948 .probe = probe_82802ab,
Paul Menzelc07a41c2011-06-19 17:23:55 +00007949 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00007950 .block_erasers =
7951 {
7952 {
7953 .eraseblocks = { {64 * 1024, 32}, },
Sean Nelson28accc22010-03-19 18:47:06 +00007954 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00007955 }
7956 },
Sean Nelson28accc22010-03-19 18:47:06 +00007957 .unlock = unlock_stm50flw0x0x,
7958 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007959 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007960 .voltage = {3000, 3600}, /* Also has 12V fast program & erase */
FENG yu ningff692fb2008-12-08 18:15:10 +00007961 },
7962
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007963 {
7964 .vendor = "ST",
7965 .name = "M50FW040",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007966 .bustype = BUS_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007967 .manufacture_id = ST_ID,
7968 .model_id = ST_M50FW040,
7969 .total_size = 512,
7970 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00007971 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00007972 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007973 .probe = probe_82802ab,
Paul Menzelc07a41c2011-06-19 17:23:55 +00007974 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00007975 .block_erasers =
7976 {
7977 {
7978 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00007979 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00007980 }
7981 },
Sean Nelson28accc22010-03-19 18:47:06 +00007982 .unlock = unlock_stm50flw0x0x,
7983 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007984 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007985 .voltage = {3000, 3600}, /* Also has 12V fast program & erase */
FENG yu ningff692fb2008-12-08 18:15:10 +00007986 },
7987
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007988 {
7989 .vendor = "ST",
7990 .name = "M50FW080",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007991 .bustype = BUS_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007992 .manufacture_id = ST_ID,
7993 .model_id = ST_M50FW080,
7994 .total_size = 1024,
7995 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00007996 .feature_bits = FEATURE_REGISTERMAP,
Antony Rheneus0fbba982011-05-26 14:28:51 +00007997 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007998 .probe = probe_82802ab,
Paul Menzelc07a41c2011-06-19 17:23:55 +00007999 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00008000 .block_erasers =
8001 {
8002 {
8003 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00008004 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00008005 }
8006 },
Sean Nelson28accc22010-03-19 18:47:06 +00008007 .unlock = unlock_stm50flw0x0x,
8008 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008009 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008010 .voltage = {3000, 3600}, /* Also has 12V fast program & erase */
FENG yu ningff692fb2008-12-08 18:15:10 +00008011 },
8012
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008013 {
8014 .vendor = "ST",
8015 .name = "M50LPW116",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008016 .bustype = BUS_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008017 .manufacture_id = ST_ID,
8018 .model_id = ST_M50LPW116,
8019 .total_size = 2048,
8020 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00008021 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008022 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00008023 .probe = probe_82802ab,
Udu Ogahc04ee222009-09-05 01:31:32 +00008024 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00008025 .block_erasers =
8026 {
8027 {
8028 .eraseblocks = {
8029 {4 * 1024, 16},
8030 {64 * 1024, 30},
8031 {32 * 1024, 1},
8032 {8 * 1024, 2},
8033 {16 * 1024, 1},
8034 },
Sean Nelson28accc22010-03-19 18:47:06 +00008035 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00008036 }
8037 },
Sean Nelson28accc22010-03-19 18:47:06 +00008038 .unlock = unlock_stm50flw0x0x,
8039 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008040 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008041 .voltage = {3000, 3600}, /* Also has 12V fast program & erase */
FENG yu ningff692fb2008-12-08 18:15:10 +00008042 },
8043
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008044 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00008045 .vendor = "SyncMOS/MoselVitelic",
8046 .name = "{F,S,V}29C51001B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008047 .bustype = BUS_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00008048 .manufacture_id = SYNCMOS_MVC_ID,
8049 .model_id = SM_MVC_29C51001B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008050 .total_size = 128,
Mattias Mattsson4c066502010-07-29 20:01:13 +00008051 .page_size = 512,
Sean Nelson35727f72010-01-28 23:55:12 +00008052 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008053 .tested = TEST_UNTESTED,
8054 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00008055 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00008056 .block_erasers =
8057 {
8058 {
8059 .eraseblocks = { {512, 256} },
8060 .block_erase = erase_sector_jedec,
8061 }, {
8062 .eraseblocks = { {128 * 1024, 1} },
8063 .block_erase = erase_chip_block_jedec,
8064 },
8065 },
Sean Nelson35727f72010-01-28 23:55:12 +00008066 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008067 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008068 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00008069 },
8070
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008071 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00008072 .vendor = "SyncMOS/MoselVitelic",
8073 .name = "{F,S,V}29C51001T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008074 .bustype = BUS_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00008075 .manufacture_id = SYNCMOS_MVC_ID,
8076 .model_id = SM_MVC_29C51001T,
8077 .total_size = 128,
8078 .page_size = 512,
Sean Nelson35727f72010-01-28 23:55:12 +00008079 .feature_bits = FEATURE_EITHER_RESET,
Mattias Mattsson4c066502010-07-29 20:01:13 +00008080 .tested = TEST_UNTESTED,
8081 .probe = probe_jedec,
8082 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
8083 .block_erasers =
8084 {
8085 {
8086 .eraseblocks = { {512, 256} },
8087 .block_erase = erase_sector_jedec,
8088 }, {
8089 .eraseblocks = { {128 * 1024, 1} },
8090 .block_erase = erase_chip_block_jedec,
8091 },
8092 },
8093 .write = write_jedec_1,
8094 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008095 .voltage = {4500, 5500},
Mattias Mattsson4c066502010-07-29 20:01:13 +00008096 },
8097
8098 {
8099 .vendor = "SyncMOS/MoselVitelic",
8100 .name = "{F,S,V}29C51002B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008101 .bustype = BUS_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00008102 .manufacture_id = SYNCMOS_MVC_ID,
8103 .model_id = SM_MVC_29C51002B,
8104 .total_size = 256,
8105 .page_size = 512,
8106 .feature_bits = FEATURE_EITHER_RESET,
8107 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008108 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00008109 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00008110 .block_erasers =
8111 {
8112 {
8113 .eraseblocks = { {512, 512} },
8114 .block_erase = erase_sector_jedec,
8115 }, {
8116 .eraseblocks = { {256 * 1024, 1} },
8117 .block_erase = erase_chip_block_jedec,
8118 },
8119 },
Sean Nelson35727f72010-01-28 23:55:12 +00008120 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008121 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00008122 },
8123
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008124 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00008125 .vendor = "SyncMOS/MoselVitelic",
8126 .name = "{F,S,V}29C51002T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008127 .bustype = BUS_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00008128 .manufacture_id = SYNCMOS_MVC_ID,
8129 .model_id = SM_MVC_29C51002T,
8130 .total_size = 256,
8131 .page_size = 512,
8132 .feature_bits = FEATURE_EITHER_RESET,
Paul Menzel018d4822011-10-21 12:33:07 +00008133 .tested = TEST_OK_PREW,
Mattias Mattsson4c066502010-07-29 20:01:13 +00008134 .probe = probe_jedec,
8135 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
8136 .block_erasers =
8137 {
8138 {
8139 .eraseblocks = { {512, 512} },
8140 .block_erase = erase_sector_jedec,
8141 }, {
8142 .eraseblocks = { {256 * 1024, 1} },
8143 .block_erase = erase_chip_block_jedec,
8144 },
8145 },
8146 .write = write_jedec_1,
8147 .read = read_memmapped,
8148 },
8149
8150 {
8151 .vendor = "SyncMOS/MoselVitelic",
8152 .name = "{F,S,V}29C51004B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008153 .bustype = BUS_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00008154 .manufacture_id = SYNCMOS_MVC_ID,
8155 .model_id = SM_MVC_29C51004B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008156 .total_size = 512,
Mattias Mattsson4c066502010-07-29 20:01:13 +00008157 .page_size = 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00008158 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008159 .tested = TEST_UNTESTED,
8160 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00008161 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00008162 .block_erasers =
8163 {
8164 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00008165 .eraseblocks = { {1024, 512} },
8166 .block_erase = erase_sector_jedec,
8167 }, {
8168 .eraseblocks = { {512 * 1024, 1} },
8169 .block_erase = erase_chip_block_jedec,
8170 },
8171 },
8172 .write = write_jedec_1,
8173 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008174 .voltage = {4500, 5500},
Mattias Mattsson4c066502010-07-29 20:01:13 +00008175 },
8176
8177 {
8178 .vendor = "SyncMOS/MoselVitelic",
8179 .name = "{F,S,V}29C51004T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008180 .bustype = BUS_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00008181 .manufacture_id = SYNCMOS_MVC_ID,
8182 .model_id = SM_MVC_29C51004T,
8183 .total_size = 512,
8184 .page_size = 1024,
8185 .feature_bits = FEATURE_EITHER_RESET,
8186 .tested = TEST_UNTESTED,
8187 .probe = probe_jedec,
8188 .probe_timing = TIMING_ZERO,
8189 .block_erasers =
8190 {
8191 {
8192 .eraseblocks = { {1024, 512} },
8193 .block_erase = erase_sector_jedec,
8194 }, {
8195 .eraseblocks = { {512 * 1024, 1} },
8196 .block_erase = erase_chip_block_jedec,
8197 },
8198 },
8199 .write = write_jedec_1,
8200 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008201 .voltage = {4500, 5500},
Mattias Mattsson4c066502010-07-29 20:01:13 +00008202 },
8203
8204 {
8205 .vendor = "SyncMOS/MoselVitelic",
8206 .name = "{S,V}29C31004B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008207 .bustype = BUS_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00008208 .manufacture_id = SYNCMOS_MVC_ID,
8209 .model_id = SM_MVC_29C31004B,
8210 .total_size = 512,
8211 .page_size = 1024,
8212 .feature_bits = FEATURE_EITHER_RESET,
8213 .tested = TEST_UNTESTED,
8214 .probe = probe_jedec,
8215 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
8216 .block_erasers =
8217 {
8218 {
8219 .eraseblocks = { {1024, 512} },
8220 .block_erase = erase_sector_jedec,
8221 }, {
8222 .eraseblocks = { {512 * 1024, 1} },
8223 .block_erase = erase_chip_block_jedec,
8224 },
8225 },
8226 .write = write_jedec_1,
8227 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008228 .voltage = {3000, 3600},
Mattias Mattsson4c066502010-07-29 20:01:13 +00008229 },
8230
8231 {
8232 .vendor = "SyncMOS/MoselVitelic",
8233 .name = "{S,V}29C31004T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008234 .bustype = BUS_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00008235 .manufacture_id = SYNCMOS_MVC_ID,
8236 .model_id = SM_MVC_29C31004T,
8237 .total_size = 512,
8238 .page_size = 1024,
8239 .feature_bits = FEATURE_EITHER_RESET,
8240 .tested = TEST_UNTESTED,
8241 .probe = probe_jedec,
8242 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
8243 .block_erasers =
8244 {
8245 {
8246 .eraseblocks = { {1024, 512} },
Sean Nelson56358aa2010-01-19 16:08:51 +00008247 .block_erase = erase_sector_jedec,
8248 }, {
8249 .eraseblocks = { {512 * 1024, 1} },
8250 .block_erase = erase_chip_block_jedec,
8251 },
8252 },
Sean Nelson35727f72010-01-28 23:55:12 +00008253 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008254 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008255 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00008256 },
8257
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008258 {
Uwe Hermanna106d152009-05-27 23:17:40 +00008259 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00008260 .name = "TMS29F002RB",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008261 .bustype = BUS_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00008262 .manufacture_id = TI_OLD_ID,
8263 .model_id = TI_TMS29F002RB,
8264 .total_size = 256,
8265 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00008266 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00008267 .tested = TEST_UNTESTED,
8268 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00008269 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00008270 .block_erasers =
8271 {
8272 {
8273 .eraseblocks = {
8274 {16 * 1024, 1},
8275 {8 * 1024, 2},
8276 {32 * 1024, 1},
8277 {64 * 1024, 3},
8278 },
8279 .block_erase = erase_sector_jedec,
8280 }, {
8281 .eraseblocks = { {256 * 1024, 1} },
8282 .block_erase = erase_chip_block_jedec,
8283 },
8284 },
Sean Nelson35727f72010-01-28 23:55:12 +00008285 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00008286 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008287 .voltage = {4500, 5500},
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00008288 },
8289
8290 {
Uwe Hermanna106d152009-05-27 23:17:40 +00008291 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00008292 .name = "TMS29F002RT",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008293 .bustype = BUS_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00008294 .manufacture_id = TI_OLD_ID,
8295 .model_id = TI_TMS29F002RT,
8296 .total_size = 256,
8297 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00008298 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00008299 .tested = TEST_UNTESTED,
8300 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00008301 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00008302 .block_erasers =
8303 {
8304 {
8305 .eraseblocks = {
8306 {64 * 1024, 3},
8307 {32 * 1024, 1},
8308 {8 * 1024, 2},
8309 {16 * 1024, 1},
8310 },
8311 .block_erase = erase_sector_jedec,
8312 }, {
8313 .eraseblocks = { {256 * 1024, 1} },
8314 .block_erase = erase_chip_block_jedec,
8315 },
8316 },
Sean Nelson35727f72010-01-28 23:55:12 +00008317 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00008318 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008319 .voltage = {4500, 5500},
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00008320 },
8321
8322 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008323 .vendor = "Winbond",
Rudolf Marekce1c7982010-04-20 19:34:31 +00008324 .name = "W25Q80",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008325 .bustype = BUS_SPI,
Rudolf Marekce1c7982010-04-20 19:34:31 +00008326 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008327 .model_id = WINBOND_NEX_W25Q80,
Rudolf Marekce1c7982010-04-20 19:34:31 +00008328 .total_size = 1024,
8329 .page_size = 256,
Daniel Lenski65922a32012-02-15 23:40:23 +00008330 /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42 */
8331 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
David Hendricks22e05322010-12-13 23:54:59 +00008332 .tested = TEST_OK_PREW,
Rudolf Marekce1c7982010-04-20 19:34:31 +00008333 .probe = probe_spi_rdid,
8334 .probe_timing = TIMING_ZERO,
8335 .block_erasers =
8336 {
8337 {
8338 .eraseblocks = { {4 * 1024, 256} },
8339 .block_erase = spi_block_erase_20,
8340 }, {
8341 .eraseblocks = { {32 * 1024, 32} },
8342 .block_erase = spi_block_erase_52,
8343 }, {
8344 .eraseblocks = { {64 * 1024, 16} },
8345 .block_erase = spi_block_erase_d8,
8346 }, {
8347 .eraseblocks = { {1024 * 1024, 1} },
8348 .block_erase = spi_block_erase_60,
8349 }, {
8350 .eraseblocks = { {1024 * 1024, 1} },
8351 .block_erase = spi_block_erase_c7,
8352 }
8353 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00008354 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00008355 .write = spi_chip_write_256,
8356 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008357 .voltage = {2700, 3600},
Rudolf Marekce1c7982010-04-20 19:34:31 +00008358 },
8359
8360 {
8361 .vendor = "Winbond",
8362 .name = "W25Q16",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008363 .bustype = BUS_SPI,
Rudolf Marekce1c7982010-04-20 19:34:31 +00008364 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008365 .model_id = WINBOND_NEX_W25Q16,
Rudolf Marekce1c7982010-04-20 19:34:31 +00008366 .total_size = 2048,
8367 .page_size = 256,
Daniel Lenski65922a32012-02-15 23:40:23 +00008368 /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42 */
8369 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
Stefan Tauner716e0982011-07-25 20:38:52 +00008370 .tested = TEST_OK_PREW,
Rudolf Marekce1c7982010-04-20 19:34:31 +00008371 .probe = probe_spi_rdid,
8372 .probe_timing = TIMING_ZERO,
8373 .block_erasers =
8374 {
8375 {
8376 .eraseblocks = { {4 * 1024, 512} },
8377 .block_erase = spi_block_erase_20,
8378 }, {
8379 .eraseblocks = { {32 * 1024, 64} },
8380 .block_erase = spi_block_erase_52,
8381 }, {
8382 .eraseblocks = { {64 * 1024, 32} },
8383 .block_erase = spi_block_erase_d8,
8384 }, {
8385 .eraseblocks = { {2 * 1024 * 1024, 1} },
8386 .block_erase = spi_block_erase_60,
8387 }, {
8388 .eraseblocks = { {2 * 1024 * 1024, 1} },
8389 .block_erase = spi_block_erase_c7,
8390 }
8391 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00008392 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00008393 .write = spi_chip_write_256,
8394 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008395 .voltage = {2700, 3600},
Rudolf Marekce1c7982010-04-20 19:34:31 +00008396 },
8397
8398 {
8399 .vendor = "Winbond",
8400 .name = "W25Q32",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008401 .bustype = BUS_SPI,
Rudolf Marekce1c7982010-04-20 19:34:31 +00008402 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008403 .model_id = WINBOND_NEX_W25Q32,
Rudolf Marekce1c7982010-04-20 19:34:31 +00008404 .total_size = 4096,
8405 .page_size = 256,
Daniel Lenski65922a32012-02-15 23:40:23 +00008406 /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42 */
8407 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
David Hendricks22e05322010-12-13 23:54:59 +00008408 .tested = TEST_OK_PREW,
Rudolf Marekce1c7982010-04-20 19:34:31 +00008409 .probe = probe_spi_rdid,
8410 .probe_timing = TIMING_ZERO,
8411 .block_erasers =
8412 {
8413 {
8414 .eraseblocks = { {4 * 1024, 1024} },
8415 .block_erase = spi_block_erase_20,
8416 }, {
8417 .eraseblocks = { {32 * 1024, 128} },
8418 .block_erase = spi_block_erase_52,
8419 }, {
8420 .eraseblocks = { {64 * 1024, 64} },
8421 .block_erase = spi_block_erase_d8,
8422 }, {
8423 .eraseblocks = { {4 * 1024 * 1024, 1} },
8424 .block_erase = spi_block_erase_60,
8425 }, {
8426 .eraseblocks = { {4 * 1024 * 1024, 1} },
8427 .block_erase = spi_block_erase_c7,
8428 }
8429 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00008430 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00008431 .write = spi_chip_write_256,
8432 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008433 .voltage = {2700, 3600},
Rudolf Marekce1c7982010-04-20 19:34:31 +00008434 },
8435
8436 {
8437 .vendor = "Winbond",
David Hendricksc4acec92010-06-24 11:39:57 +00008438 .name = "W25Q64",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008439 .bustype = BUS_SPI,
David Hendricksc4acec92010-06-24 11:39:57 +00008440 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008441 .model_id = WINBOND_NEX_W25Q64,
David Hendricksc4acec92010-06-24 11:39:57 +00008442 .total_size = 8192,
8443 .page_size = 256,
Daniel Lenski65922a32012-02-15 23:40:23 +00008444 /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42 */
8445 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
David Hendricks22e05322010-12-13 23:54:59 +00008446 .tested = TEST_OK_PREW,
David Hendricksc4acec92010-06-24 11:39:57 +00008447 .probe = probe_spi_rdid,
8448 .probe_timing = TIMING_ZERO,
8449 .block_erasers =
8450 {
8451 {
8452 .eraseblocks = { {4 * 1024, 2048} },
8453 .block_erase = spi_block_erase_20,
8454 }, {
8455 .eraseblocks = { {32 * 1024, 256} },
8456 .block_erase = spi_block_erase_52,
8457 }, {
8458 .eraseblocks = { {64 * 1024, 128} },
8459 .block_erase = spi_block_erase_d8,
8460 }, {
8461 .eraseblocks = { {8 * 1024 * 1024, 1} },
8462 .block_erase = spi_block_erase_60,
8463 }, {
8464 .eraseblocks = { {8 * 1024 * 1024, 1} },
8465 .block_erase = spi_block_erase_c7,
8466 }
8467 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00008468 .unlock = spi_disable_blockprotect,
David Hendricksc4acec92010-06-24 11:39:57 +00008469 .write = spi_chip_write_256,
8470 .read = spi_chip_read,
8471 },
8472
8473 {
8474 .vendor = "Winbond",
Antony Rheneus0fbba982011-05-26 14:28:51 +00008475 .name = "W25Q128",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008476 .bustype = BUS_SPI,
Antony Rheneus0fbba982011-05-26 14:28:51 +00008477 .manufacture_id = WINBOND_NEX_ID,
8478 .model_id = WINBOND_NEX_W25Q128,
8479 .total_size = 16384,
8480 .page_size = 256,
Daniel Lenski65922a32012-02-15 23:40:23 +00008481 /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42 */
8482 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
Antony Rheneus0fbba982011-05-26 14:28:51 +00008483 .tested = TEST_OK_PROBE,
8484 .probe = probe_spi_rdid,
8485 .probe_timing = TIMING_ZERO,
8486 .block_erasers =
8487 {
8488 {
8489 .eraseblocks = { {4 * 1024, 4096} },
8490 .block_erase = spi_block_erase_20,
8491 }, {
8492 .eraseblocks = { {32 * 1024, 512} },
8493 .block_erase = spi_block_erase_52,
8494 }, {
8495 .eraseblocks = { {64 * 1024, 256} },
8496 .block_erase = spi_block_erase_d8,
8497 }, {
8498 .eraseblocks = { {16 * 1024 * 1024, 1} },
8499 .block_erase = spi_block_erase_60,
8500 }, {
8501 .eraseblocks = { {16 * 1024 * 1024, 1} },
8502 .block_erase = spi_block_erase_c7,
8503 }
8504 },
8505 .unlock = spi_disable_blockprotect,
8506 .write = spi_chip_write_256,
8507 .read = spi_chip_read,
8508 },
8509
8510 {
8511 .vendor = "Winbond",
Cristian Măgherușan-Stanciu9932c7b2011-07-07 19:56:58 +00008512 .name = "W25X10",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008513 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008514 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008515 .model_id = WINBOND_NEX_W25X10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008516 .total_size = 128,
8517 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00008518 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008519 .tested = TEST_UNTESTED,
8520 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00008521 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008522 .block_erasers =
8523 {
8524 {
8525 .eraseblocks = { {4 * 1024, 32} },
8526 .block_erase = spi_block_erase_20,
8527 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008528 .eraseblocks = { {64 * 1024, 2} },
8529 .block_erase = spi_block_erase_d8,
8530 }, {
8531 .eraseblocks = { {128 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008532 .block_erase = spi_block_erase_c7,
8533 }
8534 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00008535 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00008536 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008537 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008538 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00008539 },
8540
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008541 {
8542 .vendor = "Winbond",
Cristian Măgherușan-Stanciu9932c7b2011-07-07 19:56:58 +00008543 .name = "W25X20",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008544 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008545 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008546 .model_id = WINBOND_NEX_W25X20,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008547 .total_size = 256,
8548 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00008549 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008550 .tested = TEST_UNTESTED,
8551 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00008552 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008553 .block_erasers =
8554 {
8555 {
8556 .eraseblocks = { {4 * 1024, 64} },
8557 .block_erase = spi_block_erase_20,
8558 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008559 .eraseblocks = { {64 * 1024, 4} },
8560 .block_erase = spi_block_erase_d8,
8561 }, {
8562 .eraseblocks = { {256 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008563 .block_erase = spi_block_erase_c7,
8564 }
8565 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00008566 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00008567 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008568 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008569 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00008570 },
8571
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008572 {
8573 .vendor = "Winbond",
Cristian Măgherușan-Stanciu9932c7b2011-07-07 19:56:58 +00008574 .name = "W25X40",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008575 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008576 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008577 .model_id = WINBOND_NEX_W25X40,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008578 .total_size = 512,
8579 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00008580 .feature_bits = FEATURE_WRSR_WREN,
David Hendricks567b7b82011-05-18 01:31:03 +00008581 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008582 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00008583 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008584 .block_erasers =
8585 {
8586 {
8587 .eraseblocks = { {4 * 1024, 128} },
8588 .block_erase = spi_block_erase_20,
8589 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008590 .eraseblocks = { {64 * 1024, 8} },
8591 .block_erase = spi_block_erase_d8,
8592 }, {
8593 .eraseblocks = { {512 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008594 .block_erase = spi_block_erase_c7,
8595 }
8596 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00008597 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00008598 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008599 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008600 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00008601 },
8602
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008603 {
8604 .vendor = "Winbond",
Cristian Măgherușan-Stanciu9932c7b2011-07-07 19:56:58 +00008605 .name = "W25X80",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008606 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008607 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008608 .model_id = WINBOND_NEX_W25X80,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008609 .total_size = 1024,
8610 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00008611 .feature_bits = FEATURE_WRSR_WREN,
Yul Rottmann6d6ab742011-03-05 16:31:57 +00008612 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008613 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00008614 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008615 .block_erasers =
8616 {
8617 {
8618 .eraseblocks = { {4 * 1024, 256} },
8619 .block_erase = spi_block_erase_20,
8620 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008621 .eraseblocks = { {64 * 1024, 16} },
8622 .block_erase = spi_block_erase_d8,
8623 }, {
8624 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008625 .block_erase = spi_block_erase_c7,
8626 }
8627 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00008628 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00008629 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008630 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008631 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00008632 },
8633
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008634 {
8635 .vendor = "Winbond",
Cristian Măgherușan-Stanciu9932c7b2011-07-07 19:56:58 +00008636 .name = "W25X16",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008637 .bustype = BUS_SPI,
Hector Martina721ae22009-07-11 19:39:11 +00008638 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008639 .model_id = WINBOND_NEX_W25X16,
Hector Martina721ae22009-07-11 19:39:11 +00008640 .total_size = 2048,
8641 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00008642 .feature_bits = FEATURE_WRSR_WREN,
Stefan Tauner8179be52011-06-04 13:13:34 +00008643 .tested = TEST_OK_PREW,
Hector Martina721ae22009-07-11 19:39:11 +00008644 .probe = probe_spi_rdid,
8645 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008646 .block_erasers =
8647 {
8648 {
8649 .eraseblocks = { {4 * 1024, 512} },
8650 .block_erase = spi_block_erase_20,
8651 }, {
8652 .eraseblocks = { {32 * 1024, 64} },
8653 .block_erase = spi_block_erase_52,
8654 }, {
8655 .eraseblocks = { {64 * 1024, 32} },
8656 .block_erase = spi_block_erase_d8,
8657 }, {
8658 .eraseblocks = { {2 * 1024 * 1024, 1} },
8659 .block_erase = spi_block_erase_60,
8660 }, {
8661 .eraseblocks = { {2 * 1024 * 1024, 1} },
8662 .block_erase = spi_block_erase_c7,
8663 }
8664 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00008665 .unlock = spi_disable_blockprotect,
Hector Martina721ae22009-07-11 19:39:11 +00008666 .write = spi_chip_write_256,
8667 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008668 .voltage = {2700, 3600},
Hector Martina721ae22009-07-11 19:39:11 +00008669 },
8670
8671 {
8672 .vendor = "Winbond",
Cristian Măgherușan-Stanciu9932c7b2011-07-07 19:56:58 +00008673 .name = "W25X32",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008674 .bustype = BUS_SPI,
Zheng Bao1db2b752009-11-26 11:05:01 +00008675 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008676 .model_id = WINBOND_NEX_W25X32,
Zheng Bao1db2b752009-11-26 11:05:01 +00008677 .total_size = 4096,
8678 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00008679 .feature_bits = FEATURE_WRSR_WREN,
Zheng Bao1db2b752009-11-26 11:05:01 +00008680 .tested = TEST_OK_PROBE,
8681 .probe = probe_spi_rdid,
8682 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008683 .block_erasers =
8684 {
8685 {
8686 .eraseblocks = { {4 * 1024, 1024} },
8687 .block_erase = spi_block_erase_20,
8688 }, {
8689 .eraseblocks = { {32 * 1024, 128} },
8690 .block_erase = spi_block_erase_52,
8691 }, {
8692 .eraseblocks = { {64 * 1024, 64} },
8693 .block_erase = spi_block_erase_d8,
8694 }, {
8695 .eraseblocks = { {4 * 1024 * 1024, 1} },
8696 .block_erase = spi_block_erase_60,
8697 }, {
8698 .eraseblocks = { {4 * 1024 * 1024, 1} },
8699 .block_erase = spi_block_erase_c7,
8700 }
8701 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00008702 .unlock = spi_disable_blockprotect,
Zheng Bao1db2b752009-11-26 11:05:01 +00008703 .write = spi_chip_write_256,
8704 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008705 .voltage = {2700, 3600},
Zheng Bao1db2b752009-11-26 11:05:01 +00008706 },
8707
8708 {
8709 .vendor = "Winbond",
Cristian Măgherușan-Stanciu9932c7b2011-07-07 19:56:58 +00008710 .name = "W25X64",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008711 .bustype = BUS_SPI,
Zheng Bao1db2b752009-11-26 11:05:01 +00008712 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008713 .model_id = WINBOND_NEX_W25X64,
Zheng Bao1db2b752009-11-26 11:05:01 +00008714 .total_size = 8192,
8715 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00008716 .feature_bits = FEATURE_WRSR_WREN,
Antony Rheneus0fbba982011-05-26 14:28:51 +00008717 .tested = TEST_OK_PROBE,
Zheng Bao1db2b752009-11-26 11:05:01 +00008718 .probe = probe_spi_rdid,
8719 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008720 .block_erasers =
8721 {
8722 {
8723 .eraseblocks = { {4 * 1024, 2048} },
8724 .block_erase = spi_block_erase_20,
8725 }, {
8726 .eraseblocks = { {32 * 1024, 256} },
8727 .block_erase = spi_block_erase_52,
8728 }, {
8729 .eraseblocks = { {64 * 1024, 128} },
8730 .block_erase = spi_block_erase_d8,
8731 }, {
8732 .eraseblocks = { {8 * 1024 * 1024, 1} },
8733 .block_erase = spi_block_erase_60,
8734 }, {
8735 .eraseblocks = { {8 * 1024 * 1024, 1} },
8736 .block_erase = spi_block_erase_c7,
8737 }
8738 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00008739 .unlock = spi_disable_blockprotect,
Zheng Bao1db2b752009-11-26 11:05:01 +00008740 .write = spi_chip_write_256,
8741 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008742 .voltage = {2700, 3600},
Zheng Bao1db2b752009-11-26 11:05:01 +00008743 },
8744
8745 {
8746 .vendor = "Winbond",
Carl-Daniel Hailfinger2e88a9f2011-07-26 14:18:52 +00008747 .name = "W29C010(M)/W29C011A/W29EE011/W29EE012-old",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008748 .bustype = BUS_PARALLEL,
Carl-Daniel Hailfinger2e88a9f2011-07-26 14:18:52 +00008749 .manufacture_id = WINBOND_ID,
8750 .model_id = WINBOND_W29C010,
8751 .total_size = 128,
8752 .page_size = 128,
8753 .feature_bits = FEATURE_LONG_RESET,
8754 .tested = TEST_OK_PRE,
8755 .probe = probe_w29ee011,
8756 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (w29ee011.c) */
8757 .block_erasers =
8758 {
8759 {
8760 .eraseblocks = { {128 * 1024, 1} },
8761 .block_erase = erase_chip_block_jedec,
8762 }
8763 },
8764 .write = write_jedec,
8765 .read = read_memmapped,
8766 },
8767
8768 {/* W29EE011, W29EE012, W29C010M, W29C011A do not support probe_jedec according to the datasheet, but it works for newer(?) steppings. */
8769 .vendor = "Winbond",
Mattias Mattssona745cf42010-09-14 23:56:56 +00008770 .name = "W29C010(M)/W29C011A/W29EE011/W29EE012",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008771 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008772 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008773 .model_id = WINBOND_W29C010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008774 .total_size = 128,
8775 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00008776 .feature_bits = FEATURE_LONG_RESET,
David Hendricks567b7b82011-05-18 01:31:03 +00008777 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008778 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00008779 .probe_timing = 10, /* used datasheet for the W29C011A */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008780 .block_erasers =
8781 {
8782 {
8783 .eraseblocks = { {128 * 1024, 1} },
8784 .block_erase = erase_chip_block_jedec,
8785 }
8786 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008787 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008788 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00008789 },
8790
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008791 {
8792 .vendor = "Winbond",
Mattias Mattssona745cf42010-09-14 23:56:56 +00008793 .name = "W29C020(C)/W29C022",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008794 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008795 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008796 .model_id = WINBOND_W29C020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008797 .total_size = 256,
8798 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00008799 .feature_bits = FEATURE_LONG_RESET,
Cristian Măgherușan-Stanciu9932c7b2011-07-07 19:56:58 +00008800 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008801 .probe = probe_jedec,
Cristian Măgherușan-Stanciu9932c7b2011-07-07 19:56:58 +00008802 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008803 .block_erasers =
8804 {
8805 {
8806 .eraseblocks = { {256 * 1024, 1} },
8807 .block_erase = erase_chip_block_jedec,
8808 }
8809 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008810 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008811 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008812 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00008813 },
8814
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008815 {
8816 .vendor = "Winbond",
Mattias Mattssona745cf42010-09-14 23:56:56 +00008817 .name = "W29C040/P",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008818 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008819 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008820 .model_id = WINBOND_W29C040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008821 .total_size = 512,
8822 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00008823 .feature_bits = FEATURE_LONG_RESET,
8824 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008825 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00008826 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008827 .block_erasers =
8828 {
8829 {
8830 .eraseblocks = { {512 * 1024, 1} },
8831 .block_erase = erase_chip_block_jedec,
8832 }
8833 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008834 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008835 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008836 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00008837 },
8838
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008839 {
8840 .vendor = "Winbond",
Michael Karcher19e0aac2011-03-06 17:58:05 +00008841 .name = "W39L040",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008842 .bustype = BUS_PARALLEL,
Michael Karcher19e0aac2011-03-06 17:58:05 +00008843 .manufacture_id = WINBOND_ID,
8844 .model_id = WINBOND_W39L040,
8845 .total_size = 512,
8846 .page_size = 64 * 1024,
8847 .feature_bits = FEATURE_EITHER_RESET,
8848 .tested = TEST_OK_PR,
8849 .probe = probe_jedec,
8850 .probe_timing = 10,
8851 .block_erasers =
8852 {
8853 {
8854 .eraseblocks = { {4 * 1024, 128} },
8855 .block_erase = erase_block_jedec,
8856 }, {
8857 .eraseblocks = { {64 * 1024, 8} },
8858 .block_erase = erase_sector_jedec,
8859 }, {
8860 .eraseblocks = { {512 * 1024, 1} },
8861 .block_erase = erase_chip_block_jedec,
8862 }
8863 },
8864 .printlock = printlock_w39l040,
8865 .write = write_jedec_1,
8866 .read = read_memmapped,
Steven Zakulec7d257b42011-07-19 08:50:18 +00008867 .voltage = {3000, 3600},
Michael Karcher19e0aac2011-03-06 17:58:05 +00008868 },
8869
8870 {
8871 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008872 .name = "W39V040A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008873 .bustype = BUS_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008874 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008875 .model_id = WINBOND_W39V040A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008876 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00008877 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00008878 .feature_bits = FEATURE_EITHER_RESET,
Stefan Tauner716e0982011-07-25 20:38:52 +00008879 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008880 .probe = probe_jedec,
Stefan Tauner716e0982011-07-25 20:38:52 +00008881 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008882 .block_erasers =
8883 {
8884 {
8885 .eraseblocks = { {64 * 1024, 8} },
8886 .block_erase = erase_sector_jedec,
8887 }, {
8888 .eraseblocks = { {512 * 1024, 1} },
8889 .block_erase = erase_chip_block_jedec,
8890 }
8891 },
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00008892 .printlock = printlock_w39v040a,
Sean Nelson35727f72010-01-28 23:55:12 +00008893 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008894 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008895 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00008896 },
8897
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008898 {
8899 .vendor = "Winbond",
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00008900 .name = "W39V040B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008901 .bustype = BUS_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008902 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008903 .model_id = WINBOND_W39V040B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008904 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00008905 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00008906 .feature_bits = FEATURE_EITHER_RESET,
Paul Menzel018d4822011-10-21 12:33:07 +00008907 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008908 .probe = probe_jedec,
Paul Menzel018d4822011-10-21 12:33:07 +00008909 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008910 .block_erasers =
8911 {
8912 {
8913 .eraseblocks = { {64 * 1024, 8} },
8914 .block_erase = erase_sector_jedec,
8915 }, {
8916 .eraseblocks = { {512 * 1024, 1} },
8917 .block_erase = erase_chip_block_jedec,
8918 }
8919 },
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00008920 .printlock = printlock_w39v040b,
Sean Nelson35727f72010-01-28 23:55:12 +00008921 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008922 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008923 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00008924 },
8925
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008926 {
8927 .vendor = "Winbond",
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00008928 .name = "W39V040C",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008929 .bustype = BUS_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008930 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008931 .model_id = WINBOND_W39V040C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008932 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00008933 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00008934 .feature_bits = FEATURE_EITHER_RESET,
Paul Menzel018d4822011-10-21 12:33:07 +00008935 .tested = TEST_OK_PREW,
Sean Nelson35727f72010-01-28 23:55:12 +00008936 .probe = probe_jedec,
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00008937 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008938 .block_erasers =
8939 {
8940 {
8941 .eraseblocks = { {64 * 1024, 8} },
8942 .block_erase = erase_sector_jedec,
8943 }, {
8944 .eraseblocks = { {512 * 1024, 1} },
8945 .block_erase = erase_chip_block_jedec,
8946 }
8947 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00008948 .printlock = printlock_w39v040c,
Sean Nelson35727f72010-01-28 23:55:12 +00008949 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008950 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008951 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00008952 },
8953
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008954 {
8955 .vendor = "Winbond",
8956 .name = "W39V040FA",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008957 .bustype = BUS_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008958 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008959 .model_id = WINBOND_W39V040FA,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008960 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00008961 .page_size = 64 * 1024,
Michael Karcherc9b63412010-05-30 16:55:18 +00008962 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Antony Rheneus0fbba982011-05-26 14:28:51 +00008963 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008964 .probe = probe_jedec,
Antony Rheneus0fbba982011-05-26 14:28:51 +00008965 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008966 .block_erasers =
8967 {
8968 {
8969 .eraseblocks = { {4 * 1024, 128} },
8970 .block_erase = erase_block_jedec,
8971 }, {
8972 .eraseblocks = { {64 * 1024, 8} },
8973 .block_erase = erase_sector_jedec,
8974 }, {
8975 .eraseblocks = { {512 * 1024, 1} },
8976 .block_erase = erase_chip_block_jedec,
8977 }
8978 },
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00008979 .printlock = printlock_w39v040fa,
Michael Karcherc9b63412010-05-30 16:55:18 +00008980 .unlock = unlock_sst_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00008981 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008982 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008983 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00008984 },
8985
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008986 {
8987 .vendor = "Winbond",
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00008988 .name = "W39V040FB",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008989 .bustype = BUS_FWH,
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00008990 .manufacture_id = WINBOND_ID,
8991 .model_id = WINBOND_W39V040B,
8992 .total_size = 512,
8993 .page_size = 64 * 1024,
8994 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Idwer Vollering67f28142011-03-06 22:26:23 +00008995 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00008996 .probe = probe_jedec,
8997 .probe_timing = 10,
8998 .block_erasers =
8999 {
9000 {
9001 .eraseblocks = { {64 * 1024, 8} },
9002 .block_erase = erase_sector_jedec,
9003 }, {
9004 .eraseblocks = { {512 * 1024, 1} },
9005 .block_erase = erase_chip_block_jedec,
9006 }
9007 },
9008 .printlock = printlock_w39v040fb,
Idwer Volleringecc67072010-12-26 23:55:12 +00009009 .unlock = unlock_w39v040fb,
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00009010 .write = write_jedec_1,
9011 .read = read_memmapped,
Steven Zakulec7d257b42011-07-19 08:50:18 +00009012 .voltage = {3000, 3600}, /* Also has 12V fast program */
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00009013 },
9014
9015 {
9016 .vendor = "Winbond",
9017 .name = "W39V040FC",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009018 .bustype = BUS_FWH,
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00009019 .manufacture_id = WINBOND_ID,
9020 .model_id = WINBOND_W39V040C,
9021 .total_size = 512,
9022 .page_size = 64 * 1024,
9023 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stefan Tauneraf2db612011-12-02 21:48:17 +00009024 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00009025 .probe = probe_jedec,
9026 .probe_timing = 10,
9027 .block_erasers =
9028 {
9029 {
9030 .eraseblocks = { {64 * 1024, 8} },
9031 .block_erase = erase_sector_jedec,
9032 }, {
9033 .eraseblocks = { {512 * 1024, 1} },
9034 .block_erase = erase_chip_block_jedec,
9035 }
9036 },
9037 .printlock = printlock_w39v040fc,
9038 .write = write_jedec_1,
9039 .read = read_memmapped,
Steven Zakulec7d257b42011-07-19 08:50:18 +00009040 .voltage = {3000, 3600}, /* Also has 12V fast program */
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00009041 },
9042
9043 {
9044 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009045 .name = "W39V080A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009046 .bustype = BUS_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009047 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00009048 .model_id = WINBOND_W39V080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009049 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00009050 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00009051 .feature_bits = FEATURE_EITHER_RESET,
Paul Menzelac427b22012-02-16 21:07:07 +00009052 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009053 .probe = probe_jedec,
Paul Menzelac427b22012-02-16 21:07:07 +00009054 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00009055 .block_erasers =
9056 {
9057 {
9058 .eraseblocks = { {64 * 1024, 16} },
9059 .block_erase = erase_sector_jedec,
9060 }, {
9061 .eraseblocks = { {1024 * 1024, 1} },
9062 .block_erase = erase_chip_block_jedec,
9063 }
9064 },
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00009065 .printlock = printlock_w39v080a,
Sean Nelson35727f72010-01-28 23:55:12 +00009066 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00009067 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00009068 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00009069 },
9070
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009071 {
9072 .vendor = "Winbond",
Mattias Mattssona745cf42010-09-14 23:56:56 +00009073 .name = "W49F002U/N",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009074 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009075 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00009076 .model_id = WINBOND_W49F002U,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009077 .total_size = 256,
9078 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00009079 .feature_bits = FEATURE_EITHER_RESET,
Stefan Tauner716e0982011-07-25 20:38:52 +00009080 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009081 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00009082 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00009083 .block_erasers =
9084 {
9085 {
9086 .eraseblocks = {
9087 {128 * 1024, 1},
9088 {96 * 1024, 1},
9089 {8 * 1024, 2},
9090 {16 * 1024, 1},
9091 },
9092 .block_erase = erase_sector_jedec,
9093 }, {
9094 .eraseblocks = { {256 * 1024, 1} },
9095 .block_erase = erase_chip_block_jedec,
9096 }
9097 },
Sean Nelson35727f72010-01-28 23:55:12 +00009098 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00009099 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00009100 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00009101 },
9102
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009103 {
9104 .vendor = "Winbond",
Carl-Daniel Hailfingerabebe6b2010-07-17 13:45:42 +00009105 .name = "W49F020",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009106 .bustype = BUS_PARALLEL,
Carl-Daniel Hailfingerabebe6b2010-07-17 13:45:42 +00009107 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00009108 .model_id = WINBOND_W49F020,
Carl-Daniel Hailfingerabebe6b2010-07-17 13:45:42 +00009109 .total_size = 256,
9110 .page_size = 128,
9111 .feature_bits = FEATURE_EITHER_RESET,
9112 .tested = TEST_OK_PROBE,
9113 .probe = probe_jedec,
9114 .probe_timing = 10,
9115 .block_erasers =
9116 {
9117 {
9118 .eraseblocks = { {256 * 1024, 1} },
9119 .block_erase = erase_chip_block_jedec,
9120 }
9121 },
9122 .write = write_jedec_1,
9123 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00009124 .voltage = {4500, 5500},
Carl-Daniel Hailfingerabebe6b2010-07-17 13:45:42 +00009125 },
9126
9127 {
9128 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009129 .name = "W49V002A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009130 .bustype = BUS_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009131 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00009132 .model_id = WINBOND_W49V002A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009133 .total_size = 256,
9134 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00009135 .feature_bits = FEATURE_EITHER_RESET,
Cristian Măgherușan-Stanciu9932c7b2011-07-07 19:56:58 +00009136 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009137 .probe = probe_jedec,
Cristian Măgherușan-Stanciu9932c7b2011-07-07 19:56:58 +00009138 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00009139 .block_erasers =
9140 {
9141 {
9142 .eraseblocks = {
9143 {64 * 1024, 3},
9144 {32 * 1024, 1},
9145 {8 * 1024, 2},
9146 {16 * 1024, 1},
9147 },
9148 .block_erase = erase_sector_jedec,
9149 }, {
9150 .eraseblocks = { {256 * 1024, 1} },
9151 .block_erase = erase_chip_block_jedec,
9152 }
9153 },
Sean Nelson35727f72010-01-28 23:55:12 +00009154 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00009155 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00009156 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00009157 },
9158
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009159 {
9160 .vendor = "Winbond",
9161 .name = "W49V002FA",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009162 .bustype = BUS_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009163 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00009164 .model_id = WINBOND_W49V002FA,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009165 .total_size = 256,
9166 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00009167 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00009168 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009169 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00009170 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00009171 .block_erasers =
9172 {
9173 {
9174 .eraseblocks = {
9175 {64 * 1024, 3},
9176 {32 * 1024, 1},
9177 {8 * 1024, 2},
9178 {16 * 1024, 1},
9179 },
9180 .block_erase = erase_sector_jedec,
9181 }, {
9182 .eraseblocks = { {256 * 1024, 1} },
9183 .block_erase = erase_chip_block_jedec,
9184 }
9185 },
Sean Nelson35727f72010-01-28 23:55:12 +00009186 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00009187 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00009188 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00009189 },
9190
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009191 {
9192 .vendor = "Winbond",
9193 .name = "W39V080FA",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009194 .bustype = BUS_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009195 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00009196 .model_id = WINBOND_W39V080FA,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009197 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00009198 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00009199 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stefan Tauner716e0982011-07-25 20:38:52 +00009200 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00009201 .probe = probe_jedec,
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00009202 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00009203 .block_erasers =
9204 {
9205 {
9206 .eraseblocks = { {64 * 1024, 16}, },
9207 .block_erase = erase_sector_jedec,
9208 }, {
9209 .eraseblocks = { {1024 * 1024, 1} },
9210 .block_erase = erase_chip_block_jedec,
9211 }
9212 },
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00009213 .printlock = printlock_w39v080fa,
9214 .unlock = unlock_w39v080fa,
Sean Nelson35727f72010-01-28 23:55:12 +00009215 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00009216 .read = read_memmapped,
Steven Zakulec7d257b42011-07-19 08:50:18 +00009217 .voltage = {3000, 3600}, /* Also has 12V fast program */
FENG yu ningff692fb2008-12-08 18:15:10 +00009218 },
9219
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009220 {
9221 .vendor = "Winbond",
9222 .name = "W39V080FA (dual mode)",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009223 .bustype = BUS_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009224 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00009225 .model_id = WINBOND_W39V080FA_DM,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009226 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00009227 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00009228 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009229 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00009230 .probe = probe_jedec,
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00009231 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00009232 .block_erasers =
9233 {
9234 {
9235 .eraseblocks = { {64 * 1024, 8}, },
9236 .block_erase = erase_sector_jedec,
9237 }, {
9238 .eraseblocks = { {512 * 1024, 1} },
9239 .block_erase = erase_chip_block_jedec,
9240 }
9241 },
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00009242 .printlock = printlock_w39v080fa_dual,
Sean Nelson35727f72010-01-28 23:55:12 +00009243 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00009244 .read = read_memmapped,
Steven Zakulec7d257b42011-07-19 08:50:18 +00009245 .voltage = {3000, 3600}, /* Also has 12V fast program */
FENG yu ningff692fb2008-12-08 18:15:10 +00009246 },
Stefan Taunerac1b4c82012-02-17 14:51:04 +00009247
9248 {
9249 .vendor = "Unknown",
9250 .name = "SFDP-capable chip",
9251 .bustype = BUS_SPI,
9252 .manufacture_id = GENERIC_MANUF_ID,
9253 .model_id = SFDP_DEVICE_ID,
9254 /* We present our own "report this" text hence we do not
9255 * want the default "This flash part has status UNTESTED..."
9256 * text to be printed. */
9257 .tested = TEST_OK_PREW,
9258 .probe = probe_spi_sfdp,
9259 .unlock = spi_disable_blockprotect, /* is this safe? */
9260 .read = spi_chip_read,
9261 /* FIXME: some vendor extensions define this */
9262 .voltage = {},
9263 /* Everything below will be set by the probing function. */
9264 .write = NULL,
9265 .total_size = 0,
9266 .page_size = 0,
9267 .feature_bits = 0,
9268 .block_erasers = {},
9269 },
FENG yu ningff692fb2008-12-08 18:15:10 +00009270
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009271 {
Carl-Daniel Hailfinger532c7172011-11-04 21:35:26 +00009272 .vendor = "Programmer",
9273 .name = "Opaque flash chip",
9274 .bustype = BUS_PROG,
9275 .manufacture_id = PROGMANUF_ID,
9276 .model_id = PROGDEV_ID,
9277 .total_size = 0,
9278 .page_size = 256,
9279 /* probe is assumed to work, rest will be filled in by probe */
9280 .tested = TEST_OK_PROBE,
9281 .probe = probe_opaque,
9282 /* eraseblock sizes will be set by the probing function */
9283 .block_erasers =
9284 {
9285 {
9286 .block_erase = erase_opaque,
9287 }
9288 },
9289 .write = write_opaque,
9290 .read = read_opaque,
9291 },
9292
9293 {
Daniel Lenskidf90d3a2010-07-22 11:44:38 +00009294 .vendor = "AMIC",
9295 .name = "unknown AMIC SPI chip",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009296 .bustype = BUS_SPI,
Daniel Lenskidf90d3a2010-07-22 11:44:38 +00009297 .manufacture_id = AMIC_ID,
9298 .model_id = GENERIC_DEVICE_ID,
9299 .total_size = 0,
9300 .page_size = 256,
9301 .tested = TEST_BAD_PREW,
9302 .probe = probe_spi_rdid4,
9303 .probe_timing = TIMING_ZERO,
9304 .write = NULL,
9305 .read = NULL,
9306 },
9307
9308 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009309 .vendor = "Atmel",
9310 .name = "unknown Atmel SPI chip",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009311 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009312 .manufacture_id = ATMEL_ID,
9313 .model_id = GENERIC_DEVICE_ID,
9314 .total_size = 0,
9315 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00009316 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009317 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00009318 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009319 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00009320 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00009321 },
9322
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009323 {
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00009324 .vendor = "Eon",
9325 .name = "unknown Eon SPI chip",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009326 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009327 .manufacture_id = EON_ID_NOPREFIX,
9328 .model_id = GENERIC_DEVICE_ID,
9329 .total_size = 0,
9330 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00009331 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009332 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00009333 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009334 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00009335 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00009336 },
9337
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009338 {
9339 .vendor = "Macronix",
9340 .name = "unknown Macronix SPI chip",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009341 .bustype = BUS_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00009342 .manufacture_id = MACRONIX_ID,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009343 .model_id = GENERIC_DEVICE_ID,
9344 .total_size = 0,
9345 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00009346 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009347 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00009348 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009349 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00009350 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00009351 },
9352
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009353 {
9354 .vendor = "PMC",
9355 .name = "unknown PMC SPI chip",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009356 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009357 .manufacture_id = PMC_ID,
9358 .model_id = GENERIC_DEVICE_ID,
9359 .total_size = 0,
9360 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00009361 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009362 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00009363 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009364 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00009365 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00009366 },
9367
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009368 {
9369 .vendor = "SST",
9370 .name = "unknown SST SPI chip",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009371 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009372 .manufacture_id = SST_ID,
9373 .model_id = GENERIC_DEVICE_ID,
9374 .total_size = 0,
9375 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00009376 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009377 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00009378 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009379 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00009380 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00009381 },
9382
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009383 {
9384 .vendor = "ST",
9385 .name = "unknown ST SPI chip",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009386 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009387 .manufacture_id = ST_ID,
9388 .model_id = GENERIC_DEVICE_ID,
9389 .total_size = 0,
9390 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00009391 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009392 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00009393 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009394 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00009395 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00009396 },
Uwe Hermannfc425e82008-03-16 02:06:25 +00009397
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00009398 {
Sean Nelson118e1d62009-11-24 02:08:11 +00009399 .vendor = "Sanyo",
9400 .name = "unknown Sanyo SPI chip",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009401 .bustype = BUS_SPI,
Sean Nelson118e1d62009-11-24 02:08:11 +00009402 .manufacture_id = SANYO_ID,
9403 .model_id = GENERIC_DEVICE_ID,
9404 .total_size = 0,
9405 .page_size = 256,
9406 .tested = TEST_BAD_PREW,
9407 .probe = probe_spi_rdid,
9408 .probe_timing = TIMING_ZERO,
Sean Nelson118e1d62009-11-24 02:08:11 +00009409 .write = NULL,
9410 .read = NULL,
9411 },
9412
9413 {
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00009414 .vendor = "Generic",
9415 .name = "unknown SPI chip (RDID)",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009416 .bustype = BUS_SPI,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00009417 .manufacture_id = GENERIC_MANUF_ID,
9418 .model_id = GENERIC_DEVICE_ID,
9419 .total_size = 0,
9420 .page_size = 256,
9421 .tested = TEST_BAD_PREW,
9422 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00009423 .write = NULL,
9424 },
Stefan Tauneraf2db612011-12-02 21:48:17 +00009425
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00009426 {
9427 .vendor = "Generic",
9428 .name = "unknown SPI chip (REMS)",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009429 .bustype = BUS_SPI,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00009430 .manufacture_id = GENERIC_MANUF_ID,
9431 .model_id = GENERIC_DEVICE_ID,
9432 .total_size = 0,
9433 .page_size = 256,
9434 .tested = TEST_BAD_PREW,
9435 .probe = probe_spi_rems,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00009436 .write = NULL,
9437 },
9438
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009439 { NULL }
Stephan Guilloux72cf5652009-04-21 01:46:07 +00009440};