diff options
author | Gerald Van Baren <vanbaren@cideas.com> | 2008-03-29 18:08:02 -0400 |
---|---|---|
committer | Gerald Van Baren <vanbaren@cideas.com> | 2008-03-29 18:08:02 -0400 |
commit | 3596d55eb22703d3f4f1b839fe4b000fabe081b3 (patch) | |
tree | 96d1ce693dc72c2fbc63da37928afd4761e82fd2 /lib_nios2 | |
parent | 493a2b1dc97367e904bf83869501f6290f3b374e (diff) | |
parent | 74d1e66d22dac91388bc538b2fe19f735edc5b82 (diff) | |
download | u-boot-imx-3596d55eb22703d3f4f1b839fe4b000fabe081b3.zip u-boot-imx-3596d55eb22703d3f4f1b839fe4b000fabe081b3.tar.gz u-boot-imx-3596d55eb22703d3f4f1b839fe4b000fabe081b3.tar.bz2 |
Merge git://www.denx.de/git/u-boot into uboot
Diffstat (limited to 'lib_nios2')
-rw-r--r-- | lib_nios2/Makefile | 12 | ||||
-rw-r--r-- | lib_nios2/bootm.c (renamed from lib_nios2/nios_linux.c) | 35 |
2 files changed, 39 insertions, 8 deletions
diff --git a/lib_nios2/Makefile b/lib_nios2/Makefile index 1ff2f29..717aa9b 100644 --- a/lib_nios2/Makefile +++ b/lib_nios2/Makefile @@ -25,12 +25,16 @@ include $(TOPDIR)/config.mk LIB = $(obj)lib$(ARCH).a -SOBJS = cache.o +SOBJS-y += cache.o -COBJS = board.o divmod.o nios_linux.o mult.o time.o +COBJS-y += board.o +COBJS-y += bootm.o +COBJS-y += divmod.o +COBJS-y += mult.o +COBJS-y += time.o -SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c) -OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS)) +SRCS := $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c) +OBJS := $(addprefix $(obj),$(SOBJS-y) $(COBJS-y)) $(LIB): $(obj).depend $(OBJS) $(AR) $(ARFLAGS) $@ $(OBJS) diff --git a/lib_nios2/nios_linux.c b/lib_nios2/bootm.c index 9eb3426..0c89e96 100644 --- a/lib_nios2/nios_linux.c +++ b/lib_nios2/bootm.c @@ -25,16 +25,43 @@ #include <command.h> #include <asm/byteorder.h> -extern image_header_t header; /* common/cmd_bootm.c */ +extern int do_reset (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]); void do_bootm_linux(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[], - ulong addr, ulong *len_ptr, int verify) + bootm_headers_t *images) { - image_header_t *hdr = &header; - void (*kernel)(void) = (void (*)(void))ntohl (hdr->ih_ep); + ulong ep = 0; + + /* find kernel entry point */ + if (images->legacy_hdr_valid) { + ep = image_get_ep (images->legacy_hdr_os); +#if defined(CONFIG_FIT) + } else if (images->fit_uname_os) { + int ret = fit_image_get_entry (images->fit_hdr_os, + images->fit_noffset_os, &ep); + if (ret) { + puts ("Can't get entry point property!\n"); + goto error; + } +#endif + } else { + puts ("Could not find kernel entry point!\n"); + goto error; + } + void (*kernel)(void) = (void (*)(void))ep; + + if (!images->autostart) + return ; /* For now we assume the Microtronix linux ... which only * needs to be called ;-) */ kernel (); + /* does not return */ + return; + +error: + if (images->autostart) + do_reset (cmdtp, flag, argc, argv); + return; } |