This is the mail archive of the
ecos-patches@sourceware.org
mailing list for the eCos project.
[PATCH] redboot - add exec option to set board revision
- From: Jose Vasconcellos <jvasco at verizon dot net>
- To: ecos-patches at ecos dot sourceware dot org
- Date: Thu, 13 May 2010 09:02:17 -0500
- Subject: [PATCH] redboot - add exec option to set board revision
This patch adds an exec option (-v) to set the board revision
via the ATAG_REVISION tag.
diff --git a/packages/hal/arm/arch/current/src/redboot_linux_exec.c b/packages/hal/arm/arch/current/src/redboot_linux_exec.c
--- a/packages/hal/arm/arch/current/src/redboot_linux_exec.c
+++ b/packages/hal/arm/arch/current/src/redboot_linux_exec.c
@@ -90,7 +90,7 @@
"Execute an image - with MMU off",
"[-w timeout] [-b <load addr> [-l <length>]]\n"
" [-r <ramdisk addr> [-s <ramdisk length>]]\n"
- " [-c \"kernel command line\"] [-t <target> ] [<entry_point>]",
+ " [-c \"kernel command line\"] [-t <target> ] [-v <revision>] [<entry_point>]",
do_exec
);
@@ -311,9 +311,11 @@
int wait_time, res, num_opts;
bool base_addr_set, length_set, cmd_line_set;
bool ramdisk_addr_set, ramdisk_size_set;
+ bool revision_set;
+ unsigned long revision;
unsigned long base_addr, length;
unsigned long ramdisk_addr, ramdisk_size;
- struct option_info opts[7];
+ struct option_info opts[9];
char line[8];
char *cmd_line;
struct tag *params = (struct tag *)CYGHWR_REDBOOT_ARM_LINUX_TAGS_ADDRESS;
@@ -352,7 +354,9 @@
(void **)&ramdisk_size, (bool *)&ramdisk_size_set, "ramdisk_size");
init_opts(&opts[6], 't', true, OPTION_ARG_TYPE_NUM,
&target, 0, "[physical] target address");
- num_opts = 7;
+ init_opts(&opts[7], 'v', true, OPTION_ARG_TYPE_NUM,
+ (void **)&revision, (bool *)&revision_set, "revision");
+ num_opts = 8;
#ifdef CYGHWR_REDBOOT_LINUX_EXEC_X_SWITCH
init_opts(&opts[num_opts], 'x', false, OPTION_ARG_TYPE_FLG,
(void **)&swap_endian, 0, "swap endianess");
@@ -384,6 +388,12 @@
params->u.initrd.size = ramdisk_size;
params = (struct tag *)((long *)params + params->hdr.size);
}
+ if (revision_set) {
+ params->hdr.size = (sizeof(struct tag_revision) + sizeof(struct tag_header))/sizeof(long);
+ params->hdr.tag = ATAG_REVISION;
+ params->u.revision.rev = revision;
+ params = (struct tag *)((long *)params + params->hdr.size);
+ }
if (cmd_line_set) {
params->hdr.size = (ROUNDUP(strlen(cmd_line)) + sizeof(struct tag_header))/sizeof(long);
params->hdr.tag = ATAG_CMDLINE;