* [U-Boot] [RFC 0/2] Add support for bootstrap stage and compressed U-Boot image
@ 2010-11-30 10:30 luigi.mantellini at idf-hit.com
2010-11-30 10:30 ` [U-Boot] [RFC 1/2] Add support for bootstrap stage that allows to have a compressed U-Boot image. The final image will named "u-boot-bootstrap" luigi.mantellini at idf-hit.com
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: luigi.mantellini at idf-hit.com @ 2010-11-30 10:30 UTC (permalink / raw)
To: u-boot
From: Luigi 'Comio' Mantellini <luigi.mantellini@idf-hit.com>
Hi All,
The following patches introduce the bootstrap support that enable to have a compressed U-Boot image.
The bootstrap code supports the uncompressed as well as compressed payloads, using LZMA, GZIP, BZIP2 and LZO.
Actually I developed just the mips version (using qemu-mips board)...
Please see the Patch #1 for the required defines to enable the required features.
Of course, any suggestion is welcome.
ciao
luigi
Luigi 'Comio' Mantellini (2):
Add support for bootstrap stage that allows to have a compressed
U-Boot image. The final image will named "u-boot-bootstrap".
Add support for bootstrap stage to QEMU-MIPS board.
.gitignore | 24 ++-
Makefile | 172 ++++++++++++-
arch/mips/config.mk | 2 +-
arch/mips/cpu/Makefile | 28 ++-
arch/mips/cpu/cpu.c | 12 -
arch/mips/cpu/reset.c | 39 +++
arch/mips/cpu/reset_bootstrap.c | 39 +++
arch/mips/cpu/start_bootstrap.S | 452 +++++++++++++++++++++++++++++++++
arch/mips/lib/Makefile | 15 +-
arch/mips/lib/board_bootstrap.c | 261 +++++++++++++++++++
board/qemu-mips/Makefile | 15 +-
board/qemu-mips/config.mk | 7 +-
board/qemu-mips/qemu-mips_bootstrap.c | 48 ++++
board/qemu-mips/u-boot-bootstrap.lds | 73 ++++++
common/Makefile | 15 +-
common/console_bootstrap.c | 85 ++++++
config.mk | 19 ++-
include/common.h | 21 ++
include/configs/qemu-mips.h | 14 +-
lib/Makefile | 28 ++-
lib/bootstrap.c | 89 +++++++
lib/lzma/Makefile | 4 +-
lib/lzo/Makefile | 4 +-
23 files changed, 1434 insertions(+), 32 deletions(-)
create mode 100644 arch/mips/cpu/reset.c
create mode 100644 arch/mips/cpu/reset_bootstrap.c
create mode 100644 arch/mips/cpu/start_bootstrap.S
create mode 100644 arch/mips/lib/board_bootstrap.c
create mode 100644 board/qemu-mips/qemu-mips_bootstrap.c
create mode 100644 board/qemu-mips/u-boot-bootstrap.lds
create mode 100644 common/console_bootstrap.c
create mode 100644 lib/bootstrap.c
--
1.7.3
^ permalink raw reply [flat|nested] 8+ messages in thread
* [U-Boot] [RFC 1/2] Add support for bootstrap stage that allows to have a compressed U-Boot image. The final image will named "u-boot-bootstrap".
2010-11-30 10:30 [U-Boot] [RFC 0/2] Add support for bootstrap stage and compressed U-Boot image luigi.mantellini at idf-hit.com
@ 2010-11-30 10:30 ` luigi.mantellini at idf-hit.com
2010-12-04 3:05 ` Mike Frysinger
2010-11-30 10:30 ` [U-Boot] [RFC 2/2] Add support for bootstrap stage to QEMU-MIPS board luigi.mantellini at idf-hit.com
2010-11-30 14:35 ` [U-Boot] [RFC 0/2] Add support for bootstrap stage and compressed U-Boot image Luigi 'Comio' Mantellini
2 siblings, 1 reply; 8+ messages in thread
From: luigi.mantellini at idf-hit.com @ 2010-11-30 10:30 UTC (permalink / raw)
To: u-boot
From: Luigi 'Comio' Mantellini <luigi.mantellini@idf-hit.com>
The following symbols are allowed:
CONFIG_BOOTSTRAP
Enable the bootstrap stage. A minimal code is added to uncompress or copy
the payload (a full U-Boot image).
CONFIG_BOOTSTRAP_TEXT_BASE
TEXT_BASE of the bootstrap code.
CONFIG_BOOTSTRAP_SKIP_LOWLEVEL_INIT
Skip the lowlevel initialization.
CONFIG_BOOTSTRAP_BAUDRATE
Initial and hardcoded serial boudrate
CONFIG_BOOTSTRAP_BZIP2
Enable BZIP2 compression of the U-Boot image.
CONFIG_BOOTSTRAP_GZIP
Enable GZIP compression of the U-Boot image.
CONFIG_BOOTSTRAP_LZMA
Enable LZMA compression of the U-Boot image.
CONFIG_BOOTSTRAP_LZO
Enable LZO compression of the U-Boot image.
The board should define the following functions:
phys_size_t bootstrap_initdram(int board_type);
int bootstrap_checkboard(void);
int bootstrap_misc_init_r(void);
void lowlevel_init(void);
Signed-off-by: Luigi 'Comio' Mantellini <luigi.mantellini@idf-hit.com>
---
.gitignore | 24 ++-
Makefile | 172 +++++++++++++++-
arch/mips/config.mk | 2 +-
arch/mips/cpu/Makefile | 28 ++-
arch/mips/cpu/cpu.c | 12 -
arch/mips/cpu/reset.c | 39 ++++
arch/mips/cpu/reset_bootstrap.c | 39 ++++
arch/mips/cpu/start_bootstrap.S | 452 +++++++++++++++++++++++++++++++++++++++
arch/mips/lib/Makefile | 15 ++-
arch/mips/lib/board_bootstrap.c | 261 ++++++++++++++++++++++
common/Makefile | 15 ++-
common/console_bootstrap.c | 85 ++++++++
config.mk | 19 ++-
include/common.h | 21 ++
lib/Makefile | 28 +++-
lib/bootstrap.c | 89 ++++++++
lib/lzma/Makefile | 4 +-
lib/lzo/Makefile | 4 +-
18 files changed, 1281 insertions(+), 28 deletions(-)
create mode 100644 arch/mips/cpu/reset.c
create mode 100644 arch/mips/cpu/reset_bootstrap.c
create mode 100644 arch/mips/cpu/start_bootstrap.S
create mode 100644 arch/mips/lib/board_bootstrap.c
create mode 100644 common/console_bootstrap.c
create mode 100644 lib/bootstrap.c
diff --git a/.gitignore b/.gitignore
index e71f6ac..9cfba4c 100644
--- 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
@@ -39,7 +58,7 @@
/LOG
/errlog
/reloc_off
-
+/.payload.s
/include/generated/
/lib/asm-offsets.s
@@ -66,3 +85,6 @@ cscope.*
/onenand_ipl/onenand-ipl*
/onenand_ipl/board/*/onenand*
/onenand_ipl/board/*/*.S
+examples/standalone/
+
+setvars
diff --git a/Makefile b/Makefile
index 87a383d..fa159c7 100644
--- a/Makefile
+++ b/Makefile
@@ -180,6 +180,13 @@ endif
OBJS := $(addprefix $(obj),$(OBJS))
+ifeq ($(CONFIG_BOOTSTRAP),y)
+BOOTSTRAP_OBJS = $(CPUDIR)/start_bootstrap.o
+
+BOOTSTRAP_OBJS := $(addprefix $(obj),$(BOOTSTRAP_OBJS))
+endif
+
+
LIBS = lib/libgeneric.o
LIBS += lib/lzma/liblzma.o
LIBS += lib/lzo/liblzo.o
@@ -263,12 +270,29 @@ ifeq ($(SOC),s5pc2xx)
LIBS += $(CPUDIR)/s5p-common/libs5p-common.o
endif
-LIBS := $(addprefix $(obj),$(sort $(LIBS)))
+LIBS := $(addprefix $(obj),$(LIBS))
.PHONY : $(LIBS) $(TIMESTAMP_FILE) $(VERSION_FILE)
LIBBOARD = board/$(BOARDDIR)/lib$(BOARD).o
LIBBOARD := $(addprefix $(obj),$(LIBBOARD))
+ifeq ($(CONFIG_BOOTSTRAP),y)
+BOOTSTRAP_LIBS = lib/libgeneric_bootstrap.o
+BOOTSTRAP_LIBS += arch/$(ARCH)/cpu/lib$(ARCH)_bootstrap.o
+BOOTSTRAP_LIBS += arch/$(ARCH)/lib/lib$(ARCH)_bootstrap.o
+BOOTSTRAP_LIBS += common/libcommon_bootstrap.o
+BOOTSTRAP_LIBS += drivers/serial/libserial.o
+
+BOOTSTRAP_LIBS-$(CONFIG_BOOTSTRAP_LZMA) += lib/lzma/liblzma.o
+BOOTSTRAP_LIBS-$(CONFIG_BOOTSTRAP_LZO) += lib/lzo/liblzo.o
+BOOTSTRAP_LIBS += $(BOOTSTRAP_LIBS-y)
+
+.PHONY : $(BOOTSTRAP_LIBS)
+
+BOOTSTRAP_LIBBOARD = board/$(BOARDDIR)/lib$(BOARD)_bootstrap.o
+BOOTSTRAP_LIBBOARD := $(addprefix $(obj),$(BOOTSTRAP_LIBBOARD))
+endif
+
# Add GCC lib
ifdef USE_PRIVATE_LIBGCC
ifeq ("$(USE_PRIVATE_LIBGCC)", "yes")
@@ -282,6 +306,9 @@ endif
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.
@@ -304,6 +331,9 @@ endif
__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))
+
#########################################################################
#########################################################################
@@ -325,6 +355,10 @@ endif
# 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
@@ -337,6 +371,18 @@ $(obj)u-boot.bin: $(obj)u-boot
$(OBJCOPY) ${OBJCFLAGS} -O binary $< $@
$(BOARD_SIZE_CHECK)
+$(obj)u-boot.bin.gz: $(obj)u-boot.bin
+ gzip -c $< > $@
+
+$(obj)u-boot.bin.lzma: $(obj)u-boot.bin
+ lzma -e -z -c $< > $@
+
+$(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)
@@ -367,12 +413,12 @@ $(obj)u-boot.sha1: $(obj)u-boot.bin
$(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 \
@@ -395,6 +441,116 @@ $(LIBS): depend $(SUBDIRS)
$(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
+ $(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\", at 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_LIBBOARD) $(BOOTSTRAP_LIBS) $(BOOTSTRAP_LDSCRIPT) $(obj)u-boot-bootstrap.lds $(obj).payload.o
+ $(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
@@ -404,6 +560,9 @@ $(LDSCRIPT): depend
$(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) depend
$(MAKE) -C nand_spl/board/$(BOARDDIR) all
@@ -1221,6 +1380,7 @@ clean:
$(obj)board/trab/trab_fkt $(obj)board/voiceblue/eeprom \
$(obj)board/armltd/{integratorap,integratorcp}/u-boot.lds \
$(obj)u-boot.lds \
+ $(obj)u-boot-bootstrap.lds \
$(obj)arch/blackfin/cpu/bootrom-asm-offsets.[chs]
@rm -f $(obj)include/bmp_logo.h
@rm -f $(obj)lib/asm-offsets.s
@@ -1244,6 +1404,12 @@ clobber: clean
@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)arch/powerpc/cpu/mpc824x/bedbug_603e.c
@rm -f $(obj)include/asm/proc $(obj)include/asm/arch $(obj)include/asm
diff --git a/arch/mips/config.mk b/arch/mips/config.mk
index aa06761..4655169 100644
--- a/arch/mips/config.mk
+++ b/arch/mips/config.mk
@@ -47,6 +47,6 @@ PLATFORM_CPPFLAGS += -DCONFIG_MIPS -D__MIPS__
# 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
diff --git a/arch/mips/cpu/Makefile b/arch/mips/cpu/Makefile
index 06df8d1..6a9a2af 100644
--- a/arch/mips/cpu/Makefile
+++ b/arch/mips/cpu/Makefile
@@ -24,25 +24,45 @@
include $(TOPDIR)/config.mk
LIB = $(obj)lib$(CPU).o
+BOOTSTRAP_LIB = $(obj)lib$(CPU)_bootstrap.o
+
+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) += $(BOOTSTRAP_START)
+BOOTSTRAP_COBJS-$(CONFIG_BOOTSTRAP) += cpu.o interrupts.o reset_bootstrap.o
+BOOTSTRAP_SOBJS-$(CONFIG_BOOTSTRAP) += cache.o
+BOOTSTRAP_COBJS-$(CONFIG_IFX_ASC) += ifx_asc.o
+
+BOOTSTRAP_OBJS := $(addprefix $(obj),$(BOOTSTRAP_SOBJS-y) $(BOOTSTRAP_COBJS-y))
+BOOTSTRAP_START := $(addprefix $(obj),$(BOOTSTRAP_START-y))
+
+SRCS := $(sort $(START:.o=.S) $(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: $(START) $(LIB) $(BOOTSTRAP_START-y) $(BOOTSTRAP_LIB-y)
-$(LIB): $(OBJS)
+$(START): $(obj).depend
+
+$(LIB): $(obj).depend $(OBJS)
$(call cmd_link_o_target, $(OBJS))
+$(BOOTSTRAP_START): $(obj).depend
+
+$(BOOTSTRAP_LIB): $(obj).depend $(BOOTSTRAP_OBJS)
+ $(call cmd_link_o_target, $(BOOTSTRAP_OBJS))
+
#########################################################################
# defines $(obj).depend target
diff --git a/arch/mips/cpu/cpu.c b/arch/mips/cpu/cpu.c
index 3ae397c..45bf07c 100644
--- a/arch/mips/cpu/cpu.c
+++ b/arch/mips/cpu/cpu.c
@@ -38,18 +38,6 @@
: \
: "i" (op), "R" (*(unsigned char *)(addr)))
-void __attribute__((weak)) _machine_restart(void)
-{
-}
-
-int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- _machine_restart();
-
- fprintf(stderr, "*** reset failed ***\n");
- return 0;
-}
-
void flush_cache(ulong start_addr, ulong size)
{
unsigned long lsize = CONFIG_SYS_CACHELINE_SIZE;
diff --git a/arch/mips/cpu/reset.c b/arch/mips/cpu/reset.c
new file mode 100644
index 0000000..397fb62
--- /dev/null
+++ b/arch/mips/cpu/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;
+}
diff --git a/arch/mips/cpu/reset_bootstrap.c b/arch/mips/cpu/reset_bootstrap.c
new file mode 100644
index 0000000..0bef625
--- /dev/null
+++ b/arch/mips/cpu/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;
+}
diff --git a/arch/mips/cpu/start_bootstrap.S b/arch/mips/cpu/start_bootstrap.S
new file mode 100644
index 0000000..def1fde
--- /dev/null
+++ b/arch/mips/cpu/start_bootstrap.S
@@ -0,0 +1,452 @@
+/*
+ * 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 <asm-offsets.h>
+#include <config.h>
+#include <asm/regdef.h>
+#include <asm/mipsregs.h>
+
+ /*
+ * 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
+ RVECENT(romReserved,2)
+#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
+ */
+#ifdef 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:
+
+ /* 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
+
+ /* Init Timer */
+ mtc0 zero, CP0_COUNT
+ mtc0 zero, CP0_COMPARE
+
+#if !defined(CONFIG_BOOTSTRAP_SKIP_LOWLEVEL_INIT)
+ /* CONFIG0 register */
+ li t0, CONF_CM_UNCACHED
+ mtc0 t0, CP0_CONFIG
+#endif /* !CONFIG_SKIP_LOWLEVEL_INIT */
+
+ /* Initialize $gp.
+ */
+ bal 1f
+ nop
+ .word _gp
+1:
+ lw gp, 0(ra)
+
+#if !defined(CONFIG_BOOTSTRAP_SKIP_LOWLEVEL_INIT)
+ /* 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
+ mtc0 t0, CP0_CONFIG
+#endif /* !CONFIG_SKIP_LOWLEVEL_INIT */
+
+ /* 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
diff --git a/arch/mips/lib/Makefile b/arch/mips/lib/Makefile
index 4e90704..3570581 100644
--- a/arch/mips/lib/Makefile
+++ b/arch/mips/lib/Makefile
@@ -24,6 +24,9 @@
include $(TOPDIR)/config.mk
LIB = $(obj)lib$(ARCH).o
+BOOTSTRAP_LIB = $(obj)lib$(ARCH)_bootstrap.o
+
+BOOTSTRAP_LIB-$(CONFIG_BOOTSTRAP) = $(BOOTSTRAP_LIB)
SOBJS-y +=
@@ -35,12 +38,22 @@ COBJS-y += bootm.o
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: $(LIB) $(BOOTSTRAP_LIB-y)
+
$(LIB): $(obj).depend $(OBJS)
$(call cmd_link_o_target, $(OBJS))
+$(BOOTSTRAP_LIB): $(obj).depend $(BOOTSTRAP_OBJS)
+ $(call cmd_link_o_target, $(BOOTSTRAP_OBJS))
+
#########################################################################
# defines $(obj).depend target
diff --git a/arch/mips/lib/board_bootstrap.c b/arch/mips/lib/board_bootstrap.c
new file mode 100644
index 0000000..1d548d6
--- /dev/null
+++ b/arch/mips/lib/board_bootstrap.c
@@ -0,0 +1,261 @@
+/*
+ * (C) Copyright 2010 Industrie Dial Face S.p.A.
+ * Luigi 'Comio' Mantellini, luigi.mantellini at 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;
+
+static char *failed = "*** failed ***\n";
+
+/*
+ * 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);
+ }
+ puts (failed);
+ return (1);
+}
+
+static int bootstrap_display_banner(void)
+{
+ puts ("bootstrap...");
+ 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 */
+ serial_init, /* serial communications setup */
+ 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 - TOTAL_MALLOC_LEN;
+ debug ("Reserving %dk for malloc() at: %08lx\n",
+ TOTAL_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 -
+ TOTAL_MALLOC_LEN, TOTAL_MALLOC_LEN);
+ malloc_bin_reloc();
+
+ copy_and_jump();
+
+ /* NOTREACHED - no way out of command loop except booting */
+}
+
+void bootstrap_hang (void)
+{
+ puts ("### ERROR ### Please RESET the board ###\n");
+ for (;;);
+}
diff --git a/common/Makefile b/common/Makefile
index abea91c..5662506 100644
--- a/common/Makefile
+++ b/common/Makefile
@@ -24,6 +24,9 @@
include $(TOPDIR)/config.mk
LIB = $(obj)libcommon.o
+BOOTSTRAP_LIB = $(obj)libcommon_bootstrap.o
+
+BOOTSTRAP_LIB-$(CONFIG_BOOTSTRAP) = $(BOOTSTRAP_LIB)
# core
COBJS-y += main.o
@@ -165,20 +168,28 @@ COBJS-$(CONFIG_MODEM_SUPPORT) += modem.o
COBJS-$(CONFIG_UPDATE_TFTP) += update.o
COBJS-$(CONFIG_USB_KEYBOARD) += usb_kbd.o
+BOOTSTRAP_COBJS-$(CONFIG_BOOTSTRAP) += dlmalloc.o
+BOOTSTRAP_COBJS-$(CONFIG_BOOTSTRAP) += console_bootstrap.o
+
+BOOTSTRAP_COBJS := $(sort $(BOOTSTRAP_COBJS-y))
+BOOTSTRAP_OBJS := $(addprefix $(obj),$(BOOTSTRAP_COBJS))
COBJS := $(sort $(COBJS-y))
XCOBJS := $(sort $(XCOBJS-y))
-SRCS := $(COBJS:.o=.c) $(XCOBJS:.o=.c)
+SRCS := $(sort $(COBJS:.o=.c) $(XCOBJS:.o=.c) $(BOOTSTRAP_COBJS:.o=.c))
OBJS := $(addprefix $(obj),$(COBJS))
XOBJS := $(addprefix $(obj),$(XCOBJS))
CPPFLAGS += -I..
-all: $(LIB) $(XOBJS)
+all: $(LIB) $(BOOTSTRAP_LIB-y) $(XOBJS)
$(LIB): $(obj).depend $(OBJS)
$(call cmd_link_o_target, $(OBJS))
+$(BOOTSTRAP_LIB): $(obj).depend $(BOOTSTRAP_OBJS)
+ $(call cmd_link_o_target, $(BOOTSTRAP_OBJS))
+
$(obj)env_embedded.o: $(src)env_embedded.c $(obj)../tools/envcrc
$(CC) $(AFLAGS) -Wa,--no-warn \
-DENV_CRC=$(shell $(obj)../tools/envcrc) \
diff --git a/common/console_bootstrap.c b/common/console_bootstrap.c
new file mode 100644
index 0000000..cdd4a62
--- /dev/null
+++ b/common/console_bootstrap.c
@@ -0,0 +1,85 @@
+/*
+ * (C) Copyright 2000
+ * Paolo Scaffardi, AIRVENT SAM s.p.a - RIMINI(ITALY), arsenio at 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);
+}
+
+int printf(const char *fmt, ...)
+{
+ va_list args;
+ uint i;
+ char printbuffer[CONFIG_SYS_PBSIZE];
+
+ va_start(args, fmt);
+
+ /* For this to work, printbuffer must be larger than
+ * anything we ever want to print.
+ */
+ i = vsprintf(printbuffer, fmt, args);
+ va_end(args);
+
+ /* Print the string */
+ puts(printbuffer);
+ return i;
+}
+
+int vprintf(const char *fmt, va_list args)
+{
+ uint i;
+ char printbuffer[CONFIG_SYS_PBSIZE];
+
+ /* For this to work, printbuffer must be larger than
+ * anything we ever want to print.
+ */
+ i = vsprintf(printbuffer, fmt, args);
+
+ /* Print the string */
+ puts(printbuffer);
+ return i;
+}
diff --git a/config.mk b/config.mk
index c6d6f7b..103bdce 100644
--- a/config.mk
+++ b/config.mk
@@ -150,7 +150,7 @@ else
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
@@ -160,6 +160,11 @@ else
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)
@@ -170,6 +175,10 @@ ifneq ($(CONFIG_SYS_TEXT_BASE),)
CPPFLAGS += -DCONFIG_SYS_TEXT_BASE=$(CONFIG_SYS_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
@@ -190,6 +199,7 @@ CFLAGS := $(CPPFLAGS) -Wall -Wstrict-prototypes
endif
CFLAGS += $(call cc-option,-fno-stack-protector)
+CFLAGS += $(call cc-option,-ffunction-sections)
# $(CPPFLAGS) sets -g, which causes gcc to pass a suitable -g<format>
# option to the assembler.
@@ -209,6 +219,13 @@ ifneq ($(CONFIG_SYS_TEXT_BASE),)
LDFLAGS += -Ttext $(CONFIG_SYS_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
diff --git a/include/common.h b/include/common.h
index 189ad81..690cba2 100644
--- a/include/common.h
+++ b/include/common.h
@@ -723,6 +723,27 @@ int cpu_disable(int nr);
int cpu_release(int nr, int argc, char * const 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 */
diff --git a/lib/Makefile b/lib/Makefile
index ffdee7d..e6ac700 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -24,6 +24,9 @@
include $(TOPDIR)/config.mk
LIB = $(obj)libgeneric.o
+BOOTSTRAP_LIB = $(obj)libgeneric_bootstrap.o
+
+BOOTSTRAP_LIB-$(CONFIG_BOOTSTRAP) = $(BOOTSTRAP_LIB)
COBJS-$(CONFIG_ADDR_MAP) += addr_map.o
COBJS-$(CONFIG_BZIP2) += bzlib.o
@@ -54,13 +57,36 @@ 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: $(LIB) $(BOOTSTRAP_LIB-y)
+
$(LIB): $(obj).depend $(OBJS)
$(call cmd_link_o_target, $(OBJS))
+$(BOOTSTRAP_LIB): $(obj).depend $(BOOTSTRAP_OBJS)
+ $(call cmd_link_o_target, $(BOOTSTRAP_OBJS))
+
#########################################################################
# defines $(obj).depend target
diff --git a/lib/bootstrap.c b/lib/bootstrap.c
new file mode 100644
index 0000000..50d3461
--- /dev/null
+++ b/lib/bootstrap.c
@@ -0,0 +1,89 @@
+/*
+ * (C) Copyright 2010 Industrie Dial Face S.p.A.
+ * Luigi 'Comio' Mantellini, luigi.mantellini at idf-hit.com
+ *
+ * (C) Copyright 2003
+ * Wolfgang Denk, DENX Software Engineering, wd at 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;
+
+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
+
+
+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);
+
+ printf("Uncompressing payload (%s)...", algo);
+#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) {
+ printf("failed with error %d.\n", ret);
+ bootstrap_hang();
+ } else {
+ puts("done.\n");
+ }
+ return ret;
+}
\ No newline@end of file
diff --git a/lib/lzma/Makefile b/lib/lzma/Makefile
index 4d3401d..395b8dc 100644
--- a/lib/lzma/Makefile
+++ b/lib/lzma/Makefile
@@ -32,7 +32,9 @@ SOBJS =
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)
diff --git a/lib/lzo/Makefile b/lib/lzo/Makefile
index 69bc839..c8d7fa5 100644
--- a/lib/lzo/Makefile
+++ b/lib/lzo/Makefile
@@ -27,7 +27,9 @@ LIB = $(obj)liblzo.o
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)
--
1.7.3
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [U-Boot] [RFC 2/2] Add support for bootstrap stage to QEMU-MIPS board.
2010-11-30 10:30 [U-Boot] [RFC 0/2] Add support for bootstrap stage and compressed U-Boot image luigi.mantellini at idf-hit.com
2010-11-30 10:30 ` [U-Boot] [RFC 1/2] Add support for bootstrap stage that allows to have a compressed U-Boot image. The final image will named "u-boot-bootstrap" luigi.mantellini at idf-hit.com
@ 2010-11-30 10:30 ` luigi.mantellini at idf-hit.com
2010-11-30 14:35 ` [U-Boot] [RFC 0/2] Add support for bootstrap stage and compressed U-Boot image Luigi 'Comio' Mantellini
2 siblings, 0 replies; 8+ messages in thread
From: luigi.mantellini at idf-hit.com @ 2010-11-30 10:30 UTC (permalink / raw)
To: u-boot
From: Luigi 'Comio' Mantellini <luigi.mantellini@idf-hit.com>
Signed-off-by: Luigi 'Comio' Mantellini <luigi.mantellini@idf-hit.com>
---
board/qemu-mips/Makefile | 15 ++++++-
board/qemu-mips/config.mk | 7 ++-
board/qemu-mips/qemu-mips_bootstrap.c | 48 +++++++++++++++++++++
board/qemu-mips/u-boot-bootstrap.lds | 73 +++++++++++++++++++++++++++++++++
include/configs/qemu-mips.h | 14 ++++++-
5 files changed, 153 insertions(+), 4 deletions(-)
create mode 100644 board/qemu-mips/qemu-mips_bootstrap.c
create mode 100644 board/qemu-mips/u-boot-bootstrap.lds
diff --git a/board/qemu-mips/Makefile b/board/qemu-mips/Makefile
index 6251bb8..bcb6fd5 100644
--- a/board/qemu-mips/Makefile
+++ b/board/qemu-mips/Makefile
@@ -24,17 +24,30 @@
include $(TOPDIR)/config.mk
LIB = $(obj)lib$(BOARD).o
+BOOTSTRAP_LIB = $(obj)lib$(BOARD)_bootstrap.o
+
+BOOTSTRAP_LIB-$(CONFIG_BOOTSTRAP) = $(BOOTSTRAP_LIB)
COBJS = $(BOARD).o
SOBJS = lowlevel_init.o
-SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+BOOTSTRAP_COBJS-$(CONFIG_BOOTSTRAP) = $(BOARD)_bootstrap.o
+BOOTSTRAP_SOBJS-$(CONFIG_BOOTSTRAP) = lowlevel_init.o
+
+BOOTSTRAP_SRCS := $(BOOTSTRAP_SOBJS-y:.o=.S) $(BOOTSTRAP_COBJS-y:.o=.c)
+BOOTSTRAP_OBJS := $(addprefix $(obj),$(BOOTSTRAP_COBJS-y))
+BOOTSTRAP_SOBJS := $(addprefix $(obj),$(BOOTSTRAP_SOBJS-y))
+
+SRCS := $(sort $(SOBJS:.o=.S) $(COBJS:.o=.c) $(BOOTSTRAP_SOBJS))
OBJS := $(addprefix $(obj),$(COBJS))
SOBJS := $(addprefix $(obj),$(SOBJS))
$(LIB): $(OBJS) $(SOBJS)
$(call cmd_link_o_target, $(OBJS) $(SOBJS))
+$(BOOTSTRAP_LIB): $(BOOTSTRAP_OBJS) $(BOOTSTRAP_SOBJS)
+ $(call cmd_link_o_target, $(BOOTSTRAP_OBJS) $(BOOTSTRAP_SOBJS))
+
#########################################################################
# defines $(obj).depend target
diff --git a/board/qemu-mips/config.mk b/board/qemu-mips/config.mk
index 27cd34a..50276ff 100644
--- a/board/qemu-mips/config.mk
+++ b/board/qemu-mips/config.mk
@@ -3,8 +3,11 @@
# See http://fabrice.bellard.free.fr/qemu
#
+ifeq ($(CONFIG_BOOTSTRAP),)
# ROM version
CONFIG_SYS_TEXT_BASE = 0xbfc00000
-
+else
# RAM version
-#CONFIG_SYS_TEXT_BASE = 0x80001000
+CONFIG_SYS_TEXT_BASE = 0x80001000
+CONFIG_BOOTSTRAP_TEXT_BASE = 0xbfc00000
+endif
\ No newline at end of file
diff --git a/board/qemu-mips/qemu-mips_bootstrap.c b/board/qemu-mips/qemu-mips_bootstrap.c
new file mode 100644
index 0000000..e139d67
--- /dev/null
+++ b/board/qemu-mips/qemu-mips_bootstrap.c
@@ -0,0 +1,48 @@
+/*
+ * (C) Copyright 2010 Industrie Dial Face S.p.A.
+ * Luigi 'Comio' Mantellini, luigi.mantellini at idf-hit.com
+ *
+ * (C) Copyright 2007
+ * Vlad Lungu vlad.lungu at windriver.com
+ *
+ * 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/io.h>
+
+phys_size_t bootstrap_initdram(int board_type)
+{
+ /* Sdram is setup by assembler code */
+ /* If memory could be changed, we should return the true value here */
+ return MEM_SIZE*1024*1024;
+}
+
+int bootstrap_checkboard(void)
+{
+ return 0;
+}
+
+int bootstrap_misc_init_r(void)
+{
+ set_io_port_base(0);
+ return 0;
+}
diff --git a/board/qemu-mips/u-boot-bootstrap.lds b/board/qemu-mips/u-boot-bootstrap.lds
new file mode 100644
index 0000000..0e74580
--- /dev/null
+++ b/board/qemu-mips/u-boot-bootstrap.lds
@@ -0,0 +1,73 @@
+/*
+ * (C) Copyright 2010 Industrie Dial Face S.p.A.
+ * Luigi 'Comio' Mantellini, luigi.mantellini at idf-hit.com
+ *
+ * (C) Copyright 2003
+ * Wolfgang Denk 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
+ */
+
+/*
+OUTPUT_FORMAT("elf32-bigmips", "elf32-bigmips", "elf32-bigmips")
+*/
+OUTPUT_FORMAT("elf32-tradbigmips", "elf32-tradbigmips", "elf32-tradlittlemips")
+OUTPUT_ARCH(mips)
+ENTRY(_start)
+SECTIONS
+{
+ . = 0x00000000;
+
+ . = ALIGN(4);
+ .text :
+ {
+ *(.text)
+ }
+
+ . = ALIGN(4);
+ .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
+
+ . = ALIGN(4);
+ .data : { *(.data) }
+
+ . = .;
+ _gp = ALIGN(16) +0x7ff0;
+
+ .got : {
+ __got_start = .;
+ *(.got)
+ __got_end = .;
+ }
+
+ . = ALIGN(4);
+ .sdata : { *(.sdata) }
+
+ . = .;
+ . = ALIGN(4);
+ .payload : { *(.payload) }
+ . = ALIGN(4);
+
+ uboot_end_data = .;
+ num_got_entries = (__got_end - __got_start) >> 2;
+
+ . = ALIGN(4);
+ .sbss : { *(.sbss) }
+ .bss : { *(.bss) . = ALIGN(4); }
+ uboot_end = .;
+}
diff --git a/include/configs/qemu-mips.h b/include/configs/qemu-mips.h
index fb697d5..42c0c58 100644
--- a/include/configs/qemu-mips.h
+++ b/include/configs/qemu-mips.h
@@ -114,7 +114,7 @@
#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE+sizeof(CONFIG_SYS_PROMPT)+16) /* Print Buffer Size */
#define CONFIG_SYS_MAXARGS 16 /* max number of command args */
-#define CONFIG_SYS_MALLOC_LEN 128*1024
+#define CONFIG_SYS_MALLOC_LEN 4*1024*1024
#define CONFIG_SYS_BOOTPARAMS_LEN 128*1024
@@ -172,4 +172,16 @@
#define CONFIG_SYS_ICACHE_SIZE 16384
#define CONFIG_SYS_CACHELINE_SIZE 32
+/* Support for compressed u-boot image */
+#define CONFIG_BOOTSTRAP
+#ifdef CONFIG_BOOTSTRAP
+#define CONFIG_BOOTSTRAP_BASE CONFIG_BOOTSTRAP_TEXT_BASE
+#define CONFIG_BOOTSTRAP_BAUDRATE CONFIG_BAUDRATE
+#define CONFIG_SKIP_LOWLEVEL_INIT
+// #define CONFIG_BOOTSTRAP_BZIP2 /* Use BZIP2 payload */
+// #define CONFIG_BOOTSTRAP_GZIP /* Use GZIP payload */
+#define CONFIG_BOOTSTRAP_LZMA /* Use LZMA payload */
+// #define CONFIG_BOOTSTRAP_LZO /* Use LZO payload */
+#endif
+
#endif /* __CONFIG_H */
--
1.7.3
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [U-Boot] [RFC 0/2] Add support for bootstrap stage and compressed U-Boot image
2010-11-30 10:30 [U-Boot] [RFC 0/2] Add support for bootstrap stage and compressed U-Boot image luigi.mantellini at idf-hit.com
2010-11-30 10:30 ` [U-Boot] [RFC 1/2] Add support for bootstrap stage that allows to have a compressed U-Boot image. The final image will named "u-boot-bootstrap" luigi.mantellini at idf-hit.com
2010-11-30 10:30 ` [U-Boot] [RFC 2/2] Add support for bootstrap stage to QEMU-MIPS board luigi.mantellini at idf-hit.com
@ 2010-11-30 14:35 ` Luigi 'Comio' Mantellini
2010-12-04 2:32 ` Shinya Kuribayashi
2 siblings, 1 reply; 8+ messages in thread
From: Luigi 'Comio' Mantellini @ 2010-11-30 14:35 UTC (permalink / raw)
To: u-boot
Look the following benchmark (qemu-mips board):
U-Boot Vanilla
179600 bytes u-boot.bin
Bootstrap code w/o compresion (memcpy)
189224 bytes u-boot-bootstrap.bin
--> size 105%
Bootstrap code using BZIP2 compression
114388 bytes u-boot-bootstrap.bin
-->size 64%
Bootstrap code using GZIP compression
114204 bytes u-boot-bootstrap.bin
-->size 64%
Bootstrap code using LZMA compression
89456 bytes u-boot-bootstrap.bin
-->size 50% <-- BEST
Bootstrap code using LZO compression
104388 bytes u-boot-bootstrap.bin
-->size 58%
ciao ciao
luigi
marted? 30 novembre 2010 11:30 luigi.mantellini at idf-hit.com ha scritto:
> From: Luigi 'Comio' Mantellini <luigi.mantellini@idf-hit.com>
>
> Hi All,
>
> The following patches introduce the bootstrap support that enable to have a
> compressed U-Boot image. The bootstrap code supports the uncompressed as
> well as compressed payloads, using LZMA, GZIP, BZIP2 and LZO.
>
> Actually I developed just the mips version (using qemu-mips board)...
>
> Please see the Patch #1 for the required defines to enable the required
> features.
>
> Of course, any suggestion is welcome.
>
> ciao
>
> luigi
>
> Luigi 'Comio' Mantellini (2):
> Add support for bootstrap stage that allows to have a compressed
> U-Boot image. The final image will named "u-boot-bootstrap".
> Add support for bootstrap stage to QEMU-MIPS board.
>
> .gitignore | 24 ++-
> Makefile | 172 ++++++++++++-
> arch/mips/config.mk | 2 +-
> arch/mips/cpu/Makefile | 28 ++-
> arch/mips/cpu/cpu.c | 12 -
> arch/mips/cpu/reset.c | 39 +++
> arch/mips/cpu/reset_bootstrap.c | 39 +++
> arch/mips/cpu/start_bootstrap.S | 452
> +++++++++++++++++++++++++++++++++ arch/mips/lib/Makefile |
> 15 +-
> arch/mips/lib/board_bootstrap.c | 261 +++++++++++++++++++
> board/qemu-mips/Makefile | 15 +-
> board/qemu-mips/config.mk | 7 +-
> board/qemu-mips/qemu-mips_bootstrap.c | 48 ++++
> board/qemu-mips/u-boot-bootstrap.lds | 73 ++++++
> common/Makefile | 15 +-
> common/console_bootstrap.c | 85 ++++++
> config.mk | 19 ++-
> include/common.h | 21 ++
> include/configs/qemu-mips.h | 14 +-
> lib/Makefile | 28 ++-
> lib/bootstrap.c | 89 +++++++
> lib/lzma/Makefile | 4 +-
> lib/lzo/Makefile | 4 +-
> 23 files changed, 1434 insertions(+), 32 deletions(-)
> create mode 100644 arch/mips/cpu/reset.c
> create mode 100644 arch/mips/cpu/reset_bootstrap.c
> create mode 100644 arch/mips/cpu/start_bootstrap.S
> create mode 100644 arch/mips/lib/board_bootstrap.c
> create mode 100644 board/qemu-mips/qemu-mips_bootstrap.c
> create mode 100644 board/qemu-mips/u-boot-bootstrap.lds
> create mode 100644 common/console_bootstrap.c
> create mode 100644 lib/bootstrap.c
--
Luigi 'Comio' Mantellini
R&D - Software
Industrie Dial Face S.p.A.
Via Canzo, 4
20068 Peschiera Borromeo (MI) Italy
Tel.: +39 02 5167 2813
Fax: +39 02 5167 2459
E-mail: luigi.mantellini at idf-hit.com
Website: http://www.idf-hit.com
Questo messaggio e i suoi allegati sono indirizzati esclusivamente alle
persone indicate. La diffusione, copia o qualsiasi altra azione derivante dalla
conoscenza di queste informazioni sono rigorosamente vietate. Qualora abbiate
ricevuto questo documento per errore siete cortesemente pregati di darne
immediata comunicazione al mittente e di provvedere alla sua distruzione,
Grazie.
Rispetta l'ambiente. Non stampare questa mail se non ? realmente necessario.
This e-mail and any attachments is confidential and may contain privileged
information intended for the addressee(s) only. Dissemination, copying,
printing or use by anybody else is unauthorized. If you are not the intended
recipient, please delete this message and any attachments and advise the
sender by return e-mail, Thanks.
Help the environment. Please do not print this email unless it is absolutely
necessary.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: image/png
Size: 8938 bytes
Desc: not available
Url : http://lists.denx.de/pipermail/u-boot/attachments/20101130/099b9c81/attachment.png
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 490 bytes
Desc: This is a digitally signed message part.
Url : http://lists.denx.de/pipermail/u-boot/attachments/20101130/099b9c81/attachment.pgp
^ permalink raw reply [flat|nested] 8+ messages in thread
* [U-Boot] [RFC 0/2] Add support for bootstrap stage and compressed U-Boot image
2010-11-30 14:35 ` [U-Boot] [RFC 0/2] Add support for bootstrap stage and compressed U-Boot image Luigi 'Comio' Mantellini
@ 2010-12-04 2:32 ` Shinya Kuribayashi
2010-12-04 2:42 ` Shinya Kuribayashi
2010-12-04 11:12 ` Luigi Mantellini
0 siblings, 2 replies; 8+ messages in thread
From: Shinya Kuribayashi @ 2010-12-04 2:32 UTC (permalink / raw)
To: u-boot
Hi,
On 11/30/2010 11:35 PM, Luigi 'Comio' Mantellini wrote:
> Look the following benchmark (qemu-mips board):
>
> U-Boot Vanilla
> 179600 bytes u-boot.bin
>
> Bootstrap code w/o compresion (memcpy)
> 189224 bytes u-boot-bootstrap.bin
> --> size 105%
>
> Bootstrap code using BZIP2 compression
> 114388 bytes u-boot-bootstrap.bin
> -->size 64%
>
> Bootstrap code using GZIP compression
> 114204 bytes u-boot-bootstrap.bin
> -->size 64%
>
> Bootstrap code using LZMA compression
> 89456 bytes u-boot-bootstrap.bin
> -->size 50% <-- BEST
>
> Bootstrap code using LZO compression
> 104388 bytes u-boot-bootstrap.bin
> -->size 58%
Personally, I don't much care about the size of U-Boot bin itself
(179kB or 104kB), but it depends. And I'd like to see how much boot
time of U-Boot improved on your environment.
> >> The following patches introduce the bootstrap support that enable to have a
>> compressed U-Boot image. The bootstrap code supports the uncompressed as
>> well as compressed payloads, using LZMA, GZIP, BZIP2 and LZO.
>>
>> Actually I developed just the mips version (using qemu-mips board)...
>>
>> Please see the Patch #1 for the required defines to enable the required
>> features.
Not having a closer look at the patch yet, some general comments:
* Two patches posted, but contains multiple logical changes:
- CONFIG_BOOTSTRAP* build infrastructure (main body)
- common: Introduce console_bootstrap
- MIPS: Separate _machine_restart() and do_reset() into reset.c
- MIPS: config.mk: Append -g debug option to PLATFORM_CPPFLAGS,
which is already provided by $(TOPDIR)/config.mk.
- MIPS: qemu_mips: bootstrap support enablement (experimental)
Please break into logical changes, please.
* '_bootstrap' suffixed files are almost identical to the original
ones:
- arch/mips/cpu/reset{,_bootstrap}.c
- arch/mips/cpu/start{,_bootstrap}.S
- board/qemu-mips/u-boot{,_bootstrap}.lds
Is there any way not to duplicate them? Do we really need to have
_bootstrap files separated?
Once this bootstrap feature approved as general U-Boot feature, I'd
like to take MIPS-related changes.
Thanks,
Ralf
^ permalink raw reply [flat|nested] 8+ messages in thread
* [U-Boot] [RFC 0/2] Add support for bootstrap stage and compressed U-Boot image
2010-12-04 2:32 ` Shinya Kuribayashi
@ 2010-12-04 2:42 ` Shinya Kuribayashi
2010-12-04 11:12 ` Luigi Mantellini
1 sibling, 0 replies; 8+ messages in thread
From: Shinya Kuribayashi @ 2010-12-04 2:42 UTC (permalink / raw)
To: u-boot
On 12/04/2010 11:32 AM, Shinya Kuribayashi wrote:
> Once this bootstrap feature approved as general U-Boot feature, I'd
> like to take MIPS-related changes.
>
> Thanks,
>
> Ralf
Not Ralf! Needs two cups of coffee to wake up...
Shinya
^ permalink raw reply [flat|nested] 8+ messages in thread
* [U-Boot] [RFC 1/2] Add support for bootstrap stage that allows to have a compressed U-Boot image. The final image will named "u-boot-bootstrap".
2010-11-30 10:30 ` [U-Boot] [RFC 1/2] Add support for bootstrap stage that allows to have a compressed U-Boot image. The final image will named "u-boot-bootstrap" luigi.mantellini at idf-hit.com
@ 2010-12-04 3:05 ` Mike Frysinger
0 siblings, 0 replies; 8+ messages in thread
From: Mike Frysinger @ 2010-12-04 3:05 UTC (permalink / raw)
To: u-boot
On Tuesday, November 30, 2010 05:30:47 luigi.mantellini at idf-hit.com wrote:
> /u-boot.bin
> +/u-boot.bin.bz2
> +/u-boot.bin.gz
> +/u-boot.bin.lzma
> +/u-boot.bin.lzo
better to have just one i think:
/u-boot.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
same here:
/u-boot-bootstrap*
> -COBJS-$(CONFIG_LZO) += lzo1x_decompress.o
> +COBJS-$(CONFIG_LZO)$(CONFIG_BOOTSTRAP_LZO) += lzo1x_decompress.o
> +
> +COBJS-y += $(OBJS-yy)
you sure this works when both config symbols are set ?
-mike
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part.
Url : http://lists.denx.de/pipermail/u-boot/attachments/20101203/238fe17e/attachment.pgp
^ permalink raw reply [flat|nested] 8+ messages in thread
* [U-Boot] [RFC 0/2] Add support for bootstrap stage and compressed U-Boot image
2010-12-04 2:32 ` Shinya Kuribayashi
2010-12-04 2:42 ` Shinya Kuribayashi
@ 2010-12-04 11:12 ` Luigi Mantellini
1 sibling, 0 replies; 8+ messages in thread
From: Luigi Mantellini @ 2010-12-04 11:12 UTC (permalink / raw)
To: u-boot
Hi Shunya,
On Sat, Dec 4, 2010 at 3:32 AM, Shinya Kuribayashi <skuribay@pobox.com> wrote:
> Hi,
>
> On 11/30/2010 11:35 PM, Luigi 'Comio' Mantellini wrote:
>> Look the following benchmark (qemu-mips board):
>>
...
>> Bootstrap code using LZMA compression
>> 89456 bytes u-boot-bootstrap.bin
>> -->size 50% <-- BEST
>>
...
>
> Personally, I don't much care about the size of U-Boot bin itself
> (179kB or 104kB), but it depends. ?And I'd like to see how much boot
> time of U-Boot improved on your environment.
>
My target is to have a full-featured u-boot with size less than flash
sector (128K on my dev board).
In the best case (LZMA, but I also tried with XZ) I have just 16K/17K
of boot code and a payload u-boot image less than half of the original
size.
>> >> The following patches introduce the bootstrap support that enable to have a
>>> compressed U-Boot image. The bootstrap code supports the uncompressed as
>>> well as compressed payloads, using LZMA, GZIP, BZIP2 and LZO.
>>>
>>> Actually I developed just the mips version (using qemu-mips board)...
>>>
>>> Please see the Patch #1 for the required defines to enable the required
>>> features.
>
> Not having a closer look at the patch yet, some general comments:
>
> * Two patches posted, but contains multiple logical changes:
> ?- CONFIG_BOOTSTRAP* build infrastructure (main body)
I will separate into a (1) Generic bootstrap code, (2) and MIPS support.
I will send ASAP a new patchset that inclues also XZ format support (aka LZMA2)
> ?- common: Introduce console_bootstrap
> ?- MIPS: Separate _machine_restart() and do_reset() into reset.c
> ?- MIPS: config.mk: Append -g debug option to PLATFORM_CPPFLAGS,
> ? ?which is already provided by $(TOPDIR)/config.mk.
> ?- MIPS: qemu_mips: bootstrap support enablement (experimental)
>
> ?Please break into logical changes, please.
>
> * '_bootstrap' suffixed files are almost identical to the original
> ?ones:
> ?- arch/mips/cpu/reset{,_bootstrap}.c
I removed the "fprintf" from reset_bootstrap.c because the bootstrap
code haven't the generic dev io infrastructure. I would avoid also to
compile twice the same files in order to produce different .o files
(changing, for example, a define value).
> ?- arch/mips/cpu/start{,_bootstrap}.S
> ?- board/qemu-mips/u-boot{,_bootstrap}.lds
some here.
>
> ?Is there any way not to duplicate them? ?Do we really need to have
> ?_bootstrap files separated?
An Idea, that I don't like, should be to compile changing the CFLAGS
in order to produce different object files. Considering that bootstrap
code should be very small and stable I don't see big issues to have
different files.
>
> Once this bootstrap feature approved as general U-Boot feature, I'd
> like to take MIPS-related changes.
ok.
Thanks for your review.
luigi
>
> Thanks,
>
> ?Ralf
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
>
--
Luigi 'Comio' Mantellini
R&D - Software
Industrie Dial Face S.p.A.
Via Canzo, 4
20068 Peschiera Borromeo (MI), Italy
Tel.: +39 02 5167 2813
Fax: +39 02 5167 2459
web: www.idf-hit.com
mail: luigi.mantellini at idf-hit.com
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2010-12-04 11:12 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-11-30 10:30 [U-Boot] [RFC 0/2] Add support for bootstrap stage and compressed U-Boot image luigi.mantellini at idf-hit.com
2010-11-30 10:30 ` [U-Boot] [RFC 1/2] Add support for bootstrap stage that allows to have a compressed U-Boot image. The final image will named "u-boot-bootstrap" luigi.mantellini at idf-hit.com
2010-12-04 3:05 ` Mike Frysinger
2010-11-30 10:30 ` [U-Boot] [RFC 2/2] Add support for bootstrap stage to QEMU-MIPS board luigi.mantellini at idf-hit.com
2010-11-30 14:35 ` [U-Boot] [RFC 0/2] Add support for bootstrap stage and compressed U-Boot image Luigi 'Comio' Mantellini
2010-12-04 2:32 ` Shinya Kuribayashi
2010-12-04 2:42 ` Shinya Kuribayashi
2010-12-04 11:12 ` Luigi Mantellini
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox