blob: 5954eb2d9f0dc4702c3a2ace43da1fda89cf6b14 [file] [log] [blame]
Ollie Lho184a4042005-11-26 21:55:36 +00001/*
Uwe Hermannd1107642007-08-29 17:52:32 +00002 * This file is part of the flashrom project.
Ollie Lho184a4042005-11-26 21:55:36 +00003 *
Uwe Hermannd22a1d42007-09-09 20:21:05 +00004 * Copyright (C) 2000 Silicon Integrated System Corporation
5 * Copyright (C) 2004 Tyan Corp
Stefan Reinauer4c390c82008-07-02 13:33:09 +00006 * Copyright (C) 2005-2008 coresystems GmbH <stepan@openbios.org>
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00007 * Copyright (C) 2006-2009 Carl-Daniel Hailfinger
Sean Nelsonc57a9202010-01-04 17:15:23 +00008 * Copyright (C) 2009 Sean Nelson <audiohacked@gmail.com>
Uwe Hermannd1107642007-08-29 17:52:32 +00009 *
Stefan Reinauerce532972007-05-23 17:20:56 +000010 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
Ollie Lho184a4042005-11-26 21:55:36 +000014 *
Stefan Reinauerce532972007-05-23 17:20:56 +000015 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
Ollie Lho184a4042005-11-26 21:55:36 +000019 *
Stefan Reinauerce532972007-05-23 17:20:56 +000020 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
Uwe Hermannd1107642007-08-29 17:52:32 +000022 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Ollie Lho184a4042005-11-26 21:55:36 +000023 */
24
25#include "flash.h"
Carl-Daniel Hailfinger08454642009-06-15 14:14:48 +000026#include "flashchips.h"
Sean Nelson14ba6682010-02-26 05:48:29 +000027#include "chipdrivers.h"
Ollie Lho184a4042005-11-26 21:55:36 +000028
Uwe Hermannfc425e82008-03-16 02:06:25 +000029/**
Uwe Hermanna9720402009-05-21 15:55:46 +000030 * List of supported flash chips.
Uwe Hermannfc425e82008-03-16 02:06:25 +000031 *
32 * Please keep the list sorted by vendor name and chip name, so that
33 * the output of 'flashrom -L' is alphabetically sorted.
34 */
Ollie Lho184a4042005-11-26 21:55:36 +000035struct flashchip flashchips[] = {
Uwe Hermannfc425e82008-03-16 02:06:25 +000036
Carl-Daniel Hailfinger21eedec2009-07-23 12:42:01 +000037 /*
38 * .vendor = Vendor name
39 * .name = Chip name
40 * .bustype = Supported flash bus types (Parallel, LPC...)
41 * .manufacture_id = Manufacturer chip ID
42 * .model_id = Model chip ID
43 * .total_size = Total size in (binary) kbytes
44 * .page_size = Page or eraseblock(?) size in bytes
45 * .tested = Test status
46 * .probe = Probe function
47 * .probe_timing = Probe function delay
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +000048 * .block_erasers[] = Array of erase layouts and erase functions
49 * {
50 * .eraseblocks[] = Array of { blocksize, blockcount }
51 * .block_erase = Block erase function
52 * }
Sean Nelson6e0b9122010-02-19 00:52:10 +000053 * .printlock = Chip lock status function
54 * .unlock = Chip unlock function
Carl-Daniel Hailfinger21eedec2009-07-23 12:42:01 +000055 * .write = Chip write function
56 * .read = Chip read function
FENG yu ningff692fb2008-12-08 18:15:10 +000057 */
58
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000059 {
60 .vendor = "AMD",
Uwe Hermanna8b37272009-06-19 15:54:39 +000061 .name = "Am29F010A/B",
62 .bustype = CHIP_BUSTYPE_PARALLEL,
63 .manufacture_id = AMD_ID,
64 .model_id = AM_29F010B, /* Same as Am29F010A */
65 .total_size = 128,
66 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +000067 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
68 .tested = TEST_UNTESTED,
69 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +000070 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +000071 .block_erasers =
72 {
73 {
74 .eraseblocks = { {16 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +000075 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +000076 }, {
77 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +000078 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +000079 },
80 },
Sean Nelson35727f72010-01-28 23:55:12 +000081 .write = write_jedec_1,
Uwe Hermanna8b37272009-06-19 15:54:39 +000082 .read = read_memmapped,
83 },
84
85 {
86 .vendor = "AMD",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000087 .name = "Am29F002(N)BB",
Urja Rannikko038a3122009-06-28 19:19:25 +000088 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000089 .manufacture_id = AMD_ID,
90 .model_id = AM_29F002BB,
91 .total_size = 256,
92 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +000093 .feature_bits = FEATURE_SHORT_RESET | FEATURE_ADDR_2AA,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000094 .tested = TEST_UNTESTED,
95 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +000096 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +000097 .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 .block_erasers =
129 {
130 {
131 .eraseblocks = {
132 {64 * 1024, 3},
133 {32 * 1024, 1},
134 {8 * 1024, 2},
135 {16 * 1024, 1},
136 },
137 .block_erase = erase_sector_jedec,
138 }, {
139 .eraseblocks = { {256 * 1024, 1} },
140 .block_erase = erase_chip_block_jedec,
141 },
142 },
Michael Karcher1c296ca2009-11-27 17:49:42 +0000143 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000144 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000145 },
146
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000147 {
148 .vendor = "AMD",
149 .name = "Am29F016D",
Urja Rannikko038a3122009-06-28 19:19:25 +0000150 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000151 .manufacture_id = AMD_ID,
152 .model_id = AM_29F016D,
Sean Nelson72a9a022009-12-22 22:15:33 +0000153 .total_size = 2 * 1024,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000154 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000155 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000156 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +0000157 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000158 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000159 .block_erasers =
160 {
161 {
162 .eraseblocks = { {64 * 1024, 32} },
Sean Nelson35727f72010-01-28 23:55:12 +0000163 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000164 }, {
165 .eraseblocks = { {2048 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000166 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000167 },
168 },
Sean Nelson35727f72010-01-28 23:55:12 +0000169 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000170 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000171 },
172
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000173 {
174 .vendor = "AMD",
175 .name = "Am29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000176 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000177 .manufacture_id = AMD_ID,
178 .model_id = AM_29F040B,
179 .total_size = 512,
180 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000181 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
182 .tested = TEST_UNTESTED,
183 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000184 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000185 .block_erasers =
186 {
187 {
188 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +0000189 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000190 }, {
191 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000192 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000193 },
194 },
Sean Nelson35727f72010-01-28 23:55:12 +0000195 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000196 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000197 },
198
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000199 {
200 .vendor = "AMD",
Peter Stuge8440cc02009-01-25 23:55:12 +0000201 .name = "Am29F080B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000202 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawski5bae4382009-06-02 00:38:14 +0000203 .manufacture_id = AMD_ID,
204 .model_id = AM_29F080B,
Peter Stuge8440cc02009-01-25 23:55:12 +0000205 .total_size = 1024,
206 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000207 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +0000208 .tested = TEST_UNTESTED,
209 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +0000210 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000211 .block_erasers =
212 {
213 {
214 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson35727f72010-01-28 23:55:12 +0000215 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000216 }, {
217 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000218 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000219 },
220 },
Sean Nelson35727f72010-01-28 23:55:12 +0000221 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000222 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +0000223 },
224
225 {
226 .vendor = "AMD",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000227 .name = "Am29LV040B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000228 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000229 .manufacture_id = AMD_ID,
230 .model_id = AM_29LV040B,
231 .total_size = 512,
232 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000233 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000234 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +0000235 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000236 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000237 .block_erasers =
238 {
239 {
240 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +0000241 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000242 }, {
243 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000244 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000245 },
246 },
Sean Nelson35727f72010-01-28 23:55:12 +0000247 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000248 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000249 },
250
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000251 {
Peter Stuge8440cc02009-01-25 23:55:12 +0000252 .vendor = "AMD",
253 .name = "Am29LV081B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000254 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawski5bae4382009-06-02 00:38:14 +0000255 .manufacture_id = AMD_ID,
Carl-Daniel Hailfinger6d5d2532009-08-10 10:14:23 +0000256 .model_id = AM_29LV080B,
Peter Stuge8440cc02009-01-25 23:55:12 +0000257 .total_size = 1024,
258 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000259 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +0000260 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +0000261 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000262 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000263 .block_erasers =
264 {
265 {
266 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson35727f72010-01-28 23:55:12 +0000267 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000268 }, {
269 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000270 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000271 },
272 },
Sean Nelson35727f72010-01-28 23:55:12 +0000273 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000274 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +0000275 },
276
277 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000278 .vendor = "ASD",
279 .name = "AE49F2008",
Urja Rannikko038a3122009-06-28 19:19:25 +0000280 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000281 .manufacture_id = ASD_ID,
282 .model_id = ASD_AE49F2008,
283 .total_size = 256,
284 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +0000285 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000286 .tested = TEST_UNTESTED,
287 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000288 .probe_timing = TIMING_FIXME,
Sean Nelson54596372010-01-09 05:30:14 +0000289 .block_erasers =
290 {
291 {
292 .eraseblocks = {
293 {128 * 1024, 1},
294 {96 * 1024, 1},
295 {8 * 1024, 2},
296 {16 * 1024, 1},
297 },
298 .block_erase = erase_sector_jedec,
299 }, {
300 .eraseblocks = { {256 * 1024, 1} },
301 .block_erase = erase_chip_block_jedec,
302 }
303 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000304 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000305 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000306 },
307
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000308 {
309 .vendor = "Atmel",
310 .name = "AT25DF021",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000311 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000312 .manufacture_id = ATMEL_ID,
313 .model_id = AT_25DF021,
314 .total_size = 256,
315 .page_size = 256,
316 .tested = TEST_UNTESTED,
317 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000318 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000319 .block_erasers =
320 {
321 {
322 .eraseblocks = { {4 * 1024, 64} },
323 .block_erase = spi_block_erase_20,
324 }, {
325 .eraseblocks = { {32 * 1024, 8} },
326 .block_erase = spi_block_erase_52,
327 }, {
328 .eraseblocks = { {64 * 1024, 4} },
329 .block_erase = spi_block_erase_d8,
330 }, {
331 .eraseblocks = { {256 * 1024, 1} },
332 .block_erase = spi_block_erase_60,
333 }, {
334 .eraseblocks = { {256 * 1024, 1} },
335 .block_erase = spi_block_erase_c7,
336 }
337 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000338 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000339 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000340 },
341
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000342 {
343 .vendor = "Atmel",
344 .name = "AT25DF041A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000345 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000346 .manufacture_id = ATMEL_ID,
347 .model_id = AT_25DF041A,
348 .total_size = 512,
349 .page_size = 256,
350 .tested = TEST_UNTESTED,
351 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000352 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000353 .block_erasers =
354 {
355 {
356 .eraseblocks = { {4 * 1024, 128} },
357 .block_erase = spi_block_erase_20,
358 }, {
359 .eraseblocks = { {32 * 1024, 16} },
360 .block_erase = spi_block_erase_52,
361 }, {
362 .eraseblocks = { {64 * 1024, 8} },
363 .block_erase = spi_block_erase_d8,
364 }, {
365 .eraseblocks = { {512 * 1024, 1} },
366 .block_erase = spi_block_erase_60,
367 }, {
368 .eraseblocks = { {512 * 1024, 1} },
369 .block_erase = spi_block_erase_c7,
370 }
371 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000372 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000373 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000374 },
375
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000376 {
377 .vendor = "Atmel",
378 .name = "AT25DF081",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000379 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000380 .manufacture_id = ATMEL_ID,
381 .model_id = AT_25DF081,
382 .total_size = 1024,
383 .page_size = 256,
384 .tested = TEST_UNTESTED,
385 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000386 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000387 .block_erasers =
388 {
389 {
390 .eraseblocks = { {4 * 1024, 256} },
391 .block_erase = spi_block_erase_20,
392 }, {
393 .eraseblocks = { {32 * 1024, 32} },
394 .block_erase = spi_block_erase_52,
395 }, {
396 .eraseblocks = { {64 * 1024, 16} },
397 .block_erase = spi_block_erase_d8,
398 }, {
399 .eraseblocks = { {1024 * 1024, 1} },
400 .block_erase = spi_block_erase_60,
401 }, {
402 .eraseblocks = { {1024 * 1024, 1} },
403 .block_erase = spi_block_erase_c7,
404 }
405 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000406 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000407 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000408 },
409
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000410 {
411 .vendor = "Atmel",
412 .name = "AT25DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000413 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000414 .manufacture_id = ATMEL_ID,
415 .model_id = AT_25DF161,
416 .total_size = 2048,
417 .page_size = 256,
418 .tested = TEST_UNTESTED,
419 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000420 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000421 .block_erasers =
422 {
423 {
424 .eraseblocks = { {4 * 1024, 512} },
425 .block_erase = spi_block_erase_20,
426 }, {
427 .eraseblocks = { {32 * 1024, 64} },
428 .block_erase = spi_block_erase_52,
429 }, {
430 .eraseblocks = { {64 * 1024, 32} },
431 .block_erase = spi_block_erase_d8,
432 }, {
433 .eraseblocks = { {2 * 1024 * 1024, 1} },
434 .block_erase = spi_block_erase_60,
435 }, {
436 .eraseblocks = { {2 * 1024 * 1024, 1} },
437 .block_erase = spi_block_erase_c7,
438 }
439 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000440 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000441 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000442 },
443
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000444 {
445 .vendor = "Atmel",
446 .name = "AT25DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000447 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000448 .manufacture_id = ATMEL_ID,
449 .model_id = AT_25DF321,
450 .total_size = 4096,
451 .page_size = 256,
Sean Nelson89187292009-12-23 12:02:55 +0000452 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000453 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000454 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000455 .block_erasers =
456 {
457 {
458 .eraseblocks = { {4 * 1024, 1024} },
459 .block_erase = spi_block_erase_20,
460 }, {
461 .eraseblocks = { {32 * 1024, 128} },
462 .block_erase = spi_block_erase_52,
463 }, {
464 .eraseblocks = { {64 * 1024, 64} },
465 .block_erase = spi_block_erase_d8,
466 }, {
467 .eraseblocks = { {4 * 1024 * 1024, 1} },
468 .block_erase = spi_block_erase_60,
469 }, {
470 .eraseblocks = { {4 * 1024 * 1024, 1} },
471 .block_erase = spi_block_erase_c7,
472 }
473 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000474 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000475 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000476 },
477
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000478 {
479 .vendor = "Atmel",
480 .name = "AT25DF321A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000481 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000482 .manufacture_id = ATMEL_ID,
483 .model_id = AT_25DF321A,
484 .total_size = 4096,
485 .page_size = 256,
486 .tested = TEST_UNTESTED,
487 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000488 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000489 .block_erasers =
490 {
491 {
492 .eraseblocks = { {4 * 1024, 1024} },
493 .block_erase = spi_block_erase_20,
494 }, {
495 .eraseblocks = { {32 * 1024, 128} },
496 .block_erase = spi_block_erase_52,
497 }, {
498 .eraseblocks = { {64 * 1024, 64} },
499 .block_erase = spi_block_erase_d8,
500 }, {
501 .eraseblocks = { {4 * 1024 * 1024, 1} },
502 .block_erase = spi_block_erase_60,
503 }, {
504 .eraseblocks = { {4 * 1024 * 1024, 1} },
505 .block_erase = spi_block_erase_c7,
506 }
507 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000508 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000509 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000510 },
511
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000512 {
513 .vendor = "Atmel",
514 .name = "AT25DF641",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000515 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000516 .manufacture_id = ATMEL_ID,
517 .model_id = AT_25DF641,
518 .total_size = 8192,
519 .page_size = 256,
520 .tested = TEST_UNTESTED,
521 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000522 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000523 .block_erasers =
524 {
525 {
526 .eraseblocks = { {4 * 1024, 2048} },
527 .block_erase = spi_block_erase_20,
528 }, {
529 .eraseblocks = { {32 * 1024, 256} },
530 .block_erase = spi_block_erase_52,
531 }, {
532 .eraseblocks = { {64 * 1024, 128} },
533 .block_erase = spi_block_erase_d8,
534 }, {
535 .eraseblocks = { {8 * 1024 * 1024, 1} },
536 .block_erase = spi_block_erase_60,
537 }, {
538 .eraseblocks = { {8 * 1024 * 1024, 1} },
539 .block_erase = spi_block_erase_c7,
540 }
541 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000542 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000543 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000544 },
545
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000546 {
547 .vendor = "Atmel",
548 .name = "AT25F512B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000549 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000550 .manufacture_id = ATMEL_ID,
551 .model_id = AT_25F512B,
552 .total_size = 64,
553 .page_size = 256,
554 .tested = TEST_UNTESTED,
555 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000556 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000557 .block_erasers =
558 {
559 {
560 .eraseblocks = { {4 * 1024, 16} },
561 .block_erase = spi_block_erase_20,
562 }, {
563 .eraseblocks = { {32 * 1024, 2} },
564 .block_erase = spi_block_erase_52,
565 }, {
566 .eraseblocks = { {32 * 1024, 2} },
567 .block_erase = spi_block_erase_d8,
568 }, {
569 .eraseblocks = { {64 * 1024, 1} },
570 .block_erase = spi_block_erase_60,
571 }, {
572 .eraseblocks = { {64 * 1024, 1} },
573 .block_erase = spi_block_erase_c7,
574 }
575 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000576 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000577 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000578 },
579
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000580 {
581 .vendor = "Atmel",
582 .name = "AT25FS010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000583 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000584 .manufacture_id = ATMEL_ID,
585 .model_id = AT_25FS010,
586 .total_size = 128,
587 .page_size = 256,
588 .tested = TEST_UNTESTED,
589 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000590 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000591 .block_erasers =
592 {
593 {
594 .eraseblocks = { {4 * 1024, 32} },
595 .block_erase = spi_block_erase_20,
596 }, {
597 .eraseblocks = { {32 * 1024, 4} },
598 .block_erase = spi_block_erase_52,
599 }, {
600 .eraseblocks = { {32 * 1024, 4} },
601 .block_erase = spi_block_erase_d8,
602 }, {
603 .eraseblocks = { {128 * 1024, 1} },
604 .block_erase = spi_block_erase_60,
605 }, {
606 .eraseblocks = { {128 * 1024, 1} },
607 .block_erase = spi_block_erase_c7,
608 }
609 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000610 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000611 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000612 },
613
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000614 {
615 .vendor = "Atmel",
616 .name = "AT25FS040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000617 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000618 .manufacture_id = ATMEL_ID,
619 .model_id = AT_25FS040,
620 .total_size = 512,
621 .page_size = 256,
622 .tested = TEST_UNTESTED,
623 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000624 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000625 .block_erasers =
626 {
627 {
628 .eraseblocks = { {4 * 1024, 128} },
629 .block_erase = spi_block_erase_20,
630 }, {
631 .eraseblocks = { {64 * 1024, 8} },
632 .block_erase = spi_block_erase_52,
633 }, {
634 .eraseblocks = { {64 * 1024, 8} },
635 .block_erase = spi_block_erase_d8,
636 }, {
637 .eraseblocks = { {512 * 1024, 1} },
638 .block_erase = spi_block_erase_60,
639 }, {
640 .eraseblocks = { {512 * 1024, 1} },
641 .block_erase = spi_block_erase_c7,
642 }
643 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000644 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000645 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000646 },
647
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000648 {
649 .vendor = "Atmel",
650 .name = "AT26DF041",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000651 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000652 .manufacture_id = ATMEL_ID,
653 .model_id = AT_26DF041,
654 .total_size = 512,
655 .page_size = 256,
656 .tested = TEST_UNTESTED,
657 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000658 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000659 .block_erasers =
660 {
661 {
662 .eraseblocks = { {4 * 1024, 128} },
663 .block_erase = spi_block_erase_20,
664 }
665 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000666 .write = NULL /* Incompatible Page write */,
667 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000668 },
669
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000670 {
671 .vendor = "Atmel",
672 .name = "AT26DF081A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000673 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000674 .manufacture_id = ATMEL_ID,
675 .model_id = AT_26DF081A,
676 .total_size = 1024,
677 .page_size = 256,
678 .tested = TEST_UNTESTED,
679 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000680 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000681 .block_erasers =
682 {
683 {
684 .eraseblocks = { {4 * 1024, 256} },
685 .block_erase = spi_block_erase_20,
686 }, {
687 .eraseblocks = { {32 * 1024, 32} },
688 .block_erase = spi_block_erase_52,
689 }, {
690 .eraseblocks = { {64 * 1024, 16} },
691 .block_erase = spi_block_erase_d8,
692 }, {
693 .eraseblocks = { {1024 * 1024, 1} },
694 .block_erase = spi_block_erase_60,
695 }, {
696 .eraseblocks = { {1024 * 1024, 1} },
697 .block_erase = spi_block_erase_c7,
698 }
699 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000700 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000701 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000702 },
703
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000704 {
705 .vendor = "Atmel",
706 .name = "AT26DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000707 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000708 .manufacture_id = ATMEL_ID,
709 .model_id = AT_26DF161,
710 .total_size = 2048,
711 .page_size = 256,
712 .tested = TEST_UNTESTED,
713 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000714 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000715 .block_erasers =
716 {
717 {
718 .eraseblocks = { {4 * 1024, 512} },
719 .block_erase = spi_block_erase_20,
720 }, {
721 .eraseblocks = { {32 * 1024, 64} },
722 .block_erase = spi_block_erase_52,
723 }, {
724 .eraseblocks = { {64 * 1024, 32} },
725 .block_erase = spi_block_erase_d8,
726 }, {
727 .eraseblocks = { {2 * 1024 * 1024, 1} },
728 .block_erase = spi_block_erase_60,
729 }, {
730 .eraseblocks = { {2 * 1024 * 1024, 1} },
731 .block_erase = spi_block_erase_c7,
732 }
733 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000734 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000735 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000736 },
737
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000738 {
739 .vendor = "Atmel",
740 .name = "AT26DF161A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000741 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000742 .manufacture_id = ATMEL_ID,
743 .model_id = AT_26DF161A,
744 .total_size = 2048,
745 .page_size = 256,
746 .tested = TEST_UNTESTED,
747 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000748 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000749 .block_erasers =
750 {
751 {
752 .eraseblocks = { {4 * 1024, 512} },
753 .block_erase = spi_block_erase_20,
754 }, {
755 .eraseblocks = { {32 * 1024, 64} },
756 .block_erase = spi_block_erase_52,
757 }, {
758 .eraseblocks = { {64 * 1024, 32} },
759 .block_erase = spi_block_erase_d8,
760 }, {
761 .eraseblocks = { {2 * 1024 * 1024, 1} },
762 .block_erase = spi_block_erase_60,
763 }, {
764 .eraseblocks = { {2 * 1024 * 1024, 1} },
765 .block_erase = spi_block_erase_c7,
766 }
767 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000768 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000769 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000770 },
771
772 /*The AT26DF321 has the same ID as the AT25DF321. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000773 /*{
774 .vendor = "Atmel",
775 .name = "AT26DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000776 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000777 .manufacture_id = ATMEL_ID,
778 .model_id = AT_26DF321,
779 .total_size = 4096,
780 .page_size = 256,
781 .tested = TEST_UNTESTED,
782 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000783 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000784 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000785 .read = spi_chip_read,
786 },*/
FENG yu ningff692fb2008-12-08 18:15:10 +0000787
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000788 {
789 .vendor = "Atmel",
790 .name = "AT26F004",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000791 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000792 .manufacture_id = ATMEL_ID,
793 .model_id = AT_26F004,
794 .total_size = 512,
795 .page_size = 256,
796 .tested = TEST_UNTESTED,
797 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000798 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000799 .block_erasers =
800 {
801 {
802 .eraseblocks = { {4 * 1024, 128} },
803 .block_erase = spi_block_erase_20,
804 }, {
805 .eraseblocks = { {32 * 1024, 16} },
806 .block_erase = spi_block_erase_52,
807 }, {
808 .eraseblocks = { {64 * 1024, 8} },
809 .block_erase = spi_block_erase_d8,
810 }, {
811 .eraseblocks = { {512 * 1024, 1} },
812 .block_erase = spi_block_erase_60,
813 }, {
814 .eraseblocks = { {512 * 1024, 1} },
815 .block_erase = spi_block_erase_c7,
816 }
817 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000818 .write = NULL /* Incompatible Page write */,
819 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000820 },
821
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000822 {
823 .vendor = "Atmel",
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000824 .name = "AT29C512",
Urja Rannikko038a3122009-06-28 19:19:25 +0000825 .bustype = CHIP_BUSTYPE_PARALLEL,
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000826 .manufacture_id = ATMEL_ID,
827 .model_id = AT_29C512,
828 .total_size = 64,
829 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +0000830 .feature_bits = FEATURE_LONG_RESET,
831 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +0000832 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000833 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +0000834 .block_erasers =
835 {
836 {
837 .eraseblocks = { {64 * 1024, 1} },
838 .block_erase = erase_chip_block_jedec,
839 }
840 },
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000841 .write = write_jedec,
842 .read = read_memmapped,
843
844 },
845
846 {
847 .vendor = "Atmel",
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000848 .name = "AT29C010A",
Urja Rannikko161b8852009-06-05 08:47:37 +0000849 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000850 .manufacture_id = ATMEL_ID,
851 .model_id = AT_29C010A,
852 .total_size = 128,
853 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +0000854 .feature_bits = FEATURE_LONG_RESET,
Michael Karcher98eff462010-03-24 22:55:56 +0000855 .tested = TEST_OK_PREW,
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000856 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000857 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +0000858 .block_erasers =
859 {
860 {
861 .eraseblocks = { {128 * 1024, 1} },
862 .block_erase = erase_chip_block_jedec,
863 }
864 },
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000865 .write = write_jedec, /* FIXME */
866 .read = read_memmapped,
867 },
868
869 {
870 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000871 .name = "AT29C020",
Urja Rannikko161b8852009-06-05 08:47:37 +0000872 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000873 .manufacture_id = ATMEL_ID,
874 .model_id = AT_29C020,
875 .total_size = 256,
876 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +0000877 .feature_bits = FEATURE_LONG_RESET,
878 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000879 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +0000880 .probe_timing = 10000, /* 10ms */
Sean Nelson89187292009-12-23 12:02:55 +0000881 .block_erasers =
882 {
883 {
884 .eraseblocks = { {256 * 1024, 1} },
885 .block_erase = erase_chip_block_jedec,
886 }
887 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000888 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000889 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000890 },
891
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000892 {
893 .vendor = "Atmel",
894 .name = "AT29C040A",
Urja Rannikko161b8852009-06-05 08:47:37 +0000895 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000896 .manufacture_id = ATMEL_ID,
897 .model_id = AT_29C040A,
898 .total_size = 512,
899 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +0000900 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000901 .tested = TEST_UNTESTED,
902 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +0000903 .probe_timing = 10000, /* 10 ms */
Sean Nelson89187292009-12-23 12:02:55 +0000904 .block_erasers =
905 {
906 {
907 .eraseblocks = { {512 * 1024, 1} },
908 .block_erase = erase_chip_block_jedec,
909 }
910 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000911 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000912 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000913 },
914
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000915 {
916 .vendor = "Atmel",
917 .name = "AT45CS1282",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000918 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000919 .manufacture_id = ATMEL_ID,
920 .model_id = AT_45CS1282,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000921 .total_size = 16896 /* No power of two sizes */,
922 .page_size = 1056 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000923 .tested = TEST_BAD_READ,
924 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000925 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000926 .write = NULL /* Incompatible Page write */,
927 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000928 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000929
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000930 {
931 .vendor = "Atmel",
932 .name = "AT45DB011D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000933 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000934 .manufacture_id = ATMEL_ID,
935 .model_id = AT_45DB011D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000936 .total_size = 128 /* Size can only be determined from status register */,
937 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000938 .tested = TEST_BAD_READ,
939 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000940 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000941 .write = NULL,
942 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000943 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000944
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000945 {
946 .vendor = "Atmel",
947 .name = "AT45DB021D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000948 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000949 .manufacture_id = ATMEL_ID,
950 .model_id = AT_45DB021D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000951 .total_size = 256 /* Size can only be determined from status register */,
952 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000953 .tested = TEST_BAD_READ,
954 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000955 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000956 .write = NULL,
957 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000958 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000959
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000960 {
961 .vendor = "Atmel",
962 .name = "AT45DB041D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000963 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000964 .manufacture_id = ATMEL_ID,
965 .model_id = AT_45DB041D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000966 .total_size = 512 /* Size can only be determined from status register */,
967 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000968 .tested = TEST_BAD_READ,
969 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000970 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000971 .write = NULL,
972 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000973 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000974
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000975 {
976 .vendor = "Atmel",
977 .name = "AT45DB081D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000978 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000979 .manufacture_id = ATMEL_ID,
980 .model_id = AT_45DB081D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000981 .total_size = 1024 /* Size can only be determined from status register */,
982 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000983 .tested = TEST_BAD_READ,
984 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000985 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000986 .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 = "AT45DB161D",
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_45DB161D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000996 .total_size = 2048 /* Size can only be determined from status register */,
997 .page_size = 512 /* 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 .write = NULL,
1002 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001003 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001004
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001005 {
1006 .vendor = "Atmel",
1007 .name = "AT45DB321C",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001008 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001009 .manufacture_id = ATMEL_ID,
1010 .model_id = AT_45DB321C,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001011 .total_size = 4224 /* No power of two sizes */,
1012 .page_size = 528 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001013 .tested = TEST_BAD_READ,
1014 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001015 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001016 .write = NULL,
1017 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001018 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001019
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001020 {
1021 .vendor = "Atmel",
1022 .name = "AT45DB321D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001023 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001024 .manufacture_id = ATMEL_ID,
1025 .model_id = AT_45DB321D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001026 .total_size = 4096 /* Size can only be determined from status register */,
1027 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001028 .tested = TEST_BAD_READ,
1029 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001030 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001031 .write = NULL,
1032 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001033 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001034
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001035 {
1036 .vendor = "Atmel",
1037 .name = "AT45DB642D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001038 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001039 .manufacture_id = ATMEL_ID,
1040 .model_id = AT_45DB642D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001041 .total_size = 8192 /* Size can only be determined from status register */,
1042 .page_size = 1024 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001043 .tested = TEST_BAD_READ,
1044 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001045 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001046 .write = NULL,
1047 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001048 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001049
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001050 {
1051 .vendor = "Atmel",
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001052 .name = "AT49BV512",
Urja Rannikko161b8852009-06-05 08:47:37 +00001053 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001054 .manufacture_id = ATMEL_ID,
1055 .model_id = AT_49BV512,
1056 .total_size = 64,
1057 .page_size = 64,
Sean Nelson35727f72010-01-28 23:55:12 +00001058 .feature_bits = FEATURE_EITHER_RESET,
1059 .tested = TEST_UNTESTED,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001060 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001061 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001062 .block_erasers =
1063 {
1064 {
1065 .eraseblocks = { {64 * 1024, 1} },
1066 .block_erase = erase_chip_block_jedec,
1067 }
1068 },
Sean Nelson35727f72010-01-28 23:55:12 +00001069 .write = write_jedec_1,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001070 .read = read_memmapped,
1071 },
1072
1073 {
1074 .vendor = "Atmel",
Andrew Morgan1a5eaa12010-06-07 14:10:55 +00001075 .name = "AT49F020",
1076 .bustype = CHIP_BUSTYPE_PARALLEL,
1077 .manufacture_id = ATMEL_ID,
1078 .model_id = AT_49F020,
1079 .total_size = 256,
1080 .page_size = 256,
1081 .feature_bits = FEATURE_EITHER_RESET,
1082 .tested = TEST_OK_PREW,
1083 .probe = probe_jedec,
1084 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
1085 .block_erasers =
1086 {
1087 {
1088 .eraseblocks = { {256 * 1024, 1} },
1089 .block_erase = erase_chip_block_jedec,
1090 }
1091 },
1092 .write = write_jedec_1,
1093 .read = read_memmapped,
1094 },
1095
1096 {
1097 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001098 .name = "AT49F002(N)",
Urja Rannikko161b8852009-06-05 08:47:37 +00001099 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001100 .manufacture_id = ATMEL_ID,
1101 .model_id = AT_49F002N,
1102 .total_size = 256,
1103 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001104 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001105 .tested = TEST_UNTESTED,
1106 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001107 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001108 .block_erasers =
1109 {
1110 {
1111 .eraseblocks = {
1112 {16 * 1024, 1},
1113 {8 * 1024, 2},
1114 {96 * 1024, 1},
1115 {128 * 1024, 1},
1116 },
1117 .block_erase = erase_sector_jedec,
1118 }, {
1119 .eraseblocks = { {256 * 1024, 1} },
1120 .block_erase = erase_chip_block_jedec,
1121 }
1122 },
Sean Nelson35727f72010-01-28 23:55:12 +00001123 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001124 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001125 },
1126
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001127 {
1128 .vendor = "Atmel",
1129 .name = "AT49F002(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00001130 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001131 .manufacture_id = ATMEL_ID,
1132 .model_id = AT_49F002NT,
1133 .total_size = 256,
1134 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001135 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00001136 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001137 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001138 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001139 .block_erasers =
1140 {
1141 {
1142 .eraseblocks = {
1143 {128 * 1024, 1},
1144 {96 * 1024, 1},
1145 {8 * 1024, 2},
1146 {16 * 1024, 1},
1147 },
1148 .block_erase = erase_sector_jedec,
1149 }, {
1150 .eraseblocks = { {256 * 1024, 1} },
1151 .block_erase = erase_chip_block_jedec,
1152 }
1153 },
Sean Nelson35727f72010-01-28 23:55:12 +00001154 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001155 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001156 },
1157
Sean Nelson54596372010-01-09 05:30:14 +00001158 /* The next two chip definitions have top/bottom boot blocks, but has no
Uwe Hermann4e3d0b32010-03-25 23:18:41 +00001159 device differentiation between the two */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001160 {
1161 .vendor = "AMIC",
Sean Nelson54596372010-01-09 05:30:14 +00001162 .name = "A25L40PT",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001163 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001164 .manufacture_id = AMIC_ID,
1165 .model_id = AMIC_A25L40P,
1166 .total_size = 512,
1167 .page_size = 256,
Sean Nelson54596372010-01-09 05:30:14 +00001168 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001169 .probe = probe_spi_rdid4,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001170 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001171 .block_erasers =
1172 {
1173 {
1174 .eraseblocks = {
1175 {64 * 1024, 7},
1176 {32 * 1024, 1},
1177 {16 * 1024, 1},
1178 {8 * 1024, 1},
1179 {4 * 1024, 2},
1180 },
1181 .block_erase = spi_block_erase_d8,
1182 }, {
Sean Nelson2aff7aa2010-01-18 08:24:02 +00001183 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson54596372010-01-09 05:30:14 +00001184 .block_erase = spi_block_erase_c7,
1185 }
1186 },
1187 .write = spi_chip_write_256,
1188 .read = spi_chip_read,
1189 },
1190
1191 {
1192 .vendor = "AMIC",
1193 .name = "A25L40PU",
1194 .bustype = CHIP_BUSTYPE_SPI,
1195 .manufacture_id = AMIC_ID,
1196 .model_id = AMIC_A25L40P,
1197 .total_size = 512,
1198 .page_size = 256,
1199 .tested = TEST_OK_PRW,
1200 .probe = probe_spi_rdid4,
1201 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001202 .block_erasers =
1203 {
1204 {
1205 .eraseblocks = {
1206 {4 * 1024, 2},
1207 {8 * 1024, 1},
1208 {16 * 1024, 1},
1209 {32 * 1024, 1},
1210 {64 * 1024, 7},
1211 },
1212 .block_erase = spi_block_erase_d8,
1213 }, {
Sean Nelson2aff7aa2010-01-18 08:24:02 +00001214 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson54596372010-01-09 05:30:14 +00001215 .block_erase = spi_block_erase_c7,
1216 }
1217 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001218 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001219 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001220 },
1221
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001222 {
1223 .vendor = "AMIC",
Daniel Lenski550f5c82010-07-11 21:33:31 +00001224 .name = "A25L80P",
1225 .bustype = CHIP_BUSTYPE_SPI,
1226 .manufacture_id = AMIC_ID,
1227 .model_id = AMIC_A25L80P,
1228 .total_size = 1024,
1229 .page_size = 256,
1230 .tested = TEST_OK_PREW,
1231 .probe = probe_spi_rdid4,
1232 .probe_timing = TIMING_ZERO,
1233 .block_erasers =
1234 {
1235 {
1236 .eraseblocks = {
1237 {4 * 1024, 2},
1238 {8 * 1024, 1},
1239 {16 * 1024, 1},
1240 {32 * 1024, 1},
1241 {64 * 1024, 15},
1242 },
1243 .block_erase = spi_block_erase_d8,
1244 }, {
1245 .eraseblocks = { {1024 * 1024, 1} },
1246 .block_erase = spi_block_erase_c7,
1247 }
1248 },
1249 .write = spi_chip_write_256,
1250 .read = spi_chip_read,
1251 },
1252
1253 {
1254 .vendor = "AMIC",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001255 .name = "A29002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00001256 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001257 .manufacture_id = AMIC_ID_NOPREFIX,
1258 .model_id = AMIC_A29002B,
1259 .total_size = 256,
1260 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001261 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001262 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00001263 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001264 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001265 .block_erasers =
1266 {
1267 {
1268 .eraseblocks = {
1269 {16 * 1024, 1},
1270 {8 * 1024, 2},
1271 {32 * 1024, 1},
1272 {64 * 1024, 3},
1273 },
Sean Nelson35727f72010-01-28 23:55:12 +00001274 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001275 }, {
1276 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00001277 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001278 },
1279 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00001280 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001281 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001282 },
1283
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001284 {
1285 .vendor = "AMIC",
1286 .name = "A29002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00001287 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001288 .manufacture_id = AMIC_ID_NOPREFIX,
1289 .model_id = AMIC_A29002T,
1290 .total_size = 256,
1291 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001292 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00001293 .tested = TEST_OK_PRW,
Sean Nelson35727f72010-01-28 23:55:12 +00001294 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001295 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001296 .block_erasers =
1297 {
1298 {
1299 .eraseblocks = {
1300 {64 * 1024, 3},
1301 {32 * 1024, 1},
1302 {8 * 1024, 2},
1303 {16 * 1024, 1},
1304 },
Sean Nelson35727f72010-01-28 23:55:12 +00001305 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001306 }, {
1307 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00001308 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001309 },
1310 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00001311 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001312 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001313 },
1314
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001315 {
1316 .vendor = "AMIC",
1317 .name = "A29040B",
Urja Rannikko161b8852009-06-05 08:47:37 +00001318 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001319 .manufacture_id = AMIC_ID_NOPREFIX,
1320 .model_id = AMIC_A29040B,
1321 .total_size = 512,
1322 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001323 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
1324 .tested = TEST_UNTESTED,
1325 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001326 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +00001327 .block_erasers =
1328 {
1329 {
1330 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +00001331 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00001332 }, {
1333 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00001334 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00001335 },
1336 },
Sean Nelson35727f72010-01-28 23:55:12 +00001337 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001338 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001339 },
1340
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001341 {
1342 .vendor = "AMIC",
1343 .name = "A49LF040A",
Urja Rannikko161b8852009-06-05 08:47:37 +00001344 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001345 .manufacture_id = AMIC_ID_NOPREFIX,
1346 .model_id = AMIC_A49LF040A,
1347 .total_size = 512,
1348 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001349 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00001350 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00001351 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001352 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson54596372010-01-09 05:30:14 +00001353 .block_erasers =
1354 {
1355 {
1356 .eraseblocks = { {64 * 1024, 8} },
1357 .block_erase = erase_block_jedec,
1358 }, {
1359 .eraseblocks = { {512 * 1024, 1} },
1360 .block_erase = erase_chip_block_jedec,
1361 }
1362 },
Sean Nelson36172342010-02-27 18:01:15 +00001363 .unlock = unlock_49fl00x,
1364 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001365 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001366 },
1367
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001368 {
1369 .vendor = "EMST",
1370 .name = "F49B002UA",
Urja Rannikko161b8852009-06-05 08:47:37 +00001371 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001372 .manufacture_id = EMST_ID,
1373 .model_id = EMST_F49B002UA,
1374 .total_size = 256,
1375 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00001376 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001377 .tested = TEST_UNTESTED,
1378 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001379 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00001380 .block_erasers =
1381 {
1382 {
1383 .eraseblocks = {
1384 {128 * 1024, 1},
1385 {96 * 1024, 1},
1386 {8 * 1024, 2},
1387 {16 * 1024, 1},
1388 },
1389 .block_erase = erase_sector_jedec,
1390 }, {
1391 .eraseblocks = { {256 * 1024, 1} },
1392 .block_erase = erase_chip_block_jedec,
1393 }
1394 },
Sean Nelson35727f72010-01-28 23:55:12 +00001395 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001396 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001397 },
1398
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001399 {
Michael Karcher80a59ea2010-06-19 22:06:35 +00001400 .vendor = "EMST",
1401 .name = "F25L008A",
1402 .bustype = CHIP_BUSTYPE_SPI,
1403 .manufacture_id = EMST_ID,
1404 .model_id = EMST_F25L008A,
1405 .total_size = 1024,
1406 .page_size = 256,
1407 .tested = TEST_UNTESTED,
1408 .probe = probe_spi_rdid,
1409 .probe_timing = TIMING_ZERO,
1410 .block_erasers =
1411 {
1412 {
1413 .eraseblocks = { {4 * 1024, 256} },
1414 .block_erase = spi_block_erase_20,
1415 }, {
1416 .eraseblocks = { {64 * 1024, 16} },
1417 .block_erase = spi_block_erase_d8,
1418 }, {
1419 .eraseblocks = { {1024 * 1024, 1} },
1420 .block_erase = spi_block_erase_60,
1421 }, {
1422 .eraseblocks = { {1024 * 1024, 1} },
1423 .block_erase = spi_block_erase_c7,
1424 }
1425 },
Carl-Daniel Hailfinger9a795d82010-07-14 16:19:05 +00001426 .write = spi_chip_write_1,
Michael Karcher4497e862010-07-10 19:34:15 +00001427 .read = spi_chip_read,
Michael Karcher80a59ea2010-06-19 22:06:35 +00001428 },
1429
1430 {
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001431 .vendor = "Eon",
1432 .name = "EN25B05",
1433 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001434 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001435 .model_id = EN_25B05,
1436 .total_size = 64,
1437 .page_size = 256,
1438 .tested = TEST_UNTESTED,
1439 .probe = probe_spi_rdid,
1440 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001441 .block_erasers =
1442 {
1443 {
1444 .eraseblocks = {
1445 {4 * 1024, 2},
1446 {8 * 1024, 1},
1447 {16 * 1024, 1},
1448 {32 * 1024, 1},
1449 },
1450 .block_erase = spi_block_erase_d8,
1451 }, {
1452 .eraseblocks = { {64 * 1024, 1} },
1453 .block_erase = spi_block_erase_c7,
1454 }
1455 },
1456 .write = spi_chip_write_256,
1457 .read = spi_chip_read,
1458 },
1459
1460 {
1461 .vendor = "Eon",
1462 .name = "EN25B05T",
1463 .bustype = CHIP_BUSTYPE_SPI,
1464 .manufacture_id = EON_ID_NOPREFIX,
1465 .model_id = EN_25B05,
1466 .total_size = 64,
1467 .page_size = 256,
1468 .tested = TEST_UNTESTED,
1469 .probe = probe_spi_rdid,
1470 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001471 .block_erasers =
1472 {
1473 {
1474 .eraseblocks = {
1475 {32 * 1024, 1},
1476 {16 * 1024, 1},
1477 {8 * 1024, 1},
1478 {4 * 1024, 2},
1479 },
1480 .block_erase = spi_block_erase_d8,
1481 }, {
1482 .eraseblocks = { {64 * 1024, 1} },
1483 .block_erase = spi_block_erase_c7,
1484 }
1485 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001486 .write = spi_chip_write_256,
1487 .read = spi_chip_read,
1488 },
1489
1490 {
1491 .vendor = "Eon",
1492 .name = "EN25B10",
1493 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001494 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001495 .model_id = EN_25B10,
1496 .total_size = 128,
1497 .page_size = 256,
1498 .tested = TEST_UNTESTED,
1499 .probe = probe_spi_rdid,
1500 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001501 .block_erasers =
1502 {
1503 {
1504 .eraseblocks = {
1505 {4 * 1024, 2},
1506 {8 * 1024, 1},
1507 {16 * 1024, 1},
1508 {32 * 1024, 3},
1509 },
1510 .block_erase = spi_block_erase_d8,
1511 }, {
1512 .eraseblocks = { {128 * 1024, 1} },
1513 .block_erase = spi_block_erase_c7,
1514 }
1515 },
1516 .write = spi_chip_write_256,
1517 .read = spi_chip_read,
1518 },
1519
1520 {
1521 .vendor = "Eon",
1522 .name = "EN25B10T",
1523 .bustype = CHIP_BUSTYPE_SPI,
1524 .manufacture_id = EON_ID_NOPREFIX,
1525 .model_id = EN_25B10,
1526 .total_size = 128,
1527 .page_size = 256,
1528 .tested = TEST_UNTESTED,
1529 .probe = probe_spi_rdid,
1530 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001531 .block_erasers =
1532 {
1533 {
1534 .eraseblocks = {
1535 {32 * 1024, 3},
1536 {16 * 1024, 1},
1537 {8 * 1024, 1},
1538 {4 * 1024, 2},
1539 },
1540 .block_erase = spi_block_erase_d8,
1541 }, {
1542 .eraseblocks = { {128 * 1024, 1} },
1543 .block_erase = spi_block_erase_c7,
1544 }
1545 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001546 .write = spi_chip_write_256,
1547 .read = spi_chip_read,
1548 },
1549
1550 {
1551 .vendor = "Eon",
1552 .name = "EN25B20",
1553 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001554 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001555 .model_id = EN_25B20,
1556 .total_size = 256,
1557 .page_size = 256,
1558 .tested = TEST_UNTESTED,
1559 .probe = probe_spi_rdid,
1560 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001561 .block_erasers =
1562 {
1563 {
1564 .eraseblocks = {
1565 {4 * 1024, 2},
1566 {8 * 1024, 1},
1567 {16 * 1024, 1},
1568 {32 * 1024, 1},
1569 {64 * 1024, 3}
1570 },
1571 .block_erase = spi_block_erase_d8,
1572 }, {
1573 .eraseblocks = { {256 * 1024, 1} },
1574 .block_erase = spi_block_erase_c7,
1575 }
1576 },
1577 .write = spi_chip_write_256,
1578 .read = spi_chip_read,
1579 },
1580
1581 {
1582 .vendor = "Eon",
1583 .name = "EN25B20T",
1584 .bustype = CHIP_BUSTYPE_SPI,
1585 .manufacture_id = EON_ID_NOPREFIX,
1586 .model_id = EN_25B20,
1587 .total_size = 256,
1588 .page_size = 256,
1589 .tested = TEST_UNTESTED,
1590 .probe = probe_spi_rdid,
1591 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001592 .block_erasers =
1593 {
1594 {
1595 .eraseblocks = {
1596 {64 * 1024, 3},
1597 {32 * 1024, 1},
1598 {16 * 1024, 1},
1599 {8 * 1024, 1},
1600 {4 * 1024, 2},
1601 },
1602 .block_erase = spi_block_erase_d8,
1603 }, {
1604 .eraseblocks = { {256 * 1024, 1} },
1605 .block_erase = spi_block_erase_c7,
1606 }
1607 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001608 .write = spi_chip_write_256,
1609 .read = spi_chip_read,
1610 },
1611
1612 {
1613 .vendor = "Eon",
1614 .name = "EN25B40",
1615 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001616 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001617 .model_id = EN_25B40,
1618 .total_size = 512,
1619 .page_size = 256,
1620 .tested = TEST_UNTESTED,
1621 .probe = probe_spi_rdid,
1622 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001623 .block_erasers =
1624 {
1625 {
1626 .eraseblocks = {
1627 {4 * 1024, 2},
1628 {8 * 1024, 1},
1629 {16 * 1024, 1},
1630 {32 * 1024, 1},
1631 {64 * 1024, 7}
1632 },
1633 .block_erase = spi_block_erase_d8,
1634 }, {
1635 .eraseblocks = { {512 * 1024, 1} },
1636 .block_erase = spi_block_erase_c7,
1637 }
1638 },
1639 .write = spi_chip_write_256,
1640 .read = spi_chip_read,
1641 },
1642
1643 {
1644 .vendor = "Eon",
1645 .name = "EN25B40T",
1646 .bustype = CHIP_BUSTYPE_SPI,
1647 .manufacture_id = EON_ID_NOPREFIX,
1648 .model_id = EN_25B40,
1649 .total_size = 512,
1650 .page_size = 256,
1651 .tested = TEST_UNTESTED,
1652 .probe = probe_spi_rdid,
1653 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001654 .block_erasers =
1655 {
1656 {
1657 .eraseblocks = {
1658 {64 * 1024, 7},
1659 {32 * 1024, 1},
1660 {16 * 1024, 1},
1661 {8 * 1024, 1},
1662 {4 * 1024, 2},
1663 },
1664 .block_erase = spi_block_erase_d8,
1665 }, {
1666 .eraseblocks = { {512 * 1024, 1} },
1667 .block_erase = spi_block_erase_c7,
1668 }
1669 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001670 .write = spi_chip_write_256,
1671 .read = spi_chip_read,
1672 },
1673
1674 {
1675 .vendor = "Eon",
1676 .name = "EN25B80",
1677 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001678 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001679 .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,
Sean Nelson54596372010-01-09 05:30:14 +00001685 .block_erasers =
1686 {
1687 {
1688 .eraseblocks = {
1689 {4 * 1024, 2},
1690 {8 * 1024, 1},
1691 {16 * 1024, 1},
1692 {32 * 1024, 1},
1693 {64 * 1024, 15}
1694 },
1695 .block_erase = spi_block_erase_d8,
1696 }, {
1697 .eraseblocks = { {1024 * 1024, 1} },
1698 .block_erase = spi_block_erase_c7,
1699 }
1700 },
1701 .write = spi_chip_write_256,
1702 .read = spi_chip_read,
1703 },
1704
1705 {
1706 .vendor = "Eon",
1707 .name = "EN25B80T",
1708 .bustype = CHIP_BUSTYPE_SPI,
1709 .manufacture_id = EON_ID_NOPREFIX,
1710 .model_id = EN_25B80,
1711 .total_size = 1024,
1712 .page_size = 256,
1713 .tested = TEST_UNTESTED,
1714 .probe = probe_spi_rdid,
1715 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001716 .block_erasers =
1717 {
1718 {
1719 .eraseblocks = {
1720 {64 * 1024, 15},
1721 {32 * 1024, 1},
1722 {16 * 1024, 1},
1723 {8 * 1024, 1},
1724 {4 * 1024, 2},
1725 },
1726 .block_erase = spi_block_erase_d8,
1727 }, {
1728 .eraseblocks = { {1024 * 1024, 1} },
1729 .block_erase = spi_block_erase_c7,
1730 }
1731 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001732 .write = spi_chip_write_256,
1733 .read = spi_chip_read,
1734 },
1735
1736 {
1737 .vendor = "Eon",
1738 .name = "EN25B16",
1739 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001740 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001741 .model_id = EN_25B16,
1742 .total_size = 2048,
1743 .page_size = 256,
1744 .tested = TEST_UNTESTED,
1745 .probe = probe_spi_rdid,
1746 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001747 .block_erasers =
1748 {
1749 {
1750 .eraseblocks = {
1751 {4 * 1024, 2},
1752 {8 * 1024, 1},
1753 {16 * 1024, 1},
1754 {32 * 1024, 1},
1755 {64 * 1024, 31},
1756 },
1757 .block_erase = spi_block_erase_d8,
1758 }, {
1759 .eraseblocks = { {2 * 1024 * 1024, 1} },
1760 .block_erase = spi_block_erase_c7,
1761 }
1762 },
1763 .write = spi_chip_write_256,
1764 .read = spi_chip_read,
1765 },
1766
1767 {
1768 .vendor = "Eon",
1769 .name = "EN25B16T",
1770 .bustype = CHIP_BUSTYPE_SPI,
1771 .manufacture_id = EON_ID_NOPREFIX,
1772 .model_id = EN_25B16,
1773 .total_size = 2048,
1774 .page_size = 256,
1775 .tested = TEST_UNTESTED,
1776 .probe = probe_spi_rdid,
1777 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001778 .block_erasers =
1779 {
1780 {
1781 .eraseblocks = {
1782 {64 * 1024, 31},
1783 {32 * 1024, 1},
1784 {16 * 1024, 1},
1785 {8 * 1024, 1},
1786 {4 * 1024, 2},
1787 },
1788 .block_erase = spi_block_erase_d8,
1789 }, {
1790 .eraseblocks = { {2 * 1024 * 1024, 1} },
1791 .block_erase = spi_block_erase_c7,
1792 }
1793 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001794 .write = spi_chip_write_256,
1795 .read = spi_chip_read,
1796 },
1797
1798 {
1799 .vendor = "Eon",
1800 .name = "EN25B32",
1801 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001802 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001803 .model_id = EN_25B32,
1804 .total_size = 4096,
1805 .page_size = 256,
1806 .tested = TEST_UNTESTED,
1807 .probe = probe_spi_rdid,
1808 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001809 .block_erasers =
1810 {
1811 {
1812 .eraseblocks = {
1813 {4 * 1024, 2},
1814 {8 * 1024, 1},
1815 {16 * 1024, 1},
1816 {32 * 1024, 1},
1817 {64 * 1024, 63},
1818 },
1819 .block_erase = spi_block_erase_d8,
1820 }, {
1821 .eraseblocks = { {4 * 1024 * 1024, 1} },
1822 .block_erase = spi_block_erase_c7,
1823 }
1824 },
1825 .write = spi_chip_write_256,
1826 .read = spi_chip_read,
1827 },
1828
1829 {
1830 .vendor = "Eon",
1831 .name = "EN25B32T",
1832 .bustype = CHIP_BUSTYPE_SPI,
1833 .manufacture_id = EON_ID_NOPREFIX,
1834 .model_id = EN_25B32,
1835 .total_size = 4096,
1836 .page_size = 256,
1837 .tested = TEST_UNTESTED,
1838 .probe = probe_spi_rdid,
1839 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001840 .block_erasers =
1841 {
1842 {
1843 .eraseblocks = {
1844 {64 * 1024, 63},
1845 {32 * 1024, 1},
1846 {16 * 1024, 1},
1847 {8 * 1024, 1},
1848 {4 * 1024, 2},
1849 },
1850 .block_erase = spi_block_erase_d8,
1851 }, {
1852 .eraseblocks = { {4 * 1024 * 1024, 1} },
1853 .block_erase = spi_block_erase_c7,
1854 }
1855 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001856 .write = spi_chip_write_256,
1857 .read = spi_chip_read,
1858 },
1859
1860 {
1861 .vendor = "Eon",
1862 .name = "EN25B64",
1863 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001864 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001865 .model_id = EN_25B64,
1866 .total_size = 8192,
1867 .page_size = 256,
1868 .tested = TEST_UNTESTED,
1869 .probe = probe_spi_rdid,
1870 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001871 .block_erasers =
1872 {
1873 {
1874 .eraseblocks = {
1875 {4 * 1024, 2},
1876 {8 * 1024, 1},
1877 {16 * 1024, 1},
1878 {32 * 1024, 1},
1879 {64 * 1024, 127},
1880 },
1881 .block_erase = spi_block_erase_d8,
1882 }, {
1883 .eraseblocks = { {8 * 1024 * 1024, 1} },
1884 .block_erase = spi_block_erase_c7,
1885 }
1886 },
1887 .write = spi_chip_write_256,
1888 .read = spi_chip_read,
1889 },
1890
1891 {
1892 .vendor = "Eon",
1893 .name = "EN25B64T",
1894 .bustype = CHIP_BUSTYPE_SPI,
1895 .manufacture_id = EON_ID_NOPREFIX,
1896 .model_id = EN_25B64,
1897 .total_size = 8192,
1898 .page_size = 256,
1899 .tested = TEST_UNTESTED,
1900 .probe = probe_spi_rdid,
1901 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001902 .block_erasers =
1903 {
1904 {
1905 .eraseblocks = {
1906 {64 * 1024, 127},
1907 {32 * 1024, 1},
1908 {16 * 1024, 1},
1909 {8 * 1024, 1},
1910 {4 * 1024, 2},
1911 },
1912 .block_erase = spi_block_erase_d8,
1913 }, {
1914 .eraseblocks = { {8 * 1024 * 1024, 1} },
1915 .block_erase = spi_block_erase_c7,
1916 }
1917 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001918 .write = spi_chip_write_256,
1919 .read = spi_chip_read,
1920 },
1921
1922 {
1923 .vendor = "Eon",
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001924 .name = "EN25D16",
1925 .bustype = CHIP_BUSTYPE_SPI,
1926 .manufacture_id = EON_ID_NOPREFIX,
1927 .model_id = EN_25D16,
1928 .total_size = 2048,
1929 .page_size = 256,
1930 .tested = TEST_UNTESTED,
1931 .probe = probe_spi_rdid,
1932 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001933 .block_erasers =
1934 {
1935 {
1936 .eraseblocks = { {4 * 1024, 512} },
1937 .block_erase = spi_block_erase_20,
1938 }, {
1939 .eraseblocks = { {64 * 1024, 32} },
1940 .block_erase = spi_block_erase_d8,
1941 }, {
1942 .eraseblocks = { {64 * 1024, 32} },
1943 .block_erase = spi_block_erase_52,
1944 }, {
1945 .eraseblocks = { {2 * 1024 * 1024, 1} },
1946 .block_erase = spi_block_erase_60,
1947 }, {
1948 .eraseblocks = { {2 * 1024 * 1024, 1} },
1949 .block_erase = spi_block_erase_c7,
1950 }
1951 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001952 .write = spi_chip_write_256,
1953 .read = spi_chip_read,
1954 },
1955
1956 {
1957 .vendor = "Eon",
1958 .name = "EN25F05",
1959 .bustype = CHIP_BUSTYPE_SPI,
1960 .manufacture_id = EON_ID_NOPREFIX,
1961 .model_id = EN_25F05,
1962 .total_size = 64,
1963 .page_size = 256,
1964 .tested = TEST_UNTESTED,
1965 .probe = probe_spi_rdid,
1966 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001967 .block_erasers =
1968 {
1969 {
1970 .eraseblocks = { {4 * 1024, 16} },
1971 .block_erase = spi_block_erase_20,
1972 }, {
1973 .eraseblocks = { {32 * 1024, 2} },
1974 .block_erase = spi_block_erase_d8,
1975 }, {
1976 .eraseblocks = { {32 * 1024, 2} },
1977 .block_erase = spi_block_erase_52,
1978 }, {
1979 .eraseblocks = { {64 * 1024, 1} },
1980 .block_erase = spi_block_erase_60,
1981 }, {
1982 .eraseblocks = { {64 * 1024, 1} },
1983 .block_erase = spi_block_erase_c7,
1984 }
1985 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001986 .write = spi_chip_write_256,
1987 .read = spi_chip_read,
1988 },
1989
1990 {
1991 .vendor = "Eon",
1992 .name = "EN25F10",
1993 .bustype = CHIP_BUSTYPE_SPI,
1994 .manufacture_id = EON_ID_NOPREFIX,
1995 .model_id = EN_25F10,
1996 .total_size = 128,
1997 .page_size = 256,
1998 .tested = TEST_UNTESTED,
1999 .probe = probe_spi_rdid,
2000 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002001 .block_erasers =
2002 {
2003 {
2004 .eraseblocks = { {4 * 1024, 32} },
2005 .block_erase = spi_block_erase_20,
2006 }, {
2007 .eraseblocks = { {32 * 1024, 4} },
2008 .block_erase = spi_block_erase_d8,
2009 }, {
2010 .eraseblocks = { {32 * 1024, 4} },
2011 .block_erase = spi_block_erase_52,
2012 }, {
2013 .eraseblocks = { {128 * 1024, 1} },
2014 .block_erase = spi_block_erase_60,
2015 }, {
2016 .eraseblocks = { {128 * 1024, 1} },
2017 .block_erase = spi_block_erase_c7,
2018 }
2019 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002020 .write = spi_chip_write_256,
2021 .read = spi_chip_read,
2022 },
2023
2024 {
2025 .vendor = "Eon",
2026 .name = "EN25F20",
2027 .bustype = CHIP_BUSTYPE_SPI,
2028 .manufacture_id = EON_ID_NOPREFIX,
2029 .model_id = EN_25F20,
2030 .total_size = 256,
2031 .page_size = 256,
2032 .tested = TEST_UNTESTED,
2033 .probe = probe_spi_rdid,
2034 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002035 .block_erasers =
2036 {
2037 {
2038 .eraseblocks = { {4 * 1024, 64} },
2039 .block_erase = spi_block_erase_20,
2040 }, {
2041 .eraseblocks = { {64 * 1024, 4} },
2042 .block_erase = spi_block_erase_d8,
2043 }, {
2044 .eraseblocks = { {64 * 1024, 4} },
2045 .block_erase = spi_block_erase_52,
2046 }, {
2047 .eraseblocks = { {256 * 1024, 1} },
2048 .block_erase = spi_block_erase_60,
2049 }, {
2050 .eraseblocks = { {256 * 1024, 1} },
2051 .block_erase = spi_block_erase_c7,
2052 }
2053 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002054 .write = spi_chip_write_256,
2055 .read = spi_chip_read,
2056 },
2057
2058 {
2059 .vendor = "Eon",
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002060 .name = "EN25F40",
2061 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002062 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002063 .model_id = EN_25F40,
2064 .total_size = 512,
2065 .page_size = 256,
Carl-Daniel Hailfingerfaaa2b22009-06-22 10:06:28 +00002066 .tested = TEST_OK_PROBE,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002067 .probe = probe_spi_rdid,
2068 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002069 .block_erasers =
2070 {
2071 {
Sean Nelson54596372010-01-09 05:30:14 +00002072 .eraseblocks = { {4 * 1024, 128} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002073 .block_erase = spi_block_erase_20,
2074 }, {
Sean Nelson54596372010-01-09 05:30:14 +00002075 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002076 .block_erase = spi_block_erase_d8,
2077 }, {
Sean Nelson54596372010-01-09 05:30:14 +00002078 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002079 .block_erase = spi_block_erase_60,
2080 }, {
Sean Nelson54596372010-01-09 05:30:14 +00002081 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002082 .block_erase = spi_block_erase_c7,
2083 },
2084 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002085 .write = spi_chip_write_256,
2086 .read = spi_chip_read,
2087 },
2088
2089 {
2090 .vendor = "Eon",
2091 .name = "EN25F80",
2092 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002093 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002094 .model_id = EN_25F80,
2095 .total_size = 1024,
2096 .page_size = 256,
Uwe Hermannea5425b2010-05-30 17:00:19 +00002097 .tested = TEST_OK_PR,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002098 .probe = probe_spi_rdid,
2099 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002100 .block_erasers =
2101 {
2102 {
2103 .eraseblocks = { {4 * 1024, 256} },
2104 .block_erase = spi_block_erase_20,
2105 }, {
2106 .eraseblocks = { {64 * 1024, 16} },
2107 .block_erase = spi_block_erase_d8,
2108 }, {
2109 .eraseblocks = { {1024 * 1024, 1} },
2110 .block_erase = spi_block_erase_60,
2111 }, {
2112 .eraseblocks = { {1024 * 1024, 1} },
2113 .block_erase = spi_block_erase_c7,
2114 }
2115 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002116 .write = spi_chip_write_256,
2117 .read = spi_chip_read,
2118 },
2119
2120 {
2121 .vendor = "Eon",
2122 .name = "EN25F16",
2123 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002124 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002125 .model_id = EN_25F16,
2126 .total_size = 2048,
2127 .page_size = 256,
2128 .tested = TEST_UNTESTED,
2129 .probe = probe_spi_rdid,
2130 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002131 .block_erasers =
2132 {
2133 {
2134 .eraseblocks = { {4 * 1024, 512} },
2135 .block_erase = spi_block_erase_20,
2136 }, {
2137 .eraseblocks = { {64 * 1024, 32} },
2138 .block_erase = spi_block_erase_d8,
2139 }, {
2140 .eraseblocks = { {2 * 1024 * 1024, 1} },
2141 .block_erase = spi_block_erase_60,
2142 }, {
2143 .eraseblocks = { {2 * 1024 * 1024, 1} },
2144 .block_erase = spi_block_erase_c7,
2145 }
2146 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002147 .write = spi_chip_write_256,
2148 .read = spi_chip_read,
2149 },
2150
2151 {
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002152 .vendor = "Eon",
2153 .name = "EN25F32",
2154 .bustype = CHIP_BUSTYPE_SPI,
2155 .manufacture_id = EON_ID_NOPREFIX,
2156 .model_id = EN_25F32,
2157 .total_size = 4096,
2158 .page_size = 256,
2159 .tested = TEST_UNTESTED,
2160 .probe = probe_spi_rdid,
2161 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002162 .block_erasers =
2163 {
2164 {
2165 .eraseblocks = { {4 * 1024, 1024} },
2166 .block_erase = spi_block_erase_20,
2167 }, {
2168 .eraseblocks = { {64 * 1024, 64} },
2169 .block_erase = spi_block_erase_d8,
2170 }, {
2171 .eraseblocks = { {4 * 1024 * 1024, 1} },
2172 .block_erase = spi_block_erase_60,
2173 }, {
2174 .eraseblocks = { {4 * 1024 * 1024, 1} },
2175 .block_erase = spi_block_erase_c7,
2176 }
2177 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002178 .write = spi_chip_write_256,
2179 .read = spi_chip_read,
2180 },
2181
2182 {
Russ Dill3cd5a122010-03-05 08:44:11 +00002183 .vendor = "Eon",
2184 .name = "EN29F010",
2185 .bustype = CHIP_BUSTYPE_PARALLEL,
2186 .manufacture_id = EON_ID,
2187 .model_id = EN_29F010,
2188 .total_size = 128,
2189 .page_size = 128,
2190 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
2191 .tested = TEST_OK_PREW,
2192 .probe = probe_jedec,
2193 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2194 .block_erasers =
2195 {
2196 {
2197 .eraseblocks = { {16 * 1024, 8} },
2198 .block_erase = erase_sector_jedec,
2199 },
2200 {
2201 .eraseblocks = { {128 * 1024, 1} },
2202 .block_erase = erase_chip_block_jedec,
2203 },
2204 },
2205 .write = write_jedec_1,
2206 .read = read_memmapped,
2207 },
2208
2209 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002210 .vendor = "EON",
2211 .name = "EN29F002(A)(N)B",
Urja Rannikko161b8852009-06-05 08:47:37 +00002212 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002213 .manufacture_id = EON_ID,
2214 .model_id = EN_29F002B,
2215 .total_size = 256,
2216 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002217 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Michael Karcherb90c2212010-03-24 22:56:14 +00002218 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002219 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002220 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002221 .block_erasers =
2222 {
2223 {
2224 .eraseblocks = {
Sean Nelson6b11ad22009-12-23 17:05:59 +00002225 {16 * 1024, 1},
Michael Karchere3cb0a12010-03-13 23:47:09 +00002226 {8 * 1024, 2},
2227 {32 * 1024, 1},
2228 {64 * 1024, 3},
Sean Nelson6b11ad22009-12-23 17:05:59 +00002229 },
2230 .block_erase = erase_sector_jedec,
2231 }, {
2232 .eraseblocks = { {256 * 1024, 1} },
2233 .block_erase = erase_chip_block_jedec,
2234 },
2235 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002236 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002237 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002238 },
2239
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002240 {
2241 .vendor = "EON",
2242 .name = "EN29F002(A)(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00002243 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002244 .manufacture_id = EON_ID,
2245 .model_id = EN_29F002T,
2246 .total_size = 256,
2247 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002248 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00002249 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002250 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002251 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002252 .block_erasers =
2253 {
2254 {
2255 .eraseblocks = {
Sean Nelson6b11ad22009-12-23 17:05:59 +00002256 {64 * 1024, 3},
Michael Karchere3cb0a12010-03-13 23:47:09 +00002257 {32 * 1024, 1},
2258 {8 * 1024, 2},
2259 {16 * 1024, 1},
Sean Nelson6b11ad22009-12-23 17:05:59 +00002260 },
2261 .block_erase = erase_sector_jedec,
2262 }, {
2263 .eraseblocks = { {256 * 1024, 1} },
2264 .block_erase = erase_chip_block_jedec,
2265 },
2266 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002267 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002268 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002269 },
2270
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002271 {
2272 .vendor = "Fujitsu",
2273 .name = "MBM29F004BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002274 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002275 .manufacture_id = FUJITSU_ID,
2276 .model_id = MBM29F004BC,
2277 .total_size = 512,
2278 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002279 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002280 .tested = TEST_UNTESTED,
2281 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002282 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002283 .block_erasers =
2284 {
2285 {
2286 .eraseblocks = {
2287 {16 * 1024, 1},
2288 {8 * 1024, 2},
2289 {32 * 1024, 1},
2290 {64 * 1024, 7},
2291 },
Sean Nelson35727f72010-01-28 23:55:12 +00002292 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002293 }, {
2294 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002295 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002296 },
2297 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002298 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002299 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002300 },
2301
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002302 {
2303 .vendor = "Fujitsu",
2304 .name = "MBM29F004TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002305 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002306 .manufacture_id = FUJITSU_ID,
2307 .model_id = MBM29F004TC,
2308 .total_size = 512,
2309 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002310 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002311 .tested = TEST_UNTESTED,
2312 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002313 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002314 .block_erasers =
2315 {
2316 {
2317 .eraseblocks = {
2318 {64 * 1024, 7},
2319 {32 * 1024, 1},
2320 {8 * 1024, 2},
2321 {16 * 1024, 1},
2322 },
Sean Nelson35727f72010-01-28 23:55:12 +00002323 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002324 }, {
2325 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002326 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002327 },
2328 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002329 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002330 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002331 },
2332
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002333 {
Sean Nelson35727f72010-01-28 23:55:12 +00002334 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002335 .vendor = "Fujitsu",
2336 .name = "MBM29F400BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002337 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002338 .manufacture_id = FUJITSU_ID,
2339 .model_id = MBM29F400BC,
2340 .total_size = 512,
2341 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002342 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002343 .tested = TEST_UNTESTED,
2344 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002345 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002346 .block_erasers =
2347 {
2348 {
2349 .eraseblocks = {
2350 {16 * 1024, 1},
2351 {8 * 1024, 2},
2352 {32 * 1024, 1},
2353 {64 * 1024, 7},
2354 },
2355 .block_erase = block_erase_m29f400bt,
2356 }, {
2357 .eraseblocks = { {512 * 1024, 1} },
2358 .block_erase = block_erase_chip_m29f400bt,
2359 },
2360 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002361 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002362 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002363 },
2364
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002365 {
2366 .vendor = "Fujitsu",
2367 .name = "MBM29F400TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002368 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002369 .manufacture_id = FUJITSU_ID,
2370 .model_id = MBM29F400TC,
2371 .total_size = 512,
2372 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002373 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002374 .tested = TEST_UNTESTED,
2375 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002376 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002377 .block_erasers =
2378 {
2379 {
2380 .eraseblocks = {
2381 {64 * 1024, 7},
2382 {32 * 1024, 1},
2383 {8 * 1024, 2},
2384 {16 * 1024, 1},
2385 },
2386 .block_erase = block_erase_m29f400bt,
2387 }, {
2388 .eraseblocks = { {512 * 1024, 1} },
2389 .block_erase = block_erase_chip_m29f400bt,
2390 },
2391 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002392 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002393 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002394 },
2395
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002396 {
David Borgc96a8bd2010-06-21 16:12:22 +00002397 .vendor = "Hyundai",
2398 .name = "HY29F002T",
2399 .bustype = CHIP_BUSTYPE_PARALLEL,
2400 .manufacture_id = HYUNDAI_ID,
2401 .model_id = HY_29F002T,
2402 .total_size = 256,
2403 .page_size = 256 * 1024,
2404 .feature_bits = FEATURE_EITHER_RESET, /* Some revisions may need FEATURE_ADDR_2AA */
2405 .tested = TEST_OK_PREW,
2406 .probe = probe_jedec,
2407 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2408 .block_erasers =
2409 {
2410 {
2411 .eraseblocks = {
2412 {64 * 1024, 3},
2413 {32 * 1024, 1},
2414 {8 * 1024, 2},
2415 {16 * 1024, 1},
2416 },
2417 .block_erase = erase_sector_jedec,
2418 }, {
2419 .eraseblocks = { {256 * 1024, 1} },
2420 .block_erase = erase_chip_block_jedec,
2421 },
2422 },
2423 .write = write_jedec_1,
2424 .read = read_memmapped,
2425 },
2426
2427 {
2428 .vendor = "Hyundai",
2429 .name = "HY29F002B",
2430 .bustype = CHIP_BUSTYPE_PARALLEL,
2431 .manufacture_id = HYUNDAI_ID,
2432 .model_id = HY_29F002B,
2433 .total_size = 256,
2434 .page_size = 256 * 1024,
2435 .feature_bits = FEATURE_EITHER_RESET, /* Some revisions may need FEATURE_ADDR_2AA */
2436 .tested = TEST_UNTESTED,
2437 .probe = probe_jedec,
2438 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2439 .block_erasers =
2440 {
2441 {
2442 .eraseblocks = {
2443 {16 * 1024, 1},
2444 {8 * 1024, 2},
2445 {32 * 1024, 1},
2446 {64 * 1024, 3},
2447 },
2448 .block_erase = erase_sector_jedec,
2449 }, {
2450 .eraseblocks = { {256 * 1024, 1} },
2451 .block_erase = erase_chip_block_jedec,
2452 },
2453 },
2454 .write = write_jedec_1,
2455 .read = read_memmapped,
2456 },
2457
2458 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002459 .vendor = "Intel",
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002460 .name = "28F001BX-B",
Urja Rannikko161b8852009-06-05 08:47:37 +00002461 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002462 .manufacture_id = INTEL_ID,
2463 .model_id = P28F001BXB,
2464 .total_size = 128,
2465 .page_size = 128 * 1024, /* 8k + 2x4k + 112k */
Sean Nelsondee4a832010-03-22 04:39:31 +00002466 .tested = TEST_UNTESTED,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002467 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002468 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00002469 .block_erasers =
2470 {
2471 {
2472 .eraseblocks = {
2473 {8 * 1024, 1},
2474 {4 * 1024, 2},
2475 {112 * 1024, 1},
2476 },
Sean Nelson28accc22010-03-19 18:47:06 +00002477 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00002478 },
2479 },
Sean Nelsondee4a832010-03-22 04:39:31 +00002480 .write = write_82802ab,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002481 .read = read_memmapped,
2482 },
2483
2484 {
2485 .vendor = "Intel",
2486 .name = "28F001BX-T",
Urja Rannikko161b8852009-06-05 08:47:37 +00002487 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002488 .manufacture_id = INTEL_ID,
2489 .model_id = P28F001BXT,
2490 .total_size = 128,
2491 .page_size = 128 * 1024, /* 112k + 2x4k + 8k */
Sean Nelsondee4a832010-03-22 04:39:31 +00002492 .tested = TEST_UNTESTED,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002493 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002494 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00002495 .block_erasers =
2496 {
2497 {
2498 .eraseblocks = {
2499 {112 * 1024, 1},
2500 {4 * 1024, 2},
2501 {8 * 1024, 1},
2502 },
Sean Nelson28accc22010-03-19 18:47:06 +00002503 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00002504 },
2505 },
Sean Nelsondee4a832010-03-22 04:39:31 +00002506 .write = write_82802ab,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002507 .read = read_memmapped,
2508 },
2509
2510 {
2511 .vendor = "Intel",
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002512 .name = "28F004S5",
2513 .bustype = CHIP_BUSTYPE_PARALLEL,
2514 .manufacture_id = INTEL_ID,
2515 .model_id = E_28F004S5,
2516 .total_size = 512,
2517 .page_size = 256,
2518 .tested = TEST_UNTESTED,
2519 .probe = probe_82802ab,
2520 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002521 .block_erasers =
2522 {
2523 {
2524 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson28accc22010-03-19 18:47:06 +00002525 .block_erase = erase_block_82802ab,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002526 },
2527 },
Sean Nelsondee4a832010-03-22 04:39:31 +00002528 .unlock = unlock_28f004s5,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002529 .write = write_82802ab,
2530 .read = read_memmapped,
2531 },
2532
2533 {
2534 .vendor = "Intel",
Michael Karcherad0010a2010-04-03 10:27:08 +00002535 .name = "28F004BV/BE-B",
2536 .bustype = CHIP_BUSTYPE_PARALLEL,
2537 .manufacture_id = INTEL_ID,
2538 .model_id = P28F004BB,
2539 .total_size = 512,
2540 .page_size = 128 * 1024, /* maximal block size */
2541 .tested = TEST_UNTESTED,
2542 .probe = probe_82802ab,
2543 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2544 .block_erasers =
2545 {
2546 {
2547 .eraseblocks = {
2548 {16 * 1024, 1},
2549 {8 * 1024, 2},
2550 {96 * 1024, 1},
2551 {128 * 1024, 3},
2552 },
2553 .block_erase = erase_block_82802ab,
2554 },
2555 },
2556 .write = write_82802ab,
2557 .read = read_memmapped,
2558 },
2559
2560 {
2561 .vendor = "Intel",
2562 .name = "28F004BV/BE-T",
2563 .bustype = CHIP_BUSTYPE_PARALLEL,
2564 .manufacture_id = INTEL_ID,
2565 .model_id = P28F004BT,
2566 .total_size = 512,
2567 .page_size = 128 * 1024, /* maximal block size */
2568 .tested = TEST_UNTESTED,
2569 .probe = probe_82802ab,
2570 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2571 .block_erasers =
2572 {
2573 {
2574 .eraseblocks = {
2575 {128 * 1024, 3},
2576 {96 * 1024, 1},
2577 {8 * 1024, 2},
2578 {16 * 1024, 1},
2579 },
2580 .block_erase = erase_block_82802ab,
2581 },
2582 },
2583 .write = write_82802ab,
2584 .read = read_memmapped,
2585 },
2586
2587 {
2588 .vendor = "Intel",
2589 .name = "28F400BV/CV/CE-B",
2590 .bustype = CHIP_BUSTYPE_PARALLEL,
2591 .manufacture_id = INTEL_ID,
2592 .model_id = P28F400BB,
2593 .total_size = 512,
2594 .page_size = 128 * 1024, /* maximal block size */
2595 .feature_bits = FEATURE_ADDR_SHIFTED,
2596 .tested = TEST_UNTESTED,
2597 .probe = probe_82802ab,
2598 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2599 .block_erasers =
2600 {
2601 {
2602 .eraseblocks = {
2603 {16 * 1024, 1},
2604 {8 * 1024, 2},
2605 {96 * 1024, 1},
2606 {128 * 1024, 3},
2607 },
2608 .block_erase = erase_block_82802ab,
2609 },
2610 },
2611 .write = write_82802ab,
2612 .read = read_memmapped,
2613 },
2614
2615 {
2616 .vendor = "Intel",
2617 .name = "28F400BV/CV/CE-T",
2618 .bustype = CHIP_BUSTYPE_PARALLEL,
2619 .manufacture_id = INTEL_ID,
2620 .model_id = P28F400BT,
2621 .total_size = 512,
2622 .page_size = 128 * 1024, /* maximal block size */
2623 .feature_bits = FEATURE_ADDR_SHIFTED,
2624 .tested = TEST_UNTESTED,
2625 .probe = probe_82802ab,
2626 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2627 .block_erasers =
2628 {
2629 {
2630 .eraseblocks = {
2631 {128 * 1024, 3},
2632 {96 * 1024, 1},
2633 {8 * 1024, 2},
2634 {16 * 1024, 1},
2635 },
2636 .block_erase = erase_block_82802ab,
2637 },
2638 },
2639 .write = write_82802ab,
2640 .read = read_memmapped,
2641 },
2642
2643 {
2644 .vendor = "Intel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002645 .name = "82802AB",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002646 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002647 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002648 .model_id = I_82802AB,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002649 .total_size = 512,
2650 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00002651 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00002652 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002653 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002654 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002655 .block_erasers =
2656 {
2657 {
2658 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson28accc22010-03-19 18:47:06 +00002659 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00002660 },
2661 },
Sean Nelson28accc22010-03-19 18:47:06 +00002662 .unlock = unlock_82802ab,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002663 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002664 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002665 },
2666
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002667 {
2668 .vendor = "Intel",
2669 .name = "82802AC",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002670 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002671 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002672 .model_id = I_82802AC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002673 .total_size = 1024,
2674 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00002675 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00002676 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002677 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002678 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002679 .block_erasers =
2680 {
2681 {
2682 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson28accc22010-03-19 18:47:06 +00002683 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00002684 },
2685 },
Sean Nelson28accc22010-03-19 18:47:06 +00002686 .unlock = unlock_82802ab,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002687 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002688 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002689 },
2690
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002691 {
2692 .vendor = "Macronix",
2693 .name = "MX25L512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002694 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002695 .manufacture_id = MX_ID,
2696 .model_id = MX_25L512,
2697 .total_size = 64,
2698 .page_size = 256,
2699 .tested = TEST_UNTESTED,
2700 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002701 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002702 .block_erasers =
2703 {
2704 {
2705 .eraseblocks = { {4 * 1024, 16} },
2706 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002707 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002708 .eraseblocks = { {64 * 1024, 1} },
2709 .block_erase = spi_block_erase_52,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002710 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002711 .eraseblocks = { {64 * 1024, 1} },
2712 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002713 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002714 .eraseblocks = { {64 * 1024, 1} },
2715 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002716 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002717 .eraseblocks = { {64 * 1024, 1} },
2718 .block_erase = spi_block_erase_c7,
2719 },
2720 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002721 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002722 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002723 },
2724
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002725 {
2726 .vendor = "Macronix",
2727 .name = "MX25L1005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002728 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002729 .manufacture_id = MX_ID,
2730 .model_id = MX_25L1005,
2731 .total_size = 128,
2732 .page_size = 256,
2733 .tested = TEST_UNTESTED,
2734 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002735 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002736 .block_erasers =
2737 {
2738 {
2739 .eraseblocks = { {4 * 1024, 32} },
2740 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002741 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002742 .eraseblocks = { {64 * 1024, 2} },
2743 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002744 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002745 .eraseblocks = { {128 * 1024, 1} },
2746 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002747 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002748 .eraseblocks = { {128 * 1024, 1} },
2749 .block_erase = spi_block_erase_c7,
2750 },
2751 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002752 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002753 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002754 },
2755
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002756 {
2757 .vendor = "Macronix",
2758 .name = "MX25L2005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002759 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002760 .manufacture_id = MX_ID,
2761 .model_id = MX_25L2005,
2762 .total_size = 256,
2763 .page_size = 256,
2764 .tested = TEST_UNTESTED,
2765 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002766 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002767 .block_erasers =
2768 {
2769 {
2770 .eraseblocks = { {4 * 1024, 64} },
2771 .block_erase = spi_block_erase_20,
2772 }, {
2773 .eraseblocks = { {64 * 1024, 4} },
2774 .block_erase = spi_block_erase_52,
2775 }, {
2776 .eraseblocks = { {64 * 1024, 4} },
2777 .block_erase = spi_block_erase_d8,
2778 }, {
2779 .eraseblocks = { {256 * 1024, 1} },
2780 .block_erase = spi_block_erase_60,
2781 }, {
2782 .eraseblocks = { {256 * 1024, 1} },
2783 .block_erase = spi_block_erase_c7,
2784 },
2785 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002786 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002787 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002788 },
2789
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002790 {
2791 .vendor = "Macronix",
2792 .name = "MX25L4005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002793 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002794 .manufacture_id = MX_ID,
2795 .model_id = MX_25L4005,
2796 .total_size = 512,
2797 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002798 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002799 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002800 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002801 .block_erasers =
2802 {
2803 {
2804 .eraseblocks = { {4 * 1024, 128} },
2805 .block_erase = spi_block_erase_20,
2806 }, {
2807 .eraseblocks = { {64 * 1024, 8} },
2808 .block_erase = spi_block_erase_52,
2809 }, {
2810 .eraseblocks = { {64 * 1024, 8} },
2811 .block_erase = spi_block_erase_d8,
2812 }, {
2813 .eraseblocks = { {512 * 1024, 1} },
2814 .block_erase = spi_block_erase_60,
2815 }, {
2816 .eraseblocks = { {512 * 1024, 1} },
2817 .block_erase = spi_block_erase_c7,
2818 },
2819 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002820 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002821 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002822 },
2823
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002824 {
2825 .vendor = "Macronix",
2826 .name = "MX25L8005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002827 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002828 .manufacture_id = MX_ID,
2829 .model_id = MX_25L8005,
2830 .total_size = 1024,
2831 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002832 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002833 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002834 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002835 .block_erasers =
2836 {
2837 {
2838 .eraseblocks = { {4 * 1024, 256} },
2839 .block_erase = spi_block_erase_20,
2840 }, {
2841 .eraseblocks = { {64 * 1024, 16} },
2842 .block_erase = spi_block_erase_52,
2843 }, {
2844 .eraseblocks = { {64 * 1024, 16} },
2845 .block_erase = spi_block_erase_d8,
2846 }, {
2847 .eraseblocks = { {1024 * 1024, 1} },
2848 .block_erase = spi_block_erase_60,
2849 }, {
2850 .eraseblocks = { {1024 * 1024, 1} },
2851 .block_erase = spi_block_erase_c7,
2852 },
2853 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002854 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002855 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002856 },
2857
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002858 {
2859 .vendor = "Macronix",
2860 .name = "MX25L1605",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002861 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002862 .manufacture_id = MX_ID,
2863 .model_id = MX_25L1605,
2864 .total_size = 2048,
2865 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002866 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002867 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002868 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002869 .block_erasers =
2870 {
2871 {
2872 .eraseblocks = { {4 * 1024, 512} },
2873 .block_erase = spi_block_erase_20, /* This erase function has 64k blocksize for eLiteFlash */
2874 }, {
2875 .eraseblocks = { {64 * 1024, 32} }, /* Not supported in MX25L1605 (eLiteFlash) and MX25L1605D */
2876 .block_erase = spi_block_erase_52,
2877 }, {
2878 .eraseblocks = { {64 * 1024, 32} },
2879 .block_erase = spi_block_erase_d8,
2880 }, {
2881 .eraseblocks = { {2 * 1024 * 1024, 1} },
2882 .block_erase = spi_block_erase_60,
2883 }, {
2884 .eraseblocks = { {2 * 1024 * 1024, 1} },
2885 .block_erase = spi_block_erase_c7,
2886 },
2887 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002888 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002889 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002890 },
2891
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002892 {
2893 .vendor = "Macronix",
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002894 .name = "MX25L1635D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002895 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002896 .manufacture_id = MX_ID,
2897 .model_id = MX_25L1635D,
2898 .total_size = 2048,
2899 .page_size = 256,
2900 .tested = TEST_UNTESTED,
2901 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002902 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002903 .block_erasers =
2904 {
2905 {
2906 .eraseblocks = { {4 * 1024, 512} },
2907 .block_erase = spi_block_erase_20,
2908 }, {
2909 .eraseblocks = { {64 * 1024, 32} },
2910 .block_erase = spi_block_erase_d8,
2911 }, {
2912 .eraseblocks = { {2 * 1024 * 1024, 1} },
2913 .block_erase = spi_block_erase_60,
2914 }, {
2915 .eraseblocks = { {2 * 1024 * 1024, 1} },
2916 .block_erase = spi_block_erase_c7,
2917 }
2918 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002919 .write = spi_chip_write_256,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002920 .read = spi_chip_read,
2921 },
Stephan Guillouxfd315502009-04-20 22:54:13 +00002922
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002923 {
2924 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002925 .name = "MX25L3205",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002926 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002927 .manufacture_id = MX_ID,
2928 .model_id = MX_25L3205,
2929 .total_size = 4096,
2930 .page_size = 256,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002931 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002932 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002933 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002934 .block_erasers =
2935 {
2936 {
2937 .eraseblocks = { {4 * 1024, 1024} },
2938 .block_erase = spi_block_erase_20,
2939 }, {
2940 .eraseblocks = { {4 * 1024, 1024} },
2941 .block_erase = spi_block_erase_d8,
2942 }, {
2943 .eraseblocks = { {4 * 1024 * 1024, 1} },
2944 .block_erase = spi_block_erase_60,
2945 }, {
2946 .eraseblocks = { {4 * 1024 * 1024, 1} },
2947 .block_erase = spi_block_erase_c7,
2948 },
2949 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002950 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002951 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002952 },
2953
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002954 {
2955 .vendor = "Macronix",
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002956 .name = "MX25L3235D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002957 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002958 .manufacture_id = MX_ID,
2959 .model_id = MX_25L3235D,
2960 .total_size = 4096,
2961 .page_size = 256,
2962 .tested = TEST_UNTESTED,
2963 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002964 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002965 .block_erasers =
2966 {
2967 {
2968 .eraseblocks = { {4 * 1024, 1024} },
2969 .block_erase = spi_block_erase_20,
2970 }, {
2971 .eraseblocks = { {64 * 1024, 64} },
2972 .block_erase = spi_block_erase_d8,
2973 }, {
2974 .eraseblocks = { {4 * 1024 * 1024, 1} },
2975 .block_erase = spi_block_erase_60,
2976 }, {
2977 .eraseblocks = { {4 * 1024 * 1024, 1} },
2978 .block_erase = spi_block_erase_c7,
2979 }
2980 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002981 .write = spi_chip_write_256,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002982 .read = spi_chip_read,
2983 },
2984
2985 {
2986 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002987 .name = "MX25L6405",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002988 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002989 .manufacture_id = MX_ID,
2990 .model_id = MX_25L6405,
2991 .total_size = 8192,
2992 .page_size = 256,
Carl-Daniel Hailfinger452b3e32009-06-22 11:14:43 +00002993 .tested = TEST_OK_PROBE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002994 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002995 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002996 .block_erasers =
2997 {
2998 {
2999 .eraseblocks = { {64 * 1024, 128} },
3000 .block_erase = spi_block_erase_20,
3001 }, {
3002 .eraseblocks = { {64 * 1024, 128} },
3003 .block_erase = spi_block_erase_d8,
3004 }, {
3005 .eraseblocks = { {8 * 1024 * 1024, 1} },
3006 .block_erase = spi_block_erase_60,
3007 }, {
3008 .eraseblocks = { {8 * 1024 * 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 = "Macronix",
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00003018 .name = "MX25L12805",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003019 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00003020 .manufacture_id = MX_ID,
3021 .model_id = MX_25L12805,
3022 .total_size = 16384,
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 Nelson54596372010-01-09 05:30:14 +00003027 .block_erasers =
3028 {
3029 {
3030 .eraseblocks = { {4 * 1024, 4096} },
3031 .block_erase = spi_block_erase_20,
3032 }, {
3033 .eraseblocks = { {64 * 1024, 256} },
3034 .block_erase = spi_block_erase_d8,
3035 }, {
3036 .eraseblocks = { {16 * 1024 * 1024, 1} },
3037 .block_erase = spi_block_erase_60,
3038 }, {
3039 .eraseblocks = { {16 * 1024 * 1024, 1} },
3040 .block_erase = spi_block_erase_c7,
3041 }
3042 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003043 .write = spi_chip_write_256,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00003044 .read = spi_chip_read,
3045 },
3046
3047 {
3048 .vendor = "Macronix",
Mark Panajotovic502a9132009-08-24 01:42:24 +00003049 .name = "MX29F001B",
3050 .bustype = CHIP_BUSTYPE_PARALLEL,
3051 .manufacture_id = MX_ID,
3052 .model_id = MX_29F001B,
3053 .total_size = 128,
3054 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003055 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
3056 .tested = TEST_UNTESTED,
3057 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00003058 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00003059 .block_erasers =
3060 {
3061 {
3062 .eraseblocks = {
3063 {8 * 1024, 1},
3064 {4 * 1024, 2},
3065 {8 * 1024, 2},
3066 {32 * 1024, 1},
3067 {64 * 1024, 1},
3068 },
Sean Nelson35727f72010-01-28 23:55:12 +00003069 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003070 }, {
3071 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003072 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003073 }
3074 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003075 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00003076 .read = read_memmapped,
3077 },
3078
3079 {
3080 .vendor = "Macronix",
3081 .name = "MX29F001T",
3082 .bustype = CHIP_BUSTYPE_PARALLEL,
3083 .manufacture_id = MX_ID,
3084 .model_id = MX_29F001T,
3085 .total_size = 128,
3086 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003087 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
3088 .tested = TEST_UNTESTED,
3089 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00003090 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00003091 .block_erasers =
3092 {
3093 {
3094 .eraseblocks = {
3095 {64 * 1024, 1},
3096 {32 * 1024, 1},
3097 {8 * 1024, 2},
3098 {4 * 1024, 2},
3099 {8 * 1024, 1},
3100 },
Sean Nelson35727f72010-01-28 23:55:12 +00003101 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003102 }, {
3103 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003104 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003105 }
3106 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003107 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00003108 .read = read_memmapped,
3109 },
3110
3111 {
3112 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003113 .name = "MX29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00003114 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003115 .manufacture_id = MX_ID,
3116 .model_id = MX_29F002B,
3117 .total_size = 256,
3118 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003119 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003120 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00003121 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003122 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003123 .block_erasers =
3124 {
3125 {
3126 .eraseblocks = {
3127 {16 * 1024, 1},
3128 {8 * 1024, 2},
3129 {32 * 1024, 1},
3130 {64 * 1024, 3},
3131 },
Sean Nelson35727f72010-01-28 23:55:12 +00003132 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003133 }, {
3134 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003135 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003136 },
3137 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003138 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003139 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003140 },
3141
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003142 {
3143 .vendor = "Macronix",
3144 .name = "MX29F002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00003145 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003146 .manufacture_id = MX_ID,
3147 .model_id = MX_29F002T,
3148 .total_size = 256,
3149 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003150 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00003151 .tested = TEST_OK_PRW,
Sean Nelson35727f72010-01-28 23:55:12 +00003152 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003153 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003154 .block_erasers =
3155 {
3156 {
3157 .eraseblocks = {
3158 {64 * 1024, 3},
3159 {32 * 1024, 1},
3160 {8 * 1024, 2},
3161 {16 * 1024, 1},
3162 },
Sean Nelson35727f72010-01-28 23:55:12 +00003163 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003164 }, {
3165 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003166 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003167 },
3168 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003169 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003170 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003171 },
3172
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003173 {
3174 .vendor = "Macronix",
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00003175 .name = "MX29LV040",
Urja Rannikko038a3122009-06-28 19:19:25 +00003176 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003177 .manufacture_id = MX_ID,
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00003178 .model_id = MX_29LV040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003179 .total_size = 512,
3180 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003181 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
3182 .tested = TEST_UNTESTED,
3183 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003184 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00003185 .block_erasers =
3186 {
3187 {
3188 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00003189 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003190 }, {
3191 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003192 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003193 },
3194 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003195 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003196 .read = read_memmapped,
Carl-Daniel Hailfinger7de86392008-12-10 10:32:05 +00003197 },
3198
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003199 {
3200 .vendor = "Numonyx",
3201 .name = "M25PE10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003202 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003203 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003204 .model_id = ST_M25PE10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003205 .total_size = 128,
3206 .page_size = 256,
3207 .tested = TEST_UNTESTED,
3208 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003209 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003210 .block_erasers =
3211 {
3212 {
3213 .eraseblocks = { {4 * 1024, 32} },
3214 .block_erase = spi_block_erase_20,
3215 }, {
3216 .eraseblocks = { {64 * 1024, 2} },
3217 .block_erase = spi_block_erase_d8,
3218 }, {
3219 .eraseblocks = { {128 * 1024, 1} },
3220 .block_erase = spi_block_erase_c7,
3221 }
3222 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003223 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003224 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003225 },
3226
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003227 {
3228 .vendor = "Numonyx",
3229 .name = "M25PE20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003230 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003231 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003232 .model_id = ST_M25PE20,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003233 .total_size = 256,
3234 .page_size = 256,
3235 .tested = TEST_UNTESTED,
3236 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003237 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003238 .block_erasers =
3239 {
3240 {
3241 .eraseblocks = { {4 * 1024, 64} },
3242 .block_erase = spi_block_erase_20,
3243 }, {
3244 .eraseblocks = { {64 * 1024, 4} },
3245 .block_erase = spi_block_erase_d8,
3246 }, {
3247 .eraseblocks = { {256 * 1024, 1} },
3248 .block_erase = spi_block_erase_c7,
3249 }
3250 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003251 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003252 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003253 },
3254
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003255 {
3256 .vendor = "Numonyx",
3257 .name = "M25PE40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003258 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003259 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003260 .model_id = ST_M25PE40,
Sean Nelson5643c072010-01-19 03:23:07 +00003261 .total_size = 512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003262 .page_size = 256,
3263 .tested = TEST_UNTESTED,
3264 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003265 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003266 .block_erasers =
3267 {
3268 {
3269 .eraseblocks = { {4 * 1024, 128} },
3270 .block_erase = spi_block_erase_20,
3271 }, {
3272 .eraseblocks = { {64 * 1024, 8} },
3273 .block_erase = spi_block_erase_d8,
3274 }, {
3275 .eraseblocks = { {512 * 1024, 1} },
3276 .block_erase = spi_block_erase_c7,
3277 }
3278 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003279 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003280 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003281 },
3282
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003283 {
3284 .vendor = "Numonyx",
3285 .name = "M25PE80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003286 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003287 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003288 .model_id = ST_M25PE80,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003289 .total_size = 1024,
3290 .page_size = 256,
3291 .tested = TEST_OK_PREW,
3292 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003293 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003294 .block_erasers =
3295 {
3296 {
3297 .eraseblocks = { {4 * 1024, 256} },
3298 .block_erase = spi_block_erase_20,
3299 }, {
3300 .eraseblocks = { {64 * 1024, 16} },
3301 .block_erase = spi_block_erase_d8,
3302 }, {
3303 .eraseblocks = { {1024 * 1024, 1} },
3304 .block_erase = spi_block_erase_c7,
3305 }
3306 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003307 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003308 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003309 },
3310
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003311 {
3312 .vendor = "Numonyx",
3313 .name = "M25PE16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003314 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003315 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003316 .model_id = ST_M25PE16,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003317 .total_size = 2048,
3318 .page_size = 256,
3319 .tested = TEST_UNTESTED,
3320 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003321 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003322 .block_erasers =
3323 {
3324 {
3325 .eraseblocks = { {4 * 1024, 512} },
3326 .block_erase = spi_block_erase_20,
3327 }, {
3328 .eraseblocks = { {64 * 1024, 32} },
3329 .block_erase = spi_block_erase_d8,
3330 }, {
3331 .eraseblocks = { {2 * 1024 * 1024, 1} },
3332 .block_erase = spi_block_erase_c7,
3333 }
3334 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003335 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003336 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003337 },
3338
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003339 {
3340 .vendor = "PMC",
3341 .name = "Pm25LV010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003342 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003343 .manufacture_id = PMC_ID,
3344 .model_id = PMC_25LV010,
3345 .total_size = 128,
3346 .page_size = 256,
3347 .tested = TEST_UNTESTED,
3348 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003349 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003350 .block_erasers =
3351 {
3352 {
3353 .eraseblocks = { {4 * 1024, 32} },
3354 .block_erase = spi_block_erase_d7,
3355 }, {
3356 .eraseblocks = { {32 * 1024, 4} },
3357 .block_erase = spi_block_erase_d8,
3358 }, {
3359 .eraseblocks = { {128 * 1024, 1} },
3360 .block_erase = spi_block_erase_c7,
3361 }
3362 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003363 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003364 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003365 },
3366
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003367 {
3368 .vendor = "PMC",
3369 .name = "Pm25LV016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003370 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003371 .manufacture_id = PMC_ID,
3372 .model_id = PMC_25LV016B,
3373 .total_size = 2048,
3374 .page_size = 256,
3375 .tested = TEST_UNTESTED,
3376 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003377 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003378 .block_erasers =
3379 {
3380 {
3381 .eraseblocks = { {4 * 1024, 512} },
3382 .block_erase = spi_block_erase_d7,
3383 }, {
3384 .eraseblocks = { {4 * 1024, 512} },
3385 .block_erase = spi_block_erase_20,
3386 }, {
3387 .eraseblocks = { {64 * 1024, 32} },
3388 .block_erase = spi_block_erase_d8,
3389 }, {
3390 .eraseblocks = { {2 * 1024 * 1024, 1} },
3391 .block_erase = spi_block_erase_60,
3392 }, {
3393 .eraseblocks = { {2 * 1024 * 1024, 1} },
3394 .block_erase = spi_block_erase_c7,
3395 }
3396 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003397 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003398 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003399 },
3400
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003401 {
3402 .vendor = "PMC",
3403 .name = "Pm25LV020",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003404 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003405 .manufacture_id = PMC_ID,
3406 .model_id = PMC_25LV020,
3407 .total_size = 256,
3408 .page_size = 256,
3409 .tested = TEST_UNTESTED,
3410 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003411 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003412 .block_erasers =
3413 {
3414 {
3415 .eraseblocks = { {4 * 1024, 64} },
3416 .block_erase = spi_block_erase_d7,
3417 }, {
3418 .eraseblocks = { {64 * 1024, 4} },
3419 .block_erase = spi_block_erase_d8,
3420 }, {
3421 .eraseblocks = { {256 * 1024, 1} },
3422 .block_erase = spi_block_erase_c7,
3423 }
3424 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003425 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003426 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003427 },
3428
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003429 {
3430 .vendor = "PMC",
3431 .name = "Pm25LV040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003432 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003433 .manufacture_id = PMC_ID,
3434 .model_id = PMC_25LV040,
3435 .total_size = 512,
3436 .page_size = 256,
3437 .tested = TEST_UNTESTED,
3438 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003439 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003440 .block_erasers =
3441 {
3442 {
3443 .eraseblocks = { {4 * 1024, 128} },
3444 .block_erase = spi_block_erase_d7,
3445 }, {
3446 .eraseblocks = { {64 * 1024, 8} },
3447 .block_erase = spi_block_erase_d8,
3448 }, {
3449 .eraseblocks = { {512 * 1024, 1} },
3450 .block_erase = spi_block_erase_c7,
3451 }
3452 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003453 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003454 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003455 },
3456
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003457 {
3458 .vendor = "PMC",
3459 .name = "Pm25LV080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003460 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003461 .manufacture_id = PMC_ID,
3462 .model_id = PMC_25LV080B,
3463 .total_size = 1024,
3464 .page_size = 256,
3465 .tested = TEST_UNTESTED,
3466 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003467 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003468 .block_erasers =
3469 {
3470 {
3471 .eraseblocks = { {4 * 1024, 256} },
3472 .block_erase = spi_block_erase_d7,
3473 }, {
3474 .eraseblocks = { {4 * 1024, 256} },
3475 .block_erase = spi_block_erase_20,
3476 }, {
3477 .eraseblocks = { {64 * 1024, 16} },
3478 .block_erase = spi_block_erase_d8,
3479 }, {
3480 .eraseblocks = { {1024 * 1024, 1} },
3481 .block_erase = spi_block_erase_60,
3482 }, {
3483 .eraseblocks = { {1024 * 1024, 1} },
3484 .block_erase = spi_block_erase_c7,
3485 }
3486 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003487 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003488 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003489 },
3490
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003491 {
3492 .vendor = "PMC",
3493 .name = "Pm25LV512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003494 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003495 .manufacture_id = PMC_ID,
3496 .model_id = PMC_25LV512,
3497 .total_size = 64,
3498 .page_size = 256,
3499 .tested = TEST_UNTESTED,
3500 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003501 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003502 .block_erasers =
3503 {
3504 {
3505 .eraseblocks = { {4 * 1024, 16} },
3506 .block_erase = spi_block_erase_d7,
3507 }, {
3508 .eraseblocks = { {32 * 1024, 2} },
3509 .block_erase = spi_block_erase_d8,
3510 }, {
3511 .eraseblocks = { {64 * 1024, 1} },
3512 .block_erase = spi_block_erase_c7,
3513 }
3514 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003515 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003516 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003517 },
3518
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003519 {
3520 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00003521 .name = "Pm29F002T",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003522 .bustype = CHIP_BUSTYPE_PARALLEL,
3523 .manufacture_id = PMC_ID_NOPREFIX,
3524 .model_id = PMC_29F002T,
3525 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00003526 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003527 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3528 .tested = TEST_UNTESTED,
3529 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003530 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00003531 .block_erasers =
3532 {
3533 {
3534 .eraseblocks = {
3535 {128 * 1024, 1},
3536 {96 * 1024, 1},
3537 {8 * 1024, 2},
3538 {16 * 1024, 1},
3539 },
Sean Nelson35727f72010-01-28 23:55:12 +00003540 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003541 }, {
3542 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003543 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003544 },
3545 },
Sean Nelson35727f72010-01-28 23:55:12 +00003546 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003547 .read = read_memmapped,
3548 },
3549
3550 {
3551 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00003552 .name = "Pm29F002B",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003553 .bustype = CHIP_BUSTYPE_PARALLEL,
3554 .manufacture_id = PMC_ID_NOPREFIX,
3555 .model_id = PMC_29F002B,
3556 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00003557 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003558 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003559 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00003560 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003561 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00003562 .block_erasers =
3563 {
3564 {
3565 .eraseblocks = {
3566 {16 * 1024, 1},
3567 {8 * 1024, 2},
3568 {96 * 1024, 1},
3569 {128 * 1024, 1},
3570 },
Sean Nelson35727f72010-01-28 23:55:12 +00003571 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003572 }, {
3573 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003574 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003575 },
3576 },
Sean Nelson35727f72010-01-28 23:55:12 +00003577 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003578 .read = read_memmapped,
3579 },
3580
3581 {
3582 .vendor = "PMC",
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003583 .name = "Pm39LV010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003584 .bustype = CHIP_BUSTYPE_PARALLEL,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003585 .manufacture_id = PMC_ID_NOPREFIX,
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00003586 .model_id = PMC_39F010, /* Pm39LV010 and Pm39F010 have identical IDs but different voltage */
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003587 .total_size = 128,
3588 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003589 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00003590 .tested = TEST_OK_PREW,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003591 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003592 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson5643c072010-01-19 03:23:07 +00003593 .block_erasers =
3594 {
3595 {
3596 .eraseblocks = { {4 * 1024, 32} },
3597 .block_erase = erase_sector_jedec,
3598 }, {
3599 .eraseblocks = { {64 * 1024, 2} },
3600 .block_erase = erase_block_jedec,
3601 }, {
3602 .eraseblocks = { {128 * 1024, 1} },
3603 .block_erase = erase_chip_block_jedec,
3604 }
3605 },
Sean Nelson35727f72010-01-28 23:55:12 +00003606 .write = write_jedec_1,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003607 .read = read_memmapped,
3608 },
3609
3610 {
3611 .vendor = "PMC",
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00003612 .name = "Pm39LV020",
3613 .bustype = CHIP_BUSTYPE_PARALLEL,
3614 .manufacture_id = PMC_ID_NOPREFIX,
3615 .model_id = PMC_39LV020,
3616 .total_size = 256,
3617 .page_size = 4096,
3618 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3619 .tested = TEST_UNTESTED,
3620 .probe = probe_jedec,
3621 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3622 .block_erasers =
3623 {
3624 {
3625 .eraseblocks = { {4 * 1024, 64} },
3626 .block_erase = erase_sector_jedec,
3627 }, {
3628 .eraseblocks = { {64 * 1024, 4} },
3629 .block_erase = erase_block_jedec,
3630 }, {
3631 .eraseblocks = { {256 * 1024, 1} },
3632 .block_erase = erase_chip_block_jedec,
3633 }
3634 },
3635 .write = write_jedec_1,
3636 .read = read_memmapped,
3637 },
3638
3639 {
3640 .vendor = "PMC",
3641 .name = "Pm39LV040",
3642 .bustype = CHIP_BUSTYPE_PARALLEL,
3643 .manufacture_id = PMC_ID_NOPREFIX,
3644 .model_id = PMC_39LV040,
3645 .total_size = 512,
3646 .page_size = 4096,
3647 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3648 .tested = TEST_UNTESTED,
3649 .probe = probe_jedec,
3650 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3651 .block_erasers =
3652 {
3653 {
3654 .eraseblocks = { {4 * 1024, 128} },
3655 .block_erase = erase_sector_jedec,
3656 }, {
3657 .eraseblocks = { {64 * 1024, 8} },
3658 .block_erase = erase_block_jedec,
3659 }, {
3660 .eraseblocks = { {512 * 1024, 1} },
3661 .block_erase = erase_chip_block_jedec,
3662 }
3663 },
3664 .write = write_jedec_1,
3665 .read = read_memmapped,
3666 },
3667
3668 {
3669 .vendor = "PMC",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003670 .name = "Pm49FL002",
Sean Nelson35727f72010-01-28 23:55:12 +00003671 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003672 .manufacture_id = PMC_ID_NOPREFIX,
3673 .model_id = PMC_49FL002,
3674 .total_size = 256,
3675 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003676 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Russ Dill8c7c4682010-03-09 16:53:06 +00003677 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003678 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003679 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00003680 .block_erasers =
3681 {
3682 {
3683 .eraseblocks = { {4 * 1024, 64} },
3684 .block_erase = erase_sector_jedec,
3685 }, {
3686 .eraseblocks = { {16 * 1024, 16} },
3687 .block_erase = erase_block_jedec,
3688 }, {
3689 .eraseblocks = { {256 * 1024, 1} },
3690 .block_erase = erase_chip_block_jedec,
3691 }
3692 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00003693 .unlock = unlock_49fl00x,
Sean Nelson36172342010-02-27 18:01:15 +00003694 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003695 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003696 },
3697
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003698 {
3699 .vendor = "PMC",
3700 .name = "Pm49FL004",
Sean Nelson35727f72010-01-28 23:55:12 +00003701 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003702 .manufacture_id = PMC_ID_NOPREFIX,
3703 .model_id = PMC_49FL004,
3704 .total_size = 512,
3705 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003706 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00003707 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003708 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003709 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00003710 .block_erasers =
3711 {
3712 {
3713 .eraseblocks = { {4 * 1024, 128} },
3714 .block_erase = erase_sector_jedec,
3715 }, {
3716 .eraseblocks = { {64 * 1024, 8} },
3717 .block_erase = erase_block_jedec,
3718 }, {
3719 .eraseblocks = { {512 * 1024, 1} },
3720 .block_erase = erase_chip_block_jedec,
3721 }
3722 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00003723 .unlock = unlock_49fl00x,
Sean Nelson36172342010-02-27 18:01:15 +00003724 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003725 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003726 },
3727
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003728 {
Sean Nelsond70b09c2009-11-24 02:11:08 +00003729 .vendor = "Sanyo",
3730 .name = "LF25FW203A",
3731 .bustype = CHIP_BUSTYPE_SPI,
3732 .manufacture_id = SANYO_ID,
3733 .model_id = SANYO_LE25FW203A,
3734 .total_size = 2048,
3735 .page_size = 256,
3736 .tested = TEST_UNTESTED,
3737 .probe = probe_spi_rdid,
3738 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003739 .block_erasers =
3740 {
3741 {
3742 .eraseblocks = { {64 * 1024, 32} },
3743 .block_erase = spi_block_erase_d8,
3744 }, {
3745 .eraseblocks = { {2 * 1024 * 1024, 1} },
3746 .block_erase = spi_block_erase_c7,
3747 }
3748 },
Sean Nelsond70b09c2009-11-24 02:11:08 +00003749 .write = spi_chip_write_256,
3750 .read = spi_chip_read,
3751 },
3752
3753 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003754 .vendor = "Sharp",
3755 .name = "LHF00L04",
Urja Rannikko038a3122009-06-28 19:19:25 +00003756 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003757 .manufacture_id = SHARP_ID,
3758 .model_id = SHARP_LHF00L04,
3759 .total_size = 1024,
3760 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00003761 .feature_bits = FEATURE_EITHER_RESET | FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003762 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00003763 .probe = probe_82802ab,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003764 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003765 .block_erasers =
3766 {
3767 {
3768 .eraseblocks = {
3769 {64 * 1024, 15},
3770 {8 * 1024, 8}
3771 },
Sean Nelson28accc22010-03-19 18:47:06 +00003772 .block_erase = erase_block_82802ab,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003773 }, {
3774 .eraseblocks = {
3775 {1024 * 1024, 1}
3776 },
Sean Nelson51c83fb2010-01-20 20:55:53 +00003777 .block_erase = NULL, /* 30 D0, only in A/A mux mode */
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003778 },
3779 },
Sean Nelson28accc22010-03-19 18:47:06 +00003780 .unlock = unlock_82802ab,
3781 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003782 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003783 },
3784
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003785 {
3786 .vendor = "Spansion",
Michael Karcher23ff4602010-01-12 23:29:30 +00003787 .name = "S25FL008A",
3788 .bustype = CHIP_BUSTYPE_SPI,
3789 .manufacture_id = SPANSION_ID,
3790 .model_id = SPANSION_S25FL008A,
3791 .total_size = 1024,
3792 .page_size = 256,
3793 .tested = TEST_OK_PREW,
3794 .probe = probe_spi_rdid,
3795 .probe_timing = TIMING_ZERO,
Michael Karcher23ff4602010-01-12 23:29:30 +00003796 .block_erasers =
3797 {
3798 {
3799 .eraseblocks = { {64 * 1024, 16} },
3800 .block_erase = spi_block_erase_d8,
3801 }, {
3802 .eraseblocks = { {1024 * 1024, 1} },
3803 .block_erase = spi_block_erase_c7,
3804 }
3805 },
3806 .write = spi_chip_write_256,
3807 .read = spi_chip_read,
3808 },
3809
3810 {
3811 .vendor = "Spansion",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003812 .name = "S25FL016A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003813 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003814 .manufacture_id = SPANSION_ID,
3815 .model_id = SPANSION_S25FL016A,
3816 .total_size = 2048,
3817 .page_size = 256,
Sean Nelson5643c072010-01-19 03:23:07 +00003818 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003819 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003820 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003821 .block_erasers =
3822 {
3823 {
3824 .eraseblocks = { {64 * 1024, 32} },
3825 .block_erase = spi_block_erase_d8,
3826 }, {
3827 .eraseblocks = { {2 * 1024 * 1024, 1} },
3828 .block_erase = spi_block_erase_c7,
3829 }
3830 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003831 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003832 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003833 },
3834
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003835 {
3836 .vendor = "SST",
3837 .name = "SST25VF016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003838 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003839 .manufacture_id = SST_ID,
3840 .model_id = SST_25VF016B,
3841 .total_size = 2048,
3842 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003843 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003844 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003845 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003846 .block_erasers =
3847 {
3848 {
3849 .eraseblocks = { {4 * 1024, 512} },
3850 .block_erase = spi_block_erase_20,
3851 }, {
3852 .eraseblocks = { {32 * 1024, 64} },
3853 .block_erase = spi_block_erase_52,
3854 }, {
3855 .eraseblocks = { {64 * 1024, 32} },
3856 .block_erase = spi_block_erase_d8,
3857 }, {
3858 .eraseblocks = { {2 * 1024 * 1024, 1} },
3859 .block_erase = spi_block_erase_60,
3860 }, {
3861 .eraseblocks = { {2 * 1024 * 1024, 1} },
3862 .block_erase = spi_block_erase_c7,
3863 },
3864 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003865 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003866 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003867 },
3868
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003869 {
3870 .vendor = "SST",
3871 .name = "SST25VF032B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003872 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003873 .manufacture_id = SST_ID,
3874 .model_id = SST_25VF032B,
3875 .total_size = 4096,
3876 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003877 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003878 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003879 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003880 .block_erasers =
3881 {
3882 {
3883 .eraseblocks = { {4 * 1024, 1024} },
3884 .block_erase = spi_block_erase_20,
3885 }, {
3886 .eraseblocks = { {32 * 1024, 128} },
3887 .block_erase = spi_block_erase_52,
3888 }, {
3889 .eraseblocks = { {64 * 1024, 64} },
3890 .block_erase = spi_block_erase_d8,
3891 }, {
3892 .eraseblocks = { {4 * 1024 * 1024, 1} },
3893 .block_erase = spi_block_erase_60,
3894 }, {
3895 .eraseblocks = { {4 * 1024 * 1024, 1} },
3896 .block_erase = spi_block_erase_c7,
3897 },
3898 },
3899 .write = spi_chip_write_1,
3900 .read = spi_chip_read,
3901 },
3902
3903 {
3904 .vendor = "SST",
3905 .name = "SST25VF040.REMS",
3906 .bustype = CHIP_BUSTYPE_SPI,
3907 .manufacture_id = SST_ID,
3908 .model_id = SST_25VF040_REMS,
3909 .total_size = 512,
3910 .page_size = 256,
3911 .tested = TEST_OK_PR,
3912 .probe = probe_spi_rems,
3913 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003914 .block_erasers =
3915 {
3916 {
3917 .eraseblocks = { {4 * 1024, 128} },
3918 .block_erase = spi_block_erase_20,
3919 }, {
3920 .eraseblocks = { {32 * 1024, 16} },
3921 .block_erase = spi_block_erase_52,
3922 }, {
3923 .eraseblocks = { {512 * 1024, 1} },
3924 .block_erase = spi_block_erase_60,
3925 },
3926 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003927 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003928 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003929 },
3930
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003931 {
3932 .vendor = "SST",
3933 .name = "SST25VF040B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003934 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003935 .manufacture_id = SST_ID,
3936 .model_id = SST_25VF040B,
3937 .total_size = 512,
3938 .page_size = 256,
3939 .tested = TEST_UNTESTED,
3940 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003941 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003942 .block_erasers =
3943 {
3944 {
3945 .eraseblocks = { {4 * 1024, 128} },
3946 .block_erase = spi_block_erase_20,
3947 }, {
3948 .eraseblocks = { {32 * 1024, 16} },
3949 .block_erase = spi_block_erase_52,
3950 }, {
3951 .eraseblocks = { {64 * 1024, 8} },
3952 .block_erase = spi_block_erase_d8,
3953 }, {
3954 .eraseblocks = { {512 * 1024, 1} },
3955 .block_erase = spi_block_erase_60,
3956 }, {
3957 .eraseblocks = { {512 * 1024, 1} },
3958 .block_erase = spi_block_erase_c7,
3959 },
3960 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003961 .write = spi_chip_write_1,
Zheng Bao0677dff2009-02-25 08:07:33 +00003962 .read = spi_chip_read,
3963 },
3964
3965 {
3966 .vendor = "SST",
Stefan Reinauer5cacf8c2010-06-14 12:58:06 +00003967 .name = "SST25LF040A.RES",
3968 .bustype = CHIP_BUSTYPE_SPI,
3969 .manufacture_id = SST_ID,
3970 .model_id = SST_25VF040_REMS,
3971 .total_size = 512,
3972 .page_size = 256,
3973 .tested = TEST_OK_PROBE,
3974 .probe = probe_spi_res2,
3975 .probe_timing = TIMING_ZERO,
3976 .block_erasers =
3977 {
3978 {
3979 .eraseblocks = { {4 * 1024, 128} },
3980 .block_erase = spi_block_erase_20,
3981 }, {
3982 .eraseblocks = { {32 * 1024, 16} },
3983 .block_erase = spi_block_erase_52,
3984 }, {
3985 .eraseblocks = { {512 * 1024, 1} },
3986 .block_erase = spi_block_erase_60,
3987 },
3988 },
3989 .write = spi_chip_write_1,
3990 .read = spi_chip_read,
3991 },
3992
3993 {
3994 .vendor = "SST",
Peter Stugefd9217d2009-01-26 03:37:40 +00003995 .name = "SST25VF040B.REMS",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003996 .bustype = CHIP_BUSTYPE_SPI,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003997 .manufacture_id = SST_ID,
3998 .model_id = SST_25VF040B_REMS,
Peter Stugefd9217d2009-01-26 03:37:40 +00003999 .total_size = 512,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004000 .page_size = 256,
Peter Stugefd9217d2009-01-26 03:37:40 +00004001 .tested = TEST_OK_PR,
4002 .probe = probe_spi_rems,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004003 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004004 .block_erasers =
4005 {
4006 {
4007 .eraseblocks = { {4 * 1024, 128} },
4008 .block_erase = spi_block_erase_20,
4009 }, {
4010 .eraseblocks = { {32 * 1024, 16} },
4011 .block_erase = spi_block_erase_52,
4012 }, {
4013 .eraseblocks = { {64 * 1024, 8} },
4014 .block_erase = spi_block_erase_d8,
4015 }, {
4016 .eraseblocks = { {512 * 1024, 1} },
4017 .block_erase = spi_block_erase_60,
4018 }, {
4019 .eraseblocks = { {512 * 1024, 1} },
4020 .block_erase = spi_block_erase_c7,
4021 },
4022 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00004023 .write = spi_chip_write_1,
Peter Stugefd9217d2009-01-26 03:37:40 +00004024 .read = spi_chip_read,
4025 },
4026
4027 {
4028 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004029 .name = "SST25VF080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004030 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004031 .manufacture_id = SST_ID,
4032 .model_id = SST_25VF080B,
4033 .total_size = 1024,
4034 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004035 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004036 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004037 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004038 .block_erasers =
4039 {
4040 {
4041 .eraseblocks = { {4 * 1024, 256} },
4042 .block_erase = spi_block_erase_20,
4043 }, {
4044 .eraseblocks = { {32 * 1024, 32} },
4045 .block_erase = spi_block_erase_52,
4046 }, {
4047 .eraseblocks = { {64 * 1024, 16} },
4048 .block_erase = spi_block_erase_d8,
4049 }, {
4050 .eraseblocks = { {1024 * 1024, 1} },
4051 .block_erase = spi_block_erase_60,
4052 }, {
4053 .eraseblocks = { {1024 * 1024, 1} },
4054 .block_erase = spi_block_erase_c7,
4055 },
4056 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004057 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004058 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004059 },
4060
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004061 {
4062 .vendor = "SST",
4063 .name = "SST28SF040A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004064 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004065 .manufacture_id = SST_ID,
4066 .model_id = SST_28SF040,
4067 .total_size = 512,
4068 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00004069 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004070 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004071 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004072 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst28sf040.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004073 .block_erasers =
4074 {
4075 {
4076 .eraseblocks = { {128, 4096} },
4077 .block_erase = erase_sector_28sf040,
4078 }, {
4079 .eraseblocks = { {512 * 1024, 1} },
4080 .block_erase = erase_chip_28sf040,
4081 }
4082 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004083 .write = write_28sf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004084 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004085 },
4086
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004087 {
4088 .vendor = "SST",
4089 .name = "SST29EE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00004090 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004091 .manufacture_id = SST_ID,
4092 .model_id = SST_29EE010,
4093 .total_size = 128,
4094 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00004095 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00004096 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004097 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004098 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004099 .block_erasers =
4100 {
4101 {
4102 .eraseblocks = { {128 * 1024, 1} },
4103 .block_erase = erase_chip_block_jedec,
4104 }
4105 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004106 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004107 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004108 },
4109
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004110 {
4111 .vendor = "SST",
4112 .name = "SST29LE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00004113 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004114 .manufacture_id = SST_ID,
4115 .model_id = SST_29LE010,
4116 .total_size = 128,
4117 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00004118 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004119 .tested = TEST_UNTESTED,
4120 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004121 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004122 .block_erasers =
4123 {
4124 {
4125 .eraseblocks = { {128 * 1024, 1} },
4126 .block_erase = erase_chip_block_jedec,
4127 }
4128 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004129 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004130 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004131 },
4132
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004133 {
4134 .vendor = "SST",
4135 .name = "SST29EE020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004136 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004137 .manufacture_id = SST_ID,
4138 .model_id = SST_29EE020A,
4139 .total_size = 256,
4140 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00004141 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00004142 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004143 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004144 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004145 .block_erasers =
4146 {
4147 {
4148 .eraseblocks = { {256 * 1024, 1} },
4149 .block_erase = erase_chip_block_jedec,
4150 }
4151 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004152 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004153 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004154 },
4155
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004156 {
4157 .vendor = "SST",
4158 .name = "SST29LE020",
Urja Rannikko038a3122009-06-28 19:19:25 +00004159 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004160 .manufacture_id = SST_ID,
4161 .model_id = SST_29LE020,
4162 .total_size = 256,
4163 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00004164 .feature_bits = FEATURE_LONG_RESET,
Michael Karcher98eff462010-03-24 22:55:56 +00004165 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004166 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004167 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004168 .block_erasers =
4169 {
4170 {
4171 .eraseblocks = { {256 * 1024, 1} },
4172 .block_erase = erase_chip_block_jedec,
4173 }
4174 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004175 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004176 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004177 },
4178
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004179 {
4180 .vendor = "SST",
Uwe Hermann48da3f92010-01-23 15:15:19 +00004181 .name = "SST39SF512",
4182 .bustype = CHIP_BUSTYPE_PARALLEL,
4183 .manufacture_id = SST_ID,
4184 .model_id = SST_39SF512,
4185 .total_size = 64,
4186 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004187 .feature_bits = FEATURE_EITHER_RESET,
4188 .tested = TEST_UNTESTED,
Uwe Hermann48da3f92010-01-23 15:15:19 +00004189 .probe = probe_jedec,
4190 .probe_timing = 1, /* 150 ns */
Uwe Hermann48da3f92010-01-23 15:15:19 +00004191 .block_erasers =
4192 {
4193 {
4194 .eraseblocks = { {4 * 1024, 16} },
4195 .block_erase = erase_sector_jedec,
4196 }, {
4197 .eraseblocks = { {64 * 1024, 1} },
4198 .block_erase = erase_chip_block_jedec,
4199 }
4200 },
Sean Nelson35727f72010-01-28 23:55:12 +00004201 .write = write_jedec_1,
Uwe Hermann48da3f92010-01-23 15:15:19 +00004202 .read = read_memmapped,
4203 },
4204
4205 {
4206 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004207 .name = "SST39SF010A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004208 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004209 .manufacture_id = SST_ID,
4210 .model_id = SST_39SF010,
4211 .total_size = 128,
4212 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004213 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00004214 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004215 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004216 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004217 .block_erasers =
4218 {
4219 {
4220 .eraseblocks = { {4 * 1024, 32} },
4221 .block_erase = erase_sector_jedec,
4222 }, {
4223 .eraseblocks = { {128 * 1024, 1} },
4224 .block_erase = erase_chip_block_jedec,
4225 }
4226 },
Sean Nelson35727f72010-01-28 23:55:12 +00004227 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004228 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004229 },
4230
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004231 {
4232 .vendor = "SST",
4233 .name = "SST39SF020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004234 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004235 .manufacture_id = SST_ID,
4236 .model_id = SST_39SF020,
4237 .total_size = 256,
4238 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004239 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00004240 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004241 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004242 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004243 .block_erasers =
4244 {
4245 {
4246 .eraseblocks = { {4 * 1024, 64} },
4247 .block_erase = erase_sector_jedec,
4248 }, {
4249 .eraseblocks = { {256 * 1024, 1} },
4250 .block_erase = erase_chip_block_jedec,
4251 }
4252 },
Sean Nelson35727f72010-01-28 23:55:12 +00004253 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004254 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004255 },
4256
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004257 {
4258 .vendor = "SST",
4259 .name = "SST39SF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00004260 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004261 .manufacture_id = SST_ID,
4262 .model_id = SST_39SF040,
4263 .total_size = 512,
4264 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004265 .feature_bits = FEATURE_EITHER_RESET,
4266 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004267 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004268 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004269 .block_erasers =
4270 {
4271 {
4272 .eraseblocks = { {4 * 1024, 128} },
4273 .block_erase = erase_sector_jedec,
4274 }, {
4275 .eraseblocks = { {512 * 1024, 1} },
4276 .block_erase = erase_chip_block_jedec,
4277 }
4278 },
Sean Nelson35727f72010-01-28 23:55:12 +00004279 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004280 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004281 },
4282
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004283 {
4284 .vendor = "SST",
4285 .name = "SST39VF512",
Urja Rannikko038a3122009-06-28 19:19:25 +00004286 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004287 .manufacture_id = SST_ID,
4288 .model_id = SST_39VF512,
4289 .total_size = 64,
4290 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004291 .feature_bits = FEATURE_EITHER_RESET,
4292 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004293 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004294 .probe_timing = 1, /* 150 ns*/
Sean Nelson51c83fb2010-01-20 20:55:53 +00004295 .block_erasers =
4296 {
4297 {
4298 .eraseblocks = { {4 * 1024, 16} },
4299 .block_erase = erase_sector_jedec,
4300 }, {
4301 .eraseblocks = { {64 * 1024, 1} },
4302 .block_erase = erase_chip_block_jedec,
4303 }
4304 },
Sean Nelson35727f72010-01-28 23:55:12 +00004305 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004306 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004307 },
4308
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004309 {
4310 .vendor = "SST",
4311 .name = "SST39VF010",
Urja Rannikko038a3122009-06-28 19:19:25 +00004312 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004313 .manufacture_id = SST_ID,
4314 .model_id = SST_39VF010,
4315 .total_size = 128,
4316 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004317 .feature_bits = FEATURE_EITHER_RESET,
Guenter Knauf2bd007a2010-06-24 11:51:12 +00004318 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004319 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004320 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004321 .block_erasers =
4322 {
4323 {
4324 .eraseblocks = { {4 * 1024, 32} },
4325 .block_erase = erase_sector_jedec,
4326 }, {
4327 .eraseblocks = { {128 * 1024, 1} },
4328 .block_erase = erase_chip_block_jedec,
4329 }
4330 },
Sean Nelson35727f72010-01-28 23:55:12 +00004331 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004332 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004333 },
4334
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004335 {
4336 .vendor = "SST",
4337 .name = "SST39VF020",
Urja Rannikko038a3122009-06-28 19:19:25 +00004338 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004339 .manufacture_id = SST_ID,
4340 .model_id = SST_39VF020,
4341 .total_size = 256,
4342 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004343 .feature_bits = FEATURE_EITHER_RESET,
4344 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004345 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004346 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004347 .block_erasers =
4348 {
4349 {
4350 .eraseblocks = { {4 * 1024, 64} },
4351 .block_erase = erase_sector_jedec,
4352 }, {
4353 .eraseblocks = { {256 * 1024, 1} },
4354 .block_erase = erase_chip_block_jedec,
4355 }
4356 },
Sean Nelson35727f72010-01-28 23:55:12 +00004357 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004358 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004359 },
4360
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004361 {
4362 .vendor = "SST",
4363 .name = "SST39VF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00004364 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004365 .manufacture_id = SST_ID,
4366 .model_id = SST_39VF040,
4367 .total_size = 512,
4368 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004369 .feature_bits = FEATURE_EITHER_RESET,
4370 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004371 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004372 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004373 .block_erasers =
4374 {
4375 {
4376 .eraseblocks = { {4 * 1024, 128} },
4377 .block_erase = erase_sector_jedec,
4378 }, {
4379 .eraseblocks = { {512 * 1024, 1} },
4380 .block_erase = erase_chip_block_jedec,
4381 }
4382 },
Sean Nelson35727f72010-01-28 23:55:12 +00004383 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004384 .read = read_memmapped,
Carl-Daniel Hailfinger90eff152008-12-08 23:51:45 +00004385 },
FENG yu ningff692fb2008-12-08 18:15:10 +00004386
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004387 {
4388 .vendor = "SST",
Peter Stuge8440cc02009-01-25 23:55:12 +00004389 .name = "SST39VF080",
Urja Rannikko038a3122009-06-28 19:19:25 +00004390 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004391 .manufacture_id = SST_ID,
4392 .model_id = SST_39VF080,
Peter Stuge8440cc02009-01-25 23:55:12 +00004393 .total_size = 1024,
4394 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004395 .feature_bits = FEATURE_EITHER_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +00004396 .tested = TEST_UNTESTED,
4397 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004398 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004399 .block_erasers =
4400 {
4401 {
4402 .eraseblocks = { {4 * 1024, 256} },
4403 .block_erase = erase_sector_jedec,
4404 }, {
4405 .eraseblocks = { {64 * 1024, 16} },
4406 .block_erase = erase_block_jedec,
4407 }, {
4408 .eraseblocks = { {1024 * 1024, 1} },
4409 .block_erase = erase_chip_block_jedec,
4410 }
4411 },
Sean Nelson35727f72010-01-28 23:55:12 +00004412 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004413 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +00004414 },
4415
4416 {
4417 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004418 .name = "SST49LF002A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004419 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004420 .manufacture_id = SST_ID,
4421 .model_id = SST_49LF002A,
4422 .total_size = 256,
4423 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004424 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004425 .tested = TEST_OK_PRW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004426 .probe = probe_jedec,
4427 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004428 .block_erasers =
4429 {
4430 {
4431 .eraseblocks = { {4 * 1024, 64} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004432 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004433 }, {
4434 .eraseblocks = { {16 * 1024, 16} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004435 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004436 }, {
4437 .eraseblocks = { {256 * 1024, 1} },
4438 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4439 }
4440 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004441 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004442 .unlock = unlock_sst_fwhub,
4443 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004444 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004445 },
4446
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004447 {
4448 .vendor = "SST",
4449 .name = "SST49LF003A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004450 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004451 .manufacture_id = SST_ID,
4452 .model_id = SST_49LF003A,
4453 .total_size = 384,
4454 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004455 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Peter Lemenkov45835c42009-09-25 01:09:18 +00004456 .tested = TEST_OK_PR,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004457 .probe = probe_jedec,
4458 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004459 .block_erasers =
4460 {
4461 {
4462 .eraseblocks = { {4 * 1024, 96} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004463 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004464 }, {
4465 .eraseblocks = { {64 * 1024, 6} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004466 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004467 }, {
4468 .eraseblocks = { {384 * 1024, 1} },
4469 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4470 }
4471 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004472 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004473 .unlock = unlock_sst_fwhub,
4474 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004475 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004476 },
4477
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004478 {
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004479 /* Contrary to the data sheet, TBL# on the SST49LF004B affects the top 128kB (instead of 64kB)
4480 * and is only honored for 64k block erase, but not 4k sector erase.
4481 */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004482 .vendor = "SST",
4483 .name = "SST49LF004A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004484 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004485 .manufacture_id = SST_ID,
4486 .model_id = SST_49LF004A,
4487 .total_size = 512,
4488 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004489 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004490 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004491 .probe = probe_jedec,
4492 .probe_timing = 1, /* 150 ns */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004493 .block_erasers =
4494 {
4495 {
4496 .eraseblocks = { {4 * 1024, 128} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004497 .block_erase = erase_sector_jedec,
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004498 }, {
4499 .eraseblocks = { {64 * 1024, 8} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004500 .block_erase = erase_block_jedec,
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004501 }, {
4502 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson51c83fb2010-01-20 20:55:53 +00004503 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004504 },
4505 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004506 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004507 .unlock = unlock_sst_fwhub,
4508 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004509 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004510 },
4511
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004512 {
4513 .vendor = "SST",
4514 .name = "SST49LF004C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004515 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004516 .manufacture_id = SST_ID,
4517 .model_id = SST_49LF004C,
4518 .total_size = 512,
4519 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004520 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004521 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004522 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004523 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004524 .block_erasers =
4525 {
4526 {
4527 .eraseblocks = { {4 * 1024, 128} },
4528 .block_erase = erase_sector_49lfxxxc,
4529 }, {
4530 .eraseblocks = {
4531 {64 * 1024, 7},
4532 {32 * 1024, 1},
4533 {8 * 1024, 2},
4534 {16 * 1024, 1},
4535 },
Sean Nelson69e58112010-03-23 17:10:28 +00004536 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004537 }
4538 },
Sean Nelson69e58112010-03-23 17:10:28 +00004539 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004540 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004541 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004542 },
4543
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004544 {
4545 .vendor = "SST",
4546 .name = "SST49LF008A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004547 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004548 .manufacture_id = SST_ID,
4549 .model_id = SST_49LF008A,
4550 .total_size = 1024,
4551 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004552 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00004553 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004554 .probe = probe_jedec,
4555 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004556 .block_erasers =
4557 {
4558 {
4559 .eraseblocks = { {4 * 1024, 256} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004560 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004561 }, {
4562 .eraseblocks = { {64 * 1024, 16} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004563 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004564 }, {
4565 .eraseblocks = { {1024 * 1024, 1} },
4566 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4567 }
4568 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004569 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004570 .unlock = unlock_sst_fwhub,
4571 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004572 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004573 },
4574
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004575 {
4576 .vendor = "SST",
4577 .name = "SST49LF008C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004578 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004579 .manufacture_id = SST_ID,
4580 .model_id = SST_49LF008C,
4581 .total_size = 1024,
4582 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004583 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004584 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004585 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004586 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004587 .block_erasers =
4588 {
4589 {
4590 .eraseblocks = { {4 * 1024, 256} },
4591 .block_erase = erase_sector_49lfxxxc,
4592 }, {
4593 .eraseblocks = {
4594 {64 * 1024, 15},
4595 {32 * 1024, 1},
4596 {8 * 1024, 2},
4597 {16 * 1024, 1},
4598 },
Sean Nelson69e58112010-03-23 17:10:28 +00004599 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004600 }
4601 },
Sean Nelson69e58112010-03-23 17:10:28 +00004602 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004603 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004604 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004605 },
4606
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004607 {
4608 .vendor = "SST",
4609 .name = "SST49LF016C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004610 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004611 .manufacture_id = SST_ID,
4612 .model_id = SST_49LF016C,
4613 .total_size = 2048,
4614 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004615 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004616 .tested = TEST_OK_PRW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004617 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004618 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004619 .block_erasers =
4620 {
4621 {
4622 .eraseblocks = { {4 * 1024, 512} },
4623 .block_erase = erase_sector_49lfxxxc,
4624 }, {
4625 .eraseblocks = {
4626 {64 * 1024, 31},
4627 {32 * 1024, 1},
4628 {8 * 1024, 2},
4629 {16 * 1024, 1},
4630 },
Sean Nelson69e58112010-03-23 17:10:28 +00004631 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004632 }
4633 },
Sean Nelson69e58112010-03-23 17:10:28 +00004634 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004635 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004636 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004637 },
4638
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004639 {
4640 .vendor = "SST",
4641 .name = "SST49LF020",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004642 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004643 .manufacture_id = SST_ID,
4644 .model_id = SST_49LF020,
4645 .total_size = 256,
4646 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004647 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00004648 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004649 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004650 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004651 .block_erasers =
4652 {
4653 {
4654 .eraseblocks = { {4 * 1024, 64} },
4655 .block_erase = erase_sector_jedec,
4656 }, {
4657 .eraseblocks = { {16 * 1024, 16} },
4658 .block_erase = erase_block_jedec,
4659 }, {
4660 .eraseblocks = { {256 * 1024, 1} },
4661 .block_erase = NULL,
4662 }
4663 },
Sean Nelson35727f72010-01-28 23:55:12 +00004664 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004665 .read = read_memmapped,
Sven Schnellec208dfb2009-01-07 12:35:09 +00004666 },
4667
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004668 {
4669 .vendor = "SST",
4670 .name = "SST49LF020A",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004671 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004672 .manufacture_id = SST_ID,
4673 .model_id = SST_49LF020A,
4674 .total_size = 256,
Carl-Daniel Hailfingerda654322009-07-23 01:44:38 +00004675 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004676 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00004677 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004678 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004679 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004680 .block_erasers =
4681 {
4682 {
4683 .eraseblocks = { {4 * 1024, 64} },
4684 .block_erase = erase_sector_jedec,
4685 }, {
4686 .eraseblocks = { {16 * 1024, 16} },
4687 .block_erase = erase_block_jedec,
4688 }, {
4689 .eraseblocks = { {256 * 1024, 1} },
4690 .block_erase = NULL,
4691 }
4692 },
Sean Nelson35727f72010-01-28 23:55:12 +00004693 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004694 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004695 },
4696
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004697 {
4698 .vendor = "SST",
4699 .name = "SST49LF040",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004700 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004701 .manufacture_id = SST_ID,
4702 .model_id = SST_49LF040,
4703 .total_size = 512,
4704 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004705 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00004706 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004707 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004708 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004709 .block_erasers =
4710 {
4711 {
4712 .eraseblocks = { {4 * 1024, 128} },
4713 .block_erase = erase_sector_jedec,
4714 }, {
4715 .eraseblocks = { {64 * 1024, 8} },
4716 .block_erase = erase_block_jedec,
4717 }, {
4718 .eraseblocks = { {512 * 1024, 1} },
4719 .block_erase = NULL,
4720 }
4721 },
Sean Nelson35727f72010-01-28 23:55:12 +00004722 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004723 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004724 },
4725
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004726 {
4727 .vendor = "SST",
4728 .name = "SST49LF040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004729 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004730 .manufacture_id = SST_ID,
4731 .model_id = SST_49LF040B,
4732 .total_size = 512,
4733 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004734 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00004735 .tested = TEST_OK_PR,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004736 .probe = probe_jedec,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004737 .probe_timing = 1, /* 150ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004738 .block_erasers =
4739 {
4740 {
4741 .eraseblocks = { {4 * 1024, 128} },
4742 .block_erase = erase_sector_jedec,
4743 }, {
4744 .eraseblocks = { {64 * 1024, 8} },
4745 .block_erase = erase_block_jedec,
4746 }, {
4747 .eraseblocks = { {512 * 1024, 1} },
4748 .block_erase = NULL,
4749 }
4750 },
Sean Nelson35727f72010-01-28 23:55:12 +00004751 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004752 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004753 },
4754
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004755 {
4756 .vendor = "SST",
4757 .name = "SST49LF080A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004758 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004759 .manufacture_id = SST_ID,
Urja Rannikko038a3122009-06-28 19:19:25 +00004760 .model_id = SST_49LF080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004761 .total_size = 1024,
4762 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004763 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00004764 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004765 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004766 .probe_timing = TIMING_FIXME,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004767 .block_erasers =
4768 {
4769 {
4770 .eraseblocks = { {4 * 1024, 256} },
4771 .block_erase = erase_sector_jedec,
4772 }, {
4773 .eraseblocks = { {64 * 1024, 16} },
4774 .block_erase = erase_block_jedec,
4775 }, {
4776 .eraseblocks = { {1024 * 1024, 1} },
4777 .block_erase = NULL,
4778 }
4779 },
Sean Nelson35727f72010-01-28 23:55:12 +00004780 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004781 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004782 },
4783
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004784 {
4785 .vendor = "SST",
4786 .name = "SST49LF160C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004787 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004788 .manufacture_id = SST_ID,
4789 .model_id = SST_49LF160C,
4790 .total_size = 2048,
4791 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004792 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004793 .tested = TEST_OK_PRW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004794 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004795 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004796 .block_erasers =
4797 {
4798 {
4799 .eraseblocks = { {4 * 1024, 512} },
4800 .block_erase = erase_sector_49lfxxxc,
4801 }, {
4802 .eraseblocks = {
4803 {64 * 1024, 31},
4804 {32 * 1024, 1},
4805 {8 * 1024, 2},
4806 {16 * 1024, 1},
4807 },
Sean Nelson69e58112010-03-23 17:10:28 +00004808 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004809 }
4810 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00004811 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004812 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004813 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004814 },
4815
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004816 {
4817 .vendor = "ST",
4818 .name = "M25P05-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004819 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004820 .manufacture_id = ST_ID,
4821 .model_id = ST_M25P05A,
4822 .total_size = 64,
4823 .page_size = 256,
4824 .tested = TEST_UNTESTED,
4825 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004826 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004827 .block_erasers =
4828 {
4829 {
4830 .eraseblocks = { {32 * 1024, 2} },
4831 .block_erase = spi_block_erase_d8,
4832 }, {
4833 .eraseblocks = { {64 * 1024, 1} },
4834 .block_erase = spi_block_erase_c7,
4835 }
4836 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004837 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004838 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004839 },
4840
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004841 /* The ST M25P05 is a bit of a problem. It has the same ID as the
4842 * ST M25P05-A in RES mode, but supports only 128 byte writes instead
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00004843 * of 256 byte writes. We rely heavily on the fact that probe_spi_res1
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004844 * only is successful if RDID does not work.
4845 */
4846 {
4847 .vendor = "ST",
4848 .name = "M25P05.RES",
4849 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00004850 .manufacture_id = 0, /* Not used. */
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004851 .model_id = ST_M25P05_RES,
4852 .total_size = 64,
4853 .page_size = 256,
4854 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00004855 .probe = probe_spi_res1,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004856 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004857 .block_erasers =
4858 {
4859 {
4860 .eraseblocks = { {32 * 1024, 2} },
4861 .block_erase = spi_block_erase_d8,
4862 }, {
4863 .eraseblocks = { {64 * 1024, 1} },
4864 .block_erase = spi_block_erase_c7,
4865 }
4866 },
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004867 .write = spi_chip_write_1, /* 128 */
4868 .read = spi_chip_read,
4869 },
4870
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004871 {
4872 .vendor = "ST",
4873 .name = "M25P10-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004874 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004875 .manufacture_id = ST_ID,
4876 .model_id = ST_M25P10A,
4877 .total_size = 128,
4878 .page_size = 256,
4879 .tested = TEST_UNTESTED,
4880 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004881 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004882 .block_erasers =
4883 {
4884 {
4885 .eraseblocks = { {32 * 1024, 4} },
4886 .block_erase = spi_block_erase_d8,
4887 }, {
4888 .eraseblocks = { {128 * 1024, 1} },
4889 .block_erase = spi_block_erase_c7,
4890 }
4891 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004892 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004893 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004894 },
4895
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004896 /* The ST M25P10 has the same problem as the M25P05. */
4897 {
4898 .vendor = "ST",
4899 .name = "M25P10.RES",
4900 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00004901 .manufacture_id = 0, /* Not used. */
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004902 .model_id = ST_M25P10_RES,
4903 .total_size = 128,
4904 .page_size = 256,
4905 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00004906 .probe = probe_spi_res1,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004907 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004908 .block_erasers =
4909 {
4910 {
4911 .eraseblocks = { {32 * 1024, 4} },
4912 .block_erase = spi_block_erase_d8,
4913 }, {
4914 .eraseblocks = { {128 * 1024, 1} },
4915 .block_erase = spi_block_erase_c7,
4916 }
4917 },
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004918 .write = spi_chip_write_1, /* 128 */
4919 .read = spi_chip_read,
4920 },
4921
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004922 {
4923 .vendor = "ST",
4924 .name = "M25P20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004925 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004926 .manufacture_id = ST_ID,
4927 .model_id = ST_M25P20,
4928 .total_size = 256,
4929 .page_size = 256,
4930 .tested = TEST_UNTESTED,
4931 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004932 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004933 .block_erasers =
4934 {
4935 {
4936 .eraseblocks = { {64 * 1024, 4} },
4937 .block_erase = spi_block_erase_d8,
4938 }, {
4939 .eraseblocks = { {256 * 1024, 1} },
4940 .block_erase = spi_block_erase_c7,
4941 }
4942 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004943 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004944 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004945 },
4946
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004947 {
4948 .vendor = "ST",
4949 .name = "M25P40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004950 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004951 .manufacture_id = ST_ID,
4952 .model_id = ST_M25P40,
4953 .total_size = 512,
4954 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004955 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004956 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004957 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004958 .block_erasers =
4959 {
4960 {
4961 .eraseblocks = { {64 * 1024, 8} },
4962 .block_erase = spi_block_erase_d8,
4963 }, {
4964 .eraseblocks = { {512 * 1024, 1} },
4965 .block_erase = spi_block_erase_c7,
4966 }
4967 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004968 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004969 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004970 },
4971
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004972 {
4973 .vendor = "ST",
4974 .name = "M25P40-old",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004975 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00004976 .manufacture_id = 0, /* Not used. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004977 .model_id = ST_M25P40_RES,
4978 .total_size = 512,
4979 .page_size = 256,
4980 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00004981 .probe = probe_spi_res1,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004982 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004983 .block_erasers =
4984 {
4985 {
4986 .eraseblocks = { {64 * 1024, 8} },
4987 .block_erase = spi_block_erase_d8,
4988 }, {
4989 .eraseblocks = { {512 * 1024, 1} },
4990 .block_erase = spi_block_erase_c7,
4991 }
4992 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004993 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004994 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004995 },
4996
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004997 {
4998 .vendor = "ST",
4999 .name = "M25P80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005000 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005001 .manufacture_id = ST_ID,
5002 .model_id = ST_M25P80,
5003 .total_size = 1024,
5004 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00005005 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005006 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005007 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005008 .block_erasers =
5009 {
5010 {
5011 .eraseblocks = { {64 * 1024, 16} },
5012 .block_erase = spi_block_erase_d8,
5013 }, {
5014 .eraseblocks = { {1024 * 1024, 1} },
5015 .block_erase = spi_block_erase_c7,
5016 }
5017 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005018 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005019 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005020 },
5021
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005022 {
5023 .vendor = "ST",
5024 .name = "M25P16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005025 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005026 .manufacture_id = ST_ID,
5027 .model_id = ST_M25P16,
5028 .total_size = 2048,
5029 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00005030 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005031 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005032 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005033 .block_erasers =
5034 {
5035 {
5036 .eraseblocks = { {64 * 1024, 32} },
5037 .block_erase = spi_block_erase_d8,
5038 }, {
5039 .eraseblocks = { {2 * 1024 * 1024, 1} },
5040 .block_erase = spi_block_erase_c7,
5041 }
5042 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005043 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005044 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005045 },
5046
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005047 {
5048 .vendor = "ST",
5049 .name = "M25P32",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005050 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005051 .manufacture_id = ST_ID,
5052 .model_id = ST_M25P32,
5053 .total_size = 4096,
5054 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00005055 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005056 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005057 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005058 .block_erasers =
5059 {
5060 {
5061 .eraseblocks = { {64 * 1024, 64} },
5062 .block_erase = spi_block_erase_d8,
5063 }, {
5064 .eraseblocks = { {4 * 1024 * 1024, 1} },
5065 .block_erase = spi_block_erase_c7,
5066 }
5067 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005068 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005069 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005070 },
5071
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005072 {
5073 .vendor = "ST",
5074 .name = "M25P64",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005075 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005076 .manufacture_id = ST_ID,
5077 .model_id = ST_M25P64,
5078 .total_size = 8192,
5079 .page_size = 256,
5080 .tested = TEST_UNTESTED,
5081 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005082 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005083 .block_erasers =
5084 {
5085 {
5086 .eraseblocks = { {64 * 1024, 128} },
5087 .block_erase = spi_block_erase_d8,
5088 }, {
5089 .eraseblocks = { {8 * 1024 * 1024, 1} },
5090 .block_erase = spi_block_erase_c7,
5091 }
5092 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005093 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005094 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005095 },
5096
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005097 {
5098 .vendor = "ST",
5099 .name = "M25P128",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005100 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005101 .manufacture_id = ST_ID,
5102 .model_id = ST_M25P128,
5103 .total_size = 16384,
5104 .page_size = 256,
5105 .tested = TEST_UNTESTED,
5106 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005107 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005108 .block_erasers =
5109 {
5110 {
5111 .eraseblocks = { {256 * 1024, 64} },
5112 .block_erase = spi_block_erase_d8,
5113 }, {
5114 .eraseblocks = { {16 * 1024 * 1024, 1} },
5115 .block_erase = spi_block_erase_c7,
5116 }
5117 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005118 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005119 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005120 },
5121
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005122 {
5123 .vendor = "ST",
5124 .name = "M29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005125 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005126 .manufacture_id = ST_ID,
5127 .model_id = ST_M29F002B,
5128 .total_size = 256,
5129 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005130 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005131 .tested = TEST_UNTESTED,
5132 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005133 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005134 .block_erasers =
5135 {
5136 {
5137 .eraseblocks = {
5138 {16 * 1024, 1},
5139 {8 * 1024, 2},
5140 {32 * 1024, 1},
5141 {64 * 1024, 3},
5142 },
5143 .block_erase = erase_sector_jedec,
5144 }, {
5145 .eraseblocks = { {256 * 1024, 1} },
5146 .block_erase = erase_chip_block_jedec,
5147 }
5148 },
Sean Nelson35727f72010-01-28 23:55:12 +00005149 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005150 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005151 },
5152
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005153 {
5154 .vendor = "ST",
5155 .name = "M29F002T/NT",
Urja Rannikko038a3122009-06-28 19:19:25 +00005156 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005157 .manufacture_id = ST_ID,
5158 .model_id = ST_M29F002T,
5159 .total_size = 256,
5160 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005161 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
5162 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005163 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005164 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005165 .block_erasers =
5166 {
5167 {
5168 .eraseblocks = {
5169 {64 * 1024, 3},
5170 {32 * 1024, 1},
5171 {8 * 1024, 2},
5172 {16 * 1024, 1},
5173 },
5174 .block_erase = erase_sector_jedec,
5175 }, {
5176 .eraseblocks = { {256 * 1024, 1} },
5177 .block_erase = erase_chip_block_jedec,
5178 }
5179 },
Sean Nelson35727f72010-01-28 23:55:12 +00005180 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005181 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005182 },
5183
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005184 {
5185 .vendor = "ST",
5186 .name = "M29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005187 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005188 .manufacture_id = ST_ID,
5189 .model_id = ST_M29F040B,
5190 .total_size = 512,
5191 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005192 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
5193 .tested = TEST_UNTESTED,
5194 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005195 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005196 .block_erasers =
5197 {
5198 {
5199 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00005200 .block_erase = erase_sector_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00005201 }, {
5202 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00005203 .block_erase = erase_chip_block_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00005204 }
5205 },
Sean Nelson35727f72010-01-28 23:55:12 +00005206 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005207 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005208 },
5209
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005210 {
Sean Nelson35727f72010-01-28 23:55:12 +00005211 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005212 .vendor = "ST",
5213 .name = "M29F400BT",
Urja Rannikko038a3122009-06-28 19:19:25 +00005214 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005215 .manufacture_id = ST_ID,
5216 .model_id = ST_M29F400BT,
5217 .total_size = 512,
5218 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005219 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005220 .tested = TEST_UNTESTED,
5221 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005222 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005223 .block_erasers =
5224 {
5225 {
5226 .eraseblocks = {
5227 {64 * 1024, 7},
5228 {32 * 1024, 1},
5229 {8 * 1024, 2},
5230 {16 * 1024, 1},
5231 },
5232 .block_erase = block_erase_m29f400bt,
5233 }, {
5234 .eraseblocks = { {512 * 1024, 1} },
5235 .block_erase = block_erase_chip_m29f400bt,
5236 }
5237 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005238 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005239 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005240 },
5241
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005242 {
5243 .vendor = "ST",
5244 .name = "M29W010B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005245 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005246 .manufacture_id = ST_ID,
5247 .model_id = ST_M29W010B,
5248 .total_size = 128,
5249 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005250 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005251 .tested = TEST_UNTESTED,
5252 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005253 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005254 .block_erasers =
5255 {
5256 {
5257 .eraseblocks = { {16 * 1024, 8}, },
5258 .block_erase = erase_sector_jedec,
5259 }, {
5260 .eraseblocks = { {128 * 1024, 1} },
5261 .block_erase = erase_chip_block_jedec,
5262 }
5263 },
Sean Nelson35727f72010-01-28 23:55:12 +00005264 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005265 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005266 },
5267
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005268 {
5269 .vendor = "ST",
5270 .name = "M29W040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005271 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005272 .manufacture_id = ST_ID,
5273 .model_id = ST_M29W040B,
5274 .total_size = 512,
5275 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005276 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005277 .tested = TEST_UNTESTED,
5278 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005279 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005280 .block_erasers =
5281 {
5282 {
5283 .eraseblocks = { {64 * 1024, 8}, },
5284 .block_erase = erase_sector_jedec,
5285 }, {
5286 .eraseblocks = { {512 * 1024, 1} },
5287 .block_erase = erase_chip_block_jedec,
5288 }
5289 },
Sean Nelson35727f72010-01-28 23:55:12 +00005290 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005291 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005292 },
5293
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00005294 {
5295 .vendor = "ST",
5296 .name = "M29W512B",
5297 .bustype = CHIP_BUSTYPE_PARALLEL,
5298 .manufacture_id = ST_ID,
5299 .model_id = ST_M29W512B,
5300 .total_size = 64,
5301 .page_size = 64 * 1024,
5302 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
5303 .tested = TEST_OK_PREW,
5304 .probe = probe_jedec,
5305 .probe_timing = TIMING_ZERO,
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00005306 .block_erasers =
5307 {
5308 {
5309 .eraseblocks = { {64 * 1024, 1} },
5310 .block_erase = erase_chip_block_jedec,
5311 }
5312 },
5313 .write = write_jedec_1,
5314 .read = read_memmapped,
5315 },
5316
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005317 {
5318 .vendor = "ST",
5319 .name = "M50FLW040A",
Sean Nelson35727f72010-01-28 23:55:12 +00005320 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005321 .manufacture_id = ST_ID,
5322 .model_id = ST_M50FLW040A,
5323 .total_size = 512,
5324 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005325 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005326 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005327 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005328 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005329 .block_erasers =
5330 {
5331 {
Sean Nelson329bde72010-01-19 16:39:19 +00005332 .eraseblocks = {
5333 {4 * 1024, 16}, /* sector */
5334 {64 * 1024, 5}, /* block */
5335 {4 * 1024, 16}, /* sector */
5336 {4 * 1024, 16}, /* sector */
5337 },
5338 .block_erase = NULL,
5339 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005340 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005341 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005342 }, {
5343 .eraseblocks = { {512 * 1024, 1} },
5344 .block_erase = erase_chip_stm50flw0x0x,
5345 }
5346 },
Sean Nelson28accc22010-03-19 18:47:06 +00005347 .unlock = unlock_stm50flw0x0x,
5348 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005349 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005350 },
5351
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005352 {
5353 .vendor = "ST",
5354 .name = "M50FLW040B",
Sean Nelson35727f72010-01-28 23:55:12 +00005355 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005356 .manufacture_id = ST_ID,
5357 .model_id = ST_M50FLW040B,
5358 .total_size = 512,
5359 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005360 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005361 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005362 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005363 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005364 .block_erasers =
5365 {
5366 {
Sean Nelson329bde72010-01-19 16:39:19 +00005367 .eraseblocks = {
5368 {4 * 1024, 16}, /* sector */
5369 {4 * 1024, 16}, /* sector */
5370 {64 * 1024, 5}, /* block */
5371 {4 * 1024, 16}, /* sector */
5372 },
5373 .block_erase = NULL,
5374 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005375 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005376 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005377 }, {
5378 .eraseblocks = { {512 * 1024, 1} },
5379 .block_erase = erase_chip_stm50flw0x0x,
5380 }
5381 },
Sean Nelson28accc22010-03-19 18:47:06 +00005382 .unlock = unlock_stm50flw0x0x,
5383 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005384 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005385 },
5386
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005387 {
5388 .vendor = "ST",
5389 .name = "M50FLW080A",
Sean Nelson35727f72010-01-28 23:55:12 +00005390 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005391 .manufacture_id = ST_ID,
5392 .model_id = ST_M50FLW080A,
5393 .total_size = 1024,
5394 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005395 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson35727f72010-01-28 23:55:12 +00005396 .tested = TEST_UNTESTED,
5397 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005398 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005399 .block_erasers =
5400 {
5401 {
Sean Nelson329bde72010-01-19 16:39:19 +00005402 .eraseblocks = {
5403 {4 * 1024, 16}, /* sector */
5404 {64 * 1024, 13}, /* block */
5405 {4 * 1024, 16}, /* sector */
5406 {4 * 1024, 16}, /* sector */
5407 },
5408 .block_erase = NULL,
5409 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005410 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005411 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005412 }, {
5413 .eraseblocks = { {1024 * 1024, 1} },
5414 .block_erase = erase_chip_stm50flw0x0x,
5415 }
5416 },
Sean Nelson28accc22010-03-19 18:47:06 +00005417 .unlock = unlock_stm50flw0x0x,
5418 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005419 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005420 },
5421
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005422 {
5423 .vendor = "ST",
5424 .name = "M50FLW080B",
Sean Nelson35727f72010-01-28 23:55:12 +00005425 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005426 .manufacture_id = ST_ID,
5427 .model_id = ST_M50FLW080B,
5428 .total_size = 1024,
5429 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005430 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005431 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005432 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005433 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005434 .block_erasers =
5435 {
5436 {
Sean Nelson329bde72010-01-19 16:39:19 +00005437 .eraseblocks = {
5438 {4 * 1024, 16}, /* sector */
5439 {4 * 1024, 16}, /* sector */
5440 {64 * 1024, 13}, /* block */
5441 {4 * 1024, 16}, /* sector */
5442 },
5443 .block_erase = NULL,
5444 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005445 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005446 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005447 }, {
5448 .eraseblocks = { {1024 * 1024, 1} },
5449 .block_erase = erase_chip_stm50flw0x0x,
5450 }
5451 },
Sean Nelson28accc22010-03-19 18:47:06 +00005452 .unlock = unlock_stm50flw0x0x,
5453 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005454 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005455 },
5456
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005457 {
5458 .vendor = "ST",
5459 .name = "M50FW002",
Urja Rannikko038a3122009-06-28 19:19:25 +00005460 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005461 .manufacture_id = ST_ID,
5462 .model_id = ST_M50FW002,
5463 .total_size = 256,
5464 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005465 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005466 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005467 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005468 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005469 .block_erasers =
5470 {
5471 {
5472 .eraseblocks = {
5473 {64 * 1024, 3},
5474 {32 * 1024, 1},
5475 {8 * 1024, 2},
5476 {16 * 1024, 1},
5477 },
Sean Nelson28accc22010-03-19 18:47:06 +00005478 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005479 }, {
5480 .eraseblocks = { {256 * 1024, 1} },
5481 .block_erase = erase_chip_stm50flw0x0x,
5482 }
5483 },
Sean Nelson28accc22010-03-19 18:47:06 +00005484 .unlock = unlock_stm50flw0x0x,
5485 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005486 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005487 },
5488
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005489 {
5490 .vendor = "ST",
5491 .name = "M50FW016",
Urja Rannikko038a3122009-06-28 19:19:25 +00005492 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005493 .manufacture_id = ST_ID,
5494 .model_id = ST_M50FW016,
5495 .total_size = 2048,
5496 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005497 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005498 .tested = TEST_UNTESTED,
5499 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005500 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005501 .block_erasers =
5502 {
5503 {
5504 .eraseblocks = { {64 * 1024, 32}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005505 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005506 }, {
5507 .eraseblocks = { {2 * 1024 * 1024, 1} },
5508 .block_erase = erase_chip_stm50flw0x0x,
5509 }
5510 },
Sean Nelson28accc22010-03-19 18:47:06 +00005511 .unlock = unlock_stm50flw0x0x,
5512 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005513 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005514 },
5515
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005516 {
5517 .vendor = "ST",
5518 .name = "M50FW040",
Urja Rannikko038a3122009-06-28 19:19:25 +00005519 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005520 .manufacture_id = ST_ID,
5521 .model_id = ST_M50FW040,
5522 .total_size = 512,
5523 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005524 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00005525 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005526 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005527 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005528 .block_erasers =
5529 {
5530 {
5531 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005532 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005533 }, {
5534 .eraseblocks = { {512 * 1024, 1} },
5535 .block_erase = erase_chip_stm50flw0x0x,
5536 }
5537 },
Sean Nelson28accc22010-03-19 18:47:06 +00005538 .unlock = unlock_stm50flw0x0x,
5539 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005540 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005541 },
5542
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005543 {
5544 .vendor = "ST",
5545 .name = "M50FW080",
Urja Rannikko038a3122009-06-28 19:19:25 +00005546 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005547 .manufacture_id = ST_ID,
5548 .model_id = ST_M50FW080,
5549 .total_size = 1024,
5550 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005551 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00005552 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005553 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005554 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005555 .block_erasers =
5556 {
5557 {
5558 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005559 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005560 }, {
5561 .eraseblocks = { {1024 * 1024, 1} },
5562 .block_erase = erase_chip_stm50flw0x0x,
5563 }
5564 },
Sean Nelson28accc22010-03-19 18:47:06 +00005565 .unlock = unlock_stm50flw0x0x,
5566 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005567 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005568 },
5569
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005570 {
5571 .vendor = "ST",
5572 .name = "M50LPW116",
Urja Rannikko038a3122009-06-28 19:19:25 +00005573 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005574 .manufacture_id = ST_ID,
5575 .model_id = ST_M50LPW116,
5576 .total_size = 2048,
5577 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005578 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005579 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005580 .probe = probe_82802ab,
Udu Ogahc04ee222009-09-05 01:31:32 +00005581 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005582 .block_erasers =
5583 {
5584 {
5585 .eraseblocks = {
5586 {4 * 1024, 16},
5587 {64 * 1024, 30},
5588 {32 * 1024, 1},
5589 {8 * 1024, 2},
5590 {16 * 1024, 1},
5591 },
Sean Nelson28accc22010-03-19 18:47:06 +00005592 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005593 }, {
5594 .eraseblocks = { {2 * 1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00005595 .block_erase = erase_chip_stm50flw0x0x,
Sean Nelson56358aa2010-01-19 16:08:51 +00005596 }
5597 },
Sean Nelson28accc22010-03-19 18:47:06 +00005598 .unlock = unlock_stm50flw0x0x,
5599 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005600 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005601 },
5602
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005603 {
5604 .vendor = "SyncMOS",
5605 .name = "S29C31004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005606 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005607 .manufacture_id = SYNCMOS_ID,
5608 .model_id = S29C31004T,
5609 .total_size = 512,
5610 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005611 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005612 .tested = TEST_UNTESTED,
5613 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005614 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005615 .block_erasers =
5616 {
5617 {
5618 .eraseblocks = { {1 * 1024, 512} },
5619 .block_erase = erase_sector_jedec,
5620 }, {
5621 .eraseblocks = { {512 * 1024, 1} },
5622 .block_erase = erase_chip_block_jedec,
5623 },
5624 },
Sean Nelson35727f72010-01-28 23:55:12 +00005625 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005626 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005627 },
5628
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005629 {
5630 .vendor = "SyncMOS",
5631 .name = "S29C51001T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005632 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005633 .manufacture_id = SYNCMOS_ID,
5634 .model_id = S29C51001T,
5635 .total_size = 128,
5636 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005637 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005638 .tested = TEST_UNTESTED,
5639 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005640 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005641 .block_erasers =
5642 {
5643 {
5644 .eraseblocks = { {512, 256} },
5645 .block_erase = erase_sector_jedec,
5646 }, {
5647 .eraseblocks = { {128 * 1024, 1} },
5648 .block_erase = erase_chip_block_jedec,
5649 },
5650 },
Sean Nelson35727f72010-01-28 23:55:12 +00005651 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005652 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005653 },
5654
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005655 {
5656 .vendor = "SyncMOS",
5657 .name = "S29C51002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005658 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005659 .manufacture_id = SYNCMOS_ID,
5660 .model_id = S29C51002T,
5661 .total_size = 256,
5662 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005663 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00005664 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005665 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005666 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005667 .block_erasers =
5668 {
5669 {
5670 .eraseblocks = { {512, 512} },
5671 .block_erase = erase_sector_jedec,
5672 }, {
5673 .eraseblocks = { {256 * 1024, 1} },
5674 .block_erase = erase_chip_block_jedec,
5675 },
5676 },
Sean Nelson35727f72010-01-28 23:55:12 +00005677 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005678 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005679 },
5680
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005681 {
5682 .vendor = "SyncMOS",
5683 .name = "S29C51004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005684 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005685 .manufacture_id = SYNCMOS_ID,
5686 .model_id = S29C51004T,
5687 .total_size = 512,
5688 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005689 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005690 .tested = TEST_UNTESTED,
5691 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005692 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005693 .block_erasers =
5694 {
5695 {
Sean Nelson012a31e2010-01-19 20:23:26 +00005696 .eraseblocks = { {1 * 1024, 512} },
Sean Nelson56358aa2010-01-19 16:08:51 +00005697 .block_erase = erase_sector_jedec,
5698 }, {
5699 .eraseblocks = { {512 * 1024, 1} },
5700 .block_erase = erase_chip_block_jedec,
5701 },
5702 },
Sean Nelson35727f72010-01-28 23:55:12 +00005703 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005704 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005705 },
5706
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005707 {
Uwe Hermanna106d152009-05-27 23:17:40 +00005708 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005709 .name = "TMS29F002RB",
Urja Rannikko038a3122009-06-28 19:19:25 +00005710 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005711 .manufacture_id = TI_OLD_ID,
5712 .model_id = TI_TMS29F002RB,
5713 .total_size = 256,
5714 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00005715 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005716 .tested = TEST_UNTESTED,
5717 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005718 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005719 .block_erasers =
5720 {
5721 {
5722 .eraseblocks = {
5723 {16 * 1024, 1},
5724 {8 * 1024, 2},
5725 {32 * 1024, 1},
5726 {64 * 1024, 3},
5727 },
5728 .block_erase = erase_sector_jedec,
5729 }, {
5730 .eraseblocks = { {256 * 1024, 1} },
5731 .block_erase = erase_chip_block_jedec,
5732 },
5733 },
Sean Nelson35727f72010-01-28 23:55:12 +00005734 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005735 .read = read_memmapped,
5736 },
5737
5738 {
Uwe Hermanna106d152009-05-27 23:17:40 +00005739 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005740 .name = "TMS29F002RT",
Urja Rannikko038a3122009-06-28 19:19:25 +00005741 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005742 .manufacture_id = TI_OLD_ID,
5743 .model_id = TI_TMS29F002RT,
5744 .total_size = 256,
5745 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00005746 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005747 .tested = TEST_UNTESTED,
5748 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005749 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005750 .block_erasers =
5751 {
5752 {
5753 .eraseblocks = {
5754 {64 * 1024, 3},
5755 {32 * 1024, 1},
5756 {8 * 1024, 2},
5757 {16 * 1024, 1},
5758 },
5759 .block_erase = erase_sector_jedec,
5760 }, {
5761 .eraseblocks = { {256 * 1024, 1} },
5762 .block_erase = erase_chip_block_jedec,
5763 },
5764 },
Sean Nelson35727f72010-01-28 23:55:12 +00005765 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005766 .read = read_memmapped,
5767 },
5768
5769 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005770 .vendor = "Winbond",
Rudolf Marekce1c7982010-04-20 19:34:31 +00005771 .name = "W25Q80",
5772 .bustype = CHIP_BUSTYPE_SPI,
5773 .manufacture_id = WINBOND_NEX_ID,
5774 .model_id = W_25Q80,
5775 .total_size = 1024,
5776 .page_size = 256,
5777 .tested = TEST_UNTESTED,
5778 .probe = probe_spi_rdid,
5779 .probe_timing = TIMING_ZERO,
5780 .block_erasers =
5781 {
5782 {
5783 .eraseblocks = { {4 * 1024, 256} },
5784 .block_erase = spi_block_erase_20,
5785 }, {
5786 .eraseblocks = { {32 * 1024, 32} },
5787 .block_erase = spi_block_erase_52,
5788 }, {
5789 .eraseblocks = { {64 * 1024, 16} },
5790 .block_erase = spi_block_erase_d8,
5791 }, {
5792 .eraseblocks = { {1024 * 1024, 1} },
5793 .block_erase = spi_block_erase_60,
5794 }, {
5795 .eraseblocks = { {1024 * 1024, 1} },
5796 .block_erase = spi_block_erase_c7,
5797 }
5798 },
5799 .write = spi_chip_write_256,
5800 .read = spi_chip_read,
5801 },
5802
5803 {
5804 .vendor = "Winbond",
5805 .name = "W25Q16",
5806 .bustype = CHIP_BUSTYPE_SPI,
5807 .manufacture_id = WINBOND_NEX_ID,
5808 .model_id = W_25Q16,
5809 .total_size = 2048,
5810 .page_size = 256,
5811 .tested = TEST_UNTESTED,
5812 .probe = probe_spi_rdid,
5813 .probe_timing = TIMING_ZERO,
5814 .block_erasers =
5815 {
5816 {
5817 .eraseblocks = { {4 * 1024, 512} },
5818 .block_erase = spi_block_erase_20,
5819 }, {
5820 .eraseblocks = { {32 * 1024, 64} },
5821 .block_erase = spi_block_erase_52,
5822 }, {
5823 .eraseblocks = { {64 * 1024, 32} },
5824 .block_erase = spi_block_erase_d8,
5825 }, {
5826 .eraseblocks = { {2 * 1024 * 1024, 1} },
5827 .block_erase = spi_block_erase_60,
5828 }, {
5829 .eraseblocks = { {2 * 1024 * 1024, 1} },
5830 .block_erase = spi_block_erase_c7,
5831 }
5832 },
5833 .write = spi_chip_write_256,
5834 .read = spi_chip_read,
5835 },
5836
5837 {
5838 .vendor = "Winbond",
5839 .name = "W25Q32",
5840 .bustype = CHIP_BUSTYPE_SPI,
5841 .manufacture_id = WINBOND_NEX_ID,
5842 .model_id = W_25Q32,
5843 .total_size = 4096,
5844 .page_size = 256,
5845 .tested = TEST_UNTESTED,
5846 .probe = probe_spi_rdid,
5847 .probe_timing = TIMING_ZERO,
5848 .block_erasers =
5849 {
5850 {
5851 .eraseblocks = { {4 * 1024, 1024} },
5852 .block_erase = spi_block_erase_20,
5853 }, {
5854 .eraseblocks = { {32 * 1024, 128} },
5855 .block_erase = spi_block_erase_52,
5856 }, {
5857 .eraseblocks = { {64 * 1024, 64} },
5858 .block_erase = spi_block_erase_d8,
5859 }, {
5860 .eraseblocks = { {4 * 1024 * 1024, 1} },
5861 .block_erase = spi_block_erase_60,
5862 }, {
5863 .eraseblocks = { {4 * 1024 * 1024, 1} },
5864 .block_erase = spi_block_erase_c7,
5865 }
5866 },
5867 .write = spi_chip_write_256,
5868 .read = spi_chip_read,
5869 },
5870
5871 {
5872 .vendor = "Winbond",
David Hendricksc4acec92010-06-24 11:39:57 +00005873 .name = "W25Q64",
5874 .bustype = CHIP_BUSTYPE_SPI,
5875 .manufacture_id = WINBOND_NEX_ID,
5876 .model_id = W_25Q64,
5877 .total_size = 8192,
5878 .page_size = 256,
5879 .tested = TEST_OK_PRW,
5880 .probe = probe_spi_rdid,
5881 .probe_timing = TIMING_ZERO,
5882 .block_erasers =
5883 {
5884 {
5885 .eraseblocks = { {4 * 1024, 2048} },
5886 .block_erase = spi_block_erase_20,
5887 }, {
5888 .eraseblocks = { {32 * 1024, 256} },
5889 .block_erase = spi_block_erase_52,
5890 }, {
5891 .eraseblocks = { {64 * 1024, 128} },
5892 .block_erase = spi_block_erase_d8,
5893 }, {
5894 .eraseblocks = { {8 * 1024 * 1024, 1} },
5895 .block_erase = spi_block_erase_60,
5896 }, {
5897 .eraseblocks = { {8 * 1024 * 1024, 1} },
5898 .block_erase = spi_block_erase_c7,
5899 }
5900 },
5901 .write = spi_chip_write_256,
5902 .read = spi_chip_read,
5903 },
5904
5905 {
5906 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005907 .name = "W25x10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005908 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005909 .manufacture_id = WINBOND_NEX_ID,
5910 .model_id = W_25X10,
5911 .total_size = 128,
5912 .page_size = 256,
5913 .tested = TEST_UNTESTED,
5914 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005915 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005916 .block_erasers =
5917 {
5918 {
5919 .eraseblocks = { {4 * 1024, 32} },
5920 .block_erase = spi_block_erase_20,
5921 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005922 .eraseblocks = { {64 * 1024, 2} },
5923 .block_erase = spi_block_erase_d8,
5924 }, {
5925 .eraseblocks = { {128 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005926 .block_erase = spi_block_erase_c7,
5927 }
5928 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005929 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005930 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005931 },
5932
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005933 {
5934 .vendor = "Winbond",
5935 .name = "W25x20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005936 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005937 .manufacture_id = WINBOND_NEX_ID,
5938 .model_id = W_25X20,
5939 .total_size = 256,
5940 .page_size = 256,
5941 .tested = TEST_UNTESTED,
5942 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005943 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005944 .block_erasers =
5945 {
5946 {
5947 .eraseblocks = { {4 * 1024, 64} },
5948 .block_erase = spi_block_erase_20,
5949 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005950 .eraseblocks = { {64 * 1024, 4} },
5951 .block_erase = spi_block_erase_d8,
5952 }, {
5953 .eraseblocks = { {256 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005954 .block_erase = spi_block_erase_c7,
5955 }
5956 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005957 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005958 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005959 },
5960
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005961 {
5962 .vendor = "Winbond",
5963 .name = "W25x40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005964 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005965 .manufacture_id = WINBOND_NEX_ID,
5966 .model_id = W_25X40,
5967 .total_size = 512,
5968 .page_size = 256,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005969 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005970 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005971 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005972 .block_erasers =
5973 {
5974 {
5975 .eraseblocks = { {4 * 1024, 128} },
5976 .block_erase = spi_block_erase_20,
5977 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005978 .eraseblocks = { {64 * 1024, 8} },
5979 .block_erase = spi_block_erase_d8,
5980 }, {
5981 .eraseblocks = { {512 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005982 .block_erase = spi_block_erase_c7,
5983 }
5984 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005985 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005986 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005987 },
5988
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005989 {
5990 .vendor = "Winbond",
5991 .name = "W25x80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005992 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005993 .manufacture_id = WINBOND_NEX_ID,
5994 .model_id = W_25X80,
5995 .total_size = 1024,
5996 .page_size = 256,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005997 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005998 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005999 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006000 .block_erasers =
6001 {
6002 {
6003 .eraseblocks = { {4 * 1024, 256} },
6004 .block_erase = spi_block_erase_20,
6005 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006006 .eraseblocks = { {64 * 1024, 16} },
6007 .block_erase = spi_block_erase_d8,
6008 }, {
6009 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006010 .block_erase = spi_block_erase_c7,
6011 }
6012 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006013 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006014 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006015 },
6016
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006017 {
6018 .vendor = "Winbond",
Hector Martina721ae22009-07-11 19:39:11 +00006019 .name = "W25x16",
6020 .bustype = CHIP_BUSTYPE_SPI,
6021 .manufacture_id = WINBOND_NEX_ID,
6022 .model_id = W_25X16,
6023 .total_size = 2048,
6024 .page_size = 256,
6025 .tested = TEST_OK_PR,
6026 .probe = probe_spi_rdid,
6027 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006028 .block_erasers =
6029 {
6030 {
6031 .eraseblocks = { {4 * 1024, 512} },
6032 .block_erase = spi_block_erase_20,
6033 }, {
6034 .eraseblocks = { {32 * 1024, 64} },
6035 .block_erase = spi_block_erase_52,
6036 }, {
6037 .eraseblocks = { {64 * 1024, 32} },
6038 .block_erase = spi_block_erase_d8,
6039 }, {
6040 .eraseblocks = { {2 * 1024 * 1024, 1} },
6041 .block_erase = spi_block_erase_60,
6042 }, {
6043 .eraseblocks = { {2 * 1024 * 1024, 1} },
6044 .block_erase = spi_block_erase_c7,
6045 }
6046 },
Hector Martina721ae22009-07-11 19:39:11 +00006047 .write = spi_chip_write_256,
6048 .read = spi_chip_read,
6049 },
6050
6051 {
6052 .vendor = "Winbond",
Zheng Bao1db2b752009-11-26 11:05:01 +00006053 .name = "W25x32",
6054 .bustype = CHIP_BUSTYPE_SPI,
6055 .manufacture_id = WINBOND_NEX_ID,
6056 .model_id = W_25X32,
6057 .total_size = 4096,
6058 .page_size = 256,
6059 .tested = TEST_OK_PROBE,
6060 .probe = probe_spi_rdid,
6061 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006062 .block_erasers =
6063 {
6064 {
6065 .eraseblocks = { {4 * 1024, 1024} },
6066 .block_erase = spi_block_erase_20,
6067 }, {
6068 .eraseblocks = { {32 * 1024, 128} },
6069 .block_erase = spi_block_erase_52,
6070 }, {
6071 .eraseblocks = { {64 * 1024, 64} },
6072 .block_erase = spi_block_erase_d8,
6073 }, {
6074 .eraseblocks = { {4 * 1024 * 1024, 1} },
6075 .block_erase = spi_block_erase_60,
6076 }, {
6077 .eraseblocks = { {4 * 1024 * 1024, 1} },
6078 .block_erase = spi_block_erase_c7,
6079 }
6080 },
Zheng Bao1db2b752009-11-26 11:05:01 +00006081 .write = spi_chip_write_256,
6082 .read = spi_chip_read,
6083 },
6084
6085 {
6086 .vendor = "Winbond",
6087 .name = "W25x64",
6088 .bustype = CHIP_BUSTYPE_SPI,
6089 .manufacture_id = WINBOND_NEX_ID,
6090 .model_id = W_25X64,
6091 .total_size = 8192,
6092 .page_size = 256,
6093 .tested = TEST_UNTESTED,
6094 .probe = probe_spi_rdid,
6095 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006096 .block_erasers =
6097 {
6098 {
6099 .eraseblocks = { {4 * 1024, 2048} },
6100 .block_erase = spi_block_erase_20,
6101 }, {
6102 .eraseblocks = { {32 * 1024, 256} },
6103 .block_erase = spi_block_erase_52,
6104 }, {
6105 .eraseblocks = { {64 * 1024, 128} },
6106 .block_erase = spi_block_erase_d8,
6107 }, {
6108 .eraseblocks = { {8 * 1024 * 1024, 1} },
6109 .block_erase = spi_block_erase_60,
6110 }, {
6111 .eraseblocks = { {8 * 1024 * 1024, 1} },
6112 .block_erase = spi_block_erase_c7,
6113 }
6114 },
Zheng Bao1db2b752009-11-26 11:05:01 +00006115 .write = spi_chip_write_256,
6116 .read = spi_chip_read,
6117 },
6118
6119 {
6120 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006121 .name = "W29C011",
Urja Rannikko038a3122009-06-28 19:19:25 +00006122 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006123 .manufacture_id = WINBOND_ID,
6124 .model_id = W_29C011,
6125 .total_size = 128,
6126 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006127 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00006128 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006129 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006130 .probe_timing = 10, /* used datasheet for the W29C011A */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006131 .block_erasers =
6132 {
6133 {
6134 .eraseblocks = { {128 * 1024, 1} },
6135 .block_erase = erase_chip_block_jedec,
6136 }
6137 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006138 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006139 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006140 },
6141
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006142 {
6143 .vendor = "Winbond",
6144 .name = "W29C020C",
Urja Rannikko161b8852009-06-05 08:47:37 +00006145 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006146 .manufacture_id = WINBOND_ID,
6147 .model_id = W_29C020C,
6148 .total_size = 256,
6149 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006150 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00006151 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006152 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006153 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006154 .block_erasers =
6155 {
6156 {
6157 .eraseblocks = { {256 * 1024, 1} },
6158 .block_erase = erase_chip_block_jedec,
6159 }
6160 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006161 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006162 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006163 },
6164
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006165 {
6166 .vendor = "Winbond",
6167 .name = "W29C040P",
Urja Rannikko161b8852009-06-05 08:47:37 +00006168 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006169 .manufacture_id = WINBOND_ID,
6170 .model_id = W_29C040P,
6171 .total_size = 512,
6172 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00006173 .feature_bits = FEATURE_LONG_RESET,
6174 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006175 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006176 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006177 .block_erasers =
6178 {
6179 {
6180 .eraseblocks = { {512 * 1024, 1} },
6181 .block_erase = erase_chip_block_jedec,
6182 }
6183 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006184 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006185 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006186 },
6187
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006188 {
6189 .vendor = "Winbond",
6190 .name = "W29EE011",
Urja Rannikko038a3122009-06-28 19:19:25 +00006191 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006192 .manufacture_id = WINBOND_ID,
6193 .model_id = W_29C011,
6194 .total_size = 128,
6195 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006196 .feature_bits = FEATURE_LONG_RESET,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006197 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006198 .probe = probe_w29ee011,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006199 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w29ee011.c) */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006200 .block_erasers =
6201 {
6202 {
6203 .eraseblocks = { {128 * 1024, 1} },
6204 .block_erase = erase_chip_block_jedec,
6205 }
6206 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006207 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006208 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006209 },
6210
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006211 {
6212 .vendor = "Winbond",
6213 .name = "W39V040A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006214 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006215 .manufacture_id = WINBOND_ID,
6216 .model_id = W_39V040A,
6217 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006218 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006219 .feature_bits = FEATURE_EITHER_RESET,
Michael Karcher3355f062010-03-24 22:56:23 +00006220 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006221 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006222 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006223 .block_erasers =
6224 {
6225 {
6226 .eraseblocks = { {64 * 1024, 8} },
6227 .block_erase = erase_sector_jedec,
6228 }, {
6229 .eraseblocks = { {512 * 1024, 1} },
6230 .block_erase = erase_chip_block_jedec,
6231 }
6232 },
Sean Nelson35727f72010-01-28 23:55:12 +00006233 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006234 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006235 },
6236
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006237 {
6238 .vendor = "Winbond",
6239 .name = "W39V040B",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006240 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006241 .manufacture_id = WINBOND_ID,
6242 .model_id = W_39V040B,
6243 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006244 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006245 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00006246 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006247 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006248 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006249 .block_erasers =
6250 {
6251 {
6252 .eraseblocks = { {64 * 1024, 8} },
6253 .block_erase = erase_sector_jedec,
6254 }, {
6255 .eraseblocks = { {512 * 1024, 1} },
6256 .block_erase = erase_chip_block_jedec,
6257 }
6258 },
Sean Nelson35727f72010-01-28 23:55:12 +00006259 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006260 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006261 },
6262
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006263 {
6264 .vendor = "Winbond",
6265 .name = "W39V040C",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006266 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006267 .manufacture_id = WINBOND_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00006268 .model_id = W_39V040C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006269 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006270 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006271 .feature_bits = FEATURE_EITHER_RESET,
6272 .tested = TEST_UNTESTED,
6273 .probe = probe_jedec,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00006274 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006275 .block_erasers =
6276 {
6277 {
6278 .eraseblocks = { {64 * 1024, 8} },
6279 .block_erase = erase_sector_jedec,
6280 }, {
6281 .eraseblocks = { {512 * 1024, 1} },
6282 .block_erase = erase_chip_block_jedec,
6283 }
6284 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00006285 .printlock = printlock_w39v040c,
Sean Nelson35727f72010-01-28 23:55:12 +00006286 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006287 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006288 },
6289
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006290 {
6291 .vendor = "Winbond",
6292 .name = "W39V040FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006293 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006294 .manufacture_id = WINBOND_ID,
6295 .model_id = W_39V040FA,
6296 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006297 .page_size = 64 * 1024,
Michael Karcherc9b63412010-05-30 16:55:18 +00006298 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermann41787602010-05-30 17:50:16 +00006299 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006300 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006301 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006302 .block_erasers =
6303 {
6304 {
6305 .eraseblocks = { {4 * 1024, 128} },
6306 .block_erase = erase_block_jedec,
6307 }, {
6308 .eraseblocks = { {64 * 1024, 8} },
6309 .block_erase = erase_sector_jedec,
6310 }, {
6311 .eraseblocks = { {512 * 1024, 1} },
6312 .block_erase = erase_chip_block_jedec,
6313 }
6314 },
Michael Karcherc9b63412010-05-30 16:55:18 +00006315 .printlock = printlock_sst_fwhub,
6316 .unlock = unlock_sst_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00006317 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006318 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006319 },
6320
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006321 {
6322 .vendor = "Winbond",
6323 .name = "W39V080A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006324 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006325 .manufacture_id = WINBOND_ID,
6326 .model_id = W_39V080A,
6327 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00006328 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006329 .feature_bits = FEATURE_EITHER_RESET,
6330 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006331 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006332 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006333 .block_erasers =
6334 {
6335 {
6336 .eraseblocks = { {64 * 1024, 16} },
6337 .block_erase = erase_sector_jedec,
6338 }, {
6339 .eraseblocks = { {1024 * 1024, 1} },
6340 .block_erase = erase_chip_block_jedec,
6341 }
6342 },
Sean Nelson35727f72010-01-28 23:55:12 +00006343 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006344 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006345 },
6346
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006347 {
6348 .vendor = "Winbond",
6349 .name = "W49F002U",
Urja Rannikko038a3122009-06-28 19:19:25 +00006350 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006351 .manufacture_id = WINBOND_ID,
6352 .model_id = W_49F002U,
6353 .total_size = 256,
6354 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006355 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00006356 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006357 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006358 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006359 .block_erasers =
6360 {
6361 {
6362 .eraseblocks = {
6363 {128 * 1024, 1},
6364 {96 * 1024, 1},
6365 {8 * 1024, 2},
6366 {16 * 1024, 1},
6367 },
6368 .block_erase = erase_sector_jedec,
6369 }, {
6370 .eraseblocks = { {256 * 1024, 1} },
6371 .block_erase = erase_chip_block_jedec,
6372 }
6373 },
Sean Nelson35727f72010-01-28 23:55:12 +00006374 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006375 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006376 },
6377
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006378 {
6379 .vendor = "Winbond",
6380 .name = "W49V002A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006381 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006382 .manufacture_id = WINBOND_ID,
6383 .model_id = W_49V002A,
6384 .total_size = 256,
6385 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006386 .feature_bits = FEATURE_EITHER_RESET,
6387 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006388 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006389 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006390 .block_erasers =
6391 {
6392 {
6393 .eraseblocks = {
6394 {64 * 1024, 3},
6395 {32 * 1024, 1},
6396 {8 * 1024, 2},
6397 {16 * 1024, 1},
6398 },
6399 .block_erase = erase_sector_jedec,
6400 }, {
6401 .eraseblocks = { {256 * 1024, 1} },
6402 .block_erase = erase_chip_block_jedec,
6403 }
6404 },
Sean Nelson35727f72010-01-28 23:55:12 +00006405 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006406 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006407 },
6408
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006409 {
6410 .vendor = "Winbond",
6411 .name = "W49V002FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006412 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006413 .manufacture_id = WINBOND_ID,
6414 .model_id = W_49V002FA,
6415 .total_size = 256,
6416 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006417 .feature_bits = FEATURE_EITHER_RESET,
Michael Karcherb90c2212010-03-24 22:56:14 +00006418 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006419 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006420 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006421 .block_erasers =
6422 {
6423 {
6424 .eraseblocks = {
6425 {64 * 1024, 3},
6426 {32 * 1024, 1},
6427 {8 * 1024, 2},
6428 {16 * 1024, 1},
6429 },
6430 .block_erase = erase_sector_jedec,
6431 }, {
6432 .eraseblocks = { {256 * 1024, 1} },
6433 .block_erase = erase_chip_block_jedec,
6434 }
6435 },
Sean Nelson35727f72010-01-28 23:55:12 +00006436 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006437 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006438 },
6439
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006440 {
6441 .vendor = "Winbond",
6442 .name = "W39V080FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006443 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006444 .manufacture_id = WINBOND_ID,
6445 .model_id = W_39V080FA,
6446 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00006447 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006448 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00006449 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00006450 .probe = probe_jedec,
6451 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006452 .block_erasers =
6453 {
6454 {
6455 .eraseblocks = { {64 * 1024, 16}, },
6456 .block_erase = erase_sector_jedec,
6457 }, {
6458 .eraseblocks = { {1024 * 1024, 1} },
6459 .block_erase = erase_chip_block_jedec,
6460 }
6461 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00006462 .unlock = unlock_winbond_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00006463 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006464 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006465 },
6466
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006467 {
6468 .vendor = "Winbond",
6469 .name = "W39V080FA (dual mode)",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006470 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006471 .manufacture_id = WINBOND_ID,
6472 .model_id = W_39V080FA_DM,
6473 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006474 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006475 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006476 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00006477 .probe = probe_jedec,
6478 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006479 .block_erasers =
6480 {
6481 {
6482 .eraseblocks = { {64 * 1024, 8}, },
6483 .block_erase = erase_sector_jedec,
6484 }, {
6485 .eraseblocks = { {512 * 1024, 1} },
6486 .block_erase = erase_chip_block_jedec,
6487 }
6488 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00006489 .unlock = unlock_winbond_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00006490 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006491 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006492 },
6493
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006494 {
6495 .vendor = "Atmel",
6496 .name = "unknown Atmel SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006497 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006498 .manufacture_id = ATMEL_ID,
6499 .model_id = GENERIC_DEVICE_ID,
6500 .total_size = 0,
6501 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006502 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006503 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006504 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006505 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006506 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006507 },
6508
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006509 {
6510 .vendor = "EON",
6511 .name = "unknown EON SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006512 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006513 .manufacture_id = EON_ID_NOPREFIX,
6514 .model_id = GENERIC_DEVICE_ID,
6515 .total_size = 0,
6516 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006517 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006518 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006519 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006520 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006521 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006522 },
6523
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006524 {
6525 .vendor = "Macronix",
6526 .name = "unknown Macronix SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006527 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006528 .manufacture_id = MX_ID,
6529 .model_id = GENERIC_DEVICE_ID,
6530 .total_size = 0,
6531 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006532 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006533 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006534 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006535 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006536 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006537 },
6538
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006539 {
6540 .vendor = "PMC",
6541 .name = "unknown PMC SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006542 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006543 .manufacture_id = PMC_ID,
6544 .model_id = GENERIC_DEVICE_ID,
6545 .total_size = 0,
6546 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006547 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006548 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006549 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006550 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006551 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006552 },
6553
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006554 {
6555 .vendor = "SST",
6556 .name = "unknown SST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006557 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006558 .manufacture_id = SST_ID,
6559 .model_id = GENERIC_DEVICE_ID,
6560 .total_size = 0,
6561 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006562 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006563 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006564 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006565 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006566 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006567 },
6568
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006569 {
6570 .vendor = "ST",
6571 .name = "unknown ST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006572 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006573 .manufacture_id = ST_ID,
6574 .model_id = GENERIC_DEVICE_ID,
6575 .total_size = 0,
6576 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006577 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006578 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006579 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006580 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006581 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006582 },
Uwe Hermannfc425e82008-03-16 02:06:25 +00006583
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006584 {
Sean Nelson118e1d62009-11-24 02:08:11 +00006585 .vendor = "Sanyo",
6586 .name = "unknown Sanyo SPI chip",
6587 .bustype = CHIP_BUSTYPE_SPI,
6588 .manufacture_id = SANYO_ID,
6589 .model_id = GENERIC_DEVICE_ID,
6590 .total_size = 0,
6591 .page_size = 256,
6592 .tested = TEST_BAD_PREW,
6593 .probe = probe_spi_rdid,
6594 .probe_timing = TIMING_ZERO,
Sean Nelson118e1d62009-11-24 02:08:11 +00006595 .write = NULL,
6596 .read = NULL,
6597 },
6598
6599 {
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006600 .vendor = "Generic",
6601 .name = "unknown SPI chip (RDID)",
6602 .bustype = CHIP_BUSTYPE_SPI,
6603 .manufacture_id = GENERIC_MANUF_ID,
6604 .model_id = GENERIC_DEVICE_ID,
6605 .total_size = 0,
6606 .page_size = 256,
6607 .tested = TEST_BAD_PREW,
6608 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006609 .write = NULL,
6610 },
6611 {
6612 .vendor = "Generic",
6613 .name = "unknown SPI chip (REMS)",
6614 .bustype = CHIP_BUSTYPE_SPI,
6615 .manufacture_id = GENERIC_MANUF_ID,
6616 .model_id = GENERIC_DEVICE_ID,
6617 .total_size = 0,
6618 .page_size = 256,
6619 .tested = TEST_BAD_PREW,
6620 .probe = probe_spi_rems,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006621 .write = NULL,
6622 },
6623
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006624 { NULL }
Stephan Guilloux72cf5652009-04-21 01:46:07 +00006625};