[new uImage] rework error handling so common functions don't reset

Changed image_get_ramdisk() to just return NULL on error and have
get_ramdisk() propogate that error to the caller.  It's left to the
caller to call do_reset() if it wants to.

Also moved calling do_reset() in get_fdt() and fdt_relocate() on ppc
to a common location.  In the future we will change get_fdt() and
fdt_relocate() to return success/failure and not call do_reset() at all.

Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
Acked-by: Marian Balakowicz <m8@semihalf.com>
This commit is contained in:
Kumar Gala
2008-02-27 21:51:46 -06:00
committed by Marian Balakowicz
parent d2bc095a63
commit 274cea2bdd
4 changed files with 70 additions and 32 deletions

View File

@@ -35,6 +35,8 @@
DECLARE_GLOBAL_DATA_PTR;
extern int do_reset (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]);
#define PHYSADDR(x) x
#define LINUX_MAX_ENVS 256
@@ -52,6 +54,7 @@ void do_bootm_linux(cmd_tbl_t * cmdtp, int flag,
ulong rd_data_start, rd_data_end, rd_len;
ulong initrd_start, initrd_end;
int ret;
ulong cmd_start, cmd_end;
bd_t *kbd;
@@ -95,9 +98,12 @@ void do_bootm_linux(cmd_tbl_t * cmdtp, int flag,
kernel = (void (*)(bd_t *, ulong, ulong, ulong, ulong))ep;
/* find ramdisk */
get_ramdisk (cmdtp, flag, argc, argv, images,
ret = get_ramdisk (cmdtp, flag, argc, argv, images,
IH_ARCH_M68K, &rd_data_start, &rd_data_end);
if (ret)
goto error;
rd_len = rd_data_end - rd_data_start;
alloc_current = ramdisk_high (alloc_current, rd_data_start, rd_len,
sp_limit, get_sp (), &initrd_start, &initrd_end);
@@ -117,6 +123,11 @@ void do_bootm_linux(cmd_tbl_t * cmdtp, int flag,
*/
(*kernel) (kbd, initrd_start, initrd_end, cmd_start, cmd_end);
/* does not return */
return ;
error:
do_reset (cmdtp, flag, argc, argv);
return ;
}
static ulong get_sp (void)