blob: 875d5b3a67968c390559ac0397e95b2faa8400bc [file] [log] [blame]
Ollie Lho184a4042005-11-26 21:55:36 +00001/*
Uwe Hermannd1107642007-08-29 17:52:32 +00002 * This file is part of the flashrom project.
Ollie Lho184a4042005-11-26 21:55:36 +00003 *
Uwe Hermannd22a1d42007-09-09 20:21:05 +00004 * Copyright (C) 2000 Silicon Integrated System Corporation
5 * Copyright (C) 2004 Tyan Corp
Stefan Reinauer4c390c82008-07-02 13:33:09 +00006 * Copyright (C) 2005-2008 coresystems GmbH <stepan@openbios.org>
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00007 * Copyright (C) 2006-2009 Carl-Daniel Hailfinger
Sean Nelsonc57a9202010-01-04 17:15:23 +00008 * Copyright (C) 2009 Sean Nelson <audiohacked@gmail.com>
Uwe Hermannd1107642007-08-29 17:52:32 +00009 *
Stefan Reinauerce532972007-05-23 17:20:56 +000010 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
Ollie Lho184a4042005-11-26 21:55:36 +000014 *
Stefan Reinauerce532972007-05-23 17:20:56 +000015 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
Ollie Lho184a4042005-11-26 21:55:36 +000019 *
Stefan Reinauerce532972007-05-23 17:20:56 +000020 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
Uwe Hermannd1107642007-08-29 17:52:32 +000022 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Ollie Lho184a4042005-11-26 21:55:36 +000023 */
24
25#include "flash.h"
Carl-Daniel Hailfinger08454642009-06-15 14:14:48 +000026#include "flashchips.h"
Ollie Lho184a4042005-11-26 21:55:36 +000027
Uwe Hermannfc425e82008-03-16 02:06:25 +000028/**
Uwe Hermanna9720402009-05-21 15:55:46 +000029 * List of supported flash chips.
Uwe Hermannfc425e82008-03-16 02:06:25 +000030 *
31 * Please keep the list sorted by vendor name and chip name, so that
32 * the output of 'flashrom -L' is alphabetically sorted.
33 */
Ollie Lho184a4042005-11-26 21:55:36 +000034struct flashchip flashchips[] = {
Uwe Hermannfc425e82008-03-16 02:06:25 +000035
Carl-Daniel Hailfinger21eedec2009-07-23 12:42:01 +000036 /*
37 * .vendor = Vendor name
38 * .name = Chip name
39 * .bustype = Supported flash bus types (Parallel, LPC...)
40 * .manufacture_id = Manufacturer chip ID
41 * .model_id = Model chip ID
42 * .total_size = Total size in (binary) kbytes
43 * .page_size = Page or eraseblock(?) size in bytes
44 * .tested = Test status
45 * .probe = Probe function
46 * .probe_timing = Probe function delay
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +000047 * .block_erasers[] = Array of erase layouts and erase functions
48 * {
49 * .eraseblocks[] = Array of { blocksize, blockcount }
50 * .block_erase = Block erase function
51 * }
Sean Nelson6e0b9122010-02-19 00:52:10 +000052 * .printlock = Chip lock status function
53 * .unlock = Chip unlock function
Carl-Daniel Hailfinger21eedec2009-07-23 12:42:01 +000054 * .write = Chip write function
55 * .read = Chip read function
FENG yu ningff692fb2008-12-08 18:15:10 +000056 */
57
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000058 {
59 .vendor = "AMD",
Uwe Hermanna8b37272009-06-19 15:54:39 +000060 .name = "Am29F010A/B",
61 .bustype = CHIP_BUSTYPE_PARALLEL,
62 .manufacture_id = AMD_ID,
63 .model_id = AM_29F010B, /* Same as Am29F010A */
64 .total_size = 128,
65 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +000066 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
67 .tested = TEST_UNTESTED,
68 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +000069 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +000070 .block_erasers =
71 {
72 {
73 .eraseblocks = { {16 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +000074 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +000075 }, {
76 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +000077 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +000078 },
79 },
Sean Nelson35727f72010-01-28 23:55:12 +000080 .write = write_jedec_1,
Uwe Hermanna8b37272009-06-19 15:54:39 +000081 .read = read_memmapped,
82 },
83
84 {
85 .vendor = "AMD",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000086 .name = "Am29F002(N)BB",
Urja Rannikko038a3122009-06-28 19:19:25 +000087 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000088 .manufacture_id = AMD_ID,
89 .model_id = AM_29F002BB,
90 .total_size = 256,
91 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +000092 .feature_bits = FEATURE_SHORT_RESET | FEATURE_ADDR_2AA,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000093 .tested = TEST_UNTESTED,
94 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +000095 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +000096 .block_erasers =
97 {
98 {
99 .eraseblocks = {
100 {16 * 1024, 1},
101 {8 * 1024, 2},
102 {32 * 1024, 1},
103 {64 * 1024, 3},
104 },
105 .block_erase = erase_sector_jedec,
106 }, {
107 .eraseblocks = { {256 * 1024, 1} },
108 .block_erase = erase_chip_block_jedec,
109 },
110 },
Michael Karcher1c296ca2009-11-27 17:49:42 +0000111 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000112 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000113 },
114
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000115 {
116 .vendor = "AMD",
117 .name = "Am29F002(N)BT",
Urja Rannikko038a3122009-06-28 19:19:25 +0000118 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000119 .manufacture_id = AMD_ID,
120 .model_id = AM_29F002BT,
121 .total_size = 256,
122 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +0000123 .feature_bits = FEATURE_EITHER_RESET | FEATURE_ADDR_2AA,
124 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000125 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +0000126 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000127 .block_erasers =
128 {
129 {
130 .eraseblocks = {
131 {64 * 1024, 3},
132 {32 * 1024, 1},
133 {8 * 1024, 2},
134 {16 * 1024, 1},
135 },
136 .block_erase = erase_sector_jedec,
137 }, {
138 .eraseblocks = { {256 * 1024, 1} },
139 .block_erase = erase_chip_block_jedec,
140 },
141 },
Michael Karcher1c296ca2009-11-27 17:49:42 +0000142 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000143 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000144 },
145
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000146 {
147 .vendor = "AMD",
148 .name = "Am29F016D",
Urja Rannikko038a3122009-06-28 19:19:25 +0000149 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000150 .manufacture_id = AMD_ID,
151 .model_id = AM_29F016D,
Sean Nelson72a9a022009-12-22 22:15:33 +0000152 .total_size = 2 * 1024,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000153 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000154 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000155 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +0000156 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000157 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000158 .block_erasers =
159 {
160 {
161 .eraseblocks = { {64 * 1024, 32} },
Sean Nelson35727f72010-01-28 23:55:12 +0000162 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000163 }, {
164 .eraseblocks = { {2048 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000165 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000166 },
167 },
Sean Nelson35727f72010-01-28 23:55:12 +0000168 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000169 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000170 },
171
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000172 {
173 .vendor = "AMD",
174 .name = "Am29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000175 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000176 .manufacture_id = AMD_ID,
177 .model_id = AM_29F040B,
178 .total_size = 512,
179 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000180 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
181 .tested = TEST_UNTESTED,
182 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000183 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000184 .block_erasers =
185 {
186 {
187 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +0000188 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000189 }, {
190 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000191 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000192 },
193 },
Sean Nelson35727f72010-01-28 23:55:12 +0000194 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000195 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000196 },
197
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000198 {
199 .vendor = "AMD",
Peter Stuge8440cc02009-01-25 23:55:12 +0000200 .name = "Am29F080B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000201 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawski5bae4382009-06-02 00:38:14 +0000202 .manufacture_id = AMD_ID,
203 .model_id = AM_29F080B,
Peter Stuge8440cc02009-01-25 23:55:12 +0000204 .total_size = 1024,
205 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000206 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +0000207 .tested = TEST_UNTESTED,
208 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +0000209 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000210 .block_erasers =
211 {
212 {
213 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson35727f72010-01-28 23:55:12 +0000214 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000215 }, {
216 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000217 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000218 },
219 },
Sean Nelson35727f72010-01-28 23:55:12 +0000220 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000221 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +0000222 },
223
224 {
225 .vendor = "AMD",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000226 .name = "Am29LV040B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000227 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000228 .manufacture_id = AMD_ID,
229 .model_id = AM_29LV040B,
230 .total_size = 512,
231 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000232 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000233 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +0000234 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000235 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000236 .block_erasers =
237 {
238 {
239 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +0000240 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000241 }, {
242 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000243 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000244 },
245 },
Sean Nelson35727f72010-01-28 23:55:12 +0000246 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000247 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000248 },
249
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000250 {
Peter Stuge8440cc02009-01-25 23:55:12 +0000251 .vendor = "AMD",
252 .name = "Am29LV081B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000253 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawski5bae4382009-06-02 00:38:14 +0000254 .manufacture_id = AMD_ID,
Carl-Daniel Hailfinger6d5d2532009-08-10 10:14:23 +0000255 .model_id = AM_29LV080B,
Peter Stuge8440cc02009-01-25 23:55:12 +0000256 .total_size = 1024,
257 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000258 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +0000259 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +0000260 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000261 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000262 .block_erasers =
263 {
264 {
265 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson35727f72010-01-28 23:55:12 +0000266 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000267 }, {
268 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000269 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000270 },
271 },
Sean Nelson35727f72010-01-28 23:55:12 +0000272 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000273 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +0000274 },
275
276 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000277 .vendor = "ASD",
278 .name = "AE49F2008",
Urja Rannikko038a3122009-06-28 19:19:25 +0000279 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000280 .manufacture_id = ASD_ID,
281 .model_id = ASD_AE49F2008,
282 .total_size = 256,
283 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +0000284 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000285 .tested = TEST_UNTESTED,
286 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000287 .probe_timing = TIMING_FIXME,
Sean Nelson54596372010-01-09 05:30:14 +0000288 .block_erasers =
289 {
290 {
291 .eraseblocks = {
292 {128 * 1024, 1},
293 {96 * 1024, 1},
294 {8 * 1024, 2},
295 {16 * 1024, 1},
296 },
297 .block_erase = erase_sector_jedec,
298 }, {
299 .eraseblocks = { {256 * 1024, 1} },
300 .block_erase = erase_chip_block_jedec,
301 }
302 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000303 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000304 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000305 },
306
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000307 {
308 .vendor = "Atmel",
309 .name = "AT25DF021",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000310 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000311 .manufacture_id = ATMEL_ID,
312 .model_id = AT_25DF021,
313 .total_size = 256,
314 .page_size = 256,
315 .tested = TEST_UNTESTED,
316 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000317 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000318 .block_erasers =
319 {
320 {
321 .eraseblocks = { {4 * 1024, 64} },
322 .block_erase = spi_block_erase_20,
323 }, {
324 .eraseblocks = { {32 * 1024, 8} },
325 .block_erase = spi_block_erase_52,
326 }, {
327 .eraseblocks = { {64 * 1024, 4} },
328 .block_erase = spi_block_erase_d8,
329 }, {
330 .eraseblocks = { {256 * 1024, 1} },
331 .block_erase = spi_block_erase_60,
332 }, {
333 .eraseblocks = { {256 * 1024, 1} },
334 .block_erase = spi_block_erase_c7,
335 }
336 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000337 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000338 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000339 },
340
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000341 {
342 .vendor = "Atmel",
343 .name = "AT25DF041A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000344 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000345 .manufacture_id = ATMEL_ID,
346 .model_id = AT_25DF041A,
347 .total_size = 512,
348 .page_size = 256,
349 .tested = TEST_UNTESTED,
350 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000351 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000352 .block_erasers =
353 {
354 {
355 .eraseblocks = { {4 * 1024, 128} },
356 .block_erase = spi_block_erase_20,
357 }, {
358 .eraseblocks = { {32 * 1024, 16} },
359 .block_erase = spi_block_erase_52,
360 }, {
361 .eraseblocks = { {64 * 1024, 8} },
362 .block_erase = spi_block_erase_d8,
363 }, {
364 .eraseblocks = { {512 * 1024, 1} },
365 .block_erase = spi_block_erase_60,
366 }, {
367 .eraseblocks = { {512 * 1024, 1} },
368 .block_erase = spi_block_erase_c7,
369 }
370 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000371 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000372 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000373 },
374
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000375 {
376 .vendor = "Atmel",
377 .name = "AT25DF081",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000378 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000379 .manufacture_id = ATMEL_ID,
380 .model_id = AT_25DF081,
381 .total_size = 1024,
382 .page_size = 256,
383 .tested = TEST_UNTESTED,
384 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000385 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000386 .block_erasers =
387 {
388 {
389 .eraseblocks = { {4 * 1024, 256} },
390 .block_erase = spi_block_erase_20,
391 }, {
392 .eraseblocks = { {32 * 1024, 32} },
393 .block_erase = spi_block_erase_52,
394 }, {
395 .eraseblocks = { {64 * 1024, 16} },
396 .block_erase = spi_block_erase_d8,
397 }, {
398 .eraseblocks = { {1024 * 1024, 1} },
399 .block_erase = spi_block_erase_60,
400 }, {
401 .eraseblocks = { {1024 * 1024, 1} },
402 .block_erase = spi_block_erase_c7,
403 }
404 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000405 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000406 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000407 },
408
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000409 {
410 .vendor = "Atmel",
411 .name = "AT25DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000412 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000413 .manufacture_id = ATMEL_ID,
414 .model_id = AT_25DF161,
415 .total_size = 2048,
416 .page_size = 256,
417 .tested = TEST_UNTESTED,
418 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000419 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000420 .block_erasers =
421 {
422 {
423 .eraseblocks = { {4 * 1024, 512} },
424 .block_erase = spi_block_erase_20,
425 }, {
426 .eraseblocks = { {32 * 1024, 64} },
427 .block_erase = spi_block_erase_52,
428 }, {
429 .eraseblocks = { {64 * 1024, 32} },
430 .block_erase = spi_block_erase_d8,
431 }, {
432 .eraseblocks = { {2 * 1024 * 1024, 1} },
433 .block_erase = spi_block_erase_60,
434 }, {
435 .eraseblocks = { {2 * 1024 * 1024, 1} },
436 .block_erase = spi_block_erase_c7,
437 }
438 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000439 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000440 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000441 },
442
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000443 {
444 .vendor = "Atmel",
445 .name = "AT25DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000446 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000447 .manufacture_id = ATMEL_ID,
448 .model_id = AT_25DF321,
449 .total_size = 4096,
450 .page_size = 256,
Sean Nelson89187292009-12-23 12:02:55 +0000451 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000452 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000453 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000454 .block_erasers =
455 {
456 {
457 .eraseblocks = { {4 * 1024, 1024} },
458 .block_erase = spi_block_erase_20,
459 }, {
460 .eraseblocks = { {32 * 1024, 128} },
461 .block_erase = spi_block_erase_52,
462 }, {
463 .eraseblocks = { {64 * 1024, 64} },
464 .block_erase = spi_block_erase_d8,
465 }, {
466 .eraseblocks = { {4 * 1024 * 1024, 1} },
467 .block_erase = spi_block_erase_60,
468 }, {
469 .eraseblocks = { {4 * 1024 * 1024, 1} },
470 .block_erase = spi_block_erase_c7,
471 }
472 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000473 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000474 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000475 },
476
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000477 {
478 .vendor = "Atmel",
479 .name = "AT25DF321A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000480 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000481 .manufacture_id = ATMEL_ID,
482 .model_id = AT_25DF321A,
483 .total_size = 4096,
484 .page_size = 256,
485 .tested = TEST_UNTESTED,
486 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000487 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000488 .block_erasers =
489 {
490 {
491 .eraseblocks = { {4 * 1024, 1024} },
492 .block_erase = spi_block_erase_20,
493 }, {
494 .eraseblocks = { {32 * 1024, 128} },
495 .block_erase = spi_block_erase_52,
496 }, {
497 .eraseblocks = { {64 * 1024, 64} },
498 .block_erase = spi_block_erase_d8,
499 }, {
500 .eraseblocks = { {4 * 1024 * 1024, 1} },
501 .block_erase = spi_block_erase_60,
502 }, {
503 .eraseblocks = { {4 * 1024 * 1024, 1} },
504 .block_erase = spi_block_erase_c7,
505 }
506 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000507 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000508 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000509 },
510
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000511 {
512 .vendor = "Atmel",
513 .name = "AT25DF641",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000514 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000515 .manufacture_id = ATMEL_ID,
516 .model_id = AT_25DF641,
517 .total_size = 8192,
518 .page_size = 256,
519 .tested = TEST_UNTESTED,
520 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000521 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000522 .block_erasers =
523 {
524 {
525 .eraseblocks = { {4 * 1024, 2048} },
526 .block_erase = spi_block_erase_20,
527 }, {
528 .eraseblocks = { {32 * 1024, 256} },
529 .block_erase = spi_block_erase_52,
530 }, {
531 .eraseblocks = { {64 * 1024, 128} },
532 .block_erase = spi_block_erase_d8,
533 }, {
534 .eraseblocks = { {8 * 1024 * 1024, 1} },
535 .block_erase = spi_block_erase_60,
536 }, {
537 .eraseblocks = { {8 * 1024 * 1024, 1} },
538 .block_erase = spi_block_erase_c7,
539 }
540 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000541 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000542 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000543 },
544
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000545 {
546 .vendor = "Atmel",
547 .name = "AT25F512B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000548 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000549 .manufacture_id = ATMEL_ID,
550 .model_id = AT_25F512B,
551 .total_size = 64,
552 .page_size = 256,
553 .tested = TEST_UNTESTED,
554 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000555 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000556 .block_erasers =
557 {
558 {
559 .eraseblocks = { {4 * 1024, 16} },
560 .block_erase = spi_block_erase_20,
561 }, {
562 .eraseblocks = { {32 * 1024, 2} },
563 .block_erase = spi_block_erase_52,
564 }, {
565 .eraseblocks = { {32 * 1024, 2} },
566 .block_erase = spi_block_erase_d8,
567 }, {
568 .eraseblocks = { {64 * 1024, 1} },
569 .block_erase = spi_block_erase_60,
570 }, {
571 .eraseblocks = { {64 * 1024, 1} },
572 .block_erase = spi_block_erase_c7,
573 }
574 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000575 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000576 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000577 },
578
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000579 {
580 .vendor = "Atmel",
581 .name = "AT25FS010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000582 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000583 .manufacture_id = ATMEL_ID,
584 .model_id = AT_25FS010,
585 .total_size = 128,
586 .page_size = 256,
587 .tested = TEST_UNTESTED,
588 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000589 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000590 .block_erasers =
591 {
592 {
593 .eraseblocks = { {4 * 1024, 32} },
594 .block_erase = spi_block_erase_20,
595 }, {
596 .eraseblocks = { {32 * 1024, 4} },
597 .block_erase = spi_block_erase_52,
598 }, {
599 .eraseblocks = { {32 * 1024, 4} },
600 .block_erase = spi_block_erase_d8,
601 }, {
602 .eraseblocks = { {128 * 1024, 1} },
603 .block_erase = spi_block_erase_60,
604 }, {
605 .eraseblocks = { {128 * 1024, 1} },
606 .block_erase = spi_block_erase_c7,
607 }
608 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000609 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000610 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000611 },
612
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000613 {
614 .vendor = "Atmel",
615 .name = "AT25FS040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000616 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000617 .manufacture_id = ATMEL_ID,
618 .model_id = AT_25FS040,
619 .total_size = 512,
620 .page_size = 256,
621 .tested = TEST_UNTESTED,
622 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000623 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000624 .block_erasers =
625 {
626 {
627 .eraseblocks = { {4 * 1024, 128} },
628 .block_erase = spi_block_erase_20,
629 }, {
630 .eraseblocks = { {64 * 1024, 8} },
631 .block_erase = spi_block_erase_52,
632 }, {
633 .eraseblocks = { {64 * 1024, 8} },
634 .block_erase = spi_block_erase_d8,
635 }, {
636 .eraseblocks = { {512 * 1024, 1} },
637 .block_erase = spi_block_erase_60,
638 }, {
639 .eraseblocks = { {512 * 1024, 1} },
640 .block_erase = spi_block_erase_c7,
641 }
642 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000643 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000644 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000645 },
646
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000647 {
648 .vendor = "Atmel",
649 .name = "AT26DF041",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000650 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000651 .manufacture_id = ATMEL_ID,
652 .model_id = AT_26DF041,
653 .total_size = 512,
654 .page_size = 256,
655 .tested = TEST_UNTESTED,
656 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000657 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000658 .block_erasers =
659 {
660 {
661 .eraseblocks = { {4 * 1024, 128} },
662 .block_erase = spi_block_erase_20,
663 }
664 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000665 .write = NULL /* Incompatible Page write */,
666 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000667 },
668
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000669 {
670 .vendor = "Atmel",
671 .name = "AT26DF081A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000672 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000673 .manufacture_id = ATMEL_ID,
674 .model_id = AT_26DF081A,
675 .total_size = 1024,
676 .page_size = 256,
677 .tested = TEST_UNTESTED,
678 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000679 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000680 .block_erasers =
681 {
682 {
683 .eraseblocks = { {4 * 1024, 256} },
684 .block_erase = spi_block_erase_20,
685 }, {
686 .eraseblocks = { {32 * 1024, 32} },
687 .block_erase = spi_block_erase_52,
688 }, {
689 .eraseblocks = { {64 * 1024, 16} },
690 .block_erase = spi_block_erase_d8,
691 }, {
692 .eraseblocks = { {1024 * 1024, 1} },
693 .block_erase = spi_block_erase_60,
694 }, {
695 .eraseblocks = { {1024 * 1024, 1} },
696 .block_erase = spi_block_erase_c7,
697 }
698 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000699 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000700 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000701 },
702
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000703 {
704 .vendor = "Atmel",
705 .name = "AT26DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000706 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000707 .manufacture_id = ATMEL_ID,
708 .model_id = AT_26DF161,
709 .total_size = 2048,
710 .page_size = 256,
711 .tested = TEST_UNTESTED,
712 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000713 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000714 .block_erasers =
715 {
716 {
717 .eraseblocks = { {4 * 1024, 512} },
718 .block_erase = spi_block_erase_20,
719 }, {
720 .eraseblocks = { {32 * 1024, 64} },
721 .block_erase = spi_block_erase_52,
722 }, {
723 .eraseblocks = { {64 * 1024, 32} },
724 .block_erase = spi_block_erase_d8,
725 }, {
726 .eraseblocks = { {2 * 1024 * 1024, 1} },
727 .block_erase = spi_block_erase_60,
728 }, {
729 .eraseblocks = { {2 * 1024 * 1024, 1} },
730 .block_erase = spi_block_erase_c7,
731 }
732 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000733 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000734 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000735 },
736
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000737 {
738 .vendor = "Atmel",
739 .name = "AT26DF161A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000740 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000741 .manufacture_id = ATMEL_ID,
742 .model_id = AT_26DF161A,
743 .total_size = 2048,
744 .page_size = 256,
745 .tested = TEST_UNTESTED,
746 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000747 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000748 .block_erasers =
749 {
750 {
751 .eraseblocks = { {4 * 1024, 512} },
752 .block_erase = spi_block_erase_20,
753 }, {
754 .eraseblocks = { {32 * 1024, 64} },
755 .block_erase = spi_block_erase_52,
756 }, {
757 .eraseblocks = { {64 * 1024, 32} },
758 .block_erase = spi_block_erase_d8,
759 }, {
760 .eraseblocks = { {2 * 1024 * 1024, 1} },
761 .block_erase = spi_block_erase_60,
762 }, {
763 .eraseblocks = { {2 * 1024 * 1024, 1} },
764 .block_erase = spi_block_erase_c7,
765 }
766 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000767 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000768 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000769 },
770
771 /*The AT26DF321 has the same ID as the AT25DF321. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000772 /*{
773 .vendor = "Atmel",
774 .name = "AT26DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000775 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000776 .manufacture_id = ATMEL_ID,
777 .model_id = AT_26DF321,
778 .total_size = 4096,
779 .page_size = 256,
780 .tested = TEST_UNTESTED,
781 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000782 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000783 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000784 .read = spi_chip_read,
785 },*/
FENG yu ningff692fb2008-12-08 18:15:10 +0000786
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000787 {
788 .vendor = "Atmel",
789 .name = "AT26F004",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000790 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000791 .manufacture_id = ATMEL_ID,
792 .model_id = AT_26F004,
793 .total_size = 512,
794 .page_size = 256,
795 .tested = TEST_UNTESTED,
796 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000797 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000798 .block_erasers =
799 {
800 {
801 .eraseblocks = { {4 * 1024, 128} },
802 .block_erase = spi_block_erase_20,
803 }, {
804 .eraseblocks = { {32 * 1024, 16} },
805 .block_erase = spi_block_erase_52,
806 }, {
807 .eraseblocks = { {64 * 1024, 8} },
808 .block_erase = spi_block_erase_d8,
809 }, {
810 .eraseblocks = { {512 * 1024, 1} },
811 .block_erase = spi_block_erase_60,
812 }, {
813 .eraseblocks = { {512 * 1024, 1} },
814 .block_erase = spi_block_erase_c7,
815 }
816 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000817 .write = NULL /* Incompatible Page write */,
818 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000819 },
820
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000821 {
822 .vendor = "Atmel",
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000823 .name = "AT29C512",
Urja Rannikko038a3122009-06-28 19:19:25 +0000824 .bustype = CHIP_BUSTYPE_PARALLEL,
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000825 .manufacture_id = ATMEL_ID,
826 .model_id = AT_29C512,
827 .total_size = 64,
828 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +0000829 .feature_bits = FEATURE_LONG_RESET,
830 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +0000831 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000832 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +0000833 .block_erasers =
834 {
835 {
836 .eraseblocks = { {64 * 1024, 1} },
837 .block_erase = erase_chip_block_jedec,
838 }
839 },
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000840 .write = write_jedec,
841 .read = read_memmapped,
842
843 },
844
845 {
846 .vendor = "Atmel",
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000847 .name = "AT29C010A",
Urja Rannikko161b8852009-06-05 08:47:37 +0000848 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000849 .manufacture_id = ATMEL_ID,
850 .model_id = AT_29C010A,
851 .total_size = 128,
852 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +0000853 .feature_bits = FEATURE_LONG_RESET,
854 .tested = TEST_UNTESTED,
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000855 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000856 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +0000857 .block_erasers =
858 {
859 {
860 .eraseblocks = { {128 * 1024, 1} },
861 .block_erase = erase_chip_block_jedec,
862 }
863 },
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000864 .write = write_jedec, /* FIXME */
865 .read = read_memmapped,
866 },
867
868 {
869 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000870 .name = "AT29C020",
Urja Rannikko161b8852009-06-05 08:47:37 +0000871 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000872 .manufacture_id = ATMEL_ID,
873 .model_id = AT_29C020,
874 .total_size = 256,
875 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +0000876 .feature_bits = FEATURE_LONG_RESET,
877 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000878 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +0000879 .probe_timing = 10000, /* 10ms */
Sean Nelson89187292009-12-23 12:02:55 +0000880 .block_erasers =
881 {
882 {
883 .eraseblocks = { {256 * 1024, 1} },
884 .block_erase = erase_chip_block_jedec,
885 }
886 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000887 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000888 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000889 },
890
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000891 {
892 .vendor = "Atmel",
893 .name = "AT29C040A",
Urja Rannikko161b8852009-06-05 08:47:37 +0000894 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000895 .manufacture_id = ATMEL_ID,
896 .model_id = AT_29C040A,
897 .total_size = 512,
898 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +0000899 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000900 .tested = TEST_UNTESTED,
901 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +0000902 .probe_timing = 10000, /* 10 ms */
Sean Nelson89187292009-12-23 12:02:55 +0000903 .block_erasers =
904 {
905 {
906 .eraseblocks = { {512 * 1024, 1} },
907 .block_erase = erase_chip_block_jedec,
908 }
909 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000910 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000911 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000912 },
913
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000914 {
915 .vendor = "Atmel",
916 .name = "AT45CS1282",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000917 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000918 .manufacture_id = ATMEL_ID,
919 .model_id = AT_45CS1282,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000920 .total_size = 16896 /* No power of two sizes */,
921 .page_size = 1056 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000922 .tested = TEST_BAD_READ,
923 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000924 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000925 .write = NULL /* Incompatible Page write */,
926 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000927 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000928
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000929 {
930 .vendor = "Atmel",
931 .name = "AT45DB011D",
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_45DB011D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000935 .total_size = 128 /* Size can only be determined from status register */,
936 .page_size = 256 /* Size can only be determined from status register */,
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,
941 .read = NULL,
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 = "AT45DB021D",
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_45DB021D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000950 .total_size = 256 /* 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 = "AT45DB041D",
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_45DB041D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000965 .total_size = 512 /* 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 = "AT45DB081D",
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_45DB081D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000980 .total_size = 1024 /* 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 = "AT45DB161D",
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_45DB161D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000995 .total_size = 2048 /* Size can only be determined from status register */,
996 .page_size = 512 /* 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 = "AT45DB321C",
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_45DB321C,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001010 .total_size = 4224 /* No power of two sizes */,
1011 .page_size = 528 /* No power of two sizes */,
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 /* Incompatible read */,
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 = "AT45DB321D",
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_45DB321D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001025 .total_size = 4096 /* Size can only be determined from status register */,
1026 .page_size = 512 /* Size can only be determined from status register */,
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,
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 = "AT45DB642D",
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_45DB642D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001040 .total_size = 8192 /* Size can only be determined from status register */,
1041 .page_size = 1024 /* 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",
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001051 .name = "AT49BV512",
Urja Rannikko161b8852009-06-05 08:47:37 +00001052 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001053 .manufacture_id = ATMEL_ID,
1054 .model_id = AT_49BV512,
1055 .total_size = 64,
1056 .page_size = 64,
Sean Nelson35727f72010-01-28 23:55:12 +00001057 .feature_bits = FEATURE_EITHER_RESET,
1058 .tested = TEST_UNTESTED,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001059 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001060 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001061 .block_erasers =
1062 {
1063 {
1064 .eraseblocks = { {64 * 1024, 1} },
1065 .block_erase = erase_chip_block_jedec,
1066 }
1067 },
Sean Nelson35727f72010-01-28 23:55:12 +00001068 .write = write_jedec_1,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001069 .read = read_memmapped,
1070 },
1071
1072 {
1073 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001074 .name = "AT49F002(N)",
Urja Rannikko161b8852009-06-05 08:47:37 +00001075 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001076 .manufacture_id = ATMEL_ID,
1077 .model_id = AT_49F002N,
1078 .total_size = 256,
1079 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001080 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001081 .tested = TEST_UNTESTED,
1082 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001083 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001084 .block_erasers =
1085 {
1086 {
1087 .eraseblocks = {
1088 {16 * 1024, 1},
1089 {8 * 1024, 2},
1090 {96 * 1024, 1},
1091 {128 * 1024, 1},
1092 },
1093 .block_erase = erase_sector_jedec,
1094 }, {
1095 .eraseblocks = { {256 * 1024, 1} },
1096 .block_erase = erase_chip_block_jedec,
1097 }
1098 },
Sean Nelson35727f72010-01-28 23:55:12 +00001099 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001100 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001101 },
1102
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001103 {
1104 .vendor = "Atmel",
1105 .name = "AT49F002(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00001106 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001107 .manufacture_id = ATMEL_ID,
1108 .model_id = AT_49F002NT,
1109 .total_size = 256,
1110 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001111 .feature_bits = FEATURE_EITHER_RESET,
1112 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001113 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001114 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001115 .block_erasers =
1116 {
1117 {
1118 .eraseblocks = {
1119 {128 * 1024, 1},
1120 {96 * 1024, 1},
1121 {8 * 1024, 2},
1122 {16 * 1024, 1},
1123 },
1124 .block_erase = erase_sector_jedec,
1125 }, {
1126 .eraseblocks = { {256 * 1024, 1} },
1127 .block_erase = erase_chip_block_jedec,
1128 }
1129 },
Sean Nelson35727f72010-01-28 23:55:12 +00001130 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001131 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001132 },
1133
Sean Nelson54596372010-01-09 05:30:14 +00001134 /* The next two chip definitions have top/bottom boot blocks, but has no
1135 device differenciation between the two */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001136 {
1137 .vendor = "AMIC",
Sean Nelson54596372010-01-09 05:30:14 +00001138 .name = "A25L40PT",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001139 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001140 .manufacture_id = AMIC_ID,
1141 .model_id = AMIC_A25L40P,
1142 .total_size = 512,
1143 .page_size = 256,
Sean Nelson54596372010-01-09 05:30:14 +00001144 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001145 .probe = probe_spi_rdid4,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001146 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001147 .block_erasers =
1148 {
1149 {
1150 .eraseblocks = {
1151 {64 * 1024, 7},
1152 {32 * 1024, 1},
1153 {16 * 1024, 1},
1154 {8 * 1024, 1},
1155 {4 * 1024, 2},
1156 },
1157 .block_erase = spi_block_erase_d8,
1158 }, {
Sean Nelson2aff7aa2010-01-18 08:24:02 +00001159 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson54596372010-01-09 05:30:14 +00001160 .block_erase = spi_block_erase_c7,
1161 }
1162 },
1163 .write = spi_chip_write_256,
1164 .read = spi_chip_read,
1165 },
1166
1167 {
1168 .vendor = "AMIC",
1169 .name = "A25L40PU",
1170 .bustype = CHIP_BUSTYPE_SPI,
1171 .manufacture_id = AMIC_ID,
1172 .model_id = AMIC_A25L40P,
1173 .total_size = 512,
1174 .page_size = 256,
1175 .tested = TEST_OK_PRW,
1176 .probe = probe_spi_rdid4,
1177 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001178 .block_erasers =
1179 {
1180 {
1181 .eraseblocks = {
1182 {4 * 1024, 2},
1183 {8 * 1024, 1},
1184 {16 * 1024, 1},
1185 {32 * 1024, 1},
1186 {64 * 1024, 7},
1187 },
1188 .block_erase = spi_block_erase_d8,
1189 }, {
Sean Nelson2aff7aa2010-01-18 08:24:02 +00001190 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson54596372010-01-09 05:30:14 +00001191 .block_erase = spi_block_erase_c7,
1192 }
1193 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001194 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001195 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001196 },
1197
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001198 {
1199 .vendor = "AMIC",
1200 .name = "A29002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00001201 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001202 .manufacture_id = AMIC_ID_NOPREFIX,
1203 .model_id = AMIC_A29002B,
1204 .total_size = 256,
1205 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001206 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001207 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00001208 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001209 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001210 .block_erasers =
1211 {
1212 {
1213 .eraseblocks = {
1214 {16 * 1024, 1},
1215 {8 * 1024, 2},
1216 {32 * 1024, 1},
1217 {64 * 1024, 3},
1218 },
Sean Nelson35727f72010-01-28 23:55:12 +00001219 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001220 }, {
1221 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00001222 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001223 },
1224 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00001225 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001226 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001227 },
1228
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001229 {
1230 .vendor = "AMIC",
1231 .name = "A29002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00001232 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001233 .manufacture_id = AMIC_ID_NOPREFIX,
1234 .model_id = AMIC_A29002T,
1235 .total_size = 256,
1236 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001237 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
1238 .tested = TEST_UNTESTED,
1239 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001240 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001241 .block_erasers =
1242 {
1243 {
1244 .eraseblocks = {
1245 {64 * 1024, 3},
1246 {32 * 1024, 1},
1247 {8 * 1024, 2},
1248 {16 * 1024, 1},
1249 },
Sean Nelson35727f72010-01-28 23:55:12 +00001250 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001251 }, {
1252 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00001253 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001254 },
1255 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00001256 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001257 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001258 },
1259
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001260 {
1261 .vendor = "AMIC",
1262 .name = "A29040B",
Urja Rannikko161b8852009-06-05 08:47:37 +00001263 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001264 .manufacture_id = AMIC_ID_NOPREFIX,
1265 .model_id = AMIC_A29040B,
1266 .total_size = 512,
1267 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001268 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
1269 .tested = TEST_UNTESTED,
1270 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001271 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +00001272 .block_erasers =
1273 {
1274 {
1275 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +00001276 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00001277 }, {
1278 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00001279 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00001280 },
1281 },
Sean Nelson35727f72010-01-28 23:55:12 +00001282 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001283 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001284 },
1285
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001286 {
1287 .vendor = "AMIC",
1288 .name = "A49LF040A",
Urja Rannikko161b8852009-06-05 08:47:37 +00001289 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001290 .manufacture_id = AMIC_ID_NOPREFIX,
1291 .model_id = AMIC_A49LF040A,
1292 .total_size = 512,
1293 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001294 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
1295 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00001296 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001297 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson54596372010-01-09 05:30:14 +00001298 .block_erasers =
1299 {
1300 {
1301 .eraseblocks = { {64 * 1024, 8} },
1302 .block_erase = erase_block_jedec,
1303 }, {
1304 .eraseblocks = { {512 * 1024, 1} },
1305 .block_erase = erase_chip_block_jedec,
1306 }
1307 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001308 .write = write_49fl00x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001309 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001310 },
1311
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001312 {
1313 .vendor = "EMST",
1314 .name = "F49B002UA",
Urja Rannikko161b8852009-06-05 08:47:37 +00001315 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001316 .manufacture_id = EMST_ID,
1317 .model_id = EMST_F49B002UA,
1318 .total_size = 256,
1319 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00001320 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001321 .tested = TEST_UNTESTED,
1322 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001323 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00001324 .block_erasers =
1325 {
1326 {
1327 .eraseblocks = {
1328 {128 * 1024, 1},
1329 {96 * 1024, 1},
1330 {8 * 1024, 2},
1331 {16 * 1024, 1},
1332 },
1333 .block_erase = erase_sector_jedec,
1334 }, {
1335 .eraseblocks = { {256 * 1024, 1} },
1336 .block_erase = erase_chip_block_jedec,
1337 }
1338 },
Sean Nelson35727f72010-01-28 23:55:12 +00001339 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001340 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001341 },
1342
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001343 {
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001344 .vendor = "Eon",
1345 .name = "EN25B05",
1346 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001347 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001348 .model_id = EN_25B05,
1349 .total_size = 64,
1350 .page_size = 256,
1351 .tested = TEST_UNTESTED,
1352 .probe = probe_spi_rdid,
1353 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001354 .block_erasers =
1355 {
1356 {
1357 .eraseblocks = {
1358 {4 * 1024, 2},
1359 {8 * 1024, 1},
1360 {16 * 1024, 1},
1361 {32 * 1024, 1},
1362 },
1363 .block_erase = spi_block_erase_d8,
1364 }, {
1365 .eraseblocks = { {64 * 1024, 1} },
1366 .block_erase = spi_block_erase_c7,
1367 }
1368 },
1369 .write = spi_chip_write_256,
1370 .read = spi_chip_read,
1371 },
1372
1373 {
1374 .vendor = "Eon",
1375 .name = "EN25B05T",
1376 .bustype = CHIP_BUSTYPE_SPI,
1377 .manufacture_id = EON_ID_NOPREFIX,
1378 .model_id = EN_25B05,
1379 .total_size = 64,
1380 .page_size = 256,
1381 .tested = TEST_UNTESTED,
1382 .probe = probe_spi_rdid,
1383 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001384 .block_erasers =
1385 {
1386 {
1387 .eraseblocks = {
1388 {32 * 1024, 1},
1389 {16 * 1024, 1},
1390 {8 * 1024, 1},
1391 {4 * 1024, 2},
1392 },
1393 .block_erase = spi_block_erase_d8,
1394 }, {
1395 .eraseblocks = { {64 * 1024, 1} },
1396 .block_erase = spi_block_erase_c7,
1397 }
1398 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001399 .write = spi_chip_write_256,
1400 .read = spi_chip_read,
1401 },
1402
1403 {
1404 .vendor = "Eon",
1405 .name = "EN25B10",
1406 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001407 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001408 .model_id = EN_25B10,
1409 .total_size = 128,
1410 .page_size = 256,
1411 .tested = TEST_UNTESTED,
1412 .probe = probe_spi_rdid,
1413 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001414 .block_erasers =
1415 {
1416 {
1417 .eraseblocks = {
1418 {4 * 1024, 2},
1419 {8 * 1024, 1},
1420 {16 * 1024, 1},
1421 {32 * 1024, 3},
1422 },
1423 .block_erase = spi_block_erase_d8,
1424 }, {
1425 .eraseblocks = { {128 * 1024, 1} },
1426 .block_erase = spi_block_erase_c7,
1427 }
1428 },
1429 .write = spi_chip_write_256,
1430 .read = spi_chip_read,
1431 },
1432
1433 {
1434 .vendor = "Eon",
1435 .name = "EN25B10T",
1436 .bustype = CHIP_BUSTYPE_SPI,
1437 .manufacture_id = EON_ID_NOPREFIX,
1438 .model_id = EN_25B10,
1439 .total_size = 128,
1440 .page_size = 256,
1441 .tested = TEST_UNTESTED,
1442 .probe = probe_spi_rdid,
1443 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001444 .block_erasers =
1445 {
1446 {
1447 .eraseblocks = {
1448 {32 * 1024, 3},
1449 {16 * 1024, 1},
1450 {8 * 1024, 1},
1451 {4 * 1024, 2},
1452 },
1453 .block_erase = spi_block_erase_d8,
1454 }, {
1455 .eraseblocks = { {128 * 1024, 1} },
1456 .block_erase = spi_block_erase_c7,
1457 }
1458 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001459 .write = spi_chip_write_256,
1460 .read = spi_chip_read,
1461 },
1462
1463 {
1464 .vendor = "Eon",
1465 .name = "EN25B20",
1466 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001467 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001468 .model_id = EN_25B20,
1469 .total_size = 256,
1470 .page_size = 256,
1471 .tested = TEST_UNTESTED,
1472 .probe = probe_spi_rdid,
1473 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001474 .block_erasers =
1475 {
1476 {
1477 .eraseblocks = {
1478 {4 * 1024, 2},
1479 {8 * 1024, 1},
1480 {16 * 1024, 1},
1481 {32 * 1024, 1},
1482 {64 * 1024, 3}
1483 },
1484 .block_erase = spi_block_erase_d8,
1485 }, {
1486 .eraseblocks = { {256 * 1024, 1} },
1487 .block_erase = spi_block_erase_c7,
1488 }
1489 },
1490 .write = spi_chip_write_256,
1491 .read = spi_chip_read,
1492 },
1493
1494 {
1495 .vendor = "Eon",
1496 .name = "EN25B20T",
1497 .bustype = CHIP_BUSTYPE_SPI,
1498 .manufacture_id = EON_ID_NOPREFIX,
1499 .model_id = EN_25B20,
1500 .total_size = 256,
1501 .page_size = 256,
1502 .tested = TEST_UNTESTED,
1503 .probe = probe_spi_rdid,
1504 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001505 .block_erasers =
1506 {
1507 {
1508 .eraseblocks = {
1509 {64 * 1024, 3},
1510 {32 * 1024, 1},
1511 {16 * 1024, 1},
1512 {8 * 1024, 1},
1513 {4 * 1024, 2},
1514 },
1515 .block_erase = spi_block_erase_d8,
1516 }, {
1517 .eraseblocks = { {256 * 1024, 1} },
1518 .block_erase = spi_block_erase_c7,
1519 }
1520 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001521 .write = spi_chip_write_256,
1522 .read = spi_chip_read,
1523 },
1524
1525 {
1526 .vendor = "Eon",
1527 .name = "EN25B40",
1528 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001529 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001530 .model_id = EN_25B40,
1531 .total_size = 512,
1532 .page_size = 256,
1533 .tested = TEST_UNTESTED,
1534 .probe = probe_spi_rdid,
1535 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001536 .block_erasers =
1537 {
1538 {
1539 .eraseblocks = {
1540 {4 * 1024, 2},
1541 {8 * 1024, 1},
1542 {16 * 1024, 1},
1543 {32 * 1024, 1},
1544 {64 * 1024, 7}
1545 },
1546 .block_erase = spi_block_erase_d8,
1547 }, {
1548 .eraseblocks = { {512 * 1024, 1} },
1549 .block_erase = spi_block_erase_c7,
1550 }
1551 },
1552 .write = spi_chip_write_256,
1553 .read = spi_chip_read,
1554 },
1555
1556 {
1557 .vendor = "Eon",
1558 .name = "EN25B40T",
1559 .bustype = CHIP_BUSTYPE_SPI,
1560 .manufacture_id = EON_ID_NOPREFIX,
1561 .model_id = EN_25B40,
1562 .total_size = 512,
1563 .page_size = 256,
1564 .tested = TEST_UNTESTED,
1565 .probe = probe_spi_rdid,
1566 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001567 .block_erasers =
1568 {
1569 {
1570 .eraseblocks = {
1571 {64 * 1024, 7},
1572 {32 * 1024, 1},
1573 {16 * 1024, 1},
1574 {8 * 1024, 1},
1575 {4 * 1024, 2},
1576 },
1577 .block_erase = spi_block_erase_d8,
1578 }, {
1579 .eraseblocks = { {512 * 1024, 1} },
1580 .block_erase = spi_block_erase_c7,
1581 }
1582 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001583 .write = spi_chip_write_256,
1584 .read = spi_chip_read,
1585 },
1586
1587 {
1588 .vendor = "Eon",
1589 .name = "EN25B80",
1590 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001591 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001592 .model_id = EN_25B80,
1593 .total_size = 1024,
1594 .page_size = 256,
1595 .tested = TEST_UNTESTED,
1596 .probe = probe_spi_rdid,
1597 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001598 .block_erasers =
1599 {
1600 {
1601 .eraseblocks = {
1602 {4 * 1024, 2},
1603 {8 * 1024, 1},
1604 {16 * 1024, 1},
1605 {32 * 1024, 1},
1606 {64 * 1024, 15}
1607 },
1608 .block_erase = spi_block_erase_d8,
1609 }, {
1610 .eraseblocks = { {1024 * 1024, 1} },
1611 .block_erase = spi_block_erase_c7,
1612 }
1613 },
1614 .write = spi_chip_write_256,
1615 .read = spi_chip_read,
1616 },
1617
1618 {
1619 .vendor = "Eon",
1620 .name = "EN25B80T",
1621 .bustype = CHIP_BUSTYPE_SPI,
1622 .manufacture_id = EON_ID_NOPREFIX,
1623 .model_id = EN_25B80,
1624 .total_size = 1024,
1625 .page_size = 256,
1626 .tested = TEST_UNTESTED,
1627 .probe = probe_spi_rdid,
1628 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001629 .block_erasers =
1630 {
1631 {
1632 .eraseblocks = {
1633 {64 * 1024, 15},
1634 {32 * 1024, 1},
1635 {16 * 1024, 1},
1636 {8 * 1024, 1},
1637 {4 * 1024, 2},
1638 },
1639 .block_erase = spi_block_erase_d8,
1640 }, {
1641 .eraseblocks = { {1024 * 1024, 1} },
1642 .block_erase = spi_block_erase_c7,
1643 }
1644 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001645 .write = spi_chip_write_256,
1646 .read = spi_chip_read,
1647 },
1648
1649 {
1650 .vendor = "Eon",
1651 .name = "EN25B16",
1652 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001653 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001654 .model_id = EN_25B16,
1655 .total_size = 2048,
1656 .page_size = 256,
1657 .tested = TEST_UNTESTED,
1658 .probe = probe_spi_rdid,
1659 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001660 .block_erasers =
1661 {
1662 {
1663 .eraseblocks = {
1664 {4 * 1024, 2},
1665 {8 * 1024, 1},
1666 {16 * 1024, 1},
1667 {32 * 1024, 1},
1668 {64 * 1024, 31},
1669 },
1670 .block_erase = spi_block_erase_d8,
1671 }, {
1672 .eraseblocks = { {2 * 1024 * 1024, 1} },
1673 .block_erase = spi_block_erase_c7,
1674 }
1675 },
1676 .write = spi_chip_write_256,
1677 .read = spi_chip_read,
1678 },
1679
1680 {
1681 .vendor = "Eon",
1682 .name = "EN25B16T",
1683 .bustype = CHIP_BUSTYPE_SPI,
1684 .manufacture_id = EON_ID_NOPREFIX,
1685 .model_id = EN_25B16,
1686 .total_size = 2048,
1687 .page_size = 256,
1688 .tested = TEST_UNTESTED,
1689 .probe = probe_spi_rdid,
1690 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001691 .block_erasers =
1692 {
1693 {
1694 .eraseblocks = {
1695 {64 * 1024, 31},
1696 {32 * 1024, 1},
1697 {16 * 1024, 1},
1698 {8 * 1024, 1},
1699 {4 * 1024, 2},
1700 },
1701 .block_erase = spi_block_erase_d8,
1702 }, {
1703 .eraseblocks = { {2 * 1024 * 1024, 1} },
1704 .block_erase = spi_block_erase_c7,
1705 }
1706 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001707 .write = spi_chip_write_256,
1708 .read = spi_chip_read,
1709 },
1710
1711 {
1712 .vendor = "Eon",
1713 .name = "EN25B32",
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_25B32,
1717 .total_size = 4096,
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 {64 * 1024, 63},
1731 },
1732 .block_erase = spi_block_erase_d8,
1733 }, {
1734 .eraseblocks = { {4 * 1024 * 1024, 1} },
1735 .block_erase = spi_block_erase_c7,
1736 }
1737 },
1738 .write = spi_chip_write_256,
1739 .read = spi_chip_read,
1740 },
1741
1742 {
1743 .vendor = "Eon",
1744 .name = "EN25B32T",
1745 .bustype = CHIP_BUSTYPE_SPI,
1746 .manufacture_id = EON_ID_NOPREFIX,
1747 .model_id = EN_25B32,
1748 .total_size = 4096,
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 {64 * 1024, 63},
1758 {32 * 1024, 1},
1759 {16 * 1024, 1},
1760 {8 * 1024, 1},
1761 {4 * 1024, 2},
1762 },
1763 .block_erase = spi_block_erase_d8,
1764 }, {
1765 .eraseblocks = { {4 * 1024 * 1024, 1} },
1766 .block_erase = spi_block_erase_c7,
1767 }
1768 },
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 = "EN25B64",
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_25B64,
1779 .total_size = 8192,
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, 1},
1792 {64 * 1024, 127},
1793 },
1794 .block_erase = spi_block_erase_d8,
1795 }, {
1796 .eraseblocks = { {8 * 1024 * 1024, 1} },
1797 .block_erase = spi_block_erase_c7,
1798 }
1799 },
1800 .write = spi_chip_write_256,
1801 .read = spi_chip_read,
1802 },
1803
1804 {
1805 .vendor = "Eon",
1806 .name = "EN25B64T",
1807 .bustype = CHIP_BUSTYPE_SPI,
1808 .manufacture_id = EON_ID_NOPREFIX,
1809 .model_id = EN_25B64,
1810 .total_size = 8192,
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 {64 * 1024, 127},
1820 {32 * 1024, 1},
1821 {16 * 1024, 1},
1822 {8 * 1024, 1},
1823 {4 * 1024, 2},
1824 },
1825 .block_erase = spi_block_erase_d8,
1826 }, {
1827 .eraseblocks = { {8 * 1024 * 1024, 1} },
1828 .block_erase = spi_block_erase_c7,
1829 }
1830 },
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",
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001837 .name = "EN25D16",
1838 .bustype = CHIP_BUSTYPE_SPI,
1839 .manufacture_id = EON_ID_NOPREFIX,
1840 .model_id = EN_25D16,
1841 .total_size = 2048,
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 = { {4 * 1024, 512} },
1850 .block_erase = spi_block_erase_20,
1851 }, {
1852 .eraseblocks = { {64 * 1024, 32} },
1853 .block_erase = spi_block_erase_d8,
1854 }, {
1855 .eraseblocks = { {64 * 1024, 32} },
1856 .block_erase = spi_block_erase_52,
1857 }, {
1858 .eraseblocks = { {2 * 1024 * 1024, 1} },
1859 .block_erase = spi_block_erase_60,
1860 }, {
1861 .eraseblocks = { {2 * 1024 * 1024, 1} },
1862 .block_erase = spi_block_erase_c7,
1863 }
1864 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001865 .write = spi_chip_write_256,
1866 .read = spi_chip_read,
1867 },
1868
1869 {
1870 .vendor = "Eon",
1871 .name = "EN25F05",
1872 .bustype = CHIP_BUSTYPE_SPI,
1873 .manufacture_id = EON_ID_NOPREFIX,
1874 .model_id = EN_25F05,
1875 .total_size = 64,
1876 .page_size = 256,
1877 .tested = TEST_UNTESTED,
1878 .probe = probe_spi_rdid,
1879 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001880 .block_erasers =
1881 {
1882 {
1883 .eraseblocks = { {4 * 1024, 16} },
1884 .block_erase = spi_block_erase_20,
1885 }, {
1886 .eraseblocks = { {32 * 1024, 2} },
1887 .block_erase = spi_block_erase_d8,
1888 }, {
1889 .eraseblocks = { {32 * 1024, 2} },
1890 .block_erase = spi_block_erase_52,
1891 }, {
1892 .eraseblocks = { {64 * 1024, 1} },
1893 .block_erase = spi_block_erase_60,
1894 }, {
1895 .eraseblocks = { {64 * 1024, 1} },
1896 .block_erase = spi_block_erase_c7,
1897 }
1898 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001899 .write = spi_chip_write_256,
1900 .read = spi_chip_read,
1901 },
1902
1903 {
1904 .vendor = "Eon",
1905 .name = "EN25F10",
1906 .bustype = CHIP_BUSTYPE_SPI,
1907 .manufacture_id = EON_ID_NOPREFIX,
1908 .model_id = EN_25F10,
1909 .total_size = 128,
1910 .page_size = 256,
1911 .tested = TEST_UNTESTED,
1912 .probe = probe_spi_rdid,
1913 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001914 .block_erasers =
1915 {
1916 {
1917 .eraseblocks = { {4 * 1024, 32} },
1918 .block_erase = spi_block_erase_20,
1919 }, {
1920 .eraseblocks = { {32 * 1024, 4} },
1921 .block_erase = spi_block_erase_d8,
1922 }, {
1923 .eraseblocks = { {32 * 1024, 4} },
1924 .block_erase = spi_block_erase_52,
1925 }, {
1926 .eraseblocks = { {128 * 1024, 1} },
1927 .block_erase = spi_block_erase_60,
1928 }, {
1929 .eraseblocks = { {128 * 1024, 1} },
1930 .block_erase = spi_block_erase_c7,
1931 }
1932 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001933 .write = spi_chip_write_256,
1934 .read = spi_chip_read,
1935 },
1936
1937 {
1938 .vendor = "Eon",
1939 .name = "EN25F20",
1940 .bustype = CHIP_BUSTYPE_SPI,
1941 .manufacture_id = EON_ID_NOPREFIX,
1942 .model_id = EN_25F20,
1943 .total_size = 256,
1944 .page_size = 256,
1945 .tested = TEST_UNTESTED,
1946 .probe = probe_spi_rdid,
1947 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001948 .block_erasers =
1949 {
1950 {
1951 .eraseblocks = { {4 * 1024, 64} },
1952 .block_erase = spi_block_erase_20,
1953 }, {
1954 .eraseblocks = { {64 * 1024, 4} },
1955 .block_erase = spi_block_erase_d8,
1956 }, {
1957 .eraseblocks = { {64 * 1024, 4} },
1958 .block_erase = spi_block_erase_52,
1959 }, {
1960 .eraseblocks = { {256 * 1024, 1} },
1961 .block_erase = spi_block_erase_60,
1962 }, {
1963 .eraseblocks = { {256 * 1024, 1} },
1964 .block_erase = spi_block_erase_c7,
1965 }
1966 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001967 .write = spi_chip_write_256,
1968 .read = spi_chip_read,
1969 },
1970
1971 {
1972 .vendor = "Eon",
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001973 .name = "EN25F40",
1974 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001975 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001976 .model_id = EN_25F40,
1977 .total_size = 512,
1978 .page_size = 256,
Carl-Daniel Hailfingerfaaa2b22009-06-22 10:06:28 +00001979 .tested = TEST_OK_PROBE,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001980 .probe = probe_spi_rdid,
1981 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001982 .block_erasers =
1983 {
1984 {
Sean Nelson54596372010-01-09 05:30:14 +00001985 .eraseblocks = { {4 * 1024, 128} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00001986 .block_erase = spi_block_erase_20,
1987 }, {
Sean Nelson54596372010-01-09 05:30:14 +00001988 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00001989 .block_erase = spi_block_erase_d8,
1990 }, {
Sean Nelson54596372010-01-09 05:30:14 +00001991 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00001992 .block_erase = spi_block_erase_60,
1993 }, {
Sean Nelson54596372010-01-09 05:30:14 +00001994 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00001995 .block_erase = spi_block_erase_c7,
1996 },
1997 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001998 .write = spi_chip_write_256,
1999 .read = spi_chip_read,
2000 },
2001
2002 {
2003 .vendor = "Eon",
2004 .name = "EN25F80",
2005 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002006 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002007 .model_id = EN_25F80,
2008 .total_size = 1024,
2009 .page_size = 256,
2010 .tested = TEST_UNTESTED,
2011 .probe = probe_spi_rdid,
2012 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002013 .block_erasers =
2014 {
2015 {
2016 .eraseblocks = { {4 * 1024, 256} },
2017 .block_erase = spi_block_erase_20,
2018 }, {
2019 .eraseblocks = { {64 * 1024, 16} },
2020 .block_erase = spi_block_erase_d8,
2021 }, {
2022 .eraseblocks = { {1024 * 1024, 1} },
2023 .block_erase = spi_block_erase_60,
2024 }, {
2025 .eraseblocks = { {1024 * 1024, 1} },
2026 .block_erase = spi_block_erase_c7,
2027 }
2028 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002029 .write = spi_chip_write_256,
2030 .read = spi_chip_read,
2031 },
2032
2033 {
2034 .vendor = "Eon",
2035 .name = "EN25F16",
2036 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002037 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002038 .model_id = EN_25F16,
2039 .total_size = 2048,
2040 .page_size = 256,
2041 .tested = TEST_UNTESTED,
2042 .probe = probe_spi_rdid,
2043 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002044 .block_erasers =
2045 {
2046 {
2047 .eraseblocks = { {4 * 1024, 512} },
2048 .block_erase = spi_block_erase_20,
2049 }, {
2050 .eraseblocks = { {64 * 1024, 32} },
2051 .block_erase = spi_block_erase_d8,
2052 }, {
2053 .eraseblocks = { {2 * 1024 * 1024, 1} },
2054 .block_erase = spi_block_erase_60,
2055 }, {
2056 .eraseblocks = { {2 * 1024 * 1024, 1} },
2057 .block_erase = spi_block_erase_c7,
2058 }
2059 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002060 .write = spi_chip_write_256,
2061 .read = spi_chip_read,
2062 },
2063
2064 {
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002065 .vendor = "Eon",
2066 .name = "EN25F32",
2067 .bustype = CHIP_BUSTYPE_SPI,
2068 .manufacture_id = EON_ID_NOPREFIX,
2069 .model_id = EN_25F32,
2070 .total_size = 4096,
2071 .page_size = 256,
2072 .tested = TEST_UNTESTED,
2073 .probe = probe_spi_rdid,
2074 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002075 .block_erasers =
2076 {
2077 {
2078 .eraseblocks = { {4 * 1024, 1024} },
2079 .block_erase = spi_block_erase_20,
2080 }, {
2081 .eraseblocks = { {64 * 1024, 64} },
2082 .block_erase = spi_block_erase_d8,
2083 }, {
2084 .eraseblocks = { {4 * 1024 * 1024, 1} },
2085 .block_erase = spi_block_erase_60,
2086 }, {
2087 .eraseblocks = { {4 * 1024 * 1024, 1} },
2088 .block_erase = spi_block_erase_c7,
2089 }
2090 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002091 .write = spi_chip_write_256,
2092 .read = spi_chip_read,
2093 },
2094
2095 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002096 .vendor = "EON",
2097 .name = "EN29F002(A)(N)B",
Urja Rannikko161b8852009-06-05 08:47:37 +00002098 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002099 .manufacture_id = EON_ID,
2100 .model_id = EN_29F002B,
2101 .total_size = 256,
2102 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002103 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002104 .tested = TEST_UNTESTED,
2105 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002106 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002107 .block_erasers =
2108 {
2109 {
2110 .eraseblocks = {
2111 {64 * 1024, 3},
2112 {32 * 1024, 1},
2113 {8 * 1024, 2},
2114 {16 * 1024, 1},
2115 },
2116 .block_erase = erase_sector_jedec,
2117 }, {
2118 .eraseblocks = { {256 * 1024, 1} },
2119 .block_erase = erase_chip_block_jedec,
2120 },
2121 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002122 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002123 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002124 },
2125
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002126 {
2127 .vendor = "EON",
2128 .name = "EN29F002(A)(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00002129 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002130 .manufacture_id = EON_ID,
2131 .model_id = EN_29F002T,
2132 .total_size = 256,
2133 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002134 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
2135 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002136 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002137 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002138 .block_erasers =
2139 {
2140 {
2141 .eraseblocks = {
2142 {16 * 1024, 1},
2143 {8 * 1024, 2},
2144 {32 * 1024, 1},
2145 {64 * 1024, 3},
2146 },
2147 .block_erase = erase_sector_jedec,
2148 }, {
2149 .eraseblocks = { {256 * 1024, 1} },
2150 .block_erase = erase_chip_block_jedec,
2151 },
2152 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002153 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002154 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002155 },
2156
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002157 {
2158 .vendor = "Fujitsu",
2159 .name = "MBM29F004BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002160 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002161 .manufacture_id = FUJITSU_ID,
2162 .model_id = MBM29F004BC,
2163 .total_size = 512,
2164 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002165 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002166 .tested = TEST_UNTESTED,
2167 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002168 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002169 .block_erasers =
2170 {
2171 {
2172 .eraseblocks = {
2173 {16 * 1024, 1},
2174 {8 * 1024, 2},
2175 {32 * 1024, 1},
2176 {64 * 1024, 7},
2177 },
Sean Nelson35727f72010-01-28 23:55:12 +00002178 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002179 }, {
2180 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002181 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002182 },
2183 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002184 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002185 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002186 },
2187
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002188 {
2189 .vendor = "Fujitsu",
2190 .name = "MBM29F004TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002191 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002192 .manufacture_id = FUJITSU_ID,
2193 .model_id = MBM29F004TC,
2194 .total_size = 512,
2195 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002196 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002197 .tested = TEST_UNTESTED,
2198 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002199 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002200 .block_erasers =
2201 {
2202 {
2203 .eraseblocks = {
2204 {64 * 1024, 7},
2205 {32 * 1024, 1},
2206 {8 * 1024, 2},
2207 {16 * 1024, 1},
2208 },
Sean Nelson35727f72010-01-28 23:55:12 +00002209 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002210 }, {
2211 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002212 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002213 },
2214 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002215 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002216 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002217 },
2218
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002219 {
Sean Nelson35727f72010-01-28 23:55:12 +00002220 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002221 .vendor = "Fujitsu",
2222 .name = "MBM29F400BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002223 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002224 .manufacture_id = FUJITSU_ID,
2225 .model_id = MBM29F400BC,
2226 .total_size = 512,
2227 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002228 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002229 .tested = TEST_UNTESTED,
2230 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002231 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002232 .block_erasers =
2233 {
2234 {
2235 .eraseblocks = {
2236 {16 * 1024, 1},
2237 {8 * 1024, 2},
2238 {32 * 1024, 1},
2239 {64 * 1024, 7},
2240 },
2241 .block_erase = block_erase_m29f400bt,
2242 }, {
2243 .eraseblocks = { {512 * 1024, 1} },
2244 .block_erase = block_erase_chip_m29f400bt,
2245 },
2246 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002247 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002248 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002249 },
2250
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002251 {
2252 .vendor = "Fujitsu",
2253 .name = "MBM29F400TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002254 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002255 .manufacture_id = FUJITSU_ID,
2256 .model_id = MBM29F400TC,
2257 .total_size = 512,
2258 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002259 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002260 .tested = TEST_UNTESTED,
2261 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002262 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002263 .block_erasers =
2264 {
2265 {
2266 .eraseblocks = {
2267 {64 * 1024, 7},
2268 {32 * 1024, 1},
2269 {8 * 1024, 2},
2270 {16 * 1024, 1},
2271 },
2272 .block_erase = block_erase_m29f400bt,
2273 }, {
2274 .eraseblocks = { {512 * 1024, 1} },
2275 .block_erase = block_erase_chip_m29f400bt,
2276 },
2277 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002278 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002279 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002280 },
2281
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002282 {
2283 .vendor = "Intel",
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002284 .name = "28F001BX-B",
Urja Rannikko161b8852009-06-05 08:47:37 +00002285 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002286 .manufacture_id = INTEL_ID,
2287 .model_id = P28F001BXB,
2288 .total_size = 128,
2289 .page_size = 128 * 1024, /* 8k + 2x4k + 112k */
Sean Nelson35727f72010-01-28 23:55:12 +00002290 .feature_bits = 0,
Sean Nelson54596372010-01-09 05:30:14 +00002291 .tested = TEST_BAD_WRITE,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002292 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002293 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00002294 .block_erasers =
2295 {
2296 {
2297 .eraseblocks = {
2298 {8 * 1024, 1},
2299 {4 * 1024, 2},
2300 {112 * 1024, 1},
2301 },
2302 .block_erase = erase_82802ab_block,
2303 },
2304 },
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002305 .write = NULL,
2306 .read = read_memmapped,
2307 },
2308
2309 {
2310 .vendor = "Intel",
2311 .name = "28F001BX-T",
Urja Rannikko161b8852009-06-05 08:47:37 +00002312 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002313 .manufacture_id = INTEL_ID,
2314 .model_id = P28F001BXT,
2315 .total_size = 128,
2316 .page_size = 128 * 1024, /* 112k + 2x4k + 8k */
Sean Nelson35727f72010-01-28 23:55:12 +00002317 .feature_bits = 0,
2318 .tested = TEST_BAD_WRITE,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002319 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002320 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00002321 .block_erasers =
2322 {
2323 {
2324 .eraseblocks = {
2325 {112 * 1024, 1},
2326 {4 * 1024, 2},
2327 {8 * 1024, 1},
2328 },
2329 .block_erase = erase_82802ab_block,
2330 },
2331 },
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002332 .write = NULL,
2333 .read = read_memmapped,
2334 },
2335
2336 {
2337 .vendor = "Intel",
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002338 .name = "28F004S5",
2339 .bustype = CHIP_BUSTYPE_PARALLEL,
2340 .manufacture_id = INTEL_ID,
2341 .model_id = E_28F004S5,
2342 .total_size = 512,
2343 .page_size = 256,
2344 .tested = TEST_UNTESTED,
2345 .probe = probe_82802ab,
2346 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002347 .block_erasers =
2348 {
2349 {
2350 .eraseblocks = { {64 * 1024, 8} },
2351 .block_erase = erase_82802ab_block,
2352 },
2353 },
2354 .write = write_82802ab,
2355 .read = read_memmapped,
2356 },
2357
2358 {
2359 .vendor = "Intel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002360 .name = "82802AB",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002361 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002362 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002363 .model_id = I_82802AB,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002364 .total_size = 512,
2365 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002366 .feature_bits = 0,
Sean Nelson54596372010-01-09 05:30:14 +00002367 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002368 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002369 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002370 .block_erasers =
2371 {
2372 {
2373 .eraseblocks = { {64 * 1024, 8} },
2374 .block_erase = erase_82802ab_block,
2375 },
2376 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002377 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002378 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002379 },
2380
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002381 {
2382 .vendor = "Intel",
2383 .name = "82802AC",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002384 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002385 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002386 .model_id = I_82802AC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002387 .total_size = 1024,
2388 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002389 .feature_bits = 0,
Sean Nelson54596372010-01-09 05:30:14 +00002390 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002391 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002392 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002393 .block_erasers =
2394 {
2395 {
2396 .eraseblocks = { {64 * 1024, 16} },
2397 .block_erase = erase_82802ab_block,
2398 },
2399 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002400 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002401 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002402 },
2403
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002404 {
2405 .vendor = "Macronix",
2406 .name = "MX25L512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002407 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002408 .manufacture_id = MX_ID,
2409 .model_id = MX_25L512,
2410 .total_size = 64,
2411 .page_size = 256,
2412 .tested = TEST_UNTESTED,
2413 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002414 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002415 .block_erasers =
2416 {
2417 {
2418 .eraseblocks = { {4 * 1024, 16} },
2419 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002420 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002421 .eraseblocks = { {64 * 1024, 1} },
2422 .block_erase = spi_block_erase_52,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002423 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002424 .eraseblocks = { {64 * 1024, 1} },
2425 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002426 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002427 .eraseblocks = { {64 * 1024, 1} },
2428 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002429 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002430 .eraseblocks = { {64 * 1024, 1} },
2431 .block_erase = spi_block_erase_c7,
2432 },
2433 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002434 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002435 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002436 },
2437
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002438 {
2439 .vendor = "Macronix",
2440 .name = "MX25L1005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002441 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002442 .manufacture_id = MX_ID,
2443 .model_id = MX_25L1005,
2444 .total_size = 128,
2445 .page_size = 256,
2446 .tested = TEST_UNTESTED,
2447 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002448 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002449 .block_erasers =
2450 {
2451 {
2452 .eraseblocks = { {4 * 1024, 32} },
2453 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002454 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002455 .eraseblocks = { {64 * 1024, 2} },
2456 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002457 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002458 .eraseblocks = { {128 * 1024, 1} },
2459 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002460 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002461 .eraseblocks = { {128 * 1024, 1} },
2462 .block_erase = spi_block_erase_c7,
2463 },
2464 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002465 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002466 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002467 },
2468
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002469 {
2470 .vendor = "Macronix",
2471 .name = "MX25L2005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002472 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002473 .manufacture_id = MX_ID,
2474 .model_id = MX_25L2005,
2475 .total_size = 256,
2476 .page_size = 256,
2477 .tested = TEST_UNTESTED,
2478 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002479 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002480 .block_erasers =
2481 {
2482 {
2483 .eraseblocks = { {4 * 1024, 64} },
2484 .block_erase = spi_block_erase_20,
2485 }, {
2486 .eraseblocks = { {64 * 1024, 4} },
2487 .block_erase = spi_block_erase_52,
2488 }, {
2489 .eraseblocks = { {64 * 1024, 4} },
2490 .block_erase = spi_block_erase_d8,
2491 }, {
2492 .eraseblocks = { {256 * 1024, 1} },
2493 .block_erase = spi_block_erase_60,
2494 }, {
2495 .eraseblocks = { {256 * 1024, 1} },
2496 .block_erase = spi_block_erase_c7,
2497 },
2498 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002499 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002500 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002501 },
2502
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002503 {
2504 .vendor = "Macronix",
2505 .name = "MX25L4005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002506 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002507 .manufacture_id = MX_ID,
2508 .model_id = MX_25L4005,
2509 .total_size = 512,
2510 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002511 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002512 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002513 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002514 .block_erasers =
2515 {
2516 {
2517 .eraseblocks = { {4 * 1024, 128} },
2518 .block_erase = spi_block_erase_20,
2519 }, {
2520 .eraseblocks = { {64 * 1024, 8} },
2521 .block_erase = spi_block_erase_52,
2522 }, {
2523 .eraseblocks = { {64 * 1024, 8} },
2524 .block_erase = spi_block_erase_d8,
2525 }, {
2526 .eraseblocks = { {512 * 1024, 1} },
2527 .block_erase = spi_block_erase_60,
2528 }, {
2529 .eraseblocks = { {512 * 1024, 1} },
2530 .block_erase = spi_block_erase_c7,
2531 },
2532 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002533 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002534 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002535 },
2536
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002537 {
2538 .vendor = "Macronix",
2539 .name = "MX25L8005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002540 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002541 .manufacture_id = MX_ID,
2542 .model_id = MX_25L8005,
2543 .total_size = 1024,
2544 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002545 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002546 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002547 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002548 .block_erasers =
2549 {
2550 {
2551 .eraseblocks = { {4 * 1024, 256} },
2552 .block_erase = spi_block_erase_20,
2553 }, {
2554 .eraseblocks = { {64 * 1024, 16} },
2555 .block_erase = spi_block_erase_52,
2556 }, {
2557 .eraseblocks = { {64 * 1024, 16} },
2558 .block_erase = spi_block_erase_d8,
2559 }, {
2560 .eraseblocks = { {1024 * 1024, 1} },
2561 .block_erase = spi_block_erase_60,
2562 }, {
2563 .eraseblocks = { {1024 * 1024, 1} },
2564 .block_erase = spi_block_erase_c7,
2565 },
2566 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002567 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002568 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002569 },
2570
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002571 {
2572 .vendor = "Macronix",
2573 .name = "MX25L1605",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002574 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002575 .manufacture_id = MX_ID,
2576 .model_id = MX_25L1605,
2577 .total_size = 2048,
2578 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002579 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002580 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002581 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002582 .block_erasers =
2583 {
2584 {
2585 .eraseblocks = { {4 * 1024, 512} },
2586 .block_erase = spi_block_erase_20, /* This erase function has 64k blocksize for eLiteFlash */
2587 }, {
2588 .eraseblocks = { {64 * 1024, 32} }, /* Not supported in MX25L1605 (eLiteFlash) and MX25L1605D */
2589 .block_erase = spi_block_erase_52,
2590 }, {
2591 .eraseblocks = { {64 * 1024, 32} },
2592 .block_erase = spi_block_erase_d8,
2593 }, {
2594 .eraseblocks = { {2 * 1024 * 1024, 1} },
2595 .block_erase = spi_block_erase_60,
2596 }, {
2597 .eraseblocks = { {2 * 1024 * 1024, 1} },
2598 .block_erase = spi_block_erase_c7,
2599 },
2600 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002601 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002602 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002603 },
2604
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002605 {
2606 .vendor = "Macronix",
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002607 .name = "MX25L1635D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002608 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002609 .manufacture_id = MX_ID,
2610 .model_id = MX_25L1635D,
2611 .total_size = 2048,
2612 .page_size = 256,
2613 .tested = TEST_UNTESTED,
2614 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002615 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002616 .block_erasers =
2617 {
2618 {
2619 .eraseblocks = { {4 * 1024, 512} },
2620 .block_erase = spi_block_erase_20,
2621 }, {
2622 .eraseblocks = { {64 * 1024, 32} },
2623 .block_erase = spi_block_erase_d8,
2624 }, {
2625 .eraseblocks = { {2 * 1024 * 1024, 1} },
2626 .block_erase = spi_block_erase_60,
2627 }, {
2628 .eraseblocks = { {2 * 1024 * 1024, 1} },
2629 .block_erase = spi_block_erase_c7,
2630 }
2631 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002632 .write = spi_chip_write_256,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002633 .read = spi_chip_read,
2634 },
Stephan Guillouxfd315502009-04-20 22:54:13 +00002635
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002636 {
2637 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002638 .name = "MX25L3205",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002639 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002640 .manufacture_id = MX_ID,
2641 .model_id = MX_25L3205,
2642 .total_size = 4096,
2643 .page_size = 256,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002644 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002645 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002646 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002647 .block_erasers =
2648 {
2649 {
2650 .eraseblocks = { {4 * 1024, 1024} },
2651 .block_erase = spi_block_erase_20,
2652 }, {
2653 .eraseblocks = { {4 * 1024, 1024} },
2654 .block_erase = spi_block_erase_d8,
2655 }, {
2656 .eraseblocks = { {4 * 1024 * 1024, 1} },
2657 .block_erase = spi_block_erase_60,
2658 }, {
2659 .eraseblocks = { {4 * 1024 * 1024, 1} },
2660 .block_erase = spi_block_erase_c7,
2661 },
2662 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002663 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002664 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002665 },
2666
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002667 {
2668 .vendor = "Macronix",
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002669 .name = "MX25L3235D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002670 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002671 .manufacture_id = MX_ID,
2672 .model_id = MX_25L3235D,
2673 .total_size = 4096,
2674 .page_size = 256,
2675 .tested = TEST_UNTESTED,
2676 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002677 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002678 .block_erasers =
2679 {
2680 {
2681 .eraseblocks = { {4 * 1024, 1024} },
2682 .block_erase = spi_block_erase_20,
2683 }, {
2684 .eraseblocks = { {64 * 1024, 64} },
2685 .block_erase = spi_block_erase_d8,
2686 }, {
2687 .eraseblocks = { {4 * 1024 * 1024, 1} },
2688 .block_erase = spi_block_erase_60,
2689 }, {
2690 .eraseblocks = { {4 * 1024 * 1024, 1} },
2691 .block_erase = spi_block_erase_c7,
2692 }
2693 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002694 .write = spi_chip_write_256,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002695 .read = spi_chip_read,
2696 },
2697
2698 {
2699 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002700 .name = "MX25L6405",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002701 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002702 .manufacture_id = MX_ID,
2703 .model_id = MX_25L6405,
2704 .total_size = 8192,
2705 .page_size = 256,
Carl-Daniel Hailfinger452b3e32009-06-22 11:14:43 +00002706 .tested = TEST_OK_PROBE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002707 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002708 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002709 .block_erasers =
2710 {
2711 {
2712 .eraseblocks = { {64 * 1024, 128} },
2713 .block_erase = spi_block_erase_20,
2714 }, {
2715 .eraseblocks = { {64 * 1024, 128} },
2716 .block_erase = spi_block_erase_d8,
2717 }, {
2718 .eraseblocks = { {8 * 1024 * 1024, 1} },
2719 .block_erase = spi_block_erase_60,
2720 }, {
2721 .eraseblocks = { {8 * 1024 * 1024, 1} },
2722 .block_erase = spi_block_erase_c7,
2723 }
2724 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002725 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002726 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002727 },
2728
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002729 {
2730 .vendor = "Macronix",
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002731 .name = "MX25L12805",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002732 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002733 .manufacture_id = MX_ID,
2734 .model_id = MX_25L12805,
2735 .total_size = 16384,
2736 .page_size = 256,
2737 .tested = TEST_UNTESTED,
2738 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002739 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002740 .block_erasers =
2741 {
2742 {
2743 .eraseblocks = { {4 * 1024, 4096} },
2744 .block_erase = spi_block_erase_20,
2745 }, {
2746 .eraseblocks = { {64 * 1024, 256} },
2747 .block_erase = spi_block_erase_d8,
2748 }, {
2749 .eraseblocks = { {16 * 1024 * 1024, 1} },
2750 .block_erase = spi_block_erase_60,
2751 }, {
2752 .eraseblocks = { {16 * 1024 * 1024, 1} },
2753 .block_erase = spi_block_erase_c7,
2754 }
2755 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002756 .write = spi_chip_write_256,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002757 .read = spi_chip_read,
2758 },
2759
2760 {
2761 .vendor = "Macronix",
Mark Panajotovic502a9132009-08-24 01:42:24 +00002762 .name = "MX29F001B",
2763 .bustype = CHIP_BUSTYPE_PARALLEL,
2764 .manufacture_id = MX_ID,
2765 .model_id = MX_29F001B,
2766 .total_size = 128,
2767 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002768 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2769 .tested = TEST_UNTESTED,
2770 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002771 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002772 .block_erasers =
2773 {
2774 {
2775 .eraseblocks = {
2776 {8 * 1024, 1},
2777 {4 * 1024, 2},
2778 {8 * 1024, 2},
2779 {32 * 1024, 1},
2780 {64 * 1024, 1},
2781 },
Sean Nelson35727f72010-01-28 23:55:12 +00002782 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002783 }, {
2784 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002785 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002786 }
2787 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002788 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002789 .read = read_memmapped,
2790 },
2791
2792 {
2793 .vendor = "Macronix",
2794 .name = "MX29F001T",
2795 .bustype = CHIP_BUSTYPE_PARALLEL,
2796 .manufacture_id = MX_ID,
2797 .model_id = MX_29F001T,
2798 .total_size = 128,
2799 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002800 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2801 .tested = TEST_UNTESTED,
2802 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002803 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002804 .block_erasers =
2805 {
2806 {
2807 .eraseblocks = {
2808 {64 * 1024, 1},
2809 {32 * 1024, 1},
2810 {8 * 1024, 2},
2811 {4 * 1024, 2},
2812 {8 * 1024, 1},
2813 },
Sean Nelson35727f72010-01-28 23:55:12 +00002814 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002815 }, {
2816 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002817 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002818 }
2819 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002820 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002821 .read = read_memmapped,
2822 },
2823
2824 {
2825 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002826 .name = "MX29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00002827 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002828 .manufacture_id = MX_ID,
2829 .model_id = MX_29F002B,
2830 .total_size = 256,
2831 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002832 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002833 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00002834 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002835 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002836 .block_erasers =
2837 {
2838 {
2839 .eraseblocks = {
2840 {16 * 1024, 1},
2841 {8 * 1024, 2},
2842 {32 * 1024, 1},
2843 {64 * 1024, 3},
2844 },
Sean Nelson35727f72010-01-28 23:55:12 +00002845 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002846 }, {
2847 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002848 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002849 },
2850 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002851 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002852 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002853 },
2854
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002855 {
2856 .vendor = "Macronix",
2857 .name = "MX29F002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00002858 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002859 .manufacture_id = MX_ID,
2860 .model_id = MX_29F002T,
2861 .total_size = 256,
2862 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002863 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2864 .tested = TEST_UNTESTED,
2865 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002866 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002867 .block_erasers =
2868 {
2869 {
2870 .eraseblocks = {
2871 {64 * 1024, 3},
2872 {32 * 1024, 1},
2873 {8 * 1024, 2},
2874 {16 * 1024, 1},
2875 },
Sean Nelson35727f72010-01-28 23:55:12 +00002876 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002877 }, {
2878 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002879 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002880 },
2881 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002882 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002883 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002884 },
2885
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002886 {
2887 .vendor = "Macronix",
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00002888 .name = "MX29LV040",
Urja Rannikko038a3122009-06-28 19:19:25 +00002889 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002890 .manufacture_id = MX_ID,
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00002891 .model_id = MX_29LV040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002892 .total_size = 512,
2893 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002894 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2895 .tested = TEST_UNTESTED,
2896 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002897 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002898 .block_erasers =
2899 {
2900 {
2901 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00002902 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002903 }, {
2904 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002905 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002906 },
2907 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002908 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002909 .read = read_memmapped,
Carl-Daniel Hailfinger7de86392008-12-10 10:32:05 +00002910 },
2911
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002912 {
2913 .vendor = "Numonyx",
2914 .name = "M25PE10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002915 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002916 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002917 .model_id = ST_M25PE10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002918 .total_size = 128,
2919 .page_size = 256,
2920 .tested = TEST_UNTESTED,
2921 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002922 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00002923 .block_erasers =
2924 {
2925 {
2926 .eraseblocks = { {4 * 1024, 32} },
2927 .block_erase = spi_block_erase_20,
2928 }, {
2929 .eraseblocks = { {64 * 1024, 2} },
2930 .block_erase = spi_block_erase_d8,
2931 }, {
2932 .eraseblocks = { {128 * 1024, 1} },
2933 .block_erase = spi_block_erase_c7,
2934 }
2935 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002936 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002937 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002938 },
2939
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002940 {
2941 .vendor = "Numonyx",
2942 .name = "M25PE20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002943 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002944 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002945 .model_id = ST_M25PE20,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002946 .total_size = 256,
2947 .page_size = 256,
2948 .tested = TEST_UNTESTED,
2949 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002950 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00002951 .block_erasers =
2952 {
2953 {
2954 .eraseblocks = { {4 * 1024, 64} },
2955 .block_erase = spi_block_erase_20,
2956 }, {
2957 .eraseblocks = { {64 * 1024, 4} },
2958 .block_erase = spi_block_erase_d8,
2959 }, {
2960 .eraseblocks = { {256 * 1024, 1} },
2961 .block_erase = spi_block_erase_c7,
2962 }
2963 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002964 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002965 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002966 },
2967
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002968 {
2969 .vendor = "Numonyx",
2970 .name = "M25PE40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002971 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002972 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002973 .model_id = ST_M25PE40,
Sean Nelson5643c072010-01-19 03:23:07 +00002974 .total_size = 512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002975 .page_size = 256,
2976 .tested = TEST_UNTESTED,
2977 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002978 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00002979 .block_erasers =
2980 {
2981 {
2982 .eraseblocks = { {4 * 1024, 128} },
2983 .block_erase = spi_block_erase_20,
2984 }, {
2985 .eraseblocks = { {64 * 1024, 8} },
2986 .block_erase = spi_block_erase_d8,
2987 }, {
2988 .eraseblocks = { {512 * 1024, 1} },
2989 .block_erase = spi_block_erase_c7,
2990 }
2991 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002992 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002993 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002994 },
2995
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002996 {
2997 .vendor = "Numonyx",
2998 .name = "M25PE80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002999 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003000 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003001 .model_id = ST_M25PE80,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003002 .total_size = 1024,
3003 .page_size = 256,
3004 .tested = TEST_OK_PREW,
3005 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003006 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003007 .block_erasers =
3008 {
3009 {
3010 .eraseblocks = { {4 * 1024, 256} },
3011 .block_erase = spi_block_erase_20,
3012 }, {
3013 .eraseblocks = { {64 * 1024, 16} },
3014 .block_erase = spi_block_erase_d8,
3015 }, {
3016 .eraseblocks = { {1024 * 1024, 1} },
3017 .block_erase = spi_block_erase_c7,
3018 }
3019 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003020 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003021 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003022 },
3023
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003024 {
3025 .vendor = "Numonyx",
3026 .name = "M25PE16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003027 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003028 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003029 .model_id = ST_M25PE16,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003030 .total_size = 2048,
3031 .page_size = 256,
3032 .tested = TEST_UNTESTED,
3033 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003034 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003035 .block_erasers =
3036 {
3037 {
3038 .eraseblocks = { {4 * 1024, 512} },
3039 .block_erase = spi_block_erase_20,
3040 }, {
3041 .eraseblocks = { {64 * 1024, 32} },
3042 .block_erase = spi_block_erase_d8,
3043 }, {
3044 .eraseblocks = { {2 * 1024 * 1024, 1} },
3045 .block_erase = spi_block_erase_c7,
3046 }
3047 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003048 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003049 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003050 },
3051
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003052 {
3053 .vendor = "PMC",
3054 .name = "Pm25LV010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003055 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003056 .manufacture_id = PMC_ID,
3057 .model_id = PMC_25LV010,
3058 .total_size = 128,
3059 .page_size = 256,
3060 .tested = TEST_UNTESTED,
3061 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003062 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003063 .block_erasers =
3064 {
3065 {
3066 .eraseblocks = { {4 * 1024, 32} },
3067 .block_erase = spi_block_erase_d7,
3068 }, {
3069 .eraseblocks = { {32 * 1024, 4} },
3070 .block_erase = spi_block_erase_d8,
3071 }, {
3072 .eraseblocks = { {128 * 1024, 1} },
3073 .block_erase = spi_block_erase_c7,
3074 }
3075 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003076 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003077 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003078 },
3079
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003080 {
3081 .vendor = "PMC",
3082 .name = "Pm25LV016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003083 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003084 .manufacture_id = PMC_ID,
3085 .model_id = PMC_25LV016B,
3086 .total_size = 2048,
3087 .page_size = 256,
3088 .tested = TEST_UNTESTED,
3089 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003090 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003091 .block_erasers =
3092 {
3093 {
3094 .eraseblocks = { {4 * 1024, 512} },
3095 .block_erase = spi_block_erase_d7,
3096 }, {
3097 .eraseblocks = { {4 * 1024, 512} },
3098 .block_erase = spi_block_erase_20,
3099 }, {
3100 .eraseblocks = { {64 * 1024, 32} },
3101 .block_erase = spi_block_erase_d8,
3102 }, {
3103 .eraseblocks = { {2 * 1024 * 1024, 1} },
3104 .block_erase = spi_block_erase_60,
3105 }, {
3106 .eraseblocks = { {2 * 1024 * 1024, 1} },
3107 .block_erase = spi_block_erase_c7,
3108 }
3109 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003110 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003111 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003112 },
3113
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003114 {
3115 .vendor = "PMC",
3116 .name = "Pm25LV020",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003117 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003118 .manufacture_id = PMC_ID,
3119 .model_id = PMC_25LV020,
3120 .total_size = 256,
3121 .page_size = 256,
3122 .tested = TEST_UNTESTED,
3123 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003124 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003125 .block_erasers =
3126 {
3127 {
3128 .eraseblocks = { {4 * 1024, 64} },
3129 .block_erase = spi_block_erase_d7,
3130 }, {
3131 .eraseblocks = { {64 * 1024, 4} },
3132 .block_erase = spi_block_erase_d8,
3133 }, {
3134 .eraseblocks = { {256 * 1024, 1} },
3135 .block_erase = spi_block_erase_c7,
3136 }
3137 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003138 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003139 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003140 },
3141
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003142 {
3143 .vendor = "PMC",
3144 .name = "Pm25LV040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003145 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003146 .manufacture_id = PMC_ID,
3147 .model_id = PMC_25LV040,
3148 .total_size = 512,
3149 .page_size = 256,
3150 .tested = TEST_UNTESTED,
3151 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003152 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003153 .block_erasers =
3154 {
3155 {
3156 .eraseblocks = { {4 * 1024, 128} },
3157 .block_erase = spi_block_erase_d7,
3158 }, {
3159 .eraseblocks = { {64 * 1024, 8} },
3160 .block_erase = spi_block_erase_d8,
3161 }, {
3162 .eraseblocks = { {512 * 1024, 1} },
3163 .block_erase = spi_block_erase_c7,
3164 }
3165 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003166 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003167 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003168 },
3169
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003170 {
3171 .vendor = "PMC",
3172 .name = "Pm25LV080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003173 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003174 .manufacture_id = PMC_ID,
3175 .model_id = PMC_25LV080B,
3176 .total_size = 1024,
3177 .page_size = 256,
3178 .tested = TEST_UNTESTED,
3179 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003180 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003181 .block_erasers =
3182 {
3183 {
3184 .eraseblocks = { {4 * 1024, 256} },
3185 .block_erase = spi_block_erase_d7,
3186 }, {
3187 .eraseblocks = { {4 * 1024, 256} },
3188 .block_erase = spi_block_erase_20,
3189 }, {
3190 .eraseblocks = { {64 * 1024, 16} },
3191 .block_erase = spi_block_erase_d8,
3192 }, {
3193 .eraseblocks = { {1024 * 1024, 1} },
3194 .block_erase = spi_block_erase_60,
3195 }, {
3196 .eraseblocks = { {1024 * 1024, 1} },
3197 .block_erase = spi_block_erase_c7,
3198 }
3199 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003200 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003201 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003202 },
3203
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003204 {
3205 .vendor = "PMC",
3206 .name = "Pm25LV512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003207 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003208 .manufacture_id = PMC_ID,
3209 .model_id = PMC_25LV512,
3210 .total_size = 64,
3211 .page_size = 256,
3212 .tested = TEST_UNTESTED,
3213 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003214 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003215 .block_erasers =
3216 {
3217 {
3218 .eraseblocks = { {4 * 1024, 16} },
3219 .block_erase = spi_block_erase_d7,
3220 }, {
3221 .eraseblocks = { {32 * 1024, 2} },
3222 .block_erase = spi_block_erase_d8,
3223 }, {
3224 .eraseblocks = { {64 * 1024, 1} },
3225 .block_erase = spi_block_erase_c7,
3226 }
3227 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003228 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003229 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003230 },
3231
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003232 {
3233 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00003234 .name = "Pm29F002T",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003235 .bustype = CHIP_BUSTYPE_PARALLEL,
3236 .manufacture_id = PMC_ID_NOPREFIX,
3237 .model_id = PMC_29F002T,
3238 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00003239 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003240 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3241 .tested = TEST_UNTESTED,
3242 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003243 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00003244 .block_erasers =
3245 {
3246 {
3247 .eraseblocks = {
3248 {128 * 1024, 1},
3249 {96 * 1024, 1},
3250 {8 * 1024, 2},
3251 {16 * 1024, 1},
3252 },
Sean Nelson35727f72010-01-28 23:55:12 +00003253 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003254 }, {
3255 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003256 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003257 },
3258 },
Sean Nelson35727f72010-01-28 23:55:12 +00003259 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003260 .read = read_memmapped,
3261 },
3262
3263 {
3264 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00003265 .name = "Pm29F002B",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003266 .bustype = CHIP_BUSTYPE_PARALLEL,
3267 .manufacture_id = PMC_ID_NOPREFIX,
3268 .model_id = PMC_29F002B,
3269 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00003270 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003271 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003272 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00003273 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003274 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00003275 .block_erasers =
3276 {
3277 {
3278 .eraseblocks = {
3279 {16 * 1024, 1},
3280 {8 * 1024, 2},
3281 {96 * 1024, 1},
3282 {128 * 1024, 1},
3283 },
Sean Nelson35727f72010-01-28 23:55:12 +00003284 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003285 }, {
3286 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003287 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003288 },
3289 },
Sean Nelson35727f72010-01-28 23:55:12 +00003290 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003291 .read = read_memmapped,
3292 },
3293
3294 {
3295 .vendor = "PMC",
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003296 .name = "Pm39LV010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003297 .bustype = CHIP_BUSTYPE_PARALLEL,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003298 .manufacture_id = PMC_ID_NOPREFIX,
3299 .model_id = PMC_39F010,
3300 .total_size = 128,
3301 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003302 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3303 .tested = TEST_UNTESTED,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003304 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003305 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson5643c072010-01-19 03:23:07 +00003306 .block_erasers =
3307 {
3308 {
3309 .eraseblocks = { {4 * 1024, 32} },
3310 .block_erase = erase_sector_jedec,
3311 }, {
3312 .eraseblocks = { {64 * 1024, 2} },
3313 .block_erase = erase_block_jedec,
3314 }, {
3315 .eraseblocks = { {128 * 1024, 1} },
3316 .block_erase = erase_chip_block_jedec,
3317 }
3318 },
Sean Nelson35727f72010-01-28 23:55:12 +00003319 .write = write_jedec_1,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003320 .read = read_memmapped,
3321 },
3322
3323 {
3324 .vendor = "PMC",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003325 .name = "Pm49FL002",
Sean Nelson35727f72010-01-28 23:55:12 +00003326 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003327 .manufacture_id = PMC_ID_NOPREFIX,
3328 .model_id = PMC_49FL002,
3329 .total_size = 256,
3330 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003331 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
3332 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003333 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003334 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00003335 .block_erasers =
3336 {
3337 {
3338 .eraseblocks = { {4 * 1024, 64} },
3339 .block_erase = erase_sector_jedec,
3340 }, {
3341 .eraseblocks = { {16 * 1024, 16} },
3342 .block_erase = erase_block_jedec,
3343 }, {
3344 .eraseblocks = { {256 * 1024, 1} },
3345 .block_erase = erase_chip_block_jedec,
3346 }
3347 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00003348 .unlock = unlock_49fl00x,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003349 .write = write_49fl00x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003350 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003351 },
3352
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003353 {
3354 .vendor = "PMC",
3355 .name = "Pm49FL004",
Sean Nelson35727f72010-01-28 23:55:12 +00003356 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003357 .manufacture_id = PMC_ID_NOPREFIX,
3358 .model_id = PMC_49FL004,
3359 .total_size = 512,
3360 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003361 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
3362 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003363 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003364 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00003365 .block_erasers =
3366 {
3367 {
3368 .eraseblocks = { {4 * 1024, 128} },
3369 .block_erase = erase_sector_jedec,
3370 }, {
3371 .eraseblocks = { {64 * 1024, 8} },
3372 .block_erase = erase_block_jedec,
3373 }, {
3374 .eraseblocks = { {512 * 1024, 1} },
3375 .block_erase = erase_chip_block_jedec,
3376 }
3377 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00003378 .unlock = unlock_49fl00x,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003379 .write = write_49fl00x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003380 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003381 },
3382
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003383 {
Sean Nelsond70b09c2009-11-24 02:11:08 +00003384 .vendor = "Sanyo",
3385 .name = "LF25FW203A",
3386 .bustype = CHIP_BUSTYPE_SPI,
3387 .manufacture_id = SANYO_ID,
3388 .model_id = SANYO_LE25FW203A,
3389 .total_size = 2048,
3390 .page_size = 256,
3391 .tested = TEST_UNTESTED,
3392 .probe = probe_spi_rdid,
3393 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003394 .block_erasers =
3395 {
3396 {
3397 .eraseblocks = { {64 * 1024, 32} },
3398 .block_erase = spi_block_erase_d8,
3399 }, {
3400 .eraseblocks = { {2 * 1024 * 1024, 1} },
3401 .block_erase = spi_block_erase_c7,
3402 }
3403 },
Sean Nelsond70b09c2009-11-24 02:11:08 +00003404 .write = spi_chip_write_256,
3405 .read = spi_chip_read,
3406 },
3407
3408 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003409 .vendor = "Sharp",
3410 .name = "LHF00L04",
Urja Rannikko038a3122009-06-28 19:19:25 +00003411 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003412 .manufacture_id = SHARP_ID,
3413 .model_id = SHARP_LHF00L04,
3414 .total_size = 1024,
3415 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003416 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003417 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003418 .probe = probe_49lfxxxc,
3419 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003420 .block_erasers =
3421 {
3422 {
3423 .eraseblocks = {
3424 {64 * 1024, 15},
3425 {8 * 1024, 8}
3426 },
3427 .block_erase = erase_lhf00l04_block,
3428 }, {
3429 .eraseblocks = {
3430 {1024 * 1024, 1}
3431 },
Sean Nelson51c83fb2010-01-20 20:55:53 +00003432 .block_erase = NULL, /* 30 D0, only in A/A mux mode */
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003433 },
3434 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003435 .write = write_lhf00l04,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003436 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003437 },
3438
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003439 {
3440 .vendor = "Spansion",
Michael Karcher23ff4602010-01-12 23:29:30 +00003441 .name = "S25FL008A",
3442 .bustype = CHIP_BUSTYPE_SPI,
3443 .manufacture_id = SPANSION_ID,
3444 .model_id = SPANSION_S25FL008A,
3445 .total_size = 1024,
3446 .page_size = 256,
3447 .tested = TEST_OK_PREW,
3448 .probe = probe_spi_rdid,
3449 .probe_timing = TIMING_ZERO,
Michael Karcher23ff4602010-01-12 23:29:30 +00003450 .block_erasers =
3451 {
3452 {
3453 .eraseblocks = { {64 * 1024, 16} },
3454 .block_erase = spi_block_erase_d8,
3455 }, {
3456 .eraseblocks = { {1024 * 1024, 1} },
3457 .block_erase = spi_block_erase_c7,
3458 }
3459 },
3460 .write = spi_chip_write_256,
3461 .read = spi_chip_read,
3462 },
3463
3464 {
3465 .vendor = "Spansion",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003466 .name = "S25FL016A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003467 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003468 .manufacture_id = SPANSION_ID,
3469 .model_id = SPANSION_S25FL016A,
3470 .total_size = 2048,
3471 .page_size = 256,
Sean Nelson5643c072010-01-19 03:23:07 +00003472 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003473 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003474 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003475 .block_erasers =
3476 {
3477 {
3478 .eraseblocks = { {64 * 1024, 32} },
3479 .block_erase = spi_block_erase_d8,
3480 }, {
3481 .eraseblocks = { {2 * 1024 * 1024, 1} },
3482 .block_erase = spi_block_erase_c7,
3483 }
3484 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003485 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003486 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003487 },
3488
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003489 {
3490 .vendor = "SST",
3491 .name = "SST25VF016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003492 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003493 .manufacture_id = SST_ID,
3494 .model_id = SST_25VF016B,
3495 .total_size = 2048,
3496 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003497 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003498 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003499 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003500 .block_erasers =
3501 {
3502 {
3503 .eraseblocks = { {4 * 1024, 512} },
3504 .block_erase = spi_block_erase_20,
3505 }, {
3506 .eraseblocks = { {32 * 1024, 64} },
3507 .block_erase = spi_block_erase_52,
3508 }, {
3509 .eraseblocks = { {64 * 1024, 32} },
3510 .block_erase = spi_block_erase_d8,
3511 }, {
3512 .eraseblocks = { {2 * 1024 * 1024, 1} },
3513 .block_erase = spi_block_erase_60,
3514 }, {
3515 .eraseblocks = { {2 * 1024 * 1024, 1} },
3516 .block_erase = spi_block_erase_c7,
3517 },
3518 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003519 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003520 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003521 },
3522
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003523 {
3524 .vendor = "SST",
3525 .name = "SST25VF032B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003526 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003527 .manufacture_id = SST_ID,
3528 .model_id = SST_25VF032B,
3529 .total_size = 4096,
3530 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003531 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003532 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003533 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003534 .block_erasers =
3535 {
3536 {
3537 .eraseblocks = { {4 * 1024, 1024} },
3538 .block_erase = spi_block_erase_20,
3539 }, {
3540 .eraseblocks = { {32 * 1024, 128} },
3541 .block_erase = spi_block_erase_52,
3542 }, {
3543 .eraseblocks = { {64 * 1024, 64} },
3544 .block_erase = spi_block_erase_d8,
3545 }, {
3546 .eraseblocks = { {4 * 1024 * 1024, 1} },
3547 .block_erase = spi_block_erase_60,
3548 }, {
3549 .eraseblocks = { {4 * 1024 * 1024, 1} },
3550 .block_erase = spi_block_erase_c7,
3551 },
3552 },
3553 .write = spi_chip_write_1,
3554 .read = spi_chip_read,
3555 },
3556
3557 {
3558 .vendor = "SST",
3559 .name = "SST25VF040.REMS",
3560 .bustype = CHIP_BUSTYPE_SPI,
3561 .manufacture_id = SST_ID,
3562 .model_id = SST_25VF040_REMS,
3563 .total_size = 512,
3564 .page_size = 256,
3565 .tested = TEST_OK_PR,
3566 .probe = probe_spi_rems,
3567 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003568 .block_erasers =
3569 {
3570 {
3571 .eraseblocks = { {4 * 1024, 128} },
3572 .block_erase = spi_block_erase_20,
3573 }, {
3574 .eraseblocks = { {32 * 1024, 16} },
3575 .block_erase = spi_block_erase_52,
3576 }, {
3577 .eraseblocks = { {512 * 1024, 1} },
3578 .block_erase = spi_block_erase_60,
3579 },
3580 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003581 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003582 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003583 },
3584
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003585 {
3586 .vendor = "SST",
3587 .name = "SST25VF040B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003588 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003589 .manufacture_id = SST_ID,
3590 .model_id = SST_25VF040B,
3591 .total_size = 512,
3592 .page_size = 256,
3593 .tested = TEST_UNTESTED,
3594 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003595 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003596 .block_erasers =
3597 {
3598 {
3599 .eraseblocks = { {4 * 1024, 128} },
3600 .block_erase = spi_block_erase_20,
3601 }, {
3602 .eraseblocks = { {32 * 1024, 16} },
3603 .block_erase = spi_block_erase_52,
3604 }, {
3605 .eraseblocks = { {64 * 1024, 8} },
3606 .block_erase = spi_block_erase_d8,
3607 }, {
3608 .eraseblocks = { {512 * 1024, 1} },
3609 .block_erase = spi_block_erase_60,
3610 }, {
3611 .eraseblocks = { {512 * 1024, 1} },
3612 .block_erase = spi_block_erase_c7,
3613 },
3614 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003615 .write = spi_chip_write_1,
Zheng Bao0677dff2009-02-25 08:07:33 +00003616 .read = spi_chip_read,
3617 },
3618
3619 {
3620 .vendor = "SST",
Peter Stugefd9217d2009-01-26 03:37:40 +00003621 .name = "SST25VF040B.REMS",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003622 .bustype = CHIP_BUSTYPE_SPI,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003623 .manufacture_id = SST_ID,
3624 .model_id = SST_25VF040B_REMS,
Peter Stugefd9217d2009-01-26 03:37:40 +00003625 .total_size = 512,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003626 .page_size = 256,
Peter Stugefd9217d2009-01-26 03:37:40 +00003627 .tested = TEST_OK_PR,
3628 .probe = probe_spi_rems,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003629 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003630 .block_erasers =
3631 {
3632 {
3633 .eraseblocks = { {4 * 1024, 128} },
3634 .block_erase = spi_block_erase_20,
3635 }, {
3636 .eraseblocks = { {32 * 1024, 16} },
3637 .block_erase = spi_block_erase_52,
3638 }, {
3639 .eraseblocks = { {64 * 1024, 8} },
3640 .block_erase = spi_block_erase_d8,
3641 }, {
3642 .eraseblocks = { {512 * 1024, 1} },
3643 .block_erase = spi_block_erase_60,
3644 }, {
3645 .eraseblocks = { {512 * 1024, 1} },
3646 .block_erase = spi_block_erase_c7,
3647 },
3648 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003649 .write = spi_chip_write_1,
Peter Stugefd9217d2009-01-26 03:37:40 +00003650 .read = spi_chip_read,
3651 },
3652
3653 {
3654 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003655 .name = "SST25VF080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003656 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003657 .manufacture_id = SST_ID,
3658 .model_id = SST_25VF080B,
3659 .total_size = 1024,
3660 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003661 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003662 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003663 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003664 .block_erasers =
3665 {
3666 {
3667 .eraseblocks = { {4 * 1024, 256} },
3668 .block_erase = spi_block_erase_20,
3669 }, {
3670 .eraseblocks = { {32 * 1024, 32} },
3671 .block_erase = spi_block_erase_52,
3672 }, {
3673 .eraseblocks = { {64 * 1024, 16} },
3674 .block_erase = spi_block_erase_d8,
3675 }, {
3676 .eraseblocks = { {1024 * 1024, 1} },
3677 .block_erase = spi_block_erase_60,
3678 }, {
3679 .eraseblocks = { {1024 * 1024, 1} },
3680 .block_erase = spi_block_erase_c7,
3681 },
3682 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003683 .write = spi_chip_write_1,
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 = "SST",
3689 .name = "SST28SF040A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003690 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003691 .manufacture_id = SST_ID,
3692 .model_id = SST_28SF040,
3693 .total_size = 512,
3694 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00003695 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003696 .tested = TEST_UNTESTED,
3697 .probe = probe_28sf040,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003698 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst28sf040.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003699 .block_erasers =
3700 {
3701 {
3702 .eraseblocks = { {128, 4096} },
3703 .block_erase = erase_sector_28sf040,
3704 }, {
3705 .eraseblocks = { {512 * 1024, 1} },
3706 .block_erase = erase_chip_28sf040,
3707 }
3708 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003709 .write = write_28sf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003710 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003711 },
3712
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003713 {
3714 .vendor = "SST",
3715 .name = "SST29EE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003716 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003717 .manufacture_id = SST_ID,
3718 .model_id = SST_29EE010,
3719 .total_size = 128,
3720 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003721 .feature_bits = FEATURE_LONG_RESET,
3722 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003723 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003724 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003725 .block_erasers =
3726 {
3727 {
3728 .eraseblocks = { {128 * 1024, 1} },
3729 .block_erase = erase_chip_block_jedec,
3730 }
3731 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003732 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003733 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003734 },
3735
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003736 {
3737 .vendor = "SST",
3738 .name = "SST29LE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003739 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003740 .manufacture_id = SST_ID,
3741 .model_id = SST_29LE010,
3742 .total_size = 128,
3743 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003744 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003745 .tested = TEST_UNTESTED,
3746 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003747 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003748 .block_erasers =
3749 {
3750 {
3751 .eraseblocks = { {128 * 1024, 1} },
3752 .block_erase = erase_chip_block_jedec,
3753 }
3754 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003755 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003756 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003757 },
3758
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003759 {
3760 .vendor = "SST",
3761 .name = "SST29EE020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003762 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003763 .manufacture_id = SST_ID,
3764 .model_id = SST_29EE020A,
3765 .total_size = 256,
3766 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003767 .feature_bits = FEATURE_LONG_RESET,
3768 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003769 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003770 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003771 .block_erasers =
3772 {
3773 {
3774 .eraseblocks = { {256 * 1024, 1} },
3775 .block_erase = erase_chip_block_jedec,
3776 }
3777 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003778 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003779 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003780 },
3781
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003782 {
3783 .vendor = "SST",
3784 .name = "SST29LE020",
Urja Rannikko038a3122009-06-28 19:19:25 +00003785 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003786 .manufacture_id = SST_ID,
3787 .model_id = SST_29LE020,
3788 .total_size = 256,
3789 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003790 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003791 .tested = TEST_UNTESTED,
3792 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003793 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003794 .block_erasers =
3795 {
3796 {
3797 .eraseblocks = { {256 * 1024, 1} },
3798 .block_erase = erase_chip_block_jedec,
3799 }
3800 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003801 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003802 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003803 },
3804
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003805 {
3806 .vendor = "SST",
Uwe Hermann48da3f92010-01-23 15:15:19 +00003807 .name = "SST39SF512",
3808 .bustype = CHIP_BUSTYPE_PARALLEL,
3809 .manufacture_id = SST_ID,
3810 .model_id = SST_39SF512,
3811 .total_size = 64,
3812 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003813 .feature_bits = FEATURE_EITHER_RESET,
3814 .tested = TEST_UNTESTED,
Uwe Hermann48da3f92010-01-23 15:15:19 +00003815 .probe = probe_jedec,
3816 .probe_timing = 1, /* 150 ns */
Uwe Hermann48da3f92010-01-23 15:15:19 +00003817 .block_erasers =
3818 {
3819 {
3820 .eraseblocks = { {4 * 1024, 16} },
3821 .block_erase = erase_sector_jedec,
3822 }, {
3823 .eraseblocks = { {64 * 1024, 1} },
3824 .block_erase = erase_chip_block_jedec,
3825 }
3826 },
Sean Nelson35727f72010-01-28 23:55:12 +00003827 .write = write_jedec_1,
Uwe Hermann48da3f92010-01-23 15:15:19 +00003828 .read = read_memmapped,
3829 },
3830
3831 {
3832 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003833 .name = "SST39SF010A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003834 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003835 .manufacture_id = SST_ID,
3836 .model_id = SST_39SF010,
3837 .total_size = 128,
3838 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003839 .feature_bits = FEATURE_EITHER_RESET,
3840 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003841 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003842 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003843 .block_erasers =
3844 {
3845 {
3846 .eraseblocks = { {4 * 1024, 32} },
3847 .block_erase = erase_sector_jedec,
3848 }, {
3849 .eraseblocks = { {128 * 1024, 1} },
3850 .block_erase = erase_chip_block_jedec,
3851 }
3852 },
Sean Nelson35727f72010-01-28 23:55:12 +00003853 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003854 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003855 },
3856
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003857 {
3858 .vendor = "SST",
3859 .name = "SST39SF020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003860 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003861 .manufacture_id = SST_ID,
3862 .model_id = SST_39SF020,
3863 .total_size = 256,
3864 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003865 .feature_bits = FEATURE_EITHER_RESET,
3866 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003867 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003868 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003869 .block_erasers =
3870 {
3871 {
3872 .eraseblocks = { {4 * 1024, 64} },
3873 .block_erase = erase_sector_jedec,
3874 }, {
3875 .eraseblocks = { {256 * 1024, 1} },
3876 .block_erase = erase_chip_block_jedec,
3877 }
3878 },
Sean Nelson35727f72010-01-28 23:55:12 +00003879 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003880 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003881 },
3882
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003883 {
3884 .vendor = "SST",
3885 .name = "SST39SF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00003886 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003887 .manufacture_id = SST_ID,
3888 .model_id = SST_39SF040,
3889 .total_size = 512,
3890 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003891 .feature_bits = FEATURE_EITHER_RESET,
3892 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003893 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003894 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003895 .block_erasers =
3896 {
3897 {
3898 .eraseblocks = { {4 * 1024, 128} },
3899 .block_erase = erase_sector_jedec,
3900 }, {
3901 .eraseblocks = { {512 * 1024, 1} },
3902 .block_erase = erase_chip_block_jedec,
3903 }
3904 },
Sean Nelson35727f72010-01-28 23:55:12 +00003905 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003906 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003907 },
3908
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003909 {
3910 .vendor = "SST",
3911 .name = "SST39VF512",
Urja Rannikko038a3122009-06-28 19:19:25 +00003912 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003913 .manufacture_id = SST_ID,
3914 .model_id = SST_39VF512,
3915 .total_size = 64,
3916 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003917 .feature_bits = FEATURE_EITHER_RESET,
3918 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003919 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003920 .probe_timing = 1, /* 150 ns*/
Sean Nelson51c83fb2010-01-20 20:55:53 +00003921 .block_erasers =
3922 {
3923 {
3924 .eraseblocks = { {4 * 1024, 16} },
3925 .block_erase = erase_sector_jedec,
3926 }, {
3927 .eraseblocks = { {64 * 1024, 1} },
3928 .block_erase = erase_chip_block_jedec,
3929 }
3930 },
Sean Nelson35727f72010-01-28 23:55:12 +00003931 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003932 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003933 },
3934
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003935 {
3936 .vendor = "SST",
3937 .name = "SST39VF010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003938 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003939 .manufacture_id = SST_ID,
3940 .model_id = SST_39VF010,
3941 .total_size = 128,
3942 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003943 .feature_bits = FEATURE_EITHER_RESET,
3944 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003945 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003946 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003947 .block_erasers =
3948 {
3949 {
3950 .eraseblocks = { {4 * 1024, 32} },
3951 .block_erase = erase_sector_jedec,
3952 }, {
3953 .eraseblocks = { {128 * 1024, 1} },
3954 .block_erase = erase_chip_block_jedec,
3955 }
3956 },
Sean Nelson35727f72010-01-28 23:55:12 +00003957 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003958 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003959 },
3960
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003961 {
3962 .vendor = "SST",
3963 .name = "SST39VF020",
Urja Rannikko038a3122009-06-28 19:19:25 +00003964 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003965 .manufacture_id = SST_ID,
3966 .model_id = SST_39VF020,
3967 .total_size = 256,
3968 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003969 .feature_bits = FEATURE_EITHER_RESET,
3970 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003971 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003972 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003973 .block_erasers =
3974 {
3975 {
3976 .eraseblocks = { {4 * 1024, 64} },
3977 .block_erase = erase_sector_jedec,
3978 }, {
3979 .eraseblocks = { {256 * 1024, 1} },
3980 .block_erase = erase_chip_block_jedec,
3981 }
3982 },
Sean Nelson35727f72010-01-28 23:55:12 +00003983 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003984 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003985 },
3986
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003987 {
3988 .vendor = "SST",
3989 .name = "SST39VF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00003990 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003991 .manufacture_id = SST_ID,
3992 .model_id = SST_39VF040,
3993 .total_size = 512,
3994 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003995 .feature_bits = FEATURE_EITHER_RESET,
3996 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003997 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003998 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003999 .block_erasers =
4000 {
4001 {
4002 .eraseblocks = { {4 * 1024, 128} },
4003 .block_erase = erase_sector_jedec,
4004 }, {
4005 .eraseblocks = { {512 * 1024, 1} },
4006 .block_erase = erase_chip_block_jedec,
4007 }
4008 },
Sean Nelson35727f72010-01-28 23:55:12 +00004009 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004010 .read = read_memmapped,
Carl-Daniel Hailfinger90eff152008-12-08 23:51:45 +00004011 },
FENG yu ningff692fb2008-12-08 18:15:10 +00004012
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004013 {
4014 .vendor = "SST",
Peter Stuge8440cc02009-01-25 23:55:12 +00004015 .name = "SST39VF080",
Urja Rannikko038a3122009-06-28 19:19:25 +00004016 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004017 .manufacture_id = SST_ID,
4018 .model_id = SST_39VF080,
Peter Stuge8440cc02009-01-25 23:55:12 +00004019 .total_size = 1024,
4020 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004021 .feature_bits = FEATURE_EITHER_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +00004022 .tested = TEST_UNTESTED,
4023 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004024 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004025 .block_erasers =
4026 {
4027 {
4028 .eraseblocks = { {4 * 1024, 256} },
4029 .block_erase = erase_sector_jedec,
4030 }, {
4031 .eraseblocks = { {64 * 1024, 16} },
4032 .block_erase = erase_block_jedec,
4033 }, {
4034 .eraseblocks = { {1024 * 1024, 1} },
4035 .block_erase = erase_chip_block_jedec,
4036 }
4037 },
Sean Nelson35727f72010-01-28 23:55:12 +00004038 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004039 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +00004040 },
4041
4042 {
4043 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004044 .name = "SST49LF002A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004045 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004046 .manufacture_id = SST_ID,
4047 .model_id = SST_49LF002A,
4048 .total_size = 256,
4049 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004050 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004051 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004052 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00004053 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004054 .block_erasers =
4055 {
4056 {
4057 .eraseblocks = { {4 * 1024, 64} },
4058 .block_erase = erase_sst_fwhub_sector,
4059 }, {
4060 .eraseblocks = { {16 * 1024, 16} },
4061 .block_erase = erase_sst_fwhub_block,
4062 }, {
4063 .eraseblocks = { {256 * 1024, 1} },
4064 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4065 }
4066 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004067 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004068 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004069 },
4070
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004071 {
4072 .vendor = "SST",
4073 .name = "SST49LF003A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004074 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004075 .manufacture_id = SST_ID,
4076 .model_id = SST_49LF003A,
4077 .total_size = 384,
4078 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004079 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Peter Lemenkov45835c42009-09-25 01:09:18 +00004080 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004081 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00004082 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004083 .block_erasers =
4084 {
4085 {
4086 .eraseblocks = { {4 * 1024, 96} },
4087 .block_erase = erase_sst_fwhub_sector,
4088 }, {
4089 .eraseblocks = { {64 * 1024, 6} },
4090 .block_erase = erase_sst_fwhub_block,
4091 }, {
4092 .eraseblocks = { {384 * 1024, 1} },
4093 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4094 }
4095 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004096 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004097 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004098 },
4099
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004100 {
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004101 /* Contrary to the data sheet, TBL# on the SST49LF004B affects the top 128kB (instead of 64kB)
4102 * and is only honored for 64k block erase, but not 4k sector erase.
4103 */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004104 .vendor = "SST",
4105 .name = "SST49LF004A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004106 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004107 .manufacture_id = SST_ID,
4108 .model_id = SST_49LF004A,
4109 .total_size = 512,
4110 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004111 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004112 .tested = TEST_OK_PREW,
4113 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00004114 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004115 .block_erasers =
4116 {
4117 {
4118 .eraseblocks = { {4 * 1024, 128} },
4119 .block_erase = erase_sector_jedec, /* missing unlock */
4120 }, {
4121 .eraseblocks = { {64 * 1024, 8} },
Carl-Daniel Hailfinger11c9e682009-11-06 18:09:42 +00004122 .block_erase = erase_sst_fwhub_block, /* same as erase_block_jedec, but with unlock */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004123 }, {
4124 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson51c83fb2010-01-20 20:55:53 +00004125 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004126 },
4127 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004128 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004129 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004130 },
4131
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004132 {
4133 .vendor = "SST",
4134 .name = "SST49LF004C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004135 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004136 .manufacture_id = SST_ID,
4137 .model_id = SST_49LF004C,
4138 .total_size = 512,
4139 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004140 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004141 .tested = TEST_UNTESTED,
4142 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004143 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004144 .block_erasers =
4145 {
4146 {
4147 .eraseblocks = { {4 * 1024, 128} },
4148 .block_erase = erase_sector_49lfxxxc,
4149 }, {
4150 .eraseblocks = {
4151 {64 * 1024, 7},
4152 {32 * 1024, 1},
4153 {8 * 1024, 2},
4154 {16 * 1024, 1},
4155 },
4156 .block_erase = erase_block_49lfxxxc,
4157 }
4158 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004159 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004160 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004161 },
4162
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004163 {
4164 .vendor = "SST",
4165 .name = "SST49LF008A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004166 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004167 .manufacture_id = SST_ID,
4168 .model_id = SST_49LF008A,
4169 .total_size = 1024,
4170 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004171 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004172 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004173 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00004174 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004175 .block_erasers =
4176 {
4177 {
4178 .eraseblocks = { {4 * 1024, 256} },
4179 .block_erase = erase_sst_fwhub_sector,
4180 }, {
4181 .eraseblocks = { {64 * 1024, 16} },
4182 .block_erase = erase_sst_fwhub_block,
4183 }, {
4184 .eraseblocks = { {1024 * 1024, 1} },
4185 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4186 }
4187 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004188 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004189 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004190 },
4191
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004192 {
4193 .vendor = "SST",
4194 .name = "SST49LF008C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004195 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004196 .manufacture_id = SST_ID,
4197 .model_id = SST_49LF008C,
4198 .total_size = 1024,
4199 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004200 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004201 .tested = TEST_UNTESTED,
4202 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004203 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004204 .block_erasers =
4205 {
4206 {
4207 .eraseblocks = { {4 * 1024, 256} },
4208 .block_erase = erase_sector_49lfxxxc,
4209 }, {
4210 .eraseblocks = {
4211 {64 * 1024, 15},
4212 {32 * 1024, 1},
4213 {8 * 1024, 2},
4214 {16 * 1024, 1},
4215 },
4216 .block_erase = erase_block_49lfxxxc,
4217 }
4218 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004219 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004220 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004221 },
4222
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004223 {
4224 .vendor = "SST",
4225 .name = "SST49LF016C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004226 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004227 .manufacture_id = SST_ID,
4228 .model_id = SST_49LF016C,
4229 .total_size = 2048,
4230 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004231 .feature_bits = 0,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004232 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004233 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004234 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004235 .block_erasers =
4236 {
4237 {
4238 .eraseblocks = { {4 * 1024, 512} },
4239 .block_erase = erase_sector_49lfxxxc,
4240 }, {
4241 .eraseblocks = {
4242 {64 * 1024, 31},
4243 {32 * 1024, 1},
4244 {8 * 1024, 2},
4245 {16 * 1024, 1},
4246 },
4247 .block_erase = erase_block_49lfxxxc,
4248 }
4249 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004250 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004251 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004252 },
4253
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004254 {
4255 .vendor = "SST",
4256 .name = "SST49LF020",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004257 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004258 .manufacture_id = SST_ID,
4259 .model_id = SST_49LF020,
4260 .total_size = 256,
4261 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004262 .feature_bits = FEATURE_EITHER_RESET,
4263 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004264 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004265 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004266 .block_erasers =
4267 {
4268 {
4269 .eraseblocks = { {4 * 1024, 64} },
4270 .block_erase = erase_sector_jedec,
4271 }, {
4272 .eraseblocks = { {16 * 1024, 16} },
4273 .block_erase = erase_block_jedec,
4274 }, {
4275 .eraseblocks = { {256 * 1024, 1} },
4276 .block_erase = NULL,
4277 }
4278 },
Sean Nelson35727f72010-01-28 23:55:12 +00004279 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004280 .read = read_memmapped,
Sven Schnellec208dfb2009-01-07 12:35:09 +00004281 },
4282
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004283 {
4284 .vendor = "SST",
4285 .name = "SST49LF020A",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004286 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004287 .manufacture_id = SST_ID,
4288 .model_id = SST_49LF020A,
4289 .total_size = 256,
Carl-Daniel Hailfingerda654322009-07-23 01:44:38 +00004290 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004291 .feature_bits = FEATURE_EITHER_RESET,
4292 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004293 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004294 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004295 .block_erasers =
4296 {
4297 {
4298 .eraseblocks = { {4 * 1024, 64} },
4299 .block_erase = erase_sector_jedec,
4300 }, {
4301 .eraseblocks = { {16 * 1024, 16} },
4302 .block_erase = erase_block_jedec,
4303 }, {
4304 .eraseblocks = { {256 * 1024, 1} },
4305 .block_erase = NULL,
4306 }
4307 },
Sean Nelson35727f72010-01-28 23:55:12 +00004308 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004309 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004310 },
4311
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004312 {
4313 .vendor = "SST",
4314 .name = "SST49LF040",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004315 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004316 .manufacture_id = SST_ID,
4317 .model_id = SST_49LF040,
4318 .total_size = 512,
4319 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004320 .feature_bits = FEATURE_EITHER_RESET,
4321 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004322 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004323 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004324 .block_erasers =
4325 {
4326 {
4327 .eraseblocks = { {4 * 1024, 128} },
4328 .block_erase = erase_sector_jedec,
4329 }, {
4330 .eraseblocks = { {64 * 1024, 8} },
4331 .block_erase = erase_block_jedec,
4332 }, {
4333 .eraseblocks = { {512 * 1024, 1} },
4334 .block_erase = NULL,
4335 }
4336 },
Sean Nelson35727f72010-01-28 23:55:12 +00004337 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004338 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004339 },
4340
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004341 {
4342 .vendor = "SST",
4343 .name = "SST49LF040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004344 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004345 .manufacture_id = SST_ID,
4346 .model_id = SST_49LF040B,
4347 .total_size = 512,
4348 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004349 .feature_bits = FEATURE_EITHER_RESET,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004350 .tested = TEST_UNTESTED,
4351 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004352 .probe_timing = 1, /* 150ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004353 .block_erasers =
4354 {
4355 {
4356 .eraseblocks = { {4 * 1024, 128} },
4357 .block_erase = erase_sector_jedec,
4358 }, {
4359 .eraseblocks = { {64 * 1024, 8} },
4360 .block_erase = erase_block_jedec,
4361 }, {
4362 .eraseblocks = { {512 * 1024, 1} },
4363 .block_erase = NULL,
4364 }
4365 },
Sean Nelson35727f72010-01-28 23:55:12 +00004366 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004367 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004368 },
4369
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004370 {
4371 .vendor = "SST",
4372 .name = "SST49LF080A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004373 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004374 .manufacture_id = SST_ID,
Urja Rannikko038a3122009-06-28 19:19:25 +00004375 .model_id = SST_49LF080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004376 .total_size = 1024,
4377 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004378 .feature_bits = FEATURE_EITHER_RESET,
4379 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004380 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004381 .probe_timing = TIMING_FIXME,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004382 .block_erasers =
4383 {
4384 {
4385 .eraseblocks = { {4 * 1024, 256} },
4386 .block_erase = erase_sector_jedec,
4387 }, {
4388 .eraseblocks = { {64 * 1024, 16} },
4389 .block_erase = erase_block_jedec,
4390 }, {
4391 .eraseblocks = { {1024 * 1024, 1} },
4392 .block_erase = NULL,
4393 }
4394 },
Sean Nelson35727f72010-01-28 23:55:12 +00004395 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004396 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004397 },
4398
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004399 {
4400 .vendor = "SST",
4401 .name = "SST49LF160C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004402 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004403 .manufacture_id = SST_ID,
4404 .model_id = SST_49LF160C,
4405 .total_size = 2048,
4406 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004407 .feature_bits = 0,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004408 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004409 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004410 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004411 .block_erasers =
4412 {
4413 {
4414 .eraseblocks = { {4 * 1024, 512} },
4415 .block_erase = erase_sector_49lfxxxc,
4416 }, {
4417 .eraseblocks = {
4418 {64 * 1024, 31},
4419 {32 * 1024, 1},
4420 {8 * 1024, 2},
4421 {16 * 1024, 1},
4422 },
4423 .block_erase = erase_block_49lfxxxc,
4424 }
4425 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00004426 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004427 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004428 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004429 },
4430
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004431 {
4432 .vendor = "ST",
4433 .name = "M25P05-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004434 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004435 .manufacture_id = ST_ID,
4436 .model_id = ST_M25P05A,
4437 .total_size = 64,
4438 .page_size = 256,
4439 .tested = TEST_UNTESTED,
4440 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004441 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004442 .block_erasers =
4443 {
4444 {
4445 .eraseblocks = { {32 * 1024, 2} },
4446 .block_erase = spi_block_erase_d8,
4447 }, {
4448 .eraseblocks = { {64 * 1024, 1} },
4449 .block_erase = spi_block_erase_c7,
4450 }
4451 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004452 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004453 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004454 },
4455
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004456 /* The ST M25P05 is a bit of a problem. It has the same ID as the
4457 * ST M25P05-A in RES mode, but supports only 128 byte writes instead
4458 * of 256 byte writes. We rely heavily on the fact that probe_spi_res
4459 * only is successful if RDID does not work.
4460 */
4461 {
4462 .vendor = "ST",
4463 .name = "M25P05.RES",
4464 .bustype = CHIP_BUSTYPE_SPI,
4465 .manufacture_id = ST_ID,
4466 .model_id = ST_M25P05_RES,
4467 .total_size = 64,
4468 .page_size = 256,
4469 .tested = TEST_UNTESTED,
4470 .probe = probe_spi_res,
4471 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004472 .block_erasers =
4473 {
4474 {
4475 .eraseblocks = { {32 * 1024, 2} },
4476 .block_erase = spi_block_erase_d8,
4477 }, {
4478 .eraseblocks = { {64 * 1024, 1} },
4479 .block_erase = spi_block_erase_c7,
4480 }
4481 },
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004482 .write = spi_chip_write_1, /* 128 */
4483 .read = spi_chip_read,
4484 },
4485
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004486 {
4487 .vendor = "ST",
4488 .name = "M25P10-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004489 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004490 .manufacture_id = ST_ID,
4491 .model_id = ST_M25P10A,
4492 .total_size = 128,
4493 .page_size = 256,
4494 .tested = TEST_UNTESTED,
4495 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004496 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004497 .block_erasers =
4498 {
4499 {
4500 .eraseblocks = { {32 * 1024, 4} },
4501 .block_erase = spi_block_erase_d8,
4502 }, {
4503 .eraseblocks = { {128 * 1024, 1} },
4504 .block_erase = spi_block_erase_c7,
4505 }
4506 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004507 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004508 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004509 },
4510
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004511 /* The ST M25P10 has the same problem as the M25P05. */
4512 {
4513 .vendor = "ST",
4514 .name = "M25P10.RES",
4515 .bustype = CHIP_BUSTYPE_SPI,
4516 .manufacture_id = ST_ID,
4517 .model_id = ST_M25P10_RES,
4518 .total_size = 128,
4519 .page_size = 256,
4520 .tested = TEST_UNTESTED,
4521 .probe = probe_spi_res,
4522 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004523 .block_erasers =
4524 {
4525 {
4526 .eraseblocks = { {32 * 1024, 4} },
4527 .block_erase = spi_block_erase_d8,
4528 }, {
4529 .eraseblocks = { {128 * 1024, 1} },
4530 .block_erase = spi_block_erase_c7,
4531 }
4532 },
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004533 .write = spi_chip_write_1, /* 128 */
4534 .read = spi_chip_read,
4535 },
4536
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004537 {
4538 .vendor = "ST",
4539 .name = "M25P20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004540 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004541 .manufacture_id = ST_ID,
4542 .model_id = ST_M25P20,
4543 .total_size = 256,
4544 .page_size = 256,
4545 .tested = TEST_UNTESTED,
4546 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004547 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004548 .block_erasers =
4549 {
4550 {
4551 .eraseblocks = { {64 * 1024, 4} },
4552 .block_erase = spi_block_erase_d8,
4553 }, {
4554 .eraseblocks = { {256 * 1024, 1} },
4555 .block_erase = spi_block_erase_c7,
4556 }
4557 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004558 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004559 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004560 },
4561
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004562 {
4563 .vendor = "ST",
4564 .name = "M25P40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004565 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004566 .manufacture_id = ST_ID,
4567 .model_id = ST_M25P40,
4568 .total_size = 512,
4569 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004570 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004571 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004572 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004573 .block_erasers =
4574 {
4575 {
4576 .eraseblocks = { {64 * 1024, 8} },
4577 .block_erase = spi_block_erase_d8,
4578 }, {
4579 .eraseblocks = { {512 * 1024, 1} },
4580 .block_erase = spi_block_erase_c7,
4581 }
4582 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004583 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004584 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004585 },
4586
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004587 {
4588 .vendor = "ST",
4589 .name = "M25P40-old",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004590 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004591 .manufacture_id = ST_ID,
4592 .model_id = ST_M25P40_RES,
4593 .total_size = 512,
4594 .page_size = 256,
4595 .tested = TEST_UNTESTED,
4596 .probe = probe_spi_res,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004597 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004598 .block_erasers =
4599 {
4600 {
4601 .eraseblocks = { {64 * 1024, 8} },
4602 .block_erase = spi_block_erase_d8,
4603 }, {
4604 .eraseblocks = { {512 * 1024, 1} },
4605 .block_erase = spi_block_erase_c7,
4606 }
4607 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004608 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004609 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004610 },
4611
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004612 {
4613 .vendor = "ST",
4614 .name = "M25P80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004615 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004616 .manufacture_id = ST_ID,
4617 .model_id = ST_M25P80,
4618 .total_size = 1024,
4619 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004620 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004621 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004622 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004623 .block_erasers =
4624 {
4625 {
4626 .eraseblocks = { {64 * 1024, 16} },
4627 .block_erase = spi_block_erase_d8,
4628 }, {
4629 .eraseblocks = { {1024 * 1024, 1} },
4630 .block_erase = spi_block_erase_c7,
4631 }
4632 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004633 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004634 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004635 },
4636
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004637 {
4638 .vendor = "ST",
4639 .name = "M25P16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004640 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004641 .manufacture_id = ST_ID,
4642 .model_id = ST_M25P16,
4643 .total_size = 2048,
4644 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004645 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004646 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004647 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004648 .block_erasers =
4649 {
4650 {
4651 .eraseblocks = { {64 * 1024, 32} },
4652 .block_erase = spi_block_erase_d8,
4653 }, {
4654 .eraseblocks = { {2 * 1024 * 1024, 1} },
4655 .block_erase = spi_block_erase_c7,
4656 }
4657 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004658 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004659 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004660 },
4661
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004662 {
4663 .vendor = "ST",
4664 .name = "M25P32",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004665 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004666 .manufacture_id = ST_ID,
4667 .model_id = ST_M25P32,
4668 .total_size = 4096,
4669 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004670 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004671 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004672 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004673 .block_erasers =
4674 {
4675 {
4676 .eraseblocks = { {64 * 1024, 64} },
4677 .block_erase = spi_block_erase_d8,
4678 }, {
4679 .eraseblocks = { {4 * 1024 * 1024, 1} },
4680 .block_erase = spi_block_erase_c7,
4681 }
4682 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004683 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004684 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004685 },
4686
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004687 {
4688 .vendor = "ST",
4689 .name = "M25P64",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004690 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004691 .manufacture_id = ST_ID,
4692 .model_id = ST_M25P64,
4693 .total_size = 8192,
4694 .page_size = 256,
4695 .tested = TEST_UNTESTED,
4696 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004697 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004698 .block_erasers =
4699 {
4700 {
4701 .eraseblocks = { {64 * 1024, 128} },
4702 .block_erase = spi_block_erase_d8,
4703 }, {
4704 .eraseblocks = { {8 * 1024 * 1024, 1} },
4705 .block_erase = spi_block_erase_c7,
4706 }
4707 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004708 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004709 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004710 },
4711
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004712 {
4713 .vendor = "ST",
4714 .name = "M25P128",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004715 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004716 .manufacture_id = ST_ID,
4717 .model_id = ST_M25P128,
4718 .total_size = 16384,
4719 .page_size = 256,
4720 .tested = TEST_UNTESTED,
4721 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004722 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004723 .block_erasers =
4724 {
4725 {
4726 .eraseblocks = { {256 * 1024, 64} },
4727 .block_erase = spi_block_erase_d8,
4728 }, {
4729 .eraseblocks = { {16 * 1024 * 1024, 1} },
4730 .block_erase = spi_block_erase_c7,
4731 }
4732 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004733 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004734 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004735 },
4736
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004737 {
4738 .vendor = "ST",
4739 .name = "M29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004740 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004741 .manufacture_id = ST_ID,
4742 .model_id = ST_M29F002B,
4743 .total_size = 256,
4744 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004745 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004746 .tested = TEST_UNTESTED,
4747 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004748 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004749 .block_erasers =
4750 {
4751 {
4752 .eraseblocks = {
4753 {16 * 1024, 1},
4754 {8 * 1024, 2},
4755 {32 * 1024, 1},
4756 {64 * 1024, 3},
4757 },
4758 .block_erase = erase_sector_jedec,
4759 }, {
4760 .eraseblocks = { {256 * 1024, 1} },
4761 .block_erase = erase_chip_block_jedec,
4762 }
4763 },
Sean Nelson35727f72010-01-28 23:55:12 +00004764 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004765 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004766 },
4767
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004768 {
4769 .vendor = "ST",
4770 .name = "M29F002T/NT",
Urja Rannikko038a3122009-06-28 19:19:25 +00004771 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004772 .manufacture_id = ST_ID,
4773 .model_id = ST_M29F002T,
4774 .total_size = 256,
4775 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004776 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
4777 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004778 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004779 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004780 .block_erasers =
4781 {
4782 {
4783 .eraseblocks = {
4784 {64 * 1024, 3},
4785 {32 * 1024, 1},
4786 {8 * 1024, 2},
4787 {16 * 1024, 1},
4788 },
4789 .block_erase = erase_sector_jedec,
4790 }, {
4791 .eraseblocks = { {256 * 1024, 1} },
4792 .block_erase = erase_chip_block_jedec,
4793 }
4794 },
Sean Nelson35727f72010-01-28 23:55:12 +00004795 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004796 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004797 },
4798
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004799 {
4800 .vendor = "ST",
4801 .name = "M29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004802 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004803 .manufacture_id = ST_ID,
4804 .model_id = ST_M29F040B,
4805 .total_size = 512,
4806 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004807 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
4808 .tested = TEST_UNTESTED,
4809 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004810 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00004811 .block_erasers =
4812 {
4813 {
4814 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00004815 .block_erase = erase_sector_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00004816 }, {
4817 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00004818 .block_erase = erase_chip_block_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00004819 }
4820 },
Sean Nelson35727f72010-01-28 23:55:12 +00004821 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004822 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004823 },
4824
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004825 {
Sean Nelson35727f72010-01-28 23:55:12 +00004826 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004827 .vendor = "ST",
4828 .name = "M29F400BT",
Urja Rannikko038a3122009-06-28 19:19:25 +00004829 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004830 .manufacture_id = ST_ID,
4831 .model_id = ST_M29F400BT,
4832 .total_size = 512,
4833 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004834 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004835 .tested = TEST_UNTESTED,
4836 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004837 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00004838 .block_erasers =
4839 {
4840 {
4841 .eraseblocks = {
4842 {64 * 1024, 7},
4843 {32 * 1024, 1},
4844 {8 * 1024, 2},
4845 {16 * 1024, 1},
4846 },
4847 .block_erase = block_erase_m29f400bt,
4848 }, {
4849 .eraseblocks = { {512 * 1024, 1} },
4850 .block_erase = block_erase_chip_m29f400bt,
4851 }
4852 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004853 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004854 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004855 },
4856
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004857 {
4858 .vendor = "ST",
4859 .name = "M29W010B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004860 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004861 .manufacture_id = ST_ID,
4862 .model_id = ST_M29W010B,
4863 .total_size = 128,
4864 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004865 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004866 .tested = TEST_UNTESTED,
4867 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004868 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004869 .block_erasers =
4870 {
4871 {
4872 .eraseblocks = { {16 * 1024, 8}, },
4873 .block_erase = erase_sector_jedec,
4874 }, {
4875 .eraseblocks = { {128 * 1024, 1} },
4876 .block_erase = erase_chip_block_jedec,
4877 }
4878 },
Sean Nelson35727f72010-01-28 23:55:12 +00004879 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004880 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004881 },
4882
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004883 {
4884 .vendor = "ST",
4885 .name = "M29W040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004886 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004887 .manufacture_id = ST_ID,
4888 .model_id = ST_M29W040B,
4889 .total_size = 512,
4890 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004891 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004892 .tested = TEST_UNTESTED,
4893 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004894 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004895 .block_erasers =
4896 {
4897 {
4898 .eraseblocks = { {64 * 1024, 8}, },
4899 .block_erase = erase_sector_jedec,
4900 }, {
4901 .eraseblocks = { {512 * 1024, 1} },
4902 .block_erase = erase_chip_block_jedec,
4903 }
4904 },
Sean Nelson35727f72010-01-28 23:55:12 +00004905 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004906 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004907 },
4908
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00004909 {
4910 .vendor = "ST",
4911 .name = "M29W512B",
4912 .bustype = CHIP_BUSTYPE_PARALLEL,
4913 .manufacture_id = ST_ID,
4914 .model_id = ST_M29W512B,
4915 .total_size = 64,
4916 .page_size = 64 * 1024,
4917 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
4918 .tested = TEST_OK_PREW,
4919 .probe = probe_jedec,
4920 .probe_timing = TIMING_ZERO,
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00004921 .block_erasers =
4922 {
4923 {
4924 .eraseblocks = { {64 * 1024, 1} },
4925 .block_erase = erase_chip_block_jedec,
4926 }
4927 },
4928 .write = write_jedec_1,
4929 .read = read_memmapped,
4930 },
4931
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004932 {
4933 .vendor = "ST",
4934 .name = "M50FLW040A",
Sean Nelson35727f72010-01-28 23:55:12 +00004935 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004936 .manufacture_id = ST_ID,
4937 .model_id = ST_M50FLW040A,
4938 .total_size = 512,
4939 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004940 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004941 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00004942 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00004943 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00004944 .block_erasers =
4945 {
4946 {
Sean Nelson329bde72010-01-19 16:39:19 +00004947 .eraseblocks = {
4948 {4 * 1024, 16}, /* sector */
4949 {64 * 1024, 5}, /* block */
4950 {4 * 1024, 16}, /* sector */
4951 {4 * 1024, 16}, /* sector */
4952 },
4953 .block_erase = NULL,
4954 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00004955 .eraseblocks = { {64 * 1024, 8}, },
4956 .block_erase = erase_block_stm50flw0x0x,
4957 }, {
4958 .eraseblocks = { {512 * 1024, 1} },
4959 .block_erase = erase_chip_stm50flw0x0x,
4960 }
4961 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004962 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004963 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004964 },
4965
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004966 {
4967 .vendor = "ST",
4968 .name = "M50FLW040B",
Sean Nelson35727f72010-01-28 23:55:12 +00004969 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004970 .manufacture_id = ST_ID,
4971 .model_id = ST_M50FLW040B,
4972 .total_size = 512,
4973 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004974 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004975 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00004976 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00004977 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00004978 .block_erasers =
4979 {
4980 {
Sean Nelson329bde72010-01-19 16:39:19 +00004981 .eraseblocks = {
4982 {4 * 1024, 16}, /* sector */
4983 {4 * 1024, 16}, /* sector */
4984 {64 * 1024, 5}, /* block */
4985 {4 * 1024, 16}, /* sector */
4986 },
4987 .block_erase = NULL,
4988 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00004989 .eraseblocks = { {64 * 1024, 8}, },
4990 .block_erase = erase_block_stm50flw0x0x,
4991 }, {
4992 .eraseblocks = { {512 * 1024, 1} },
4993 .block_erase = erase_chip_stm50flw0x0x,
4994 }
4995 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004996 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004997 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004998 },
4999
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005000 {
5001 .vendor = "ST",
5002 .name = "M50FLW080A",
Sean Nelson35727f72010-01-28 23:55:12 +00005003 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005004 .manufacture_id = ST_ID,
5005 .model_id = ST_M50FLW080A,
5006 .total_size = 1024,
5007 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005008 .feature_bits = 0,
5009 .tested = TEST_UNTESTED,
5010 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005011 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005012 .block_erasers =
5013 {
5014 {
Sean Nelson329bde72010-01-19 16:39:19 +00005015 .eraseblocks = {
5016 {4 * 1024, 16}, /* sector */
5017 {64 * 1024, 13}, /* block */
5018 {4 * 1024, 16}, /* sector */
5019 {4 * 1024, 16}, /* sector */
5020 },
5021 .block_erase = NULL,
5022 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005023 .eraseblocks = { {64 * 1024, 16}, },
5024 .block_erase = erase_block_stm50flw0x0x,
5025 }, {
5026 .eraseblocks = { {1024 * 1024, 1} },
5027 .block_erase = erase_chip_stm50flw0x0x,
5028 }
5029 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005030 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005031 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005032 },
5033
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005034 {
5035 .vendor = "ST",
5036 .name = "M50FLW080B",
Sean Nelson35727f72010-01-28 23:55:12 +00005037 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005038 .manufacture_id = ST_ID,
5039 .model_id = ST_M50FLW080B,
5040 .total_size = 1024,
5041 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005042 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005043 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005044 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005045 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005046 .block_erasers =
5047 {
5048 {
Sean Nelson329bde72010-01-19 16:39:19 +00005049 .eraseblocks = {
5050 {4 * 1024, 16}, /* sector */
5051 {4 * 1024, 16}, /* sector */
5052 {64 * 1024, 13}, /* block */
5053 {4 * 1024, 16}, /* sector */
5054 },
5055 .block_erase = NULL,
5056 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005057 .eraseblocks = { {64 * 1024, 16}, },
5058 .block_erase = erase_block_stm50flw0x0x,
5059 }, {
5060 .eraseblocks = { {1024 * 1024, 1} },
5061 .block_erase = erase_chip_stm50flw0x0x,
5062 }
5063 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005064 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005065 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005066 },
5067
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005068 {
5069 .vendor = "ST",
5070 .name = "M50FW002",
Urja Rannikko038a3122009-06-28 19:19:25 +00005071 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005072 .manufacture_id = ST_ID,
5073 .model_id = ST_M50FW002,
5074 .total_size = 256,
5075 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005076 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005077 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005078 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005079 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005080 .block_erasers =
5081 {
5082 {
5083 .eraseblocks = {
5084 {64 * 1024, 3},
5085 {32 * 1024, 1},
5086 {8 * 1024, 2},
5087 {16 * 1024, 1},
5088 },
5089 .block_erase = erase_block_stm50flw0x0x,
5090 }, {
5091 .eraseblocks = { {256 * 1024, 1} },
5092 .block_erase = erase_chip_stm50flw0x0x,
5093 }
5094 },
Sean Nelson35727f72010-01-28 23:55:12 +00005095 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005096 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005097 },
5098
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005099 {
5100 .vendor = "ST",
5101 .name = "M50FW016",
Urja Rannikko038a3122009-06-28 19:19:25 +00005102 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005103 .manufacture_id = ST_ID,
5104 .model_id = ST_M50FW016,
5105 .total_size = 2048,
5106 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005107 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005108 .tested = TEST_UNTESTED,
5109 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005110 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005111 .block_erasers =
5112 {
5113 {
5114 .eraseblocks = { {64 * 1024, 32}, },
5115 .block_erase = erase_block_stm50flw0x0x,
5116 }, {
5117 .eraseblocks = { {2 * 1024 * 1024, 1} },
5118 .block_erase = erase_chip_stm50flw0x0x,
5119 }
5120 },
5121 .write = write_stm50flw0x0x,
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 = "ST",
5127 .name = "M50FW040",
Urja Rannikko038a3122009-06-28 19:19:25 +00005128 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005129 .manufacture_id = ST_ID,
5130 .model_id = ST_M50FW040,
5131 .total_size = 512,
5132 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005133 .feature_bits = 0,
Sean Nelson56358aa2010-01-19 16:08:51 +00005134 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005135 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005136 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005137 .block_erasers =
5138 {
5139 {
5140 .eraseblocks = { {64 * 1024, 8}, },
5141 .block_erase = erase_block_stm50flw0x0x,
5142 }, {
5143 .eraseblocks = { {512 * 1024, 1} },
5144 .block_erase = erase_chip_stm50flw0x0x,
5145 }
5146 },
5147 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005148 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005149 },
5150
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005151 {
5152 .vendor = "ST",
5153 .name = "M50FW080",
Urja Rannikko038a3122009-06-28 19:19:25 +00005154 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005155 .manufacture_id = ST_ID,
5156 .model_id = ST_M50FW080,
5157 .total_size = 1024,
5158 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005159 .feature_bits = 0,
Sean Nelson56358aa2010-01-19 16:08:51 +00005160 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005161 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005162 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005163 .block_erasers =
5164 {
5165 {
5166 .eraseblocks = { {64 * 1024, 16}, },
5167 .block_erase = erase_block_stm50flw0x0x,
5168 }, {
5169 .eraseblocks = { {1024 * 1024, 1} },
5170 .block_erase = erase_chip_stm50flw0x0x,
5171 }
5172 },
5173 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005174 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005175 },
5176
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005177 {
5178 .vendor = "ST",
5179 .name = "M50LPW116",
Urja Rannikko038a3122009-06-28 19:19:25 +00005180 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005181 .manufacture_id = ST_ID,
5182 .model_id = ST_M50LPW116,
5183 .total_size = 2048,
5184 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005185 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005186 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005187 .probe = probe_82802ab,
Udu Ogahc04ee222009-09-05 01:31:32 +00005188 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005189 .block_erasers =
5190 {
5191 {
5192 .eraseblocks = {
5193 {4 * 1024, 16},
5194 {64 * 1024, 30},
5195 {32 * 1024, 1},
5196 {8 * 1024, 2},
5197 {16 * 1024, 1},
5198 },
5199 .block_erase = erase_block_stm50flw0x0x,
5200 }, {
5201 .eraseblocks = { {2 * 1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00005202 .block_erase = erase_chip_stm50flw0x0x,
Sean Nelson56358aa2010-01-19 16:08:51 +00005203 }
5204 },
Sean Nelson35727f72010-01-28 23:55:12 +00005205 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005206 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005207 },
5208
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005209 {
5210 .vendor = "SyncMOS",
5211 .name = "S29C31004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005212 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005213 .manufacture_id = SYNCMOS_ID,
5214 .model_id = S29C31004T,
5215 .total_size = 512,
5216 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005217 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005218 .tested = TEST_UNTESTED,
5219 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005220 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005221 .block_erasers =
5222 {
5223 {
5224 .eraseblocks = { {1 * 1024, 512} },
5225 .block_erase = erase_sector_jedec,
5226 }, {
5227 .eraseblocks = { {512 * 1024, 1} },
5228 .block_erase = erase_chip_block_jedec,
5229 },
5230 },
Sean Nelson35727f72010-01-28 23:55:12 +00005231 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005232 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005233 },
5234
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005235 {
5236 .vendor = "SyncMOS",
5237 .name = "S29C51001T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005238 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005239 .manufacture_id = SYNCMOS_ID,
5240 .model_id = S29C51001T,
5241 .total_size = 128,
5242 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005243 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005244 .tested = TEST_UNTESTED,
5245 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005246 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005247 .block_erasers =
5248 {
5249 {
5250 .eraseblocks = { {512, 256} },
5251 .block_erase = erase_sector_jedec,
5252 }, {
5253 .eraseblocks = { {128 * 1024, 1} },
5254 .block_erase = erase_chip_block_jedec,
5255 },
5256 },
Sean Nelson35727f72010-01-28 23:55:12 +00005257 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005258 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005259 },
5260
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005261 {
5262 .vendor = "SyncMOS",
5263 .name = "S29C51002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005264 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005265 .manufacture_id = SYNCMOS_ID,
5266 .model_id = S29C51002T,
5267 .total_size = 256,
5268 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005269 .feature_bits = FEATURE_EITHER_RESET,
5270 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005271 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005272 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005273 .block_erasers =
5274 {
5275 {
5276 .eraseblocks = { {512, 512} },
5277 .block_erase = erase_sector_jedec,
5278 }, {
5279 .eraseblocks = { {256 * 1024, 1} },
5280 .block_erase = erase_chip_block_jedec,
5281 },
5282 },
Sean Nelson35727f72010-01-28 23:55:12 +00005283 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005284 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005285 },
5286
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005287 {
5288 .vendor = "SyncMOS",
5289 .name = "S29C51004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005290 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005291 .manufacture_id = SYNCMOS_ID,
5292 .model_id = S29C51004T,
5293 .total_size = 512,
5294 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005295 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005296 .tested = TEST_UNTESTED,
5297 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005298 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005299 .block_erasers =
5300 {
5301 {
Sean Nelson012a31e2010-01-19 20:23:26 +00005302 .eraseblocks = { {1 * 1024, 512} },
Sean Nelson56358aa2010-01-19 16:08:51 +00005303 .block_erase = erase_sector_jedec,
5304 }, {
5305 .eraseblocks = { {512 * 1024, 1} },
5306 .block_erase = erase_chip_block_jedec,
5307 },
5308 },
Sean Nelson35727f72010-01-28 23:55:12 +00005309 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005310 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005311 },
5312
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005313 {
Uwe Hermanna106d152009-05-27 23:17:40 +00005314 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005315 .name = "TMS29F002RB",
Urja Rannikko038a3122009-06-28 19:19:25 +00005316 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005317 .manufacture_id = TI_OLD_ID,
5318 .model_id = TI_TMS29F002RB,
5319 .total_size = 256,
5320 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00005321 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005322 .tested = TEST_UNTESTED,
5323 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005324 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005325 .block_erasers =
5326 {
5327 {
5328 .eraseblocks = {
5329 {16 * 1024, 1},
5330 {8 * 1024, 2},
5331 {32 * 1024, 1},
5332 {64 * 1024, 3},
5333 },
5334 .block_erase = erase_sector_jedec,
5335 }, {
5336 .eraseblocks = { {256 * 1024, 1} },
5337 .block_erase = erase_chip_block_jedec,
5338 },
5339 },
Sean Nelson35727f72010-01-28 23:55:12 +00005340 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005341 .read = read_memmapped,
5342 },
5343
5344 {
Uwe Hermanna106d152009-05-27 23:17:40 +00005345 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005346 .name = "TMS29F002RT",
Urja Rannikko038a3122009-06-28 19:19:25 +00005347 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005348 .manufacture_id = TI_OLD_ID,
5349 .model_id = TI_TMS29F002RT,
5350 .total_size = 256,
5351 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00005352 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005353 .tested = TEST_UNTESTED,
5354 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005355 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005356 .block_erasers =
5357 {
5358 {
5359 .eraseblocks = {
5360 {64 * 1024, 3},
5361 {32 * 1024, 1},
5362 {8 * 1024, 2},
5363 {16 * 1024, 1},
5364 },
5365 .block_erase = erase_sector_jedec,
5366 }, {
5367 .eraseblocks = { {256 * 1024, 1} },
5368 .block_erase = erase_chip_block_jedec,
5369 },
5370 },
Sean Nelson35727f72010-01-28 23:55:12 +00005371 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005372 .read = read_memmapped,
5373 },
5374
5375 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005376 .vendor = "Winbond",
5377 .name = "W25x10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005378 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005379 .manufacture_id = WINBOND_NEX_ID,
5380 .model_id = W_25X10,
5381 .total_size = 128,
5382 .page_size = 256,
5383 .tested = TEST_UNTESTED,
5384 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005385 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005386 .block_erasers =
5387 {
5388 {
5389 .eraseblocks = { {4 * 1024, 32} },
5390 .block_erase = spi_block_erase_20,
5391 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005392 .eraseblocks = { {64 * 1024, 2} },
5393 .block_erase = spi_block_erase_d8,
5394 }, {
5395 .eraseblocks = { {128 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005396 .block_erase = spi_block_erase_c7,
5397 }
5398 },
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 = "Winbond",
5405 .name = "W25x20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005406 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005407 .manufacture_id = WINBOND_NEX_ID,
5408 .model_id = W_25X20,
5409 .total_size = 256,
5410 .page_size = 256,
5411 .tested = TEST_UNTESTED,
5412 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005413 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005414 .block_erasers =
5415 {
5416 {
5417 .eraseblocks = { {4 * 1024, 64} },
5418 .block_erase = spi_block_erase_20,
5419 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005420 .eraseblocks = { {64 * 1024, 4} },
5421 .block_erase = spi_block_erase_d8,
5422 }, {
5423 .eraseblocks = { {256 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005424 .block_erase = spi_block_erase_c7,
5425 }
5426 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005427 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005428 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005429 },
5430
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005431 {
5432 .vendor = "Winbond",
5433 .name = "W25x40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005434 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005435 .manufacture_id = WINBOND_NEX_ID,
5436 .model_id = W_25X40,
5437 .total_size = 512,
5438 .page_size = 256,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005439 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005440 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005441 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005442 .block_erasers =
5443 {
5444 {
5445 .eraseblocks = { {4 * 1024, 128} },
5446 .block_erase = spi_block_erase_20,
5447 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005448 .eraseblocks = { {64 * 1024, 8} },
5449 .block_erase = spi_block_erase_d8,
5450 }, {
5451 .eraseblocks = { {512 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005452 .block_erase = spi_block_erase_c7,
5453 }
5454 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005455 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005456 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005457 },
5458
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005459 {
5460 .vendor = "Winbond",
5461 .name = "W25x80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005462 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005463 .manufacture_id = WINBOND_NEX_ID,
5464 .model_id = W_25X80,
5465 .total_size = 1024,
5466 .page_size = 256,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005467 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005468 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005469 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005470 .block_erasers =
5471 {
5472 {
5473 .eraseblocks = { {4 * 1024, 256} },
5474 .block_erase = spi_block_erase_20,
5475 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005476 .eraseblocks = { {64 * 1024, 16} },
5477 .block_erase = spi_block_erase_d8,
5478 }, {
5479 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005480 .block_erase = spi_block_erase_c7,
5481 }
5482 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005483 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005484 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005485 },
5486
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005487 {
5488 .vendor = "Winbond",
Hector Martina721ae22009-07-11 19:39:11 +00005489 .name = "W25x16",
5490 .bustype = CHIP_BUSTYPE_SPI,
5491 .manufacture_id = WINBOND_NEX_ID,
5492 .model_id = W_25X16,
5493 .total_size = 2048,
5494 .page_size = 256,
5495 .tested = TEST_OK_PR,
5496 .probe = probe_spi_rdid,
5497 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005498 .block_erasers =
5499 {
5500 {
5501 .eraseblocks = { {4 * 1024, 512} },
5502 .block_erase = spi_block_erase_20,
5503 }, {
5504 .eraseblocks = { {32 * 1024, 64} },
5505 .block_erase = spi_block_erase_52,
5506 }, {
5507 .eraseblocks = { {64 * 1024, 32} },
5508 .block_erase = spi_block_erase_d8,
5509 }, {
5510 .eraseblocks = { {2 * 1024 * 1024, 1} },
5511 .block_erase = spi_block_erase_60,
5512 }, {
5513 .eraseblocks = { {2 * 1024 * 1024, 1} },
5514 .block_erase = spi_block_erase_c7,
5515 }
5516 },
Hector Martina721ae22009-07-11 19:39:11 +00005517 .write = spi_chip_write_256,
5518 .read = spi_chip_read,
5519 },
5520
5521 {
5522 .vendor = "Winbond",
Zheng Bao1db2b752009-11-26 11:05:01 +00005523 .name = "W25x32",
5524 .bustype = CHIP_BUSTYPE_SPI,
5525 .manufacture_id = WINBOND_NEX_ID,
5526 .model_id = W_25X32,
5527 .total_size = 4096,
5528 .page_size = 256,
5529 .tested = TEST_OK_PROBE,
5530 .probe = probe_spi_rdid,
5531 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005532 .block_erasers =
5533 {
5534 {
5535 .eraseblocks = { {4 * 1024, 1024} },
5536 .block_erase = spi_block_erase_20,
5537 }, {
5538 .eraseblocks = { {32 * 1024, 128} },
5539 .block_erase = spi_block_erase_52,
5540 }, {
5541 .eraseblocks = { {64 * 1024, 64} },
5542 .block_erase = spi_block_erase_d8,
5543 }, {
5544 .eraseblocks = { {4 * 1024 * 1024, 1} },
5545 .block_erase = spi_block_erase_60,
5546 }, {
5547 .eraseblocks = { {4 * 1024 * 1024, 1} },
5548 .block_erase = spi_block_erase_c7,
5549 }
5550 },
Zheng Bao1db2b752009-11-26 11:05:01 +00005551 .write = spi_chip_write_256,
5552 .read = spi_chip_read,
5553 },
5554
5555 {
5556 .vendor = "Winbond",
5557 .name = "W25x64",
5558 .bustype = CHIP_BUSTYPE_SPI,
5559 .manufacture_id = WINBOND_NEX_ID,
5560 .model_id = W_25X64,
5561 .total_size = 8192,
5562 .page_size = 256,
5563 .tested = TEST_UNTESTED,
5564 .probe = probe_spi_rdid,
5565 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005566 .block_erasers =
5567 {
5568 {
5569 .eraseblocks = { {4 * 1024, 2048} },
5570 .block_erase = spi_block_erase_20,
5571 }, {
5572 .eraseblocks = { {32 * 1024, 256} },
5573 .block_erase = spi_block_erase_52,
5574 }, {
5575 .eraseblocks = { {64 * 1024, 128} },
5576 .block_erase = spi_block_erase_d8,
5577 }, {
5578 .eraseblocks = { {8 * 1024 * 1024, 1} },
5579 .block_erase = spi_block_erase_60,
5580 }, {
5581 .eraseblocks = { {8 * 1024 * 1024, 1} },
5582 .block_erase = spi_block_erase_c7,
5583 }
5584 },
Zheng Bao1db2b752009-11-26 11:05:01 +00005585 .write = spi_chip_write_256,
5586 .read = spi_chip_read,
5587 },
5588
5589 {
5590 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005591 .name = "W29C011",
Urja Rannikko038a3122009-06-28 19:19:25 +00005592 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005593 .manufacture_id = WINBOND_ID,
5594 .model_id = W_29C011,
5595 .total_size = 128,
5596 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005597 .feature_bits = FEATURE_LONG_RESET,
5598 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005599 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005600 .probe_timing = 10, /* used datasheet for the W29C011A */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005601 .block_erasers =
5602 {
5603 {
5604 .eraseblocks = { {128 * 1024, 1} },
5605 .block_erase = erase_chip_block_jedec,
5606 }
5607 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005608 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005609 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005610 },
5611
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005612 {
5613 .vendor = "Winbond",
5614 .name = "W29C020C",
Urja Rannikko161b8852009-06-05 08:47:37 +00005615 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005616 .manufacture_id = WINBOND_ID,
5617 .model_id = W_29C020C,
5618 .total_size = 256,
5619 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005620 .feature_bits = FEATURE_LONG_RESET,
5621 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005622 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005623 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005624 .block_erasers =
5625 {
5626 {
5627 .eraseblocks = { {256 * 1024, 1} },
5628 .block_erase = erase_chip_block_jedec,
5629 }
5630 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005631 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005632 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005633 },
5634
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005635 {
5636 .vendor = "Winbond",
5637 .name = "W29C040P",
Urja Rannikko161b8852009-06-05 08:47:37 +00005638 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005639 .manufacture_id = WINBOND_ID,
5640 .model_id = W_29C040P,
5641 .total_size = 512,
5642 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00005643 .feature_bits = FEATURE_LONG_RESET,
5644 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005645 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005646 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005647 .block_erasers =
5648 {
5649 {
5650 .eraseblocks = { {512 * 1024, 1} },
5651 .block_erase = erase_chip_block_jedec,
5652 }
5653 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005654 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005655 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005656 },
5657
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005658 {
5659 .vendor = "Winbond",
5660 .name = "W29EE011",
Urja Rannikko038a3122009-06-28 19:19:25 +00005661 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005662 .manufacture_id = WINBOND_ID,
5663 .model_id = W_29C011,
5664 .total_size = 128,
5665 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005666 .feature_bits = FEATURE_LONG_RESET,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005667 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005668 .probe = probe_w29ee011,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005669 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w29ee011.c) */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005670 .block_erasers =
5671 {
5672 {
5673 .eraseblocks = { {128 * 1024, 1} },
5674 .block_erase = erase_chip_block_jedec,
5675 }
5676 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005677 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005678 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005679 },
5680
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005681 {
5682 .vendor = "Winbond",
5683 .name = "W39V040A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005684 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005685 .manufacture_id = WINBOND_ID,
5686 .model_id = W_39V040A,
5687 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005688 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005689 .feature_bits = FEATURE_EITHER_RESET,
5690 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005691 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005692 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005693 .block_erasers =
5694 {
5695 {
5696 .eraseblocks = { {64 * 1024, 8} },
5697 .block_erase = erase_sector_jedec,
5698 }, {
5699 .eraseblocks = { {512 * 1024, 1} },
5700 .block_erase = erase_chip_block_jedec,
5701 }
5702 },
Sean Nelson35727f72010-01-28 23:55:12 +00005703 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005704 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005705 },
5706
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005707 {
5708 .vendor = "Winbond",
5709 .name = "W39V040B",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005710 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005711 .manufacture_id = WINBOND_ID,
5712 .model_id = W_39V040B,
5713 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005714 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005715 .feature_bits = FEATURE_EITHER_RESET,
5716 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005717 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005718 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005719 .block_erasers =
5720 {
5721 {
5722 .eraseblocks = { {64 * 1024, 8} },
5723 .block_erase = erase_sector_jedec,
5724 }, {
5725 .eraseblocks = { {512 * 1024, 1} },
5726 .block_erase = erase_chip_block_jedec,
5727 }
5728 },
Sean Nelson35727f72010-01-28 23:55:12 +00005729 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005730 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005731 },
5732
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005733 {
5734 .vendor = "Winbond",
5735 .name = "W39V040C",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005736 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005737 .manufacture_id = WINBOND_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005738 .model_id = W_39V040C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005739 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005740 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005741 .feature_bits = FEATURE_EITHER_RESET,
5742 .tested = TEST_UNTESTED,
5743 .probe = probe_jedec,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005744 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005745 .block_erasers =
5746 {
5747 {
5748 .eraseblocks = { {64 * 1024, 8} },
5749 .block_erase = erase_sector_jedec,
5750 }, {
5751 .eraseblocks = { {512 * 1024, 1} },
5752 .block_erase = erase_chip_block_jedec,
5753 }
5754 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00005755 .printlock = printlock_w39v040c,
Sean Nelson35727f72010-01-28 23:55:12 +00005756 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005757 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005758 },
5759
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005760 {
5761 .vendor = "Winbond",
5762 .name = "W39V040FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005763 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005764 .manufacture_id = WINBOND_ID,
5765 .model_id = W_39V040FA,
5766 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005767 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005768 .feature_bits = FEATURE_EITHER_RESET,
5769 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005770 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005771 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005772 .block_erasers =
5773 {
5774 {
5775 .eraseblocks = { {4 * 1024, 128} },
5776 .block_erase = erase_block_jedec,
5777 }, {
5778 .eraseblocks = { {64 * 1024, 8} },
5779 .block_erase = erase_sector_jedec,
5780 }, {
5781 .eraseblocks = { {512 * 1024, 1} },
5782 .block_erase = erase_chip_block_jedec,
5783 }
5784 },
Sean Nelson35727f72010-01-28 23:55:12 +00005785 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005786 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005787 },
5788
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005789 {
5790 .vendor = "Winbond",
5791 .name = "W39V080A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005792 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005793 .manufacture_id = WINBOND_ID,
5794 .model_id = W_39V080A,
5795 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00005796 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005797 .feature_bits = FEATURE_EITHER_RESET,
5798 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005799 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005800 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005801 .block_erasers =
5802 {
5803 {
5804 .eraseblocks = { {64 * 1024, 16} },
5805 .block_erase = erase_sector_jedec,
5806 }, {
5807 .eraseblocks = { {1024 * 1024, 1} },
5808 .block_erase = erase_chip_block_jedec,
5809 }
5810 },
Sean Nelson35727f72010-01-28 23:55:12 +00005811 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005812 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005813 },
5814
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005815 {
5816 .vendor = "Winbond",
5817 .name = "W49F002U",
Urja Rannikko038a3122009-06-28 19:19:25 +00005818 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005819 .manufacture_id = WINBOND_ID,
5820 .model_id = W_49F002U,
5821 .total_size = 256,
5822 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005823 .feature_bits = FEATURE_EITHER_RESET,
5824 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005825 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005826 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005827 .block_erasers =
5828 {
5829 {
5830 .eraseblocks = {
5831 {128 * 1024, 1},
5832 {96 * 1024, 1},
5833 {8 * 1024, 2},
5834 {16 * 1024, 1},
5835 },
5836 .block_erase = erase_sector_jedec,
5837 }, {
5838 .eraseblocks = { {256 * 1024, 1} },
5839 .block_erase = erase_chip_block_jedec,
5840 }
5841 },
Sean Nelson35727f72010-01-28 23:55:12 +00005842 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005843 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005844 },
5845
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005846 {
5847 .vendor = "Winbond",
5848 .name = "W49V002A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005849 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005850 .manufacture_id = WINBOND_ID,
5851 .model_id = W_49V002A,
5852 .total_size = 256,
5853 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005854 .feature_bits = FEATURE_EITHER_RESET,
5855 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005856 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005857 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005858 .block_erasers =
5859 {
5860 {
5861 .eraseblocks = {
5862 {64 * 1024, 3},
5863 {32 * 1024, 1},
5864 {8 * 1024, 2},
5865 {16 * 1024, 1},
5866 },
5867 .block_erase = erase_sector_jedec,
5868 }, {
5869 .eraseblocks = { {256 * 1024, 1} },
5870 .block_erase = erase_chip_block_jedec,
5871 }
5872 },
Sean Nelson35727f72010-01-28 23:55:12 +00005873 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005874 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005875 },
5876
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005877 {
5878 .vendor = "Winbond",
5879 .name = "W49V002FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005880 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005881 .manufacture_id = WINBOND_ID,
5882 .model_id = W_49V002FA,
5883 .total_size = 256,
5884 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005885 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005886 .tested = TEST_UNTESTED,
5887 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005888 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005889 .block_erasers =
5890 {
5891 {
5892 .eraseblocks = {
5893 {64 * 1024, 3},
5894 {32 * 1024, 1},
5895 {8 * 1024, 2},
5896 {16 * 1024, 1},
5897 },
5898 .block_erase = erase_sector_jedec,
5899 }, {
5900 .eraseblocks = { {256 * 1024, 1} },
5901 .block_erase = erase_chip_block_jedec,
5902 }
5903 },
Sean Nelson35727f72010-01-28 23:55:12 +00005904 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005905 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005906 },
5907
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005908 {
5909 .vendor = "Winbond",
5910 .name = "W39V080FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005911 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005912 .manufacture_id = WINBOND_ID,
5913 .model_id = W_39V080FA,
5914 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00005915 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005916 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
5917 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00005918 .probe = probe_jedec,
5919 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005920 .block_erasers =
5921 {
5922 {
5923 .eraseblocks = { {64 * 1024, 16}, },
5924 .block_erase = erase_sector_jedec,
5925 }, {
5926 .eraseblocks = { {1024 * 1024, 1} },
5927 .block_erase = erase_chip_block_jedec,
5928 }
5929 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00005930 .unlock = unlock_winbond_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00005931 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005932 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005933 },
5934
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005935 {
5936 .vendor = "Winbond",
5937 .name = "W39V080FA (dual mode)",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005938 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005939 .manufacture_id = WINBOND_ID,
5940 .model_id = W_39V080FA_DM,
5941 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005942 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005943 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005944 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00005945 .probe = probe_jedec,
5946 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005947 .block_erasers =
5948 {
5949 {
5950 .eraseblocks = { {64 * 1024, 8}, },
5951 .block_erase = erase_sector_jedec,
5952 }, {
5953 .eraseblocks = { {512 * 1024, 1} },
5954 .block_erase = erase_chip_block_jedec,
5955 }
5956 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00005957 .unlock = unlock_winbond_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00005958 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005959 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005960 },
5961
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005962 {
5963 .vendor = "Atmel",
5964 .name = "unknown Atmel SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005965 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005966 .manufacture_id = ATMEL_ID,
5967 .model_id = GENERIC_DEVICE_ID,
5968 .total_size = 0,
5969 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00005970 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005971 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005972 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005973 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005974 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00005975 },
5976
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005977 {
5978 .vendor = "EON",
5979 .name = "unknown EON SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005980 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005981 .manufacture_id = EON_ID_NOPREFIX,
5982 .model_id = GENERIC_DEVICE_ID,
5983 .total_size = 0,
5984 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00005985 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005986 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005987 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005988 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005989 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00005990 },
5991
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005992 {
5993 .vendor = "Macronix",
5994 .name = "unknown Macronix SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005995 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005996 .manufacture_id = MX_ID,
5997 .model_id = GENERIC_DEVICE_ID,
5998 .total_size = 0,
5999 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006000 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006001 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006002 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006003 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006004 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006005 },
6006
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006007 {
6008 .vendor = "PMC",
6009 .name = "unknown PMC SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006010 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006011 .manufacture_id = PMC_ID,
6012 .model_id = GENERIC_DEVICE_ID,
6013 .total_size = 0,
6014 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006015 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006016 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006017 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006018 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006019 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006020 },
6021
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006022 {
6023 .vendor = "SST",
6024 .name = "unknown SST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006025 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006026 .manufacture_id = SST_ID,
6027 .model_id = GENERIC_DEVICE_ID,
6028 .total_size = 0,
6029 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006030 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006031 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006032 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006033 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006034 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006035 },
6036
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006037 {
6038 .vendor = "ST",
6039 .name = "unknown ST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006040 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006041 .manufacture_id = ST_ID,
6042 .model_id = GENERIC_DEVICE_ID,
6043 .total_size = 0,
6044 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006045 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006046 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006047 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006048 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006049 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006050 },
Uwe Hermannfc425e82008-03-16 02:06:25 +00006051
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006052 {
Sean Nelson118e1d62009-11-24 02:08:11 +00006053 .vendor = "Sanyo",
6054 .name = "unknown Sanyo SPI chip",
6055 .bustype = CHIP_BUSTYPE_SPI,
6056 .manufacture_id = SANYO_ID,
6057 .model_id = GENERIC_DEVICE_ID,
6058 .total_size = 0,
6059 .page_size = 256,
6060 .tested = TEST_BAD_PREW,
6061 .probe = probe_spi_rdid,
6062 .probe_timing = TIMING_ZERO,
Sean Nelson118e1d62009-11-24 02:08:11 +00006063 .write = NULL,
6064 .read = NULL,
6065 },
6066
6067 {
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006068 .vendor = "Generic",
6069 .name = "unknown SPI chip (RDID)",
6070 .bustype = CHIP_BUSTYPE_SPI,
6071 .manufacture_id = GENERIC_MANUF_ID,
6072 .model_id = GENERIC_DEVICE_ID,
6073 .total_size = 0,
6074 .page_size = 256,
6075 .tested = TEST_BAD_PREW,
6076 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006077 .write = NULL,
6078 },
6079 {
6080 .vendor = "Generic",
6081 .name = "unknown SPI chip (REMS)",
6082 .bustype = CHIP_BUSTYPE_SPI,
6083 .manufacture_id = GENERIC_MANUF_ID,
6084 .model_id = GENERIC_DEVICE_ID,
6085 .total_size = 0,
6086 .page_size = 256,
6087 .tested = TEST_BAD_PREW,
6088 .probe = probe_spi_rems,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006089 .write = NULL,
6090 },
6091
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006092 { NULL }
Stephan Guilloux72cf5652009-04-21 01:46:07 +00006093};