]> git.sur5r.net Git - u-boot/blobdiff - common/cmd_bootm.c
Merge branch 'master' of git://git.denx.de/u-boot-ppc4xx
[u-boot] / common / cmd_bootm.c
index 20c31a775329b411fda6aafaf0e38f6842764510..367d5a7a94cc3c6bbfec8e61ba9e5a3f4629dfdc 100644 (file)
@@ -30,7 +30,7 @@
 #include <command.h>
 #include <image.h>
 #include <malloc.h>
-#include <zlib.h>
+#include <u-boot/zlib.h>
 #include <bzlib.h>
 #include <environment.h>
 #include <lmb.h>
@@ -103,13 +103,23 @@ extern int do_reset (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]);
 typedef int boot_os_fn (int flag, int argc, char *argv[],
                        bootm_headers_t *images); /* pointers to os/initrd/fdt */
 
+#define CONFIG_BOOTM_LINUX 1
+#define CONFIG_BOOTM_NETBSD 1
+#define CONFIG_BOOTM_RTEMS 1
+
+#ifdef CONFIG_BOOTM_LINUX
 extern boot_os_fn do_bootm_linux;
+#endif
+#ifdef CONFIG_BOOTM_NETBSD
 static boot_os_fn do_bootm_netbsd;
+#endif
 #if defined(CONFIG_LYNXKDI)
 static boot_os_fn do_bootm_lynxkdi;
 extern void lynxkdi_boot (image_header_t *);
 #endif
+#ifdef CONFIG_BOOTM_RTEMS
 static boot_os_fn do_bootm_rtems;
+#endif
 #if defined(CONFIG_CMD_ELF)
 static boot_os_fn do_bootm_vxworks;
 static boot_os_fn do_bootm_qnxelf;
@@ -121,12 +131,18 @@ static boot_os_fn do_bootm_integrity;
 #endif
 
 boot_os_fn * boot_os[] = {
+#ifdef CONFIG_BOOTM_LINUX
        [IH_OS_LINUX] = do_bootm_linux,
+#endif
+#ifdef CONFIG_BOOTM_NETBSD
        [IH_OS_NETBSD] = do_bootm_netbsd,
+#endif
 #ifdef CONFIG_LYNXKDI
        [IH_OS_LYNXOS] = do_bootm_lynxkdi,
 #endif
+#ifdef CONFIG_BOOTM_RTEMS
        [IH_OS_RTEMS] = do_bootm_rtems,
+#endif
 #if defined(CONFIG_CMD_ELF)
        [IH_OS_VXWORKS] = do_bootm_vxworks,
        [IH_OS_QNX] = do_bootm_qnxelf,
@@ -324,8 +340,10 @@ static int bootm_load_os(image_info_t os, ulong *load_end, int boot_progress)
                } else {
                        printf ("   Loading %s ... ", type_name);
 
-                       memmove_wd ((void *)load,
-                                  (void *)image_start, image_len, CHUNKSZ);
+                       if (load != image_start) {
+                               memmove_wd ((void *)load,
+                                               (void *)image_start, image_len, CHUNKSZ);
+                       }
                }
                *load_end = load + image_len;
                puts("OK\n");
