blob: a3f0520a75d425388201461a090b5cea6f8632bb [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,
Steven Zakulec3603a282012-05-02 20:07:57 +0000548 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000549 .tested = TEST_UNTESTED,
550 .probe = probe_spi_rdid4,
551 .probe_timing = TIMING_ZERO,
552 .block_erasers =
553 {
554 {
555 .eraseblocks = {
556 {32 * 1024, 1},
557 {16 * 1024, 1},
558 {8 * 1024, 1},
559 {4 * 1024, 2},
560 },
561 .block_erase = spi_block_erase_d8,
562 }, {
563 .eraseblocks = { {64 * 1024, 1} },
564 .block_erase = spi_block_erase_c7,
565 }
566 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000567 .printlock = spi_prettyprint_status_register_amic_a25l05p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000568 .unlock = spi_disable_blockprotect,
569 .write = spi_chip_write_256,
570 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000571 .voltage = {2700, 3600},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000572 },
573
574 {
575 .vendor = "AMIC",
576 .name = "A25L05PU",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +0000577 .bustype = BUS_SPI,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000578 .manufacture_id = AMIC_ID,
579 .model_id = AMIC_A25L05PU,
580 .total_size = 64,
581 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +0000582 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000583 .tested = TEST_UNTESTED,
584 .probe = probe_spi_rdid4,
585 .probe_timing = TIMING_ZERO,
586 .block_erasers =
587 {
588 {
589 .eraseblocks = {
590 {4 * 1024, 2},
591 {8 * 1024, 1},
592 {16 * 1024, 1},
593 {32 * 1024, 1},
594 },
595 .block_erase = spi_block_erase_d8,
596 }, {
597 .eraseblocks = { {64 * 1024, 1} },
598 .block_erase = spi_block_erase_c7,
599 }
600 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000601 .printlock = spi_prettyprint_status_register_amic_a25l05p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000602 .unlock = spi_disable_blockprotect,
603 .write = spi_chip_write_256,
604 .read = spi_chip_read,
Steven Zakulec7d257b42011-07-19 08:50:18 +0000605 .voltage = {2700, 3600},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000606 },
607
608 {
609 .vendor = "AMIC",
610 .name = "A25L10PT",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +0000611 .bustype = BUS_SPI,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000612 .manufacture_id = AMIC_ID,
613 .model_id = AMIC_A25L10PT,
614 .total_size = 128,
615 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +0000616 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000617 .tested = TEST_UNTESTED,
618 .probe = probe_spi_rdid4,
619 .probe_timing = TIMING_ZERO,
620 .block_erasers =
621 {
622 {
623 .eraseblocks = {
624 {64 * 1024, 1},
625 {32 * 1024, 1},
626 {16 * 1024, 1},
627 {8 * 1024, 1},
628 {4 * 1024, 2},
629 },
630 .block_erase = spi_block_erase_d8,
631 }, {
632 .eraseblocks = { {128 * 1024, 1} },
633 .block_erase = spi_block_erase_c7,
634 }
635 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000636 .printlock = spi_prettyprint_status_register_amic_a25l05p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000637 .unlock = spi_disable_blockprotect,
638 .write = spi_chip_write_256,
639 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000640 .voltage = {2700, 3600},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000641 },
642
643 {
644 .vendor = "AMIC",
645 .name = "A25L10PU",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +0000646 .bustype = BUS_SPI,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000647 .manufacture_id = AMIC_ID,
648 .model_id = AMIC_A25L10PU,
649 .total_size = 128,
650 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +0000651 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000652 .tested = TEST_UNTESTED,
653 .probe = probe_spi_rdid4,
654 .probe_timing = TIMING_ZERO,
655 .block_erasers =
656 {
657 {
658 .eraseblocks = {
659 {4 * 1024, 2},
660 {8 * 1024, 1},
661 {16 * 1024, 1},
662 {32 * 1024, 1},
663 {64 * 1024, 1},
664 },
665 .block_erase = spi_block_erase_d8,
666 }, {
667 .eraseblocks = { {128 * 1024, 1} },
668 .block_erase = spi_block_erase_c7,
669 }
670 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000671 .printlock = spi_prettyprint_status_register_amic_a25l05p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000672 .unlock = spi_disable_blockprotect,
673 .write = spi_chip_write_256,
674 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000675 .voltage = {2700, 3600},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000676 },
677
678 {
679 .vendor = "AMIC",
680 .name = "A25L20PT",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +0000681 .bustype = BUS_SPI,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000682 .manufacture_id = AMIC_ID,
683 .model_id = AMIC_A25L20PT,
684 .total_size = 256,
685 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +0000686 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000687 .tested = TEST_UNTESTED,
688 .probe = probe_spi_rdid4,
689 .probe_timing = TIMING_ZERO,
690 .block_erasers =
691 {
692 {
693 .eraseblocks = {
694 {64 * 1024, 3},
695 {32 * 1024, 1},
696 {16 * 1024, 1},
697 {8 * 1024, 1},
698 {4 * 1024, 2},
699 },
700 .block_erase = spi_block_erase_d8,
701 }, {
702 .eraseblocks = { {256 * 1024, 1} },
703 .block_erase = spi_block_erase_c7,
704 }
705 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000706 .printlock = spi_prettyprint_status_register_amic_a25l05p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000707 .unlock = spi_disable_blockprotect,
708 .write = spi_chip_write_256,
709 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000710 .voltage = {2700, 3600},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000711 },
712
713 {
714 .vendor = "AMIC",
715 .name = "A25L20PU",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +0000716 .bustype = BUS_SPI,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000717 .manufacture_id = AMIC_ID,
718 .model_id = AMIC_A25L20PU,
719 .total_size = 256,
720 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +0000721 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000722 .tested = TEST_UNTESTED,
723 .probe = probe_spi_rdid4,
724 .probe_timing = TIMING_ZERO,
725 .block_erasers =
726 {
727 {
728 .eraseblocks = {
729 {4 * 1024, 2},
730 {8 * 1024, 1},
731 {16 * 1024, 1},
732 {32 * 1024, 1},
733 {64 * 1024, 3},
734 },
735 .block_erase = spi_block_erase_d8,
736 }, {
737 .eraseblocks = { {256 * 1024, 1} },
738 .block_erase = spi_block_erase_c7,
739 }
740 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000741 .printlock = spi_prettyprint_status_register_amic_a25l05p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000742 .unlock = spi_disable_blockprotect,
743 .write = spi_chip_write_256,
744 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000745 .voltage = {2700, 3600},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000746 },
747
748 /* The A25L40P{T,U} chips are distinguished by their
749 * erase block layouts, but without any distinction in RDID.
750 * This inexplicable quirk was verified by Rudolf Marek
751 * and discussed on the flashrom mailing list on 2010-07-12.
752 */
753 {
754 .vendor = "AMIC",
755 .name = "A25L40PT",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +0000756 .bustype = BUS_SPI,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000757 .manufacture_id = AMIC_ID,
758 .model_id = AMIC_A25L40PT,
759 .total_size = 512,
760 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +0000761 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +0000762 .tested = TEST_OK_PR,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000763 .probe = probe_spi_rdid4,
764 .probe_timing = TIMING_ZERO,
765 .block_erasers =
766 {
767 {
768 .eraseblocks = {
769 {64 * 1024, 7},
770 {32 * 1024, 1},
771 {16 * 1024, 1},
772 {8 * 1024, 1},
773 {4 * 1024, 2},
774 },
775 .block_erase = spi_block_erase_d8,
776 }, {
777 .eraseblocks = { {512 * 1024, 1} },
778 .block_erase = spi_block_erase_c7,
779 }
780 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000781 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000782 .unlock = spi_disable_blockprotect,
783 .write = spi_chip_write_256,
784 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000785 .voltage = {2700, 3600},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000786 },
787
788 {
789 .vendor = "AMIC",
790 .name = "A25L40PU",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +0000791 .bustype = BUS_SPI,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000792 .manufacture_id = AMIC_ID,
793 .model_id = AMIC_A25L40PU,
794 .total_size = 512,
795 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +0000796 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +0000797 .tested = TEST_OK_PR,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000798 .probe = probe_spi_rdid4,
799 .probe_timing = TIMING_ZERO,
800 .block_erasers =
801 {
802 {
803 .eraseblocks = {
804 {4 * 1024, 2},
805 {8 * 1024, 1},
806 {16 * 1024, 1},
807 {32 * 1024, 1},
808 {64 * 1024, 7},
809 },
810 .block_erase = spi_block_erase_d8,
811 }, {
812 .eraseblocks = { {512 * 1024, 1} },
813 .block_erase = spi_block_erase_c7,
814 }
815 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000816 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000817 .unlock = spi_disable_blockprotect,
818 .write = spi_chip_write_256,
819 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000820 .voltage = {2700, 3600},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000821 },
822
823 {
824 .vendor = "AMIC",
825 .name = "A25L80P",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +0000826 .bustype = BUS_SPI,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000827 .manufacture_id = AMIC_ID,
828 .model_id = AMIC_A25L80P,
829 .total_size = 1024,
830 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +0000831 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +0000832 .tested = TEST_OK_PRE,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000833 .probe = probe_spi_rdid4,
834 .probe_timing = TIMING_ZERO,
835 .block_erasers =
836 {
837 {
838 .eraseblocks = {
839 {4 * 1024, 2},
840 {8 * 1024, 1},
841 {16 * 1024, 1},
842 {32 * 1024, 1},
843 {64 * 1024, 15},
844 },
845 .block_erase = spi_block_erase_d8,
846 }, {
847 .eraseblocks = { {1024 * 1024, 1} },
848 .block_erase = spi_block_erase_c7,
849 }
850 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000851 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000852 .unlock = spi_disable_blockprotect,
853 .write = spi_chip_write_256,
854 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000855 .voltage = {2700, 3600},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000856 },
857
858 {
859 .vendor = "AMIC",
860 .name = "A25L16PT",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +0000861 .bustype = BUS_SPI,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000862 .manufacture_id = AMIC_ID,
863 .model_id = AMIC_A25L16PT,
864 .total_size = 2048,
865 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +0000866 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000867 .tested = TEST_UNTESTED,
868 .probe = probe_spi_rdid4,
869 .probe_timing = TIMING_ZERO,
870 .block_erasers =
871 {
872 {
873 .eraseblocks = {
874 {64 * 1024, 31},
875 {32 * 1024, 1},
876 {16 * 1024, 1},
877 {8 * 1024, 1},
878 {4 * 1024, 2},
879 },
880 .block_erase = spi_block_erase_d8,
881 }, {
882 .eraseblocks = { {2048 * 1024, 1} },
883 .block_erase = spi_block_erase_60,
884 }, {
885 .eraseblocks = { {2048 * 1024, 1} },
886 .block_erase = spi_block_erase_c7,
887 }
888 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000889 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000890 .unlock = spi_disable_blockprotect,
891 .write = spi_chip_write_256,
892 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000893 .voltage = {2700, 3600},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000894 },
895
896 {
897 .vendor = "AMIC",
898 .name = "A25L16PU",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +0000899 .bustype = BUS_SPI,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000900 .manufacture_id = AMIC_ID,
901 .model_id = AMIC_A25L16PU,
902 .total_size = 2048,
903 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +0000904 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +0000905 .tested = TEST_OK_PR,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000906 .probe = probe_spi_rdid4,
907 .probe_timing = TIMING_ZERO,
908 .block_erasers =
909 {
910 {
911 .eraseblocks = {
912 {4 * 1024, 2},
913 {8 * 1024, 1},
914 {16 * 1024, 1},
915 {32 * 1024, 1},
916 {64 * 1024, 31},
917 },
918 .block_erase = spi_block_erase_d8,
919 }, {
920 .eraseblocks = { {2048 * 1024, 1} },
921 .block_erase = spi_block_erase_60,
922 }, {
923 .eraseblocks = { {2048 * 1024, 1} },
924 .block_erase = spi_block_erase_c7,
925 }
926 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000927 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000928 .unlock = spi_disable_blockprotect,
929 .write = spi_chip_write_256,
930 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000931 .voltage = {2700, 3600},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +0000932 },
933
934 {
935 .vendor = "AMIC",
Dan Lenski11617122010-07-29 15:00:40 +0000936 .name = "A25L512",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +0000937 .bustype = BUS_SPI,
Dan Lenski11617122010-07-29 15:00:40 +0000938 .manufacture_id = AMIC_ID_NOPREFIX,
939 .model_id = AMIC_A25L512,
940 .total_size = 64,
941 .page_size = 256,
David Hendricks6c51cfd2010-09-03 03:32:22 +0000942 .feature_bits = FEATURE_WRSR_WREN,
Dan Lenski11617122010-07-29 15:00:40 +0000943 .tested = TEST_UNTESTED,
944 .probe = probe_spi_rdid,
945 .probe_timing = TIMING_ZERO,
946 .block_erasers =
947 {
948 {
949 .eraseblocks = { { 4 * 1024, 16 } },
950 .block_erase = spi_block_erase_20,
951 }, {
952 .eraseblocks = { { 64 * 1024, 1 } },
953 .block_erase = spi_block_erase_d8,
954 }, {
955 .eraseblocks = { { 64 * 1024, 1 } },
956 .block_erase = spi_block_erase_c7,
957 }
958 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000959 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Dan Lenski11617122010-07-29 15:00:40 +0000960 .unlock = spi_disable_blockprotect,
961 .write = spi_chip_write_256,
962 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000963 .voltage = {2700, 3600},
Dan Lenski11617122010-07-29 15:00:40 +0000964 },
965
966 {
967 .vendor = "AMIC",
968 .name = "A25L010",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +0000969 .bustype = BUS_SPI,
Dan Lenski11617122010-07-29 15:00:40 +0000970 .manufacture_id = AMIC_ID_NOPREFIX,
971 .model_id = AMIC_A25L010,
972 .total_size = 128,
973 .page_size = 256,
David Hendricks6c51cfd2010-09-03 03:32:22 +0000974 .feature_bits = FEATURE_WRSR_WREN,
Dan Lenski11617122010-07-29 15:00:40 +0000975 .tested = TEST_UNTESTED,
976 .probe = probe_spi_rdid,
977 .probe_timing = TIMING_ZERO,
978 .block_erasers =
979 {
980 {
981 .eraseblocks = { { 4 * 1024, 32 } },
982 .block_erase = spi_block_erase_20,
983 }, {
984 .eraseblocks = { { 64 * 1024, 2 } },
985 .block_erase = spi_block_erase_d8,
986 }, {
987 .eraseblocks = { { 128 * 1024, 1 } },
988 .block_erase = spi_block_erase_c7,
989 }
990 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +0000991 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Dan Lenski11617122010-07-29 15:00:40 +0000992 .unlock = spi_disable_blockprotect,
993 .write = spi_chip_write_256,
994 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +0000995 .voltage = {2700, 3600},
Dan Lenski11617122010-07-29 15:00:40 +0000996 },
997
998 {
999 .vendor = "AMIC",
1000 .name = "A25L020",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001001 .bustype = BUS_SPI,
Dan Lenski11617122010-07-29 15:00:40 +00001002 .manufacture_id = AMIC_ID_NOPREFIX,
1003 .model_id = AMIC_A25L020,
1004 .total_size = 256,
1005 .page_size = 256,
David Hendricks6c51cfd2010-09-03 03:32:22 +00001006 .feature_bits = FEATURE_WRSR_WREN,
Dan Lenski11617122010-07-29 15:00:40 +00001007 .tested = TEST_UNTESTED,
1008 .probe = probe_spi_rdid,
1009 .probe_timing = TIMING_ZERO,
1010 .block_erasers =
1011 {
1012 {
1013 .eraseblocks = { { 4 * 1024, 64 } },
1014 .block_erase = spi_block_erase_20,
1015 }, {
1016 .eraseblocks = { { 64 * 1024, 4 } },
1017 .block_erase = spi_block_erase_d8,
1018 }, {
1019 .eraseblocks = { { 256 * 1024, 1 } },
1020 .block_erase = spi_block_erase_c7,
1021 }
1022 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +00001023 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Dan Lenski11617122010-07-29 15:00:40 +00001024 .unlock = spi_disable_blockprotect,
1025 .write = spi_chip_write_256,
1026 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001027 .voltage = {2700, 3600},
Dan Lenski11617122010-07-29 15:00:40 +00001028 },
1029
1030 {
1031 .vendor = "AMIC",
1032 .name = "A25L040",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001033 .bustype = BUS_SPI,
Dan Lenski11617122010-07-29 15:00:40 +00001034 .manufacture_id = AMIC_ID_NOPREFIX,
1035 .model_id = AMIC_A25L040,
1036 .total_size = 512,
1037 .page_size = 256,
David Hendricks6c51cfd2010-09-03 03:32:22 +00001038 .feature_bits = FEATURE_WRSR_WREN,
Dan Lenski11617122010-07-29 15:00:40 +00001039 .tested = TEST_UNTESTED,
1040 .probe = probe_spi_rdid,
1041 .probe_timing = TIMING_ZERO,
1042 .block_erasers =
1043 {
1044 {
1045 .eraseblocks = { { 4 * 1024, 128 } },
1046 .block_erase = spi_block_erase_20,
1047 }, {
1048 .eraseblocks = { { 64 * 1024, 8 } },
1049 .block_erase = spi_block_erase_d8,
1050 }, {
1051 .eraseblocks = { { 512 * 1024, 1 } },
1052 .block_erase = spi_block_erase_c7,
1053 }
1054 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +00001055 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Dan Lenski11617122010-07-29 15:00:40 +00001056 .unlock = spi_disable_blockprotect,
1057 .write = spi_chip_write_256,
1058 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001059 .voltage = {2700, 3600},
Dan Lenski11617122010-07-29 15:00:40 +00001060 },
1061
1062 {
1063 .vendor = "AMIC",
1064 .name = "A25L080",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001065 .bustype = BUS_SPI,
Dan Lenski11617122010-07-29 15:00:40 +00001066 .manufacture_id = AMIC_ID_NOPREFIX,
1067 .model_id = AMIC_A25L080,
1068 .total_size = 1024,
1069 .page_size = 256,
David Hendricks6c51cfd2010-09-03 03:32:22 +00001070 .feature_bits = FEATURE_WRSR_WREN,
Dan Lenski11617122010-07-29 15:00:40 +00001071 .tested = TEST_UNTESTED,
1072 .probe = probe_spi_rdid,
1073 .probe_timing = TIMING_ZERO,
1074 .block_erasers =
1075 {
1076 {
1077 .eraseblocks = { { 4 * 1024, 256 } },
1078 .block_erase = spi_block_erase_20,
1079 }, {
1080 .eraseblocks = { { 64 * 1024, 16 } },
1081 .block_erase = spi_block_erase_d8,
1082 }, {
1083 .eraseblocks = { { 1024 * 1024, 1 } },
1084 .block_erase = spi_block_erase_c7,
1085 }
1086 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +00001087 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Dan Lenski11617122010-07-29 15:00:40 +00001088 .unlock = spi_disable_blockprotect,
1089 .write = spi_chip_write_256,
1090 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001091 .voltage = {2700, 3600},
Dan Lenski11617122010-07-29 15:00:40 +00001092 },
1093
1094 {
1095 .vendor = "AMIC",
1096 .name = "A25L016",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001097 .bustype = BUS_SPI,
Dan Lenski11617122010-07-29 15:00:40 +00001098 .manufacture_id = AMIC_ID_NOPREFIX,
1099 .model_id = AMIC_A25L016,
1100 .total_size = 2048,
1101 .page_size = 256,
David Hendricks6c51cfd2010-09-03 03:32:22 +00001102 .feature_bits = FEATURE_WRSR_WREN,
Dan Lenski11617122010-07-29 15:00:40 +00001103 .tested = TEST_UNTESTED,
1104 .probe = probe_spi_rdid,
1105 .probe_timing = TIMING_ZERO,
1106 .block_erasers =
1107 {
1108 {
1109 .eraseblocks = { { 4 * 1024, 512 } },
1110 .block_erase = spi_block_erase_20,
1111 }, {
1112 .eraseblocks = { { 64 * 1024, 32 } },
1113 .block_erase = spi_block_erase_d8,
1114 }, {
1115 .eraseblocks = { { 2048 * 1024, 1 } },
1116 .block_erase = spi_block_erase_c7,
1117 }
1118 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +00001119 .printlock = spi_prettyprint_status_register_amic_a25l40p,
Dan Lenski11617122010-07-29 15:00:40 +00001120 .unlock = spi_disable_blockprotect,
1121 .write = spi_chip_write_256,
1122 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001123 .voltage = {2700, 3600},
Dan Lenski11617122010-07-29 15:00:40 +00001124 },
1125
1126 {
1127 .vendor = "AMIC",
1128 .name = "A25L032",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001129 .bustype = BUS_SPI,
Dan Lenski11617122010-07-29 15:00:40 +00001130 .manufacture_id = AMIC_ID_NOPREFIX,
1131 .model_id = AMIC_A25L032,
1132 .total_size = 4096,
1133 .page_size = 256,
Daniel Lenski65922a32012-02-15 23:40:23 +00001134 /* OTP: 64B total; read 0x4B, 0x48; write 0x42 */
1135 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
Stefan Taunerd94d25d2012-07-28 03:17:15 +00001136 .tested = TEST_OK_PREW,
Dan Lenski11617122010-07-29 15:00:40 +00001137 .probe = probe_spi_rdid,
1138 .probe_timing = TIMING_ZERO,
1139 .block_erasers =
1140 {
1141 {
1142 .eraseblocks = { { 4 * 1024, 1024 } },
1143 .block_erase = spi_block_erase_20,
1144 }, {
1145 .eraseblocks = { { 64 * 1024, 64 } },
1146 .block_erase = spi_block_erase_52,
1147 }, {
1148 .eraseblocks = { { 64 * 1024, 64 } },
1149 .block_erase = spi_block_erase_d8,
1150 }, {
1151 .eraseblocks = { { 4096 * 1024, 1 } },
1152 .block_erase = spi_block_erase_60,
1153 }, {
1154 .eraseblocks = { { 4096 * 1024, 1 } },
1155 .block_erase = spi_block_erase_c7,
1156 }
1157 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +00001158 .printlock = spi_prettyprint_status_register_amic_a25l032,
Dan Lenski11617122010-07-29 15:00:40 +00001159 .unlock = NULL, /* Two status reg bytes (read with 0x35 and 0x05) */
1160 .write = spi_chip_write_256,
1161 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001162 .voltage = {2700, 3600},
Dan Lenski11617122010-07-29 15:00:40 +00001163 },
1164
1165 {
1166 .vendor = "AMIC",
1167 .name = "A25LQ032",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001168 .bustype = BUS_SPI,
Dan Lenski11617122010-07-29 15:00:40 +00001169 .manufacture_id = AMIC_ID_NOPREFIX,
1170 .model_id = AMIC_A25LQ032,
1171 .total_size = 4096,
1172 .page_size = 256,
Daniel Lenski65922a32012-02-15 23:40:23 +00001173 /* OTP: 64B total; read 0x4B, 0x48; write 0x42 */
1174 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
Dan Lenski11617122010-07-29 15:00:40 +00001175 .tested = TEST_UNTESTED,
1176 .probe = probe_spi_rdid,
1177 .probe_timing = TIMING_ZERO,
1178 .block_erasers =
1179 {
1180 {
1181 .eraseblocks = { { 4 * 1024, 1024 } },
1182 .block_erase = spi_block_erase_20,
1183 }, {
1184 .eraseblocks = { { 64 * 1024, 64 } },
1185 .block_erase = spi_block_erase_52,
1186 }, {
1187 .eraseblocks = { { 64 * 1024, 64 } },
1188 .block_erase = spi_block_erase_d8,
1189 }, {
1190 .eraseblocks = { { 4096 * 1024, 1 } },
1191 .block_erase = spi_block_erase_60,
1192 }, {
1193 .eraseblocks = { { 4096 * 1024, 1 } },
1194 .block_erase = spi_block_erase_c7,
1195 }
1196 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +00001197 .printlock = spi_prettyprint_status_register_amic_a25lq032,
Dan Lenski11617122010-07-29 15:00:40 +00001198 .unlock = NULL, /* Two status reg bytes (read with 0x35 and 0x05) */
1199 .write = spi_chip_write_256,
1200 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001201 .voltage = {2700, 3600},
Dan Lenski11617122010-07-29 15:00:40 +00001202 },
1203
1204 {
1205 .vendor = "AMIC",
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001206 .name = "A29002B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001207 .bustype = BUS_PARALLEL,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001208 .manufacture_id = AMIC_ID_NOPREFIX,
1209 .model_id = AMIC_A29002B,
1210 .total_size = 256,
1211 .page_size = 64 * 1024,
1212 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
1213 .tested = TEST_UNTESTED,
1214 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +00001215 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001216 .block_erasers =
1217 {
1218 {
1219 .eraseblocks = {
1220 {16 * 1024, 1},
1221 {8 * 1024, 2},
1222 {32 * 1024, 1},
1223 {64 * 1024, 3},
1224 },
1225 .block_erase = erase_sector_jedec,
1226 }, {
1227 .eraseblocks = { {256 * 1024, 1} },
1228 .block_erase = erase_chip_block_jedec,
1229 },
1230 },
1231 .write = write_jedec_1,
1232 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001233 .voltage = {4500, 5500},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001234 },
1235
1236 {
1237 .vendor = "AMIC",
1238 .name = "A29002T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001239 .bustype = BUS_PARALLEL,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001240 .manufacture_id = AMIC_ID_NOPREFIX,
1241 .model_id = AMIC_A29002T,
1242 .total_size = 256,
1243 .page_size = 64 * 1024,
1244 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Paul Menzel018d4822011-10-21 12:33:07 +00001245 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001246 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +00001247 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001248 .block_erasers =
1249 {
1250 {
1251 .eraseblocks = {
1252 {64 * 1024, 3},
1253 {32 * 1024, 1},
1254 {8 * 1024, 2},
1255 {16 * 1024, 1},
1256 },
1257 .block_erase = erase_sector_jedec,
1258 }, {
1259 .eraseblocks = { {256 * 1024, 1} },
1260 .block_erase = erase_chip_block_jedec,
1261 },
1262 },
1263 .write = write_jedec_1,
1264 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001265 .voltage = {4500, 5500},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001266 },
1267
1268 {
1269 .vendor = "AMIC",
1270 .name = "A29040B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001271 .bustype = BUS_PARALLEL,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001272 .manufacture_id = AMIC_ID_NOPREFIX,
1273 .model_id = AMIC_A29040B,
1274 .total_size = 512,
1275 .page_size = 64 * 1024,
1276 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
1277 .tested = TEST_UNTESTED,
1278 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +00001279 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001280 .block_erasers =
1281 {
1282 {
1283 .eraseblocks = { {64 * 1024, 8} },
1284 .block_erase = erase_sector_jedec,
1285 }, {
1286 .eraseblocks = { {512 * 1024, 1} },
1287 .block_erase = erase_chip_block_jedec,
1288 },
1289 },
1290 .write = write_jedec_1,
1291 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001292 .voltage = {4500, 5500},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001293 },
1294
1295 {
1296 .vendor = "AMIC",
1297 .name = "A49LF040A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001298 .bustype = BUS_LPC,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001299 .manufacture_id = AMIC_ID_NOPREFIX,
1300 .model_id = AMIC_A49LF040A,
1301 .total_size = 512,
1302 .page_size = 64 * 1024,
1303 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stefan Tauneraf2db612011-12-02 21:48:17 +00001304 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001305 .probe = probe_jedec,
1306 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
1307 .block_erasers =
1308 {
1309 {
1310 .eraseblocks = { {64 * 1024, 8} },
1311 .block_erase = erase_block_jedec,
1312 }, {
1313 .eraseblocks = { {512 * 1024, 1} },
1314 .block_erase = erase_chip_block_jedec,
1315 }
1316 },
1317 .unlock = unlock_49fl00x,
1318 .write = write_jedec_1,
1319 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001320 .voltage = {3000, 3600},
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00001321 },
1322
1323 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001324 .vendor = "Atmel",
1325 .name = "AT25DF021",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001326 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001327 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001328 .model_id = ATMEL_AT25DF021,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001329 .total_size = 256,
1330 .page_size = 256,
Daniel Lenski65922a32012-02-15 23:40:23 +00001331 /* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */
1332 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001333 .tested = TEST_UNTESTED,
1334 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001335 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001336 .block_erasers =
1337 {
1338 {
1339 .eraseblocks = { {4 * 1024, 64} },
1340 .block_erase = spi_block_erase_20,
1341 }, {
1342 .eraseblocks = { {32 * 1024, 8} },
1343 .block_erase = spi_block_erase_52,
1344 }, {
1345 .eraseblocks = { {64 * 1024, 4} },
1346 .block_erase = spi_block_erase_d8,
1347 }, {
1348 .eraseblocks = { {256 * 1024, 1} },
1349 .block_erase = spi_block_erase_60,
1350 }, {
1351 .eraseblocks = { {256 * 1024, 1} },
1352 .block_erase = spi_block_erase_c7,
1353 }
1354 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001355 .printlock = spi_prettyprint_status_register_at25df,
1356 .unlock = spi_disable_blockprotect_at25df,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001357 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001358 .read = spi_chip_read,
Steven Zakulec7d257b42011-07-19 08:50:18 +00001359 .voltage = {2700, 3600}, /* 2.3-3.6V & 2.7-3.6V models available */
FENG yu ningff692fb2008-12-08 18:15:10 +00001360 },
1361
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001362 {
1363 .vendor = "Atmel",
1364 .name = "AT25DF041A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001365 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001366 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001367 .model_id = ATMEL_AT25DF041A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001368 .total_size = 512,
1369 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001370 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001371 .tested = TEST_UNTESTED,
1372 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001373 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001374 .block_erasers =
1375 {
1376 {
1377 .eraseblocks = { {4 * 1024, 128} },
1378 .block_erase = spi_block_erase_20,
1379 }, {
1380 .eraseblocks = { {32 * 1024, 16} },
1381 .block_erase = spi_block_erase_52,
1382 }, {
1383 .eraseblocks = { {64 * 1024, 8} },
1384 .block_erase = spi_block_erase_d8,
1385 }, {
1386 .eraseblocks = { {512 * 1024, 1} },
1387 .block_erase = spi_block_erase_60,
1388 }, {
1389 .eraseblocks = { {512 * 1024, 1} },
1390 .block_erase = spi_block_erase_c7,
1391 }
1392 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001393 .printlock = spi_prettyprint_status_register_at25df,
1394 .unlock = spi_disable_blockprotect_at25df,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001395 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001396 .read = spi_chip_read,
Steven Zakulec7d257b42011-07-19 08:50:18 +00001397 .voltage = {2700, 3600}, /* 2.3-3.6V & 2.7-3.6V models available */
FENG yu ningff692fb2008-12-08 18:15:10 +00001398 },
1399
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001400 {
1401 .vendor = "Atmel",
1402 .name = "AT25DF081",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001403 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001404 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001405 .model_id = ATMEL_AT25DF081,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001406 .total_size = 1024,
1407 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001408 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001409 .tested = TEST_UNTESTED,
1410 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001411 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001412 .block_erasers =
1413 {
1414 {
1415 .eraseblocks = { {4 * 1024, 256} },
1416 .block_erase = spi_block_erase_20,
1417 }, {
1418 .eraseblocks = { {32 * 1024, 32} },
1419 .block_erase = spi_block_erase_52,
1420 }, {
1421 .eraseblocks = { {64 * 1024, 16} },
1422 .block_erase = spi_block_erase_d8,
1423 }, {
1424 .eraseblocks = { {1024 * 1024, 1} },
1425 .block_erase = spi_block_erase_60,
1426 }, {
1427 .eraseblocks = { {1024 * 1024, 1} },
1428 .block_erase = spi_block_erase_c7,
1429 }
1430 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001431 .printlock = spi_prettyprint_status_register_at25df,
1432 .unlock = spi_disable_blockprotect_at25df,
1433 .write = spi_chip_write_256,
1434 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001435 .voltage = {1600, 2000}, /* Datasheet says range is 1.65-1.95 V */
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001436 },
1437
1438 {
1439 .vendor = "Atmel",
1440 .name = "AT25DF081A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001441 .bustype = BUS_SPI,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001442 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001443 .model_id = ATMEL_AT25DF081A,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001444 .total_size = 1024,
1445 .page_size = 256,
1446 .feature_bits = FEATURE_WRSR_WREN,
1447 .tested = TEST_UNTESTED,
1448 .probe = probe_spi_rdid,
1449 .probe_timing = TIMING_ZERO,
1450 .block_erasers =
1451 {
1452 {
1453 .eraseblocks = { {4 * 1024, 256} },
1454 .block_erase = spi_block_erase_20,
1455 }, {
1456 .eraseblocks = { {32 * 1024, 32} },
1457 .block_erase = spi_block_erase_52,
1458 }, {
1459 .eraseblocks = { {64 * 1024, 16} },
1460 .block_erase = spi_block_erase_d8,
1461 }, {
1462 .eraseblocks = { {1024 * 1024, 1} },
1463 .block_erase = spi_block_erase_60,
1464 }, {
1465 .eraseblocks = { {1024 * 1024, 1} },
1466 .block_erase = spi_block_erase_c7,
1467 }
1468 },
1469 .printlock = spi_prettyprint_status_register_at25df_sec,
1470 .unlock = spi_disable_blockprotect_at25df_sec,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001471 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001472 .read = spi_chip_read,
Steven Zakulec7d257b42011-07-19 08:50:18 +00001473 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00001474 },
1475
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001476 {
1477 .vendor = "Atmel",
1478 .name = "AT25DF161",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001479 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001480 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001481 .model_id = ATMEL_AT25DF161,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001482 .total_size = 2048,
1483 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001484 .feature_bits = FEATURE_WRSR_WREN,
Stefan Tauner2abab942012-04-27 20:41:23 +00001485 .tested = TEST_OK_PROBE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001486 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001487 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001488 .block_erasers =
1489 {
1490 {
1491 .eraseblocks = { {4 * 1024, 512} },
1492 .block_erase = spi_block_erase_20,
1493 }, {
1494 .eraseblocks = { {32 * 1024, 64} },
1495 .block_erase = spi_block_erase_52,
1496 }, {
1497 .eraseblocks = { {64 * 1024, 32} },
1498 .block_erase = spi_block_erase_d8,
1499 }, {
1500 .eraseblocks = { {2 * 1024 * 1024, 1} },
1501 .block_erase = spi_block_erase_60,
1502 }, {
1503 .eraseblocks = { {2 * 1024 * 1024, 1} },
1504 .block_erase = spi_block_erase_c7,
1505 }
1506 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001507 .printlock = spi_prettyprint_status_register_at25df_sec,
1508 .unlock = spi_disable_blockprotect_at25df_sec,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001509 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001510 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001511 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00001512 },
1513
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001514 {
1515 .vendor = "Atmel",
1516 .name = "AT25DF321",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001517 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001518 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001519 .model_id = ATMEL_AT25DF321,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001520 .total_size = 4096,
1521 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001522 .feature_bits = FEATURE_WRSR_WREN,
Stefan Taunerd06d9412011-06-12 19:47:55 +00001523 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001524 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001525 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001526 .block_erasers =
1527 {
1528 {
1529 .eraseblocks = { {4 * 1024, 1024} },
1530 .block_erase = spi_block_erase_20,
1531 }, {
1532 .eraseblocks = { {32 * 1024, 128} },
1533 .block_erase = spi_block_erase_52,
1534 }, {
1535 .eraseblocks = { {64 * 1024, 64} },
1536 .block_erase = spi_block_erase_d8,
1537 }, {
1538 .eraseblocks = { {4 * 1024 * 1024, 1} },
1539 .block_erase = spi_block_erase_60,
1540 }, {
1541 .eraseblocks = { {4 * 1024 * 1024, 1} },
1542 .block_erase = spi_block_erase_c7,
1543 }
1544 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001545 .printlock = spi_prettyprint_status_register_at25df,
1546 .unlock = spi_disable_blockprotect_at25df,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001547 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001548 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001549 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00001550 },
1551
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001552 {
1553 .vendor = "Atmel",
1554 .name = "AT25DF321A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001555 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001556 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001557 .model_id = ATMEL_AT25DF321A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001558 .total_size = 4096,
1559 .page_size = 256,
Daniel Lenski65922a32012-02-15 23:40:23 +00001560 /* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */
1561 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
Stefan Taunerd94d25d2012-07-28 03:17:15 +00001562 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001563 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001564 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001565 .block_erasers =
1566 {
1567 {
1568 .eraseblocks = { {4 * 1024, 1024} },
1569 .block_erase = spi_block_erase_20,
1570 }, {
1571 .eraseblocks = { {32 * 1024, 128} },
1572 .block_erase = spi_block_erase_52,
1573 }, {
1574 .eraseblocks = { {64 * 1024, 64} },
1575 .block_erase = spi_block_erase_d8,
1576 }, {
1577 .eraseblocks = { {4 * 1024 * 1024, 1} },
1578 .block_erase = spi_block_erase_60,
1579 }, {
1580 .eraseblocks = { {4 * 1024 * 1024, 1} },
1581 .block_erase = spi_block_erase_c7,
1582 }
1583 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001584 .printlock = spi_prettyprint_status_register_at25df_sec,
1585 .unlock = spi_disable_blockprotect_at25df_sec,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001586 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001587 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001588 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00001589 },
1590
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001591 {
1592 .vendor = "Atmel",
Paul Menzelac427b22012-02-16 21:07:07 +00001593 .name = "AT25DF641(A)",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001594 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001595 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001596 .model_id = ATMEL_AT25DF641,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001597 .total_size = 8192,
1598 .page_size = 256,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001599 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001600 .tested = TEST_UNTESTED,
1601 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001602 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001603 .block_erasers =
1604 {
1605 {
1606 .eraseblocks = { {4 * 1024, 2048} },
1607 .block_erase = spi_block_erase_20,
1608 }, {
1609 .eraseblocks = { {32 * 1024, 256} },
1610 .block_erase = spi_block_erase_52,
1611 }, {
1612 .eraseblocks = { {64 * 1024, 128} },
1613 .block_erase = spi_block_erase_d8,
1614 }, {
1615 .eraseblocks = { {8 * 1024 * 1024, 1} },
1616 .block_erase = spi_block_erase_60,
1617 }, {
1618 .eraseblocks = { {8 * 1024 * 1024, 1} },
1619 .block_erase = spi_block_erase_c7,
1620 }
1621 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001622 .printlock = spi_prettyprint_status_register_at25df_sec,
1623 .unlock = spi_disable_blockprotect_at25df_sec,
1624 .write = spi_chip_write_256,
1625 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001626 .voltage = {2700, 3600},
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001627 },
1628
1629 {
1630 .vendor = "Atmel",
1631 .name = "AT25DQ161",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001632 .bustype = BUS_SPI,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001633 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001634 .model_id = ATMEL_AT25DQ161,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001635 .total_size = 2048,
1636 .page_size = 256,
Daniel Lenski65922a32012-02-15 23:40:23 +00001637 /* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */
1638 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001639 .tested = TEST_UNTESTED,
1640 .probe = probe_spi_rdid,
1641 .probe_timing = TIMING_ZERO,
1642 .block_erasers =
1643 {
1644 {
1645 .eraseblocks = { {4 * 1024, 512} },
1646 .block_erase = spi_block_erase_20,
1647 }, {
1648 .eraseblocks = { {32 * 1024, 64} },
1649 .block_erase = spi_block_erase_52,
1650 }, {
1651 .eraseblocks = { {64 * 1024, 32} },
1652 .block_erase = spi_block_erase_d8,
1653 }, {
1654 .eraseblocks = { {2 * 1024 * 1024, 1} },
1655 .block_erase = spi_block_erase_60,
1656 }, {
1657 .eraseblocks = { {2 * 1024 * 1024, 1} },
1658 .block_erase = spi_block_erase_c7,
1659 }
1660 },
1661 .printlock = spi_prettyprint_status_register_at25df_sec,
1662 .unlock = spi_disable_blockprotect_at25df_sec,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001663 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001664 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001665 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00001666 },
1667
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001668 {
1669 .vendor = "Atmel",
1670 .name = "AT25F512B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001671 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001672 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001673 .model_id = ATMEL_AT25F512B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001674 .total_size = 64,
1675 .page_size = 256,
Daniel Lenski65922a32012-02-15 23:40:23 +00001676 /* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */
1677 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001678 .tested = TEST_UNTESTED,
1679 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001680 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001681 .block_erasers =
1682 {
1683 {
1684 .eraseblocks = { {4 * 1024, 16} },
1685 .block_erase = spi_block_erase_20,
1686 }, {
1687 .eraseblocks = { {32 * 1024, 2} },
1688 .block_erase = spi_block_erase_52,
1689 }, {
1690 .eraseblocks = { {32 * 1024, 2} },
1691 .block_erase = spi_block_erase_d8,
1692 }, {
1693 .eraseblocks = { {64 * 1024, 1} },
1694 .block_erase = spi_block_erase_60,
1695 }, {
1696 .eraseblocks = { {64 * 1024, 1} },
1697 .block_erase = spi_block_erase_c7,
1698 }
1699 },
Stefan Tauner7bf4ed92012-08-26 21:04:27 +00001700 .printlock = spi_prettyprint_status_register_at25f512b,
1701 .unlock = spi_disable_blockprotect_at25f512b,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001702 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001703 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001704 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00001705 },
1706
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001707 {
1708 .vendor = "Atmel",
1709 .name = "AT25FS010",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001710 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001711 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001712 .model_id = ATMEL_AT25FS010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001713 .total_size = 128,
1714 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00001715 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001716 .tested = TEST_UNTESTED,
1717 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001718 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001719 .block_erasers =
1720 {
1721 {
1722 .eraseblocks = { {4 * 1024, 32} },
1723 .block_erase = spi_block_erase_20,
1724 }, {
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001725 .eraseblocks = { {4 * 1024, 32} },
1726 .block_erase = spi_block_erase_d7,
1727 }, {
Sean Nelson89187292009-12-23 12:02:55 +00001728 .eraseblocks = { {32 * 1024, 4} },
1729 .block_erase = spi_block_erase_52,
1730 }, {
1731 .eraseblocks = { {32 * 1024, 4} },
1732 .block_erase = spi_block_erase_d8,
1733 }, {
1734 .eraseblocks = { {128 * 1024, 1} },
1735 .block_erase = spi_block_erase_60,
1736 }, {
1737 .eraseblocks = { {128 * 1024, 1} },
1738 .block_erase = spi_block_erase_c7,
1739 }
1740 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001741 .printlock = spi_prettyprint_status_register_at25fs010,
1742 .unlock = spi_disable_blockprotect_at25fs010,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001743 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001744 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001745 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00001746 },
1747
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001748 {
1749 .vendor = "Atmel",
1750 .name = "AT25FS040",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001751 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001752 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001753 .model_id = ATMEL_AT25FS040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001754 .total_size = 512,
1755 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00001756 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001757 .tested = TEST_UNTESTED,
1758 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001759 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001760 .block_erasers =
1761 {
1762 {
1763 .eraseblocks = { {4 * 1024, 128} },
1764 .block_erase = spi_block_erase_20,
1765 }, {
1766 .eraseblocks = { {64 * 1024, 8} },
1767 .block_erase = spi_block_erase_52,
1768 }, {
1769 .eraseblocks = { {64 * 1024, 8} },
1770 .block_erase = spi_block_erase_d8,
1771 }, {
1772 .eraseblocks = { {512 * 1024, 1} },
1773 .block_erase = spi_block_erase_60,
1774 }, {
1775 .eraseblocks = { {512 * 1024, 1} },
1776 .block_erase = spi_block_erase_c7,
1777 }
1778 },
Carl-Daniel Hailfingerfd7075a2010-07-29 13:09:18 +00001779 .printlock = spi_prettyprint_status_register_at25fs040,
1780 .unlock = spi_disable_blockprotect_at25fs040,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001781 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001782 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001783 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00001784 },
1785
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001786 {
1787 .vendor = "Atmel",
1788 .name = "AT26DF041",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001789 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001790 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001791 .model_id = ATMEL_AT26DF041,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001792 .total_size = 512,
1793 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00001794 /* does not support EWSR nor WREN and has no writable status register bits whatsoever */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001795 .tested = TEST_UNTESTED,
1796 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001797 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001798 .block_erasers =
1799 {
1800 {
1801 .eraseblocks = { {4 * 1024, 128} },
1802 .block_erase = spi_block_erase_20,
1803 }
1804 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001805 .write = NULL /* Incompatible Page write */,
1806 .read = spi_chip_read,
Steven Zakulec7d257b42011-07-19 08:50:18 +00001807 .voltage = {2700, 3600}, /* 3.0-3.6V for higher speed, 2.7-3.6V normal */
FENG yu ningff692fb2008-12-08 18:15:10 +00001808 },
1809
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001810 {
1811 .vendor = "Atmel",
1812 .name = "AT26DF081A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001813 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001814 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001815 .model_id = ATMEL_AT26DF081A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001816 .total_size = 1024,
1817 .page_size = 256,
Mathias Krause2c3afa32011-01-17 07:45:54 +00001818 .feature_bits = FEATURE_WRSR_WREN,
1819 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001820 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001821 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001822 .block_erasers =
1823 {
1824 {
1825 .eraseblocks = { {4 * 1024, 256} },
1826 .block_erase = spi_block_erase_20,
1827 }, {
1828 .eraseblocks = { {32 * 1024, 32} },
1829 .block_erase = spi_block_erase_52,
1830 }, {
1831 .eraseblocks = { {64 * 1024, 16} },
1832 .block_erase = spi_block_erase_d8,
1833 }, {
1834 .eraseblocks = { {1024 * 1024, 1} },
1835 .block_erase = spi_block_erase_60,
1836 }, {
1837 .eraseblocks = { {1024 * 1024, 1} },
1838 .block_erase = spi_block_erase_c7,
1839 }
1840 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +00001841 .printlock = spi_prettyprint_status_register_atmel_at26df081a,
Mathias Krause2c3afa32011-01-17 07:45:54 +00001842 .unlock = spi_disable_blockprotect_at25df,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001843 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001844 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001845 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00001846 },
1847
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001848 {
1849 .vendor = "Atmel",
1850 .name = "AT26DF161",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001851 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001852 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001853 .model_id = ATMEL_AT26DF161,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001854 .total_size = 2048,
1855 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00001856 .feature_bits = FEATURE_WRSR_WREN,
Stefan Taunerd94d25d2012-07-28 03:17:15 +00001857 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001858 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001859 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001860 .block_erasers =
1861 {
1862 {
1863 .eraseblocks = { {4 * 1024, 512} },
1864 .block_erase = spi_block_erase_20,
1865 }, {
1866 .eraseblocks = { {32 * 1024, 64} },
1867 .block_erase = spi_block_erase_52,
1868 }, {
1869 .eraseblocks = { {64 * 1024, 32} },
1870 .block_erase = spi_block_erase_d8,
1871 }, {
1872 .eraseblocks = { {2 * 1024 * 1024, 1} },
1873 .block_erase = spi_block_erase_60,
1874 }, {
1875 .eraseblocks = { {2 * 1024 * 1024, 1} },
1876 .block_erase = spi_block_erase_c7,
1877 }
1878 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +00001879 .printlock = spi_prettyprint_status_register_at25df,
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001880 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001881 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001882 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001883 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00001884 },
1885
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001886 {
1887 .vendor = "Atmel",
1888 .name = "AT26DF161A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001889 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001890 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001891 .model_id = ATMEL_AT26DF161A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001892 .total_size = 2048,
1893 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00001894 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001895 .tested = TEST_UNTESTED,
1896 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001897 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001898 .block_erasers =
1899 {
1900 {
1901 .eraseblocks = { {4 * 1024, 512} },
1902 .block_erase = spi_block_erase_20,
1903 }, {
1904 .eraseblocks = { {32 * 1024, 64} },
1905 .block_erase = spi_block_erase_52,
1906 }, {
1907 .eraseblocks = { {64 * 1024, 32} },
1908 .block_erase = spi_block_erase_d8,
1909 }, {
1910 .eraseblocks = { {2 * 1024 * 1024, 1} },
1911 .block_erase = spi_block_erase_60,
1912 }, {
1913 .eraseblocks = { {2 * 1024 * 1024, 1} },
1914 .block_erase = spi_block_erase_c7,
1915 }
1916 },
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +00001917 .printlock = spi_prettyprint_status_register_atmel_at26df081a,
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001918 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001919 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001920 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001921 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00001922 },
1923
1924 /*The AT26DF321 has the same ID as the AT25DF321. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001925 /*{
1926 .vendor = "Atmel",
1927 .name = "AT26DF321",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001928 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001929 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001930 .model_id = ATMEL_AT26DF321,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001931 .total_size = 4096,
1932 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00001933 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001934 .tested = TEST_UNTESTED,
1935 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001936 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger7a3bd8f2011-05-19 00:06:06 +00001937 .printlock = spi_prettyprint_status_register_atmel_at26df081a,
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001938 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001939 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001940 .read = spi_chip_read,
1941 },*/
FENG yu ningff692fb2008-12-08 18:15:10 +00001942
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001943 {
1944 .vendor = "Atmel",
1945 .name = "AT26F004",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001946 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001947 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001948 .model_id = ATMEL_AT26F004,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001949 .total_size = 512,
1950 .page_size = 256,
1951 .tested = TEST_UNTESTED,
Steven Zakulec3603a282012-05-02 20:07:57 +00001952 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001953 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001954 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +00001955 .block_erasers =
1956 {
1957 {
1958 .eraseblocks = { {4 * 1024, 128} },
1959 .block_erase = spi_block_erase_20,
1960 }, {
1961 .eraseblocks = { {32 * 1024, 16} },
1962 .block_erase = spi_block_erase_52,
1963 }, {
1964 .eraseblocks = { {64 * 1024, 8} },
1965 .block_erase = spi_block_erase_d8,
1966 }, {
1967 .eraseblocks = { {512 * 1024, 1} },
1968 .block_erase = spi_block_erase_60,
1969 }, {
1970 .eraseblocks = { {512 * 1024, 1} },
1971 .block_erase = spi_block_erase_c7,
1972 }
1973 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001974 .write = NULL /* Incompatible Page write */,
1975 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00001976 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00001977 },
1978
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001979 {
1980 .vendor = "Atmel",
Maciej Pijankabc2bbd22009-06-02 16:45:59 +00001981 .name = "AT29C512",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00001982 .bustype = BUS_PARALLEL,
Maciej Pijankabc2bbd22009-06-02 16:45:59 +00001983 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00001984 .model_id = ATMEL_AT29C512,
Maciej Pijankabc2bbd22009-06-02 16:45:59 +00001985 .total_size = 64,
1986 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00001987 .feature_bits = FEATURE_LONG_RESET,
Paul Menzelac427b22012-02-16 21:07:07 +00001988 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00001989 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001990 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +00001991 .block_erasers =
1992 {
1993 {
1994 .eraseblocks = { {64 * 1024, 1} },
1995 .block_erase = erase_chip_block_jedec,
1996 }
1997 },
Maciej Pijankabc2bbd22009-06-02 16:45:59 +00001998 .write = write_jedec,
1999 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002000 .voltage = {4500, 5500},
Maciej Pijankabc2bbd22009-06-02 16:45:59 +00002001 },
2002
2003 {
2004 .vendor = "Atmel",
Uwe Hermann8403ccb2009-05-16 21:39:19 +00002005 .name = "AT29C010A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002006 .bustype = BUS_PARALLEL,
Uwe Hermann8403ccb2009-05-16 21:39:19 +00002007 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002008 .model_id = ATMEL_AT29C010A,
Uwe Hermann8403ccb2009-05-16 21:39:19 +00002009 .total_size = 128,
2010 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00002011 .feature_bits = FEATURE_LONG_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00002012 .tested = TEST_OK_PRE,
Uwe Hermann8403ccb2009-05-16 21:39:19 +00002013 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002014 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +00002015 .block_erasers =
2016 {
2017 {
2018 .eraseblocks = { {128 * 1024, 1} },
2019 .block_erase = erase_chip_block_jedec,
2020 }
2021 },
Uwe Hermann8403ccb2009-05-16 21:39:19 +00002022 .write = write_jedec, /* FIXME */
2023 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002024 .voltage = {4500, 5500},
Uwe Hermann8403ccb2009-05-16 21:39:19 +00002025 },
2026
2027 {
2028 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002029 .name = "AT29C020",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002030 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002031 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002032 .model_id = ATMEL_AT29C020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002033 .total_size = 256,
2034 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002035 .feature_bits = FEATURE_LONG_RESET,
2036 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002037 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00002038 .probe_timing = 10000, /* 10ms */
Sean Nelson89187292009-12-23 12:02:55 +00002039 .block_erasers =
2040 {
2041 {
2042 .eraseblocks = { {256 * 1024, 1} },
2043 .block_erase = erase_chip_block_jedec,
2044 }
2045 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002046 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002047 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002048 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00002049 },
2050
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002051 {
2052 .vendor = "Atmel",
2053 .name = "AT29C040A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002054 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002055 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002056 .model_id = ATMEL_AT29C040A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002057 .total_size = 512,
2058 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002059 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002060 .tested = TEST_UNTESTED,
2061 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00002062 .probe_timing = 10000, /* 10 ms */
Sean Nelson89187292009-12-23 12:02:55 +00002063 .block_erasers =
2064 {
2065 {
2066 .eraseblocks = { {512 * 1024, 1} },
2067 .block_erase = erase_chip_block_jedec,
2068 }
2069 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002070 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002071 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002072 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00002073 },
2074
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002075 {
2076 .vendor = "Atmel",
2077 .name = "AT45CS1282",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002078 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002079 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002080 .model_id = ATMEL_AT45CS1282,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002081 .total_size = 16896 /* No power of two sizes */,
2082 .page_size = 1056 /* No power of two sizes */,
Steven Zakulec3603a282012-05-02 20:07:57 +00002083 /* does not support EWSR nor WREN and has no writable status register bits whatsoever */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002084 .tested = TEST_BAD_READ,
2085 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002086 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002087 .write = NULL /* Incompatible Page write */,
2088 .read = NULL /* Incompatible read */,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002089 .voltage = {2700, 3600},
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002090 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002091
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002092 {
2093 .vendor = "Atmel",
2094 .name = "AT45DB011D",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002095 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002096 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002097 .model_id = ATMEL_AT45DB011D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002098 .total_size = 128 /* Size can only be determined from status register */,
2099 .page_size = 256 /* Size can only be determined from status register */,
Steven Zakulec3603a282012-05-02 20:07:57 +00002100 /* does not support EWSR nor WREN and has no writable status register bits whatsoever */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002101 .tested = TEST_BAD_READ,
2102 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002103 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002104 .write = NULL,
2105 .read = NULL,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002106 .voltage = {2700, 3600},
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002107 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002108
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002109 {
2110 .vendor = "Atmel",
2111 .name = "AT45DB021D",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002112 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002113 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002114 .model_id = ATMEL_AT45DB021D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002115 .total_size = 256 /* Size can only be determined from status register */,
2116 .page_size = 256 /* Size can only be determined from status register */,
Steven Zakulec3603a282012-05-02 20:07:57 +00002117 /* does not support EWSR nor WREN and has no writable status register bits whatsoever */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002118 .tested = TEST_BAD_READ,
2119 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002120 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002121 .write = NULL,
2122 .read = NULL,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002123 .voltage = {2700, 3600},
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002124 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002125
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002126 {
2127 .vendor = "Atmel",
2128 .name = "AT45DB041D",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002129 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002130 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002131 .model_id = ATMEL_AT45DB041D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002132 .total_size = 512 /* Size can only be determined from status register */,
2133 .page_size = 256 /* Size can only be determined from status register */,
Steven Zakulec3603a282012-05-02 20:07:57 +00002134 /* does not support EWSR nor WREN and has no writable status register bits whatsoever */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002135 .tested = TEST_BAD_READ,
2136 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002137 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002138 .write = NULL,
2139 .read = NULL,
Steven Zakulec7d257b42011-07-19 08:50:18 +00002140 .voltage = {2500, 3600}, /* 2.5-3.6V & 2.7-3.6V models available */
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002141 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002142
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002143 {
2144 .vendor = "Atmel",
2145 .name = "AT45DB081D",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002146 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002147 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002148 .model_id = ATMEL_AT45DB081D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002149 .total_size = 1024 /* Size can only be determined from status register */,
2150 .page_size = 256 /* Size can only be determined from status register */,
Steven Zakulec3603a282012-05-02 20:07:57 +00002151 /* does not support EWSR nor WREN and has no writable status register bits whatsoever */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002152 .tested = TEST_BAD_READ,
2153 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002154 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002155 .write = NULL,
2156 .read = NULL,
Steven Zakulec7d257b42011-07-19 08:50:18 +00002157 .voltage = {2700, 3600}, /* 2.5-3.6V & 2.7-3.6V models available */
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002158 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002159
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002160 {
2161 .vendor = "Atmel",
2162 .name = "AT45DB161D",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002163 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002164 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002165 .model_id = ATMEL_AT45DB161D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002166 .total_size = 2048 /* Size can only be determined from status register */,
2167 .page_size = 512 /* Size can only be determined from status register */,
Steven Zakulec3603a282012-05-02 20:07:57 +00002168 /* does not support EWSR nor WREN and has no writable status register bits whatsoever */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002169 .tested = TEST_BAD_READ,
2170 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002171 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002172 .write = NULL,
2173 .read = NULL,
Steven Zakulec7d257b42011-07-19 08:50:18 +00002174 .voltage = {2700, 3600}, /* 2.5-3.6V & 2.7-3.6V models available */
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002175 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002176
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002177 {
2178 .vendor = "Atmel",
2179 .name = "AT45DB321C",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002180 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002181 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002182 .model_id = ATMEL_AT45DB321C,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002183 .total_size = 4224 /* No power of two sizes */,
2184 .page_size = 528 /* No power of two sizes */,
Steven Zakulec3603a282012-05-02 20:07:57 +00002185 /* does not support EWSR nor WREN and has no writable status register bits whatsoever */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002186 .tested = TEST_BAD_READ,
2187 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002188 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002189 .write = NULL,
2190 .read = NULL /* Incompatible read */,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002191 .voltage = {2700, 3600},
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002192 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002193
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002194 {
2195 .vendor = "Atmel",
2196 .name = "AT45DB321D",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002197 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002198 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002199 .model_id = ATMEL_AT45DB321D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002200 .total_size = 4096 /* Size can only be determined from status register */,
2201 .page_size = 512 /* Size can only be determined from status register */,
Daniel Lenski65922a32012-02-15 23:40:23 +00002202 /* OTP: 128B total, 64B pre-programmed; read 0x77; write 0x9B */
Steven Zakulec3603a282012-05-02 20:07:57 +00002203 /* does not support EWSR nor WREN and has no writable status register bits whatsoever */
Daniel Lenski65922a32012-02-15 23:40:23 +00002204 .feature_bits = FEATURE_OTP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002205 .tested = TEST_BAD_READ,
2206 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002207 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002208 .write = NULL,
2209 .read = NULL,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002210 .voltage = {2700, 3600},
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002211 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002212
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002213 {
2214 .vendor = "Atmel",
2215 .name = "AT45DB642D",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002216 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002217 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002218 .model_id = ATMEL_AT45DB642D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002219 .total_size = 8192 /* Size can only be determined from status register */,
2220 .page_size = 1024 /* Size can only be determined from status register */,
Steven Zakulec3603a282012-05-02 20:07:57 +00002221 /* does not support EWSR nor WREN and has no writable status register bits whatsoever */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002222 .tested = TEST_BAD_READ,
2223 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002224 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002225 .write = NULL,
2226 .read = NULL,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002227 .voltage = {2700, 3600},
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00002228 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002229
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002230 {
2231 .vendor = "Atmel",
Uwe Hermannb4dcb712009-05-13 11:36:06 +00002232 .name = "AT49BV512",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002233 .bustype = BUS_PARALLEL,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00002234 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002235 .model_id = ATMEL_AT49BV512,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00002236 .total_size = 64,
2237 .page_size = 64,
Sean Nelson35727f72010-01-28 23:55:12 +00002238 .feature_bits = FEATURE_EITHER_RESET,
Stefan Tauner8179be52011-06-04 13:13:34 +00002239 .tested = TEST_OK_PREW,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00002240 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002241 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00002242 .block_erasers =
2243 {
2244 {
2245 .eraseblocks = { {64 * 1024, 1} },
2246 .block_erase = erase_chip_block_jedec,
2247 }
2248 },
Sean Nelson35727f72010-01-28 23:55:12 +00002249 .write = write_jedec_1,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00002250 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002251 .voltage = {2700, 3600},
Uwe Hermannb4dcb712009-05-13 11:36:06 +00002252 },
2253
2254 {
2255 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002256 .name = "AT49F002(N)",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002257 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002258 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002259 .model_id = ATMEL_AT49F002N,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002260 .total_size = 256,
2261 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002262 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002263 .tested = TEST_UNTESTED,
2264 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002265 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00002266 .block_erasers =
2267 {
2268 {
2269 .eraseblocks = {
2270 {16 * 1024, 1},
2271 {8 * 1024, 2},
2272 {96 * 1024, 1},
2273 {128 * 1024, 1},
2274 },
2275 .block_erase = erase_sector_jedec,
2276 }, {
2277 .eraseblocks = { {256 * 1024, 1} },
2278 .block_erase = erase_chip_block_jedec,
2279 }
2280 },
Sean Nelson35727f72010-01-28 23:55:12 +00002281 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002282 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002283 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00002284 },
2285
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002286 {
2287 .vendor = "Atmel",
2288 .name = "AT49F002(N)T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002289 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002290 .manufacture_id = ATMEL_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002291 .model_id = ATMEL_AT49F002NT,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002292 .total_size = 256,
2293 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002294 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00002295 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002296 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002297 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00002298 .block_erasers =
2299 {
2300 {
2301 .eraseblocks = {
2302 {128 * 1024, 1},
2303 {96 * 1024, 1},
2304 {8 * 1024, 2},
2305 {16 * 1024, 1},
2306 },
2307 .block_erase = erase_sector_jedec,
2308 }, {
2309 .eraseblocks = { {256 * 1024, 1} },
2310 .block_erase = erase_chip_block_jedec,
2311 }
2312 },
Sean Nelson35727f72010-01-28 23:55:12 +00002313 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002314 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002315 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00002316 },
2317
Daniel Lenskidf90d3a2010-07-22 11:44:38 +00002318 {
Uwe Hermannc74e9772011-09-08 19:55:18 +00002319 .vendor = "Atmel",
Andrew Morgan8dd97f92012-08-13 23:43:46 +00002320 .name = "AT49(H)F010",
2321 .bustype = BUS_PARALLEL,
2322 .manufacture_id = ATMEL_ID,
2323 .model_id = ATMEL_AT49F010,
2324 .total_size = 128,
2325 .page_size = 0, /* unused */
2326 .feature_bits = FEATURE_EITHER_RESET,
2327 .tested = TEST_OK_PREW,
2328 .probe = probe_jedec,
2329 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2330 .block_erasers =
2331 {
2332 {
2333 .eraseblocks = { {128 * 1024, 1} },
2334 .block_erase = erase_chip_block_jedec,
2335 }
2336 },
2337 .printlock = printlock_at49f,
2338 .write = write_jedec_1,
2339 .read = read_memmapped,
2340 .voltage = {4500, 5500},
2341 },
2342
2343 {
2344 .vendor = "Atmel",
David Borgf5a30f62012-04-15 13:16:32 +00002345 .name = "AT49F020",
2346 .bustype = BUS_PARALLEL,
2347 .manufacture_id = ATMEL_ID,
2348 .model_id = ATMEL_AT49F020,
2349 .total_size = 256,
Andrew Morgan8dd97f92012-08-13 23:43:46 +00002350 .page_size = 0, /* unused */
David Borgf5a30f62012-04-15 13:16:32 +00002351 .feature_bits = FEATURE_EITHER_RESET,
2352 .tested = TEST_OK_PRE,
2353 .probe = probe_jedec,
2354 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2355 .block_erasers =
2356 {
2357 {
2358 .eraseblocks = { {256 * 1024, 1} },
2359 .block_erase = erase_chip_block_jedec,
2360 }
2361 /* Chip features an optional permanent write protection
2362 * of the first 8 kB. The erase function is the same as
2363 * above, but 00000H to 01FFFH will not be erased.
2364 * FIXME: add another eraser when partial erasers are
2365 * supported.
2366 */
2367 },
2368 .printlock = printlock_at49f,
2369 .write = write_jedec_1,
2370 .read = read_memmapped,
2371 .voltage = {4500, 5500},
2372 },
2373
2374 {
2375 .vendor = "Atmel",
2376 .name = "AT49F040",
2377 .bustype = BUS_PARALLEL,
2378 .manufacture_id = ATMEL_ID,
2379 .model_id = ATMEL_AT49F040,
2380 .total_size = 512,
Andrew Morgan8dd97f92012-08-13 23:43:46 +00002381 .page_size = 0, /* unused */
David Borgf5a30f62012-04-15 13:16:32 +00002382 .feature_bits = FEATURE_EITHER_RESET,
2383 .tested = TEST_UNTESTED,
2384 .probe = probe_jedec,
2385 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2386 .block_erasers =
2387 {
2388 {
2389 .eraseblocks = { {512 * 1024, 1} },
2390 .block_erase = erase_chip_block_jedec,
2391 }
2392 /* Chip features an optional permanent write protection
2393 * of the first 16 kB. The erase function is the same as
2394 * above, but 00000H to 03FFFH will not be erased.
2395 * FIXME: add another eraser when partial erasers are
2396 * supported.
2397 */
2398 },
2399 .printlock = printlock_at49f,
2400 .write = write_jedec_1,
2401 .read = read_memmapped,
2402 .voltage = {4500, 5500},
2403 },
2404
2405 {
2406 .vendor = "Atmel",
Andrew Morgan8dd97f92012-08-13 23:43:46 +00002407 .name = "AT49F080",
2408 .bustype = BUS_PARALLEL,
2409 .manufacture_id = ATMEL_ID,
2410 .model_id = ATMEL_AT49F080,
2411 .total_size = 1024,
2412 .page_size = 0, /* unused */
2413 .feature_bits = FEATURE_EITHER_RESET,
2414 .tested = TEST_UNTESTED,
2415 .probe = probe_jedec,
2416 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2417 .block_erasers =
2418 {
2419 {
2420 .eraseblocks = { {1024 * 1024, 1} },
2421 .block_erase = erase_chip_block_jedec,
2422 }
2423 /* Chip features an optional permanent write protection
2424 * of the first 16 kB. The erase function is the same as
2425 * above, but 00000H to 03FFFH will not be erased.
2426 * FIXME: add another eraser when partial erasers are
2427 * supported.
2428 */
2429 },
2430 .printlock = printlock_at49f,
2431 .write = write_jedec_1,
2432 .read = read_memmapped,
2433 .voltage = {4500, 5500},
2434 },
2435
2436 {
2437 /* 'top' version of AT49F080. equal in all aspects but the boot block address */
2438 .vendor = "Atmel",
2439 .name = "AT49F080T",
2440 .bustype = BUS_PARALLEL,
2441 .manufacture_id = ATMEL_ID,
2442 .model_id = ATMEL_AT49F080T,
2443 .total_size = 1024,
2444 .page_size = 0, /* unused */
2445 .feature_bits = FEATURE_EITHER_RESET,
2446 .tested = TEST_UNTESTED,
2447 .probe = probe_jedec,
2448 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2449 .block_erasers =
2450 {
2451 {
2452 .eraseblocks = { {1024 * 1024, 1} },
2453 .block_erase = erase_chip_block_jedec,
2454 }
2455 /* Chip features an optional permanent write protection
2456 * of the first 16 kB. The erase function is the same as
2457 * above, but FC000H to FFFFFH will not be erased.
2458 * FIXME: add another eraser when partial erasers are
2459 * supported.
2460 */
2461 },
2462 .printlock = printlock_at49f,
2463 .write = write_jedec_1,
2464 .read = read_memmapped,
2465 .voltage = {4500, 5500},
2466 },
2467
2468 {
2469 .vendor = "Atmel",
Uwe Hermannc74e9772011-09-08 19:55:18 +00002470 .name = "AT49LH002",
2471 .bustype = BUS_LPC | BUS_FWH, /* A/A Mux */
2472 .manufacture_id = ATMEL_ID,
2473 .model_id = ATMEL_AT49LH002,
2474 .total_size = 256,
2475 .page_size = 0, /* unused */
2476 .feature_bits = FEATURE_REGISTERMAP, /* TODO: LPC OK too? */
2477 .tested = TEST_UNTESTED,
2478 .probe = probe_82802ab, /* TODO: 0xff cmd not documented? */
2479 .probe_timing = TIMING_FIXME,
2480 .block_erasers =
2481 {
2482 {
2483 .eraseblocks = {
2484 {64 * 1024, 3},
2485 {32 * 1024, 1},
2486 {8 * 1024, 2},
2487 {16 * 1024, 1},
2488 },
2489 .block_erase = erase_block_82802ab,
2490 }, {
2491 .eraseblocks = {
2492 {64 * 1024, 4},
2493 },
2494 .block_erase = NULL, /* TODO: Implement. */
2495 },
2496 },
2497 .printlock = NULL, /* TODO */
2498 .unlock = NULL, /* unlock_82802ab() not correct(?) */
2499 .write = write_82802ab,
2500 .read = read_memmapped,
2501 .voltage = {3000, 3600},
2502 },
2503
2504 {
Andrew Morganca081462011-09-13 22:05:44 +00002505 .vendor = "Catalyst",
2506 .name = "CAT28F512",
2507 .bustype = BUS_PARALLEL,
2508 .manufacture_id = CATALYST_ID,
2509 .model_id = CATALYST_CAT28F512,
2510 .total_size = 64,
2511 .page_size = 0, /* unused */
2512 .feature_bits = 0,
2513 .tested = TEST_OK_PR,
2514 .probe = probe_jedec, /* FIXME! */
2515 .probe_timing = TIMING_ZERO,
2516 .block_erasers =
2517 {
2518 {
2519 .eraseblocks = { {64 * 1024, 1} },
2520 .block_erase = NULL, /* TODO */
2521 },
2522 },
2523 .write = NULL, /* TODO */
2524 .read = read_memmapped,
2525 .voltage = {4500, 5500},
2526 },
2527
2528 {
Joshua Roysf1324e02010-09-16 00:51:51 +00002529 .vendor = "Bright",
2530 .name = "BM29F040",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002531 .bustype = BUS_PARALLEL,
Joshua Roysf1324e02010-09-16 00:51:51 +00002532 .manufacture_id = BRIGHT_ID,
2533 .model_id = BRIGHT_BM29F040,
2534 .total_size = 512,
2535 .page_size = 64 * 1024,
2536 .feature_bits = FEATURE_EITHER_RESET,
2537 .tested = TEST_OK_PR,
2538 .probe = probe_jedec,
2539 .probe_timing = TIMING_ZERO,
2540 .block_erasers =
2541 {
2542 {
2543 .eraseblocks = { {64 * 1024, 8} },
2544 .block_erase = erase_sector_jedec,
2545 }, {
2546 .eraseblocks = { {512 * 1024, 1} },
2547 .block_erase = erase_chip_block_jedec,
2548 },
2549 },
2550 .write = write_jedec_1,
2551 .read = read_memmapped,
Steven Zakulec7d257b42011-07-19 08:50:18 +00002552 .voltage = {4500, 5500},
Joshua Roysf1324e02010-09-16 00:51:51 +00002553 },
2554
2555 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002556 .vendor = "EMST",
2557 .name = "F49B002UA",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002558 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002559 .manufacture_id = EMST_ID,
2560 .model_id = EMST_F49B002UA,
2561 .total_size = 256,
2562 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00002563 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002564 .tested = TEST_UNTESTED,
2565 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002566 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00002567 .block_erasers =
2568 {
2569 {
2570 .eraseblocks = {
2571 {128 * 1024, 1},
2572 {96 * 1024, 1},
2573 {8 * 1024, 2},
2574 {16 * 1024, 1},
2575 },
2576 .block_erase = erase_sector_jedec,
2577 }, {
2578 .eraseblocks = { {256 * 1024, 1} },
2579 .block_erase = erase_chip_block_jedec,
2580 }
2581 },
Sean Nelson35727f72010-01-28 23:55:12 +00002582 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002583 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002584 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00002585 },
2586
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002587 {
Michael Karcher80a59ea2010-06-19 22:06:35 +00002588 .vendor = "EMST",
2589 .name = "F25L008A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002590 .bustype = BUS_SPI,
Michael Karcher80a59ea2010-06-19 22:06:35 +00002591 .manufacture_id = EMST_ID,
2592 .model_id = EMST_F25L008A,
2593 .total_size = 1024,
2594 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00002595 .feature_bits = FEATURE_WRSR_EITHER,
Michael Karcher80a59ea2010-06-19 22:06:35 +00002596 .tested = TEST_UNTESTED,
2597 .probe = probe_spi_rdid,
2598 .probe_timing = TIMING_ZERO,
2599 .block_erasers =
2600 {
2601 {
2602 .eraseblocks = { {4 * 1024, 256} },
2603 .block_erase = spi_block_erase_20,
2604 }, {
2605 .eraseblocks = { {64 * 1024, 16} },
2606 .block_erase = spi_block_erase_d8,
2607 }, {
2608 .eraseblocks = { {1024 * 1024, 1} },
2609 .block_erase = spi_block_erase_60,
2610 }, {
2611 .eraseblocks = { {1024 * 1024, 1} },
2612 .block_erase = spi_block_erase_c7,
2613 }
2614 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002615 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger9a795d82010-07-14 16:19:05 +00002616 .write = spi_chip_write_1,
Michael Karcher4497e862010-07-10 19:34:15 +00002617 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002618 .voltage = {2700, 3600},
Michael Karcher80a59ea2010-06-19 22:06:35 +00002619 },
2620
2621 {
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002622 .vendor = "Eon",
2623 .name = "EN25B05",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002624 .bustype = BUS_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002625 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002626 .model_id = EON_EN25B05,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002627 .total_size = 64,
2628 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00002629 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002630 .tested = TEST_UNTESTED,
2631 .probe = probe_spi_rdid,
2632 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002633 .block_erasers =
2634 {
2635 {
2636 .eraseblocks = {
2637 {4 * 1024, 2},
2638 {8 * 1024, 1},
2639 {16 * 1024, 1},
2640 {32 * 1024, 1},
2641 },
2642 .block_erase = spi_block_erase_d8,
2643 }, {
2644 .eraseblocks = { {64 * 1024, 1} },
2645 .block_erase = spi_block_erase_c7,
2646 }
2647 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002648 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002649 .write = spi_chip_write_256,
2650 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002651 .voltage = {2700, 3600},
Sean Nelson54596372010-01-09 05:30:14 +00002652 },
2653
2654 {
2655 .vendor = "Eon",
2656 .name = "EN25B05T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002657 .bustype = BUS_SPI,
Sean Nelson54596372010-01-09 05:30:14 +00002658 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002659 .model_id = EON_EN25B05,
Sean Nelson54596372010-01-09 05:30:14 +00002660 .total_size = 64,
2661 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00002662 .feature_bits = FEATURE_WRSR_WREN,
Sean Nelson54596372010-01-09 05:30:14 +00002663 .tested = TEST_UNTESTED,
2664 .probe = probe_spi_rdid,
2665 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002666 .block_erasers =
2667 {
2668 {
2669 .eraseblocks = {
2670 {32 * 1024, 1},
2671 {16 * 1024, 1},
2672 {8 * 1024, 1},
2673 {4 * 1024, 2},
2674 },
2675 .block_erase = spi_block_erase_d8,
2676 }, {
2677 .eraseblocks = { {64 * 1024, 1} },
2678 .block_erase = spi_block_erase_c7,
2679 }
2680 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002681 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002682 .write = spi_chip_write_256,
2683 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002684 .voltage = {2700, 3600},
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002685 },
2686
2687 {
2688 .vendor = "Eon",
2689 .name = "EN25B10",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002690 .bustype = BUS_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002691 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002692 .model_id = EON_EN25B10,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002693 .total_size = 128,
2694 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00002695 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002696 .tested = TEST_UNTESTED,
2697 .probe = probe_spi_rdid,
2698 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002699 .block_erasers =
2700 {
2701 {
2702 .eraseblocks = {
2703 {4 * 1024, 2},
2704 {8 * 1024, 1},
2705 {16 * 1024, 1},
2706 {32 * 1024, 3},
2707 },
2708 .block_erase = spi_block_erase_d8,
2709 }, {
2710 .eraseblocks = { {128 * 1024, 1} },
2711 .block_erase = spi_block_erase_c7,
2712 }
2713 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002714 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002715 .write = spi_chip_write_256,
2716 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002717 .voltage = {2700, 3600},
Sean Nelson54596372010-01-09 05:30:14 +00002718 },
2719
2720 {
2721 .vendor = "Eon",
2722 .name = "EN25B10T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002723 .bustype = BUS_SPI,
Sean Nelson54596372010-01-09 05:30:14 +00002724 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002725 .model_id = EON_EN25B10,
Sean Nelson54596372010-01-09 05:30:14 +00002726 .total_size = 128,
2727 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00002728 .feature_bits = FEATURE_WRSR_WREN,
Sean Nelson54596372010-01-09 05:30:14 +00002729 .tested = TEST_UNTESTED,
2730 .probe = probe_spi_rdid,
2731 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002732 .block_erasers =
2733 {
2734 {
2735 .eraseblocks = {
2736 {32 * 1024, 3},
2737 {16 * 1024, 1},
2738 {8 * 1024, 1},
2739 {4 * 1024, 2},
2740 },
2741 .block_erase = spi_block_erase_d8,
2742 }, {
2743 .eraseblocks = { {128 * 1024, 1} },
2744 .block_erase = spi_block_erase_c7,
2745 }
2746 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002747 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002748 .write = spi_chip_write_256,
2749 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002750 .voltage = {2700, 3600},
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002751 },
2752
2753 {
2754 .vendor = "Eon",
2755 .name = "EN25B20",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002756 .bustype = BUS_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002757 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002758 .model_id = EON_EN25B20,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002759 .total_size = 256,
2760 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00002761 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002762 .tested = TEST_UNTESTED,
2763 .probe = probe_spi_rdid,
2764 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002765 .block_erasers =
2766 {
2767 {
2768 .eraseblocks = {
2769 {4 * 1024, 2},
2770 {8 * 1024, 1},
2771 {16 * 1024, 1},
2772 {32 * 1024, 1},
2773 {64 * 1024, 3}
2774 },
2775 .block_erase = spi_block_erase_d8,
2776 }, {
2777 .eraseblocks = { {256 * 1024, 1} },
2778 .block_erase = spi_block_erase_c7,
2779 }
2780 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002781 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002782 .write = spi_chip_write_256,
2783 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002784 .voltage = {2700, 3600},
Sean Nelson54596372010-01-09 05:30:14 +00002785 },
2786
2787 {
2788 .vendor = "Eon",
2789 .name = "EN25B20T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002790 .bustype = BUS_SPI,
Sean Nelson54596372010-01-09 05:30:14 +00002791 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002792 .model_id = EON_EN25B20,
Sean Nelson54596372010-01-09 05:30:14 +00002793 .total_size = 256,
2794 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00002795 .feature_bits = FEATURE_WRSR_WREN,
Sean Nelson54596372010-01-09 05:30:14 +00002796 .tested = TEST_UNTESTED,
2797 .probe = probe_spi_rdid,
2798 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002799 .block_erasers =
2800 {
2801 {
2802 .eraseblocks = {
2803 {64 * 1024, 3},
2804 {32 * 1024, 1},
2805 {16 * 1024, 1},
2806 {8 * 1024, 1},
2807 {4 * 1024, 2},
2808 },
2809 .block_erase = spi_block_erase_d8,
2810 }, {
2811 .eraseblocks = { {256 * 1024, 1} },
2812 .block_erase = spi_block_erase_c7,
2813 }
2814 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002815 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002816 .write = spi_chip_write_256,
2817 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002818 .voltage = {2700, 3600},
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002819 },
2820
2821 {
2822 .vendor = "Eon",
2823 .name = "EN25B40",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002824 .bustype = BUS_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002825 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002826 .model_id = EON_EN25B40,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002827 .total_size = 512,
2828 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00002829 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002830 .tested = TEST_UNTESTED,
2831 .probe = probe_spi_rdid,
2832 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002833 .block_erasers =
2834 {
2835 {
2836 .eraseblocks = {
2837 {4 * 1024, 2},
2838 {8 * 1024, 1},
2839 {16 * 1024, 1},
2840 {32 * 1024, 1},
2841 {64 * 1024, 7}
2842 },
2843 .block_erase = spi_block_erase_d8,
2844 }, {
2845 .eraseblocks = { {512 * 1024, 1} },
2846 .block_erase = spi_block_erase_c7,
2847 }
2848 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002849 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002850 .write = spi_chip_write_256,
2851 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002852 .voltage = {2700, 3600},
Sean Nelson54596372010-01-09 05:30:14 +00002853 },
2854
2855 {
2856 .vendor = "Eon",
2857 .name = "EN25B40T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002858 .bustype = BUS_SPI,
Sean Nelson54596372010-01-09 05:30:14 +00002859 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002860 .model_id = EON_EN25B40,
Sean Nelson54596372010-01-09 05:30:14 +00002861 .total_size = 512,
2862 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00002863 .feature_bits = FEATURE_WRSR_WREN,
Sean Nelson54596372010-01-09 05:30:14 +00002864 .tested = TEST_UNTESTED,
2865 .probe = probe_spi_rdid,
2866 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002867 .block_erasers =
2868 {
2869 {
2870 .eraseblocks = {
2871 {64 * 1024, 7},
2872 {32 * 1024, 1},
2873 {16 * 1024, 1},
2874 {8 * 1024, 1},
2875 {4 * 1024, 2},
2876 },
2877 .block_erase = spi_block_erase_d8,
2878 }, {
2879 .eraseblocks = { {512 * 1024, 1} },
2880 .block_erase = spi_block_erase_c7,
2881 }
2882 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002883 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002884 .write = spi_chip_write_256,
2885 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002886 .voltage = {2700, 3600},
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002887 },
2888
2889 {
2890 .vendor = "Eon",
2891 .name = "EN25B80",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002892 .bustype = BUS_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002893 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002894 .model_id = EON_EN25B80,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002895 .total_size = 1024,
2896 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00002897 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002898 .tested = TEST_UNTESTED,
2899 .probe = probe_spi_rdid,
2900 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002901 .block_erasers =
2902 {
2903 {
2904 .eraseblocks = {
2905 {4 * 1024, 2},
2906 {8 * 1024, 1},
2907 {16 * 1024, 1},
2908 {32 * 1024, 1},
2909 {64 * 1024, 15}
2910 },
2911 .block_erase = spi_block_erase_d8,
2912 }, {
2913 .eraseblocks = { {1024 * 1024, 1} },
2914 .block_erase = spi_block_erase_c7,
2915 }
2916 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002917 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002918 .write = spi_chip_write_256,
2919 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002920 .voltage = {2700, 3600},
Sean Nelson54596372010-01-09 05:30:14 +00002921 },
2922
2923 {
2924 .vendor = "Eon",
2925 .name = "EN25B80T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002926 .bustype = BUS_SPI,
Sean Nelson54596372010-01-09 05:30:14 +00002927 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002928 .model_id = EON_EN25B80,
Sean Nelson54596372010-01-09 05:30:14 +00002929 .total_size = 1024,
2930 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00002931 .feature_bits = FEATURE_WRSR_WREN,
Sean Nelson54596372010-01-09 05:30:14 +00002932 .tested = TEST_UNTESTED,
2933 .probe = probe_spi_rdid,
2934 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002935 .block_erasers =
2936 {
2937 {
2938 .eraseblocks = {
2939 {64 * 1024, 15},
2940 {32 * 1024, 1},
2941 {16 * 1024, 1},
2942 {8 * 1024, 1},
2943 {4 * 1024, 2},
2944 },
2945 .block_erase = spi_block_erase_d8,
2946 }, {
2947 .eraseblocks = { {1024 * 1024, 1} },
2948 .block_erase = spi_block_erase_c7,
2949 }
2950 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002951 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002952 .write = spi_chip_write_256,
2953 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002954 .voltage = {2700, 3600},
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002955 },
2956
2957 {
2958 .vendor = "Eon",
2959 .name = "EN25B16",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002960 .bustype = BUS_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002961 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002962 .model_id = EON_EN25B16,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002963 .total_size = 2048,
2964 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00002965 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002966 .tested = TEST_UNTESTED,
2967 .probe = probe_spi_rdid,
2968 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002969 .block_erasers =
2970 {
2971 {
2972 .eraseblocks = {
2973 {4 * 1024, 2},
2974 {8 * 1024, 1},
2975 {16 * 1024, 1},
2976 {32 * 1024, 1},
2977 {64 * 1024, 31},
2978 },
2979 .block_erase = spi_block_erase_d8,
2980 }, {
2981 .eraseblocks = { {2 * 1024 * 1024, 1} },
2982 .block_erase = spi_block_erase_c7,
2983 }
2984 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002985 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002986 .write = spi_chip_write_256,
2987 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00002988 .voltage = {2700, 3600},
Sean Nelson54596372010-01-09 05:30:14 +00002989 },
2990
2991 {
2992 .vendor = "Eon",
2993 .name = "EN25B16T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00002994 .bustype = BUS_SPI,
Sean Nelson54596372010-01-09 05:30:14 +00002995 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00002996 .model_id = EON_EN25B16,
Sean Nelson54596372010-01-09 05:30:14 +00002997 .total_size = 2048,
2998 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00002999 .feature_bits = FEATURE_WRSR_WREN,
Sean Nelson54596372010-01-09 05:30:14 +00003000 .tested = TEST_UNTESTED,
3001 .probe = probe_spi_rdid,
3002 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003003 .block_erasers =
3004 {
3005 {
3006 .eraseblocks = {
3007 {64 * 1024, 31},
3008 {32 * 1024, 1},
3009 {16 * 1024, 1},
3010 {8 * 1024, 1},
3011 {4 * 1024, 2},
3012 },
3013 .block_erase = spi_block_erase_d8,
3014 }, {
3015 .eraseblocks = { {2 * 1024 * 1024, 1} },
3016 .block_erase = spi_block_erase_c7,
3017 }
3018 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003019 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003020 .write = spi_chip_write_256,
3021 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003022 .voltage = {2700, 3600},
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003023 },
3024
3025 {
3026 .vendor = "Eon",
3027 .name = "EN25B32",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003028 .bustype = BUS_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003029 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003030 .model_id = EON_EN25B32,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003031 .total_size = 4096,
3032 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00003033 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003034 .tested = TEST_UNTESTED,
3035 .probe = probe_spi_rdid,
3036 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003037 .block_erasers =
3038 {
3039 {
3040 .eraseblocks = {
3041 {4 * 1024, 2},
3042 {8 * 1024, 1},
3043 {16 * 1024, 1},
3044 {32 * 1024, 1},
3045 {64 * 1024, 63},
3046 },
3047 .block_erase = spi_block_erase_d8,
3048 }, {
3049 .eraseblocks = { {4 * 1024 * 1024, 1} },
3050 .block_erase = spi_block_erase_c7,
3051 }
3052 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003053 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00003054 .write = spi_chip_write_256,
3055 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003056 .voltage = {2700, 3600},
Sean Nelson54596372010-01-09 05:30:14 +00003057 },
3058
3059 {
3060 .vendor = "Eon",
3061 .name = "EN25B32T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003062 .bustype = BUS_SPI,
Sean Nelson54596372010-01-09 05:30:14 +00003063 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003064 .model_id = EON_EN25B32,
Sean Nelson54596372010-01-09 05:30:14 +00003065 .total_size = 4096,
3066 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00003067 .feature_bits = FEATURE_WRSR_WREN,
Sean Nelson54596372010-01-09 05:30:14 +00003068 .tested = TEST_UNTESTED,
3069 .probe = probe_spi_rdid,
3070 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003071 .block_erasers =
3072 {
3073 {
3074 .eraseblocks = {
3075 {64 * 1024, 63},
3076 {32 * 1024, 1},
3077 {16 * 1024, 1},
3078 {8 * 1024, 1},
3079 {4 * 1024, 2},
3080 },
3081 .block_erase = spi_block_erase_d8,
3082 }, {
3083 .eraseblocks = { {4 * 1024 * 1024, 1} },
3084 .block_erase = spi_block_erase_c7,
3085 }
3086 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003087 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003088 .write = spi_chip_write_256,
3089 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003090 .voltage = {2700, 3600},
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003091 },
3092
3093 {
3094 .vendor = "Eon",
3095 .name = "EN25B64",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003096 .bustype = BUS_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003097 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003098 .model_id = EON_EN25B64,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003099 .total_size = 8192,
3100 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00003101 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003102 .tested = TEST_UNTESTED,
3103 .probe = probe_spi_rdid,
3104 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003105 .block_erasers =
3106 {
3107 {
3108 .eraseblocks = {
3109 {4 * 1024, 2},
3110 {8 * 1024, 1},
3111 {16 * 1024, 1},
3112 {32 * 1024, 1},
3113 {64 * 1024, 127},
3114 },
3115 .block_erase = spi_block_erase_d8,
3116 }, {
3117 .eraseblocks = { {8 * 1024 * 1024, 1} },
3118 .block_erase = spi_block_erase_c7,
3119 }
3120 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003121 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00003122 .write = spi_chip_write_256,
3123 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003124 .voltage = {2700, 3600},
Sean Nelson54596372010-01-09 05:30:14 +00003125 },
3126
3127 {
3128 .vendor = "Eon",
3129 .name = "EN25B64T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003130 .bustype = BUS_SPI,
Sean Nelson54596372010-01-09 05:30:14 +00003131 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003132 .model_id = EON_EN25B64,
Sean Nelson54596372010-01-09 05:30:14 +00003133 .total_size = 8192,
3134 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00003135 .feature_bits = FEATURE_WRSR_WREN,
Sean Nelson54596372010-01-09 05:30:14 +00003136 .tested = TEST_UNTESTED,
3137 .probe = probe_spi_rdid,
3138 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003139 .block_erasers =
3140 {
3141 {
3142 .eraseblocks = {
3143 {64 * 1024, 127},
3144 {32 * 1024, 1},
3145 {16 * 1024, 1},
3146 {8 * 1024, 1},
3147 {4 * 1024, 2},
3148 },
3149 .block_erase = spi_block_erase_d8,
3150 }, {
3151 .eraseblocks = { {8 * 1024 * 1024, 1} },
3152 .block_erase = spi_block_erase_c7,
3153 }
3154 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003155 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003156 .write = spi_chip_write_256,
3157 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003158 .voltage = {2700, 3600},
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003159 },
3160
3161 {
3162 .vendor = "Eon",
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003163 .name = "EN25F05",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003164 .bustype = BUS_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003165 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003166 .model_id = EON_EN25F05,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003167 .total_size = 64,
3168 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00003169 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003170 .tested = TEST_UNTESTED,
3171 .probe = probe_spi_rdid,
3172 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003173 .block_erasers =
3174 {
3175 {
3176 .eraseblocks = { {4 * 1024, 16} },
3177 .block_erase = spi_block_erase_20,
3178 }, {
3179 .eraseblocks = { {32 * 1024, 2} },
3180 .block_erase = spi_block_erase_d8,
3181 }, {
3182 .eraseblocks = { {32 * 1024, 2} },
3183 .block_erase = spi_block_erase_52,
3184 }, {
3185 .eraseblocks = { {64 * 1024, 1} },
3186 .block_erase = spi_block_erase_60,
3187 }, {
3188 .eraseblocks = { {64 * 1024, 1} },
3189 .block_erase = spi_block_erase_c7,
3190 }
3191 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003192 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003193 .write = spi_chip_write_256,
3194 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003195 .voltage = {2700, 3600},
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003196 },
3197
3198 {
3199 .vendor = "Eon",
3200 .name = "EN25F10",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003201 .bustype = BUS_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003202 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003203 .model_id = EON_EN25F10,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003204 .total_size = 128,
3205 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00003206 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003207 .tested = TEST_UNTESTED,
3208 .probe = probe_spi_rdid,
3209 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003210 .block_erasers =
3211 {
3212 {
3213 .eraseblocks = { {4 * 1024, 32} },
3214 .block_erase = spi_block_erase_20,
3215 }, {
3216 .eraseblocks = { {32 * 1024, 4} },
3217 .block_erase = spi_block_erase_d8,
3218 }, {
3219 .eraseblocks = { {32 * 1024, 4} },
3220 .block_erase = spi_block_erase_52,
3221 }, {
3222 .eraseblocks = { {128 * 1024, 1} },
3223 .block_erase = spi_block_erase_60,
3224 }, {
3225 .eraseblocks = { {128 * 1024, 1} },
3226 .block_erase = spi_block_erase_c7,
3227 }
3228 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003229 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003230 .write = spi_chip_write_256,
3231 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003232 .voltage = {2700, 3600},
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003233 },
3234
3235 {
3236 .vendor = "Eon",
3237 .name = "EN25F20",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003238 .bustype = BUS_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003239 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003240 .model_id = EON_EN25F20,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003241 .total_size = 256,
3242 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00003243 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003244 .tested = TEST_UNTESTED,
3245 .probe = probe_spi_rdid,
3246 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003247 .block_erasers =
3248 {
3249 {
3250 .eraseblocks = { {4 * 1024, 64} },
3251 .block_erase = spi_block_erase_20,
3252 }, {
3253 .eraseblocks = { {64 * 1024, 4} },
3254 .block_erase = spi_block_erase_d8,
3255 }, {
3256 .eraseblocks = { {64 * 1024, 4} },
3257 .block_erase = spi_block_erase_52,
3258 }, {
3259 .eraseblocks = { {256 * 1024, 1} },
3260 .block_erase = spi_block_erase_60,
3261 }, {
3262 .eraseblocks = { {256 * 1024, 1} },
3263 .block_erase = spi_block_erase_c7,
3264 }
3265 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003266 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003267 .write = spi_chip_write_256,
3268 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003269 .voltage = {2700, 3600},
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003270 },
3271
3272 {
3273 .vendor = "Eon",
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003274 .name = "EN25F40",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003275 .bustype = BUS_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003276 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003277 .model_id = EON_EN25F40,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003278 .total_size = 512,
3279 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00003280 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingerfaaa2b22009-06-22 10:06:28 +00003281 .tested = TEST_OK_PROBE,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003282 .probe = probe_spi_rdid,
3283 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003284 .block_erasers =
3285 {
3286 {
Sean Nelson54596372010-01-09 05:30:14 +00003287 .eraseblocks = { {4 * 1024, 128} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00003288 .block_erase = spi_block_erase_20,
3289 }, {
Sean Nelson54596372010-01-09 05:30:14 +00003290 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00003291 .block_erase = spi_block_erase_d8,
3292 }, {
Sean Nelson54596372010-01-09 05:30:14 +00003293 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00003294 .block_erase = spi_block_erase_60,
3295 }, {
Sean Nelson54596372010-01-09 05:30:14 +00003296 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00003297 .block_erase = spi_block_erase_c7,
3298 },
3299 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003300 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003301 .write = spi_chip_write_256,
3302 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003303 .voltage = {2700, 3600},
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003304 },
3305
3306 {
3307 .vendor = "Eon",
3308 .name = "EN25F80",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003309 .bustype = BUS_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003310 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003311 .model_id = EON_EN25F80,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003312 .total_size = 1024,
3313 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00003314 .feature_bits = FEATURE_WRSR_WREN,
Stefan Tauner716e0982011-07-25 20:38:52 +00003315 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003316 .probe = probe_spi_rdid,
3317 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003318 .block_erasers =
3319 {
3320 {
3321 .eraseblocks = { {4 * 1024, 256} },
3322 .block_erase = spi_block_erase_20,
3323 }, {
3324 .eraseblocks = { {64 * 1024, 16} },
3325 .block_erase = spi_block_erase_d8,
3326 }, {
3327 .eraseblocks = { {1024 * 1024, 1} },
3328 .block_erase = spi_block_erase_60,
3329 }, {
3330 .eraseblocks = { {1024 * 1024, 1} },
3331 .block_erase = spi_block_erase_c7,
3332 }
3333 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003334 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003335 .write = spi_chip_write_256,
3336 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003337 .voltage = {2700, 3600},
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003338 },
3339
3340 {
3341 .vendor = "Eon",
3342 .name = "EN25F16",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003343 .bustype = BUS_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003344 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003345 .model_id = EON_EN25F16,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003346 .total_size = 2048,
3347 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00003348 .feature_bits = FEATURE_WRSR_WREN,
Paul Menzel018d4822011-10-21 12:33:07 +00003349 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003350 .probe = probe_spi_rdid,
3351 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003352 .block_erasers =
3353 {
3354 {
3355 .eraseblocks = { {4 * 1024, 512} },
3356 .block_erase = spi_block_erase_20,
3357 }, {
3358 .eraseblocks = { {64 * 1024, 32} },
3359 .block_erase = spi_block_erase_d8,
3360 }, {
3361 .eraseblocks = { {2 * 1024 * 1024, 1} },
3362 .block_erase = spi_block_erase_60,
3363 }, {
3364 .eraseblocks = { {2 * 1024 * 1024, 1} },
3365 .block_erase = spi_block_erase_c7,
3366 }
3367 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003368 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003369 .write = spi_chip_write_256,
3370 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003371 .voltage = {2700, 3600},
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00003372 },
3373
3374 {
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003375 .vendor = "Eon",
3376 .name = "EN25F32",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003377 .bustype = BUS_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003378 .manufacture_id = EON_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003379 .model_id = EON_EN25F32,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003380 .total_size = 4096,
3381 .page_size = 256,
David Hendricksd6c5dfc2010-09-03 03:18:26 +00003382 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003383 .tested = TEST_UNTESTED,
3384 .probe = probe_spi_rdid,
3385 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003386 .block_erasers =
3387 {
3388 {
3389 .eraseblocks = { {4 * 1024, 1024} },
3390 .block_erase = spi_block_erase_20,
3391 }, {
3392 .eraseblocks = { {64 * 1024, 64} },
3393 .block_erase = spi_block_erase_d8,
3394 }, {
3395 .eraseblocks = { {4 * 1024 * 1024, 1} },
3396 .block_erase = spi_block_erase_60,
3397 }, {
3398 .eraseblocks = { {4 * 1024 * 1024, 1} },
3399 .block_erase = spi_block_erase_c7,
3400 }
3401 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003402 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003403 .write = spi_chip_write_256,
3404 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003405 .voltage = {2700, 3600},
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00003406 },
3407
3408 {
Russ Dill3cd5a122010-03-05 08:44:11 +00003409 .vendor = "Eon",
Stefan Taunerd932fd02012-09-06 17:37:16 +00003410 .name = "EN25F64",
3411 .bustype = BUS_SPI,
3412 .manufacture_id = EON_ID_NOPREFIX,
3413 .model_id = EON_EN25F32,
3414 .total_size = 8192,
3415 .page_size = 256,
3416 .feature_bits = FEATURE_WRSR_WREN,
3417 .tested = TEST_UNTESTED,
3418 .probe = probe_spi_rdid,
3419 .probe_timing = TIMING_ZERO,
3420 .block_erasers =
3421 {
3422 {
3423 .eraseblocks = { {4 * 1024, 2048} },
3424 .block_erase = spi_block_erase_20,
3425 }, {
3426 .eraseblocks = { {64 * 1024, 128} },
3427 .block_erase = spi_block_erase_d8,
3428 }, {
3429 .eraseblocks = { {8 * 1024 * 1024, 1} },
3430 .block_erase = spi_block_erase_60,
3431 }, {
3432 .eraseblocks = { {8 * 1024 * 1024, 1} },
3433 .block_erase = spi_block_erase_c7,
3434 }
3435 },
3436 .unlock = spi_disable_blockprotect,
3437 .write = spi_chip_write_256,
3438 .read = spi_chip_read,
3439 .voltage = {2700, 3600},
3440 },
3441
3442 {
3443 .vendor = "Eon",
David Hendricks6d715302011-07-24 22:21:57 +00003444 .name = "EN25Q40",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003445 .bustype = BUS_SPI,
David Hendricks6d715302011-07-24 22:21:57 +00003446 .manufacture_id = EON_ID_NOPREFIX,
3447 .model_id = EON_EN25Q40,
3448 .total_size = 512,
3449 .page_size = 256,
Daniel Lenski65922a32012-02-15 23:40:23 +00003450 /* OTP: 256B total; enter 0x3A */
3451 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
David Hendricks6d715302011-07-24 22:21:57 +00003452 .tested = TEST_UNTESTED,
3453 .probe = probe_spi_rdid,
3454 .probe_timing = TIMING_ZERO,
3455 .block_erasers =
3456 {
3457 {
3458 .eraseblocks = { {4 * 1024, 128} },
3459 .block_erase = spi_block_erase_20,
3460 }, {
3461 .eraseblocks = { {64 * 1024, 8} },
3462 .block_erase = spi_block_erase_d8,
3463 }, {
3464 .eraseblocks = { {512 * 1024, 1} },
3465 .block_erase = spi_block_erase_60,
3466 }, {
3467 .eraseblocks = { {512 * 1024, 1} },
3468 .block_erase = spi_block_erase_c7,
3469 }
3470 },
3471 .unlock = spi_disable_blockprotect,
3472 .write = spi_chip_write_256,
3473 .read = spi_chip_read,
3474 .voltage = {2700, 3600},
3475 },
3476
3477 {
3478 .vendor = "Eon",
3479 .name = "EN25Q80(A)",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003480 .bustype = BUS_SPI,
David Hendricks6d715302011-07-24 22:21:57 +00003481 .manufacture_id = EON_ID_NOPREFIX,
3482 .model_id = EON_EN25Q80,
3483 .total_size = 1024,
3484 .page_size = 256,
Daniel Lenski65922a32012-02-15 23:40:23 +00003485 /* OTP: 256B total; enter 0x3A */
3486 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
David Hendricks6d715302011-07-24 22:21:57 +00003487 .tested = TEST_UNTESTED,
3488 .probe = probe_spi_rdid,
3489 .probe_timing = TIMING_ZERO,
3490 .block_erasers =
3491 {
3492 {
3493 .eraseblocks = { {4 * 1024, 256} },
3494 .block_erase = spi_block_erase_20,
3495 }, {
3496 .eraseblocks = { {64 * 1024, 16} },
3497 .block_erase = spi_block_erase_d8,
3498 }, {
3499 .eraseblocks = { {1024 * 1024, 1} },
3500 .block_erase = spi_block_erase_60,
3501 }, {
3502 .eraseblocks = { {1024 * 1024, 1} },
3503 .block_erase = spi_block_erase_c7,
3504 }
3505 },
3506 .unlock = spi_disable_blockprotect,
3507 .write = spi_chip_write_256,
3508 .read = spi_chip_read,
3509 .voltage = {2700, 3600},
3510 },
3511
3512 {
3513 /* Note: EN25D16 is an evil twin which shares the model ID
3514 but has different write protection capabilities */
3515 .vendor = "Eon",
3516 .name = "EN25Q16",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003517 .bustype = BUS_SPI,
David Hendricks6d715302011-07-24 22:21:57 +00003518 .manufacture_id = EON_ID_NOPREFIX,
3519 .model_id = EON_EN25Q16,
3520 .total_size = 2048,
3521 .page_size = 256,
Daniel Lenski65922a32012-02-15 23:40:23 +00003522 /* OTP: D16 512B/Q16 128B total; enter 0x3A */
3523 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
David Hendricks6d715302011-07-24 22:21:57 +00003524 .tested = TEST_UNTESTED,
3525 .probe = probe_spi_rdid,
3526 .probe_timing = TIMING_ZERO,
3527 .block_erasers =
3528 {
3529 {
3530 .eraseblocks = { {4 * 1024, 512} },
3531 .block_erase = spi_block_erase_20,
3532 }, {
3533 .eraseblocks = { {64 * 1024, 32} },
3534 .block_erase = spi_block_erase_d8,
3535 }, {
3536 /* not supported by Q16 version */
3537 .eraseblocks = { {64 * 1024, 32} },
3538 .block_erase = spi_block_erase_52,
3539 }, {
3540 .eraseblocks = { {2 * 1024 * 1024, 1} },
3541 .block_erase = spi_block_erase_60,
3542 }, {
3543 .eraseblocks = { {2 * 1024 * 1024, 1} },
3544 .block_erase = spi_block_erase_c7,
3545 }
3546 },
3547 .unlock = spi_disable_blockprotect,
3548 .write = spi_chip_write_256,
3549 .read = spi_chip_read,
3550 .voltage = {2700, 3600},
3551 },
3552
3553 {
3554 .vendor = "Eon",
3555 .name = "EN25Q32(A/B)",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003556 .bustype = BUS_SPI,
David Hendricks6d715302011-07-24 22:21:57 +00003557 .manufacture_id = EON_ID_NOPREFIX,
3558 .model_id = EON_EN25Q32,
3559 .total_size = 4096,
3560 .page_size = 256,
Daniel Lenski65922a32012-02-15 23:40:23 +00003561 /* OTP: 512B total; enter 0x3A */
3562 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
Stefan Tauner2abab942012-04-27 20:41:23 +00003563 .tested = TEST_OK_PROBE,
David Hendricks6d715302011-07-24 22:21:57 +00003564 .probe = probe_spi_rdid,
3565 .probe_timing = TIMING_ZERO,
3566 .block_erasers =
3567 {
3568 {
3569 .eraseblocks = { {4 * 1024, 1024} },
3570 .block_erase = spi_block_erase_20,
3571 }, {
3572 .eraseblocks = { {64 * 1024, 64} },
3573 .block_erase = spi_block_erase_d8,
3574 }, {
3575 .eraseblocks = { {4 * 1024 * 1024, 1} },
3576 .block_erase = spi_block_erase_60,
3577 }, {
3578 .eraseblocks = { {4 * 1024 * 1024, 1} },
3579 .block_erase = spi_block_erase_c7,
3580 }
3581 },
3582 .unlock = spi_disable_blockprotect,
3583 .write = spi_chip_write_256,
3584 .read = spi_chip_read,
3585 .voltage = {2700, 3600},
3586 },
3587
3588 {
3589 .vendor = "Eon",
3590 .name = "EN25Q64",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003591 .bustype = BUS_SPI,
David Hendricks6d715302011-07-24 22:21:57 +00003592 .manufacture_id = EON_ID_NOPREFIX,
3593 .model_id = EON_EN25Q64,
3594 .total_size = 8192,
3595 .page_size = 256,
Daniel Lenski65922a32012-02-15 23:40:23 +00003596 /* OTP: 512B total; enter 0x3A */
3597 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
David Hendricks6d715302011-07-24 22:21:57 +00003598 .tested = TEST_UNTESTED,
3599 .probe = probe_spi_rdid,
3600 .probe_timing = TIMING_ZERO,
3601 .block_erasers =
3602 {
3603 {
3604 .eraseblocks = { {4 * 1024, 2048} },
3605 .block_erase = spi_block_erase_20,
3606 }, {
3607 .eraseblocks = { {64 * 1024, 128} },
3608 .block_erase = spi_block_erase_d8,
3609 }, {
3610 .eraseblocks = { {8 * 1024 * 1024, 1} },
3611 .block_erase = spi_block_erase_60,
3612 }, {
3613 .eraseblocks = { {8 * 1024 * 1024, 1} },
3614 .block_erase = spi_block_erase_c7,
3615 }
3616 },
3617 .unlock = spi_disable_blockprotect,
3618 .write = spi_chip_write_256,
3619 .read = spi_chip_read,
3620 .voltage = {2700, 3600},
3621 },
3622
3623 {
3624 .vendor = "Eon",
3625 .name = "EN25Q128",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003626 .bustype = BUS_SPI,
David Hendricks6d715302011-07-24 22:21:57 +00003627 .manufacture_id = EON_ID_NOPREFIX,
3628 .model_id = EON_EN25Q128,
3629 .total_size = 16384,
3630 .page_size = 256,
Daniel Lenski65922a32012-02-15 23:40:23 +00003631 /* OTP: 512B total; enter 0x3A */
3632 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
David Hendricks6d715302011-07-24 22:21:57 +00003633 .tested = TEST_UNTESTED,
3634 .probe = probe_spi_rdid,
3635 .probe_timing = TIMING_ZERO,
3636 .block_erasers =
3637 {
3638 {
3639 .eraseblocks = { {4 * 1024, 4096} },
3640 .block_erase = spi_block_erase_20,
3641 }, {
3642 .eraseblocks = { {64 * 1024, 256} },
3643 .block_erase = spi_block_erase_d8,
3644 }, {
3645 .eraseblocks = { {16 * 1024 * 1024, 1} },
3646 .block_erase = spi_block_erase_60,
3647 }, {
3648 .eraseblocks = { {16 * 1024 * 1024, 1} },
3649 .block_erase = spi_block_erase_c7,
3650 }
3651 },
3652 .unlock = spi_disable_blockprotect,
3653 .write = spi_chip_write_256,
3654 .read = spi_chip_read,
3655 },
3656
3657 {
3658 .vendor = "Eon",
3659 .name = "EN25QH16",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003660 .bustype = BUS_SPI,
David Hendricks6d715302011-07-24 22:21:57 +00003661 .manufacture_id = EON_ID_NOPREFIX,
3662 .model_id = EON_EN25QH16,
3663 .total_size = 2048,
3664 .page_size = 256,
Daniel Lenski65922a32012-02-15 23:40:23 +00003665 /* supports SFDP */
3666 /* OTP: 512B total; enter 0x3A */
3667 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
Stefan Taunerd94d25d2012-07-28 03:17:15 +00003668 .tested = TEST_OK_PR,
David Hendricks6d715302011-07-24 22:21:57 +00003669 .probe = probe_spi_rdid,
3670 .probe_timing = TIMING_ZERO,
3671 .block_erasers =
3672 {
3673 {
3674 .eraseblocks = { {4 * 1024, 512} },
3675 .block_erase = spi_block_erase_20,
3676 }, {
3677 .eraseblocks = { {64 * 1024, 32} },
3678 .block_erase = spi_block_erase_d8,
3679 }, {
3680 .eraseblocks = { {1024 * 2048, 1} },
3681 .block_erase = spi_block_erase_60,
3682 }, {
3683 .eraseblocks = { {1024 * 2048, 1} },
3684 .block_erase = spi_block_erase_c7,
3685 }
3686 },
3687 .unlock = spi_disable_blockprotect,
3688 .write = spi_chip_write_256,
3689 .read = spi_chip_read,
Stefan Tauner2cef9162012-05-14 01:51:46 +00003690 .voltage = {2700, 3600},
3691 },
3692
3693 {
3694 .vendor = "Eon",
3695 .name = "EN25QH32",
3696 .bustype = BUS_SPI,
3697 .manufacture_id = EON_ID_NOPREFIX,
3698 .model_id = EON_EN25QH32,
3699 .total_size = 4096,
3700 .page_size = 256,
3701 /* supports SFDP */
3702 /* OTP: 512B total; enter 0x3A */
3703 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
3704 .tested = TEST_UNTESTED,
3705 .probe = probe_spi_rdid,
3706 .probe_timing = TIMING_ZERO,
3707 .block_erasers =
3708 {
3709 {
3710 .eraseblocks = { {4 * 1024, 1024} },
3711 .block_erase = spi_block_erase_20,
3712 }, {
3713 .eraseblocks = { {64 * 1024, 64} },
3714 .block_erase = spi_block_erase_d8,
3715 }, {
3716 .eraseblocks = { {1024 * 4096, 1} },
3717 .block_erase = spi_block_erase_60,
3718 }, {
3719 .eraseblocks = { {1024 * 4096, 1} },
3720 .block_erase = spi_block_erase_c7,
3721 }
3722 },
3723 .unlock = spi_disable_blockprotect,
3724 .write = spi_chip_write_256,
3725 .read = spi_chip_read,
3726 .voltage = {2700, 3600},
David Hendricks6d715302011-07-24 22:21:57 +00003727 },
3728
3729 {
3730 .vendor = "Eon",
Russ Dill3cd5a122010-03-05 08:44:11 +00003731 .name = "EN29F010",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003732 .bustype = BUS_PARALLEL,
Russ Dill3cd5a122010-03-05 08:44:11 +00003733 .manufacture_id = EON_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003734 .model_id = EON_EN29F010,
Russ Dill3cd5a122010-03-05 08:44:11 +00003735 .total_size = 128,
3736 .page_size = 128,
3737 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00003738 .tested = TEST_OK_PRE,
Russ Dill3cd5a122010-03-05 08:44:11 +00003739 .probe = probe_jedec,
3740 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3741 .block_erasers =
3742 {
3743 {
3744 .eraseblocks = { {16 * 1024, 8} },
3745 .block_erase = erase_sector_jedec,
3746 },
3747 {
3748 .eraseblocks = { {128 * 1024, 1} },
3749 .block_erase = erase_chip_block_jedec,
3750 },
3751 },
3752 .write = write_jedec_1,
3753 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003754 .voltage = {4500, 5500},
Russ Dill3cd5a122010-03-05 08:44:11 +00003755 },
3756
3757 {
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00003758 .vendor = "Eon",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003759 .name = "EN29F002(A)(N)B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003760 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003761 .manufacture_id = EON_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003762 .model_id = EON_EN29F002B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003763 .total_size = 256,
3764 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00003765 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00003766 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003767 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003768 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003769 .block_erasers =
3770 {
3771 {
Rudolf Marek47eff6b2012-04-14 22:51:40 +00003772 .eraseblocks = {
Sean Nelson6b11ad22009-12-23 17:05:59 +00003773 {16 * 1024, 1},
Michael Karchere3cb0a12010-03-13 23:47:09 +00003774 {8 * 1024, 2},
3775 {32 * 1024, 1},
3776 {64 * 1024, 3},
Sean Nelson6b11ad22009-12-23 17:05:59 +00003777 },
3778 .block_erase = erase_sector_jedec,
3779 }, {
3780 .eraseblocks = { {256 * 1024, 1} },
3781 .block_erase = erase_chip_block_jedec,
3782 },
3783 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003784 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003785 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003786 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00003787 },
3788
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003789 {
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00003790 .vendor = "Eon",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003791 .name = "EN29F002(A)(N)T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003792 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003793 .manufacture_id = EON_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003794 .model_id = EON_EN29F002T,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003795 .total_size = 256,
3796 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00003797 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Paul Menzel018d4822011-10-21 12:33:07 +00003798 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003799 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003800 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003801 .block_erasers =
3802 {
3803 {
Rudolf Marek47eff6b2012-04-14 22:51:40 +00003804 .eraseblocks = {
Sean Nelson6b11ad22009-12-23 17:05:59 +00003805 {64 * 1024, 3},
Michael Karchere3cb0a12010-03-13 23:47:09 +00003806 {32 * 1024, 1},
3807 {8 * 1024, 2},
3808 {16 * 1024, 1},
Sean Nelson6b11ad22009-12-23 17:05:59 +00003809 },
3810 .block_erase = erase_sector_jedec,
3811 }, {
3812 .eraseblocks = { {256 * 1024, 1} },
3813 .block_erase = erase_chip_block_jedec,
3814 },
3815 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003816 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003817 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003818 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00003819 },
3820
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003821 {
Rudolf Marek47eff6b2012-04-14 22:51:40 +00003822 .vendor = "Eon",
3823 .name = "EN29LV640B",
3824 .bustype = BUS_PARALLEL,
3825 .manufacture_id = EON_ID,
3826 .model_id = EON_EN29LV640B,
3827 .total_size = 8192,
3828 .page_size = 8192,
3829 .feature_bits = 0,
3830 .tested = TEST_OK_PREW,
3831 .probe = probe_en29lv640b,
3832 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3833 .block_erasers =
3834 {
3835 {
3836 .eraseblocks = {
3837 {8 * 1024, 8},
3838 {64 * 1024, 127},
3839 },
3840 .block_erase = block_erase_en29lv640b,
3841 }, {
3842 .eraseblocks = { {8 * 1024 * 1024, 1} },
3843 .block_erase = block_erase_chip_en29lv640b,
3844 },
3845 },
3846 .write = write_en29lv640b,
3847 .read = read_memmapped,
3848 .voltage = {2700, 3600},
3849 },
3850
3851 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003852 .vendor = "Fujitsu",
3853 .name = "MBM29F004BC",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003854 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003855 .manufacture_id = FUJITSU_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003856 .model_id = FUJITSU_MBM29F004BC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003857 .total_size = 512,
3858 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003859 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003860 .tested = TEST_UNTESTED,
3861 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003862 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003863 .block_erasers =
3864 {
3865 {
3866 .eraseblocks = {
3867 {16 * 1024, 1},
3868 {8 * 1024, 2},
3869 {32 * 1024, 1},
3870 {64 * 1024, 7},
3871 },
Sean Nelson35727f72010-01-28 23:55:12 +00003872 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003873 }, {
3874 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003875 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003876 },
3877 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003878 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003879 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003880 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00003881 },
3882
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003883 {
3884 .vendor = "Fujitsu",
3885 .name = "MBM29F004TC",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003886 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003887 .manufacture_id = FUJITSU_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003888 .model_id = FUJITSU_MBM29F004TC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003889 .total_size = 512,
3890 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003891 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003892 .tested = TEST_UNTESTED,
3893 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003894 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003895 .block_erasers =
3896 {
3897 {
3898 .eraseblocks = {
3899 {64 * 1024, 7},
3900 {32 * 1024, 1},
3901 {8 * 1024, 2},
3902 {16 * 1024, 1},
3903 },
Sean Nelson35727f72010-01-28 23:55:12 +00003904 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003905 }, {
3906 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003907 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003908 },
3909 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003910 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003911 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00003912 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00003913 },
3914
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003915 {
Sean Nelson35727f72010-01-28 23:55:12 +00003916 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003917 .vendor = "Fujitsu",
3918 .name = "MBM29F400BC",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003919 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003920 .manufacture_id = FUJITSU_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003921 .model_id = FUJITSU_MBM29F400BC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003922 .total_size = 512,
3923 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003924 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00003925 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003926 .probe = probe_m29f400bt,
Paul Menzelc07a41c2011-06-19 17:23:55 +00003927 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003928 .block_erasers =
3929 {
3930 {
3931 .eraseblocks = {
3932 {16 * 1024, 1},
3933 {8 * 1024, 2},
3934 {32 * 1024, 1},
3935 {64 * 1024, 7},
3936 },
3937 .block_erase = block_erase_m29f400bt,
3938 }, {
3939 .eraseblocks = { {512 * 1024, 1} },
3940 .block_erase = block_erase_chip_m29f400bt,
3941 },
3942 },
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00003943 .write = write_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003944 .read = read_memmapped,
Steven Zakulec7d257b42011-07-19 08:50:18 +00003945 .voltage = {4750, 5250}, /* 4.75-5.25V for type -55, others 4.5-5.5V */
FENG yu ningff692fb2008-12-08 18:15:10 +00003946 },
3947
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003948 {
3949 .vendor = "Fujitsu",
3950 .name = "MBM29F400TC",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00003951 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003952 .manufacture_id = FUJITSU_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00003953 .model_id = FUJITSU_MBM29F400TC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003954 .total_size = 512,
3955 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003956 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003957 .tested = TEST_UNTESTED,
3958 .probe = probe_m29f400bt,
Paul Menzelc07a41c2011-06-19 17:23:55 +00003959 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003960 .block_erasers =
3961 {
3962 {
3963 .eraseblocks = {
3964 {64 * 1024, 7},
3965 {32 * 1024, 1},
3966 {8 * 1024, 2},
3967 {16 * 1024, 1},
3968 },
3969 .block_erase = block_erase_m29f400bt,
3970 }, {
3971 .eraseblocks = { {512 * 1024, 1} },
3972 .block_erase = block_erase_chip_m29f400bt,
3973 },
3974 },
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00003975 .write = write_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003976 .read = read_memmapped,
Steven Zakulec7d257b42011-07-19 08:50:18 +00003977 .voltage = {4750, 5250}, /* 4.75-5.25V for type -55, others 4.5-5.5V */
FENG yu ningff692fb2008-12-08 18:15:10 +00003978 },
3979
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003980 {
Justin Chevrier1525b2a2012-04-14 21:59:23 +00003981 .vendor = "GigaDevice",
3982 .name = "GD25Q20",
3983 .bustype = BUS_SPI,
3984 .manufacture_id = GIGADEVICE_ID,
3985 .model_id = GIGADEVICE_GD25Q20,
3986 .total_size = 256,
3987 .page_size = 256,
3988 .feature_bits = FEATURE_WRSR_WREN,
3989 .tested = TEST_UNTESTED,
3990 .probe = probe_spi_rdid,
3991 .probe_timing = TIMING_ZERO,
3992 .block_erasers =
3993 {
3994 {
3995 .eraseblocks = { {4 * 1024, 64} },
3996 .block_erase = spi_block_erase_20,
3997 }, {
3998 .eraseblocks = { {32 * 1024, 8} },
3999 .block_erase = spi_block_erase_52,
4000 }, {
4001 .eraseblocks = { {64 * 1024, 4} },
4002 .block_erase = spi_block_erase_d8,
4003 }, {
4004 .eraseblocks = { {256 * 1024, 1} },
4005 .block_erase = spi_block_erase_60,
4006 }, {
4007 .eraseblocks = { {256 * 1024, 1} },
4008 .block_erase = spi_block_erase_c7,
4009 }
4010 },
4011 .unlock = spi_disable_blockprotect,
4012 .write = spi_chip_write_256,
4013 .read = spi_chip_read,
4014 .voltage = {2700, 3600},
4015 },
4016
4017 {
4018 .vendor = "GigaDevice",
4019 .name = "GD25Q40",
4020 .bustype = BUS_SPI,
4021 .manufacture_id = GIGADEVICE_ID,
4022 .model_id = GIGADEVICE_GD25Q40,
4023 .total_size = 512,
4024 .page_size = 256,
4025 .feature_bits = FEATURE_WRSR_WREN,
4026 .tested = TEST_UNTESTED,
4027 .probe = probe_spi_rdid,
4028 .probe_timing = TIMING_ZERO,
4029 .block_erasers =
4030 {
4031 {
4032 .eraseblocks = { {4 * 1024, 128} },
4033 .block_erase = spi_block_erase_20,
4034 }, {
4035 .eraseblocks = { {32 * 1024, 16} },
4036 .block_erase = spi_block_erase_52,
4037 }, {
4038 .eraseblocks = { {64 * 1024, 8} },
4039 .block_erase = spi_block_erase_d8,
4040 }, {
4041 .eraseblocks = { {512 * 1024, 1} },
4042 .block_erase = spi_block_erase_60,
4043 }, {
4044 .eraseblocks = { {512 * 1024, 1} },
4045 .block_erase = spi_block_erase_c7,
4046 }
4047 },
4048 .unlock = spi_disable_blockprotect,
4049 .write = spi_chip_write_256,
4050 .read = spi_chip_read,
4051 .voltage = {2700, 3600},
4052 },
4053
4054 {
4055 .vendor = "GigaDevice",
4056 .name = "GD25Q80",
4057 .bustype = BUS_SPI,
4058 .manufacture_id = GIGADEVICE_ID,
4059 .model_id = GIGADEVICE_GD25Q80,
4060 .total_size = 1024,
4061 .page_size = 256,
4062 /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42 */
4063 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
4064 .tested = TEST_OK_PREW,
4065 .probe = probe_spi_rdid,
4066 .probe_timing = TIMING_ZERO,
4067 .block_erasers =
4068 {
4069 {
4070 .eraseblocks = { {4 * 1024, 256} },
4071 .block_erase = spi_block_erase_20,
4072 }, {
4073 .eraseblocks = { {32 * 1024, 32} },
4074 .block_erase = spi_block_erase_52,
4075 }, {
4076 .eraseblocks = { {64 * 1024, 16} },
4077 .block_erase = spi_block_erase_d8,
4078 }, {
4079 .eraseblocks = { {1024 * 1024, 1} },
4080 .block_erase = spi_block_erase_60,
4081 }, {
4082 .eraseblocks = { {1024 * 1024, 1} },
4083 .block_erase = spi_block_erase_c7,
4084 }
4085 },
4086 .unlock = spi_disable_blockprotect,
4087 .write = spi_chip_write_256,
4088 .read = spi_chip_read,
4089 .voltage = {2700, 3600},
4090 },
4091
4092 {
4093 .vendor = "GigaDevice",
4094 .name = "GD25Q16",
4095 .bustype = BUS_SPI,
4096 .manufacture_id = GIGADEVICE_ID,
4097 .model_id = GIGADEVICE_GD25Q16,
4098 .total_size = 2048,
4099 .page_size = 256,
4100 /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42 */
4101 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
4102 .tested = TEST_UNTESTED,
4103 .probe = probe_spi_rdid,
4104 .probe_timing = TIMING_ZERO,
4105 .block_erasers =
4106 {
4107 {
4108 .eraseblocks = { {4 * 1024, 512} },
4109 .block_erase = spi_block_erase_20,
4110 }, {
4111 .eraseblocks = { {32 * 1024, 64} },
4112 .block_erase = spi_block_erase_52,
4113 }, {
4114 .eraseblocks = { {64 * 1024, 32} },
4115 .block_erase = spi_block_erase_d8,
4116 }, {
4117 .eraseblocks = { {2 * 1024 * 1024, 1} },
4118 .block_erase = spi_block_erase_60,
4119 }, {
4120 .eraseblocks = { {2 * 1024 * 1024, 1} },
4121 .block_erase = spi_block_erase_c7,
4122 }
4123 },
4124 .unlock = spi_disable_blockprotect,
4125 .write = spi_chip_write_256,
4126 .read = spi_chip_read,
4127 .voltage = {2700, 3600},
4128 },
4129
4130 {
4131 .vendor = "GigaDevice",
4132 .name = "GD25Q32",
4133 .bustype = BUS_SPI,
4134 .manufacture_id = GIGADEVICE_ID,
4135 .model_id = GIGADEVICE_GD25Q32,
4136 .total_size = 4096,
4137 .page_size = 256,
4138 /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42 */
4139 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
4140 .tested = TEST_UNTESTED,
4141 .probe = probe_spi_rdid,
4142 .probe_timing = TIMING_ZERO,
4143 .block_erasers =
4144 {
4145 {
4146 .eraseblocks = { {4 * 1024, 1024} },
4147 .block_erase = spi_block_erase_20,
4148 }, {
4149 .eraseblocks = { {32 * 1024, 128} },
4150 .block_erase = spi_block_erase_52,
4151 }, {
4152 .eraseblocks = { {64 * 1024, 64} },
4153 .block_erase = spi_block_erase_d8,
4154 }, {
4155 .eraseblocks = { {4 * 1024 * 1024, 1} },
4156 .block_erase = spi_block_erase_60,
4157 }, {
4158 .eraseblocks = { {4 * 1024 * 1024, 1} },
4159 .block_erase = spi_block_erase_c7,
4160 }
4161 },
4162 .unlock = spi_disable_blockprotect,
4163 .write = spi_chip_write_256,
4164 .read = spi_chip_read,
4165 .voltage = {2700, 3600},
4166 },
4167
4168 {
4169 .vendor = "GigaDevice",
4170 .name = "GD25Q64",
4171 .bustype = BUS_SPI,
4172 .manufacture_id = GIGADEVICE_ID,
4173 .model_id = GIGADEVICE_GD25Q64,
4174 .total_size = 8192,
4175 .page_size = 256,
4176 /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42 */
4177 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
4178 .tested = TEST_UNTESTED,
4179 .probe = probe_spi_rdid,
4180 .probe_timing = TIMING_ZERO,
4181 .block_erasers =
4182 {
4183 {
4184 .eraseblocks = { {4 * 1024, 2048} },
4185 .block_erase = spi_block_erase_20,
4186 }, {
4187 .eraseblocks = { {32 * 1024, 256} },
4188 .block_erase = spi_block_erase_52,
4189 }, {
4190 .eraseblocks = { {64 * 1024, 128} },
4191 .block_erase = spi_block_erase_d8,
4192 }, {
4193 .eraseblocks = { {8 * 1024 * 1024, 1} },
4194 .block_erase = spi_block_erase_60,
4195 }, {
4196 .eraseblocks = { {8 * 1024 * 1024, 1} },
4197 .block_erase = spi_block_erase_c7,
4198 }
4199 },
4200 .unlock = spi_disable_blockprotect,
4201 .write = spi_chip_write_256,
4202 .read = spi_chip_read,
4203 },
4204
4205 {
4206 .vendor = "GigaDevice",
4207 .name = "GD25Q128",
4208 .bustype = BUS_SPI,
4209 .manufacture_id = GIGADEVICE_ID,
4210 .model_id = GIGADEVICE_GD25Q128,
4211 .total_size = 16384,
4212 .page_size = 256,
4213 /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42 */
4214 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
4215 .tested = TEST_UNTESTED,
4216 .probe = probe_spi_rdid,
4217 .probe_timing = TIMING_ZERO,
4218 .block_erasers =
4219 {
4220 {
4221 .eraseblocks = { {4 * 1024, 4096} },
4222 .block_erase = spi_block_erase_20,
4223 }, {
4224 .eraseblocks = { {32 * 1024, 512} },
4225 .block_erase = spi_block_erase_52,
4226 }, {
4227 .eraseblocks = { {64 * 1024, 256} },
4228 .block_erase = spi_block_erase_d8,
4229 }, {
4230 .eraseblocks = { {16 * 1024 * 1024, 1} },
4231 .block_erase = spi_block_erase_60,
4232 }, {
4233 .eraseblocks = { {16 * 1024 * 1024, 1} },
4234 .block_erase = spi_block_erase_c7,
4235 }
4236 },
4237 .unlock = spi_disable_blockprotect,
4238 .write = spi_chip_write_256,
4239 .read = spi_chip_read,
4240 },
4241
4242 {
David Borgc96a8bd2010-06-21 16:12:22 +00004243 .vendor = "Hyundai",
4244 .name = "HY29F002T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004245 .bustype = BUS_PARALLEL,
David Borgc96a8bd2010-06-21 16:12:22 +00004246 .manufacture_id = HYUNDAI_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004247 .model_id = HYUNDAI_HY29F002T,
David Borgc96a8bd2010-06-21 16:12:22 +00004248 .total_size = 256,
4249 .page_size = 256 * 1024,
4250 .feature_bits = FEATURE_EITHER_RESET, /* Some revisions may need FEATURE_ADDR_2AA */
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00004251 .tested = TEST_OK_PRE,
David Borgc96a8bd2010-06-21 16:12:22 +00004252 .probe = probe_jedec,
4253 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
4254 .block_erasers =
4255 {
4256 {
4257 .eraseblocks = {
4258 {64 * 1024, 3},
4259 {32 * 1024, 1},
4260 {8 * 1024, 2},
4261 {16 * 1024, 1},
4262 },
4263 .block_erase = erase_sector_jedec,
4264 }, {
4265 .eraseblocks = { {256 * 1024, 1} },
4266 .block_erase = erase_chip_block_jedec,
4267 },
4268 },
4269 .write = write_jedec_1,
4270 .read = read_memmapped,
Steven Zakulec7d257b42011-07-19 08:50:18 +00004271 .voltage = {4750, 5250}, /* 4.75-5.25V for type -45, others 4.5-5.5V */
David Borgc96a8bd2010-06-21 16:12:22 +00004272 },
4273
4274 {
4275 .vendor = "Hyundai",
4276 .name = "HY29F002B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004277 .bustype = BUS_PARALLEL,
David Borgc96a8bd2010-06-21 16:12:22 +00004278 .manufacture_id = HYUNDAI_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004279 .model_id = HYUNDAI_HY29F002B,
David Borgc96a8bd2010-06-21 16:12:22 +00004280 .total_size = 256,
4281 .page_size = 256 * 1024,
4282 .feature_bits = FEATURE_EITHER_RESET, /* Some revisions may need FEATURE_ADDR_2AA */
4283 .tested = TEST_UNTESTED,
4284 .probe = probe_jedec,
4285 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
4286 .block_erasers =
4287 {
4288 {
4289 .eraseblocks = {
4290 {16 * 1024, 1},
4291 {8 * 1024, 2},
4292 {32 * 1024, 1},
4293 {64 * 1024, 3},
4294 },
4295 .block_erase = erase_sector_jedec,
4296 }, {
4297 .eraseblocks = { {256 * 1024, 1} },
4298 .block_erase = erase_chip_block_jedec,
4299 },
4300 },
4301 .write = write_jedec_1,
4302 .read = read_memmapped,
Steven Zakulec7d257b42011-07-19 08:50:18 +00004303 .voltage = {4750, 5250}, /* 4.75-5.25V for type -45, others 4.5-5.5V */
David Borgc96a8bd2010-06-21 16:12:22 +00004304 },
4305
4306 {
Joshua Roysf1324e02010-09-16 00:51:51 +00004307 .vendor = "Hyundai",
4308 .name = "HY29F040A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004309 .bustype = BUS_PARALLEL,
Joshua Roysf1324e02010-09-16 00:51:51 +00004310 .manufacture_id = HYUNDAI_ID,
4311 .model_id = HYUNDAI_HY29F040A,
4312 .total_size = 512,
4313 .page_size = 64 * 1024,
4314 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
4315 .tested = TEST_UNTESTED,
4316 .probe = probe_jedec,
4317 .probe_timing = TIMING_ZERO,
4318 .block_erasers =
4319 {
4320 {
4321 .eraseblocks = { {64 * 1024, 8} },
4322 .block_erase = erase_sector_jedec,
4323 }, {
4324 .eraseblocks = { {512 * 1024, 1} },
4325 .block_erase = erase_chip_block_jedec,
4326 },
4327 },
4328 .write = write_jedec_1,
4329 .read = read_memmapped,
Steven Zakulec7d257b42011-07-19 08:50:18 +00004330 .voltage = {4500, 5500},
Joshua Roysf1324e02010-09-16 00:51:51 +00004331 },
4332
4333 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004334 .vendor = "Intel",
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00004335 .name = "28F001BN/BX-B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004336 .bustype = BUS_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00004337 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00004338 .model_id = INTEL_28F001B,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00004339 .total_size = 128,
4340 .page_size = 128 * 1024, /* 8k + 2x4k + 112k */
Sean Nelsondee4a832010-03-22 04:39:31 +00004341 .tested = TEST_UNTESTED,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00004342 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004343 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00004344 .block_erasers =
4345 {
4346 {
4347 .eraseblocks = {
4348 {8 * 1024, 1},
4349 {4 * 1024, 2},
4350 {112 * 1024, 1},
4351 },
Sean Nelson28accc22010-03-19 18:47:06 +00004352 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00004353 },
4354 },
Sean Nelsondee4a832010-03-22 04:39:31 +00004355 .write = write_82802ab,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00004356 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004357 .voltage = {4500, 5500},
Urja Rannikkoebd7b832009-05-29 12:55:31 +00004358 },
4359
4360 {
4361 .vendor = "Intel",
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00004362 .name = "28F001BN/BX-T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004363 .bustype = BUS_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00004364 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00004365 .model_id = INTEL_28F001T,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00004366 .total_size = 128,
4367 .page_size = 128 * 1024, /* 112k + 2x4k + 8k */
Sylvain "ythier" Hitier3093f8f2011-09-03 11:22:27 +00004368 .tested = TEST_OK_PR,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00004369 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004370 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00004371 .block_erasers =
4372 {
4373 {
Sylvain "ythier" Hitier3093f8f2011-09-03 11:22:27 +00004374 .eraseblocks = {
Sean Nelson54596372010-01-09 05:30:14 +00004375 {112 * 1024, 1},
4376 {4 * 1024, 2},
4377 {8 * 1024, 1},
4378 },
Sean Nelson28accc22010-03-19 18:47:06 +00004379 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00004380 },
4381 },
Sean Nelsondee4a832010-03-22 04:39:31 +00004382 .write = write_82802ab,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00004383 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004384 .voltage = {4500, 5500},
Urja Rannikkoebd7b832009-05-29 12:55:31 +00004385 },
4386
4387 {
4388 .vendor = "Intel",
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00004389 .name = "28F002BC/BL/BV/BX-T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004390 .bustype = BUS_PARALLEL,
Joshua Roysd97c0e02010-07-22 15:20:43 +00004391 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00004392 .model_id = INTEL_28F002T,
Joshua Roysd97c0e02010-07-22 15:20:43 +00004393 .total_size = 256,
4394 .page_size = 256 * 1024,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00004395 .tested = TEST_OK_PRE,
Joshua Roysd97c0e02010-07-22 15:20:43 +00004396 .probe = probe_82802ab,
4397 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
4398 .block_erasers =
4399 {
4400 {
4401 .eraseblocks = {
4402 {128 * 1024, 1},
4403 {96 * 1024, 1},
4404 {8 * 1024, 2},
4405 {16 * 1024, 1},
4406 },
4407 .block_erase = erase_block_82802ab,
4408 },
4409 },
4410 .write = write_82802ab,
4411 .read = read_memmapped,
4412 },
4413
4414 {
4415 .vendor = "Intel",
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00004416 .name = "28F008S3/S5/SC",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004417 .bustype = BUS_PARALLEL,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00004418 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00004419 .model_id = INTEL_28F004S3,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00004420 .total_size = 512,
4421 .page_size = 256,
4422 .tested = TEST_UNTESTED,
4423 .probe = probe_82802ab,
4424 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00004425 .block_erasers =
4426 {
4427 {
4428 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson28accc22010-03-19 18:47:06 +00004429 .block_erase = erase_block_82802ab,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00004430 },
4431 },
Sean Nelsondee4a832010-03-22 04:39:31 +00004432 .unlock = unlock_28f004s5,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00004433 .write = write_82802ab,
4434 .read = read_memmapped,
4435 },
4436
4437 {
4438 .vendor = "Intel",
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00004439 .name = "28F004B5/BE/BV/BX-B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004440 .bustype = BUS_PARALLEL,
Michael Karcherad0010a2010-04-03 10:27:08 +00004441 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00004442 .model_id = INTEL_28F004B,
Michael Karcherad0010a2010-04-03 10:27:08 +00004443 .total_size = 512,
4444 .page_size = 128 * 1024, /* maximal block size */
4445 .tested = TEST_UNTESTED,
4446 .probe = probe_82802ab,
4447 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
4448 .block_erasers =
4449 {
4450 {
4451 .eraseblocks = {
4452 {16 * 1024, 1},
4453 {8 * 1024, 2},
4454 {96 * 1024, 1},
4455 {128 * 1024, 3},
4456 },
4457 .block_erase = erase_block_82802ab,
4458 },
4459 },
4460 .write = write_82802ab,
4461 .read = read_memmapped,
4462 },
4463
4464 {
4465 .vendor = "Intel",
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00004466 .name = "28F004B5/BE/BV/BX-T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004467 .bustype = BUS_PARALLEL,
Michael Karcherad0010a2010-04-03 10:27:08 +00004468 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00004469 .model_id = INTEL_28F004T,
Michael Karcherad0010a2010-04-03 10:27:08 +00004470 .total_size = 512,
4471 .page_size = 128 * 1024, /* maximal block size */
4472 .tested = TEST_UNTESTED,
4473 .probe = probe_82802ab,
4474 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
4475 .block_erasers =
4476 {
4477 {
4478 .eraseblocks = {
4479 {128 * 1024, 3},
4480 {96 * 1024, 1},
4481 {8 * 1024, 2},
4482 {16 * 1024, 1},
4483 },
4484 .block_erase = erase_block_82802ab,
4485 },
4486 },
4487 .write = write_82802ab,
4488 .read = read_memmapped,
4489 },
4490
4491 {
4492 .vendor = "Intel",
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00004493 .name = "28F400BV/BX/CE/CV-B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004494 .bustype = BUS_PARALLEL,
Michael Karcherad0010a2010-04-03 10:27:08 +00004495 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00004496 .model_id = INTEL_28F400B,
Michael Karcherad0010a2010-04-03 10:27:08 +00004497 .total_size = 512,
4498 .page_size = 128 * 1024, /* maximal block size */
4499 .feature_bits = FEATURE_ADDR_SHIFTED,
4500 .tested = TEST_UNTESTED,
4501 .probe = probe_82802ab,
4502 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
4503 .block_erasers =
4504 {
4505 {
4506 .eraseblocks = {
4507 {16 * 1024, 1},
4508 {8 * 1024, 2},
4509 {96 * 1024, 1},
4510 {128 * 1024, 3},
4511 },
4512 .block_erase = erase_block_82802ab,
4513 },
4514 },
4515 .write = write_82802ab,
4516 .read = read_memmapped,
4517 },
4518
4519 {
4520 .vendor = "Intel",
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00004521 .name = "28F400BV/BX/CE/CV-T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004522 .bustype = BUS_PARALLEL,
Michael Karcherad0010a2010-04-03 10:27:08 +00004523 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00004524 .model_id = INTEL_28F400T,
Michael Karcherad0010a2010-04-03 10:27:08 +00004525 .total_size = 512,
4526 .page_size = 128 * 1024, /* maximal block size */
4527 .feature_bits = FEATURE_ADDR_SHIFTED,
4528 .tested = TEST_UNTESTED,
4529 .probe = probe_82802ab,
4530 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
4531 .block_erasers =
4532 {
4533 {
4534 .eraseblocks = {
4535 {128 * 1024, 3},
4536 {96 * 1024, 1},
4537 {8 * 1024, 2},
4538 {16 * 1024, 1},
4539 },
4540 .block_erase = erase_block_82802ab,
4541 },
4542 },
4543 .write = write_82802ab,
4544 .read = read_memmapped,
4545 },
4546
4547 {
4548 .vendor = "Intel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004549 .name = "82802AB",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004550 .bustype = BUS_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004551 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00004552 .model_id = INTEL_82802AB,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004553 .total_size = 512,
4554 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004555 .feature_bits = FEATURE_REGISTERMAP,
Stefan Taunerd06d9412011-06-12 19:47:55 +00004556 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004557 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004558 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00004559 .block_erasers =
4560 {
4561 {
4562 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson28accc22010-03-19 18:47:06 +00004563 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00004564 },
4565 },
Sean Nelson28accc22010-03-19 18:47:06 +00004566 .unlock = unlock_82802ab,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004567 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004568 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004569 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00004570 },
4571
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004572 {
4573 .vendor = "Intel",
4574 .name = "82802AC",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004575 .bustype = BUS_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004576 .manufacture_id = INTEL_ID,
Mattias Mattssoncbee4a72010-10-05 20:28:36 +00004577 .model_id = INTEL_82802AC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004578 .total_size = 1024,
4579 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004580 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00004581 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004582 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004583 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00004584 .block_erasers =
4585 {
4586 {
4587 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson28accc22010-03-19 18:47:06 +00004588 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00004589 },
4590 },
Sean Nelson28accc22010-03-19 18:47:06 +00004591 .unlock = unlock_82802ab,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004592 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004593 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004594 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00004595 },
4596
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004597 {
4598 .vendor = "Macronix",
4599 .name = "MX25L512",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004600 .bustype = BUS_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004601 .manufacture_id = MACRONIX_ID,
4602 .model_id = MACRONIX_MX25L512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004603 .total_size = 64,
4604 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00004605 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004606 .tested = TEST_UNTESTED,
4607 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004608 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00004609 .block_erasers =
4610 {
4611 {
4612 .eraseblocks = { {4 * 1024, 16} },
4613 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00004614 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00004615 .eraseblocks = { {64 * 1024, 1} },
4616 .block_erase = spi_block_erase_52,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00004617 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00004618 .eraseblocks = { {64 * 1024, 1} },
4619 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00004620 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00004621 .eraseblocks = { {64 * 1024, 1} },
4622 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00004623 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00004624 .eraseblocks = { {64 * 1024, 1} },
4625 .block_erase = spi_block_erase_c7,
4626 },
4627 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004628 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004629 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004630 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004631 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00004632 },
4633
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004634 {
4635 .vendor = "Macronix",
4636 .name = "MX25L1005",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004637 .bustype = BUS_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004638 .manufacture_id = MACRONIX_ID,
4639 .model_id = MACRONIX_MX25L1005,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004640 .total_size = 128,
4641 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00004642 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004643 .tested = TEST_UNTESTED,
4644 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004645 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00004646 .block_erasers =
4647 {
4648 {
4649 .eraseblocks = { {4 * 1024, 32} },
4650 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00004651 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00004652 .eraseblocks = { {64 * 1024, 2} },
4653 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00004654 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00004655 .eraseblocks = { {128 * 1024, 1} },
4656 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00004657 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00004658 .eraseblocks = { {128 * 1024, 1} },
4659 .block_erase = spi_block_erase_c7,
4660 },
4661 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004662 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004663 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004664 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004665 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00004666 },
4667
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004668 {
4669 .vendor = "Macronix",
4670 .name = "MX25L2005",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004671 .bustype = BUS_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004672 .manufacture_id = MACRONIX_ID,
4673 .model_id = MACRONIX_MX25L2005,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004674 .total_size = 256,
4675 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00004676 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004677 .tested = TEST_UNTESTED,
4678 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004679 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00004680 .block_erasers =
4681 {
4682 {
4683 .eraseblocks = { {4 * 1024, 64} },
4684 .block_erase = spi_block_erase_20,
4685 }, {
4686 .eraseblocks = { {64 * 1024, 4} },
4687 .block_erase = spi_block_erase_52,
4688 }, {
4689 .eraseblocks = { {64 * 1024, 4} },
4690 .block_erase = spi_block_erase_d8,
4691 }, {
4692 .eraseblocks = { {256 * 1024, 1} },
4693 .block_erase = spi_block_erase_60,
4694 }, {
4695 .eraseblocks = { {256 * 1024, 1} },
4696 .block_erase = spi_block_erase_c7,
4697 },
4698 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004699 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004700 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004701 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004702 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00004703 },
4704
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004705 {
4706 .vendor = "Macronix",
4707 .name = "MX25L4005",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004708 .bustype = BUS_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004709 .manufacture_id = MACRONIX_ID,
4710 .model_id = MACRONIX_MX25L4005,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004711 .total_size = 512,
4712 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00004713 .feature_bits = FEATURE_WRSR_WREN,
Stefan Tauner8179be52011-06-04 13:13:34 +00004714 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004715 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004716 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00004717 .block_erasers =
4718 {
4719 {
4720 .eraseblocks = { {4 * 1024, 128} },
4721 .block_erase = spi_block_erase_20,
4722 }, {
4723 .eraseblocks = { {64 * 1024, 8} },
4724 .block_erase = spi_block_erase_52,
4725 }, {
4726 .eraseblocks = { {64 * 1024, 8} },
4727 .block_erase = spi_block_erase_d8,
4728 }, {
4729 .eraseblocks = { {512 * 1024, 1} },
4730 .block_erase = spi_block_erase_60,
4731 }, {
4732 .eraseblocks = { {512 * 1024, 1} },
4733 .block_erase = spi_block_erase_c7,
4734 },
4735 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004736 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004737 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004738 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004739 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00004740 },
4741
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004742 {
4743 .vendor = "Macronix",
4744 .name = "MX25L8005",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004745 .bustype = BUS_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004746 .manufacture_id = MACRONIX_ID,
4747 .model_id = MACRONIX_MX25L8005,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004748 .total_size = 1024,
4749 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00004750 .feature_bits = FEATURE_WRSR_WREN,
David Hendricks567b7b82011-05-18 01:31:03 +00004751 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004752 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004753 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00004754 .block_erasers =
4755 {
4756 {
4757 .eraseblocks = { {4 * 1024, 256} },
4758 .block_erase = spi_block_erase_20,
4759 }, {
4760 .eraseblocks = { {64 * 1024, 16} },
4761 .block_erase = spi_block_erase_52,
4762 }, {
4763 .eraseblocks = { {64 * 1024, 16} },
4764 .block_erase = spi_block_erase_d8,
4765 }, {
4766 .eraseblocks = { {1024 * 1024, 1} },
4767 .block_erase = spi_block_erase_60,
4768 }, {
4769 .eraseblocks = { {1024 * 1024, 1} },
4770 .block_erase = spi_block_erase_c7,
4771 },
4772 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004773 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004774 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004775 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004776 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00004777 },
4778
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004779 {
4780 .vendor = "Macronix",
4781 .name = "MX25L1605",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004782 .bustype = BUS_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004783 .manufacture_id = MACRONIX_ID,
4784 .model_id = MACRONIX_MX25L1605,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004785 .total_size = 2048,
4786 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00004787 .feature_bits = FEATURE_WRSR_WREN,
Sven Schnelle4bd8a402011-03-07 10:59:06 +00004788 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004789 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004790 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00004791 .block_erasers =
4792 {
4793 {
4794 .eraseblocks = { {4 * 1024, 512} },
4795 .block_erase = spi_block_erase_20, /* This erase function has 64k blocksize for eLiteFlash */
4796 }, {
4797 .eraseblocks = { {64 * 1024, 32} }, /* Not supported in MX25L1605 (eLiteFlash) and MX25L1605D */
4798 .block_erase = spi_block_erase_52,
4799 }, {
4800 .eraseblocks = { {64 * 1024, 32} },
4801 .block_erase = spi_block_erase_d8,
4802 }, {
4803 .eraseblocks = { {2 * 1024 * 1024, 1} },
4804 .block_erase = spi_block_erase_60,
4805 }, {
4806 .eraseblocks = { {2 * 1024 * 1024, 1} },
4807 .block_erase = spi_block_erase_c7,
4808 },
4809 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004810 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004811 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004812 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004813 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00004814 },
4815
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004816 {
4817 .vendor = "Macronix",
Stephan Guillouxf5c70902009-04-19 23:04:00 +00004818 .name = "MX25L1635D",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004819 .bustype = BUS_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004820 .manufacture_id = MACRONIX_ID,
4821 .model_id = MACRONIX_MX25L1635D,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00004822 .total_size = 2048,
4823 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00004824 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00004825 .tested = TEST_UNTESTED,
4826 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004827 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00004828 .block_erasers =
4829 {
4830 {
4831 .eraseblocks = { {4 * 1024, 512} },
4832 .block_erase = spi_block_erase_20,
4833 }, {
4834 .eraseblocks = { {64 * 1024, 32} },
4835 .block_erase = spi_block_erase_d8,
4836 }, {
4837 .eraseblocks = { {2 * 1024 * 1024, 1} },
4838 .block_erase = spi_block_erase_60,
4839 }, {
4840 .eraseblocks = { {2 * 1024 * 1024, 1} },
4841 .block_erase = spi_block_erase_c7,
4842 }
4843 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004844 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004845 .write = spi_chip_write_256,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00004846 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004847 .voltage = {2700, 3600},
Stephan Guillouxf5c70902009-04-19 23:04:00 +00004848 },
Stephan Guillouxfd315502009-04-20 22:54:13 +00004849
Stephan Guillouxf5c70902009-04-19 23:04:00 +00004850 {
4851 .vendor = "Macronix",
Stephan Guilloux3611b802010-09-13 19:59:28 +00004852 .name = "MX25L1635E",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004853 .bustype = BUS_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004854 .manufacture_id = MACRONIX_ID,
4855 .model_id = MACRONIX_MX25L1635E,
Stephan Guilloux3611b802010-09-13 19:59:28 +00004856 .total_size = 2048,
4857 .page_size = 256,
4858 .feature_bits = FEATURE_WRSR_WREN,
4859 .tested = TEST_UNTESTED,
4860 .probe = probe_spi_rdid,
4861 .probe_timing = TIMING_ZERO,
4862 .block_erasers =
4863 {
4864 {
4865 .eraseblocks = { {4 * 1024, 512} },
4866 .block_erase = spi_block_erase_20,
4867 }, {
4868 .eraseblocks = { {64 * 1024, 32} },
4869 .block_erase = spi_block_erase_d8,
4870 }, {
4871 .eraseblocks = { {2 * 1024 * 1024, 1} },
4872 .block_erase = spi_block_erase_60,
4873 }, {
4874 .eraseblocks = { {2 * 1024 * 1024, 1} },
4875 .block_erase = spi_block_erase_c7,
4876 }
4877 },
4878 .unlock = spi_disable_blockprotect,
4879 .write = spi_chip_write_256,
4880 .read = spi_chip_read,
Steven Zakulec7d257b42011-07-19 08:50:18 +00004881 .voltage = {2700, 3600},
Stephan Guilloux3611b802010-09-13 19:59:28 +00004882 },
4883
4884 {
4885 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004886 .name = "MX25L3205",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004887 .bustype = BUS_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004888 .manufacture_id = MACRONIX_ID,
4889 .model_id = MACRONIX_MX25L3205,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004890 .total_size = 4096,
4891 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00004892 .feature_bits = FEATURE_WRSR_WREN,
David Hendricks22e05322010-12-13 23:54:59 +00004893 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004894 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004895 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00004896 .block_erasers =
4897 {
4898 {
4899 .eraseblocks = { {4 * 1024, 1024} },
4900 .block_erase = spi_block_erase_20,
4901 }, {
4902 .eraseblocks = { {4 * 1024, 1024} },
4903 .block_erase = spi_block_erase_d8,
4904 }, {
4905 .eraseblocks = { {4 * 1024 * 1024, 1} },
4906 .block_erase = spi_block_erase_60,
4907 }, {
4908 .eraseblocks = { {4 * 1024 * 1024, 1} },
4909 .block_erase = spi_block_erase_c7,
4910 },
4911 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004912 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004913 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004914 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004915 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00004916 },
4917
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004918 {
4919 .vendor = "Macronix",
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00004920 .name = "MX25L3235D",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004921 .bustype = BUS_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004922 .manufacture_id = MACRONIX_ID,
4923 .model_id = MACRONIX_MX25L3235D,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00004924 .total_size = 4096,
4925 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00004926 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00004927 .tested = TEST_UNTESTED,
4928 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004929 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00004930 .block_erasers =
4931 {
4932 {
4933 .eraseblocks = { {4 * 1024, 1024} },
4934 .block_erase = spi_block_erase_20,
4935 }, {
4936 .eraseblocks = { {64 * 1024, 64} },
4937 .block_erase = spi_block_erase_d8,
4938 }, {
4939 .eraseblocks = { {4 * 1024 * 1024, 1} },
4940 .block_erase = spi_block_erase_60,
4941 }, {
4942 .eraseblocks = { {4 * 1024 * 1024, 1} },
4943 .block_erase = spi_block_erase_c7,
4944 }
4945 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004946 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004947 .write = spi_chip_write_256,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00004948 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004949 .voltage = {2700, 3600},
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00004950 },
4951
4952 {
4953 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004954 .name = "MX25L6405",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004955 .bustype = BUS_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004956 .manufacture_id = MACRONIX_ID,
4957 .model_id = MACRONIX_MX25L6405,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004958 .total_size = 8192,
4959 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00004960 .feature_bits = FEATURE_WRSR_WREN,
Paul Menzelac427b22012-02-16 21:07:07 +00004961 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004962 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004963 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00004964 .block_erasers =
4965 {
4966 {
4967 .eraseblocks = { {64 * 1024, 128} },
4968 .block_erase = spi_block_erase_20,
4969 }, {
4970 .eraseblocks = { {64 * 1024, 128} },
4971 .block_erase = spi_block_erase_d8,
4972 }, {
4973 .eraseblocks = { {8 * 1024 * 1024, 1} },
4974 .block_erase = spi_block_erase_60,
4975 }, {
4976 .eraseblocks = { {8 * 1024 * 1024, 1} },
4977 .block_erase = spi_block_erase_c7,
4978 }
4979 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004980 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004981 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004982 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00004983 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00004984 },
4985
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004986 {
4987 .vendor = "Macronix",
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00004988 .name = "MX25L12805",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00004989 .bustype = BUS_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00004990 .manufacture_id = MACRONIX_ID,
4991 .model_id = MACRONIX_MX25L12805,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00004992 .total_size = 16384,
4993 .page_size = 256,
David Hendricks67db2eb2010-09-03 03:35:48 +00004994 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00004995 .tested = TEST_UNTESTED,
4996 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004997 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00004998 .block_erasers =
4999 {
5000 {
5001 .eraseblocks = { {4 * 1024, 4096} },
5002 .block_erase = spi_block_erase_20,
5003 }, {
5004 .eraseblocks = { {64 * 1024, 256} },
5005 .block_erase = spi_block_erase_d8,
5006 }, {
5007 .eraseblocks = { {16 * 1024 * 1024, 1} },
5008 .block_erase = spi_block_erase_60,
5009 }, {
5010 .eraseblocks = { {16 * 1024 * 1024, 1} },
5011 .block_erase = spi_block_erase_c7,
5012 }
5013 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005014 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005015 .write = spi_chip_write_256,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00005016 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005017 .voltage = {2700, 3600},
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00005018 },
5019
5020 {
5021 .vendor = "Macronix",
Mark Panajotovic502a9132009-08-24 01:42:24 +00005022 .name = "MX29F001B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005023 .bustype = BUS_PARALLEL,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005024 .manufacture_id = MACRONIX_ID,
5025 .model_id = MACRONIX_MX29F001B,
Mark Panajotovic502a9132009-08-24 01:42:24 +00005026 .total_size = 128,
5027 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005028 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
5029 .tested = TEST_UNTESTED,
5030 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +00005031 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00005032 .block_erasers =
5033 {
5034 {
5035 .eraseblocks = {
5036 {8 * 1024, 1},
5037 {4 * 1024, 2},
5038 {8 * 1024, 2},
5039 {32 * 1024, 1},
5040 {64 * 1024, 1},
5041 },
Sean Nelson35727f72010-01-28 23:55:12 +00005042 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00005043 }, {
5044 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00005045 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00005046 }
5047 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00005048 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00005049 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005050 .voltage = {4500, 5500},
Mark Panajotovic502a9132009-08-24 01:42:24 +00005051 },
5052
5053 {
5054 .vendor = "Macronix",
5055 .name = "MX29F001T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005056 .bustype = BUS_PARALLEL,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005057 .manufacture_id = MACRONIX_ID,
5058 .model_id = MACRONIX_MX29F001T,
Mark Panajotovic502a9132009-08-24 01:42:24 +00005059 .total_size = 128,
5060 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005061 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stefan Tauner74c6ec62011-05-18 01:31:46 +00005062 .tested = TEST_OK_PREW,
Sean Nelson35727f72010-01-28 23:55:12 +00005063 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +00005064 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00005065 .block_erasers =
5066 {
5067 {
5068 .eraseblocks = {
5069 {64 * 1024, 1},
5070 {32 * 1024, 1},
5071 {8 * 1024, 2},
5072 {4 * 1024, 2},
5073 {8 * 1024, 1},
5074 },
Sean Nelson35727f72010-01-28 23:55:12 +00005075 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00005076 }, {
5077 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00005078 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00005079 }
5080 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00005081 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00005082 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005083 .voltage = {4500, 5500},
Mark Panajotovic502a9132009-08-24 01:42:24 +00005084 },
5085
5086 {
5087 .vendor = "Macronix",
Sylvain "ythier" Hitier3093f8f2011-09-03 11:22:27 +00005088 .name = "MX29F002(N)B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005089 .bustype = BUS_PARALLEL,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005090 .manufacture_id = MACRONIX_ID,
5091 .model_id = MACRONIX_MX29F002B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005092 .total_size = 256,
5093 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005094 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005095 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005096 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +00005097 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00005098 .block_erasers =
5099 {
5100 {
5101 .eraseblocks = {
5102 {16 * 1024, 1},
5103 {8 * 1024, 2},
5104 {32 * 1024, 1},
5105 {64 * 1024, 3},
5106 },
Sean Nelson35727f72010-01-28 23:55:12 +00005107 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00005108 }, {
5109 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00005110 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00005111 },
5112 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00005113 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005114 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005115 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00005116 },
5117
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005118 {
5119 .vendor = "Macronix",
Sylvain "ythier" Hitier3093f8f2011-09-03 11:22:27 +00005120 .name = "MX29F002(N)T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005121 .bustype = BUS_PARALLEL,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005122 .manufacture_id = MACRONIX_ID,
5123 .model_id = MACRONIX_MX29F002T,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005124 .total_size = 256,
5125 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005126 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Paul Menzel018d4822011-10-21 12:33:07 +00005127 .tested = TEST_OK_PREW,
Sean Nelson35727f72010-01-28 23:55:12 +00005128 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +00005129 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00005130 .block_erasers =
5131 {
5132 {
5133 .eraseblocks = {
5134 {64 * 1024, 3},
5135 {32 * 1024, 1},
5136 {8 * 1024, 2},
5137 {16 * 1024, 1},
5138 },
Sean Nelson35727f72010-01-28 23:55:12 +00005139 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00005140 }, {
5141 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00005142 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00005143 },
5144 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00005145 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005146 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005147 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00005148 },
5149
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005150 {
5151 .vendor = "Macronix",
Joshua Roysf1324e02010-09-16 00:51:51 +00005152 .name = "MX29F040",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005153 .bustype = BUS_PARALLEL,
Joshua Roysf1324e02010-09-16 00:51:51 +00005154 .manufacture_id = MACRONIX_ID,
5155 .model_id = MACRONIX_MX29F040,
5156 .total_size = 512,
5157 .page_size = 64 * 1024,
5158 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
5159 .tested = TEST_UNTESTED,
5160 .probe = probe_jedec,
5161 .probe_timing = TIMING_ZERO,
5162 .block_erasers =
5163 {
5164 {
5165 .eraseblocks = { {64 * 1024, 8} },
5166 .block_erase = erase_sector_jedec,
5167 }, {
5168 .eraseblocks = { {512 * 1024, 1} },
5169 .block_erase = erase_chip_block_jedec,
5170 },
5171 },
5172 .write = write_jedec_1,
5173 .read = read_memmapped,
Steven Zakulec7d257b42011-07-19 08:50:18 +00005174 .voltage = {4500, 5500},
Joshua Roysf1324e02010-09-16 00:51:51 +00005175 },
5176
5177 {
5178 .vendor = "Macronix",
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00005179 .name = "MX29LV040",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005180 .bustype = BUS_PARALLEL,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005181 .manufacture_id = MACRONIX_ID,
5182 .model_id = MACRONIX_MX29LV040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005183 .total_size = 512,
5184 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005185 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
5186 .tested = TEST_UNTESTED,
5187 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +00005188 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00005189 .block_erasers =
5190 {
5191 {
5192 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00005193 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00005194 }, {
5195 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00005196 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00005197 },
5198 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00005199 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005200 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005201 .voltage = {2700, 3600},
Carl-Daniel Hailfinger7de86392008-12-10 10:32:05 +00005202 },
5203
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005204 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00005205 .vendor = "MoselVitelic",
5206 .name = "V29C51000B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005207 .bustype = BUS_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00005208 .manufacture_id = SYNCMOS_MVC_ID,
5209 .model_id = MVC_V29C51000B,
5210 .total_size = 64,
5211 .page_size = 512,
5212 .feature_bits = FEATURE_EITHER_RESET,
5213 .tested = TEST_UNTESTED,
5214 .probe = probe_jedec,
5215 .probe_timing = TIMING_ZERO,
5216 .block_erasers =
5217 {
5218 {
5219 .eraseblocks = { {512, 128} },
5220 .block_erase = erase_sector_jedec,
5221 }, {
5222 .eraseblocks = { {64 * 1024, 1} },
5223 .block_erase = erase_chip_block_jedec,
5224 },
5225 },
5226 .write = write_jedec_1,
5227 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005228 .voltage = {4500, 5500},
Mattias Mattsson4c066502010-07-29 20:01:13 +00005229 },
5230
5231 {
5232 .vendor = "MoselVitelic",
5233 .name = "V29C51000T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005234 .bustype = BUS_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00005235 .manufacture_id = SYNCMOS_MVC_ID,
5236 .model_id = MVC_V29C51000T,
5237 .total_size = 64,
5238 .page_size = 512,
5239 .feature_bits = FEATURE_EITHER_RESET,
5240 .tested = TEST_UNTESTED,
5241 .probe = probe_jedec,
5242 .probe_timing = TIMING_ZERO,
5243 .block_erasers =
5244 {
5245 {
5246 .eraseblocks = { {512, 128} },
5247 .block_erase = erase_sector_jedec,
5248 }, {
5249 .eraseblocks = { {64 * 1024, 1} },
5250 .block_erase = erase_chip_block_jedec,
5251 },
5252 },
5253 .write = write_jedec_1,
5254 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005255 .voltage = {4500, 5500},
Mattias Mattsson4c066502010-07-29 20:01:13 +00005256 },
5257
5258 {
5259 .vendor = "MoselVitelic",
5260 .name = "V29C51400B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005261 .bustype = BUS_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00005262 .manufacture_id = SYNCMOS_MVC_ID,
5263 .model_id = MVC_V29C51400B,
5264 .total_size = 512,
5265 .page_size = 1024,
5266 .feature_bits = FEATURE_EITHER_RESET,
5267 .tested = TEST_UNTESTED,
5268 .probe = probe_jedec,
5269 .probe_timing = TIMING_ZERO,
5270 .block_erasers =
5271 {
5272 {
5273 .eraseblocks = { {1024, 512} },
5274 .block_erase = erase_sector_jedec,
5275 }, {
5276 .eraseblocks = { {512 * 1024, 1} },
5277 .block_erase = erase_chip_block_jedec,
5278 },
5279 },
5280 .write = write_jedec_1,
5281 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005282 .voltage = {4500, 5500},
Mattias Mattsson4c066502010-07-29 20:01:13 +00005283 },
5284
5285 {
5286 .vendor = "MoselVitelic",
5287 .name = "V29C51400T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005288 .bustype = BUS_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00005289 .manufacture_id = SYNCMOS_MVC_ID,
5290 .model_id = MVC_V29C51400T,
5291 .total_size = 512,
5292 .page_size = 1024,
5293 .feature_bits = FEATURE_EITHER_RESET,
5294 .tested = TEST_UNTESTED,
5295 .probe = probe_jedec,
5296 .probe_timing = TIMING_ZERO,
5297 .block_erasers =
5298 {
5299 {
5300 .eraseblocks = { {1024, 512} },
5301 .block_erase = erase_sector_jedec,
5302 }, {
5303 .eraseblocks = { {512 * 1024, 1} },
5304 .block_erase = erase_chip_block_jedec,
5305 },
5306 },
5307 .write = write_jedec_1,
5308 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005309 .voltage = {4500, 5500},
Mattias Mattsson4c066502010-07-29 20:01:13 +00005310 },
5311
5312 {
5313 .vendor = "MoselVitelic",
5314 .name = "V29LC51000",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005315 .bustype = BUS_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00005316 .manufacture_id = SYNCMOS_MVC_ID,
5317 .model_id = MVC_V29LC51000,
5318 .total_size = 64,
5319 .page_size = 512,
5320 .feature_bits = FEATURE_EITHER_RESET,
5321 .tested = TEST_UNTESTED,
5322 .probe = probe_jedec,
5323 .probe_timing = TIMING_ZERO,
5324 .block_erasers =
5325 {
5326 {
5327 .eraseblocks = { {512, 128} },
5328 .block_erase = erase_sector_jedec,
5329 }, {
5330 .eraseblocks = { {64 * 1024, 1} },
5331 .block_erase = erase_chip_block_jedec,
5332 },
5333 },
5334 .write = write_jedec_1,
5335 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005336 .voltage = {4500, 5500},
Mattias Mattsson4c066502010-07-29 20:01:13 +00005337 },
5338
5339 {
5340 .vendor = "MoselVitelic",
5341 .name = "V29LC51001",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005342 .bustype = BUS_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00005343 .manufacture_id = SYNCMOS_MVC_ID,
5344 .model_id = MVC_V29LC51001,
5345 .total_size = 128,
5346 .page_size = 512,
5347 .feature_bits = FEATURE_EITHER_RESET,
5348 .tested = TEST_UNTESTED,
5349 .probe = probe_jedec,
5350 .probe_timing = TIMING_ZERO,
5351 .block_erasers =
5352 {
5353 {
5354 .eraseblocks = { {512, 256} },
5355 .block_erase = erase_sector_jedec,
5356 }, {
5357 .eraseblocks = { {128 * 1024, 1} },
5358 .block_erase = erase_chip_block_jedec,
5359 },
5360 },
5361 .write = write_jedec_1,
5362 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005363 .voltage = {4500, 5500},
Mattias Mattsson4c066502010-07-29 20:01:13 +00005364 },
5365
5366 {
5367 .vendor = "MoselVitelic",
5368 .name = "V29LC51002",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005369 .bustype = BUS_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00005370 .manufacture_id = SYNCMOS_MVC_ID,
5371 .model_id = MVC_V29LC51002,
5372 .total_size = 256,
5373 .page_size = 512,
5374 .feature_bits = FEATURE_EITHER_RESET,
5375 .tested = TEST_UNTESTED,
5376 .probe = probe_jedec,
5377 .probe_timing = TIMING_ZERO,
5378 .block_erasers =
5379 {
5380 {
5381 .eraseblocks = { {512, 512} },
5382 .block_erase = erase_sector_jedec,
5383 }, {
5384 .eraseblocks = { {256 * 1024, 1} },
5385 .block_erase = erase_chip_block_jedec,
5386 },
5387 },
5388 .write = write_jedec_1,
5389 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005390 .voltage = {4500, 5500},
Mattias Mattsson4c066502010-07-29 20:01:13 +00005391 },
5392
5393 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005394 .vendor = "Numonyx",
5395 .name = "M25PE10",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005396 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005397 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005398 .model_id = ST_M25PE10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005399 .total_size = 128,
5400 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00005401 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005402 .tested = TEST_UNTESTED,
5403 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005404 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00005405 .block_erasers =
5406 {
5407 {
5408 .eraseblocks = { {4 * 1024, 32} },
5409 .block_erase = spi_block_erase_20,
5410 }, {
5411 .eraseblocks = { {64 * 1024, 2} },
5412 .block_erase = spi_block_erase_d8,
5413 }, {
5414 .eraseblocks = { {128 * 1024, 1} },
5415 .block_erase = spi_block_erase_c7,
5416 }
5417 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005418 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005419 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005420 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005421 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00005422 },
5423
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005424 {
5425 .vendor = "Numonyx",
5426 .name = "M25PE20",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005427 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005428 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005429 .model_id = ST_M25PE20,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005430 .total_size = 256,
5431 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00005432 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005433 .tested = TEST_UNTESTED,
5434 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005435 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00005436 .block_erasers =
5437 {
5438 {
5439 .eraseblocks = { {4 * 1024, 64} },
5440 .block_erase = spi_block_erase_20,
5441 }, {
5442 .eraseblocks = { {64 * 1024, 4} },
5443 .block_erase = spi_block_erase_d8,
5444 }, {
5445 .eraseblocks = { {256 * 1024, 1} },
5446 .block_erase = spi_block_erase_c7,
5447 }
5448 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005449 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005450 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005451 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005452 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00005453 },
5454
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005455 {
5456 .vendor = "Numonyx",
5457 .name = "M25PE40",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005458 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005459 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005460 .model_id = ST_M25PE40,
Sean Nelson5643c072010-01-19 03:23:07 +00005461 .total_size = 512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005462 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00005463 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005464 .tested = TEST_UNTESTED,
5465 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005466 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00005467 .block_erasers =
5468 {
5469 {
5470 .eraseblocks = { {4 * 1024, 128} },
5471 .block_erase = spi_block_erase_20,
5472 }, {
5473 .eraseblocks = { {64 * 1024, 8} },
5474 .block_erase = spi_block_erase_d8,
5475 }, {
5476 .eraseblocks = { {512 * 1024, 1} },
5477 .block_erase = spi_block_erase_c7,
5478 }
5479 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005480 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005481 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005482 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005483 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00005484 },
5485
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005486 {
5487 .vendor = "Numonyx",
5488 .name = "M25PE80",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005489 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005490 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005491 .model_id = ST_M25PE80,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005492 .total_size = 1024,
5493 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00005494 .feature_bits = FEATURE_WRSR_WREN,
Paul Menzelac427b22012-02-16 21:07:07 +00005495 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005496 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005497 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00005498 .block_erasers =
5499 {
5500 {
5501 .eraseblocks = { {4 * 1024, 256} },
5502 .block_erase = spi_block_erase_20,
5503 }, {
5504 .eraseblocks = { {64 * 1024, 16} },
5505 .block_erase = spi_block_erase_d8,
5506 }, {
5507 .eraseblocks = { {1024 * 1024, 1} },
5508 .block_erase = spi_block_erase_c7,
5509 }
5510 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005511 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005512 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005513 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005514 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00005515 },
5516
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005517 {
5518 .vendor = "Numonyx",
5519 .name = "M25PE16",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005520 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005521 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005522 .model_id = ST_M25PE16,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005523 .total_size = 2048,
5524 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00005525 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005526 .tested = TEST_UNTESTED,
5527 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005528 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00005529 .block_erasers =
5530 {
5531 {
5532 .eraseblocks = { {4 * 1024, 512} },
5533 .block_erase = spi_block_erase_20,
5534 }, {
5535 .eraseblocks = { {64 * 1024, 32} },
5536 .block_erase = spi_block_erase_d8,
5537 }, {
5538 .eraseblocks = { {2 * 1024 * 1024, 1} },
5539 .block_erase = spi_block_erase_c7,
5540 }
5541 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005542 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005543 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005544 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005545 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00005546 },
5547
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005548 {
Niklas Söderlundae4294f2012-04-14 21:04:03 +00005549 .vendor = "Numonyx",
5550 .name = "N25Q064",
5551 .bustype = BUS_SPI,
5552 .manufacture_id = ST_ID,
5553 .model_id = ST_N25Q064,
5554 .total_size = 8192,
5555 .page_size = 256,
5556 .tested = TEST_OK_PREW,
5557 .probe = probe_spi_rdid,
5558 .probe_timing = TIMING_ZERO,
5559 .block_erasers =
5560 {
5561 {
5562 .eraseblocks = { {4 * 1024, 2048 } },
5563 .block_erase = spi_block_erase_20,
5564 }, {
5565 .eraseblocks = { {64 * 1024, 128} },
5566 .block_erase = spi_block_erase_d8,
5567 }, {
5568 .eraseblocks = { {8 * 1024 * 1024, 1} },
5569 .block_erase = spi_block_erase_c7,
5570 }
5571 },
5572 .unlock = spi_disable_blockprotect,
5573 .write = spi_chip_write_256,
5574 .read = spi_chip_read,
5575 },
5576
5577 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005578 .vendor = "PMC",
5579 .name = "Pm25LV010",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005580 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005581 .manufacture_id = PMC_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005582 .model_id = PMC_PM25LV010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005583 .total_size = 128,
5584 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00005585 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005586 .tested = TEST_UNTESTED,
5587 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005588 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00005589 .block_erasers =
5590 {
5591 {
5592 .eraseblocks = { {4 * 1024, 32} },
5593 .block_erase = spi_block_erase_d7,
5594 }, {
5595 .eraseblocks = { {32 * 1024, 4} },
5596 .block_erase = spi_block_erase_d8,
5597 }, {
5598 .eraseblocks = { {128 * 1024, 1} },
5599 .block_erase = spi_block_erase_c7,
5600 }
5601 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005602 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005603 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005604 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005605 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00005606 },
5607
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005608 {
5609 .vendor = "PMC",
5610 .name = "Pm25LV016B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005611 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005612 .manufacture_id = PMC_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005613 .model_id = PMC_PM25LV016B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005614 .total_size = 2048,
5615 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00005616 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005617 .tested = TEST_UNTESTED,
5618 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005619 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00005620 .block_erasers =
5621 {
5622 {
5623 .eraseblocks = { {4 * 1024, 512} },
5624 .block_erase = spi_block_erase_d7,
5625 }, {
5626 .eraseblocks = { {4 * 1024, 512} },
5627 .block_erase = spi_block_erase_20,
5628 }, {
5629 .eraseblocks = { {64 * 1024, 32} },
5630 .block_erase = spi_block_erase_d8,
5631 }, {
5632 .eraseblocks = { {2 * 1024 * 1024, 1} },
5633 .block_erase = spi_block_erase_60,
5634 }, {
5635 .eraseblocks = { {2 * 1024 * 1024, 1} },
5636 .block_erase = spi_block_erase_c7,
5637 }
5638 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005639 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005640 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005641 .read = spi_chip_read,
Steven Zakulec7d257b42011-07-19 08:50:18 +00005642 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00005643 },
5644
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005645 {
5646 .vendor = "PMC",
5647 .name = "Pm25LV020",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005648 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005649 .manufacture_id = PMC_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005650 .model_id = PMC_PM25LV020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005651 .total_size = 256,
5652 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00005653 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005654 .tested = TEST_UNTESTED,
5655 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005656 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00005657 .block_erasers =
5658 {
5659 {
5660 .eraseblocks = { {4 * 1024, 64} },
5661 .block_erase = spi_block_erase_d7,
5662 }, {
5663 .eraseblocks = { {64 * 1024, 4} },
5664 .block_erase = spi_block_erase_d8,
5665 }, {
5666 .eraseblocks = { {256 * 1024, 1} },
5667 .block_erase = spi_block_erase_c7,
5668 }
5669 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005670 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005671 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005672 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005673 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00005674 },
5675
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005676 {
5677 .vendor = "PMC",
5678 .name = "Pm25LV040",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005679 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005680 .manufacture_id = PMC_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005681 .model_id = PMC_PM25LV040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005682 .total_size = 512,
5683 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00005684 .feature_bits = FEATURE_WRSR_WREN,
Stefan Tauner716e0982011-07-25 20:38:52 +00005685 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005686 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005687 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00005688 .block_erasers =
5689 {
5690 {
5691 .eraseblocks = { {4 * 1024, 128} },
5692 .block_erase = spi_block_erase_d7,
5693 }, {
5694 .eraseblocks = { {64 * 1024, 8} },
5695 .block_erase = spi_block_erase_d8,
5696 }, {
5697 .eraseblocks = { {512 * 1024, 1} },
5698 .block_erase = spi_block_erase_c7,
5699 }
5700 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005701 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005702 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005703 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005704 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00005705 },
5706
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005707 {
5708 .vendor = "PMC",
5709 .name = "Pm25LV080B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005710 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005711 .manufacture_id = PMC_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005712 .model_id = PMC_PM25LV080B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005713 .total_size = 1024,
5714 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00005715 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005716 .tested = TEST_UNTESTED,
5717 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005718 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00005719 .block_erasers =
5720 {
5721 {
5722 .eraseblocks = { {4 * 1024, 256} },
5723 .block_erase = spi_block_erase_d7,
5724 }, {
5725 .eraseblocks = { {4 * 1024, 256} },
5726 .block_erase = spi_block_erase_20,
5727 }, {
5728 .eraseblocks = { {64 * 1024, 16} },
5729 .block_erase = spi_block_erase_d8,
5730 }, {
5731 .eraseblocks = { {1024 * 1024, 1} },
5732 .block_erase = spi_block_erase_60,
5733 }, {
5734 .eraseblocks = { {1024 * 1024, 1} },
5735 .block_erase = spi_block_erase_c7,
5736 }
5737 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005738 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005739 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005740 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005741 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00005742 },
5743
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005744 {
5745 .vendor = "PMC",
5746 .name = "Pm25LV512",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005747 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005748 .manufacture_id = PMC_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005749 .model_id = PMC_PM25LV512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005750 .total_size = 64,
5751 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00005752 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005753 .tested = TEST_UNTESTED,
5754 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005755 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00005756 .block_erasers =
5757 {
5758 {
5759 .eraseblocks = { {4 * 1024, 16} },
5760 .block_erase = spi_block_erase_d7,
5761 }, {
5762 .eraseblocks = { {32 * 1024, 2} },
5763 .block_erase = spi_block_erase_d8,
5764 }, {
5765 .eraseblocks = { {64 * 1024, 1} },
5766 .block_erase = spi_block_erase_c7,
5767 }
5768 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005769 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005770 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005771 .read = spi_chip_read,
Steven Zakulec7d257b42011-07-19 08:50:18 +00005772 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00005773 },
5774
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005775 {
5776 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00005777 .name = "Pm29F002T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005778 .bustype = BUS_PARALLEL,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00005779 .manufacture_id = PMC_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005780 .model_id = PMC_PM29F002T,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00005781 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00005782 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005783 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stefan Tauneraf2db612011-12-02 21:48:17 +00005784 .tested = TEST_OK_PREW,
Sean Nelson35727f72010-01-28 23:55:12 +00005785 .probe = probe_jedec,
Stefan Tauneraf2db612011-12-02 21:48:17 +00005786 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00005787 .block_erasers =
5788 {
5789 {
5790 .eraseblocks = {
5791 {128 * 1024, 1},
5792 {96 * 1024, 1},
5793 {8 * 1024, 2},
5794 {16 * 1024, 1},
5795 },
Sean Nelson35727f72010-01-28 23:55:12 +00005796 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00005797 }, {
5798 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00005799 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00005800 },
5801 },
Sean Nelson35727f72010-01-28 23:55:12 +00005802 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00005803 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005804 .voltage = {4500, 5500},
Uwe Hermannf983d9f2009-06-14 21:53:26 +00005805 },
5806
5807 {
5808 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00005809 .name = "Pm29F002B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005810 .bustype = BUS_PARALLEL,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00005811 .manufacture_id = PMC_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005812 .model_id = PMC_PM29F002B,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00005813 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00005814 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005815 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00005816 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005817 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00005818 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00005819 .block_erasers =
5820 {
5821 {
5822 .eraseblocks = {
5823 {16 * 1024, 1},
5824 {8 * 1024, 2},
5825 {96 * 1024, 1},
5826 {128 * 1024, 1},
5827 },
Sean Nelson35727f72010-01-28 23:55:12 +00005828 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00005829 }, {
5830 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00005831 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00005832 },
5833 },
Sean Nelson35727f72010-01-28 23:55:12 +00005834 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00005835 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005836 .voltage = {4500, 5500},
Uwe Hermannf983d9f2009-06-14 21:53:26 +00005837 },
5838
5839 {
5840 .vendor = "PMC",
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00005841 .name = "Pm39LV010",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005842 .bustype = BUS_PARALLEL,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00005843 .manufacture_id = PMC_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005844 .model_id = PMC_PM39F010, /* Pm39LV010 and Pm39F010 have identical IDs but different voltage */
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00005845 .total_size = 128,
5846 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005847 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Paul Menzel018d4822011-10-21 12:33:07 +00005848 .tested = TEST_OK_PREW,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00005849 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005850 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson5643c072010-01-19 03:23:07 +00005851 .block_erasers =
5852 {
5853 {
5854 .eraseblocks = { {4 * 1024, 32} },
5855 .block_erase = erase_sector_jedec,
5856 }, {
5857 .eraseblocks = { {64 * 1024, 2} },
5858 .block_erase = erase_block_jedec,
5859 }, {
5860 .eraseblocks = { {128 * 1024, 1} },
5861 .block_erase = erase_chip_block_jedec,
5862 }
5863 },
Sean Nelson35727f72010-01-28 23:55:12 +00005864 .write = write_jedec_1,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00005865 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005866 .voltage = {2700, 3600},
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00005867 },
5868
5869 {
5870 .vendor = "PMC",
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00005871 .name = "Pm39LV020",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005872 .bustype = BUS_PARALLEL,
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00005873 .manufacture_id = PMC_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005874 .model_id = PMC_PM39LV020,
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00005875 .total_size = 256,
5876 .page_size = 4096,
5877 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
5878 .tested = TEST_UNTESTED,
5879 .probe = probe_jedec,
5880 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
5881 .block_erasers =
5882 {
5883 {
5884 .eraseblocks = { {4 * 1024, 64} },
5885 .block_erase = erase_sector_jedec,
5886 }, {
5887 .eraseblocks = { {64 * 1024, 4} },
5888 .block_erase = erase_block_jedec,
5889 }, {
5890 .eraseblocks = { {256 * 1024, 1} },
5891 .block_erase = erase_chip_block_jedec,
5892 }
5893 },
5894 .write = write_jedec_1,
5895 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005896 .voltage = {2700, 3600},
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00005897 },
5898
5899 {
5900 .vendor = "PMC",
5901 .name = "Pm39LV040",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005902 .bustype = BUS_PARALLEL,
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00005903 .manufacture_id = PMC_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005904 .model_id = PMC_PM39LV040,
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00005905 .total_size = 512,
5906 .page_size = 4096,
5907 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Paul Menzel018d4822011-10-21 12:33:07 +00005908 .tested = TEST_OK_PR,
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00005909 .probe = probe_jedec,
5910 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
5911 .block_erasers =
5912 {
5913 {
5914 .eraseblocks = { {4 * 1024, 128} },
5915 .block_erase = erase_sector_jedec,
5916 }, {
5917 .eraseblocks = { {64 * 1024, 8} },
5918 .block_erase = erase_block_jedec,
5919 }, {
5920 .eraseblocks = { {512 * 1024, 1} },
5921 .block_erase = erase_chip_block_jedec,
5922 }
5923 },
5924 .write = write_jedec_1,
5925 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005926 .voltage = {2700, 3600},
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00005927 },
Kyösti Mälkkiedab1d22012-05-20 23:32:33 +00005928
5929 {
5930 .vendor = "PMC",
5931 .name = "Pm39LV512",
5932 .bustype = BUS_PARALLEL,
5933 .manufacture_id = PMC_ID_NOPREFIX,
5934 .model_id = PMC_PM39LV512,
5935 .total_size = 64,
5936 .page_size = 4096,
5937 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
5938 .tested = TEST_OK_PREW,
5939 .probe = probe_jedec,
5940 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
5941 .block_erasers =
5942 {
5943 {
5944 .eraseblocks = { {4 * 1024, 16} },
5945 .block_erase = erase_sector_jedec,
5946 }, {
5947 .eraseblocks = { {64 * 1024, 1} },
5948 .block_erase = erase_block_jedec,
5949 }, {
5950 .eraseblocks = { {64 * 1024, 1} },
5951 .block_erase = erase_chip_block_jedec,
5952 }
5953 },
5954 .write = write_jedec_1,
5955 .read = read_memmapped,
5956 .voltage = {2700, 3600},
5957 },
5958
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00005959 {
5960 .vendor = "PMC",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005961 .name = "Pm49FL002",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005962 .bustype = BUS_LPC | BUS_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005963 .manufacture_id = PMC_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005964 .model_id = PMC_PM49FL002,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005965 .total_size = 256,
5966 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005967 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stefan Taunerd06d9412011-06-12 19:47:55 +00005968 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00005969 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005970 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00005971 .block_erasers =
5972 {
5973 {
5974 .eraseblocks = { {4 * 1024, 64} },
5975 .block_erase = erase_sector_jedec,
5976 }, {
5977 .eraseblocks = { {16 * 1024, 16} },
5978 .block_erase = erase_block_jedec,
5979 }, {
5980 .eraseblocks = { {256 * 1024, 1} },
5981 .block_erase = erase_chip_block_jedec,
5982 }
5983 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00005984 .unlock = unlock_49fl00x,
Sean Nelson36172342010-02-27 18:01:15 +00005985 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005986 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00005987 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00005988 },
5989
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005990 {
5991 .vendor = "PMC",
5992 .name = "Pm49FL004",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00005993 .bustype = BUS_LPC | BUS_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005994 .manufacture_id = PMC_ID_NOPREFIX,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00005995 .model_id = PMC_PM49FL004,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005996 .total_size = 512,
5997 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005998 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Idwer Vollering67f28142011-03-06 22:26:23 +00005999 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00006000 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006001 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00006002 .block_erasers =
6003 {
6004 {
6005 .eraseblocks = { {4 * 1024, 128} },
6006 .block_erase = erase_sector_jedec,
6007 }, {
6008 .eraseblocks = { {64 * 1024, 8} },
6009 .block_erase = erase_block_jedec,
6010 }, {
6011 .eraseblocks = { {512 * 1024, 1} },
6012 .block_erase = erase_chip_block_jedec,
6013 }
6014 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00006015 .unlock = unlock_49fl00x,
Sean Nelson36172342010-02-27 18:01:15 +00006016 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006017 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006018 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006019 },
6020
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006021 {
Sean Nelsond70b09c2009-11-24 02:11:08 +00006022 .vendor = "Sanyo",
6023 .name = "LF25FW203A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006024 .bustype = BUS_SPI,
Sean Nelsond70b09c2009-11-24 02:11:08 +00006025 .manufacture_id = SANYO_ID,
6026 .model_id = SANYO_LE25FW203A,
6027 .total_size = 2048,
6028 .page_size = 256,
6029 .tested = TEST_UNTESTED,
6030 .probe = probe_spi_rdid,
6031 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00006032 .block_erasers =
6033 {
6034 {
6035 .eraseblocks = { {64 * 1024, 32} },
6036 .block_erase = spi_block_erase_d8,
6037 }, {
6038 .eraseblocks = { {2 * 1024 * 1024, 1} },
6039 .block_erase = spi_block_erase_c7,
6040 }
6041 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006042 .unlock = spi_disable_blockprotect,
Sean Nelsond70b09c2009-11-24 02:11:08 +00006043 .write = spi_chip_write_256,
6044 .read = spi_chip_read,
6045 },
6046
6047 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006048 .vendor = "Sharp",
Mattias Mattssonfca3b012011-08-25 22:44:11 +00006049 .name = "LH28F008BJT-BTLZ1",
6050 .bustype = BUS_PARALLEL,
6051 .manufacture_id = SHARP_ID,
6052 .model_id = SHARP_LH28F008BJxxPB,
6053 .total_size = 1024,
6054 .page_size = 64 * 1024,
6055 .tested = TEST_OK_PREW,
6056 .probe = probe_82802ab,
6057 .probe_timing = TIMING_ZERO,
6058 .block_erasers =
6059 {
6060 {
6061 .eraseblocks = {
6062 {8 * 1024, 8},
6063 {64 * 1024, 15}
6064 },
6065 .block_erase = erase_block_82802ab,
6066 }, {
6067 .eraseblocks = { {1024 * 1024, 1} },
6068 .block_erase = erase_sector_49lfxxxc,
6069 }
6070 },
6071 .unlock = unlock_lh28f008bjt,
6072 .write = write_82802ab,
6073 .read = read_memmapped,
6074 .voltage = {2700, 3600},
6075 },
6076
6077 {
6078 .vendor = "Sharp",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006079 .name = "LHF00L04",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006080 .bustype = BUS_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006081 .manufacture_id = SHARP_ID,
6082 .model_id = SHARP_LHF00L04,
6083 .total_size = 1024,
6084 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006085 .feature_bits = FEATURE_EITHER_RESET | FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006086 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006087 .probe = probe_82802ab,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00006088 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00006089 .block_erasers =
6090 {
6091 {
6092 .eraseblocks = {
6093 {64 * 1024, 15},
6094 {8 * 1024, 8}
6095 },
Sean Nelson28accc22010-03-19 18:47:06 +00006096 .block_erase = erase_block_82802ab,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00006097 }, {
6098 .eraseblocks = {
6099 {1024 * 1024, 1}
6100 },
Sean Nelson51c83fb2010-01-20 20:55:53 +00006101 .block_erase = NULL, /* 30 D0, only in A/A mux mode */
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00006102 },
6103 },
Sean Nelson28accc22010-03-19 18:47:06 +00006104 .unlock = unlock_82802ab,
6105 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006106 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006107 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006108 },
6109
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006110 {
6111 .vendor = "Spansion",
Rudy Hostf4e57772010-11-29 00:37:49 +00006112 .name = "S25FL004A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006113 .bustype = BUS_SPI,
Rudy Hostf4e57772010-11-29 00:37:49 +00006114 .manufacture_id = SPANSION_ID,
6115 .model_id = SPANSION_S25FL004A,
6116 .total_size = 512,
6117 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00006118 .feature_bits = FEATURE_WRSR_WREN,
Rudy Hostf4e57772010-11-29 00:37:49 +00006119 .tested = TEST_UNTESTED,
6120 .probe = probe_spi_rdid,
6121 .probe_timing = TIMING_ZERO,
6122 .block_erasers =
6123 {
6124 {
6125 .eraseblocks = { {64 * 1024, 8} },
6126 .block_erase = spi_block_erase_d8,
6127 }, {
6128 .eraseblocks = { {512 * 1024, 1} },
6129 .block_erase = spi_block_erase_c7,
6130 }
6131 },
6132 .unlock = spi_disable_blockprotect,
6133 .write = spi_chip_write_256,
6134 .read = spi_chip_read,
Steven Zakulec7d257b42011-07-19 08:50:18 +00006135 .voltage = {2700, 3600},
Rudy Hostf4e57772010-11-29 00:37:49 +00006136 },
6137
6138 {
6139 .vendor = "Spansion",
Michael Karcher23ff4602010-01-12 23:29:30 +00006140 .name = "S25FL008A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006141 .bustype = BUS_SPI,
Michael Karcher23ff4602010-01-12 23:29:30 +00006142 .manufacture_id = SPANSION_ID,
6143 .model_id = SPANSION_S25FL008A,
6144 .total_size = 1024,
6145 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00006146 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006147 .tested = TEST_OK_PRE,
Michael Karcher23ff4602010-01-12 23:29:30 +00006148 .probe = probe_spi_rdid,
6149 .probe_timing = TIMING_ZERO,
Michael Karcher23ff4602010-01-12 23:29:30 +00006150 .block_erasers =
6151 {
6152 {
6153 .eraseblocks = { {64 * 1024, 16} },
6154 .block_erase = spi_block_erase_d8,
6155 }, {
6156 .eraseblocks = { {1024 * 1024, 1} },
6157 .block_erase = spi_block_erase_c7,
6158 }
6159 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006160 .unlock = spi_disable_blockprotect,
Michael Karcher23ff4602010-01-12 23:29:30 +00006161 .write = spi_chip_write_256,
6162 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006163 .voltage = {2700, 3600},
Michael Karcher23ff4602010-01-12 23:29:30 +00006164 },
6165
6166 {
6167 .vendor = "Spansion",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006168 .name = "S25FL016A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006169 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006170 .manufacture_id = SPANSION_ID,
6171 .model_id = SPANSION_S25FL016A,
6172 .total_size = 2048,
6173 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00006174 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006175 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006176 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006177 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00006178 .block_erasers =
6179 {
6180 {
6181 .eraseblocks = { {64 * 1024, 32} },
6182 .block_erase = spi_block_erase_d8,
6183 }, {
6184 .eraseblocks = { {2 * 1024 * 1024, 1} },
6185 .block_erase = spi_block_erase_c7,
6186 }
6187 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006188 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006189 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006190 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006191 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006192 },
6193
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006194 {
Rudy Hostf4e57772010-11-29 00:37:49 +00006195 .vendor = "Spansion",
6196 .name = "S25FL032A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006197 .bustype = BUS_SPI,
Rudy Hostf4e57772010-11-29 00:37:49 +00006198 .manufacture_id = SPANSION_ID,
6199 .model_id = SPANSION_S25FL032A,
6200 .total_size = 4096,
6201 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00006202 .feature_bits = FEATURE_WRSR_WREN,
Stefan Tauner2abab942012-04-27 20:41:23 +00006203 .tested = TEST_OK_PR,
Rudy Hostf4e57772010-11-29 00:37:49 +00006204 .probe = probe_spi_rdid,
6205 .probe_timing = TIMING_ZERO,
6206 .block_erasers =
6207 {
6208 {
6209 .eraseblocks = { {64 * 1024, 64} },
6210 .block_erase = spi_block_erase_d8,
6211 }, {
6212 .eraseblocks = { {4 * 1024 * 1024, 1} },
6213 .block_erase = spi_block_erase_c7,
6214 }
6215 },
6216 .unlock = spi_disable_blockprotect,
6217 .write = spi_chip_write_256,
6218 .read = spi_chip_read,
Steven Zakulec7d257b42011-07-19 08:50:18 +00006219 .voltage = {2700, 3600},
Rudy Hostf4e57772010-11-29 00:37:49 +00006220 },
6221
6222 {
6223 .vendor = "Spansion",
6224 .name = "S25FL064A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006225 .bustype = BUS_SPI,
Rudy Hostf4e57772010-11-29 00:37:49 +00006226 .manufacture_id = SPANSION_ID,
6227 .model_id = SPANSION_S25FL064A,
6228 .total_size = 8192,
6229 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00006230 .feature_bits = FEATURE_WRSR_WREN,
Rudy Hostf4e57772010-11-29 00:37:49 +00006231 .tested = TEST_OK_PREW,
6232 .probe = probe_spi_rdid,
6233 .probe_timing = TIMING_ZERO,
6234 .block_erasers =
6235 {
6236 {
6237 .eraseblocks = { {64 * 1024, 128} },
6238 .block_erase = spi_block_erase_d8,
6239 }, {
6240 .eraseblocks = { {8 * 1024 * 1024, 1} },
6241 .block_erase = spi_block_erase_c7,
6242 }
6243 },
6244 .unlock = spi_disable_blockprotect,
6245 .write = spi_chip_write_256,
6246 .read = spi_chip_read,
Steven Zakulec7d257b42011-07-19 08:50:18 +00006247 .voltage = {2700, 3600},
Rudy Hostf4e57772010-11-29 00:37:49 +00006248 },
6249
6250 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006251 .vendor = "SST",
Zeus Castro33670ba2011-08-17 09:50:11 +00006252 .name = "SST25LF040A",
6253 .bustype = BUS_SPI,
6254 .manufacture_id = SST_ID,
6255 .model_id = SST_SST25VF040_REMS,
6256 .total_size = 512,
6257 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00006258 .feature_bits = FEATURE_WRSR_EWSR,
Uwe Hermann4335ec82011-09-07 20:20:25 +00006259 .tested = TEST_OK_PREW,
Zeus Castro33670ba2011-08-17 09:50:11 +00006260 .probe = probe_spi_res2,
6261 .probe_timing = TIMING_ZERO,
6262 .block_erasers =
6263 {
6264 {
6265 .eraseblocks = { {4 * 1024, 128} },
6266 .block_erase = spi_block_erase_20,
6267 }, {
6268 .eraseblocks = { {32 * 1024, 16} },
6269 .block_erase = spi_block_erase_52,
6270 }, {
6271 .eraseblocks = { {512 * 1024, 1} },
6272 .block_erase = spi_block_erase_60,
6273 },
6274 },
6275 .unlock = spi_disable_blockprotect,
6276 .write = spi_chip_write_1, /* AAI supported, but opcode is 0xAF */
6277 .read = spi_chip_read,
6278 .voltage = {3000, 3600},
6279 },
6280
6281 {
6282 .vendor = "SST",
6283 .name = "SST25LF080A",
6284 .bustype = BUS_SPI,
6285 .manufacture_id = SST_ID,
6286 .model_id = SST_SST25VF080_REMS,
6287 .total_size = 1024,
6288 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00006289 .feature_bits = FEATURE_WRSR_EWSR,
Zeus Castro33670ba2011-08-17 09:50:11 +00006290 .tested = TEST_UNTESTED,
6291 .probe = probe_spi_res2,
6292 .probe_timing = TIMING_ZERO,
6293 .block_erasers =
6294 {
6295 {
6296 .eraseblocks = { {4 * 1024, 256} },
6297 .block_erase = spi_block_erase_20,
6298 }, {
6299 .eraseblocks = { {32 * 1024, 32} },
6300 .block_erase = spi_block_erase_52,
6301 }, {
6302 .eraseblocks = { {1024 * 1024, 1} },
6303 .block_erase = spi_block_erase_60,
6304 },
6305 },
6306 .unlock = spi_disable_blockprotect,
6307 .write = spi_chip_write_1, /* AAI supported, but opcode is 0xAF */
6308 .read = spi_chip_read,
6309 .voltage = {3000, 3600},
6310 },
6311
6312 {
6313 .vendor = "SST",
Sylvain "ythier" Hitier3093f8f2011-09-03 11:22:27 +00006314 .name = "SST25VF010",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006315 .bustype = BUS_SPI,
Mark Marshall90021f22010-12-03 14:48:11 +00006316 .manufacture_id = SST_ID,
6317 .model_id = SST_SST25VF010_REMS,
6318 .total_size = 128,
6319 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00006320 .feature_bits = FEATURE_WRSR_EWSR,
Mark Marshall90021f22010-12-03 14:48:11 +00006321 .tested = TEST_OK_PREW,
6322 .probe = probe_spi_rems,
6323 .probe_timing = TIMING_ZERO,
6324 .block_erasers =
6325 {
6326 {
6327 .eraseblocks = { {4 * 1024, 32} },
6328 .block_erase = spi_block_erase_20,
6329 }, {
6330 .eraseblocks = { {32 * 1024, 4} },
6331 .block_erase = spi_block_erase_52,
6332 }, {
6333 .eraseblocks = { {128 * 1024, 1} },
6334 .block_erase = spi_block_erase_60,
6335 },
6336 },
6337 .unlock = spi_disable_blockprotect,
6338 .write = spi_chip_write_1,
6339 .read = spi_chip_read,
Steven Zakulec7d257b42011-07-19 08:50:18 +00006340 .voltage = {2700, 3600},
Mark Marshall90021f22010-12-03 14:48:11 +00006341 },
6342
6343 {
6344 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006345 .name = "SST25VF016B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006346 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006347 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006348 .model_id = SST_SST25VF016B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006349 .total_size = 2048,
6350 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00006351 .feature_bits = FEATURE_WRSR_EWSR,
Mark Marshall90021f22010-12-03 14:48:11 +00006352 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006353 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006354 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00006355 .block_erasers =
6356 {
6357 {
6358 .eraseblocks = { {4 * 1024, 512} },
6359 .block_erase = spi_block_erase_20,
6360 }, {
6361 .eraseblocks = { {32 * 1024, 64} },
6362 .block_erase = spi_block_erase_52,
6363 }, {
6364 .eraseblocks = { {64 * 1024, 32} },
6365 .block_erase = spi_block_erase_d8,
6366 }, {
6367 .eraseblocks = { {2 * 1024 * 1024, 1} },
6368 .block_erase = spi_block_erase_60,
6369 }, {
6370 .eraseblocks = { {2 * 1024 * 1024, 1} },
6371 .block_erase = spi_block_erase_c7,
6372 },
6373 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006374 .unlock = spi_disable_blockprotect,
Joshua Roys87955bf2011-08-01 18:39:28 +00006375 .write = spi_aai_write,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006376 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006377 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006378 },
6379
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006380 {
6381 .vendor = "SST",
6382 .name = "SST25VF032B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006383 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006384 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006385 .model_id = SST_SST25VF032B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006386 .total_size = 4096,
6387 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00006388 .feature_bits = FEATURE_WRSR_EWSR,
Stefan Taunerfcf6a8c2011-05-18 01:32:00 +00006389 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006390 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006391 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00006392 .block_erasers =
6393 {
6394 {
6395 .eraseblocks = { {4 * 1024, 1024} },
6396 .block_erase = spi_block_erase_20,
6397 }, {
6398 .eraseblocks = { {32 * 1024, 128} },
6399 .block_erase = spi_block_erase_52,
6400 }, {
6401 .eraseblocks = { {64 * 1024, 64} },
6402 .block_erase = spi_block_erase_d8,
6403 }, {
6404 .eraseblocks = { {4 * 1024 * 1024, 1} },
6405 .block_erase = spi_block_erase_60,
6406 }, {
6407 .eraseblocks = { {4 * 1024 * 1024, 1} },
6408 .block_erase = spi_block_erase_c7,
6409 },
6410 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006411 .unlock = spi_disable_blockprotect,
Helge Wagner1db7a442010-10-05 22:29:08 +00006412 .write = spi_aai_write,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00006413 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006414 .voltage = {2700, 3600},
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00006415 },
6416
6417 {
6418 .vendor = "SST",
Ed Swierk86f4e6d2010-07-21 15:02:22 +00006419 .name = "SST25VF064C",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006420 .bustype = BUS_SPI,
Ed Swierk86f4e6d2010-07-21 15:02:22 +00006421 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006422 .model_id = SST_SST25VF064C,
Ed Swierk86f4e6d2010-07-21 15:02:22 +00006423 .total_size = 8192,
6424 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00006425 .feature_bits = FEATURE_WRSR_EWSR,
Stefan Tauner8179be52011-06-04 13:13:34 +00006426 .tested = TEST_OK_PREW,
Ed Swierk86f4e6d2010-07-21 15:02:22 +00006427 .probe = probe_spi_rdid,
6428 .probe_timing = TIMING_ZERO,
6429 .block_erasers =
6430 {
6431 {
6432 .eraseblocks = { {4 * 1024, 2048} },
6433 .block_erase = spi_block_erase_20,
6434 }, {
6435 .eraseblocks = { {32 * 1024, 256} },
6436 .block_erase = spi_block_erase_52,
6437 }, {
6438 .eraseblocks = { {64 * 1024, 128} },
6439 .block_erase = spi_block_erase_d8,
6440 }, {
6441 .eraseblocks = { {8 * 1024 * 1024, 1} },
6442 .block_erase = spi_block_erase_60,
6443 }, {
6444 .eraseblocks = { {8 * 1024 * 1024, 1} },
6445 .block_erase = spi_block_erase_c7,
6446 },
6447 },
6448 .unlock = spi_disable_blockprotect,
Helge Wagner1db7a442010-10-05 22:29:08 +00006449 .write = spi_chip_write_256,
Ed Swierk86f4e6d2010-07-21 15:02:22 +00006450 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006451 .voltage = {2700, 3600},
Ed Swierk86f4e6d2010-07-21 15:02:22 +00006452 },
6453
6454 {
6455 .vendor = "SST",
Sylvain "ythier" Hitier3093f8f2011-09-03 11:22:27 +00006456 .name = "SST25VF040",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006457 .bustype = BUS_SPI,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00006458 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006459 .model_id = SST_SST25VF040_REMS,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00006460 .total_size = 512,
6461 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00006462 .feature_bits = FEATURE_WRSR_EWSR,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00006463 .tested = TEST_OK_PR,
6464 .probe = probe_spi_rems,
6465 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00006466 .block_erasers =
6467 {
6468 {
6469 .eraseblocks = { {4 * 1024, 128} },
6470 .block_erase = spi_block_erase_20,
6471 }, {
6472 .eraseblocks = { {32 * 1024, 16} },
6473 .block_erase = spi_block_erase_52,
6474 }, {
6475 .eraseblocks = { {512 * 1024, 1} },
6476 .block_erase = spi_block_erase_60,
6477 },
6478 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006479 .unlock = spi_disable_blockprotect,
Joshua Roys87955bf2011-08-01 18:39:28 +00006480 .write = spi_chip_write_1, /* AAI supported, but opcode is 0xAF */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006481 .read = spi_chip_read,
Steven Zakulec7d257b42011-07-19 08:50:18 +00006482 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006483 },
6484
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006485 {
6486 .vendor = "SST",
6487 .name = "SST25VF040B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006488 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006489 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006490 .model_id = SST_SST25VF040B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006491 .total_size = 512,
6492 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00006493 .feature_bits = FEATURE_WRSR_EWSR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006494 .tested = TEST_UNTESTED,
6495 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006496 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00006497 .block_erasers =
6498 {
6499 {
6500 .eraseblocks = { {4 * 1024, 128} },
6501 .block_erase = spi_block_erase_20,
6502 }, {
6503 .eraseblocks = { {32 * 1024, 16} },
6504 .block_erase = spi_block_erase_52,
6505 }, {
6506 .eraseblocks = { {64 * 1024, 8} },
6507 .block_erase = spi_block_erase_d8,
6508 }, {
6509 .eraseblocks = { {512 * 1024, 1} },
6510 .block_erase = spi_block_erase_60,
6511 }, {
6512 .eraseblocks = { {512 * 1024, 1} },
6513 .block_erase = spi_block_erase_c7,
6514 },
6515 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006516 .unlock = spi_disable_blockprotect,
Joshua Roys87955bf2011-08-01 18:39:28 +00006517 .write = spi_aai_write,
Zheng Bao0677dff2009-02-25 08:07:33 +00006518 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006519 .voltage = {2700, 3600},
Zheng Bao0677dff2009-02-25 08:07:33 +00006520 },
6521
6522 {
6523 .vendor = "SST",
Peter Stugefd9217d2009-01-26 03:37:40 +00006524 .name = "SST25VF040B.REMS",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006525 .bustype = BUS_SPI,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00006526 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006527 .model_id = SST_SST25VF040B_REMS,
Peter Stugefd9217d2009-01-26 03:37:40 +00006528 .total_size = 512,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00006529 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00006530 .feature_bits = FEATURE_WRSR_EWSR,
Peter Stugefd9217d2009-01-26 03:37:40 +00006531 .tested = TEST_OK_PR,
6532 .probe = probe_spi_rems,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006533 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00006534 .block_erasers =
6535 {
6536 {
6537 .eraseblocks = { {4 * 1024, 128} },
6538 .block_erase = spi_block_erase_20,
6539 }, {
6540 .eraseblocks = { {32 * 1024, 16} },
6541 .block_erase = spi_block_erase_52,
6542 }, {
6543 .eraseblocks = { {64 * 1024, 8} },
6544 .block_erase = spi_block_erase_d8,
6545 }, {
6546 .eraseblocks = { {512 * 1024, 1} },
6547 .block_erase = spi_block_erase_60,
6548 }, {
6549 .eraseblocks = { {512 * 1024, 1} },
6550 .block_erase = spi_block_erase_c7,
6551 },
6552 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006553 .unlock = spi_disable_blockprotect,
Joshua Roys87955bf2011-08-01 18:39:28 +00006554 .write = spi_aai_write,
Peter Stugefd9217d2009-01-26 03:37:40 +00006555 .read = spi_chip_read,
Steven Zakulec7d257b42011-07-19 08:50:18 +00006556 .voltage = {2700, 3600},
Peter Stugefd9217d2009-01-26 03:37:40 +00006557 },
6558
6559 {
6560 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006561 .name = "SST25VF080B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006562 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006563 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006564 .model_id = SST_SST25VF080B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006565 .total_size = 1024,
6566 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00006567 .feature_bits = FEATURE_WRSR_EWSR,
John Schmergec965c2d2011-05-18 11:28:47 +00006568 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006569 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006570 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00006571 .block_erasers =
6572 {
6573 {
6574 .eraseblocks = { {4 * 1024, 256} },
6575 .block_erase = spi_block_erase_20,
6576 }, {
6577 .eraseblocks = { {32 * 1024, 32} },
6578 .block_erase = spi_block_erase_52,
6579 }, {
6580 .eraseblocks = { {64 * 1024, 16} },
6581 .block_erase = spi_block_erase_d8,
6582 }, {
6583 .eraseblocks = { {1024 * 1024, 1} },
6584 .block_erase = spi_block_erase_60,
6585 }, {
6586 .eraseblocks = { {1024 * 1024, 1} },
6587 .block_erase = spi_block_erase_c7,
6588 },
6589 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006590 .unlock = spi_disable_blockprotect,
Joshua Roys87955bf2011-08-01 18:39:28 +00006591 .write = spi_aai_write,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006592 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006593 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006594 },
6595
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006596 {
6597 .vendor = "SST",
6598 .name = "SST28SF040A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006599 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006600 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006601 .model_id = SST_SST28SF040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006602 .total_size = 512,
6603 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00006604 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006605 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006606 .probe = probe_82802ab,
Paul Menzelc07a41c2011-06-19 17:23:55 +00006607 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (sst28sf040.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006608 .block_erasers =
6609 {
6610 {
6611 .eraseblocks = { {128, 4096} },
6612 .block_erase = erase_sector_28sf040,
6613 }, {
6614 .eraseblocks = { {512 * 1024, 1} },
6615 .block_erase = erase_chip_28sf040,
6616 }
6617 },
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00006618 .unlock = unprotect_28sf040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006619 .write = write_28sf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006620 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006621 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00006622 },
6623
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006624 {
6625 .vendor = "SST",
6626 .name = "SST29EE010",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006627 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006628 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006629 .model_id = SST_SST29EE010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006630 .total_size = 128,
6631 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006632 .feature_bits = FEATURE_LONG_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006633 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006634 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00006635 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00006636 .block_erasers =
6637 {
6638 {
6639 .eraseblocks = { {128 * 1024, 1} },
6640 .block_erase = erase_chip_block_jedec,
6641 }
6642 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006643 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006644 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006645 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00006646 },
6647
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006648 {
6649 .vendor = "SST",
6650 .name = "SST29LE010",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006651 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006652 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006653 .model_id = SST_SST29LE010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006654 .total_size = 128,
6655 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006656 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006657 .tested = TEST_UNTESTED,
6658 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00006659 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00006660 .block_erasers =
6661 {
6662 {
6663 .eraseblocks = { {128 * 1024, 1} },
6664 .block_erase = erase_chip_block_jedec,
6665 }
6666 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006667 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006668 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006669 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006670 },
6671
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006672 {
6673 .vendor = "SST",
6674 .name = "SST29EE020A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006675 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006676 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006677 .model_id = SST_SST29EE020A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006678 .total_size = 256,
6679 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006680 .feature_bits = FEATURE_LONG_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006681 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006682 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006683 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00006684 .block_erasers =
6685 {
6686 {
6687 .eraseblocks = { {256 * 1024, 1} },
6688 .block_erase = erase_chip_block_jedec,
6689 }
6690 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006691 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006692 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006693 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00006694 },
6695
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006696 {
6697 .vendor = "SST",
6698 .name = "SST29LE020",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006699 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006700 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006701 .model_id = SST_SST29LE020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006702 .total_size = 256,
6703 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006704 .feature_bits = FEATURE_LONG_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006705 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006706 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00006707 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00006708 .block_erasers =
6709 {
6710 {
6711 .eraseblocks = { {256 * 1024, 1} },
6712 .block_erase = erase_chip_block_jedec,
6713 }
6714 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006715 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006716 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006717 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006718 },
6719
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006720 {
6721 .vendor = "SST",
Uwe Hermann48da3f92010-01-23 15:15:19 +00006722 .name = "SST39SF512",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006723 .bustype = BUS_PARALLEL,
Uwe Hermann48da3f92010-01-23 15:15:19 +00006724 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006725 .model_id = SST_SST39SF512,
Uwe Hermann48da3f92010-01-23 15:15:19 +00006726 .total_size = 64,
6727 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00006728 .feature_bits = FEATURE_EITHER_RESET,
Idwer Vollering7913fb42011-03-07 15:32:58 +00006729 .tested = TEST_OK_PREW,
Uwe Hermann48da3f92010-01-23 15:15:19 +00006730 .probe = probe_jedec,
6731 .probe_timing = 1, /* 150 ns */
Uwe Hermann48da3f92010-01-23 15:15:19 +00006732 .block_erasers =
6733 {
6734 {
6735 .eraseblocks = { {4 * 1024, 16} },
6736 .block_erase = erase_sector_jedec,
6737 }, {
6738 .eraseblocks = { {64 * 1024, 1} },
6739 .block_erase = erase_chip_block_jedec,
6740 }
6741 },
Sean Nelson35727f72010-01-28 23:55:12 +00006742 .write = write_jedec_1,
Uwe Hermann48da3f92010-01-23 15:15:19 +00006743 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006744 .voltage = {4500, 5500},
Uwe Hermann48da3f92010-01-23 15:15:19 +00006745 },
6746
6747 {
6748 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006749 .name = "SST39SF010A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006750 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006751 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006752 .model_id = SST_SST39SF010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006753 .total_size = 128,
6754 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00006755 .feature_bits = FEATURE_EITHER_RESET,
Cristian Măgherușan-Stanciu9932c7b2011-07-07 19:56:58 +00006756 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006757 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00006758 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006759 .block_erasers =
6760 {
6761 {
6762 .eraseblocks = { {4 * 1024, 32} },
6763 .block_erase = erase_sector_jedec,
6764 }, {
6765 .eraseblocks = { {128 * 1024, 1} },
6766 .block_erase = erase_chip_block_jedec,
6767 }
6768 },
Sean Nelson35727f72010-01-28 23:55:12 +00006769 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006770 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006771 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00006772 },
6773
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006774 {
6775 .vendor = "SST",
6776 .name = "SST39SF020A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006777 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006778 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006779 .model_id = SST_SST39SF020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006780 .total_size = 256,
6781 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00006782 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann19f46f22011-06-18 22:56:14 +00006783 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006784 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00006785 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006786 .block_erasers =
6787 {
6788 {
6789 .eraseblocks = { {4 * 1024, 64} },
6790 .block_erase = erase_sector_jedec,
6791 }, {
6792 .eraseblocks = { {256 * 1024, 1} },
6793 .block_erase = erase_chip_block_jedec,
6794 }
6795 },
Sean Nelson35727f72010-01-28 23:55:12 +00006796 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006797 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006798 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00006799 },
6800
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006801 {
6802 .vendor = "SST",
6803 .name = "SST39SF040",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006804 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006805 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006806 .model_id = SST_SST39SF040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006807 .total_size = 512,
6808 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00006809 .feature_bits = FEATURE_EITHER_RESET,
Sylvain "ythier" Hitier3093f8f2011-09-03 11:22:27 +00006810 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006811 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00006812 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006813 .block_erasers =
6814 {
6815 {
6816 .eraseblocks = { {4 * 1024, 128} },
6817 .block_erase = erase_sector_jedec,
6818 }, {
6819 .eraseblocks = { {512 * 1024, 1} },
6820 .block_erase = erase_chip_block_jedec,
6821 }
6822 },
Sean Nelson35727f72010-01-28 23:55:12 +00006823 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006824 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006825 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00006826 },
6827
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006828 {
6829 .vendor = "SST",
6830 .name = "SST39VF512",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006831 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006832 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006833 .model_id = SST_SST39VF512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006834 .total_size = 64,
6835 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00006836 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00006837 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006838 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00006839 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006840 .block_erasers =
6841 {
6842 {
6843 .eraseblocks = { {4 * 1024, 16} },
6844 .block_erase = erase_sector_jedec,
6845 }, {
6846 .eraseblocks = { {64 * 1024, 1} },
6847 .block_erase = erase_chip_block_jedec,
6848 }
6849 },
Sean Nelson35727f72010-01-28 23:55:12 +00006850 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006851 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006852 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006853 },
6854
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006855 {
6856 .vendor = "SST",
6857 .name = "SST39VF010",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006858 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006859 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006860 .model_id = SST_SST39VF010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006861 .total_size = 128,
6862 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00006863 .feature_bits = FEATURE_EITHER_RESET,
Stefan Taunerd94d25d2012-07-28 03:17:15 +00006864 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006865 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00006866 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006867 .block_erasers =
6868 {
6869 {
6870 .eraseblocks = { {4 * 1024, 32} },
6871 .block_erase = erase_sector_jedec,
6872 }, {
6873 .eraseblocks = { {128 * 1024, 1} },
6874 .block_erase = erase_chip_block_jedec,
6875 }
6876 },
Sean Nelson35727f72010-01-28 23:55:12 +00006877 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006878 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006879 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006880 },
6881
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006882 {
6883 .vendor = "SST",
6884 .name = "SST39VF020",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006885 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006886 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006887 .model_id = SST_SST39VF020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006888 .total_size = 256,
6889 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00006890 .feature_bits = FEATURE_EITHER_RESET,
6891 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006892 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00006893 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006894 .block_erasers =
6895 {
6896 {
6897 .eraseblocks = { {4 * 1024, 64} },
6898 .block_erase = erase_sector_jedec,
6899 }, {
6900 .eraseblocks = { {256 * 1024, 1} },
6901 .block_erase = erase_chip_block_jedec,
6902 }
6903 },
Sean Nelson35727f72010-01-28 23:55:12 +00006904 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006905 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006906 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006907 },
6908
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006909 {
6910 .vendor = "SST",
6911 .name = "SST39VF040",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006912 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006913 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006914 .model_id = SST_SST39VF040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006915 .total_size = 512,
6916 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00006917 .feature_bits = FEATURE_EITHER_RESET,
6918 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006919 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00006920 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006921 .block_erasers =
6922 {
6923 {
6924 .eraseblocks = { {4 * 1024, 128} },
6925 .block_erase = erase_sector_jedec,
6926 }, {
6927 .eraseblocks = { {512 * 1024, 1} },
6928 .block_erase = erase_chip_block_jedec,
6929 }
6930 },
Sean Nelson35727f72010-01-28 23:55:12 +00006931 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006932 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006933 .voltage = {2700, 3600},
Carl-Daniel Hailfinger90eff152008-12-08 23:51:45 +00006934 },
FENG yu ningff692fb2008-12-08 18:15:10 +00006935
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006936 {
6937 .vendor = "SST",
Peter Stuge8440cc02009-01-25 23:55:12 +00006938 .name = "SST39VF080",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006939 .bustype = BUS_PARALLEL,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00006940 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006941 .model_id = SST_SST39VF080,
Peter Stuge8440cc02009-01-25 23:55:12 +00006942 .total_size = 1024,
6943 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00006944 .feature_bits = FEATURE_EITHER_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +00006945 .tested = TEST_UNTESTED,
6946 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00006947 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006948 .block_erasers =
6949 {
6950 {
6951 .eraseblocks = { {4 * 1024, 256} },
6952 .block_erase = erase_sector_jedec,
6953 }, {
6954 .eraseblocks = { {64 * 1024, 16} },
6955 .block_erase = erase_block_jedec,
6956 }, {
6957 .eraseblocks = { {1024 * 1024, 1} },
6958 .block_erase = erase_chip_block_jedec,
6959 }
6960 },
Sean Nelson35727f72010-01-28 23:55:12 +00006961 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006962 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006963 .voltage = {2700, 3600},
Peter Stuge8440cc02009-01-25 23:55:12 +00006964 },
6965
6966 {
6967 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006968 .name = "SST49LF002A/B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00006969 .bustype = BUS_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006970 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00006971 .model_id = SST_SST49LF002A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006972 .total_size = 256,
6973 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006974 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Idwer Vollering67f28142011-03-06 22:26:23 +00006975 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006976 .probe = probe_jedec,
6977 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00006978 .block_erasers =
6979 {
6980 {
6981 .eraseblocks = { {4 * 1024, 64} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00006982 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00006983 }, {
6984 .eraseblocks = { {16 * 1024, 16} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00006985 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00006986 }, {
6987 .eraseblocks = { {256 * 1024, 1} },
6988 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
6989 }
6990 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006991 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00006992 .unlock = unlock_sst_fwhub,
6993 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006994 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00006995 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00006996 },
6997
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006998 {
6999 .vendor = "SST",
7000 .name = "SST49LF003A/B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007001 .bustype = BUS_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007002 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00007003 .model_id = SST_SST49LF003A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007004 .total_size = 384,
7005 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007006 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Peter Lemenkov45835c42009-09-25 01:09:18 +00007007 .tested = TEST_OK_PR,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00007008 .probe = probe_jedec,
7009 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00007010 .block_erasers =
7011 {
7012 {
7013 .eraseblocks = { {4 * 1024, 96} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00007014 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00007015 }, {
7016 .eraseblocks = { {64 * 1024, 6} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00007017 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00007018 }, {
7019 .eraseblocks = { {384 * 1024, 1} },
7020 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
7021 }
7022 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00007023 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00007024 .unlock = unlock_sst_fwhub,
7025 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007026 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007027 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007028 },
7029
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007030 {
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00007031 /* Contrary to the data sheet, TBL# on the SST49LF004B affects the top 128kB (instead of 64kB)
7032 * and is only honored for 64k block erase, but not 4k sector erase.
7033 */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007034 .vendor = "SST",
7035 .name = "SST49LF004A/B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007036 .bustype = BUS_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007037 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00007038 .model_id = SST_SST49LF004A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007039 .total_size = 512,
7040 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007041 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Idwer Vollering67f28142011-03-06 22:26:23 +00007042 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00007043 .probe = probe_jedec,
7044 .probe_timing = 1, /* 150 ns */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00007045 .block_erasers =
7046 {
7047 {
7048 .eraseblocks = { {4 * 1024, 128} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00007049 .block_erase = erase_sector_jedec,
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00007050 }, {
7051 .eraseblocks = { {64 * 1024, 8} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00007052 .block_erase = erase_block_jedec,
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00007053 }, {
7054 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson51c83fb2010-01-20 20:55:53 +00007055 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00007056 },
7057 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00007058 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00007059 .unlock = unlock_sst_fwhub,
7060 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007061 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007062 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007063 },
7064
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007065 {
7066 .vendor = "SST",
7067 .name = "SST49LF004C",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007068 .bustype = BUS_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007069 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00007070 .model_id = SST_SST49LF004C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007071 .total_size = 512,
7072 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00007073 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007074 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00007075 .probe = probe_82802ab,
Paul Menzelc07a41c2011-06-19 17:23:55 +00007076 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00007077 .block_erasers =
7078 {
7079 {
7080 .eraseblocks = { {4 * 1024, 128} },
7081 .block_erase = erase_sector_49lfxxxc,
7082 }, {
7083 .eraseblocks = {
7084 {64 * 1024, 7},
7085 {32 * 1024, 1},
7086 {8 * 1024, 2},
7087 {16 * 1024, 1},
7088 },
Sean Nelson69e58112010-03-23 17:10:28 +00007089 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00007090 }
7091 },
Sean Nelson69e58112010-03-23 17:10:28 +00007092 .unlock = unlock_49lfxxxc,
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00007093 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007094 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007095 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007096 },
7097
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007098 {
7099 .vendor = "SST",
7100 .name = "SST49LF008A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007101 .bustype = BUS_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007102 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00007103 .model_id = SST_SST49LF008A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007104 .total_size = 1024,
7105 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007106 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Paul Menzel018d4822011-10-21 12:33:07 +00007107 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00007108 .probe = probe_jedec,
7109 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00007110 .block_erasers =
7111 {
7112 {
7113 .eraseblocks = { {4 * 1024, 256} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00007114 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00007115 }, {
7116 .eraseblocks = { {64 * 1024, 16} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00007117 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00007118 }, {
7119 .eraseblocks = { {1024 * 1024, 1} },
7120 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
7121 }
7122 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00007123 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00007124 .unlock = unlock_sst_fwhub,
7125 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007126 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007127 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007128 },
7129
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007130 {
7131 .vendor = "SST",
7132 .name = "SST49LF008C",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007133 .bustype = BUS_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007134 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00007135 .model_id = SST_SST49LF008C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007136 .total_size = 1024,
7137 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00007138 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007139 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00007140 .probe = probe_82802ab,
Paul Menzelc07a41c2011-06-19 17:23:55 +00007141 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00007142 .block_erasers =
7143 {
7144 {
7145 .eraseblocks = { {4 * 1024, 256} },
7146 .block_erase = erase_sector_49lfxxxc,
7147 }, {
7148 .eraseblocks = {
7149 {64 * 1024, 15},
7150 {32 * 1024, 1},
7151 {8 * 1024, 2},
7152 {16 * 1024, 1},
7153 },
Sean Nelson69e58112010-03-23 17:10:28 +00007154 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00007155 }
7156 },
Sean Nelson69e58112010-03-23 17:10:28 +00007157 .unlock = unlock_49lfxxxc,
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00007158 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007159 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007160 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007161 },
7162
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007163 {
7164 .vendor = "SST",
7165 .name = "SST49LF016C",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007166 .bustype = BUS_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007167 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00007168 .model_id = SST_SST49LF016C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007169 .total_size = 2048,
7170 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00007171 .feature_bits = FEATURE_REGISTERMAP,
Stefan Tauner2abab942012-04-27 20:41:23 +00007172 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00007173 .probe = probe_82802ab,
Paul Menzelc07a41c2011-06-19 17:23:55 +00007174 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00007175 .block_erasers =
7176 {
7177 {
7178 .eraseblocks = { {4 * 1024, 512} },
7179 .block_erase = erase_sector_49lfxxxc,
7180 }, {
7181 .eraseblocks = {
7182 {64 * 1024, 31},
7183 {32 * 1024, 1},
7184 {8 * 1024, 2},
7185 {16 * 1024, 1},
7186 },
Sean Nelson69e58112010-03-23 17:10:28 +00007187 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00007188 }
7189 },
Sean Nelson69e58112010-03-23 17:10:28 +00007190 .unlock = unlock_49lfxxxc,
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00007191 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007192 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007193 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007194 },
7195
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007196 {
7197 .vendor = "SST",
7198 .name = "SST49LF020",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007199 .bustype = BUS_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007200 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00007201 .model_id = SST_SST49LF020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007202 .total_size = 256,
7203 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007204 .feature_bits = FEATURE_EITHER_RESET,
Stefan Tauner8179be52011-06-04 13:13:34 +00007205 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007206 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00007207 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00007208 .block_erasers =
7209 {
7210 {
7211 .eraseblocks = { {4 * 1024, 64} },
7212 .block_erase = erase_sector_jedec,
7213 }, {
7214 .eraseblocks = { {16 * 1024, 16} },
7215 .block_erase = erase_block_jedec,
7216 }, {
7217 .eraseblocks = { {256 * 1024, 1} },
7218 .block_erase = NULL,
7219 }
7220 },
Sean Nelson35727f72010-01-28 23:55:12 +00007221 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007222 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007223 .voltage = {3000, 3600},
Sven Schnellec208dfb2009-01-07 12:35:09 +00007224 },
7225
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007226 {
7227 .vendor = "SST",
7228 .name = "SST49LF020A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007229 .bustype = BUS_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007230 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00007231 .model_id = SST_SST49LF020A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007232 .total_size = 256,
Carl-Daniel Hailfingerda654322009-07-23 01:44:38 +00007233 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007234 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007235 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007236 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00007237 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00007238 .block_erasers =
7239 {
7240 {
7241 .eraseblocks = { {4 * 1024, 64} },
7242 .block_erase = erase_sector_jedec,
7243 }, {
7244 .eraseblocks = { {16 * 1024, 16} },
7245 .block_erase = erase_block_jedec,
7246 }, {
7247 .eraseblocks = { {256 * 1024, 1} },
7248 .block_erase = NULL,
7249 }
7250 },
Sean Nelson35727f72010-01-28 23:55:12 +00007251 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007252 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007253 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007254 },
7255
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007256 {
7257 .vendor = "SST",
7258 .name = "SST49LF040",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007259 .bustype = BUS_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007260 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00007261 .model_id = SST_SST49LF040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007262 .total_size = 512,
7263 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00007264 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007265 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007266 .probe = probe_jedec,
Uwe Hermann431f4f72010-09-05 12:41:25 +00007267 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00007268 .block_erasers =
7269 {
7270 {
7271 .eraseblocks = { {4 * 1024, 128} },
7272 .block_erase = erase_sector_jedec,
7273 }, {
7274 .eraseblocks = { {64 * 1024, 8} },
7275 .block_erase = erase_block_jedec,
7276 }, {
7277 .eraseblocks = { {512 * 1024, 1} },
7278 .block_erase = NULL,
7279 }
7280 },
Sean Nelson35727f72010-01-28 23:55:12 +00007281 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007282 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007283 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007284 },
7285
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007286 {
7287 .vendor = "SST",
7288 .name = "SST49LF040B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007289 .bustype = BUS_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007290 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00007291 .model_id = SST_SST49LF040B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007292 .total_size = 512,
7293 .page_size = 64 * 1024,
Joshua Roysa84b0bd2010-08-16 22:12:39 +00007294 .feature_bits = FEATURE_EITHER_RESET | FEATURE_REGISTERMAP,
Sylvain "ythier" Hitier3093f8f2011-09-03 11:22:27 +00007295 .tested = TEST_OK_PREW,
Sean Nelson51c83fb2010-01-20 20:55:53 +00007296 .probe = probe_jedec,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00007297 .probe_timing = 1, /* 150ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00007298 .block_erasers =
7299 {
7300 {
7301 .eraseblocks = { {4 * 1024, 128} },
7302 .block_erase = erase_sector_jedec,
7303 }, {
7304 .eraseblocks = { {64 * 1024, 8} },
7305 .block_erase = erase_block_jedec,
7306 }, {
7307 .eraseblocks = { {512 * 1024, 1} },
7308 .block_erase = NULL,
7309 }
7310 },
Joshua Roysa84b0bd2010-08-16 22:12:39 +00007311 .unlock = unlock_82802ab,
Sean Nelson35727f72010-01-28 23:55:12 +00007312 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007313 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007314 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007315 },
7316
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007317 {
7318 .vendor = "SST",
7319 .name = "SST49LF080A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007320 .bustype = BUS_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007321 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00007322 .model_id = SST_SST49LF080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007323 .total_size = 1024,
7324 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00007325 .feature_bits = FEATURE_EITHER_RESET,
Brandon Dowdyf07bf322011-03-06 18:31:11 +00007326 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007327 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00007328 .probe_timing = TIMING_FIXME,
Sean Nelson51c83fb2010-01-20 20:55:53 +00007329 .block_erasers =
7330 {
7331 {
7332 .eraseblocks = { {4 * 1024, 256} },
7333 .block_erase = erase_sector_jedec,
7334 }, {
7335 .eraseblocks = { {64 * 1024, 16} },
7336 .block_erase = erase_block_jedec,
7337 }, {
7338 .eraseblocks = { {1024 * 1024, 1} },
7339 .block_erase = NULL,
7340 }
7341 },
Sean Nelson35727f72010-01-28 23:55:12 +00007342 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007343 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007344 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007345 },
7346
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007347 {
7348 .vendor = "SST",
7349 .name = "SST49LF160C",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007350 .bustype = BUS_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007351 .manufacture_id = SST_ID,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00007352 .model_id = SST_SST49LF160C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007353 .total_size = 2048,
7354 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00007355 .feature_bits = FEATURE_REGISTERMAP,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007356 .tested = TEST_OK_PRE,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00007357 .probe = probe_82802ab,
Paul Menzelc07a41c2011-06-19 17:23:55 +00007358 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00007359 .block_erasers =
7360 {
7361 {
7362 .eraseblocks = { {4 * 1024, 512} },
7363 .block_erase = erase_sector_49lfxxxc,
7364 }, {
7365 .eraseblocks = {
7366 {64 * 1024, 31},
7367 {32 * 1024, 1},
7368 {8 * 1024, 2},
7369 {16 * 1024, 1},
7370 },
Sean Nelson69e58112010-03-23 17:10:28 +00007371 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00007372 }
7373 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00007374 .unlock = unlock_49lfxxxc,
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00007375 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007376 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007377 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007378 },
7379
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007380 {
7381 .vendor = "ST",
7382 .name = "M25P05-A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007383 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007384 .manufacture_id = ST_ID,
7385 .model_id = ST_M25P05A,
7386 .total_size = 64,
7387 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00007388 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007389 .tested = TEST_UNTESTED,
7390 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007391 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00007392 .block_erasers =
7393 {
7394 {
7395 .eraseblocks = { {32 * 1024, 2} },
7396 .block_erase = spi_block_erase_d8,
7397 }, {
7398 .eraseblocks = { {64 * 1024, 1} },
7399 .block_erase = spi_block_erase_c7,
7400 }
7401 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007402 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007403 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007404 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007405 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007406 },
7407
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00007408 /* The ST M25P05 is a bit of a problem. It has the same ID as the
7409 * ST M25P05-A in RES mode, but supports only 128 byte writes instead
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00007410 * of 256 byte writes. We rely heavily on the fact that probe_spi_res1
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00007411 * only is successful if RDID does not work.
7412 */
7413 {
7414 .vendor = "ST",
Sylvain "ythier" Hitier3093f8f2011-09-03 11:22:27 +00007415 .name = "M25P05",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007416 .bustype = BUS_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00007417 .manufacture_id = 0, /* Not used. */
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00007418 .model_id = ST_M25P05_RES,
7419 .total_size = 64,
7420 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00007421 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00007422 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00007423 .probe = probe_spi_res1,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00007424 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00007425 .block_erasers =
7426 {
7427 {
7428 .eraseblocks = { {32 * 1024, 2} },
7429 .block_erase = spi_block_erase_d8,
7430 }, {
7431 .eraseblocks = { {64 * 1024, 1} },
7432 .block_erase = spi_block_erase_c7,
7433 }
7434 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007435 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00007436 .write = spi_chip_write_1, /* 128 */
7437 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007438 .voltage = {2700, 3600},
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00007439 },
7440
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007441 {
7442 .vendor = "ST",
7443 .name = "M25P10-A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007444 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007445 .manufacture_id = ST_ID,
7446 .model_id = ST_M25P10A,
7447 .total_size = 128,
7448 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00007449 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007450 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007451 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007452 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00007453 .block_erasers =
7454 {
7455 {
7456 .eraseblocks = { {32 * 1024, 4} },
7457 .block_erase = spi_block_erase_d8,
7458 }, {
7459 .eraseblocks = { {128 * 1024, 1} },
7460 .block_erase = spi_block_erase_c7,
7461 }
7462 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007463 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007464 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007465 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007466 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007467 },
7468
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00007469 /* The ST M25P10 has the same problem as the M25P05. */
7470 {
7471 .vendor = "ST",
Sylvain "ythier" Hitier3093f8f2011-09-03 11:22:27 +00007472 .name = "M25P10",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007473 .bustype = BUS_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00007474 .manufacture_id = 0, /* Not used. */
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00007475 .model_id = ST_M25P10_RES,
7476 .total_size = 128,
7477 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00007478 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00007479 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00007480 .probe = probe_spi_res1,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00007481 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00007482 .block_erasers =
7483 {
7484 {
7485 .eraseblocks = { {32 * 1024, 4} },
7486 .block_erase = spi_block_erase_d8,
7487 }, {
7488 .eraseblocks = { {128 * 1024, 1} },
7489 .block_erase = spi_block_erase_c7,
7490 }
7491 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007492 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00007493 .write = spi_chip_write_1, /* 128 */
7494 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007495 .voltage = {2700, 3600},
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00007496 },
7497
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007498 {
7499 .vendor = "ST",
7500 .name = "M25P20",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007501 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007502 .manufacture_id = ST_ID,
7503 .model_id = ST_M25P20,
7504 .total_size = 256,
7505 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00007506 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007507 .tested = TEST_UNTESTED,
7508 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007509 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00007510 .block_erasers =
7511 {
7512 {
7513 .eraseblocks = { {64 * 1024, 4} },
7514 .block_erase = spi_block_erase_d8,
7515 }, {
7516 .eraseblocks = { {256 * 1024, 1} },
7517 .block_erase = spi_block_erase_c7,
7518 }
7519 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007520 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007521 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007522 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007523 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007524 },
7525
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007526 {
Sylvain "ythier" Hitier3093f8f2011-09-03 11:22:27 +00007527 .vendor = "ST", /* Numonyx */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007528 .name = "M25P40",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007529 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007530 .manufacture_id = ST_ID,
7531 .model_id = ST_M25P40,
7532 .total_size = 512,
7533 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00007534 .feature_bits = FEATURE_WRSR_WREN,
Paul Menzelac427b22012-02-16 21:07:07 +00007535 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007536 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007537 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00007538 .block_erasers =
7539 {
7540 {
7541 .eraseblocks = { {64 * 1024, 8} },
7542 .block_erase = spi_block_erase_d8,
7543 }, {
7544 .eraseblocks = { {512 * 1024, 1} },
7545 .block_erase = spi_block_erase_c7,
7546 }
7547 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007548 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007549 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007550 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007551 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007552 },
7553
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007554 {
7555 .vendor = "ST",
7556 .name = "M25P40-old",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007557 .bustype = BUS_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00007558 .manufacture_id = 0, /* Not used. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007559 .model_id = ST_M25P40_RES,
7560 .total_size = 512,
7561 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00007562 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007563 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00007564 .probe = probe_spi_res1,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007565 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00007566 .block_erasers =
7567 {
7568 {
7569 .eraseblocks = { {64 * 1024, 8} },
7570 .block_erase = spi_block_erase_d8,
7571 }, {
7572 .eraseblocks = { {512 * 1024, 1} },
7573 .block_erase = spi_block_erase_c7,
7574 }
7575 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007576 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007577 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007578 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00007579 },
7580
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007581 {
7582 .vendor = "ST",
7583 .name = "M25P80",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007584 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007585 .manufacture_id = ST_ID,
7586 .model_id = ST_M25P80,
7587 .total_size = 1024,
7588 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00007589 .feature_bits = FEATURE_WRSR_WREN,
Uwe Hermann19f46f22011-06-18 22:56:14 +00007590 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007591 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007592 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00007593 .block_erasers =
7594 {
7595 {
7596 .eraseblocks = { {64 * 1024, 16} },
7597 .block_erase = spi_block_erase_d8,
7598 }, {
7599 .eraseblocks = { {1024 * 1024, 1} },
7600 .block_erase = spi_block_erase_c7,
7601 }
7602 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007603 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007604 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007605 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007606 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007607 },
7608
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007609 {
7610 .vendor = "ST",
7611 .name = "M25P16",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007612 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007613 .manufacture_id = ST_ID,
7614 .model_id = ST_M25P16,
7615 .total_size = 2048,
7616 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00007617 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007618 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007619 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007620 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00007621 .block_erasers =
7622 {
7623 {
7624 .eraseblocks = { {64 * 1024, 32} },
7625 .block_erase = spi_block_erase_d8,
7626 }, {
7627 .eraseblocks = { {2 * 1024 * 1024, 1} },
7628 .block_erase = spi_block_erase_c7,
7629 }
7630 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007631 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007632 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007633 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007634 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007635 },
7636
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007637 {
7638 .vendor = "ST",
7639 .name = "M25P32",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007640 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007641 .manufacture_id = ST_ID,
7642 .model_id = ST_M25P32,
7643 .total_size = 4096,
7644 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00007645 .feature_bits = FEATURE_WRSR_WREN,
Antony Rheneus0fbba982011-05-26 14:28:51 +00007646 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007647 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007648 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00007649 .block_erasers =
7650 {
7651 {
7652 .eraseblocks = { {64 * 1024, 64} },
7653 .block_erase = spi_block_erase_d8,
7654 }, {
7655 .eraseblocks = { {4 * 1024 * 1024, 1} },
7656 .block_erase = spi_block_erase_c7,
7657 }
7658 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007659 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007660 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007661 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007662 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007663 },
7664
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007665 {
7666 .vendor = "ST",
7667 .name = "M25P64",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007668 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007669 .manufacture_id = ST_ID,
7670 .model_id = ST_M25P64,
7671 .total_size = 8192,
7672 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00007673 .feature_bits = FEATURE_WRSR_WREN,
Stefan Taunerd94d25d2012-07-28 03:17:15 +00007674 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007675 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007676 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00007677 .block_erasers =
7678 {
7679 {
7680 .eraseblocks = { {64 * 1024, 128} },
7681 .block_erase = spi_block_erase_d8,
7682 }, {
7683 .eraseblocks = { {8 * 1024 * 1024, 1} },
7684 .block_erase = spi_block_erase_c7,
7685 }
7686 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007687 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007688 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007689 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007690 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007691 },
7692
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007693 {
7694 .vendor = "ST",
7695 .name = "M25P128",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007696 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007697 .manufacture_id = ST_ID,
7698 .model_id = ST_M25P128,
7699 .total_size = 16384,
7700 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00007701 .feature_bits = FEATURE_WRSR_WREN,
Cristian Măgherușan-Stanciu9932c7b2011-07-07 19:56:58 +00007702 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007703 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007704 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00007705 .block_erasers =
7706 {
7707 {
7708 .eraseblocks = { {256 * 1024, 64} },
7709 .block_erase = spi_block_erase_d8,
7710 }, {
7711 .eraseblocks = { {16 * 1024 * 1024, 1} },
7712 .block_erase = spi_block_erase_c7,
7713 }
7714 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00007715 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00007716 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007717 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007718 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007719 },
7720
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007721 {
7722 .vendor = "ST",
Carl Worthd1dd72c2011-03-06 18:45:40 +00007723 .name = "M25PX16",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007724 .bustype = BUS_SPI,
Carl Worthd1dd72c2011-03-06 18:45:40 +00007725 .manufacture_id = ST_ID,
7726 .model_id = ST_M25PX16,
7727 .total_size = 2048,
7728 .page_size = 256,
Daniel Lenski65922a32012-02-15 23:40:23 +00007729 /* OTP: 64B total; read 0x4B; write 0x42 */
Steven Zakulec3603a282012-05-02 20:07:57 +00007730 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
Carl Worthd1dd72c2011-03-06 18:45:40 +00007731 .tested = TEST_OK_PREW,
7732 .probe = probe_spi_rdid,
7733 .probe_timing = TIMING_ZERO,
7734 .block_erasers =
7735 {
7736 {
7737 .eraseblocks = { { 4 * 1024, 512 } },
7738 .block_erase = spi_block_erase_20,
7739 }, {
7740 .eraseblocks = { {64 * 1024, 32} },
7741 .block_erase = spi_block_erase_d8,
7742 }, {
7743 .eraseblocks = { {2 * 1024 * 1024, 1} },
7744 .block_erase = spi_block_erase_c7,
7745 }
7746 },
7747 .unlock = spi_disable_blockprotect,
7748 .write = spi_chip_write_256,
7749 .read = spi_chip_read,
7750 },
7751
7752 {
7753 .vendor = "ST",
Jason Shriver4119e9b2010-09-14 13:16:01 +00007754 .name = "M25PX32",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007755 .bustype = BUS_SPI,
Jason Shriver4119e9b2010-09-14 13:16:01 +00007756 .manufacture_id = ST_ID,
7757 .model_id = ST_M25PX32,
7758 .total_size = 4096,
7759 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00007760 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007761 .tested = TEST_OK_PRE,
Jason Shriver4119e9b2010-09-14 13:16:01 +00007762 .probe = probe_spi_rdid,
7763 .probe_timing = TIMING_ZERO,
7764 .block_erasers =
7765 {
7766 {
7767 .eraseblocks = { { 4 * 1024, 1024 } },
7768 .block_erase = spi_block_erase_20,
7769 }, {
7770 .eraseblocks = { {64 * 1024, 64} },
7771 .block_erase = spi_block_erase_d8,
7772 }, {
7773 .eraseblocks = { {4 * 1024 * 1024, 1} },
7774 .block_erase = spi_block_erase_c7,
7775 }
7776 },
7777 .unlock = spi_disable_blockprotect,
7778 .write = spi_chip_write_256,
7779 .read = spi_chip_read,
Steven Zakulec7d257b42011-07-19 08:50:18 +00007780 .voltage = {2700, 3600},
Jason Shriver4119e9b2010-09-14 13:16:01 +00007781 },
7782
7783 {
7784 .vendor = "ST",
7785 .name = "M25PX64",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007786 .bustype = BUS_SPI,
Jason Shriver4119e9b2010-09-14 13:16:01 +00007787 .manufacture_id = ST_ID,
7788 .model_id = ST_M25PX64,
7789 .total_size = 8192,
7790 .page_size = 256,
Steven Zakulec3603a282012-05-02 20:07:57 +00007791 .feature_bits = FEATURE_WRSR_WREN,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00007792 .tested = TEST_OK_PRE,
Jason Shriver4119e9b2010-09-14 13:16:01 +00007793 .probe = probe_spi_rdid,
7794 .probe_timing = TIMING_ZERO,
7795 .block_erasers =
7796 {
7797 {
7798 .eraseblocks = { { 4 * 1024, 2048 } },
7799 .block_erase = spi_block_erase_20,
7800 }, {
7801 .eraseblocks = { {64 * 1024, 128} },
7802 .block_erase = spi_block_erase_d8,
7803 }, {
7804 .eraseblocks = { {8 * 1024 * 1024, 1} },
7805 .block_erase = spi_block_erase_c7,
7806 }
7807 },
7808 .unlock = spi_disable_blockprotect,
7809 .write = spi_chip_write_256,
7810 .read = spi_chip_read,
7811 },
7812
7813 {
7814 .vendor = "ST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007815 .name = "M29F002B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007816 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007817 .manufacture_id = ST_ID,
7818 .model_id = ST_M29F002B,
7819 .total_size = 256,
7820 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007821 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007822 .tested = TEST_UNTESTED,
7823 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00007824 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00007825 .block_erasers =
7826 {
7827 {
7828 .eraseblocks = {
7829 {16 * 1024, 1},
7830 {8 * 1024, 2},
7831 {32 * 1024, 1},
7832 {64 * 1024, 3},
7833 },
7834 .block_erase = erase_sector_jedec,
7835 }, {
7836 .eraseblocks = { {256 * 1024, 1} },
7837 .block_erase = erase_chip_block_jedec,
7838 }
7839 },
Sean Nelson35727f72010-01-28 23:55:12 +00007840 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007841 .read = read_memmapped,
Steven Zakulec7d257b42011-07-19 08:50:18 +00007842 .voltage = {4750, 5250}, /* 4.75-5.25V for type -X, others 4.5-5.5V */
FENG yu ningff692fb2008-12-08 18:15:10 +00007843 },
7844
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007845 {
7846 .vendor = "ST",
7847 .name = "M29F002T/NT",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007848 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007849 .manufacture_id = ST_ID,
7850 .model_id = ST_M29F002T,
7851 .total_size = 256,
7852 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007853 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
7854 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007855 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00007856 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00007857 .block_erasers =
7858 {
7859 {
7860 .eraseblocks = {
7861 {64 * 1024, 3},
7862 {32 * 1024, 1},
7863 {8 * 1024, 2},
7864 {16 * 1024, 1},
7865 },
7866 .block_erase = erase_sector_jedec,
7867 }, {
7868 .eraseblocks = { {256 * 1024, 1} },
7869 .block_erase = erase_chip_block_jedec,
7870 }
7871 },
Sean Nelson35727f72010-01-28 23:55:12 +00007872 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007873 .read = read_memmapped,
Steven Zakulec7d257b42011-07-19 08:50:18 +00007874 .voltage = {4750, 5250}, /* 4.75-5.25V for type -X, others 4.5-5.5V */
FENG yu ningff692fb2008-12-08 18:15:10 +00007875 },
7876
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007877 {
7878 .vendor = "ST",
7879 .name = "M29F040B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007880 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007881 .manufacture_id = ST_ID,
7882 .model_id = ST_M29F040B,
7883 .total_size = 512,
7884 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007885 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
7886 .tested = TEST_UNTESTED,
7887 .probe = probe_jedec,
David Borg204f4652010-12-04 03:26:40 +00007888 .probe_timing = TIMING_ZERO, /* datasheet specifies no timing */
Sean Nelson56358aa2010-01-19 16:08:51 +00007889 .block_erasers =
7890 {
7891 {
7892 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00007893 .block_erase = erase_sector_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00007894 }, {
7895 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00007896 .block_erase = erase_chip_block_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00007897 }
7898 },
Sean Nelson35727f72010-01-28 23:55:12 +00007899 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007900 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007901 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00007902 },
7903
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007904 {
Sean Nelson35727f72010-01-28 23:55:12 +00007905 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007906 .vendor = "ST",
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00007907 .name = "M29F400BB",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007908 .bustype = BUS_PARALLEL,
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00007909 .manufacture_id = ST_ID,
7910 .model_id = ST_M29F400BB,
7911 .total_size = 512,
7912 .page_size = 64 * 1024,
7913 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00007914 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00007915 .probe = probe_m29f400bt,
7916 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (m29f400bt.c) */
7917 .block_erasers =
7918 {
7919 {
7920 .eraseblocks = {
7921 {16 * 1024, 1},
7922 {8 * 1024, 2},
7923 {32 * 1024, 1},
7924 {64 * 1024, 7},
7925 },
7926 .block_erase = block_erase_m29f400bt,
7927 }, {
7928 .eraseblocks = { {512 * 1024, 1} },
7929 .block_erase = block_erase_chip_m29f400bt,
7930 }
7931 },
Carl-Daniel Hailfinger79e67572010-10-13 21:49:30 +00007932 .write = write_m29f400bt,
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00007933 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007934 .voltage = {4500, 5500},
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00007935 },
7936 {
7937 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
7938 .vendor = "ST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007939 .name = "M29F400BT",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007940 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007941 .manufacture_id = ST_ID,
7942 .model_id = ST_M29F400BT,
7943 .total_size = 512,
7944 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007945 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007946 .tested = TEST_UNTESTED,
7947 .probe = probe_m29f400bt,
Paul Menzelc07a41c2011-06-19 17:23:55 +00007948 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (m29f400bt.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00007949 .block_erasers =
7950 {
7951 {
7952 .eraseblocks = {
7953 {64 * 1024, 7},
7954 {32 * 1024, 1},
7955 {8 * 1024, 2},
7956 {16 * 1024, 1},
7957 },
7958 .block_erase = block_erase_m29f400bt,
7959 }, {
7960 .eraseblocks = { {512 * 1024, 1} },
7961 .block_erase = block_erase_chip_m29f400bt,
7962 }
7963 },
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00007964 .write = write_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007965 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007966 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00007967 },
7968
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007969 {
7970 .vendor = "ST",
7971 .name = "M29W010B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007972 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007973 .manufacture_id = ST_ID,
7974 .model_id = ST_M29W010B,
7975 .total_size = 128,
7976 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00007977 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007978 .tested = TEST_UNTESTED,
7979 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00007980 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00007981 .block_erasers =
7982 {
7983 {
7984 .eraseblocks = { {16 * 1024, 8}, },
7985 .block_erase = erase_sector_jedec,
7986 }, {
7987 .eraseblocks = { {128 * 1024, 1} },
7988 .block_erase = erase_chip_block_jedec,
7989 }
7990 },
Sean Nelson35727f72010-01-28 23:55:12 +00007991 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007992 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00007993 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00007994 },
7995
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007996 {
7997 .vendor = "ST",
7998 .name = "M29W040B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00007999 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008000 .manufacture_id = ST_ID,
8001 .model_id = ST_M29W040B,
8002 .total_size = 512,
8003 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00008004 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008005 .tested = TEST_UNTESTED,
8006 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00008007 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00008008 .block_erasers =
8009 {
8010 {
8011 .eraseblocks = { {64 * 1024, 8}, },
8012 .block_erase = erase_sector_jedec,
8013 }, {
8014 .eraseblocks = { {512 * 1024, 1} },
8015 .block_erase = erase_chip_block_jedec,
8016 }
8017 },
Sean Nelson35727f72010-01-28 23:55:12 +00008018 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008019 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008020 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00008021 },
8022
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00008023 {
8024 .vendor = "ST",
8025 .name = "M29W512B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008026 .bustype = BUS_PARALLEL,
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00008027 .manufacture_id = ST_ID,
8028 .model_id = ST_M29W512B,
8029 .total_size = 64,
8030 .page_size = 64 * 1024,
8031 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00008032 .tested = TEST_OK_PRE,
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00008033 .probe = probe_jedec,
8034 .probe_timing = TIMING_ZERO,
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00008035 .block_erasers =
8036 {
8037 {
8038 .eraseblocks = { {64 * 1024, 1} },
8039 .block_erase = erase_chip_block_jedec,
8040 }
8041 },
8042 .write = write_jedec_1,
8043 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008044 .voltage = {2700, 3600},
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00008045 },
8046
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008047 {
8048 .vendor = "ST",
8049 .name = "M50FLW040A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008050 .bustype = BUS_FWH | BUS_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008051 .manufacture_id = ST_ID,
8052 .model_id = ST_M50FLW040A,
8053 .total_size = 512,
8054 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00008055 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008056 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00008057 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00008058 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00008059 .block_erasers =
8060 {
8061 {
Sean Nelson329bde72010-01-19 16:39:19 +00008062 .eraseblocks = {
Uwe Hermann431f4f72010-09-05 12:41:25 +00008063 {4 * 1024, 16}, /* sector */
Sean Nelson329bde72010-01-19 16:39:19 +00008064 {64 * 1024, 5}, /* block */
8065 {4 * 1024, 16}, /* sector */
8066 {4 * 1024, 16}, /* sector */
8067 },
8068 .block_erase = NULL,
8069 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00008070 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00008071 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00008072 }
8073 },
Sean Nelson28accc22010-03-19 18:47:06 +00008074 .unlock = unlock_stm50flw0x0x,
8075 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008076 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008077 .voltage = {3000, 3600}, /* Also has 12V fast program & erase */
FENG yu ningff692fb2008-12-08 18:15:10 +00008078 },
8079
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008080 {
8081 .vendor = "ST",
8082 .name = "M50FLW040B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008083 .bustype = BUS_FWH | BUS_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008084 .manufacture_id = ST_ID,
8085 .model_id = ST_M50FLW040B,
8086 .total_size = 512,
8087 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00008088 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008089 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00008090 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00008091 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00008092 .block_erasers =
8093 {
8094 {
Sean Nelson329bde72010-01-19 16:39:19 +00008095 .eraseblocks = {
Uwe Hermann431f4f72010-09-05 12:41:25 +00008096 {4 * 1024, 16}, /* sector */
Sean Nelson329bde72010-01-19 16:39:19 +00008097 {4 * 1024, 16}, /* sector */
8098 {64 * 1024, 5}, /* block */
8099 {4 * 1024, 16}, /* sector */
8100 },
8101 .block_erase = NULL,
8102 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00008103 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00008104 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00008105 }
8106 },
Sean Nelson28accc22010-03-19 18:47:06 +00008107 .unlock = unlock_stm50flw0x0x,
8108 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008109 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008110 .voltage = {3000, 3600}, /* Also has 12V fast program & erase */
FENG yu ningff692fb2008-12-08 18:15:10 +00008111 },
8112
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008113 {
8114 .vendor = "ST",
8115 .name = "M50FLW080A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008116 .bustype = BUS_FWH | BUS_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008117 .manufacture_id = ST_ID,
8118 .model_id = ST_M50FLW080A,
8119 .total_size = 1024,
8120 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00008121 .feature_bits = FEATURE_REGISTERMAP,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00008122 .tested = TEST_OK_PRE,
Sean Nelson35727f72010-01-28 23:55:12 +00008123 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00008124 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00008125 .block_erasers =
8126 {
8127 {
Sean Nelson329bde72010-01-19 16:39:19 +00008128 .eraseblocks = {
Uwe Hermann431f4f72010-09-05 12:41:25 +00008129 {4 * 1024, 16}, /* sector */
Sean Nelson329bde72010-01-19 16:39:19 +00008130 {64 * 1024, 13}, /* block */
8131 {4 * 1024, 16}, /* sector */
8132 {4 * 1024, 16}, /* sector */
8133 },
8134 .block_erase = NULL,
8135 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00008136 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00008137 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00008138 }
8139 },
Sean Nelson28accc22010-03-19 18:47:06 +00008140 .unlock = unlock_stm50flw0x0x,
8141 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008142 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008143 .voltage = {3000, 3600}, /* Also has 12V fast program & erase */
FENG yu ningff692fb2008-12-08 18:15:10 +00008144 },
8145
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008146 {
8147 .vendor = "ST",
8148 .name = "M50FLW080B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008149 .bustype = BUS_FWH | BUS_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008150 .manufacture_id = ST_ID,
8151 .model_id = ST_M50FLW080B,
8152 .total_size = 1024,
8153 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00008154 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008155 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00008156 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00008157 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00008158 .block_erasers =
8159 {
8160 {
Sean Nelson329bde72010-01-19 16:39:19 +00008161 .eraseblocks = {
Uwe Hermann431f4f72010-09-05 12:41:25 +00008162 {4 * 1024, 16}, /* sector */
Sean Nelson329bde72010-01-19 16:39:19 +00008163 {4 * 1024, 16}, /* sector */
8164 {64 * 1024, 13}, /* block */
8165 {4 * 1024, 16}, /* sector */
8166 },
8167 .block_erase = NULL,
8168 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00008169 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00008170 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00008171 }
8172 },
Sean Nelson28accc22010-03-19 18:47:06 +00008173 .unlock = unlock_stm50flw0x0x,
8174 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008175 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008176 .voltage = {3000, 3600}, /* Also has 12V fast program & erase */
FENG yu ningff692fb2008-12-08 18:15:10 +00008177 },
8178
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008179 {
8180 .vendor = "ST",
8181 .name = "M50FW002",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008182 .bustype = BUS_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008183 .manufacture_id = ST_ID,
8184 .model_id = ST_M50FW002,
8185 .total_size = 256,
8186 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00008187 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008188 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00008189 .probe = probe_82802ab,
Paul Menzelc07a41c2011-06-19 17:23:55 +00008190 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (sst49lfxxxc.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00008191 .block_erasers =
8192 {
8193 {
8194 .eraseblocks = {
8195 {64 * 1024, 3},
8196 {32 * 1024, 1},
8197 {8 * 1024, 2},
8198 {16 * 1024, 1},
8199 },
Sean Nelson28accc22010-03-19 18:47:06 +00008200 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00008201 }
8202 },
Sean Nelson28accc22010-03-19 18:47:06 +00008203 .unlock = unlock_stm50flw0x0x,
8204 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008205 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008206 .voltage = {3000, 3600}, /* Also has 12V fast program & erase */
FENG yu ningff692fb2008-12-08 18:15:10 +00008207 },
8208
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008209 {
8210 .vendor = "ST",
8211 .name = "M50FW016",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008212 .bustype = BUS_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008213 .manufacture_id = ST_ID,
8214 .model_id = ST_M50FW016,
8215 .total_size = 2048,
8216 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00008217 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008218 .tested = TEST_UNTESTED,
8219 .probe = probe_82802ab,
Paul Menzelc07a41c2011-06-19 17:23:55 +00008220 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00008221 .block_erasers =
8222 {
8223 {
8224 .eraseblocks = { {64 * 1024, 32}, },
Sean Nelson28accc22010-03-19 18:47:06 +00008225 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00008226 }
8227 },
Sean Nelson28accc22010-03-19 18:47:06 +00008228 .unlock = unlock_stm50flw0x0x,
8229 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008230 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008231 .voltage = {3000, 3600}, /* Also has 12V fast program & erase */
FENG yu ningff692fb2008-12-08 18:15:10 +00008232 },
8233
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008234 {
8235 .vendor = "ST",
8236 .name = "M50FW040",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008237 .bustype = BUS_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008238 .manufacture_id = ST_ID,
8239 .model_id = ST_M50FW040,
8240 .total_size = 512,
8241 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00008242 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00008243 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008244 .probe = probe_82802ab,
Paul Menzelc07a41c2011-06-19 17:23:55 +00008245 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00008246 .block_erasers =
8247 {
8248 {
8249 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00008250 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00008251 }
8252 },
Sean Nelson28accc22010-03-19 18:47:06 +00008253 .unlock = unlock_stm50flw0x0x,
8254 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008255 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008256 .voltage = {3000, 3600}, /* Also has 12V fast program & erase */
FENG yu ningff692fb2008-12-08 18:15:10 +00008257 },
8258
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008259 {
8260 .vendor = "ST",
8261 .name = "M50FW080",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008262 .bustype = BUS_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008263 .manufacture_id = ST_ID,
8264 .model_id = ST_M50FW080,
8265 .total_size = 1024,
8266 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00008267 .feature_bits = FEATURE_REGISTERMAP,
Antony Rheneus0fbba982011-05-26 14:28:51 +00008268 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008269 .probe = probe_82802ab,
Paul Menzelc07a41c2011-06-19 17:23:55 +00008270 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00008271 .block_erasers =
8272 {
8273 {
8274 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00008275 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00008276 }
8277 },
Sean Nelson28accc22010-03-19 18:47:06 +00008278 .unlock = unlock_stm50flw0x0x,
8279 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008280 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008281 .voltage = {3000, 3600}, /* Also has 12V fast program & erase */
FENG yu ningff692fb2008-12-08 18:15:10 +00008282 },
8283
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008284 {
8285 .vendor = "ST",
8286 .name = "M50LPW116",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008287 .bustype = BUS_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008288 .manufacture_id = ST_ID,
8289 .model_id = ST_M50LPW116,
8290 .total_size = 2048,
8291 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00008292 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008293 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00008294 .probe = probe_82802ab,
Udu Ogahc04ee222009-09-05 01:31:32 +00008295 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00008296 .block_erasers =
8297 {
8298 {
8299 .eraseblocks = {
8300 {4 * 1024, 16},
8301 {64 * 1024, 30},
8302 {32 * 1024, 1},
8303 {8 * 1024, 2},
8304 {16 * 1024, 1},
8305 },
Sean Nelson28accc22010-03-19 18:47:06 +00008306 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00008307 }
8308 },
Sean Nelson28accc22010-03-19 18:47:06 +00008309 .unlock = unlock_stm50flw0x0x,
8310 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008311 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008312 .voltage = {3000, 3600}, /* Also has 12V fast program & erase */
FENG yu ningff692fb2008-12-08 18:15:10 +00008313 },
8314
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008315 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00008316 .vendor = "SyncMOS/MoselVitelic",
8317 .name = "{F,S,V}29C51001B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008318 .bustype = BUS_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00008319 .manufacture_id = SYNCMOS_MVC_ID,
8320 .model_id = SM_MVC_29C51001B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008321 .total_size = 128,
Mattias Mattsson4c066502010-07-29 20:01:13 +00008322 .page_size = 512,
Sean Nelson35727f72010-01-28 23:55:12 +00008323 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008324 .tested = TEST_UNTESTED,
8325 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00008326 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00008327 .block_erasers =
8328 {
8329 {
8330 .eraseblocks = { {512, 256} },
8331 .block_erase = erase_sector_jedec,
8332 }, {
8333 .eraseblocks = { {128 * 1024, 1} },
8334 .block_erase = erase_chip_block_jedec,
8335 },
8336 },
Sean Nelson35727f72010-01-28 23:55:12 +00008337 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008338 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008339 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00008340 },
8341
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008342 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00008343 .vendor = "SyncMOS/MoselVitelic",
8344 .name = "{F,S,V}29C51001T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008345 .bustype = BUS_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00008346 .manufacture_id = SYNCMOS_MVC_ID,
8347 .model_id = SM_MVC_29C51001T,
8348 .total_size = 128,
8349 .page_size = 512,
Sean Nelson35727f72010-01-28 23:55:12 +00008350 .feature_bits = FEATURE_EITHER_RESET,
Mattias Mattsson4c066502010-07-29 20:01:13 +00008351 .tested = TEST_UNTESTED,
8352 .probe = probe_jedec,
8353 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
8354 .block_erasers =
8355 {
8356 {
8357 .eraseblocks = { {512, 256} },
8358 .block_erase = erase_sector_jedec,
8359 }, {
8360 .eraseblocks = { {128 * 1024, 1} },
8361 .block_erase = erase_chip_block_jedec,
8362 },
8363 },
8364 .write = write_jedec_1,
8365 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008366 .voltage = {4500, 5500},
Mattias Mattsson4c066502010-07-29 20:01:13 +00008367 },
8368
8369 {
8370 .vendor = "SyncMOS/MoselVitelic",
8371 .name = "{F,S,V}29C51002B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008372 .bustype = BUS_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00008373 .manufacture_id = SYNCMOS_MVC_ID,
8374 .model_id = SM_MVC_29C51002B,
8375 .total_size = 256,
8376 .page_size = 512,
8377 .feature_bits = FEATURE_EITHER_RESET,
8378 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008379 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00008380 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00008381 .block_erasers =
8382 {
8383 {
8384 .eraseblocks = { {512, 512} },
8385 .block_erase = erase_sector_jedec,
8386 }, {
8387 .eraseblocks = { {256 * 1024, 1} },
8388 .block_erase = erase_chip_block_jedec,
8389 },
8390 },
Sean Nelson35727f72010-01-28 23:55:12 +00008391 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008392 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00008393 },
8394
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008395 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00008396 .vendor = "SyncMOS/MoselVitelic",
8397 .name = "{F,S,V}29C51002T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008398 .bustype = BUS_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00008399 .manufacture_id = SYNCMOS_MVC_ID,
8400 .model_id = SM_MVC_29C51002T,
8401 .total_size = 256,
8402 .page_size = 512,
8403 .feature_bits = FEATURE_EITHER_RESET,
Paul Menzel018d4822011-10-21 12:33:07 +00008404 .tested = TEST_OK_PREW,
Mattias Mattsson4c066502010-07-29 20:01:13 +00008405 .probe = probe_jedec,
8406 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
8407 .block_erasers =
8408 {
8409 {
8410 .eraseblocks = { {512, 512} },
8411 .block_erase = erase_sector_jedec,
8412 }, {
8413 .eraseblocks = { {256 * 1024, 1} },
8414 .block_erase = erase_chip_block_jedec,
8415 },
8416 },
8417 .write = write_jedec_1,
8418 .read = read_memmapped,
8419 },
8420
8421 {
8422 .vendor = "SyncMOS/MoselVitelic",
8423 .name = "{F,S,V}29C51004B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008424 .bustype = BUS_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00008425 .manufacture_id = SYNCMOS_MVC_ID,
8426 .model_id = SM_MVC_29C51004B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008427 .total_size = 512,
Mattias Mattsson4c066502010-07-29 20:01:13 +00008428 .page_size = 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00008429 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008430 .tested = TEST_UNTESTED,
8431 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00008432 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00008433 .block_erasers =
8434 {
8435 {
Mattias Mattsson4c066502010-07-29 20:01:13 +00008436 .eraseblocks = { {1024, 512} },
8437 .block_erase = erase_sector_jedec,
8438 }, {
8439 .eraseblocks = { {512 * 1024, 1} },
8440 .block_erase = erase_chip_block_jedec,
8441 },
8442 },
8443 .write = write_jedec_1,
8444 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008445 .voltage = {4500, 5500},
Mattias Mattsson4c066502010-07-29 20:01:13 +00008446 },
8447
8448 {
8449 .vendor = "SyncMOS/MoselVitelic",
8450 .name = "{F,S,V}29C51004T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008451 .bustype = BUS_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00008452 .manufacture_id = SYNCMOS_MVC_ID,
8453 .model_id = SM_MVC_29C51004T,
8454 .total_size = 512,
8455 .page_size = 1024,
8456 .feature_bits = FEATURE_EITHER_RESET,
8457 .tested = TEST_UNTESTED,
8458 .probe = probe_jedec,
8459 .probe_timing = TIMING_ZERO,
8460 .block_erasers =
8461 {
8462 {
8463 .eraseblocks = { {1024, 512} },
8464 .block_erase = erase_sector_jedec,
8465 }, {
8466 .eraseblocks = { {512 * 1024, 1} },
8467 .block_erase = erase_chip_block_jedec,
8468 },
8469 },
8470 .write = write_jedec_1,
8471 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008472 .voltage = {4500, 5500},
Mattias Mattsson4c066502010-07-29 20:01:13 +00008473 },
8474
8475 {
8476 .vendor = "SyncMOS/MoselVitelic",
8477 .name = "{S,V}29C31004B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008478 .bustype = BUS_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00008479 .manufacture_id = SYNCMOS_MVC_ID,
8480 .model_id = SM_MVC_29C31004B,
8481 .total_size = 512,
8482 .page_size = 1024,
8483 .feature_bits = FEATURE_EITHER_RESET,
8484 .tested = TEST_UNTESTED,
8485 .probe = probe_jedec,
8486 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
8487 .block_erasers =
8488 {
8489 {
8490 .eraseblocks = { {1024, 512} },
8491 .block_erase = erase_sector_jedec,
8492 }, {
8493 .eraseblocks = { {512 * 1024, 1} },
8494 .block_erase = erase_chip_block_jedec,
8495 },
8496 },
8497 .write = write_jedec_1,
8498 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008499 .voltage = {3000, 3600},
Mattias Mattsson4c066502010-07-29 20:01:13 +00008500 },
8501
8502 {
8503 .vendor = "SyncMOS/MoselVitelic",
8504 .name = "{S,V}29C31004T",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008505 .bustype = BUS_PARALLEL,
Mattias Mattsson4c066502010-07-29 20:01:13 +00008506 .manufacture_id = SYNCMOS_MVC_ID,
8507 .model_id = SM_MVC_29C31004T,
8508 .total_size = 512,
8509 .page_size = 1024,
8510 .feature_bits = FEATURE_EITHER_RESET,
8511 .tested = TEST_UNTESTED,
8512 .probe = probe_jedec,
8513 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
8514 .block_erasers =
8515 {
8516 {
8517 .eraseblocks = { {1024, 512} },
Sean Nelson56358aa2010-01-19 16:08:51 +00008518 .block_erase = erase_sector_jedec,
8519 }, {
8520 .eraseblocks = { {512 * 1024, 1} },
8521 .block_erase = erase_chip_block_jedec,
8522 },
8523 },
Sean Nelson35727f72010-01-28 23:55:12 +00008524 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00008525 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008526 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00008527 },
8528
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008529 {
Uwe Hermanna106d152009-05-27 23:17:40 +00008530 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00008531 .name = "TMS29F002RB",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008532 .bustype = BUS_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00008533 .manufacture_id = TI_OLD_ID,
8534 .model_id = TI_TMS29F002RB,
8535 .total_size = 256,
8536 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00008537 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00008538 .tested = TEST_UNTESTED,
8539 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00008540 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00008541 .block_erasers =
8542 {
8543 {
8544 .eraseblocks = {
8545 {16 * 1024, 1},
8546 {8 * 1024, 2},
8547 {32 * 1024, 1},
8548 {64 * 1024, 3},
8549 },
8550 .block_erase = erase_sector_jedec,
8551 }, {
8552 .eraseblocks = { {256 * 1024, 1} },
8553 .block_erase = erase_chip_block_jedec,
8554 },
8555 },
Sean Nelson35727f72010-01-28 23:55:12 +00008556 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00008557 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008558 .voltage = {4500, 5500},
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00008559 },
8560
8561 {
Uwe Hermanna106d152009-05-27 23:17:40 +00008562 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00008563 .name = "TMS29F002RT",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008564 .bustype = BUS_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00008565 .manufacture_id = TI_OLD_ID,
8566 .model_id = TI_TMS29F002RT,
8567 .total_size = 256,
8568 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00008569 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00008570 .tested = TEST_UNTESTED,
8571 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00008572 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00008573 .block_erasers =
8574 {
8575 {
8576 .eraseblocks = {
8577 {64 * 1024, 3},
8578 {32 * 1024, 1},
8579 {8 * 1024, 2},
8580 {16 * 1024, 1},
8581 },
8582 .block_erase = erase_sector_jedec,
8583 }, {
8584 .eraseblocks = { {256 * 1024, 1} },
8585 .block_erase = erase_chip_block_jedec,
8586 },
8587 },
Sean Nelson35727f72010-01-28 23:55:12 +00008588 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00008589 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008590 .voltage = {4500, 5500},
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00008591 },
8592
8593 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008594 .vendor = "Winbond",
Rudolf Marekce1c7982010-04-20 19:34:31 +00008595 .name = "W25Q80",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008596 .bustype = BUS_SPI,
Rudolf Marekce1c7982010-04-20 19:34:31 +00008597 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008598 .model_id = WINBOND_NEX_W25Q80,
Rudolf Marekce1c7982010-04-20 19:34:31 +00008599 .total_size = 1024,
8600 .page_size = 256,
Daniel Lenski65922a32012-02-15 23:40:23 +00008601 /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42 */
8602 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
David Hendricks22e05322010-12-13 23:54:59 +00008603 .tested = TEST_OK_PREW,
Rudolf Marekce1c7982010-04-20 19:34:31 +00008604 .probe = probe_spi_rdid,
8605 .probe_timing = TIMING_ZERO,
8606 .block_erasers =
8607 {
8608 {
8609 .eraseblocks = { {4 * 1024, 256} },
8610 .block_erase = spi_block_erase_20,
8611 }, {
8612 .eraseblocks = { {32 * 1024, 32} },
8613 .block_erase = spi_block_erase_52,
8614 }, {
8615 .eraseblocks = { {64 * 1024, 16} },
8616 .block_erase = spi_block_erase_d8,
8617 }, {
8618 .eraseblocks = { {1024 * 1024, 1} },
8619 .block_erase = spi_block_erase_60,
8620 }, {
8621 .eraseblocks = { {1024 * 1024, 1} },
8622 .block_erase = spi_block_erase_c7,
8623 }
8624 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00008625 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00008626 .write = spi_chip_write_256,
8627 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008628 .voltage = {2700, 3600},
Rudolf Marekce1c7982010-04-20 19:34:31 +00008629 },
8630
8631 {
8632 .vendor = "Winbond",
8633 .name = "W25Q16",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008634 .bustype = BUS_SPI,
Rudolf Marekce1c7982010-04-20 19:34:31 +00008635 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008636 .model_id = WINBOND_NEX_W25Q16,
Rudolf Marekce1c7982010-04-20 19:34:31 +00008637 .total_size = 2048,
8638 .page_size = 256,
Daniel Lenski65922a32012-02-15 23:40:23 +00008639 /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42 */
8640 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
Stefan Tauner716e0982011-07-25 20:38:52 +00008641 .tested = TEST_OK_PREW,
Rudolf Marekce1c7982010-04-20 19:34:31 +00008642 .probe = probe_spi_rdid,
8643 .probe_timing = TIMING_ZERO,
8644 .block_erasers =
8645 {
8646 {
8647 .eraseblocks = { {4 * 1024, 512} },
8648 .block_erase = spi_block_erase_20,
8649 }, {
8650 .eraseblocks = { {32 * 1024, 64} },
8651 .block_erase = spi_block_erase_52,
8652 }, {
8653 .eraseblocks = { {64 * 1024, 32} },
8654 .block_erase = spi_block_erase_d8,
8655 }, {
8656 .eraseblocks = { {2 * 1024 * 1024, 1} },
8657 .block_erase = spi_block_erase_60,
8658 }, {
8659 .eraseblocks = { {2 * 1024 * 1024, 1} },
8660 .block_erase = spi_block_erase_c7,
8661 }
8662 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00008663 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00008664 .write = spi_chip_write_256,
8665 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008666 .voltage = {2700, 3600},
Rudolf Marekce1c7982010-04-20 19:34:31 +00008667 },
8668
8669 {
8670 .vendor = "Winbond",
8671 .name = "W25Q32",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008672 .bustype = BUS_SPI,
Rudolf Marekce1c7982010-04-20 19:34:31 +00008673 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008674 .model_id = WINBOND_NEX_W25Q32,
Rudolf Marekce1c7982010-04-20 19:34:31 +00008675 .total_size = 4096,
8676 .page_size = 256,
Daniel Lenski65922a32012-02-15 23:40:23 +00008677 /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42 */
8678 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
David Hendricks22e05322010-12-13 23:54:59 +00008679 .tested = TEST_OK_PREW,
Rudolf Marekce1c7982010-04-20 19:34:31 +00008680 .probe = probe_spi_rdid,
8681 .probe_timing = TIMING_ZERO,
8682 .block_erasers =
8683 {
8684 {
8685 .eraseblocks = { {4 * 1024, 1024} },
8686 .block_erase = spi_block_erase_20,
8687 }, {
8688 .eraseblocks = { {32 * 1024, 128} },
8689 .block_erase = spi_block_erase_52,
8690 }, {
8691 .eraseblocks = { {64 * 1024, 64} },
8692 .block_erase = spi_block_erase_d8,
8693 }, {
8694 .eraseblocks = { {4 * 1024 * 1024, 1} },
8695 .block_erase = spi_block_erase_60,
8696 }, {
8697 .eraseblocks = { {4 * 1024 * 1024, 1} },
8698 .block_erase = spi_block_erase_c7,
8699 }
8700 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00008701 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00008702 .write = spi_chip_write_256,
8703 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008704 .voltage = {2700, 3600},
Rudolf Marekce1c7982010-04-20 19:34:31 +00008705 },
8706
8707 {
8708 .vendor = "Winbond",
David Hendricksc4acec92010-06-24 11:39:57 +00008709 .name = "W25Q64",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008710 .bustype = BUS_SPI,
David Hendricksc4acec92010-06-24 11:39:57 +00008711 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008712 .model_id = WINBOND_NEX_W25Q64,
David Hendricksc4acec92010-06-24 11:39:57 +00008713 .total_size = 8192,
8714 .page_size = 256,
Daniel Lenski65922a32012-02-15 23:40:23 +00008715 /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42 */
8716 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
David Hendricks22e05322010-12-13 23:54:59 +00008717 .tested = TEST_OK_PREW,
David Hendricksc4acec92010-06-24 11:39:57 +00008718 .probe = probe_spi_rdid,
8719 .probe_timing = TIMING_ZERO,
8720 .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,
David Hendricksc4acec92010-06-24 11:39:57 +00008740 .write = spi_chip_write_256,
8741 .read = spi_chip_read,
8742 },
8743
8744 {
8745 .vendor = "Winbond",
Antony Rheneus0fbba982011-05-26 14:28:51 +00008746 .name = "W25Q128",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008747 .bustype = BUS_SPI,
Antony Rheneus0fbba982011-05-26 14:28:51 +00008748 .manufacture_id = WINBOND_NEX_ID,
8749 .model_id = WINBOND_NEX_W25Q128,
8750 .total_size = 16384,
8751 .page_size = 256,
Daniel Lenski65922a32012-02-15 23:40:23 +00008752 /* OTP: 1024B total, 256B reserved; read 0x48; write 0x42 */
8753 .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
Antony Rheneus0fbba982011-05-26 14:28:51 +00008754 .tested = TEST_OK_PROBE,
8755 .probe = probe_spi_rdid,
8756 .probe_timing = TIMING_ZERO,
8757 .block_erasers =
8758 {
8759 {
8760 .eraseblocks = { {4 * 1024, 4096} },
8761 .block_erase = spi_block_erase_20,
8762 }, {
8763 .eraseblocks = { {32 * 1024, 512} },
8764 .block_erase = spi_block_erase_52,
8765 }, {
8766 .eraseblocks = { {64 * 1024, 256} },
8767 .block_erase = spi_block_erase_d8,
8768 }, {
8769 .eraseblocks = { {16 * 1024 * 1024, 1} },
8770 .block_erase = spi_block_erase_60,
8771 }, {
8772 .eraseblocks = { {16 * 1024 * 1024, 1} },
8773 .block_erase = spi_block_erase_c7,
8774 }
8775 },
8776 .unlock = spi_disable_blockprotect,
8777 .write = spi_chip_write_256,
8778 .read = spi_chip_read,
8779 },
8780
8781 {
8782 .vendor = "Winbond",
Cristian Măgherușan-Stanciu9932c7b2011-07-07 19:56:58 +00008783 .name = "W25X10",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008784 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008785 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008786 .model_id = WINBOND_NEX_W25X10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008787 .total_size = 128,
8788 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00008789 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008790 .tested = TEST_UNTESTED,
8791 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00008792 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008793 .block_erasers =
8794 {
8795 {
8796 .eraseblocks = { {4 * 1024, 32} },
8797 .block_erase = spi_block_erase_20,
8798 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008799 .eraseblocks = { {64 * 1024, 2} },
8800 .block_erase = spi_block_erase_d8,
8801 }, {
8802 .eraseblocks = { {128 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008803 .block_erase = spi_block_erase_c7,
8804 }
8805 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00008806 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00008807 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008808 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008809 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00008810 },
8811
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008812 {
8813 .vendor = "Winbond",
Cristian Măgherușan-Stanciu9932c7b2011-07-07 19:56:58 +00008814 .name = "W25X20",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008815 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008816 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008817 .model_id = WINBOND_NEX_W25X20,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008818 .total_size = 256,
8819 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00008820 .feature_bits = FEATURE_WRSR_WREN,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008821 .tested = TEST_UNTESTED,
8822 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00008823 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008824 .block_erasers =
8825 {
8826 {
8827 .eraseblocks = { {4 * 1024, 64} },
8828 .block_erase = spi_block_erase_20,
8829 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008830 .eraseblocks = { {64 * 1024, 4} },
8831 .block_erase = spi_block_erase_d8,
8832 }, {
8833 .eraseblocks = { {256 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008834 .block_erase = spi_block_erase_c7,
8835 }
8836 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00008837 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00008838 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008839 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008840 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00008841 },
8842
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008843 {
8844 .vendor = "Winbond",
Cristian Măgherușan-Stanciu9932c7b2011-07-07 19:56:58 +00008845 .name = "W25X40",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008846 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008847 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008848 .model_id = WINBOND_NEX_W25X40,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008849 .total_size = 512,
8850 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00008851 .feature_bits = FEATURE_WRSR_WREN,
David Hendricks567b7b82011-05-18 01:31:03 +00008852 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008853 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00008854 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008855 .block_erasers =
8856 {
8857 {
8858 .eraseblocks = { {4 * 1024, 128} },
8859 .block_erase = spi_block_erase_20,
8860 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008861 .eraseblocks = { {64 * 1024, 8} },
8862 .block_erase = spi_block_erase_d8,
8863 }, {
8864 .eraseblocks = { {512 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008865 .block_erase = spi_block_erase_c7,
8866 }
8867 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00008868 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00008869 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008870 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008871 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00008872 },
8873
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008874 {
8875 .vendor = "Winbond",
Cristian Măgherușan-Stanciu9932c7b2011-07-07 19:56:58 +00008876 .name = "W25X80",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008877 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008878 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008879 .model_id = WINBOND_NEX_W25X80,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008880 .total_size = 1024,
8881 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00008882 .feature_bits = FEATURE_WRSR_WREN,
Yul Rottmann6d6ab742011-03-05 16:31:57 +00008883 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008884 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00008885 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008886 .block_erasers =
8887 {
8888 {
8889 .eraseblocks = { {4 * 1024, 256} },
8890 .block_erase = spi_block_erase_20,
8891 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008892 .eraseblocks = { {64 * 1024, 16} },
8893 .block_erase = spi_block_erase_d8,
8894 }, {
8895 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008896 .block_erase = spi_block_erase_c7,
8897 }
8898 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00008899 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00008900 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008901 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008902 .voltage = {2700, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00008903 },
8904
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00008905 {
8906 .vendor = "Winbond",
Cristian Măgherușan-Stanciu9932c7b2011-07-07 19:56:58 +00008907 .name = "W25X16",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008908 .bustype = BUS_SPI,
Hector Martina721ae22009-07-11 19:39:11 +00008909 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008910 .model_id = WINBOND_NEX_W25X16,
Hector Martina721ae22009-07-11 19:39:11 +00008911 .total_size = 2048,
8912 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00008913 .feature_bits = FEATURE_WRSR_WREN,
Stefan Tauner8179be52011-06-04 13:13:34 +00008914 .tested = TEST_OK_PREW,
Hector Martina721ae22009-07-11 19:39:11 +00008915 .probe = probe_spi_rdid,
8916 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008917 .block_erasers =
8918 {
8919 {
8920 .eraseblocks = { {4 * 1024, 512} },
8921 .block_erase = spi_block_erase_20,
8922 }, {
8923 .eraseblocks = { {32 * 1024, 64} },
8924 .block_erase = spi_block_erase_52,
8925 }, {
8926 .eraseblocks = { {64 * 1024, 32} },
8927 .block_erase = spi_block_erase_d8,
8928 }, {
8929 .eraseblocks = { {2 * 1024 * 1024, 1} },
8930 .block_erase = spi_block_erase_60,
8931 }, {
8932 .eraseblocks = { {2 * 1024 * 1024, 1} },
8933 .block_erase = spi_block_erase_c7,
8934 }
8935 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00008936 .unlock = spi_disable_blockprotect,
Hector Martina721ae22009-07-11 19:39:11 +00008937 .write = spi_chip_write_256,
8938 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008939 .voltage = {2700, 3600},
Hector Martina721ae22009-07-11 19:39:11 +00008940 },
8941
8942 {
8943 .vendor = "Winbond",
Cristian Măgherușan-Stanciu9932c7b2011-07-07 19:56:58 +00008944 .name = "W25X32",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008945 .bustype = BUS_SPI,
Zheng Bao1db2b752009-11-26 11:05:01 +00008946 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008947 .model_id = WINBOND_NEX_W25X32,
Zheng Bao1db2b752009-11-26 11:05:01 +00008948 .total_size = 4096,
8949 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00008950 .feature_bits = FEATURE_WRSR_WREN,
Zheng Bao1db2b752009-11-26 11:05:01 +00008951 .tested = TEST_OK_PROBE,
8952 .probe = probe_spi_rdid,
8953 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008954 .block_erasers =
8955 {
8956 {
8957 .eraseblocks = { {4 * 1024, 1024} },
8958 .block_erase = spi_block_erase_20,
8959 }, {
8960 .eraseblocks = { {32 * 1024, 128} },
8961 .block_erase = spi_block_erase_52,
8962 }, {
8963 .eraseblocks = { {64 * 1024, 64} },
8964 .block_erase = spi_block_erase_d8,
8965 }, {
8966 .eraseblocks = { {4 * 1024 * 1024, 1} },
8967 .block_erase = spi_block_erase_60,
8968 }, {
8969 .eraseblocks = { {4 * 1024 * 1024, 1} },
8970 .block_erase = spi_block_erase_c7,
8971 }
8972 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00008973 .unlock = spi_disable_blockprotect,
Zheng Bao1db2b752009-11-26 11:05:01 +00008974 .write = spi_chip_write_256,
8975 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00008976 .voltage = {2700, 3600},
Zheng Bao1db2b752009-11-26 11:05:01 +00008977 },
8978
8979 {
8980 .vendor = "Winbond",
Cristian Măgherușan-Stanciu9932c7b2011-07-07 19:56:58 +00008981 .name = "W25X64",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00008982 .bustype = BUS_SPI,
Zheng Bao1db2b752009-11-26 11:05:01 +00008983 .manufacture_id = WINBOND_NEX_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00008984 .model_id = WINBOND_NEX_W25X64,
Zheng Bao1db2b752009-11-26 11:05:01 +00008985 .total_size = 8192,
8986 .page_size = 256,
David Hendricks2cbb7222010-09-03 03:06:07 +00008987 .feature_bits = FEATURE_WRSR_WREN,
Antony Rheneus0fbba982011-05-26 14:28:51 +00008988 .tested = TEST_OK_PROBE,
Zheng Bao1db2b752009-11-26 11:05:01 +00008989 .probe = probe_spi_rdid,
8990 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00008991 .block_erasers =
8992 {
8993 {
8994 .eraseblocks = { {4 * 1024, 2048} },
8995 .block_erase = spi_block_erase_20,
8996 }, {
8997 .eraseblocks = { {32 * 1024, 256} },
8998 .block_erase = spi_block_erase_52,
8999 }, {
9000 .eraseblocks = { {64 * 1024, 128} },
9001 .block_erase = spi_block_erase_d8,
9002 }, {
9003 .eraseblocks = { {8 * 1024 * 1024, 1} },
9004 .block_erase = spi_block_erase_60,
9005 }, {
9006 .eraseblocks = { {8 * 1024 * 1024, 1} },
9007 .block_erase = spi_block_erase_c7,
9008 }
9009 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00009010 .unlock = spi_disable_blockprotect,
Zheng Bao1db2b752009-11-26 11:05:01 +00009011 .write = spi_chip_write_256,
9012 .read = spi_chip_read,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00009013 .voltage = {2700, 3600},
Zheng Bao1db2b752009-11-26 11:05:01 +00009014 },
9015
9016 {
9017 .vendor = "Winbond",
Carl-Daniel Hailfinger2e88a9f2011-07-26 14:18:52 +00009018 .name = "W29C010(M)/W29C011A/W29EE011/W29EE012-old",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009019 .bustype = BUS_PARALLEL,
Carl-Daniel Hailfinger2e88a9f2011-07-26 14:18:52 +00009020 .manufacture_id = WINBOND_ID,
9021 .model_id = WINBOND_W29C010,
9022 .total_size = 128,
9023 .page_size = 128,
9024 .feature_bits = FEATURE_LONG_RESET,
9025 .tested = TEST_OK_PRE,
9026 .probe = probe_w29ee011,
9027 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (w29ee011.c) */
9028 .block_erasers =
9029 {
9030 {
9031 .eraseblocks = { {128 * 1024, 1} },
9032 .block_erase = erase_chip_block_jedec,
9033 }
9034 },
9035 .write = write_jedec,
9036 .read = read_memmapped,
9037 },
9038
9039 {/* W29EE011, W29EE012, W29C010M, W29C011A do not support probe_jedec according to the datasheet, but it works for newer(?) steppings. */
9040 .vendor = "Winbond",
Mattias Mattssona745cf42010-09-14 23:56:56 +00009041 .name = "W29C010(M)/W29C011A/W29EE011/W29EE012",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009042 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009043 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00009044 .model_id = WINBOND_W29C010,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009045 .total_size = 128,
9046 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00009047 .feature_bits = FEATURE_LONG_RESET,
David Hendricks567b7b82011-05-18 01:31:03 +00009048 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009049 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00009050 .probe_timing = 10, /* used datasheet for the W29C011A */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00009051 .block_erasers =
9052 {
9053 {
9054 .eraseblocks = { {128 * 1024, 1} },
9055 .block_erase = erase_chip_block_jedec,
9056 }
9057 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009058 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00009059 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00009060 },
9061
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009062 {
9063 .vendor = "Winbond",
Mattias Mattssona745cf42010-09-14 23:56:56 +00009064 .name = "W29C020(C)/W29C022",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009065 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009066 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00009067 .model_id = WINBOND_W29C020,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009068 .total_size = 256,
9069 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00009070 .feature_bits = FEATURE_LONG_RESET,
Cristian Măgherușan-Stanciu9932c7b2011-07-07 19:56:58 +00009071 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009072 .probe = probe_jedec,
Cristian Măgherușan-Stanciu9932c7b2011-07-07 19:56:58 +00009073 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00009074 .block_erasers =
9075 {
9076 {
9077 .eraseblocks = { {256 * 1024, 1} },
9078 .block_erase = erase_chip_block_jedec,
9079 }
9080 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009081 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00009082 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00009083 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00009084 },
9085
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009086 {
9087 .vendor = "Winbond",
Mattias Mattssona745cf42010-09-14 23:56:56 +00009088 .name = "W29C040/P",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009089 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009090 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00009091 .model_id = WINBOND_W29C040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009092 .total_size = 512,
9093 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00009094 .feature_bits = FEATURE_LONG_RESET,
9095 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009096 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00009097 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00009098 .block_erasers =
9099 {
9100 {
9101 .eraseblocks = { {512 * 1024, 1} },
9102 .block_erase = erase_chip_block_jedec,
9103 }
9104 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009105 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00009106 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00009107 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00009108 },
9109
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009110 {
9111 .vendor = "Winbond",
Michael Karcher19e0aac2011-03-06 17:58:05 +00009112 .name = "W39L040",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009113 .bustype = BUS_PARALLEL,
Michael Karcher19e0aac2011-03-06 17:58:05 +00009114 .manufacture_id = WINBOND_ID,
9115 .model_id = WINBOND_W39L040,
9116 .total_size = 512,
9117 .page_size = 64 * 1024,
9118 .feature_bits = FEATURE_EITHER_RESET,
9119 .tested = TEST_OK_PR,
9120 .probe = probe_jedec,
9121 .probe_timing = 10,
9122 .block_erasers =
9123 {
9124 {
9125 .eraseblocks = { {4 * 1024, 128} },
9126 .block_erase = erase_block_jedec,
9127 }, {
9128 .eraseblocks = { {64 * 1024, 8} },
9129 .block_erase = erase_sector_jedec,
9130 }, {
9131 .eraseblocks = { {512 * 1024, 1} },
9132 .block_erase = erase_chip_block_jedec,
9133 }
9134 },
9135 .printlock = printlock_w39l040,
9136 .write = write_jedec_1,
9137 .read = read_memmapped,
Steven Zakulec7d257b42011-07-19 08:50:18 +00009138 .voltage = {3000, 3600},
Michael Karcher19e0aac2011-03-06 17:58:05 +00009139 },
9140
9141 {
9142 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009143 .name = "W39V040A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009144 .bustype = BUS_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009145 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00009146 .model_id = WINBOND_W39V040A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009147 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00009148 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00009149 .feature_bits = FEATURE_EITHER_RESET,
Stefan Tauner716e0982011-07-25 20:38:52 +00009150 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009151 .probe = probe_jedec,
Stefan Tauner716e0982011-07-25 20:38:52 +00009152 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00009153 .block_erasers =
9154 {
9155 {
9156 .eraseblocks = { {64 * 1024, 8} },
9157 .block_erase = erase_sector_jedec,
9158 }, {
9159 .eraseblocks = { {512 * 1024, 1} },
9160 .block_erase = erase_chip_block_jedec,
9161 }
9162 },
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00009163 .printlock = printlock_w39v040a,
Sean Nelson35727f72010-01-28 23:55:12 +00009164 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00009165 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00009166 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00009167 },
9168
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009169 {
9170 .vendor = "Winbond",
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00009171 .name = "W39V040B",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009172 .bustype = BUS_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009173 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00009174 .model_id = WINBOND_W39V040B,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009175 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00009176 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00009177 .feature_bits = FEATURE_EITHER_RESET,
Paul Menzel018d4822011-10-21 12:33:07 +00009178 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009179 .probe = probe_jedec,
Paul Menzel018d4822011-10-21 12:33:07 +00009180 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00009181 .block_erasers =
9182 {
9183 {
9184 .eraseblocks = { {64 * 1024, 8} },
9185 .block_erase = erase_sector_jedec,
9186 }, {
9187 .eraseblocks = { {512 * 1024, 1} },
9188 .block_erase = erase_chip_block_jedec,
9189 }
9190 },
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00009191 .printlock = printlock_w39v040b,
Sean Nelson35727f72010-01-28 23:55:12 +00009192 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00009193 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00009194 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00009195 },
9196
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009197 {
9198 .vendor = "Winbond",
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00009199 .name = "W39V040C",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009200 .bustype = BUS_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009201 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00009202 .model_id = WINBOND_W39V040C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009203 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00009204 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00009205 .feature_bits = FEATURE_EITHER_RESET,
Paul Menzel018d4822011-10-21 12:33:07 +00009206 .tested = TEST_OK_PREW,
Sean Nelson35727f72010-01-28 23:55:12 +00009207 .probe = probe_jedec,
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00009208 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00009209 .block_erasers =
9210 {
9211 {
9212 .eraseblocks = { {64 * 1024, 8} },
9213 .block_erase = erase_sector_jedec,
9214 }, {
9215 .eraseblocks = { {512 * 1024, 1} },
9216 .block_erase = erase_chip_block_jedec,
9217 }
9218 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00009219 .printlock = printlock_w39v040c,
Sean Nelson35727f72010-01-28 23:55:12 +00009220 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00009221 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00009222 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00009223 },
9224
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009225 {
9226 .vendor = "Winbond",
9227 .name = "W39V040FA",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009228 .bustype = BUS_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009229 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00009230 .model_id = WINBOND_W39V040FA,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009231 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00009232 .page_size = 64 * 1024,
Michael Karcherc9b63412010-05-30 16:55:18 +00009233 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Antony Rheneus0fbba982011-05-26 14:28:51 +00009234 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009235 .probe = probe_jedec,
Antony Rheneus0fbba982011-05-26 14:28:51 +00009236 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00009237 .block_erasers =
9238 {
9239 {
9240 .eraseblocks = { {4 * 1024, 128} },
9241 .block_erase = erase_block_jedec,
9242 }, {
9243 .eraseblocks = { {64 * 1024, 8} },
9244 .block_erase = erase_sector_jedec,
9245 }, {
9246 .eraseblocks = { {512 * 1024, 1} },
9247 .block_erase = erase_chip_block_jedec,
9248 }
9249 },
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00009250 .printlock = printlock_w39v040fa,
Michael Karcherc9b63412010-05-30 16:55:18 +00009251 .unlock = unlock_sst_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00009252 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00009253 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00009254 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00009255 },
9256
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009257 {
9258 .vendor = "Winbond",
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00009259 .name = "W39V040FB",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009260 .bustype = BUS_FWH,
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00009261 .manufacture_id = WINBOND_ID,
9262 .model_id = WINBOND_W39V040B,
9263 .total_size = 512,
9264 .page_size = 64 * 1024,
9265 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Idwer Vollering67f28142011-03-06 22:26:23 +00009266 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00009267 .probe = probe_jedec,
9268 .probe_timing = 10,
9269 .block_erasers =
9270 {
9271 {
9272 .eraseblocks = { {64 * 1024, 8} },
9273 .block_erase = erase_sector_jedec,
9274 }, {
9275 .eraseblocks = { {512 * 1024, 1} },
9276 .block_erase = erase_chip_block_jedec,
9277 }
9278 },
9279 .printlock = printlock_w39v040fb,
Idwer Volleringecc67072010-12-26 23:55:12 +00009280 .unlock = unlock_w39v040fb,
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00009281 .write = write_jedec_1,
9282 .read = read_memmapped,
Steven Zakulec7d257b42011-07-19 08:50:18 +00009283 .voltage = {3000, 3600}, /* Also has 12V fast program */
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00009284 },
9285
9286 {
9287 .vendor = "Winbond",
9288 .name = "W39V040FC",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009289 .bustype = BUS_FWH,
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00009290 .manufacture_id = WINBOND_ID,
9291 .model_id = WINBOND_W39V040C,
9292 .total_size = 512,
9293 .page_size = 64 * 1024,
9294 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stefan Tauneraf2db612011-12-02 21:48:17 +00009295 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00009296 .probe = probe_jedec,
9297 .probe_timing = 10,
9298 .block_erasers =
9299 {
9300 {
9301 .eraseblocks = { {64 * 1024, 8} },
9302 .block_erase = erase_sector_jedec,
9303 }, {
9304 .eraseblocks = { {512 * 1024, 1} },
9305 .block_erase = erase_chip_block_jedec,
9306 }
9307 },
9308 .printlock = printlock_w39v040fc,
9309 .write = write_jedec_1,
9310 .read = read_memmapped,
Steven Zakulec7d257b42011-07-19 08:50:18 +00009311 .voltage = {3000, 3600}, /* Also has 12V fast program */
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00009312 },
9313
9314 {
9315 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009316 .name = "W39V080A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009317 .bustype = BUS_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009318 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00009319 .model_id = WINBOND_W39V080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009320 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00009321 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00009322 .feature_bits = FEATURE_EITHER_RESET,
Paul Menzelac427b22012-02-16 21:07:07 +00009323 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009324 .probe = probe_jedec,
Paul Menzelac427b22012-02-16 21:07:07 +00009325 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00009326 .block_erasers =
9327 {
9328 {
9329 .eraseblocks = { {64 * 1024, 16} },
9330 .block_erase = erase_sector_jedec,
9331 }, {
9332 .eraseblocks = { {1024 * 1024, 1} },
9333 .block_erase = erase_chip_block_jedec,
9334 }
9335 },
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00009336 .printlock = printlock_w39v080a,
Sean Nelson35727f72010-01-28 23:55:12 +00009337 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00009338 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00009339 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00009340 },
9341
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009342 {
9343 .vendor = "Winbond",
Mattias Mattssona745cf42010-09-14 23:56:56 +00009344 .name = "W49F002U/N",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009345 .bustype = BUS_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009346 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00009347 .model_id = WINBOND_W49F002U,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009348 .total_size = 256,
9349 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00009350 .feature_bits = FEATURE_EITHER_RESET,
Stefan Tauner716e0982011-07-25 20:38:52 +00009351 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009352 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00009353 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00009354 .block_erasers =
9355 {
9356 {
9357 .eraseblocks = {
9358 {128 * 1024, 1},
9359 {96 * 1024, 1},
9360 {8 * 1024, 2},
9361 {16 * 1024, 1},
9362 },
9363 .block_erase = erase_sector_jedec,
9364 }, {
9365 .eraseblocks = { {256 * 1024, 1} },
9366 .block_erase = erase_chip_block_jedec,
9367 }
9368 },
Sean Nelson35727f72010-01-28 23:55:12 +00009369 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00009370 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00009371 .voltage = {4500, 5500},
FENG yu ningff692fb2008-12-08 18:15:10 +00009372 },
9373
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009374 {
9375 .vendor = "Winbond",
Carl-Daniel Hailfingerabebe6b2010-07-17 13:45:42 +00009376 .name = "W49F020",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009377 .bustype = BUS_PARALLEL,
Carl-Daniel Hailfingerabebe6b2010-07-17 13:45:42 +00009378 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00009379 .model_id = WINBOND_W49F020,
Carl-Daniel Hailfingerabebe6b2010-07-17 13:45:42 +00009380 .total_size = 256,
9381 .page_size = 128,
9382 .feature_bits = FEATURE_EITHER_RESET,
9383 .tested = TEST_OK_PROBE,
9384 .probe = probe_jedec,
9385 .probe_timing = 10,
9386 .block_erasers =
9387 {
9388 {
9389 .eraseblocks = { {256 * 1024, 1} },
9390 .block_erase = erase_chip_block_jedec,
9391 }
9392 },
9393 .write = write_jedec_1,
9394 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00009395 .voltage = {4500, 5500},
Carl-Daniel Hailfingerabebe6b2010-07-17 13:45:42 +00009396 },
9397
9398 {
9399 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009400 .name = "W49V002A",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009401 .bustype = BUS_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009402 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00009403 .model_id = WINBOND_W49V002A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009404 .total_size = 256,
9405 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00009406 .feature_bits = FEATURE_EITHER_RESET,
Cristian Măgherușan-Stanciu9932c7b2011-07-07 19:56:58 +00009407 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009408 .probe = probe_jedec,
Cristian Măgherușan-Stanciu9932c7b2011-07-07 19:56:58 +00009409 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00009410 .block_erasers =
9411 {
9412 {
9413 .eraseblocks = {
9414 {64 * 1024, 3},
9415 {32 * 1024, 1},
9416 {8 * 1024, 2},
9417 {16 * 1024, 1},
9418 },
9419 .block_erase = erase_sector_jedec,
9420 }, {
9421 .eraseblocks = { {256 * 1024, 1} },
9422 .block_erase = erase_chip_block_jedec,
9423 }
9424 },
Sean Nelson35727f72010-01-28 23:55:12 +00009425 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00009426 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00009427 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00009428 },
9429
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009430 {
9431 .vendor = "Winbond",
9432 .name = "W49V002FA",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009433 .bustype = BUS_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009434 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00009435 .model_id = WINBOND_W49V002FA,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009436 .total_size = 256,
9437 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00009438 .feature_bits = FEATURE_EITHER_RESET,
Carl-Daniel Hailfingerf52f7842010-10-08 18:52:29 +00009439 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009440 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00009441 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00009442 .block_erasers =
9443 {
9444 {
9445 .eraseblocks = {
9446 {64 * 1024, 3},
9447 {32 * 1024, 1},
9448 {8 * 1024, 2},
9449 {16 * 1024, 1},
9450 },
9451 .block_erase = erase_sector_jedec,
9452 }, {
9453 .eraseblocks = { {256 * 1024, 1} },
9454 .block_erase = erase_chip_block_jedec,
9455 }
9456 },
Sean Nelson35727f72010-01-28 23:55:12 +00009457 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00009458 .read = read_memmapped,
Steven Zakuleccbe370e2011-06-03 07:26:31 +00009459 .voltage = {3000, 3600},
FENG yu ningff692fb2008-12-08 18:15:10 +00009460 },
9461
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009462 {
9463 .vendor = "Winbond",
9464 .name = "W39V080FA",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009465 .bustype = BUS_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009466 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00009467 .model_id = WINBOND_W39V080FA,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009468 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00009469 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00009470 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stefan Tauner716e0982011-07-25 20:38:52 +00009471 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00009472 .probe = probe_jedec,
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00009473 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00009474 .block_erasers =
9475 {
9476 {
9477 .eraseblocks = { {64 * 1024, 16}, },
9478 .block_erase = erase_sector_jedec,
9479 }, {
9480 .eraseblocks = { {1024 * 1024, 1} },
9481 .block_erase = erase_chip_block_jedec,
9482 }
9483 },
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00009484 .printlock = printlock_w39v080fa,
9485 .unlock = unlock_w39v080fa,
Sean Nelson35727f72010-01-28 23:55:12 +00009486 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00009487 .read = read_memmapped,
Steven Zakulec7d257b42011-07-19 08:50:18 +00009488 .voltage = {3000, 3600}, /* Also has 12V fast program */
FENG yu ningff692fb2008-12-08 18:15:10 +00009489 },
9490
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009491 {
9492 .vendor = "Winbond",
9493 .name = "W39V080FA (dual mode)",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009494 .bustype = BUS_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009495 .manufacture_id = WINBOND_ID,
Mattias Mattssona745cf42010-09-14 23:56:56 +00009496 .model_id = WINBOND_W39V080FA_DM,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009497 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00009498 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00009499 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009500 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00009501 .probe = probe_jedec,
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00009502 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00009503 .block_erasers =
9504 {
9505 {
9506 .eraseblocks = { {64 * 1024, 8}, },
9507 .block_erase = erase_sector_jedec,
9508 }, {
9509 .eraseblocks = { {512 * 1024, 1} },
9510 .block_erase = erase_chip_block_jedec,
9511 }
9512 },
Carl-Daniel Hailfinger91882402010-12-05 16:33:59 +00009513 .printlock = printlock_w39v080fa_dual,
Sean Nelson35727f72010-01-28 23:55:12 +00009514 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00009515 .read = read_memmapped,
Steven Zakulec7d257b42011-07-19 08:50:18 +00009516 .voltage = {3000, 3600}, /* Also has 12V fast program */
FENG yu ningff692fb2008-12-08 18:15:10 +00009517 },
Stefan Taunerac1b4c82012-02-17 14:51:04 +00009518
9519 {
9520 .vendor = "Unknown",
9521 .name = "SFDP-capable chip",
9522 .bustype = BUS_SPI,
9523 .manufacture_id = GENERIC_MANUF_ID,
9524 .model_id = SFDP_DEVICE_ID,
9525 /* We present our own "report this" text hence we do not
9526 * want the default "This flash part has status UNTESTED..."
9527 * text to be printed. */
9528 .tested = TEST_OK_PREW,
9529 .probe = probe_spi_sfdp,
9530 .unlock = spi_disable_blockprotect, /* is this safe? */
9531 .read = spi_chip_read,
9532 /* FIXME: some vendor extensions define this */
Carl-Daniel Hailfinger1c6d2ff2012-08-27 00:44:42 +00009533 .voltage = {0},
Stefan Taunerac1b4c82012-02-17 14:51:04 +00009534 /* Everything below will be set by the probing function. */
9535 .write = NULL,
9536 .total_size = 0,
9537 .page_size = 0,
9538 .feature_bits = 0,
9539 .block_erasers = {},
9540 },
FENG yu ningff692fb2008-12-08 18:15:10 +00009541
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009542 {
Carl-Daniel Hailfinger532c7172011-11-04 21:35:26 +00009543 .vendor = "Programmer",
9544 .name = "Opaque flash chip",
9545 .bustype = BUS_PROG,
9546 .manufacture_id = PROGMANUF_ID,
9547 .model_id = PROGDEV_ID,
9548 .total_size = 0,
9549 .page_size = 256,
9550 /* probe is assumed to work, rest will be filled in by probe */
9551 .tested = TEST_OK_PROBE,
9552 .probe = probe_opaque,
9553 /* eraseblock sizes will be set by the probing function */
9554 .block_erasers =
9555 {
9556 {
9557 .block_erase = erase_opaque,
9558 }
9559 },
9560 .write = write_opaque,
9561 .read = read_opaque,
9562 },
9563
9564 {
Daniel Lenskidf90d3a2010-07-22 11:44:38 +00009565 .vendor = "AMIC",
9566 .name = "unknown AMIC SPI chip",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009567 .bustype = BUS_SPI,
Daniel Lenskidf90d3a2010-07-22 11:44:38 +00009568 .manufacture_id = AMIC_ID,
9569 .model_id = GENERIC_DEVICE_ID,
9570 .total_size = 0,
9571 .page_size = 256,
9572 .tested = TEST_BAD_PREW,
9573 .probe = probe_spi_rdid4,
9574 .probe_timing = TIMING_ZERO,
9575 .write = NULL,
9576 .read = NULL,
9577 },
9578
9579 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009580 .vendor = "Atmel",
9581 .name = "unknown Atmel SPI chip",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009582 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009583 .manufacture_id = ATMEL_ID,
9584 .model_id = GENERIC_DEVICE_ID,
9585 .total_size = 0,
9586 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00009587 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009588 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00009589 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009590 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00009591 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00009592 },
9593
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009594 {
Carl-Daniel Hailfingerf792c7d2010-07-28 22:20:20 +00009595 .vendor = "Eon",
9596 .name = "unknown Eon SPI chip",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009597 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009598 .manufacture_id = EON_ID_NOPREFIX,
9599 .model_id = GENERIC_DEVICE_ID,
9600 .total_size = 0,
9601 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00009602 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009603 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00009604 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009605 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00009606 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00009607 },
9608
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009609 {
9610 .vendor = "Macronix",
9611 .name = "unknown Macronix SPI chip",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009612 .bustype = BUS_SPI,
Mattias Mattsson6eabe282010-09-15 23:31:03 +00009613 .manufacture_id = MACRONIX_ID,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009614 .model_id = GENERIC_DEVICE_ID,
9615 .total_size = 0,
9616 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00009617 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009618 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00009619 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009620 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00009621 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00009622 },
9623
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009624 {
9625 .vendor = "PMC",
9626 .name = "unknown PMC SPI chip",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009627 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009628 .manufacture_id = PMC_ID,
9629 .model_id = GENERIC_DEVICE_ID,
9630 .total_size = 0,
9631 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00009632 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009633 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00009634 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009635 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00009636 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00009637 },
9638
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009639 {
9640 .vendor = "SST",
9641 .name = "unknown SST SPI chip",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009642 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009643 .manufacture_id = SST_ID,
9644 .model_id = GENERIC_DEVICE_ID,
9645 .total_size = 0,
9646 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00009647 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009648 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00009649 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009650 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00009651 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00009652 },
9653
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009654 {
9655 .vendor = "ST",
9656 .name = "unknown ST SPI chip",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009657 .bustype = BUS_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009658 .manufacture_id = ST_ID,
9659 .model_id = GENERIC_DEVICE_ID,
9660 .total_size = 0,
9661 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00009662 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009663 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00009664 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009665 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00009666 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00009667 },
Uwe Hermannfc425e82008-03-16 02:06:25 +00009668
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00009669 {
Sean Nelson118e1d62009-11-24 02:08:11 +00009670 .vendor = "Sanyo",
9671 .name = "unknown Sanyo SPI chip",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009672 .bustype = BUS_SPI,
Sean Nelson118e1d62009-11-24 02:08:11 +00009673 .manufacture_id = SANYO_ID,
9674 .model_id = GENERIC_DEVICE_ID,
9675 .total_size = 0,
9676 .page_size = 256,
9677 .tested = TEST_BAD_PREW,
9678 .probe = probe_spi_rdid,
9679 .probe_timing = TIMING_ZERO,
Sean Nelson118e1d62009-11-24 02:08:11 +00009680 .write = NULL,
9681 .read = NULL,
9682 },
9683
9684 {
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00009685 .vendor = "Generic",
9686 .name = "unknown SPI chip (RDID)",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009687 .bustype = BUS_SPI,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00009688 .manufacture_id = GENERIC_MANUF_ID,
9689 .model_id = GENERIC_DEVICE_ID,
9690 .total_size = 0,
9691 .page_size = 256,
9692 .tested = TEST_BAD_PREW,
9693 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00009694 .write = NULL,
9695 },
Stefan Tauneraf2db612011-12-02 21:48:17 +00009696
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00009697 {
9698 .vendor = "Generic",
9699 .name = "unknown SPI chip (REMS)",
Carl-Daniel Hailfinger1a227952011-07-27 07:13:06 +00009700 .bustype = BUS_SPI,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00009701 .manufacture_id = GENERIC_MANUF_ID,
9702 .model_id = GENERIC_DEVICE_ID,
9703 .total_size = 0,
9704 .page_size = 256,
9705 .tested = TEST_BAD_PREW,
9706 .probe = probe_spi_rems,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00009707 .write = NULL,
9708 },
9709
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00009710 { NULL }
Stephan Guilloux72cf5652009-04-21 01:46:07 +00009711};