diff options
Diffstat (limited to 'package/uboot-lantiq/patches/400-lzma.patch')
-rw-r--r-- | package/uboot-lantiq/patches/400-lzma.patch | 1687 |
1 files changed, 0 insertions, 1687 deletions
diff --git a/package/uboot-lantiq/patches/400-lzma.patch b/package/uboot-lantiq/patches/400-lzma.patch deleted file mode 100644 index b2f498ac5a..0000000000 --- a/package/uboot-lantiq/patches/400-lzma.patch +++ /dev/null @@ -1,1687 +0,0 @@ ---- a/.gitignore -+++ b/.gitignore -@@ -23,6 +23,11 @@ - /u-boot.hex - /u-boot.map - /u-boot.bin -+/u-boot.bin.bz2 -+/u-boot.bin.gz -+/u-boot.bin.lzma -+/u-boot.bin.lzo -+/u-boot.dis - /u-boot.srec - /u-boot.ldr - /u-boot.ldr.hex -@@ -30,6 +35,20 @@ - /u-boot.lds - /u-boot-onenand.bin - /u-boot-flexonenand.bin -+/u-boot-bootstrap -+/u-boot-bootstrap.hex -+/u-boot-bootstrap.map -+/u-boot-bootstrap.bin -+/u-boot-bootstrap.bin.bz2 -+/u-boot-bootstrap.bin.gz -+/u-boot-bootstrap.bin.lzma -+/u-boot-bootstrap.bin.lzo -+/u-boot-bootstrap.dis -+/u-boot-bootstrap.srec -+/u-boot-bootstrap.ldr -+/u-boot-bootstrap.ldr.hex -+/u-boot-bootstrap.ldr.srec -+/u-boot-bootstrap.lds - - # - # Generated files -@@ -38,6 +57,7 @@ - *.depend - /LOG - /errlog -+/.payload.s - /reloc_off - - # stgit generated dirs -@@ -63,3 +83,6 @@ - /onenand_ipl/onenand-ipl* - /onenand_ipl/board/*/onenand* - /onenand_ipl/board/*/*.S -+examples/standalone/ -+ -+setvars ---- a/Makefile -+++ b/Makefile -@@ -183,6 +183,12 @@ - - OBJS := $(addprefix $(obj),$(OBJS)) - -+ifeq ($(CONFIG_BOOTSTRAP),y) -+BOOTSTRAP_OBJS = cpu/$(ARCH)/start_bootstrap.o -+ -+BOOTSTRAP_OBJS := $(addprefix $(obj),$(BOOTSTRAP_OBJS)) -+endif -+ - LIBS = lib_generic/libgeneric.a - LIBS += lib_generic/lzma/liblzma.a - LIBS += lib_generic/lzo/liblzo.a -@@ -254,6 +260,25 @@ - LIBBOARD = board/$(BOARDDIR)/lib$(BOARD).a - LIBBOARD := $(addprefix $(obj),$(LIBBOARD)) - -+ifeq ($(CONFIG_BOOTSTRAP),y) -+BOOTSTRAP_LIBS = lib_generic/libgeneric_bootstrap.a -+BOOTSTRAP_LIBS += cpu/$(ARCH)/lib$(ARCH)_bootstrap.a -+BOOTSTRAP_LIBS += lib_$(ARCH)/lib$(ARCH)_bootstrap.a -+BOOTSTRAP_LIBS += common/libcommon_bootstrap.a -+BOOTSTRAP_LIBS-$(CONFIG_BOOTSTRAP_SERIAL) += drivers/serial/libserial.a -+ -+BOOTSTRAP_LIBS-$(CONFIG_BOOTSTRAP_LZMA) += lib_generic/lzma/liblzma.a -+BOOTSTRAP_LIBS-$(CONFIG_BOOTSTRAP_LZO) += lib/lzo/liblzo.a -+BOOTSTRAP_LIBS += $(BOOTSTRAP_LIBS-y) -+ -+BOOTSTRAP_LIBS := $(addprefix $(obj),$(BOOTSTRAP_LIBS)) -+.PHONY : $(BOOTSTRAP_LIBS) -+ -+BOOTSTRAP_LIBBOARD = board/$(BOARDDIR)/lib$(BOARD)_bootstrap.a -+BOOTSTRAP_LIBBOARD := $(addprefix $(obj),$(BOOTSTRAP_LIBBOARD)) -+endif -+ -+ - # Add GCC lib - ifdef USE_PRIVATE_LIBGCC - ifeq ("$(USE_PRIVATE_LIBGCC)", "yes") -@@ -267,6 +292,9 @@ - PLATFORM_LIBS += $(PLATFORM_LIBGCC) - export PLATFORM_LIBS - -+BOOTSTRAP_PLATFORM_LIBS += $(PLATFORM_LIBGCC) -+export BOOTSTRAP_PLATFORM_LIBS -+ - # Special flags for CPP when processing the linker script. - # Pass the version down so we can handle backwards compatibility - # on the fly. -@@ -289,12 +317,19 @@ - __OBJS := $(subst $(obj),,$(OBJS)) - __LIBS := $(subst $(obj),,$(LIBS)) $(subst $(obj),,$(LIBBOARD)) - -+__BOOTSTRAP_OBJS := $(subst $(obj),,$(BOOTSTRAP_OBJS)) -+__BOOTSTRAP_LIBS := $(subst $(obj),,$(BOOTSTRAP_LIBS)) $(subst $(obj),,$(BOOTSTRAP_LIBBOARD)) -+ - ######################################################################### - ######################################################################### - - # Always append ALL so that arch config.mk's can add custom ones - ALL += $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map $(U_BOOT_NAND) $(U_BOOT_ONENAND) - -+ifeq ($(CONFIG_BOOTSTRAP),y) -+ALL += $(obj)u-boot-bootstrap.srec $(obj)u-boot-bootstrap.bin -+endif -+ - all: $(ALL) - - $(obj)u-boot.hex: $(obj)u-boot -@@ -306,6 +341,19 @@ - $(obj)u-boot.bin: $(obj)u-boot - $(OBJCOPY) ${OBJCFLAGS} -O binary $< $@ - -+$(obj)u-boot.bin.gz: $(obj)u-boot.bin -+ gzip -c $< > $@ -+ -+$(obj)u-boot.bin.lzma: $(obj)u-boot.bin -+ echo lzma -e -z -c $< $@ -+ lzma e $< $@ -+ -+$(obj)u-boot.bin.lzo: $(obj)u-boot.bin -+ lzop -9 -c $< > $@ -+ -+$(obj)u-boot.bin.bz2: $(obj)u-boot.bin -+ bzip2 --best -z -c $< > $@ -+ - $(obj)u-boot.ldr: $(obj)u-boot - $(CREATE_LDR_ENV) - $(LDR) -T $(CONFIG_BFIN_CPU) -c $@ $< $(LDR_FLAGS) -@@ -335,12 +383,12 @@ - $(obj)tools/ubsha1 $(obj)u-boot.bin - - $(obj)u-boot.dis: $(obj)u-boot -- $(OBJDUMP) -d $< > $@ -+ $(OBJDUMP) -S -d $< > $@ - - GEN_UBOOT = \ - UNDEF_SYM=`$(OBJDUMP) -x $(LIBBOARD) $(LIBS) | \ - sed -n -e 's/.*\($(SYM_PREFIX)__u_boot_cmd_.*\)/-u\1/p'|sort|uniq`;\ -- cd $(LNDIR) && $(LD) $(LDFLAGS) $$UNDEF_SYM $(__OBJS) \ -+ cd $(LNDIR) && $(LD) --gc-sections $(LDFLAGS) $$UNDEF_SYM $(__OBJS) \ - --start-group $(__LIBS) --end-group $(PLATFORM_LIBS) \ - -Map u-boot.map -o u-boot - $(obj)u-boot: depend $(SUBDIRS) $(OBJS) $(LIBBOARD) $(LIBS) $(LDSCRIPT) $(obj)u-boot.lds -@@ -362,6 +410,120 @@ - $(LIBBOARD): depend $(LIBS) - $(MAKE) -C $(dir $(subst $(obj),,$@)) - -+# Bootstrap targets -+ -+ifeq ($(CONFIG_BOOTSTRAP),y) -+$(obj)u-boot-bootstrap.hex: $(obj)u-boot-bootstrap -+ $(OBJCOPY) ${OBJCFLAGS} -O ihex $< $@ -+ -+$(obj)u-boot-bootstrap.srec: $(obj)u-boot-bootstrap -+ $(OBJCOPY) -O srec $< $@ -+ -+$(obj)u-boot-bootstrap.bin: $(obj)u-boot-bootstrap -+ $(OBJCOPY) ${OBJCFLAGS} -O binary $< $@ -+ $(BOARD_SIZE_CHECK) -+ -+$(obj)u-boot-bootstrap.bin.gz: $(obj)u-boot-bootstrap.bin -+ gzip -c $< > $@ -+ -+$(obj)u-boot-bootstrap.bin.lzma: $(obj)u-boot-bootstrap.bin -+ lzma -e -z -c $< > $@ -+ -+$(obj)u-boot.bin-bootstrap.lzo: $(obj)u-boot-bootstrap.bin -+ lzop -9 -c $< > $@ -+ -+$(obj)u-boot.bin-bootstrap.bz2: $(obj)u-boot-bootstrap.bin -+ bzip2 --best -z -c $< > $@ -+ -+$(obj)u-boot-bootstrap.ldr: $(obj)u-boot-bootstrap -+ $(CREATE_LDR_ENV) -+ $(LDR) -T $(CONFIG_BFIN_CPU) -c $@ $< $(LDR_FLAGS) -+ $(BOARD_SIZE_CHECK) -+ -+$(obj)u-boot-bootstrap.ldr.hex: $(obj)u-boot-bootstrap.ldr -+ $(OBJCOPY) ${OBJCFLAGS} -O ihex $< $@ -I binary -+ -+$(obj)u-boot-bootstrap.ldr.srec: $(obj)u-boot-bootstrap.ldr -+ $(OBJCOPY) ${OBJCFLAGS} -O srec $< $@ -I binary -+ -+$(obj)u-boot-bootstrap.img: $(obj)u-boot-bootstrap.bin -+ $(obj)tools/mkimage -A $(ARCH) -T firmware -C none \ -+ -a $(CONFIG_BOOTSTRAP_BASE) -e 0 \ -+ -n $(shell sed -n -e 's/.*U_BOOT_VERSION//p' $(VERSION_FILE) | \ -+ sed -e 's/"[ ]*$$/ for $(BOARD) board"/') \ -+ -d $< $@ -+ -+$(obj)u-boot-bootstrap.imx: $(obj)u-boot-bootstrap.bin -+ $(obj)tools/mkimage -n $(IMX_CONFIG) -T imximage \ -+ -e $(CONFIG_BOOTSTRAP_BASE) -d $< $@ -+ -+$(obj)u-boot-bootstrap.kwb: $(obj)u-boot-bootstrap.bin -+ $(obj)tools/mkimage -n $(CONFIG_SYS_KWD_CONFIG) -T kwbimage \ -+ -a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_TEXT_BASE) -d $< $@ -+ -+$(obj)u-boot-bootstrap.sha1: $(obj)u-boot-bootstrap.bin -+ $(obj)tools/ubsha1 $(obj)u-boot-bootstrap.bin -+ -+$(obj)u-boot-bootstrap.dis: $(obj)u-boot-bootstrap -+ echo $(OBJDUMP) -S -d $< > $@ -+ $(OBJDUMP) -S -d $< > $@ -+ -+PAYLOAD_FILE_BASE=$(obj)u-boot.bin -+ifeq ($(CONFIG_BOOTSTRAP_GZIP),y) -+PAYLOAD_FILE_EXT:=.gz -+endif -+ifeq ($(CONFIG_BOOTSTRAP_LZMA),y) -+PAYLOAD_FILE_EXT:=.lzma -+endif -+ifeq ($(CONFIG_BOOTSTRAP_LZO),y) -+PAYLOAD_FILE_EXT:=.lzo -+endif -+ifeq ($(CONFIG_BOOTSTRAP_BZIP2),y) -+PAYLOAD_FILE_EXT:=.bz2 -+endif -+ -+PAYLOAD_FILE := $(PAYLOAD_FILE_BASE)$(PAYLOAD_FILE_EXT) -+ -+$(obj).payload.s: $(PAYLOAD_FILE) -+ echo ".globl payload_start" > $@ -+ echo ".globl payload_end" >> $@ -+ echo ".globl payload_size" >> $@ -+ echo ".globl payload_uncsize" >> $@ -+ echo .section .payload,\"a\",@progbits >> $@ -+ echo "payload_size:" >> $@ -+ echo -n ".word " >> $@ -+ wc -c $(PAYLOAD_FILE) | cut -f1 -d' ' >> $@ -+ echo "payload_uncsize:" >> $@ -+ echo -n ".word " >> $@ -+ wc -c $(obj)u-boot.bin | cut -f1 -d' ' >> $@ -+ echo "payload_start:" >> $@ -+ echo .incbin \"$(PAYLOAD_FILE)\" >> $@ -+ echo "payload_end:" >> $@ -+ -+ -+GEN_UBOOT_BOOTSTRAP = \ -+ UNDEF_SYM=`$(OBJDUMP) -x $(BOOTSTRAP_LIBBOARD) $(BOOTSTRAP_LIBS) | \ -+ sed -n -e 's/.*\($(SYM_PREFIX)__u_boot_cmd_.*\)/-u\1/p'|sort|uniq`;\ -+ cd $(LNDIR) && $(LD) --gc-sections $(BOOTSTRAP_LDFLAGS) $$UNDEF_SYM $(obj).payload.o $(__BOOTSTRAP_OBJS) \ -+ --start-group $(__BOOTSTRAP_LIBS) --end-group $(BOOTSTRAP_PLATFORM_LIBS) \ -+ -Map u-boot-bootstrap.map -o u-boot-bootstrap -+ -+$(obj)u-boot-bootstrap: depend $(SUBDIRS) $(BOOTSTRAP_OBJS) $(BOOTSTRAP_LIBS) $(BOOTSTRAP_LDSCRIPT) $(obj)u-boot-bootstrap.lds $(obj).payload.o #$(BOOTSTRAP_LIBBOARD) -+ #echo "--------$(BOOTSTRAP_LIBBOARD)" -+ #echo "$(GEN_UBOOT_BOOTSTRAP)" -+ $(GEN_UBOOT_BOOTSTRAP) -+ifeq ($(CONFIG_KALLSYMS),y) -+ smap=`$(call SYSTEM_MAP,u-boot-bootstrap) | \ -+ awk '$$2 ~ /[tTwW]/ {printf $$1 $$3 "\\\\000"}'` ; \ -+ $(CC) $(CFLAGS) -DSYSTEM_MAP="\"$${smap}\"" \ -+ -c common/system_map.c -o $(obj)common/system_map.o -+ $(GEN_UBOOT_BOOTSTRAP) $(obj)common/system_map.o -+endif -+ -+$(BOOTSTRAP_LIBBOARD): depend $(BOOTSTRAP_LIBS) -+ $(MAKE) -C $(dir $(subst $(obj),,$@)) $(notdir $@) -+endif -+ - $(SUBDIRS): depend - $(MAKE) -C $@ all - -@@ -371,6 +533,9 @@ - $(obj)u-boot.lds: $(LDSCRIPT) - $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$^ >$@ - -+$(obj)u-boot-bootstrap.lds: $(BOOTSTRAP_LDSCRIPT) -+ $(CPP) $(CPPFLAGS) $(BOOTSTRAP_LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$^ >$@ -+ - $(NAND_SPL): $(TIMESTAMP_FILE) $(VERSION_FILE) $(obj)include/autoconf.mk - $(MAKE) -C nand_spl/board/$(BOARDDIR) all - -@@ -3829,6 +3994,7 @@ - $(obj)board/netstar/{eeprom,crcek,crcit,*.srec,*.bin} \ - $(obj)board/trab/trab_fkt $(obj)board/voiceblue/eeprom \ - $(obj)board/armltd/{integratorap,integratorcp}/u-boot.lds \ -+ $(obj)u-boot-bootstrap.lds \ - $(obj)lib_blackfin/u-boot.lds \ - $(obj)u-boot.lds \ - $(obj)cpu/blackfin/bootrom-asm-offsets.[chs] -@@ -3853,6 +4019,12 @@ - @rm -f $(obj)u-boot $(obj)u-boot.map $(obj)u-boot.hex $(ALL) - @rm -f $(obj)u-boot.kwb - @rm -f $(obj)u-boot.imx -+ @rm -f $(obj)u-boot.bin{.gz,.lzma,.lzo,.bz2} -+ @rm -f $(obj)u-boot-bootstrap $(obj)u-boot-bootstrap.map $(obj)u-boot-bootstrap.hex -+ @rm -f $(obj)u-boot-bootstrap.kwb -+ @rm -f $(obj)u-boot-bootstrap.imx -+ @rm -f $(obj)u-boot-bootstrap.bin{.gz,.lzma,.lzo,.bz2} -+ @rm -f $(obj).payload.s - @rm -f $(obj)tools/{env/crc32.c,inca-swap-bytes} - @rm -f $(obj)cpu/mpc824x/bedbug_603e.c - @rm -f $(obj)include/asm/proc $(obj)include/asm/arch $(obj)include/asm ---- a/lib_mips/config.mk -+++ b/lib_mips/config.mk -@@ -47,6 +47,6 @@ - # On the other hand, we want PIC in the U-Boot code to relocate it from ROM - # to RAM. $28 is always used as gp. - # --PLATFORM_CPPFLAGS += -G 0 -mabicalls -fpic -+PLATFORM_CPPFLAGS += -G 0 -mabicalls -fpic -g - PLATFORM_CPPFLAGS += -msoft-float - PLATFORM_LDFLAGS += -G 0 -static -n -nostdlib ---- /dev/null -+++ b/cpu/mips/reset.c -@@ -0,0 +1,39 @@ -+/* -+ * (C) Copyright 2003 -+ * Wolfgang Denk, DENX Software Engineering, <wd@denx.de> -+ * -+ * See file CREDITS for list of people who contributed to this -+ * project. -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License as -+ * published by the Free Software Foundation; either version 2 of -+ * the License, or (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, -+ * MA 02111-1307 USA -+ */ -+ -+#include <common.h> -+#include <command.h> -+#include <asm/mipsregs.h> -+#include <asm/reboot.h> -+ -+void __attribute__((weak)) _machine_restart(void) -+{ -+} -+ -+int __attribute__((weak)) do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) -+{ -+ _machine_restart(); -+ -+ fprintf(stderr, "*** reset failed ***\n"); -+ return 0; -+} ---- /dev/null -+++ b/cpu/mips/reset_bootstrap.c -@@ -0,0 +1,39 @@ -+/* -+ * (C) Copyright 2003 -+ * Wolfgang Denk, DENX Software Engineering, <wd@denx.de> -+ * -+ * See file CREDITS for list of people who contributed to this -+ * project. -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License as -+ * published by the Free Software Foundation; either version 2 of -+ * the License, or (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, -+ * MA 02111-1307 USA -+ */ -+ -+#include <common.h> -+#include <command.h> -+#include <asm/mipsregs.h> -+#include <asm/reboot.h> -+ -+void __attribute__((weak)) _machine_restart(void) -+{ -+} -+ -+int __attribute__((weak)) do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) -+{ -+ _machine_restart(); -+ -+ printf("*** reset failed ***\n"); -+ return 0; -+} ---- /dev/null -+++ b/cpu/mips/start_bootstrap.S -@@ -0,0 +1,534 @@ -+/* -+ * Startup Code for MIPS32 CPU-core base on start.S source -+ * -+ * Copyright (c) 2010 Industrie Dial Face S.p.A. -+ * Luigi 'Comio' Mantellini <luigi.mantellini@idf-hit.com> -+ * -+ * Copyright (c) 2003 Wolfgang Denk <wd@denx.de> -+ * -+ * See file CREDITS for list of people who contributed to this -+ * project. -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License as -+ * published by the Free Software Foundation; either version 2 of -+ * the License, or (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, -+ * MA 02111-1307 USA -+ */ -+ -+//#include <generated/generic-asm-offsets.h> -+#include <config.h> -+#include <asm/regdef.h> -+//#include <asm/mipsregs.h> -+#define CP0_INDEX $0 -+#define CP0_RANDOM $1 -+#define CP0_ENTRYLO0 $2 -+#define CP0_ENTRYLO1 $3 -+#define CP0_CONF $3 -+#define CP0_CONTEXT $4 -+#define CP0_PAGEMASK $5 -+#define CP0_WIRED $6 -+#define CP0_INFO $7 -+#define CP0_BADVADDR $8 -+#define CP0_COUNT $9 -+#define CP0_ENTRYHI $10 -+#define CP0_COMPARE $11 -+#define CP0_STATUS $12 -+#define CP0_CAUSE $13 -+#define CP0_EPC $14 -+#define CP0_PRID $15 -+#define CP0_EBASE $15,1 -+#define CP0_CONFIG $16 -+#define CP0_LLADDR $17 -+#define CP0_WATCHLO $18 -+#define CP0_WATCHHI $19 -+#define CP0_XCONTEXT $20 -+#define CP0_FRAMEMASK $21 -+#define CP0_DIAGNOSTIC $22 -+#define CP0_DEBUG $23 -+#define CP0_DEPC $24 -+#define CP0_PERFORMANCE $25 -+#define CP0_ECC $26 -+#define CP0_CACHEERR $27 -+#define CP0_TAGLO $28 -+#define CP0_TAGHI $29 -+#define CP0_ERROREPC $30 -+#define CP0_DESAVE $31 -+#define ST0_CU0 0x10000000 -+#define CONF_CM_UNCACHED 2 -+#define CONF_CM_CACHABLE_NONCOHERENT 3 -+#define EBASEB_CPUNUM 0 -+#define EBASEF_CPUNUM (0x3ff << EBASEB_CPUNUM) -+#define MIPS_CONF7_RPS 4 //((unsigned long)(1) << 2) -+#define CONF_CM_CACHABLE_NONCOHERENT 3 -+#ifndef CONFIG_SYS_MIPS_CACHE_OPER_MODE -+#define CONFIG_SYS_MIPS_CACHE_OPER_MODE CONF_CM_CACHABLE_NONCOHERENT -+#endif -+ -+ /* -+ * For the moment disable interrupts, mark the kernel mode and -+ * set ST0_KX so that the CPU does not spit fire when using -+ * 64-bit addresses. -+ */ -+ .macro setup_c0_status set clr -+ .set push -+ mfc0 t0, CP0_STATUS -+ or t0, ST0_CU0 | \set | 0x1f | \clr -+ xor t0, 0x1f | \clr -+ mtc0 t0, CP0_STATUS -+ .set noreorder -+ sll zero, 3 # ehb -+ .set pop -+ .endm -+ -+ .macro setup_c0_status_reset -+#ifdef CONFIG_64BIT -+ setup_c0_status ST0_KX 0 -+#else -+ setup_c0_status 0 0 -+#endif -+ .endm -+ -+#define RVECENT(f,n) \ -+ b f; nop -+#define XVECENT(f,bev) \ -+ b f ; \ -+ li k0,bev -+ -+ .set noreorder -+ -+ .globl _start -+ .text -+_start: -+ RVECENT(reset,0) /* U-boot entry point */ -+ RVECENT(reset,1) /* software reboot */ -+#if defined(CONFIG_INCA_IP) -+ .word INFINEON_EBU_BOOTCFG /* EBU init code, fetched during booting */ -+ .word 0x00000000 /* phase of the flash */ -+#elif defined(CONFIG_PURPLE) -+ .word INFINEON_EBU_BOOTCFG /* EBU init code, fetched during booting */ -+ .word INFINEON_EBU_BOOTCFG /* EBU init code, fetched during booting */ -+#else -+ .word INFINEON_EBU_BOOTCFG /* EBU init code, fetched during booting */ -+ .word 0x00000000 /* phase of the flash */ -+#endif -+ RVECENT(romReserved,3) -+ RVECENT(romReserved,4) -+ RVECENT(romReserved,5) -+ RVECENT(romReserved,6) -+ RVECENT(romReserved,7) -+ RVECENT(romReserved,8) -+ RVECENT(romReserved,9) -+ RVECENT(romReserved,10) -+ RVECENT(romReserved,11) -+ RVECENT(romReserved,12) -+ RVECENT(romReserved,13) -+ RVECENT(romReserved,14) -+ RVECENT(romReserved,15) -+ RVECENT(romReserved,16) -+ RVECENT(romReserved,17) -+ RVECENT(romReserved,18) -+ RVECENT(romReserved,19) -+ RVECENT(romReserved,20) -+ RVECENT(romReserved,21) -+ RVECENT(romReserved,22) -+ RVECENT(romReserved,23) -+ RVECENT(romReserved,24) -+ RVECENT(romReserved,25) -+ RVECENT(romReserved,26) -+ RVECENT(romReserved,27) -+ RVECENT(romReserved,28) -+ RVECENT(romReserved,29) -+ RVECENT(romReserved,30) -+ RVECENT(romReserved,31) -+ RVECENT(romReserved,32) -+ RVECENT(romReserved,33) -+ RVECENT(romReserved,34) -+ RVECENT(romReserved,35) -+ RVECENT(romReserved,36) -+ RVECENT(romReserved,37) -+ RVECENT(romReserved,38) -+ RVECENT(romReserved,39) -+ RVECENT(romReserved,40) -+ RVECENT(romReserved,41) -+ RVECENT(romReserved,42) -+ RVECENT(romReserved,43) -+ RVECENT(romReserved,44) -+ RVECENT(romReserved,45) -+ RVECENT(romReserved,46) -+ RVECENT(romReserved,47) -+ RVECENT(romReserved,48) -+ RVECENT(romReserved,49) -+ RVECENT(romReserved,50) -+ RVECENT(romReserved,51) -+ RVECENT(romReserved,52) -+ RVECENT(romReserved,53) -+ RVECENT(romReserved,54) -+ RVECENT(romReserved,55) -+ RVECENT(romReserved,56) -+ RVECENT(romReserved,57) -+ RVECENT(romReserved,58) -+ RVECENT(romReserved,59) -+ RVECENT(romReserved,60) -+ RVECENT(romReserved,61) -+ RVECENT(romReserved,62) -+ RVECENT(romReserved,63) -+ XVECENT(romExcHandle,0x200) /* bfc00200: R4000 tlbmiss vector */ -+ RVECENT(romReserved,65) -+ RVECENT(romReserved,66) -+ RVECENT(romReserved,67) -+ RVECENT(romReserved,68) -+ RVECENT(romReserved,69) -+ RVECENT(romReserved,70) -+ RVECENT(romReserved,71) -+ RVECENT(romReserved,72) -+ RVECENT(romReserved,73) -+ RVECENT(romReserved,74) -+ RVECENT(romReserved,75) -+ RVECENT(romReserved,76) -+ RVECENT(romReserved,77) -+ RVECENT(romReserved,78) -+ RVECENT(romReserved,79) -+ XVECENT(romExcHandle,0x280) /* bfc00280: R4000 xtlbmiss vector */ -+ RVECENT(romReserved,81) -+ RVECENT(romReserved,82) -+ RVECENT(romReserved,83) -+ RVECENT(romReserved,84) -+ RVECENT(romReserved,85) -+ RVECENT(romReserved,86) -+ RVECENT(romReserved,87) -+ RVECENT(romReserved,88) -+ RVECENT(romReserved,89) -+ RVECENT(romReserved,90) -+ RVECENT(romReserved,91) -+ RVECENT(romReserved,92) -+ RVECENT(romReserved,93) -+ RVECENT(romReserved,94) -+ RVECENT(romReserved,95) -+ XVECENT(romExcHandle,0x300) /* bfc00300: R4000 cache vector */ -+ RVECENT(romReserved,97) -+ RVECENT(romReserved,98) -+ RVECENT(romReserved,99) -+ RVECENT(romReserved,100) -+ RVECENT(romReserved,101) -+ RVECENT(romReserved,102) -+ RVECENT(romReserved,103) -+ RVECENT(romReserved,104) -+ RVECENT(romReserved,105) -+ RVECENT(romReserved,106) -+ RVECENT(romReserved,107) -+ RVECENT(romReserved,108) -+ RVECENT(romReserved,109) -+ RVECENT(romReserved,110) -+ RVECENT(romReserved,111) -+ XVECENT(romExcHandle,0x380) /* bfc00380: R4000 general vector */ -+ RVECENT(romReserved,113) -+ RVECENT(romReserved,114) -+ RVECENT(romReserved,115) -+ RVECENT(romReserved,116) -+ RVECENT(romReserved,116) -+ RVECENT(romReserved,118) -+ RVECENT(romReserved,119) -+ RVECENT(romReserved,120) -+ RVECENT(romReserved,121) -+ RVECENT(romReserved,122) -+ RVECENT(romReserved,123) -+ RVECENT(romReserved,124) -+ RVECENT(romReserved,125) -+ RVECENT(romReserved,126) -+ RVECENT(romReserved,127) -+ -+ /* We hope there are no more reserved vectors! -+ * 128 * 8 == 1024 == 0x400 -+ * so this is address R_VEC+0x400 == 0xbfc00400 -+ */ -+#if 1 -+ XVECENT(romExcHandle,0x400); /* bfc00400: Int, CauseIV=1 */ -+ RVECENT(romReserved,129); -+ RVECENT(romReserved,130); -+ RVECENT(romReserved,131); -+ RVECENT(romReserved,132); -+ RVECENT(romReserved,133); -+ RVECENT(romReserved,134); -+ RVECENT(romReserved,135); -+ RVECENT(romReserved,136); -+ RVECENT(romReserved,137); -+ RVECENT(romReserved,138); -+ RVECENT(romReserved,139); -+ RVECENT(romReserved,140); -+ RVECENT(romReserved,141); -+ RVECENT(romReserved,142); -+ RVECENT(romReserved,143); -+ XVECENT(romExcHandle,0x480); /* bfc00480: EJTAG debug exception */ -+#elif defined(CONFIG_PURPLE) -+/* 0xbfc00400 */ -+ .word 0xdc870000 -+ .word 0xfca70000 -+ .word 0x20840008 -+ .word 0x20a50008 -+ .word 0x20c6ffff -+ .word 0x14c0fffa -+ .word 0x00000000 -+ .word 0x03e00008 -+ .word 0x00000000 -+ .word 0x00000000 -+/* 0xbfc00428 */ -+ .word 0xdc870000 -+ .word 0xfca70000 -+ .word 0x20840008 -+ .word 0x20a50008 -+ .word 0x20c6ffff -+ .word 0x14c0fffa -+ .word 0x00000000 -+ .word 0x03e00008 -+ .word 0x00000000 -+ .word 0x00000000 -+#endif /* CONFIG_PURPLE */ -+ .align 4 -+reset: -+#ifdef CONFIG_SYS_MIPS_MULTI_CPU -+ mfc0 k0, CP0_EBASE -+ and k0, EBASEF_CPUNUM -+ bne k0, zero, ifx_mips_handler_cpux -+ nop -+#endif -+ /* Clear watch registers. -+ */ -+ mtc0 zero, CP0_WATCHLO -+ mtc0 zero, CP0_WATCHHI -+ -+ /* WP(Watch Pending), SW0/1 should be cleared. */ -+ mtc0 zero, CP0_CAUSE -+ -+ setup_c0_status_reset -+#if defined(CONFIG_MIPS24KEC) || defined(CONFIG_MIPS34KC) -+ /* CONFIG7 register */ -+ /* Erratum "RPS May Cause Incorrect Instruction Execution" -+ * for 24KEC and 34KC */ -+ mfc0 k0, CP0_CONFIG, 7 -+ li k1, MIPS_CONF7_RPS -+ or k0, k1 -+ mtc0 k0, CP0_CONFIG, 7 -+#endif -+ -+ /* Init Timer */ -+ mtc0 zero, CP0_COUNT -+ mtc0 zero, CP0_COMPARE -+ -+ /* CONFIG0 register */ -+ li t0, CONF_CM_UNCACHED -+ mtc0 t0, CP0_CONFIG -+ -+ /* Initialize $gp. -+ */ -+ bal 1f -+ nop -+ .word _gp -+1: -+ lw gp, 0(ra) -+ -+ /* Initialize any external memory. -+ */ -+ la t9, lowlevel_init -+ jalr t9 -+ nop -+ -+ /* Initialize caches... -+ */ -+ la t9, mips_cache_reset -+ jalr t9 -+ nop -+ -+ /* ... and enable them. -+ */ -+ li t0, CONF_CM_CACHABLE_NONCOHERENT /*CONFIG_SYS_MIPS_CACHE_OPER_MODE*/ -+ mtc0 t0, CP0_CONFIG -+ -+ /* Set up temporary stack. -+ */ -+#ifdef CONFIG_SYS_INIT_RAM_LOCK_MIPS -+ li a0, CONFIG_SYS_INIT_SP_OFFSET -+ la t9, mips_cache_lock -+ jalr t9 -+ nop -+#endif -+ -+ li t0, CONFIG_SYS_SDRAM_BASE + CONFIG_SYS_INIT_SP_OFFSET -+ la sp, 0(t0) -+ -+ la t9, bootstrap_board_init_f -+ jr t9 -+ nop -+ -+/* -+ * void relocate_code (addr_sp, gd, addr_moni) -+ * -+ * This "function" does not return, instead it continues in RAM -+ * after relocating the monitor code. -+ * -+ * a0 = addr_sp -+ * a1 = gd -+ * a2 = destination address -+ */ -+ .globl relocate_code -+ .ent relocate_code -+relocate_code: -+ move sp, a0 /* Set new stack pointer */ -+ -+ li t0, CONFIG_BOOTSTRAP_TEXT_BASE -+ la t3, in_ram -+ lw t2, -12(t3) /* t2 <-- uboot_end_data */ -+ move t1, a2 -+ move s2, a2 /* s2 <-- destination address */ -+ -+ /* -+ * Fix $gp: -+ * -+ * New $gp = (Old $gp - CONFIG_SYS_MONITOR_BASE) + Destination Address -+ */ -+ move t6, gp -+ sub gp, CONFIG_BOOTSTRAP_TEXT_BASE -+ add gp, a2 /* gp now adjusted */ -+ sub s1, gp, t6 /* s1 <-- relocation offset */ -+ -+ /* -+ * t0 = source address -+ * t1 = target address -+ * t2 = source end address -+ */ -+ -+ /* -+ * Save destination address and size for later usage in flush_cache() -+ */ -+ move s0, a1 /* save gd in s0 */ -+ move a0, t1 /* a0 <-- destination addr */ -+ sub a1, t2, t0 /* a1 <-- size */ -+ -+ /* On the purple board we copy the code earlier in a special way -+ * in order to solve flash problems -+ */ -+#ifndef CONFIG_PURPLE -+1: -+ lw t3, 0(t0) -+ sw t3, 0(t1) -+ addu t0, 4 -+ ble t0, t2, 1b -+ addu t1, 4 /* delay slot */ -+#endif -+ -+ /* If caches were enabled, we would have to flush them here. -+ */ -+ -+ /* a0 & a1 are already set up for flush_cache(start, size) */ -+ la t9, flush_cache -+ jalr t9 -+ nop -+ -+ /* Jump to where we've relocated ourselves. -+ */ -+ addi t0, s2, in_ram - _start -+ jr t0 -+ nop -+ -+ .word _gp -+ .word _GLOBAL_OFFSET_TABLE_ -+ .word uboot_end_data -+ .word uboot_end -+ .word num_got_entries -+ -+in_ram: -+ /* -+ * Now we want to update GOT. -+ * -+ * GOT[0] is reserved. GOT[1] is also reserved for the dynamic object -+ * generated by GNU ld. Skip these reserved entries from relocation. -+ */ -+ lw t3, -4(t0) /* t3 <-- num_got_entries */ -+ lw t4, -16(t0) /* t4 <-- _GLOBAL_OFFSET_TABLE_ */ -+ lw t5, -20(t0) /* t5 <-- _gp */ -+ sub t4, t5 /* compute offset*/ -+ add t4, t4, gp /* t4 now holds relocated _GLOBAL_OFFSET_TABLE_ */ -+ addi t4, t4, 8 /* Skipping first two entries. */ -+ li t2, 2 -+1: -+ lw t1, 0(t4) -+ beqz t1, 2f -+ add t1, s1 -+ sw t1, 0(t4) -+2: -+ addi t2, 1 -+ blt t2, t3, 1b -+ addi t4, 4 /* delay slot */ -+ -+ /* Clear BSS. -+ */ -+ lw t1, -12(t0) /* t1 <-- uboot_end_data */ -+ lw t2, -8(t0) /* t2 <-- uboot_end */ -+ add t1, s1 /* adjust pointers */ -+ add t2, s1 -+ -+ sub t1, 4 -+1: -+ addi t1, 4 -+ bltl t1, t2, 1b -+ sw zero, 0(t1) /* delay slot */ -+ -+ move a0, s0 /* a0 <-- gd */ -+ la t9, bootstrap_board_init_r -+ jr t9 -+ move a1, s2 /* delay slot */ -+ -+ .end relocate_code -+ -+/* -+ * void copy_and_jump (void) -+ * -+ * This function copies/unzips the u-boot image and runs it. -+ * This "function" does not return -+ * -+*/ -+ .globl copy_and_jump -+ .ent copy_and_jump -+copy_and_jump: -+ -+ /* copy_uboot(CONFIG_SYS_MONITOR_BASE, payload_uncsize, payload_start, payload_size) */ -+ li a0, CONFIG_SYS_MONITOR_BASE -+ la a1, payload_uncsize -+ lw a1, 0(a1) -+ la a2, payload_start -+ la a3, payload_size -+ la t9, copy_uboot -+ jalr t9 -+ lw a3, 0(a3) /* delay slot */ -+ -+ li t9, CONFIG_SYS_MONITOR_BASE -+ jr t9 -+ nop -+ -+ .end copy_and_jump -+ -+ /* Exception handlers. -+ */ -+romReserved: -+ b romReserved -+ -+romExcHandle: -+ b romExcHandle -+#ifdef CONFIG_SYS_MIPS_MULTI_CPU -+/* -+ * Stop Slave CPUs -+ */ -+ifx_mips_handler_cpux: -+ wait; -+ b ifx_mips_handler_cpux; -+ nop; -+#endif ---- a/lib_mips/Makefile -+++ b/lib_mips/Makefile -@@ -24,6 +24,9 @@ - include $(TOPDIR)/config.mk - - LIB = $(obj)lib$(ARCH).a -+BOOTSTRAP_LIB = $(obj)lib$(ARCH)_bootstrap.a -+ -+BOOTSTRAP_LIB-$(CONFIG_BOOTSTRAP) = $(BOOTSTRAP_LIB) - - SOBJS-y += - -@@ -35,12 +38,21 @@ - endif - COBJS-y += time.o - --SRCS := $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c) -+BOOTSTRAP_COBJS-$(CONFIG_BOOTSTRAP) += board_bootstrap.o -+BOOTSTRAP_COBJS-$(CONFIG_BOOTSTRAP) += time.o -+ -+BOOTSTRAP_OBJS := $(addprefix $(obj),$(BOOTSTRAP_SOBJS-y) $(BOOTSTRAP_COBJS-y)) -+ -+SRCS := $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c) $(BOOTSTRAP_SOBJS-y:.o=.S) $(BOOTSTRAP_COBJS-y:.o=.c) - OBJS := $(addprefix $(obj),$(SOBJS-y) $(COBJS-y)) - -+all: $(obj).depend $(LIB) $(BOOTSTRAP_LIB) - $(LIB): $(obj).depend $(OBJS) - $(AR) $(ARFLAGS) $@ $(OBJS) - -+$(BOOTSTRAP_LIB): $(obj).depend $(BOOTSTRAP_OBJS) -+ $(AR) $(ARFLAGS) $@ $(BOOTSTRAP_OBJS) -+ - ######################################################################### - - # defines $(obj).depend target ---- /dev/null -+++ b/lib_mips/board_bootstrap.c -@@ -0,0 +1,270 @@ -+/* -+ * (C) Copyright 2010 Industrie Dial Face S.p.A. -+ * Luigi 'Comio' Mantellini, luigi.mantellini@idf-hit.com -+ * -+ * (C) Copyright 2003 -+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de. -+ * -+ * See file CREDITS for list of people who contributed to this -+ * project. -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License as -+ * published by the Free Software Foundation; either version 2 of -+ * the License, or (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, -+ * MA 02111-1307 USA -+ */ -+ -+#include <common.h> -+#include <command.h> -+#include <malloc.h> -+#include <stdio_dev.h> -+ -+DECLARE_GLOBAL_DATA_PTR; -+ -+extern int timer_init(void); -+ -+extern int incaip_set_cpuclk(void); -+ -+extern ulong uboot_end_data; -+extern ulong uboot_end; -+ -+#ifdef CONFIG_BOOTSTRAP_SERIAL -+static char *failed = "*** failed ***\n"; -+#endif -+/* -+ * mips_io_port_base is the begin of the address space to which x86 style -+ * I/O ports are mapped. -+ */ -+unsigned long mips_io_port_base = -1; -+ -+int __board_early_init_f(void) -+{ -+ /* -+ * Nothing to do in this dummy implementation -+ */ -+ return 0; -+} -+ -+int board_early_init_f(void) __attribute__((weak, alias("__board_early_init_f"))); -+int bootstrap_board_early_init_f(void) __attribute__((weak, alias("board_early_init_f"))); -+ -+static int bootstrap_init_func_ram (void) -+{ -+ if ((gd->ram_size = bootstrap_initdram (0)) > 0) { -+ return (0); -+ } -+#ifdef CONFIG_BOOTSTRAP_SERIAL -+ puts (failed); -+#endif -+ return (1); -+} -+ -+static int bootstrap_display_banner(void) -+{ -+#ifdef CONFIG_BOOTSTRAP_SERIAL -+ puts ("bootstrap..."); -+#endif -+ return (0); -+} -+ -+static int bootstrap_init_baudrate (void) -+{ -+#if defined(CONFIG_BOOTSTRAP_BAUDRATE) -+ gd->baudrate = CONFIG_BOOTSTRAP_BAUDRATE; -+#else -+ gd->baudrate = CONFIG_BAUDRATE; -+#endif -+ return 0; -+} -+ -+/* -+ * Breath some life into the board... -+ * -+ * The first part of initialization is running from Flash memory; -+ * its main purpose is to initialize the RAM so that we -+ * can relocate the monitor code to RAM. -+ */ -+ -+/* -+ * All attempts to come up with a "common" initialization sequence -+ * that works for all boards and architectures failed: some of the -+ * requirements are just _too_ different. To get rid of the resulting -+ * mess of board dependend #ifdef'ed code we now make the whole -+ * initialization sequence configurable to the user. -+ * -+ * The requirements for any new initalization function is simple: it -+ * receives a pointer to the "global data" structure as it's only -+ * argument, and returns an integer return code, where 0 means -+ * "continue" and != 0 means "fatal error, hang the system". -+ */ -+typedef int (init_fnc_t) (void); -+ -+static init_fnc_t *init_sequence[] = { -+ bootstrap_board_early_init_f, -+ timer_init, -+ bootstrap_init_baudrate,/* initialze baudrate settings */ -+#ifdef CONFIG_BOOTSTRAP_SERIAL -+ serial_init, /* serial communications setup */ -+#endif -+ bootstrap_display_banner, /* say that we are here */ -+ bootstrap_checkboard, -+ bootstrap_init_func_ram, -+ NULL, -+}; -+ -+ -+void bootstrap_board_init_f(ulong bootflag) -+{ -+ gd_t gd_data, *id; -+ bd_t *bd; -+ init_fnc_t **init_fnc_ptr; -+ ulong addr, addr_sp, len = (ulong)&uboot_end - CONFIG_BOOTSTRAP_TEXT_BASE; -+ ulong *s; -+ -+ /* Pointer is writable since we allocated a register for it. -+ */ -+ gd = &gd_data; -+ /* compiler optimization barrier needed for GCC >= 3.4 */ -+ __asm__ __volatile__("": : :"memory"); -+ -+ memset ((void *)gd, 0, sizeof (gd_t)); -+ -+ for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) { -+ if ((*init_fnc_ptr)() != 0) { -+ bootstrap_hang (); -+ } -+ } -+ -+ /* -+ * Now that we have DRAM mapped and working, we can -+ * relocate the code and continue running from DRAM. -+ */ -+ addr = CONFIG_SYS_SDRAM_BASE + gd->ram_size; -+ -+ /* We can reserve some RAM "on top" here. -+ */ -+ -+ /* round down to next 4 kB limit. -+ */ -+ addr &= ~(4096 - 1); -+ debug ("Top of RAM usable for U-Boot at: %08lx\n", addr); -+ -+ /* Reserve memory for U-Boot code, data & bss -+ * round down to next 16 kB limit -+ */ -+ addr -= len; -+ addr &= ~(16 * 1024 - 1); -+ -+ debug ("Reserving %ldk for U-Boot at: %08lx\n", len >> 10, addr); -+ -+ /* Reserve memory for malloc() arena. -+ */ -+ addr_sp = addr - CONFIG_SYS_MALLOC_LEN; -+ debug ("Reserving %dk for malloc() at: %08lx\n", -+ CONFIG_SYS_MALLOC_LEN >> 10, addr_sp); -+ -+ /* -+ * (permanently) allocate a Board Info struct -+ * and a permanent copy of the "global" data -+ */ -+ addr_sp -= sizeof(bd_t); -+ bd = (bd_t *)addr_sp; -+ gd->bd = bd; -+ debug ("Reserving %zu Bytes for Board Info at: %08lx\n", -+ sizeof(bd_t), addr_sp); -+ -+ addr_sp -= sizeof(gd_t); -+ id = (gd_t *)addr_sp; -+ debug ("Reserving %zu Bytes for Global Data at: %08lx\n", -+ sizeof (gd_t), addr_sp); -+ -+ /* Reserve memory for boot params. -+ */ -+ addr_sp -= CONFIG_SYS_BOOTPARAMS_LEN; -+ bd->bi_boot_params = addr_sp; -+ debug ("Reserving %dk for boot params() at: %08lx\n", -+ CONFIG_SYS_BOOTPARAMS_LEN >> 10, addr_sp); -+ -+ /* -+ * Finally, we set up a new (bigger) stack. -+ * -+ * Leave some safety gap for SP, force alignment on 16 byte boundary -+ * Clear initial stack frame -+ */ -+ addr_sp -= 16; -+ addr_sp &= ~0xF; -+ s = (ulong *)addr_sp; -+ *s-- = 0; -+ *s-- = 0; -+ addr_sp = (ulong)s; -+ debug ("Stack Pointer at: %08lx\n", addr_sp); -+ -+ /* -+ * Save local variables to board info struct -+ */ -+ bd->bi_memstart = CONFIG_SYS_SDRAM_BASE; /* start of DRAM memory */ -+ bd->bi_memsize = gd->ram_size; /* size of DRAM memory in bytes */ -+ bd->bi_baudrate = gd->baudrate; /* Console Baudrate */ -+ -+ memcpy (id, (void *)gd, sizeof (gd_t)); -+ -+ /* On the purple board we copy the code in a special way -+ * in order to solve flash problems -+ */ -+ relocate_code (addr_sp, id, addr); -+ -+ /* NOTREACHED - relocate_code() does not return */ -+} -+/************************************************************************ -+ * -+ * This is the next part if the initialization sequence: we are now -+ * running from RAM and have a "normal" C environment, i. e. global -+ * data can be written, BSS has been cleared, the stack size in not -+ * that critical any more, etc. -+ * -+ ************************************************************************ -+ */ -+ -+void bootstrap_board_init_r (gd_t *id, ulong dest_addr) -+{ -+ extern void malloc_bin_reloc (void); -+ extern void copy_and_jump(void); -+ -+ bd_t *bd; -+ -+ gd = id; -+ gd->flags |= GD_FLG_RELOC; /* tell others: relocation done */ -+ -+ debug ("Now running in RAM - U-Boot at: %08lx\n", dest_addr); -+ -+ gd->reloc_off = dest_addr - CONFIG_BOOTSTRAP_TEXT_BASE; -+ -+ bd = gd->bd; -+ -+ /* The Malloc area is immediately below the monitor copy in DRAM */ -+ mem_malloc_init(CONFIG_BOOTSTRAP_BASE + gd->reloc_off - -+ CONFIG_SYS_MALLOC_LEN, CONFIG_SYS_MALLOC_LEN); -+ malloc_bin_reloc(); -+ -+ copy_and_jump(); -+ -+ /* NOTREACHED - no way out of command loop except booting */ -+} -+ -+void bootstrap_hang (void) -+{ -+#ifdef CONFIG_BOOTSTRAP_SERIAL -+ puts ("### ERROR ### Please RESET the board ###\n"); -+#endif -+ for (;;); -+} ---- a/common/Makefile -+++ b/common/Makefile -@@ -24,6 +24,9 @@ - include $(TOPDIR)/config.mk - - LIB = $(obj)libcommon.a -+BOOTSTRAP_LIB = $(obj)libcommon_bootstrap.a -+ -+BOOTSTRAP_LIB-$(CONFIG_BOOTSTRAP) = $(BOOTSTRAP_LIB) - - AOBJS = - -@@ -168,18 +171,27 @@ - COBJS-$(CONFIG_UPDATE_TFTP) += update.o - COBJS-$(CONFIG_USB_KEYBOARD) += usb_kbd.o - -+BOOTSTRAP_COBJS-$(CONFIG_BOOTSTRAP) += dlmalloc.o -+BOOTSTRAP_COBJS-$(CONFIG_BOOTSTRAP_SERIAL) += console_bootstrap.o -+ -+BOOTSTRAP_COBJS := $(sort $(BOOTSTRAP_COBJS-y)) -+BOOTSTRAP_OBJS := $(addprefix $(obj),$(BOOTSTRAP_COBJS)) -+ - - COBJS := $(sort $(COBJS-y)) --SRCS := $(AOBJS:.o=.S) $(COBJS:.o=.c) -+SRCS := $(AOBJS:.o=.S) $(COBJS:.o=.c) $(BOOTSTRAP_COBJS:.o=.c) - OBJS := $(addprefix $(obj),$(AOBJS) $(COBJS)) - - CPPFLAGS += -I.. - --all: $(LIB) $(AOBJS) -+all: $(LIB) $(BOOTSTRAP_LIB-y) $(AOBJS) - - $(LIB): $(obj).depend $(OBJS) - $(AR) $(ARFLAGS) $@ $(OBJS) - -+$(BOOTSTRAP_LIB): $(obj).depend $(BOOTSTRAP_OBJS) -+ $(AR) $(ARFLAGS) $@ $(BOOTSTRAP_OBJS) -+ - $(obj)env_embedded.o: $(src)env_embedded.c $(obj)../tools/envcrc - $(CC) $(AFLAGS) -Wa,--no-warn \ - -DENV_CRC=$(shell $(obj)../tools/envcrc) \ ---- /dev/null -+++ b/common/console_bootstrap.c -@@ -0,0 +1,81 @@ -+/* -+ * (C) Copyright 2000 -+ * Paolo Scaffardi, AIRVENT SAM s.p.a - RIMINI(ITALY), arsenio@tin.it -+ * -+ * See file CREDITS for list of people who contributed to this -+ * project. -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License as -+ * published by the Free Software Foundation; either version 2 of -+ * the License, or (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, -+ * MA 02111-1307 USA -+ */ -+ -+#include <common.h> -+#include <stdarg.h> -+#include <malloc.h> -+ -+/** U-Boot INITIAL CONSOLE-COMPATIBLE FUNCTION *****************************/ -+ -+int getc(void) -+{ -+ /* Send directly to the handler */ -+ return serial_getc(); -+} -+ -+int tstc(void) -+{ -+ /* Send directly to the handler */ -+ return serial_tstc(); -+} -+ -+void putc(const char c) -+{ -+ /* Send directly to the handler */ -+ serial_putc(c); -+} -+ -+void puts(const char *s) -+{ -+ serial_puts(s); -+} -+ -+void printf(const char *fmt, ...) -+{ -+ va_list args; -+ char printbuffer[CONFIG_SYS_PBSIZE]; -+ -+ va_start(args, fmt); -+ -+ /* For this to work, printbuffer must be larger than -+ * anything we ever want to print. -+ */ -+ vsprintf(printbuffer, fmt, args); -+ va_end(args); -+ -+ /* Print the string */ -+ puts(printbuffer); -+} -+ -+void vprintf(const char *fmt, va_list args) -+{ -+ char printbuffer[CONFIG_SYS_PBSIZE]; -+ -+ /* For this to work, printbuffer must be larger than -+ * anything we ever want to print. -+ */ -+ vsprintf(printbuffer, fmt, args); -+ -+ /* Print the string */ -+ puts(printbuffer); -+} ---- a/config.mk -+++ b/config.mk -@@ -136,7 +136,7 @@ - ARFLAGS = crv - endif - RELFLAGS= $(PLATFORM_RELFLAGS) --DBGFLAGS= -g # -DDEBUG -+DBGFLAGS= -g - OPTFLAGS= -Os #-fomit-frame-pointer - ifndef LDSCRIPT - #LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds.debug -@@ -146,6 +146,11 @@ - LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds - endif - endif -+ifeq ($(CONFIG_BOOTSTRAP),y) -+ifndef BOOTSTRAP_LDSCRIPT -+BOOTSTRAP_LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot-bootstrap.lds -+endif -+endif - OBJCFLAGS += --gap-fill=0xff - - gccincdir := $(shell $(CC) -print-file-name=include) -@@ -156,6 +161,10 @@ - CPPFLAGS += -DTEXT_BASE=$(TEXT_BASE) - endif - -+ifneq ($(CONFIG_BOOTSTRAP_TEXT_BASE),) -+CPPFLAGS += -DCONFIG_BOOTSTRAP_TEXT_BASE=$(CONFIG_BOOTSTRAP_TEXT_BASE) -+endif -+ - ifneq ($(RESET_VECTOR_ADDRESS),) - CPPFLAGS += -DRESET_VECTOR_ADDRESS=$(RESET_VECTOR_ADDRESS) - endif -@@ -176,6 +185,7 @@ - endif - - CFLAGS += $(call cc-option,-fno-stack-protector) -+CFLAGS += $(call cc-option,-ffunction-sections) - - # avoid trigraph warnings while parsing pci.h (produced by NIOS gcc-2.9) - # this option have to be placed behind -Wall -- that's why it is here -@@ -203,6 +213,13 @@ - LDFLAGS += -Ttext $(TEXT_BASE) - endif - -+ifeq ($(CONFIG_BOOTSTRAP),y) -+BOOTSTRAP_LDFLAGS += -Bstatic -T $(obj)u-boot-bootstrap.lds $(PLATFORM_LDFLAGS) -+ifneq ($(CONFIG_BOOTSTRAP_TEXT_BASE),) -+BOOTSTRAP_LDFLAGS += -Ttext $(CONFIG_BOOTSTRAP_TEXT_BASE) -+endif -+endif -+ - # Location of a usable BFD library, where we define "usable" as - # "built for ${HOST}, supports ${TARGET}". Sensible values are - # - When cross-compiling: the root of the cross-environment ---- a/include/common.h -+++ b/include/common.h -@@ -722,6 +722,27 @@ - int cpu_release(int nr, int argc, char *argv[]); - #endif - -+/* Bootstrap specific code */ -+#ifdef CONFIG_BOOTSTRAP -+void bootstrap_hang(void) __attribute__ ((noreturn)); -+void bootstrap_board_init_f(ulong) __attribute__ ((noreturn)); -+void bootstrap_board_init_r(gd_t *, ulong) __attribute__ ((noreturn)); -+int bootstrap_checkboard(void); -+ -+int bootstrap_serial_init(void); -+void bootstrap_serial_exit(void); -+void bootstrap_serial_setbrg(void); -+void bootstrap_serial_putc(const char); -+void bootstrap_serial_putc_raw(const char); -+void bootstrap_serial_puts(const char *); -+int bootstrap_serial_getc(void); -+int bootstrap_serial_tstc(void); -+ -+phys_size_t bootstrap_initdram (int); -+ -+int copy_uboot(void *dst, size_t unc_size, void *src, size_t size); -+#endif -+ - #endif /* __ASSEMBLY__ */ - - /* Put only stuff here that the assembler can digest */ ---- a/lib_generic/Makefile -+++ b/lib_generic/Makefile -@@ -24,6 +24,9 @@ - include $(TOPDIR)/config.mk - - LIB = $(obj)libgeneric.a -+BOOTSTRAP_LIB = $(obj)libgeneric_bootstrap.a -+ -+BOOTSTRAP_LIB-$(CONFIG_BOOTSTRAP) = $(BOOTSTRAP_LIB) - - COBJS-$(CONFIG_ADDR_MAP) += addr_map.o - COBJS-$(CONFIG_BZIP2) += bzlib.o -@@ -50,14 +53,37 @@ - COBJS-y += vsprintf.o - COBJS-$(CONFIG_ZLIB) += zlib.o - COBJS-$(CONFIG_RBTREE) += rbtree.o -+BOOTSTRAP_COBJS-$(CONFIG_BOOTSTRAP) += string.o -+BOOTSTRAP_COBJS-$(CONFIG_BOOTSTRAP) += vsprintf.o -+BOOTSTRAP_COBJS-$(CONFIG_BOOTSTRAP) += div64.o -+BOOTSTRAP_COBJS-$(CONFIG_BOOTSTRAP) += ctype.o -+BOOTSTRAP_COBJS-$(CONFIG_BOOTSTRAP) += time.o -+BOOTSTRAP_COBJS-$(CONFIG_BOOTSTRAP) += bootstrap.o -+BOOTSTRAP_COBJS-$(CONFIG_BOOTSTRAP_GZIP) += zlib.o -+BOOTSTRAP_COBJS-$(CONFIG_BOOTSTRAP_GZIP) += gunzip.o -+BOOTSTRAP_COBJS-$(CONFIG_BOOTSTRAP_GZIP) += crc32.o -+BOOTSTRAP_COBJS-$(CONFIG_BOOTSTRAP_BZIP2) += bzlib.o -+BOOTSTRAP_COBJS-$(CONFIG_BOOTSTRAP_BZIP2) += bzlib_crctable.o -+BOOTSTRAP_COBJS-$(CONFIG_BOOTSTRAP_BZIP2) += bzlib_decompress.o -+BOOTSTRAP_COBJS-$(CONFIG_BOOTSTRAP_BZIP2) += bzlib_randtable.o -+BOOTSTRAP_COBJS-$(CONFIG_BOOTSTRAP_BZIP2) += bzlib_huffman.o -+ -+BOOTSTRAP_COBJS := $(BOOTSTRAP_COBJS-y) -+BOOTSTRAP_OBJS := $(addprefix $(obj),$(BOOTSTRAP_COBJS)) - - COBJS := $(COBJS-y) --SRCS := $(COBJS:.o=.c) -+SRCS := $(COBJS:.o=.c) $(BOOTSTRAP_COBJS:.o=.c) - OBJS := $(addprefix $(obj),$(COBJS)) - -+all: $(obj).depend $(LIB) $(BOOTSTRAP_LIB-y) -+ - $(LIB): $(obj).depend $(OBJS) - $(AR) $(ARFLAGS) $@ $(OBJS) - -+$(BOOTSTRAP_LIB): $(obj).depend $(BOOTSTRAP_OBJS) -+ $(AR) $(ARFLAGS) $@ $(BOOTSTRAP_OBJS) -+ -+ - ######################################################################### - - # defines $(obj).depend target ---- /dev/null -+++ b/lib_generic/bootstrap.c -@@ -0,0 +1,95 @@ -+/* -+ * (C) Copyright 2010 Industrie Dial Face S.p.A. -+ * Luigi 'Comio' Mantellini, luigi.mantellini@idf-hit.com -+ * -+ * (C) Copyright 2003 -+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de. -+ * -+ * See file CREDITS for list of people who contributed to this -+ * project. -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License as -+ * published by the Free Software Foundation; either version 2 of -+ * the License, or (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, -+ * MA 02111-1307 USA -+ */ -+ -+#include <common.h> -+#include <command.h> -+#include <stdio_dev.h> -+ -+#ifdef CONFIG_BOOTSTRAP_LZMA -+#include <lzma/LzmaTypes.h> -+#include <lzma/LzmaDec.h> -+#include <lzma/LzmaTools.h> -+#endif /* CONFIG_BOOTSTRAP_LZMA */ -+ -+#ifdef CONFIG_BOOTSTRAP_LZO -+#include <linux/lzo.h> -+#endif /* CONFIG_BOOTSTRAP_LZO */ -+ -+#ifdef CONFIG_BOOTSTRAP_BZIP2 -+#include <bzlib.h> -+#endif -+ -+DECLARE_GLOBAL_DATA_PTR; -+ -+#if defined(CONFIG_BOOTSTRAP_SERIAL) -+static const char *algo = -+#if defined(CONFIG_BOOTSTRAP_GZIP) -+ "gzip"; -+#elif defined(CONFIG_BOOTSTRAP_LZMA) -+ "lzma"; -+#elif defined(CONFIG_BOOTSTRAP_LZO) -+ "lzo"; -+#elif defined(CONFIG_BOOTSTRAP_BZIP2) -+ "bzip2"; -+#else -+ "flat"; -+#endif -+#endif -+ -+int copy_uboot(void *dst, size_t unc_size, void *src, size_t size) -+{ -+ int ret; -+ debug("copy from %p (%d) to %p (%d)\n", src, size, dst, unc_size); -+#if defined(CONFIG_BOOTSTRAP_SERIAL) -+ printf("Uncompressing payload (%s)...", algo); -+#endif -+#if defined(CONFIG_BOOTSTRAP_GZIP) -+ ret = gunzip(dst, unc_size, src, &size); -+#elif defined(CONFIG_BOOTSTRAP_LZMA) -+ SizeT outsize = unc_size; -+ ret = lzmaBuffToBuffDecompress(dst, &outsize, src, size); -+#elif defined(CONFIG_BOOTSTRAP_LZO) -+ uint unc_len = unc_size; -+ ret = lzop_decompress(src, size, dst, &unc_len); -+#elif defined(CONFIG_BOOTSTRAP_BZIP2) -+ uint unc_len = unc_size; -+ ret = BZ2_bzBuffToBuffDecompress ((char*)dst, &unc_len, (char *)src, size, CONFIG_SYS_MALLOC_LEN < (4096 * 1024), 0); -+#else -+ memcpy(dst, src, size); -+ ret = 0; -+#endif -+ if (ret) { -+#if defined(CONFIG_BOOTSTRAP_SERIAL) -+ printf("failed with error %d.\n", ret); -+#endif -+ bootstrap_hang(); -+ } else { -+#if defined(CONFIG_BOOTSTRAP_SERIAL) -+ puts("done.\n"); -+#endif -+ } -+ return ret; -+} ---- a/lib_generic/lzma/Makefile -+++ b/lib_generic/lzma/Makefile -@@ -32,7 +32,9 @@ - - CFLAGS += -D_LZMA_PROB32 - --COBJS-$(CONFIG_LZMA) += LzmaDec.o LzmaTools.o -+COBJS-$(CONFIG_LZMA)$(CONFIG_BOOTSTRAP_LZMA) += LzmaDec.o LzmaTools.o -+ -+COBJS-y += $(COBJS-yy) - - COBJS = $(COBJS-y) - SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c) ---- a/lib_generic/lzo/Makefile -+++ b/lib_generic/lzo/Makefile -@@ -27,7 +27,9 @@ - - SOBJS = - --COBJS-$(CONFIG_LZO) += lzo1x_decompress.o -+COBJS-$(CONFIG_LZO)$(CONFIG_BOOTSTRAP_LZO) += lzo1x_decompress.o -+ -+COBJS-y += $(OBJS-yy) - - COBJS = $(COBJS-y) - SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c) ---- a/cpu/mips/Makefile -+++ b/cpu/mips/Makefile -@@ -24,25 +24,46 @@ - include $(TOPDIR)/config.mk - - LIB = $(obj)lib$(CPU).a -+BOOTSTRAP_LIB = $(obj)lib$(CPU)_bootstrap.a -+ -+BOOTSTRAP_LIB-$(CONFIG_BOOTSTRAP) = $(BOOTSTRAP_LIB) - - START = start.o - SOBJS-y = cache.o --COBJS-y = cpu.o interrupts.o -+COBJS-y = cpu.o reset.o interrupts.o - - SOBJS-$(CONFIG_INCA_IP) += incaip_wdt.o - COBJS-$(CONFIG_INCA_IP) += asc_serial.o incaip_clock.o -+#COBJS-$(CONFIG_IFX_ASC) += ifx_asc.o - COBJS-$(CONFIG_PURPLE) += asc_serial.o - COBJS-$(CONFIG_SOC_AU1X00) += au1x00_eth.o au1x00_serial.o au1x00_usb_ohci.o - --SRCS := $(START:.o=.S) $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c) -+#BOOTSTRAP_START = start_bootstrap.o -+BOOTSTRAP_START-$(CONFIG_BOOTSTRAP) += start_bootstrap.o #$(BOOTSTRAP_START) -+BOOTSTRAP_COBJS-$(CONFIG_BOOTSTRAP) += cpu.o interrupts.o reset_bootstrap.o -+BOOTSTRAP_SOBJS-$(CONFIG_BOOTSTRAP) += cache.o -+BOOTSTRAP_COBJS-$(CONFIG_DANUBE) += danube-clock.o -+BOOTSTRAP_COBJS-$(CONFIG_AR9) += ar9-clock.o -+BOOTSTRAP_COBJS-$(CONFIG_BOOTSTRAP_SERIAL) += ifx_asc.o -+ -+BOOTSTRAP_OBJS := $(addprefix $(obj),$(BOOTSTRAP_SOBJS-y) $(BOOTSTRAP_COBJS-y)) -+BOOTSTRAP_START := $(addprefix $(obj),$(BOOTSTRAP_START-y)) -+ -+SRCS := $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c) $(BOOTSTRAP_START-y:.o=.S) $(BOOTSTRAP_SOBJS-y:.o=.S) $(BOOTSTRAP_COBJS-y:.o=.c) - OBJS := $(addprefix $(obj),$(SOBJS-y) $(COBJS-y)) - START := $(addprefix $(obj),$(START)) - --all: $(obj).depend $(START) $(LIB) -+all: $(obj).depend $(START) $(LIB) $(BOOTSTRAP_START-y) $(BOOTSTRAP_LIB-y) - --$(LIB): $(OBJS) -+$(LIB): $(OBJS) - $(AR) $(ARFLAGS) $@ $(OBJS) - -+#$(BOOTSTRAP_START): $(obj).depend -+ -+$(BOOTSTRAP_LIB): $(BOOTSTRAP_OBJS) -+ $(AR) $(ARFLAGS) $@ $(BOOTSTRAP_OBJS) -+ -+ - ######################################################################### - - # defines $(obj).depend target |