* MA 02111-1307 USA
*/
-#define DEBUG
/*
* Boot support
int do_bootelf (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]);
#endif
#if defined(CONFIG_ARTOS) && defined(CONFIG_PPC)
-extern uchar (*env_get_char)(int); /* Returns a character from the environment */
static boot_os_fn do_bootm_artos;
#endif
struct lmb lmb;
memset ((void *)&images, 0, sizeof (images));
- images.verify = getenv_verify();
- images.autostart = getenv_autostart();
+ images.verify = getenv_yesno ("verify");
+ images.autostart = getenv_yesno ("autostart");
images.lmb = &lmb;
lmb_init(&lmb);
debug ("image_start = 0x%lX, image_end = 0x%lx\n", image_start, image_end);
debug ("load_start = 0x%lx, load_end = 0x%lx\n", load_start, load_end);
- puts ("ERROR: image overwritten - must RESET the board to recover.\n");
- show_boot_progress (-113);
- do_reset (cmdtp, flag, argc, argv);
+ if (images.legacy_hdr_valid) {
+ if (image_get_type (&images.legacy_hdr_os_copy) == IH_TYPE_MULTI)
+ puts ("WARNING: legacy format multi component "
+ "image overwritten\n");
+ } else {
+ puts ("ERROR: new format image overwritten - "
+ "must RESET the board to recover\n");
+ show_boot_progress (-113);
+ do_reset (cmdtp, flag, argc, argv);
+ }
}
show_boot_progress (8);
show_boot_progress (-5);
return NULL;
}
+
+ /*
+ * copy image header to allow for image overwrites during kernel
+ * decompression.
+ */
+ memmove (&images->legacy_hdr_os_copy, hdr, sizeof(image_header_t));
+
+ /* save pointer to image header */
images->legacy_hdr_os = hdr;
- images->legacy_hdr_valid = 1;
+ images->legacy_hdr_valid = 1;
show_boot_progress (6);
break;
#if defined(CONFIG_FIT)
* address of the original image header.
*/
os_hdr = NULL;
- if (image_check_type (hdr, IH_TYPE_MULTI)) {
+ if (image_check_type (&images->legacy_hdr_os_copy, IH_TYPE_MULTI)) {
image_multi_getimg (hdr, 1, &kernel_data, &kernel_len);
if (kernel_len)
os_hdr = hdr;
int argc, char *argv[],
bootm_headers_t *images)
{
- image_header_t *hdr = images->legacy_hdr_os;
+ image_header_t *hdr = &images->legacy_hdr_os_copy;
#if defined(CONFIG_FIT)
if (!images->legacy_hdr_valid) {
int argc, char *argv[],
bootm_headers_t *images)
{
- image_header_t *hdr = images->legacy_hdr_os;
+ image_header_t *hdr = &images->legacy_hdr_os_copy;
void (*entry_point)(bd_t *);
#if defined(CONFIG_FIT)
bootm_headers_t *images)
{
char str[80];
- image_header_t *hdr = images->legacy_hdr_os;
+ image_header_t *hdr = &images->legacy_hdr_os_copy;
#if defined(CONFIG_FIT)
- if (hdr == NULL) {
+ if (!images->legacy_hdr_valid) {
fit_unsupported_reset ("VxWorks");
do_reset (cmdtp, flag, argc, argv);
}
{
char *local_args[2];
char str[16];
- image_header_t *hdr = images->legacy_hdr_os;
+ image_header_t *hdr = &images->legacy_hdr_os_copy;
#if defined(CONFIG_FIT)
if (!images->legacy_hdr_valid) {
int i, j, nxt, len, envno, envsz;
bd_t *kbd;
void (*entry)(bd_t *bd, char *cmdline, char **fwenv, ulong top);
- image_header_t *hdr = images->legacy_hdr_os;
+ image_header_t *hdr = &images->legacy_hdr_os_copy;
#if defined(CONFIG_FIT)
if (!images->legacy_hdr_valid) {