blob: 53d053ab7e17d400f13cb7765441b99b447377a0 [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"
Ollie Lho184a4042005-11-26 21:55:36 +000027
Uwe Hermannfc425e82008-03-16 02:06:25 +000028/**
Uwe Hermanna9720402009-05-21 15:55:46 +000029 * List of supported flash chips.
Uwe Hermannfc425e82008-03-16 02:06:25 +000030 *
31 * Please keep the list sorted by vendor name and chip name, so that
32 * the output of 'flashrom -L' is alphabetically sorted.
33 */
Ollie Lho184a4042005-11-26 21:55:36 +000034struct flashchip flashchips[] = {
Uwe Hermannfc425e82008-03-16 02:06:25 +000035
Carl-Daniel Hailfinger21eedec2009-07-23 12:42:01 +000036 /*
37 * .vendor = Vendor name
38 * .name = Chip name
39 * .bustype = Supported flash bus types (Parallel, LPC...)
40 * .manufacture_id = Manufacturer chip ID
41 * .model_id = Model chip ID
42 * .total_size = Total size in (binary) kbytes
43 * .page_size = Page or eraseblock(?) size in bytes
44 * .tested = Test status
45 * .probe = Probe function
46 * .probe_timing = Probe function delay
47 * .erase = Chip erase function
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 * }
Carl-Daniel Hailfinger21eedec2009-07-23 12:42:01 +000053 * .write = Chip write function
54 * .read = Chip read function
FENG yu ningff692fb2008-12-08 18:15:10 +000055 */
56
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000057 {
58 .vendor = "AMD",
Uwe Hermanna8b37272009-06-19 15:54:39 +000059 .name = "Am29F010A/B",
60 .bustype = CHIP_BUSTYPE_PARALLEL,
61 .manufacture_id = AMD_ID,
62 .model_id = AM_29F010B, /* Same as Am29F010A */
63 .total_size = 128,
64 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +000065 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
66 .tested = TEST_UNTESTED,
67 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +000068 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +000069 .erase = NULL,
70 .block_erasers =
71 {
72 {
73 .eraseblocks = { {16 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +000074 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +000075 }, {
76 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +000077 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +000078 },
79 },
Sean Nelson35727f72010-01-28 23:55:12 +000080 .write = write_jedec_1,
Uwe Hermanna8b37272009-06-19 15:54:39 +000081 .read = read_memmapped,
82 },
83
84 {
85 .vendor = "AMD",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000086 .name = "Am29F002(N)BB",
Urja Rannikko038a3122009-06-28 19:19:25 +000087 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000088 .manufacture_id = AMD_ID,
89 .model_id = AM_29F002BB,
90 .total_size = 256,
91 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +000092 .feature_bits = FEATURE_SHORT_RESET | FEATURE_ADDR_2AA,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000093 .tested = TEST_UNTESTED,
94 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +000095 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +000096 .erase = NULL,
97 .block_erasers =
98 {
99 {
100 .eraseblocks = {
101 {16 * 1024, 1},
102 {8 * 1024, 2},
103 {32 * 1024, 1},
104 {64 * 1024, 3},
105 },
106 .block_erase = erase_sector_jedec,
107 }, {
108 .eraseblocks = { {256 * 1024, 1} },
109 .block_erase = erase_chip_block_jedec,
110 },
111 },
Michael Karcher1c296ca2009-11-27 17:49:42 +0000112 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000113 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000114 },
115
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000116 {
117 .vendor = "AMD",
118 .name = "Am29F002(N)BT",
Urja Rannikko038a3122009-06-28 19:19:25 +0000119 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000120 .manufacture_id = AMD_ID,
121 .model_id = AM_29F002BT,
122 .total_size = 256,
123 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +0000124 .feature_bits = FEATURE_EITHER_RESET | FEATURE_ADDR_2AA,
125 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000126 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +0000127 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000128 .erase = NULL,
129 .block_erasers =
130 {
131 {
132 .eraseblocks = {
133 {64 * 1024, 3},
134 {32 * 1024, 1},
135 {8 * 1024, 2},
136 {16 * 1024, 1},
137 },
138 .block_erase = erase_sector_jedec,
139 }, {
140 .eraseblocks = { {256 * 1024, 1} },
141 .block_erase = erase_chip_block_jedec,
142 },
143 },
Michael Karcher1c296ca2009-11-27 17:49:42 +0000144 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000145 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000146 },
147
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000148 {
149 .vendor = "AMD",
150 .name = "Am29F016D",
Urja Rannikko038a3122009-06-28 19:19:25 +0000151 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000152 .manufacture_id = AMD_ID,
153 .model_id = AM_29F016D,
Sean Nelson72a9a022009-12-22 22:15:33 +0000154 .total_size = 2 * 1024,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000155 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000156 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000157 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +0000158 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000159 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000160 .erase = NULL,
161 .block_erasers =
162 {
163 {
164 .eraseblocks = { {64 * 1024, 32} },
Sean Nelson35727f72010-01-28 23:55:12 +0000165 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000166 }, {
167 .eraseblocks = { {2048 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000168 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000169 },
170 },
Sean Nelson35727f72010-01-28 23:55:12 +0000171 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000172 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000173 },
174
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000175 {
176 .vendor = "AMD",
177 .name = "Am29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000178 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000179 .manufacture_id = AMD_ID,
180 .model_id = AM_29F040B,
181 .total_size = 512,
182 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000183 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
184 .tested = TEST_UNTESTED,
185 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000186 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000187 .erase = NULL,
188 .block_erasers =
189 {
190 {
191 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +0000192 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000193 }, {
194 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000195 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000196 },
197 },
Sean Nelson35727f72010-01-28 23:55:12 +0000198 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000199 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000200 },
201
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000202 {
203 .vendor = "AMD",
Peter Stuge8440cc02009-01-25 23:55:12 +0000204 .name = "Am29F080B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000205 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawski5bae4382009-06-02 00:38:14 +0000206 .manufacture_id = AMD_ID,
207 .model_id = AM_29F080B,
Peter Stuge8440cc02009-01-25 23:55:12 +0000208 .total_size = 1024,
209 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000210 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +0000211 .tested = TEST_UNTESTED,
212 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +0000213 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000214 .erase = NULL,
215 .block_erasers =
216 {
217 {
218 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson35727f72010-01-28 23:55:12 +0000219 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000220 }, {
221 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000222 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000223 },
224 },
Sean Nelson35727f72010-01-28 23:55:12 +0000225 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000226 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +0000227 },
228
229 {
230 .vendor = "AMD",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000231 .name = "Am29LV040B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000232 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000233 .manufacture_id = AMD_ID,
234 .model_id = AM_29LV040B,
235 .total_size = 512,
236 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000237 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000238 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +0000239 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000240 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000241 .erase = NULL,
242 .block_erasers =
243 {
244 {
245 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +0000246 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000247 }, {
248 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000249 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000250 },
251 },
Sean Nelson35727f72010-01-28 23:55:12 +0000252 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000253 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000254 },
255
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000256 {
Peter Stuge8440cc02009-01-25 23:55:12 +0000257 .vendor = "AMD",
258 .name = "Am29LV081B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000259 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawski5bae4382009-06-02 00:38:14 +0000260 .manufacture_id = AMD_ID,
Carl-Daniel Hailfinger6d5d2532009-08-10 10:14:23 +0000261 .model_id = AM_29LV080B,
Peter Stuge8440cc02009-01-25 23:55:12 +0000262 .total_size = 1024,
263 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000264 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +0000265 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +0000266 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000267 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000268 .erase = NULL,
269 .block_erasers =
270 {
271 {
272 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson35727f72010-01-28 23:55:12 +0000273 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000274 }, {
275 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000276 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000277 },
278 },
Sean Nelson35727f72010-01-28 23:55:12 +0000279 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000280 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +0000281 },
282
283 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000284 .vendor = "ASD",
285 .name = "AE49F2008",
Urja Rannikko038a3122009-06-28 19:19:25 +0000286 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000287 .manufacture_id = ASD_ID,
288 .model_id = ASD_AE49F2008,
289 .total_size = 256,
290 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +0000291 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000292 .tested = TEST_UNTESTED,
293 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000294 .probe_timing = TIMING_FIXME,
Sean Nelson54596372010-01-09 05:30:14 +0000295 .erase = NULL,
296 .block_erasers =
297 {
298 {
299 .eraseblocks = {
300 {128 * 1024, 1},
301 {96 * 1024, 1},
302 {8 * 1024, 2},
303 {16 * 1024, 1},
304 },
305 .block_erase = erase_sector_jedec,
306 }, {
307 .eraseblocks = { {256 * 1024, 1} },
308 .block_erase = erase_chip_block_jedec,
309 }
310 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000311 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000312 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000313 },
314
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000315 {
316 .vendor = "Atmel",
317 .name = "AT25DF021",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000318 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000319 .manufacture_id = ATMEL_ID,
320 .model_id = AT_25DF021,
321 .total_size = 256,
322 .page_size = 256,
323 .tested = TEST_UNTESTED,
324 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000325 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000326 .erase = NULL,
327 .block_erasers =
328 {
329 {
330 .eraseblocks = { {4 * 1024, 64} },
331 .block_erase = spi_block_erase_20,
332 }, {
333 .eraseblocks = { {32 * 1024, 8} },
334 .block_erase = spi_block_erase_52,
335 }, {
336 .eraseblocks = { {64 * 1024, 4} },
337 .block_erase = spi_block_erase_d8,
338 }, {
339 .eraseblocks = { {256 * 1024, 1} },
340 .block_erase = spi_block_erase_60,
341 }, {
342 .eraseblocks = { {256 * 1024, 1} },
343 .block_erase = spi_block_erase_c7,
344 }
345 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000346 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000347 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000348 },
349
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000350 {
351 .vendor = "Atmel",
352 .name = "AT25DF041A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000353 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000354 .manufacture_id = ATMEL_ID,
355 .model_id = AT_25DF041A,
356 .total_size = 512,
357 .page_size = 256,
358 .tested = TEST_UNTESTED,
359 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000360 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000361 .erase = NULL,
362 .block_erasers =
363 {
364 {
365 .eraseblocks = { {4 * 1024, 128} },
366 .block_erase = spi_block_erase_20,
367 }, {
368 .eraseblocks = { {32 * 1024, 16} },
369 .block_erase = spi_block_erase_52,
370 }, {
371 .eraseblocks = { {64 * 1024, 8} },
372 .block_erase = spi_block_erase_d8,
373 }, {
374 .eraseblocks = { {512 * 1024, 1} },
375 .block_erase = spi_block_erase_60,
376 }, {
377 .eraseblocks = { {512 * 1024, 1} },
378 .block_erase = spi_block_erase_c7,
379 }
380 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000381 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000382 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000383 },
384
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000385 {
386 .vendor = "Atmel",
387 .name = "AT25DF081",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000388 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000389 .manufacture_id = ATMEL_ID,
390 .model_id = AT_25DF081,
391 .total_size = 1024,
392 .page_size = 256,
393 .tested = TEST_UNTESTED,
394 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000395 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000396 .erase = NULL,
397 .block_erasers =
398 {
399 {
400 .eraseblocks = { {4 * 1024, 256} },
401 .block_erase = spi_block_erase_20,
402 }, {
403 .eraseblocks = { {32 * 1024, 32} },
404 .block_erase = spi_block_erase_52,
405 }, {
406 .eraseblocks = { {64 * 1024, 16} },
407 .block_erase = spi_block_erase_d8,
408 }, {
409 .eraseblocks = { {1024 * 1024, 1} },
410 .block_erase = spi_block_erase_60,
411 }, {
412 .eraseblocks = { {1024 * 1024, 1} },
413 .block_erase = spi_block_erase_c7,
414 }
415 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000416 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000417 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000418 },
419
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000420 {
421 .vendor = "Atmel",
422 .name = "AT25DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000423 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000424 .manufacture_id = ATMEL_ID,
425 .model_id = AT_25DF161,
426 .total_size = 2048,
427 .page_size = 256,
428 .tested = TEST_UNTESTED,
429 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000430 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000431 .erase = NULL,
432 .block_erasers =
433 {
434 {
435 .eraseblocks = { {4 * 1024, 512} },
436 .block_erase = spi_block_erase_20,
437 }, {
438 .eraseblocks = { {32 * 1024, 64} },
439 .block_erase = spi_block_erase_52,
440 }, {
441 .eraseblocks = { {64 * 1024, 32} },
442 .block_erase = spi_block_erase_d8,
443 }, {
444 .eraseblocks = { {2 * 1024 * 1024, 1} },
445 .block_erase = spi_block_erase_60,
446 }, {
447 .eraseblocks = { {2 * 1024 * 1024, 1} },
448 .block_erase = spi_block_erase_c7,
449 }
450 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000451 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000452 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000453 },
454
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000455 {
456 .vendor = "Atmel",
457 .name = "AT25DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000458 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000459 .manufacture_id = ATMEL_ID,
460 .model_id = AT_25DF321,
461 .total_size = 4096,
462 .page_size = 256,
Sean Nelson89187292009-12-23 12:02:55 +0000463 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000464 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000465 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000466 .erase = NULL,
467 .block_erasers =
468 {
469 {
470 .eraseblocks = { {4 * 1024, 1024} },
471 .block_erase = spi_block_erase_20,
472 }, {
473 .eraseblocks = { {32 * 1024, 128} },
474 .block_erase = spi_block_erase_52,
475 }, {
476 .eraseblocks = { {64 * 1024, 64} },
477 .block_erase = spi_block_erase_d8,
478 }, {
479 .eraseblocks = { {4 * 1024 * 1024, 1} },
480 .block_erase = spi_block_erase_60,
481 }, {
482 .eraseblocks = { {4 * 1024 * 1024, 1} },
483 .block_erase = spi_block_erase_c7,
484 }
485 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000486 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000487 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000488 },
489
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000490 {
491 .vendor = "Atmel",
492 .name = "AT25DF321A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000493 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000494 .manufacture_id = ATMEL_ID,
495 .model_id = AT_25DF321A,
496 .total_size = 4096,
497 .page_size = 256,
498 .tested = TEST_UNTESTED,
499 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000500 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000501 .erase = NULL,
502 .block_erasers =
503 {
504 {
505 .eraseblocks = { {4 * 1024, 1024} },
506 .block_erase = spi_block_erase_20,
507 }, {
508 .eraseblocks = { {32 * 1024, 128} },
509 .block_erase = spi_block_erase_52,
510 }, {
511 .eraseblocks = { {64 * 1024, 64} },
512 .block_erase = spi_block_erase_d8,
513 }, {
514 .eraseblocks = { {4 * 1024 * 1024, 1} },
515 .block_erase = spi_block_erase_60,
516 }, {
517 .eraseblocks = { {4 * 1024 * 1024, 1} },
518 .block_erase = spi_block_erase_c7,
519 }
520 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000521 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000522 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000523 },
524
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000525 {
526 .vendor = "Atmel",
527 .name = "AT25DF641",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000528 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000529 .manufacture_id = ATMEL_ID,
530 .model_id = AT_25DF641,
531 .total_size = 8192,
532 .page_size = 256,
533 .tested = TEST_UNTESTED,
534 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000535 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000536 .erase = NULL,
537 .block_erasers =
538 {
539 {
540 .eraseblocks = { {4 * 1024, 2048} },
541 .block_erase = spi_block_erase_20,
542 }, {
543 .eraseblocks = { {32 * 1024, 256} },
544 .block_erase = spi_block_erase_52,
545 }, {
546 .eraseblocks = { {64 * 1024, 128} },
547 .block_erase = spi_block_erase_d8,
548 }, {
549 .eraseblocks = { {8 * 1024 * 1024, 1} },
550 .block_erase = spi_block_erase_60,
551 }, {
552 .eraseblocks = { {8 * 1024 * 1024, 1} },
553 .block_erase = spi_block_erase_c7,
554 }
555 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000556 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000557 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000558 },
559
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000560 {
561 .vendor = "Atmel",
562 .name = "AT25F512B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000563 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000564 .manufacture_id = ATMEL_ID,
565 .model_id = AT_25F512B,
566 .total_size = 64,
567 .page_size = 256,
568 .tested = TEST_UNTESTED,
569 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000570 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000571 .erase = NULL,
572 .block_erasers =
573 {
574 {
575 .eraseblocks = { {4 * 1024, 16} },
576 .block_erase = spi_block_erase_20,
577 }, {
578 .eraseblocks = { {32 * 1024, 2} },
579 .block_erase = spi_block_erase_52,
580 }, {
581 .eraseblocks = { {32 * 1024, 2} },
582 .block_erase = spi_block_erase_d8,
583 }, {
584 .eraseblocks = { {64 * 1024, 1} },
585 .block_erase = spi_block_erase_60,
586 }, {
587 .eraseblocks = { {64 * 1024, 1} },
588 .block_erase = spi_block_erase_c7,
589 }
590 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000591 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000592 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000593 },
594
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000595 {
596 .vendor = "Atmel",
597 .name = "AT25FS010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000598 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000599 .manufacture_id = ATMEL_ID,
600 .model_id = AT_25FS010,
601 .total_size = 128,
602 .page_size = 256,
603 .tested = TEST_UNTESTED,
604 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000605 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000606 .erase = NULL,
607 .block_erasers =
608 {
609 {
610 .eraseblocks = { {4 * 1024, 32} },
611 .block_erase = spi_block_erase_20,
612 }, {
613 .eraseblocks = { {32 * 1024, 4} },
614 .block_erase = spi_block_erase_52,
615 }, {
616 .eraseblocks = { {32 * 1024, 4} },
617 .block_erase = spi_block_erase_d8,
618 }, {
619 .eraseblocks = { {128 * 1024, 1} },
620 .block_erase = spi_block_erase_60,
621 }, {
622 .eraseblocks = { {128 * 1024, 1} },
623 .block_erase = spi_block_erase_c7,
624 }
625 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000626 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000627 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000628 },
629
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000630 {
631 .vendor = "Atmel",
632 .name = "AT25FS040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000633 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000634 .manufacture_id = ATMEL_ID,
635 .model_id = AT_25FS040,
636 .total_size = 512,
637 .page_size = 256,
638 .tested = TEST_UNTESTED,
639 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000640 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000641 .erase = NULL,
642 .block_erasers =
643 {
644 {
645 .eraseblocks = { {4 * 1024, 128} },
646 .block_erase = spi_block_erase_20,
647 }, {
648 .eraseblocks = { {64 * 1024, 8} },
649 .block_erase = spi_block_erase_52,
650 }, {
651 .eraseblocks = { {64 * 1024, 8} },
652 .block_erase = spi_block_erase_d8,
653 }, {
654 .eraseblocks = { {512 * 1024, 1} },
655 .block_erase = spi_block_erase_60,
656 }, {
657 .eraseblocks = { {512 * 1024, 1} },
658 .block_erase = spi_block_erase_c7,
659 }
660 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000661 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000662 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000663 },
664
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000665 {
666 .vendor = "Atmel",
667 .name = "AT26DF041",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000668 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000669 .manufacture_id = ATMEL_ID,
670 .model_id = AT_26DF041,
671 .total_size = 512,
672 .page_size = 256,
673 .tested = TEST_UNTESTED,
674 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000675 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000676 .erase = NULL,
Sean Nelson89187292009-12-23 12:02:55 +0000677 .block_erasers =
678 {
679 {
680 .eraseblocks = { {4 * 1024, 128} },
681 .block_erase = spi_block_erase_20,
682 }
683 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000684 .write = NULL /* Incompatible Page write */,
685 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000686 },
687
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000688 {
689 .vendor = "Atmel",
690 .name = "AT26DF081A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000691 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000692 .manufacture_id = ATMEL_ID,
693 .model_id = AT_26DF081A,
694 .total_size = 1024,
695 .page_size = 256,
696 .tested = TEST_UNTESTED,
697 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000698 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000699 .erase = NULL,
700 .block_erasers =
701 {
702 {
703 .eraseblocks = { {4 * 1024, 256} },
704 .block_erase = spi_block_erase_20,
705 }, {
706 .eraseblocks = { {32 * 1024, 32} },
707 .block_erase = spi_block_erase_52,
708 }, {
709 .eraseblocks = { {64 * 1024, 16} },
710 .block_erase = spi_block_erase_d8,
711 }, {
712 .eraseblocks = { {1024 * 1024, 1} },
713 .block_erase = spi_block_erase_60,
714 }, {
715 .eraseblocks = { {1024 * 1024, 1} },
716 .block_erase = spi_block_erase_c7,
717 }
718 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000719 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000720 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000721 },
722
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000723 {
724 .vendor = "Atmel",
725 .name = "AT26DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000726 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000727 .manufacture_id = ATMEL_ID,
728 .model_id = AT_26DF161,
729 .total_size = 2048,
730 .page_size = 256,
731 .tested = TEST_UNTESTED,
732 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000733 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000734 .erase = NULL,
735 .block_erasers =
736 {
737 {
738 .eraseblocks = { {4 * 1024, 512} },
739 .block_erase = spi_block_erase_20,
740 }, {
741 .eraseblocks = { {32 * 1024, 64} },
742 .block_erase = spi_block_erase_52,
743 }, {
744 .eraseblocks = { {64 * 1024, 32} },
745 .block_erase = spi_block_erase_d8,
746 }, {
747 .eraseblocks = { {2 * 1024 * 1024, 1} },
748 .block_erase = spi_block_erase_60,
749 }, {
750 .eraseblocks = { {2 * 1024 * 1024, 1} },
751 .block_erase = spi_block_erase_c7,
752 }
753 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000754 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000755 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000756 },
757
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000758 {
759 .vendor = "Atmel",
760 .name = "AT26DF161A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000761 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000762 .manufacture_id = ATMEL_ID,
763 .model_id = AT_26DF161A,
764 .total_size = 2048,
765 .page_size = 256,
766 .tested = TEST_UNTESTED,
767 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000768 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000769 .erase = NULL,
770 .block_erasers =
771 {
772 {
773 .eraseblocks = { {4 * 1024, 512} },
774 .block_erase = spi_block_erase_20,
775 }, {
776 .eraseblocks = { {32 * 1024, 64} },
777 .block_erase = spi_block_erase_52,
778 }, {
779 .eraseblocks = { {64 * 1024, 32} },
780 .block_erase = spi_block_erase_d8,
781 }, {
782 .eraseblocks = { {2 * 1024 * 1024, 1} },
783 .block_erase = spi_block_erase_60,
784 }, {
785 .eraseblocks = { {2 * 1024 * 1024, 1} },
786 .block_erase = spi_block_erase_c7,
787 }
788 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000789 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000790 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000791 },
792
793 /*The AT26DF321 has the same ID as the AT25DF321. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000794 /*{
795 .vendor = "Atmel",
796 .name = "AT26DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000797 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000798 .manufacture_id = ATMEL_ID,
799 .model_id = AT_26DF321,
800 .total_size = 4096,
801 .page_size = 256,
802 .tested = TEST_UNTESTED,
803 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000804 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000805 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000806 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000807 .read = spi_chip_read,
808 },*/
FENG yu ningff692fb2008-12-08 18:15:10 +0000809
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000810 {
811 .vendor = "Atmel",
812 .name = "AT26F004",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000813 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000814 .manufacture_id = ATMEL_ID,
815 .model_id = AT_26F004,
816 .total_size = 512,
817 .page_size = 256,
818 .tested = TEST_UNTESTED,
819 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000820 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000821 .erase = NULL,
822 .block_erasers =
823 {
824 {
825 .eraseblocks = { {4 * 1024, 128} },
826 .block_erase = spi_block_erase_20,
827 }, {
828 .eraseblocks = { {32 * 1024, 16} },
829 .block_erase = spi_block_erase_52,
830 }, {
831 .eraseblocks = { {64 * 1024, 8} },
832 .block_erase = spi_block_erase_d8,
833 }, {
834 .eraseblocks = { {512 * 1024, 1} },
835 .block_erase = spi_block_erase_60,
836 }, {
837 .eraseblocks = { {512 * 1024, 1} },
838 .block_erase = spi_block_erase_c7,
839 }
840 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000841 .write = NULL /* Incompatible Page write */,
842 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000843 },
844
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000845 {
846 .vendor = "Atmel",
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000847 .name = "AT29C512",
Urja Rannikko038a3122009-06-28 19:19:25 +0000848 .bustype = CHIP_BUSTYPE_PARALLEL,
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000849 .manufacture_id = ATMEL_ID,
850 .model_id = AT_29C512,
851 .total_size = 64,
852 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +0000853 .feature_bits = FEATURE_LONG_RESET,
854 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +0000855 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000856 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +0000857 .erase = NULL,
858 .block_erasers =
859 {
860 {
861 .eraseblocks = { {64 * 1024, 1} },
862 .block_erase = erase_chip_block_jedec,
863 }
864 },
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000865 .write = write_jedec,
866 .read = read_memmapped,
867
868 },
869
870 {
871 .vendor = "Atmel",
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000872 .name = "AT29C010A",
Urja Rannikko161b8852009-06-05 08:47:37 +0000873 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000874 .manufacture_id = ATMEL_ID,
875 .model_id = AT_29C010A,
876 .total_size = 128,
877 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +0000878 .feature_bits = FEATURE_LONG_RESET,
879 .tested = TEST_UNTESTED,
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000880 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000881 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +0000882 .erase = NULL,
883 .block_erasers =
884 {
885 {
886 .eraseblocks = { {128 * 1024, 1} },
887 .block_erase = erase_chip_block_jedec,
888 }
889 },
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000890 .write = write_jedec, /* FIXME */
891 .read = read_memmapped,
892 },
893
894 {
895 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000896 .name = "AT29C020",
Urja Rannikko161b8852009-06-05 08:47:37 +0000897 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000898 .manufacture_id = ATMEL_ID,
899 .model_id = AT_29C020,
900 .total_size = 256,
901 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +0000902 .feature_bits = FEATURE_LONG_RESET,
903 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000904 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +0000905 .probe_timing = 10000, /* 10ms */
Sean Nelson89187292009-12-23 12:02:55 +0000906 .erase = NULL,
907 .block_erasers =
908 {
909 {
910 .eraseblocks = { {256 * 1024, 1} },
911 .block_erase = erase_chip_block_jedec,
912 }
913 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000914 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000915 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000916 },
917
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000918 {
919 .vendor = "Atmel",
920 .name = "AT29C040A",
Urja Rannikko161b8852009-06-05 08:47:37 +0000921 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000922 .manufacture_id = ATMEL_ID,
923 .model_id = AT_29C040A,
924 .total_size = 512,
925 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +0000926 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000927 .tested = TEST_UNTESTED,
928 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +0000929 .probe_timing = 10000, /* 10 ms */
Sean Nelson89187292009-12-23 12:02:55 +0000930 .erase = NULL,
931 .block_erasers =
932 {
933 {
934 .eraseblocks = { {512 * 1024, 1} },
935 .block_erase = erase_chip_block_jedec,
936 }
937 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000938 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000939 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000940 },
941
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000942 {
943 .vendor = "Atmel",
944 .name = "AT45CS1282",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000945 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000946 .manufacture_id = ATMEL_ID,
947 .model_id = AT_45CS1282,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000948 .total_size = 16896 /* No power of two sizes */,
949 .page_size = 1056 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000950 .tested = TEST_BAD_READ,
951 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000952 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000953 .erase = NULL,
954 .write = NULL /* Incompatible Page write */,
955 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000956 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000957
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000958 {
959 .vendor = "Atmel",
960 .name = "AT45DB011D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000961 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000962 .manufacture_id = ATMEL_ID,
963 .model_id = AT_45DB011D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000964 .total_size = 128 /* Size can only be determined from status register */,
965 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000966 .tested = TEST_BAD_READ,
967 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000968 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000969 .erase = NULL,
970 .write = NULL,
971 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000972 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000973
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000974 {
975 .vendor = "Atmel",
976 .name = "AT45DB021D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000977 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000978 .manufacture_id = ATMEL_ID,
979 .model_id = AT_45DB021D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000980 .total_size = 256 /* Size can only be determined from status register */,
981 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000982 .tested = TEST_BAD_READ,
983 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000984 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000985 .erase = NULL,
986 .write = NULL,
987 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000988 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000989
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000990 {
991 .vendor = "Atmel",
992 .name = "AT45DB041D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000993 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000994 .manufacture_id = ATMEL_ID,
995 .model_id = AT_45DB041D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000996 .total_size = 512 /* Size can only be determined from status register */,
997 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000998 .tested = TEST_BAD_READ,
999 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001000 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001001 .erase = NULL,
1002 .write = NULL,
1003 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001004 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001005
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001006 {
1007 .vendor = "Atmel",
1008 .name = "AT45DB081D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001009 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001010 .manufacture_id = ATMEL_ID,
1011 .model_id = AT_45DB081D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001012 .total_size = 1024 /* Size can only be determined from status register */,
1013 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001014 .tested = TEST_BAD_READ,
1015 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001016 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001017 .erase = NULL,
1018 .write = NULL,
1019 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001020 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001021
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001022 {
1023 .vendor = "Atmel",
1024 .name = "AT45DB161D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001025 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001026 .manufacture_id = ATMEL_ID,
1027 .model_id = AT_45DB161D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001028 .total_size = 2048 /* Size can only be determined from status register */,
1029 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001030 .tested = TEST_BAD_READ,
1031 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001032 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001033 .erase = NULL,
1034 .write = NULL,
1035 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001036 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001037
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001038 {
1039 .vendor = "Atmel",
1040 .name = "AT45DB321C",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001041 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001042 .manufacture_id = ATMEL_ID,
1043 .model_id = AT_45DB321C,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001044 .total_size = 4224 /* No power of two sizes */,
1045 .page_size = 528 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001046 .tested = TEST_BAD_READ,
1047 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001048 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001049 .erase = NULL,
1050 .write = NULL,
1051 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001052 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001053
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001054 {
1055 .vendor = "Atmel",
1056 .name = "AT45DB321D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001057 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001058 .manufacture_id = ATMEL_ID,
1059 .model_id = AT_45DB321D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001060 .total_size = 4096 /* Size can only be determined from status register */,
1061 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001062 .tested = TEST_BAD_READ,
1063 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001064 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001065 .erase = NULL,
1066 .write = NULL,
1067 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001068 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001069
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001070 {
1071 .vendor = "Atmel",
1072 .name = "AT45DB642D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001073 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001074 .manufacture_id = ATMEL_ID,
1075 .model_id = AT_45DB642D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001076 .total_size = 8192 /* Size can only be determined from status register */,
1077 .page_size = 1024 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001078 .tested = TEST_BAD_READ,
1079 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001080 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001081 .erase = NULL,
1082 .write = NULL,
1083 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001084 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001085
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001086 {
1087 .vendor = "Atmel",
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001088 .name = "AT49BV512",
Urja Rannikko161b8852009-06-05 08:47:37 +00001089 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001090 .manufacture_id = ATMEL_ID,
1091 .model_id = AT_49BV512,
1092 .total_size = 64,
1093 .page_size = 64,
Sean Nelson35727f72010-01-28 23:55:12 +00001094 .feature_bits = FEATURE_EITHER_RESET,
1095 .tested = TEST_UNTESTED,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001096 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001097 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001098 .erase = NULL,
1099 .block_erasers =
1100 {
1101 {
1102 .eraseblocks = { {64 * 1024, 1} },
1103 .block_erase = erase_chip_block_jedec,
1104 }
1105 },
Sean Nelson35727f72010-01-28 23:55:12 +00001106 .write = write_jedec_1,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001107 .read = read_memmapped,
1108 },
1109
1110 {
1111 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001112 .name = "AT49F002(N)",
Urja Rannikko161b8852009-06-05 08:47:37 +00001113 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001114 .manufacture_id = ATMEL_ID,
1115 .model_id = AT_49F002N,
1116 .total_size = 256,
1117 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001118 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001119 .tested = TEST_UNTESTED,
1120 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001121 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001122 .erase = NULL,
1123 .block_erasers =
1124 {
1125 {
1126 .eraseblocks = {
1127 {16 * 1024, 1},
1128 {8 * 1024, 2},
1129 {96 * 1024, 1},
1130 {128 * 1024, 1},
1131 },
1132 .block_erase = erase_sector_jedec,
1133 }, {
1134 .eraseblocks = { {256 * 1024, 1} },
1135 .block_erase = erase_chip_block_jedec,
1136 }
1137 },
Sean Nelson35727f72010-01-28 23:55:12 +00001138 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001139 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001140 },
1141
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001142 {
1143 .vendor = "Atmel",
1144 .name = "AT49F002(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00001145 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001146 .manufacture_id = ATMEL_ID,
1147 .model_id = AT_49F002NT,
1148 .total_size = 256,
1149 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001150 .feature_bits = FEATURE_EITHER_RESET,
1151 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001152 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001153 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001154 .erase = NULL,
1155 .block_erasers =
1156 {
1157 {
1158 .eraseblocks = {
1159 {128 * 1024, 1},
1160 {96 * 1024, 1},
1161 {8 * 1024, 2},
1162 {16 * 1024, 1},
1163 },
1164 .block_erase = erase_sector_jedec,
1165 }, {
1166 .eraseblocks = { {256 * 1024, 1} },
1167 .block_erase = erase_chip_block_jedec,
1168 }
1169 },
Sean Nelson35727f72010-01-28 23:55:12 +00001170 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001171 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001172 },
1173
Sean Nelson54596372010-01-09 05:30:14 +00001174 /* The next two chip definitions have top/bottom boot blocks, but has no
1175 device differenciation between the two */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001176 {
1177 .vendor = "AMIC",
Sean Nelson54596372010-01-09 05:30:14 +00001178 .name = "A25L40PT",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001179 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001180 .manufacture_id = AMIC_ID,
1181 .model_id = AMIC_A25L40P,
1182 .total_size = 512,
1183 .page_size = 256,
Sean Nelson54596372010-01-09 05:30:14 +00001184 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001185 .probe = probe_spi_rdid4,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001186 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001187 .erase = NULL,
1188 .block_erasers =
1189 {
1190 {
1191 .eraseblocks = {
1192 {64 * 1024, 7},
1193 {32 * 1024, 1},
1194 {16 * 1024, 1},
1195 {8 * 1024, 1},
1196 {4 * 1024, 2},
1197 },
1198 .block_erase = spi_block_erase_d8,
1199 }, {
Sean Nelson2aff7aa2010-01-18 08:24:02 +00001200 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson54596372010-01-09 05:30:14 +00001201 .block_erase = spi_block_erase_c7,
1202 }
1203 },
1204 .write = spi_chip_write_256,
1205 .read = spi_chip_read,
1206 },
1207
1208 {
1209 .vendor = "AMIC",
1210 .name = "A25L40PU",
1211 .bustype = CHIP_BUSTYPE_SPI,
1212 .manufacture_id = AMIC_ID,
1213 .model_id = AMIC_A25L40P,
1214 .total_size = 512,
1215 .page_size = 256,
1216 .tested = TEST_OK_PRW,
1217 .probe = probe_spi_rdid4,
1218 .probe_timing = TIMING_ZERO,
1219 .erase = NULL,
1220 .block_erasers =
1221 {
1222 {
1223 .eraseblocks = {
1224 {4 * 1024, 2},
1225 {8 * 1024, 1},
1226 {16 * 1024, 1},
1227 {32 * 1024, 1},
1228 {64 * 1024, 7},
1229 },
1230 .block_erase = spi_block_erase_d8,
1231 }, {
Sean Nelson2aff7aa2010-01-18 08:24:02 +00001232 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson54596372010-01-09 05:30:14 +00001233 .block_erase = spi_block_erase_c7,
1234 }
1235 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001236 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001237 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001238 },
1239
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001240 {
1241 .vendor = "AMIC",
1242 .name = "A29002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00001243 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001244 .manufacture_id = AMIC_ID_NOPREFIX,
1245 .model_id = AMIC_A29002B,
1246 .total_size = 256,
1247 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001248 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001249 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00001250 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001251 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001252 .erase = NULL,
1253 .block_erasers =
1254 {
1255 {
1256 .eraseblocks = {
1257 {16 * 1024, 1},
1258 {8 * 1024, 2},
1259 {32 * 1024, 1},
1260 {64 * 1024, 3},
1261 },
Sean Nelson35727f72010-01-28 23:55:12 +00001262 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001263 }, {
1264 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00001265 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001266 },
1267 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00001268 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001269 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001270 },
1271
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001272 {
1273 .vendor = "AMIC",
1274 .name = "A29002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00001275 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001276 .manufacture_id = AMIC_ID_NOPREFIX,
1277 .model_id = AMIC_A29002T,
1278 .total_size = 256,
1279 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001280 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
1281 .tested = TEST_UNTESTED,
1282 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001283 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001284 .erase = NULL,
1285 .block_erasers =
1286 {
1287 {
1288 .eraseblocks = {
1289 {64 * 1024, 3},
1290 {32 * 1024, 1},
1291 {8 * 1024, 2},
1292 {16 * 1024, 1},
1293 },
Sean Nelson35727f72010-01-28 23:55:12 +00001294 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001295 }, {
1296 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00001297 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001298 },
1299 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00001300 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001301 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001302 },
1303
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001304 {
1305 .vendor = "AMIC",
1306 .name = "A29040B",
Urja Rannikko161b8852009-06-05 08:47:37 +00001307 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001308 .manufacture_id = AMIC_ID_NOPREFIX,
1309 .model_id = AMIC_A29040B,
1310 .total_size = 512,
1311 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001312 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
1313 .tested = TEST_UNTESTED,
1314 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001315 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +00001316 .erase = NULL,
1317 .block_erasers =
1318 {
1319 {
1320 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +00001321 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00001322 }, {
1323 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00001324 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00001325 },
1326 },
Sean Nelson35727f72010-01-28 23:55:12 +00001327 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001328 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001329 },
1330
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001331 {
1332 .vendor = "AMIC",
1333 .name = "A49LF040A",
Urja Rannikko161b8852009-06-05 08:47:37 +00001334 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001335 .manufacture_id = AMIC_ID_NOPREFIX,
1336 .model_id = AMIC_A49LF040A,
1337 .total_size = 512,
1338 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001339 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
1340 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00001341 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001342 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson54596372010-01-09 05:30:14 +00001343 .erase = NULL,
1344 .block_erasers =
1345 {
1346 {
1347 .eraseblocks = { {64 * 1024, 8} },
1348 .block_erase = erase_block_jedec,
1349 }, {
1350 .eraseblocks = { {512 * 1024, 1} },
1351 .block_erase = erase_chip_block_jedec,
1352 }
1353 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001354 .write = write_49fl00x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001355 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001356 },
1357
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001358 {
1359 .vendor = "EMST",
1360 .name = "F49B002UA",
Urja Rannikko161b8852009-06-05 08:47:37 +00001361 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001362 .manufacture_id = EMST_ID,
1363 .model_id = EMST_F49B002UA,
1364 .total_size = 256,
1365 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00001366 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001367 .tested = TEST_UNTESTED,
1368 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001369 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00001370 .erase = NULL,
1371 .block_erasers =
1372 {
1373 {
1374 .eraseblocks = {
1375 {128 * 1024, 1},
1376 {96 * 1024, 1},
1377 {8 * 1024, 2},
1378 {16 * 1024, 1},
1379 },
1380 .block_erase = erase_sector_jedec,
1381 }, {
1382 .eraseblocks = { {256 * 1024, 1} },
1383 .block_erase = erase_chip_block_jedec,
1384 }
1385 },
Sean Nelson35727f72010-01-28 23:55:12 +00001386 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001387 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001388 },
1389
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001390 {
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001391 .vendor = "Eon",
1392 .name = "EN25B05",
1393 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001394 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001395 .model_id = EN_25B05,
1396 .total_size = 64,
1397 .page_size = 256,
1398 .tested = TEST_UNTESTED,
1399 .probe = probe_spi_rdid,
1400 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001401 .erase = NULL,
1402 .block_erasers =
1403 {
1404 {
1405 .eraseblocks = {
1406 {4 * 1024, 2},
1407 {8 * 1024, 1},
1408 {16 * 1024, 1},
1409 {32 * 1024, 1},
1410 },
1411 .block_erase = spi_block_erase_d8,
1412 }, {
1413 .eraseblocks = { {64 * 1024, 1} },
1414 .block_erase = spi_block_erase_c7,
1415 }
1416 },
1417 .write = spi_chip_write_256,
1418 .read = spi_chip_read,
1419 },
1420
1421 {
1422 .vendor = "Eon",
1423 .name = "EN25B05T",
1424 .bustype = CHIP_BUSTYPE_SPI,
1425 .manufacture_id = EON_ID_NOPREFIX,
1426 .model_id = EN_25B05,
1427 .total_size = 64,
1428 .page_size = 256,
1429 .tested = TEST_UNTESTED,
1430 .probe = probe_spi_rdid,
1431 .probe_timing = TIMING_ZERO,
1432 .erase = NULL,
1433 .block_erasers =
1434 {
1435 {
1436 .eraseblocks = {
1437 {32 * 1024, 1},
1438 {16 * 1024, 1},
1439 {8 * 1024, 1},
1440 {4 * 1024, 2},
1441 },
1442 .block_erase = spi_block_erase_d8,
1443 }, {
1444 .eraseblocks = { {64 * 1024, 1} },
1445 .block_erase = spi_block_erase_c7,
1446 }
1447 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001448 .write = spi_chip_write_256,
1449 .read = spi_chip_read,
1450 },
1451
1452 {
1453 .vendor = "Eon",
1454 .name = "EN25B10",
1455 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001456 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001457 .model_id = EN_25B10,
1458 .total_size = 128,
1459 .page_size = 256,
1460 .tested = TEST_UNTESTED,
1461 .probe = probe_spi_rdid,
1462 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001463 .erase = NULL,
1464 .block_erasers =
1465 {
1466 {
1467 .eraseblocks = {
1468 {4 * 1024, 2},
1469 {8 * 1024, 1},
1470 {16 * 1024, 1},
1471 {32 * 1024, 3},
1472 },
1473 .block_erase = spi_block_erase_d8,
1474 }, {
1475 .eraseblocks = { {128 * 1024, 1} },
1476 .block_erase = spi_block_erase_c7,
1477 }
1478 },
1479 .write = spi_chip_write_256,
1480 .read = spi_chip_read,
1481 },
1482
1483 {
1484 .vendor = "Eon",
1485 .name = "EN25B10T",
1486 .bustype = CHIP_BUSTYPE_SPI,
1487 .manufacture_id = EON_ID_NOPREFIX,
1488 .model_id = EN_25B10,
1489 .total_size = 128,
1490 .page_size = 256,
1491 .tested = TEST_UNTESTED,
1492 .probe = probe_spi_rdid,
1493 .probe_timing = TIMING_ZERO,
1494 .erase = NULL,
1495 .block_erasers =
1496 {
1497 {
1498 .eraseblocks = {
1499 {32 * 1024, 3},
1500 {16 * 1024, 1},
1501 {8 * 1024, 1},
1502 {4 * 1024, 2},
1503 },
1504 .block_erase = spi_block_erase_d8,
1505 }, {
1506 .eraseblocks = { {128 * 1024, 1} },
1507 .block_erase = spi_block_erase_c7,
1508 }
1509 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001510 .write = spi_chip_write_256,
1511 .read = spi_chip_read,
1512 },
1513
1514 {
1515 .vendor = "Eon",
1516 .name = "EN25B20",
1517 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001518 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001519 .model_id = EN_25B20,
1520 .total_size = 256,
1521 .page_size = 256,
1522 .tested = TEST_UNTESTED,
1523 .probe = probe_spi_rdid,
1524 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001525 .erase = NULL,
1526 .block_erasers =
1527 {
1528 {
1529 .eraseblocks = {
1530 {4 * 1024, 2},
1531 {8 * 1024, 1},
1532 {16 * 1024, 1},
1533 {32 * 1024, 1},
1534 {64 * 1024, 3}
1535 },
1536 .block_erase = spi_block_erase_d8,
1537 }, {
1538 .eraseblocks = { {256 * 1024, 1} },
1539 .block_erase = spi_block_erase_c7,
1540 }
1541 },
1542 .write = spi_chip_write_256,
1543 .read = spi_chip_read,
1544 },
1545
1546 {
1547 .vendor = "Eon",
1548 .name = "EN25B20T",
1549 .bustype = CHIP_BUSTYPE_SPI,
1550 .manufacture_id = EON_ID_NOPREFIX,
1551 .model_id = EN_25B20,
1552 .total_size = 256,
1553 .page_size = 256,
1554 .tested = TEST_UNTESTED,
1555 .probe = probe_spi_rdid,
1556 .probe_timing = TIMING_ZERO,
1557 .erase = NULL,
1558 .block_erasers =
1559 {
1560 {
1561 .eraseblocks = {
1562 {64 * 1024, 3},
1563 {32 * 1024, 1},
1564 {16 * 1024, 1},
1565 {8 * 1024, 1},
1566 {4 * 1024, 2},
1567 },
1568 .block_erase = spi_block_erase_d8,
1569 }, {
1570 .eraseblocks = { {256 * 1024, 1} },
1571 .block_erase = spi_block_erase_c7,
1572 }
1573 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001574 .write = spi_chip_write_256,
1575 .read = spi_chip_read,
1576 },
1577
1578 {
1579 .vendor = "Eon",
1580 .name = "EN25B40",
1581 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001582 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001583 .model_id = EN_25B40,
1584 .total_size = 512,
1585 .page_size = 256,
1586 .tested = TEST_UNTESTED,
1587 .probe = probe_spi_rdid,
1588 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001589 .erase = NULL,
1590 .block_erasers =
1591 {
1592 {
1593 .eraseblocks = {
1594 {4 * 1024, 2},
1595 {8 * 1024, 1},
1596 {16 * 1024, 1},
1597 {32 * 1024, 1},
1598 {64 * 1024, 7}
1599 },
1600 .block_erase = spi_block_erase_d8,
1601 }, {
1602 .eraseblocks = { {512 * 1024, 1} },
1603 .block_erase = spi_block_erase_c7,
1604 }
1605 },
1606 .write = spi_chip_write_256,
1607 .read = spi_chip_read,
1608 },
1609
1610 {
1611 .vendor = "Eon",
1612 .name = "EN25B40T",
1613 .bustype = CHIP_BUSTYPE_SPI,
1614 .manufacture_id = EON_ID_NOPREFIX,
1615 .model_id = EN_25B40,
1616 .total_size = 512,
1617 .page_size = 256,
1618 .tested = TEST_UNTESTED,
1619 .probe = probe_spi_rdid,
1620 .probe_timing = TIMING_ZERO,
1621 .erase = NULL,
1622 .block_erasers =
1623 {
1624 {
1625 .eraseblocks = {
1626 {64 * 1024, 7},
1627 {32 * 1024, 1},
1628 {16 * 1024, 1},
1629 {8 * 1024, 1},
1630 {4 * 1024, 2},
1631 },
1632 .block_erase = spi_block_erase_d8,
1633 }, {
1634 .eraseblocks = { {512 * 1024, 1} },
1635 .block_erase = spi_block_erase_c7,
1636 }
1637 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001638 .write = spi_chip_write_256,
1639 .read = spi_chip_read,
1640 },
1641
1642 {
1643 .vendor = "Eon",
1644 .name = "EN25B80",
1645 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001646 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001647 .model_id = EN_25B80,
1648 .total_size = 1024,
1649 .page_size = 256,
1650 .tested = TEST_UNTESTED,
1651 .probe = probe_spi_rdid,
1652 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001653 .erase = NULL,
1654 .block_erasers =
1655 {
1656 {
1657 .eraseblocks = {
1658 {4 * 1024, 2},
1659 {8 * 1024, 1},
1660 {16 * 1024, 1},
1661 {32 * 1024, 1},
1662 {64 * 1024, 15}
1663 },
1664 .block_erase = spi_block_erase_d8,
1665 }, {
1666 .eraseblocks = { {1024 * 1024, 1} },
1667 .block_erase = spi_block_erase_c7,
1668 }
1669 },
1670 .write = spi_chip_write_256,
1671 .read = spi_chip_read,
1672 },
1673
1674 {
1675 .vendor = "Eon",
1676 .name = "EN25B80T",
1677 .bustype = CHIP_BUSTYPE_SPI,
1678 .manufacture_id = EON_ID_NOPREFIX,
1679 .model_id = EN_25B80,
1680 .total_size = 1024,
1681 .page_size = 256,
1682 .tested = TEST_UNTESTED,
1683 .probe = probe_spi_rdid,
1684 .probe_timing = TIMING_ZERO,
1685 .erase = NULL,
1686 .block_erasers =
1687 {
1688 {
1689 .eraseblocks = {
1690 {64 * 1024, 15},
1691 {32 * 1024, 1},
1692 {16 * 1024, 1},
1693 {8 * 1024, 1},
1694 {4 * 1024, 2},
1695 },
1696 .block_erase = spi_block_erase_d8,
1697 }, {
1698 .eraseblocks = { {1024 * 1024, 1} },
1699 .block_erase = spi_block_erase_c7,
1700 }
1701 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001702 .write = spi_chip_write_256,
1703 .read = spi_chip_read,
1704 },
1705
1706 {
1707 .vendor = "Eon",
1708 .name = "EN25B16",
1709 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001710 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001711 .model_id = EN_25B16,
1712 .total_size = 2048,
1713 .page_size = 256,
1714 .tested = TEST_UNTESTED,
1715 .probe = probe_spi_rdid,
1716 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001717 .erase = NULL,
1718 .block_erasers =
1719 {
1720 {
1721 .eraseblocks = {
1722 {4 * 1024, 2},
1723 {8 * 1024, 1},
1724 {16 * 1024, 1},
1725 {32 * 1024, 1},
1726 {64 * 1024, 31},
1727 },
1728 .block_erase = spi_block_erase_d8,
1729 }, {
1730 .eraseblocks = { {2 * 1024 * 1024, 1} },
1731 .block_erase = spi_block_erase_c7,
1732 }
1733 },
1734 .write = spi_chip_write_256,
1735 .read = spi_chip_read,
1736 },
1737
1738 {
1739 .vendor = "Eon",
1740 .name = "EN25B16T",
1741 .bustype = CHIP_BUSTYPE_SPI,
1742 .manufacture_id = EON_ID_NOPREFIX,
1743 .model_id = EN_25B16,
1744 .total_size = 2048,
1745 .page_size = 256,
1746 .tested = TEST_UNTESTED,
1747 .probe = probe_spi_rdid,
1748 .probe_timing = TIMING_ZERO,
1749 .erase = NULL,
1750 .block_erasers =
1751 {
1752 {
1753 .eraseblocks = {
1754 {64 * 1024, 31},
1755 {32 * 1024, 1},
1756 {16 * 1024, 1},
1757 {8 * 1024, 1},
1758 {4 * 1024, 2},
1759 },
1760 .block_erase = spi_block_erase_d8,
1761 }, {
1762 .eraseblocks = { {2 * 1024 * 1024, 1} },
1763 .block_erase = spi_block_erase_c7,
1764 }
1765 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001766 .write = spi_chip_write_256,
1767 .read = spi_chip_read,
1768 },
1769
1770 {
1771 .vendor = "Eon",
1772 .name = "EN25B32",
1773 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001774 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001775 .model_id = EN_25B32,
1776 .total_size = 4096,
1777 .page_size = 256,
1778 .tested = TEST_UNTESTED,
1779 .probe = probe_spi_rdid,
1780 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001781 .erase = NULL,
1782 .block_erasers =
1783 {
1784 {
1785 .eraseblocks = {
1786 {4 * 1024, 2},
1787 {8 * 1024, 1},
1788 {16 * 1024, 1},
1789 {32 * 1024, 1},
1790 {64 * 1024, 63},
1791 },
1792 .block_erase = spi_block_erase_d8,
1793 }, {
1794 .eraseblocks = { {4 * 1024 * 1024, 1} },
1795 .block_erase = spi_block_erase_c7,
1796 }
1797 },
1798 .write = spi_chip_write_256,
1799 .read = spi_chip_read,
1800 },
1801
1802 {
1803 .vendor = "Eon",
1804 .name = "EN25B32T",
1805 .bustype = CHIP_BUSTYPE_SPI,
1806 .manufacture_id = EON_ID_NOPREFIX,
1807 .model_id = EN_25B32,
1808 .total_size = 4096,
1809 .page_size = 256,
1810 .tested = TEST_UNTESTED,
1811 .probe = probe_spi_rdid,
1812 .probe_timing = TIMING_ZERO,
1813 .erase = NULL,
1814 .block_erasers =
1815 {
1816 {
1817 .eraseblocks = {
1818 {64 * 1024, 63},
1819 {32 * 1024, 1},
1820 {16 * 1024, 1},
1821 {8 * 1024, 1},
1822 {4 * 1024, 2},
1823 },
1824 .block_erase = spi_block_erase_d8,
1825 }, {
1826 .eraseblocks = { {4 * 1024 * 1024, 1} },
1827 .block_erase = spi_block_erase_c7,
1828 }
1829 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001830 .write = spi_chip_write_256,
1831 .read = spi_chip_read,
1832 },
1833
1834 {
1835 .vendor = "Eon",
1836 .name = "EN25B64",
1837 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001838 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001839 .model_id = EN_25B64,
1840 .total_size = 8192,
1841 .page_size = 256,
1842 .tested = TEST_UNTESTED,
1843 .probe = probe_spi_rdid,
1844 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001845 .erase = NULL,
1846 .block_erasers =
1847 {
1848 {
1849 .eraseblocks = {
1850 {4 * 1024, 2},
1851 {8 * 1024, 1},
1852 {16 * 1024, 1},
1853 {32 * 1024, 1},
1854 {64 * 1024, 127},
1855 },
1856 .block_erase = spi_block_erase_d8,
1857 }, {
1858 .eraseblocks = { {8 * 1024 * 1024, 1} },
1859 .block_erase = spi_block_erase_c7,
1860 }
1861 },
1862 .write = spi_chip_write_256,
1863 .read = spi_chip_read,
1864 },
1865
1866 {
1867 .vendor = "Eon",
1868 .name = "EN25B64T",
1869 .bustype = CHIP_BUSTYPE_SPI,
1870 .manufacture_id = EON_ID_NOPREFIX,
1871 .model_id = EN_25B64,
1872 .total_size = 8192,
1873 .page_size = 256,
1874 .tested = TEST_UNTESTED,
1875 .probe = probe_spi_rdid,
1876 .probe_timing = TIMING_ZERO,
1877 .erase = NULL,
1878 .block_erasers =
1879 {
1880 {
1881 .eraseblocks = {
1882 {64 * 1024, 127},
1883 {32 * 1024, 1},
1884 {16 * 1024, 1},
1885 {8 * 1024, 1},
1886 {4 * 1024, 2},
1887 },
1888 .block_erase = spi_block_erase_d8,
1889 }, {
1890 .eraseblocks = { {8 * 1024 * 1024, 1} },
1891 .block_erase = spi_block_erase_c7,
1892 }
1893 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001894 .write = spi_chip_write_256,
1895 .read = spi_chip_read,
1896 },
1897
1898 {
1899 .vendor = "Eon",
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001900 .name = "EN25D16",
1901 .bustype = CHIP_BUSTYPE_SPI,
1902 .manufacture_id = EON_ID_NOPREFIX,
1903 .model_id = EN_25D16,
1904 .total_size = 2048,
1905 .page_size = 256,
1906 .tested = TEST_UNTESTED,
1907 .probe = probe_spi_rdid,
1908 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001909 .erase = NULL,
1910 .block_erasers =
1911 {
1912 {
1913 .eraseblocks = { {4 * 1024, 512} },
1914 .block_erase = spi_block_erase_20,
1915 }, {
1916 .eraseblocks = { {64 * 1024, 32} },
1917 .block_erase = spi_block_erase_d8,
1918 }, {
1919 .eraseblocks = { {64 * 1024, 32} },
1920 .block_erase = spi_block_erase_52,
1921 }, {
1922 .eraseblocks = { {2 * 1024 * 1024, 1} },
1923 .block_erase = spi_block_erase_60,
1924 }, {
1925 .eraseblocks = { {2 * 1024 * 1024, 1} },
1926 .block_erase = spi_block_erase_c7,
1927 }
1928 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001929 .write = spi_chip_write_256,
1930 .read = spi_chip_read,
1931 },
1932
1933 {
1934 .vendor = "Eon",
1935 .name = "EN25F05",
1936 .bustype = CHIP_BUSTYPE_SPI,
1937 .manufacture_id = EON_ID_NOPREFIX,
1938 .model_id = EN_25F05,
1939 .total_size = 64,
1940 .page_size = 256,
1941 .tested = TEST_UNTESTED,
1942 .probe = probe_spi_rdid,
1943 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001944 .erase = NULL,
1945 .block_erasers =
1946 {
1947 {
1948 .eraseblocks = { {4 * 1024, 16} },
1949 .block_erase = spi_block_erase_20,
1950 }, {
1951 .eraseblocks = { {32 * 1024, 2} },
1952 .block_erase = spi_block_erase_d8,
1953 }, {
1954 .eraseblocks = { {32 * 1024, 2} },
1955 .block_erase = spi_block_erase_52,
1956 }, {
1957 .eraseblocks = { {64 * 1024, 1} },
1958 .block_erase = spi_block_erase_60,
1959 }, {
1960 .eraseblocks = { {64 * 1024, 1} },
1961 .block_erase = spi_block_erase_c7,
1962 }
1963 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001964 .write = spi_chip_write_256,
1965 .read = spi_chip_read,
1966 },
1967
1968 {
1969 .vendor = "Eon",
1970 .name = "EN25F10",
1971 .bustype = CHIP_BUSTYPE_SPI,
1972 .manufacture_id = EON_ID_NOPREFIX,
1973 .model_id = EN_25F10,
1974 .total_size = 128,
1975 .page_size = 256,
1976 .tested = TEST_UNTESTED,
1977 .probe = probe_spi_rdid,
1978 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001979 .erase = NULL,
1980 .block_erasers =
1981 {
1982 {
1983 .eraseblocks = { {4 * 1024, 32} },
1984 .block_erase = spi_block_erase_20,
1985 }, {
1986 .eraseblocks = { {32 * 1024, 4} },
1987 .block_erase = spi_block_erase_d8,
1988 }, {
1989 .eraseblocks = { {32 * 1024, 4} },
1990 .block_erase = spi_block_erase_52,
1991 }, {
1992 .eraseblocks = { {128 * 1024, 1} },
1993 .block_erase = spi_block_erase_60,
1994 }, {
1995 .eraseblocks = { {128 * 1024, 1} },
1996 .block_erase = spi_block_erase_c7,
1997 }
1998 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001999 .write = spi_chip_write_256,
2000 .read = spi_chip_read,
2001 },
2002
2003 {
2004 .vendor = "Eon",
2005 .name = "EN25F20",
2006 .bustype = CHIP_BUSTYPE_SPI,
2007 .manufacture_id = EON_ID_NOPREFIX,
2008 .model_id = EN_25F20,
2009 .total_size = 256,
2010 .page_size = 256,
2011 .tested = TEST_UNTESTED,
2012 .probe = probe_spi_rdid,
2013 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002014 .erase = NULL,
2015 .block_erasers =
2016 {
2017 {
2018 .eraseblocks = { {4 * 1024, 64} },
2019 .block_erase = spi_block_erase_20,
2020 }, {
2021 .eraseblocks = { {64 * 1024, 4} },
2022 .block_erase = spi_block_erase_d8,
2023 }, {
2024 .eraseblocks = { {64 * 1024, 4} },
2025 .block_erase = spi_block_erase_52,
2026 }, {
2027 .eraseblocks = { {256 * 1024, 1} },
2028 .block_erase = spi_block_erase_60,
2029 }, {
2030 .eraseblocks = { {256 * 1024, 1} },
2031 .block_erase = spi_block_erase_c7,
2032 }
2033 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002034 .write = spi_chip_write_256,
2035 .read = spi_chip_read,
2036 },
2037
2038 {
2039 .vendor = "Eon",
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002040 .name = "EN25F40",
2041 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002042 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002043 .model_id = EN_25F40,
2044 .total_size = 512,
2045 .page_size = 256,
Carl-Daniel Hailfingerfaaa2b22009-06-22 10:06:28 +00002046 .tested = TEST_OK_PROBE,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002047 .probe = probe_spi_rdid,
2048 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002049 .erase = NULL,
2050 .block_erasers =
2051 {
2052 {
Sean Nelson54596372010-01-09 05:30:14 +00002053 .eraseblocks = { {4 * 1024, 128} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002054 .block_erase = spi_block_erase_20,
2055 }, {
Sean Nelson54596372010-01-09 05:30:14 +00002056 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002057 .block_erase = spi_block_erase_d8,
2058 }, {
Sean Nelson54596372010-01-09 05:30:14 +00002059 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002060 .block_erase = spi_block_erase_60,
2061 }, {
Sean Nelson54596372010-01-09 05:30:14 +00002062 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002063 .block_erase = spi_block_erase_c7,
2064 },
2065 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002066 .write = spi_chip_write_256,
2067 .read = spi_chip_read,
2068 },
2069
2070 {
2071 .vendor = "Eon",
2072 .name = "EN25F80",
2073 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002074 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002075 .model_id = EN_25F80,
2076 .total_size = 1024,
2077 .page_size = 256,
2078 .tested = TEST_UNTESTED,
2079 .probe = probe_spi_rdid,
2080 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002081 .erase = NULL,
2082 .block_erasers =
2083 {
2084 {
2085 .eraseblocks = { {4 * 1024, 256} },
2086 .block_erase = spi_block_erase_20,
2087 }, {
2088 .eraseblocks = { {64 * 1024, 16} },
2089 .block_erase = spi_block_erase_d8,
2090 }, {
2091 .eraseblocks = { {1024 * 1024, 1} },
2092 .block_erase = spi_block_erase_60,
2093 }, {
2094 .eraseblocks = { {1024 * 1024, 1} },
2095 .block_erase = spi_block_erase_c7,
2096 }
2097 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002098 .write = spi_chip_write_256,
2099 .read = spi_chip_read,
2100 },
2101
2102 {
2103 .vendor = "Eon",
2104 .name = "EN25F16",
2105 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002106 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002107 .model_id = EN_25F16,
2108 .total_size = 2048,
2109 .page_size = 256,
2110 .tested = TEST_UNTESTED,
2111 .probe = probe_spi_rdid,
2112 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002113 .erase = NULL,
2114 .block_erasers =
2115 {
2116 {
2117 .eraseblocks = { {4 * 1024, 512} },
2118 .block_erase = spi_block_erase_20,
2119 }, {
2120 .eraseblocks = { {64 * 1024, 32} },
2121 .block_erase = spi_block_erase_d8,
2122 }, {
2123 .eraseblocks = { {2 * 1024 * 1024, 1} },
2124 .block_erase = spi_block_erase_60,
2125 }, {
2126 .eraseblocks = { {2 * 1024 * 1024, 1} },
2127 .block_erase = spi_block_erase_c7,
2128 }
2129 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002130 .write = spi_chip_write_256,
2131 .read = spi_chip_read,
2132 },
2133
2134 {
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002135 .vendor = "Eon",
2136 .name = "EN25F32",
2137 .bustype = CHIP_BUSTYPE_SPI,
2138 .manufacture_id = EON_ID_NOPREFIX,
2139 .model_id = EN_25F32,
2140 .total_size = 4096,
2141 .page_size = 256,
2142 .tested = TEST_UNTESTED,
2143 .probe = probe_spi_rdid,
2144 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002145 .erase = NULL,
2146 .block_erasers =
2147 {
2148 {
2149 .eraseblocks = { {4 * 1024, 1024} },
2150 .block_erase = spi_block_erase_20,
2151 }, {
2152 .eraseblocks = { {64 * 1024, 64} },
2153 .block_erase = spi_block_erase_d8,
2154 }, {
2155 .eraseblocks = { {4 * 1024 * 1024, 1} },
2156 .block_erase = spi_block_erase_60,
2157 }, {
2158 .eraseblocks = { {4 * 1024 * 1024, 1} },
2159 .block_erase = spi_block_erase_c7,
2160 }
2161 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002162 .write = spi_chip_write_256,
2163 .read = spi_chip_read,
2164 },
2165
2166 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002167 .vendor = "EON",
2168 .name = "EN29F002(A)(N)B",
Urja Rannikko161b8852009-06-05 08:47:37 +00002169 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002170 .manufacture_id = EON_ID,
2171 .model_id = EN_29F002B,
2172 .total_size = 256,
2173 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002174 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002175 .tested = TEST_UNTESTED,
2176 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002177 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002178 .erase = NULL,
2179 .block_erasers =
2180 {
2181 {
2182 .eraseblocks = {
2183 {64 * 1024, 3},
2184 {32 * 1024, 1},
2185 {8 * 1024, 2},
2186 {16 * 1024, 1},
2187 },
2188 .block_erase = erase_sector_jedec,
2189 }, {
2190 .eraseblocks = { {256 * 1024, 1} },
2191 .block_erase = erase_chip_block_jedec,
2192 },
2193 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002194 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002195 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002196 },
2197
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002198 {
2199 .vendor = "EON",
2200 .name = "EN29F002(A)(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00002201 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002202 .manufacture_id = EON_ID,
2203 .model_id = EN_29F002T,
2204 .total_size = 256,
2205 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002206 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
2207 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002208 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002209 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002210 .erase = NULL,
2211 .block_erasers =
2212 {
2213 {
2214 .eraseblocks = {
2215 {16 * 1024, 1},
2216 {8 * 1024, 2},
2217 {32 * 1024, 1},
2218 {64 * 1024, 3},
2219 },
2220 .block_erase = erase_sector_jedec,
2221 }, {
2222 .eraseblocks = { {256 * 1024, 1} },
2223 .block_erase = erase_chip_block_jedec,
2224 },
2225 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002226 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002227 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002228 },
2229
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002230 {
2231 .vendor = "Fujitsu",
2232 .name = "MBM29F004BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002233 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002234 .manufacture_id = FUJITSU_ID,
2235 .model_id = MBM29F004BC,
2236 .total_size = 512,
2237 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002238 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002239 .tested = TEST_UNTESTED,
2240 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002241 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002242 .erase = NULL,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002243 .block_erasers =
2244 {
2245 {
2246 .eraseblocks = {
2247 {16 * 1024, 1},
2248 {8 * 1024, 2},
2249 {32 * 1024, 1},
2250 {64 * 1024, 7},
2251 },
Sean Nelson35727f72010-01-28 23:55:12 +00002252 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002253 }, {
2254 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002255 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002256 },
2257 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002258 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002259 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002260 },
2261
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002262 {
2263 .vendor = "Fujitsu",
2264 .name = "MBM29F004TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002265 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002266 .manufacture_id = FUJITSU_ID,
2267 .model_id = MBM29F004TC,
2268 .total_size = 512,
2269 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002270 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002271 .tested = TEST_UNTESTED,
2272 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002273 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002274 .erase = NULL,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002275 .block_erasers =
2276 {
2277 {
2278 .eraseblocks = {
2279 {64 * 1024, 7},
2280 {32 * 1024, 1},
2281 {8 * 1024, 2},
2282 {16 * 1024, 1},
2283 },
Sean Nelson35727f72010-01-28 23:55:12 +00002284 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002285 }, {
2286 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002287 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002288 },
2289 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002290 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002291 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002292 },
2293
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002294 {
Sean Nelson35727f72010-01-28 23:55:12 +00002295 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002296 .vendor = "Fujitsu",
2297 .name = "MBM29F400BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002298 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002299 .manufacture_id = FUJITSU_ID,
2300 .model_id = MBM29F400BC,
2301 .total_size = 512,
2302 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002303 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002304 .tested = TEST_UNTESTED,
2305 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002306 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002307 .erase = NULL,
2308 .block_erasers =
2309 {
2310 {
2311 .eraseblocks = {
2312 {16 * 1024, 1},
2313 {8 * 1024, 2},
2314 {32 * 1024, 1},
2315 {64 * 1024, 7},
2316 },
2317 .block_erase = block_erase_m29f400bt,
2318 }, {
2319 .eraseblocks = { {512 * 1024, 1} },
2320 .block_erase = block_erase_chip_m29f400bt,
2321 },
2322 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002323 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002324 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002325 },
2326
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002327 {
2328 .vendor = "Fujitsu",
2329 .name = "MBM29F400TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002330 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002331 .manufacture_id = FUJITSU_ID,
2332 .model_id = MBM29F400TC,
2333 .total_size = 512,
2334 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002335 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002336 .tested = TEST_UNTESTED,
2337 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002338 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002339 .erase = NULL,
2340 .block_erasers =
2341 {
2342 {
2343 .eraseblocks = {
2344 {64 * 1024, 7},
2345 {32 * 1024, 1},
2346 {8 * 1024, 2},
2347 {16 * 1024, 1},
2348 },
2349 .block_erase = block_erase_m29f400bt,
2350 }, {
2351 .eraseblocks = { {512 * 1024, 1} },
2352 .block_erase = block_erase_chip_m29f400bt,
2353 },
2354 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002355 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002356 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002357 },
2358
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002359 {
2360 .vendor = "Intel",
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002361 .name = "28F001BX-B",
Urja Rannikko161b8852009-06-05 08:47:37 +00002362 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002363 .manufacture_id = INTEL_ID,
2364 .model_id = P28F001BXB,
2365 .total_size = 128,
2366 .page_size = 128 * 1024, /* 8k + 2x4k + 112k */
Sean Nelson35727f72010-01-28 23:55:12 +00002367 .feature_bits = 0,
Sean Nelson54596372010-01-09 05:30:14 +00002368 .tested = TEST_BAD_WRITE,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002369 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002370 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002371 .erase = NULL,
Sean Nelson54596372010-01-09 05:30:14 +00002372 .block_erasers =
2373 {
2374 {
2375 .eraseblocks = {
2376 {8 * 1024, 1},
2377 {4 * 1024, 2},
2378 {112 * 1024, 1},
2379 },
2380 .block_erase = erase_82802ab_block,
2381 },
2382 },
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002383 .write = NULL,
2384 .read = read_memmapped,
2385 },
2386
2387 {
2388 .vendor = "Intel",
2389 .name = "28F001BX-T",
Urja Rannikko161b8852009-06-05 08:47:37 +00002390 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002391 .manufacture_id = INTEL_ID,
2392 .model_id = P28F001BXT,
2393 .total_size = 128,
2394 .page_size = 128 * 1024, /* 112k + 2x4k + 8k */
Sean Nelson35727f72010-01-28 23:55:12 +00002395 .feature_bits = 0,
2396 .tested = TEST_BAD_WRITE,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002397 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002398 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002399 .erase = NULL,
Sean Nelson54596372010-01-09 05:30:14 +00002400 .block_erasers =
2401 {
2402 {
2403 .eraseblocks = {
2404 {112 * 1024, 1},
2405 {4 * 1024, 2},
2406 {8 * 1024, 1},
2407 },
2408 .block_erase = erase_82802ab_block,
2409 },
2410 },
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002411 .write = NULL,
2412 .read = read_memmapped,
2413 },
2414
2415 {
2416 .vendor = "Intel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002417 .name = "82802AB",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002418 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002419 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002420 .model_id = I_82802AB,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002421 .total_size = 512,
2422 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002423 .feature_bits = 0,
Sean Nelson54596372010-01-09 05:30:14 +00002424 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002425 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002426 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002427 .erase = NULL,
2428 .block_erasers =
2429 {
2430 {
2431 .eraseblocks = { {64 * 1024, 8} },
2432 .block_erase = erase_82802ab_block,
2433 },
2434 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002435 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002436 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002437 },
2438
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002439 {
2440 .vendor = "Intel",
2441 .name = "82802AC",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002442 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002443 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002444 .model_id = I_82802AC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002445 .total_size = 1024,
2446 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002447 .feature_bits = 0,
Sean Nelson54596372010-01-09 05:30:14 +00002448 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002449 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002450 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002451 .erase = NULL,
2452 .block_erasers =
2453 {
2454 {
2455 .eraseblocks = { {64 * 1024, 16} },
2456 .block_erase = erase_82802ab_block,
2457 },
2458 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002459 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002460 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002461 },
2462
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002463 {
2464 .vendor = "Macronix",
2465 .name = "MX25L512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002466 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002467 .manufacture_id = MX_ID,
2468 .model_id = MX_25L512,
2469 .total_size = 64,
2470 .page_size = 256,
2471 .tested = TEST_UNTESTED,
2472 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002473 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002474 .erase = NULL,
2475 .block_erasers =
2476 {
2477 {
2478 .eraseblocks = { {4 * 1024, 16} },
2479 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002480 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002481 .eraseblocks = { {64 * 1024, 1} },
2482 .block_erase = spi_block_erase_52,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002483 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002484 .eraseblocks = { {64 * 1024, 1} },
2485 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002486 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002487 .eraseblocks = { {64 * 1024, 1} },
2488 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002489 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002490 .eraseblocks = { {64 * 1024, 1} },
2491 .block_erase = spi_block_erase_c7,
2492 },
2493 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002494 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002495 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002496 },
2497
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002498 {
2499 .vendor = "Macronix",
2500 .name = "MX25L1005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002501 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002502 .manufacture_id = MX_ID,
2503 .model_id = MX_25L1005,
2504 .total_size = 128,
2505 .page_size = 256,
2506 .tested = TEST_UNTESTED,
2507 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002508 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002509 .erase = NULL,
2510 .block_erasers =
2511 {
2512 {
2513 .eraseblocks = { {4 * 1024, 32} },
2514 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002515 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002516 .eraseblocks = { {64 * 1024, 2} },
2517 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002518 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002519 .eraseblocks = { {128 * 1024, 1} },
2520 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002521 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002522 .eraseblocks = { {128 * 1024, 1} },
2523 .block_erase = spi_block_erase_c7,
2524 },
2525 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002526 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002527 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002528 },
2529
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002530 {
2531 .vendor = "Macronix",
2532 .name = "MX25L2005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002533 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002534 .manufacture_id = MX_ID,
2535 .model_id = MX_25L2005,
2536 .total_size = 256,
2537 .page_size = 256,
2538 .tested = TEST_UNTESTED,
2539 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002540 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002541 .erase = NULL,
2542 .block_erasers =
2543 {
2544 {
2545 .eraseblocks = { {4 * 1024, 64} },
2546 .block_erase = spi_block_erase_20,
2547 }, {
2548 .eraseblocks = { {64 * 1024, 4} },
2549 .block_erase = spi_block_erase_52,
2550 }, {
2551 .eraseblocks = { {64 * 1024, 4} },
2552 .block_erase = spi_block_erase_d8,
2553 }, {
2554 .eraseblocks = { {256 * 1024, 1} },
2555 .block_erase = spi_block_erase_60,
2556 }, {
2557 .eraseblocks = { {256 * 1024, 1} },
2558 .block_erase = spi_block_erase_c7,
2559 },
2560 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002561 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002562 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002563 },
2564
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002565 {
2566 .vendor = "Macronix",
2567 .name = "MX25L4005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002568 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002569 .manufacture_id = MX_ID,
2570 .model_id = MX_25L4005,
2571 .total_size = 512,
2572 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002573 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002574 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002575 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002576 .erase = NULL,
2577 .block_erasers =
2578 {
2579 {
2580 .eraseblocks = { {4 * 1024, 128} },
2581 .block_erase = spi_block_erase_20,
2582 }, {
2583 .eraseblocks = { {64 * 1024, 8} },
2584 .block_erase = spi_block_erase_52,
2585 }, {
2586 .eraseblocks = { {64 * 1024, 8} },
2587 .block_erase = spi_block_erase_d8,
2588 }, {
2589 .eraseblocks = { {512 * 1024, 1} },
2590 .block_erase = spi_block_erase_60,
2591 }, {
2592 .eraseblocks = { {512 * 1024, 1} },
2593 .block_erase = spi_block_erase_c7,
2594 },
2595 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002596 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002597 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002598 },
2599
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002600 {
2601 .vendor = "Macronix",
2602 .name = "MX25L8005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002603 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002604 .manufacture_id = MX_ID,
2605 .model_id = MX_25L8005,
2606 .total_size = 1024,
2607 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002608 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002609 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002610 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002611 .erase = NULL,
2612 .block_erasers =
2613 {
2614 {
2615 .eraseblocks = { {4 * 1024, 256} },
2616 .block_erase = spi_block_erase_20,
2617 }, {
2618 .eraseblocks = { {64 * 1024, 16} },
2619 .block_erase = spi_block_erase_52,
2620 }, {
2621 .eraseblocks = { {64 * 1024, 16} },
2622 .block_erase = spi_block_erase_d8,
2623 }, {
2624 .eraseblocks = { {1024 * 1024, 1} },
2625 .block_erase = spi_block_erase_60,
2626 }, {
2627 .eraseblocks = { {1024 * 1024, 1} },
2628 .block_erase = spi_block_erase_c7,
2629 },
2630 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002631 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002632 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002633 },
2634
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002635 {
2636 .vendor = "Macronix",
2637 .name = "MX25L1605",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002638 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002639 .manufacture_id = MX_ID,
2640 .model_id = MX_25L1605,
2641 .total_size = 2048,
2642 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002643 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002644 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002645 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002646 .erase = NULL,
2647 .block_erasers =
2648 {
2649 {
2650 .eraseblocks = { {4 * 1024, 512} },
2651 .block_erase = spi_block_erase_20, /* This erase function has 64k blocksize for eLiteFlash */
2652 }, {
2653 .eraseblocks = { {64 * 1024, 32} }, /* Not supported in MX25L1605 (eLiteFlash) and MX25L1605D */
2654 .block_erase = spi_block_erase_52,
2655 }, {
2656 .eraseblocks = { {64 * 1024, 32} },
2657 .block_erase = spi_block_erase_d8,
2658 }, {
2659 .eraseblocks = { {2 * 1024 * 1024, 1} },
2660 .block_erase = spi_block_erase_60,
2661 }, {
2662 .eraseblocks = { {2 * 1024 * 1024, 1} },
2663 .block_erase = spi_block_erase_c7,
2664 },
2665 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002666 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002667 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002668 },
2669
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002670 {
2671 .vendor = "Macronix",
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002672 .name = "MX25L1635D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002673 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002674 .manufacture_id = MX_ID,
2675 .model_id = MX_25L1635D,
2676 .total_size = 2048,
2677 .page_size = 256,
2678 .tested = TEST_UNTESTED,
2679 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002680 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002681 .erase = NULL,
2682 .block_erasers =
2683 {
2684 {
2685 .eraseblocks = { {4 * 1024, 512} },
2686 .block_erase = spi_block_erase_20,
2687 }, {
2688 .eraseblocks = { {64 * 1024, 32} },
2689 .block_erase = spi_block_erase_d8,
2690 }, {
2691 .eraseblocks = { {2 * 1024 * 1024, 1} },
2692 .block_erase = spi_block_erase_60,
2693 }, {
2694 .eraseblocks = { {2 * 1024 * 1024, 1} },
2695 .block_erase = spi_block_erase_c7,
2696 }
2697 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002698 .write = spi_chip_write_256,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002699 .read = spi_chip_read,
2700 },
Stephan Guillouxfd315502009-04-20 22:54:13 +00002701
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002702 {
2703 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002704 .name = "MX25L3205",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002705 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002706 .manufacture_id = MX_ID,
2707 .model_id = MX_25L3205,
2708 .total_size = 4096,
2709 .page_size = 256,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002710 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002711 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002712 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002713 .erase = NULL,
2714 .block_erasers =
2715 {
2716 {
2717 .eraseblocks = { {4 * 1024, 1024} },
2718 .block_erase = spi_block_erase_20,
2719 }, {
2720 .eraseblocks = { {4 * 1024, 1024} },
2721 .block_erase = spi_block_erase_d8,
2722 }, {
2723 .eraseblocks = { {4 * 1024 * 1024, 1} },
2724 .block_erase = spi_block_erase_60,
2725 }, {
2726 .eraseblocks = { {4 * 1024 * 1024, 1} },
2727 .block_erase = spi_block_erase_c7,
2728 },
2729 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002730 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002731 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002732 },
2733
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002734 {
2735 .vendor = "Macronix",
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002736 .name = "MX25L3235D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002737 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002738 .manufacture_id = MX_ID,
2739 .model_id = MX_25L3235D,
2740 .total_size = 4096,
2741 .page_size = 256,
2742 .tested = TEST_UNTESTED,
2743 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002744 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002745 .erase = NULL,
2746 .block_erasers =
2747 {
2748 {
2749 .eraseblocks = { {4 * 1024, 1024} },
2750 .block_erase = spi_block_erase_20,
2751 }, {
2752 .eraseblocks = { {64 * 1024, 64} },
2753 .block_erase = spi_block_erase_d8,
2754 }, {
2755 .eraseblocks = { {4 * 1024 * 1024, 1} },
2756 .block_erase = spi_block_erase_60,
2757 }, {
2758 .eraseblocks = { {4 * 1024 * 1024, 1} },
2759 .block_erase = spi_block_erase_c7,
2760 }
2761 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002762 .write = spi_chip_write_256,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002763 .read = spi_chip_read,
2764 },
2765
2766 {
2767 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002768 .name = "MX25L6405",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002769 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002770 .manufacture_id = MX_ID,
2771 .model_id = MX_25L6405,
2772 .total_size = 8192,
2773 .page_size = 256,
Carl-Daniel Hailfinger452b3e32009-06-22 11:14:43 +00002774 .tested = TEST_OK_PROBE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002775 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002776 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002777 .erase = NULL,
2778 .block_erasers =
2779 {
2780 {
2781 .eraseblocks = { {64 * 1024, 128} },
2782 .block_erase = spi_block_erase_20,
2783 }, {
2784 .eraseblocks = { {64 * 1024, 128} },
2785 .block_erase = spi_block_erase_d8,
2786 }, {
2787 .eraseblocks = { {8 * 1024 * 1024, 1} },
2788 .block_erase = spi_block_erase_60,
2789 }, {
2790 .eraseblocks = { {8 * 1024 * 1024, 1} },
2791 .block_erase = spi_block_erase_c7,
2792 }
2793 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002794 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002795 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002796 },
2797
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002798 {
2799 .vendor = "Macronix",
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002800 .name = "MX25L12805",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002801 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002802 .manufacture_id = MX_ID,
2803 .model_id = MX_25L12805,
2804 .total_size = 16384,
2805 .page_size = 256,
2806 .tested = TEST_UNTESTED,
2807 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002808 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002809 .erase = NULL,
2810 .block_erasers =
2811 {
2812 {
2813 .eraseblocks = { {4 * 1024, 4096} },
2814 .block_erase = spi_block_erase_20,
2815 }, {
2816 .eraseblocks = { {64 * 1024, 256} },
2817 .block_erase = spi_block_erase_d8,
2818 }, {
2819 .eraseblocks = { {16 * 1024 * 1024, 1} },
2820 .block_erase = spi_block_erase_60,
2821 }, {
2822 .eraseblocks = { {16 * 1024 * 1024, 1} },
2823 .block_erase = spi_block_erase_c7,
2824 }
2825 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002826 .write = spi_chip_write_256,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002827 .read = spi_chip_read,
2828 },
2829
2830 {
2831 .vendor = "Macronix",
Mark Panajotovic502a9132009-08-24 01:42:24 +00002832 .name = "MX29F001B",
2833 .bustype = CHIP_BUSTYPE_PARALLEL,
2834 .manufacture_id = MX_ID,
2835 .model_id = MX_29F001B,
2836 .total_size = 128,
2837 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002838 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2839 .tested = TEST_UNTESTED,
2840 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002841 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002842 .erase = NULL,
2843 .block_erasers =
2844 {
2845 {
2846 .eraseblocks = {
2847 {8 * 1024, 1},
2848 {4 * 1024, 2},
2849 {8 * 1024, 2},
2850 {32 * 1024, 1},
2851 {64 * 1024, 1},
2852 },
Sean Nelson35727f72010-01-28 23:55:12 +00002853 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002854 }, {
2855 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002856 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002857 }
2858 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002859 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002860 .read = read_memmapped,
2861 },
2862
2863 {
2864 .vendor = "Macronix",
2865 .name = "MX29F001T",
2866 .bustype = CHIP_BUSTYPE_PARALLEL,
2867 .manufacture_id = MX_ID,
2868 .model_id = MX_29F001T,
2869 .total_size = 128,
2870 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002871 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2872 .tested = TEST_UNTESTED,
2873 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002874 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002875 .erase = NULL,
2876 .block_erasers =
2877 {
2878 {
2879 .eraseblocks = {
2880 {64 * 1024, 1},
2881 {32 * 1024, 1},
2882 {8 * 1024, 2},
2883 {4 * 1024, 2},
2884 {8 * 1024, 1},
2885 },
Sean Nelson35727f72010-01-28 23:55:12 +00002886 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002887 }, {
2888 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002889 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002890 }
2891 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002892 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002893 .read = read_memmapped,
2894 },
2895
2896 {
2897 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002898 .name = "MX29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00002899 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002900 .manufacture_id = MX_ID,
2901 .model_id = MX_29F002B,
2902 .total_size = 256,
2903 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002904 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002905 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00002906 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002907 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002908 .erase = NULL,
2909 .block_erasers =
2910 {
2911 {
2912 .eraseblocks = {
2913 {16 * 1024, 1},
2914 {8 * 1024, 2},
2915 {32 * 1024, 1},
2916 {64 * 1024, 3},
2917 },
Sean Nelson35727f72010-01-28 23:55:12 +00002918 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002919 }, {
2920 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002921 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002922 },
2923 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002924 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002925 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002926 },
2927
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002928 {
2929 .vendor = "Macronix",
2930 .name = "MX29F002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00002931 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002932 .manufacture_id = MX_ID,
2933 .model_id = MX_29F002T,
2934 .total_size = 256,
2935 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002936 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2937 .tested = TEST_UNTESTED,
2938 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002939 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002940 .erase = NULL,
2941 .block_erasers =
2942 {
2943 {
2944 .eraseblocks = {
2945 {64 * 1024, 3},
2946 {32 * 1024, 1},
2947 {8 * 1024, 2},
2948 {16 * 1024, 1},
2949 },
Sean Nelson35727f72010-01-28 23:55:12 +00002950 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002951 }, {
2952 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002953 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002954 },
2955 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002956 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002957 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002958 },
2959
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002960 {
2961 .vendor = "Macronix",
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00002962 .name = "MX29LV040",
Urja Rannikko038a3122009-06-28 19:19:25 +00002963 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002964 .manufacture_id = MX_ID,
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00002965 .model_id = MX_29LV040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002966 .total_size = 512,
2967 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002968 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2969 .tested = TEST_UNTESTED,
2970 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002971 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002972 .erase = NULL,
2973 .block_erasers =
2974 {
2975 {
2976 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00002977 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002978 }, {
2979 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002980 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002981 },
2982 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002983 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002984 .read = read_memmapped,
Carl-Daniel Hailfinger7de86392008-12-10 10:32:05 +00002985 },
2986
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002987 {
2988 .vendor = "Numonyx",
2989 .name = "M25PE10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002990 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002991 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002992 .model_id = ST_M25PE10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002993 .total_size = 128,
2994 .page_size = 256,
2995 .tested = TEST_UNTESTED,
2996 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002997 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00002998 .erase = NULL,
2999 .block_erasers =
3000 {
3001 {
3002 .eraseblocks = { {4 * 1024, 32} },
3003 .block_erase = spi_block_erase_20,
3004 }, {
3005 .eraseblocks = { {64 * 1024, 2} },
3006 .block_erase = spi_block_erase_d8,
3007 }, {
3008 .eraseblocks = { {128 * 1024, 1} },
3009 .block_erase = spi_block_erase_c7,
3010 }
3011 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003012 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003013 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003014 },
3015
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003016 {
3017 .vendor = "Numonyx",
3018 .name = "M25PE20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003019 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003020 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003021 .model_id = ST_M25PE20,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003022 .total_size = 256,
3023 .page_size = 256,
3024 .tested = TEST_UNTESTED,
3025 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003026 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003027 .erase = NULL,
3028 .block_erasers =
3029 {
3030 {
3031 .eraseblocks = { {4 * 1024, 64} },
3032 .block_erase = spi_block_erase_20,
3033 }, {
3034 .eraseblocks = { {64 * 1024, 4} },
3035 .block_erase = spi_block_erase_d8,
3036 }, {
3037 .eraseblocks = { {256 * 1024, 1} },
3038 .block_erase = spi_block_erase_c7,
3039 }
3040 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003041 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003042 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003043 },
3044
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003045 {
3046 .vendor = "Numonyx",
3047 .name = "M25PE40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003048 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003049 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003050 .model_id = ST_M25PE40,
Sean Nelson5643c072010-01-19 03:23:07 +00003051 .total_size = 512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003052 .page_size = 256,
3053 .tested = TEST_UNTESTED,
3054 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003055 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003056 .erase = NULL,
3057 .block_erasers =
3058 {
3059 {
3060 .eraseblocks = { {4 * 1024, 128} },
3061 .block_erase = spi_block_erase_20,
3062 }, {
3063 .eraseblocks = { {64 * 1024, 8} },
3064 .block_erase = spi_block_erase_d8,
3065 }, {
3066 .eraseblocks = { {512 * 1024, 1} },
3067 .block_erase = spi_block_erase_c7,
3068 }
3069 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003070 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003071 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003072 },
3073
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003074 {
3075 .vendor = "Numonyx",
3076 .name = "M25PE80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003077 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003078 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003079 .model_id = ST_M25PE80,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003080 .total_size = 1024,
3081 .page_size = 256,
3082 .tested = TEST_OK_PREW,
3083 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003084 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003085 .erase = NULL,
3086 .block_erasers =
3087 {
3088 {
3089 .eraseblocks = { {4 * 1024, 256} },
3090 .block_erase = spi_block_erase_20,
3091 }, {
3092 .eraseblocks = { {64 * 1024, 16} },
3093 .block_erase = spi_block_erase_d8,
3094 }, {
3095 .eraseblocks = { {1024 * 1024, 1} },
3096 .block_erase = spi_block_erase_c7,
3097 }
3098 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003099 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003100 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003101 },
3102
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003103 {
3104 .vendor = "Numonyx",
3105 .name = "M25PE16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003106 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003107 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003108 .model_id = ST_M25PE16,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003109 .total_size = 2048,
3110 .page_size = 256,
3111 .tested = TEST_UNTESTED,
3112 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003113 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003114 .erase = NULL,
3115 .block_erasers =
3116 {
3117 {
3118 .eraseblocks = { {4 * 1024, 512} },
3119 .block_erase = spi_block_erase_20,
3120 }, {
3121 .eraseblocks = { {64 * 1024, 32} },
3122 .block_erase = spi_block_erase_d8,
3123 }, {
3124 .eraseblocks = { {2 * 1024 * 1024, 1} },
3125 .block_erase = spi_block_erase_c7,
3126 }
3127 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003128 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003129 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003130 },
3131
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003132 {
3133 .vendor = "PMC",
3134 .name = "Pm25LV010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003135 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003136 .manufacture_id = PMC_ID,
3137 .model_id = PMC_25LV010,
3138 .total_size = 128,
3139 .page_size = 256,
3140 .tested = TEST_UNTESTED,
3141 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003142 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003143 .erase = NULL,
3144 .block_erasers =
3145 {
3146 {
3147 .eraseblocks = { {4 * 1024, 32} },
3148 .block_erase = spi_block_erase_d7,
3149 }, {
3150 .eraseblocks = { {32 * 1024, 4} },
3151 .block_erase = spi_block_erase_d8,
3152 }, {
3153 .eraseblocks = { {128 * 1024, 1} },
3154 .block_erase = spi_block_erase_c7,
3155 }
3156 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003157 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003158 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003159 },
3160
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003161 {
3162 .vendor = "PMC",
3163 .name = "Pm25LV016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003164 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003165 .manufacture_id = PMC_ID,
3166 .model_id = PMC_25LV016B,
3167 .total_size = 2048,
3168 .page_size = 256,
3169 .tested = TEST_UNTESTED,
3170 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003171 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003172 .erase = NULL,
3173 .block_erasers =
3174 {
3175 {
3176 .eraseblocks = { {4 * 1024, 512} },
3177 .block_erase = spi_block_erase_d7,
3178 }, {
3179 .eraseblocks = { {4 * 1024, 512} },
3180 .block_erase = spi_block_erase_20,
3181 }, {
3182 .eraseblocks = { {64 * 1024, 32} },
3183 .block_erase = spi_block_erase_d8,
3184 }, {
3185 .eraseblocks = { {2 * 1024 * 1024, 1} },
3186 .block_erase = spi_block_erase_60,
3187 }, {
3188 .eraseblocks = { {2 * 1024 * 1024, 1} },
3189 .block_erase = spi_block_erase_c7,
3190 }
3191 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003192 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003193 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003194 },
3195
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003196 {
3197 .vendor = "PMC",
3198 .name = "Pm25LV020",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003199 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003200 .manufacture_id = PMC_ID,
3201 .model_id = PMC_25LV020,
3202 .total_size = 256,
3203 .page_size = 256,
3204 .tested = TEST_UNTESTED,
3205 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003206 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003207 .erase = NULL,
3208 .block_erasers =
3209 {
3210 {
3211 .eraseblocks = { {4 * 1024, 64} },
3212 .block_erase = spi_block_erase_d7,
3213 }, {
3214 .eraseblocks = { {64 * 1024, 4} },
3215 .block_erase = spi_block_erase_d8,
3216 }, {
3217 .eraseblocks = { {256 * 1024, 1} },
3218 .block_erase = spi_block_erase_c7,
3219 }
3220 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003221 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003222 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003223 },
3224
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003225 {
3226 .vendor = "PMC",
3227 .name = "Pm25LV040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003228 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003229 .manufacture_id = PMC_ID,
3230 .model_id = PMC_25LV040,
3231 .total_size = 512,
3232 .page_size = 256,
3233 .tested = TEST_UNTESTED,
3234 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003235 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003236 .erase = NULL,
3237 .block_erasers =
3238 {
3239 {
3240 .eraseblocks = { {4 * 1024, 128} },
3241 .block_erase = spi_block_erase_d7,
3242 }, {
3243 .eraseblocks = { {64 * 1024, 8} },
3244 .block_erase = spi_block_erase_d8,
3245 }, {
3246 .eraseblocks = { {512 * 1024, 1} },
3247 .block_erase = spi_block_erase_c7,
3248 }
3249 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003250 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003251 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003252 },
3253
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003254 {
3255 .vendor = "PMC",
3256 .name = "Pm25LV080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003257 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003258 .manufacture_id = PMC_ID,
3259 .model_id = PMC_25LV080B,
3260 .total_size = 1024,
3261 .page_size = 256,
3262 .tested = TEST_UNTESTED,
3263 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003264 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003265 .erase = NULL,
3266 .block_erasers =
3267 {
3268 {
3269 .eraseblocks = { {4 * 1024, 256} },
3270 .block_erase = spi_block_erase_d7,
3271 }, {
3272 .eraseblocks = { {4 * 1024, 256} },
3273 .block_erase = spi_block_erase_20,
3274 }, {
3275 .eraseblocks = { {64 * 1024, 16} },
3276 .block_erase = spi_block_erase_d8,
3277 }, {
3278 .eraseblocks = { {1024 * 1024, 1} },
3279 .block_erase = spi_block_erase_60,
3280 }, {
3281 .eraseblocks = { {1024 * 1024, 1} },
3282 .block_erase = spi_block_erase_c7,
3283 }
3284 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003285 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003286 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003287 },
3288
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003289 {
3290 .vendor = "PMC",
3291 .name = "Pm25LV512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003292 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003293 .manufacture_id = PMC_ID,
3294 .model_id = PMC_25LV512,
3295 .total_size = 64,
3296 .page_size = 256,
3297 .tested = TEST_UNTESTED,
3298 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003299 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003300 .erase = NULL,
3301 .block_erasers =
3302 {
3303 {
3304 .eraseblocks = { {4 * 1024, 16} },
3305 .block_erase = spi_block_erase_d7,
3306 }, {
3307 .eraseblocks = { {32 * 1024, 2} },
3308 .block_erase = spi_block_erase_d8,
3309 }, {
3310 .eraseblocks = { {64 * 1024, 1} },
3311 .block_erase = spi_block_erase_c7,
3312 }
3313 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003314 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003315 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003316 },
3317
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003318 {
3319 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00003320 .name = "Pm29F002T",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003321 .bustype = CHIP_BUSTYPE_PARALLEL,
3322 .manufacture_id = PMC_ID_NOPREFIX,
3323 .model_id = PMC_29F002T,
3324 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00003325 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003326 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3327 .tested = TEST_UNTESTED,
3328 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003329 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00003330 .erase = NULL,
3331 .block_erasers =
3332 {
3333 {
3334 .eraseblocks = {
3335 {128 * 1024, 1},
3336 {96 * 1024, 1},
3337 {8 * 1024, 2},
3338 {16 * 1024, 1},
3339 },
Sean Nelson35727f72010-01-28 23:55:12 +00003340 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003341 }, {
3342 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003343 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003344 },
3345 },
Sean Nelson35727f72010-01-28 23:55:12 +00003346 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003347 .read = read_memmapped,
3348 },
3349
3350 {
3351 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00003352 .name = "Pm29F002B",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003353 .bustype = CHIP_BUSTYPE_PARALLEL,
3354 .manufacture_id = PMC_ID_NOPREFIX,
3355 .model_id = PMC_29F002B,
3356 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00003357 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003358 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003359 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00003360 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003361 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00003362 .erase = NULL,
3363 .block_erasers =
3364 {
3365 {
3366 .eraseblocks = {
3367 {16 * 1024, 1},
3368 {8 * 1024, 2},
3369 {96 * 1024, 1},
3370 {128 * 1024, 1},
3371 },
Sean Nelson35727f72010-01-28 23:55:12 +00003372 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003373 }, {
3374 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003375 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003376 },
3377 },
Sean Nelson35727f72010-01-28 23:55:12 +00003378 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003379 .read = read_memmapped,
3380 },
3381
3382 {
3383 .vendor = "PMC",
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003384 .name = "Pm39LV010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003385 .bustype = CHIP_BUSTYPE_PARALLEL,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003386 .manufacture_id = PMC_ID_NOPREFIX,
3387 .model_id = PMC_39F010,
3388 .total_size = 128,
3389 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003390 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3391 .tested = TEST_UNTESTED,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003392 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003393 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson5643c072010-01-19 03:23:07 +00003394 .erase = NULL,
3395 .block_erasers =
3396 {
3397 {
3398 .eraseblocks = { {4 * 1024, 32} },
3399 .block_erase = erase_sector_jedec,
3400 }, {
3401 .eraseblocks = { {64 * 1024, 2} },
3402 .block_erase = erase_block_jedec,
3403 }, {
3404 .eraseblocks = { {128 * 1024, 1} },
3405 .block_erase = erase_chip_block_jedec,
3406 }
3407 },
Sean Nelson35727f72010-01-28 23:55:12 +00003408 .write = write_jedec_1,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003409 .read = read_memmapped,
3410 },
3411
3412 {
3413 .vendor = "PMC",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003414 .name = "Pm49FL002",
Sean Nelson35727f72010-01-28 23:55:12 +00003415 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003416 .manufacture_id = PMC_ID_NOPREFIX,
3417 .model_id = PMC_49FL002,
3418 .total_size = 256,
3419 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003420 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
3421 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003422 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003423 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00003424 .erase = NULL, /* Was: erase_49fl00x */
3425 .block_erasers =
3426 {
3427 {
3428 .eraseblocks = { {4 * 1024, 64} },
3429 .block_erase = erase_sector_jedec,
3430 }, {
3431 .eraseblocks = { {16 * 1024, 16} },
3432 .block_erase = erase_block_jedec,
3433 }, {
3434 .eraseblocks = { {256 * 1024, 1} },
3435 .block_erase = erase_chip_block_jedec,
3436 }
3437 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003438 .write = write_49fl00x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003439 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003440 },
3441
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003442 {
3443 .vendor = "PMC",
3444 .name = "Pm49FL004",
Sean Nelson35727f72010-01-28 23:55:12 +00003445 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003446 .manufacture_id = PMC_ID_NOPREFIX,
3447 .model_id = PMC_49FL004,
3448 .total_size = 512,
3449 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003450 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
3451 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003452 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003453 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00003454 .erase = NULL, /* Was: erase_49fl00x */
3455 .block_erasers =
3456 {
3457 {
3458 .eraseblocks = { {4 * 1024, 128} },
3459 .block_erase = erase_sector_jedec,
3460 }, {
3461 .eraseblocks = { {64 * 1024, 8} },
3462 .block_erase = erase_block_jedec,
3463 }, {
3464 .eraseblocks = { {512 * 1024, 1} },
3465 .block_erase = erase_chip_block_jedec,
3466 }
3467 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003468 .write = write_49fl00x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003469 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003470 },
3471
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003472 {
Sean Nelsond70b09c2009-11-24 02:11:08 +00003473 .vendor = "Sanyo",
3474 .name = "LF25FW203A",
3475 .bustype = CHIP_BUSTYPE_SPI,
3476 .manufacture_id = SANYO_ID,
3477 .model_id = SANYO_LE25FW203A,
3478 .total_size = 2048,
3479 .page_size = 256,
3480 .tested = TEST_UNTESTED,
3481 .probe = probe_spi_rdid,
3482 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003483 .erase = NULL,
3484 .block_erasers =
3485 {
3486 {
3487 .eraseblocks = { {64 * 1024, 32} },
3488 .block_erase = spi_block_erase_d8,
3489 }, {
3490 .eraseblocks = { {2 * 1024 * 1024, 1} },
3491 .block_erase = spi_block_erase_c7,
3492 }
3493 },
Sean Nelsond70b09c2009-11-24 02:11:08 +00003494 .write = spi_chip_write_256,
3495 .read = spi_chip_read,
3496 },
3497
3498 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003499 .vendor = "Sharp",
3500 .name = "LHF00L04",
Urja Rannikko038a3122009-06-28 19:19:25 +00003501 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003502 .manufacture_id = SHARP_ID,
3503 .model_id = SHARP_LHF00L04,
3504 .total_size = 1024,
3505 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003506 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003507 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003508 .probe = probe_49lfxxxc,
3509 .probe_timing = TIMING_ZERO,
3510 .erase = NULL,
3511 .block_erasers =
3512 {
3513 {
3514 .eraseblocks = {
3515 {64 * 1024, 15},
3516 {8 * 1024, 8}
3517 },
3518 .block_erase = erase_lhf00l04_block,
3519 }, {
3520 .eraseblocks = {
3521 {1024 * 1024, 1}
3522 },
Sean Nelson51c83fb2010-01-20 20:55:53 +00003523 .block_erase = NULL, /* 30 D0, only in A/A mux mode */
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003524 },
3525 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003526 .write = write_lhf00l04,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003527 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003528 },
3529
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003530 {
3531 .vendor = "Spansion",
Michael Karcher23ff4602010-01-12 23:29:30 +00003532 .name = "S25FL008A",
3533 .bustype = CHIP_BUSTYPE_SPI,
3534 .manufacture_id = SPANSION_ID,
3535 .model_id = SPANSION_S25FL008A,
3536 .total_size = 1024,
3537 .page_size = 256,
3538 .tested = TEST_OK_PREW,
3539 .probe = probe_spi_rdid,
3540 .probe_timing = TIMING_ZERO,
3541 .erase = NULL,
3542 .block_erasers =
3543 {
3544 {
3545 .eraseblocks = { {64 * 1024, 16} },
3546 .block_erase = spi_block_erase_d8,
3547 }, {
3548 .eraseblocks = { {1024 * 1024, 1} },
3549 .block_erase = spi_block_erase_c7,
3550 }
3551 },
3552 .write = spi_chip_write_256,
3553 .read = spi_chip_read,
3554 },
3555
3556 {
3557 .vendor = "Spansion",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003558 .name = "S25FL016A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003559 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003560 .manufacture_id = SPANSION_ID,
3561 .model_id = SPANSION_S25FL016A,
3562 .total_size = 2048,
3563 .page_size = 256,
Sean Nelson5643c072010-01-19 03:23:07 +00003564 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003565 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003566 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003567 .erase = NULL,
3568 .block_erasers =
3569 {
3570 {
3571 .eraseblocks = { {64 * 1024, 32} },
3572 .block_erase = spi_block_erase_d8,
3573 }, {
3574 .eraseblocks = { {2 * 1024 * 1024, 1} },
3575 .block_erase = spi_block_erase_c7,
3576 }
3577 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003578 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003579 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003580 },
3581
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003582 {
3583 .vendor = "SST",
3584 .name = "SST25VF016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003585 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003586 .manufacture_id = SST_ID,
3587 .model_id = SST_25VF016B,
3588 .total_size = 2048,
3589 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003590 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003591 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003592 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003593 .erase = NULL,
3594 .block_erasers =
3595 {
3596 {
3597 .eraseblocks = { {4 * 1024, 512} },
3598 .block_erase = spi_block_erase_20,
3599 }, {
3600 .eraseblocks = { {32 * 1024, 64} },
3601 .block_erase = spi_block_erase_52,
3602 }, {
3603 .eraseblocks = { {64 * 1024, 32} },
3604 .block_erase = spi_block_erase_d8,
3605 }, {
3606 .eraseblocks = { {2 * 1024 * 1024, 1} },
3607 .block_erase = spi_block_erase_60,
3608 }, {
3609 .eraseblocks = { {2 * 1024 * 1024, 1} },
3610 .block_erase = spi_block_erase_c7,
3611 },
3612 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003613 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003614 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003615 },
3616
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003617 {
3618 .vendor = "SST",
3619 .name = "SST25VF032B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003620 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003621 .manufacture_id = SST_ID,
3622 .model_id = SST_25VF032B,
3623 .total_size = 4096,
3624 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003625 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003626 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003627 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003628 .erase = NULL,
3629 .block_erasers =
3630 {
3631 {
3632 .eraseblocks = { {4 * 1024, 1024} },
3633 .block_erase = spi_block_erase_20,
3634 }, {
3635 .eraseblocks = { {32 * 1024, 128} },
3636 .block_erase = spi_block_erase_52,
3637 }, {
3638 .eraseblocks = { {64 * 1024, 64} },
3639 .block_erase = spi_block_erase_d8,
3640 }, {
3641 .eraseblocks = { {4 * 1024 * 1024, 1} },
3642 .block_erase = spi_block_erase_60,
3643 }, {
3644 .eraseblocks = { {4 * 1024 * 1024, 1} },
3645 .block_erase = spi_block_erase_c7,
3646 },
3647 },
3648 .write = spi_chip_write_1,
3649 .read = spi_chip_read,
3650 },
3651
3652 {
3653 .vendor = "SST",
3654 .name = "SST25VF040.REMS",
3655 .bustype = CHIP_BUSTYPE_SPI,
3656 .manufacture_id = SST_ID,
3657 .model_id = SST_25VF040_REMS,
3658 .total_size = 512,
3659 .page_size = 256,
3660 .tested = TEST_OK_PR,
3661 .probe = probe_spi_rems,
3662 .probe_timing = TIMING_ZERO,
3663 .erase = NULL,
3664 .block_erasers =
3665 {
3666 {
3667 .eraseblocks = { {4 * 1024, 128} },
3668 .block_erase = spi_block_erase_20,
3669 }, {
3670 .eraseblocks = { {32 * 1024, 16} },
3671 .block_erase = spi_block_erase_52,
3672 }, {
3673 .eraseblocks = { {512 * 1024, 1} },
3674 .block_erase = spi_block_erase_60,
3675 },
3676 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003677 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003678 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003679 },
3680
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003681 {
3682 .vendor = "SST",
3683 .name = "SST25VF040B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003684 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003685 .manufacture_id = SST_ID,
3686 .model_id = SST_25VF040B,
3687 .total_size = 512,
3688 .page_size = 256,
3689 .tested = TEST_UNTESTED,
3690 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003691 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003692 .erase = NULL,
3693 .block_erasers =
3694 {
3695 {
3696 .eraseblocks = { {4 * 1024, 128} },
3697 .block_erase = spi_block_erase_20,
3698 }, {
3699 .eraseblocks = { {32 * 1024, 16} },
3700 .block_erase = spi_block_erase_52,
3701 }, {
3702 .eraseblocks = { {64 * 1024, 8} },
3703 .block_erase = spi_block_erase_d8,
3704 }, {
3705 .eraseblocks = { {512 * 1024, 1} },
3706 .block_erase = spi_block_erase_60,
3707 }, {
3708 .eraseblocks = { {512 * 1024, 1} },
3709 .block_erase = spi_block_erase_c7,
3710 },
3711 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003712 .write = spi_chip_write_1,
Zheng Bao0677dff2009-02-25 08:07:33 +00003713 .read = spi_chip_read,
3714 },
3715
3716 {
3717 .vendor = "SST",
Peter Stugefd9217d2009-01-26 03:37:40 +00003718 .name = "SST25VF040B.REMS",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003719 .bustype = CHIP_BUSTYPE_SPI,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003720 .manufacture_id = SST_ID,
3721 .model_id = SST_25VF040B_REMS,
Peter Stugefd9217d2009-01-26 03:37:40 +00003722 .total_size = 512,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003723 .page_size = 256,
Peter Stugefd9217d2009-01-26 03:37:40 +00003724 .tested = TEST_OK_PR,
3725 .probe = probe_spi_rems,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003726 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003727 .erase = NULL,
3728 .block_erasers =
3729 {
3730 {
3731 .eraseblocks = { {4 * 1024, 128} },
3732 .block_erase = spi_block_erase_20,
3733 }, {
3734 .eraseblocks = { {32 * 1024, 16} },
3735 .block_erase = spi_block_erase_52,
3736 }, {
3737 .eraseblocks = { {64 * 1024, 8} },
3738 .block_erase = spi_block_erase_d8,
3739 }, {
3740 .eraseblocks = { {512 * 1024, 1} },
3741 .block_erase = spi_block_erase_60,
3742 }, {
3743 .eraseblocks = { {512 * 1024, 1} },
3744 .block_erase = spi_block_erase_c7,
3745 },
3746 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003747 .write = spi_chip_write_1,
Peter Stugefd9217d2009-01-26 03:37:40 +00003748 .read = spi_chip_read,
3749 },
3750
3751 {
3752 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003753 .name = "SST25VF080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003754 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003755 .manufacture_id = SST_ID,
3756 .model_id = SST_25VF080B,
3757 .total_size = 1024,
3758 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003759 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003760 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003761 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003762 .erase = NULL,
3763 .block_erasers =
3764 {
3765 {
3766 .eraseblocks = { {4 * 1024, 256} },
3767 .block_erase = spi_block_erase_20,
3768 }, {
3769 .eraseblocks = { {32 * 1024, 32} },
3770 .block_erase = spi_block_erase_52,
3771 }, {
3772 .eraseblocks = { {64 * 1024, 16} },
3773 .block_erase = spi_block_erase_d8,
3774 }, {
3775 .eraseblocks = { {1024 * 1024, 1} },
3776 .block_erase = spi_block_erase_60,
3777 }, {
3778 .eraseblocks = { {1024 * 1024, 1} },
3779 .block_erase = spi_block_erase_c7,
3780 },
3781 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003782 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003783 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003784 },
3785
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003786 {
3787 .vendor = "SST",
3788 .name = "SST28SF040A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003789 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003790 .manufacture_id = SST_ID,
3791 .model_id = SST_28SF040,
3792 .total_size = 512,
3793 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00003794 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003795 .tested = TEST_UNTESTED,
3796 .probe = probe_28sf040,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003797 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst28sf040.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003798 .erase = NULL,
3799 .block_erasers =
3800 {
3801 {
3802 .eraseblocks = { {128, 4096} },
3803 .block_erase = erase_sector_28sf040,
3804 }, {
3805 .eraseblocks = { {512 * 1024, 1} },
3806 .block_erase = erase_chip_28sf040,
3807 }
3808 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003809 .write = write_28sf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003810 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003811 },
3812
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003813 {
3814 .vendor = "SST",
3815 .name = "SST29EE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003816 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003817 .manufacture_id = SST_ID,
3818 .model_id = SST_29EE010,
3819 .total_size = 128,
3820 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003821 .feature_bits = FEATURE_LONG_RESET,
3822 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003823 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003824 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003825 .erase = NULL,
3826 .block_erasers =
3827 {
3828 {
3829 .eraseblocks = { {128 * 1024, 1} },
3830 .block_erase = erase_chip_block_jedec,
3831 }
3832 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003833 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003834 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003835 },
3836
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003837 {
3838 .vendor = "SST",
3839 .name = "SST29LE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003840 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003841 .manufacture_id = SST_ID,
3842 .model_id = SST_29LE010,
3843 .total_size = 128,
3844 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003845 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003846 .tested = TEST_UNTESTED,
3847 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003848 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003849 .erase = NULL,
3850 .block_erasers =
3851 {
3852 {
3853 .eraseblocks = { {128 * 1024, 1} },
3854 .block_erase = erase_chip_block_jedec,
3855 }
3856 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003857 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003858 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003859 },
3860
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003861 {
3862 .vendor = "SST",
3863 .name = "SST29EE020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003864 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003865 .manufacture_id = SST_ID,
3866 .model_id = SST_29EE020A,
3867 .total_size = 256,
3868 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003869 .feature_bits = FEATURE_LONG_RESET,
3870 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003871 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003872 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003873 .erase = NULL,
3874 .block_erasers =
3875 {
3876 {
3877 .eraseblocks = { {256 * 1024, 1} },
3878 .block_erase = erase_chip_block_jedec,
3879 }
3880 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003881 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003882 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003883 },
3884
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003885 {
3886 .vendor = "SST",
3887 .name = "SST29LE020",
Urja Rannikko038a3122009-06-28 19:19:25 +00003888 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003889 .manufacture_id = SST_ID,
3890 .model_id = SST_29LE020,
3891 .total_size = 256,
3892 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003893 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003894 .tested = TEST_UNTESTED,
3895 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003896 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003897 .erase = NULL,
3898 .block_erasers =
3899 {
3900 {
3901 .eraseblocks = { {256 * 1024, 1} },
3902 .block_erase = erase_chip_block_jedec,
3903 }
3904 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003905 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003906 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003907 },
3908
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003909 {
3910 .vendor = "SST",
Uwe Hermann48da3f92010-01-23 15:15:19 +00003911 .name = "SST39SF512",
3912 .bustype = CHIP_BUSTYPE_PARALLEL,
3913 .manufacture_id = SST_ID,
3914 .model_id = SST_39SF512,
3915 .total_size = 64,
3916 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003917 .feature_bits = FEATURE_EITHER_RESET,
3918 .tested = TEST_UNTESTED,
Uwe Hermann48da3f92010-01-23 15:15:19 +00003919 .probe = probe_jedec,
3920 .probe_timing = 1, /* 150 ns */
3921 .erase = NULL,
3922 .block_erasers =
3923 {
3924 {
3925 .eraseblocks = { {4 * 1024, 16} },
3926 .block_erase = erase_sector_jedec,
3927 }, {
3928 .eraseblocks = { {64 * 1024, 1} },
3929 .block_erase = erase_chip_block_jedec,
3930 }
3931 },
Sean Nelson35727f72010-01-28 23:55:12 +00003932 .write = write_jedec_1,
Uwe Hermann48da3f92010-01-23 15:15:19 +00003933 .read = read_memmapped,
3934 },
3935
3936 {
3937 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003938 .name = "SST39SF010A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003939 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003940 .manufacture_id = SST_ID,
3941 .model_id = SST_39SF010,
3942 .total_size = 128,
3943 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003944 .feature_bits = FEATURE_EITHER_RESET,
3945 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003946 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003947 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003948 .erase = NULL,
3949 .block_erasers =
3950 {
3951 {
3952 .eraseblocks = { {4 * 1024, 32} },
3953 .block_erase = erase_sector_jedec,
3954 }, {
3955 .eraseblocks = { {128 * 1024, 1} },
3956 .block_erase = erase_chip_block_jedec,
3957 }
3958 },
Sean Nelson35727f72010-01-28 23:55:12 +00003959 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003960 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003961 },
3962
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003963 {
3964 .vendor = "SST",
3965 .name = "SST39SF020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003966 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003967 .manufacture_id = SST_ID,
3968 .model_id = SST_39SF020,
3969 .total_size = 256,
3970 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003971 .feature_bits = FEATURE_EITHER_RESET,
3972 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003973 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003974 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003975 .erase = NULL,
3976 .block_erasers =
3977 {
3978 {
3979 .eraseblocks = { {4 * 1024, 64} },
3980 .block_erase = erase_sector_jedec,
3981 }, {
3982 .eraseblocks = { {256 * 1024, 1} },
3983 .block_erase = erase_chip_block_jedec,
3984 }
3985 },
Sean Nelson35727f72010-01-28 23:55:12 +00003986 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003987 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003988 },
3989
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003990 {
3991 .vendor = "SST",
3992 .name = "SST39SF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00003993 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003994 .manufacture_id = SST_ID,
3995 .model_id = SST_39SF040,
3996 .total_size = 512,
3997 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003998 .feature_bits = FEATURE_EITHER_RESET,
3999 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004000 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004001 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004002 .erase = NULL,
4003 .block_erasers =
4004 {
4005 {
4006 .eraseblocks = { {4 * 1024, 128} },
4007 .block_erase = erase_sector_jedec,
4008 }, {
4009 .eraseblocks = { {512 * 1024, 1} },
4010 .block_erase = erase_chip_block_jedec,
4011 }
4012 },
Sean Nelson35727f72010-01-28 23:55:12 +00004013 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004014 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004015 },
4016
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004017 {
4018 .vendor = "SST",
4019 .name = "SST39VF512",
Urja Rannikko038a3122009-06-28 19:19:25 +00004020 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004021 .manufacture_id = SST_ID,
4022 .model_id = SST_39VF512,
4023 .total_size = 64,
4024 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004025 .feature_bits = FEATURE_EITHER_RESET,
4026 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004027 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004028 .probe_timing = 1, /* 150 ns*/
Sean Nelson51c83fb2010-01-20 20:55:53 +00004029 .erase = NULL,
4030 .block_erasers =
4031 {
4032 {
4033 .eraseblocks = { {4 * 1024, 16} },
4034 .block_erase = erase_sector_jedec,
4035 }, {
4036 .eraseblocks = { {64 * 1024, 1} },
4037 .block_erase = erase_chip_block_jedec,
4038 }
4039 },
Sean Nelson35727f72010-01-28 23:55:12 +00004040 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004041 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004042 },
4043
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004044 {
4045 .vendor = "SST",
4046 .name = "SST39VF010",
Urja Rannikko038a3122009-06-28 19:19:25 +00004047 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004048 .manufacture_id = SST_ID,
4049 .model_id = SST_39VF010,
4050 .total_size = 128,
4051 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004052 .feature_bits = FEATURE_EITHER_RESET,
4053 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004054 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004055 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004056 .erase = NULL,
4057 .block_erasers =
4058 {
4059 {
4060 .eraseblocks = { {4 * 1024, 32} },
4061 .block_erase = erase_sector_jedec,
4062 }, {
4063 .eraseblocks = { {128 * 1024, 1} },
4064 .block_erase = erase_chip_block_jedec,
4065 }
4066 },
Sean Nelson35727f72010-01-28 23:55:12 +00004067 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004068 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004069 },
4070
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004071 {
4072 .vendor = "SST",
4073 .name = "SST39VF020",
Urja Rannikko038a3122009-06-28 19:19:25 +00004074 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004075 .manufacture_id = SST_ID,
4076 .model_id = SST_39VF020,
4077 .total_size = 256,
4078 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004079 .feature_bits = FEATURE_EITHER_RESET,
4080 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004081 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004082 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004083 .erase = NULL,
4084 .block_erasers =
4085 {
4086 {
4087 .eraseblocks = { {4 * 1024, 64} },
4088 .block_erase = erase_sector_jedec,
4089 }, {
4090 .eraseblocks = { {256 * 1024, 1} },
4091 .block_erase = erase_chip_block_jedec,
4092 }
4093 },
Sean Nelson35727f72010-01-28 23:55:12 +00004094 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004095 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004096 },
4097
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004098 {
4099 .vendor = "SST",
4100 .name = "SST39VF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00004101 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004102 .manufacture_id = SST_ID,
4103 .model_id = SST_39VF040,
4104 .total_size = 512,
4105 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004106 .feature_bits = FEATURE_EITHER_RESET,
4107 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004108 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004109 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004110 .erase = NULL,
4111 .block_erasers =
4112 {
4113 {
4114 .eraseblocks = { {4 * 1024, 128} },
4115 .block_erase = erase_sector_jedec,
4116 }, {
4117 .eraseblocks = { {512 * 1024, 1} },
4118 .block_erase = erase_chip_block_jedec,
4119 }
4120 },
Sean Nelson35727f72010-01-28 23:55:12 +00004121 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004122 .read = read_memmapped,
Carl-Daniel Hailfinger90eff152008-12-08 23:51:45 +00004123 },
FENG yu ningff692fb2008-12-08 18:15:10 +00004124
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004125 {
4126 .vendor = "SST",
Peter Stuge8440cc02009-01-25 23:55:12 +00004127 .name = "SST39VF080",
Urja Rannikko038a3122009-06-28 19:19:25 +00004128 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004129 .manufacture_id = SST_ID,
4130 .model_id = SST_39VF080,
Peter Stuge8440cc02009-01-25 23:55:12 +00004131 .total_size = 1024,
4132 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004133 .feature_bits = FEATURE_EITHER_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +00004134 .tested = TEST_UNTESTED,
4135 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004136 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004137 .erase = NULL,
4138 .block_erasers =
4139 {
4140 {
4141 .eraseblocks = { {4 * 1024, 256} },
4142 .block_erase = erase_sector_jedec,
4143 }, {
4144 .eraseblocks = { {64 * 1024, 16} },
4145 .block_erase = erase_block_jedec,
4146 }, {
4147 .eraseblocks = { {1024 * 1024, 1} },
4148 .block_erase = erase_chip_block_jedec,
4149 }
4150 },
Sean Nelson35727f72010-01-28 23:55:12 +00004151 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004152 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +00004153 },
4154
4155 {
4156 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004157 .name = "SST49LF002A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004158 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004159 .manufacture_id = SST_ID,
4160 .model_id = SST_49LF002A,
4161 .total_size = 256,
4162 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004163 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004164 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004165 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00004166 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004167 .erase = NULL,
4168 .block_erasers =
4169 {
4170 {
4171 .eraseblocks = { {4 * 1024, 64} },
4172 .block_erase = erase_sst_fwhub_sector,
4173 }, {
4174 .eraseblocks = { {16 * 1024, 16} },
4175 .block_erase = erase_sst_fwhub_block,
4176 }, {
4177 .eraseblocks = { {256 * 1024, 1} },
4178 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4179 }
4180 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004181 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004182 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004183 },
4184
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004185 {
4186 .vendor = "SST",
4187 .name = "SST49LF003A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004188 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004189 .manufacture_id = SST_ID,
4190 .model_id = SST_49LF003A,
4191 .total_size = 384,
4192 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004193 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Peter Lemenkov45835c42009-09-25 01:09:18 +00004194 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004195 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00004196 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004197 .erase = NULL,
4198 .block_erasers =
4199 {
4200 {
4201 .eraseblocks = { {4 * 1024, 96} },
4202 .block_erase = erase_sst_fwhub_sector,
4203 }, {
4204 .eraseblocks = { {64 * 1024, 6} },
4205 .block_erase = erase_sst_fwhub_block,
4206 }, {
4207 .eraseblocks = { {384 * 1024, 1} },
4208 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4209 }
4210 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004211 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004212 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004213 },
4214
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004215 {
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004216 /* Contrary to the data sheet, TBL# on the SST49LF004B affects the top 128kB (instead of 64kB)
4217 * and is only honored for 64k block erase, but not 4k sector erase.
4218 */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004219 .vendor = "SST",
4220 .name = "SST49LF004A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004221 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004222 .manufacture_id = SST_ID,
4223 .model_id = SST_49LF004A,
4224 .total_size = 512,
4225 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004226 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004227 .tested = TEST_OK_PREW,
4228 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00004229 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004230 .erase = NULL,
4231 .block_erasers =
4232 {
4233 {
4234 .eraseblocks = { {4 * 1024, 128} },
4235 .block_erase = erase_sector_jedec, /* missing unlock */
4236 }, {
4237 .eraseblocks = { {64 * 1024, 8} },
Carl-Daniel Hailfinger11c9e682009-11-06 18:09:42 +00004238 .block_erase = erase_sst_fwhub_block, /* same as erase_block_jedec, but with unlock */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004239 }, {
4240 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson51c83fb2010-01-20 20:55:53 +00004241 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004242 },
4243 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004244 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004245 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004246 },
4247
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004248 {
4249 .vendor = "SST",
4250 .name = "SST49LF004C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004251 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004252 .manufacture_id = SST_ID,
4253 .model_id = SST_49LF004C,
4254 .total_size = 512,
4255 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004256 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004257 .tested = TEST_UNTESTED,
4258 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004259 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004260 .erase = NULL,
4261 .block_erasers =
4262 {
4263 {
4264 .eraseblocks = { {4 * 1024, 128} },
4265 .block_erase = erase_sector_49lfxxxc,
4266 }, {
4267 .eraseblocks = {
4268 {64 * 1024, 7},
4269 {32 * 1024, 1},
4270 {8 * 1024, 2},
4271 {16 * 1024, 1},
4272 },
4273 .block_erase = erase_block_49lfxxxc,
4274 }
4275 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004276 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004277 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004278 },
4279
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004280 {
4281 .vendor = "SST",
4282 .name = "SST49LF008A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004283 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004284 .manufacture_id = SST_ID,
4285 .model_id = SST_49LF008A,
4286 .total_size = 1024,
4287 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004288 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004289 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004290 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00004291 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004292 .erase = NULL,
4293 .block_erasers =
4294 {
4295 {
4296 .eraseblocks = { {4 * 1024, 256} },
4297 .block_erase = erase_sst_fwhub_sector,
4298 }, {
4299 .eraseblocks = { {64 * 1024, 16} },
4300 .block_erase = erase_sst_fwhub_block,
4301 }, {
4302 .eraseblocks = { {1024 * 1024, 1} },
4303 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4304 }
4305 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004306 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004307 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004308 },
4309
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004310 {
4311 .vendor = "SST",
4312 .name = "SST49LF008C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004313 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004314 .manufacture_id = SST_ID,
4315 .model_id = SST_49LF008C,
4316 .total_size = 1024,
4317 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004318 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004319 .tested = TEST_UNTESTED,
4320 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004321 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004322 .erase = NULL,
4323 .block_erasers =
4324 {
4325 {
4326 .eraseblocks = { {4 * 1024, 256} },
4327 .block_erase = erase_sector_49lfxxxc,
4328 }, {
4329 .eraseblocks = {
4330 {64 * 1024, 15},
4331 {32 * 1024, 1},
4332 {8 * 1024, 2},
4333 {16 * 1024, 1},
4334 },
4335 .block_erase = erase_block_49lfxxxc,
4336 }
4337 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004338 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004339 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004340 },
4341
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004342 {
4343 .vendor = "SST",
4344 .name = "SST49LF016C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004345 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004346 .manufacture_id = SST_ID,
4347 .model_id = SST_49LF016C,
4348 .total_size = 2048,
4349 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004350 .feature_bits = 0,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004351 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004352 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004353 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004354 .erase = NULL,
4355 .block_erasers =
4356 {
4357 {
4358 .eraseblocks = { {4 * 1024, 512} },
4359 .block_erase = erase_sector_49lfxxxc,
4360 }, {
4361 .eraseblocks = {
4362 {64 * 1024, 31},
4363 {32 * 1024, 1},
4364 {8 * 1024, 2},
4365 {16 * 1024, 1},
4366 },
4367 .block_erase = erase_block_49lfxxxc,
4368 }
4369 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004370 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004371 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004372 },
4373
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004374 {
4375 .vendor = "SST",
4376 .name = "SST49LF020",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004377 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004378 .manufacture_id = SST_ID,
4379 .model_id = SST_49LF020,
4380 .total_size = 256,
4381 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004382 .feature_bits = FEATURE_EITHER_RESET,
4383 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004384 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004385 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004386 .erase = NULL,
4387 .block_erasers =
4388 {
4389 {
4390 .eraseblocks = { {4 * 1024, 64} },
4391 .block_erase = erase_sector_jedec,
4392 }, {
4393 .eraseblocks = { {16 * 1024, 16} },
4394 .block_erase = erase_block_jedec,
4395 }, {
4396 .eraseblocks = { {256 * 1024, 1} },
4397 .block_erase = NULL,
4398 }
4399 },
Sean Nelson35727f72010-01-28 23:55:12 +00004400 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004401 .read = read_memmapped,
Sven Schnellec208dfb2009-01-07 12:35:09 +00004402 },
4403
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004404 {
4405 .vendor = "SST",
4406 .name = "SST49LF020A",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004407 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004408 .manufacture_id = SST_ID,
4409 .model_id = SST_49LF020A,
4410 .total_size = 256,
Carl-Daniel Hailfingerda654322009-07-23 01:44:38 +00004411 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004412 .feature_bits = FEATURE_EITHER_RESET,
4413 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004414 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004415 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004416 .erase = NULL,
4417 .block_erasers =
4418 {
4419 {
4420 .eraseblocks = { {4 * 1024, 64} },
4421 .block_erase = erase_sector_jedec,
4422 }, {
4423 .eraseblocks = { {16 * 1024, 16} },
4424 .block_erase = erase_block_jedec,
4425 }, {
4426 .eraseblocks = { {256 * 1024, 1} },
4427 .block_erase = NULL,
4428 }
4429 },
Sean Nelson35727f72010-01-28 23:55:12 +00004430 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004431 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004432 },
4433
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004434 {
4435 .vendor = "SST",
4436 .name = "SST49LF040",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004437 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004438 .manufacture_id = SST_ID,
4439 .model_id = SST_49LF040,
4440 .total_size = 512,
4441 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004442 .feature_bits = FEATURE_EITHER_RESET,
4443 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004444 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004445 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004446 .erase = NULL,
4447 .block_erasers =
4448 {
4449 {
4450 .eraseblocks = { {4 * 1024, 128} },
4451 .block_erase = erase_sector_jedec,
4452 }, {
4453 .eraseblocks = { {64 * 1024, 8} },
4454 .block_erase = erase_block_jedec,
4455 }, {
4456 .eraseblocks = { {512 * 1024, 1} },
4457 .block_erase = NULL,
4458 }
4459 },
Sean Nelson35727f72010-01-28 23:55:12 +00004460 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004461 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004462 },
4463
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004464 {
4465 .vendor = "SST",
4466 .name = "SST49LF040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004467 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004468 .manufacture_id = SST_ID,
4469 .model_id = SST_49LF040B,
4470 .total_size = 512,
4471 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004472 .feature_bits = FEATURE_EITHER_RESET,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004473 .tested = TEST_UNTESTED,
4474 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004475 .probe_timing = 1, /* 150ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004476 .erase = NULL,
4477 .block_erasers =
4478 {
4479 {
4480 .eraseblocks = { {4 * 1024, 128} },
4481 .block_erase = erase_sector_jedec,
4482 }, {
4483 .eraseblocks = { {64 * 1024, 8} },
4484 .block_erase = erase_block_jedec,
4485 }, {
4486 .eraseblocks = { {512 * 1024, 1} },
4487 .block_erase = NULL,
4488 }
4489 },
Sean Nelson35727f72010-01-28 23:55:12 +00004490 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004491 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004492 },
4493
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004494 {
4495 .vendor = "SST",
4496 .name = "SST49LF080A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004497 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004498 .manufacture_id = SST_ID,
Urja Rannikko038a3122009-06-28 19:19:25 +00004499 .model_id = SST_49LF080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004500 .total_size = 1024,
4501 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004502 .feature_bits = FEATURE_EITHER_RESET,
4503 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004504 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004505 .probe_timing = TIMING_FIXME,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004506 .erase = NULL,
4507 .block_erasers =
4508 {
4509 {
4510 .eraseblocks = { {4 * 1024, 256} },
4511 .block_erase = erase_sector_jedec,
4512 }, {
4513 .eraseblocks = { {64 * 1024, 16} },
4514 .block_erase = erase_block_jedec,
4515 }, {
4516 .eraseblocks = { {1024 * 1024, 1} },
4517 .block_erase = NULL,
4518 }
4519 },
Sean Nelson35727f72010-01-28 23:55:12 +00004520 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004521 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004522 },
4523
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004524 {
4525 .vendor = "SST",
4526 .name = "SST49LF160C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004527 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004528 .manufacture_id = SST_ID,
4529 .model_id = SST_49LF160C,
4530 .total_size = 2048,
4531 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004532 .feature_bits = 0,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004533 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004534 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004535 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004536 .erase = erase_49lfxxxc,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004537 .erase = NULL,
4538 .block_erasers =
4539 {
4540 {
4541 .eraseblocks = { {4 * 1024, 512} },
4542 .block_erase = erase_sector_49lfxxxc,
4543 }, {
4544 .eraseblocks = {
4545 {64 * 1024, 31},
4546 {32 * 1024, 1},
4547 {8 * 1024, 2},
4548 {16 * 1024, 1},
4549 },
4550 .block_erase = erase_block_49lfxxxc,
4551 }
4552 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004553 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004554 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004555 },
4556
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004557 {
4558 .vendor = "ST",
4559 .name = "M25P05-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004560 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004561 .manufacture_id = ST_ID,
4562 .model_id = ST_M25P05A,
4563 .total_size = 64,
4564 .page_size = 256,
4565 .tested = TEST_UNTESTED,
4566 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004567 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004568 .erase = NULL,
4569 .block_erasers =
4570 {
4571 {
4572 .eraseblocks = { {32 * 1024, 2} },
4573 .block_erase = spi_block_erase_d8,
4574 }, {
4575 .eraseblocks = { {64 * 1024, 1} },
4576 .block_erase = spi_block_erase_c7,
4577 }
4578 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004579 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004580 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004581 },
4582
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004583 /* The ST M25P05 is a bit of a problem. It has the same ID as the
4584 * ST M25P05-A in RES mode, but supports only 128 byte writes instead
4585 * of 256 byte writes. We rely heavily on the fact that probe_spi_res
4586 * only is successful if RDID does not work.
4587 */
4588 {
4589 .vendor = "ST",
4590 .name = "M25P05.RES",
4591 .bustype = CHIP_BUSTYPE_SPI,
4592 .manufacture_id = ST_ID,
4593 .model_id = ST_M25P05_RES,
4594 .total_size = 64,
4595 .page_size = 256,
4596 .tested = TEST_UNTESTED,
4597 .probe = probe_spi_res,
4598 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004599 .erase = NULL,
4600 .block_erasers =
4601 {
4602 {
4603 .eraseblocks = { {32 * 1024, 2} },
4604 .block_erase = spi_block_erase_d8,
4605 }, {
4606 .eraseblocks = { {64 * 1024, 1} },
4607 .block_erase = spi_block_erase_c7,
4608 }
4609 },
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004610 .write = spi_chip_write_1, /* 128 */
4611 .read = spi_chip_read,
4612 },
4613
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004614 {
4615 .vendor = "ST",
4616 .name = "M25P10-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004617 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004618 .manufacture_id = ST_ID,
4619 .model_id = ST_M25P10A,
4620 .total_size = 128,
4621 .page_size = 256,
4622 .tested = TEST_UNTESTED,
4623 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004624 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004625 .erase = NULL,
4626 .block_erasers =
4627 {
4628 {
4629 .eraseblocks = { {32 * 1024, 4} },
4630 .block_erase = spi_block_erase_d8,
4631 }, {
4632 .eraseblocks = { {128 * 1024, 1} },
4633 .block_erase = spi_block_erase_c7,
4634 }
4635 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004636 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004637 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004638 },
4639
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004640 /* The ST M25P10 has the same problem as the M25P05. */
4641 {
4642 .vendor = "ST",
4643 .name = "M25P10.RES",
4644 .bustype = CHIP_BUSTYPE_SPI,
4645 .manufacture_id = ST_ID,
4646 .model_id = ST_M25P10_RES,
4647 .total_size = 128,
4648 .page_size = 256,
4649 .tested = TEST_UNTESTED,
4650 .probe = probe_spi_res,
4651 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004652 .erase = NULL,
4653 .block_erasers =
4654 {
4655 {
4656 .eraseblocks = { {32 * 1024, 4} },
4657 .block_erase = spi_block_erase_d8,
4658 }, {
4659 .eraseblocks = { {128 * 1024, 1} },
4660 .block_erase = spi_block_erase_c7,
4661 }
4662 },
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004663 .write = spi_chip_write_1, /* 128 */
4664 .read = spi_chip_read,
4665 },
4666
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004667 {
4668 .vendor = "ST",
4669 .name = "M25P20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004670 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004671 .manufacture_id = ST_ID,
4672 .model_id = ST_M25P20,
4673 .total_size = 256,
4674 .page_size = 256,
4675 .tested = TEST_UNTESTED,
4676 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004677 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004678 .erase = NULL,
4679 .block_erasers =
4680 {
4681 {
4682 .eraseblocks = { {64 * 1024, 4} },
4683 .block_erase = spi_block_erase_d8,
4684 }, {
4685 .eraseblocks = { {256 * 1024, 1} },
4686 .block_erase = spi_block_erase_c7,
4687 }
4688 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004689 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004690 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004691 },
4692
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004693 {
4694 .vendor = "ST",
4695 .name = "M25P40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004696 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004697 .manufacture_id = ST_ID,
4698 .model_id = ST_M25P40,
4699 .total_size = 512,
4700 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004701 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004702 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004703 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004704 .erase = NULL,
4705 .block_erasers =
4706 {
4707 {
4708 .eraseblocks = { {64 * 1024, 8} },
4709 .block_erase = spi_block_erase_d8,
4710 }, {
4711 .eraseblocks = { {512 * 1024, 1} },
4712 .block_erase = spi_block_erase_c7,
4713 }
4714 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004715 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004716 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004717 },
4718
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004719 {
4720 .vendor = "ST",
4721 .name = "M25P40-old",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004722 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004723 .manufacture_id = ST_ID,
4724 .model_id = ST_M25P40_RES,
4725 .total_size = 512,
4726 .page_size = 256,
4727 .tested = TEST_UNTESTED,
4728 .probe = probe_spi_res,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004729 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004730 .erase = NULL,
4731 .block_erasers =
4732 {
4733 {
4734 .eraseblocks = { {64 * 1024, 8} },
4735 .block_erase = spi_block_erase_d8,
4736 }, {
4737 .eraseblocks = { {512 * 1024, 1} },
4738 .block_erase = spi_block_erase_c7,
4739 }
4740 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004741 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004742 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004743 },
4744
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004745 {
4746 .vendor = "ST",
4747 .name = "M25P80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004748 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004749 .manufacture_id = ST_ID,
4750 .model_id = ST_M25P80,
4751 .total_size = 1024,
4752 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004753 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004754 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004755 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004756 .erase = NULL,
4757 .block_erasers =
4758 {
4759 {
4760 .eraseblocks = { {64 * 1024, 16} },
4761 .block_erase = spi_block_erase_d8,
4762 }, {
4763 .eraseblocks = { {1024 * 1024, 1} },
4764 .block_erase = spi_block_erase_c7,
4765 }
4766 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004767 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004768 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004769 },
4770
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004771 {
4772 .vendor = "ST",
4773 .name = "M25P16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004774 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004775 .manufacture_id = ST_ID,
4776 .model_id = ST_M25P16,
4777 .total_size = 2048,
4778 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004779 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004780 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004781 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004782 .erase = NULL,
4783 .block_erasers =
4784 {
4785 {
4786 .eraseblocks = { {64 * 1024, 32} },
4787 .block_erase = spi_block_erase_d8,
4788 }, {
4789 .eraseblocks = { {2 * 1024 * 1024, 1} },
4790 .block_erase = spi_block_erase_c7,
4791 }
4792 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004793 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004794 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004795 },
4796
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004797 {
4798 .vendor = "ST",
4799 .name = "M25P32",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004800 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004801 .manufacture_id = ST_ID,
4802 .model_id = ST_M25P32,
4803 .total_size = 4096,
4804 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004805 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004806 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004807 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004808 .erase = NULL,
4809 .block_erasers =
4810 {
4811 {
4812 .eraseblocks = { {64 * 1024, 64} },
4813 .block_erase = spi_block_erase_d8,
4814 }, {
4815 .eraseblocks = { {4 * 1024 * 1024, 1} },
4816 .block_erase = spi_block_erase_c7,
4817 }
4818 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004819 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004820 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004821 },
4822
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004823 {
4824 .vendor = "ST",
4825 .name = "M25P64",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004826 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004827 .manufacture_id = ST_ID,
4828 .model_id = ST_M25P64,
4829 .total_size = 8192,
4830 .page_size = 256,
4831 .tested = TEST_UNTESTED,
4832 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004833 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004834 .erase = NULL,
4835 .block_erasers =
4836 {
4837 {
4838 .eraseblocks = { {64 * 1024, 128} },
4839 .block_erase = spi_block_erase_d8,
4840 }, {
4841 .eraseblocks = { {8 * 1024 * 1024, 1} },
4842 .block_erase = spi_block_erase_c7,
4843 }
4844 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004845 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004846 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004847 },
4848
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004849 {
4850 .vendor = "ST",
4851 .name = "M25P128",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004852 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004853 .manufacture_id = ST_ID,
4854 .model_id = ST_M25P128,
4855 .total_size = 16384,
4856 .page_size = 256,
4857 .tested = TEST_UNTESTED,
4858 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004859 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004860 .erase = NULL,
4861 .block_erasers =
4862 {
4863 {
4864 .eraseblocks = { {256 * 1024, 64} },
4865 .block_erase = spi_block_erase_d8,
4866 }, {
4867 .eraseblocks = { {16 * 1024 * 1024, 1} },
4868 .block_erase = spi_block_erase_c7,
4869 }
4870 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004871 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004872 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004873 },
4874
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004875 {
4876 .vendor = "ST",
4877 .name = "M29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004878 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004879 .manufacture_id = ST_ID,
4880 .model_id = ST_M29F002B,
4881 .total_size = 256,
4882 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004883 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004884 .tested = TEST_UNTESTED,
4885 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004886 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004887 .erase = NULL,
4888 .block_erasers =
4889 {
4890 {
4891 .eraseblocks = {
4892 {16 * 1024, 1},
4893 {8 * 1024, 2},
4894 {32 * 1024, 1},
4895 {64 * 1024, 3},
4896 },
4897 .block_erase = erase_sector_jedec,
4898 }, {
4899 .eraseblocks = { {256 * 1024, 1} },
4900 .block_erase = erase_chip_block_jedec,
4901 }
4902 },
Sean Nelson35727f72010-01-28 23:55:12 +00004903 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004904 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004905 },
4906
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004907 {
4908 .vendor = "ST",
4909 .name = "M29F002T/NT",
Urja Rannikko038a3122009-06-28 19:19:25 +00004910 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004911 .manufacture_id = ST_ID,
4912 .model_id = ST_M29F002T,
4913 .total_size = 256,
4914 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004915 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
4916 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004917 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004918 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004919 .erase = NULL,
4920 .block_erasers =
4921 {
4922 {
4923 .eraseblocks = {
4924 {64 * 1024, 3},
4925 {32 * 1024, 1},
4926 {8 * 1024, 2},
4927 {16 * 1024, 1},
4928 },
4929 .block_erase = erase_sector_jedec,
4930 }, {
4931 .eraseblocks = { {256 * 1024, 1} },
4932 .block_erase = erase_chip_block_jedec,
4933 }
4934 },
Sean Nelson35727f72010-01-28 23:55:12 +00004935 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004936 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004937 },
4938
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004939 {
4940 .vendor = "ST",
4941 .name = "M29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004942 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004943 .manufacture_id = ST_ID,
4944 .model_id = ST_M29F040B,
4945 .total_size = 512,
4946 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004947 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
4948 .tested = TEST_UNTESTED,
4949 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004950 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00004951 .erase = NULL,
4952 .block_erasers =
4953 {
4954 {
4955 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00004956 .block_erase = erase_sector_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00004957 }, {
4958 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00004959 .block_erase = erase_chip_block_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00004960 }
4961 },
Sean Nelson35727f72010-01-28 23:55:12 +00004962 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004963 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004964 },
4965
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004966 {
Sean Nelson35727f72010-01-28 23:55:12 +00004967 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004968 .vendor = "ST",
4969 .name = "M29F400BT",
Urja Rannikko038a3122009-06-28 19:19:25 +00004970 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004971 .manufacture_id = ST_ID,
4972 .model_id = ST_M29F400BT,
4973 .total_size = 512,
4974 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004975 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004976 .tested = TEST_UNTESTED,
4977 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004978 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00004979 .erase = NULL,
4980 .block_erasers =
4981 {
4982 {
4983 .eraseblocks = {
4984 {64 * 1024, 7},
4985 {32 * 1024, 1},
4986 {8 * 1024, 2},
4987 {16 * 1024, 1},
4988 },
4989 .block_erase = block_erase_m29f400bt,
4990 }, {
4991 .eraseblocks = { {512 * 1024, 1} },
4992 .block_erase = block_erase_chip_m29f400bt,
4993 }
4994 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004995 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004996 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004997 },
4998
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004999 {
5000 .vendor = "ST",
5001 .name = "M29W010B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005002 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005003 .manufacture_id = ST_ID,
5004 .model_id = ST_M29W010B,
5005 .total_size = 128,
5006 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005007 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005008 .tested = TEST_UNTESTED,
5009 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005010 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005011 .erase = NULL,
5012 .block_erasers =
5013 {
5014 {
5015 .eraseblocks = { {16 * 1024, 8}, },
5016 .block_erase = erase_sector_jedec,
5017 }, {
5018 .eraseblocks = { {128 * 1024, 1} },
5019 .block_erase = erase_chip_block_jedec,
5020 }
5021 },
Sean Nelson35727f72010-01-28 23:55:12 +00005022 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005023 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005024 },
5025
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005026 {
5027 .vendor = "ST",
5028 .name = "M29W040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005029 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005030 .manufacture_id = ST_ID,
5031 .model_id = ST_M29W040B,
5032 .total_size = 512,
5033 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005034 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005035 .tested = TEST_UNTESTED,
5036 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005037 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005038 .erase = NULL,
5039 .block_erasers =
5040 {
5041 {
5042 .eraseblocks = { {64 * 1024, 8}, },
5043 .block_erase = erase_sector_jedec,
5044 }, {
5045 .eraseblocks = { {512 * 1024, 1} },
5046 .block_erase = erase_chip_block_jedec,
5047 }
5048 },
Sean Nelson35727f72010-01-28 23:55:12 +00005049 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005050 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005051 },
5052
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005053 {
5054 .vendor = "ST",
5055 .name = "M50FLW040A",
Sean Nelson35727f72010-01-28 23:55:12 +00005056 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005057 .manufacture_id = ST_ID,
5058 .model_id = ST_M50FLW040A,
5059 .total_size = 512,
5060 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005061 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005062 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005063 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005064 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005065 .erase = NULL,
5066 .block_erasers =
5067 {
5068 {
Sean Nelson329bde72010-01-19 16:39:19 +00005069 .eraseblocks = {
5070 {4 * 1024, 16}, /* sector */
5071 {64 * 1024, 5}, /* block */
5072 {4 * 1024, 16}, /* sector */
5073 {4 * 1024, 16}, /* sector */
5074 },
5075 .block_erase = NULL,
5076 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005077 .eraseblocks = { {64 * 1024, 8}, },
5078 .block_erase = erase_block_stm50flw0x0x,
5079 }, {
5080 .eraseblocks = { {512 * 1024, 1} },
5081 .block_erase = erase_chip_stm50flw0x0x,
5082 }
5083 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005084 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005085 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005086 },
5087
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005088 {
5089 .vendor = "ST",
5090 .name = "M50FLW040B",
Sean Nelson35727f72010-01-28 23:55:12 +00005091 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005092 .manufacture_id = ST_ID,
5093 .model_id = ST_M50FLW040B,
5094 .total_size = 512,
5095 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005096 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005097 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005098 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005099 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005100 .erase = NULL,
5101 .block_erasers =
5102 {
5103 {
Sean Nelson329bde72010-01-19 16:39:19 +00005104 .eraseblocks = {
5105 {4 * 1024, 16}, /* sector */
5106 {4 * 1024, 16}, /* sector */
5107 {64 * 1024, 5}, /* block */
5108 {4 * 1024, 16}, /* sector */
5109 },
5110 .block_erase = NULL,
5111 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005112 .eraseblocks = { {64 * 1024, 8}, },
5113 .block_erase = erase_block_stm50flw0x0x,
5114 }, {
5115 .eraseblocks = { {512 * 1024, 1} },
5116 .block_erase = erase_chip_stm50flw0x0x,
5117 }
5118 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005119 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005120 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005121 },
5122
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005123 {
5124 .vendor = "ST",
5125 .name = "M50FLW080A",
Sean Nelson35727f72010-01-28 23:55:12 +00005126 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005127 .manufacture_id = ST_ID,
5128 .model_id = ST_M50FLW080A,
5129 .total_size = 1024,
5130 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005131 .feature_bits = 0,
5132 .tested = TEST_UNTESTED,
5133 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005134 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005135 .erase = NULL,
5136 .block_erasers =
5137 {
5138 {
Sean Nelson329bde72010-01-19 16:39:19 +00005139 .eraseblocks = {
5140 {4 * 1024, 16}, /* sector */
5141 {64 * 1024, 13}, /* block */
5142 {4 * 1024, 16}, /* sector */
5143 {4 * 1024, 16}, /* sector */
5144 },
5145 .block_erase = NULL,
5146 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005147 .eraseblocks = { {64 * 1024, 16}, },
5148 .block_erase = erase_block_stm50flw0x0x,
5149 }, {
5150 .eraseblocks = { {1024 * 1024, 1} },
5151 .block_erase = erase_chip_stm50flw0x0x,
5152 }
5153 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005154 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005155 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005156 },
5157
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005158 {
5159 .vendor = "ST",
5160 .name = "M50FLW080B",
Sean Nelson35727f72010-01-28 23:55:12 +00005161 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005162 .manufacture_id = ST_ID,
5163 .model_id = ST_M50FLW080B,
5164 .total_size = 1024,
5165 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005166 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005167 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005168 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005169 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005170 .erase = NULL,
5171 .block_erasers =
5172 {
5173 {
Sean Nelson329bde72010-01-19 16:39:19 +00005174 .eraseblocks = {
5175 {4 * 1024, 16}, /* sector */
5176 {4 * 1024, 16}, /* sector */
5177 {64 * 1024, 13}, /* block */
5178 {4 * 1024, 16}, /* sector */
5179 },
5180 .block_erase = NULL,
5181 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005182 .eraseblocks = { {64 * 1024, 16}, },
5183 .block_erase = erase_block_stm50flw0x0x,
5184 }, {
5185 .eraseblocks = { {1024 * 1024, 1} },
5186 .block_erase = erase_chip_stm50flw0x0x,
5187 }
5188 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005189 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005190 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005191 },
5192
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005193 {
5194 .vendor = "ST",
5195 .name = "M50FW002",
Urja Rannikko038a3122009-06-28 19:19:25 +00005196 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005197 .manufacture_id = ST_ID,
5198 .model_id = ST_M50FW002,
5199 .total_size = 256,
5200 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005201 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005202 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005203 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005204 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005205 .erase = NULL,
Sean Nelson56358aa2010-01-19 16:08:51 +00005206 .block_erasers =
5207 {
5208 {
5209 .eraseblocks = {
5210 {64 * 1024, 3},
5211 {32 * 1024, 1},
5212 {8 * 1024, 2},
5213 {16 * 1024, 1},
5214 },
5215 .block_erase = erase_block_stm50flw0x0x,
5216 }, {
5217 .eraseblocks = { {256 * 1024, 1} },
5218 .block_erase = erase_chip_stm50flw0x0x,
5219 }
5220 },
Sean Nelson35727f72010-01-28 23:55:12 +00005221 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005222 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005223 },
5224
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005225 {
5226 .vendor = "ST",
5227 .name = "M50FW016",
Urja Rannikko038a3122009-06-28 19:19:25 +00005228 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005229 .manufacture_id = ST_ID,
5230 .model_id = ST_M50FW016,
5231 .total_size = 2048,
5232 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005233 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005234 .tested = TEST_UNTESTED,
5235 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005236 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005237 .erase = NULL,
5238 .block_erasers =
5239 {
5240 {
5241 .eraseblocks = { {64 * 1024, 32}, },
5242 .block_erase = erase_block_stm50flw0x0x,
5243 }, {
5244 .eraseblocks = { {2 * 1024 * 1024, 1} },
5245 .block_erase = erase_chip_stm50flw0x0x,
5246 }
5247 },
5248 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005249 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005250 },
5251
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005252 {
5253 .vendor = "ST",
5254 .name = "M50FW040",
Urja Rannikko038a3122009-06-28 19:19:25 +00005255 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005256 .manufacture_id = ST_ID,
5257 .model_id = ST_M50FW040,
5258 .total_size = 512,
5259 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005260 .feature_bits = 0,
Sean Nelson56358aa2010-01-19 16:08:51 +00005261 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005262 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005263 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005264 .erase = NULL,
5265 .block_erasers =
5266 {
5267 {
5268 .eraseblocks = { {64 * 1024, 8}, },
5269 .block_erase = erase_block_stm50flw0x0x,
5270 }, {
5271 .eraseblocks = { {512 * 1024, 1} },
5272 .block_erase = erase_chip_stm50flw0x0x,
5273 }
5274 },
5275 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005276 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005277 },
5278
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005279 {
5280 .vendor = "ST",
5281 .name = "M50FW080",
Urja Rannikko038a3122009-06-28 19:19:25 +00005282 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005283 .manufacture_id = ST_ID,
5284 .model_id = ST_M50FW080,
5285 .total_size = 1024,
5286 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005287 .feature_bits = 0,
Sean Nelson56358aa2010-01-19 16:08:51 +00005288 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005289 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005290 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005291 .erase = NULL,
5292 .block_erasers =
5293 {
5294 {
5295 .eraseblocks = { {64 * 1024, 16}, },
5296 .block_erase = erase_block_stm50flw0x0x,
5297 }, {
5298 .eraseblocks = { {1024 * 1024, 1} },
5299 .block_erase = erase_chip_stm50flw0x0x,
5300 }
5301 },
5302 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005303 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005304 },
5305
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005306 {
5307 .vendor = "ST",
5308 .name = "M50LPW116",
Urja Rannikko038a3122009-06-28 19:19:25 +00005309 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005310 .manufacture_id = ST_ID,
5311 .model_id = ST_M50LPW116,
5312 .total_size = 2048,
5313 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005314 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005315 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005316 .probe = probe_82802ab,
Udu Ogahc04ee222009-09-05 01:31:32 +00005317 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005318 .erase = NULL,
5319 .block_erasers =
5320 {
5321 {
5322 .eraseblocks = {
5323 {4 * 1024, 16},
5324 {64 * 1024, 30},
5325 {32 * 1024, 1},
5326 {8 * 1024, 2},
5327 {16 * 1024, 1},
5328 },
5329 .block_erase = erase_block_stm50flw0x0x,
5330 }, {
5331 .eraseblocks = { {2 * 1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00005332 .block_erase = erase_chip_stm50flw0x0x,
Sean Nelson56358aa2010-01-19 16:08:51 +00005333 }
5334 },
Sean Nelson35727f72010-01-28 23:55:12 +00005335 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005336 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005337 },
5338
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005339 {
5340 .vendor = "SyncMOS",
5341 .name = "S29C31004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005342 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005343 .manufacture_id = SYNCMOS_ID,
5344 .model_id = S29C31004T,
5345 .total_size = 512,
5346 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005347 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005348 .tested = TEST_UNTESTED,
5349 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005350 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005351 .erase = NULL,
5352 .block_erasers =
5353 {
5354 {
5355 .eraseblocks = { {1 * 1024, 512} },
5356 .block_erase = erase_sector_jedec,
5357 }, {
5358 .eraseblocks = { {512 * 1024, 1} },
5359 .block_erase = erase_chip_block_jedec,
5360 },
5361 },
Sean Nelson35727f72010-01-28 23:55:12 +00005362 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005363 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005364 },
5365
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005366 {
5367 .vendor = "SyncMOS",
5368 .name = "S29C51001T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005369 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005370 .manufacture_id = SYNCMOS_ID,
5371 .model_id = S29C51001T,
5372 .total_size = 128,
5373 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005374 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005375 .tested = TEST_UNTESTED,
5376 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005377 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005378 .erase = NULL,
5379 .block_erasers =
5380 {
5381 {
5382 .eraseblocks = { {512, 256} },
5383 .block_erase = erase_sector_jedec,
5384 }, {
5385 .eraseblocks = { {128 * 1024, 1} },
5386 .block_erase = erase_chip_block_jedec,
5387 },
5388 },
Sean Nelson35727f72010-01-28 23:55:12 +00005389 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005390 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005391 },
5392
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005393 {
5394 .vendor = "SyncMOS",
5395 .name = "S29C51002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005396 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005397 .manufacture_id = SYNCMOS_ID,
5398 .model_id = S29C51002T,
5399 .total_size = 256,
5400 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005401 .feature_bits = FEATURE_EITHER_RESET,
5402 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005403 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005404 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005405 .erase = NULL,
5406 .block_erasers =
5407 {
5408 {
5409 .eraseblocks = { {512, 512} },
5410 .block_erase = erase_sector_jedec,
5411 }, {
5412 .eraseblocks = { {256 * 1024, 1} },
5413 .block_erase = erase_chip_block_jedec,
5414 },
5415 },
Sean Nelson35727f72010-01-28 23:55:12 +00005416 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005417 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005418 },
5419
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005420 {
5421 .vendor = "SyncMOS",
5422 .name = "S29C51004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005423 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005424 .manufacture_id = SYNCMOS_ID,
5425 .model_id = S29C51004T,
5426 .total_size = 512,
5427 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005428 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005429 .tested = TEST_UNTESTED,
5430 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005431 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005432 .erase = NULL,
5433 .block_erasers =
5434 {
5435 {
Sean Nelson012a31e2010-01-19 20:23:26 +00005436 .eraseblocks = { {1 * 1024, 512} },
Sean Nelson56358aa2010-01-19 16:08:51 +00005437 .block_erase = erase_sector_jedec,
5438 }, {
5439 .eraseblocks = { {512 * 1024, 1} },
5440 .block_erase = erase_chip_block_jedec,
5441 },
5442 },
Sean Nelson35727f72010-01-28 23:55:12 +00005443 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005444 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005445 },
5446
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005447 {
Uwe Hermanna106d152009-05-27 23:17:40 +00005448 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005449 .name = "TMS29F002RB",
Urja Rannikko038a3122009-06-28 19:19:25 +00005450 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005451 .manufacture_id = TI_OLD_ID,
5452 .model_id = TI_TMS29F002RB,
5453 .total_size = 256,
5454 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00005455 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005456 .tested = TEST_UNTESTED,
5457 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005458 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005459 .erase = NULL,
Sean Nelson56358aa2010-01-19 16:08:51 +00005460 .block_erasers =
5461 {
5462 {
5463 .eraseblocks = {
5464 {16 * 1024, 1},
5465 {8 * 1024, 2},
5466 {32 * 1024, 1},
5467 {64 * 1024, 3},
5468 },
5469 .block_erase = erase_sector_jedec,
5470 }, {
5471 .eraseblocks = { {256 * 1024, 1} },
5472 .block_erase = erase_chip_block_jedec,
5473 },
5474 },
Sean Nelson35727f72010-01-28 23:55:12 +00005475 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005476 .read = read_memmapped,
5477 },
5478
5479 {
Uwe Hermanna106d152009-05-27 23:17:40 +00005480 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005481 .name = "TMS29F002RT",
Urja Rannikko038a3122009-06-28 19:19:25 +00005482 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005483 .manufacture_id = TI_OLD_ID,
5484 .model_id = TI_TMS29F002RT,
5485 .total_size = 256,
5486 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00005487 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005488 .tested = TEST_UNTESTED,
5489 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005490 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005491 .erase = NULL,
Sean Nelson56358aa2010-01-19 16:08:51 +00005492 .block_erasers =
5493 {
5494 {
5495 .eraseblocks = {
5496 {64 * 1024, 3},
5497 {32 * 1024, 1},
5498 {8 * 1024, 2},
5499 {16 * 1024, 1},
5500 },
5501 .block_erase = erase_sector_jedec,
5502 }, {
5503 .eraseblocks = { {256 * 1024, 1} },
5504 .block_erase = erase_chip_block_jedec,
5505 },
5506 },
Sean Nelson35727f72010-01-28 23:55:12 +00005507 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005508 .read = read_memmapped,
5509 },
5510
5511 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005512 .vendor = "Winbond",
5513 .name = "W25x10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005514 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005515 .manufacture_id = WINBOND_NEX_ID,
5516 .model_id = W_25X10,
5517 .total_size = 128,
5518 .page_size = 256,
5519 .tested = TEST_UNTESTED,
5520 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005521 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005522 .erase = NULL,
5523 .block_erasers =
5524 {
5525 {
5526 .eraseblocks = { {4 * 1024, 32} },
5527 .block_erase = spi_block_erase_20,
5528 }, {
5529 .eraseblocks = { {32 * 1024, 4} },
5530 .block_erase = spi_block_erase_52,
5531 }, {
5532 .eraseblocks = { {64 * 1024, 2} },
5533 .block_erase = spi_block_erase_d8,
5534 }, {
5535 .eraseblocks = { {128 * 1024, 1} },
5536 .block_erase = spi_block_erase_60,
5537 }, {
5538 .eraseblocks = { {128 * 1024, 1} },
5539 .block_erase = spi_block_erase_c7,
5540 }
5541 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005542 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005543 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005544 },
5545
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005546 {
5547 .vendor = "Winbond",
5548 .name = "W25x20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005549 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005550 .manufacture_id = WINBOND_NEX_ID,
5551 .model_id = W_25X20,
5552 .total_size = 256,
5553 .page_size = 256,
5554 .tested = TEST_UNTESTED,
5555 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005556 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005557 .erase = NULL,
5558 .block_erasers =
5559 {
5560 {
5561 .eraseblocks = { {4 * 1024, 64} },
5562 .block_erase = spi_block_erase_20,
5563 }, {
5564 .eraseblocks = { {32 * 1024, 8} },
5565 .block_erase = spi_block_erase_52,
5566 }, {
5567 .eraseblocks = { {64 * 1024, 4} },
5568 .block_erase = spi_block_erase_d8,
5569 }, {
5570 .eraseblocks = { {256 * 1024, 1} },
5571 .block_erase = spi_block_erase_60,
5572 }, {
5573 .eraseblocks = { {256 * 1024, 1} },
5574 .block_erase = spi_block_erase_c7,
5575 }
5576 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005577 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005578 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005579 },
5580
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005581 {
5582 .vendor = "Winbond",
5583 .name = "W25x40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005584 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005585 .manufacture_id = WINBOND_NEX_ID,
5586 .model_id = W_25X40,
5587 .total_size = 512,
5588 .page_size = 256,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005589 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005590 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005591 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005592 .erase = NULL,
5593 .block_erasers =
5594 {
5595 {
5596 .eraseblocks = { {4 * 1024, 128} },
5597 .block_erase = spi_block_erase_20,
5598 }, {
5599 .eraseblocks = { {32 * 1024, 16} },
5600 .block_erase = spi_block_erase_52,
5601 }, {
5602 .eraseblocks = { {64 * 1024, 8} },
5603 .block_erase = spi_block_erase_d8,
5604 }, {
5605 .eraseblocks = { {512 * 1024, 1} },
5606 .block_erase = spi_block_erase_60,
5607 }, {
5608 .eraseblocks = { {512 * 1024, 1} },
5609 .block_erase = spi_block_erase_c7,
5610 }
5611 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005612 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005613 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005614 },
5615
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005616 {
5617 .vendor = "Winbond",
5618 .name = "W25x80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005619 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005620 .manufacture_id = WINBOND_NEX_ID,
5621 .model_id = W_25X80,
5622 .total_size = 1024,
5623 .page_size = 256,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005624 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005625 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005626 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005627 .erase = NULL,
5628 .block_erasers =
5629 {
5630 {
5631 .eraseblocks = { {4 * 1024, 256} },
5632 .block_erase = spi_block_erase_20,
5633 }, {
5634 .eraseblocks = { {32 * 1024, 32} },
5635 .block_erase = spi_block_erase_52,
5636 }, {
5637 .eraseblocks = { {64 * 1024, 16} },
5638 .block_erase = spi_block_erase_d8,
5639 }, {
5640 .eraseblocks = { {1024 * 1024, 1} },
5641 .block_erase = spi_block_erase_60,
5642 }, {
5643 .eraseblocks = { {1024 * 1024, 1} },
5644 .block_erase = spi_block_erase_c7,
5645 }
5646 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005647 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005648 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005649 },
5650
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005651 {
5652 .vendor = "Winbond",
Hector Martina721ae22009-07-11 19:39:11 +00005653 .name = "W25x16",
5654 .bustype = CHIP_BUSTYPE_SPI,
5655 .manufacture_id = WINBOND_NEX_ID,
5656 .model_id = W_25X16,
5657 .total_size = 2048,
5658 .page_size = 256,
5659 .tested = TEST_OK_PR,
5660 .probe = probe_spi_rdid,
5661 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005662 .erase = NULL,
5663 .block_erasers =
5664 {
5665 {
5666 .eraseblocks = { {4 * 1024, 512} },
5667 .block_erase = spi_block_erase_20,
5668 }, {
5669 .eraseblocks = { {32 * 1024, 64} },
5670 .block_erase = spi_block_erase_52,
5671 }, {
5672 .eraseblocks = { {64 * 1024, 32} },
5673 .block_erase = spi_block_erase_d8,
5674 }, {
5675 .eraseblocks = { {2 * 1024 * 1024, 1} },
5676 .block_erase = spi_block_erase_60,
5677 }, {
5678 .eraseblocks = { {2 * 1024 * 1024, 1} },
5679 .block_erase = spi_block_erase_c7,
5680 }
5681 },
Hector Martina721ae22009-07-11 19:39:11 +00005682 .write = spi_chip_write_256,
5683 .read = spi_chip_read,
5684 },
5685
5686 {
5687 .vendor = "Winbond",
Zheng Bao1db2b752009-11-26 11:05:01 +00005688 .name = "W25x32",
5689 .bustype = CHIP_BUSTYPE_SPI,
5690 .manufacture_id = WINBOND_NEX_ID,
5691 .model_id = W_25X32,
5692 .total_size = 4096,
5693 .page_size = 256,
5694 .tested = TEST_OK_PROBE,
5695 .probe = probe_spi_rdid,
5696 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005697 .erase = NULL,
5698 .block_erasers =
5699 {
5700 {
5701 .eraseblocks = { {4 * 1024, 1024} },
5702 .block_erase = spi_block_erase_20,
5703 }, {
5704 .eraseblocks = { {32 * 1024, 128} },
5705 .block_erase = spi_block_erase_52,
5706 }, {
5707 .eraseblocks = { {64 * 1024, 64} },
5708 .block_erase = spi_block_erase_d8,
5709 }, {
5710 .eraseblocks = { {4 * 1024 * 1024, 1} },
5711 .block_erase = spi_block_erase_60,
5712 }, {
5713 .eraseblocks = { {4 * 1024 * 1024, 1} },
5714 .block_erase = spi_block_erase_c7,
5715 }
5716 },
Zheng Bao1db2b752009-11-26 11:05:01 +00005717 .write = spi_chip_write_256,
5718 .read = spi_chip_read,
5719 },
5720
5721 {
5722 .vendor = "Winbond",
5723 .name = "W25x64",
5724 .bustype = CHIP_BUSTYPE_SPI,
5725 .manufacture_id = WINBOND_NEX_ID,
5726 .model_id = W_25X64,
5727 .total_size = 8192,
5728 .page_size = 256,
5729 .tested = TEST_UNTESTED,
5730 .probe = probe_spi_rdid,
5731 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005732 .erase = NULL,
5733 .block_erasers =
5734 {
5735 {
5736 .eraseblocks = { {4 * 1024, 2048} },
5737 .block_erase = spi_block_erase_20,
5738 }, {
5739 .eraseblocks = { {32 * 1024, 256} },
5740 .block_erase = spi_block_erase_52,
5741 }, {
5742 .eraseblocks = { {64 * 1024, 128} },
5743 .block_erase = spi_block_erase_d8,
5744 }, {
5745 .eraseblocks = { {8 * 1024 * 1024, 1} },
5746 .block_erase = spi_block_erase_60,
5747 }, {
5748 .eraseblocks = { {8 * 1024 * 1024, 1} },
5749 .block_erase = spi_block_erase_c7,
5750 }
5751 },
Zheng Bao1db2b752009-11-26 11:05:01 +00005752 .write = spi_chip_write_256,
5753 .read = spi_chip_read,
5754 },
5755
5756 {
5757 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005758 .name = "W29C011",
Urja Rannikko038a3122009-06-28 19:19:25 +00005759 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005760 .manufacture_id = WINBOND_ID,
5761 .model_id = W_29C011,
5762 .total_size = 128,
5763 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005764 .feature_bits = FEATURE_LONG_RESET,
5765 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005766 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005767 .probe_timing = 10, /* used datasheet for the W29C011A */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005768 .erase = NULL,
5769 .block_erasers =
5770 {
5771 {
5772 .eraseblocks = { {128 * 1024, 1} },
5773 .block_erase = erase_chip_block_jedec,
5774 }
5775 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005776 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005777 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005778 },
5779
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005780 {
5781 .vendor = "Winbond",
5782 .name = "W29C020C",
Urja Rannikko161b8852009-06-05 08:47:37 +00005783 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005784 .manufacture_id = WINBOND_ID,
5785 .model_id = W_29C020C,
5786 .total_size = 256,
5787 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005788 .feature_bits = FEATURE_LONG_RESET,
5789 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005790 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005791 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005792 .erase = NULL,
5793 .block_erasers =
5794 {
5795 {
5796 .eraseblocks = { {256 * 1024, 1} },
5797 .block_erase = erase_chip_block_jedec,
5798 }
5799 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005800 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005801 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005802 },
5803
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005804 {
5805 .vendor = "Winbond",
5806 .name = "W29C040P",
Urja Rannikko161b8852009-06-05 08:47:37 +00005807 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005808 .manufacture_id = WINBOND_ID,
5809 .model_id = W_29C040P,
5810 .total_size = 512,
5811 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00005812 .feature_bits = FEATURE_LONG_RESET,
5813 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005814 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005815 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005816 .erase = NULL,
5817 .block_erasers =
5818 {
5819 {
5820 .eraseblocks = { {512 * 1024, 1} },
5821 .block_erase = erase_chip_block_jedec,
5822 }
5823 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005824 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005825 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005826 },
5827
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005828 {
5829 .vendor = "Winbond",
5830 .name = "W29EE011",
Urja Rannikko038a3122009-06-28 19:19:25 +00005831 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005832 .manufacture_id = WINBOND_ID,
5833 .model_id = W_29C011,
5834 .total_size = 128,
5835 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005836 .feature_bits = FEATURE_LONG_RESET,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005837 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005838 .probe = probe_w29ee011,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005839 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w29ee011.c) */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005840 .erase = NULL,
5841 .block_erasers =
5842 {
5843 {
5844 .eraseblocks = { {128 * 1024, 1} },
5845 .block_erase = erase_chip_block_jedec,
5846 }
5847 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005848 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005849 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005850 },
5851
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005852 {
5853 .vendor = "Winbond",
5854 .name = "W39V040A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005855 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005856 .manufacture_id = WINBOND_ID,
5857 .model_id = W_39V040A,
5858 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005859 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005860 .feature_bits = FEATURE_EITHER_RESET,
5861 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005862 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005863 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005864 .erase = NULL,
5865 .block_erasers =
5866 {
5867 {
5868 .eraseblocks = { {64 * 1024, 8} },
5869 .block_erase = erase_sector_jedec,
5870 }, {
5871 .eraseblocks = { {512 * 1024, 1} },
5872 .block_erase = erase_chip_block_jedec,
5873 }
5874 },
Sean Nelson35727f72010-01-28 23:55:12 +00005875 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005876 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005877 },
5878
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005879 {
5880 .vendor = "Winbond",
5881 .name = "W39V040B",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005882 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005883 .manufacture_id = WINBOND_ID,
5884 .model_id = W_39V040B,
5885 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005886 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005887 .feature_bits = FEATURE_EITHER_RESET,
5888 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005889 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005890 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005891 .erase = NULL,
5892 .block_erasers =
5893 {
5894 {
5895 .eraseblocks = { {64 * 1024, 8} },
5896 .block_erase = erase_sector_jedec,
5897 }, {
5898 .eraseblocks = { {512 * 1024, 1} },
5899 .block_erase = erase_chip_block_jedec,
5900 }
5901 },
Sean Nelson35727f72010-01-28 23:55:12 +00005902 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005903 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005904 },
5905
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005906 {
5907 .vendor = "Winbond",
5908 .name = "W39V040C",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005909 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005910 .manufacture_id = WINBOND_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005911 .model_id = W_39V040C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005912 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005913 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005914 .feature_bits = FEATURE_EITHER_RESET,
5915 .tested = TEST_UNTESTED,
5916 .probe = probe_jedec,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005917 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005918 .erase = NULL, /* Was erase_w39v040c */
5919 .block_erasers =
5920 {
5921 {
5922 .eraseblocks = { {64 * 1024, 8} },
5923 .block_erase = erase_sector_jedec,
5924 }, {
5925 .eraseblocks = { {512 * 1024, 1} },
5926 .block_erase = erase_chip_block_jedec,
5927 }
5928 },
Sean Nelson35727f72010-01-28 23:55:12 +00005929 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005930 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005931 },
5932
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005933 {
5934 .vendor = "Winbond",
5935 .name = "W39V040FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005936 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005937 .manufacture_id = WINBOND_ID,
5938 .model_id = W_39V040FA,
5939 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005940 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005941 .feature_bits = FEATURE_EITHER_RESET,
5942 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005943 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005944 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005945 .erase = NULL,
5946 .block_erasers =
5947 {
5948 {
5949 .eraseblocks = { {4 * 1024, 128} },
5950 .block_erase = erase_block_jedec,
5951 }, {
5952 .eraseblocks = { {64 * 1024, 8} },
5953 .block_erase = erase_sector_jedec,
5954 }, {
5955 .eraseblocks = { {512 * 1024, 1} },
5956 .block_erase = erase_chip_block_jedec,
5957 }
5958 },
Sean Nelson35727f72010-01-28 23:55:12 +00005959 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005960 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005961 },
5962
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005963 {
5964 .vendor = "Winbond",
5965 .name = "W39V080A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005966 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005967 .manufacture_id = WINBOND_ID,
5968 .model_id = W_39V080A,
5969 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00005970 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005971 .feature_bits = FEATURE_EITHER_RESET,
5972 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005973 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005974 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005975 .erase = NULL,
5976 .block_erasers =
5977 {
5978 {
5979 .eraseblocks = { {64 * 1024, 16} },
5980 .block_erase = erase_sector_jedec,
5981 }, {
5982 .eraseblocks = { {1024 * 1024, 1} },
5983 .block_erase = erase_chip_block_jedec,
5984 }
5985 },
Sean Nelson35727f72010-01-28 23:55:12 +00005986 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005987 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005988 },
5989
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005990 {
5991 .vendor = "Winbond",
5992 .name = "W49F002U",
Urja Rannikko038a3122009-06-28 19:19:25 +00005993 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005994 .manufacture_id = WINBOND_ID,
5995 .model_id = W_49F002U,
5996 .total_size = 256,
5997 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005998 .feature_bits = FEATURE_EITHER_RESET,
5999 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006000 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006001 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006002 .erase = NULL,
6003 .block_erasers =
6004 {
6005 {
6006 .eraseblocks = {
6007 {128 * 1024, 1},
6008 {96 * 1024, 1},
6009 {8 * 1024, 2},
6010 {16 * 1024, 1},
6011 },
6012 .block_erase = erase_sector_jedec,
6013 }, {
6014 .eraseblocks = { {256 * 1024, 1} },
6015 .block_erase = erase_chip_block_jedec,
6016 }
6017 },
Sean Nelson35727f72010-01-28 23:55:12 +00006018 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006019 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006020 },
6021
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006022 {
6023 .vendor = "Winbond",
6024 .name = "W49V002A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006025 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006026 .manufacture_id = WINBOND_ID,
6027 .model_id = W_49V002A,
6028 .total_size = 256,
6029 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006030 .feature_bits = FEATURE_EITHER_RESET,
6031 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006032 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006033 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006034 .erase = NULL,
6035 .block_erasers =
6036 {
6037 {
6038 .eraseblocks = {
6039 {64 * 1024, 3},
6040 {32 * 1024, 1},
6041 {8 * 1024, 2},
6042 {16 * 1024, 1},
6043 },
6044 .block_erase = erase_sector_jedec,
6045 }, {
6046 .eraseblocks = { {256 * 1024, 1} },
6047 .block_erase = erase_chip_block_jedec,
6048 }
6049 },
Sean Nelson35727f72010-01-28 23:55:12 +00006050 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006051 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006052 },
6053
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006054 {
6055 .vendor = "Winbond",
6056 .name = "W49V002FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006057 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006058 .manufacture_id = WINBOND_ID,
6059 .model_id = W_49V002FA,
6060 .total_size = 256,
6061 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006062 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006063 .tested = TEST_UNTESTED,
6064 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006065 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006066 .erase = NULL,
6067 .block_erasers =
6068 {
6069 {
6070 .eraseblocks = {
6071 {64 * 1024, 3},
6072 {32 * 1024, 1},
6073 {8 * 1024, 2},
6074 {16 * 1024, 1},
6075 },
6076 .block_erase = erase_sector_jedec,
6077 }, {
6078 .eraseblocks = { {256 * 1024, 1} },
6079 .block_erase = erase_chip_block_jedec,
6080 }
6081 },
Sean Nelson35727f72010-01-28 23:55:12 +00006082 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006083 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006084 },
6085
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006086 {
6087 .vendor = "Winbond",
6088 .name = "W39V080FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006089 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006090 .manufacture_id = WINBOND_ID,
6091 .model_id = W_39V080FA,
6092 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00006093 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006094 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
6095 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00006096 .probe = probe_jedec,
6097 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006098 .erase = NULL, /* Was erase_winbond_fwhub */
6099 .block_erasers =
6100 {
6101 {
6102 .eraseblocks = { {64 * 1024, 16}, },
6103 .block_erase = erase_sector_jedec,
6104 }, {
6105 .eraseblocks = { {1024 * 1024, 1} },
6106 .block_erase = erase_chip_block_jedec,
6107 }
6108 },
Sean Nelson35727f72010-01-28 23:55:12 +00006109 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006110 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006111 },
6112
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006113 {
6114 .vendor = "Winbond",
6115 .name = "W39V080FA (dual mode)",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006116 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006117 .manufacture_id = WINBOND_ID,
6118 .model_id = W_39V080FA_DM,
6119 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006120 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006121 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006122 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00006123 .probe = probe_jedec,
6124 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006125 .erase = NULL, /* Was erase_winbond_fwhub */
6126 .block_erasers =
6127 {
6128 {
6129 .eraseblocks = { {64 * 1024, 8}, },
6130 .block_erase = erase_sector_jedec,
6131 }, {
6132 .eraseblocks = { {512 * 1024, 1} },
6133 .block_erase = erase_chip_block_jedec,
6134 }
6135 },
Sean Nelson35727f72010-01-28 23:55:12 +00006136 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006137 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006138 },
6139
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006140 {
6141 .vendor = "Atmel",
6142 .name = "unknown Atmel SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006143 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006144 .manufacture_id = ATMEL_ID,
6145 .model_id = GENERIC_DEVICE_ID,
6146 .total_size = 0,
6147 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006148 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006149 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006150 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006151 .erase = NULL,
6152 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006153 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006154 },
6155
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006156 {
6157 .vendor = "EON",
6158 .name = "unknown EON SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006159 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006160 .manufacture_id = EON_ID_NOPREFIX,
6161 .model_id = GENERIC_DEVICE_ID,
6162 .total_size = 0,
6163 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006164 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006165 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006166 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006167 .erase = NULL,
6168 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006169 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006170 },
6171
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006172 {
6173 .vendor = "Macronix",
6174 .name = "unknown Macronix SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006175 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006176 .manufacture_id = MX_ID,
6177 .model_id = GENERIC_DEVICE_ID,
6178 .total_size = 0,
6179 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006180 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006181 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006182 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006183 .erase = NULL,
6184 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006185 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006186 },
6187
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006188 {
6189 .vendor = "PMC",
6190 .name = "unknown PMC SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006191 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006192 .manufacture_id = PMC_ID,
6193 .model_id = GENERIC_DEVICE_ID,
6194 .total_size = 0,
6195 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006196 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006197 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006198 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006199 .erase = NULL,
6200 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006201 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006202 },
6203
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006204 {
6205 .vendor = "SST",
6206 .name = "unknown SST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006207 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006208 .manufacture_id = SST_ID,
6209 .model_id = GENERIC_DEVICE_ID,
6210 .total_size = 0,
6211 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006212 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006213 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006214 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006215 .erase = NULL,
6216 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006217 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006218 },
6219
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006220 {
6221 .vendor = "ST",
6222 .name = "unknown ST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006223 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006224 .manufacture_id = ST_ID,
6225 .model_id = GENERIC_DEVICE_ID,
6226 .total_size = 0,
6227 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006228 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006229 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006230 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006231 .erase = NULL,
6232 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006233 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006234 },
Uwe Hermannfc425e82008-03-16 02:06:25 +00006235
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006236 {
Sean Nelson118e1d62009-11-24 02:08:11 +00006237 .vendor = "Sanyo",
6238 .name = "unknown Sanyo SPI chip",
6239 .bustype = CHIP_BUSTYPE_SPI,
6240 .manufacture_id = SANYO_ID,
6241 .model_id = GENERIC_DEVICE_ID,
6242 .total_size = 0,
6243 .page_size = 256,
6244 .tested = TEST_BAD_PREW,
6245 .probe = probe_spi_rdid,
6246 .probe_timing = TIMING_ZERO,
6247 .erase = NULL,
6248 .write = NULL,
6249 .read = NULL,
6250 },
6251
6252 {
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006253 .vendor = "Generic",
6254 .name = "unknown SPI chip (RDID)",
6255 .bustype = CHIP_BUSTYPE_SPI,
6256 .manufacture_id = GENERIC_MANUF_ID,
6257 .model_id = GENERIC_DEVICE_ID,
6258 .total_size = 0,
6259 .page_size = 256,
6260 .tested = TEST_BAD_PREW,
6261 .probe = probe_spi_rdid,
6262 .erase = NULL,
6263 .write = NULL,
6264 },
6265 {
6266 .vendor = "Generic",
6267 .name = "unknown SPI chip (REMS)",
6268 .bustype = CHIP_BUSTYPE_SPI,
6269 .manufacture_id = GENERIC_MANUF_ID,
6270 .model_id = GENERIC_DEVICE_ID,
6271 .total_size = 0,
6272 .page_size = 256,
6273 .tested = TEST_BAD_PREW,
6274 .probe = probe_spi_rems,
6275 .erase = NULL,
6276 .write = NULL,
6277 },
6278
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006279 { NULL }
Stephan Guilloux72cf5652009-04-21 01:46:07 +00006280};