X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=common%2Fcmd_bootm.c;h=c200fd8b86b2c467288658768f85d15bff373dd2;hb=a720fd99b614ba36293565771bcd19799bc53959;hp=c4a8685ce33ce65ecc2680be2b03777558274287;hpb=5bb226e821ea3c10c52d768ffab7952204b0f816;p=u-boot diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c index c4a8685ce3..c200fd8b86 100644 --- a/common/cmd_bootm.c +++ b/common/cmd_bootm.c @@ -73,7 +73,7 @@ # define CHUNKSZ (64 * 1024) #endif -int gunzip (void *, int, unsigned char *, int *); +int gunzip (void *, int, unsigned char *, unsigned long *); static void *zalloc(void *, unsigned, unsigned); static void zfree(void *, void *, unsigned); @@ -184,7 +184,7 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) } else #endif /* __I386__ */ { - printf ("Bad Magic Number\n"); + puts ("Bad Magic Number\n"); SHOW_BOOT_PROGRESS (-1); return 1; } @@ -198,7 +198,7 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) hdr->ih_hcrc = 0; if (crc32 (0, (char *)data, len) != checksum) { - printf ("Bad Header Checksum\n"); + puts ("Bad Header Checksum\n"); SHOW_BOOT_PROGRESS (-2); return 1; } @@ -218,13 +218,13 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) #endif if (verify) { - printf (" Verifying Checksum ... "); + puts (" Verifying Checksum ... "); if (crc32 (0, (char *)data, len) != ntohl(hdr->ih_dcrc)) { printf ("Bad Data CRC\n"); SHOW_BOOT_PROGRESS (-3); return 1; } - printf ("OK\n"); + puts ("OK\n"); } SHOW_BOOT_PROGRESS (4); @@ -240,6 +240,12 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) if (hdr->ih_arch != IH_CPU_MIPS) #elif defined(__nios__) if (hdr->ih_arch != IH_CPU_NIOS) +#elif defined(__M68K__) + if (hdr->ih_arch != IH_CPU_M68K) +#elif defined(__microblaze__) + if (hdr->ih_arch != IH_CPU_MICROBLAZE) +#elif defined(__nios2__) + if (hdr->ih_arch != IH_CPU_NIOS2) #else # error Unknown CPU type #endif @@ -255,13 +261,13 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) name = "Standalone Application"; /* A second argument overwrites the load address */ if (argc > 2) { - hdr->ih_load = simple_strtoul(argv[2], NULL, 16); + hdr->ih_load = htonl(simple_strtoul(argv[2], NULL, 16)); } break; case IH_TYPE_KERNEL: name = "Kernel Image"; break; - case IH_TYPE_MULTI: + case IH_TYPE_MULTI: name = "Multi-File Image"; len = ntohl(len_ptr[0]); /* OS kernel is always the first image */ @@ -322,8 +328,8 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) case IH_COMP_GZIP: printf (" Uncompressing %s ... ", name); if (gunzip ((void *)ntohl(hdr->ih_load), unc_len, - (uchar *)data, (int *)&len) != 0) { - printf ("GUNZIP ERROR - must RESET board to recover\n"); + (uchar *)data, &len) != 0) { + puts ("GUNZIP ERROR - must RESET board to recover\n"); SHOW_BOOT_PROGRESS (-6); do_reset (cmdtp, flag, argc, argv); } @@ -331,8 +337,14 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) #ifdef CONFIG_BZIP2 case IH_COMP_BZIP2: printf (" Uncompressing %s ... ", name); + /* + * If we've got less than 4 MB of malloc() space, + * use slower decompression algorithm which requires + * at most 2300 KB of memory. + */ i = BZ2_bzBuffToBuffDecompress ((char*)ntohl(hdr->ih_load), - &unc_len, (char *)data, len, 0, 0); + &unc_len, (char *)data, len, + CFG_MALLOC_LEN < (4096 * 1024), 0); if (i != BZ_OK) { printf ("BUNZIP2 ERROR %d - must RESET board to recover\n", i); SHOW_BOOT_PROGRESS (-6); @@ -348,7 +360,7 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) SHOW_BOOT_PROGRESS (-7); return 1; } - printf ("OK\n"); + puts ("OK\n"); SHOW_BOOT_PROGRESS (7); switch (hdr->ih_type) { @@ -427,7 +439,7 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) SHOW_BOOT_PROGRESS (-9); #ifdef DEBUG - printf ("\n## Control returned to monitor - resetting...\n"); + puts ("\n## Control returned to monitor - resetting...\n"); do_reset (cmdtp, flag, argc, argv); #endif return 1; @@ -437,8 +449,8 @@ U_BOOT_CMD( bootm, CFG_MAXARGS, 1, do_bootm, "bootm - boot application image from memory\n", "[addr [arg ...]]\n - boot application image stored in memory\n" - " passing arguments 'arg ...'; when booting a Linux kernel,\n" - " 'arg' can be the address of an initrd image\n" + "\tpassing arguments 'arg ...'; when booting a Linux kernel,\n" + "\t'arg' can be the address of an initrd image\n" ); #ifdef CONFIG_SILENT_CONSOLE @@ -561,16 +573,23 @@ do_bootm_linux (cmd_tbl_t *cmdtp, int flag, /* convert all clock information to MHz */ kbd->bi_intfreq /= 1000000L; kbd->bi_busfreq /= 1000000L; -#if defined(CONFIG_8260) || defined(CONFIG_MPC8560) +#if defined(CONFIG_MPC8220) + kbd->bi_inpfreq /= 1000000L; + kbd->bi_pcifreq /= 1000000L; + kbd->bi_pevfreq /= 1000000L; + kbd->bi_flbfreq /= 1000000L; + kbd->bi_vcofreq /= 1000000L; +#endif +#if defined(CONFIG_CPM2) kbd->bi_cpmfreq /= 1000000L; kbd->bi_brgfreq /= 1000000L; kbd->bi_sccfreq /= 1000000L; kbd->bi_vco /= 1000000L; -#endif /* CONFIG_8260 */ -#if defined(CONFIG_MPC5XXXX) +#endif +#if defined(CONFIG_MPC5xxx) kbd->bi_ipbfreq /= 1000000L; kbd->bi_pcifreq /= 1000000L; -#endif /* CONFIG_MPC5XXXX */ +#endif /* CONFIG_MPC5xxx */ } kernel = (void (*)(bd_t *, ulong, ulong, ulong, ulong))hdr->ih_ep; @@ -589,7 +608,7 @@ do_bootm_linux (cmd_tbl_t *cmdtp, int flag, memmove (&header, (char *)addr, sizeof(image_header_t)); if (hdr->ih_magic != IH_MAGIC) { - printf ("Bad Magic Number\n"); + puts ("Bad Magic Number\n"); SHOW_BOOT_PROGRESS (-10); do_reset (cmdtp, flag, argc, argv); } @@ -601,7 +620,7 @@ do_bootm_linux (cmd_tbl_t *cmdtp, int flag, hdr->ih_hcrc = 0; if (crc32 (0, (char *)data, len) != checksum) { - printf ("Bad Header Checksum\n"); + puts ("Bad Header Checksum\n"); SHOW_BOOT_PROGRESS (-11); do_reset (cmdtp, flag, argc, argv); } @@ -619,7 +638,7 @@ do_bootm_linux (cmd_tbl_t *cmdtp, int flag, ulong cdata = data, edata = cdata + len; #endif /* CONFIG_HW_WATCHDOG || CONFIG_WATCHDOG */ - printf (" Verifying Checksum ... "); + puts (" Verifying Checksum ... "); #if defined(CONFIG_HW_WATCHDOG) || defined(CONFIG_WATCHDOG) @@ -638,11 +657,11 @@ do_bootm_linux (cmd_tbl_t *cmdtp, int flag, #endif /* CONFIG_HW_WATCHDOG || CONFIG_WATCHDOG */ if (csum != hdr->ih_dcrc) { - printf ("Bad Data CRC\n"); + puts ("Bad Data CRC\n"); SHOW_BOOT_PROGRESS (-12); do_reset (cmdtp, flag, argc, argv); } - printf ("OK\n"); + puts ("OK\n"); } SHOW_BOOT_PROGRESS (11); @@ -650,7 +669,7 @@ do_bootm_linux (cmd_tbl_t *cmdtp, int flag, if ((hdr->ih_os != IH_OS_LINUX) || (hdr->ih_arch != IH_CPU_PPC) || (hdr->ih_type != IH_TYPE_RAMDISK) ) { - printf ("No Linux PPC Ramdisk Image\n"); + puts ("No Linux PPC Ramdisk Image\n"); SHOW_BOOT_PROGRESS (-13); do_reset (cmdtp, flag, argc, argv); } @@ -748,7 +767,7 @@ do_bootm_linux (cmd_tbl_t *cmdtp, int flag, #else /* !(CONFIG_HW_WATCHDOG || CONFIG_WATCHDOG) */ memmove ((void *)initrd_start, (void *)data, len); #endif /* CONFIG_HW_WATCHDOG || CONFIG_WATCHDOG */ - printf ("OK\n"); + puts ("OK\n"); } } else { initrd_start = 0; @@ -1006,7 +1025,7 @@ static int image_info (ulong addr) memmove (&header, (char *)addr, sizeof(image_header_t)); if (ntohl(hdr->ih_magic) != IH_MAGIC) { - printf (" Bad Magic Number\n"); + puts (" Bad Magic Number\n"); return 1; } @@ -1017,7 +1036,7 @@ static int image_info (ulong addr) hdr->ih_hcrc = 0; if (crc32 (0, (char *)data, len) != checksum) { - printf (" Bad Header Checksum\n"); + puts (" Bad Header Checksum\n"); return 1; } @@ -1027,12 +1046,12 @@ static int image_info (ulong addr) data = addr + sizeof(image_header_t); len = ntohl(hdr->ih_size); - printf (" Verifying Checksum ... "); + puts (" Verifying Checksum ... "); if (crc32 (0, (char *)data, len) != ntohl(hdr->ih_dcrc)) { - printf (" Bad Data CRC\n"); + puts (" Bad Data CRC\n"); return 1; } - printf ("OK\n"); + puts ("OK\n"); return 0; } @@ -1083,11 +1102,11 @@ int do_imls (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) data = (ulong)hdr + sizeof(image_header_t); len = ntohl(hdr->ih_size); - printf (" Verifying Checksum ... "); + puts (" Verifying Checksum ... "); if (crc32 (0, (char *)data, len) != ntohl(hdr->ih_dcrc)) { - printf (" Bad Data CRC\n"); + puts (" Bad Data CRC\n"); } - printf ("OK\n"); + puts ("OK\n"); next_sector: ; } next_bank: ; @@ -1120,18 +1139,19 @@ print_image_hdr (image_header_t *hdr) tm.tm_year, tm.tm_mon, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec); #endif /* CFG_CMD_DATE, CONFIG_TIMESTAMP */ - printf (" Image Type: "); print_type(hdr); printf ("\n"); - printf (" Data Size: %d Bytes = ", ntohl(hdr->ih_size)); + puts (" Image Type: "); print_type(hdr); + printf ("\n Data Size: %d Bytes = ", ntohl(hdr->ih_size)); print_size (ntohl(hdr->ih_size), "\n"); - printf (" Load Address: %08x\n", ntohl(hdr->ih_load)); - printf (" Entry Point: %08x\n", ntohl(hdr->ih_ep)); + printf (" Load Address: %08x\n" + " Entry Point: %08x\n", + ntohl(hdr->ih_load), ntohl(hdr->ih_ep)); if (hdr->ih_type == IH_TYPE_MULTI) { int i; ulong len; ulong *len_ptr = (ulong *)((ulong)hdr + sizeof(image_header_t)); - printf (" Contents:\n"); + puts (" Contents:\n"); for (i=0; (len = ntohl(*len_ptr)); ++i, ++len_ptr) { printf (" Image %d: %8ld Bytes = ", i, len); print_size (len, "\n"); @@ -1176,6 +1196,9 @@ print_type (image_header_t *hdr) case IH_CPU_SPARC: arch = "SPARC"; break; case IH_CPU_SPARC64: arch = "SPARC 64 Bit"; break; case IH_CPU_M68K: arch = "M68K"; break; + case IH_CPU_MICROBLAZE: arch = "Microblaze"; break; + case IH_CPU_NIOS: arch = "Nios"; break; + case IH_CPU_NIOS2: arch = "Nios-II"; break; default: arch = "Unknown Architecture"; break; } @@ -1227,7 +1250,7 @@ static void zfree(void *x, void *addr, unsigned nb) #define DEFLATED 8 -int gunzip(void *dst, int dstlen, unsigned char *src, int *lenp) +int gunzip(void *dst, int dstlen, unsigned char *src, unsigned long *lenp) { z_stream s; int r, i, flags; @@ -1236,7 +1259,7 @@ int gunzip(void *dst, int dstlen, unsigned char *src, int *lenp) i = 10; flags = src[3]; if (src[2] != DEFLATED || (flags & RESERVED) != 0) { - printf ("Error: Bad gzipped data\n"); + puts ("Error: Bad gzipped data\n"); return (-1); } if ((flags & EXTRA_FIELD) != 0) @@ -1250,7 +1273,7 @@ int gunzip(void *dst, int dstlen, unsigned char *src, int *lenp) if ((flags & HEAD_CRC) != 0) i += 2; if (i >= *lenp) { - printf ("Error: gunzip out of data in header\n"); + puts ("Error: gunzip out of data in header\n"); return (-1); }