Always verify write operations automatically

Should this be undesireable because of speed reasons, --noverify can be
used to suppress an auto-verify.

Corresponding to flashrom svn r631.

Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de>
Acked-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
Acked-by: Harald Gutmann <harald.gutmann@gmx.net>
diff --git a/flashrom.8 b/flashrom.8
index 423ee29..3dd76f7 100644
--- a/flashrom.8
+++ b/flashrom.8
@@ -2,9 +2,8 @@
 .SH NAME
 flashrom \- detect, read, write, verify and erase flash chips
 .SH SYNOPSIS
-.B flashrom \fR[\fB\-VfLzhR\fR] [\fB\-E\fR|\fB\-r\fR file|\fB\-w\fR file|\fB\-v\fR file]
-         [\fB\-c\fR chipname] [\fB\-m\fR [vendor:]part]
-         [\fB\-l\fR file] [\fB\-i\fR image] [\fB\-p\fR programmer]
+.B flashrom \fR[\fB\-VfLzhRn\fR] [\fB\-E\fR|\fB\-r\fR file|\fB\-w\fR file|\fB\-v\fR file] [\fB\-c\fR chipname]
+         [\fB\-m\fR [vendor:]part] [\fB\-l\fR file] [\fB\-i\fR image] [\fB\-p\fR programmer]
 .SH DESCRIPTION
 .B flashrom
 is a utility for detecting, reading, writing, verifying and erasing flash
@@ -38,6 +37,21 @@
 .B <file>
 is specified).
 .TP
+.B "\-n, \-\-noverify"
+Do
+.B not
+verify the flash ROM contents after writing them to the chip. Using this
+option is
+.B not
+recommended, you should only use it if you know what you are doing and you
+feel that the time for verification takes too long.
+.sp
+Typical usage is:
+.B "flashrom -wn file"
+.sp
+This option is only useful in combination with
+.BR \-\-write .
+.TP
 .B "\-v, \-\-verify <file>"
 Verify the flash ROM contents against the given
 .BR <file> .
diff --git a/flashrom.c b/flashrom.c
index 97b086f..7bc9b71 100644
--- a/flashrom.c
+++ b/flashrom.c
@@ -480,6 +480,7 @@
 	    ("   -r | --read:                      read flash and save into file\n"
 	     "   -w | --write:                     write file into flash\n"
 	     "   -v | --verify:                    verify flash against file\n"
+	     "   -n | --noverify:                  don't verify flash against file\n"
 	     "   -E | --erase:                     erase flash device\n"
 	     "   -V | --verbose:                   more verbose output\n"
 	     "   -c | --chip <chipname>:           probe only for specified flash chip\n"
@@ -515,7 +516,7 @@
 	int option_index = 0;
 	int force = 0;
 	int read_it = 0, write_it = 0, erase_it = 0, verify_it = 0;
-	int list_supported = 0, list_supported_wiki = 0;
+	int dont_verify_it = 0, list_supported = 0, list_supported_wiki = 0;
 	int operation_specified = 0;
 	int ret = 0, i;
 
@@ -524,6 +525,7 @@
 		{"write", 0, 0, 'w'},
 		{"erase", 0, 0, 'E'},
 		{"verify", 0, 0, 'v'},
+		{"noverify", 0, 0, 'n'},
 		{"chip", 1, 0, 'c'},
 		{"mainboard", 1, 0, 'm'},
 		{"verbose", 0, 0, 'V'},
@@ -553,7 +555,7 @@
 	}
 
 	setbuf(stdout, NULL);
-	while ((opt = getopt_long(argc, argv, "rRwvVEfc:m:l:i:p:Lzh",
+	while ((opt = getopt_long(argc, argv, "rRwvnVEfc:m:l:i:p:Lzh",
 				  long_options, &option_index)) != EOF) {
 		switch (opt) {
 		case 'r':
@@ -580,6 +582,9 @@
 			}
 			verify_it = 1;
 			break;
+		case 'n':
+			dont_verify_it = 1;
+			break;
 		case 'c':
 			chip_to_probe = strdup(optarg);
 			break;
@@ -779,6 +784,10 @@
 		exit(1);
 	}
 
+	/* Always verify write operations unless -n is used. */
+	if (write_it && !dont_verify_it)
+		verify_it = 1;
+
 	size = flash->total_size * 1024;
 	buf = (uint8_t *) calloc(size, sizeof(char));