Flashrom

Flashrom Svn Source Tree

Root/trunk/flashrom.c

  • Property svn:keywords set to Author Date Id Revision
  • Property svn:eol-style set to native
1/*
2 * This file is part of the flashrom project.
3 *
4 * Copyright (C) 2000 Silicon Integrated System Corporation
5 * Copyright (C) 2004 Tyan Corp <yhlu@tyan.com>
6 * Copyright (C) 2005-2008 coresystems GmbH
7 * Copyright (C) 2008,2009 Carl-Daniel Hailfinger
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22 */
23
24#include <stdio.h>
25#include <sys/types.h>
26#ifndef __LIBPAYLOAD__
27#include <fcntl.h>
28#include <sys/stat.h>
29#endif
30#include <string.h>
31#include <stdlib.h>
32#include <ctype.h>
33#include <getopt.h>
34#if HAVE_UTSNAME == 1
35#include <sys/utsname.h>
36#endif
37#include "flash.h"
38#include "flashchips.h"
39#include "programmer.h"
40
41const char flashrom_version[] = FLASHROM_VERSION;
42char *chip_to_probe = NULL;
43int verbose = 0;
44
45static enum programmer programmer = PROGRAMMER_INVALID;
46
47static char *programmer_param = NULL;
48
49/*
50 * Programmers supporting multiple buses can have differing size limits on
51 * each bus. Store the limits for each bus in a common struct.
52 */
53struct decode_sizes max_rom_decode;
54
55/* If nonzero, used as the start address of bottom-aligned flash. */
56unsigned long flashbase;
57
58/* Is writing allowed with this programmer? */
59int programmer_may_write;
60
61const struct programmer_entry programmer_table[] = {
62#if CONFIG_INTERNAL == 1
63{
64.name= "internal",
65.init= internal_init,
66.map_flash_region= physmap,
67.unmap_flash_region= physunmap,
68.delay= internal_delay,
69},
70#endif
71
72#if CONFIG_DUMMY == 1
73{
74.name= "dummy",
75.init= dummy_init,
76.map_flash_region= dummy_map,
77.unmap_flash_region= dummy_unmap,
78.delay= internal_delay,
79},
80#endif
81
82#if CONFIG_NIC3COM == 1
83{
84.name= "nic3com",
85.init= nic3com_init,
86.map_flash_region= fallback_map,
87.unmap_flash_region= fallback_unmap,
88.delay= internal_delay,
89},
90#endif
91
92#if CONFIG_NICREALTEK == 1
93{
94/* This programmer works for Realtek RTL8139 and SMC 1211. */
95.name= "nicrealtek",
96//.name= "nicsmc1211",
97.init= nicrealtek_init,
98.map_flash_region= fallback_map,
99.unmap_flash_region= fallback_unmap,
100.delay= internal_delay,
101},
102#endif
103
104#if CONFIG_NICNATSEMI == 1
105{
106.name= "nicnatsemi",
107.init= nicnatsemi_init,
108.map_flash_region= fallback_map,
109.unmap_flash_region= fallback_unmap,
110.delay= internal_delay,
111},
112#endif
113
114#if CONFIG_GFXNVIDIA == 1
115{
116.name= "gfxnvidia",
117.init= gfxnvidia_init,
118.map_flash_region= fallback_map,
119.unmap_flash_region= fallback_unmap,
120.delay= internal_delay,
121},
122#endif
123
124#if CONFIG_DRKAISER == 1
125{
126.name= "drkaiser",
127.init= drkaiser_init,
128.map_flash_region= fallback_map,
129.unmap_flash_region= fallback_unmap,
130.delay= internal_delay,
131},
132#endif
133
134#if CONFIG_SATASII == 1
135{
136.name= "satasii",
137.init= satasii_init,
138.map_flash_region= fallback_map,
139.unmap_flash_region= fallback_unmap,
140.delay= internal_delay,
141},
142#endif
143
144#if CONFIG_ATAHPT == 1
145{
146.name= "atahpt",
147.init= atahpt_init,
148.map_flash_region= fallback_map,
149.unmap_flash_region= fallback_unmap,
150.delay= internal_delay,
151},
152#endif
153
154#if CONFIG_FT2232_SPI == 1
155{
156.name= "ft2232_spi",
157.init= ft2232_spi_init,
158.map_flash_region= fallback_map,
159.unmap_flash_region= fallback_unmap,
160.delay= internal_delay,
161},
162#endif
163
164#if CONFIG_SERPROG == 1
165{
166.name= "serprog",
167.init= serprog_init,
168.map_flash_region= fallback_map,
169.unmap_flash_region= fallback_unmap,
170.delay= serprog_delay,
171},
172#endif
173
174#if CONFIG_BUSPIRATE_SPI == 1
175{
176.name= "buspirate_spi",
177.init= buspirate_spi_init,
178.map_flash_region= fallback_map,
179.unmap_flash_region= fallback_unmap,
180.delay= internal_delay,
181},
182#endif
183
184#if CONFIG_DEDIPROG == 1
185{
186.name= "dediprog",
187.init= dediprog_init,
188.map_flash_region= fallback_map,
189.unmap_flash_region= fallback_unmap,
190.delay= internal_delay,
191},
192#endif
193
194#if CONFIG_RAYER_SPI == 1
195{
196.name= "rayer_spi",
197.init= rayer_spi_init,
198.map_flash_region= fallback_map,
199.unmap_flash_region= fallback_unmap,
200.delay= internal_delay,
201},
202#endif
203
204#if CONFIG_NICINTEL == 1
205{
206.name= "nicintel",
207.init= nicintel_init,
208.map_flash_region= fallback_map,
209.unmap_flash_region= fallback_unmap,
210.delay= internal_delay,
211},
212#endif
213
214#if CONFIG_NICINTEL_SPI == 1
215{
216.name= "nicintel_spi",
217.init= nicintel_spi_init,
218.map_flash_region= fallback_map,
219.unmap_flash_region= fallback_unmap,
220.delay= internal_delay,
221},
222#endif
223
224#if CONFIG_OGP_SPI == 1
225{
226.name= "ogp_spi",
227.init= ogp_spi_init,
228.map_flash_region= fallback_map,
229.unmap_flash_region= fallback_unmap,
230.delay= internal_delay,
231},
232#endif
233
234#if CONFIG_SATAMV == 1
235{
236.name= "satamv",
237.init= satamv_init,
238.map_flash_region= fallback_map,
239.unmap_flash_region= fallback_unmap,
240.delay= internal_delay,
241},
242#endif
243
244#if CONFIG_LINUX_SPI == 1
245{
246.name= "linux_spi",
247.init= linux_spi_init,
248.map_flash_region= fallback_map,
249.unmap_flash_region= fallback_unmap,
250.delay= internal_delay,
251},
252#endif
253
254{}, /* This entry corresponds to PROGRAMMER_INVALID. */
255};
256
257#define SHUTDOWN_MAXFN 32
258static int shutdown_fn_count = 0;
259struct shutdown_func_data {
260int (*func) (void *data);
261void *data;
262} static shutdown_fn[SHUTDOWN_MAXFN];
263/* Initialize to 0 to make sure nobody registers a shutdown function before
264 * programmer init.
265 */
266static int may_register_shutdown = 0;
267
268static int check_block_eraser(const struct flashctx *flash, int k, int log);
269
270/* Register a function to be executed on programmer shutdown.
271 * The advantage over atexit() is that you can supply a void pointer which will
272 * be used as parameter to the registered function upon programmer shutdown.
273 * This pointer can point to arbitrary data used by said function, e.g. undo
274 * information for GPIO settings etc. If unneeded, set data=NULL.
275 * Please note that the first (void *data) belongs to the function signature of
276 * the function passed as first parameter.
277 */
278int register_shutdown(int (*function) (void *data), void *data)
279{
280if (shutdown_fn_count >= SHUTDOWN_MAXFN) {
281msg_perr("Tried to register more than %i shutdown functions.\n",
282 SHUTDOWN_MAXFN);
283return 1;
284}
285if (!may_register_shutdown) {
286msg_perr("Tried to register a shutdown function before "
287 "programmer init.\n");
288return 1;
289}
290shutdown_fn[shutdown_fn_count].func = function;
291shutdown_fn[shutdown_fn_count].data = data;
292shutdown_fn_count++;
293
294return 0;
295}
296
297int programmer_init(enum programmer prog, char *param)
298{
299int ret;
300
301if (prog >= PROGRAMMER_INVALID) {
302msg_perr("Invalid programmer specified!\n");
303return -1;
304}
305programmer = prog;
306/* Initialize all programmer specific data. */
307/* Default to unlimited decode sizes. */
308max_rom_decode = (const struct decode_sizes) {
309.parallel= 0xffffffff,
310.lpc= 0xffffffff,
311.fwh= 0xffffffff,
312.spi= 0xffffffff,
313};
314/* Default to top aligned flash at 4 GB. */
315flashbase = 0;
316/* Registering shutdown functions is now allowed. */
317may_register_shutdown = 1;
318/* Default to allowing writes. Broken programmers set this to 0. */
319programmer_may_write = 1;
320
321programmer_param = param;
322msg_pdbg("Initializing %s programmer\n",
323 programmer_table[programmer].name);
324ret = programmer_table[programmer].init();
325if (programmer_param && strlen(programmer_param)) {
326msg_perr("Unhandled programmer parameters: %s\n",
327 programmer_param);
328/* Do not error out here, the init itself was successful. */
329}
330return ret;
331}
332
333int programmer_shutdown(void)
334{
335int ret = 0;
336
337/* Registering shutdown functions is no longer allowed. */
338may_register_shutdown = 0;
339while (shutdown_fn_count > 0) {
340int i = --shutdown_fn_count;
341ret |= shutdown_fn[i].func(shutdown_fn[i].data);
342}
343return ret;
344}
345
346void *programmer_map_flash_region(const char *descr, unsigned long phys_addr,
347 size_t len)
348{
349return programmer_table[programmer].map_flash_region(descr,
350 phys_addr, len);
351}
352
353void programmer_unmap_flash_region(void *virt_addr, size_t len)
354{
355programmer_table[programmer].unmap_flash_region(virt_addr, len);
356}
357
358void chip_writeb(const struct flashctx *flash, uint8_t val, chipaddr addr)
359{
360flash->pgm->par.chip_writeb(flash, val, addr);
361}
362
363void chip_writew(const struct flashctx *flash, uint16_t val, chipaddr addr)
364{
365flash->pgm->par.chip_writew(flash, val, addr);
366}
367
368void chip_writel(const struct flashctx *flash, uint32_t val, chipaddr addr)
369{
370flash->pgm->par.chip_writel(flash, val, addr);
371}
372
373void chip_writen(const struct flashctx *flash, uint8_t *buf, chipaddr addr,
374 size_t len)
375{
376flash->pgm->par.chip_writen(flash, buf, addr, len);
377}
378
379uint8_t chip_readb(const struct flashctx *flash, const chipaddr addr)
380{
381return flash->pgm->par.chip_readb(flash, addr);
382}
383
384uint16_t chip_readw(const struct flashctx *flash, const chipaddr addr)
385{
386return flash->pgm->par.chip_readw(flash, addr);
387}
388
389uint32_t chip_readl(const struct flashctx *flash, const chipaddr addr)
390{
391return flash->pgm->par.chip_readl(flash, addr);
392}
393
394void chip_readn(const struct flashctx *flash, uint8_t *buf, chipaddr addr,
395size_t len)
396{
397flash->pgm->par.chip_readn(flash, buf, addr, len);
398}
399
400void programmer_delay(int usecs)
401{
402programmer_table[programmer].delay(usecs);
403}
404
405void map_flash_registers(struct flashctx *flash)
406{
407size_t size = flash->total_size * 1024;
408/* Flash registers live 4 MByte below the flash. */
409/* FIXME: This is incorrect for nonstandard flashbase. */
410flash->virtual_registers = (chipaddr)programmer_map_flash_region("flash chip registers", (0xFFFFFFFF - 0x400000 - size + 1), size);
411}
412
413int read_memmapped(struct flashctx *flash, uint8_t *buf, unsigned int start,
414 int unsigned len)
415{
416chip_readn(flash, buf, flash->virtual_memory + start, len);
417
418return 0;
419}
420
421int min(int a, int b)
422{
423return (a < b) ? a : b;
424}
425
426int max(int a, int b)
427{
428return (a > b) ? a : b;
429}
430
431int bitcount(unsigned long a)
432{
433int i = 0;
434for (; a != 0; a >>= 1)
435if (a & 1)
436i++;
437return i;
438}
439
440void tolower_string(char *str)
441{
442for (; *str != '\0'; str++)
443*str = (char)tolower((unsigned char)*str);
444}
445
446char *strcat_realloc(char *dest, const char *src)
447{
448dest = realloc(dest, strlen(dest) + strlen(src) + 1);
449if (!dest) {
450msg_gerr("Out of memory!\n");
451return NULL;
452}
453strcat(dest, src);
454return dest;
455}
456
457/* This is a somewhat hacked function similar in some ways to strtok().
458 * It will look for needle with a subsequent '=' in haystack, return a copy of
459 * needle and remove everything from the first occurrence of needle to the next
460 * delimiter from haystack.
461 */
462char *extract_param(char **haystack, const char *needle, const char *delim)
463{
464char *param_pos, *opt_pos, *rest;
465char *opt = NULL;
466int optlen;
467int needlelen;
468
469needlelen = strlen(needle);
470if (!needlelen) {
471msg_gerr("%s: empty needle! Please report a bug at "
472 "flashrom@flashrom.org\n", __func__);
473return NULL;
474}
475/* No programmer parameters given. */
476if (*haystack == NULL)
477return NULL;
478param_pos = strstr(*haystack, needle);
479do {
480if (!param_pos)
481return NULL;
482/* Needle followed by '='? */
483if (param_pos[needlelen] == '=') {
484
485/* Beginning of the string? */
486if (param_pos == *haystack)
487break;
488/* After a delimiter? */
489if (strchr(delim, *(param_pos - 1)))
490break;
491}
492/* Continue searching. */
493param_pos++;
494param_pos = strstr(param_pos, needle);
495} while (1);
496
497if (param_pos) {
498/* Get the string after needle and '='. */
499opt_pos = param_pos + needlelen + 1;
500optlen = strcspn(opt_pos, delim);
501/* Return an empty string if the parameter was empty. */
502opt = malloc(optlen + 1);
503if (!opt) {
504msg_gerr("Out of memory!\n");
505exit(1);
506}
507strncpy(opt, opt_pos, optlen);
508opt[optlen] = '\0';
509rest = opt_pos + optlen;
510/* Skip all delimiters after the current parameter. */
511rest += strspn(rest, delim);
512memmove(param_pos, rest, strlen(rest) + 1);
513/* We could shrink haystack, but the effort is not worth it. */
514}
515
516return opt;
517}
518
519char *extract_programmer_param(const char *param_name)
520{
521return extract_param(&programmer_param, param_name, ",");
522}
523
524/* Returns the number of well-defined erasers for a chip. */
525static unsigned int count_usable_erasers(const struct flashctx *flash)
526{
527unsigned int usable_erasefunctions = 0;
528int k;
529for (k = 0; k < NUM_ERASEFUNCTIONS; k++) {
530if (!check_block_eraser(flash, k, 0))
531usable_erasefunctions++;
532}
533return usable_erasefunctions;
534}
535
536/* start is an offset to the base address of the flash chip */
537int check_erased_range(struct flashctx *flash, unsigned int start,
538 unsigned int len)
539{
540int ret;
541uint8_t *cmpbuf = malloc(len);
542
543if (!cmpbuf) {
544msg_gerr("Could not allocate memory!\n");
545exit(1);
546}
547memset(cmpbuf, 0xff, len);
548ret = verify_range(flash, cmpbuf, start, len, "ERASE");
549free(cmpbuf);
550return ret;
551}
552
553/*
554 * @cmpbufbuffer to compare against, cmpbuf[0] is expected to match the
555 *flash content at location start
556 * @startoffset to the base address of the flash chip
557 * @lenlength of the verified area
558 * @messagestring to print in the "FAILED" message
559 * @return0 for success, -1 for failure
560 */
561int verify_range(struct flashctx *flash, uint8_t *cmpbuf, unsigned int start,
562 unsigned int len, const char *message)
563{
564unsigned int i;
565uint8_t *readbuf = malloc(len);
566int ret = 0, failcount = 0;
567
568if (!len)
569goto out_free;
570
571if (!flash->read) {
572msg_cerr("ERROR: flashrom has no read function for this flash chip.\n");
573return 1;
574}
575if (!readbuf) {
576msg_gerr("Could not allocate memory!\n");
577exit(1);
578}
579
580if (start + len > flash->total_size * 1024) {
581msg_gerr("Error: %s called with start 0x%x + len 0x%x >"
582" total_size 0x%x\n", __func__, start, len,
583flash->total_size * 1024);
584ret = -1;
585goto out_free;
586}
587if (!message)
588message = "VERIFY";
589
590ret = flash->read(flash, readbuf, start, len);
591if (ret) {
592msg_gerr("Verification impossible because read failed "
593 "at 0x%x (len 0x%x)\n", start, len);
594return ret;
595}
596
597for (i = 0; i < len; i++) {
598if (cmpbuf[i] != readbuf[i]) {
599/* Only print the first failure. */
600if (!failcount++)
601msg_cerr("%s FAILED at 0x%08x! "
602 "Expected=0x%02x, Read=0x%02x,",
603 message, start + i, cmpbuf[i],
604 readbuf[i]);
605}
606}
607if (failcount) {
608msg_cerr(" failed byte count from 0x%08x-0x%08x: 0x%x\n",
609 start, start + len - 1, failcount);
610ret = -1;
611}
612
613out_free:
614free(readbuf);
615return ret;
616}
617
618/*
619 * Check if the buffer @have can be programmed to the content of @want without
620 * erasing. This is only possible if all chunks of size @gran are either kept
621 * as-is or changed from an all-ones state to any other state.
622 *
623 * The following write granularities (enum @gran) are known:
624 * - 1 bit. Each bit can be cleared individually.
625 * - 1 byte. A byte can be written once. Further writes to an already written
626 * byte cause the contents to be either undefined or to stay unchanged.
627 * - 128 bytes. If less than 128 bytes are written, the rest will be
628 * erased. Each write to a 128-byte region will trigger an automatic erase
629 * before anything is written. Very uncommon behaviour and unsupported by
630 * this function.
631 * - 256 bytes. If less than 256 bytes are written, the contents of the
632 * unwritten bytes are undefined.
633 * Warning: This function assumes that @have and @want point to naturally
634 * aligned regions.
635 *
636 * @have buffer with current content
637 * @want buffer with desired content
638 * @lenlength of the checked area
639 * @granwrite granularity (enum, not count)
640 * @return 0 if no erase is needed, 1 otherwise
641 */
642int need_erase(uint8_t *have, uint8_t *want, unsigned int len, enum write_granularity gran)
643{
644int result = 0;
645unsigned int i, j, limit;
646
647switch (gran) {
648case write_gran_1bit:
649for (i = 0; i < len; i++)
650if ((have[i] & want[i]) != want[i]) {
651result = 1;
652break;
653}
654break;
655case write_gran_1byte:
656for (i = 0; i < len; i++)
657if ((have[i] != want[i]) && (have[i] != 0xff)) {
658result = 1;
659break;
660}
661break;
662case write_gran_256bytes:
663for (j = 0; j < len / 256; j++) {
664limit = min (256, len - j * 256);
665/* Are 'have' and 'want' identical? */
666if (!memcmp(have + j * 256, want + j * 256, limit))
667continue;
668/* have needs to be in erased state. */
669for (i = 0; i < limit; i++)
670if (have[j * 256 + i] != 0xff) {
671result = 1;
672break;
673}
674if (result)
675break;
676}
677break;
678default:
679msg_cerr("%s: Unsupported granularity! Please report a bug at "
680 "flashrom@flashrom.org\n", __func__);
681}
682return result;
683}
684
685/**
686 * Check if the buffer @have needs to be programmed to get the content of @want.
687 * If yes, return 1 and fill in first_start with the start address of the
688 * write operation and first_len with the length of the first to-be-written
689 * chunk. If not, return 0 and leave first_start and first_len undefined.
690 *
691 * Warning: This function assumes that @have and @want point to naturally
692 * aligned regions.
693 *
694 * @havebuffer with current content
695 * @wantbuffer with desired content
696 * @lenlength of the checked area
697 * @granwrite granularity (enum, not count)
698 * @first_startoffset of the first byte which needs to be written (passed in
699 *value is increased by the offset of the first needed write
700 *relative to have/want or unchanged if no write is needed)
701 * @returnlength of the first contiguous area which needs to be written
702 *0 if no write is needed
703 *
704 * FIXME: This function needs a parameter which tells it about coalescing
705 * in relation to the max write length of the programmer and the max write
706 * length of the chip.
707 */
708static unsigned int get_next_write(uint8_t *have, uint8_t *want, unsigned int len,
709 unsigned int *first_start,
710 enum write_granularity gran)
711{
712int need_write = 0;
713unsigned int rel_start = 0, first_len = 0;
714unsigned int i, limit, stride;
715
716switch (gran) {
717case write_gran_1bit:
718case write_gran_1byte:
719stride = 1;
720break;
721case write_gran_256bytes:
722stride = 256;
723break;
724default:
725msg_cerr("%s: Unsupported granularity! Please report a bug at "
726 "flashrom@flashrom.org\n", __func__);
727/* Claim that no write was needed. A write with unknown
728 * granularity is too dangerous to try.
729 */
730return 0;
731}
732for (i = 0; i < len / stride; i++) {
733limit = min(stride, len - i * stride);
734/* Are 'have' and 'want' identical? */
735if (memcmp(have + i * stride, want + i * stride, limit)) {
736if (!need_write) {
737/* First location where have and want differ. */
738need_write = 1;
739rel_start = i * stride;
740}
741} else {
742if (need_write) {
743/* First location where have and want
744 * do not differ anymore.
745 */
746break;
747}
748}
749}
750if (need_write)
751first_len = min(i * stride - rel_start, len);
752*first_start += rel_start;
753return first_len;
754}
755
756/* This function generates various test patterns useful for testing controller
757 * and chip communication as well as chip behaviour.
758 *
759 * If a byte can be written multiple times, each time keeping 0-bits at 0
760 * and changing 1-bits to 0 if the new value for that bit is 0, the effect
761 * is essentially an AND operation. That's also the reason why this function
762 * provides the result of AND between various patterns.
763 *
764 * Below is a list of patterns (and their block length).
765 * Pattern 0 is 05 15 25 35 45 55 65 75 85 95 a5 b5 c5 d5 e5 f5 (16 Bytes)
766 * Pattern 1 is 0a 1a 2a 3a 4a 5a 6a 7a 8a 9a aa ba ca da ea fa (16 Bytes)
767 * Pattern 2 is 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f (16 Bytes)
768 * Pattern 3 is a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab ac ad ae af (16 Bytes)
769 * Pattern 4 is 00 10 20 30 40 50 60 70 80 90 a0 b0 c0 d0 e0 f0 (16 Bytes)
770 * Pattern 5 is 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f (16 Bytes)
771 * Pattern 6 is 00 (1 Byte)
772 * Pattern 7 is ff (1 Byte)
773 * Patterns 0-7 have a big-endian block number in the last 2 bytes of each 256
774 * byte block.
775 *
776 * Pattern 8 is 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11... (256 B)
777 * Pattern 9 is ff fe fd fc fb fa f9 f8 f7 f6 f5 f4 f3 f2 f1 f0 ef ee... (256 B)
778 * Pattern 10 is 00 00 00 01 00 02 00 03 00 04... (128 kB big-endian counter)
779 * Pattern 11 is ff ff ff fe ff fd ff fc ff fb... (128 kB big-endian downwards)
780 * Pattern 12 is 00 (1 Byte)
781 * Pattern 13 is ff (1 Byte)
782 * Patterns 8-13 have no block number.
783 *
784 * Patterns 0-3 are created to detect and efficiently diagnose communication
785 * slips like missed bits or bytes and their repetitive nature gives good visual
786 * cues to the person inspecting the results. In addition, the following holds:
787 * AND Pattern 0/1 == Pattern 4
788 * AND Pattern 2/3 == Pattern 5
789 * AND Pattern 0/1/2/3 == AND Pattern 4/5 == Pattern 6
790 * A weakness of pattern 0-5 is the inability to detect swaps/copies between
791 * any two 16-byte blocks except for the last 16-byte block in a 256-byte bloc.
792 * They work perfectly for detecting any swaps/aliasing of blocks >= 256 bytes.
793 * 0x5 and 0xa were picked because they are 0101 and 1010 binary.
794 * Patterns 8-9 are best for detecting swaps/aliasing of blocks < 256 bytes.
795 * Besides that, they provide for bit testing of the last two bytes of every
796 * 256 byte block which contains the block number for patterns 0-6.
797 * Patterns 10-11 are special purpose for detecting subblock aliasing with
798 * block sizes >256 bytes (some Dataflash chips etc.)
799 * AND Pattern 8/9 == Pattern 12
800 * AND Pattern 10/11 == Pattern 12
801 * Pattern 13 is the completely erased state.
802 * None of the patterns can detect aliasing at boundaries which are a multiple
803 * of 16 MBytes (but such chips do not exist anyway for Parallel/LPC/FWH/SPI).
804 */
805int generate_testpattern(uint8_t *buf, uint32_t size, int variant)
806{
807int i;
808
809if (!buf) {
810msg_gerr("Invalid buffer!\n");
811return 1;
812}
813
814switch (variant) {
815case 0:
816for (i = 0; i < size; i++)
817buf[i] = (i & 0xf) << 4 | 0x5;
818break;
819case 1:
820for (i = 0; i < size; i++)
821buf[i] = (i & 0xf) << 4 | 0xa;
822break;
823case 2:
824for (i = 0; i < size; i++)
825buf[i] = 0x50 | (i & 0xf);
826break;
827case 3:
828for (i = 0; i < size; i++)
829buf[i] = 0xa0 | (i & 0xf);
830break;
831case 4:
832for (i = 0; i < size; i++)
833buf[i] = (i & 0xf) << 4;
834break;
835case 5:
836for (i = 0; i < size; i++)
837buf[i] = i & 0xf;
838break;
839case 6:
840memset(buf, 0x00, size);
841break;
842case 7:
843memset(buf, 0xff, size);
844break;
845case 8:
846for (i = 0; i < size; i++)
847buf[i] = i & 0xff;
848break;
849case 9:
850for (i = 0; i < size; i++)
851buf[i] = ~(i & 0xff);
852break;
853case 10:
854for (i = 0; i < size % 2; i++) {
855buf[i * 2] = (i >> 8) & 0xff;
856buf[i * 2 + 1] = i & 0xff;
857}
858if (size & 0x1)
859buf[i * 2] = (i >> 8) & 0xff;
860break;
861case 11:
862for (i = 0; i < size % 2; i++) {
863buf[i * 2] = ~((i >> 8) & 0xff);
864buf[i * 2 + 1] = ~(i & 0xff);
865}
866if (size & 0x1)
867buf[i * 2] = ~((i >> 8) & 0xff);
868break;
869case 12:
870memset(buf, 0x00, size);
871break;
872case 13:
873memset(buf, 0xff, size);
874break;
875}
876
877if ((variant >= 0) && (variant <= 7)) {
878/* Write block number in the last two bytes of each 256-byte
879 * block, big endian for easier reading of the hexdump.
880 * Note that this wraps around for chips larger than 2^24 bytes
881 * (16 MB).
882 */
883for (i = 0; i < size / 256; i++) {
884buf[i * 256 + 254] = (i >> 8) & 0xff;
885buf[i * 256 + 255] = i & 0xff;
886}
887}
888
889return 0;
890}
891
892int check_max_decode(enum chipbustype buses, uint32_t size)
893{
894int limitexceeded = 0;
895
896if ((buses & BUS_PARALLEL) && (max_rom_decode.parallel < size)) {
897limitexceeded++;
898msg_pdbg("Chip size %u kB is bigger than supported "
899 "size %u kB of chipset/board/programmer "
900 "for %s interface, "
901 "probe/read/erase/write may fail. ", size / 1024,
902 max_rom_decode.parallel / 1024, "Parallel");
903}
904if ((buses & BUS_LPC) && (max_rom_decode.lpc < size)) {
905limitexceeded++;
906msg_pdbg("Chip size %u kB is bigger than supported "
907 "size %u kB of chipset/board/programmer "
908 "for %s interface, "
909 "probe/read/erase/write may fail. ", size / 1024,
910 max_rom_decode.lpc / 1024, "LPC");
911}
912if ((buses & BUS_FWH) && (max_rom_decode.fwh < size)) {
913limitexceeded++;
914msg_pdbg("Chip size %u kB is bigger than supported "
915 "size %u kB of chipset/board/programmer "
916 "for %s interface, "
917 "probe/read/erase/write may fail. ", size / 1024,
918 max_rom_decode.fwh / 1024, "FWH");
919}
920if ((buses & BUS_SPI) && (max_rom_decode.spi < size)) {
921limitexceeded++;
922msg_pdbg("Chip size %u kB is bigger than supported "
923 "size %u kB of chipset/board/programmer "
924 "for %s interface, "
925 "probe/read/erase/write may fail. ", size / 1024,
926 max_rom_decode.spi / 1024, "SPI");
927}
928if (!limitexceeded)
929return 0;
930/* Sometimes chip and programmer have more than one bus in common,
931 * and the limit is not exceeded on all buses. Tell the user.
932 */
933if (bitcount(buses) > limitexceeded)
934/* FIXME: This message is designed towards CLI users. */
935msg_pdbg("There is at least one common chip/programmer "
936 "interface which can support a chip of this size. "
937 "You can try --force at your own risk.\n");
938return 1;
939}
940
941int probe_flash(struct registered_programmer *pgm, int startchip,
942struct flashctx *fill_flash, int force)
943{
944const struct flashchip *flash;
945unsigned long base = 0;
946char location[64];
947uint32_t size;
948enum chipbustype buses_common;
949char *tmp;
950
951for (flash = flashchips + startchip; flash && flash->name; flash++) {
952if (chip_to_probe && strcmp(flash->name, chip_to_probe) != 0)
953continue;
954buses_common = pgm->buses_supported & flash->bustype;
955if (!buses_common)
956continue;
957msg_gdbg("Probing for %s %s, %d kB: ",
958 flash->vendor, flash->name, flash->total_size);
959if (!flash->probe && !force) {
960msg_gdbg("failed! flashrom has no probe function for "
961 "this flash chip.\n");
962continue;
963}
964
965size = flash->total_size * 1024;
966check_max_decode(buses_common, size);
967
968/* Start filling in the dynamic data. */
969memcpy(fill_flash, flash, sizeof(struct flashchip));
970fill_flash->pgm = pgm;
971
972base = flashbase ? flashbase : (0xffffffff - size + 1);
973fill_flash->virtual_memory = (chipaddr)programmer_map_flash_region("flash chip", base, size);
974
975if (force)
976break;
977
978if (fill_flash->probe(fill_flash) != 1)
979goto notfound;
980
981/* If this is the first chip found, accept it.
982 * If this is not the first chip found, accept it only if it is
983 * a non-generic match.
984 * We could either make chipcount global or provide it as
985 * parameter, or we assume that startchip==0 means this call to
986 * probe_flash() is the first one and thus no chip has been
987 * found before.
988 */
989if (startchip == 0 || fill_flash->model_id != GENERIC_DEVICE_ID)
990break;
991
992notfound:
993programmer_unmap_flash_region((void *)fill_flash->virtual_memory, size);
994}
995
996if (!flash || !flash->name)
997return -1;
998
999#if CONFIG_INTERNAL == 1
1000if (programmer_table[programmer].map_flash_region == physmap)
1001snprintf(location, sizeof(location), "at physical address 0x%lx", base);
1002else
1003#endif
1004snprintf(location, sizeof(location), "on %s", programmer_table[programmer].name);
1005
1006tmp = flashbuses_to_text(flash->bustype);
1007msg_cinfo("%s %s flash chip \"%s\" (%d kB, %s) %s.\n",
1008 force ? "Assuming" : "Found", fill_flash->vendor,
1009 fill_flash->name, fill_flash->total_size, tmp, location);
1010free(tmp);
1011
1012/* Flash registers will not be mapped if the chip was forced. Lock info
1013 * may be stored in registers, so avoid lock info printing.
1014 */
1015if (!force)
1016if (fill_flash->printlock)
1017fill_flash->printlock(fill_flash);
1018
1019/* Return position of matching chip. */
1020return flash - flashchips;
1021}
1022
1023int verify_flash(struct flashctx *flash, uint8_t *buf)
1024{
1025int ret;
1026unsigned int total_size = flash->total_size * 1024;
1027
1028msg_cinfo("Verifying flash... ");
1029
1030ret = verify_range(flash, buf, 0, total_size, NULL);
1031
1032if (!ret)
1033msg_cinfo("VERIFIED. \n");
1034
1035return ret;
1036}
1037
1038int read_buf_from_file(unsigned char *buf, unsigned long size,
1039 const char *filename)
1040{
1041unsigned long numbytes;
1042FILE *image;
1043struct stat image_stat;
1044
1045if ((image = fopen(filename, "rb")) == NULL) {
1046perror(filename);
1047return 1;
1048}
1049if (fstat(fileno(image), &image_stat) != 0) {
1050perror(filename);
1051fclose(image);
1052return 1;
1053}
1054if (image_stat.st_size != size) {
1055msg_gerr("Error: Image size doesn't match\n");
1056fclose(image);
1057return 1;
1058}
1059numbytes = fread(buf, 1, size, image);
1060if (fclose(image)) {
1061perror(filename);
1062return 1;
1063}
1064if (numbytes != size) {
1065msg_gerr("Error: Failed to read complete file. Got %ld bytes, "
1066 "wanted %ld!\n", numbytes, size);
1067return 1;
1068}
1069return 0;
1070}
1071
1072int write_buf_to_file(unsigned char *buf, unsigned long size,
1073 const char *filename)
1074{
1075unsigned long numbytes;
1076FILE *image;
1077
1078if (!filename) {
1079msg_gerr("No filename specified.\n");
1080return 1;
1081}
1082if ((image = fopen(filename, "wb")) == NULL) {
1083perror(filename);
1084return 1;
1085}
1086
1087numbytes = fwrite(buf, 1, size, image);
1088fclose(image);
1089if (numbytes != size) {
1090msg_gerr("File %s could not be written completely.\n",
1091 filename);
1092return 1;
1093}
1094return 0;
1095}
1096
1097int read_flash_to_file(struct flashctx *flash, const char *filename)
1098{
1099unsigned long size = flash->total_size * 1024;
1100unsigned char *buf = calloc(size, sizeof(char));
1101int ret = 0;
1102
1103msg_cinfo("Reading flash... ");
1104if (!buf) {
1105msg_gerr("Memory allocation failed!\n");
1106msg_cinfo("FAILED.\n");
1107return 1;
1108}
1109if (!flash->read) {
1110msg_cerr("No read function available for this flash chip.\n");
1111ret = 1;
1112goto out_free;
1113}
1114if (flash->read(flash, buf, 0, size)) {
1115msg_cerr("Read operation failed!\n");
1116ret = 1;
1117goto out_free;
1118}
1119
1120ret = write_buf_to_file(buf, size, filename);
1121out_free:
1122free(buf);
1123msg_cinfo("%s.\n", ret ? "FAILED" : "done");
1124return ret;
1125}
1126
1127/* This function shares a lot of its structure with erase_and_write_flash() and
1128 * walk_eraseregions().
1129 * Even if an error is found, the function will keep going and check the rest.
1130 */
1131static int selfcheck_eraseblocks(const struct flashchip *flash)
1132{
1133int i, j, k;
1134int ret = 0;
1135
1136for (k = 0; k < NUM_ERASEFUNCTIONS; k++) {
1137unsigned int done = 0;
1138struct block_eraser eraser = flash->block_erasers[k];
1139
1140for (i = 0; i < NUM_ERASEREGIONS; i++) {
1141/* Blocks with zero size are bugs in flashchips.c. */
1142if (eraser.eraseblocks[i].count &&
1143 !eraser.eraseblocks[i].size) {
1144msg_gerr("ERROR: Flash chip %s erase function "
1145"%i region %i has size 0. Please report"
1146" a bug at flashrom@flashrom.org\n",
1147flash->name, k, i);
1148ret = 1;
1149}
1150/* Blocks with zero count are bugs in flashchips.c. */
1151if (!eraser.eraseblocks[i].count &&
1152 eraser.eraseblocks[i].size) {
1153msg_gerr("ERROR: Flash chip %s erase function "
1154"%i region %i has count 0. Please report"
1155" a bug at flashrom@flashrom.org\n",
1156flash->name, k, i);
1157ret = 1;
1158}
1159done += eraser.eraseblocks[i].count *
1160eraser.eraseblocks[i].size;
1161}
1162/* Empty eraseblock definition with erase function. */
1163if (!done && eraser.block_erase)
1164msg_gspew("Strange: Empty eraseblock definition with "
1165 "non-empty erase function. Not an error.\n");
1166if (!done)
1167continue;
1168if (done != flash->total_size * 1024) {
1169msg_gerr("ERROR: Flash chip %s erase function %i "
1170"region walking resulted in 0x%06x bytes total,"
1171" expected 0x%06x bytes. Please report a bug at"
1172" flashrom@flashrom.org\n", flash->name, k,
1173done, flash->total_size * 1024);
1174ret = 1;
1175}
1176if (!eraser.block_erase)
1177continue;
1178/* Check if there are identical erase functions for different
1179 * layouts. That would imply "magic" erase functions. The
1180 * easiest way to check this is with function pointers.
1181 */
1182for (j = k + 1; j < NUM_ERASEFUNCTIONS; j++) {
1183if (eraser.block_erase ==
1184 flash->block_erasers[j].block_erase) {
1185msg_gerr("ERROR: Flash chip %s erase function "
1186"%i and %i are identical. Please report"
1187" a bug at flashrom@flashrom.org\n",
1188flash->name, k, j);
1189ret = 1;
1190}
1191}
1192}
1193return ret;
1194}
1195
1196static int erase_and_write_block_helper(struct flashctx *flash,
1197unsigned int start, unsigned int len,
1198uint8_t *curcontents,
1199uint8_t *newcontents,
1200int (*erasefn) (struct flashctx *flash,
1201unsigned int addr,
1202unsigned int len))
1203{
1204unsigned int starthere = 0, lenhere = 0;
1205int ret = 0, skip = 1, writecount = 0;
1206enum write_granularity gran = write_gran_256bytes; /* FIXME */
1207
1208/* curcontents and newcontents are opaque to walk_eraseregions, and
1209 * need to be adjusted here to keep the impression of proper abstraction
1210 */
1211curcontents += start;
1212newcontents += start;
1213msg_cdbg(":");
1214/* FIXME: Assume 256 byte granularity for now to play it safe. */
1215if (need_erase(curcontents, newcontents, len, gran)) {
1216msg_cdbg("E");
1217ret = erasefn(flash, start, len);
1218if (ret)
1219return ret;
1220if (check_erased_range(flash, start, len)) {
1221msg_cerr("ERASE FAILED!\n");
1222return -1;
1223}
1224/* Erase was successful. Adjust curcontents. */
1225memset(curcontents, 0xff, len);
1226skip = 0;
1227}
1228/* get_next_write() sets starthere to a new value after the call. */
1229while ((lenhere = get_next_write(curcontents + starthere,
1230 newcontents + starthere,
1231 len - starthere, &starthere, gran))) {
1232if (!writecount++)
1233msg_cdbg("W");
1234/* Needs the partial write function signature. */
1235ret = flash->write(flash, newcontents + starthere,
1236 start + starthere, lenhere);
1237if (ret)
1238return ret;
1239starthere += lenhere;
1240skip = 0;
1241}
1242if (skip)
1243msg_cdbg("S");
1244return ret;
1245}
1246
1247static int walk_eraseregions(struct flashctx *flash, int erasefunction,
1248 int (*do_something) (struct flashctx *flash,
1249 unsigned int addr,
1250 unsigned int len,
1251 uint8_t *param1,
1252 uint8_t *param2,
1253 int (*erasefn) (
1254struct flashctx *flash,
1255unsigned int addr,
1256unsigned int len)),
1257 void *param1, void *param2)
1258{
1259int i, j;
1260unsigned int start = 0;
1261unsigned int len;
1262struct block_eraser eraser = flash->block_erasers[erasefunction];
1263
1264for (i = 0; i < NUM_ERASEREGIONS; i++) {
1265/* count==0 for all automatically initialized array
1266 * members so the loop below won't be executed for them.
1267 */
1268len = eraser.eraseblocks[i].size;
1269for (j = 0; j < eraser.eraseblocks[i].count; j++) {
1270/* Print this for every block except the first one. */
1271if (i || j)
1272msg_cdbg(", ");
1273msg_cdbg("0x%06x-0x%06x", start,
1274 start + len - 1);
1275if (do_something(flash, start, len, param1, param2,
1276 eraser.block_erase)) {
1277return 1;
1278}
1279start += len;
1280}
1281}
1282msg_cdbg("\n");
1283return 0;
1284}
1285
1286static int check_block_eraser(const struct flashctx *flash, int k, int log)
1287{
1288struct block_eraser eraser = flash->block_erasers[k];
1289
1290if (!eraser.block_erase && !eraser.eraseblocks[0].count) {
1291if (log)
1292msg_cdbg("not defined. ");
1293return 1;
1294}
1295if (!eraser.block_erase && eraser.eraseblocks[0].count) {
1296if (log)
1297msg_cdbg("eraseblock layout is known, but matching "
1298 "block erase function is not implemented. ");
1299return 1;
1300}
1301if (eraser.block_erase && !eraser.eraseblocks[0].count) {
1302if (log)
1303msg_cdbg("block erase function found, but "
1304 "eraseblock layout is not defined. ");
1305return 1;
1306}
1307return 0;
1308}
1309
1310int erase_and_write_flash(struct flashctx *flash, uint8_t *oldcontents,
1311 uint8_t *newcontents)
1312{
1313int k, ret = 1;
1314uint8_t *curcontents;
1315unsigned long size = flash->total_size * 1024;
1316unsigned int usable_erasefunctions = count_usable_erasers(flash);
1317
1318msg_cinfo("Erasing and writing flash chip... ");
1319curcontents = malloc(size);
1320if (!curcontents) {
1321msg_gerr("Out of memory!\n");
1322exit(1);
1323}
1324/* Copy oldcontents to curcontents to avoid clobbering oldcontents. */
1325memcpy(curcontents, oldcontents, size);
1326
1327for (k = 0; k < NUM_ERASEFUNCTIONS; k++) {
1328if (k != 0)
1329msg_cdbg("Looking for another erase function.\n");
1330if (!usable_erasefunctions) {
1331msg_cdbg("No usable erase functions left.\n");
1332break;
1333}
1334msg_cdbg("Trying erase function %i... ", k);
1335if (check_block_eraser(flash, k, 1))
1336continue;
1337usable_erasefunctions--;
1338ret = walk_eraseregions(flash, k, &erase_and_write_block_helper,
1339curcontents, newcontents);
1340/* If everything is OK, don't try another erase function. */
1341if (!ret)
1342break;
1343/* Write/erase failed, so try to find out what the current chip
1344 * contents are. If no usable erase functions remain, we can
1345 * skip this: the next iteration will break immediately anyway.
1346 */
1347if (!usable_erasefunctions)
1348continue;
1349/* Reading the whole chip may take a while, inform the user even
1350 * in non-verbose mode.
1351 */
1352msg_cinfo("Reading current flash chip contents... ");
1353if (flash->read(flash, curcontents, 0, size)) {
1354/* Now we are truly screwed. Read failed as well. */
1355msg_cerr("Can't read anymore! Aborting.\n");
1356/* We have no idea about the flash chip contents, so
1357 * retrying with another erase function is pointless.
1358 */
1359break;
1360}
1361msg_cinfo("done. ");
1362}
1363/* Free the scratchpad. */
1364free(curcontents);
1365
1366if (ret) {
1367msg_cerr("FAILED!\n");
1368} else {
1369msg_cinfo("Erase/write done.\n");
1370}
1371return ret;
1372}
1373
1374void nonfatal_help_message(void)
1375{
1376msg_gerr("Writing to the flash chip apparently didn't do anything.\n"
1377"This means we have to add special support for your board, "
1378 "programmer or flash chip.\n"
1379"Please report this on IRC at irc.freenode.net (channel "
1380 "#flashrom) or\n"
1381"mail flashrom@flashrom.org!\n"
1382"-------------------------------------------------------------"
1383 "------------------\n"
1384"You may now reboot or simply leave the machine running.\n");
1385}
1386
1387void emergency_help_message(void)
1388{
1389msg_gerr("Your flash chip is in an unknown state.\n"
1390"Get help on IRC at irc.freenode.net (channel #flashrom) or\n"
1391"mail flashrom@flashrom.org with FAILED: your board name in "
1392 "the subject line!\n"
1393"-------------------------------------------------------------"
1394 "------------------\n"
1395"DO NOT REBOOT OR POWEROFF!\n");
1396}
1397
1398/* The way to go if you want a delimited list of programmers */
1399void list_programmers(const char *delim)
1400{
1401enum programmer p;
1402for (p = 0; p < PROGRAMMER_INVALID; p++) {
1403msg_ginfo("%s", programmer_table[p].name);
1404if (p < PROGRAMMER_INVALID - 1)
1405msg_ginfo("%s", delim);
1406}
1407msg_ginfo("\n");
1408}
1409
1410void list_programmers_linebreak(int startcol, int cols, int paren)
1411{
1412const char *pname;
1413int pnamelen;
1414int remaining = 0, firstline = 1;
1415enum programmer p;
1416int i;
1417
1418for (p = 0; p < PROGRAMMER_INVALID; p++) {
1419pname = programmer_table[p].name;
1420pnamelen = strlen(pname);
1421if (remaining - pnamelen - 2 < 0) {
1422if (firstline)
1423firstline = 0;
1424else
1425printf("\n");
1426for (i = 0; i < startcol; i++)
1427printf(" ");
1428remaining = cols - startcol;
1429} else {
1430printf(" ");
1431remaining--;
1432}
1433if (paren && (p == 0)) {
1434printf("(");
1435remaining--;
1436}
1437printf("%s", pname);
1438remaining -= pnamelen;
1439if (p < PROGRAMMER_INVALID - 1) {
1440printf(",");
1441remaining--;
1442} else {
1443if (paren)
1444printf(")");
1445printf("\n");
1446}
1447}
1448}
1449
1450void print_sysinfo(void)
1451{
1452#if HAVE_UTSNAME == 1
1453struct utsname osinfo;
1454uname(&osinfo);
1455
1456msg_ginfo(" on %s %s (%s)", osinfo.sysname, osinfo.release,
1457 osinfo.machine);
1458#else
1459msg_ginfo(" on unknown machine");
1460#endif
1461msg_ginfo(", built with");
1462#if NEED_PCI == 1
1463#ifdef PCILIB_VERSION
1464msg_ginfo(" libpci %s,", PCILIB_VERSION);
1465#else
1466msg_ginfo(" unknown PCI library,");
1467#endif
1468#endif
1469#ifdef __clang__
1470msg_ginfo(" LLVM Clang");
1471#ifdef __clang_version__
1472msg_ginfo(" %s,", __clang_version__);
1473#else
1474msg_ginfo(" unknown version (before r102686),");
1475#endif
1476#elif defined(__GNUC__)
1477msg_ginfo(" GCC");
1478#ifdef __VERSION__
1479msg_ginfo(" %s,", __VERSION__);
1480#else
1481msg_ginfo(" unknown version,");
1482#endif
1483#else
1484msg_ginfo(" unknown compiler,");
1485#endif
1486#if defined (__FLASHROM_LITTLE_ENDIAN__)
1487msg_ginfo(" little endian");
1488#else
1489msg_ginfo(" big endian");
1490#endif
1491msg_ginfo("\n");
1492}
1493
1494void print_version(void)
1495{
1496msg_ginfo("flashrom v%s", flashrom_version);
1497print_sysinfo();
1498}
1499
1500void print_banner(void)
1501{
1502msg_ginfo("flashrom is free software, get the source code at "
1503 "http://www.flashrom.org\n");
1504msg_ginfo("\n");
1505}
1506
1507int selfcheck(void)
1508{
1509int ret = 0;
1510const struct flashchip *flash;
1511
1512/* Safety check. Instead of aborting after the first error, check
1513 * if more errors exist.
1514 */
1515if (ARRAY_SIZE(programmer_table) - 1 != PROGRAMMER_INVALID) {
1516msg_gerr("Programmer table miscompilation!\n");
1517ret = 1;
1518}
1519/* It would be favorable if we could also check for correct termination
1520 * of the following arrays, but we don't know their sizes in here...
1521 * For 'flashchips' we check the first element to be non-null. In the
1522 * other cases there exist use cases where the first element can be
1523 * null. */
1524if (flashchips == NULL || flashchips[0].vendor == NULL) {
1525msg_gerr("Flashchips table miscompilation!\n");
1526ret = 1;
1527}
1528/* Check that virtual_memory in struct flashctx is placed directly
1529 * after the members copied from struct flashchip.
1530 */
1531if (sizeof(struct flashchip) !=
1532 offsetof(struct flashctx, virtual_memory)) {
1533msg_gerr("struct flashctx broken!\n");
1534ret = 1;
1535}
1536for (flash = flashchips; flash && flash->name; flash++)
1537if (selfcheck_eraseblocks(flash))
1538ret = 1;
1539
1540#if CONFIG_INTERNAL == 1
1541if (chipset_enables == NULL) {
1542msg_gerr("Chipset enables table does not exist!\n");
1543ret = 1;
1544}
1545if (board_matches == NULL) {
1546msg_gerr("Board enables table does not exist!\n");
1547ret = 1;
1548}
1549if (boards_known == NULL) {
1550msg_gerr("Known boards table does not exist!\n");
1551ret = 1;
1552}
1553if (laptops_known == NULL) {
1554msg_gerr("Known laptops table does not exist!\n");
1555ret = 1;
1556}
1557#endif
1558return ret;
1559}
1560
1561void check_chip_supported(const struct flashctx *flash)
1562{
1563if (TEST_OK_MASK != (flash->tested & TEST_OK_MASK)) {
1564msg_cinfo("===\n");
1565if (flash->tested & TEST_BAD_MASK) {
1566msg_cinfo("This flash part has status NOT WORKING for operations:");
1567if (flash->tested & TEST_BAD_PROBE)
1568msg_cinfo(" PROBE");
1569if (flash->tested & TEST_BAD_READ)
1570msg_cinfo(" READ");
1571if (flash->tested & TEST_BAD_ERASE)
1572msg_cinfo(" ERASE");
1573if (flash->tested & TEST_BAD_WRITE)
1574msg_cinfo(" WRITE");
1575msg_cinfo("\n");
1576}
1577if ((!(flash->tested & TEST_BAD_PROBE) && !(flash->tested & TEST_OK_PROBE)) ||
1578 (!(flash->tested & TEST_BAD_READ) && !(flash->tested & TEST_OK_READ)) ||
1579 (!(flash->tested & TEST_BAD_ERASE) && !(flash->tested & TEST_OK_ERASE)) ||
1580 (!(flash->tested & TEST_BAD_WRITE) && !(flash->tested & TEST_OK_WRITE))) {
1581msg_cinfo("This flash part has status UNTESTED for operations:");
1582if (!(flash->tested & TEST_BAD_PROBE) && !(flash->tested & TEST_OK_PROBE))
1583msg_cinfo(" PROBE");
1584if (!(flash->tested & TEST_BAD_READ) && !(flash->tested & TEST_OK_READ))
1585msg_cinfo(" READ");
1586if (!(flash->tested & TEST_BAD_ERASE) && !(flash->tested & TEST_OK_ERASE))
1587msg_cinfo(" ERASE");
1588if (!(flash->tested & TEST_BAD_WRITE) && !(flash->tested & TEST_OK_WRITE))
1589msg_cinfo(" WRITE");
1590msg_cinfo("\n");
1591}
1592/* FIXME: This message is designed towards CLI users. */
1593msg_cinfo("The test status of this chip may have been updated "
1594 "in the latest development\n"
1595 "version of flashrom. If you are running the latest "
1596 "development version,\n"
1597 "please email a report to flashrom@flashrom.org if "
1598 "any of the above operations\n"
1599 "work correctly for you with this flash part. Please "
1600 "include the flashrom\n"
1601 "output with the additional -V option for all "
1602 "operations you tested (-V, -Vr,\n"
1603 "-VE, -Vw), and mention which mainboard or "
1604 "programmer you tested.\n"
1605 "Please mention your board in the subject line. "
1606 "Thanks for your help!\n");
1607}
1608}
1609
1610/* FIXME: This function signature needs to be improved once doit() has a better
1611 * function signature.
1612 */
1613int chip_safety_check(struct flashctx *flash, int force, int read_it,
1614 int write_it, int erase_it, int verify_it)
1615{
1616if (!programmer_may_write && (write_it || erase_it)) {
1617msg_perr("Write/erase is not working yet on your programmer in "
1618 "its current configuration.\n");
1619/* --force is the wrong approach, but it's the best we can do
1620 * until the generic programmer parameter parser is merged.
1621 */
1622if (!force)
1623return 1;
1624msg_cerr("Continuing anyway.\n");
1625}
1626
1627if (read_it || erase_it || write_it || verify_it) {
1628/* Everything needs read. */
1629if (flash->tested & TEST_BAD_READ) {
1630msg_cerr("Read is not working on this chip. ");
1631if (!force)
1632return 1;
1633msg_cerr("Continuing anyway.\n");
1634}
1635if (!flash->read) {
1636msg_cerr("flashrom has no read function for this "
1637 "flash chip.\n");
1638return 1;
1639}
1640}
1641if (erase_it || write_it) {
1642/* Write needs erase. */
1643if (flash->tested & TEST_BAD_ERASE) {
1644msg_cerr("Erase is not working on this chip. ");
1645if (!force)
1646return 1;
1647msg_cerr("Continuing anyway.\n");
1648}
1649if(count_usable_erasers(flash) == 0) {
1650msg_cerr("flashrom has no erase function for this "
1651 "flash chip.\n");
1652return 1;
1653}
1654}
1655if (write_it) {
1656if (flash->tested & TEST_BAD_WRITE) {
1657msg_cerr("Write is not working on this chip. ");
1658if (!force)
1659return 1;
1660msg_cerr("Continuing anyway.\n");
1661}
1662if (!flash->write) {
1663msg_cerr("flashrom has no write function for this "
1664 "flash chip.\n");
1665return 1;
1666}
1667}
1668return 0;
1669}
1670
1671/* This function signature is horrible. We need to design a better interface,
1672 * but right now it allows us to split off the CLI code.
1673 * Besides that, the function itself is a textbook example of abysmal code flow.
1674 */
1675int doit(struct flashctx *flash, int force, const char *filename, int read_it,
1676 int write_it, int erase_it, int verify_it)
1677{
1678uint8_t *oldcontents;
1679uint8_t *newcontents;
1680int ret = 0;
1681unsigned long size = flash->total_size * 1024;
1682
1683if (chip_safety_check(flash, force, read_it, write_it, erase_it, verify_it)) {
1684msg_cerr("Aborting.\n");
1685ret = 1;
1686goto out_nofree;
1687}
1688
1689/* Given the existence of read locks, we want to unlock for read,
1690 * erase and write.
1691 */
1692if (flash->unlock)
1693flash->unlock(flash);
1694
1695if (read_it) {
1696ret = read_flash_to_file(flash, filename);
1697goto out_nofree;
1698}
1699
1700oldcontents = malloc(size);
1701if (!oldcontents) {
1702msg_gerr("Out of memory!\n");
1703exit(1);
1704}
1705/* Assume worst case: All bits are 0. */
1706memset(oldcontents, 0x00, size);
1707newcontents = malloc(size);
1708if (!newcontents) {
1709msg_gerr("Out of memory!\n");
1710exit(1);
1711}
1712/* Assume best case: All bits should be 1. */
1713memset(newcontents, 0xff, size);
1714/* Side effect of the assumptions above: Default write action is erase
1715 * because newcontents looks like a completely erased chip, and
1716 * oldcontents being completely 0x00 means we have to erase everything
1717 * before we can write.
1718 */
1719
1720if (erase_it) {
1721/* FIXME: Do we really want the scary warning if erase failed?
1722 * After all, after erase the chip is either blank or partially
1723 * blank or it has the old contents. A blank chip won't boot,
1724 * so if the user wanted erase and reboots afterwards, the user
1725 * knows very well that booting won't work.
1726 */
1727if (erase_and_write_flash(flash, oldcontents, newcontents)) {
1728emergency_help_message();
1729ret = 1;
1730}
1731goto out;
1732}
1733
1734if (write_it || verify_it) {
1735if (read_buf_from_file(newcontents, size, filename)) {
1736ret = 1;
1737goto out;
1738}
1739
1740#if CONFIG_INTERNAL == 1
1741if (programmer == PROGRAMMER_INTERNAL)
1742show_id(newcontents, size, force);
1743#endif
1744}
1745
1746/* Read the whole chip to be able to check whether regions need to be
1747 * erased and to give better diagnostics in case write fails.
1748 * The alternative would be to read only the regions which are to be
1749 * preserved, but in that case we might perform unneeded erase which
1750 * takes time as well.
1751 */
1752msg_cinfo("Reading old flash chip contents... ");
1753if (flash->read(flash, oldcontents, 0, size)) {
1754ret = 1;
1755msg_cinfo("FAILED.\n");
1756goto out;
1757}
1758msg_cinfo("done.\n");
1759
1760// This should be moved into each flash part's code to do it
1761// cleanly. This does the job.
1762handle_romentries(flash, oldcontents, newcontents);
1763
1764// ////////////////////////////////////////////////////////////
1765
1766if (write_it) {
1767if (erase_and_write_flash(flash, oldcontents, newcontents)) {
1768msg_cerr("Uh oh. Erase/write failed. Checking if "
1769 "anything changed.\n");
1770if (!flash->read(flash, newcontents, 0, size)) {
1771if (!memcmp(oldcontents, newcontents, size)) {
1772msg_cinfo("Good. It seems nothing was "
1773 "changed.\n");
1774nonfatal_help_message();
1775ret = 1;
1776goto out;
1777}
1778}
1779emergency_help_message();
1780ret = 1;
1781goto out;
1782}
1783}
1784
1785if (verify_it) {
1786/* Work around chips which need some time to calm down. */
1787if (write_it)
1788programmer_delay(1000*1000);
1789ret = verify_flash(flash, newcontents);
1790/* If we tried to write, and verification now fails, we
1791 * might have an emergency situation.
1792 */
1793if (ret && write_it)
1794emergency_help_message();
1795}
1796
1797out:
1798free(oldcontents);
1799free(newcontents);
1800out_nofree:
1801programmer_shutdown();
1802return ret;
1803}
1804

Archive Download this file

Revision: HEAD