blob: 902f956cf8aeb9025e7972df64c585f696d0b70e [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 Hailfinger29a1c662010-07-14 20:21:22 +0000338 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000339 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000340 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000341 },
342
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000343 {
344 .vendor = "Atmel",
345 .name = "AT25DF041A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000346 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000347 .manufacture_id = ATMEL_ID,
348 .model_id = AT_25DF041A,
349 .total_size = 512,
350 .page_size = 256,
351 .tested = TEST_UNTESTED,
352 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000353 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000354 .block_erasers =
355 {
356 {
357 .eraseblocks = { {4 * 1024, 128} },
358 .block_erase = spi_block_erase_20,
359 }, {
360 .eraseblocks = { {32 * 1024, 16} },
361 .block_erase = spi_block_erase_52,
362 }, {
363 .eraseblocks = { {64 * 1024, 8} },
364 .block_erase = spi_block_erase_d8,
365 }, {
366 .eraseblocks = { {512 * 1024, 1} },
367 .block_erase = spi_block_erase_60,
368 }, {
369 .eraseblocks = { {512 * 1024, 1} },
370 .block_erase = spi_block_erase_c7,
371 }
372 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +0000373 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000374 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000375 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000376 },
377
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000378 {
379 .vendor = "Atmel",
380 .name = "AT25DF081",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000381 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000382 .manufacture_id = ATMEL_ID,
383 .model_id = AT_25DF081,
384 .total_size = 1024,
385 .page_size = 256,
386 .tested = TEST_UNTESTED,
387 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000388 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000389 .block_erasers =
390 {
391 {
392 .eraseblocks = { {4 * 1024, 256} },
393 .block_erase = spi_block_erase_20,
394 }, {
395 .eraseblocks = { {32 * 1024, 32} },
396 .block_erase = spi_block_erase_52,
397 }, {
398 .eraseblocks = { {64 * 1024, 16} },
399 .block_erase = spi_block_erase_d8,
400 }, {
401 .eraseblocks = { {1024 * 1024, 1} },
402 .block_erase = spi_block_erase_60,
403 }, {
404 .eraseblocks = { {1024 * 1024, 1} },
405 .block_erase = spi_block_erase_c7,
406 }
407 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +0000408 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000409 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000410 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000411 },
412
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000413 {
414 .vendor = "Atmel",
415 .name = "AT25DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000416 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000417 .manufacture_id = ATMEL_ID,
418 .model_id = AT_25DF161,
419 .total_size = 2048,
420 .page_size = 256,
421 .tested = TEST_UNTESTED,
422 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000423 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000424 .block_erasers =
425 {
426 {
427 .eraseblocks = { {4 * 1024, 512} },
428 .block_erase = spi_block_erase_20,
429 }, {
430 .eraseblocks = { {32 * 1024, 64} },
431 .block_erase = spi_block_erase_52,
432 }, {
433 .eraseblocks = { {64 * 1024, 32} },
434 .block_erase = spi_block_erase_d8,
435 }, {
436 .eraseblocks = { {2 * 1024 * 1024, 1} },
437 .block_erase = spi_block_erase_60,
438 }, {
439 .eraseblocks = { {2 * 1024 * 1024, 1} },
440 .block_erase = spi_block_erase_c7,
441 }
442 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +0000443 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000444 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000445 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000446 },
447
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000448 {
449 .vendor = "Atmel",
450 .name = "AT25DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000451 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000452 .manufacture_id = ATMEL_ID,
453 .model_id = AT_25DF321,
454 .total_size = 4096,
455 .page_size = 256,
Sean Nelson89187292009-12-23 12:02:55 +0000456 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000457 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000458 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000459 .block_erasers =
460 {
461 {
462 .eraseblocks = { {4 * 1024, 1024} },
463 .block_erase = spi_block_erase_20,
464 }, {
465 .eraseblocks = { {32 * 1024, 128} },
466 .block_erase = spi_block_erase_52,
467 }, {
468 .eraseblocks = { {64 * 1024, 64} },
469 .block_erase = spi_block_erase_d8,
470 }, {
471 .eraseblocks = { {4 * 1024 * 1024, 1} },
472 .block_erase = spi_block_erase_60,
473 }, {
474 .eraseblocks = { {4 * 1024 * 1024, 1} },
475 .block_erase = spi_block_erase_c7,
476 }
477 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +0000478 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000479 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000480 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000481 },
482
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000483 {
484 .vendor = "Atmel",
485 .name = "AT25DF321A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000486 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000487 .manufacture_id = ATMEL_ID,
488 .model_id = AT_25DF321A,
489 .total_size = 4096,
490 .page_size = 256,
491 .tested = TEST_UNTESTED,
492 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000493 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000494 .block_erasers =
495 {
496 {
497 .eraseblocks = { {4 * 1024, 1024} },
498 .block_erase = spi_block_erase_20,
499 }, {
500 .eraseblocks = { {32 * 1024, 128} },
501 .block_erase = spi_block_erase_52,
502 }, {
503 .eraseblocks = { {64 * 1024, 64} },
504 .block_erase = spi_block_erase_d8,
505 }, {
506 .eraseblocks = { {4 * 1024 * 1024, 1} },
507 .block_erase = spi_block_erase_60,
508 }, {
509 .eraseblocks = { {4 * 1024 * 1024, 1} },
510 .block_erase = spi_block_erase_c7,
511 }
512 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +0000513 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000514 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000515 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000516 },
517
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000518 {
519 .vendor = "Atmel",
520 .name = "AT25DF641",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000521 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000522 .manufacture_id = ATMEL_ID,
523 .model_id = AT_25DF641,
524 .total_size = 8192,
525 .page_size = 256,
526 .tested = TEST_UNTESTED,
527 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000528 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000529 .block_erasers =
530 {
531 {
532 .eraseblocks = { {4 * 1024, 2048} },
533 .block_erase = spi_block_erase_20,
534 }, {
535 .eraseblocks = { {32 * 1024, 256} },
536 .block_erase = spi_block_erase_52,
537 }, {
538 .eraseblocks = { {64 * 1024, 128} },
539 .block_erase = spi_block_erase_d8,
540 }, {
541 .eraseblocks = { {8 * 1024 * 1024, 1} },
542 .block_erase = spi_block_erase_60,
543 }, {
544 .eraseblocks = { {8 * 1024 * 1024, 1} },
545 .block_erase = spi_block_erase_c7,
546 }
547 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +0000548 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000549 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000550 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000551 },
552
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000553 {
554 .vendor = "Atmel",
555 .name = "AT25F512B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000556 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000557 .manufacture_id = ATMEL_ID,
558 .model_id = AT_25F512B,
559 .total_size = 64,
560 .page_size = 256,
561 .tested = TEST_UNTESTED,
562 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000563 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000564 .block_erasers =
565 {
566 {
567 .eraseblocks = { {4 * 1024, 16} },
568 .block_erase = spi_block_erase_20,
569 }, {
570 .eraseblocks = { {32 * 1024, 2} },
571 .block_erase = spi_block_erase_52,
572 }, {
573 .eraseblocks = { {32 * 1024, 2} },
574 .block_erase = spi_block_erase_d8,
575 }, {
576 .eraseblocks = { {64 * 1024, 1} },
577 .block_erase = spi_block_erase_60,
578 }, {
579 .eraseblocks = { {64 * 1024, 1} },
580 .block_erase = spi_block_erase_c7,
581 }
582 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +0000583 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000584 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000585 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000586 },
587
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000588 {
589 .vendor = "Atmel",
590 .name = "AT25FS010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000591 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000592 .manufacture_id = ATMEL_ID,
593 .model_id = AT_25FS010,
594 .total_size = 128,
595 .page_size = 256,
596 .tested = TEST_UNTESTED,
597 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000598 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000599 .block_erasers =
600 {
601 {
602 .eraseblocks = { {4 * 1024, 32} },
603 .block_erase = spi_block_erase_20,
604 }, {
605 .eraseblocks = { {32 * 1024, 4} },
606 .block_erase = spi_block_erase_52,
607 }, {
608 .eraseblocks = { {32 * 1024, 4} },
609 .block_erase = spi_block_erase_d8,
610 }, {
611 .eraseblocks = { {128 * 1024, 1} },
612 .block_erase = spi_block_erase_60,
613 }, {
614 .eraseblocks = { {128 * 1024, 1} },
615 .block_erase = spi_block_erase_c7,
616 }
617 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +0000618 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000619 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000620 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000621 },
622
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000623 {
624 .vendor = "Atmel",
625 .name = "AT25FS040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000626 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000627 .manufacture_id = ATMEL_ID,
628 .model_id = AT_25FS040,
629 .total_size = 512,
630 .page_size = 256,
631 .tested = TEST_UNTESTED,
632 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000633 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000634 .block_erasers =
635 {
636 {
637 .eraseblocks = { {4 * 1024, 128} },
638 .block_erase = spi_block_erase_20,
639 }, {
640 .eraseblocks = { {64 * 1024, 8} },
641 .block_erase = spi_block_erase_52,
642 }, {
643 .eraseblocks = { {64 * 1024, 8} },
644 .block_erase = spi_block_erase_d8,
645 }, {
646 .eraseblocks = { {512 * 1024, 1} },
647 .block_erase = spi_block_erase_60,
648 }, {
649 .eraseblocks = { {512 * 1024, 1} },
650 .block_erase = spi_block_erase_c7,
651 }
652 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +0000653 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000654 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000655 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000656 },
657
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000658 {
659 .vendor = "Atmel",
660 .name = "AT26DF041",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000661 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000662 .manufacture_id = ATMEL_ID,
663 .model_id = AT_26DF041,
664 .total_size = 512,
665 .page_size = 256,
666 .tested = TEST_UNTESTED,
667 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000668 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000669 .block_erasers =
670 {
671 {
672 .eraseblocks = { {4 * 1024, 128} },
673 .block_erase = spi_block_erase_20,
674 }
675 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000676 .write = NULL /* Incompatible Page write */,
677 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000678 },
679
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000680 {
681 .vendor = "Atmel",
682 .name = "AT26DF081A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000683 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000684 .manufacture_id = ATMEL_ID,
685 .model_id = AT_26DF081A,
686 .total_size = 1024,
687 .page_size = 256,
688 .tested = TEST_UNTESTED,
689 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000690 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000691 .block_erasers =
692 {
693 {
694 .eraseblocks = { {4 * 1024, 256} },
695 .block_erase = spi_block_erase_20,
696 }, {
697 .eraseblocks = { {32 * 1024, 32} },
698 .block_erase = spi_block_erase_52,
699 }, {
700 .eraseblocks = { {64 * 1024, 16} },
701 .block_erase = spi_block_erase_d8,
702 }, {
703 .eraseblocks = { {1024 * 1024, 1} },
704 .block_erase = spi_block_erase_60,
705 }, {
706 .eraseblocks = { {1024 * 1024, 1} },
707 .block_erase = spi_block_erase_c7,
708 }
709 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +0000710 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000711 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000712 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000713 },
714
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000715 {
716 .vendor = "Atmel",
717 .name = "AT26DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000718 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000719 .manufacture_id = ATMEL_ID,
720 .model_id = AT_26DF161,
721 .total_size = 2048,
722 .page_size = 256,
723 .tested = TEST_UNTESTED,
724 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000725 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000726 .block_erasers =
727 {
728 {
729 .eraseblocks = { {4 * 1024, 512} },
730 .block_erase = spi_block_erase_20,
731 }, {
732 .eraseblocks = { {32 * 1024, 64} },
733 .block_erase = spi_block_erase_52,
734 }, {
735 .eraseblocks = { {64 * 1024, 32} },
736 .block_erase = spi_block_erase_d8,
737 }, {
738 .eraseblocks = { {2 * 1024 * 1024, 1} },
739 .block_erase = spi_block_erase_60,
740 }, {
741 .eraseblocks = { {2 * 1024 * 1024, 1} },
742 .block_erase = spi_block_erase_c7,
743 }
744 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +0000745 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000746 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000747 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000748 },
749
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000750 {
751 .vendor = "Atmel",
752 .name = "AT26DF161A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000753 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000754 .manufacture_id = ATMEL_ID,
755 .model_id = AT_26DF161A,
756 .total_size = 2048,
757 .page_size = 256,
758 .tested = TEST_UNTESTED,
759 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000760 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000761 .block_erasers =
762 {
763 {
764 .eraseblocks = { {4 * 1024, 512} },
765 .block_erase = spi_block_erase_20,
766 }, {
767 .eraseblocks = { {32 * 1024, 64} },
768 .block_erase = spi_block_erase_52,
769 }, {
770 .eraseblocks = { {64 * 1024, 32} },
771 .block_erase = spi_block_erase_d8,
772 }, {
773 .eraseblocks = { {2 * 1024 * 1024, 1} },
774 .block_erase = spi_block_erase_60,
775 }, {
776 .eraseblocks = { {2 * 1024 * 1024, 1} },
777 .block_erase = spi_block_erase_c7,
778 }
779 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +0000780 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000781 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000782 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000783 },
784
785 /*The AT26DF321 has the same ID as the AT25DF321. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000786 /*{
787 .vendor = "Atmel",
788 .name = "AT26DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000789 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000790 .manufacture_id = ATMEL_ID,
791 .model_id = AT_26DF321,
792 .total_size = 4096,
793 .page_size = 256,
794 .tested = TEST_UNTESTED,
795 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000796 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +0000797 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000798 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000799 .read = spi_chip_read,
800 },*/
FENG yu ningff692fb2008-12-08 18:15:10 +0000801
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000802 {
803 .vendor = "Atmel",
804 .name = "AT26F004",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000805 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000806 .manufacture_id = ATMEL_ID,
807 .model_id = AT_26F004,
808 .total_size = 512,
809 .page_size = 256,
810 .tested = TEST_UNTESTED,
811 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000812 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000813 .block_erasers =
814 {
815 {
816 .eraseblocks = { {4 * 1024, 128} },
817 .block_erase = spi_block_erase_20,
818 }, {
819 .eraseblocks = { {32 * 1024, 16} },
820 .block_erase = spi_block_erase_52,
821 }, {
822 .eraseblocks = { {64 * 1024, 8} },
823 .block_erase = spi_block_erase_d8,
824 }, {
825 .eraseblocks = { {512 * 1024, 1} },
826 .block_erase = spi_block_erase_60,
827 }, {
828 .eraseblocks = { {512 * 1024, 1} },
829 .block_erase = spi_block_erase_c7,
830 }
831 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000832 .write = NULL /* Incompatible Page write */,
833 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000834 },
835
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000836 {
837 .vendor = "Atmel",
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000838 .name = "AT29C512",
Urja Rannikko038a3122009-06-28 19:19:25 +0000839 .bustype = CHIP_BUSTYPE_PARALLEL,
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000840 .manufacture_id = ATMEL_ID,
841 .model_id = AT_29C512,
842 .total_size = 64,
843 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +0000844 .feature_bits = FEATURE_LONG_RESET,
845 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +0000846 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000847 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +0000848 .block_erasers =
849 {
850 {
851 .eraseblocks = { {64 * 1024, 1} },
852 .block_erase = erase_chip_block_jedec,
853 }
854 },
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000855 .write = write_jedec,
856 .read = read_memmapped,
857
858 },
859
860 {
861 .vendor = "Atmel",
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000862 .name = "AT29C010A",
Urja Rannikko161b8852009-06-05 08:47:37 +0000863 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000864 .manufacture_id = ATMEL_ID,
865 .model_id = AT_29C010A,
866 .total_size = 128,
867 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +0000868 .feature_bits = FEATURE_LONG_RESET,
Michael Karcher98eff462010-03-24 22:55:56 +0000869 .tested = TEST_OK_PREW,
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000870 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000871 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +0000872 .block_erasers =
873 {
874 {
875 .eraseblocks = { {128 * 1024, 1} },
876 .block_erase = erase_chip_block_jedec,
877 }
878 },
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000879 .write = write_jedec, /* FIXME */
880 .read = read_memmapped,
881 },
882
883 {
884 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000885 .name = "AT29C020",
Urja Rannikko161b8852009-06-05 08:47:37 +0000886 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000887 .manufacture_id = ATMEL_ID,
888 .model_id = AT_29C020,
889 .total_size = 256,
890 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +0000891 .feature_bits = FEATURE_LONG_RESET,
892 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000893 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +0000894 .probe_timing = 10000, /* 10ms */
Sean Nelson89187292009-12-23 12:02:55 +0000895 .block_erasers =
896 {
897 {
898 .eraseblocks = { {256 * 1024, 1} },
899 .block_erase = erase_chip_block_jedec,
900 }
901 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000902 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000903 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000904 },
905
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000906 {
907 .vendor = "Atmel",
908 .name = "AT29C040A",
Urja Rannikko161b8852009-06-05 08:47:37 +0000909 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000910 .manufacture_id = ATMEL_ID,
911 .model_id = AT_29C040A,
912 .total_size = 512,
913 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +0000914 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000915 .tested = TEST_UNTESTED,
916 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +0000917 .probe_timing = 10000, /* 10 ms */
Sean Nelson89187292009-12-23 12:02:55 +0000918 .block_erasers =
919 {
920 {
921 .eraseblocks = { {512 * 1024, 1} },
922 .block_erase = erase_chip_block_jedec,
923 }
924 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000925 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000926 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000927 },
928
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000929 {
930 .vendor = "Atmel",
931 .name = "AT45CS1282",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000932 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000933 .manufacture_id = ATMEL_ID,
934 .model_id = AT_45CS1282,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000935 .total_size = 16896 /* No power of two sizes */,
936 .page_size = 1056 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000937 .tested = TEST_BAD_READ,
938 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000939 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000940 .write = NULL /* Incompatible Page write */,
941 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000942 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000943
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000944 {
945 .vendor = "Atmel",
946 .name = "AT45DB011D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000947 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000948 .manufacture_id = ATMEL_ID,
949 .model_id = AT_45DB011D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000950 .total_size = 128 /* Size can only be determined from status register */,
951 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000952 .tested = TEST_BAD_READ,
953 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000954 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000955 .write = NULL,
956 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000957 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000958
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000959 {
960 .vendor = "Atmel",
961 .name = "AT45DB021D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000962 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000963 .manufacture_id = ATMEL_ID,
964 .model_id = AT_45DB021D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000965 .total_size = 256 /* Size can only be determined from status register */,
966 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000967 .tested = TEST_BAD_READ,
968 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000969 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000970 .write = NULL,
971 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000972 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000973
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000974 {
975 .vendor = "Atmel",
976 .name = "AT45DB041D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000977 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000978 .manufacture_id = ATMEL_ID,
979 .model_id = AT_45DB041D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000980 .total_size = 512 /* Size can only be determined from status register */,
981 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000982 .tested = TEST_BAD_READ,
983 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000984 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000985 .write = NULL,
986 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000987 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000988
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000989 {
990 .vendor = "Atmel",
991 .name = "AT45DB081D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000992 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000993 .manufacture_id = ATMEL_ID,
994 .model_id = AT_45DB081D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000995 .total_size = 1024 /* Size can only be determined from status register */,
996 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000997 .tested = TEST_BAD_READ,
998 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000999 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001000 .write = NULL,
1001 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001002 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001003
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001004 {
1005 .vendor = "Atmel",
1006 .name = "AT45DB161D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001007 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001008 .manufacture_id = ATMEL_ID,
1009 .model_id = AT_45DB161D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001010 .total_size = 2048 /* Size can only be determined from status register */,
1011 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001012 .tested = TEST_BAD_READ,
1013 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001014 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001015 .write = NULL,
1016 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001017 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001018
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001019 {
1020 .vendor = "Atmel",
1021 .name = "AT45DB321C",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001022 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001023 .manufacture_id = ATMEL_ID,
1024 .model_id = AT_45DB321C,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001025 .total_size = 4224 /* No power of two sizes */,
1026 .page_size = 528 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001027 .tested = TEST_BAD_READ,
1028 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001029 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001030 .write = NULL,
1031 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001032 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001033
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001034 {
1035 .vendor = "Atmel",
1036 .name = "AT45DB321D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001037 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001038 .manufacture_id = ATMEL_ID,
1039 .model_id = AT_45DB321D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001040 .total_size = 4096 /* Size can only be determined from status register */,
1041 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001042 .tested = TEST_BAD_READ,
1043 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001044 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001045 .write = NULL,
1046 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001047 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001048
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001049 {
1050 .vendor = "Atmel",
1051 .name = "AT45DB642D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001052 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001053 .manufacture_id = ATMEL_ID,
1054 .model_id = AT_45DB642D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001055 .total_size = 8192 /* Size can only be determined from status register */,
1056 .page_size = 1024 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001057 .tested = TEST_BAD_READ,
1058 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001059 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001060 .write = NULL,
1061 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001062 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001063
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001064 {
1065 .vendor = "Atmel",
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001066 .name = "AT49BV512",
Urja Rannikko161b8852009-06-05 08:47:37 +00001067 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001068 .manufacture_id = ATMEL_ID,
1069 .model_id = AT_49BV512,
1070 .total_size = 64,
1071 .page_size = 64,
Sean Nelson35727f72010-01-28 23:55:12 +00001072 .feature_bits = FEATURE_EITHER_RESET,
1073 .tested = TEST_UNTESTED,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001074 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001075 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001076 .block_erasers =
1077 {
1078 {
1079 .eraseblocks = { {64 * 1024, 1} },
1080 .block_erase = erase_chip_block_jedec,
1081 }
1082 },
Sean Nelson35727f72010-01-28 23:55:12 +00001083 .write = write_jedec_1,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001084 .read = read_memmapped,
1085 },
1086
1087 {
1088 .vendor = "Atmel",
Andrew Morgan1a5eaa12010-06-07 14:10:55 +00001089 .name = "AT49F020",
1090 .bustype = CHIP_BUSTYPE_PARALLEL,
1091 .manufacture_id = ATMEL_ID,
1092 .model_id = AT_49F020,
1093 .total_size = 256,
1094 .page_size = 256,
1095 .feature_bits = FEATURE_EITHER_RESET,
1096 .tested = TEST_OK_PREW,
1097 .probe = probe_jedec,
1098 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
1099 .block_erasers =
1100 {
1101 {
1102 .eraseblocks = { {256 * 1024, 1} },
1103 .block_erase = erase_chip_block_jedec,
1104 }
1105 },
1106 .write = write_jedec_1,
1107 .read = read_memmapped,
1108 },
1109
1110 {
1111 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001112 .name = "AT49F002(N)",
Urja Rannikko161b8852009-06-05 08:47:37 +00001113 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001114 .manufacture_id = ATMEL_ID,
1115 .model_id = AT_49F002N,
1116 .total_size = 256,
1117 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001118 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001119 .tested = TEST_UNTESTED,
1120 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001121 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001122 .block_erasers =
1123 {
1124 {
1125 .eraseblocks = {
1126 {16 * 1024, 1},
1127 {8 * 1024, 2},
1128 {96 * 1024, 1},
1129 {128 * 1024, 1},
1130 },
1131 .block_erase = erase_sector_jedec,
1132 }, {
1133 .eraseblocks = { {256 * 1024, 1} },
1134 .block_erase = erase_chip_block_jedec,
1135 }
1136 },
Sean Nelson35727f72010-01-28 23:55:12 +00001137 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001138 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001139 },
1140
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001141 {
1142 .vendor = "Atmel",
1143 .name = "AT49F002(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00001144 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001145 .manufacture_id = ATMEL_ID,
1146 .model_id = AT_49F002NT,
1147 .total_size = 256,
1148 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001149 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00001150 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001151 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001152 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001153 .block_erasers =
1154 {
1155 {
1156 .eraseblocks = {
1157 {128 * 1024, 1},
1158 {96 * 1024, 1},
1159 {8 * 1024, 2},
1160 {16 * 1024, 1},
1161 },
1162 .block_erase = erase_sector_jedec,
1163 }, {
1164 .eraseblocks = { {256 * 1024, 1} },
1165 .block_erase = erase_chip_block_jedec,
1166 }
1167 },
Sean Nelson35727f72010-01-28 23:55:12 +00001168 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001169 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001170 },
1171
Daniel Lenskidf90d3a2010-07-22 11:44:38 +00001172 {
1173 .vendor = "AMIC",
1174 .name = "A25L05PT",
1175 .bustype = CHIP_BUSTYPE_SPI,
1176 .manufacture_id = AMIC_ID,
1177 .model_id = AMIC_A25L05PT,
1178 .total_size = 64,
1179 .page_size = 256,
1180 .tested = TEST_UNTESTED,
1181 .probe = probe_spi_rdid4,
1182 .probe_timing = TIMING_ZERO,
1183 .block_erasers =
1184 {
1185 {
1186 .eraseblocks = {
1187 {32 * 1024, 1},
1188 {16 * 1024, 1},
1189 {8 * 1024, 1},
1190 {4 * 1024, 2},
1191 },
1192 .block_erase = spi_block_erase_d8,
1193 }, {
1194 .eraseblocks = { {64 * 1024, 1} },
1195 .block_erase = spi_block_erase_c7,
1196 }
1197 },
1198 .unlock = spi_disable_blockprotect,
1199 .write = spi_chip_write_256,
1200 .read = spi_chip_read,
1201 },
1202
1203 {
1204 .vendor = "AMIC",
1205 .name = "A25L05PU",
1206 .bustype = CHIP_BUSTYPE_SPI,
1207 .manufacture_id = AMIC_ID,
1208 .model_id = AMIC_A25L05PU,
1209 .total_size = 64,
1210 .page_size = 256,
1211 .tested = TEST_UNTESTED,
1212 .probe = probe_spi_rdid4,
1213 .probe_timing = TIMING_ZERO,
1214 .block_erasers =
1215 {
1216 {
1217 .eraseblocks = {
1218 {4 * 1024, 2},
1219 {8 * 1024, 1},
1220 {16 * 1024, 1},
1221 {32 * 1024, 1},
1222 },
1223 .block_erase = spi_block_erase_d8,
1224 }, {
1225 .eraseblocks = { {64 * 1024, 1} },
1226 .block_erase = spi_block_erase_c7,
1227 }
1228 },
1229 .unlock = spi_disable_blockprotect,
1230 .write = spi_chip_write_256,
1231 .read = spi_chip_read,
1232 },
1233
1234 {
1235 .vendor = "AMIC",
1236 .name = "A25L10PT",
1237 .bustype = CHIP_BUSTYPE_SPI,
1238 .manufacture_id = AMIC_ID,
1239 .model_id = AMIC_A25L10PT,
1240 .total_size = 128,
1241 .page_size = 256,
1242 .tested = TEST_UNTESTED,
1243 .probe = probe_spi_rdid4,
1244 .probe_timing = TIMING_ZERO,
1245 .block_erasers =
1246 {
1247 {
1248 .eraseblocks = {
1249 {64 * 1024, 1},
1250 {32 * 1024, 1},
1251 {16 * 1024, 1},
1252 {8 * 1024, 1},
1253 {4 * 1024, 2},
1254 },
1255 .block_erase = spi_block_erase_d8,
1256 }, {
1257 .eraseblocks = { {128 * 1024, 1} },
1258 .block_erase = spi_block_erase_c7,
1259 }
1260 },
1261 .unlock = spi_disable_blockprotect,
1262 .write = spi_chip_write_256,
1263 .read = spi_chip_read,
1264 },
1265
1266 {
1267 .vendor = "AMIC",
1268 .name = "A25L10PU",
1269 .bustype = CHIP_BUSTYPE_SPI,
1270 .manufacture_id = AMIC_ID,
1271 .model_id = AMIC_A25L10PU,
1272 .total_size = 128,
1273 .page_size = 256,
1274 .tested = TEST_UNTESTED,
1275 .probe = probe_spi_rdid4,
1276 .probe_timing = TIMING_ZERO,
1277 .block_erasers =
1278 {
1279 {
1280 .eraseblocks = {
1281 {4 * 1024, 2},
1282 {8 * 1024, 1},
1283 {16 * 1024, 1},
1284 {32 * 1024, 1},
1285 {64 * 1024, 1},
1286 },
1287 .block_erase = spi_block_erase_d8,
1288 }, {
1289 .eraseblocks = { {128 * 1024, 1} },
1290 .block_erase = spi_block_erase_c7,
1291 }
1292 },
1293 .unlock = spi_disable_blockprotect,
1294 .write = spi_chip_write_256,
1295 .read = spi_chip_read,
1296 },
1297
1298 {
1299 .vendor = "AMIC",
1300 .name = "A25L20PT",
1301 .bustype = CHIP_BUSTYPE_SPI,
1302 .manufacture_id = AMIC_ID,
1303 .model_id = AMIC_A25L20PT,
1304 .total_size = 256,
1305 .page_size = 256,
1306 .tested = TEST_UNTESTED,
1307 .probe = probe_spi_rdid4,
1308 .probe_timing = TIMING_ZERO,
1309 .block_erasers =
1310 {
1311 {
1312 .eraseblocks = {
1313 {64 * 1024, 3},
1314 {32 * 1024, 1},
1315 {16 * 1024, 1},
1316 {8 * 1024, 1},
1317 {4 * 1024, 2},
1318 },
1319 .block_erase = spi_block_erase_d8,
1320 }, {
1321 .eraseblocks = { {256 * 1024, 1} },
1322 .block_erase = spi_block_erase_c7,
1323 }
1324 },
1325 .unlock = spi_disable_blockprotect,
1326 .write = spi_chip_write_256,
1327 .read = spi_chip_read,
1328 },
1329
1330 {
1331 .vendor = "AMIC",
1332 .name = "A25L20PU",
1333 .bustype = CHIP_BUSTYPE_SPI,
1334 .manufacture_id = AMIC_ID,
1335 .model_id = AMIC_A25L20PU,
1336 .total_size = 256,
1337 .page_size = 256,
1338 .tested = TEST_UNTESTED,
1339 .probe = probe_spi_rdid4,
1340 .probe_timing = TIMING_ZERO,
1341 .block_erasers =
1342 {
1343 {
1344 .eraseblocks = {
1345 {4 * 1024, 2},
1346 {8 * 1024, 1},
1347 {16 * 1024, 1},
1348 {32 * 1024, 1},
1349 {64 * 1024, 3},
1350 },
1351 .block_erase = spi_block_erase_d8,
1352 }, {
1353 .eraseblocks = { {256 * 1024, 1} },
1354 .block_erase = spi_block_erase_c7,
1355 }
1356 },
1357 .unlock = spi_disable_blockprotect,
1358 .write = spi_chip_write_256,
1359 .read = spi_chip_read,
1360 },
1361
1362 /* The A25L40P{T,U} chips are distinguished by their
1363 * erase block layouts, but without any distinction in RDID.
1364 * This inexplicable quirk was verified by Rudolf Marek
1365 * and discussed on the flashrom mailing list on 2010-07-12.
1366 */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001367 {
1368 .vendor = "AMIC",
Sean Nelson54596372010-01-09 05:30:14 +00001369 .name = "A25L40PT",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001370 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001371 .manufacture_id = AMIC_ID,
Daniel Lenskidf90d3a2010-07-22 11:44:38 +00001372 .model_id = AMIC_A25L40PT,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001373 .total_size = 512,
1374 .page_size = 256,
Sean Nelson54596372010-01-09 05:30:14 +00001375 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001376 .probe = probe_spi_rdid4,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001377 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001378 .block_erasers =
1379 {
1380 {
1381 .eraseblocks = {
1382 {64 * 1024, 7},
1383 {32 * 1024, 1},
1384 {16 * 1024, 1},
1385 {8 * 1024, 1},
1386 {4 * 1024, 2},
1387 },
1388 .block_erase = spi_block_erase_d8,
1389 }, {
Sean Nelson2aff7aa2010-01-18 08:24:02 +00001390 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson54596372010-01-09 05:30:14 +00001391 .block_erase = spi_block_erase_c7,
1392 }
1393 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001394 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00001395 .write = spi_chip_write_256,
1396 .read = spi_chip_read,
1397 },
1398
1399 {
1400 .vendor = "AMIC",
1401 .name = "A25L40PU",
1402 .bustype = CHIP_BUSTYPE_SPI,
1403 .manufacture_id = AMIC_ID,
Daniel Lenskidf90d3a2010-07-22 11:44:38 +00001404 .model_id = AMIC_A25L40PU,
Sean Nelson54596372010-01-09 05:30:14 +00001405 .total_size = 512,
1406 .page_size = 256,
1407 .tested = TEST_OK_PRW,
1408 .probe = probe_spi_rdid4,
1409 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001410 .block_erasers =
1411 {
1412 {
1413 .eraseblocks = {
1414 {4 * 1024, 2},
1415 {8 * 1024, 1},
1416 {16 * 1024, 1},
1417 {32 * 1024, 1},
1418 {64 * 1024, 7},
1419 },
1420 .block_erase = spi_block_erase_d8,
1421 }, {
Sean Nelson2aff7aa2010-01-18 08:24:02 +00001422 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson54596372010-01-09 05:30:14 +00001423 .block_erase = spi_block_erase_c7,
1424 }
1425 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001426 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001427 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001428 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001429 },
1430
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001431 {
1432 .vendor = "AMIC",
Daniel Lenski550f5c82010-07-11 21:33:31 +00001433 .name = "A25L80P",
1434 .bustype = CHIP_BUSTYPE_SPI,
1435 .manufacture_id = AMIC_ID,
1436 .model_id = AMIC_A25L80P,
1437 .total_size = 1024,
1438 .page_size = 256,
1439 .tested = TEST_OK_PREW,
1440 .probe = probe_spi_rdid4,
1441 .probe_timing = TIMING_ZERO,
1442 .block_erasers =
1443 {
1444 {
1445 .eraseblocks = {
1446 {4 * 1024, 2},
1447 {8 * 1024, 1},
1448 {16 * 1024, 1},
1449 {32 * 1024, 1},
1450 {64 * 1024, 15},
1451 },
1452 .block_erase = spi_block_erase_d8,
1453 }, {
1454 .eraseblocks = { {1024 * 1024, 1} },
1455 .block_erase = spi_block_erase_c7,
1456 }
1457 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001458 .unlock = spi_disable_blockprotect,
Daniel Lenski550f5c82010-07-11 21:33:31 +00001459 .write = spi_chip_write_256,
1460 .read = spi_chip_read,
1461 },
1462
1463 {
1464 .vendor = "AMIC",
Daniel Lenskidf90d3a2010-07-22 11:44:38 +00001465 .name = "A25L16PT",
1466 .bustype = CHIP_BUSTYPE_SPI,
1467 .manufacture_id = AMIC_ID,
1468 .model_id = AMIC_A25L16PT,
1469 .total_size = 2048,
1470 .page_size = 256,
1471 .tested = TEST_UNTESTED,
1472 .probe = probe_spi_rdid4,
1473 .probe_timing = TIMING_ZERO,
1474 .block_erasers =
1475 {
1476 {
1477 .eraseblocks = {
1478 {64 * 1024, 31},
1479 {32 * 1024, 1},
1480 {16 * 1024, 1},
1481 {8 * 1024, 1},
1482 {4 * 1024, 2},
1483 },
1484 .block_erase = spi_block_erase_d8,
1485 }, {
1486 .eraseblocks = { {2048 * 1024, 1} },
1487 .block_erase = spi_block_erase_60,
1488 }, {
1489 .eraseblocks = { {2048 * 1024, 1} },
1490 .block_erase = spi_block_erase_c7,
1491 }
1492 },
1493 .unlock = spi_disable_blockprotect,
1494 .write = spi_chip_write_256,
1495 .read = spi_chip_read,
1496 },
1497
1498 {
1499 .vendor = "AMIC",
1500 .name = "A25L16PU",
1501 .bustype = CHIP_BUSTYPE_SPI,
1502 .manufacture_id = AMIC_ID,
1503 .model_id = AMIC_A25L16PU,
1504 .total_size = 2048,
1505 .page_size = 256,
1506 .tested = TEST_OK_PRW,
1507 .probe = probe_spi_rdid4,
1508 .probe_timing = TIMING_ZERO,
1509 .block_erasers =
1510 {
1511 {
1512 .eraseblocks = {
1513 {4 * 1024, 2},
1514 {8 * 1024, 1},
1515 {16 * 1024, 1},
1516 {32 * 1024, 1},
1517 {64 * 1024, 31},
1518 },
1519 .block_erase = spi_block_erase_d8,
1520 }, {
1521 .eraseblocks = { {2048 * 1024, 1} },
1522 .block_erase = spi_block_erase_60,
1523 }, {
1524 .eraseblocks = { {2048 * 1024, 1} },
1525 .block_erase = spi_block_erase_c7,
1526 }
1527 },
1528 .unlock = spi_disable_blockprotect,
1529 .write = spi_chip_write_256,
1530 .read = spi_chip_read,
1531 },
1532
1533 {
1534 .vendor = "AMIC",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001535 .name = "A29002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00001536 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001537 .manufacture_id = AMIC_ID_NOPREFIX,
1538 .model_id = AMIC_A29002B,
1539 .total_size = 256,
1540 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001541 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001542 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00001543 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001544 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001545 .block_erasers =
1546 {
1547 {
1548 .eraseblocks = {
1549 {16 * 1024, 1},
1550 {8 * 1024, 2},
1551 {32 * 1024, 1},
1552 {64 * 1024, 3},
1553 },
Sean Nelson35727f72010-01-28 23:55:12 +00001554 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001555 }, {
1556 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00001557 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001558 },
1559 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00001560 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001561 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001562 },
1563
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001564 {
1565 .vendor = "AMIC",
1566 .name = "A29002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00001567 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001568 .manufacture_id = AMIC_ID_NOPREFIX,
1569 .model_id = AMIC_A29002T,
1570 .total_size = 256,
1571 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001572 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00001573 .tested = TEST_OK_PRW,
Sean Nelson35727f72010-01-28 23:55:12 +00001574 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001575 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001576 .block_erasers =
1577 {
1578 {
1579 .eraseblocks = {
1580 {64 * 1024, 3},
1581 {32 * 1024, 1},
1582 {8 * 1024, 2},
1583 {16 * 1024, 1},
1584 },
Sean Nelson35727f72010-01-28 23:55:12 +00001585 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001586 }, {
1587 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00001588 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001589 },
1590 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00001591 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001592 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001593 },
1594
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001595 {
1596 .vendor = "AMIC",
1597 .name = "A29040B",
Urja Rannikko161b8852009-06-05 08:47:37 +00001598 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001599 .manufacture_id = AMIC_ID_NOPREFIX,
1600 .model_id = AMIC_A29040B,
1601 .total_size = 512,
1602 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001603 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
1604 .tested = TEST_UNTESTED,
1605 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001606 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +00001607 .block_erasers =
1608 {
1609 {
1610 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +00001611 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00001612 }, {
1613 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00001614 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00001615 },
1616 },
Sean Nelson35727f72010-01-28 23:55:12 +00001617 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001618 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001619 },
1620
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001621 {
1622 .vendor = "AMIC",
1623 .name = "A49LF040A",
Urja Rannikko161b8852009-06-05 08:47:37 +00001624 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001625 .manufacture_id = AMIC_ID_NOPREFIX,
1626 .model_id = AMIC_A49LF040A,
1627 .total_size = 512,
1628 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001629 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00001630 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00001631 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001632 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson54596372010-01-09 05:30:14 +00001633 .block_erasers =
1634 {
1635 {
1636 .eraseblocks = { {64 * 1024, 8} },
1637 .block_erase = erase_block_jedec,
1638 }, {
1639 .eraseblocks = { {512 * 1024, 1} },
1640 .block_erase = erase_chip_block_jedec,
1641 }
1642 },
Sean Nelson36172342010-02-27 18:01:15 +00001643 .unlock = unlock_49fl00x,
1644 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001645 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001646 },
1647
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001648 {
1649 .vendor = "EMST",
1650 .name = "F49B002UA",
Urja Rannikko161b8852009-06-05 08:47:37 +00001651 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001652 .manufacture_id = EMST_ID,
1653 .model_id = EMST_F49B002UA,
1654 .total_size = 256,
1655 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00001656 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001657 .tested = TEST_UNTESTED,
1658 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001659 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00001660 .block_erasers =
1661 {
1662 {
1663 .eraseblocks = {
1664 {128 * 1024, 1},
1665 {96 * 1024, 1},
1666 {8 * 1024, 2},
1667 {16 * 1024, 1},
1668 },
1669 .block_erase = erase_sector_jedec,
1670 }, {
1671 .eraseblocks = { {256 * 1024, 1} },
1672 .block_erase = erase_chip_block_jedec,
1673 }
1674 },
Sean Nelson35727f72010-01-28 23:55:12 +00001675 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001676 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001677 },
1678
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001679 {
Michael Karcher80a59ea2010-06-19 22:06:35 +00001680 .vendor = "EMST",
1681 .name = "F25L008A",
1682 .bustype = CHIP_BUSTYPE_SPI,
1683 .manufacture_id = EMST_ID,
1684 .model_id = EMST_F25L008A,
1685 .total_size = 1024,
1686 .page_size = 256,
1687 .tested = TEST_UNTESTED,
1688 .probe = probe_spi_rdid,
1689 .probe_timing = TIMING_ZERO,
1690 .block_erasers =
1691 {
1692 {
1693 .eraseblocks = { {4 * 1024, 256} },
1694 .block_erase = spi_block_erase_20,
1695 }, {
1696 .eraseblocks = { {64 * 1024, 16} },
1697 .block_erase = spi_block_erase_d8,
1698 }, {
1699 .eraseblocks = { {1024 * 1024, 1} },
1700 .block_erase = spi_block_erase_60,
1701 }, {
1702 .eraseblocks = { {1024 * 1024, 1} },
1703 .block_erase = spi_block_erase_c7,
1704 }
1705 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001706 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger9a795d82010-07-14 16:19:05 +00001707 .write = spi_chip_write_1,
Michael Karcher4497e862010-07-10 19:34:15 +00001708 .read = spi_chip_read,
Michael Karcher80a59ea2010-06-19 22:06:35 +00001709 },
1710
1711 {
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001712 .vendor = "Eon",
1713 .name = "EN25B05",
1714 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001715 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001716 .model_id = EN_25B05,
1717 .total_size = 64,
1718 .page_size = 256,
1719 .tested = TEST_UNTESTED,
1720 .probe = probe_spi_rdid,
1721 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001722 .block_erasers =
1723 {
1724 {
1725 .eraseblocks = {
1726 {4 * 1024, 2},
1727 {8 * 1024, 1},
1728 {16 * 1024, 1},
1729 {32 * 1024, 1},
1730 },
1731 .block_erase = spi_block_erase_d8,
1732 }, {
1733 .eraseblocks = { {64 * 1024, 1} },
1734 .block_erase = spi_block_erase_c7,
1735 }
1736 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001737 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00001738 .write = spi_chip_write_256,
1739 .read = spi_chip_read,
1740 },
1741
1742 {
1743 .vendor = "Eon",
1744 .name = "EN25B05T",
1745 .bustype = CHIP_BUSTYPE_SPI,
1746 .manufacture_id = EON_ID_NOPREFIX,
1747 .model_id = EN_25B05,
1748 .total_size = 64,
1749 .page_size = 256,
1750 .tested = TEST_UNTESTED,
1751 .probe = probe_spi_rdid,
1752 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001753 .block_erasers =
1754 {
1755 {
1756 .eraseblocks = {
1757 {32 * 1024, 1},
1758 {16 * 1024, 1},
1759 {8 * 1024, 1},
1760 {4 * 1024, 2},
1761 },
1762 .block_erase = spi_block_erase_d8,
1763 }, {
1764 .eraseblocks = { {64 * 1024, 1} },
1765 .block_erase = spi_block_erase_c7,
1766 }
1767 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001768 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001769 .write = spi_chip_write_256,
1770 .read = spi_chip_read,
1771 },
1772
1773 {
1774 .vendor = "Eon",
1775 .name = "EN25B10",
1776 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001777 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001778 .model_id = EN_25B10,
1779 .total_size = 128,
1780 .page_size = 256,
1781 .tested = TEST_UNTESTED,
1782 .probe = probe_spi_rdid,
1783 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001784 .block_erasers =
1785 {
1786 {
1787 .eraseblocks = {
1788 {4 * 1024, 2},
1789 {8 * 1024, 1},
1790 {16 * 1024, 1},
1791 {32 * 1024, 3},
1792 },
1793 .block_erase = spi_block_erase_d8,
1794 }, {
1795 .eraseblocks = { {128 * 1024, 1} },
1796 .block_erase = spi_block_erase_c7,
1797 }
1798 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001799 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00001800 .write = spi_chip_write_256,
1801 .read = spi_chip_read,
1802 },
1803
1804 {
1805 .vendor = "Eon",
1806 .name = "EN25B10T",
1807 .bustype = CHIP_BUSTYPE_SPI,
1808 .manufacture_id = EON_ID_NOPREFIX,
1809 .model_id = EN_25B10,
1810 .total_size = 128,
1811 .page_size = 256,
1812 .tested = TEST_UNTESTED,
1813 .probe = probe_spi_rdid,
1814 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001815 .block_erasers =
1816 {
1817 {
1818 .eraseblocks = {
1819 {32 * 1024, 3},
1820 {16 * 1024, 1},
1821 {8 * 1024, 1},
1822 {4 * 1024, 2},
1823 },
1824 .block_erase = spi_block_erase_d8,
1825 }, {
1826 .eraseblocks = { {128 * 1024, 1} },
1827 .block_erase = spi_block_erase_c7,
1828 }
1829 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001830 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001831 .write = spi_chip_write_256,
1832 .read = spi_chip_read,
1833 },
1834
1835 {
1836 .vendor = "Eon",
1837 .name = "EN25B20",
1838 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001839 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001840 .model_id = EN_25B20,
1841 .total_size = 256,
1842 .page_size = 256,
1843 .tested = TEST_UNTESTED,
1844 .probe = probe_spi_rdid,
1845 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001846 .block_erasers =
1847 {
1848 {
1849 .eraseblocks = {
1850 {4 * 1024, 2},
1851 {8 * 1024, 1},
1852 {16 * 1024, 1},
1853 {32 * 1024, 1},
1854 {64 * 1024, 3}
1855 },
1856 .block_erase = spi_block_erase_d8,
1857 }, {
1858 .eraseblocks = { {256 * 1024, 1} },
1859 .block_erase = spi_block_erase_c7,
1860 }
1861 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001862 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00001863 .write = spi_chip_write_256,
1864 .read = spi_chip_read,
1865 },
1866
1867 {
1868 .vendor = "Eon",
1869 .name = "EN25B20T",
1870 .bustype = CHIP_BUSTYPE_SPI,
1871 .manufacture_id = EON_ID_NOPREFIX,
1872 .model_id = EN_25B20,
1873 .total_size = 256,
1874 .page_size = 256,
1875 .tested = TEST_UNTESTED,
1876 .probe = probe_spi_rdid,
1877 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001878 .block_erasers =
1879 {
1880 {
1881 .eraseblocks = {
1882 {64 * 1024, 3},
1883 {32 * 1024, 1},
1884 {16 * 1024, 1},
1885 {8 * 1024, 1},
1886 {4 * 1024, 2},
1887 },
1888 .block_erase = spi_block_erase_d8,
1889 }, {
1890 .eraseblocks = { {256 * 1024, 1} },
1891 .block_erase = spi_block_erase_c7,
1892 }
1893 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001894 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001895 .write = spi_chip_write_256,
1896 .read = spi_chip_read,
1897 },
1898
1899 {
1900 .vendor = "Eon",
1901 .name = "EN25B40",
1902 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001903 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001904 .model_id = EN_25B40,
1905 .total_size = 512,
1906 .page_size = 256,
1907 .tested = TEST_UNTESTED,
1908 .probe = probe_spi_rdid,
1909 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001910 .block_erasers =
1911 {
1912 {
1913 .eraseblocks = {
1914 {4 * 1024, 2},
1915 {8 * 1024, 1},
1916 {16 * 1024, 1},
1917 {32 * 1024, 1},
1918 {64 * 1024, 7}
1919 },
1920 .block_erase = spi_block_erase_d8,
1921 }, {
1922 .eraseblocks = { {512 * 1024, 1} },
1923 .block_erase = spi_block_erase_c7,
1924 }
1925 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001926 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00001927 .write = spi_chip_write_256,
1928 .read = spi_chip_read,
1929 },
1930
1931 {
1932 .vendor = "Eon",
1933 .name = "EN25B40T",
1934 .bustype = CHIP_BUSTYPE_SPI,
1935 .manufacture_id = EON_ID_NOPREFIX,
1936 .model_id = EN_25B40,
1937 .total_size = 512,
1938 .page_size = 256,
1939 .tested = TEST_UNTESTED,
1940 .probe = probe_spi_rdid,
1941 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001942 .block_erasers =
1943 {
1944 {
1945 .eraseblocks = {
1946 {64 * 1024, 7},
1947 {32 * 1024, 1},
1948 {16 * 1024, 1},
1949 {8 * 1024, 1},
1950 {4 * 1024, 2},
1951 },
1952 .block_erase = spi_block_erase_d8,
1953 }, {
1954 .eraseblocks = { {512 * 1024, 1} },
1955 .block_erase = spi_block_erase_c7,
1956 }
1957 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001958 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001959 .write = spi_chip_write_256,
1960 .read = spi_chip_read,
1961 },
1962
1963 {
1964 .vendor = "Eon",
1965 .name = "EN25B80",
1966 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001967 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001968 .model_id = EN_25B80,
1969 .total_size = 1024,
1970 .page_size = 256,
1971 .tested = TEST_UNTESTED,
1972 .probe = probe_spi_rdid,
1973 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001974 .block_erasers =
1975 {
1976 {
1977 .eraseblocks = {
1978 {4 * 1024, 2},
1979 {8 * 1024, 1},
1980 {16 * 1024, 1},
1981 {32 * 1024, 1},
1982 {64 * 1024, 15}
1983 },
1984 .block_erase = spi_block_erase_d8,
1985 }, {
1986 .eraseblocks = { {1024 * 1024, 1} },
1987 .block_erase = spi_block_erase_c7,
1988 }
1989 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001990 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00001991 .write = spi_chip_write_256,
1992 .read = spi_chip_read,
1993 },
1994
1995 {
1996 .vendor = "Eon",
1997 .name = "EN25B80T",
1998 .bustype = CHIP_BUSTYPE_SPI,
1999 .manufacture_id = EON_ID_NOPREFIX,
2000 .model_id = EN_25B80,
2001 .total_size = 1024,
2002 .page_size = 256,
2003 .tested = TEST_UNTESTED,
2004 .probe = probe_spi_rdid,
2005 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002006 .block_erasers =
2007 {
2008 {
2009 .eraseblocks = {
2010 {64 * 1024, 15},
2011 {32 * 1024, 1},
2012 {16 * 1024, 1},
2013 {8 * 1024, 1},
2014 {4 * 1024, 2},
2015 },
2016 .block_erase = spi_block_erase_d8,
2017 }, {
2018 .eraseblocks = { {1024 * 1024, 1} },
2019 .block_erase = spi_block_erase_c7,
2020 }
2021 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002022 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002023 .write = spi_chip_write_256,
2024 .read = spi_chip_read,
2025 },
2026
2027 {
2028 .vendor = "Eon",
2029 .name = "EN25B16",
2030 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002031 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002032 .model_id = EN_25B16,
2033 .total_size = 2048,
2034 .page_size = 256,
2035 .tested = TEST_UNTESTED,
2036 .probe = probe_spi_rdid,
2037 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002038 .block_erasers =
2039 {
2040 {
2041 .eraseblocks = {
2042 {4 * 1024, 2},
2043 {8 * 1024, 1},
2044 {16 * 1024, 1},
2045 {32 * 1024, 1},
2046 {64 * 1024, 31},
2047 },
2048 .block_erase = spi_block_erase_d8,
2049 }, {
2050 .eraseblocks = { {2 * 1024 * 1024, 1} },
2051 .block_erase = spi_block_erase_c7,
2052 }
2053 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002054 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002055 .write = spi_chip_write_256,
2056 .read = spi_chip_read,
2057 },
2058
2059 {
2060 .vendor = "Eon",
2061 .name = "EN25B16T",
2062 .bustype = CHIP_BUSTYPE_SPI,
2063 .manufacture_id = EON_ID_NOPREFIX,
2064 .model_id = EN_25B16,
2065 .total_size = 2048,
2066 .page_size = 256,
2067 .tested = TEST_UNTESTED,
2068 .probe = probe_spi_rdid,
2069 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002070 .block_erasers =
2071 {
2072 {
2073 .eraseblocks = {
2074 {64 * 1024, 31},
2075 {32 * 1024, 1},
2076 {16 * 1024, 1},
2077 {8 * 1024, 1},
2078 {4 * 1024, 2},
2079 },
2080 .block_erase = spi_block_erase_d8,
2081 }, {
2082 .eraseblocks = { {2 * 1024 * 1024, 1} },
2083 .block_erase = spi_block_erase_c7,
2084 }
2085 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002086 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002087 .write = spi_chip_write_256,
2088 .read = spi_chip_read,
2089 },
2090
2091 {
2092 .vendor = "Eon",
2093 .name = "EN25B32",
2094 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002095 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002096 .model_id = EN_25B32,
2097 .total_size = 4096,
2098 .page_size = 256,
2099 .tested = TEST_UNTESTED,
2100 .probe = probe_spi_rdid,
2101 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002102 .block_erasers =
2103 {
2104 {
2105 .eraseblocks = {
2106 {4 * 1024, 2},
2107 {8 * 1024, 1},
2108 {16 * 1024, 1},
2109 {32 * 1024, 1},
2110 {64 * 1024, 63},
2111 },
2112 .block_erase = spi_block_erase_d8,
2113 }, {
2114 .eraseblocks = { {4 * 1024 * 1024, 1} },
2115 .block_erase = spi_block_erase_c7,
2116 }
2117 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002118 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002119 .write = spi_chip_write_256,
2120 .read = spi_chip_read,
2121 },
2122
2123 {
2124 .vendor = "Eon",
2125 .name = "EN25B32T",
2126 .bustype = CHIP_BUSTYPE_SPI,
2127 .manufacture_id = EON_ID_NOPREFIX,
2128 .model_id = EN_25B32,
2129 .total_size = 4096,
2130 .page_size = 256,
2131 .tested = TEST_UNTESTED,
2132 .probe = probe_spi_rdid,
2133 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002134 .block_erasers =
2135 {
2136 {
2137 .eraseblocks = {
2138 {64 * 1024, 63},
2139 {32 * 1024, 1},
2140 {16 * 1024, 1},
2141 {8 * 1024, 1},
2142 {4 * 1024, 2},
2143 },
2144 .block_erase = spi_block_erase_d8,
2145 }, {
2146 .eraseblocks = { {4 * 1024 * 1024, 1} },
2147 .block_erase = spi_block_erase_c7,
2148 }
2149 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002150 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002151 .write = spi_chip_write_256,
2152 .read = spi_chip_read,
2153 },
2154
2155 {
2156 .vendor = "Eon",
2157 .name = "EN25B64",
2158 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002159 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002160 .model_id = EN_25B64,
2161 .total_size = 8192,
2162 .page_size = 256,
2163 .tested = TEST_UNTESTED,
2164 .probe = probe_spi_rdid,
2165 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002166 .block_erasers =
2167 {
2168 {
2169 .eraseblocks = {
2170 {4 * 1024, 2},
2171 {8 * 1024, 1},
2172 {16 * 1024, 1},
2173 {32 * 1024, 1},
2174 {64 * 1024, 127},
2175 },
2176 .block_erase = spi_block_erase_d8,
2177 }, {
2178 .eraseblocks = { {8 * 1024 * 1024, 1} },
2179 .block_erase = spi_block_erase_c7,
2180 }
2181 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002182 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00002183 .write = spi_chip_write_256,
2184 .read = spi_chip_read,
2185 },
2186
2187 {
2188 .vendor = "Eon",
2189 .name = "EN25B64T",
2190 .bustype = CHIP_BUSTYPE_SPI,
2191 .manufacture_id = EON_ID_NOPREFIX,
2192 .model_id = EN_25B64,
2193 .total_size = 8192,
2194 .page_size = 256,
2195 .tested = TEST_UNTESTED,
2196 .probe = probe_spi_rdid,
2197 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002198 .block_erasers =
2199 {
2200 {
2201 .eraseblocks = {
2202 {64 * 1024, 127},
2203 {32 * 1024, 1},
2204 {16 * 1024, 1},
2205 {8 * 1024, 1},
2206 {4 * 1024, 2},
2207 },
2208 .block_erase = spi_block_erase_d8,
2209 }, {
2210 .eraseblocks = { {8 * 1024 * 1024, 1} },
2211 .block_erase = spi_block_erase_c7,
2212 }
2213 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002214 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002215 .write = spi_chip_write_256,
2216 .read = spi_chip_read,
2217 },
2218
2219 {
2220 .vendor = "Eon",
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002221 .name = "EN25D16",
2222 .bustype = CHIP_BUSTYPE_SPI,
2223 .manufacture_id = EON_ID_NOPREFIX,
2224 .model_id = EN_25D16,
2225 .total_size = 2048,
2226 .page_size = 256,
2227 .tested = TEST_UNTESTED,
2228 .probe = probe_spi_rdid,
2229 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002230 .block_erasers =
2231 {
2232 {
2233 .eraseblocks = { {4 * 1024, 512} },
2234 .block_erase = spi_block_erase_20,
2235 }, {
2236 .eraseblocks = { {64 * 1024, 32} },
2237 .block_erase = spi_block_erase_d8,
2238 }, {
2239 .eraseblocks = { {64 * 1024, 32} },
2240 .block_erase = spi_block_erase_52,
2241 }, {
2242 .eraseblocks = { {2 * 1024 * 1024, 1} },
2243 .block_erase = spi_block_erase_60,
2244 }, {
2245 .eraseblocks = { {2 * 1024 * 1024, 1} },
2246 .block_erase = spi_block_erase_c7,
2247 }
2248 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002249 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002250 .write = spi_chip_write_256,
2251 .read = spi_chip_read,
2252 },
2253
2254 {
2255 .vendor = "Eon",
2256 .name = "EN25F05",
2257 .bustype = CHIP_BUSTYPE_SPI,
2258 .manufacture_id = EON_ID_NOPREFIX,
2259 .model_id = EN_25F05,
2260 .total_size = 64,
2261 .page_size = 256,
2262 .tested = TEST_UNTESTED,
2263 .probe = probe_spi_rdid,
2264 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002265 .block_erasers =
2266 {
2267 {
2268 .eraseblocks = { {4 * 1024, 16} },
2269 .block_erase = spi_block_erase_20,
2270 }, {
2271 .eraseblocks = { {32 * 1024, 2} },
2272 .block_erase = spi_block_erase_d8,
2273 }, {
2274 .eraseblocks = { {32 * 1024, 2} },
2275 .block_erase = spi_block_erase_52,
2276 }, {
2277 .eraseblocks = { {64 * 1024, 1} },
2278 .block_erase = spi_block_erase_60,
2279 }, {
2280 .eraseblocks = { {64 * 1024, 1} },
2281 .block_erase = spi_block_erase_c7,
2282 }
2283 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002284 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002285 .write = spi_chip_write_256,
2286 .read = spi_chip_read,
2287 },
2288
2289 {
2290 .vendor = "Eon",
2291 .name = "EN25F10",
2292 .bustype = CHIP_BUSTYPE_SPI,
2293 .manufacture_id = EON_ID_NOPREFIX,
2294 .model_id = EN_25F10,
2295 .total_size = 128,
2296 .page_size = 256,
2297 .tested = TEST_UNTESTED,
2298 .probe = probe_spi_rdid,
2299 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002300 .block_erasers =
2301 {
2302 {
2303 .eraseblocks = { {4 * 1024, 32} },
2304 .block_erase = spi_block_erase_20,
2305 }, {
2306 .eraseblocks = { {32 * 1024, 4} },
2307 .block_erase = spi_block_erase_d8,
2308 }, {
2309 .eraseblocks = { {32 * 1024, 4} },
2310 .block_erase = spi_block_erase_52,
2311 }, {
2312 .eraseblocks = { {128 * 1024, 1} },
2313 .block_erase = spi_block_erase_60,
2314 }, {
2315 .eraseblocks = { {128 * 1024, 1} },
2316 .block_erase = spi_block_erase_c7,
2317 }
2318 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002319 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002320 .write = spi_chip_write_256,
2321 .read = spi_chip_read,
2322 },
2323
2324 {
2325 .vendor = "Eon",
2326 .name = "EN25F20",
2327 .bustype = CHIP_BUSTYPE_SPI,
2328 .manufacture_id = EON_ID_NOPREFIX,
2329 .model_id = EN_25F20,
2330 .total_size = 256,
2331 .page_size = 256,
2332 .tested = TEST_UNTESTED,
2333 .probe = probe_spi_rdid,
2334 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002335 .block_erasers =
2336 {
2337 {
2338 .eraseblocks = { {4 * 1024, 64} },
2339 .block_erase = spi_block_erase_20,
2340 }, {
2341 .eraseblocks = { {64 * 1024, 4} },
2342 .block_erase = spi_block_erase_d8,
2343 }, {
2344 .eraseblocks = { {64 * 1024, 4} },
2345 .block_erase = spi_block_erase_52,
2346 }, {
2347 .eraseblocks = { {256 * 1024, 1} },
2348 .block_erase = spi_block_erase_60,
2349 }, {
2350 .eraseblocks = { {256 * 1024, 1} },
2351 .block_erase = spi_block_erase_c7,
2352 }
2353 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002354 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002355 .write = spi_chip_write_256,
2356 .read = spi_chip_read,
2357 },
2358
2359 {
2360 .vendor = "Eon",
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002361 .name = "EN25F40",
2362 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002363 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002364 .model_id = EN_25F40,
2365 .total_size = 512,
2366 .page_size = 256,
Carl-Daniel Hailfingerfaaa2b22009-06-22 10:06:28 +00002367 .tested = TEST_OK_PROBE,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002368 .probe = probe_spi_rdid,
2369 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002370 .block_erasers =
2371 {
2372 {
Sean Nelson54596372010-01-09 05:30:14 +00002373 .eraseblocks = { {4 * 1024, 128} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002374 .block_erase = spi_block_erase_20,
2375 }, {
Sean Nelson54596372010-01-09 05:30:14 +00002376 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002377 .block_erase = spi_block_erase_d8,
2378 }, {
Sean Nelson54596372010-01-09 05:30:14 +00002379 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002380 .block_erase = spi_block_erase_60,
2381 }, {
Sean Nelson54596372010-01-09 05:30:14 +00002382 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002383 .block_erase = spi_block_erase_c7,
2384 },
2385 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002386 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002387 .write = spi_chip_write_256,
2388 .read = spi_chip_read,
2389 },
2390
2391 {
2392 .vendor = "Eon",
2393 .name = "EN25F80",
2394 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002395 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002396 .model_id = EN_25F80,
2397 .total_size = 1024,
2398 .page_size = 256,
Uwe Hermannea5425b2010-05-30 17:00:19 +00002399 .tested = TEST_OK_PR,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002400 .probe = probe_spi_rdid,
2401 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002402 .block_erasers =
2403 {
2404 {
2405 .eraseblocks = { {4 * 1024, 256} },
2406 .block_erase = spi_block_erase_20,
2407 }, {
2408 .eraseblocks = { {64 * 1024, 16} },
2409 .block_erase = spi_block_erase_d8,
2410 }, {
2411 .eraseblocks = { {1024 * 1024, 1} },
2412 .block_erase = spi_block_erase_60,
2413 }, {
2414 .eraseblocks = { {1024 * 1024, 1} },
2415 .block_erase = spi_block_erase_c7,
2416 }
2417 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002418 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002419 .write = spi_chip_write_256,
2420 .read = spi_chip_read,
2421 },
2422
2423 {
2424 .vendor = "Eon",
2425 .name = "EN25F16",
2426 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002427 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002428 .model_id = EN_25F16,
2429 .total_size = 2048,
2430 .page_size = 256,
2431 .tested = TEST_UNTESTED,
2432 .probe = probe_spi_rdid,
2433 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002434 .block_erasers =
2435 {
2436 {
2437 .eraseblocks = { {4 * 1024, 512} },
2438 .block_erase = spi_block_erase_20,
2439 }, {
2440 .eraseblocks = { {64 * 1024, 32} },
2441 .block_erase = spi_block_erase_d8,
2442 }, {
2443 .eraseblocks = { {2 * 1024 * 1024, 1} },
2444 .block_erase = spi_block_erase_60,
2445 }, {
2446 .eraseblocks = { {2 * 1024 * 1024, 1} },
2447 .block_erase = spi_block_erase_c7,
2448 }
2449 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002450 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002451 .write = spi_chip_write_256,
2452 .read = spi_chip_read,
2453 },
2454
2455 {
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002456 .vendor = "Eon",
2457 .name = "EN25F32",
2458 .bustype = CHIP_BUSTYPE_SPI,
2459 .manufacture_id = EON_ID_NOPREFIX,
2460 .model_id = EN_25F32,
2461 .total_size = 4096,
2462 .page_size = 256,
2463 .tested = TEST_UNTESTED,
2464 .probe = probe_spi_rdid,
2465 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002466 .block_erasers =
2467 {
2468 {
2469 .eraseblocks = { {4 * 1024, 1024} },
2470 .block_erase = spi_block_erase_20,
2471 }, {
2472 .eraseblocks = { {64 * 1024, 64} },
2473 .block_erase = spi_block_erase_d8,
2474 }, {
2475 .eraseblocks = { {4 * 1024 * 1024, 1} },
2476 .block_erase = spi_block_erase_60,
2477 }, {
2478 .eraseblocks = { {4 * 1024 * 1024, 1} },
2479 .block_erase = spi_block_erase_c7,
2480 }
2481 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002482 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002483 .write = spi_chip_write_256,
2484 .read = spi_chip_read,
2485 },
2486
2487 {
Russ Dill3cd5a122010-03-05 08:44:11 +00002488 .vendor = "Eon",
2489 .name = "EN29F010",
2490 .bustype = CHIP_BUSTYPE_PARALLEL,
2491 .manufacture_id = EON_ID,
2492 .model_id = EN_29F010,
2493 .total_size = 128,
2494 .page_size = 128,
2495 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
2496 .tested = TEST_OK_PREW,
2497 .probe = probe_jedec,
2498 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2499 .block_erasers =
2500 {
2501 {
2502 .eraseblocks = { {16 * 1024, 8} },
2503 .block_erase = erase_sector_jedec,
2504 },
2505 {
2506 .eraseblocks = { {128 * 1024, 1} },
2507 .block_erase = erase_chip_block_jedec,
2508 },
2509 },
2510 .write = write_jedec_1,
2511 .read = read_memmapped,
2512 },
2513
2514 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002515 .vendor = "EON",
2516 .name = "EN29F002(A)(N)B",
Urja Rannikko161b8852009-06-05 08:47:37 +00002517 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002518 .manufacture_id = EON_ID,
2519 .model_id = EN_29F002B,
2520 .total_size = 256,
2521 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002522 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Michael Karcherb90c2212010-03-24 22:56:14 +00002523 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002524 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002525 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002526 .block_erasers =
2527 {
2528 {
2529 .eraseblocks = {
Sean Nelson6b11ad22009-12-23 17:05:59 +00002530 {16 * 1024, 1},
Michael Karchere3cb0a12010-03-13 23:47:09 +00002531 {8 * 1024, 2},
2532 {32 * 1024, 1},
2533 {64 * 1024, 3},
Sean Nelson6b11ad22009-12-23 17:05:59 +00002534 },
2535 .block_erase = erase_sector_jedec,
2536 }, {
2537 .eraseblocks = { {256 * 1024, 1} },
2538 .block_erase = erase_chip_block_jedec,
2539 },
2540 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002541 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002542 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002543 },
2544
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002545 {
2546 .vendor = "EON",
2547 .name = "EN29F002(A)(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00002548 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002549 .manufacture_id = EON_ID,
2550 .model_id = EN_29F002T,
2551 .total_size = 256,
2552 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002553 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00002554 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002555 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002556 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002557 .block_erasers =
2558 {
2559 {
2560 .eraseblocks = {
Sean Nelson6b11ad22009-12-23 17:05:59 +00002561 {64 * 1024, 3},
Michael Karchere3cb0a12010-03-13 23:47:09 +00002562 {32 * 1024, 1},
2563 {8 * 1024, 2},
2564 {16 * 1024, 1},
Sean Nelson6b11ad22009-12-23 17:05:59 +00002565 },
2566 .block_erase = erase_sector_jedec,
2567 }, {
2568 .eraseblocks = { {256 * 1024, 1} },
2569 .block_erase = erase_chip_block_jedec,
2570 },
2571 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002572 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002573 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002574 },
2575
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002576 {
2577 .vendor = "Fujitsu",
2578 .name = "MBM29F004BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002579 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002580 .manufacture_id = FUJITSU_ID,
2581 .model_id = MBM29F004BC,
2582 .total_size = 512,
2583 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002584 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002585 .tested = TEST_UNTESTED,
2586 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002587 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002588 .block_erasers =
2589 {
2590 {
2591 .eraseblocks = {
2592 {16 * 1024, 1},
2593 {8 * 1024, 2},
2594 {32 * 1024, 1},
2595 {64 * 1024, 7},
2596 },
Sean Nelson35727f72010-01-28 23:55:12 +00002597 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002598 }, {
2599 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002600 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002601 },
2602 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002603 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002604 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002605 },
2606
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002607 {
2608 .vendor = "Fujitsu",
2609 .name = "MBM29F004TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002610 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002611 .manufacture_id = FUJITSU_ID,
2612 .model_id = MBM29F004TC,
2613 .total_size = 512,
2614 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002615 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002616 .tested = TEST_UNTESTED,
2617 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002618 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002619 .block_erasers =
2620 {
2621 {
2622 .eraseblocks = {
2623 {64 * 1024, 7},
2624 {32 * 1024, 1},
2625 {8 * 1024, 2},
2626 {16 * 1024, 1},
2627 },
Sean Nelson35727f72010-01-28 23:55:12 +00002628 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002629 }, {
2630 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002631 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002632 },
2633 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002634 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002635 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002636 },
2637
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002638 {
Sean Nelson35727f72010-01-28 23:55:12 +00002639 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002640 .vendor = "Fujitsu",
2641 .name = "MBM29F400BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002642 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002643 .manufacture_id = FUJITSU_ID,
2644 .model_id = MBM29F400BC,
2645 .total_size = 512,
2646 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002647 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00002648 .tested = TEST_BAD_WRITE, /* Implicit eraseblock layout in write_m29f400bt is broken. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002649 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002650 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002651 .block_erasers =
2652 {
2653 {
2654 .eraseblocks = {
2655 {16 * 1024, 1},
2656 {8 * 1024, 2},
2657 {32 * 1024, 1},
2658 {64 * 1024, 7},
2659 },
2660 .block_erase = block_erase_m29f400bt,
2661 }, {
2662 .eraseblocks = { {512 * 1024, 1} },
2663 .block_erase = block_erase_chip_m29f400bt,
2664 },
2665 },
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00002666 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002667 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002668 },
2669
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002670 {
2671 .vendor = "Fujitsu",
2672 .name = "MBM29F400TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002673 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002674 .manufacture_id = FUJITSU_ID,
2675 .model_id = MBM29F400TC,
2676 .total_size = 512,
2677 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002678 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002679 .tested = TEST_UNTESTED,
2680 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002681 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002682 .block_erasers =
2683 {
2684 {
2685 .eraseblocks = {
2686 {64 * 1024, 7},
2687 {32 * 1024, 1},
2688 {8 * 1024, 2},
2689 {16 * 1024, 1},
2690 },
2691 .block_erase = block_erase_m29f400bt,
2692 }, {
2693 .eraseblocks = { {512 * 1024, 1} },
2694 .block_erase = block_erase_chip_m29f400bt,
2695 },
2696 },
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00002697 .write = write_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002698 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002699 },
2700
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002701 {
David Borgc96a8bd2010-06-21 16:12:22 +00002702 .vendor = "Hyundai",
2703 .name = "HY29F002T",
2704 .bustype = CHIP_BUSTYPE_PARALLEL,
2705 .manufacture_id = HYUNDAI_ID,
2706 .model_id = HY_29F002T,
2707 .total_size = 256,
2708 .page_size = 256 * 1024,
2709 .feature_bits = FEATURE_EITHER_RESET, /* Some revisions may need FEATURE_ADDR_2AA */
2710 .tested = TEST_OK_PREW,
2711 .probe = probe_jedec,
2712 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2713 .block_erasers =
2714 {
2715 {
2716 .eraseblocks = {
2717 {64 * 1024, 3},
2718 {32 * 1024, 1},
2719 {8 * 1024, 2},
2720 {16 * 1024, 1},
2721 },
2722 .block_erase = erase_sector_jedec,
2723 }, {
2724 .eraseblocks = { {256 * 1024, 1} },
2725 .block_erase = erase_chip_block_jedec,
2726 },
2727 },
2728 .write = write_jedec_1,
2729 .read = read_memmapped,
2730 },
2731
2732 {
2733 .vendor = "Hyundai",
2734 .name = "HY29F002B",
2735 .bustype = CHIP_BUSTYPE_PARALLEL,
2736 .manufacture_id = HYUNDAI_ID,
2737 .model_id = HY_29F002B,
2738 .total_size = 256,
2739 .page_size = 256 * 1024,
2740 .feature_bits = FEATURE_EITHER_RESET, /* Some revisions may need FEATURE_ADDR_2AA */
2741 .tested = TEST_UNTESTED,
2742 .probe = probe_jedec,
2743 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2744 .block_erasers =
2745 {
2746 {
2747 .eraseblocks = {
2748 {16 * 1024, 1},
2749 {8 * 1024, 2},
2750 {32 * 1024, 1},
2751 {64 * 1024, 3},
2752 },
2753 .block_erase = erase_sector_jedec,
2754 }, {
2755 .eraseblocks = { {256 * 1024, 1} },
2756 .block_erase = erase_chip_block_jedec,
2757 },
2758 },
2759 .write = write_jedec_1,
2760 .read = read_memmapped,
2761 },
2762
2763 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002764 .vendor = "Intel",
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002765 .name = "28F001BX-B",
Urja Rannikko161b8852009-06-05 08:47:37 +00002766 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002767 .manufacture_id = INTEL_ID,
2768 .model_id = P28F001BXB,
2769 .total_size = 128,
2770 .page_size = 128 * 1024, /* 8k + 2x4k + 112k */
Sean Nelsondee4a832010-03-22 04:39:31 +00002771 .tested = TEST_UNTESTED,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002772 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002773 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00002774 .block_erasers =
2775 {
2776 {
2777 .eraseblocks = {
2778 {8 * 1024, 1},
2779 {4 * 1024, 2},
2780 {112 * 1024, 1},
2781 },
Sean Nelson28accc22010-03-19 18:47:06 +00002782 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00002783 },
2784 },
Sean Nelsondee4a832010-03-22 04:39:31 +00002785 .write = write_82802ab,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002786 .read = read_memmapped,
2787 },
2788
2789 {
2790 .vendor = "Intel",
2791 .name = "28F001BX-T",
Urja Rannikko161b8852009-06-05 08:47:37 +00002792 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002793 .manufacture_id = INTEL_ID,
2794 .model_id = P28F001BXT,
2795 .total_size = 128,
2796 .page_size = 128 * 1024, /* 112k + 2x4k + 8k */
Sean Nelsondee4a832010-03-22 04:39:31 +00002797 .tested = TEST_UNTESTED,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002798 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002799 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00002800 .block_erasers =
2801 {
2802 {
2803 .eraseblocks = {
2804 {112 * 1024, 1},
2805 {4 * 1024, 2},
2806 {8 * 1024, 1},
2807 },
Sean Nelson28accc22010-03-19 18:47:06 +00002808 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00002809 },
2810 },
Sean Nelsondee4a832010-03-22 04:39:31 +00002811 .write = write_82802ab,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002812 .read = read_memmapped,
2813 },
2814
2815 {
2816 .vendor = "Intel",
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002817 .name = "28F004S5",
2818 .bustype = CHIP_BUSTYPE_PARALLEL,
2819 .manufacture_id = INTEL_ID,
2820 .model_id = E_28F004S5,
2821 .total_size = 512,
2822 .page_size = 256,
2823 .tested = TEST_UNTESTED,
2824 .probe = probe_82802ab,
2825 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002826 .block_erasers =
2827 {
2828 {
2829 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson28accc22010-03-19 18:47:06 +00002830 .block_erase = erase_block_82802ab,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002831 },
2832 },
Sean Nelsondee4a832010-03-22 04:39:31 +00002833 .unlock = unlock_28f004s5,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002834 .write = write_82802ab,
2835 .read = read_memmapped,
2836 },
2837
2838 {
2839 .vendor = "Intel",
Michael Karcherad0010a2010-04-03 10:27:08 +00002840 .name = "28F004BV/BE-B",
2841 .bustype = CHIP_BUSTYPE_PARALLEL,
2842 .manufacture_id = INTEL_ID,
2843 .model_id = P28F004BB,
2844 .total_size = 512,
2845 .page_size = 128 * 1024, /* maximal block size */
2846 .tested = TEST_UNTESTED,
2847 .probe = probe_82802ab,
2848 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2849 .block_erasers =
2850 {
2851 {
2852 .eraseblocks = {
2853 {16 * 1024, 1},
2854 {8 * 1024, 2},
2855 {96 * 1024, 1},
2856 {128 * 1024, 3},
2857 },
2858 .block_erase = erase_block_82802ab,
2859 },
2860 },
2861 .write = write_82802ab,
2862 .read = read_memmapped,
2863 },
2864
2865 {
2866 .vendor = "Intel",
2867 .name = "28F004BV/BE-T",
2868 .bustype = CHIP_BUSTYPE_PARALLEL,
2869 .manufacture_id = INTEL_ID,
2870 .model_id = P28F004BT,
2871 .total_size = 512,
2872 .page_size = 128 * 1024, /* maximal block size */
2873 .tested = TEST_UNTESTED,
2874 .probe = probe_82802ab,
2875 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2876 .block_erasers =
2877 {
2878 {
2879 .eraseblocks = {
2880 {128 * 1024, 3},
2881 {96 * 1024, 1},
2882 {8 * 1024, 2},
2883 {16 * 1024, 1},
2884 },
2885 .block_erase = erase_block_82802ab,
2886 },
2887 },
2888 .write = write_82802ab,
2889 .read = read_memmapped,
2890 },
2891
2892 {
2893 .vendor = "Intel",
2894 .name = "28F400BV/CV/CE-B",
2895 .bustype = CHIP_BUSTYPE_PARALLEL,
2896 .manufacture_id = INTEL_ID,
2897 .model_id = P28F400BB,
2898 .total_size = 512,
2899 .page_size = 128 * 1024, /* maximal block size */
2900 .feature_bits = FEATURE_ADDR_SHIFTED,
2901 .tested = TEST_UNTESTED,
2902 .probe = probe_82802ab,
2903 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2904 .block_erasers =
2905 {
2906 {
2907 .eraseblocks = {
2908 {16 * 1024, 1},
2909 {8 * 1024, 2},
2910 {96 * 1024, 1},
2911 {128 * 1024, 3},
2912 },
2913 .block_erase = erase_block_82802ab,
2914 },
2915 },
2916 .write = write_82802ab,
2917 .read = read_memmapped,
2918 },
2919
2920 {
2921 .vendor = "Intel",
2922 .name = "28F400BV/CV/CE-T",
2923 .bustype = CHIP_BUSTYPE_PARALLEL,
2924 .manufacture_id = INTEL_ID,
2925 .model_id = P28F400BT,
2926 .total_size = 512,
2927 .page_size = 128 * 1024, /* maximal block size */
2928 .feature_bits = FEATURE_ADDR_SHIFTED,
2929 .tested = TEST_UNTESTED,
2930 .probe = probe_82802ab,
2931 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2932 .block_erasers =
2933 {
2934 {
2935 .eraseblocks = {
2936 {128 * 1024, 3},
2937 {96 * 1024, 1},
2938 {8 * 1024, 2},
2939 {16 * 1024, 1},
2940 },
2941 .block_erase = erase_block_82802ab,
2942 },
2943 },
2944 .write = write_82802ab,
2945 .read = read_memmapped,
2946 },
2947
2948 {
2949 .vendor = "Intel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002950 .name = "82802AB",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002951 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002952 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002953 .model_id = I_82802AB,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002954 .total_size = 512,
2955 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00002956 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00002957 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002958 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002959 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002960 .block_erasers =
2961 {
2962 {
2963 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson28accc22010-03-19 18:47:06 +00002964 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00002965 },
2966 },
Sean Nelson28accc22010-03-19 18:47:06 +00002967 .unlock = unlock_82802ab,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002968 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002969 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002970 },
2971
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002972 {
2973 .vendor = "Intel",
2974 .name = "82802AC",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002975 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002976 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002977 .model_id = I_82802AC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002978 .total_size = 1024,
2979 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00002980 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00002981 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002982 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002983 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002984 .block_erasers =
2985 {
2986 {
2987 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson28accc22010-03-19 18:47:06 +00002988 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00002989 },
2990 },
Sean Nelson28accc22010-03-19 18:47:06 +00002991 .unlock = unlock_82802ab,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002992 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002993 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002994 },
2995
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002996 {
2997 .vendor = "Macronix",
2998 .name = "MX25L512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002999 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003000 .manufacture_id = MX_ID,
3001 .model_id = MX_25L512,
3002 .total_size = 64,
3003 .page_size = 256,
3004 .tested = TEST_UNTESTED,
3005 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003006 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003007 .block_erasers =
3008 {
3009 {
3010 .eraseblocks = { {4 * 1024, 16} },
3011 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003012 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003013 .eraseblocks = { {64 * 1024, 1} },
3014 .block_erase = spi_block_erase_52,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003015 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003016 .eraseblocks = { {64 * 1024, 1} },
3017 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003018 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003019 .eraseblocks = { {64 * 1024, 1} },
3020 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003021 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003022 .eraseblocks = { {64 * 1024, 1} },
3023 .block_erase = spi_block_erase_c7,
3024 },
3025 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003026 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003027 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003028 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003029 },
3030
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003031 {
3032 .vendor = "Macronix",
3033 .name = "MX25L1005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003034 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003035 .manufacture_id = MX_ID,
3036 .model_id = MX_25L1005,
3037 .total_size = 128,
3038 .page_size = 256,
3039 .tested = TEST_UNTESTED,
3040 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003041 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003042 .block_erasers =
3043 {
3044 {
3045 .eraseblocks = { {4 * 1024, 32} },
3046 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003047 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003048 .eraseblocks = { {64 * 1024, 2} },
3049 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003050 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003051 .eraseblocks = { {128 * 1024, 1} },
3052 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003053 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003054 .eraseblocks = { {128 * 1024, 1} },
3055 .block_erase = spi_block_erase_c7,
3056 },
3057 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003058 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003059 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003060 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003061 },
3062
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003063 {
3064 .vendor = "Macronix",
3065 .name = "MX25L2005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003066 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003067 .manufacture_id = MX_ID,
3068 .model_id = MX_25L2005,
3069 .total_size = 256,
3070 .page_size = 256,
3071 .tested = TEST_UNTESTED,
3072 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003073 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003074 .block_erasers =
3075 {
3076 {
3077 .eraseblocks = { {4 * 1024, 64} },
3078 .block_erase = spi_block_erase_20,
3079 }, {
3080 .eraseblocks = { {64 * 1024, 4} },
3081 .block_erase = spi_block_erase_52,
3082 }, {
3083 .eraseblocks = { {64 * 1024, 4} },
3084 .block_erase = spi_block_erase_d8,
3085 }, {
3086 .eraseblocks = { {256 * 1024, 1} },
3087 .block_erase = spi_block_erase_60,
3088 }, {
3089 .eraseblocks = { {256 * 1024, 1} },
3090 .block_erase = spi_block_erase_c7,
3091 },
3092 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003093 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003094 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003095 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003096 },
3097
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003098 {
3099 .vendor = "Macronix",
3100 .name = "MX25L4005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003101 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003102 .manufacture_id = MX_ID,
3103 .model_id = MX_25L4005,
3104 .total_size = 512,
3105 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003106 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003107 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003108 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003109 .block_erasers =
3110 {
3111 {
3112 .eraseblocks = { {4 * 1024, 128} },
3113 .block_erase = spi_block_erase_20,
3114 }, {
3115 .eraseblocks = { {64 * 1024, 8} },
3116 .block_erase = spi_block_erase_52,
3117 }, {
3118 .eraseblocks = { {64 * 1024, 8} },
3119 .block_erase = spi_block_erase_d8,
3120 }, {
3121 .eraseblocks = { {512 * 1024, 1} },
3122 .block_erase = spi_block_erase_60,
3123 }, {
3124 .eraseblocks = { {512 * 1024, 1} },
3125 .block_erase = spi_block_erase_c7,
3126 },
3127 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003128 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003129 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003130 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003131 },
3132
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003133 {
3134 .vendor = "Macronix",
3135 .name = "MX25L8005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003136 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003137 .manufacture_id = MX_ID,
3138 .model_id = MX_25L8005,
3139 .total_size = 1024,
3140 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003141 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003142 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003143 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003144 .block_erasers =
3145 {
3146 {
3147 .eraseblocks = { {4 * 1024, 256} },
3148 .block_erase = spi_block_erase_20,
3149 }, {
3150 .eraseblocks = { {64 * 1024, 16} },
3151 .block_erase = spi_block_erase_52,
3152 }, {
3153 .eraseblocks = { {64 * 1024, 16} },
3154 .block_erase = spi_block_erase_d8,
3155 }, {
3156 .eraseblocks = { {1024 * 1024, 1} },
3157 .block_erase = spi_block_erase_60,
3158 }, {
3159 .eraseblocks = { {1024 * 1024, 1} },
3160 .block_erase = spi_block_erase_c7,
3161 },
3162 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003163 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003164 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003165 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003166 },
3167
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003168 {
3169 .vendor = "Macronix",
3170 .name = "MX25L1605",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003171 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003172 .manufacture_id = MX_ID,
3173 .model_id = MX_25L1605,
3174 .total_size = 2048,
3175 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003176 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003177 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003178 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003179 .block_erasers =
3180 {
3181 {
3182 .eraseblocks = { {4 * 1024, 512} },
3183 .block_erase = spi_block_erase_20, /* This erase function has 64k blocksize for eLiteFlash */
3184 }, {
3185 .eraseblocks = { {64 * 1024, 32} }, /* Not supported in MX25L1605 (eLiteFlash) and MX25L1605D */
3186 .block_erase = spi_block_erase_52,
3187 }, {
3188 .eraseblocks = { {64 * 1024, 32} },
3189 .block_erase = spi_block_erase_d8,
3190 }, {
3191 .eraseblocks = { {2 * 1024 * 1024, 1} },
3192 .block_erase = spi_block_erase_60,
3193 }, {
3194 .eraseblocks = { {2 * 1024 * 1024, 1} },
3195 .block_erase = spi_block_erase_c7,
3196 },
3197 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003198 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003199 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003200 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003201 },
3202
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003203 {
3204 .vendor = "Macronix",
Stephan Guillouxf5c70902009-04-19 23:04:00 +00003205 .name = "MX25L1635D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003206 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00003207 .manufacture_id = MX_ID,
3208 .model_id = MX_25L1635D,
3209 .total_size = 2048,
3210 .page_size = 256,
3211 .tested = TEST_UNTESTED,
3212 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003213 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003214 .block_erasers =
3215 {
3216 {
3217 .eraseblocks = { {4 * 1024, 512} },
3218 .block_erase = spi_block_erase_20,
3219 }, {
3220 .eraseblocks = { {64 * 1024, 32} },
3221 .block_erase = spi_block_erase_d8,
3222 }, {
3223 .eraseblocks = { {2 * 1024 * 1024, 1} },
3224 .block_erase = spi_block_erase_60,
3225 }, {
3226 .eraseblocks = { {2 * 1024 * 1024, 1} },
3227 .block_erase = spi_block_erase_c7,
3228 }
3229 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003230 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003231 .write = spi_chip_write_256,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00003232 .read = spi_chip_read,
3233 },
Stephan Guillouxfd315502009-04-20 22:54:13 +00003234
Stephan Guillouxf5c70902009-04-19 23:04:00 +00003235 {
3236 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003237 .name = "MX25L3205",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003238 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003239 .manufacture_id = MX_ID,
3240 .model_id = MX_25L3205,
3241 .total_size = 4096,
3242 .page_size = 256,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003243 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003244 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003245 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003246 .block_erasers =
3247 {
3248 {
3249 .eraseblocks = { {4 * 1024, 1024} },
3250 .block_erase = spi_block_erase_20,
3251 }, {
3252 .eraseblocks = { {4 * 1024, 1024} },
3253 .block_erase = spi_block_erase_d8,
3254 }, {
3255 .eraseblocks = { {4 * 1024 * 1024, 1} },
3256 .block_erase = spi_block_erase_60,
3257 }, {
3258 .eraseblocks = { {4 * 1024 * 1024, 1} },
3259 .block_erase = spi_block_erase_c7,
3260 },
3261 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003262 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003263 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003264 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003265 },
3266
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003267 {
3268 .vendor = "Macronix",
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00003269 .name = "MX25L3235D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003270 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00003271 .manufacture_id = MX_ID,
3272 .model_id = MX_25L3235D,
3273 .total_size = 4096,
3274 .page_size = 256,
3275 .tested = TEST_UNTESTED,
3276 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003277 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003278 .block_erasers =
3279 {
3280 {
3281 .eraseblocks = { {4 * 1024, 1024} },
3282 .block_erase = spi_block_erase_20,
3283 }, {
3284 .eraseblocks = { {64 * 1024, 64} },
3285 .block_erase = spi_block_erase_d8,
3286 }, {
3287 .eraseblocks = { {4 * 1024 * 1024, 1} },
3288 .block_erase = spi_block_erase_60,
3289 }, {
3290 .eraseblocks = { {4 * 1024 * 1024, 1} },
3291 .block_erase = spi_block_erase_c7,
3292 }
3293 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003294 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003295 .write = spi_chip_write_256,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00003296 .read = spi_chip_read,
3297 },
3298
3299 {
3300 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003301 .name = "MX25L6405",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003302 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003303 .manufacture_id = MX_ID,
3304 .model_id = MX_25L6405,
3305 .total_size = 8192,
3306 .page_size = 256,
Carl-Daniel Hailfinger452b3e32009-06-22 11:14:43 +00003307 .tested = TEST_OK_PROBE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003308 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003309 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003310 .block_erasers =
3311 {
3312 {
3313 .eraseblocks = { {64 * 1024, 128} },
3314 .block_erase = spi_block_erase_20,
3315 }, {
3316 .eraseblocks = { {64 * 1024, 128} },
3317 .block_erase = spi_block_erase_d8,
3318 }, {
3319 .eraseblocks = { {8 * 1024 * 1024, 1} },
3320 .block_erase = spi_block_erase_60,
3321 }, {
3322 .eraseblocks = { {8 * 1024 * 1024, 1} },
3323 .block_erase = spi_block_erase_c7,
3324 }
3325 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003326 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003327 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003328 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003329 },
3330
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003331 {
3332 .vendor = "Macronix",
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00003333 .name = "MX25L12805",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003334 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00003335 .manufacture_id = MX_ID,
3336 .model_id = MX_25L12805,
3337 .total_size = 16384,
3338 .page_size = 256,
3339 .tested = TEST_UNTESTED,
3340 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003341 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003342 .block_erasers =
3343 {
3344 {
3345 .eraseblocks = { {4 * 1024, 4096} },
3346 .block_erase = spi_block_erase_20,
3347 }, {
3348 .eraseblocks = { {64 * 1024, 256} },
3349 .block_erase = spi_block_erase_d8,
3350 }, {
3351 .eraseblocks = { {16 * 1024 * 1024, 1} },
3352 .block_erase = spi_block_erase_60,
3353 }, {
3354 .eraseblocks = { {16 * 1024 * 1024, 1} },
3355 .block_erase = spi_block_erase_c7,
3356 }
3357 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003358 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003359 .write = spi_chip_write_256,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00003360 .read = spi_chip_read,
3361 },
3362
3363 {
3364 .vendor = "Macronix",
Mark Panajotovic502a9132009-08-24 01:42:24 +00003365 .name = "MX29F001B",
3366 .bustype = CHIP_BUSTYPE_PARALLEL,
3367 .manufacture_id = MX_ID,
3368 .model_id = MX_29F001B,
3369 .total_size = 128,
3370 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003371 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
3372 .tested = TEST_UNTESTED,
3373 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00003374 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00003375 .block_erasers =
3376 {
3377 {
3378 .eraseblocks = {
3379 {8 * 1024, 1},
3380 {4 * 1024, 2},
3381 {8 * 1024, 2},
3382 {32 * 1024, 1},
3383 {64 * 1024, 1},
3384 },
Sean Nelson35727f72010-01-28 23:55:12 +00003385 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003386 }, {
3387 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003388 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003389 }
3390 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003391 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00003392 .read = read_memmapped,
3393 },
3394
3395 {
3396 .vendor = "Macronix",
3397 .name = "MX29F001T",
3398 .bustype = CHIP_BUSTYPE_PARALLEL,
3399 .manufacture_id = MX_ID,
3400 .model_id = MX_29F001T,
3401 .total_size = 128,
3402 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003403 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
3404 .tested = TEST_UNTESTED,
3405 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00003406 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00003407 .block_erasers =
3408 {
3409 {
3410 .eraseblocks = {
3411 {64 * 1024, 1},
3412 {32 * 1024, 1},
3413 {8 * 1024, 2},
3414 {4 * 1024, 2},
3415 {8 * 1024, 1},
3416 },
Sean Nelson35727f72010-01-28 23:55:12 +00003417 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003418 }, {
3419 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003420 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003421 }
3422 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003423 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00003424 .read = read_memmapped,
3425 },
3426
3427 {
3428 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003429 .name = "MX29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00003430 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003431 .manufacture_id = MX_ID,
3432 .model_id = MX_29F002B,
3433 .total_size = 256,
3434 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003435 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003436 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00003437 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003438 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003439 .block_erasers =
3440 {
3441 {
3442 .eraseblocks = {
3443 {16 * 1024, 1},
3444 {8 * 1024, 2},
3445 {32 * 1024, 1},
3446 {64 * 1024, 3},
3447 },
Sean Nelson35727f72010-01-28 23:55:12 +00003448 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003449 }, {
3450 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003451 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003452 },
3453 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003454 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003455 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003456 },
3457
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003458 {
3459 .vendor = "Macronix",
3460 .name = "MX29F002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00003461 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003462 .manufacture_id = MX_ID,
3463 .model_id = MX_29F002T,
3464 .total_size = 256,
3465 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003466 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00003467 .tested = TEST_OK_PRW,
Sean Nelson35727f72010-01-28 23:55:12 +00003468 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003469 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003470 .block_erasers =
3471 {
3472 {
3473 .eraseblocks = {
3474 {64 * 1024, 3},
3475 {32 * 1024, 1},
3476 {8 * 1024, 2},
3477 {16 * 1024, 1},
3478 },
Sean Nelson35727f72010-01-28 23:55:12 +00003479 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003480 }, {
3481 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003482 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003483 },
3484 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003485 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003486 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003487 },
3488
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003489 {
3490 .vendor = "Macronix",
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00003491 .name = "MX29LV040",
Urja Rannikko038a3122009-06-28 19:19:25 +00003492 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003493 .manufacture_id = MX_ID,
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00003494 .model_id = MX_29LV040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003495 .total_size = 512,
3496 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003497 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
3498 .tested = TEST_UNTESTED,
3499 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003500 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00003501 .block_erasers =
3502 {
3503 {
3504 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00003505 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003506 }, {
3507 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003508 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003509 },
3510 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003511 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003512 .read = read_memmapped,
Carl-Daniel Hailfinger7de86392008-12-10 10:32:05 +00003513 },
3514
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003515 {
3516 .vendor = "Numonyx",
3517 .name = "M25PE10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003518 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003519 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003520 .model_id = ST_M25PE10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003521 .total_size = 128,
3522 .page_size = 256,
3523 .tested = TEST_UNTESTED,
3524 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003525 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003526 .block_erasers =
3527 {
3528 {
3529 .eraseblocks = { {4 * 1024, 32} },
3530 .block_erase = spi_block_erase_20,
3531 }, {
3532 .eraseblocks = { {64 * 1024, 2} },
3533 .block_erase = spi_block_erase_d8,
3534 }, {
3535 .eraseblocks = { {128 * 1024, 1} },
3536 .block_erase = spi_block_erase_c7,
3537 }
3538 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003539 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003540 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003541 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003542 },
3543
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003544 {
3545 .vendor = "Numonyx",
3546 .name = "M25PE20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003547 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003548 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003549 .model_id = ST_M25PE20,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003550 .total_size = 256,
3551 .page_size = 256,
3552 .tested = TEST_UNTESTED,
3553 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003554 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003555 .block_erasers =
3556 {
3557 {
3558 .eraseblocks = { {4 * 1024, 64} },
3559 .block_erase = spi_block_erase_20,
3560 }, {
3561 .eraseblocks = { {64 * 1024, 4} },
3562 .block_erase = spi_block_erase_d8,
3563 }, {
3564 .eraseblocks = { {256 * 1024, 1} },
3565 .block_erase = spi_block_erase_c7,
3566 }
3567 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003568 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003569 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003570 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003571 },
3572
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003573 {
3574 .vendor = "Numonyx",
3575 .name = "M25PE40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003576 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003577 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003578 .model_id = ST_M25PE40,
Sean Nelson5643c072010-01-19 03:23:07 +00003579 .total_size = 512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003580 .page_size = 256,
3581 .tested = TEST_UNTESTED,
3582 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003583 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003584 .block_erasers =
3585 {
3586 {
3587 .eraseblocks = { {4 * 1024, 128} },
3588 .block_erase = spi_block_erase_20,
3589 }, {
3590 .eraseblocks = { {64 * 1024, 8} },
3591 .block_erase = spi_block_erase_d8,
3592 }, {
3593 .eraseblocks = { {512 * 1024, 1} },
3594 .block_erase = spi_block_erase_c7,
3595 }
3596 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003597 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003598 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003599 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003600 },
3601
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003602 {
3603 .vendor = "Numonyx",
3604 .name = "M25PE80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003605 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003606 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003607 .model_id = ST_M25PE80,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003608 .total_size = 1024,
3609 .page_size = 256,
3610 .tested = TEST_OK_PREW,
3611 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003612 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003613 .block_erasers =
3614 {
3615 {
3616 .eraseblocks = { {4 * 1024, 256} },
3617 .block_erase = spi_block_erase_20,
3618 }, {
3619 .eraseblocks = { {64 * 1024, 16} },
3620 .block_erase = spi_block_erase_d8,
3621 }, {
3622 .eraseblocks = { {1024 * 1024, 1} },
3623 .block_erase = spi_block_erase_c7,
3624 }
3625 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003626 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003627 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003628 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003629 },
3630
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003631 {
3632 .vendor = "Numonyx",
3633 .name = "M25PE16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003634 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003635 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003636 .model_id = ST_M25PE16,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003637 .total_size = 2048,
3638 .page_size = 256,
3639 .tested = TEST_UNTESTED,
3640 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003641 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003642 .block_erasers =
3643 {
3644 {
3645 .eraseblocks = { {4 * 1024, 512} },
3646 .block_erase = spi_block_erase_20,
3647 }, {
3648 .eraseblocks = { {64 * 1024, 32} },
3649 .block_erase = spi_block_erase_d8,
3650 }, {
3651 .eraseblocks = { {2 * 1024 * 1024, 1} },
3652 .block_erase = spi_block_erase_c7,
3653 }
3654 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003655 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003656 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003657 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003658 },
3659
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003660 {
3661 .vendor = "PMC",
3662 .name = "Pm25LV010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003663 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003664 .manufacture_id = PMC_ID,
3665 .model_id = PMC_25LV010,
3666 .total_size = 128,
3667 .page_size = 256,
3668 .tested = TEST_UNTESTED,
3669 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003670 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003671 .block_erasers =
3672 {
3673 {
3674 .eraseblocks = { {4 * 1024, 32} },
3675 .block_erase = spi_block_erase_d7,
3676 }, {
3677 .eraseblocks = { {32 * 1024, 4} },
3678 .block_erase = spi_block_erase_d8,
3679 }, {
3680 .eraseblocks = { {128 * 1024, 1} },
3681 .block_erase = spi_block_erase_c7,
3682 }
3683 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003684 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003685 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003686 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003687 },
3688
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003689 {
3690 .vendor = "PMC",
3691 .name = "Pm25LV016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003692 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003693 .manufacture_id = PMC_ID,
3694 .model_id = PMC_25LV016B,
3695 .total_size = 2048,
3696 .page_size = 256,
3697 .tested = TEST_UNTESTED,
3698 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003699 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003700 .block_erasers =
3701 {
3702 {
3703 .eraseblocks = { {4 * 1024, 512} },
3704 .block_erase = spi_block_erase_d7,
3705 }, {
3706 .eraseblocks = { {4 * 1024, 512} },
3707 .block_erase = spi_block_erase_20,
3708 }, {
3709 .eraseblocks = { {64 * 1024, 32} },
3710 .block_erase = spi_block_erase_d8,
3711 }, {
3712 .eraseblocks = { {2 * 1024 * 1024, 1} },
3713 .block_erase = spi_block_erase_60,
3714 }, {
3715 .eraseblocks = { {2 * 1024 * 1024, 1} },
3716 .block_erase = spi_block_erase_c7,
3717 }
3718 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003719 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003720 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003721 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003722 },
3723
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003724 {
3725 .vendor = "PMC",
3726 .name = "Pm25LV020",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003727 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003728 .manufacture_id = PMC_ID,
3729 .model_id = PMC_25LV020,
3730 .total_size = 256,
3731 .page_size = 256,
3732 .tested = TEST_UNTESTED,
3733 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003734 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003735 .block_erasers =
3736 {
3737 {
3738 .eraseblocks = { {4 * 1024, 64} },
3739 .block_erase = spi_block_erase_d7,
3740 }, {
3741 .eraseblocks = { {64 * 1024, 4} },
3742 .block_erase = spi_block_erase_d8,
3743 }, {
3744 .eraseblocks = { {256 * 1024, 1} },
3745 .block_erase = spi_block_erase_c7,
3746 }
3747 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003748 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003749 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003750 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003751 },
3752
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003753 {
3754 .vendor = "PMC",
3755 .name = "Pm25LV040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003756 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003757 .manufacture_id = PMC_ID,
3758 .model_id = PMC_25LV040,
3759 .total_size = 512,
3760 .page_size = 256,
3761 .tested = TEST_UNTESTED,
3762 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003763 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003764 .block_erasers =
3765 {
3766 {
3767 .eraseblocks = { {4 * 1024, 128} },
3768 .block_erase = spi_block_erase_d7,
3769 }, {
3770 .eraseblocks = { {64 * 1024, 8} },
3771 .block_erase = spi_block_erase_d8,
3772 }, {
3773 .eraseblocks = { {512 * 1024, 1} },
3774 .block_erase = spi_block_erase_c7,
3775 }
3776 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003777 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003778 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003779 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003780 },
3781
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003782 {
3783 .vendor = "PMC",
3784 .name = "Pm25LV080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003785 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003786 .manufacture_id = PMC_ID,
3787 .model_id = PMC_25LV080B,
3788 .total_size = 1024,
3789 .page_size = 256,
3790 .tested = TEST_UNTESTED,
3791 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003792 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003793 .block_erasers =
3794 {
3795 {
3796 .eraseblocks = { {4 * 1024, 256} },
3797 .block_erase = spi_block_erase_d7,
3798 }, {
3799 .eraseblocks = { {4 * 1024, 256} },
3800 .block_erase = spi_block_erase_20,
3801 }, {
3802 .eraseblocks = { {64 * 1024, 16} },
3803 .block_erase = spi_block_erase_d8,
3804 }, {
3805 .eraseblocks = { {1024 * 1024, 1} },
3806 .block_erase = spi_block_erase_60,
3807 }, {
3808 .eraseblocks = { {1024 * 1024, 1} },
3809 .block_erase = spi_block_erase_c7,
3810 }
3811 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003812 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003813 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003814 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003815 },
3816
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003817 {
3818 .vendor = "PMC",
3819 .name = "Pm25LV512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003820 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003821 .manufacture_id = PMC_ID,
3822 .model_id = PMC_25LV512,
3823 .total_size = 64,
3824 .page_size = 256,
3825 .tested = TEST_UNTESTED,
3826 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003827 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003828 .block_erasers =
3829 {
3830 {
3831 .eraseblocks = { {4 * 1024, 16} },
3832 .block_erase = spi_block_erase_d7,
3833 }, {
3834 .eraseblocks = { {32 * 1024, 2} },
3835 .block_erase = spi_block_erase_d8,
3836 }, {
3837 .eraseblocks = { {64 * 1024, 1} },
3838 .block_erase = spi_block_erase_c7,
3839 }
3840 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003841 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003842 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003843 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003844 },
3845
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003846 {
3847 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00003848 .name = "Pm29F002T",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003849 .bustype = CHIP_BUSTYPE_PARALLEL,
3850 .manufacture_id = PMC_ID_NOPREFIX,
3851 .model_id = PMC_29F002T,
3852 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00003853 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003854 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3855 .tested = TEST_UNTESTED,
3856 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003857 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00003858 .block_erasers =
3859 {
3860 {
3861 .eraseblocks = {
3862 {128 * 1024, 1},
3863 {96 * 1024, 1},
3864 {8 * 1024, 2},
3865 {16 * 1024, 1},
3866 },
Sean Nelson35727f72010-01-28 23:55:12 +00003867 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003868 }, {
3869 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003870 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003871 },
3872 },
Sean Nelson35727f72010-01-28 23:55:12 +00003873 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003874 .read = read_memmapped,
3875 },
3876
3877 {
3878 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00003879 .name = "Pm29F002B",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003880 .bustype = CHIP_BUSTYPE_PARALLEL,
3881 .manufacture_id = PMC_ID_NOPREFIX,
3882 .model_id = PMC_29F002B,
3883 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00003884 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003885 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003886 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00003887 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003888 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00003889 .block_erasers =
3890 {
3891 {
3892 .eraseblocks = {
3893 {16 * 1024, 1},
3894 {8 * 1024, 2},
3895 {96 * 1024, 1},
3896 {128 * 1024, 1},
3897 },
Sean Nelson35727f72010-01-28 23:55:12 +00003898 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003899 }, {
3900 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003901 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003902 },
3903 },
Sean Nelson35727f72010-01-28 23:55:12 +00003904 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003905 .read = read_memmapped,
3906 },
3907
3908 {
3909 .vendor = "PMC",
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003910 .name = "Pm39LV010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003911 .bustype = CHIP_BUSTYPE_PARALLEL,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003912 .manufacture_id = PMC_ID_NOPREFIX,
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00003913 .model_id = PMC_39F010, /* Pm39LV010 and Pm39F010 have identical IDs but different voltage */
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003914 .total_size = 128,
3915 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003916 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00003917 .tested = TEST_OK_PREW,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003918 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003919 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson5643c072010-01-19 03:23:07 +00003920 .block_erasers =
3921 {
3922 {
3923 .eraseblocks = { {4 * 1024, 32} },
3924 .block_erase = erase_sector_jedec,
3925 }, {
3926 .eraseblocks = { {64 * 1024, 2} },
3927 .block_erase = erase_block_jedec,
3928 }, {
3929 .eraseblocks = { {128 * 1024, 1} },
3930 .block_erase = erase_chip_block_jedec,
3931 }
3932 },
Sean Nelson35727f72010-01-28 23:55:12 +00003933 .write = write_jedec_1,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003934 .read = read_memmapped,
3935 },
3936
3937 {
3938 .vendor = "PMC",
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00003939 .name = "Pm39LV020",
3940 .bustype = CHIP_BUSTYPE_PARALLEL,
3941 .manufacture_id = PMC_ID_NOPREFIX,
3942 .model_id = PMC_39LV020,
3943 .total_size = 256,
3944 .page_size = 4096,
3945 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3946 .tested = TEST_UNTESTED,
3947 .probe = probe_jedec,
3948 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3949 .block_erasers =
3950 {
3951 {
3952 .eraseblocks = { {4 * 1024, 64} },
3953 .block_erase = erase_sector_jedec,
3954 }, {
3955 .eraseblocks = { {64 * 1024, 4} },
3956 .block_erase = erase_block_jedec,
3957 }, {
3958 .eraseblocks = { {256 * 1024, 1} },
3959 .block_erase = erase_chip_block_jedec,
3960 }
3961 },
3962 .write = write_jedec_1,
3963 .read = read_memmapped,
3964 },
3965
3966 {
3967 .vendor = "PMC",
3968 .name = "Pm39LV040",
3969 .bustype = CHIP_BUSTYPE_PARALLEL,
3970 .manufacture_id = PMC_ID_NOPREFIX,
3971 .model_id = PMC_39LV040,
3972 .total_size = 512,
3973 .page_size = 4096,
3974 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3975 .tested = TEST_UNTESTED,
3976 .probe = probe_jedec,
3977 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3978 .block_erasers =
3979 {
3980 {
3981 .eraseblocks = { {4 * 1024, 128} },
3982 .block_erase = erase_sector_jedec,
3983 }, {
3984 .eraseblocks = { {64 * 1024, 8} },
3985 .block_erase = erase_block_jedec,
3986 }, {
3987 .eraseblocks = { {512 * 1024, 1} },
3988 .block_erase = erase_chip_block_jedec,
3989 }
3990 },
3991 .write = write_jedec_1,
3992 .read = read_memmapped,
3993 },
3994
3995 {
3996 .vendor = "PMC",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003997 .name = "Pm49FL002",
Sean Nelson35727f72010-01-28 23:55:12 +00003998 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003999 .manufacture_id = PMC_ID_NOPREFIX,
4000 .model_id = PMC_49FL002,
4001 .total_size = 256,
4002 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004003 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Russ Dill8c7c4682010-03-09 16:53:06 +00004004 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00004005 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004006 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00004007 .block_erasers =
4008 {
4009 {
4010 .eraseblocks = { {4 * 1024, 64} },
4011 .block_erase = erase_sector_jedec,
4012 }, {
4013 .eraseblocks = { {16 * 1024, 16} },
4014 .block_erase = erase_block_jedec,
4015 }, {
4016 .eraseblocks = { {256 * 1024, 1} },
4017 .block_erase = erase_chip_block_jedec,
4018 }
4019 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00004020 .unlock = unlock_49fl00x,
Sean Nelson36172342010-02-27 18:01:15 +00004021 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004022 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004023 },
4024
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004025 {
4026 .vendor = "PMC",
4027 .name = "Pm49FL004",
Sean Nelson35727f72010-01-28 23:55:12 +00004028 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004029 .manufacture_id = PMC_ID_NOPREFIX,
4030 .model_id = PMC_49FL004,
4031 .total_size = 512,
4032 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004033 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00004034 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00004035 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004036 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00004037 .block_erasers =
4038 {
4039 {
4040 .eraseblocks = { {4 * 1024, 128} },
4041 .block_erase = erase_sector_jedec,
4042 }, {
4043 .eraseblocks = { {64 * 1024, 8} },
4044 .block_erase = erase_block_jedec,
4045 }, {
4046 .eraseblocks = { {512 * 1024, 1} },
4047 .block_erase = erase_chip_block_jedec,
4048 }
4049 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00004050 .unlock = unlock_49fl00x,
Sean Nelson36172342010-02-27 18:01:15 +00004051 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004052 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004053 },
4054
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004055 {
Sean Nelsond70b09c2009-11-24 02:11:08 +00004056 .vendor = "Sanyo",
4057 .name = "LF25FW203A",
4058 .bustype = CHIP_BUSTYPE_SPI,
4059 .manufacture_id = SANYO_ID,
4060 .model_id = SANYO_LE25FW203A,
4061 .total_size = 2048,
4062 .page_size = 256,
4063 .tested = TEST_UNTESTED,
4064 .probe = probe_spi_rdid,
4065 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004066 .block_erasers =
4067 {
4068 {
4069 .eraseblocks = { {64 * 1024, 32} },
4070 .block_erase = spi_block_erase_d8,
4071 }, {
4072 .eraseblocks = { {2 * 1024 * 1024, 1} },
4073 .block_erase = spi_block_erase_c7,
4074 }
4075 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004076 .unlock = spi_disable_blockprotect,
Sean Nelsond70b09c2009-11-24 02:11:08 +00004077 .write = spi_chip_write_256,
4078 .read = spi_chip_read,
4079 },
4080
4081 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004082 .vendor = "Sharp",
4083 .name = "LHF00L04",
Urja Rannikko038a3122009-06-28 19:19:25 +00004084 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004085 .manufacture_id = SHARP_ID,
4086 .model_id = SHARP_LHF00L04,
4087 .total_size = 1024,
4088 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004089 .feature_bits = FEATURE_EITHER_RESET | FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004090 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004091 .probe = probe_82802ab,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00004092 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00004093 .block_erasers =
4094 {
4095 {
4096 .eraseblocks = {
4097 {64 * 1024, 15},
4098 {8 * 1024, 8}
4099 },
Sean Nelson28accc22010-03-19 18:47:06 +00004100 .block_erase = erase_block_82802ab,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00004101 }, {
4102 .eraseblocks = {
4103 {1024 * 1024, 1}
4104 },
Sean Nelson51c83fb2010-01-20 20:55:53 +00004105 .block_erase = NULL, /* 30 D0, only in A/A mux mode */
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00004106 },
4107 },
Sean Nelson28accc22010-03-19 18:47:06 +00004108 .unlock = unlock_82802ab,
4109 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004110 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004111 },
4112
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004113 {
4114 .vendor = "Spansion",
Michael Karcher23ff4602010-01-12 23:29:30 +00004115 .name = "S25FL008A",
4116 .bustype = CHIP_BUSTYPE_SPI,
4117 .manufacture_id = SPANSION_ID,
4118 .model_id = SPANSION_S25FL008A,
4119 .total_size = 1024,
4120 .page_size = 256,
4121 .tested = TEST_OK_PREW,
4122 .probe = probe_spi_rdid,
4123 .probe_timing = TIMING_ZERO,
Michael Karcher23ff4602010-01-12 23:29:30 +00004124 .block_erasers =
4125 {
4126 {
4127 .eraseblocks = { {64 * 1024, 16} },
4128 .block_erase = spi_block_erase_d8,
4129 }, {
4130 .eraseblocks = { {1024 * 1024, 1} },
4131 .block_erase = spi_block_erase_c7,
4132 }
4133 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004134 .unlock = spi_disable_blockprotect,
Michael Karcher23ff4602010-01-12 23:29:30 +00004135 .write = spi_chip_write_256,
4136 .read = spi_chip_read,
4137 },
4138
4139 {
4140 .vendor = "Spansion",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004141 .name = "S25FL016A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004142 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004143 .manufacture_id = SPANSION_ID,
4144 .model_id = SPANSION_S25FL016A,
4145 .total_size = 2048,
4146 .page_size = 256,
Sean Nelson5643c072010-01-19 03:23:07 +00004147 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004148 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004149 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004150 .block_erasers =
4151 {
4152 {
4153 .eraseblocks = { {64 * 1024, 32} },
4154 .block_erase = spi_block_erase_d8,
4155 }, {
4156 .eraseblocks = { {2 * 1024 * 1024, 1} },
4157 .block_erase = spi_block_erase_c7,
4158 }
4159 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004160 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004161 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004162 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004163 },
4164
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004165 {
4166 .vendor = "SST",
4167 .name = "SST25VF016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004168 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004169 .manufacture_id = SST_ID,
4170 .model_id = SST_25VF016B,
4171 .total_size = 2048,
4172 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004173 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004174 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004175 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004176 .block_erasers =
4177 {
4178 {
4179 .eraseblocks = { {4 * 1024, 512} },
4180 .block_erase = spi_block_erase_20,
4181 }, {
4182 .eraseblocks = { {32 * 1024, 64} },
4183 .block_erase = spi_block_erase_52,
4184 }, {
4185 .eraseblocks = { {64 * 1024, 32} },
4186 .block_erase = spi_block_erase_d8,
4187 }, {
4188 .eraseblocks = { {2 * 1024 * 1024, 1} },
4189 .block_erase = spi_block_erase_60,
4190 }, {
4191 .eraseblocks = { {2 * 1024 * 1024, 1} },
4192 .block_erase = spi_block_erase_c7,
4193 },
4194 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004195 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00004196 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004197 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004198 },
4199
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004200 {
4201 .vendor = "SST",
4202 .name = "SST25VF032B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004203 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004204 .manufacture_id = SST_ID,
4205 .model_id = SST_25VF032B,
4206 .total_size = 4096,
4207 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004208 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004209 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004210 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004211 .block_erasers =
4212 {
4213 {
4214 .eraseblocks = { {4 * 1024, 1024} },
4215 .block_erase = spi_block_erase_20,
4216 }, {
4217 .eraseblocks = { {32 * 1024, 128} },
4218 .block_erase = spi_block_erase_52,
4219 }, {
4220 .eraseblocks = { {64 * 1024, 64} },
4221 .block_erase = spi_block_erase_d8,
4222 }, {
4223 .eraseblocks = { {4 * 1024 * 1024, 1} },
4224 .block_erase = spi_block_erase_60,
4225 }, {
4226 .eraseblocks = { {4 * 1024 * 1024, 1} },
4227 .block_erase = spi_block_erase_c7,
4228 },
4229 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004230 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004231 .write = spi_chip_write_1,
4232 .read = spi_chip_read,
4233 },
4234
4235 {
4236 .vendor = "SST",
Ed Swierk86f4e6d2010-07-21 15:02:22 +00004237 .name = "SST25VF064C",
4238 .bustype = CHIP_BUSTYPE_SPI,
4239 .manufacture_id = SST_ID,
4240 .model_id = SST_25VF064C,
4241 .total_size = 8192,
4242 .page_size = 256,
4243 .tested = TEST_OK_PREW,
4244 .probe = probe_spi_rdid,
4245 .probe_timing = TIMING_ZERO,
4246 .block_erasers =
4247 {
4248 {
4249 .eraseblocks = { {4 * 1024, 2048} },
4250 .block_erase = spi_block_erase_20,
4251 }, {
4252 .eraseblocks = { {32 * 1024, 256} },
4253 .block_erase = spi_block_erase_52,
4254 }, {
4255 .eraseblocks = { {64 * 1024, 128} },
4256 .block_erase = spi_block_erase_d8,
4257 }, {
4258 .eraseblocks = { {8 * 1024 * 1024, 1} },
4259 .block_erase = spi_block_erase_60,
4260 }, {
4261 .eraseblocks = { {8 * 1024 * 1024, 1} },
4262 .block_erase = spi_block_erase_c7,
4263 },
4264 },
4265 .unlock = spi_disable_blockprotect,
4266 .write = spi_chip_write_1,
4267 .read = spi_chip_read,
4268 },
4269
4270 {
4271 .vendor = "SST",
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004272 .name = "SST25VF040.REMS",
4273 .bustype = CHIP_BUSTYPE_SPI,
4274 .manufacture_id = SST_ID,
4275 .model_id = SST_25VF040_REMS,
4276 .total_size = 512,
4277 .page_size = 256,
4278 .tested = TEST_OK_PR,
4279 .probe = probe_spi_rems,
4280 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004281 .block_erasers =
4282 {
4283 {
4284 .eraseblocks = { {4 * 1024, 128} },
4285 .block_erase = spi_block_erase_20,
4286 }, {
4287 .eraseblocks = { {32 * 1024, 16} },
4288 .block_erase = spi_block_erase_52,
4289 }, {
4290 .eraseblocks = { {512 * 1024, 1} },
4291 .block_erase = spi_block_erase_60,
4292 },
4293 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004294 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00004295 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004296 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004297 },
4298
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004299 {
4300 .vendor = "SST",
4301 .name = "SST25VF040B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004302 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004303 .manufacture_id = SST_ID,
4304 .model_id = SST_25VF040B,
4305 .total_size = 512,
4306 .page_size = 256,
4307 .tested = TEST_UNTESTED,
4308 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004309 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004310 .block_erasers =
4311 {
4312 {
4313 .eraseblocks = { {4 * 1024, 128} },
4314 .block_erase = spi_block_erase_20,
4315 }, {
4316 .eraseblocks = { {32 * 1024, 16} },
4317 .block_erase = spi_block_erase_52,
4318 }, {
4319 .eraseblocks = { {64 * 1024, 8} },
4320 .block_erase = spi_block_erase_d8,
4321 }, {
4322 .eraseblocks = { {512 * 1024, 1} },
4323 .block_erase = spi_block_erase_60,
4324 }, {
4325 .eraseblocks = { {512 * 1024, 1} },
4326 .block_erase = spi_block_erase_c7,
4327 },
4328 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004329 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00004330 .write = spi_chip_write_1,
Zheng Bao0677dff2009-02-25 08:07:33 +00004331 .read = spi_chip_read,
4332 },
4333
4334 {
4335 .vendor = "SST",
Stefan Reinauer5cacf8c2010-06-14 12:58:06 +00004336 .name = "SST25LF040A.RES",
4337 .bustype = CHIP_BUSTYPE_SPI,
4338 .manufacture_id = SST_ID,
4339 .model_id = SST_25VF040_REMS,
4340 .total_size = 512,
4341 .page_size = 256,
4342 .tested = TEST_OK_PROBE,
4343 .probe = probe_spi_res2,
4344 .probe_timing = TIMING_ZERO,
4345 .block_erasers =
4346 {
4347 {
4348 .eraseblocks = { {4 * 1024, 128} },
4349 .block_erase = spi_block_erase_20,
4350 }, {
4351 .eraseblocks = { {32 * 1024, 16} },
4352 .block_erase = spi_block_erase_52,
4353 }, {
4354 .eraseblocks = { {512 * 1024, 1} },
4355 .block_erase = spi_block_erase_60,
4356 },
4357 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004358 .unlock = spi_disable_blockprotect,
Stefan Reinauer5cacf8c2010-06-14 12:58:06 +00004359 .write = spi_chip_write_1,
4360 .read = spi_chip_read,
4361 },
4362
4363 {
4364 .vendor = "SST",
Peter Stugefd9217d2009-01-26 03:37:40 +00004365 .name = "SST25VF040B.REMS",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004366 .bustype = CHIP_BUSTYPE_SPI,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004367 .manufacture_id = SST_ID,
4368 .model_id = SST_25VF040B_REMS,
Peter Stugefd9217d2009-01-26 03:37:40 +00004369 .total_size = 512,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004370 .page_size = 256,
Peter Stugefd9217d2009-01-26 03:37:40 +00004371 .tested = TEST_OK_PR,
4372 .probe = probe_spi_rems,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004373 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004374 .block_erasers =
4375 {
4376 {
4377 .eraseblocks = { {4 * 1024, 128} },
4378 .block_erase = spi_block_erase_20,
4379 }, {
4380 .eraseblocks = { {32 * 1024, 16} },
4381 .block_erase = spi_block_erase_52,
4382 }, {
4383 .eraseblocks = { {64 * 1024, 8} },
4384 .block_erase = spi_block_erase_d8,
4385 }, {
4386 .eraseblocks = { {512 * 1024, 1} },
4387 .block_erase = spi_block_erase_60,
4388 }, {
4389 .eraseblocks = { {512 * 1024, 1} },
4390 .block_erase = spi_block_erase_c7,
4391 },
4392 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004393 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00004394 .write = spi_chip_write_1,
Peter Stugefd9217d2009-01-26 03:37:40 +00004395 .read = spi_chip_read,
4396 },
4397
4398 {
4399 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004400 .name = "SST25VF080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004401 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004402 .manufacture_id = SST_ID,
4403 .model_id = SST_25VF080B,
4404 .total_size = 1024,
4405 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004406 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004407 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004408 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004409 .block_erasers =
4410 {
4411 {
4412 .eraseblocks = { {4 * 1024, 256} },
4413 .block_erase = spi_block_erase_20,
4414 }, {
4415 .eraseblocks = { {32 * 1024, 32} },
4416 .block_erase = spi_block_erase_52,
4417 }, {
4418 .eraseblocks = { {64 * 1024, 16} },
4419 .block_erase = spi_block_erase_d8,
4420 }, {
4421 .eraseblocks = { {1024 * 1024, 1} },
4422 .block_erase = spi_block_erase_60,
4423 }, {
4424 .eraseblocks = { {1024 * 1024, 1} },
4425 .block_erase = spi_block_erase_c7,
4426 },
4427 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004428 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004429 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004430 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004431 },
4432
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004433 {
4434 .vendor = "SST",
4435 .name = "SST28SF040A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004436 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004437 .manufacture_id = SST_ID,
4438 .model_id = SST_28SF040,
4439 .total_size = 512,
4440 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00004441 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004442 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004443 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004444 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst28sf040.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004445 .block_erasers =
4446 {
4447 {
4448 .eraseblocks = { {128, 4096} },
4449 .block_erase = erase_sector_28sf040,
4450 }, {
4451 .eraseblocks = { {512 * 1024, 1} },
4452 .block_erase = erase_chip_28sf040,
4453 }
4454 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004455 .write = write_28sf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004456 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004457 },
4458
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004459 {
4460 .vendor = "SST",
4461 .name = "SST29EE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00004462 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004463 .manufacture_id = SST_ID,
4464 .model_id = SST_29EE010,
4465 .total_size = 128,
4466 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00004467 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00004468 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004469 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004470 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004471 .block_erasers =
4472 {
4473 {
4474 .eraseblocks = { {128 * 1024, 1} },
4475 .block_erase = erase_chip_block_jedec,
4476 }
4477 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004478 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004479 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004480 },
4481
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004482 {
4483 .vendor = "SST",
4484 .name = "SST29LE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00004485 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004486 .manufacture_id = SST_ID,
4487 .model_id = SST_29LE010,
4488 .total_size = 128,
4489 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00004490 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004491 .tested = TEST_UNTESTED,
4492 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004493 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004494 .block_erasers =
4495 {
4496 {
4497 .eraseblocks = { {128 * 1024, 1} },
4498 .block_erase = erase_chip_block_jedec,
4499 }
4500 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004501 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004502 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004503 },
4504
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004505 {
4506 .vendor = "SST",
4507 .name = "SST29EE020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004508 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004509 .manufacture_id = SST_ID,
4510 .model_id = SST_29EE020A,
4511 .total_size = 256,
4512 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00004513 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00004514 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004515 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004516 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004517 .block_erasers =
4518 {
4519 {
4520 .eraseblocks = { {256 * 1024, 1} },
4521 .block_erase = erase_chip_block_jedec,
4522 }
4523 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004524 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004525 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004526 },
4527
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004528 {
4529 .vendor = "SST",
4530 .name = "SST29LE020",
Urja Rannikko038a3122009-06-28 19:19:25 +00004531 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004532 .manufacture_id = SST_ID,
4533 .model_id = SST_29LE020,
4534 .total_size = 256,
4535 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00004536 .feature_bits = FEATURE_LONG_RESET,
Michael Karcher98eff462010-03-24 22:55:56 +00004537 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004538 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004539 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004540 .block_erasers =
4541 {
4542 {
4543 .eraseblocks = { {256 * 1024, 1} },
4544 .block_erase = erase_chip_block_jedec,
4545 }
4546 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004547 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004548 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004549 },
4550
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004551 {
4552 .vendor = "SST",
Uwe Hermann48da3f92010-01-23 15:15:19 +00004553 .name = "SST39SF512",
4554 .bustype = CHIP_BUSTYPE_PARALLEL,
4555 .manufacture_id = SST_ID,
4556 .model_id = SST_39SF512,
4557 .total_size = 64,
4558 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004559 .feature_bits = FEATURE_EITHER_RESET,
4560 .tested = TEST_UNTESTED,
Uwe Hermann48da3f92010-01-23 15:15:19 +00004561 .probe = probe_jedec,
4562 .probe_timing = 1, /* 150 ns */
Uwe Hermann48da3f92010-01-23 15:15:19 +00004563 .block_erasers =
4564 {
4565 {
4566 .eraseblocks = { {4 * 1024, 16} },
4567 .block_erase = erase_sector_jedec,
4568 }, {
4569 .eraseblocks = { {64 * 1024, 1} },
4570 .block_erase = erase_chip_block_jedec,
4571 }
4572 },
Sean Nelson35727f72010-01-28 23:55:12 +00004573 .write = write_jedec_1,
Uwe Hermann48da3f92010-01-23 15:15:19 +00004574 .read = read_memmapped,
4575 },
4576
4577 {
4578 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004579 .name = "SST39SF010A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004580 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004581 .manufacture_id = SST_ID,
4582 .model_id = SST_39SF010,
4583 .total_size = 128,
4584 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004585 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00004586 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004587 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004588 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004589 .block_erasers =
4590 {
4591 {
4592 .eraseblocks = { {4 * 1024, 32} },
4593 .block_erase = erase_sector_jedec,
4594 }, {
4595 .eraseblocks = { {128 * 1024, 1} },
4596 .block_erase = erase_chip_block_jedec,
4597 }
4598 },
Sean Nelson35727f72010-01-28 23:55:12 +00004599 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004600 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004601 },
4602
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004603 {
4604 .vendor = "SST",
4605 .name = "SST39SF020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004606 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004607 .manufacture_id = SST_ID,
4608 .model_id = SST_39SF020,
4609 .total_size = 256,
4610 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004611 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00004612 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004613 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004614 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004615 .block_erasers =
4616 {
4617 {
4618 .eraseblocks = { {4 * 1024, 64} },
4619 .block_erase = erase_sector_jedec,
4620 }, {
4621 .eraseblocks = { {256 * 1024, 1} },
4622 .block_erase = erase_chip_block_jedec,
4623 }
4624 },
Sean Nelson35727f72010-01-28 23:55:12 +00004625 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004626 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004627 },
4628
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004629 {
4630 .vendor = "SST",
4631 .name = "SST39SF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00004632 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004633 .manufacture_id = SST_ID,
4634 .model_id = SST_39SF040,
4635 .total_size = 512,
4636 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004637 .feature_bits = FEATURE_EITHER_RESET,
4638 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004639 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004640 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004641 .block_erasers =
4642 {
4643 {
4644 .eraseblocks = { {4 * 1024, 128} },
4645 .block_erase = erase_sector_jedec,
4646 }, {
4647 .eraseblocks = { {512 * 1024, 1} },
4648 .block_erase = erase_chip_block_jedec,
4649 }
4650 },
Sean Nelson35727f72010-01-28 23:55:12 +00004651 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004652 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004653 },
4654
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004655 {
4656 .vendor = "SST",
4657 .name = "SST39VF512",
Urja Rannikko038a3122009-06-28 19:19:25 +00004658 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004659 .manufacture_id = SST_ID,
4660 .model_id = SST_39VF512,
4661 .total_size = 64,
4662 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004663 .feature_bits = FEATURE_EITHER_RESET,
4664 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004665 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004666 .probe_timing = 1, /* 150 ns*/
Sean Nelson51c83fb2010-01-20 20:55:53 +00004667 .block_erasers =
4668 {
4669 {
4670 .eraseblocks = { {4 * 1024, 16} },
4671 .block_erase = erase_sector_jedec,
4672 }, {
4673 .eraseblocks = { {64 * 1024, 1} },
4674 .block_erase = erase_chip_block_jedec,
4675 }
4676 },
Sean Nelson35727f72010-01-28 23:55:12 +00004677 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004678 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004679 },
4680
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004681 {
4682 .vendor = "SST",
4683 .name = "SST39VF010",
Urja Rannikko038a3122009-06-28 19:19:25 +00004684 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004685 .manufacture_id = SST_ID,
4686 .model_id = SST_39VF010,
4687 .total_size = 128,
4688 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004689 .feature_bits = FEATURE_EITHER_RESET,
Guenter Knauf2bd007a2010-06-24 11:51:12 +00004690 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004691 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004692 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004693 .block_erasers =
4694 {
4695 {
4696 .eraseblocks = { {4 * 1024, 32} },
4697 .block_erase = erase_sector_jedec,
4698 }, {
4699 .eraseblocks = { {128 * 1024, 1} },
4700 .block_erase = erase_chip_block_jedec,
4701 }
4702 },
Sean Nelson35727f72010-01-28 23:55:12 +00004703 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004704 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004705 },
4706
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004707 {
4708 .vendor = "SST",
4709 .name = "SST39VF020",
Urja Rannikko038a3122009-06-28 19:19:25 +00004710 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004711 .manufacture_id = SST_ID,
4712 .model_id = SST_39VF020,
4713 .total_size = 256,
4714 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004715 .feature_bits = FEATURE_EITHER_RESET,
4716 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004717 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004718 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004719 .block_erasers =
4720 {
4721 {
4722 .eraseblocks = { {4 * 1024, 64} },
4723 .block_erase = erase_sector_jedec,
4724 }, {
4725 .eraseblocks = { {256 * 1024, 1} },
4726 .block_erase = erase_chip_block_jedec,
4727 }
4728 },
Sean Nelson35727f72010-01-28 23:55:12 +00004729 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004730 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004731 },
4732
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004733 {
4734 .vendor = "SST",
4735 .name = "SST39VF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00004736 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004737 .manufacture_id = SST_ID,
4738 .model_id = SST_39VF040,
4739 .total_size = 512,
4740 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004741 .feature_bits = FEATURE_EITHER_RESET,
4742 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004743 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004744 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004745 .block_erasers =
4746 {
4747 {
4748 .eraseblocks = { {4 * 1024, 128} },
4749 .block_erase = erase_sector_jedec,
4750 }, {
4751 .eraseblocks = { {512 * 1024, 1} },
4752 .block_erase = erase_chip_block_jedec,
4753 }
4754 },
Sean Nelson35727f72010-01-28 23:55:12 +00004755 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004756 .read = read_memmapped,
Carl-Daniel Hailfinger90eff152008-12-08 23:51:45 +00004757 },
FENG yu ningff692fb2008-12-08 18:15:10 +00004758
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004759 {
4760 .vendor = "SST",
Peter Stuge8440cc02009-01-25 23:55:12 +00004761 .name = "SST39VF080",
Urja Rannikko038a3122009-06-28 19:19:25 +00004762 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004763 .manufacture_id = SST_ID,
4764 .model_id = SST_39VF080,
Peter Stuge8440cc02009-01-25 23:55:12 +00004765 .total_size = 1024,
4766 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004767 .feature_bits = FEATURE_EITHER_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +00004768 .tested = TEST_UNTESTED,
4769 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004770 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004771 .block_erasers =
4772 {
4773 {
4774 .eraseblocks = { {4 * 1024, 256} },
4775 .block_erase = erase_sector_jedec,
4776 }, {
4777 .eraseblocks = { {64 * 1024, 16} },
4778 .block_erase = erase_block_jedec,
4779 }, {
4780 .eraseblocks = { {1024 * 1024, 1} },
4781 .block_erase = erase_chip_block_jedec,
4782 }
4783 },
Sean Nelson35727f72010-01-28 23:55:12 +00004784 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004785 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +00004786 },
4787
4788 {
4789 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004790 .name = "SST49LF002A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004791 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004792 .manufacture_id = SST_ID,
4793 .model_id = SST_49LF002A,
4794 .total_size = 256,
4795 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004796 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004797 .tested = TEST_OK_PRW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004798 .probe = probe_jedec,
4799 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004800 .block_erasers =
4801 {
4802 {
4803 .eraseblocks = { {4 * 1024, 64} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004804 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004805 }, {
4806 .eraseblocks = { {16 * 1024, 16} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004807 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004808 }, {
4809 .eraseblocks = { {256 * 1024, 1} },
4810 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4811 }
4812 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004813 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004814 .unlock = unlock_sst_fwhub,
4815 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004816 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004817 },
4818
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004819 {
4820 .vendor = "SST",
4821 .name = "SST49LF003A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004822 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004823 .manufacture_id = SST_ID,
4824 .model_id = SST_49LF003A,
4825 .total_size = 384,
4826 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004827 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Peter Lemenkov45835c42009-09-25 01:09:18 +00004828 .tested = TEST_OK_PR,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004829 .probe = probe_jedec,
4830 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004831 .block_erasers =
4832 {
4833 {
4834 .eraseblocks = { {4 * 1024, 96} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004835 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004836 }, {
4837 .eraseblocks = { {64 * 1024, 6} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004838 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004839 }, {
4840 .eraseblocks = { {384 * 1024, 1} },
4841 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4842 }
4843 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004844 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004845 .unlock = unlock_sst_fwhub,
4846 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004847 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004848 },
4849
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004850 {
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004851 /* Contrary to the data sheet, TBL# on the SST49LF004B affects the top 128kB (instead of 64kB)
4852 * and is only honored for 64k block erase, but not 4k sector erase.
4853 */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004854 .vendor = "SST",
4855 .name = "SST49LF004A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004856 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004857 .manufacture_id = SST_ID,
4858 .model_id = SST_49LF004A,
4859 .total_size = 512,
4860 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004861 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004862 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004863 .probe = probe_jedec,
4864 .probe_timing = 1, /* 150 ns */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004865 .block_erasers =
4866 {
4867 {
4868 .eraseblocks = { {4 * 1024, 128} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004869 .block_erase = erase_sector_jedec,
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004870 }, {
4871 .eraseblocks = { {64 * 1024, 8} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004872 .block_erase = erase_block_jedec,
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004873 }, {
4874 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson51c83fb2010-01-20 20:55:53 +00004875 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004876 },
4877 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004878 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004879 .unlock = unlock_sst_fwhub,
4880 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004881 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004882 },
4883
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004884 {
4885 .vendor = "SST",
4886 .name = "SST49LF004C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004887 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004888 .manufacture_id = SST_ID,
4889 .model_id = SST_49LF004C,
4890 .total_size = 512,
4891 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004892 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004893 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004894 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004895 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004896 .block_erasers =
4897 {
4898 {
4899 .eraseblocks = { {4 * 1024, 128} },
4900 .block_erase = erase_sector_49lfxxxc,
4901 }, {
4902 .eraseblocks = {
4903 {64 * 1024, 7},
4904 {32 * 1024, 1},
4905 {8 * 1024, 2},
4906 {16 * 1024, 1},
4907 },
Sean Nelson69e58112010-03-23 17:10:28 +00004908 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004909 }
4910 },
Sean Nelson69e58112010-03-23 17:10:28 +00004911 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004912 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004913 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004914 },
4915
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004916 {
4917 .vendor = "SST",
4918 .name = "SST49LF008A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004919 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004920 .manufacture_id = SST_ID,
4921 .model_id = SST_49LF008A,
4922 .total_size = 1024,
4923 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004924 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00004925 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004926 .probe = probe_jedec,
4927 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004928 .block_erasers =
4929 {
4930 {
4931 .eraseblocks = { {4 * 1024, 256} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004932 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004933 }, {
4934 .eraseblocks = { {64 * 1024, 16} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004935 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004936 }, {
4937 .eraseblocks = { {1024 * 1024, 1} },
4938 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4939 }
4940 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004941 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004942 .unlock = unlock_sst_fwhub,
4943 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004944 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004945 },
4946
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004947 {
4948 .vendor = "SST",
4949 .name = "SST49LF008C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004950 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004951 .manufacture_id = SST_ID,
4952 .model_id = SST_49LF008C,
4953 .total_size = 1024,
4954 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004955 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004956 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004957 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004958 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004959 .block_erasers =
4960 {
4961 {
4962 .eraseblocks = { {4 * 1024, 256} },
4963 .block_erase = erase_sector_49lfxxxc,
4964 }, {
4965 .eraseblocks = {
4966 {64 * 1024, 15},
4967 {32 * 1024, 1},
4968 {8 * 1024, 2},
4969 {16 * 1024, 1},
4970 },
Sean Nelson69e58112010-03-23 17:10:28 +00004971 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004972 }
4973 },
Sean Nelson69e58112010-03-23 17:10:28 +00004974 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004975 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004976 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004977 },
4978
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004979 {
4980 .vendor = "SST",
4981 .name = "SST49LF016C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004982 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004983 .manufacture_id = SST_ID,
4984 .model_id = SST_49LF016C,
4985 .total_size = 2048,
4986 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004987 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004988 .tested = TEST_OK_PRW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004989 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004990 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004991 .block_erasers =
4992 {
4993 {
4994 .eraseblocks = { {4 * 1024, 512} },
4995 .block_erase = erase_sector_49lfxxxc,
4996 }, {
4997 .eraseblocks = {
4998 {64 * 1024, 31},
4999 {32 * 1024, 1},
5000 {8 * 1024, 2},
5001 {16 * 1024, 1},
5002 },
Sean Nelson69e58112010-03-23 17:10:28 +00005003 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005004 }
5005 },
Sean Nelson69e58112010-03-23 17:10:28 +00005006 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005007 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005008 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005009 },
5010
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005011 {
5012 .vendor = "SST",
5013 .name = "SST49LF020",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005014 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005015 .manufacture_id = SST_ID,
5016 .model_id = SST_49LF020,
5017 .total_size = 256,
5018 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005019 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00005020 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005021 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005022 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005023 .block_erasers =
5024 {
5025 {
5026 .eraseblocks = { {4 * 1024, 64} },
5027 .block_erase = erase_sector_jedec,
5028 }, {
5029 .eraseblocks = { {16 * 1024, 16} },
5030 .block_erase = erase_block_jedec,
5031 }, {
5032 .eraseblocks = { {256 * 1024, 1} },
5033 .block_erase = NULL,
5034 }
5035 },
Sean Nelson35727f72010-01-28 23:55:12 +00005036 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005037 .read = read_memmapped,
Sven Schnellec208dfb2009-01-07 12:35:09 +00005038 },
5039
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005040 {
5041 .vendor = "SST",
5042 .name = "SST49LF020A",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005043 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005044 .manufacture_id = SST_ID,
5045 .model_id = SST_49LF020A,
5046 .total_size = 256,
Carl-Daniel Hailfingerda654322009-07-23 01:44:38 +00005047 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005048 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00005049 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005050 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005051 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005052 .block_erasers =
5053 {
5054 {
5055 .eraseblocks = { {4 * 1024, 64} },
5056 .block_erase = erase_sector_jedec,
5057 }, {
5058 .eraseblocks = { {16 * 1024, 16} },
5059 .block_erase = erase_block_jedec,
5060 }, {
5061 .eraseblocks = { {256 * 1024, 1} },
5062 .block_erase = NULL,
5063 }
5064 },
Sean Nelson35727f72010-01-28 23:55:12 +00005065 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005066 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005067 },
5068
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005069 {
5070 .vendor = "SST",
5071 .name = "SST49LF040",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005072 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005073 .manufacture_id = SST_ID,
5074 .model_id = SST_49LF040,
5075 .total_size = 512,
5076 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005077 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00005078 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005079 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005080 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005081 .block_erasers =
5082 {
5083 {
5084 .eraseblocks = { {4 * 1024, 128} },
5085 .block_erase = erase_sector_jedec,
5086 }, {
5087 .eraseblocks = { {64 * 1024, 8} },
5088 .block_erase = erase_block_jedec,
5089 }, {
5090 .eraseblocks = { {512 * 1024, 1} },
5091 .block_erase = NULL,
5092 }
5093 },
Sean Nelson35727f72010-01-28 23:55:12 +00005094 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005095 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005096 },
5097
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005098 {
5099 .vendor = "SST",
5100 .name = "SST49LF040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005101 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005102 .manufacture_id = SST_ID,
5103 .model_id = SST_49LF040B,
5104 .total_size = 512,
5105 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005106 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00005107 .tested = TEST_OK_PR,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005108 .probe = probe_jedec,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005109 .probe_timing = 1, /* 150ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005110 .block_erasers =
5111 {
5112 {
5113 .eraseblocks = { {4 * 1024, 128} },
5114 .block_erase = erase_sector_jedec,
5115 }, {
5116 .eraseblocks = { {64 * 1024, 8} },
5117 .block_erase = erase_block_jedec,
5118 }, {
5119 .eraseblocks = { {512 * 1024, 1} },
5120 .block_erase = NULL,
5121 }
5122 },
Sean Nelson35727f72010-01-28 23:55:12 +00005123 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005124 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005125 },
5126
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005127 {
5128 .vendor = "SST",
5129 .name = "SST49LF080A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005130 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005131 .manufacture_id = SST_ID,
Urja Rannikko038a3122009-06-28 19:19:25 +00005132 .model_id = SST_49LF080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005133 .total_size = 1024,
5134 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005135 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00005136 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005137 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005138 .probe_timing = TIMING_FIXME,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005139 .block_erasers =
5140 {
5141 {
5142 .eraseblocks = { {4 * 1024, 256} },
5143 .block_erase = erase_sector_jedec,
5144 }, {
5145 .eraseblocks = { {64 * 1024, 16} },
5146 .block_erase = erase_block_jedec,
5147 }, {
5148 .eraseblocks = { {1024 * 1024, 1} },
5149 .block_erase = NULL,
5150 }
5151 },
Sean Nelson35727f72010-01-28 23:55:12 +00005152 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005153 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005154 },
5155
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005156 {
5157 .vendor = "SST",
5158 .name = "SST49LF160C",
Urja Rannikko038a3122009-06-28 19:19:25 +00005159 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005160 .manufacture_id = SST_ID,
5161 .model_id = SST_49LF160C,
5162 .total_size = 2048,
5163 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005164 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005165 .tested = TEST_OK_PRW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005166 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005167 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005168 .block_erasers =
5169 {
5170 {
5171 .eraseblocks = { {4 * 1024, 512} },
5172 .block_erase = erase_sector_49lfxxxc,
5173 }, {
5174 .eraseblocks = {
5175 {64 * 1024, 31},
5176 {32 * 1024, 1},
5177 {8 * 1024, 2},
5178 {16 * 1024, 1},
5179 },
Sean Nelson69e58112010-03-23 17:10:28 +00005180 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005181 }
5182 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00005183 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005184 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005185 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005186 },
5187
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005188 {
5189 .vendor = "ST",
5190 .name = "M25P05-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005191 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005192 .manufacture_id = ST_ID,
5193 .model_id = ST_M25P05A,
5194 .total_size = 64,
5195 .page_size = 256,
5196 .tested = TEST_UNTESTED,
5197 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005198 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005199 .block_erasers =
5200 {
5201 {
5202 .eraseblocks = { {32 * 1024, 2} },
5203 .block_erase = spi_block_erase_d8,
5204 }, {
5205 .eraseblocks = { {64 * 1024, 1} },
5206 .block_erase = spi_block_erase_c7,
5207 }
5208 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005209 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005210 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005211 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005212 },
5213
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005214 /* The ST M25P05 is a bit of a problem. It has the same ID as the
5215 * ST M25P05-A in RES mode, but supports only 128 byte writes instead
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005216 * of 256 byte writes. We rely heavily on the fact that probe_spi_res1
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005217 * only is successful if RDID does not work.
5218 */
5219 {
5220 .vendor = "ST",
5221 .name = "M25P05.RES",
5222 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005223 .manufacture_id = 0, /* Not used. */
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005224 .model_id = ST_M25P05_RES,
5225 .total_size = 64,
5226 .page_size = 256,
5227 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005228 .probe = probe_spi_res1,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005229 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005230 .block_erasers =
5231 {
5232 {
5233 .eraseblocks = { {32 * 1024, 2} },
5234 .block_erase = spi_block_erase_d8,
5235 }, {
5236 .eraseblocks = { {64 * 1024, 1} },
5237 .block_erase = spi_block_erase_c7,
5238 }
5239 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005240 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005241 .write = spi_chip_write_1, /* 128 */
5242 .read = spi_chip_read,
5243 },
5244
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005245 {
5246 .vendor = "ST",
5247 .name = "M25P10-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005248 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005249 .manufacture_id = ST_ID,
5250 .model_id = ST_M25P10A,
5251 .total_size = 128,
5252 .page_size = 256,
5253 .tested = TEST_UNTESTED,
5254 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005255 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005256 .block_erasers =
5257 {
5258 {
5259 .eraseblocks = { {32 * 1024, 4} },
5260 .block_erase = spi_block_erase_d8,
5261 }, {
5262 .eraseblocks = { {128 * 1024, 1} },
5263 .block_erase = spi_block_erase_c7,
5264 }
5265 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005266 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005267 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005268 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005269 },
5270
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005271 /* The ST M25P10 has the same problem as the M25P05. */
5272 {
5273 .vendor = "ST",
5274 .name = "M25P10.RES",
5275 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005276 .manufacture_id = 0, /* Not used. */
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005277 .model_id = ST_M25P10_RES,
5278 .total_size = 128,
5279 .page_size = 256,
5280 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005281 .probe = probe_spi_res1,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005282 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005283 .block_erasers =
5284 {
5285 {
5286 .eraseblocks = { {32 * 1024, 4} },
5287 .block_erase = spi_block_erase_d8,
5288 }, {
5289 .eraseblocks = { {128 * 1024, 1} },
5290 .block_erase = spi_block_erase_c7,
5291 }
5292 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005293 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005294 .write = spi_chip_write_1, /* 128 */
5295 .read = spi_chip_read,
5296 },
5297
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005298 {
5299 .vendor = "ST",
5300 .name = "M25P20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005301 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005302 .manufacture_id = ST_ID,
5303 .model_id = ST_M25P20,
5304 .total_size = 256,
5305 .page_size = 256,
5306 .tested = TEST_UNTESTED,
5307 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005308 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005309 .block_erasers =
5310 {
5311 {
5312 .eraseblocks = { {64 * 1024, 4} },
5313 .block_erase = spi_block_erase_d8,
5314 }, {
5315 .eraseblocks = { {256 * 1024, 1} },
5316 .block_erase = spi_block_erase_c7,
5317 }
5318 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005319 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005320 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005321 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005322 },
5323
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005324 {
5325 .vendor = "ST",
5326 .name = "M25P40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005327 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005328 .manufacture_id = ST_ID,
5329 .model_id = ST_M25P40,
5330 .total_size = 512,
5331 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00005332 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005333 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005334 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005335 .block_erasers =
5336 {
5337 {
5338 .eraseblocks = { {64 * 1024, 8} },
5339 .block_erase = spi_block_erase_d8,
5340 }, {
5341 .eraseblocks = { {512 * 1024, 1} },
5342 .block_erase = spi_block_erase_c7,
5343 }
5344 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005345 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005346 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005347 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005348 },
5349
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005350 {
5351 .vendor = "ST",
5352 .name = "M25P40-old",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005353 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005354 .manufacture_id = 0, /* Not used. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005355 .model_id = ST_M25P40_RES,
5356 .total_size = 512,
5357 .page_size = 256,
5358 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005359 .probe = probe_spi_res1,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005360 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005361 .block_erasers =
5362 {
5363 {
5364 .eraseblocks = { {64 * 1024, 8} },
5365 .block_erase = spi_block_erase_d8,
5366 }, {
5367 .eraseblocks = { {512 * 1024, 1} },
5368 .block_erase = spi_block_erase_c7,
5369 }
5370 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005371 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005372 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005373 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005374 },
5375
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005376 {
5377 .vendor = "ST",
5378 .name = "M25P80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005379 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005380 .manufacture_id = ST_ID,
5381 .model_id = ST_M25P80,
5382 .total_size = 1024,
5383 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00005384 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005385 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005386 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005387 .block_erasers =
5388 {
5389 {
5390 .eraseblocks = { {64 * 1024, 16} },
5391 .block_erase = spi_block_erase_d8,
5392 }, {
5393 .eraseblocks = { {1024 * 1024, 1} },
5394 .block_erase = spi_block_erase_c7,
5395 }
5396 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005397 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005398 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005399 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005400 },
5401
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005402 {
5403 .vendor = "ST",
5404 .name = "M25P16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005405 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005406 .manufacture_id = ST_ID,
5407 .model_id = ST_M25P16,
5408 .total_size = 2048,
5409 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00005410 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005411 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005412 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005413 .block_erasers =
5414 {
5415 {
5416 .eraseblocks = { {64 * 1024, 32} },
5417 .block_erase = spi_block_erase_d8,
5418 }, {
5419 .eraseblocks = { {2 * 1024 * 1024, 1} },
5420 .block_erase = spi_block_erase_c7,
5421 }
5422 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005423 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005424 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005425 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005426 },
5427
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005428 {
5429 .vendor = "ST",
5430 .name = "M25P32",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005431 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005432 .manufacture_id = ST_ID,
5433 .model_id = ST_M25P32,
5434 .total_size = 4096,
5435 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00005436 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005437 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005438 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005439 .block_erasers =
5440 {
5441 {
5442 .eraseblocks = { {64 * 1024, 64} },
5443 .block_erase = spi_block_erase_d8,
5444 }, {
5445 .eraseblocks = { {4 * 1024 * 1024, 1} },
5446 .block_erase = spi_block_erase_c7,
5447 }
5448 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005449 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005450 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005451 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005452 },
5453
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005454 {
5455 .vendor = "ST",
5456 .name = "M25P64",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005457 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005458 .manufacture_id = ST_ID,
5459 .model_id = ST_M25P64,
5460 .total_size = 8192,
5461 .page_size = 256,
5462 .tested = TEST_UNTESTED,
5463 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005464 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005465 .block_erasers =
5466 {
5467 {
5468 .eraseblocks = { {64 * 1024, 128} },
5469 .block_erase = spi_block_erase_d8,
5470 }, {
5471 .eraseblocks = { {8 * 1024 * 1024, 1} },
5472 .block_erase = spi_block_erase_c7,
5473 }
5474 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005475 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005476 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005477 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005478 },
5479
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005480 {
5481 .vendor = "ST",
5482 .name = "M25P128",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005483 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005484 .manufacture_id = ST_ID,
5485 .model_id = ST_M25P128,
5486 .total_size = 16384,
5487 .page_size = 256,
5488 .tested = TEST_UNTESTED,
5489 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005490 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005491 .block_erasers =
5492 {
5493 {
5494 .eraseblocks = { {256 * 1024, 64} },
5495 .block_erase = spi_block_erase_d8,
5496 }, {
5497 .eraseblocks = { {16 * 1024 * 1024, 1} },
5498 .block_erase = spi_block_erase_c7,
5499 }
5500 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005501 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005502 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005503 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005504 },
5505
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005506 {
5507 .vendor = "ST",
5508 .name = "M29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005509 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005510 .manufacture_id = ST_ID,
5511 .model_id = ST_M29F002B,
5512 .total_size = 256,
5513 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005514 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005515 .tested = TEST_UNTESTED,
5516 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005517 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005518 .block_erasers =
5519 {
5520 {
5521 .eraseblocks = {
5522 {16 * 1024, 1},
5523 {8 * 1024, 2},
5524 {32 * 1024, 1},
5525 {64 * 1024, 3},
5526 },
5527 .block_erase = erase_sector_jedec,
5528 }, {
5529 .eraseblocks = { {256 * 1024, 1} },
5530 .block_erase = erase_chip_block_jedec,
5531 }
5532 },
Sean Nelson35727f72010-01-28 23:55:12 +00005533 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005534 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005535 },
5536
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005537 {
5538 .vendor = "ST",
5539 .name = "M29F002T/NT",
Urja Rannikko038a3122009-06-28 19:19:25 +00005540 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005541 .manufacture_id = ST_ID,
5542 .model_id = ST_M29F002T,
5543 .total_size = 256,
5544 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005545 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
5546 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005547 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005548 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005549 .block_erasers =
5550 {
5551 {
5552 .eraseblocks = {
5553 {64 * 1024, 3},
5554 {32 * 1024, 1},
5555 {8 * 1024, 2},
5556 {16 * 1024, 1},
5557 },
5558 .block_erase = erase_sector_jedec,
5559 }, {
5560 .eraseblocks = { {256 * 1024, 1} },
5561 .block_erase = erase_chip_block_jedec,
5562 }
5563 },
Sean Nelson35727f72010-01-28 23:55:12 +00005564 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005565 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005566 },
5567
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005568 {
5569 .vendor = "ST",
5570 .name = "M29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005571 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005572 .manufacture_id = ST_ID,
5573 .model_id = ST_M29F040B,
5574 .total_size = 512,
5575 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005576 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
5577 .tested = TEST_UNTESTED,
5578 .probe = probe_jedec,
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00005579 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (am29f040b.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005580 .block_erasers =
5581 {
5582 {
5583 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00005584 .block_erase = erase_sector_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00005585 }, {
5586 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00005587 .block_erase = erase_chip_block_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00005588 }
5589 },
Sean Nelson35727f72010-01-28 23:55:12 +00005590 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005591 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005592 },
5593
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005594 {
Sean Nelson35727f72010-01-28 23:55:12 +00005595 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005596 .vendor = "ST",
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00005597 .name = "M29F400BB",
5598 .bustype = CHIP_BUSTYPE_PARALLEL,
5599 .manufacture_id = ST_ID,
5600 .model_id = ST_M29F400BB,
5601 .total_size = 512,
5602 .page_size = 64 * 1024,
5603 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
5604 .tested = TEST_BAD_WRITE, /* Implicit eraseblock layout in write_m29f400bt is broken. */
5605 .probe = probe_m29f400bt,
5606 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (m29f400bt.c) */
5607 .block_erasers =
5608 {
5609 {
5610 .eraseblocks = {
5611 {16 * 1024, 1},
5612 {8 * 1024, 2},
5613 {32 * 1024, 1},
5614 {64 * 1024, 7},
5615 },
5616 .block_erase = block_erase_m29f400bt,
5617 }, {
5618 .eraseblocks = { {512 * 1024, 1} },
5619 .block_erase = block_erase_chip_m29f400bt,
5620 }
5621 },
5622 .write = NULL,
5623 .read = read_memmapped,
5624 },
5625 {
5626 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
5627 .vendor = "ST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005628 .name = "M29F400BT",
Urja Rannikko038a3122009-06-28 19:19:25 +00005629 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005630 .manufacture_id = ST_ID,
5631 .model_id = ST_M29F400BT,
5632 .total_size = 512,
5633 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005634 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005635 .tested = TEST_UNTESTED,
5636 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005637 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005638 .block_erasers =
5639 {
5640 {
5641 .eraseblocks = {
5642 {64 * 1024, 7},
5643 {32 * 1024, 1},
5644 {8 * 1024, 2},
5645 {16 * 1024, 1},
5646 },
5647 .block_erase = block_erase_m29f400bt,
5648 }, {
5649 .eraseblocks = { {512 * 1024, 1} },
5650 .block_erase = block_erase_chip_m29f400bt,
5651 }
5652 },
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00005653 .write = write_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005654 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005655 },
5656
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005657 {
5658 .vendor = "ST",
5659 .name = "M29W010B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005660 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005661 .manufacture_id = ST_ID,
5662 .model_id = ST_M29W010B,
5663 .total_size = 128,
5664 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005665 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005666 .tested = TEST_UNTESTED,
5667 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005668 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005669 .block_erasers =
5670 {
5671 {
5672 .eraseblocks = { {16 * 1024, 8}, },
5673 .block_erase = erase_sector_jedec,
5674 }, {
5675 .eraseblocks = { {128 * 1024, 1} },
5676 .block_erase = erase_chip_block_jedec,
5677 }
5678 },
Sean Nelson35727f72010-01-28 23:55:12 +00005679 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005680 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005681 },
5682
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005683 {
5684 .vendor = "ST",
5685 .name = "M29W040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005686 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005687 .manufacture_id = ST_ID,
5688 .model_id = ST_M29W040B,
5689 .total_size = 512,
5690 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005691 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005692 .tested = TEST_UNTESTED,
5693 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005694 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005695 .block_erasers =
5696 {
5697 {
5698 .eraseblocks = { {64 * 1024, 8}, },
5699 .block_erase = erase_sector_jedec,
5700 }, {
5701 .eraseblocks = { {512 * 1024, 1} },
5702 .block_erase = erase_chip_block_jedec,
5703 }
5704 },
Sean Nelson35727f72010-01-28 23:55:12 +00005705 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005706 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005707 },
5708
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00005709 {
5710 .vendor = "ST",
5711 .name = "M29W512B",
5712 .bustype = CHIP_BUSTYPE_PARALLEL,
5713 .manufacture_id = ST_ID,
5714 .model_id = ST_M29W512B,
5715 .total_size = 64,
5716 .page_size = 64 * 1024,
5717 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
5718 .tested = TEST_OK_PREW,
5719 .probe = probe_jedec,
5720 .probe_timing = TIMING_ZERO,
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00005721 .block_erasers =
5722 {
5723 {
5724 .eraseblocks = { {64 * 1024, 1} },
5725 .block_erase = erase_chip_block_jedec,
5726 }
5727 },
5728 .write = write_jedec_1,
5729 .read = read_memmapped,
5730 },
5731
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005732 {
5733 .vendor = "ST",
5734 .name = "M50FLW040A",
Sean Nelson35727f72010-01-28 23:55:12 +00005735 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005736 .manufacture_id = ST_ID,
5737 .model_id = ST_M50FLW040A,
5738 .total_size = 512,
5739 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005740 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005741 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005742 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005743 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005744 .block_erasers =
5745 {
5746 {
Sean Nelson329bde72010-01-19 16:39:19 +00005747 .eraseblocks = {
5748 {4 * 1024, 16}, /* sector */
5749 {64 * 1024, 5}, /* block */
5750 {4 * 1024, 16}, /* sector */
5751 {4 * 1024, 16}, /* sector */
5752 },
5753 .block_erase = NULL,
5754 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005755 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005756 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005757 }, {
5758 .eraseblocks = { {512 * 1024, 1} },
5759 .block_erase = erase_chip_stm50flw0x0x,
5760 }
5761 },
Sean Nelson28accc22010-03-19 18:47:06 +00005762 .unlock = unlock_stm50flw0x0x,
5763 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005764 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005765 },
5766
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005767 {
5768 .vendor = "ST",
5769 .name = "M50FLW040B",
Sean Nelson35727f72010-01-28 23:55:12 +00005770 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005771 .manufacture_id = ST_ID,
5772 .model_id = ST_M50FLW040B,
5773 .total_size = 512,
5774 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005775 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005776 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005777 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005778 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005779 .block_erasers =
5780 {
5781 {
Sean Nelson329bde72010-01-19 16:39:19 +00005782 .eraseblocks = {
5783 {4 * 1024, 16}, /* sector */
5784 {4 * 1024, 16}, /* sector */
5785 {64 * 1024, 5}, /* block */
5786 {4 * 1024, 16}, /* sector */
5787 },
5788 .block_erase = NULL,
5789 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005790 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005791 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005792 }, {
5793 .eraseblocks = { {512 * 1024, 1} },
5794 .block_erase = erase_chip_stm50flw0x0x,
5795 }
5796 },
Sean Nelson28accc22010-03-19 18:47:06 +00005797 .unlock = unlock_stm50flw0x0x,
5798 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005799 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005800 },
5801
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005802 {
5803 .vendor = "ST",
5804 .name = "M50FLW080A",
Sean Nelson35727f72010-01-28 23:55:12 +00005805 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005806 .manufacture_id = ST_ID,
5807 .model_id = ST_M50FLW080A,
5808 .total_size = 1024,
5809 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005810 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson35727f72010-01-28 23:55:12 +00005811 .tested = TEST_UNTESTED,
5812 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005813 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005814 .block_erasers =
5815 {
5816 {
Sean Nelson329bde72010-01-19 16:39:19 +00005817 .eraseblocks = {
5818 {4 * 1024, 16}, /* sector */
5819 {64 * 1024, 13}, /* block */
5820 {4 * 1024, 16}, /* sector */
5821 {4 * 1024, 16}, /* sector */
5822 },
5823 .block_erase = NULL,
5824 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005825 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005826 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005827 }, {
5828 .eraseblocks = { {1024 * 1024, 1} },
5829 .block_erase = erase_chip_stm50flw0x0x,
5830 }
5831 },
Sean Nelson28accc22010-03-19 18:47:06 +00005832 .unlock = unlock_stm50flw0x0x,
5833 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005834 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005835 },
5836
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005837 {
5838 .vendor = "ST",
5839 .name = "M50FLW080B",
Sean Nelson35727f72010-01-28 23:55:12 +00005840 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005841 .manufacture_id = ST_ID,
5842 .model_id = ST_M50FLW080B,
5843 .total_size = 1024,
5844 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005845 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005846 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005847 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005848 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005849 .block_erasers =
5850 {
5851 {
Sean Nelson329bde72010-01-19 16:39:19 +00005852 .eraseblocks = {
5853 {4 * 1024, 16}, /* sector */
5854 {4 * 1024, 16}, /* sector */
5855 {64 * 1024, 13}, /* block */
5856 {4 * 1024, 16}, /* sector */
5857 },
5858 .block_erase = NULL,
5859 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005860 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005861 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005862 }, {
5863 .eraseblocks = { {1024 * 1024, 1} },
5864 .block_erase = erase_chip_stm50flw0x0x,
5865 }
5866 },
Sean Nelson28accc22010-03-19 18:47:06 +00005867 .unlock = unlock_stm50flw0x0x,
5868 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005869 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005870 },
5871
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005872 {
5873 .vendor = "ST",
5874 .name = "M50FW002",
Urja Rannikko038a3122009-06-28 19:19:25 +00005875 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005876 .manufacture_id = ST_ID,
5877 .model_id = ST_M50FW002,
5878 .total_size = 256,
5879 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005880 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005881 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005882 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005883 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005884 .block_erasers =
5885 {
5886 {
5887 .eraseblocks = {
5888 {64 * 1024, 3},
5889 {32 * 1024, 1},
5890 {8 * 1024, 2},
5891 {16 * 1024, 1},
5892 },
Sean Nelson28accc22010-03-19 18:47:06 +00005893 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005894 }, {
5895 .eraseblocks = { {256 * 1024, 1} },
5896 .block_erase = erase_chip_stm50flw0x0x,
5897 }
5898 },
Sean Nelson28accc22010-03-19 18:47:06 +00005899 .unlock = unlock_stm50flw0x0x,
5900 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005901 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005902 },
5903
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005904 {
5905 .vendor = "ST",
5906 .name = "M50FW016",
Urja Rannikko038a3122009-06-28 19:19:25 +00005907 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005908 .manufacture_id = ST_ID,
5909 .model_id = ST_M50FW016,
5910 .total_size = 2048,
5911 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005912 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005913 .tested = TEST_UNTESTED,
5914 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005915 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005916 .block_erasers =
5917 {
5918 {
5919 .eraseblocks = { {64 * 1024, 32}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005920 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005921 }, {
5922 .eraseblocks = { {2 * 1024 * 1024, 1} },
5923 .block_erase = erase_chip_stm50flw0x0x,
5924 }
5925 },
Sean Nelson28accc22010-03-19 18:47:06 +00005926 .unlock = unlock_stm50flw0x0x,
5927 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005928 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005929 },
5930
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005931 {
5932 .vendor = "ST",
5933 .name = "M50FW040",
Urja Rannikko038a3122009-06-28 19:19:25 +00005934 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005935 .manufacture_id = ST_ID,
5936 .model_id = ST_M50FW040,
5937 .total_size = 512,
5938 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005939 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00005940 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005941 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005942 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005943 .block_erasers =
5944 {
5945 {
5946 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005947 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005948 }, {
5949 .eraseblocks = { {512 * 1024, 1} },
5950 .block_erase = erase_chip_stm50flw0x0x,
5951 }
5952 },
Sean Nelson28accc22010-03-19 18:47:06 +00005953 .unlock = unlock_stm50flw0x0x,
5954 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005955 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005956 },
5957
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005958 {
5959 .vendor = "ST",
5960 .name = "M50FW080",
Urja Rannikko038a3122009-06-28 19:19:25 +00005961 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005962 .manufacture_id = ST_ID,
5963 .model_id = ST_M50FW080,
5964 .total_size = 1024,
5965 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005966 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00005967 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005968 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005969 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005970 .block_erasers =
5971 {
5972 {
5973 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005974 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005975 }, {
5976 .eraseblocks = { {1024 * 1024, 1} },
5977 .block_erase = erase_chip_stm50flw0x0x,
5978 }
5979 },
Sean Nelson28accc22010-03-19 18:47:06 +00005980 .unlock = unlock_stm50flw0x0x,
5981 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005982 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005983 },
5984
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005985 {
5986 .vendor = "ST",
5987 .name = "M50LPW116",
Urja Rannikko038a3122009-06-28 19:19:25 +00005988 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005989 .manufacture_id = ST_ID,
5990 .model_id = ST_M50LPW116,
5991 .total_size = 2048,
5992 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005993 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005994 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005995 .probe = probe_82802ab,
Udu Ogahc04ee222009-09-05 01:31:32 +00005996 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005997 .block_erasers =
5998 {
5999 {
6000 .eraseblocks = {
6001 {4 * 1024, 16},
6002 {64 * 1024, 30},
6003 {32 * 1024, 1},
6004 {8 * 1024, 2},
6005 {16 * 1024, 1},
6006 },
Sean Nelson28accc22010-03-19 18:47:06 +00006007 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006008 }, {
6009 .eraseblocks = { {2 * 1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00006010 .block_erase = erase_chip_stm50flw0x0x,
Sean Nelson56358aa2010-01-19 16:08:51 +00006011 }
6012 },
Sean Nelson28accc22010-03-19 18:47:06 +00006013 .unlock = unlock_stm50flw0x0x,
6014 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006015 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006016 },
6017
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006018 {
6019 .vendor = "SyncMOS",
6020 .name = "S29C31004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00006021 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006022 .manufacture_id = SYNCMOS_ID,
6023 .model_id = S29C31004T,
6024 .total_size = 512,
6025 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006026 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006027 .tested = TEST_UNTESTED,
6028 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006029 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006030 .block_erasers =
6031 {
6032 {
6033 .eraseblocks = { {1 * 1024, 512} },
6034 .block_erase = erase_sector_jedec,
6035 }, {
6036 .eraseblocks = { {512 * 1024, 1} },
6037 .block_erase = erase_chip_block_jedec,
6038 },
6039 },
Sean Nelson35727f72010-01-28 23:55:12 +00006040 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006041 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006042 },
6043
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006044 {
6045 .vendor = "SyncMOS",
6046 .name = "S29C51001T",
Urja Rannikko038a3122009-06-28 19:19:25 +00006047 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006048 .manufacture_id = SYNCMOS_ID,
6049 .model_id = S29C51001T,
6050 .total_size = 128,
6051 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006052 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006053 .tested = TEST_UNTESTED,
6054 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006055 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006056 .block_erasers =
6057 {
6058 {
6059 .eraseblocks = { {512, 256} },
6060 .block_erase = erase_sector_jedec,
6061 }, {
6062 .eraseblocks = { {128 * 1024, 1} },
6063 .block_erase = erase_chip_block_jedec,
6064 },
6065 },
Sean Nelson35727f72010-01-28 23:55:12 +00006066 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006067 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006068 },
6069
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006070 {
6071 .vendor = "SyncMOS",
6072 .name = "S29C51002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00006073 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006074 .manufacture_id = SYNCMOS_ID,
6075 .model_id = S29C51002T,
6076 .total_size = 256,
6077 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006078 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00006079 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006080 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006081 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006082 .block_erasers =
6083 {
6084 {
6085 .eraseblocks = { {512, 512} },
6086 .block_erase = erase_sector_jedec,
6087 }, {
6088 .eraseblocks = { {256 * 1024, 1} },
6089 .block_erase = erase_chip_block_jedec,
6090 },
6091 },
Sean Nelson35727f72010-01-28 23:55:12 +00006092 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006093 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006094 },
6095
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006096 {
6097 .vendor = "SyncMOS",
6098 .name = "S29C51004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00006099 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006100 .manufacture_id = SYNCMOS_ID,
6101 .model_id = S29C51004T,
6102 .total_size = 512,
6103 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006104 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006105 .tested = TEST_UNTESTED,
6106 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006107 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006108 .block_erasers =
6109 {
6110 {
Sean Nelson012a31e2010-01-19 20:23:26 +00006111 .eraseblocks = { {1 * 1024, 512} },
Sean Nelson56358aa2010-01-19 16:08:51 +00006112 .block_erase = erase_sector_jedec,
6113 }, {
6114 .eraseblocks = { {512 * 1024, 1} },
6115 .block_erase = erase_chip_block_jedec,
6116 },
6117 },
Sean Nelson35727f72010-01-28 23:55:12 +00006118 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006119 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006120 },
6121
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006122 {
Uwe Hermanna106d152009-05-27 23:17:40 +00006123 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006124 .name = "TMS29F002RB",
Urja Rannikko038a3122009-06-28 19:19:25 +00006125 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006126 .manufacture_id = TI_OLD_ID,
6127 .model_id = TI_TMS29F002RB,
6128 .total_size = 256,
6129 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00006130 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006131 .tested = TEST_UNTESTED,
6132 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006133 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006134 .block_erasers =
6135 {
6136 {
6137 .eraseblocks = {
6138 {16 * 1024, 1},
6139 {8 * 1024, 2},
6140 {32 * 1024, 1},
6141 {64 * 1024, 3},
6142 },
6143 .block_erase = erase_sector_jedec,
6144 }, {
6145 .eraseblocks = { {256 * 1024, 1} },
6146 .block_erase = erase_chip_block_jedec,
6147 },
6148 },
Sean Nelson35727f72010-01-28 23:55:12 +00006149 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006150 .read = read_memmapped,
6151 },
6152
6153 {
Uwe Hermanna106d152009-05-27 23:17:40 +00006154 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006155 .name = "TMS29F002RT",
Urja Rannikko038a3122009-06-28 19:19:25 +00006156 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006157 .manufacture_id = TI_OLD_ID,
6158 .model_id = TI_TMS29F002RT,
6159 .total_size = 256,
6160 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00006161 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006162 .tested = TEST_UNTESTED,
6163 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006164 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006165 .block_erasers =
6166 {
6167 {
6168 .eraseblocks = {
6169 {64 * 1024, 3},
6170 {32 * 1024, 1},
6171 {8 * 1024, 2},
6172 {16 * 1024, 1},
6173 },
6174 .block_erase = erase_sector_jedec,
6175 }, {
6176 .eraseblocks = { {256 * 1024, 1} },
6177 .block_erase = erase_chip_block_jedec,
6178 },
6179 },
Sean Nelson35727f72010-01-28 23:55:12 +00006180 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006181 .read = read_memmapped,
6182 },
6183
6184 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006185 .vendor = "Winbond",
Rudolf Marekce1c7982010-04-20 19:34:31 +00006186 .name = "W25Q80",
6187 .bustype = CHIP_BUSTYPE_SPI,
6188 .manufacture_id = WINBOND_NEX_ID,
6189 .model_id = W_25Q80,
6190 .total_size = 1024,
6191 .page_size = 256,
6192 .tested = TEST_UNTESTED,
6193 .probe = probe_spi_rdid,
6194 .probe_timing = TIMING_ZERO,
6195 .block_erasers =
6196 {
6197 {
6198 .eraseblocks = { {4 * 1024, 256} },
6199 .block_erase = spi_block_erase_20,
6200 }, {
6201 .eraseblocks = { {32 * 1024, 32} },
6202 .block_erase = spi_block_erase_52,
6203 }, {
6204 .eraseblocks = { {64 * 1024, 16} },
6205 .block_erase = spi_block_erase_d8,
6206 }, {
6207 .eraseblocks = { {1024 * 1024, 1} },
6208 .block_erase = spi_block_erase_60,
6209 }, {
6210 .eraseblocks = { {1024 * 1024, 1} },
6211 .block_erase = spi_block_erase_c7,
6212 }
6213 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006214 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00006215 .write = spi_chip_write_256,
6216 .read = spi_chip_read,
6217 },
6218
6219 {
6220 .vendor = "Winbond",
6221 .name = "W25Q16",
6222 .bustype = CHIP_BUSTYPE_SPI,
6223 .manufacture_id = WINBOND_NEX_ID,
6224 .model_id = W_25Q16,
6225 .total_size = 2048,
6226 .page_size = 256,
6227 .tested = TEST_UNTESTED,
6228 .probe = probe_spi_rdid,
6229 .probe_timing = TIMING_ZERO,
6230 .block_erasers =
6231 {
6232 {
6233 .eraseblocks = { {4 * 1024, 512} },
6234 .block_erase = spi_block_erase_20,
6235 }, {
6236 .eraseblocks = { {32 * 1024, 64} },
6237 .block_erase = spi_block_erase_52,
6238 }, {
6239 .eraseblocks = { {64 * 1024, 32} },
6240 .block_erase = spi_block_erase_d8,
6241 }, {
6242 .eraseblocks = { {2 * 1024 * 1024, 1} },
6243 .block_erase = spi_block_erase_60,
6244 }, {
6245 .eraseblocks = { {2 * 1024 * 1024, 1} },
6246 .block_erase = spi_block_erase_c7,
6247 }
6248 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006249 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00006250 .write = spi_chip_write_256,
6251 .read = spi_chip_read,
6252 },
6253
6254 {
6255 .vendor = "Winbond",
6256 .name = "W25Q32",
6257 .bustype = CHIP_BUSTYPE_SPI,
6258 .manufacture_id = WINBOND_NEX_ID,
6259 .model_id = W_25Q32,
6260 .total_size = 4096,
6261 .page_size = 256,
6262 .tested = TEST_UNTESTED,
6263 .probe = probe_spi_rdid,
6264 .probe_timing = TIMING_ZERO,
6265 .block_erasers =
6266 {
6267 {
6268 .eraseblocks = { {4 * 1024, 1024} },
6269 .block_erase = spi_block_erase_20,
6270 }, {
6271 .eraseblocks = { {32 * 1024, 128} },
6272 .block_erase = spi_block_erase_52,
6273 }, {
6274 .eraseblocks = { {64 * 1024, 64} },
6275 .block_erase = spi_block_erase_d8,
6276 }, {
6277 .eraseblocks = { {4 * 1024 * 1024, 1} },
6278 .block_erase = spi_block_erase_60,
6279 }, {
6280 .eraseblocks = { {4 * 1024 * 1024, 1} },
6281 .block_erase = spi_block_erase_c7,
6282 }
6283 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006284 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00006285 .write = spi_chip_write_256,
6286 .read = spi_chip_read,
6287 },
6288
6289 {
6290 .vendor = "Winbond",
David Hendricksc4acec92010-06-24 11:39:57 +00006291 .name = "W25Q64",
6292 .bustype = CHIP_BUSTYPE_SPI,
6293 .manufacture_id = WINBOND_NEX_ID,
6294 .model_id = W_25Q64,
6295 .total_size = 8192,
6296 .page_size = 256,
6297 .tested = TEST_OK_PRW,
6298 .probe = probe_spi_rdid,
6299 .probe_timing = TIMING_ZERO,
6300 .block_erasers =
6301 {
6302 {
6303 .eraseblocks = { {4 * 1024, 2048} },
6304 .block_erase = spi_block_erase_20,
6305 }, {
6306 .eraseblocks = { {32 * 1024, 256} },
6307 .block_erase = spi_block_erase_52,
6308 }, {
6309 .eraseblocks = { {64 * 1024, 128} },
6310 .block_erase = spi_block_erase_d8,
6311 }, {
6312 .eraseblocks = { {8 * 1024 * 1024, 1} },
6313 .block_erase = spi_block_erase_60,
6314 }, {
6315 .eraseblocks = { {8 * 1024 * 1024, 1} },
6316 .block_erase = spi_block_erase_c7,
6317 }
6318 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006319 .unlock = spi_disable_blockprotect,
David Hendricksc4acec92010-06-24 11:39:57 +00006320 .write = spi_chip_write_256,
6321 .read = spi_chip_read,
6322 },
6323
6324 {
6325 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006326 .name = "W25x10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006327 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006328 .manufacture_id = WINBOND_NEX_ID,
6329 .model_id = W_25X10,
6330 .total_size = 128,
6331 .page_size = 256,
6332 .tested = TEST_UNTESTED,
6333 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006334 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006335 .block_erasers =
6336 {
6337 {
6338 .eraseblocks = { {4 * 1024, 32} },
6339 .block_erase = spi_block_erase_20,
6340 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006341 .eraseblocks = { {64 * 1024, 2} },
6342 .block_erase = spi_block_erase_d8,
6343 }, {
6344 .eraseblocks = { {128 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006345 .block_erase = spi_block_erase_c7,
6346 }
6347 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006348 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006349 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006350 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006351 },
6352
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006353 {
6354 .vendor = "Winbond",
6355 .name = "W25x20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006356 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006357 .manufacture_id = WINBOND_NEX_ID,
6358 .model_id = W_25X20,
6359 .total_size = 256,
6360 .page_size = 256,
6361 .tested = TEST_UNTESTED,
6362 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006363 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006364 .block_erasers =
6365 {
6366 {
6367 .eraseblocks = { {4 * 1024, 64} },
6368 .block_erase = spi_block_erase_20,
6369 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006370 .eraseblocks = { {64 * 1024, 4} },
6371 .block_erase = spi_block_erase_d8,
6372 }, {
6373 .eraseblocks = { {256 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006374 .block_erase = spi_block_erase_c7,
6375 }
6376 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006377 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006378 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006379 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006380 },
6381
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006382 {
6383 .vendor = "Winbond",
6384 .name = "W25x40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006385 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006386 .manufacture_id = WINBOND_NEX_ID,
6387 .model_id = W_25X40,
6388 .total_size = 512,
6389 .page_size = 256,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006390 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006391 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006392 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006393 .block_erasers =
6394 {
6395 {
6396 .eraseblocks = { {4 * 1024, 128} },
6397 .block_erase = spi_block_erase_20,
6398 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006399 .eraseblocks = { {64 * 1024, 8} },
6400 .block_erase = spi_block_erase_d8,
6401 }, {
6402 .eraseblocks = { {512 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006403 .block_erase = spi_block_erase_c7,
6404 }
6405 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006406 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006407 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006408 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006409 },
6410
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006411 {
6412 .vendor = "Winbond",
6413 .name = "W25x80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006414 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006415 .manufacture_id = WINBOND_NEX_ID,
6416 .model_id = W_25X80,
6417 .total_size = 1024,
6418 .page_size = 256,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006419 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006420 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006421 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006422 .block_erasers =
6423 {
6424 {
6425 .eraseblocks = { {4 * 1024, 256} },
6426 .block_erase = spi_block_erase_20,
6427 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006428 .eraseblocks = { {64 * 1024, 16} },
6429 .block_erase = spi_block_erase_d8,
6430 }, {
6431 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006432 .block_erase = spi_block_erase_c7,
6433 }
6434 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006435 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006436 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006437 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006438 },
6439
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006440 {
6441 .vendor = "Winbond",
Hector Martina721ae22009-07-11 19:39:11 +00006442 .name = "W25x16",
6443 .bustype = CHIP_BUSTYPE_SPI,
6444 .manufacture_id = WINBOND_NEX_ID,
6445 .model_id = W_25X16,
6446 .total_size = 2048,
6447 .page_size = 256,
6448 .tested = TEST_OK_PR,
6449 .probe = probe_spi_rdid,
6450 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006451 .block_erasers =
6452 {
6453 {
6454 .eraseblocks = { {4 * 1024, 512} },
6455 .block_erase = spi_block_erase_20,
6456 }, {
6457 .eraseblocks = { {32 * 1024, 64} },
6458 .block_erase = spi_block_erase_52,
6459 }, {
6460 .eraseblocks = { {64 * 1024, 32} },
6461 .block_erase = spi_block_erase_d8,
6462 }, {
6463 .eraseblocks = { {2 * 1024 * 1024, 1} },
6464 .block_erase = spi_block_erase_60,
6465 }, {
6466 .eraseblocks = { {2 * 1024 * 1024, 1} },
6467 .block_erase = spi_block_erase_c7,
6468 }
6469 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006470 .unlock = spi_disable_blockprotect,
Hector Martina721ae22009-07-11 19:39:11 +00006471 .write = spi_chip_write_256,
6472 .read = spi_chip_read,
6473 },
6474
6475 {
6476 .vendor = "Winbond",
Zheng Bao1db2b752009-11-26 11:05:01 +00006477 .name = "W25x32",
6478 .bustype = CHIP_BUSTYPE_SPI,
6479 .manufacture_id = WINBOND_NEX_ID,
6480 .model_id = W_25X32,
6481 .total_size = 4096,
6482 .page_size = 256,
6483 .tested = TEST_OK_PROBE,
6484 .probe = probe_spi_rdid,
6485 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006486 .block_erasers =
6487 {
6488 {
6489 .eraseblocks = { {4 * 1024, 1024} },
6490 .block_erase = spi_block_erase_20,
6491 }, {
6492 .eraseblocks = { {32 * 1024, 128} },
6493 .block_erase = spi_block_erase_52,
6494 }, {
6495 .eraseblocks = { {64 * 1024, 64} },
6496 .block_erase = spi_block_erase_d8,
6497 }, {
6498 .eraseblocks = { {4 * 1024 * 1024, 1} },
6499 .block_erase = spi_block_erase_60,
6500 }, {
6501 .eraseblocks = { {4 * 1024 * 1024, 1} },
6502 .block_erase = spi_block_erase_c7,
6503 }
6504 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006505 .unlock = spi_disable_blockprotect,
Zheng Bao1db2b752009-11-26 11:05:01 +00006506 .write = spi_chip_write_256,
6507 .read = spi_chip_read,
6508 },
6509
6510 {
6511 .vendor = "Winbond",
6512 .name = "W25x64",
6513 .bustype = CHIP_BUSTYPE_SPI,
6514 .manufacture_id = WINBOND_NEX_ID,
6515 .model_id = W_25X64,
6516 .total_size = 8192,
6517 .page_size = 256,
6518 .tested = TEST_UNTESTED,
6519 .probe = probe_spi_rdid,
6520 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006521 .block_erasers =
6522 {
6523 {
6524 .eraseblocks = { {4 * 1024, 2048} },
6525 .block_erase = spi_block_erase_20,
6526 }, {
6527 .eraseblocks = { {32 * 1024, 256} },
6528 .block_erase = spi_block_erase_52,
6529 }, {
6530 .eraseblocks = { {64 * 1024, 128} },
6531 .block_erase = spi_block_erase_d8,
6532 }, {
6533 .eraseblocks = { {8 * 1024 * 1024, 1} },
6534 .block_erase = spi_block_erase_60,
6535 }, {
6536 .eraseblocks = { {8 * 1024 * 1024, 1} },
6537 .block_erase = spi_block_erase_c7,
6538 }
6539 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006540 .unlock = spi_disable_blockprotect,
Zheng Bao1db2b752009-11-26 11:05:01 +00006541 .write = spi_chip_write_256,
6542 .read = spi_chip_read,
6543 },
6544
6545 {
6546 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006547 .name = "W29C011",
Urja Rannikko038a3122009-06-28 19:19:25 +00006548 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006549 .manufacture_id = WINBOND_ID,
6550 .model_id = W_29C011,
6551 .total_size = 128,
6552 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006553 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00006554 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006555 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006556 .probe_timing = 10, /* used datasheet for the W29C011A */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006557 .block_erasers =
6558 {
6559 {
6560 .eraseblocks = { {128 * 1024, 1} },
6561 .block_erase = erase_chip_block_jedec,
6562 }
6563 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006564 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006565 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006566 },
6567
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006568 {
6569 .vendor = "Winbond",
6570 .name = "W29C020C",
Urja Rannikko161b8852009-06-05 08:47:37 +00006571 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006572 .manufacture_id = WINBOND_ID,
6573 .model_id = W_29C020C,
6574 .total_size = 256,
6575 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006576 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00006577 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006578 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006579 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006580 .block_erasers =
6581 {
6582 {
6583 .eraseblocks = { {256 * 1024, 1} },
6584 .block_erase = erase_chip_block_jedec,
6585 }
6586 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006587 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006588 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006589 },
6590
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006591 {
6592 .vendor = "Winbond",
6593 .name = "W29C040P",
Urja Rannikko161b8852009-06-05 08:47:37 +00006594 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006595 .manufacture_id = WINBOND_ID,
6596 .model_id = W_29C040P,
6597 .total_size = 512,
6598 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00006599 .feature_bits = FEATURE_LONG_RESET,
6600 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006601 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006602 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006603 .block_erasers =
6604 {
6605 {
6606 .eraseblocks = { {512 * 1024, 1} },
6607 .block_erase = erase_chip_block_jedec,
6608 }
6609 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006610 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006611 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006612 },
6613
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006614 {
6615 .vendor = "Winbond",
6616 .name = "W29EE011",
Urja Rannikko038a3122009-06-28 19:19:25 +00006617 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006618 .manufacture_id = WINBOND_ID,
6619 .model_id = W_29C011,
6620 .total_size = 128,
6621 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006622 .feature_bits = FEATURE_LONG_RESET,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006623 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006624 .probe = probe_w29ee011,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006625 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w29ee011.c) */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006626 .block_erasers =
6627 {
6628 {
6629 .eraseblocks = { {128 * 1024, 1} },
6630 .block_erase = erase_chip_block_jedec,
6631 }
6632 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006633 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006634 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006635 },
6636
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006637 {
6638 .vendor = "Winbond",
6639 .name = "W39V040A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006640 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006641 .manufacture_id = WINBOND_ID,
6642 .model_id = W_39V040A,
6643 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006644 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006645 .feature_bits = FEATURE_EITHER_RESET,
Michael Karcher3355f062010-03-24 22:56:23 +00006646 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006647 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006648 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006649 .block_erasers =
6650 {
6651 {
6652 .eraseblocks = { {64 * 1024, 8} },
6653 .block_erase = erase_sector_jedec,
6654 }, {
6655 .eraseblocks = { {512 * 1024, 1} },
6656 .block_erase = erase_chip_block_jedec,
6657 }
6658 },
Sean Nelson35727f72010-01-28 23:55:12 +00006659 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006660 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006661 },
6662
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006663 {
6664 .vendor = "Winbond",
6665 .name = "W39V040B",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006666 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006667 .manufacture_id = WINBOND_ID,
6668 .model_id = W_39V040B,
6669 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006670 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006671 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00006672 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006673 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006674 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006675 .block_erasers =
6676 {
6677 {
6678 .eraseblocks = { {64 * 1024, 8} },
6679 .block_erase = erase_sector_jedec,
6680 }, {
6681 .eraseblocks = { {512 * 1024, 1} },
6682 .block_erase = erase_chip_block_jedec,
6683 }
6684 },
Sean Nelson35727f72010-01-28 23:55:12 +00006685 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006686 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006687 },
6688
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006689 {
6690 .vendor = "Winbond",
6691 .name = "W39V040C",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006692 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006693 .manufacture_id = WINBOND_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00006694 .model_id = W_39V040C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006695 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006696 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006697 .feature_bits = FEATURE_EITHER_RESET,
6698 .tested = TEST_UNTESTED,
6699 .probe = probe_jedec,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00006700 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006701 .block_erasers =
6702 {
6703 {
6704 .eraseblocks = { {64 * 1024, 8} },
6705 .block_erase = erase_sector_jedec,
6706 }, {
6707 .eraseblocks = { {512 * 1024, 1} },
6708 .block_erase = erase_chip_block_jedec,
6709 }
6710 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00006711 .printlock = printlock_w39v040c,
Sean Nelson35727f72010-01-28 23:55:12 +00006712 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006713 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006714 },
6715
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006716 {
6717 .vendor = "Winbond",
6718 .name = "W39V040FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006719 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006720 .manufacture_id = WINBOND_ID,
6721 .model_id = W_39V040FA,
6722 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006723 .page_size = 64 * 1024,
Michael Karcherc9b63412010-05-30 16:55:18 +00006724 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermann41787602010-05-30 17:50:16 +00006725 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006726 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006727 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006728 .block_erasers =
6729 {
6730 {
6731 .eraseblocks = { {4 * 1024, 128} },
6732 .block_erase = erase_block_jedec,
6733 }, {
6734 .eraseblocks = { {64 * 1024, 8} },
6735 .block_erase = erase_sector_jedec,
6736 }, {
6737 .eraseblocks = { {512 * 1024, 1} },
6738 .block_erase = erase_chip_block_jedec,
6739 }
6740 },
Michael Karcherc9b63412010-05-30 16:55:18 +00006741 .printlock = printlock_sst_fwhub,
6742 .unlock = unlock_sst_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00006743 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006744 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006745 },
6746
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006747 {
6748 .vendor = "Winbond",
6749 .name = "W39V080A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006750 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006751 .manufacture_id = WINBOND_ID,
6752 .model_id = W_39V080A,
6753 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00006754 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006755 .feature_bits = FEATURE_EITHER_RESET,
6756 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006757 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006758 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006759 .block_erasers =
6760 {
6761 {
6762 .eraseblocks = { {64 * 1024, 16} },
6763 .block_erase = erase_sector_jedec,
6764 }, {
6765 .eraseblocks = { {1024 * 1024, 1} },
6766 .block_erase = erase_chip_block_jedec,
6767 }
6768 },
Sean Nelson35727f72010-01-28 23:55:12 +00006769 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006770 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006771 },
6772
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006773 {
6774 .vendor = "Winbond",
6775 .name = "W49F002U",
Urja Rannikko038a3122009-06-28 19:19:25 +00006776 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006777 .manufacture_id = WINBOND_ID,
6778 .model_id = W_49F002U,
6779 .total_size = 256,
6780 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006781 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00006782 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006783 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006784 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006785 .block_erasers =
6786 {
6787 {
6788 .eraseblocks = {
6789 {128 * 1024, 1},
6790 {96 * 1024, 1},
6791 {8 * 1024, 2},
6792 {16 * 1024, 1},
6793 },
6794 .block_erase = erase_sector_jedec,
6795 }, {
6796 .eraseblocks = { {256 * 1024, 1} },
6797 .block_erase = erase_chip_block_jedec,
6798 }
6799 },
Sean Nelson35727f72010-01-28 23:55:12 +00006800 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006801 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006802 },
6803
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006804 {
6805 .vendor = "Winbond",
Carl-Daniel Hailfingerabebe6b2010-07-17 13:45:42 +00006806 .name = "W49F020",
6807 .bustype = CHIP_BUSTYPE_PARALLEL,
6808 .manufacture_id = WINBOND_ID,
6809 .model_id = W_49F020,
6810 .total_size = 256,
6811 .page_size = 128,
6812 .feature_bits = FEATURE_EITHER_RESET,
6813 .tested = TEST_OK_PROBE,
6814 .probe = probe_jedec,
6815 .probe_timing = 10,
6816 .block_erasers =
6817 {
6818 {
6819 .eraseblocks = { {256 * 1024, 1} },
6820 .block_erase = erase_chip_block_jedec,
6821 }
6822 },
6823 .write = write_jedec_1,
6824 .read = read_memmapped,
6825 },
6826
6827 {
6828 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006829 .name = "W49V002A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006830 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006831 .manufacture_id = WINBOND_ID,
6832 .model_id = W_49V002A,
6833 .total_size = 256,
6834 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006835 .feature_bits = FEATURE_EITHER_RESET,
6836 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006837 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006838 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006839 .block_erasers =
6840 {
6841 {
6842 .eraseblocks = {
6843 {64 * 1024, 3},
6844 {32 * 1024, 1},
6845 {8 * 1024, 2},
6846 {16 * 1024, 1},
6847 },
6848 .block_erase = erase_sector_jedec,
6849 }, {
6850 .eraseblocks = { {256 * 1024, 1} },
6851 .block_erase = erase_chip_block_jedec,
6852 }
6853 },
Sean Nelson35727f72010-01-28 23:55:12 +00006854 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006855 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006856 },
6857
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006858 {
6859 .vendor = "Winbond",
6860 .name = "W49V002FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006861 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006862 .manufacture_id = WINBOND_ID,
6863 .model_id = W_49V002FA,
6864 .total_size = 256,
6865 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006866 .feature_bits = FEATURE_EITHER_RESET,
Michael Karcherb90c2212010-03-24 22:56:14 +00006867 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006868 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006869 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006870 .block_erasers =
6871 {
6872 {
6873 .eraseblocks = {
6874 {64 * 1024, 3},
6875 {32 * 1024, 1},
6876 {8 * 1024, 2},
6877 {16 * 1024, 1},
6878 },
6879 .block_erase = erase_sector_jedec,
6880 }, {
6881 .eraseblocks = { {256 * 1024, 1} },
6882 .block_erase = erase_chip_block_jedec,
6883 }
6884 },
Sean Nelson35727f72010-01-28 23:55:12 +00006885 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006886 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006887 },
6888
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006889 {
6890 .vendor = "Winbond",
6891 .name = "W39V080FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006892 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006893 .manufacture_id = WINBOND_ID,
6894 .model_id = W_39V080FA,
6895 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00006896 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006897 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00006898 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00006899 .probe = probe_jedec,
6900 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006901 .block_erasers =
6902 {
6903 {
6904 .eraseblocks = { {64 * 1024, 16}, },
6905 .block_erase = erase_sector_jedec,
6906 }, {
6907 .eraseblocks = { {1024 * 1024, 1} },
6908 .block_erase = erase_chip_block_jedec,
6909 }
6910 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00006911 .unlock = unlock_winbond_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00006912 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006913 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006914 },
6915
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006916 {
6917 .vendor = "Winbond",
6918 .name = "W39V080FA (dual mode)",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006919 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006920 .manufacture_id = WINBOND_ID,
6921 .model_id = W_39V080FA_DM,
6922 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006923 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006924 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006925 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00006926 .probe = probe_jedec,
6927 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006928 .block_erasers =
6929 {
6930 {
6931 .eraseblocks = { {64 * 1024, 8}, },
6932 .block_erase = erase_sector_jedec,
6933 }, {
6934 .eraseblocks = { {512 * 1024, 1} },
6935 .block_erase = erase_chip_block_jedec,
6936 }
6937 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00006938 .unlock = unlock_winbond_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00006939 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006940 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006941 },
6942
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006943 {
Daniel Lenskidf90d3a2010-07-22 11:44:38 +00006944 .vendor = "AMIC",
6945 .name = "unknown AMIC SPI chip",
6946 .bustype = CHIP_BUSTYPE_SPI,
6947 .manufacture_id = AMIC_ID,
6948 .model_id = GENERIC_DEVICE_ID,
6949 .total_size = 0,
6950 .page_size = 256,
6951 .tested = TEST_BAD_PREW,
6952 .probe = probe_spi_rdid4,
6953 .probe_timing = TIMING_ZERO,
6954 .write = NULL,
6955 .read = NULL,
6956 },
6957
6958 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006959 .vendor = "Atmel",
6960 .name = "unknown Atmel SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006961 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006962 .manufacture_id = ATMEL_ID,
6963 .model_id = GENERIC_DEVICE_ID,
6964 .total_size = 0,
6965 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006966 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006967 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006968 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006969 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006970 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006971 },
6972
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006973 {
6974 .vendor = "EON",
6975 .name = "unknown EON SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006976 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006977 .manufacture_id = EON_ID_NOPREFIX,
6978 .model_id = GENERIC_DEVICE_ID,
6979 .total_size = 0,
6980 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006981 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006982 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006983 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006984 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006985 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006986 },
6987
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006988 {
6989 .vendor = "Macronix",
6990 .name = "unknown Macronix SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006991 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006992 .manufacture_id = MX_ID,
6993 .model_id = GENERIC_DEVICE_ID,
6994 .total_size = 0,
6995 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006996 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006997 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006998 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006999 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007000 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007001 },
7002
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007003 {
7004 .vendor = "PMC",
7005 .name = "unknown PMC SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007006 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007007 .manufacture_id = PMC_ID,
7008 .model_id = GENERIC_DEVICE_ID,
7009 .total_size = 0,
7010 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007011 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007012 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007013 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007014 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007015 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007016 },
7017
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007018 {
7019 .vendor = "SST",
7020 .name = "unknown SST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007021 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007022 .manufacture_id = SST_ID,
7023 .model_id = GENERIC_DEVICE_ID,
7024 .total_size = 0,
7025 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007026 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007027 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007028 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007029 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007030 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007031 },
7032
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007033 {
7034 .vendor = "ST",
7035 .name = "unknown ST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007036 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007037 .manufacture_id = ST_ID,
7038 .model_id = GENERIC_DEVICE_ID,
7039 .total_size = 0,
7040 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007041 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007042 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007043 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007044 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007045 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007046 },
Uwe Hermannfc425e82008-03-16 02:06:25 +00007047
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00007048 {
Sean Nelson118e1d62009-11-24 02:08:11 +00007049 .vendor = "Sanyo",
7050 .name = "unknown Sanyo SPI chip",
7051 .bustype = CHIP_BUSTYPE_SPI,
7052 .manufacture_id = SANYO_ID,
7053 .model_id = GENERIC_DEVICE_ID,
7054 .total_size = 0,
7055 .page_size = 256,
7056 .tested = TEST_BAD_PREW,
7057 .probe = probe_spi_rdid,
7058 .probe_timing = TIMING_ZERO,
Sean Nelson118e1d62009-11-24 02:08:11 +00007059 .write = NULL,
7060 .read = NULL,
7061 },
7062
7063 {
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00007064 .vendor = "Generic",
7065 .name = "unknown SPI chip (RDID)",
7066 .bustype = CHIP_BUSTYPE_SPI,
7067 .manufacture_id = GENERIC_MANUF_ID,
7068 .model_id = GENERIC_DEVICE_ID,
7069 .total_size = 0,
7070 .page_size = 256,
7071 .tested = TEST_BAD_PREW,
7072 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00007073 .write = NULL,
7074 },
7075 {
7076 .vendor = "Generic",
7077 .name = "unknown SPI chip (REMS)",
7078 .bustype = CHIP_BUSTYPE_SPI,
7079 .manufacture_id = GENERIC_MANUF_ID,
7080 .model_id = GENERIC_DEVICE_ID,
7081 .total_size = 0,
7082 .page_size = 256,
7083 .tested = TEST_BAD_PREW,
7084 .probe = probe_spi_rems,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00007085 .write = NULL,
7086 },
7087
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007088 { NULL }
Stephan Guilloux72cf5652009-04-21 01:46:07 +00007089};