@@ -334,7 +352,7 @@ static int bootm_load_os(image_info_t os, ulong *load_end, int boot_progress)
                printf ("   Uncompressing %s ... ", type_name);
                if (gunzip ((void *)load, unc_len,
                                        (uchar *)image_start, &image_len) != 0) {
-                       puts ("GUNZIP: uncompress or overwrite error "
+                       puts ("GUNZIP: uncompress, out-of-mem or overwrite error "
                                "- must RESET board to recover\n");
                        if (boot_progress)
                                show_boot_progress (-6);
@@ -438,13 +456,13 @@ int do_bootm_subcommand (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
        }
        /* Unrecognized command */
        else {
-               printf ("Usage:\n%s\n", cmdtp->usage);
+               cmd_usage(cmdtp);
                return 1;
        }
 
        if (images.state >= state) {
                printf ("Trying to execute a command out of order\n");
-               printf ("Usage:\n%s\n", cmdtp->usage);
+               cmd_usage(cmdtp);
                return 1;
        }
 
@@ -897,7 +915,7 @@ static void *boot_get_kernel (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]
 
 U_BOOT_CMD(
        bootm,  CONFIG_SYS_MAXARGS,     1,      do_bootm,
-       "bootm   - boot application image from memory\n",
+       "boot application image from memory",
        "[addr [arg ...]]\n    - boot application image stored in memory\n"
        "\tpassing arguments 'arg ...'; when booting a Linux kernel,\n"
        "\t'arg' can be the address of an initrd image\n"
@@ -930,7 +948,7 @@ U_BOOT_CMD(
        "\tbdt     - OS specific bd_t processing\n"
        "\tcmdline - OS specific command line processing/setup\n"
        "\tprep    - OS specific prep before relocation or go\n"
-       "\tgo      - start OS\n"
+       "\tgo      - start OS"
 );
 
 /*******************************************************************/
@@ -954,15 +972,15 @@ int do_bootd (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 
 U_BOOT_CMD(
        boot,   1,      1,      do_bootd,
-       "boot    - boot default, i.e., run 'bootcmd'\n",
-       NULL
+       "boot default, i.e., run 'bootcmd'",
+       ""
 );
 
 /* keep old command name "bootd" for backward compatibility */
 U_BOOT_CMD(
        bootd, 1,       1,      do_bootd,
-       "bootd   - boot default, i.e., run 'bootcmd'\n",
-       NULL
+       "boot default, i.e., run 'bootcmd'",
+       ""
 );
 
 #endif
@@ -1046,11 +1064,11 @@ static int image_info (ulong addr)
 
 U_BOOT_CMD(
        iminfo, CONFIG_SYS_MAXARGS,     1,      do_iminfo,
-       "iminfo  - print header information for application image\n",
+       "print header information for application image",
        "addr [addr ...]\n"
        "    - print header information for application image starting at\n"
        "      address 'addr' in memory; this includes verification of the\n"
-       "      image contents (magic number, header and payload checksums)\n"
+       "      image contents (magic number, header and payload checksums)"
 );
 #endif
 
@@ -1114,10 +1132,10 @@ next_bank:      ;
 
 U_BOOT_CMD(
        imls,   1,              1,      do_imls,
-       "imls    - list all images found in flash\n",
+       "list all images found in flash",
        "\n"
        "    - Prints information about all images found at sector\n"
-       "      boundaries in flash.\n"
+       "      boundaries in flash."
 );
 #endif
 
@@ -1161,6 +1179,7 @@ static void fixup_silent_linux ()
 /* OS booting routines */
 /*******************************************************************/
 
+#ifdef CONFIG_BOOTM_NETBSD
 static int do_bootm_netbsd (int flag, int argc, char *argv[],
                            bootm_headers_t *images)
 {
@@ -1246,6 +1265,7 @@ static int do_bootm_netbsd (int flag, int argc, char *argv[],
 
        return 1;
 }
+#endif /* CONFIG_BOOTM_NETBSD*/
 
 #ifdef CONFIG_LYNXKDI
 static int do_bootm_lynxkdi (int flag, int argc, char *argv[],
@@ -1269,6 +1289,7 @@ static int do_bootm_lynxkdi (int flag, int argc, char *argv[],
 }
 #endif /* CONFIG_LYNXKDI */
 
+#ifdef CONFIG_BOOTM_RTEMS
 static int do_bootm_rtems (int flag, int argc, char *argv[],
                           bootm_headers_t *images)
 {
@@ -1299,6 +1320,7 @@ static int do_bootm_rtems (int flag, int argc, char *argv[],
 
        return 1;
 }
+#endif /* CONFIG_BOOTM_RTEMS */
 
 #if defined(CONFIG_CMD_ELF)
 static int do_bootm_vxworks (int flag, int argc, char *argv[],