summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCarl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>2012-07-22 12:01:43 +0000
committerCarl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>2012-07-22 12:01:43 +0000
commit4e3391f50510914a20b0b0e6d0ed0d752b011243 (patch)
treeb2c3584edc8b1167b9c8016d8f509b879eff6dca
parentd6bb828b017eaf89d5a4c52803ebc0029725383b (diff)
downloadast2050-flashrom-4e3391f50510914a20b0b0e6d0ed0d752b011243.zip
ast2050-flashrom-4e3391f50510914a20b0b0e6d0ed0d752b011243.tar.gz
Always require the --programmer parameter if any flash chip access is requested
Fix a few man page oddities as well. Corresponding to flashrom svn r1552. Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> Acked-by: Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at>
-rw-r--r--cli_classic.c95
-rw-r--r--flashrom.875
-rw-r--r--flashrom.c4
3 files changed, 67 insertions, 107 deletions
diff --git a/cli_classic.c b/cli_classic.c
index b415076..cf3874c 100644
--- a/cli_classic.c
+++ b/cli_classic.c
@@ -31,87 +31,20 @@
#include "flashchips.h"
#include "programmer.h"
-#if CONFIG_INTERNAL == 1
-static enum programmer default_programmer = PROGRAMMER_INTERNAL;
-#elif CONFIG_DUMMY == 1
-static enum programmer default_programmer = PROGRAMMER_DUMMY;
-#else
-/* If neither internal nor dummy are selected, we must pick a sensible default.
- * Since there is no reason to prefer a particular external programmer, we fail
- * if more than one of them is selected. If only one is selected, it is clear
- * that the user wants that one to become the default.
- */
-#if CONFIG_NIC3COM+CONFIG_NICREALTEK+CONFIG_NICNATSEMI+CONFIG_GFXNVIDIA+CONFIG_DRKAISER+CONFIG_SATASII+CONFIG_ATAHPT+CONFIG_FT2232_SPI+CONFIG_SERPROG+CONFIG_BUSPIRATE_SPI+CONFIG_DEDIPROG+CONFIG_RAYER_SPI+CONFIG_NICINTEL+CONFIG_NICINTEL_SPI+CONFIG_OGP_SPI+CONFIG_SATAMV > 1
-#error Please enable either CONFIG_DUMMY or CONFIG_INTERNAL or disable support for all programmers except one.
-#endif
-static enum programmer default_programmer =
-#if CONFIG_NIC3COM == 1
- PROGRAMMER_NIC3COM
-#endif
-#if CONFIG_NICREALTEK == 1
- PROGRAMMER_NICREALTEK
-#endif
-#if CONFIG_NICNATSEMI == 1
- PROGRAMMER_NICNATSEMI
-#endif
-#if CONFIG_GFXNVIDIA == 1
- PROGRAMMER_GFXNVIDIA
-#endif
-#if CONFIG_DRKAISER == 1
- PROGRAMMER_DRKAISER
-#endif
-#if CONFIG_SATASII == 1
- PROGRAMMER_SATASII
-#endif
-#if CONFIG_ATAHPT == 1
- PROGRAMMER_ATAHPT
-#endif
-#if CONFIG_FT2232_SPI == 1
- PROGRAMMER_FT2232_SPI
-#endif
-#if CONFIG_SERPROG == 1
- PROGRAMMER_SERPROG
-#endif
-#if CONFIG_BUSPIRATE_SPI == 1
- PROGRAMMER_BUSPIRATE_SPI
-#endif
-#if CONFIG_DEDIPROG == 1
- PROGRAMMER_DEDIPROG
-#endif
-#if CONFIG_RAYER_SPI == 1
- PROGRAMMER_RAYER_SPI
-#endif
-#if CONFIG_NICINTEL == 1
- PROGRAMMER_NICINTEL
-#endif
-#if CONFIG_NICINTEL_SPI == 1
- PROGRAMMER_NICINTEL_SPI
-#endif
-#if CONFIG_OGP_SPI == 1
- PROGRAMMER_OGP_SPI
-#endif
-#if CONFIG_SATAMV == 1
- PROGRAMMER_SATAMV
-#endif
-#if CONFIG_LINUX_SPI == 1
- PROGRAMMER_LINUX_SPI
-#endif
-;
-#endif
-
static void cli_classic_usage(const char *name)
{
- printf("Usage: flashrom [-n] [-V] [-f] [-h|-R|-L|"
+ printf("Usage: flashrom [-h|-R|-L|"
#if CONFIG_PRINT_WIKI == 1
- "-z|"
+ "-z|"
#endif
- "-E|-r <file>|-w <file>|-v <file>]\n"
- " [-c <chipname>] [-l <file>] [-o <file>]\n"
- " [-i <image>] [-p <programmername>[:<parameters>]]\n\n");
+ "-p <programmername>[:<parameters>]\n"
+ " [-E|-r <file>|-w <file>|-v <file>] [-c <chipname>]\n"
+ " [-l <file> [-i <image>]] [-n] [-f]]\n"
+ " [-V[V[V]]] [-o <logfile>]\n\n");
printf("Please note that the command line interface for flashrom has "
"changed between\n"
- "0.9.1 and 0.9.2 and will change again before flashrom 1.0.\n"
+ "0.9.5 and 0.9.6 and will change again before flashrom 1.0.\n"
"Do not use flashrom in scripts or other automated tools "
"without checking\n"
"that your flashrom version won't interpret options in a "
@@ -360,8 +293,9 @@ int main(int argc, char *argv[])
}
}
if (prog == PROGRAMMER_INVALID) {
- fprintf(stderr, "Error: Unknown programmer "
- "%s.\n", optarg);
+ fprintf(stderr, "Error: Unknown programmer \"%s\". Valid choices are:\n",
+ optarg);
+ list_programmers_linebreak(0, 80, 0);
cli_classic_abort_usage();
}
break;
@@ -468,8 +402,13 @@ int main(int argc, char *argv[])
flash = NULL;
}
- if (prog == PROGRAMMER_INVALID)
- prog = default_programmer;
+ if (prog == PROGRAMMER_INVALID) {
+ msg_perr("Please select a programmer with the --programmer parameter.\n"
+ "Valid choices are:\n");
+ list_programmers_linebreak(0, 80, 0);
+ ret = 1;
+ goto out;
+ }
/* FIXME: Delay calibration should happen in programmer code. */
myusec_calibrate_delay();
diff --git a/flashrom.8 b/flashrom.8
index e104bce..93df1a2 100644
--- a/flashrom.8
+++ b/flashrom.8
@@ -2,13 +2,12 @@
.SH NAME
flashrom \- detect, read, write, verify and erase flash chips
.SH SYNOPSIS
-.B flashrom \fR[\fB\-n\fR] [\fB\-V\fR] [\fB\-f\fR] [\fB\-h\fR|\fB\-R\fR|\
-\fB\-L\fR|\fB\-z\fR|\fB\-E\fR|\fB\-r\fR <file>|\fB\-w\fR <file>|\
-\fB\-v\fR <file>]
- [\fB\-c\fR <chipname>] \
-[\fB\-l\fR <file>]
- [\fB\-i\fR <image>] [\fB\-p\fR <programmername>[:<parameters>]]
- [\fB-o\fR <logfile>]
+.B flashrom \fR[\fB\-h\fR|\fB\-R\fR|\fB\-L\fR|\fB\-z\fR|\
+\fB\-p\fR <programmername>[:<parameters>]
+ [\fB\-E\fR|\fB\-r\fR <file>|\fB\-w\fR <file>|\fB\-v\fR <file>] \
+[\fB\-c\fR <chipname>]
+ [\fB\-l\fR <file> [\fB\-i\fR <image>]] [\fB\-n\fR] [\fB\-f\fR]]
+ [\fB\-V\fR[\fBV\fR[\fBV\fR]]] [\fB-o\fR <logfile>]
.SH DESCRIPTION
.B flashrom
is a utility for detecting, reading, writing, verifying and erasing flash
@@ -64,7 +63,7 @@ recommended, you should only use it if you know what you are doing and if you
feel that the time for verification takes too long.
.sp
Typical usage is:
-.B "flashrom \-n \-w <file>"
+.B "flashrom \-p prog \-n \-w <file>"
.sp
This option is only useful in combination with
.BR \-\-write .
@@ -106,31 +105,39 @@ Read ROM layout from
.BR <file> .
.sp
flashrom supports ROM layouts. This allows you to flash certain parts of
-the flash chip only. A ROM layout file looks like follows:
+the flash chip only. A ROM layout file contains multiple lines with the
+following syntax:
+.sp
+.B " startaddr:endaddr imagename"
+.sp
+.BR "startaddr " "and " "endaddr "
+are hexadecimal addresses within the ROM file and do not refer to any
+physical address. Please note that using a 0x prefix for those hexadecimal
+numbers is not necessary, but you can't specify decimal/octal numbers.
+.BR "imagename " "is an arbitrary name for the region/image from"
+.BR " startaddr " "to " "endaddr " "(both addresses included)."
+.sp
+Example:
.sp
00000000:00008fff gfxrom
00009000:0003ffff normal
00040000:0007ffff fallback
.sp
- i.e.:
- startaddr:endaddr name
-.sp
-All addresses are offsets within the file, not absolute addresses!
-If you only want to update the normal image in a ROM you can say:
+If you only want to update the image named
+.BR "normal " "in a ROM based on the layout above, run"
.sp
-.B " flashrom \-\-layout rom.layout \-\-image normal \-w agami_aruma.rom"
+.B " flashrom \-p prog \-\-layout rom.layout \-\-image normal \-w some.rom"
.sp
-To update normal and fallback but leave the VGA BIOS alone, say:
+To update only the images named
+.BR "normal " "and " "fallback" ", run:"
.sp
-.B " flashrom \-l rom.layout \-i normal \"
-.br
-.B " \-i fallback \-w agami_aruma.rom"
+.B " flashrom \-p prog \-l rom.layout \-i normal -i fallback \-w some.rom"
.sp
-Currently overlapping sections are not supported.
+Overlapping sections are not supported.
.TP
-.B "\-i, \-\-image <name>"
-Only flash image
-.B <name>
+.B "\-i, \-\-image <imagename>"
+Only flash region/image
+.B <imagename>
from flash layout.
.TP
.B "\-L, \-\-list\-supported"
@@ -156,7 +163,8 @@ easily pasted into the wiki page at
Please note that MediaWiki output is not compiled in by default.
.TP
.B "\-p, \-\-programmer <name>[:parameter[,parameter[,parameter]]]"
-Specify the programmer device. Currently supported are:
+Specify the programmer device. This is mandatory for all operations
+involving any chip access (probe/read/write/...). Currently supported are:
.sp
.BR "* internal" " (default, for in-system flashing in the mainboard)"
.sp
@@ -330,7 +338,8 @@ You can use the
.sp
.B " flashrom \-p internal:ich_spi_mode=value"
.sp
-syntax where value can be
+syntax where
+.BR "value " "can be"
.BR auto ", " swseq " or " hwseq .
By default
.RB "(or when setting " ich_spi_mode=auto )
@@ -360,7 +369,9 @@ controller (EC), you can use the
.sp
.B " flashrom \-p internal:fwh_idsel=value"
.sp
-syntax where value is the 48-bit hexadecimal raw value to be written in the
+syntax where
+.B value
+is the 48-bit hexadecimal raw value to be written in the
IDSEL registers of the Intel southbridge. The upper 32 bits use one hex digit
each per 512 kB range between 0xffc00000 and 0xffffffff, and the lower 16 bits
use one hex digit each per 1024 kB range between 0xff400000 and 0xff7fffff.
@@ -486,7 +497,9 @@ flash chip, you can specify a blacklist of SPI commands with the
.sp
.B " flashrom -p dummy:spi_blacklist=commandlist"
.sp
-syntax where commandlist is a list of two-digit hexadecimal representations of
+syntax where
+.B commandlist
+is a list of two-digit hexadecimal representations of
SPI commands. If commandlist is e.g. 0302, flashrom will behave as if the SPI
controller refuses to run command 0x03 (READ) and command 0x02 (WRITE).
commandlist may be up to 512 characters (256 commands) long.
@@ -500,7 +513,9 @@ you can specify an ignorelist of SPI commands with the
.sp
.B " flashrom -p dummy:spi_ignorelist=commandlist"
.sp
-syntax where commandlist is a list of two-digit hexadecimal representations of
+syntax where
+.B commandlist
+is a list of two-digit hexadecimal representations of
SPI commands. If commandlist is e.g. 0302, the emulated flash chip will ignore
command 0x03 (READ) and command 0x02 (WRITE). commandlist may be up to 512
characters (256 commands) long.
@@ -513,7 +528,9 @@ You can specify the initial content of the chip's status register with the
.sp
.B " flashrom -p dummy:spi_status=content"
.sp
-syntax where content is an 8-bit hexadecimal value.
+syntax where
+.B content
+is an 8-bit hexadecimal value.
.SS
.BR "nic3com" , " nicrealtek" , " nicsmc1211" , " nicnatsemi" , " nicintel\
" , " nicintel_spi" , " gfxnvidia" , " ogp_spi" , " drkaiser" , " satasii\
diff --git a/flashrom.c b/flashrom.c
index 0fdcd5f..fc52c4a 100644
--- a/flashrom.c
+++ b/flashrom.c
@@ -59,6 +59,10 @@ unsigned long flashbase;
/* Is writing allowed with this programmer? */
int programmer_may_write;
+#if CONFIG_INTERNAL+CONFIG_DUMMY+CONFIG_NIC3COM+CONFIG_NICREALTEK+CONFIG_NICNATSEMI+CONFIG_GFXNVIDIA+CONFIG_DRKAISER+CONFIG_SATASII+CONFIG_ATAHPT+CONFIG_FT2232_SPI+CONFIG_SERPROG+CONFIG_BUSPIRATE_SPI+CONFIG_DEDIPROG+CONFIG_RAYER_SPI+CONFIG_PONY_SPI+CONFIG_NICINTEL+CONFIG_NICINTEL_SPI+CONFIG_OGP_SPI+CONFIG_SATAMV+CONFIG_LINUX_SPI < 1
+#error You have to enable at least one programmer!
+#endif
+
const struct programmer_entry programmer_table[] = {
#if CONFIG_INTERNAL == 1
{
OpenPOWER on IntegriCloud