blob: c6d265ec471f4476ac2c8e4ac81f04f222fc3a64 [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",
Joshua Roysd97c0e02010-07-22 15:20:43 +00002817 .name = "28F002BC-T",
2818 .bustype = CHIP_BUSTYPE_PARALLEL,
2819 .manufacture_id = INTEL_ID,
2820 .model_id = P28F002BC,
2821 .total_size = 256,
2822 .page_size = 256 * 1024,
2823 .tested = TEST_UNTESTED,
2824 .probe = probe_82802ab,
2825 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2826 .block_erasers =
2827 {
2828 {
2829 .eraseblocks = {
2830 {128 * 1024, 1},
2831 {96 * 1024, 1},
2832 {8 * 1024, 2},
2833 {16 * 1024, 1},
2834 },
2835 .block_erase = erase_block_82802ab,
2836 },
2837 },
2838 .write = write_82802ab,
2839 .read = read_memmapped,
2840 },
2841
2842 {
2843 .vendor = "Intel",
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002844 .name = "28F004S5",
2845 .bustype = CHIP_BUSTYPE_PARALLEL,
2846 .manufacture_id = INTEL_ID,
2847 .model_id = E_28F004S5,
2848 .total_size = 512,
2849 .page_size = 256,
2850 .tested = TEST_UNTESTED,
2851 .probe = probe_82802ab,
2852 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002853 .block_erasers =
2854 {
2855 {
2856 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson28accc22010-03-19 18:47:06 +00002857 .block_erase = erase_block_82802ab,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002858 },
2859 },
Sean Nelsondee4a832010-03-22 04:39:31 +00002860 .unlock = unlock_28f004s5,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002861 .write = write_82802ab,
2862 .read = read_memmapped,
2863 },
2864
2865 {
2866 .vendor = "Intel",
Michael Karcherad0010a2010-04-03 10:27:08 +00002867 .name = "28F004BV/BE-B",
2868 .bustype = CHIP_BUSTYPE_PARALLEL,
2869 .manufacture_id = INTEL_ID,
2870 .model_id = P28F004BB,
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 {16 * 1024, 1},
2881 {8 * 1024, 2},
2882 {96 * 1024, 1},
2883 {128 * 1024, 3},
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 = "28F004BV/BE-T",
2895 .bustype = CHIP_BUSTYPE_PARALLEL,
2896 .manufacture_id = INTEL_ID,
2897 .model_id = P28F004BT,
2898 .total_size = 512,
2899 .page_size = 128 * 1024, /* maximal block size */
2900 .tested = TEST_UNTESTED,
2901 .probe = probe_82802ab,
2902 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2903 .block_erasers =
2904 {
2905 {
2906 .eraseblocks = {
2907 {128 * 1024, 3},
2908 {96 * 1024, 1},
2909 {8 * 1024, 2},
2910 {16 * 1024, 1},
2911 },
2912 .block_erase = erase_block_82802ab,
2913 },
2914 },
2915 .write = write_82802ab,
2916 .read = read_memmapped,
2917 },
2918
2919 {
2920 .vendor = "Intel",
2921 .name = "28F400BV/CV/CE-B",
2922 .bustype = CHIP_BUSTYPE_PARALLEL,
2923 .manufacture_id = INTEL_ID,
2924 .model_id = P28F400BB,
2925 .total_size = 512,
2926 .page_size = 128 * 1024, /* maximal block size */
2927 .feature_bits = FEATURE_ADDR_SHIFTED,
2928 .tested = TEST_UNTESTED,
2929 .probe = probe_82802ab,
2930 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2931 .block_erasers =
2932 {
2933 {
2934 .eraseblocks = {
2935 {16 * 1024, 1},
2936 {8 * 1024, 2},
2937 {96 * 1024, 1},
2938 {128 * 1024, 3},
2939 },
2940 .block_erase = erase_block_82802ab,
2941 },
2942 },
2943 .write = write_82802ab,
2944 .read = read_memmapped,
2945 },
2946
2947 {
2948 .vendor = "Intel",
2949 .name = "28F400BV/CV/CE-T",
2950 .bustype = CHIP_BUSTYPE_PARALLEL,
2951 .manufacture_id = INTEL_ID,
2952 .model_id = P28F400BT,
2953 .total_size = 512,
2954 .page_size = 128 * 1024, /* maximal block size */
2955 .feature_bits = FEATURE_ADDR_SHIFTED,
2956 .tested = TEST_UNTESTED,
2957 .probe = probe_82802ab,
2958 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2959 .block_erasers =
2960 {
2961 {
2962 .eraseblocks = {
2963 {128 * 1024, 3},
2964 {96 * 1024, 1},
2965 {8 * 1024, 2},
2966 {16 * 1024, 1},
2967 },
2968 .block_erase = erase_block_82802ab,
2969 },
2970 },
2971 .write = write_82802ab,
2972 .read = read_memmapped,
2973 },
2974
2975 {
2976 .vendor = "Intel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002977 .name = "82802AB",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002978 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002979 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002980 .model_id = I_82802AB,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002981 .total_size = 512,
2982 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00002983 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00002984 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002985 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002986 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002987 .block_erasers =
2988 {
2989 {
2990 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson28accc22010-03-19 18:47:06 +00002991 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00002992 },
2993 },
Sean Nelson28accc22010-03-19 18:47:06 +00002994 .unlock = unlock_82802ab,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002995 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002996 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002997 },
2998
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002999 {
3000 .vendor = "Intel",
3001 .name = "82802AC",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003002 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003003 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003004 .model_id = I_82802AC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003005 .total_size = 1024,
3006 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00003007 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00003008 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003009 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003010 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00003011 .block_erasers =
3012 {
3013 {
3014 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson28accc22010-03-19 18:47:06 +00003015 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00003016 },
3017 },
Sean Nelson28accc22010-03-19 18:47:06 +00003018 .unlock = unlock_82802ab,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003019 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003020 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003021 },
3022
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003023 {
3024 .vendor = "Macronix",
3025 .name = "MX25L512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003026 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003027 .manufacture_id = MX_ID,
3028 .model_id = MX_25L512,
3029 .total_size = 64,
3030 .page_size = 256,
3031 .tested = TEST_UNTESTED,
3032 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003033 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003034 .block_erasers =
3035 {
3036 {
3037 .eraseblocks = { {4 * 1024, 16} },
3038 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003039 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003040 .eraseblocks = { {64 * 1024, 1} },
3041 .block_erase = spi_block_erase_52,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003042 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003043 .eraseblocks = { {64 * 1024, 1} },
3044 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003045 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003046 .eraseblocks = { {64 * 1024, 1} },
3047 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003048 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003049 .eraseblocks = { {64 * 1024, 1} },
3050 .block_erase = spi_block_erase_c7,
3051 },
3052 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003053 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003054 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003055 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003056 },
3057
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003058 {
3059 .vendor = "Macronix",
3060 .name = "MX25L1005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003061 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003062 .manufacture_id = MX_ID,
3063 .model_id = MX_25L1005,
3064 .total_size = 128,
3065 .page_size = 256,
3066 .tested = TEST_UNTESTED,
3067 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003068 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003069 .block_erasers =
3070 {
3071 {
3072 .eraseblocks = { {4 * 1024, 32} },
3073 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003074 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003075 .eraseblocks = { {64 * 1024, 2} },
3076 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003077 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003078 .eraseblocks = { {128 * 1024, 1} },
3079 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003080 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00003081 .eraseblocks = { {128 * 1024, 1} },
3082 .block_erase = spi_block_erase_c7,
3083 },
3084 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003085 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003086 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003087 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003088 },
3089
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003090 {
3091 .vendor = "Macronix",
3092 .name = "MX25L2005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003093 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003094 .manufacture_id = MX_ID,
3095 .model_id = MX_25L2005,
3096 .total_size = 256,
3097 .page_size = 256,
3098 .tested = TEST_UNTESTED,
3099 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003100 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003101 .block_erasers =
3102 {
3103 {
3104 .eraseblocks = { {4 * 1024, 64} },
3105 .block_erase = spi_block_erase_20,
3106 }, {
3107 .eraseblocks = { {64 * 1024, 4} },
3108 .block_erase = spi_block_erase_52,
3109 }, {
3110 .eraseblocks = { {64 * 1024, 4} },
3111 .block_erase = spi_block_erase_d8,
3112 }, {
3113 .eraseblocks = { {256 * 1024, 1} },
3114 .block_erase = spi_block_erase_60,
3115 }, {
3116 .eraseblocks = { {256 * 1024, 1} },
3117 .block_erase = spi_block_erase_c7,
3118 },
3119 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003120 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003121 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003122 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003123 },
3124
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003125 {
3126 .vendor = "Macronix",
3127 .name = "MX25L4005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003128 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003129 .manufacture_id = MX_ID,
3130 .model_id = MX_25L4005,
3131 .total_size = 512,
3132 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003133 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003134 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003135 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003136 .block_erasers =
3137 {
3138 {
3139 .eraseblocks = { {4 * 1024, 128} },
3140 .block_erase = spi_block_erase_20,
3141 }, {
3142 .eraseblocks = { {64 * 1024, 8} },
3143 .block_erase = spi_block_erase_52,
3144 }, {
3145 .eraseblocks = { {64 * 1024, 8} },
3146 .block_erase = spi_block_erase_d8,
3147 }, {
3148 .eraseblocks = { {512 * 1024, 1} },
3149 .block_erase = spi_block_erase_60,
3150 }, {
3151 .eraseblocks = { {512 * 1024, 1} },
3152 .block_erase = spi_block_erase_c7,
3153 },
3154 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003155 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003156 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003157 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003158 },
3159
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003160 {
3161 .vendor = "Macronix",
3162 .name = "MX25L8005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003163 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003164 .manufacture_id = MX_ID,
3165 .model_id = MX_25L8005,
3166 .total_size = 1024,
3167 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003168 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003169 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003170 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003171 .block_erasers =
3172 {
3173 {
3174 .eraseblocks = { {4 * 1024, 256} },
3175 .block_erase = spi_block_erase_20,
3176 }, {
3177 .eraseblocks = { {64 * 1024, 16} },
3178 .block_erase = spi_block_erase_52,
3179 }, {
3180 .eraseblocks = { {64 * 1024, 16} },
3181 .block_erase = spi_block_erase_d8,
3182 }, {
3183 .eraseblocks = { {1024 * 1024, 1} },
3184 .block_erase = spi_block_erase_60,
3185 }, {
3186 .eraseblocks = { {1024 * 1024, 1} },
3187 .block_erase = spi_block_erase_c7,
3188 },
3189 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003190 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003191 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003192 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003193 },
3194
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003195 {
3196 .vendor = "Macronix",
3197 .name = "MX25L1605",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003198 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003199 .manufacture_id = MX_ID,
3200 .model_id = MX_25L1605,
3201 .total_size = 2048,
3202 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003203 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003204 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003205 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00003206 .block_erasers =
3207 {
3208 {
3209 .eraseblocks = { {4 * 1024, 512} },
3210 .block_erase = spi_block_erase_20, /* This erase function has 64k blocksize for eLiteFlash */
3211 }, {
3212 .eraseblocks = { {64 * 1024, 32} }, /* Not supported in MX25L1605 (eLiteFlash) and MX25L1605D */
3213 .block_erase = spi_block_erase_52,
3214 }, {
3215 .eraseblocks = { {64 * 1024, 32} },
3216 .block_erase = spi_block_erase_d8,
3217 }, {
3218 .eraseblocks = { {2 * 1024 * 1024, 1} },
3219 .block_erase = spi_block_erase_60,
3220 }, {
3221 .eraseblocks = { {2 * 1024 * 1024, 1} },
3222 .block_erase = spi_block_erase_c7,
3223 },
3224 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003225 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003226 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003227 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003228 },
3229
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003230 {
3231 .vendor = "Macronix",
Stephan Guillouxf5c70902009-04-19 23:04:00 +00003232 .name = "MX25L1635D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003233 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00003234 .manufacture_id = MX_ID,
3235 .model_id = MX_25L1635D,
3236 .total_size = 2048,
3237 .page_size = 256,
3238 .tested = TEST_UNTESTED,
3239 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003240 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003241 .block_erasers =
3242 {
3243 {
3244 .eraseblocks = { {4 * 1024, 512} },
3245 .block_erase = spi_block_erase_20,
3246 }, {
3247 .eraseblocks = { {64 * 1024, 32} },
3248 .block_erase = spi_block_erase_d8,
3249 }, {
3250 .eraseblocks = { {2 * 1024 * 1024, 1} },
3251 .block_erase = spi_block_erase_60,
3252 }, {
3253 .eraseblocks = { {2 * 1024 * 1024, 1} },
3254 .block_erase = spi_block_erase_c7,
3255 }
3256 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003257 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003258 .write = spi_chip_write_256,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00003259 .read = spi_chip_read,
3260 },
Stephan Guillouxfd315502009-04-20 22:54:13 +00003261
Stephan Guillouxf5c70902009-04-19 23:04:00 +00003262 {
3263 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003264 .name = "MX25L3205",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003265 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003266 .manufacture_id = MX_ID,
3267 .model_id = MX_25L3205,
3268 .total_size = 4096,
3269 .page_size = 256,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003270 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003271 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003272 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003273 .block_erasers =
3274 {
3275 {
3276 .eraseblocks = { {4 * 1024, 1024} },
3277 .block_erase = spi_block_erase_20,
3278 }, {
3279 .eraseblocks = { {4 * 1024, 1024} },
3280 .block_erase = spi_block_erase_d8,
3281 }, {
3282 .eraseblocks = { {4 * 1024 * 1024, 1} },
3283 .block_erase = spi_block_erase_60,
3284 }, {
3285 .eraseblocks = { {4 * 1024 * 1024, 1} },
3286 .block_erase = spi_block_erase_c7,
3287 },
3288 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003289 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003290 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003291 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003292 },
3293
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003294 {
3295 .vendor = "Macronix",
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00003296 .name = "MX25L3235D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003297 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00003298 .manufacture_id = MX_ID,
3299 .model_id = MX_25L3235D,
3300 .total_size = 4096,
3301 .page_size = 256,
3302 .tested = TEST_UNTESTED,
3303 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003304 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003305 .block_erasers =
3306 {
3307 {
3308 .eraseblocks = { {4 * 1024, 1024} },
3309 .block_erase = spi_block_erase_20,
3310 }, {
3311 .eraseblocks = { {64 * 1024, 64} },
3312 .block_erase = spi_block_erase_d8,
3313 }, {
3314 .eraseblocks = { {4 * 1024 * 1024, 1} },
3315 .block_erase = spi_block_erase_60,
3316 }, {
3317 .eraseblocks = { {4 * 1024 * 1024, 1} },
3318 .block_erase = spi_block_erase_c7,
3319 }
3320 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003321 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003322 .write = spi_chip_write_256,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00003323 .read = spi_chip_read,
3324 },
3325
3326 {
3327 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003328 .name = "MX25L6405",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003329 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003330 .manufacture_id = MX_ID,
3331 .model_id = MX_25L6405,
3332 .total_size = 8192,
3333 .page_size = 256,
Carl-Daniel Hailfinger452b3e32009-06-22 11:14:43 +00003334 .tested = TEST_OK_PROBE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003335 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003336 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003337 .block_erasers =
3338 {
3339 {
3340 .eraseblocks = { {64 * 1024, 128} },
3341 .block_erase = spi_block_erase_20,
3342 }, {
3343 .eraseblocks = { {64 * 1024, 128} },
3344 .block_erase = spi_block_erase_d8,
3345 }, {
3346 .eraseblocks = { {8 * 1024 * 1024, 1} },
3347 .block_erase = spi_block_erase_60,
3348 }, {
3349 .eraseblocks = { {8 * 1024 * 1024, 1} },
3350 .block_erase = spi_block_erase_c7,
3351 }
3352 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003353 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003354 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003355 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003356 },
3357
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003358 {
3359 .vendor = "Macronix",
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00003360 .name = "MX25L12805",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003361 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00003362 .manufacture_id = MX_ID,
3363 .model_id = MX_25L12805,
3364 .total_size = 16384,
3365 .page_size = 256,
3366 .tested = TEST_UNTESTED,
3367 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003368 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003369 .block_erasers =
3370 {
3371 {
3372 .eraseblocks = { {4 * 1024, 4096} },
3373 .block_erase = spi_block_erase_20,
3374 }, {
3375 .eraseblocks = { {64 * 1024, 256} },
3376 .block_erase = spi_block_erase_d8,
3377 }, {
3378 .eraseblocks = { {16 * 1024 * 1024, 1} },
3379 .block_erase = spi_block_erase_60,
3380 }, {
3381 .eraseblocks = { {16 * 1024 * 1024, 1} },
3382 .block_erase = spi_block_erase_c7,
3383 }
3384 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003385 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003386 .write = spi_chip_write_256,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00003387 .read = spi_chip_read,
3388 },
3389
3390 {
3391 .vendor = "Macronix",
Mark Panajotovic502a9132009-08-24 01:42:24 +00003392 .name = "MX29F001B",
3393 .bustype = CHIP_BUSTYPE_PARALLEL,
3394 .manufacture_id = MX_ID,
3395 .model_id = MX_29F001B,
3396 .total_size = 128,
3397 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003398 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
3399 .tested = TEST_UNTESTED,
3400 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00003401 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00003402 .block_erasers =
3403 {
3404 {
3405 .eraseblocks = {
3406 {8 * 1024, 1},
3407 {4 * 1024, 2},
3408 {8 * 1024, 2},
3409 {32 * 1024, 1},
3410 {64 * 1024, 1},
3411 },
Sean Nelson35727f72010-01-28 23:55:12 +00003412 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003413 }, {
3414 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003415 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003416 }
3417 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003418 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00003419 .read = read_memmapped,
3420 },
3421
3422 {
3423 .vendor = "Macronix",
3424 .name = "MX29F001T",
3425 .bustype = CHIP_BUSTYPE_PARALLEL,
3426 .manufacture_id = MX_ID,
3427 .model_id = MX_29F001T,
3428 .total_size = 128,
3429 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003430 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
3431 .tested = TEST_UNTESTED,
3432 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00003433 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00003434 .block_erasers =
3435 {
3436 {
3437 .eraseblocks = {
3438 {64 * 1024, 1},
3439 {32 * 1024, 1},
3440 {8 * 1024, 2},
3441 {4 * 1024, 2},
3442 {8 * 1024, 1},
3443 },
Sean Nelson35727f72010-01-28 23:55:12 +00003444 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003445 }, {
3446 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003447 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003448 }
3449 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003450 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00003451 .read = read_memmapped,
3452 },
3453
3454 {
3455 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003456 .name = "MX29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00003457 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003458 .manufacture_id = MX_ID,
3459 .model_id = MX_29F002B,
3460 .total_size = 256,
3461 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003462 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003463 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00003464 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003465 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003466 .block_erasers =
3467 {
3468 {
3469 .eraseblocks = {
3470 {16 * 1024, 1},
3471 {8 * 1024, 2},
3472 {32 * 1024, 1},
3473 {64 * 1024, 3},
3474 },
Sean Nelson35727f72010-01-28 23:55:12 +00003475 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003476 }, {
3477 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003478 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003479 },
3480 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003481 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003482 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003483 },
3484
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003485 {
3486 .vendor = "Macronix",
3487 .name = "MX29F002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00003488 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003489 .manufacture_id = MX_ID,
3490 .model_id = MX_29F002T,
3491 .total_size = 256,
3492 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003493 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00003494 .tested = TEST_OK_PRW,
Sean Nelson35727f72010-01-28 23:55:12 +00003495 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003496 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003497 .block_erasers =
3498 {
3499 {
3500 .eraseblocks = {
3501 {64 * 1024, 3},
3502 {32 * 1024, 1},
3503 {8 * 1024, 2},
3504 {16 * 1024, 1},
3505 },
Sean Nelson35727f72010-01-28 23:55:12 +00003506 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003507 }, {
3508 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003509 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003510 },
3511 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003512 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003513 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003514 },
3515
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003516 {
3517 .vendor = "Macronix",
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00003518 .name = "MX29LV040",
Urja Rannikko038a3122009-06-28 19:19:25 +00003519 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003520 .manufacture_id = MX_ID,
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00003521 .model_id = MX_29LV040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003522 .total_size = 512,
3523 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003524 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
3525 .tested = TEST_UNTESTED,
3526 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003527 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00003528 .block_erasers =
3529 {
3530 {
3531 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00003532 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003533 }, {
3534 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003535 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003536 },
3537 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003538 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003539 .read = read_memmapped,
Carl-Daniel Hailfinger7de86392008-12-10 10:32:05 +00003540 },
3541
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003542 {
3543 .vendor = "Numonyx",
3544 .name = "M25PE10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003545 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003546 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003547 .model_id = ST_M25PE10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003548 .total_size = 128,
3549 .page_size = 256,
3550 .tested = TEST_UNTESTED,
3551 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003552 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003553 .block_erasers =
3554 {
3555 {
3556 .eraseblocks = { {4 * 1024, 32} },
3557 .block_erase = spi_block_erase_20,
3558 }, {
3559 .eraseblocks = { {64 * 1024, 2} },
3560 .block_erase = spi_block_erase_d8,
3561 }, {
3562 .eraseblocks = { {128 * 1024, 1} },
3563 .block_erase = spi_block_erase_c7,
3564 }
3565 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003566 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003567 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003568 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003569 },
3570
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003571 {
3572 .vendor = "Numonyx",
3573 .name = "M25PE20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003574 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003575 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003576 .model_id = ST_M25PE20,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003577 .total_size = 256,
3578 .page_size = 256,
3579 .tested = TEST_UNTESTED,
3580 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003581 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003582 .block_erasers =
3583 {
3584 {
3585 .eraseblocks = { {4 * 1024, 64} },
3586 .block_erase = spi_block_erase_20,
3587 }, {
3588 .eraseblocks = { {64 * 1024, 4} },
3589 .block_erase = spi_block_erase_d8,
3590 }, {
3591 .eraseblocks = { {256 * 1024, 1} },
3592 .block_erase = spi_block_erase_c7,
3593 }
3594 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003595 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003596 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003597 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003598 },
3599
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003600 {
3601 .vendor = "Numonyx",
3602 .name = "M25PE40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003603 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003604 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003605 .model_id = ST_M25PE40,
Sean Nelson5643c072010-01-19 03:23:07 +00003606 .total_size = 512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003607 .page_size = 256,
3608 .tested = TEST_UNTESTED,
3609 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003610 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003611 .block_erasers =
3612 {
3613 {
3614 .eraseblocks = { {4 * 1024, 128} },
3615 .block_erase = spi_block_erase_20,
3616 }, {
3617 .eraseblocks = { {64 * 1024, 8} },
3618 .block_erase = spi_block_erase_d8,
3619 }, {
3620 .eraseblocks = { {512 * 1024, 1} },
3621 .block_erase = spi_block_erase_c7,
3622 }
3623 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003624 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003625 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003626 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003627 },
3628
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003629 {
3630 .vendor = "Numonyx",
3631 .name = "M25PE80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003632 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003633 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003634 .model_id = ST_M25PE80,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003635 .total_size = 1024,
3636 .page_size = 256,
3637 .tested = TEST_OK_PREW,
3638 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003639 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003640 .block_erasers =
3641 {
3642 {
3643 .eraseblocks = { {4 * 1024, 256} },
3644 .block_erase = spi_block_erase_20,
3645 }, {
3646 .eraseblocks = { {64 * 1024, 16} },
3647 .block_erase = spi_block_erase_d8,
3648 }, {
3649 .eraseblocks = { {1024 * 1024, 1} },
3650 .block_erase = spi_block_erase_c7,
3651 }
3652 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003653 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003654 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003655 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003656 },
3657
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003658 {
3659 .vendor = "Numonyx",
3660 .name = "M25PE16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003661 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003662 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003663 .model_id = ST_M25PE16,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003664 .total_size = 2048,
3665 .page_size = 256,
3666 .tested = TEST_UNTESTED,
3667 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003668 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003669 .block_erasers =
3670 {
3671 {
3672 .eraseblocks = { {4 * 1024, 512} },
3673 .block_erase = spi_block_erase_20,
3674 }, {
3675 .eraseblocks = { {64 * 1024, 32} },
3676 .block_erase = spi_block_erase_d8,
3677 }, {
3678 .eraseblocks = { {2 * 1024 * 1024, 1} },
3679 .block_erase = spi_block_erase_c7,
3680 }
3681 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003682 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003683 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003684 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003685 },
3686
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003687 {
3688 .vendor = "PMC",
3689 .name = "Pm25LV010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003690 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003691 .manufacture_id = PMC_ID,
3692 .model_id = PMC_25LV010,
3693 .total_size = 128,
3694 .page_size = 256,
3695 .tested = TEST_UNTESTED,
3696 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003697 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003698 .block_erasers =
3699 {
3700 {
3701 .eraseblocks = { {4 * 1024, 32} },
3702 .block_erase = spi_block_erase_d7,
3703 }, {
3704 .eraseblocks = { {32 * 1024, 4} },
3705 .block_erase = spi_block_erase_d8,
3706 }, {
3707 .eraseblocks = { {128 * 1024, 1} },
3708 .block_erase = spi_block_erase_c7,
3709 }
3710 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003711 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003712 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003713 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003714 },
3715
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003716 {
3717 .vendor = "PMC",
3718 .name = "Pm25LV016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003719 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003720 .manufacture_id = PMC_ID,
3721 .model_id = PMC_25LV016B,
3722 .total_size = 2048,
3723 .page_size = 256,
3724 .tested = TEST_UNTESTED,
3725 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003726 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003727 .block_erasers =
3728 {
3729 {
3730 .eraseblocks = { {4 * 1024, 512} },
3731 .block_erase = spi_block_erase_d7,
3732 }, {
3733 .eraseblocks = { {4 * 1024, 512} },
3734 .block_erase = spi_block_erase_20,
3735 }, {
3736 .eraseblocks = { {64 * 1024, 32} },
3737 .block_erase = spi_block_erase_d8,
3738 }, {
3739 .eraseblocks = { {2 * 1024 * 1024, 1} },
3740 .block_erase = spi_block_erase_60,
3741 }, {
3742 .eraseblocks = { {2 * 1024 * 1024, 1} },
3743 .block_erase = spi_block_erase_c7,
3744 }
3745 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003746 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003747 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003748 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003749 },
3750
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003751 {
3752 .vendor = "PMC",
3753 .name = "Pm25LV020",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003754 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003755 .manufacture_id = PMC_ID,
3756 .model_id = PMC_25LV020,
3757 .total_size = 256,
3758 .page_size = 256,
3759 .tested = TEST_UNTESTED,
3760 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003761 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003762 .block_erasers =
3763 {
3764 {
3765 .eraseblocks = { {4 * 1024, 64} },
3766 .block_erase = spi_block_erase_d7,
3767 }, {
3768 .eraseblocks = { {64 * 1024, 4} },
3769 .block_erase = spi_block_erase_d8,
3770 }, {
3771 .eraseblocks = { {256 * 1024, 1} },
3772 .block_erase = spi_block_erase_c7,
3773 }
3774 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003775 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003776 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003777 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003778 },
3779
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003780 {
3781 .vendor = "PMC",
3782 .name = "Pm25LV040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003783 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003784 .manufacture_id = PMC_ID,
3785 .model_id = PMC_25LV040,
3786 .total_size = 512,
3787 .page_size = 256,
3788 .tested = TEST_UNTESTED,
3789 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003790 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003791 .block_erasers =
3792 {
3793 {
3794 .eraseblocks = { {4 * 1024, 128} },
3795 .block_erase = spi_block_erase_d7,
3796 }, {
3797 .eraseblocks = { {64 * 1024, 8} },
3798 .block_erase = spi_block_erase_d8,
3799 }, {
3800 .eraseblocks = { {512 * 1024, 1} },
3801 .block_erase = spi_block_erase_c7,
3802 }
3803 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003804 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003805 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003806 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003807 },
3808
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003809 {
3810 .vendor = "PMC",
3811 .name = "Pm25LV080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003812 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003813 .manufacture_id = PMC_ID,
3814 .model_id = PMC_25LV080B,
3815 .total_size = 1024,
3816 .page_size = 256,
3817 .tested = TEST_UNTESTED,
3818 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003819 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003820 .block_erasers =
3821 {
3822 {
3823 .eraseblocks = { {4 * 1024, 256} },
3824 .block_erase = spi_block_erase_d7,
3825 }, {
3826 .eraseblocks = { {4 * 1024, 256} },
3827 .block_erase = spi_block_erase_20,
3828 }, {
3829 .eraseblocks = { {64 * 1024, 16} },
3830 .block_erase = spi_block_erase_d8,
3831 }, {
3832 .eraseblocks = { {1024 * 1024, 1} },
3833 .block_erase = spi_block_erase_60,
3834 }, {
3835 .eraseblocks = { {1024 * 1024, 1} },
3836 .block_erase = spi_block_erase_c7,
3837 }
3838 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003839 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003840 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003841 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003842 },
3843
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003844 {
3845 .vendor = "PMC",
3846 .name = "Pm25LV512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003847 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003848 .manufacture_id = PMC_ID,
3849 .model_id = PMC_25LV512,
3850 .total_size = 64,
3851 .page_size = 256,
3852 .tested = TEST_UNTESTED,
3853 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003854 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003855 .block_erasers =
3856 {
3857 {
3858 .eraseblocks = { {4 * 1024, 16} },
3859 .block_erase = spi_block_erase_d7,
3860 }, {
3861 .eraseblocks = { {32 * 1024, 2} },
3862 .block_erase = spi_block_erase_d8,
3863 }, {
3864 .eraseblocks = { {64 * 1024, 1} },
3865 .block_erase = spi_block_erase_c7,
3866 }
3867 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003868 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003869 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003870 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003871 },
3872
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003873 {
3874 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00003875 .name = "Pm29F002T",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003876 .bustype = CHIP_BUSTYPE_PARALLEL,
3877 .manufacture_id = PMC_ID_NOPREFIX,
3878 .model_id = PMC_29F002T,
3879 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00003880 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003881 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3882 .tested = TEST_UNTESTED,
3883 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003884 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00003885 .block_erasers =
3886 {
3887 {
3888 .eraseblocks = {
3889 {128 * 1024, 1},
3890 {96 * 1024, 1},
3891 {8 * 1024, 2},
3892 {16 * 1024, 1},
3893 },
Sean Nelson35727f72010-01-28 23:55:12 +00003894 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003895 }, {
3896 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003897 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003898 },
3899 },
Sean Nelson35727f72010-01-28 23:55:12 +00003900 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003901 .read = read_memmapped,
3902 },
3903
3904 {
3905 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00003906 .name = "Pm29F002B",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003907 .bustype = CHIP_BUSTYPE_PARALLEL,
3908 .manufacture_id = PMC_ID_NOPREFIX,
3909 .model_id = PMC_29F002B,
3910 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00003911 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003912 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003913 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00003914 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003915 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00003916 .block_erasers =
3917 {
3918 {
3919 .eraseblocks = {
3920 {16 * 1024, 1},
3921 {8 * 1024, 2},
3922 {96 * 1024, 1},
3923 {128 * 1024, 1},
3924 },
Sean Nelson35727f72010-01-28 23:55:12 +00003925 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003926 }, {
3927 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003928 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003929 },
3930 },
Sean Nelson35727f72010-01-28 23:55:12 +00003931 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003932 .read = read_memmapped,
3933 },
3934
3935 {
3936 .vendor = "PMC",
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003937 .name = "Pm39LV010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003938 .bustype = CHIP_BUSTYPE_PARALLEL,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003939 .manufacture_id = PMC_ID_NOPREFIX,
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00003940 .model_id = PMC_39F010, /* Pm39LV010 and Pm39F010 have identical IDs but different voltage */
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003941 .total_size = 128,
3942 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003943 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00003944 .tested = TEST_OK_PREW,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003945 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003946 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson5643c072010-01-19 03:23:07 +00003947 .block_erasers =
3948 {
3949 {
3950 .eraseblocks = { {4 * 1024, 32} },
3951 .block_erase = erase_sector_jedec,
3952 }, {
3953 .eraseblocks = { {64 * 1024, 2} },
3954 .block_erase = erase_block_jedec,
3955 }, {
3956 .eraseblocks = { {128 * 1024, 1} },
3957 .block_erase = erase_chip_block_jedec,
3958 }
3959 },
Sean Nelson35727f72010-01-28 23:55:12 +00003960 .write = write_jedec_1,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003961 .read = read_memmapped,
3962 },
3963
3964 {
3965 .vendor = "PMC",
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00003966 .name = "Pm39LV020",
3967 .bustype = CHIP_BUSTYPE_PARALLEL,
3968 .manufacture_id = PMC_ID_NOPREFIX,
3969 .model_id = PMC_39LV020,
3970 .total_size = 256,
3971 .page_size = 4096,
3972 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3973 .tested = TEST_UNTESTED,
3974 .probe = probe_jedec,
3975 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3976 .block_erasers =
3977 {
3978 {
3979 .eraseblocks = { {4 * 1024, 64} },
3980 .block_erase = erase_sector_jedec,
3981 }, {
3982 .eraseblocks = { {64 * 1024, 4} },
3983 .block_erase = erase_block_jedec,
3984 }, {
3985 .eraseblocks = { {256 * 1024, 1} },
3986 .block_erase = erase_chip_block_jedec,
3987 }
3988 },
3989 .write = write_jedec_1,
3990 .read = read_memmapped,
3991 },
3992
3993 {
3994 .vendor = "PMC",
3995 .name = "Pm39LV040",
3996 .bustype = CHIP_BUSTYPE_PARALLEL,
3997 .manufacture_id = PMC_ID_NOPREFIX,
3998 .model_id = PMC_39LV040,
3999 .total_size = 512,
4000 .page_size = 4096,
4001 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
4002 .tested = TEST_UNTESTED,
4003 .probe = probe_jedec,
4004 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
4005 .block_erasers =
4006 {
4007 {
4008 .eraseblocks = { {4 * 1024, 128} },
4009 .block_erase = erase_sector_jedec,
4010 }, {
4011 .eraseblocks = { {64 * 1024, 8} },
4012 .block_erase = erase_block_jedec,
4013 }, {
4014 .eraseblocks = { {512 * 1024, 1} },
4015 .block_erase = erase_chip_block_jedec,
4016 }
4017 },
4018 .write = write_jedec_1,
4019 .read = read_memmapped,
4020 },
4021
4022 {
4023 .vendor = "PMC",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004024 .name = "Pm49FL002",
Sean Nelson35727f72010-01-28 23:55:12 +00004025 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004026 .manufacture_id = PMC_ID_NOPREFIX,
4027 .model_id = PMC_49FL002,
4028 .total_size = 256,
4029 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004030 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Russ Dill8c7c4682010-03-09 16:53:06 +00004031 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00004032 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004033 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00004034 .block_erasers =
4035 {
4036 {
4037 .eraseblocks = { {4 * 1024, 64} },
4038 .block_erase = erase_sector_jedec,
4039 }, {
4040 .eraseblocks = { {16 * 1024, 16} },
4041 .block_erase = erase_block_jedec,
4042 }, {
4043 .eraseblocks = { {256 * 1024, 1} },
4044 .block_erase = erase_chip_block_jedec,
4045 }
4046 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00004047 .unlock = unlock_49fl00x,
Sean Nelson36172342010-02-27 18:01:15 +00004048 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004049 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004050 },
4051
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004052 {
4053 .vendor = "PMC",
4054 .name = "Pm49FL004",
Sean Nelson35727f72010-01-28 23:55:12 +00004055 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004056 .manufacture_id = PMC_ID_NOPREFIX,
4057 .model_id = PMC_49FL004,
4058 .total_size = 512,
4059 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004060 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00004061 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00004062 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004063 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00004064 .block_erasers =
4065 {
4066 {
4067 .eraseblocks = { {4 * 1024, 128} },
4068 .block_erase = erase_sector_jedec,
4069 }, {
4070 .eraseblocks = { {64 * 1024, 8} },
4071 .block_erase = erase_block_jedec,
4072 }, {
4073 .eraseblocks = { {512 * 1024, 1} },
4074 .block_erase = erase_chip_block_jedec,
4075 }
4076 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00004077 .unlock = unlock_49fl00x,
Sean Nelson36172342010-02-27 18:01:15 +00004078 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004079 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004080 },
4081
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004082 {
Sean Nelsond70b09c2009-11-24 02:11:08 +00004083 .vendor = "Sanyo",
4084 .name = "LF25FW203A",
4085 .bustype = CHIP_BUSTYPE_SPI,
4086 .manufacture_id = SANYO_ID,
4087 .model_id = SANYO_LE25FW203A,
4088 .total_size = 2048,
4089 .page_size = 256,
4090 .tested = TEST_UNTESTED,
4091 .probe = probe_spi_rdid,
4092 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004093 .block_erasers =
4094 {
4095 {
4096 .eraseblocks = { {64 * 1024, 32} },
4097 .block_erase = spi_block_erase_d8,
4098 }, {
4099 .eraseblocks = { {2 * 1024 * 1024, 1} },
4100 .block_erase = spi_block_erase_c7,
4101 }
4102 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004103 .unlock = spi_disable_blockprotect,
Sean Nelsond70b09c2009-11-24 02:11:08 +00004104 .write = spi_chip_write_256,
4105 .read = spi_chip_read,
4106 },
4107
4108 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004109 .vendor = "Sharp",
4110 .name = "LHF00L04",
Urja Rannikko038a3122009-06-28 19:19:25 +00004111 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004112 .manufacture_id = SHARP_ID,
4113 .model_id = SHARP_LHF00L04,
4114 .total_size = 1024,
4115 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004116 .feature_bits = FEATURE_EITHER_RESET | FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004117 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004118 .probe = probe_82802ab,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00004119 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00004120 .block_erasers =
4121 {
4122 {
4123 .eraseblocks = {
4124 {64 * 1024, 15},
4125 {8 * 1024, 8}
4126 },
Sean Nelson28accc22010-03-19 18:47:06 +00004127 .block_erase = erase_block_82802ab,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00004128 }, {
4129 .eraseblocks = {
4130 {1024 * 1024, 1}
4131 },
Sean Nelson51c83fb2010-01-20 20:55:53 +00004132 .block_erase = NULL, /* 30 D0, only in A/A mux mode */
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00004133 },
4134 },
Sean Nelson28accc22010-03-19 18:47:06 +00004135 .unlock = unlock_82802ab,
4136 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004137 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004138 },
4139
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004140 {
4141 .vendor = "Spansion",
Michael Karcher23ff4602010-01-12 23:29:30 +00004142 .name = "S25FL008A",
4143 .bustype = CHIP_BUSTYPE_SPI,
4144 .manufacture_id = SPANSION_ID,
4145 .model_id = SPANSION_S25FL008A,
4146 .total_size = 1024,
4147 .page_size = 256,
4148 .tested = TEST_OK_PREW,
4149 .probe = probe_spi_rdid,
4150 .probe_timing = TIMING_ZERO,
Michael Karcher23ff4602010-01-12 23:29:30 +00004151 .block_erasers =
4152 {
4153 {
4154 .eraseblocks = { {64 * 1024, 16} },
4155 .block_erase = spi_block_erase_d8,
4156 }, {
4157 .eraseblocks = { {1024 * 1024, 1} },
4158 .block_erase = spi_block_erase_c7,
4159 }
4160 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004161 .unlock = spi_disable_blockprotect,
Michael Karcher23ff4602010-01-12 23:29:30 +00004162 .write = spi_chip_write_256,
4163 .read = spi_chip_read,
4164 },
4165
4166 {
4167 .vendor = "Spansion",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004168 .name = "S25FL016A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004169 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004170 .manufacture_id = SPANSION_ID,
4171 .model_id = SPANSION_S25FL016A,
4172 .total_size = 2048,
4173 .page_size = 256,
Sean Nelson5643c072010-01-19 03:23:07 +00004174 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004175 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004176 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00004177 .block_erasers =
4178 {
4179 {
4180 .eraseblocks = { {64 * 1024, 32} },
4181 .block_erase = spi_block_erase_d8,
4182 }, {
4183 .eraseblocks = { {2 * 1024 * 1024, 1} },
4184 .block_erase = spi_block_erase_c7,
4185 }
4186 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004187 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004188 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004189 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004190 },
4191
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004192 {
4193 .vendor = "SST",
4194 .name = "SST25VF016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004195 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004196 .manufacture_id = SST_ID,
4197 .model_id = SST_25VF016B,
4198 .total_size = 2048,
4199 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004200 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004201 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004202 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004203 .block_erasers =
4204 {
4205 {
4206 .eraseblocks = { {4 * 1024, 512} },
4207 .block_erase = spi_block_erase_20,
4208 }, {
4209 .eraseblocks = { {32 * 1024, 64} },
4210 .block_erase = spi_block_erase_52,
4211 }, {
4212 .eraseblocks = { {64 * 1024, 32} },
4213 .block_erase = spi_block_erase_d8,
4214 }, {
4215 .eraseblocks = { {2 * 1024 * 1024, 1} },
4216 .block_erase = spi_block_erase_60,
4217 }, {
4218 .eraseblocks = { {2 * 1024 * 1024, 1} },
4219 .block_erase = spi_block_erase_c7,
4220 },
4221 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004222 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00004223 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004224 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004225 },
4226
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004227 {
4228 .vendor = "SST",
4229 .name = "SST25VF032B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004230 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004231 .manufacture_id = SST_ID,
4232 .model_id = SST_25VF032B,
4233 .total_size = 4096,
4234 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004235 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004236 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004237 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004238 .block_erasers =
4239 {
4240 {
4241 .eraseblocks = { {4 * 1024, 1024} },
4242 .block_erase = spi_block_erase_20,
4243 }, {
4244 .eraseblocks = { {32 * 1024, 128} },
4245 .block_erase = spi_block_erase_52,
4246 }, {
4247 .eraseblocks = { {64 * 1024, 64} },
4248 .block_erase = spi_block_erase_d8,
4249 }, {
4250 .eraseblocks = { {4 * 1024 * 1024, 1} },
4251 .block_erase = spi_block_erase_60,
4252 }, {
4253 .eraseblocks = { {4 * 1024 * 1024, 1} },
4254 .block_erase = spi_block_erase_c7,
4255 },
4256 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004257 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004258 .write = spi_chip_write_1,
4259 .read = spi_chip_read,
4260 },
4261
4262 {
4263 .vendor = "SST",
Ed Swierk86f4e6d2010-07-21 15:02:22 +00004264 .name = "SST25VF064C",
4265 .bustype = CHIP_BUSTYPE_SPI,
4266 .manufacture_id = SST_ID,
4267 .model_id = SST_25VF064C,
4268 .total_size = 8192,
4269 .page_size = 256,
4270 .tested = TEST_OK_PREW,
4271 .probe = probe_spi_rdid,
4272 .probe_timing = TIMING_ZERO,
4273 .block_erasers =
4274 {
4275 {
4276 .eraseblocks = { {4 * 1024, 2048} },
4277 .block_erase = spi_block_erase_20,
4278 }, {
4279 .eraseblocks = { {32 * 1024, 256} },
4280 .block_erase = spi_block_erase_52,
4281 }, {
4282 .eraseblocks = { {64 * 1024, 128} },
4283 .block_erase = spi_block_erase_d8,
4284 }, {
4285 .eraseblocks = { {8 * 1024 * 1024, 1} },
4286 .block_erase = spi_block_erase_60,
4287 }, {
4288 .eraseblocks = { {8 * 1024 * 1024, 1} },
4289 .block_erase = spi_block_erase_c7,
4290 },
4291 },
4292 .unlock = spi_disable_blockprotect,
4293 .write = spi_chip_write_1,
4294 .read = spi_chip_read,
4295 },
4296
4297 {
4298 .vendor = "SST",
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004299 .name = "SST25VF040.REMS",
4300 .bustype = CHIP_BUSTYPE_SPI,
4301 .manufacture_id = SST_ID,
4302 .model_id = SST_25VF040_REMS,
4303 .total_size = 512,
4304 .page_size = 256,
4305 .tested = TEST_OK_PR,
4306 .probe = probe_spi_rems,
4307 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004308 .block_erasers =
4309 {
4310 {
4311 .eraseblocks = { {4 * 1024, 128} },
4312 .block_erase = spi_block_erase_20,
4313 }, {
4314 .eraseblocks = { {32 * 1024, 16} },
4315 .block_erase = spi_block_erase_52,
4316 }, {
4317 .eraseblocks = { {512 * 1024, 1} },
4318 .block_erase = spi_block_erase_60,
4319 },
4320 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004321 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00004322 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004323 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004324 },
4325
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004326 {
4327 .vendor = "SST",
4328 .name = "SST25VF040B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004329 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004330 .manufacture_id = SST_ID,
4331 .model_id = SST_25VF040B,
4332 .total_size = 512,
4333 .page_size = 256,
4334 .tested = TEST_UNTESTED,
4335 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004336 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004337 .block_erasers =
4338 {
4339 {
4340 .eraseblocks = { {4 * 1024, 128} },
4341 .block_erase = spi_block_erase_20,
4342 }, {
4343 .eraseblocks = { {32 * 1024, 16} },
4344 .block_erase = spi_block_erase_52,
4345 }, {
4346 .eraseblocks = { {64 * 1024, 8} },
4347 .block_erase = spi_block_erase_d8,
4348 }, {
4349 .eraseblocks = { {512 * 1024, 1} },
4350 .block_erase = spi_block_erase_60,
4351 }, {
4352 .eraseblocks = { {512 * 1024, 1} },
4353 .block_erase = spi_block_erase_c7,
4354 },
4355 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004356 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00004357 .write = spi_chip_write_1,
Zheng Bao0677dff2009-02-25 08:07:33 +00004358 .read = spi_chip_read,
4359 },
4360
4361 {
4362 .vendor = "SST",
Stefan Reinauer5cacf8c2010-06-14 12:58:06 +00004363 .name = "SST25LF040A.RES",
4364 .bustype = CHIP_BUSTYPE_SPI,
4365 .manufacture_id = SST_ID,
4366 .model_id = SST_25VF040_REMS,
4367 .total_size = 512,
4368 .page_size = 256,
4369 .tested = TEST_OK_PROBE,
4370 .probe = probe_spi_res2,
4371 .probe_timing = TIMING_ZERO,
4372 .block_erasers =
4373 {
4374 {
4375 .eraseblocks = { {4 * 1024, 128} },
4376 .block_erase = spi_block_erase_20,
4377 }, {
4378 .eraseblocks = { {32 * 1024, 16} },
4379 .block_erase = spi_block_erase_52,
4380 }, {
4381 .eraseblocks = { {512 * 1024, 1} },
4382 .block_erase = spi_block_erase_60,
4383 },
4384 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004385 .unlock = spi_disable_blockprotect,
Stefan Reinauer5cacf8c2010-06-14 12:58:06 +00004386 .write = spi_chip_write_1,
4387 .read = spi_chip_read,
4388 },
4389
4390 {
4391 .vendor = "SST",
Peter Stugefd9217d2009-01-26 03:37:40 +00004392 .name = "SST25VF040B.REMS",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004393 .bustype = CHIP_BUSTYPE_SPI,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004394 .manufacture_id = SST_ID,
4395 .model_id = SST_25VF040B_REMS,
Peter Stugefd9217d2009-01-26 03:37:40 +00004396 .total_size = 512,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004397 .page_size = 256,
Peter Stugefd9217d2009-01-26 03:37:40 +00004398 .tested = TEST_OK_PR,
4399 .probe = probe_spi_rems,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004400 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004401 .block_erasers =
4402 {
4403 {
4404 .eraseblocks = { {4 * 1024, 128} },
4405 .block_erase = spi_block_erase_20,
4406 }, {
4407 .eraseblocks = { {32 * 1024, 16} },
4408 .block_erase = spi_block_erase_52,
4409 }, {
4410 .eraseblocks = { {64 * 1024, 8} },
4411 .block_erase = spi_block_erase_d8,
4412 }, {
4413 .eraseblocks = { {512 * 1024, 1} },
4414 .block_erase = spi_block_erase_60,
4415 }, {
4416 .eraseblocks = { {512 * 1024, 1} },
4417 .block_erase = spi_block_erase_c7,
4418 },
4419 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004420 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00004421 .write = spi_chip_write_1,
Peter Stugefd9217d2009-01-26 03:37:40 +00004422 .read = spi_chip_read,
4423 },
4424
4425 {
4426 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004427 .name = "SST25VF080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004428 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004429 .manufacture_id = SST_ID,
4430 .model_id = SST_25VF080B,
4431 .total_size = 1024,
4432 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004433 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004434 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004435 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004436 .block_erasers =
4437 {
4438 {
4439 .eraseblocks = { {4 * 1024, 256} },
4440 .block_erase = spi_block_erase_20,
4441 }, {
4442 .eraseblocks = { {32 * 1024, 32} },
4443 .block_erase = spi_block_erase_52,
4444 }, {
4445 .eraseblocks = { {64 * 1024, 16} },
4446 .block_erase = spi_block_erase_d8,
4447 }, {
4448 .eraseblocks = { {1024 * 1024, 1} },
4449 .block_erase = spi_block_erase_60,
4450 }, {
4451 .eraseblocks = { {1024 * 1024, 1} },
4452 .block_erase = spi_block_erase_c7,
4453 },
4454 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004455 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004456 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004457 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004458 },
4459
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004460 {
4461 .vendor = "SST",
4462 .name = "SST28SF040A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004463 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004464 .manufacture_id = SST_ID,
4465 .model_id = SST_28SF040,
4466 .total_size = 512,
4467 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00004468 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004469 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004470 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004471 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst28sf040.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004472 .block_erasers =
4473 {
4474 {
4475 .eraseblocks = { {128, 4096} },
4476 .block_erase = erase_sector_28sf040,
4477 }, {
4478 .eraseblocks = { {512 * 1024, 1} },
4479 .block_erase = erase_chip_28sf040,
4480 }
4481 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004482 .write = write_28sf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004483 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004484 },
4485
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004486 {
4487 .vendor = "SST",
4488 .name = "SST29EE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00004489 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004490 .manufacture_id = SST_ID,
4491 .model_id = SST_29EE010,
4492 .total_size = 128,
4493 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00004494 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00004495 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004496 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004497 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004498 .block_erasers =
4499 {
4500 {
4501 .eraseblocks = { {128 * 1024, 1} },
4502 .block_erase = erase_chip_block_jedec,
4503 }
4504 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004505 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004506 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004507 },
4508
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004509 {
4510 .vendor = "SST",
4511 .name = "SST29LE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00004512 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004513 .manufacture_id = SST_ID,
4514 .model_id = SST_29LE010,
4515 .total_size = 128,
4516 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00004517 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004518 .tested = TEST_UNTESTED,
4519 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004520 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004521 .block_erasers =
4522 {
4523 {
4524 .eraseblocks = { {128 * 1024, 1} },
4525 .block_erase = erase_chip_block_jedec,
4526 }
4527 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004528 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004529 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004530 },
4531
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004532 {
4533 .vendor = "SST",
4534 .name = "SST29EE020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004535 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004536 .manufacture_id = SST_ID,
4537 .model_id = SST_29EE020A,
4538 .total_size = 256,
4539 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00004540 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00004541 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004542 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004543 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004544 .block_erasers =
4545 {
4546 {
4547 .eraseblocks = { {256 * 1024, 1} },
4548 .block_erase = erase_chip_block_jedec,
4549 }
4550 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004551 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004552 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004553 },
4554
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004555 {
4556 .vendor = "SST",
4557 .name = "SST29LE020",
Urja Rannikko038a3122009-06-28 19:19:25 +00004558 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004559 .manufacture_id = SST_ID,
4560 .model_id = SST_29LE020,
4561 .total_size = 256,
4562 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00004563 .feature_bits = FEATURE_LONG_RESET,
Michael Karcher98eff462010-03-24 22:55:56 +00004564 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004565 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004566 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004567 .block_erasers =
4568 {
4569 {
4570 .eraseblocks = { {256 * 1024, 1} },
4571 .block_erase = erase_chip_block_jedec,
4572 }
4573 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004574 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004575 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004576 },
4577
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004578 {
4579 .vendor = "SST",
Uwe Hermann48da3f92010-01-23 15:15:19 +00004580 .name = "SST39SF512",
4581 .bustype = CHIP_BUSTYPE_PARALLEL,
4582 .manufacture_id = SST_ID,
4583 .model_id = SST_39SF512,
4584 .total_size = 64,
4585 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004586 .feature_bits = FEATURE_EITHER_RESET,
4587 .tested = TEST_UNTESTED,
Uwe Hermann48da3f92010-01-23 15:15:19 +00004588 .probe = probe_jedec,
4589 .probe_timing = 1, /* 150 ns */
Uwe Hermann48da3f92010-01-23 15:15:19 +00004590 .block_erasers =
4591 {
4592 {
4593 .eraseblocks = { {4 * 1024, 16} },
4594 .block_erase = erase_sector_jedec,
4595 }, {
4596 .eraseblocks = { {64 * 1024, 1} },
4597 .block_erase = erase_chip_block_jedec,
4598 }
4599 },
Sean Nelson35727f72010-01-28 23:55:12 +00004600 .write = write_jedec_1,
Uwe Hermann48da3f92010-01-23 15:15:19 +00004601 .read = read_memmapped,
4602 },
4603
4604 {
4605 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004606 .name = "SST39SF010A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004607 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004608 .manufacture_id = SST_ID,
4609 .model_id = SST_39SF010,
4610 .total_size = 128,
4611 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004612 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00004613 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004614 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004615 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004616 .block_erasers =
4617 {
4618 {
4619 .eraseblocks = { {4 * 1024, 32} },
4620 .block_erase = erase_sector_jedec,
4621 }, {
4622 .eraseblocks = { {128 * 1024, 1} },
4623 .block_erase = erase_chip_block_jedec,
4624 }
4625 },
Sean Nelson35727f72010-01-28 23:55:12 +00004626 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004627 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004628 },
4629
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004630 {
4631 .vendor = "SST",
4632 .name = "SST39SF020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004633 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004634 .manufacture_id = SST_ID,
4635 .model_id = SST_39SF020,
4636 .total_size = 256,
4637 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004638 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00004639 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004640 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004641 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004642 .block_erasers =
4643 {
4644 {
4645 .eraseblocks = { {4 * 1024, 64} },
4646 .block_erase = erase_sector_jedec,
4647 }, {
4648 .eraseblocks = { {256 * 1024, 1} },
4649 .block_erase = erase_chip_block_jedec,
4650 }
4651 },
Sean Nelson35727f72010-01-28 23:55:12 +00004652 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004653 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004654 },
4655
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004656 {
4657 .vendor = "SST",
4658 .name = "SST39SF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00004659 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004660 .manufacture_id = SST_ID,
4661 .model_id = SST_39SF040,
4662 .total_size = 512,
4663 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004664 .feature_bits = FEATURE_EITHER_RESET,
4665 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004666 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004667 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004668 .block_erasers =
4669 {
4670 {
4671 .eraseblocks = { {4 * 1024, 128} },
4672 .block_erase = erase_sector_jedec,
4673 }, {
4674 .eraseblocks = { {512 * 1024, 1} },
4675 .block_erase = erase_chip_block_jedec,
4676 }
4677 },
Sean Nelson35727f72010-01-28 23:55:12 +00004678 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004679 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004680 },
4681
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004682 {
4683 .vendor = "SST",
4684 .name = "SST39VF512",
Urja Rannikko038a3122009-06-28 19:19:25 +00004685 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004686 .manufacture_id = SST_ID,
4687 .model_id = SST_39VF512,
4688 .total_size = 64,
4689 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004690 .feature_bits = FEATURE_EITHER_RESET,
4691 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004692 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004693 .probe_timing = 1, /* 150 ns*/
Sean Nelson51c83fb2010-01-20 20:55:53 +00004694 .block_erasers =
4695 {
4696 {
4697 .eraseblocks = { {4 * 1024, 16} },
4698 .block_erase = erase_sector_jedec,
4699 }, {
4700 .eraseblocks = { {64 * 1024, 1} },
4701 .block_erase = erase_chip_block_jedec,
4702 }
4703 },
Sean Nelson35727f72010-01-28 23:55:12 +00004704 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004705 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004706 },
4707
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004708 {
4709 .vendor = "SST",
4710 .name = "SST39VF010",
Urja Rannikko038a3122009-06-28 19:19:25 +00004711 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004712 .manufacture_id = SST_ID,
4713 .model_id = SST_39VF010,
4714 .total_size = 128,
4715 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004716 .feature_bits = FEATURE_EITHER_RESET,
Guenter Knauf2bd007a2010-06-24 11:51:12 +00004717 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004718 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004719 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004720 .block_erasers =
4721 {
4722 {
4723 .eraseblocks = { {4 * 1024, 32} },
4724 .block_erase = erase_sector_jedec,
4725 }, {
4726 .eraseblocks = { {128 * 1024, 1} },
4727 .block_erase = erase_chip_block_jedec,
4728 }
4729 },
Sean Nelson35727f72010-01-28 23:55:12 +00004730 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004731 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004732 },
4733
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004734 {
4735 .vendor = "SST",
4736 .name = "SST39VF020",
Urja Rannikko038a3122009-06-28 19:19:25 +00004737 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004738 .manufacture_id = SST_ID,
4739 .model_id = SST_39VF020,
4740 .total_size = 256,
4741 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004742 .feature_bits = FEATURE_EITHER_RESET,
4743 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004744 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004745 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004746 .block_erasers =
4747 {
4748 {
4749 .eraseblocks = { {4 * 1024, 64} },
4750 .block_erase = erase_sector_jedec,
4751 }, {
4752 .eraseblocks = { {256 * 1024, 1} },
4753 .block_erase = erase_chip_block_jedec,
4754 }
4755 },
Sean Nelson35727f72010-01-28 23:55:12 +00004756 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004757 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004758 },
4759
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004760 {
4761 .vendor = "SST",
4762 .name = "SST39VF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00004763 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004764 .manufacture_id = SST_ID,
4765 .model_id = SST_39VF040,
4766 .total_size = 512,
4767 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004768 .feature_bits = FEATURE_EITHER_RESET,
4769 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004770 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004771 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004772 .block_erasers =
4773 {
4774 {
4775 .eraseblocks = { {4 * 1024, 128} },
4776 .block_erase = erase_sector_jedec,
4777 }, {
4778 .eraseblocks = { {512 * 1024, 1} },
4779 .block_erase = erase_chip_block_jedec,
4780 }
4781 },
Sean Nelson35727f72010-01-28 23:55:12 +00004782 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004783 .read = read_memmapped,
Carl-Daniel Hailfinger90eff152008-12-08 23:51:45 +00004784 },
FENG yu ningff692fb2008-12-08 18:15:10 +00004785
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004786 {
4787 .vendor = "SST",
Peter Stuge8440cc02009-01-25 23:55:12 +00004788 .name = "SST39VF080",
Urja Rannikko038a3122009-06-28 19:19:25 +00004789 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004790 .manufacture_id = SST_ID,
4791 .model_id = SST_39VF080,
Peter Stuge8440cc02009-01-25 23:55:12 +00004792 .total_size = 1024,
4793 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004794 .feature_bits = FEATURE_EITHER_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +00004795 .tested = TEST_UNTESTED,
4796 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004797 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004798 .block_erasers =
4799 {
4800 {
4801 .eraseblocks = { {4 * 1024, 256} },
4802 .block_erase = erase_sector_jedec,
4803 }, {
4804 .eraseblocks = { {64 * 1024, 16} },
4805 .block_erase = erase_block_jedec,
4806 }, {
4807 .eraseblocks = { {1024 * 1024, 1} },
4808 .block_erase = erase_chip_block_jedec,
4809 }
4810 },
Sean Nelson35727f72010-01-28 23:55:12 +00004811 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004812 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +00004813 },
4814
4815 {
4816 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004817 .name = "SST49LF002A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004818 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004819 .manufacture_id = SST_ID,
4820 .model_id = SST_49LF002A,
4821 .total_size = 256,
4822 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004823 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004824 .tested = TEST_OK_PRW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004825 .probe = probe_jedec,
4826 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004827 .block_erasers =
4828 {
4829 {
4830 .eraseblocks = { {4 * 1024, 64} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004831 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004832 }, {
4833 .eraseblocks = { {16 * 1024, 16} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004834 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004835 }, {
4836 .eraseblocks = { {256 * 1024, 1} },
4837 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4838 }
4839 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004840 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004841 .unlock = unlock_sst_fwhub,
4842 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004843 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004844 },
4845
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004846 {
4847 .vendor = "SST",
4848 .name = "SST49LF003A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004849 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004850 .manufacture_id = SST_ID,
4851 .model_id = SST_49LF003A,
4852 .total_size = 384,
4853 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004854 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Peter Lemenkov45835c42009-09-25 01:09:18 +00004855 .tested = TEST_OK_PR,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004856 .probe = probe_jedec,
4857 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004858 .block_erasers =
4859 {
4860 {
4861 .eraseblocks = { {4 * 1024, 96} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004862 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004863 }, {
4864 .eraseblocks = { {64 * 1024, 6} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004865 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004866 }, {
4867 .eraseblocks = { {384 * 1024, 1} },
4868 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4869 }
4870 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004871 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004872 .unlock = unlock_sst_fwhub,
4873 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004874 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004875 },
4876
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004877 {
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004878 /* Contrary to the data sheet, TBL# on the SST49LF004B affects the top 128kB (instead of 64kB)
4879 * and is only honored for 64k block erase, but not 4k sector erase.
4880 */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004881 .vendor = "SST",
4882 .name = "SST49LF004A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004883 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004884 .manufacture_id = SST_ID,
4885 .model_id = SST_49LF004A,
4886 .total_size = 512,
4887 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004888 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004889 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004890 .probe = probe_jedec,
4891 .probe_timing = 1, /* 150 ns */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004892 .block_erasers =
4893 {
4894 {
4895 .eraseblocks = { {4 * 1024, 128} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004896 .block_erase = erase_sector_jedec,
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004897 }, {
4898 .eraseblocks = { {64 * 1024, 8} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004899 .block_erase = erase_block_jedec,
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004900 }, {
4901 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson51c83fb2010-01-20 20:55:53 +00004902 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004903 },
4904 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004905 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004906 .unlock = unlock_sst_fwhub,
4907 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004908 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004909 },
4910
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004911 {
4912 .vendor = "SST",
4913 .name = "SST49LF004C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004914 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004915 .manufacture_id = SST_ID,
4916 .model_id = SST_49LF004C,
4917 .total_size = 512,
4918 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004919 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004920 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004921 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004922 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004923 .block_erasers =
4924 {
4925 {
4926 .eraseblocks = { {4 * 1024, 128} },
4927 .block_erase = erase_sector_49lfxxxc,
4928 }, {
4929 .eraseblocks = {
4930 {64 * 1024, 7},
4931 {32 * 1024, 1},
4932 {8 * 1024, 2},
4933 {16 * 1024, 1},
4934 },
Sean Nelson69e58112010-03-23 17:10:28 +00004935 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004936 }
4937 },
Sean Nelson69e58112010-03-23 17:10:28 +00004938 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004939 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004940 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004941 },
4942
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004943 {
4944 .vendor = "SST",
4945 .name = "SST49LF008A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004946 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004947 .manufacture_id = SST_ID,
4948 .model_id = SST_49LF008A,
4949 .total_size = 1024,
4950 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004951 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00004952 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004953 .probe = probe_jedec,
4954 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004955 .block_erasers =
4956 {
4957 {
4958 .eraseblocks = { {4 * 1024, 256} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004959 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004960 }, {
4961 .eraseblocks = { {64 * 1024, 16} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004962 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004963 }, {
4964 .eraseblocks = { {1024 * 1024, 1} },
4965 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4966 }
4967 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004968 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004969 .unlock = unlock_sst_fwhub,
4970 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004971 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004972 },
4973
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004974 {
4975 .vendor = "SST",
4976 .name = "SST49LF008C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004977 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004978 .manufacture_id = SST_ID,
4979 .model_id = SST_49LF008C,
4980 .total_size = 1024,
4981 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004982 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004983 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004984 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004985 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004986 .block_erasers =
4987 {
4988 {
4989 .eraseblocks = { {4 * 1024, 256} },
4990 .block_erase = erase_sector_49lfxxxc,
4991 }, {
4992 .eraseblocks = {
4993 {64 * 1024, 15},
4994 {32 * 1024, 1},
4995 {8 * 1024, 2},
4996 {16 * 1024, 1},
4997 },
Sean Nelson69e58112010-03-23 17:10:28 +00004998 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004999 }
5000 },
Sean Nelson69e58112010-03-23 17:10:28 +00005001 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005002 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005003 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005004 },
5005
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005006 {
5007 .vendor = "SST",
5008 .name = "SST49LF016C",
Urja Rannikko038a3122009-06-28 19:19:25 +00005009 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005010 .manufacture_id = SST_ID,
5011 .model_id = SST_49LF016C,
5012 .total_size = 2048,
5013 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005014 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005015 .tested = TEST_OK_PRW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005016 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005017 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005018 .block_erasers =
5019 {
5020 {
5021 .eraseblocks = { {4 * 1024, 512} },
5022 .block_erase = erase_sector_49lfxxxc,
5023 }, {
5024 .eraseblocks = {
5025 {64 * 1024, 31},
5026 {32 * 1024, 1},
5027 {8 * 1024, 2},
5028 {16 * 1024, 1},
5029 },
Sean Nelson69e58112010-03-23 17:10:28 +00005030 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005031 }
5032 },
Sean Nelson69e58112010-03-23 17:10:28 +00005033 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005034 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005035 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005036 },
5037
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005038 {
5039 .vendor = "SST",
5040 .name = "SST49LF020",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005041 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005042 .manufacture_id = SST_ID,
5043 .model_id = SST_49LF020,
5044 .total_size = 256,
5045 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005046 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00005047 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005048 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005049 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005050 .block_erasers =
5051 {
5052 {
5053 .eraseblocks = { {4 * 1024, 64} },
5054 .block_erase = erase_sector_jedec,
5055 }, {
5056 .eraseblocks = { {16 * 1024, 16} },
5057 .block_erase = erase_block_jedec,
5058 }, {
5059 .eraseblocks = { {256 * 1024, 1} },
5060 .block_erase = NULL,
5061 }
5062 },
Sean Nelson35727f72010-01-28 23:55:12 +00005063 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005064 .read = read_memmapped,
Sven Schnellec208dfb2009-01-07 12:35:09 +00005065 },
5066
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005067 {
5068 .vendor = "SST",
5069 .name = "SST49LF020A",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005070 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005071 .manufacture_id = SST_ID,
5072 .model_id = SST_49LF020A,
5073 .total_size = 256,
Carl-Daniel Hailfingerda654322009-07-23 01:44:38 +00005074 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005075 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00005076 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005077 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005078 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005079 .block_erasers =
5080 {
5081 {
5082 .eraseblocks = { {4 * 1024, 64} },
5083 .block_erase = erase_sector_jedec,
5084 }, {
5085 .eraseblocks = { {16 * 1024, 16} },
5086 .block_erase = erase_block_jedec,
5087 }, {
5088 .eraseblocks = { {256 * 1024, 1} },
5089 .block_erase = NULL,
5090 }
5091 },
Sean Nelson35727f72010-01-28 23:55:12 +00005092 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005093 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005094 },
5095
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005096 {
5097 .vendor = "SST",
5098 .name = "SST49LF040",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005099 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005100 .manufacture_id = SST_ID,
5101 .model_id = SST_49LF040,
5102 .total_size = 512,
5103 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005104 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00005105 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005106 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005107 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005108 .block_erasers =
5109 {
5110 {
5111 .eraseblocks = { {4 * 1024, 128} },
5112 .block_erase = erase_sector_jedec,
5113 }, {
5114 .eraseblocks = { {64 * 1024, 8} },
5115 .block_erase = erase_block_jedec,
5116 }, {
5117 .eraseblocks = { {512 * 1024, 1} },
5118 .block_erase = NULL,
5119 }
5120 },
Sean Nelson35727f72010-01-28 23:55:12 +00005121 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005122 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005123 },
5124
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005125 {
5126 .vendor = "SST",
5127 .name = "SST49LF040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005128 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005129 .manufacture_id = SST_ID,
5130 .model_id = SST_49LF040B,
5131 .total_size = 512,
5132 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005133 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00005134 .tested = TEST_OK_PR,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005135 .probe = probe_jedec,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005136 .probe_timing = 1, /* 150ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005137 .block_erasers =
5138 {
5139 {
5140 .eraseblocks = { {4 * 1024, 128} },
5141 .block_erase = erase_sector_jedec,
5142 }, {
5143 .eraseblocks = { {64 * 1024, 8} },
5144 .block_erase = erase_block_jedec,
5145 }, {
5146 .eraseblocks = { {512 * 1024, 1} },
5147 .block_erase = NULL,
5148 }
5149 },
Sean Nelson35727f72010-01-28 23:55:12 +00005150 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005151 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005152 },
5153
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005154 {
5155 .vendor = "SST",
5156 .name = "SST49LF080A",
Urja Rannikko038a3122009-06-28 19:19:25 +00005157 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005158 .manufacture_id = SST_ID,
Urja Rannikko038a3122009-06-28 19:19:25 +00005159 .model_id = SST_49LF080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005160 .total_size = 1024,
5161 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00005162 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00005163 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005164 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005165 .probe_timing = TIMING_FIXME,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005166 .block_erasers =
5167 {
5168 {
5169 .eraseblocks = { {4 * 1024, 256} },
5170 .block_erase = erase_sector_jedec,
5171 }, {
5172 .eraseblocks = { {64 * 1024, 16} },
5173 .block_erase = erase_block_jedec,
5174 }, {
5175 .eraseblocks = { {1024 * 1024, 1} },
5176 .block_erase = NULL,
5177 }
5178 },
Sean Nelson35727f72010-01-28 23:55:12 +00005179 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005180 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005181 },
5182
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005183 {
5184 .vendor = "SST",
5185 .name = "SST49LF160C",
Urja Rannikko038a3122009-06-28 19:19:25 +00005186 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005187 .manufacture_id = SST_ID,
5188 .model_id = SST_49LF160C,
5189 .total_size = 2048,
5190 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005191 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005192 .tested = TEST_OK_PRW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005193 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005194 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00005195 .block_erasers =
5196 {
5197 {
5198 .eraseblocks = { {4 * 1024, 512} },
5199 .block_erase = erase_sector_49lfxxxc,
5200 }, {
5201 .eraseblocks = {
5202 {64 * 1024, 31},
5203 {32 * 1024, 1},
5204 {8 * 1024, 2},
5205 {16 * 1024, 1},
5206 },
Sean Nelson69e58112010-03-23 17:10:28 +00005207 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00005208 }
5209 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00005210 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005211 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005212 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005213 },
5214
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005215 {
5216 .vendor = "ST",
5217 .name = "M25P05-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005218 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005219 .manufacture_id = ST_ID,
5220 .model_id = ST_M25P05A,
5221 .total_size = 64,
5222 .page_size = 256,
5223 .tested = TEST_UNTESTED,
5224 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005225 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005226 .block_erasers =
5227 {
5228 {
5229 .eraseblocks = { {32 * 1024, 2} },
5230 .block_erase = spi_block_erase_d8,
5231 }, {
5232 .eraseblocks = { {64 * 1024, 1} },
5233 .block_erase = spi_block_erase_c7,
5234 }
5235 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005236 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005237 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005238 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005239 },
5240
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005241 /* The ST M25P05 is a bit of a problem. It has the same ID as the
5242 * ST M25P05-A in RES mode, but supports only 128 byte writes instead
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005243 * of 256 byte writes. We rely heavily on the fact that probe_spi_res1
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005244 * only is successful if RDID does not work.
5245 */
5246 {
5247 .vendor = "ST",
5248 .name = "M25P05.RES",
5249 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005250 .manufacture_id = 0, /* Not used. */
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005251 .model_id = ST_M25P05_RES,
5252 .total_size = 64,
5253 .page_size = 256,
5254 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005255 .probe = probe_spi_res1,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005256 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005257 .block_erasers =
5258 {
5259 {
5260 .eraseblocks = { {32 * 1024, 2} },
5261 .block_erase = spi_block_erase_d8,
5262 }, {
5263 .eraseblocks = { {64 * 1024, 1} },
5264 .block_erase = spi_block_erase_c7,
5265 }
5266 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005267 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005268 .write = spi_chip_write_1, /* 128 */
5269 .read = spi_chip_read,
5270 },
5271
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005272 {
5273 .vendor = "ST",
5274 .name = "M25P10-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005275 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005276 .manufacture_id = ST_ID,
5277 .model_id = ST_M25P10A,
5278 .total_size = 128,
5279 .page_size = 256,
5280 .tested = TEST_UNTESTED,
5281 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +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 Hailfinger8d497012009-05-09 02:34:18 +00005294 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005295 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005296 },
5297
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005298 /* The ST M25P10 has the same problem as the M25P05. */
5299 {
5300 .vendor = "ST",
5301 .name = "M25P10.RES",
5302 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005303 .manufacture_id = 0, /* Not used. */
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005304 .model_id = ST_M25P10_RES,
5305 .total_size = 128,
5306 .page_size = 256,
5307 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005308 .probe = probe_spi_res1,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005309 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005310 .block_erasers =
5311 {
5312 {
5313 .eraseblocks = { {32 * 1024, 4} },
5314 .block_erase = spi_block_erase_d8,
5315 }, {
5316 .eraseblocks = { {128 * 1024, 1} },
5317 .block_erase = spi_block_erase_c7,
5318 }
5319 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005320 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005321 .write = spi_chip_write_1, /* 128 */
5322 .read = spi_chip_read,
5323 },
5324
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005325 {
5326 .vendor = "ST",
5327 .name = "M25P20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005328 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005329 .manufacture_id = ST_ID,
5330 .model_id = ST_M25P20,
5331 .total_size = 256,
5332 .page_size = 256,
5333 .tested = TEST_UNTESTED,
5334 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005335 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005336 .block_erasers =
5337 {
5338 {
5339 .eraseblocks = { {64 * 1024, 4} },
5340 .block_erase = spi_block_erase_d8,
5341 }, {
5342 .eraseblocks = { {256 * 1024, 1} },
5343 .block_erase = spi_block_erase_c7,
5344 }
5345 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005346 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005347 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005348 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005349 },
5350
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005351 {
5352 .vendor = "ST",
5353 .name = "M25P40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005354 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005355 .manufacture_id = ST_ID,
5356 .model_id = ST_M25P40,
5357 .total_size = 512,
5358 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00005359 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005360 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005361 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005362 .block_erasers =
5363 {
5364 {
5365 .eraseblocks = { {64 * 1024, 8} },
5366 .block_erase = spi_block_erase_d8,
5367 }, {
5368 .eraseblocks = { {512 * 1024, 1} },
5369 .block_erase = spi_block_erase_c7,
5370 }
5371 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005372 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005373 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005374 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005375 },
5376
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005377 {
5378 .vendor = "ST",
5379 .name = "M25P40-old",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005380 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005381 .manufacture_id = 0, /* Not used. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005382 .model_id = ST_M25P40_RES,
5383 .total_size = 512,
5384 .page_size = 256,
5385 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005386 .probe = probe_spi_res1,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005387 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005388 .block_erasers =
5389 {
5390 {
5391 .eraseblocks = { {64 * 1024, 8} },
5392 .block_erase = spi_block_erase_d8,
5393 }, {
5394 .eraseblocks = { {512 * 1024, 1} },
5395 .block_erase = spi_block_erase_c7,
5396 }
5397 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005398 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005399 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005400 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005401 },
5402
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005403 {
5404 .vendor = "ST",
5405 .name = "M25P80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005406 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005407 .manufacture_id = ST_ID,
5408 .model_id = ST_M25P80,
5409 .total_size = 1024,
5410 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00005411 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005412 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005413 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005414 .block_erasers =
5415 {
5416 {
5417 .eraseblocks = { {64 * 1024, 16} },
5418 .block_erase = spi_block_erase_d8,
5419 }, {
5420 .eraseblocks = { {1024 * 1024, 1} },
5421 .block_erase = spi_block_erase_c7,
5422 }
5423 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005424 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005425 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005426 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005427 },
5428
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005429 {
5430 .vendor = "ST",
5431 .name = "M25P16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005432 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005433 .manufacture_id = ST_ID,
5434 .model_id = ST_M25P16,
5435 .total_size = 2048,
5436 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00005437 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005438 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005439 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005440 .block_erasers =
5441 {
5442 {
5443 .eraseblocks = { {64 * 1024, 32} },
5444 .block_erase = spi_block_erase_d8,
5445 }, {
5446 .eraseblocks = { {2 * 1024 * 1024, 1} },
5447 .block_erase = spi_block_erase_c7,
5448 }
5449 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005450 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005451 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005452 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005453 },
5454
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005455 {
5456 .vendor = "ST",
5457 .name = "M25P32",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005458 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005459 .manufacture_id = ST_ID,
5460 .model_id = ST_M25P32,
5461 .total_size = 4096,
5462 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00005463 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005464 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005465 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005466 .block_erasers =
5467 {
5468 {
5469 .eraseblocks = { {64 * 1024, 64} },
5470 .block_erase = spi_block_erase_d8,
5471 }, {
5472 .eraseblocks = { {4 * 1024 * 1024, 1} },
5473 .block_erase = spi_block_erase_c7,
5474 }
5475 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005476 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005477 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005478 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005479 },
5480
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005481 {
5482 .vendor = "ST",
5483 .name = "M25P64",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005484 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005485 .manufacture_id = ST_ID,
5486 .model_id = ST_M25P64,
5487 .total_size = 8192,
5488 .page_size = 256,
5489 .tested = TEST_UNTESTED,
5490 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005491 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005492 .block_erasers =
5493 {
5494 {
5495 .eraseblocks = { {64 * 1024, 128} },
5496 .block_erase = spi_block_erase_d8,
5497 }, {
5498 .eraseblocks = { {8 * 1024 * 1024, 1} },
5499 .block_erase = spi_block_erase_c7,
5500 }
5501 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005502 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005503 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005504 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005505 },
5506
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005507 {
5508 .vendor = "ST",
5509 .name = "M25P128",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005510 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005511 .manufacture_id = ST_ID,
5512 .model_id = ST_M25P128,
5513 .total_size = 16384,
5514 .page_size = 256,
5515 .tested = TEST_UNTESTED,
5516 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005517 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005518 .block_erasers =
5519 {
5520 {
5521 .eraseblocks = { {256 * 1024, 64} },
5522 .block_erase = spi_block_erase_d8,
5523 }, {
5524 .eraseblocks = { {16 * 1024 * 1024, 1} },
5525 .block_erase = spi_block_erase_c7,
5526 }
5527 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005528 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005529 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005530 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005531 },
5532
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005533 {
5534 .vendor = "ST",
5535 .name = "M29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005536 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005537 .manufacture_id = ST_ID,
5538 .model_id = ST_M29F002B,
5539 .total_size = 256,
5540 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005541 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005542 .tested = TEST_UNTESTED,
5543 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005544 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005545 .block_erasers =
5546 {
5547 {
5548 .eraseblocks = {
5549 {16 * 1024, 1},
5550 {8 * 1024, 2},
5551 {32 * 1024, 1},
5552 {64 * 1024, 3},
5553 },
5554 .block_erase = erase_sector_jedec,
5555 }, {
5556 .eraseblocks = { {256 * 1024, 1} },
5557 .block_erase = erase_chip_block_jedec,
5558 }
5559 },
Sean Nelson35727f72010-01-28 23:55:12 +00005560 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005561 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005562 },
5563
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005564 {
5565 .vendor = "ST",
5566 .name = "M29F002T/NT",
Urja Rannikko038a3122009-06-28 19:19:25 +00005567 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005568 .manufacture_id = ST_ID,
5569 .model_id = ST_M29F002T,
5570 .total_size = 256,
5571 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005572 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
5573 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005574 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005575 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005576 .block_erasers =
5577 {
5578 {
5579 .eraseblocks = {
5580 {64 * 1024, 3},
5581 {32 * 1024, 1},
5582 {8 * 1024, 2},
5583 {16 * 1024, 1},
5584 },
5585 .block_erase = erase_sector_jedec,
5586 }, {
5587 .eraseblocks = { {256 * 1024, 1} },
5588 .block_erase = erase_chip_block_jedec,
5589 }
5590 },
Sean Nelson35727f72010-01-28 23:55:12 +00005591 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005592 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005593 },
5594
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005595 {
5596 .vendor = "ST",
5597 .name = "M29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005598 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005599 .manufacture_id = ST_ID,
5600 .model_id = ST_M29F040B,
5601 .total_size = 512,
5602 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005603 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
5604 .tested = TEST_UNTESTED,
5605 .probe = probe_jedec,
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00005606 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (am29f040b.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005607 .block_erasers =
5608 {
5609 {
5610 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00005611 .block_erase = erase_sector_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00005612 }, {
5613 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00005614 .block_erase = erase_chip_block_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00005615 }
5616 },
Sean Nelson35727f72010-01-28 23:55:12 +00005617 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005618 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005619 },
5620
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005621 {
Sean Nelson35727f72010-01-28 23:55:12 +00005622 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005623 .vendor = "ST",
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00005624 .name = "M29F400BB",
5625 .bustype = CHIP_BUSTYPE_PARALLEL,
5626 .manufacture_id = ST_ID,
5627 .model_id = ST_M29F400BB,
5628 .total_size = 512,
5629 .page_size = 64 * 1024,
5630 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
5631 .tested = TEST_BAD_WRITE, /* Implicit eraseblock layout in write_m29f400bt is broken. */
5632 .probe = probe_m29f400bt,
5633 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (m29f400bt.c) */
5634 .block_erasers =
5635 {
5636 {
5637 .eraseblocks = {
5638 {16 * 1024, 1},
5639 {8 * 1024, 2},
5640 {32 * 1024, 1},
5641 {64 * 1024, 7},
5642 },
5643 .block_erase = block_erase_m29f400bt,
5644 }, {
5645 .eraseblocks = { {512 * 1024, 1} },
5646 .block_erase = block_erase_chip_m29f400bt,
5647 }
5648 },
5649 .write = NULL,
5650 .read = read_memmapped,
5651 },
5652 {
5653 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
5654 .vendor = "ST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005655 .name = "M29F400BT",
Urja Rannikko038a3122009-06-28 19:19:25 +00005656 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005657 .manufacture_id = ST_ID,
5658 .model_id = ST_M29F400BT,
5659 .total_size = 512,
5660 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005661 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005662 .tested = TEST_UNTESTED,
5663 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005664 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005665 .block_erasers =
5666 {
5667 {
5668 .eraseblocks = {
5669 {64 * 1024, 7},
5670 {32 * 1024, 1},
5671 {8 * 1024, 2},
5672 {16 * 1024, 1},
5673 },
5674 .block_erase = block_erase_m29f400bt,
5675 }, {
5676 .eraseblocks = { {512 * 1024, 1} },
5677 .block_erase = block_erase_chip_m29f400bt,
5678 }
5679 },
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00005680 .write = write_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005681 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005682 },
5683
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005684 {
5685 .vendor = "ST",
5686 .name = "M29W010B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005687 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005688 .manufacture_id = ST_ID,
5689 .model_id = ST_M29W010B,
5690 .total_size = 128,
5691 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005692 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005693 .tested = TEST_UNTESTED,
5694 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005695 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005696 .block_erasers =
5697 {
5698 {
5699 .eraseblocks = { {16 * 1024, 8}, },
5700 .block_erase = erase_sector_jedec,
5701 }, {
5702 .eraseblocks = { {128 * 1024, 1} },
5703 .block_erase = erase_chip_block_jedec,
5704 }
5705 },
Sean Nelson35727f72010-01-28 23:55:12 +00005706 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005707 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005708 },
5709
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005710 {
5711 .vendor = "ST",
5712 .name = "M29W040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005713 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005714 .manufacture_id = ST_ID,
5715 .model_id = ST_M29W040B,
5716 .total_size = 512,
5717 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005718 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005719 .tested = TEST_UNTESTED,
5720 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005721 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005722 .block_erasers =
5723 {
5724 {
5725 .eraseblocks = { {64 * 1024, 8}, },
5726 .block_erase = erase_sector_jedec,
5727 }, {
5728 .eraseblocks = { {512 * 1024, 1} },
5729 .block_erase = erase_chip_block_jedec,
5730 }
5731 },
Sean Nelson35727f72010-01-28 23:55:12 +00005732 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005733 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005734 },
5735
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00005736 {
5737 .vendor = "ST",
5738 .name = "M29W512B",
5739 .bustype = CHIP_BUSTYPE_PARALLEL,
5740 .manufacture_id = ST_ID,
5741 .model_id = ST_M29W512B,
5742 .total_size = 64,
5743 .page_size = 64 * 1024,
5744 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
5745 .tested = TEST_OK_PREW,
5746 .probe = probe_jedec,
5747 .probe_timing = TIMING_ZERO,
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00005748 .block_erasers =
5749 {
5750 {
5751 .eraseblocks = { {64 * 1024, 1} },
5752 .block_erase = erase_chip_block_jedec,
5753 }
5754 },
5755 .write = write_jedec_1,
5756 .read = read_memmapped,
5757 },
5758
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005759 {
5760 .vendor = "ST",
5761 .name = "M50FLW040A",
Sean Nelson35727f72010-01-28 23:55:12 +00005762 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005763 .manufacture_id = ST_ID,
5764 .model_id = ST_M50FLW040A,
5765 .total_size = 512,
5766 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005767 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005768 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005769 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005770 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005771 .block_erasers =
5772 {
5773 {
Sean Nelson329bde72010-01-19 16:39:19 +00005774 .eraseblocks = {
5775 {4 * 1024, 16}, /* sector */
5776 {64 * 1024, 5}, /* block */
5777 {4 * 1024, 16}, /* sector */
5778 {4 * 1024, 16}, /* sector */
5779 },
5780 .block_erase = NULL,
5781 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005782 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005783 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005784 }, {
5785 .eraseblocks = { {512 * 1024, 1} },
5786 .block_erase = erase_chip_stm50flw0x0x,
5787 }
5788 },
Sean Nelson28accc22010-03-19 18:47:06 +00005789 .unlock = unlock_stm50flw0x0x,
5790 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005791 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005792 },
5793
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005794 {
5795 .vendor = "ST",
5796 .name = "M50FLW040B",
Sean Nelson35727f72010-01-28 23:55:12 +00005797 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005798 .manufacture_id = ST_ID,
5799 .model_id = ST_M50FLW040B,
5800 .total_size = 512,
5801 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005802 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005803 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005804 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005805 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005806 .block_erasers =
5807 {
5808 {
Sean Nelson329bde72010-01-19 16:39:19 +00005809 .eraseblocks = {
5810 {4 * 1024, 16}, /* sector */
5811 {4 * 1024, 16}, /* sector */
5812 {64 * 1024, 5}, /* block */
5813 {4 * 1024, 16}, /* sector */
5814 },
5815 .block_erase = NULL,
5816 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005817 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005818 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005819 }, {
5820 .eraseblocks = { {512 * 1024, 1} },
5821 .block_erase = erase_chip_stm50flw0x0x,
5822 }
5823 },
Sean Nelson28accc22010-03-19 18:47:06 +00005824 .unlock = unlock_stm50flw0x0x,
5825 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005826 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005827 },
5828
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005829 {
5830 .vendor = "ST",
5831 .name = "M50FLW080A",
Sean Nelson35727f72010-01-28 23:55:12 +00005832 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005833 .manufacture_id = ST_ID,
5834 .model_id = ST_M50FLW080A,
5835 .total_size = 1024,
5836 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005837 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson35727f72010-01-28 23:55:12 +00005838 .tested = TEST_UNTESTED,
5839 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005840 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005841 .block_erasers =
5842 {
5843 {
Sean Nelson329bde72010-01-19 16:39:19 +00005844 .eraseblocks = {
5845 {4 * 1024, 16}, /* sector */
5846 {64 * 1024, 13}, /* block */
5847 {4 * 1024, 16}, /* sector */
5848 {4 * 1024, 16}, /* sector */
5849 },
5850 .block_erase = NULL,
5851 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005852 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005853 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005854 }, {
5855 .eraseblocks = { {1024 * 1024, 1} },
5856 .block_erase = erase_chip_stm50flw0x0x,
5857 }
5858 },
Sean Nelson28accc22010-03-19 18:47:06 +00005859 .unlock = unlock_stm50flw0x0x,
5860 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005861 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005862 },
5863
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005864 {
5865 .vendor = "ST",
5866 .name = "M50FLW080B",
Sean Nelson35727f72010-01-28 23:55:12 +00005867 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005868 .manufacture_id = ST_ID,
5869 .model_id = ST_M50FLW080B,
5870 .total_size = 1024,
5871 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005872 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005873 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005874 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005875 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005876 .block_erasers =
5877 {
5878 {
Sean Nelson329bde72010-01-19 16:39:19 +00005879 .eraseblocks = {
5880 {4 * 1024, 16}, /* sector */
5881 {4 * 1024, 16}, /* sector */
5882 {64 * 1024, 13}, /* block */
5883 {4 * 1024, 16}, /* sector */
5884 },
5885 .block_erase = NULL,
5886 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005887 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005888 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005889 }, {
5890 .eraseblocks = { {1024 * 1024, 1} },
5891 .block_erase = erase_chip_stm50flw0x0x,
5892 }
5893 },
Sean Nelson28accc22010-03-19 18:47:06 +00005894 .unlock = unlock_stm50flw0x0x,
5895 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005896 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005897 },
5898
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005899 {
5900 .vendor = "ST",
5901 .name = "M50FW002",
Urja Rannikko038a3122009-06-28 19:19:25 +00005902 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005903 .manufacture_id = ST_ID,
5904 .model_id = ST_M50FW002,
5905 .total_size = 256,
5906 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005907 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005908 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005909 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005910 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005911 .block_erasers =
5912 {
5913 {
5914 .eraseblocks = {
5915 {64 * 1024, 3},
5916 {32 * 1024, 1},
5917 {8 * 1024, 2},
5918 {16 * 1024, 1},
5919 },
Sean Nelson28accc22010-03-19 18:47:06 +00005920 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005921 }, {
5922 .eraseblocks = { {256 * 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 = "M50FW016",
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_M50FW016,
5937 .total_size = 2048,
5938 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005939 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005940 .tested = TEST_UNTESTED,
5941 .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, 32}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005947 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005948 }, {
5949 .eraseblocks = { {2 * 1024 * 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 = "M50FW040",
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_M50FW040,
5964 .total_size = 512,
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, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005974 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005975 }, {
5976 .eraseblocks = { {512 * 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 = "M50FW080",
Urja Rannikko038a3122009-06-28 19:19:25 +00005988 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005989 .manufacture_id = ST_ID,
5990 .model_id = ST_M50FW080,
5991 .total_size = 1024,
5992 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005993 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00005994 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005995 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005996 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005997 .block_erasers =
5998 {
5999 {
6000 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00006001 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006002 }, {
6003 .eraseblocks = { {1024 * 1024, 1} },
6004 .block_erase = erase_chip_stm50flw0x0x,
6005 }
6006 },
Sean Nelson28accc22010-03-19 18:47:06 +00006007 .unlock = unlock_stm50flw0x0x,
6008 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006009 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006010 },
6011
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006012 {
6013 .vendor = "ST",
6014 .name = "M50LPW116",
Urja Rannikko038a3122009-06-28 19:19:25 +00006015 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006016 .manufacture_id = ST_ID,
6017 .model_id = ST_M50LPW116,
6018 .total_size = 2048,
6019 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00006020 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006021 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00006022 .probe = probe_82802ab,
Udu Ogahc04ee222009-09-05 01:31:32 +00006023 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006024 .block_erasers =
6025 {
6026 {
6027 .eraseblocks = {
6028 {4 * 1024, 16},
6029 {64 * 1024, 30},
6030 {32 * 1024, 1},
6031 {8 * 1024, 2},
6032 {16 * 1024, 1},
6033 },
Sean Nelson28accc22010-03-19 18:47:06 +00006034 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00006035 }, {
6036 .eraseblocks = { {2 * 1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00006037 .block_erase = erase_chip_stm50flw0x0x,
Sean Nelson56358aa2010-01-19 16:08:51 +00006038 }
6039 },
Sean Nelson28accc22010-03-19 18:47:06 +00006040 .unlock = unlock_stm50flw0x0x,
6041 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006042 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006043 },
6044
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006045 {
6046 .vendor = "SyncMOS",
6047 .name = "S29C31004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00006048 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006049 .manufacture_id = SYNCMOS_ID,
6050 .model_id = S29C31004T,
6051 .total_size = 512,
6052 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006053 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006054 .tested = TEST_UNTESTED,
6055 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006056 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006057 .block_erasers =
6058 {
6059 {
6060 .eraseblocks = { {1 * 1024, 512} },
6061 .block_erase = erase_sector_jedec,
6062 }, {
6063 .eraseblocks = { {512 * 1024, 1} },
6064 .block_erase = erase_chip_block_jedec,
6065 },
6066 },
Sean Nelson35727f72010-01-28 23:55:12 +00006067 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006068 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006069 },
6070
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006071 {
6072 .vendor = "SyncMOS",
6073 .name = "S29C51001T",
Urja Rannikko038a3122009-06-28 19:19:25 +00006074 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006075 .manufacture_id = SYNCMOS_ID,
6076 .model_id = S29C51001T,
6077 .total_size = 128,
6078 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006079 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006080 .tested = TEST_UNTESTED,
6081 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006082 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006083 .block_erasers =
6084 {
6085 {
6086 .eraseblocks = { {512, 256} },
6087 .block_erase = erase_sector_jedec,
6088 }, {
6089 .eraseblocks = { {128 * 1024, 1} },
6090 .block_erase = erase_chip_block_jedec,
6091 },
6092 },
Sean Nelson35727f72010-01-28 23:55:12 +00006093 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006094 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006095 },
6096
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006097 {
6098 .vendor = "SyncMOS",
6099 .name = "S29C51002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00006100 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006101 .manufacture_id = SYNCMOS_ID,
6102 .model_id = S29C51002T,
6103 .total_size = 256,
6104 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006105 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00006106 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006107 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006108 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006109 .block_erasers =
6110 {
6111 {
6112 .eraseblocks = { {512, 512} },
6113 .block_erase = erase_sector_jedec,
6114 }, {
6115 .eraseblocks = { {256 * 1024, 1} },
6116 .block_erase = erase_chip_block_jedec,
6117 },
6118 },
Sean Nelson35727f72010-01-28 23:55:12 +00006119 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006120 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006121 },
6122
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006123 {
6124 .vendor = "SyncMOS",
6125 .name = "S29C51004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00006126 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006127 .manufacture_id = SYNCMOS_ID,
6128 .model_id = S29C51004T,
6129 .total_size = 512,
6130 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006131 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006132 .tested = TEST_UNTESTED,
6133 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006134 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00006135 .block_erasers =
6136 {
6137 {
Sean Nelson012a31e2010-01-19 20:23:26 +00006138 .eraseblocks = { {1 * 1024, 512} },
Sean Nelson56358aa2010-01-19 16:08:51 +00006139 .block_erase = erase_sector_jedec,
6140 }, {
6141 .eraseblocks = { {512 * 1024, 1} },
6142 .block_erase = erase_chip_block_jedec,
6143 },
6144 },
Sean Nelson35727f72010-01-28 23:55:12 +00006145 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006146 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006147 },
6148
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006149 {
Uwe Hermanna106d152009-05-27 23:17:40 +00006150 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006151 .name = "TMS29F002RB",
Urja Rannikko038a3122009-06-28 19:19:25 +00006152 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006153 .manufacture_id = TI_OLD_ID,
6154 .model_id = TI_TMS29F002RB,
6155 .total_size = 256,
6156 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00006157 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006158 .tested = TEST_UNTESTED,
6159 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006160 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006161 .block_erasers =
6162 {
6163 {
6164 .eraseblocks = {
6165 {16 * 1024, 1},
6166 {8 * 1024, 2},
6167 {32 * 1024, 1},
6168 {64 * 1024, 3},
6169 },
6170 .block_erase = erase_sector_jedec,
6171 }, {
6172 .eraseblocks = { {256 * 1024, 1} },
6173 .block_erase = erase_chip_block_jedec,
6174 },
6175 },
Sean Nelson35727f72010-01-28 23:55:12 +00006176 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006177 .read = read_memmapped,
6178 },
6179
6180 {
Uwe Hermanna106d152009-05-27 23:17:40 +00006181 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006182 .name = "TMS29F002RT",
Urja Rannikko038a3122009-06-28 19:19:25 +00006183 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006184 .manufacture_id = TI_OLD_ID,
6185 .model_id = TI_TMS29F002RT,
6186 .total_size = 256,
6187 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00006188 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006189 .tested = TEST_UNTESTED,
6190 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006191 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00006192 .block_erasers =
6193 {
6194 {
6195 .eraseblocks = {
6196 {64 * 1024, 3},
6197 {32 * 1024, 1},
6198 {8 * 1024, 2},
6199 {16 * 1024, 1},
6200 },
6201 .block_erase = erase_sector_jedec,
6202 }, {
6203 .eraseblocks = { {256 * 1024, 1} },
6204 .block_erase = erase_chip_block_jedec,
6205 },
6206 },
Sean Nelson35727f72010-01-28 23:55:12 +00006207 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00006208 .read = read_memmapped,
6209 },
6210
6211 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006212 .vendor = "Winbond",
Rudolf Marekce1c7982010-04-20 19:34:31 +00006213 .name = "W25Q80",
6214 .bustype = CHIP_BUSTYPE_SPI,
6215 .manufacture_id = WINBOND_NEX_ID,
6216 .model_id = W_25Q80,
6217 .total_size = 1024,
6218 .page_size = 256,
6219 .tested = TEST_UNTESTED,
6220 .probe = probe_spi_rdid,
6221 .probe_timing = TIMING_ZERO,
6222 .block_erasers =
6223 {
6224 {
6225 .eraseblocks = { {4 * 1024, 256} },
6226 .block_erase = spi_block_erase_20,
6227 }, {
6228 .eraseblocks = { {32 * 1024, 32} },
6229 .block_erase = spi_block_erase_52,
6230 }, {
6231 .eraseblocks = { {64 * 1024, 16} },
6232 .block_erase = spi_block_erase_d8,
6233 }, {
6234 .eraseblocks = { {1024 * 1024, 1} },
6235 .block_erase = spi_block_erase_60,
6236 }, {
6237 .eraseblocks = { {1024 * 1024, 1} },
6238 .block_erase = spi_block_erase_c7,
6239 }
6240 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006241 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00006242 .write = spi_chip_write_256,
6243 .read = spi_chip_read,
6244 },
6245
6246 {
6247 .vendor = "Winbond",
6248 .name = "W25Q16",
6249 .bustype = CHIP_BUSTYPE_SPI,
6250 .manufacture_id = WINBOND_NEX_ID,
6251 .model_id = W_25Q16,
6252 .total_size = 2048,
6253 .page_size = 256,
6254 .tested = TEST_UNTESTED,
6255 .probe = probe_spi_rdid,
6256 .probe_timing = TIMING_ZERO,
6257 .block_erasers =
6258 {
6259 {
6260 .eraseblocks = { {4 * 1024, 512} },
6261 .block_erase = spi_block_erase_20,
6262 }, {
6263 .eraseblocks = { {32 * 1024, 64} },
6264 .block_erase = spi_block_erase_52,
6265 }, {
6266 .eraseblocks = { {64 * 1024, 32} },
6267 .block_erase = spi_block_erase_d8,
6268 }, {
6269 .eraseblocks = { {2 * 1024 * 1024, 1} },
6270 .block_erase = spi_block_erase_60,
6271 }, {
6272 .eraseblocks = { {2 * 1024 * 1024, 1} },
6273 .block_erase = spi_block_erase_c7,
6274 }
6275 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006276 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00006277 .write = spi_chip_write_256,
6278 .read = spi_chip_read,
6279 },
6280
6281 {
6282 .vendor = "Winbond",
6283 .name = "W25Q32",
6284 .bustype = CHIP_BUSTYPE_SPI,
6285 .manufacture_id = WINBOND_NEX_ID,
6286 .model_id = W_25Q32,
6287 .total_size = 4096,
6288 .page_size = 256,
6289 .tested = TEST_UNTESTED,
6290 .probe = probe_spi_rdid,
6291 .probe_timing = TIMING_ZERO,
6292 .block_erasers =
6293 {
6294 {
6295 .eraseblocks = { {4 * 1024, 1024} },
6296 .block_erase = spi_block_erase_20,
6297 }, {
6298 .eraseblocks = { {32 * 1024, 128} },
6299 .block_erase = spi_block_erase_52,
6300 }, {
6301 .eraseblocks = { {64 * 1024, 64} },
6302 .block_erase = spi_block_erase_d8,
6303 }, {
6304 .eraseblocks = { {4 * 1024 * 1024, 1} },
6305 .block_erase = spi_block_erase_60,
6306 }, {
6307 .eraseblocks = { {4 * 1024 * 1024, 1} },
6308 .block_erase = spi_block_erase_c7,
6309 }
6310 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006311 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00006312 .write = spi_chip_write_256,
6313 .read = spi_chip_read,
6314 },
6315
6316 {
6317 .vendor = "Winbond",
David Hendricksc4acec92010-06-24 11:39:57 +00006318 .name = "W25Q64",
6319 .bustype = CHIP_BUSTYPE_SPI,
6320 .manufacture_id = WINBOND_NEX_ID,
6321 .model_id = W_25Q64,
6322 .total_size = 8192,
6323 .page_size = 256,
6324 .tested = TEST_OK_PRW,
6325 .probe = probe_spi_rdid,
6326 .probe_timing = TIMING_ZERO,
6327 .block_erasers =
6328 {
6329 {
6330 .eraseblocks = { {4 * 1024, 2048} },
6331 .block_erase = spi_block_erase_20,
6332 }, {
6333 .eraseblocks = { {32 * 1024, 256} },
6334 .block_erase = spi_block_erase_52,
6335 }, {
6336 .eraseblocks = { {64 * 1024, 128} },
6337 .block_erase = spi_block_erase_d8,
6338 }, {
6339 .eraseblocks = { {8 * 1024 * 1024, 1} },
6340 .block_erase = spi_block_erase_60,
6341 }, {
6342 .eraseblocks = { {8 * 1024 * 1024, 1} },
6343 .block_erase = spi_block_erase_c7,
6344 }
6345 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006346 .unlock = spi_disable_blockprotect,
David Hendricksc4acec92010-06-24 11:39:57 +00006347 .write = spi_chip_write_256,
6348 .read = spi_chip_read,
6349 },
6350
6351 {
6352 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006353 .name = "W25x10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006354 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006355 .manufacture_id = WINBOND_NEX_ID,
6356 .model_id = W_25X10,
6357 .total_size = 128,
6358 .page_size = 256,
6359 .tested = TEST_UNTESTED,
6360 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006361 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006362 .block_erasers =
6363 {
6364 {
6365 .eraseblocks = { {4 * 1024, 32} },
6366 .block_erase = spi_block_erase_20,
6367 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006368 .eraseblocks = { {64 * 1024, 2} },
6369 .block_erase = spi_block_erase_d8,
6370 }, {
6371 .eraseblocks = { {128 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006372 .block_erase = spi_block_erase_c7,
6373 }
6374 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006375 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006376 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006377 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006378 },
6379
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006380 {
6381 .vendor = "Winbond",
6382 .name = "W25x20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006383 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006384 .manufacture_id = WINBOND_NEX_ID,
6385 .model_id = W_25X20,
6386 .total_size = 256,
6387 .page_size = 256,
6388 .tested = TEST_UNTESTED,
6389 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006390 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006391 .block_erasers =
6392 {
6393 {
6394 .eraseblocks = { {4 * 1024, 64} },
6395 .block_erase = spi_block_erase_20,
6396 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006397 .eraseblocks = { {64 * 1024, 4} },
6398 .block_erase = spi_block_erase_d8,
6399 }, {
6400 .eraseblocks = { {256 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006401 .block_erase = spi_block_erase_c7,
6402 }
6403 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006404 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006405 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006406 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006407 },
6408
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006409 {
6410 .vendor = "Winbond",
6411 .name = "W25x40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006412 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006413 .manufacture_id = WINBOND_NEX_ID,
6414 .model_id = W_25X40,
6415 .total_size = 512,
6416 .page_size = 256,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006417 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006418 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006419 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006420 .block_erasers =
6421 {
6422 {
6423 .eraseblocks = { {4 * 1024, 128} },
6424 .block_erase = spi_block_erase_20,
6425 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006426 .eraseblocks = { {64 * 1024, 8} },
6427 .block_erase = spi_block_erase_d8,
6428 }, {
6429 .eraseblocks = { {512 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006430 .block_erase = spi_block_erase_c7,
6431 }
6432 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006433 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006434 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006435 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006436 },
6437
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006438 {
6439 .vendor = "Winbond",
6440 .name = "W25x80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006441 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006442 .manufacture_id = WINBOND_NEX_ID,
6443 .model_id = W_25X80,
6444 .total_size = 1024,
6445 .page_size = 256,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006446 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006447 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006448 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006449 .block_erasers =
6450 {
6451 {
6452 .eraseblocks = { {4 * 1024, 256} },
6453 .block_erase = spi_block_erase_20,
6454 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006455 .eraseblocks = { {64 * 1024, 16} },
6456 .block_erase = spi_block_erase_d8,
6457 }, {
6458 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006459 .block_erase = spi_block_erase_c7,
6460 }
6461 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006462 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006463 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006464 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006465 },
6466
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006467 {
6468 .vendor = "Winbond",
Hector Martina721ae22009-07-11 19:39:11 +00006469 .name = "W25x16",
6470 .bustype = CHIP_BUSTYPE_SPI,
6471 .manufacture_id = WINBOND_NEX_ID,
6472 .model_id = W_25X16,
6473 .total_size = 2048,
6474 .page_size = 256,
6475 .tested = TEST_OK_PR,
6476 .probe = probe_spi_rdid,
6477 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006478 .block_erasers =
6479 {
6480 {
6481 .eraseblocks = { {4 * 1024, 512} },
6482 .block_erase = spi_block_erase_20,
6483 }, {
6484 .eraseblocks = { {32 * 1024, 64} },
6485 .block_erase = spi_block_erase_52,
6486 }, {
6487 .eraseblocks = { {64 * 1024, 32} },
6488 .block_erase = spi_block_erase_d8,
6489 }, {
6490 .eraseblocks = { {2 * 1024 * 1024, 1} },
6491 .block_erase = spi_block_erase_60,
6492 }, {
6493 .eraseblocks = { {2 * 1024 * 1024, 1} },
6494 .block_erase = spi_block_erase_c7,
6495 }
6496 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006497 .unlock = spi_disable_blockprotect,
Hector Martina721ae22009-07-11 19:39:11 +00006498 .write = spi_chip_write_256,
6499 .read = spi_chip_read,
6500 },
6501
6502 {
6503 .vendor = "Winbond",
Zheng Bao1db2b752009-11-26 11:05:01 +00006504 .name = "W25x32",
6505 .bustype = CHIP_BUSTYPE_SPI,
6506 .manufacture_id = WINBOND_NEX_ID,
6507 .model_id = W_25X32,
6508 .total_size = 4096,
6509 .page_size = 256,
6510 .tested = TEST_OK_PROBE,
6511 .probe = probe_spi_rdid,
6512 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006513 .block_erasers =
6514 {
6515 {
6516 .eraseblocks = { {4 * 1024, 1024} },
6517 .block_erase = spi_block_erase_20,
6518 }, {
6519 .eraseblocks = { {32 * 1024, 128} },
6520 .block_erase = spi_block_erase_52,
6521 }, {
6522 .eraseblocks = { {64 * 1024, 64} },
6523 .block_erase = spi_block_erase_d8,
6524 }, {
6525 .eraseblocks = { {4 * 1024 * 1024, 1} },
6526 .block_erase = spi_block_erase_60,
6527 }, {
6528 .eraseblocks = { {4 * 1024 * 1024, 1} },
6529 .block_erase = spi_block_erase_c7,
6530 }
6531 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006532 .unlock = spi_disable_blockprotect,
Zheng Bao1db2b752009-11-26 11:05:01 +00006533 .write = spi_chip_write_256,
6534 .read = spi_chip_read,
6535 },
6536
6537 {
6538 .vendor = "Winbond",
6539 .name = "W25x64",
6540 .bustype = CHIP_BUSTYPE_SPI,
6541 .manufacture_id = WINBOND_NEX_ID,
6542 .model_id = W_25X64,
6543 .total_size = 8192,
6544 .page_size = 256,
6545 .tested = TEST_UNTESTED,
6546 .probe = probe_spi_rdid,
6547 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006548 .block_erasers =
6549 {
6550 {
6551 .eraseblocks = { {4 * 1024, 2048} },
6552 .block_erase = spi_block_erase_20,
6553 }, {
6554 .eraseblocks = { {32 * 1024, 256} },
6555 .block_erase = spi_block_erase_52,
6556 }, {
6557 .eraseblocks = { {64 * 1024, 128} },
6558 .block_erase = spi_block_erase_d8,
6559 }, {
6560 .eraseblocks = { {8 * 1024 * 1024, 1} },
6561 .block_erase = spi_block_erase_60,
6562 }, {
6563 .eraseblocks = { {8 * 1024 * 1024, 1} },
6564 .block_erase = spi_block_erase_c7,
6565 }
6566 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006567 .unlock = spi_disable_blockprotect,
Zheng Bao1db2b752009-11-26 11:05:01 +00006568 .write = spi_chip_write_256,
6569 .read = spi_chip_read,
6570 },
6571
6572 {
6573 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006574 .name = "W29C011",
Urja Rannikko038a3122009-06-28 19:19:25 +00006575 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006576 .manufacture_id = WINBOND_ID,
6577 .model_id = W_29C011,
6578 .total_size = 128,
6579 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006580 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00006581 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006582 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006583 .probe_timing = 10, /* used datasheet for the W29C011A */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006584 .block_erasers =
6585 {
6586 {
6587 .eraseblocks = { {128 * 1024, 1} },
6588 .block_erase = erase_chip_block_jedec,
6589 }
6590 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006591 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006592 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006593 },
6594
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006595 {
6596 .vendor = "Winbond",
6597 .name = "W29C020C",
Urja Rannikko161b8852009-06-05 08:47:37 +00006598 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006599 .manufacture_id = WINBOND_ID,
6600 .model_id = W_29C020C,
6601 .total_size = 256,
6602 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006603 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00006604 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006605 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006606 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006607 .block_erasers =
6608 {
6609 {
6610 .eraseblocks = { {256 * 1024, 1} },
6611 .block_erase = erase_chip_block_jedec,
6612 }
6613 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006614 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006615 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006616 },
6617
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006618 {
6619 .vendor = "Winbond",
6620 .name = "W29C040P",
Urja Rannikko161b8852009-06-05 08:47:37 +00006621 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006622 .manufacture_id = WINBOND_ID,
6623 .model_id = W_29C040P,
6624 .total_size = 512,
6625 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00006626 .feature_bits = FEATURE_LONG_RESET,
6627 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006628 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006629 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006630 .block_erasers =
6631 {
6632 {
6633 .eraseblocks = { {512 * 1024, 1} },
6634 .block_erase = erase_chip_block_jedec,
6635 }
6636 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006637 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006638 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006639 },
6640
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006641 {
6642 .vendor = "Winbond",
6643 .name = "W29EE011",
Urja Rannikko038a3122009-06-28 19:19:25 +00006644 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006645 .manufacture_id = WINBOND_ID,
6646 .model_id = W_29C011,
6647 .total_size = 128,
6648 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006649 .feature_bits = FEATURE_LONG_RESET,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006650 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006651 .probe = probe_w29ee011,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006652 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w29ee011.c) */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006653 .block_erasers =
6654 {
6655 {
6656 .eraseblocks = { {128 * 1024, 1} },
6657 .block_erase = erase_chip_block_jedec,
6658 }
6659 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006660 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006661 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006662 },
6663
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006664 {
6665 .vendor = "Winbond",
6666 .name = "W39V040A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006667 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006668 .manufacture_id = WINBOND_ID,
6669 .model_id = W_39V040A,
6670 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006671 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006672 .feature_bits = FEATURE_EITHER_RESET,
Michael Karcher3355f062010-03-24 22:56:23 +00006673 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006674 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006675 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006676 .block_erasers =
6677 {
6678 {
6679 .eraseblocks = { {64 * 1024, 8} },
6680 .block_erase = erase_sector_jedec,
6681 }, {
6682 .eraseblocks = { {512 * 1024, 1} },
6683 .block_erase = erase_chip_block_jedec,
6684 }
6685 },
Sean Nelson35727f72010-01-28 23:55:12 +00006686 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006687 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006688 },
6689
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006690 {
6691 .vendor = "Winbond",
6692 .name = "W39V040B",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006693 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006694 .manufacture_id = WINBOND_ID,
6695 .model_id = W_39V040B,
6696 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006697 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006698 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00006699 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006700 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006701 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006702 .block_erasers =
6703 {
6704 {
6705 .eraseblocks = { {64 * 1024, 8} },
6706 .block_erase = erase_sector_jedec,
6707 }, {
6708 .eraseblocks = { {512 * 1024, 1} },
6709 .block_erase = erase_chip_block_jedec,
6710 }
6711 },
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 = "W39V040C",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006719 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006720 .manufacture_id = WINBOND_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00006721 .model_id = W_39V040C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006722 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006723 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006724 .feature_bits = FEATURE_EITHER_RESET,
6725 .tested = TEST_UNTESTED,
6726 .probe = probe_jedec,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00006727 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006728 .block_erasers =
6729 {
6730 {
6731 .eraseblocks = { {64 * 1024, 8} },
6732 .block_erase = erase_sector_jedec,
6733 }, {
6734 .eraseblocks = { {512 * 1024, 1} },
6735 .block_erase = erase_chip_block_jedec,
6736 }
6737 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00006738 .printlock = printlock_w39v040c,
Sean Nelson35727f72010-01-28 23:55:12 +00006739 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006740 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006741 },
6742
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006743 {
6744 .vendor = "Winbond",
6745 .name = "W39V040FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006746 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006747 .manufacture_id = WINBOND_ID,
6748 .model_id = W_39V040FA,
6749 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006750 .page_size = 64 * 1024,
Michael Karcherc9b63412010-05-30 16:55:18 +00006751 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermann41787602010-05-30 17:50:16 +00006752 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006753 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006754 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006755 .block_erasers =
6756 {
6757 {
6758 .eraseblocks = { {4 * 1024, 128} },
6759 .block_erase = erase_block_jedec,
6760 }, {
6761 .eraseblocks = { {64 * 1024, 8} },
6762 .block_erase = erase_sector_jedec,
6763 }, {
6764 .eraseblocks = { {512 * 1024, 1} },
6765 .block_erase = erase_chip_block_jedec,
6766 }
6767 },
Michael Karcherc9b63412010-05-30 16:55:18 +00006768 .printlock = printlock_sst_fwhub,
6769 .unlock = unlock_sst_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00006770 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006771 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006772 },
6773
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006774 {
6775 .vendor = "Winbond",
6776 .name = "W39V080A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006777 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006778 .manufacture_id = WINBOND_ID,
6779 .model_id = W_39V080A,
6780 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00006781 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006782 .feature_bits = FEATURE_EITHER_RESET,
6783 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006784 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006785 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006786 .block_erasers =
6787 {
6788 {
6789 .eraseblocks = { {64 * 1024, 16} },
6790 .block_erase = erase_sector_jedec,
6791 }, {
6792 .eraseblocks = { {1024 * 1024, 1} },
6793 .block_erase = erase_chip_block_jedec,
6794 }
6795 },
Sean Nelson35727f72010-01-28 23:55:12 +00006796 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006797 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006798 },
6799
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006800 {
6801 .vendor = "Winbond",
6802 .name = "W49F002U",
Urja Rannikko038a3122009-06-28 19:19:25 +00006803 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006804 .manufacture_id = WINBOND_ID,
6805 .model_id = W_49F002U,
6806 .total_size = 256,
6807 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006808 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00006809 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006810 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006811 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006812 .block_erasers =
6813 {
6814 {
6815 .eraseblocks = {
6816 {128 * 1024, 1},
6817 {96 * 1024, 1},
6818 {8 * 1024, 2},
6819 {16 * 1024, 1},
6820 },
6821 .block_erase = erase_sector_jedec,
6822 }, {
6823 .eraseblocks = { {256 * 1024, 1} },
6824 .block_erase = erase_chip_block_jedec,
6825 }
6826 },
Sean Nelson35727f72010-01-28 23:55:12 +00006827 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006828 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006829 },
6830
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006831 {
6832 .vendor = "Winbond",
Carl-Daniel Hailfingerabebe6b2010-07-17 13:45:42 +00006833 .name = "W49F020",
6834 .bustype = CHIP_BUSTYPE_PARALLEL,
6835 .manufacture_id = WINBOND_ID,
6836 .model_id = W_49F020,
6837 .total_size = 256,
6838 .page_size = 128,
6839 .feature_bits = FEATURE_EITHER_RESET,
6840 .tested = TEST_OK_PROBE,
6841 .probe = probe_jedec,
6842 .probe_timing = 10,
6843 .block_erasers =
6844 {
6845 {
6846 .eraseblocks = { {256 * 1024, 1} },
6847 .block_erase = erase_chip_block_jedec,
6848 }
6849 },
6850 .write = write_jedec_1,
6851 .read = read_memmapped,
6852 },
6853
6854 {
6855 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006856 .name = "W49V002A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006857 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006858 .manufacture_id = WINBOND_ID,
6859 .model_id = W_49V002A,
6860 .total_size = 256,
6861 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006862 .feature_bits = FEATURE_EITHER_RESET,
6863 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006864 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006865 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006866 .block_erasers =
6867 {
6868 {
6869 .eraseblocks = {
6870 {64 * 1024, 3},
6871 {32 * 1024, 1},
6872 {8 * 1024, 2},
6873 {16 * 1024, 1},
6874 },
6875 .block_erase = erase_sector_jedec,
6876 }, {
6877 .eraseblocks = { {256 * 1024, 1} },
6878 .block_erase = erase_chip_block_jedec,
6879 }
6880 },
Sean Nelson35727f72010-01-28 23:55:12 +00006881 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006882 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006883 },
6884
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006885 {
6886 .vendor = "Winbond",
6887 .name = "W49V002FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006888 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006889 .manufacture_id = WINBOND_ID,
6890 .model_id = W_49V002FA,
6891 .total_size = 256,
6892 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006893 .feature_bits = FEATURE_EITHER_RESET,
Michael Karcherb90c2212010-03-24 22:56:14 +00006894 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006895 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006896 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006897 .block_erasers =
6898 {
6899 {
6900 .eraseblocks = {
6901 {64 * 1024, 3},
6902 {32 * 1024, 1},
6903 {8 * 1024, 2},
6904 {16 * 1024, 1},
6905 },
6906 .block_erase = erase_sector_jedec,
6907 }, {
6908 .eraseblocks = { {256 * 1024, 1} },
6909 .block_erase = erase_chip_block_jedec,
6910 }
6911 },
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",
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,
6922 .total_size = 1024,
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,
Uwe Hermannea5425b2010-05-30 17:00:19 +00006925 .tested = TEST_OK_PREW,
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, 16}, },
6932 .block_erase = erase_sector_jedec,
6933 }, {
6934 .eraseblocks = { {1024 * 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 {
6944 .vendor = "Winbond",
6945 .name = "W39V080FA (dual mode)",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006946 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006947 .manufacture_id = WINBOND_ID,
6948 .model_id = W_39V080FA_DM,
6949 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006950 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006951 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006952 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00006953 .probe = probe_jedec,
6954 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006955 .block_erasers =
6956 {
6957 {
6958 .eraseblocks = { {64 * 1024, 8}, },
6959 .block_erase = erase_sector_jedec,
6960 }, {
6961 .eraseblocks = { {512 * 1024, 1} },
6962 .block_erase = erase_chip_block_jedec,
6963 }
6964 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00006965 .unlock = unlock_winbond_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00006966 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006967 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006968 },
6969
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006970 {
Daniel Lenskidf90d3a2010-07-22 11:44:38 +00006971 .vendor = "AMIC",
6972 .name = "unknown AMIC SPI chip",
6973 .bustype = CHIP_BUSTYPE_SPI,
6974 .manufacture_id = AMIC_ID,
6975 .model_id = GENERIC_DEVICE_ID,
6976 .total_size = 0,
6977 .page_size = 256,
6978 .tested = TEST_BAD_PREW,
6979 .probe = probe_spi_rdid4,
6980 .probe_timing = TIMING_ZERO,
6981 .write = NULL,
6982 .read = NULL,
6983 },
6984
6985 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006986 .vendor = "Atmel",
6987 .name = "unknown Atmel SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006988 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006989 .manufacture_id = ATMEL_ID,
6990 .model_id = GENERIC_DEVICE_ID,
6991 .total_size = 0,
6992 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006993 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006994 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006995 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006996 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006997 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006998 },
6999
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007000 {
7001 .vendor = "EON",
7002 .name = "unknown EON SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007003 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007004 .manufacture_id = EON_ID_NOPREFIX,
7005 .model_id = GENERIC_DEVICE_ID,
7006 .total_size = 0,
7007 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007008 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007009 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007010 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007011 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007012 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007013 },
7014
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007015 {
7016 .vendor = "Macronix",
7017 .name = "unknown Macronix SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007018 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007019 .manufacture_id = MX_ID,
7020 .model_id = GENERIC_DEVICE_ID,
7021 .total_size = 0,
7022 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007023 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007024 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007025 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007026 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007027 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007028 },
7029
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007030 {
7031 .vendor = "PMC",
7032 .name = "unknown PMC SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007033 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007034 .manufacture_id = PMC_ID,
7035 .model_id = GENERIC_DEVICE_ID,
7036 .total_size = 0,
7037 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007038 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007039 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007040 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007041 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007042 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007043 },
7044
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007045 {
7046 .vendor = "SST",
7047 .name = "unknown SST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007048 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007049 .manufacture_id = SST_ID,
7050 .model_id = GENERIC_DEVICE_ID,
7051 .total_size = 0,
7052 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007053 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007054 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007055 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007056 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007057 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007058 },
7059
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007060 {
7061 .vendor = "ST",
7062 .name = "unknown ST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00007063 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007064 .manufacture_id = ST_ID,
7065 .model_id = GENERIC_DEVICE_ID,
7066 .total_size = 0,
7067 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00007068 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007069 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00007070 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007071 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00007072 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00007073 },
Uwe Hermannfc425e82008-03-16 02:06:25 +00007074
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00007075 {
Sean Nelson118e1d62009-11-24 02:08:11 +00007076 .vendor = "Sanyo",
7077 .name = "unknown Sanyo SPI chip",
7078 .bustype = CHIP_BUSTYPE_SPI,
7079 .manufacture_id = SANYO_ID,
7080 .model_id = GENERIC_DEVICE_ID,
7081 .total_size = 0,
7082 .page_size = 256,
7083 .tested = TEST_BAD_PREW,
7084 .probe = probe_spi_rdid,
7085 .probe_timing = TIMING_ZERO,
Sean Nelson118e1d62009-11-24 02:08:11 +00007086 .write = NULL,
7087 .read = NULL,
7088 },
7089
7090 {
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00007091 .vendor = "Generic",
7092 .name = "unknown SPI chip (RDID)",
7093 .bustype = CHIP_BUSTYPE_SPI,
7094 .manufacture_id = GENERIC_MANUF_ID,
7095 .model_id = GENERIC_DEVICE_ID,
7096 .total_size = 0,
7097 .page_size = 256,
7098 .tested = TEST_BAD_PREW,
7099 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00007100 .write = NULL,
7101 },
7102 {
7103 .vendor = "Generic",
7104 .name = "unknown SPI chip (REMS)",
7105 .bustype = CHIP_BUSTYPE_SPI,
7106 .manufacture_id = GENERIC_MANUF_ID,
7107 .model_id = GENERIC_DEVICE_ID,
7108 .total_size = 0,
7109 .page_size = 256,
7110 .tested = TEST_BAD_PREW,
7111 .probe = probe_spi_rems,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00007112 .write = NULL,
7113 },
7114
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00007115 { NULL }
Stephan Guilloux72cf5652009-04-21 01:46:07 +00007116};