diff options
author | wdenk <wdenk> | 2002-11-05 00:17:55 +0000 |
---|---|---|
committer | wdenk <wdenk> | 2002-11-05 00:17:55 +0000 |
commit | 384ae02506f0673070a3516b1858f058a07f85f3 (patch) | |
tree | b85a18328375b06df150d630d400eb16c75090f4 /lib_arm/armlinux.c | |
parent | e95b61cfb0c7203964c1a3f163e16a65f04d87ec (diff) | |
download | bootable_bootloader_goldelico_gta04-384ae02506f0673070a3516b1858f058a07f85f3.zip bootable_bootloader_goldelico_gta04-384ae02506f0673070a3516b1858f058a07f85f3.tar.gz bootable_bootloader_goldelico_gta04-384ae02506f0673070a3516b1858f058a07f85f3.tar.bz2 |
* Patch by Robert Schwebel, 04 Nov 2002:
- use watchdog to reset PXA250 systems
- added progress callbacks to (some of the) ARM code
- update for Cogent CSB226 board
* Add support for FPS860 board
Diffstat (limited to 'lib_arm/armlinux.c')
-rw-r--r-- | lib_arm/armlinux.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/lib_arm/armlinux.c b/lib_arm/armlinux.c index 33f86e9..2fb8db8 100644 --- a/lib_arm/armlinux.c +++ b/lib_arm/armlinux.c @@ -56,6 +56,13 @@ static void setup_videolfb_tag(gd_t *gd); static struct tag *params; #endif /* CONFIG_SETUP_MEMORY_TAGS || CONFIG_CMDLINE_TAG || CONFIG_INITRD_TAG */ +#ifdef CONFIG_SHOW_BOOT_PROGRESS +# include <status_led.h> +# define SHOW_BOOT_PROGRESS(arg) show_boot_progress(arg) +#else +# define SHOW_BOOT_PROGRESS(arg) +#endif + extern image_header_t header; /* from cmd_bootm.c */ @@ -80,6 +87,8 @@ void do_bootm_linux(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[], * Check if there is an initrd image */ if (argc >= 3) { + SHOW_BOOT_PROGRESS (9); + addr = simple_strtoul(argv[2], NULL, 16); printf ("## Loading Ramdisk Image at %08lx ...\n", addr); @@ -89,6 +98,7 @@ void do_bootm_linux(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[], if (ntohl(hdr->ih_magic) != IH_MAGIC) { printf ("Bad Magic Number\n"); + SHOW_BOOT_PROGRESS (-10); do_reset (cmdtp, flag, argc, argv); } @@ -100,9 +110,12 @@ void do_bootm_linux(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[], if (crc32 (0, (char *)data, len) != checksum) { printf ("Bad Header Checksum\n"); + SHOW_BOOT_PROGRESS (-11); do_reset (cmdtp, flag, argc, argv); } + SHOW_BOOT_PROGRESS (10); + print_image_hdr (hdr); data = addr + sizeof(image_header_t); @@ -115,15 +128,19 @@ void do_bootm_linux(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[], csum = crc32 (0, (char *)data, len); if (csum != ntohl(hdr->ih_dcrc)) { printf ("Bad Data CRC\n"); + SHOW_BOOT_PROGRESS (-12); do_reset (cmdtp, flag, argc, argv); } printf ("OK\n"); } + SHOW_BOOT_PROGRESS (11); + if ((hdr->ih_os != IH_OS_LINUX) || (hdr->ih_arch != IH_CPU_ARM) || (hdr->ih_type != IH_TYPE_RAMDISK) ) { printf ("No Linux ARM Ramdisk Image\n"); + SHOW_BOOT_PROGRESS (-13); do_reset (cmdtp, flag, argc, argv); } @@ -134,6 +151,8 @@ void do_bootm_linux(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[], ulong tail = ntohl(len_ptr[0]) % 4; int i; + SHOW_BOOT_PROGRESS (13); + /* skip kernel length and terminator */ data = (ulong)(&len_ptr[2]); /* skip any additional image length fields */ @@ -151,6 +170,8 @@ void do_bootm_linux(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[], /* * no initrd image */ + SHOW_BOOT_PROGRESS (14); + data = 0; } @@ -168,6 +189,8 @@ void do_bootm_linux(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[], initrd_end = 0; } + SHOW_BOOT_PROGRESS (15); + #ifdef DEBUG printf ("## Transferring control to Linux (at address %08lx) ...\n", (ulong)theKernel); |