This is the mail archive of the ecos-patches@sourceware.org mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[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;

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]