diff options
301 files changed, 4810 insertions, 2272 deletions
| diff --git a/.gitignore b/.gitignore index a39bd54d3..3b14c256e 100644 --- a/.gitignore +++ b/.gitignore @@ -47,8 +47,6 @@  /u-boot.ais  /u-boot.dtb  /u-boot.sb -/u-boot.bd -/u-boot.geany  #  # Generated files @@ -59,6 +57,10 @@  /errlog  /reloc_off +/spl/ +!/spl/Makefile +/tpl/ +  /include/generated/  /include/spl-autoconf.mk  /include/tpl-autoconf.mk @@ -88,6 +90,3 @@ GPATH  GRTAGS  GSYMS  GTAGS - -# spl ais files -/spl/*.ais @@ -8,7 +8,7 @@  VERSION = 2014  PATCHLEVEL = 01  SUBLEVEL = -EXTRAVERSION = -rc1 +EXTRAVERSION = -rc2  ifneq "$(SUBLEVEL)" ""  U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)  else @@ -109,11 +109,6 @@ export	TOPDIR SRCTREE OBJTREE SPLTREE TPLTREE  MKCONFIG	:= $(SRCTREE)/mkconfig  export MKCONFIG -ifneq ($(OBJTREE),$(SRCTREE)) -REMOTE_BUILD	:= 1 -export REMOTE_BUILD -endif -  # $(obj) and (src) are defined in config.mk but here in main Makefile  # we also need them before config.mk is included which is the case for  # some targets like unconfig, clean, clobber, distclean, etc. @@ -168,7 +163,7 @@ endif  include $(TOPDIR)/config.mk  # Targets which don't build the source code -NON_BUILD_TARGETS = backup clean clobber distclean mkproper tidy unconfig +NON_BUILD_TARGETS = backup clean clobber distclean mrproper tidy unconfig  # Only do the generic board check when actually building, not configuring  ifeq ($(filter $(NON_BUILD_TARGETS),$(MAKECMDGOALS)),) @@ -187,7 +182,7 @@ ifndef LDSCRIPT  	#LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds.debug  	ifdef CONFIG_SYS_LDSCRIPT  		# need to strip off double quotes -		LDSCRIPT := $(subst ",,$(CONFIG_SYS_LDSCRIPT)) +		LDSCRIPT := $(CONFIG_SYS_LDSCRIPT:"%"=%)  	endif  endif @@ -218,15 +213,11 @@ endif  #########################################################################  # U-Boot objects....order is important (i.e. start must be first) -OBJS  = $(CPUDIR)/start.o -ifeq ($(CPU),ppc4xx) -OBJS += $(CPUDIR)/resetvec.o -endif -ifeq ($(CPU),mpc85xx) -OBJS += $(CPUDIR)/resetvec.o -endif +head-y := $(CPUDIR)/start.o +head-$(CONFIG_4xx) += arch/powerpc/cpu/ppc4xx/resetvec.o +head-$(CONFIG_MPC85xx) += arch/powerpc/cpu/mpc85xx/resetvec.o -OBJS := $(addprefix $(obj),$(OBJS)) +OBJS := $(addprefix $(obj),$(head-y))  HAVE_VENDOR_COMMON_LIB = $(if $(wildcard board/$(VENDOR)/common/Makefile),y,n) @@ -249,9 +240,9 @@ LIBS-y += drivers/i2c/  LIBS-y += drivers/input/  LIBS-y += drivers/mmc/  LIBS-y += drivers/mtd/ -LIBS-y += drivers/mtd/nand/ +LIBS-$(CONFIG_CMD_NAND) += drivers/mtd/nand/  LIBS-y += drivers/mtd/onenand/ -LIBS-y += drivers/mtd/ubi/ +LIBS-$(CONFIG_CMD_UBI) += drivers/mtd/ubi/  LIBS-y += drivers/mtd/spi/  LIBS-y += drivers/net/  LIBS-y += drivers/net/phy/ @@ -275,7 +266,7 @@ LIBS-y += drivers/usb/ulpi/  LIBS-y += common/  LIBS-y += lib/libfdt/  LIBS-$(CONFIG_API) += api/ -LIBS-y += post/ +LIBS-$(CONFIG_HAS_POST) += post/  LIBS-y += test/  ifneq (,$(filter $(SOC), mx25 mx27 mx5 mx6 mx31 mx35 mxs vf610)) @@ -356,7 +347,7 @@ ALL-$(CONFIG_SPL_FRAMEWORK) += $(obj)u-boot.img  ALL-$(CONFIG_TPL) += $(obj)tpl/u-boot-tpl.bin  ALL-$(CONFIG_OF_SEPARATE) += $(obj)u-boot.dtb $(obj)u-boot-dtb.bin  ifneq ($(CONFIG_SPL_TARGET),) -ALL-$(CONFIG_SPL) += $(obj)$(subst ",,$(CONFIG_SPL_TARGET)) +ALL-$(CONFIG_SPL) += $(obj)$(CONFIG_SPL_TARGET:"%"=%)  endif  ALL-$(CONFIG_REMAKE_ELF) += $(obj)u-boot.elf @@ -495,12 +486,10 @@ $(obj)u-boot.sb:       $(obj)u-boot.bin $(obj)spl/u-boot-spl.bin  $(obj)u-boot.spr:	$(obj)u-boot.img $(obj)spl/u-boot-spl.bin  		$(obj)tools/mkimage -A $(ARCH) -T firmware -C none \  		-a $(CONFIG_SPL_TEXT_BASE) -e $(CONFIG_SPL_TEXT_BASE) -n XLOADER \ -		-d $(obj)spl/u-boot-spl.bin $(obj)spl/u-boot-spl.img -		tr "\000" "\377" < /dev/zero | dd ibs=1 count=$(CONFIG_SPL_PAD_TO) \ -			of=$(obj)spl/u-boot-spl-pad.img 2>/dev/null -		dd if=$(obj)spl/u-boot-spl.img of=$(obj)spl/u-boot-spl-pad.img \ -			conv=notrunc 2>/dev/null -		cat $(obj)spl/u-boot-spl-pad.img $(obj)u-boot.img > $@ +		-d $(obj)spl/u-boot-spl.bin $@ +		$(OBJCOPY) -I binary -O binary \ +			--pad-to=$(CONFIG_SPL_PAD_TO) --gap-fill=0xff $@ +		cat $(obj)u-boot.img >> $@  ifneq ($(CONFIG_TEGRA),)  $(obj)u-boot-nodtb-tegra.bin: $(obj)spl/u-boot-spl.bin $(obj)u-boot.bin @@ -523,11 +512,9 @@ $(obj)u-boot-img.bin: $(obj)spl/u-boot-spl.bin $(obj)u-boot.img  # at the start padded up to the start of the SPL image. And then concat  # the SPL image to the end.  $(obj)u-boot-img-spl-at-end.bin: $(obj)spl/u-boot-spl.bin $(obj)u-boot.img -		tr "\000" "\377" < /dev/zero | dd ibs=1 count=$(CONFIG_UBOOT_PAD_TO) \ -			of=$(obj)u-boot-pad.img 2>/dev/null -		dd if=$(obj)u-boot.img of=$(obj)u-boot-pad.img \ -			conv=notrunc 2>/dev/null -		cat $(obj)u-boot-pad.img $(obj)spl/u-boot-spl.bin > $@ +		$(OBJCOPY) -I binary -O binary --pad-to=$(CONFIG_UBOOT_PAD_TO) \ +			 --gap-fill=0xff $(obj)u-boot.img $@ +		cat $(obj)spl/u-boot-spl.bin >> $@  # Create a new ELF from a raw binary file.  This is useful for arm64  # where static relocation needs to be performed on the raw binary, @@ -555,7 +542,7 @@ GEN_UBOOT = \  endif  $(obj)u-boot:	depend \ -		$(SUBDIR_TOOLS) $(OBJS) $(LIBS) $(LDSCRIPT) $(obj)u-boot.lds +		$(SUBDIR_TOOLS) $(OBJS) $(LIBS) $(obj)u-boot.lds  		$(GEN_UBOOT)  ifeq ($(CONFIG_KALLSYMS),y)  		smap=`$(call SYSTEM_MAP,$(obj)u-boot) | \ @@ -576,10 +563,7 @@ $(SUBDIRS):	depend  $(SUBDIR_EXAMPLES-y): $(obj)u-boot -$(LDSCRIPT):	depend -		$(MAKE) -C $(dir $@) $(notdir $@) - -$(obj)u-boot.lds: $(LDSCRIPT) +$(obj)u-boot.lds: $(LDSCRIPT) depend  		$(CPP) $(CPPFLAGS) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$< >$@  nand_spl:	$(TIMESTAMP_FILE) $(VERSION_FILE) depend @@ -613,7 +597,7 @@ FINDFLAGS := -L  checkstack:  		$(CROSS_COMPILE)objdump -d $(obj)u-boot \  			`$(FIND) $(obj) -name u-boot-spl -print` | \ -			perl $(src)tools/checkstack.pl $(ARCH) +			perl $(src)scripts/checkstack.pl $(ARCH)  tags ctags:  		ctags -w -o $(obj)ctags `$(FIND) $(FINDFLAGS) $(TAG_SUBDIRS) \ @@ -665,63 +649,49 @@ checkdtc:  # to regenerate the autoconf.mk file.  $(obj)include/autoconf.mk.dep: $(obj)include/config.h include/common.h  	@$(XECHO) Generating $@ ; \ -	set -e ; \  	: Generate the dependancies ; \  	$(CC) -x c -DDO_DEPS_ONLY -M $(CFLAGS) $(CPPFLAGS) \ -		-MQ $(obj)include/autoconf.mk include/common.h > $@ +		-MQ $(obj)include/autoconf.mk include/common.h > $@ || \ +		rm $@  $(obj)include/autoconf.mk: $(obj)include/config.h  	@$(XECHO) Generating $@ ; \ -	set -e ; \  	: Extract the config macros ; \ -	$(CPP) $(CFLAGS) -DDO_DEPS_ONLY -dM include/common.h | \ -		sed -n -f tools/scripts/define2mk.sed > $@.tmp && \ -	mv $@.tmp $@ +	$(CPP) $(CFLAGS) -DDO_DEPS_ONLY -dM include/common.h > $@.tmp && \ +		sed -n -f tools/scripts/define2mk.sed $@.tmp > $@; \ +	rm $@.tmp  # Auto-generate the spl-autoconf.mk file (which is included by all makefiles for SPL)  $(obj)include/tpl-autoconf.mk: $(obj)include/config.h  	@$(XECHO) Generating $@ ; \ -	set -e ; \  	: Extract the config macros ; \  	$(CPP) $(CFLAGS) -DCONFIG_TPL_BUILD  -DCONFIG_SPL_BUILD\ -			-DDO_DEPS_ONLY -dM include/common.h | \ -	sed -n -f tools/scripts/define2mk.sed > $@.tmp && \ -	mv $@.tmp $@ +			-DDO_DEPS_ONLY -dM include/common.h > $@.tmp && \ +		sed -n -f tools/scripts/define2mk.sed $@.tmp > $@; \ +	rm $@.tmp  $(obj)include/spl-autoconf.mk: $(obj)include/config.h  	@$(XECHO) Generating $@ ; \ -	set -e ; \  	: Extract the config macros ; \ -	$(CPP) $(CFLAGS) -DCONFIG_SPL_BUILD -DDO_DEPS_ONLY -dM include/common.h | \ -	sed -n -f tools/scripts/define2mk.sed > $@.tmp && \ -	mv $@.tmp $@ +	$(CPP) $(CFLAGS) -DCONFIG_SPL_BUILD -DDO_DEPS_ONLY -dM include/common.h > $@.tmp && \ +		sed -n -f tools/scripts/define2mk.sed $@.tmp > $@; \ +	rm $@.tmp -$(obj)include/generated/generic-asm-offsets.h:	$(obj)include/autoconf.mk.dep \ -	$(obj)include/spl-autoconf.mk \ -	$(obj)include/tpl-autoconf.mk \ -	$(obj)lib/asm-offsets.s +$(obj)include/generated/generic-asm-offsets.h: $(obj)lib/asm-offsets.s  	@$(XECHO) Generating $@  	tools/scripts/make-asm-offsets $(obj)lib/asm-offsets.s $@ -$(obj)lib/asm-offsets.s:	$(obj)include/autoconf.mk.dep \ -	$(obj)include/spl-autoconf.mk \ -	$(obj)include/tpl-autoconf.mk \ -	$(src)lib/asm-offsets.c +$(obj)lib/asm-offsets.s: $(obj)include/config.h $(src)lib/asm-offsets.c  	@mkdir -p $(obj)lib  	$(CC) -DDO_DEPS_ONLY \  		$(CFLAGS) $(CFLAGS_$(BCURDIR)/$(@F)) $(CFLAGS_$(BCURDIR)) \  		-o $@ $(src)lib/asm-offsets.c -c -S -$(obj)include/generated/asm-offsets.h:	$(obj)include/autoconf.mk.dep \ -	$(obj)include/spl-autoconf.mk \ -	$(obj)include/tpl-autoconf.mk \ -	$(obj)$(CPUDIR)/$(SOC)/asm-offsets.s +$(obj)include/generated/asm-offsets.h: $(obj)$(CPUDIR)/$(SOC)/asm-offsets.s  	@$(XECHO) Generating $@  	tools/scripts/make-asm-offsets $(obj)$(CPUDIR)/$(SOC)/asm-offsets.s $@ -$(obj)$(CPUDIR)/$(SOC)/asm-offsets.s:	$(obj)include/autoconf.mk.dep \ -	$(obj)include/spl-autoconf.mk \ -	$(obj)include/tpl-autoconf.mk +$(obj)$(CPUDIR)/$(SOC)/asm-offsets.s: $(obj)include/config.h  	@mkdir -p $(obj)$(CPUDIR)/$(SOC)  	if [ -f $(src)$(CPUDIR)/$(SOC)/asm-offsets.c ];then \  		$(CC) -DDO_DEPS_ONLY \ @@ -757,7 +727,7 @@ checkarmreloc: $(obj)u-boot  $(VERSION_FILE):  		@mkdir -p $(dir $(VERSION_FILE)) -		@( localvers='$(shell $(TOPDIR)/tools/setlocalversion $(TOPDIR))' ; \ +		@( localvers='$(shell $(TOPDIR)/scripts/setlocalversion $(TOPDIR))' ; \  		   printf '#define PLAIN_VERSION "%s%s"\n' \  			"$(U_BOOT_VERSION)" "$${localvers}" ; \  		   printf '#define U_BOOT_VERSION "U-Boot %s%s"\n' \ @@ -812,9 +782,7 @@ $(obj).boards.depend:	boards.cfg  #########################################################################  clean: -	@rm -f $(obj)examples/standalone/82559_eeprom			  \ -	       $(obj)examples/standalone/atmel_df_pow2			  \ -	       $(obj)examples/standalone/eepro100_eeprom		  \ +	@rm -f $(obj)examples/standalone/atmel_df_pow2			  \  	       $(obj)examples/standalone/hello_world			  \  	       $(obj)examples/standalone/interrupt			  \  	       $(obj)examples/standalone/mem_to_mem_idma2intr		  \ @@ -824,10 +792,11 @@ clean:  	       $(obj)examples/standalone/timer  	@rm -f $(obj)examples/api/demo{,.bin}  	@rm -f $(obj)tools/bmp_logo	   $(obj)tools/easylogo/easylogo  \ -	       $(obj)tools/env/{fw_printenv,fw_setenv}			  \ +	       $(obj)tools/env/fw_printenv				  \  	       $(obj)tools/envcrc					  \ -	       $(obj)tools/gdb/{astest,gdbcont,gdbsend}			  \ +	       $(obj)tools/gdb/{gdbcont,gdbsend}			  \  	       $(obj)tools/gen_eth_addr    $(obj)tools/img2srec		  \ +	       $(obj)tools/dump{env,}image		  \  	       $(obj)tools/mk{env,}image   $(obj)tools/mpc86x_clk	  \  	       $(obj)tools/mk{$(BOARD),}spl				  \  	       $(obj)tools/mxsboot					  \ @@ -836,7 +805,6 @@ clean:  	       $(obj)tools/proftool  	@rm -f $(obj)board/cray/L1/{bootscript.c,bootscript.image}	  \  	       $(obj)board/matrix_vision/*/bootscript.img		  \ -	       $(obj)board/voiceblue/eeprom 				  \  	       $(obj)u-boot.lds						  \  	       $(obj)arch/blackfin/cpu/init.{lds,elf}  	@rm -f $(obj)include/bmp_logo.h @@ -872,7 +840,6 @@ clobber:	tidy  	@rm -f $(obj)u-boot.ais  	@rm -f $(obj)u-boot.dtb  	@rm -f $(obj)u-boot.sb -	@rm -f $(obj)u-boot.bd  	@rm -f $(obj)u-boot.spr  	@rm -f $(obj)nand_spl/{u-boot.{lds,lst},System.map}  	@rm -f $(obj)nand_spl/{u-boot-nand_spl.lds,u-boot-spl,u-boot-spl.map} @@ -423,6 +423,11 @@ The following options need to be configured:  		CONFIG_SYS_FSL_DSP_CCSRBAR_DEFAULT  		This value denotes start offset of DSP CCSR space. +		CONFIG_SYS_FSL_SINGLE_SOURCE_CLK +		Single Source Clock is clocking mode present in some of FSL SoC's. +		In this mode, a single differential clock is used to supply +		clocks to the sysclock, ddrclock and usbclock. +  - Generic CPU options:  		CONFIG_SYS_BIG_ENDIAN, CONFIG_SYS_LITTLE_ENDIAN @@ -3267,6 +3272,9 @@ FIT uImage format:  		Defines the size and behavior of the NAND that SPL uses  		to read U-Boot +		CONFIG_SPL_NAND_BOOT +		Add support NAND boot +  		CONFIG_SYS_NAND_U_BOOT_OFFS  		Location in NAND to read U-Boot from @@ -5252,6 +5260,15 @@ when your kernel is intended to use an initial ramdisk:  	Load Address: 0x00000000  	Entry Point:  0x00000000 +The "dumpimage" is a tool to disassemble images built by mkimage. Its "-i" +option performs the converse operation of the mkimage's second form (the "-d" +option). Given an image built by mkimage, the dumpimage extracts a "data file" +from the image: + +	tools/dumpimage -i image -p position data_file +	  -i ==> extract from the 'image' a specific 'data_file', \ +	   indexed by 'position' +  Installing a Linux Image:  ------------------------- diff --git a/arch/arm/cpu/armv7/zynq/timer.c b/arch/arm/cpu/armv7/zynq/timer.c index 636322a8e..2be253c2c 100644 --- a/arch/arm/cpu/armv7/zynq/timer.c +++ b/arch/arm/cpu/armv7/zynq/timer.c @@ -107,8 +107,7 @@ void __udelay(unsigned long usec)  	if (usec == 0)  		return; -	countticks = (u32) (((unsigned long long) TIMER_TICK_HZ * usec) / -								1000000); +	countticks = lldiv(TIMER_TICK_HZ * usec, 1000000);  	/* decrementing timer */  	timeend = readl(&timer_base->counter) - countticks; diff --git a/arch/arm/cpu/pxa/timer.c b/arch/arm/cpu/pxa/timer.c index 78d9f3274..c4717de6a 100644 --- a/arch/arm/cpu/pxa/timer.c +++ b/arch/arm/cpu/pxa/timer.c @@ -28,12 +28,12 @@ DECLARE_GLOBAL_DATA_PTR;  static unsigned long long tick_to_time(unsigned long long tick)  { -	return tick * CONFIG_SYS_HZ / TIMER_FREQ_HZ; +	return lldiv(tick * CONFIG_SYS_HZ, TIMER_FREQ_HZ);  }  static unsigned long long us_to_tick(unsigned long long us)  { -	return (us * TIMER_FREQ_HZ) / 1000000; +	return lldiv(us * TIMER_FREQ_HZ, 1000000);  }  int timer_init(void) diff --git a/arch/arm/include/asm/arch-socfpga/dwmmc.h b/arch/arm/include/asm/arch-socfpga/dwmmc.h new file mode 100644 index 000000000..945eb646c --- /dev/null +++ b/arch/arm/include/asm/arch-socfpga/dwmmc.h @@ -0,0 +1,12 @@ +/* + * (C) Copyright 2013 Altera Corporation <www.altera.com> + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef	_SOCFPGA_DWMMC_H_ +#define	_SOCFPGA_DWMMC_H_ + +extern int socfpga_dwmmc_init(u32 regbase, int bus_width, int index); + +#endif /* _SOCFPGA_SDMMC_H_ */ diff --git a/arch/arm/include/asm/arch-socfpga/system_manager.h b/arch/arm/include/asm/arch-socfpga/system_manager.h index d965d25ef..838d21053 100644 --- a/arch/arm/include/asm/arch-socfpga/system_manager.h +++ b/arch/arm/include/asm/arch-socfpga/system_manager.h @@ -19,4 +19,69 @@ extern unsigned long sys_mgr_init_table[CONFIG_HPS_PINMUX_NUM];  #define CONFIG_SYSMGR_PINMUXGRP_OFFSET	(0x400) +#define SYSMGR_SDMMC_CTRL_SET(smplsel, drvsel)	\ +	((((drvsel) << 0) & 0x7) | (((smplsel) << 3) & 0x38)) + +struct socfpga_system_manager { +	u32	siliconid1; +	u32	siliconid2; +	u32	_pad_0x8_0xf[2]; +	u32	wddbg; +	u32	bootinfo; +	u32	hpsinfo; +	u32	parityinj; +	u32	fpgaintfgrp_gbl; +	u32	fpgaintfgrp_indiv; +	u32	fpgaintfgrp_module; +	u32	_pad_0x2c_0x2f; +	u32	scanmgrgrp_ctrl; +	u32	_pad_0x34_0x3f[3]; +	u32	frzctrl_vioctrl; +	u32	_pad_0x44_0x4f[3]; +	u32	frzctrl_hioctrl; +	u32	frzctrl_src; +	u32	frzctrl_hwctrl; +	u32	_pad_0x5c_0x5f; +	u32	emacgrp_ctrl; +	u32	emacgrp_l3master; +	u32	_pad_0x68_0x6f[2]; +	u32	dmagrp_ctrl; +	u32	dmagrp_persecurity; +	u32	_pad_0x78_0x7f[2]; +	u32	iswgrp_handoff[8]; +	u32	_pad_0xa0_0xbf[8]; +	u32	romcodegrp_ctrl; +	u32	romcodegrp_cpu1startaddr; +	u32	romcodegrp_initswstate; +	u32	romcodegrp_initswlastld; +	u32	romcodegrp_bootromswstate; +	u32	__pad_0xd4_0xdf[3]; +	u32	romcodegrp_warmramgrp_enable; +	u32	romcodegrp_warmramgrp_datastart; +	u32	romcodegrp_warmramgrp_length; +	u32	romcodegrp_warmramgrp_execution; +	u32	romcodegrp_warmramgrp_crc; +	u32	__pad_0xf4_0xff[3]; +	u32	romhwgrp_ctrl; +	u32	_pad_0x104_0x107; +	u32	sdmmcgrp_ctrl; +	u32	sdmmcgrp_l3master; +	u32	nandgrp_bootstrap; +	u32	nandgrp_l3master; +	u32	usbgrp_l3master; +	u32	_pad_0x11c_0x13f[9]; +	u32	eccgrp_l2; +	u32	eccgrp_ocram; +	u32	eccgrp_usb0; +	u32	eccgrp_usb1; +	u32	eccgrp_emac0; +	u32	eccgrp_emac1; +	u32	eccgrp_dma; +	u32	eccgrp_can0; +	u32	eccgrp_can1; +	u32	eccgrp_nand; +	u32	eccgrp_qspi; +	u32	eccgrp_sdmmc; +}; +  #endif /* _SYSTEM_MANAGER_H_ */ diff --git a/arch/arm/lib/bootm.c b/arch/arm/lib/bootm.c index 77f1a5c97..a8295bf1f 100644 --- a/arch/arm/lib/bootm.c +++ b/arch/arm/lib/bootm.c @@ -350,3 +350,26 @@ int bootz_setup(ulong image, ulong *start, ulong *end)  }  #endif	/* CONFIG_CMD_BOOTZ */ + +#if defined(CONFIG_BOOTM_VXWORKS) +void boot_prep_vxworks(bootm_headers_t *images) +{ +#if defined(CONFIG_OF_LIBFDT) +	int off; + +	if (images->ft_addr) { +		off = fdt_path_offset(images->ft_addr, "/memory"); +		if (off < 0) { +			if (arch_fixup_memory_node(images->ft_addr)) +				puts("## WARNING: fixup memory failed!\n"); +		} +	} +#endif +	cleanup_before_linux(); +} +void boot_jump_vxworks(bootm_headers_t *images) +{ +	/* ARM VxWorks requires device tree physical address to be passed */ +	((void (*)(void *))images->ep)(images->ft_addr); +} +#endif diff --git a/arch/blackfin/config.mk b/arch/blackfin/config.mk index 35f871662..73fa79855 100644 --- a/arch/blackfin/config.mk +++ b/arch/blackfin/config.mk @@ -14,9 +14,9 @@ CONFIG_BFIN_CPU := \  	$(shell awk '$$2 == "CONFIG_BFIN_CPU" { print $$3 }' \  		$(src)include/configs/$(BOARD).h)  else -CONFIG_BFIN_CPU := $(strip $(subst ",,$(CONFIG_BFIN_CPU))) +CONFIG_BFIN_CPU := $(strip $(CONFIG_BFIN_CPU:"%"=%))  endif -CONFIG_BFIN_BOOT_MODE := $(strip $(subst ",,$(CONFIG_BFIN_BOOT_MODE))) +CONFIG_BFIN_BOOT_MODE := $(strip $(CONFIG_BFIN_BOOT_MODE:"%"=%))  PLATFORM_RELFLAGS += -ffixed-P3 -fomit-frame-pointer -mno-fdpic  PLATFORM_CPPFLAGS += -DCONFIG_BLACKFIN diff --git a/arch/blackfin/cpu/initcode.c b/arch/blackfin/cpu/initcode.c index ffaf1017d..2e640afc4 100644 --- a/arch/blackfin/cpu/initcode.c +++ b/arch/blackfin/cpu/initcode.c @@ -18,8 +18,6 @@  #include <asm/mach-common/bits/core.h>  #include <asm/serial.h> -#define BUG() while (1) asm volatile("emuexcpt;"); -  #ifndef __ADSPBF60x__  #include <asm/mach-common/bits/ebiu.h>  #include <asm/mach-common/bits/pll.h> @@ -147,8 +145,6 @@ static struct ddr_config ddr_config_table[] = {  __attribute__((always_inline))  static inline void serial_init(void)  { -	uint32_t uart_base = UART_BASE; -  #if defined(__ADSPBF54x__) || defined(__ADSPBF60x__)  # ifdef BFIN_BOOT_UART_USE_RTS  #  define BFIN_UART_USE_RTS 1 @@ -156,6 +152,7 @@ static inline void serial_init(void)  #  define BFIN_UART_USE_RTS 0  # endif  	if (BFIN_UART_USE_RTS && CONFIG_BFIN_BOOT_MODE == BFIN_BOOT_UART) { +		uint32_t uart_base = UART_BASE;  		size_t i;  		/* force RTS rather than relying on auto RTS */ @@ -195,8 +192,8 @@ static inline void serial_init(void)  #if CONFIG_BFIN_BOOT_MODE != BFIN_BOOT_BYPASS  	if (BFIN_DEBUG_EARLY_SERIAL) { -		serial_early_init(uart_base); -		serial_early_set_baud(uart_base, CONFIG_BAUDRATE); +		serial_early_init(UART_BASE); +		serial_early_set_baud(UART_BASE, CONFIG_BAUDRATE);  	}  #endif  } @@ -547,7 +544,7 @@ maybe_self_refresh(ADI_BOOT_DATA *bs)  __attribute__((always_inline)) static inline u16  program_clocks(ADI_BOOT_DATA *bs, bool put_into_srfs)  { -	u16 vr_ctl; +	u16 vr_ctl = 0;  	serial_putc('a'); @@ -731,6 +728,8 @@ update_serial_clocks(ADI_BOOT_DATA *bs, uint sdivB, uint divB, uint vcoB)  	serial_putc('a'); +	if (BFIN_DEBUG_EARLY_SERIAL || +		CONFIG_BFIN_BOOT_MODE == BFIN_BOOT_UART) {  #ifdef __ADSPBF60x__  	sdivR = bfin_read_CGU_DIV();  	sdivR = ((sdivR >> 8) & 0x1f) * ((sdivR >> 5) & 0x7); @@ -744,6 +743,8 @@ update_serial_clocks(ADI_BOOT_DATA *bs, uint sdivB, uint divB, uint vcoB)  	divisor = vcoB * sdivR;  	quotient = early_division(dividend, divisor);  	serial_early_put_div(quotient - ANOMALY_05000230); +	} +  	serial_putc('c');  } @@ -913,7 +914,8 @@ check_hibernation(ADI_BOOT_DATA *bs, u16 vr_ctl, bool put_into_srfs)  			continue;  		serial_putc('z'); -		uint32_t *hibernate_magic = bfin_read32(DPM0_RESTORE4); +		uint32_t *hibernate_magic = +			(uint32_t *)bfin_read32(DPM0_RESTORE4);  		SSYNC(); /* make sure memory controller is done */  		if (hibernate_magic[0] == 0xDEADBEEF) {  			serial_putc('c'); diff --git a/arch/blackfin/include/asm/blackfin_local.h b/arch/blackfin/include/asm/blackfin_local.h index 8ea8cde69..4d6eeab0e 100644 --- a/arch/blackfin/include/asm/blackfin_local.h +++ b/arch/blackfin/include/asm/blackfin_local.h @@ -81,6 +81,8 @@ extern void blackfin_dcache_flush_invalidate_range(const void *, const void *);  # define NOP_PAD_ANOMALY_05000198  #endif +#define BFIN_BUG() while (1) asm volatile("emuexcpt;"); +  #define _bfin_readX(addr, size, asm_size, asm_ext) ({ \  	u32 __v; \  	__asm__ __volatile__( \ @@ -111,7 +113,7 @@ extern void blackfin_dcache_flush_invalidate_range(const void *, const void *);  	sizeof(*(addr)) == 1 ? bfin_read8(addr)  : \  	sizeof(*(addr)) == 2 ? bfin_read16(addr) : \  	sizeof(*(addr)) == 4 ? bfin_read32(addr) : \ -	({ BUG(); 0; }); \ +	({ BFIN_BUG(); 0; }); \  })  #define bfin_write(addr, val) \  do { \ @@ -119,7 +121,8 @@ do { \  	case 1: bfin_write8(addr, val);  break; \  	case 2: bfin_write16(addr, val); break; \  	case 4: bfin_write32(addr, val); break; \ -	default: BUG(); \ +	default: \ +		BFIN_BUG(); \  	} \  } while (0) diff --git a/arch/blackfin/lib/board.c b/arch/blackfin/lib/board.c index 17d1f468d..392d72d23 100644 --- a/arch/blackfin/lib/board.c +++ b/arch/blackfin/lib/board.c @@ -19,6 +19,7 @@  #include <net.h>  #include <status_led.h>  #include <version.h> +#include <watchdog.h>  #include <asm/cplb.h>  #include <asm/mach-common/bits/mpu.h> diff --git a/arch/blackfin/lib/clocks.c b/arch/blackfin/lib/clocks.c index 97795e11a..7ed56a727 100644 --- a/arch/blackfin/lib/clocks.c +++ b/arch/blackfin/lib/clocks.c @@ -36,7 +36,10 @@ u_long get_vco(void)  u_long get_cclk(void)  {  	static u_long cached_cclk_pll_div, cached_cclk; -	u_long div, csel, ssel; +	u_long div, csel; +#ifndef CGU_DIV +	u_long ssel; +#endif  	if (pll_is_bypassed())  		return CONFIG_CLKIN_HZ; diff --git a/arch/powerpc/config.mk b/arch/powerpc/config.mk index e6bb93572..f75c3bf18 100644 --- a/arch/powerpc/config.mk +++ b/arch/powerpc/config.mk @@ -9,8 +9,9 @@ CROSS_COMPILE ?= ppc_8xx-  CONFIG_STANDALONE_LOAD_ADDR ?= 0x40000  LDFLAGS_FINAL += --gc-sections -PLATFORM_RELFLAGS += -fpic -mrelocatable -ffunction-sections -fdata-sections -PLATFORM_CPPFLAGS += -DCONFIG_PPC -D__powerpc__ +PLATFORM_RELFLAGS += -fpic -mrelocatable -ffunction-sections -fdata-sections \ +								-meabi +PLATFORM_CPPFLAGS += -DCONFIG_PPC -D__powerpc__ -ffixed-r2  PLATFORM_LDFLAGS  += -n  # Support generic board on PPC diff --git a/arch/powerpc/cpu/74xx_7xx/config.mk b/arch/powerpc/cpu/74xx_7xx/config.mk index 905319160..96812a02d 100644 --- a/arch/powerpc/cpu/74xx_7xx/config.mk +++ b/arch/powerpc/cpu/74xx_7xx/config.mk @@ -5,6 +5,4 @@  # SPDX-License-Identifier:	GPL-2.0+  # -PLATFORM_RELFLAGS += -meabi - -PLATFORM_CPPFLAGS += -DCONFIG_74xx_7xx -ffixed-r2 -mstring +PLATFORM_CPPFLAGS += -DCONFIG_74xx_7xx -mstring diff --git a/arch/powerpc/cpu/Makefile b/arch/powerpc/cpu/Makefile index d630abe1d..88b5298be 100644 --- a/arch/powerpc/cpu/Makefile +++ b/arch/powerpc/cpu/Makefile @@ -1,3 +1,3 @@ -ifneq ($(filter mpc83xx mpc85xx mpc86xx,$(CPU)),) -obj-y += mpc8xxx/ -endif +obj-$(CONFIG_MPC83xx) += mpc8xxx/ +obj-$(CONFIG_MPC85xx) += mpc8xxx/ +obj-$(CONFIG_MPC86xx) += mpc8xxx/ diff --git a/arch/powerpc/cpu/mpc512x/config.mk b/arch/powerpc/cpu/mpc512x/config.mk index 04717a485..03759e662 100644 --- a/arch/powerpc/cpu/mpc512x/config.mk +++ b/arch/powerpc/cpu/mpc512x/config.mk @@ -4,7 +4,4 @@  # SPDX-License-Identifier:	GPL-2.0+  # -PLATFORM_RELFLAGS += -meabi - -PLATFORM_CPPFLAGS += -DCONFIG_MPC512X -DCONFIG_E300 \ -			-ffixed-r2 -msoft-float -mcpu=603e +PLATFORM_CPPFLAGS += -DCONFIG_MPC512X -DCONFIG_E300 -msoft-float -mcpu=603e diff --git a/arch/powerpc/cpu/mpc5xx/config.mk b/arch/powerpc/cpu/mpc5xx/config.mk index b33f17a1b..31e2dc987 100644 --- a/arch/powerpc/cpu/mpc5xx/config.mk +++ b/arch/powerpc/cpu/mpc5xx/config.mk @@ -5,6 +5,4 @@  # SPDX-License-Identifier:	GPL-2.0+  # -PLATFORM_RELFLAGS +=	-meabi - -PLATFORM_CPPFLAGS +=	-DCONFIG_5xx -ffixed-r2 -mpowerpc -msoft-float +PLATFORM_CPPFLAGS += -DCONFIG_5xx -mpowerpc -msoft-float diff --git a/arch/powerpc/cpu/mpc5xxx/config.mk b/arch/powerpc/cpu/mpc5xxx/config.mk index 57bdd2d25..3384f6ffc 100644 --- a/arch/powerpc/cpu/mpc5xxx/config.mk +++ b/arch/powerpc/cpu/mpc5xxx/config.mk @@ -5,7 +5,5 @@  # SPDX-License-Identifier:	GPL-2.0+  # -PLATFORM_RELFLAGS += -meabi - -PLATFORM_CPPFLAGS += -DCONFIG_MPC5xxx -ffixed-r2 \ +PLATFORM_CPPFLAGS += -DCONFIG_MPC5xxx \  		     -mstring -mcpu=603e -mmultiple diff --git a/arch/powerpc/cpu/mpc824x/config.mk b/arch/powerpc/cpu/mpc824x/config.mk index ef605f079..a224bc8e7 100644 --- a/arch/powerpc/cpu/mpc824x/config.mk +++ b/arch/powerpc/cpu/mpc824x/config.mk @@ -5,6 +5,4 @@  # SPDX-License-Identifier:	GPL-2.0+  # -PLATFORM_RELFLAGS += -meabi - -PLATFORM_CPPFLAGS += -DCONFIG_MPC824X -ffixed-r2 -mstring -mcpu=603e -msoft-float +PLATFORM_CPPFLAGS += -DCONFIG_MPC824X -mstring -mcpu=603e -msoft-float diff --git a/arch/powerpc/cpu/mpc8260/config.mk b/arch/powerpc/cpu/mpc8260/config.mk index 91b0497cc..dfac710e6 100644 --- a/arch/powerpc/cpu/mpc8260/config.mk +++ b/arch/powerpc/cpu/mpc8260/config.mk @@ -5,7 +5,5 @@  # SPDX-License-Identifier:	GPL-2.0+  # -PLATFORM_RELFLAGS += -meabi - -PLATFORM_CPPFLAGS += -DCONFIG_8260 -DCONFIG_CPM2 -ffixed-r2 \ +PLATFORM_CPPFLAGS += -DCONFIG_8260 -DCONFIG_CPM2 \  		     -mstring -mcpu=603e -mmultiple diff --git a/arch/powerpc/cpu/mpc83xx/config.mk b/arch/powerpc/cpu/mpc83xx/config.mk index c16a00376..dfce4d53b 100644 --- a/arch/powerpc/cpu/mpc83xx/config.mk +++ b/arch/powerpc/cpu/mpc83xx/config.mk @@ -4,7 +4,4 @@  # SPDX-License-Identifier:	GPL-2.0+  # -PLATFORM_RELFLAGS += -meabi - -PLATFORM_CPPFLAGS += -DCONFIG_MPC83xx -DCONFIG_E300 \ -			-ffixed-r2 -msoft-float +PLATFORM_CPPFLAGS += -DCONFIG_MPC83xx -DCONFIG_E300 -msoft-float diff --git a/arch/powerpc/cpu/mpc85xx/config.mk b/arch/powerpc/cpu/mpc85xx/config.mk index 9eef539e5..72c964cd1 100644 --- a/arch/powerpc/cpu/mpc85xx/config.mk +++ b/arch/powerpc/cpu/mpc85xx/config.mk @@ -5,13 +5,10 @@  # SPDX-License-Identifier:	GPL-2.0+  # -PLATFORM_RELFLAGS += -meabi - -PLATFORM_CPPFLAGS += -ffixed-r2 -Wa,-me500 -msoft-float -mno-string +PLATFORM_CPPFLAGS += -Wa,-me500 -msoft-float -mno-string  # -mspe=yes is needed to have -mno-spe accepted by a buggy GCC;  # see "[PATCH,rs6000] make -mno-spe work as expected" on  # http://gcc.gnu.org/ml/gcc-patches/2008-04/msg00311.html -PF_CPPFLAGS_SPE := $(call cc-option,-mspe=yes) \ +PLATFORM_CPPFLAGS += $(call cc-option,-mspe=yes) \  		   $(call cc-option,-mno-spe) -PLATFORM_CPPFLAGS += $(PF_CPPFLAGS_SPE) diff --git a/arch/powerpc/cpu/mpc85xx/speed.c b/arch/powerpc/cpu/mpc85xx/speed.c index 46ae80c4d..35867dffd 100644 --- a/arch/powerpc/cpu/mpc85xx/speed.c +++ b/arch/powerpc/cpu/mpc85xx/speed.c @@ -74,12 +74,33 @@ void get_sys_info(sys_info_t *sys_info)  	uint ratio[CONFIG_SYS_FSL_NUM_CC_PLLS];  	unsigned long sysclk = CONFIG_SYS_CLK_FREQ;  	uint mem_pll_rat; +#ifdef CONFIG_SYS_FSL_SINGLE_SOURCE_CLK +	uint single_src; +#endif  	sys_info->freq_systembus = sysclk; +#ifdef CONFIG_SYS_FSL_SINGLE_SOURCE_CLK +	/* +	 * DDR_REFCLK_SEL rcw bit is used to determine if DDR PLLS +	 * are driven by separate DDR Refclock or single source +	 * differential clock. +	 */ +	single_src = (in_be32(&gur->rcwsr[5]) >> +		      FSL_CORENET2_RCWSR5_DDR_REFCLK_SEL_SHIFT) & +		      FSL_CORENET2_RCWSR5_DDR_REFCLK_SEL_MASK; +	/* +	 * For single source clocking, both ddrclock and syclock +	 * are driven by differential sysclock. +	 */ +	if (single_src == FSL_CORENET2_RCWSR5_DDR_REFCLK_SINGLE_CLK) { +		printf("Single Source Clock Configuration\n"); +		sys_info->freq_ddrbus = CONFIG_SYS_CLK_FREQ; +	} else +#endif  #ifdef CONFIG_DDR_CLK_FREQ -	sys_info->freq_ddrbus = CONFIG_DDR_CLK_FREQ; +		sys_info->freq_ddrbus = CONFIG_DDR_CLK_FREQ;  #else -	sys_info->freq_ddrbus = sysclk; +		sys_info->freq_ddrbus = sysclk;  #endif  	sys_info->freq_systembus *= (in_be32(&gur->rcwsr[0]) >> 25) & 0x1f; @@ -229,6 +250,9 @@ void get_sys_info(sys_info_t *sys_info)  	case 4:  		sys_info->freq_fman[1] = freq_c_pll[CONFIG_SYS_FM2_CLK + 1] / 4;  		break; +	case 5: +		sys_info->freq_fman[1] = sys_info->freq_systembus; +		break;  	case 6:  		sys_info->freq_fman[1] = freq_c_pll[CONFIG_SYS_FM2_CLK] / 2;  		break; diff --git a/arch/powerpc/cpu/mpc86xx/config.mk b/arch/powerpc/cpu/mpc86xx/config.mk index 5dbf6a847..69a0b96ea 100644 --- a/arch/powerpc/cpu/mpc86xx/config.mk +++ b/arch/powerpc/cpu/mpc86xx/config.mk @@ -5,7 +5,4 @@  # SPDX-License-Identifier:	GPL-2.0+  # -PLATFORM_RELFLAGS += -meabi - -PLATFORM_CPPFLAGS += -ffixed-r2 -mstring -PLATFORM_CPPFLAGS += -maltivec -mabi=altivec -msoft-float +PLATFORM_CPPFLAGS += -mstring -maltivec -mabi=altivec -msoft-float diff --git a/arch/powerpc/cpu/mpc8xx/config.mk b/arch/powerpc/cpu/mpc8xx/config.mk index c04e7338c..ee2c88366 100644 --- a/arch/powerpc/cpu/mpc8xx/config.mk +++ b/arch/powerpc/cpu/mpc8xx/config.mk @@ -5,6 +5,4 @@  # SPDX-License-Identifier:	GPL-2.0+  # -PLATFORM_RELFLAGS += -meabi - -PLATFORM_CPPFLAGS += -DCONFIG_8xx -ffixed-r2 -mstring -mcpu=860 -msoft-float +PLATFORM_CPPFLAGS += -DCONFIG_8xx -mstring -mcpu=860 -msoft-float diff --git a/arch/powerpc/cpu/mpc8xxx/Makefile b/arch/powerpc/cpu/mpc8xxx/Makefile index f66ee2e42..e95539e0a 100644 --- a/arch/powerpc/cpu/mpc8xxx/Makefile +++ b/arch/powerpc/cpu/mpc8xxx/Makefile @@ -19,10 +19,8 @@ ifdef MINIMAL  obj-$(CONFIG_FSL_LAW) += law.o  else - -ifneq ($(CPU),mpc83xx) -obj-y	+= cpu.o -endif +obj-$(CONFIG_MPC85xx) += cpu.o +obj-$(CONFIG_MPC86xx) += cpu.o  obj-$(CONFIG_OF_LIBFDT) += fdt.o  obj-$(CONFIG_FSL_LBC) += fsl_lbc.o diff --git a/arch/powerpc/cpu/ppc4xx/config.mk b/arch/powerpc/cpu/ppc4xx/config.mk index c2b0f9aab..71c2a6c72 100644 --- a/arch/powerpc/cpu/ppc4xx/config.mk +++ b/arch/powerpc/cpu/ppc4xx/config.mk @@ -5,8 +5,7 @@  # SPDX-License-Identifier:	GPL-2.0+  # -PLATFORM_RELFLAGS += -meabi -PLATFORM_CPPFLAGS += -DCONFIG_4xx -ffixed-r2 -mstring -msoft-float +PLATFORM_CPPFLAGS += -DCONFIG_4xx -mstring -msoft-float  cfg=$(shell grep configs $(OBJTREE)/include/config.h | sed 's/.*<\(configs.*\)>/\1/')  is440:=$(shell grep CONFIG_440 $(TOPDIR)/include/$(cfg)) diff --git a/arch/powerpc/include/asm/config_mpc85xx.h b/arch/powerpc/include/asm/config_mpc85xx.h index 99e16bdf6..54ce2f053 100644 --- a/arch/powerpc/include/asm/config_mpc85xx.h +++ b/arch/powerpc/include/asm/config_mpc85xx.h @@ -711,7 +711,8 @@ defined(CONFIG_PPC_T1020) || defined(CONFIG_PPC_T1022)  #define CONFIG_FM_PLAT_CLK_DIV	1  #define CONFIG_SYS_FM1_CLK		CONFIG_FM_PLAT_CLK_DIV  #define CONFIG_SYS_FM_MURAM_SIZE	0x30000 -#define CONFIG_SYS_FSL_TBCLK_DIV	32 +#define CONFIG_SYS_FSL_SINGLE_SOURCE_CLK +#define CONFIG_SYS_FSL_TBCLK_DIV	16  #define CONFIG_SYS_FSL_PCIE_COMPAT	"fsl,qoriq-pcie-v2.4"  #define CONFIG_SYS_FSL_USB1_PHY_ENABLE  #define CONFIG_SYS_FSL_USB2_PHY_ENABLE @@ -745,7 +746,7 @@ defined(CONFIG_PPC_T1020) || defined(CONFIG_PPC_T1022)  #define CONFIG_SYS_NUM_FM1_DTSEC	6  #define CONFIG_SYS_NUM_FM1_10GEC	2  #endif -#define CONFIG_SYS_FSL_NUM_USB_CTRLS	2 +#define CONFIG_USB_MAX_CONTROLLER_COUNT 2  #define CONFIG_NUM_DDR_CONTROLLERS	1  #define CONFIG_PME_PLAT_CLK_DIV		1  #define CONFIG_SYS_PME_CLK		CONFIG_PME_PLAT_CLK_DIV diff --git a/arch/powerpc/include/asm/immap_85xx.h b/arch/powerpc/include/asm/immap_85xx.h index 672e8c665..68c3c8245 100644 --- a/arch/powerpc/include/asm/immap_85xx.h +++ b/arch/powerpc/include/asm/immap_85xx.h @@ -1774,6 +1774,9 @@ defined(CONFIG_PPC_T1020) || defined(CONFIG_PPC_T1022)  #define FSL_CORENET2_RCWSR5_SRDS_PLL_PD_S3_PLL2	0x00040000  #define FSL_CORENET2_RCWSR5_SRDS_PLL_PD_S4_PLL1	0x00020000  #define FSL_CORENET2_RCWSR5_SRDS_PLL_PD_S4_PLL2	0x00010000 +#define FSL_CORENET2_RCWSR5_DDR_REFCLK_SEL_SHIFT 4 +#define FSL_CORENET2_RCWSR5_DDR_REFCLK_SEL_MASK	0x00000011 +#define FSL_CORENET2_RCWSR5_DDR_REFCLK_SINGLE_CLK	1  #else /* CONFIG_SYS_FSL_QORIQ_CHASSIS2 */  #define FSL_CORENET_RCWSR0_MEM_PLL_RAT_SHIFT	17 diff --git a/arch/powerpc/lib/bootm.c b/arch/powerpc/lib/bootm.c index e7153b048..41fc8f7ff 100644 --- a/arch/powerpc/lib/bootm.c +++ b/arch/powerpc/lib/bootm.c @@ -32,6 +32,7 @@ DECLARE_GLOBAL_DATA_PTR;  extern ulong get_effective_memsize(void);  static ulong get_sp (void); +extern void ft_fixup_num_cores(void *blob);  static void set_clocks_in_mhz (bd_t *kbd);  #ifndef CONFIG_SYS_LINUX_LOWMEM_MAX_SIZE @@ -277,3 +278,58 @@ static void set_clocks_in_mhz (bd_t *kbd)  #endif /* CONFIG_MPC5xxx */  	}  } + +#if defined(CONFIG_BOOTM_VXWORKS) +void boot_prep_vxworks(bootm_headers_t *images) +{ +#if defined(CONFIG_OF_LIBFDT) +	int off; +	u64 base, size; + +	if (!images->ft_addr) +		return; + +	base = (u64)gd->bd->bi_memstart; +	size = (u64)gd->bd->bi_memsize; + +	off = fdt_path_offset(images->ft_addr, "/memory"); +	if (off < 0) +		fdt_fixup_memory(images->ft_addr, base, size); + +#if defined(CONFIG_MP) +#if defined(CONFIG_MPC85xx) +	ft_fixup_cpu(images->ft_addr, base + size); +	ft_fixup_num_cores(images->ft_addr); +#elif defined(CONFIG_MPC86xx) +	off = fdt_add_mem_rsv(images->ft_addr, +			determine_mp_bootpg(NULL), (u64)4096); +	if (off < 0) +		printf("## WARNING %s: %s\n", __func__, fdt_strerror(off)); +	ft_fixup_num_cores(images->ft_addr); +#endif +	flush_cache((unsigned long)images->ft_addr, images->ft_len); +#endif +#endif +} + +void boot_jump_vxworks(bootm_headers_t *images) +{ +	/* PowerPC VxWorks boot interface conforms to the ePAPR standard +	 * general purpuse registers: +	 * +	 *	r3: Effective address of the device tree image +	 *	r4: 0 +	 *	r5: 0 +	 *	r6: ePAPR magic value +	 *	r7: shall be the size of the boot IMA in bytes +	 *	r8: 0 +	 *	r9: 0 +	 *	TCR: WRC = 0, no watchdog timer reset will occur +	 */ +	WATCHDOG_RESET(); + +	((void (*)(void *, ulong, ulong, ulong, +		ulong, ulong, ulong))images->ep)(images->ft_addr, +		0, 0, EPAPR_MAGIC, getenv_bootm_mapsize(), 0, 0); +} +#endif diff --git a/arch/sandbox/cpu/cpu.c b/arch/sandbox/cpu/cpu.c index cfc1fda1e..38019e0b4 100644 --- a/arch/sandbox/cpu/cpu.c +++ b/arch/sandbox/cpu/cpu.c @@ -5,13 +5,23 @@  #include <common.h>  #include <os.h> +#include <asm/state.h>  DECLARE_GLOBAL_DATA_PTR; -int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +void reset_cpu(ulong ignored)  { +	if (state_uninit()) +		os_exit(2); +  	/* This is considered normal termination for now */  	os_exit(0); +} + +int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +{ +	reset_cpu(0); +  	return 0;  } @@ -28,7 +38,14 @@ unsigned long __attribute__((no_instrument_function)) timer_get_us(void)  int do_bootm_linux(int flag, int argc, char *argv[], bootm_headers_t *images)  { -	return -1; +	if (flag & (BOOTM_STATE_OS_GO | BOOTM_STATE_OS_FAKE_GO)) { +		bootstage_mark(BOOTSTAGE_ID_RUN_OS); +		printf("## Transferring control to Linux (at address %08lx)...\n", +		       images->ep); +		reset_cpu(0); +	} + +	return 0;  }  int cleanup_before_linux(void) diff --git a/arch/sandbox/cpu/os.c b/arch/sandbox/cpu/os.c index 26f44cb59..725b50517 100644 --- a/arch/sandbox/cpu/os.c +++ b/arch/sandbox/cpu/os.c @@ -27,6 +27,10 @@  /* Operating System Interface */ +struct os_mem_hdr { +	size_t length;		/* number of bytes in the block */ +}; +  ssize_t os_read(int fd, void *buf, size_t count)  {  	return read(fd, buf, count); @@ -128,8 +132,45 @@ void os_tty_raw(int fd)  void *os_malloc(size_t length)  { -	return mmap(NULL, length, PROT_READ | PROT_WRITE, -			MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); +	struct os_mem_hdr *hdr; + +	hdr = mmap(NULL, length + sizeof(*hdr), PROT_READ | PROT_WRITE, +		   MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); +	if (hdr == MAP_FAILED) +		return NULL; +	hdr->length = length; + +	return hdr + 1; +} + +void *os_free(void *ptr) +{ +	struct os_mem_hdr *hdr = ptr; + +	hdr--; +	if (ptr) +		munmap(hdr, hdr->length + sizeof(*hdr)); +} + +void *os_realloc(void *ptr, size_t length) +{ +	struct os_mem_hdr *hdr = ptr; +	void *buf = NULL; + +	hdr--; +	if (length != 0) { +		buf = os_malloc(length); +		if (!buf) +			return buf; +		if (ptr) { +			if (length > hdr->length) +				length = hdr->length; +			memcpy(buf, ptr, length); +		} +	} +	os_free(ptr); + +	return buf;  }  void os_usleep(unsigned long usec) @@ -347,3 +388,53 @@ ssize_t os_get_filesize(const char *fname)  		return ret;  	return buf.st_size;  } + +void os_putc(int ch) +{ +	putchar(ch); +} + +void os_puts(const char *str) +{ +	while (*str) +		os_putc(*str++); +} + +int os_write_ram_buf(const char *fname) +{ +	struct sandbox_state *state = state_get_current(); +	int fd, ret; + +	fd = open(fname, O_CREAT | O_WRONLY, 0777); +	if (fd < 0) +		return -ENOENT; +	ret = write(fd, state->ram_buf, state->ram_size); +	close(fd); +	if (ret != state->ram_size) +		return -EIO; + +	return 0; +} + +int os_read_ram_buf(const char *fname) +{ +	struct sandbox_state *state = state_get_current(); +	int fd, ret; +	int size; + +	size = os_get_filesize(fname); +	if (size < 0) +		return -ENOENT; +	if (size != state->ram_size) +		return -ENOSPC; +	fd = open(fname, O_RDONLY); +	if (fd < 0) +		return -ENOENT; + +	ret = read(fd, state->ram_buf, state->ram_size); +	close(fd); +	if (ret != state->ram_size) +		return -EIO; + +	return 0; +} diff --git a/arch/sandbox/cpu/start.c b/arch/sandbox/cpu/start.c index 1b1545478..1df21d49f 100644 --- a/arch/sandbox/cpu/start.c +++ b/arch/sandbox/cpu/start.c @@ -4,11 +4,12 @@   */  #include <common.h> +#include <os.h>  #include <asm/getopt.h>  #include <asm/sections.h>  #include <asm/state.h> -#include <os.h> +DECLARE_GLOBAL_DATA_PTR;  int sandbox_early_getopt_check(void)  { @@ -50,9 +51,9 @@ int sandbox_early_getopt_check(void)  		/* then the long flag */  		if (opt->has_arg) -			printf("--%-*s", max_noarg_len, opt->flag); -		else  			printf("--%-*s <arg> ", max_arg_len, opt->flag); +		else +			printf("--%-*s", max_noarg_len, opt->flag);  		/* finally the help text */  		printf("  %s\n", opt->help); @@ -75,7 +76,8 @@ int sandbox_main_loop_init(void)  	/* Execute command if required */  	if (state->cmd) {  		run_command_list(state->cmd, -1, 0); -		os_exit(state->exit_type); +		if (!state->interactive) +			os_exit(state->exit_type);  	}  	return 0; @@ -96,25 +98,93 @@ static int sandbox_cmdline_cb_fdt(struct sandbox_state *state, const char *arg)  }  SANDBOX_CMDLINE_OPT_SHORT(fdt, 'd', 1, "Specify U-Boot's control FDT"); -int main(int argc, char *argv[]) +static int sandbox_cmdline_cb_interactive(struct sandbox_state *state, +					  const char *arg) +{ +	state->interactive = true; +	return 0; +} + +SANDBOX_CMDLINE_OPT_SHORT(interactive, 'i', 0, "Enter interactive mode"); + +static int sandbox_cmdline_cb_memory(struct sandbox_state *state, +				     const char *arg)  { -	struct sandbox_state *state;  	int err; -	err = state_init(); -	if (err) +	/* For now assume we always want to write it */ +	state->write_ram_buf = true; +	state->ram_buf_fname = arg; + +	if (os_read_ram_buf(arg)) { +		printf("Failed to read RAM buffer\n");  		return err; +	} + +	return 0; +} +SANDBOX_CMDLINE_OPT_SHORT(memory, 'm', 1, +			  "Read/write ram_buf memory contents from file"); + +static int sandbox_cmdline_cb_state(struct sandbox_state *state, +				    const char *arg) +{ +	state->state_fname = arg; +	return 0; +} +SANDBOX_CMDLINE_OPT_SHORT(state, 's', 1, "Specify the sandbox state FDT"); + +static int sandbox_cmdline_cb_read(struct sandbox_state *state, +				   const char *arg) +{ +	state->read_state = true; +	return 0; +} +SANDBOX_CMDLINE_OPT_SHORT(read, 'r', 0, "Read the state FDT on startup"); + +static int sandbox_cmdline_cb_write(struct sandbox_state *state, +				    const char *arg) +{ +	state->write_state = true; +	return 0; +} +SANDBOX_CMDLINE_OPT_SHORT(write, 'w', 0, "Write state FDT on exit"); + +static int sandbox_cmdline_cb_ignore_missing(struct sandbox_state *state, +					     const char *arg) +{ +	state->ignore_missing_state_on_read = true; +	return 0; +} +SANDBOX_CMDLINE_OPT_SHORT(ignore_missing, 'n', 0, +			  "Ignore missing state on read"); + +int main(int argc, char *argv[]) +{ +	struct sandbox_state *state; +	int ret; + +	ret = state_init(); +	if (ret) +		goto err;  	state = state_get_current();  	if (os_parse_args(state, argc, argv))  		return 1; -	/* -	 * Do pre- and post-relocation init, then start up U-Boot. This will -	 * never return. -	 */ +	ret = sandbox_read_state(state, state->state_fname); +	if (ret) +		goto err; + +	/* Do pre- and post-relocation init */  	board_init_f(0); -	/* NOTREACHED - board_init_f() does not return */ +	board_init_r(gd->new_gd, 0); + +	/* NOTREACHED - board_init_r() does not return */  	return 0; + +err: +	printf("Error %d\n", ret); +	return 1;  } diff --git a/arch/sandbox/cpu/state.c b/arch/sandbox/cpu/state.c index 56d504141..a145808a5 100644 --- a/arch/sandbox/cpu/state.c +++ b/arch/sandbox/cpu/state.c @@ -4,6 +4,9 @@   */  #include <common.h> +#include <errno.h> +#include <fdtdec.h> +#include <os.h>  #include <asm/state.h>  /* Main state record for the sandbox */ @@ -15,6 +18,324 @@ void state_record_exit(enum exit_type_id exit_type)  	state->exit_type = exit_type;  } +static int state_ensure_space(int extra_size) +{ +	void *blob = state->state_fdt; +	int used, size, free; +	void *buf; +	int ret; + +	used = fdt_off_dt_strings(blob) + fdt_size_dt_strings(blob); +	size = fdt_totalsize(blob); +	free = size - used; +	if (free > extra_size) +		return 0; + +	size = used + extra_size; +	buf = os_malloc(size); +	if (!buf) +		return -ENOMEM; + +	ret = fdt_open_into(blob, buf, size); +	if (ret) { +		os_free(buf); +		return -EIO; +	} + +	os_free(blob); +	state->state_fdt = buf; +	return 0; +} + +static int state_read_file(struct sandbox_state *state, const char *fname) +{ +	int size; +	int ret; +	int fd; + +	size = os_get_filesize(fname); +	if (size < 0) { +		printf("Cannot find sandbox state file '%s'\n", fname); +		return -ENOENT; +	} +	state->state_fdt = os_malloc(size); +	if (!state->state_fdt) { +		puts("No memory to read sandbox state\n"); +		return -ENOMEM; +	} +	fd = os_open(fname, OS_O_RDONLY); +	if (fd < 0) { +		printf("Cannot open sandbox state file '%s'\n", fname); +		ret = -EPERM; +		goto err_open; +	} +	if (os_read(fd, state->state_fdt, size) != size) { +		printf("Cannot read sandbox state file '%s'\n", fname); +		ret = -EIO; +		goto err_read; +	} +	os_close(fd); + +	return 0; +err_read: +	os_close(fd); +err_open: +	os_free(state->state_fdt); +	state->state_fdt = NULL; + +	return ret; +} + +/*** + * sandbox_read_state_nodes() - Read state associated with a driver + * + * This looks through all compatible nodes and calls the read function on + * each one, to read in the state. + * + * If nothing is found, it still calls the read function once, to set up a + * single global state for that driver. + * + * @state: Sandbox state + * @io: Method to use for reading state + * @blob: FDT containing state + * @return 0 if OK, -EINVAL if the read function returned failure + */ +int sandbox_read_state_nodes(struct sandbox_state *state, +			     struct sandbox_state_io *io, const void *blob) +{ +	int count; +	int node; +	int ret; + +	debug("   - read %s\n", io->name); +	if (!io->read) +		return 0; + +	node = -1; +	count = 0; +	while (blob) { +		node = fdt_node_offset_by_compatible(blob, node, io->compat); +		if (node < 0) +			return 0;	/* No more */ +		debug("   - read node '%s'\n", fdt_get_name(blob, node, NULL)); +		ret = io->read(blob, node); +		if (ret) { +			printf("Unable to read state for '%s'\n", io->compat); +			return -EINVAL; +		} +		count++; +	} + +	/* +	 * If we got no saved state, call the read function once without a +	 * node, to set up the global state. +	 */ +	if (count == 0) { +		debug("   - read global\n"); +		ret = io->read(NULL, -1); +		if (ret) { +			printf("Unable to read global state for '%s'\n", +			       io->name); +			return -EINVAL; +		} +	} + +	return 0; +} + +int sandbox_read_state(struct sandbox_state *state, const char *fname) +{ +	struct sandbox_state_io *io; +	const void *blob; +	bool got_err; +	int ret; + +	if (state->read_state && fname) { +		ret = state_read_file(state, fname); +		if (ret == -ENOENT && state->ignore_missing_state_on_read) +			ret = 0; +		if (ret) +			return ret; +	} + +	/* Call all the state read funtcions */ +	got_err = false; +	blob = state->state_fdt; +	io = ll_entry_start(struct sandbox_state_io, state_io); +	for (; io < ll_entry_end(struct sandbox_state_io, state_io); io++) { +		ret = sandbox_read_state_nodes(state, io, blob); +		if (ret < 0) +			got_err = true; +	} + +	if (state->read_state && fname) { +		debug("Read sandbox state from '%s'%s\n", fname, +		      got_err ? " (with errors)" : ""); +	} + +	return got_err ? -1 : 0; +} + +/*** + * sandbox_write_state_node() - Write state associated with a driver + * + * This calls the write function to write out global state for that driver. + * + * TODO(sjg@chromium.org): Support writing out state from multiple drivers + * of the same time. We don't need this yet,and it will be much easier to + * do when driver model is available. + * + * @state: Sandbox state + * @io: Method to use for writing state + * @return 0 if OK, -EIO if there is a fatal error (such as out of space + * for adding the data), -EINVAL if the write function failed. + */ +int sandbox_write_state_node(struct sandbox_state *state, +			     struct sandbox_state_io *io) +{ +	void *blob; +	int node; +	int ret; + +	if (!io->write) +		return 0; + +	ret = state_ensure_space(SANDBOX_STATE_MIN_SPACE); +	if (ret) { +		printf("Failed to add more space for state\n"); +		return -EIO; +	} + +	/* The blob location can change when the size increases */ +	blob = state->state_fdt; +	node = fdt_node_offset_by_compatible(blob, -1, io->compat); +	if (node == -FDT_ERR_NOTFOUND) { +		node = fdt_add_subnode(blob, 0, io->name); +		if (node < 0) { +			printf("Cannot create node '%s': %s\n", io->name, +			       fdt_strerror(node)); +			return -EIO; +		} + +		if (fdt_setprop_string(blob, node, "compatible", io->compat)) { +			puts("Cannot set compatible\n"); +			return -EIO; +		} +	} else if (node < 0) { +		printf("Cannot access node '%s': %s\n", io->name, +		       fdt_strerror(node)); +		return -EIO; +	} +	debug("Write state for '%s' to node %d\n", io->compat, node); +	ret = io->write(blob, node); +	if (ret) { +		printf("Unable to write state for '%s'\n", io->compat); +		return -EINVAL; +	} + +	return 0; +} + +int sandbox_write_state(struct sandbox_state *state, const char *fname) +{ +	struct sandbox_state_io *io; +	bool got_err; +	int size; +	int ret; +	int fd; + +	/* Create a state FDT if we don't have one */ +	if (!state->state_fdt) { +		size = 0x4000; +		state->state_fdt = os_malloc(size); +		if (!state->state_fdt) { +			puts("No memory to create FDT\n"); +			return -ENOMEM; +		} +		ret = fdt_create_empty_tree(state->state_fdt, size); +		if (ret < 0) { +			printf("Cannot create empty state FDT: %s\n", +			       fdt_strerror(ret)); +			ret = -EIO; +			goto err_create; +		} +	} + +	/* Call all the state write funtcions */ +	got_err = false; +	io = ll_entry_start(struct sandbox_state_io, state_io); +	ret = 0; +	for (; io < ll_entry_end(struct sandbox_state_io, state_io); io++) { +		ret = sandbox_write_state_node(state, io); +		if (ret == -EIO) +			break; +		else if (ret) +			got_err = true; +	} + +	if (ret == -EIO) { +		printf("Could not write sandbox state\n"); +		goto err_create; +	} + +	ret = fdt_pack(state->state_fdt); +	if (ret < 0) { +		printf("Cannot pack state FDT: %s\n", fdt_strerror(ret)); +		ret = -EINVAL; +		goto err_create; +	} +	size = fdt_totalsize(state->state_fdt); +	fd = os_open(fname, OS_O_WRONLY | OS_O_CREAT); +	if (fd < 0) { +		printf("Cannot open sandbox state file '%s'\n", fname); +		ret = -EIO; +		goto err_create; +	} +	if (os_write(fd, state->state_fdt, size) != size) { +		printf("Cannot write sandbox state file '%s'\n", fname); +		ret = -EIO; +		goto err_write; +	} +	os_close(fd); + +	debug("Wrote sandbox state to '%s'%s\n", fname, +	      got_err ? " (with errors)" : ""); + +	return 0; +err_write: +	os_close(fd); +err_create: +	os_free(state->state_fdt); + +	return ret; +} + +int state_setprop(int node, const char *prop_name, const void *data, int size) +{ +	void *blob; +	int len; +	int ret; + +	fdt_getprop(state->state_fdt, node, prop_name, &len); + +	/* Add space for the new property, its name and some overhead */ +	ret = state_ensure_space(size - len + strlen(prop_name) + 32); +	if (ret) +		return ret; + +	/* This should succeed, barring a mutiny */ +	blob = state->state_fdt; +	ret = fdt_setprop(blob, node, prop_name, data, size); +	if (ret) { +		printf("%s: Unable to set property '%s' in node '%s': %s\n", +		       __func__, prop_name, fdt_get_name(blob, node, NULL), +			fdt_strerror(ret)); +		return -ENOSPC; +	} + +	return 0; +} +  struct sandbox_state *state_get_current(void)  {  	assert(state); @@ -25,6 +346,10 @@ int state_init(void)  {  	state = &main_state; +	state->ram_size = CONFIG_SYS_SDRAM_SIZE; +	state->ram_buf = os_malloc(state->ram_size); +	assert(state->ram_buf); +  	/*  	 * Example of how to use GPIOs:  	 * @@ -33,3 +358,31 @@ int state_init(void)  	 */  	return 0;  } + +int state_uninit(void) +{ +	int err; + +	state = &main_state; + +	if (state->write_ram_buf) { +		err = os_write_ram_buf(state->ram_buf_fname); +		if (err) { +			printf("Failed to write RAM buffer\n"); +			return err; +		} +	} + +	if (state->write_state) { +		if (sandbox_write_state(state, state->state_fname)) { +			printf("Failed to write sandbox state\n"); +			return -1; +		} +	} + +	if (state->state_fdt) +		os_free(state->state_fdt); +	memset(state, '\0', sizeof(*state)); + +	return 0; +} diff --git a/arch/sandbox/include/asm/global_data.h b/arch/sandbox/include/asm/global_data.h index d70532aa4..b2e9b488f 100644 --- a/arch/sandbox/include/asm/global_data.h +++ b/arch/sandbox/include/asm/global_data.h @@ -12,7 +12,7 @@  /* Architecture-specific global data */  struct arch_global_data { -	u8		*ram_buf;	/* emulated RAM buffer */ +	uint8_t		*ram_buf;	/* emulated RAM buffer */  };  #include <asm-generic/global_data.h> diff --git a/arch/sandbox/include/asm/state.h b/arch/sandbox/include/asm/state.h index a38820bde..e8e4fea1b 100644 --- a/arch/sandbox/include/asm/state.h +++ b/arch/sandbox/include/asm/state.h @@ -7,6 +7,8 @@  #define __SANDBOX_STATE_H  #include <config.h> +#include <stdbool.h> +#include <linux/stringify.h>  /* How we exited U-Boot */  enum exit_type_id { @@ -23,17 +25,92 @@ struct sandbox_spi_info {  /* The complete state of the test system */  struct sandbox_state {  	const char *cmd;		/* Command to execute */ +	bool interactive;		/* Enable cmdline after execute */  	const char *fdt_fname;		/* Filename of FDT binary */  	enum exit_type_id exit_type;	/* How we exited U-Boot */  	const char *parse_err;		/* Error to report from parsing */  	int argc;			/* Program arguments */  	char **argv; +	uint8_t *ram_buf;		/* Emulated RAM buffer */ +	unsigned int ram_size;		/* Size of RAM buffer */ +	const char *ram_buf_fname;	/* Filename to use for RAM buffer */ +	bool write_ram_buf;		/* Write RAM buffer on exit */ +	const char *state_fname;	/* File containing sandbox state */ +	void *state_fdt;		/* Holds saved state for sandbox */ +	bool read_state;		/* Read sandbox state on startup */ +	bool write_state;		/* Write sandbox state on exit */ +	bool ignore_missing_state_on_read;	/* No error if state missing */  	/* Pointer to information for each SPI bus/cs */  	struct sandbox_spi_info spi[CONFIG_SANDBOX_SPI_MAX_BUS]  					[CONFIG_SANDBOX_SPI_MAX_CS];  }; +/* Minimum space we guarantee in the state FDT when calling read/write*/ +#define SANDBOX_STATE_MIN_SPACE		0x1000 + +/** + * struct sandbox_state_io - methods to saved/restore sandbox state + * @name: Name of of the device tree node, also the name of the variable + *	holding this data so it should be an identifier (use underscore + *	instead of minus) + * @compat: Compatible string for the node containing this state + * + * @read: Function to read state from FDT + *	If data is available, then blob and node will provide access to it. If + *	not (blob == NULL and node == -1) this function should set up an empty + *	data set for start-of-day. + *	@param blob: Pointer to device tree blob, or NULL if no data to read + *	@param node: Node offset to read from + *	@return 0 if OK, -ve on error + * + * @write: Function to write state to FDT + *	The caller will ensure that there is a node ready for the state. The + *	node may already contain the old state, in which case it should be + *	overridden. There is guaranteed to be SANDBOX_STATE_MIN_SPACE bytes + *	of free space, so error checking is not required for fdt_setprop...() + *	calls which add up to less than this much space. + * + *	For adding larger properties, use state_setprop(). + * + * @param blob: Device tree blob holding state + * @param node: Node to write our state into + * + * Note that it is possible to save data as large blobs or as individual + * hierarchical properties. However, unless you intend to keep state files + * around for a long time and be able to run an old state file on a new + * sandbox, it might not be worth using individual properties for everything. + * This is certainly supported, it is just a matter of the effort you wish + * to put into the state read/write feature. + */ +struct sandbox_state_io { +	const char *name; +	const char *compat; +	int (*write)(void *blob, int node); +	int (*read)(const void *blob, int node); +}; + +/** + * SANDBOX_STATE_IO - Declare sandbox state to read/write + * + * Sandbox permits saving state from one run and restoring it in another. This + * allows the test system to retain state between runs and thus better + * emulate a real system. Examples of state that might be useful to save are + * the emulated GPIOs pin settings, flash memory contents and TPM private + * data. U-Boot memory contents is dealth with separately since it is large + * and it is not normally useful to save it (since a normal system does not + * preserve DRAM between runs). See the '-m' option for this. + * + * See struct sandbox_state_io above for member documentation. + */ +#define SANDBOX_STATE_IO(_name, _compat, _read, _write) \ +	ll_entry_declare(struct sandbox_state_io, _name, state_io) = { \ +		.name = __stringify(_name), \ +		.read = _read, \ +		.write = _write, \ +		.compat = _compat, \ +	} +  /**   * Record the exit type to be reported by the test program.   * @@ -49,8 +126,59 @@ void state_record_exit(enum exit_type_id exit_type);  struct sandbox_state *state_get_current(void);  /** + * Read the sandbox state from the supplied device tree file + * + * This calls all registered state handlers to read in the sandbox state + * from a previous test run. + * + * @param state		Sandbox state to update + * @param fname		Filename of device tree file to read from + * @return 0 if OK, -ve on error + */ +int sandbox_read_state(struct sandbox_state *state, const char *fname); + +/** + * Write the sandbox state to the supplied device tree file + * + * This calls all registered state handlers to write out the sandbox state + * so that it can be preserved for a future test run. + * + * If the file exists it is overwritten. + * + * @param state		Sandbox state to update + * @param fname		Filename of device tree file to write to + * @return 0 if OK, -ve on error + */ +int sandbox_write_state(struct sandbox_state *state, const char *fname); + +/** + * Add a property to a sandbox state node + * + * This is equivalent to fdt_setprop except that it automatically enlarges + * the device tree if necessary. That means it is safe to write any amount + * of data here. + * + * This function can only be called from within struct sandbox_state_io's + * ->write method, i.e. within state I/O drivers. + * + * @param node		Device tree node to write to + * @param prop_name	Property to write + * @param data		Data to write into property + * @param size		Size of data to write into property + */ +int state_setprop(int node, const char *prop_name, const void *data, int size); + +/**   * Initialize the test system state   */  int state_init(void); +/** + * Uninitialize the test system state, writing out state if configured to + * do so. + * + * @return 0 if OK, -ve on error + */ +int state_uninit(void); +  #endif diff --git a/arch/sandbox/include/asm/u-boot-sandbox.h b/arch/sandbox/include/asm/u-boot-sandbox.h index bed720cf8..5707c2710 100644 --- a/arch/sandbox/include/asm/u-boot-sandbox.h +++ b/arch/sandbox/include/asm/u-boot-sandbox.h @@ -23,4 +23,6 @@ int dram_init(void);  int sandbox_early_getopt_check(void);  int sandbox_main_loop_init(void); +int cleanup_before_linux(void); +  #endif	/* _U_BOOT_SANDBOX_H_ */ diff --git a/arch/sh/cpu/sh2/config.mk b/arch/sh/cpu/sh2/config.mk index 8a0de9671..69273b4f3 100644 --- a/arch/sh/cpu/sh2/config.mk +++ b/arch/sh/cpu/sh2/config.mk @@ -12,7 +12,7 @@ PLATFORM_CPPFLAGS += -m2a -m2a-nofpu -mb -ffreestanding  else # SH2  PLATFORM_CPPFLAGS += -m3e -mb  endif -PLATFORM_CPPFLAGS += $(call cc-option,-mno-fdpic) +PLATFORM_CPPFLAGS += -DCONFIG_SH2 $(call cc-option,-mno-fdpic)  PLATFORM_RELFLAGS += -ffixed-r13  PLATFORM_LDFLAGS += $(ENDIANNESS) diff --git a/arch/sh/cpu/sh2/cpu.c b/arch/sh/cpu/sh2/cpu.c index 18479a4c4..a2f856f45 100644 --- a/arch/sh/cpu/sh2/cpu.c +++ b/arch/sh/cpu/sh2/cpu.c @@ -23,11 +23,7 @@  int checkcpu(void)  { -#if defined(CONFIG_SH2A) -	puts("CPU: SH2A\n"); -#else  	puts("CPU: SH2\n"); -#endif  	return 0;  } diff --git a/arch/sh/cpu/sh3/config.mk b/arch/sh/cpu/sh3/config.mk index 5c77e5c32..abd4b8d2b 100644 --- a/arch/sh/cpu/sh3/config.mk +++ b/arch/sh/cpu/sh3/config.mk @@ -11,5 +11,5 @@  # SPDX-License-Identifier:	GPL-2.0+  #  # -PLATFORM_CPPFLAGS += -m3 +PLATFORM_CPPFLAGS += -DCONFIG_SH3 -m3  PLATFORM_RELFLAGS += -ffixed-r13 diff --git a/arch/sh/cpu/sh4/config.mk b/arch/sh/cpu/sh4/config.mk index c3575570e..753580beb 100644 --- a/arch/sh/cpu/sh4/config.mk +++ b/arch/sh/cpu/sh4/config.mk @@ -8,5 +8,5 @@  # SPDX-License-Identifier:	GPL-2.0+  #  # -PLATFORM_CPPFLAGS += -m4-nofpu +PLATFORM_CPPFLAGS += -DCONFIG_SH4 -m4-nofpu  PLATFORM_RELFLAGS += -ffixed-r13 diff --git a/arch/sh/cpu/sh4/cpu.c b/arch/sh/cpu/sh4/cpu.c index 91133a38a..e8ee0a45a 100644 --- a/arch/sh/cpu/sh4/cpu.c +++ b/arch/sh/cpu/sh4/cpu.c @@ -13,11 +13,7 @@  int checkcpu(void)  { -#ifdef CONFIG_SH4A -	puts("CPU: SH-4A\n"); -#else  	puts("CPU: SH4\n"); -#endif  	return 0;  } diff --git a/arch/sh/include/asm/cache.h b/arch/sh/include/asm/cache.h index b21dc4422..0698a3775 100644 --- a/arch/sh/include/asm/cache.h +++ b/arch/sh/include/asm/cache.h @@ -1,7 +1,7 @@  #ifndef __ASM_SH_CACHE_H  #define __ASM_SH_CACHE_H -#if defined(CONFIG_SH4) || defined(CONFIG_SH4A) +#if defined(CONFIG_SH4)  int cache_control(unsigned int cmd); @@ -18,7 +18,7 @@ struct __large_struct { unsigned long buf[100]; };   */  #define ARCH_DMA_MINALIGN	32 -#endif /* CONFIG_SH4 || CONFIG_SH4A */ +#endif /* CONFIG_SH4 */  /*   * Use the L1 data cache line size value for the minimum DMA buffer alignment diff --git a/arch/sh/include/asm/cpu_sh4.h b/arch/sh/include/asm/cpu_sh4.h index 9181d59a9..9f48e4fe0 100644 --- a/arch/sh/include/asm/cpu_sh4.h +++ b/arch/sh/include/asm/cpu_sh4.h @@ -37,6 +37,8 @@  # include <asm/cpu_sh7734.h>  #elif defined (CONFIG_CPU_SH7752)  # include <asm/cpu_sh7752.h> +#elif defined (CONFIG_CPU_SH7753) +# include <asm/cpu_sh7753.h>  #elif defined (CONFIG_CPU_SH7757)  # include <asm/cpu_sh7757.h>  #elif defined (CONFIG_CPU_SH7763) diff --git a/arch/sh/include/asm/cpu_sh7753.h b/arch/sh/include/asm/cpu_sh7753.h new file mode 100644 index 000000000..cd0e0bba6 --- /dev/null +++ b/arch/sh/include/asm/cpu_sh7753.h @@ -0,0 +1,197 @@ +/* + * Copyright (C) 2012  Renesas Solutions Corp. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef _ASM_CPU_SH7753_H_ +#define _ASM_CPU_SH7753_H_ + +#define CCR		0xFF00001C +#define WTCNT		0xFFCC0000 +#define CCR_CACHE_INIT	0x0000090b +#define CACHE_OC_NUM_WAYS	1 + +#ifndef __ASSEMBLY__		/* put C only stuff in this section */ +/* MMU */ +struct mmu_regs { +	unsigned int	reserved[4]; +	unsigned int	mmucr; +}; +#define MMU_BASE	((struct mmu_regs *)0xff000000) + +/* Watchdog */ +#define WTCSR0		0xffcc0002 +#define WRSTCSR_R	0xffcc0003 +#define WRSTCSR_W	0xffcc0002 +#define WTCSR_PREFIX		0xa500 +#define WRSTCSR_PREFIX		0x6900 +#define WRSTCSR_WOVF_PREFIX	0x9600 + +/* SCIF */ +#define SCIF0_BASE	0xfe4b0000	/* The real name is SCIF2 */ +#define SCIF1_BASE	0xfe4c0000	/* The real name is SCIF3 */ +#define SCIF2_BASE	0xfe4d0000	/* The real name is SCIF4 */ + +/* TMU0 */ +#define TMU_BASE	 0xFE430000 + +/* ETHER, GETHER MAC address */ +struct ether_mac_regs { +	unsigned int	reserved[114]; +	unsigned int	mahr; +	unsigned int	reserved2; +	unsigned int	malr; +}; +#define GETHER0_MAC_BASE	((struct ether_mac_regs *)0xfee0400) +#define GETHER1_MAC_BASE	((struct ether_mac_regs *)0xfee0c00) +#define ETHER0_MAC_BASE		((struct ether_mac_regs *)0xfef0000) +#define ETHER1_MAC_BASE		((struct ether_mac_regs *)0xfef0800) + +/* GETHER */ +struct gether_control_regs { +	unsigned int	gbecont; +}; +#define GETHER_CONTROL_BASE	((struct gether_control_regs *)0xffc10100) +#define GBECONT_RMII1		0x00020000 +#define GBECONT_RMII0		0x00010000 + +/* SerMux */ +struct sermux_regs { +	unsigned char	smr0; +	unsigned char	smr1; +	unsigned char	smr2; +	unsigned char	smr3; +	unsigned char	smr4; +	unsigned char	smr5; +}; +#define SERMUX_BASE	((struct sermux_regs *)0xfe470000) + + +/* USB0/1 */ +struct usb_common_regs { +	unsigned short	reserved[129]; +	unsigned short	suspmode; +}; +#define USB0_COMMON_BASE	((struct usb_common_regs *)0xfe450000) +#define USB1_COMMON_BASE	((struct usb_common_regs *)0xfe4f0000) + +struct usb0_phy_regs { +	unsigned short	reset; +	unsigned short	reserved[4]; +	unsigned short	portsel; +}; +#define USB0_PHY_BASE		((struct usb0_phy_regs *)0xfe5f0000) + +struct usb1_port_regs { +	unsigned int	port1sel; +	unsigned int	reserved; +	unsigned int	usb1intsts; +}; +#define USB1_PORT_BASE		((struct usb1_port_regs *)0xfe4f2000) + +struct usb1_alignment_regs { +	unsigned int	ehcidatac;	/* 0xfe4fe018 */ +	unsigned int	reserved[63]; +	unsigned int	ohcidatac; +}; +#define USB1_ALIGNMENT_BASE	((struct usb1_alignment_regs *)0xfe4fe018) + +/* GPIO */ +struct gpio_regs { +	unsigned short	pacr; +	unsigned short	pbcr; +	unsigned short	pccr; +	unsigned short	pdcr; +	unsigned short	pecr; +	unsigned short	pfcr; +	unsigned short	pgcr; +	unsigned short	phcr; +	unsigned short	picr; +	unsigned short	pjcr; +	unsigned short	pkcr; +	unsigned short	plcr; +	unsigned short	pmcr; +	unsigned short	pncr; +	unsigned short	pocr; +	unsigned short	reserved; +	unsigned short	pqcr; +	unsigned short	prcr; +	unsigned short	pscr; +	unsigned short	ptcr; +	unsigned short	pucr; +	unsigned short	pvcr; +	unsigned short	pwcr; +	unsigned short	pxcr; +	unsigned short	pycr; +	unsigned short	pzcr; +	unsigned char	padr; +	unsigned char	reserved_a; +	unsigned char	pbdr; +	unsigned char	reserved_b; +	unsigned char	pcdr; +	unsigned char	reserved_c; +	unsigned char	pddr; +	unsigned char	reserved_d; +	unsigned char	pedr; +	unsigned char	reserved_e; +	unsigned char	pfdr; +	unsigned char	reserved_f; +	unsigned char	pgdr; +	unsigned char	reserved_g; +	unsigned char	phdr; +	unsigned char	reserved_h; +	unsigned char	pidr; +	unsigned char	reserved_i; +	unsigned char	pjdr; +	unsigned char	reserved_j; +	unsigned char	pkdr; +	unsigned char	reserved_k; +	unsigned char	pldr; +	unsigned char	reserved_l; +	unsigned char	pmdr; +	unsigned char	reserved_m; +	unsigned char	pndr; +	unsigned char	reserved_n; +	unsigned char	podr; +	unsigned char	reserved_o; +	unsigned char	ppdr; +	unsigned char	reserved_p; +	unsigned char	pqdr; +	unsigned char	reserved_q; +	unsigned char	prdr; +	unsigned char	reserved_r; +	unsigned char	psdr; +	unsigned char	reserved_s; +	unsigned char	ptdr; +	unsigned char	reserved_t; +	unsigned char	pudr; +	unsigned char	reserved_u; +	unsigned char	pvdr; +	unsigned char	reserved_v; +	unsigned char	pwdr; +	unsigned char	reserved_w; +	unsigned char	pxdr; +	unsigned char	reserved_x; +	unsigned char	pydr; +	unsigned char	reserved_y; +	unsigned char	pzdr; +	unsigned char	reserved_z; +	unsigned short	ncer; +	unsigned short	ncmcr; +	unsigned short	nccsr; +	unsigned char	reserved2[2]; +	unsigned short	psel0;		/* +0x70 */ +	unsigned short	psel1; +	unsigned short	psel2; +	unsigned short	psel3; +	unsigned short	psel4; +	unsigned short	psel5; +	unsigned short	psel6; +	unsigned short	reserved3[2]; +	unsigned short	psel7; +}; +#define GPIO_BASE	((struct gpio_regs *)0xffec0000) + +#endif	/* ifndef __ASSEMBLY__ */ +#endif	/* _ASM_CPU_SH7753_H_ */ diff --git a/arch/sh/include/asm/processor.h b/arch/sh/include/asm/processor.h index 938a89cff..b8677da95 100644 --- a/arch/sh/include/asm/processor.h +++ b/arch/sh/include/asm/processor.h @@ -1,12 +1,10 @@  #ifndef _ASM_SH_PROCESSOR_H_  #define _ASM_SH_PROCESSOR_H_ -#if defined(CONFIG_SH2) || \ -	defined (CONFIG_SH2A) +#if defined(CONFIG_SH2)  # include <asm/cpu_sh2.h> -#elif defined (CONFIG_SH3) +#elif defined(CONFIG_SH3)  # include <asm/cpu_sh3.h> -#elif defined (CONFIG_SH4) || \ -	defined (CONFIG_SH4A) +#elif defined(CONFIG_SH4)  # include <asm/cpu_sh4.h>  #endif  #endif diff --git a/arch/sh/lib/time_sh2.c b/arch/sh/lib/time_sh2.c index be3896c3e..4b1f47b6a 100644 --- a/arch/sh/lib/time_sh2.c +++ b/arch/sh/lib/time_sh2.c @@ -84,5 +84,5 @@ void __udelay(unsigned long usec)  unsigned long get_tbclk(void)  { -	return CONFIG_SYS_HZ; +	return CONFIG_SH_CMT_CLK_FREQ;  } diff --git a/board/bf609-ezkit/bf609-ezkit.c b/board/bf609-ezkit/bf609-ezkit.c index 0388226db..cfc64fe51 100644 --- a/board/bf609-ezkit/bf609-ezkit.c +++ b/board/bf609-ezkit/bf609-ezkit.c @@ -10,6 +10,7 @@  #include <netdev.h>  #include <asm/blackfin.h>  #include <asm/io.h> +#include <asm/sdh.h>  #include <asm/portmux.h>  #include "soft_switch.h" diff --git a/board/freescale/b4860qds/b4_rcw.cfg b/board/freescale/b4860qds/b4_rcw.cfg index 577dabf1d..597d3914c 100644 --- a/board/freescale/b4860qds/b4_rcw.cfg +++ b/board/freescale/b4860qds/b4_rcw.cfg @@ -2,6 +2,6 @@  aa55aa55 010e0100  # serdes protocol 0x2A_0x98  140e0018 0f001218 00000000 00000000 -54980000 9000a000 f8025000 a9000000 +54980000 9000a000 e8104000 a9000000  01000000 00000000 00000000 0001b1f8  00000000 14000020 00000000 00000011 diff --git a/board/freescale/bsc9131rdb/tlb.c b/board/freescale/bsc9131rdb/tlb.c index 669fe8ad3..c8ecf5de5 100644 --- a/board/freescale/bsc9131rdb/tlb.c +++ b/board/freescale/bsc9131rdb/tlb.c @@ -30,7 +30,7 @@ struct fsl_e_tlb_entry tlb_table[] = {  	SET_TLB_ENTRY(1, 0xfffff000, 0xfffff000,  		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,  		      0, 0, BOOKE_PAGESZ_4K, 1), -#ifdef CONFIG_SPL_NAND_MINIMAL +#ifdef CONFIG_SPL_NAND_BOOT  	SET_TLB_ENTRY(1, 0xffffe000, 0xffffe000,  		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,  		      0, 10, BOOKE_PAGESZ_4K, 1), diff --git a/board/freescale/bsc9132qds/tlb.c b/board/freescale/bsc9132qds/tlb.c index 02655e9ba..07febc2b3 100644 --- a/board/freescale/bsc9132qds/tlb.c +++ b/board/freescale/bsc9132qds/tlb.c @@ -30,7 +30,7 @@ struct fsl_e_tlb_entry tlb_table[] = {  	SET_TLB_ENTRY(1, 0xfffff000, 0xfffff000,  		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,  		      0, 0, BOOKE_PAGESZ_4K, 1), -#ifdef CONFIG_SPL_NAND_MINIMAL +#ifdef CONFIG_SPL_NAND_BOOT  	SET_TLB_ENTRY(1, 0xffffe000, 0xffffe000,  		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,  		      0, 10, BOOKE_PAGESZ_4K, 1), diff --git a/board/freescale/common/p_corenet/Makefile b/board/freescale/common/p_corenet/Makefile index 889c4938c..1f399d249 100644 --- a/board/freescale/common/p_corenet/Makefile +++ b/board/freescale/common/p_corenet/Makefile @@ -5,8 +5,6 @@  # SPDX-License-Identifier:	GPL-2.0+  # -CPPFLAGS += -I$(TOPDIR) -  obj-y			+= law.o  obj-$(CONFIG_PCI)	+= pci.o  obj-y			+= tlb.o diff --git a/board/freescale/p1010rdb/tlb.c b/board/freescale/p1010rdb/tlb.c index a7af0f675..a3d36b35d 100644 --- a/board/freescale/p1010rdb/tlb.c +++ b/board/freescale/p1010rdb/tlb.c @@ -30,7 +30,7 @@ struct fsl_e_tlb_entry tlb_table[] = {  	SET_TLB_ENTRY(1, 0xfffff000, 0xfffff000,  		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,  		      0, 0, BOOKE_PAGESZ_4K, 1), -#ifdef CONFIG_SPL_NAND_MINIMAL +#ifdef CONFIG_SPL_NAND_BOOT  	SET_TLB_ENTRY(1, 0xffffe000, 0xffffe000,  		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,  		      0, 10, BOOKE_PAGESZ_4K, 1), diff --git a/board/freescale/p1_p2_rdb_pc/p1_p2_rdb_pc.c b/board/freescale/p1_p2_rdb_pc/p1_p2_rdb_pc.c index 966abb24a..5f3d6fd28 100644 --- a/board/freescale/p1_p2_rdb_pc/p1_p2_rdb_pc.c +++ b/board/freescale/p1_p2_rdb_pc/p1_p2_rdb_pc.c @@ -1,5 +1,5 @@  /* - * Copyright 2010-2011 Freescale Semiconductor, Inc. + * Copyright 2010-2011, 2013 Freescale Semiconductor, Inc.   *   * SPDX-License-Identifier:	GPL-2.0+   */ @@ -354,7 +354,7 @@ int board_eth_init(bd_t *bis)  		puts("No address specified for VSC7385 microcode.\n");  #endif -	mdio_info.regs = (struct tsec_mii_mng *)CONFIG_SYS_MDIO_BASE_ADDR; +	mdio_info.regs = TSEC_GET_MDIO_REGS_BASE(1);  	mdio_info.name = DEFAULT_MII_NAME;  	fsl_pq_mdio_init(bis, &mdio_info); diff --git a/board/freescale/t1040qds/t1040_pbi.cfg b/board/freescale/t1040qds/t1040_pbi.cfg index 624398a25..10b1a6d17 100644 --- a/board/freescale/t1040qds/t1040_pbi.cfg +++ b/board/freescale/t1040qds/t1040_pbi.cfg @@ -3,7 +3,7 @@  09010000 00200400  09138000 00000000  091380c0 00000100 -#Configure CPC1 as 512KB SRAM +#Configure CPC1 as 256KB SRAM  09010100 00000000  09010104 fffc0007  09010f00 08000000 diff --git a/board/freescale/t1040qds/t1040qds.c b/board/freescale/t1040qds/t1040qds.c index 2aa176c7a..de3ea5c2a 100644 --- a/board/freescale/t1040qds/t1040qds.c +++ b/board/freescale/t1040qds/t1040qds.c @@ -239,3 +239,8 @@ void qixis_dump_switch(void)  		printf("SW%d = (0x%02x)\n", i, QIXIS_READ(cms[1]));  	}  } + +int board_need_mem_reset(void) +{ +	return 1; +} diff --git a/board/linkstation/Makefile b/board/linkstation/Makefile deleted file mode 100644 index 3eeba7dca..000000000 --- a/board/linkstation/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -# -# (C) Copyright 2001 -# Wolfgang Denk, DENX Software Engineering, wd@denx.de. -# -# SPDX-License-Identifier:	GPL-2.0+ -# - -obj-y	= linkstation.o ide.o hwctl.o avr.o diff --git a/board/linkstation/avr.c b/board/linkstation/avr.c deleted file mode 100644 index 62e586ba0..000000000 --- a/board/linkstation/avr.c +++ /dev/null @@ -1,280 +0,0 @@ -/* - * avr.c - * - * AVR functions - * - * Copyright (C) 2006 Mihai Georgian <u-boot@linuxnotincluded.org.uk> - * - * SPDX-License-Identifier:	GPL-2.0+ - */ -#include <common.h> -#include <ns16550.h> -#include <stdio_dev.h> - -/* Button codes from the AVR */ -#define PWRR			0x20		/* Power button release	*/ -#define PWRP			0x21		/* Power button push	*/ -#define RESR			0x22		/* Reset button release	*/ -#define RESP			0x23		/* Reset button push	*/ -#define AVRINIT			0x33		/* Init complete	*/ -#define AVRRESET		0x31		/* Reset request	*/ - -/* LED commands */ -#define PWRBLINKSTRT		'['		/* Blink power LED	*/ -#define PWRBLINKSTOP		'Z'		/* Solid power LED	*/ -#define HDDLEDON		'W'		/* HDD LED on		*/ -#define HDDLEDOFF		'V'		/* HDD LED off		*/ -#define HDDBLINKSTRT		'Y'		/* HDD LED start blink	*/ -#define HDDBLINKSTOP		'X'		/* HDD LED stop blink	*/ - -/* Timings for LEDs blinking to show choice */ -#define PULSETIME		250		/* msecs		*/ -#define LONGPAUSE		(5 * PULSETIME) - -/* Button press times */ -#define PUSHHOLD		1000		/* msecs		*/ -#define NOBUTTON		(6 * (LONGPAUSE+PULSETIME)) - -/* Boot and console choices */ -#define MAX_BOOT_CHOICE		3 - -static char *consoles[] = { -	"serial", -#if defined(CONFIG_NETCONSOLE) -	"nc", -#endif -}; -#define MAX_CONS_CHOICE		(sizeof(consoles)/sizeof(char *)) - -#if !defined(CONFIG_NETCONSOLE) -#define DEF_CONS_CHOICE		0 -#else -#define DEF_CONS_CHOICE		1 -#endif - -#define perror(fmt, args...) printf("%s: " fmt, __FUNCTION__ , ##args) - -extern void miconCntl_SendCmd(unsigned char dat); -extern void miconCntl_DisWDT(void); - -static int boot_stop; - -static int boot_choice = 1; -static int cons_choice = DEF_CONS_CHOICE; - -static char envbuffer[16]; - -void init_AVR_DUART (void) -{ -	NS16550_t AVR_port = (NS16550_t) CONFIG_SYS_NS16550_COM2; -	int clock_divisor = CONFIG_SYS_NS16550_CLK / 16 / 9600; - -	/* -	 * AVR port init sequence taken from -	 * the original Linkstation init code -	 * Normal U-Boot serial reinit doesn't -	 * work because the AVR uses even parity -	 */ -	AVR_port->lcr = 0x00; -	AVR_port->ier = 0x00; -	AVR_port->lcr = UART_LCR_BKSE; -	AVR_port->dll = clock_divisor & 0xff; -	AVR_port->dlm = (clock_divisor >> 8) & 0xff; -	AVR_port->lcr = UART_LCR_WLS_8 | UART_LCR_PEN | UART_LCR_EPS; -	AVR_port->mcr = 0x00; -	AVR_port->fcr = UART_FCR_FIFO_EN | UART_FCR_RXSR | UART_FCR_TXSR; - -	miconCntl_DisWDT(); - -	boot_stop = 0; -	miconCntl_SendCmd(PWRBLINKSTRT); -} - -static inline int avr_tstc(void) -{ -	return (NS16550_tstc((NS16550_t)CONFIG_SYS_NS16550_COM2)); -} - -static inline char avr_getc(void) -{ -	return (NS16550_getc((NS16550_t)CONFIG_SYS_NS16550_COM2)); -} - -static int push_timeout(char button_code) -{ -	ulong push_start = get_timer(0); -	while (get_timer(push_start) <= PUSHHOLD) -		if (avr_tstc() && avr_getc() == button_code) -			return 0; -	return 1; -} - -static void next_boot_choice(void) -{ -	ulong return_start; -	ulong pulse_start; -	int on_times; -	int button_on; -	int led_state; -	char c; - -	button_on = 0; -	return_start = get_timer(0); - -	on_times = boot_choice; -	led_state = 0; -	miconCntl_SendCmd(HDDLEDOFF); -	pulse_start = get_timer(0); - -	while (get_timer(return_start) <= NOBUTTON || button_on) { -		if (avr_tstc()) { -			c = avr_getc(); -			if (c == PWRP) -				button_on = 1; -			else if (c == PWRR) { -				button_on = 0; -				return_start = get_timer(0); -				if (++boot_choice > MAX_BOOT_CHOICE) -					boot_choice = 1; -				sprintf(envbuffer, "bootcmd%d", boot_choice); -				if (getenv(envbuffer)) { -					sprintf(envbuffer, "run bootcmd%d", boot_choice); -					setenv("bootcmd", envbuffer); -				} -				on_times = boot_choice; -				led_state = 1; -				miconCntl_SendCmd(HDDLEDON); -				pulse_start = get_timer(0); -			} else { -				perror("Unexpected code: 0x%02X\n", c); -			} -		} -		if (on_times && get_timer(pulse_start) > PULSETIME) { -			if (led_state == 1) { -				--on_times; -				led_state = 0; -				miconCntl_SendCmd(HDDLEDOFF); -			} else { -				led_state = 1; -				miconCntl_SendCmd(HDDLEDON); -			} -			pulse_start = get_timer(0); -		} -		if (!on_times && get_timer(pulse_start) > LONGPAUSE) { -			on_times = boot_choice; -			led_state = 1; -			miconCntl_SendCmd(HDDLEDON); -			pulse_start = get_timer(0); -		} -	} -	if (led_state) -		miconCntl_SendCmd(HDDLEDOFF); -} - -void next_cons_choice(int console) -{ -	ulong return_start; -	ulong pulse_start; -	int on_times; -	int button_on; -	int led_state; -	char c; - -	button_on = 0; -	cons_choice = console; -	return_start = get_timer(0); - -	on_times = cons_choice+1; -	led_state = 1; -	miconCntl_SendCmd(HDDLEDON); -	pulse_start = get_timer(0); - -	while (get_timer(return_start) <= NOBUTTON || button_on) { -		if (avr_tstc()) { -			c = avr_getc(); -			if (c == RESP) -				button_on = 1; -			else if (c == RESR) { -				button_on = 0; -				return_start = get_timer(0); -				cons_choice = (cons_choice + 1) % MAX_CONS_CHOICE; -				console_assign(stdin, consoles[cons_choice]); -				console_assign(stdout, consoles[cons_choice]); -				console_assign(stderr, consoles[cons_choice]); -				on_times = cons_choice+1; -				led_state = 0; -				miconCntl_SendCmd(HDDLEDOFF); -				pulse_start = get_timer(0); -			} else { -				perror("Unexpected code: 0x%02X\n", c); -			} -		} -		if (on_times && get_timer(pulse_start) > PULSETIME) { -			if (led_state == 0) { -				--on_times; -				led_state = 1; -				miconCntl_SendCmd(HDDLEDON); -			} else { -				led_state = 0; -				miconCntl_SendCmd(HDDLEDOFF); -			} -			pulse_start = get_timer(0); -		} -		if (!on_times && get_timer(pulse_start) > LONGPAUSE) { -			on_times = cons_choice+1; -			led_state = 0; -			miconCntl_SendCmd(HDDLEDOFF); -			pulse_start = get_timer(0); -		} -	} -	if (led_state); -	miconCntl_SendCmd(HDDLEDOFF); -} - -int avr_input(void) -{ -	char avr_button; - -	if (!avr_tstc()) -		return 0; - -	avr_button = avr_getc(); -	switch (avr_button) { -	case PWRP: -		if (push_timeout(PWRR)) { -			/* Timeout before power button release */ -			boot_stop = ~boot_stop; -			if (boot_stop) -				miconCntl_SendCmd(PWRBLINKSTOP); -			else -				miconCntl_SendCmd(PWRBLINKSTRT); -			/* Wait for power button release */ -			while (avr_getc() != PWRR) -				; -		} else -			/* Power button released */ -			next_boot_choice(); -		break; -	case RESP: -		/* Wait for Reset button release */ -		while (avr_getc() != RESR) -			; -		next_cons_choice(cons_choice); -		break; -	case AVRINIT: -		return 0; -	default: -		perror("Unexpected code: 0x%02X\n", avr_button); -		return 0; -	} -	if (boot_stop) -		return (-3); -	else -		return (-2); -} - -void avr_StopBoot(void) -{ -	boot_stop = ~0; -	miconCntl_SendCmd(PWRBLINKSTOP); -} diff --git a/board/linkstation/hwctl.c b/board/linkstation/hwctl.c deleted file mode 100644 index d2090be1a..000000000 --- a/board/linkstation/hwctl.c +++ /dev/null @@ -1,133 +0,0 @@ -/* - * hwctl.c - * - * LinkStation HW Control Driver - * - * Copyright (C) 2001-2004  BUFFALO INC. - * - * This software may be used and distributed according to the terms of - * the GNU General Public License (GPL), incorporated herein by reference. - * Drivers based on or derived from this code fall under the GPL and must - * retain the authorship, copyright and license notice.  This file is not - * a complete program and may only be used when the entire operating - * system is licensed under the GPL. - * - */ - -#include <config.h> -#include <common.h> -#include <command.h> -#include <asm/io.h> - -#define AVR_PORT CONFIG_SYS_NS16550_COM2 - -/* 2005.5.10 BUFFALO add */ -/*--------------------------------------------------------------*/ -static inline void miconCntl_SendUart(unsigned char dat) -{ -	out_8((unsigned char *)AVR_PORT, dat); -	mdelay(1); -} - -/*--------------------------------------------------------------*/ -void miconCntl_SendCmd(unsigned char dat) -{ -	int i; - -	for (i=0; i<4; i++){ -		miconCntl_SendUart(dat); -	} -} - -/*--------------------------------------------------------------*/ -void miconCntl_FanLow(void) -{ -#ifdef CONFIG_HTGL -	miconCntl_SendCmd(0x5C); -#endif -} - -/*--------------------------------------------------------------*/ -void miconCntl_FanHigh(void) -{ -#ifdef CONFIG_HTGL -	miconCntl_SendCmd(0x5D); -#endif -} - -/*--------------------------------------------------------------*/ -/* 1000Mbps */ -void miconCntl_Eth1000M(int up) -{ -#ifdef CONFIG_HTGL -	if (up) -		miconCntl_SendCmd(0x93); -	else -		miconCntl_SendCmd(0x92); -#else -	if (up) -		miconCntl_SendCmd(0x5D); -	else -		miconCntl_SendCmd(0x5C); -#endif -} - -/*--------------------------------------------------------------*/ -/* 100Mbps */ -void miconCntl_Eth100M(int up) -{ -#ifdef CONFIG_HTGL -	if (up) -		miconCntl_SendCmd(0x91); -	else -		miconCntl_SendCmd(0x90); -#else -	if (up) -		miconCntl_SendCmd(0x5C); -#endif -} - -/*--------------------------------------------------------------*/ -/* 10Mbps */ -void miconCntl_Eth10M(int up) -{ -#ifdef CONFIG_HTGL -	if (up) -		miconCntl_SendCmd(0x8F); -	else -		miconCntl_SendCmd(0x8E); -#else -	if (up) -		miconCntl_SendCmd(0x5C); -#endif -} - -/*--------------------------------------------------------------*/ -/*  */ -void miconCntl_5f(void) -{ -	miconCntl_SendCmd(0x5F); -	mdelay(100); -} - -/*--------------------------------------------------------------*/ -/* "reboot start" signal */ -void miconCntl_Reboot(void) -{ -	miconCntl_SendCmd(0x43); -} - -/*--------------------------------------------------------------*/ -/* Disable watchdog timer */ -void miconCntl_DisWDT(void) -{ -	miconCntl_SendCmd(0x41); /* A */ -	miconCntl_SendCmd(0x46); /* F */ -	miconCntl_SendCmd(0x4A); /* J */ -	miconCntl_SendCmd(0x3E); /* > */ -	miconCntl_SendCmd(0x56); /* V */ -	miconCntl_SendCmd(0x3E); /* > */ -	miconCntl_SendCmd(0x5A); /* Z */ -	miconCntl_SendCmd(0x56); /* V */ -	miconCntl_SendCmd(0x4B); /* K */ -} diff --git a/board/linkstation/ide.c b/board/linkstation/ide.c deleted file mode 100644 index 7b3fe65cf..000000000 --- a/board/linkstation/ide.c +++ /dev/null @@ -1,85 +0,0 @@ -/* - * (C) Copyright 2000 - * Wolfgang Denk, DENX Software Engineering, wd@denx.de. - * - * SPDX-License-Identifier:	GPL-2.0+ - */ -/* ide.c - ide support functions */ - - -#include <common.h> - -#ifdef CONFIG_CMD_IDE -#include <ata.h> -#include <ide.h> -#include <pci.h> - -#define IT8212_PCI_CpuCONTROL		0x5e -#define IT8212_PCI_PciModeCONTROL	0x50 -#define IT8212_PCI_IdeIoCONFIG		0x40 -#define IT8212_PCI_IdeBusSkewCONTROL	0x4c -#define IT8212_PCI_IdeDrivingCURRENT	0x42 - -extern struct pci_controller hose; - -int ide_preinit (void) -{ -	int status; -	pci_dev_t devbusfn; -	int l; - -	status = 1; -	for (l = 0; l < CONFIG_SYS_IDE_MAXBUS; l++) { -		ide_bus_offset[l] = -ATA_STATUS; -	} -	devbusfn = pci_find_device(PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_SII_680, 0); -	if (devbusfn == -1) -		devbusfn = pci_find_device(PCI_VENDOR_ID_ITE,PCI_DEVICE_ID_ITE_8212,0); -	if (devbusfn != -1) { -		u32 ide_bus_offset32; - -		status = 0; - -		pci_read_config_dword (devbusfn, PCI_BASE_ADDRESS_0, -							   &ide_bus_offset32); -		ide_bus_offset[0] = ide_bus_offset32 & 0xfffffffe; -		ide_bus_offset[0] = pci_hose_bus_to_phys(&hose, -						ide_bus_offset[0] & 0xfffffffe, -						PCI_REGION_IO); -		if (CONFIG_SYS_IDE_MAXBUS > 1) { -			pci_read_config_dword(devbusfn, PCI_BASE_ADDRESS_2, -					      (u32 *) &ide_bus_offset[1]); -			ide_bus_offset[1] &= 0xfffffffe; -			ide_bus_offset[1] = pci_hose_bus_to_phys(&hose, -						ide_bus_offset[1] & 0xfffffffe, -						PCI_REGION_IO); -		} -	} - -	if (pci_find_device (PCI_VENDOR_ID_ITE, PCI_DEVICE_ID_ITE_8212, 0) != -1) { -		pci_write_config_byte(devbusfn, IT8212_PCI_CpuCONTROL, 0x01); -		pci_write_config_byte(devbusfn, IT8212_PCI_PciModeCONTROL, 0x00); -		pci_write_config_word(devbusfn, PCI_COMMAND, 0x0047); -#ifdef CONFIG_IT8212_SECONDARY_ENABLE -		pci_write_config_word(devbusfn, IT8212_PCI_IdeIoCONFIG, 0xA0F3); -#else -		pci_write_config_word(devbusfn, IT8212_PCI_IdeIoCONFIG, 0x8031); -#endif -		pci_write_config_dword(devbusfn, IT8212_PCI_IdeBusSkewCONTROL, 0x02040204); -/* __LS_COMMENT__ BUFFALO changed 2004.11.10  changed for EMI */ -		pci_write_config_byte(devbusfn, IT8212_PCI_IdeDrivingCURRENT, 0x36); /* 10mA */ -/*		pci_write_config_byte(dev, IT8212_PCI_IdeDrivingCURRENT, 0x09); */ /* 4mA */ -/*		pci_write_config_byte(dev, IT8212_PCI_IdeDrivingCURRENT, 0x12); */ /* 6mA */ -/*		pci_write_config_byte(dev, IT8212_PCI_IdeDrivingCURRENT, 0x24); */ /* 6mA,2mA */ -/*		pci_write_config_byte(dev, IT8212_PCI_IdeDrivingCURRENT, 0x2D); */ /* 8mA,4mA */ -		pci_write_config_byte(devbusfn, PCI_LATENCY_TIMER, 0x00); -	} - -	return (status); -} - -void ide_set_reset (int flag) { -	return; -} - -#endif /* CONFIG_CMD_IDE */ diff --git a/board/linkstation/linkstation.c b/board/linkstation/linkstation.c deleted file mode 100644 index 75cda8681..000000000 --- a/board/linkstation/linkstation.c +++ /dev/null @@ -1,124 +0,0 @@ -/* - * linkstation.c - * - * Misc LinkStation specific functions - * - * Copyright (C) 2006 Mihai Georgian <u-boot@linuxnotincluded.org.uk> - * - * SPDX-License-Identifier:	GPL-2.0+ - */ - -#include <common.h> -#include <version.h> -#include <mpc824x.h> -#include <asm/io.h> -#include <ns16550.h> -#include <netdev.h> - -#ifdef CONFIG_PCI -#include <pci.h> -#endif - -DECLARE_GLOBAL_DATA_PTR; - -extern void init_AVR_DUART(void); - -int checkboard (void) -{ -	char *p; -	bd_t *bd = gd->bd; - -	init_AVR_DUART(); - -	if ((p = getenv ("console_nr")) != NULL) { -		unsigned long con_nr = simple_strtoul (p, NULL, 10) & 3; - -		bd->bi_baudrate &= ~3; -		bd->bi_baudrate |= con_nr & 3; -	} -	return 0; -} - -phys_size_t initdram (int board_type) -{ -	return (get_ram_size(CONFIG_SYS_SDRAM_BASE, CONFIG_SYS_MAX_RAM_SIZE)); -} - -/* - * Initialize PCI Devices - */ -#ifdef CONFIG_PCI - -#ifndef CONFIG_PCI_PNP - -static struct pci_config_table pci_linkstation_config_table[] = { -	/* vendor, device, class */ -	/* bus, dev, func */ -	{ PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, -	  PCI_ANY_ID, 0x0b, 0,		/* AN983B or RTL8110S  */ -								/* ethernet controller */ -	  pci_cfgfunc_config_device, { PCI_ETH_IOADDR, -				       PCI_ETH_MEMADDR, -				       PCI_COMMAND_IO | -				       PCI_COMMAND_MEMORY | -				       PCI_COMMAND_MASTER }}, -	{ PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, -	  PCI_ANY_ID, 0x0c, 0,		/* SII680 or IT8211AF */ -								/* ide controller     */ -	  pci_cfgfunc_config_device, { PCI_IDE_IOADDR, -				       PCI_IDE_MEMADDR, -				       PCI_COMMAND_IO | -				       PCI_COMMAND_MEMORY | -				       PCI_COMMAND_MASTER }}, -	{ PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, -	  PCI_ANY_ID, 0x0e, 0,		/* D720101 USB controller, 1st USB 1.1 */ -	  pci_cfgfunc_config_device, { PCI_USB0_IOADDR, -				       PCI_USB0_MEMADDR, -				       PCI_COMMAND_MEMORY | -				       PCI_COMMAND_MASTER }}, -	{ PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, -	  PCI_ANY_ID, 0x0e, 1,		/* D720101 USB controller, 2nd USB 1.1 */ -	  pci_cfgfunc_config_device, { PCI_USB1_IOADDR, -				       PCI_USB1_MEMADDR, -				       PCI_COMMAND_MEMORY | -				       PCI_COMMAND_MASTER }}, -	{ PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, -	  PCI_ANY_ID, 0x0e, 2,		/* D720101 USB controller, USB 2.0 */ -	  pci_cfgfunc_config_device, { PCI_USB2_IOADDR, -				       PCI_USB2_MEMADDR, -				       PCI_COMMAND_MEMORY | -				       PCI_COMMAND_MASTER }}, -	{ } -}; -#endif - -struct pci_controller hose = { -#ifndef CONFIG_PCI_PNP -	config_table:pci_linkstation_config_table, -#endif -}; - -void pci_init_board (void) -{ -	pci_mpc824x_init (&hose); - -	/* Reset USB 1.1 */ -	/* Haven't seen any change without these on a HG, maybe it is -	 * needed on other models */ -	out_le32((volatile unsigned*)(PCI_USB0_MEMADDR + 8), 1); -	out_le32((volatile unsigned*)(PCI_USB1_MEMADDR + 8), 1); -} -#endif /* CONFIG_PCI */ - -#define UART_DCR       0x80004511 -int board_early_init_f (void) -{ -	/* set DUART mode */ -	out_8((volatile u8*)UART_DCR, 1); -	return 0; -} - -int board_eth_init(bd_t *bis) -{ -	return pci_eth_init(bis); -} diff --git a/board/renesas/sh7753evb/Makefile b/board/renesas/sh7753evb/Makefile new file mode 100644 index 000000000..f7c8e949f --- /dev/null +++ b/board/renesas/sh7753evb/Makefile @@ -0,0 +1,7 @@ +# +# Copyright (C) 2012  Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> +# +# SPDX-License-Identifier:	GPL-2.0+ + +obj-y	:= sh7753evb.o spi-boot.o +obj-y	+= lowlevel_init.o diff --git a/board/renesas/sh7753evb/lowlevel_init.S b/board/renesas/sh7753evb/lowlevel_init.S new file mode 100644 index 000000000..21987a51e --- /dev/null +++ b/board/renesas/sh7753evb/lowlevel_init.S @@ -0,0 +1,416 @@ +/* + * Copyright (C) 2013  Renesas Solutions Corp. + * + * SPDX-License-Identifier:    GPL-2.0+ + */ + +#include <config.h> +#include <version.h> +#include <asm/processor.h> +#include <asm/macro.h> + +.macro	or32, addr, data +	mov.l \addr, r1 +	mov.l \data, r0 +	mov.l @r1, r2 +	or    r2, r0 +	mov.l r0, @r1 +.endm + +.macro	wait_DBCMD +	mov.l	DBWAIT_A, r0 +	mov.l	@r0, r1 +.endm + +	.global lowlevel_init +	.section	.spiboot1.text +	.align  2 + +lowlevel_init: +	mov	#0, r14 +	mova	2f, r0 +	mov.l	PC_MASK, r1 +	tst	r0, r1 +	bf	2f + +	bra	exit_pmb +	nop + +	.align	2 + +/* If CPU runs on SDRAM (PC=0x5???????) or not. */ +PC_MASK:	.long	0x20000000 + +2: +	mov	#1, r14 + +	mov.l	EXPEVT_A, r0 +	mov.l	@r0, r0 +	mov.l	EXPEVT_POWER_ON_RESET, r1 +	cmp/eq	r0, r1 +	bt	1f + +	/* +	 * If EXPEVT value is manual reset or tlb multipul-hit, +	 * initialization of DBSC3 is not necessary. +	 */ +	bra	exit_ddr +	nop + +1: +	/*------- Reset -------*/ +	write32 MRSTCR0_A, MRSTCR0_D +	write32 MRSTCR1_A, MRSTCR1_D + +	/* For Core Reset */ +	mov.l	DBACEN_A, r0 +	mov.l	@r0, r0 +	cmp/eq	#0, r0 +	bt	3f + +	/* +	 * If DBACEN == 1(DBSC was already enabled), we have to avoid the +	 * initialization of DDR3-SDRAM. +	 */ +	bra	exit_ddr +	nop + +3: +	/*------- DBSC3 -------*/ +	/* oscillation stabilization time */ +	wait_timer	WAIT_OSC_TIME + +	/* step 3 */ +	write32 DBKIND_A, DBKIND_D + +	/* step 4 */ +	write32 DBCONF_A, DBCONF_D +	write32 DBTR0_A, DBTR0_D +	write32 DBTR1_A, DBTR1_D +	write32 DBTR2_A, DBTR2_D +	write32 DBTR3_A, DBTR3_D +	write32 DBTR4_A, DBTR4_D +	write32 DBTR5_A, DBTR5_D +	write32 DBTR6_A, DBTR6_D +	write32 DBTR7_A, DBTR7_D +	write32 DBTR8_A, DBTR8_D +	write32 DBTR9_A, DBTR9_D +	write32 DBTR10_A, DBTR10_D +	write32 DBTR11_A, DBTR11_D +	write32 DBTR12_A, DBTR12_D +	write32 DBTR13_A, DBTR13_D +	write32 DBTR14_A, DBTR14_D +	write32 DBTR15_A, DBTR15_D +	write32 DBTR16_A, DBTR16_D +	write32 DBTR17_A, DBTR17_D +	write32 DBTR18_A, DBTR18_D +	write32 DBTR19_A, DBTR19_D +	write32 DBRNK0_A, DBRNK0_D +	write32 DBADJ0_A, DBADJ0_D +	write32 DBADJ2_A, DBADJ2_D + +	/* step 5 */ +	write32 DBCMD_A, DBCMD_RSTL_VAL +	wait_timer	WAIT_30US + +	/* step 6 */ +	write32 DBCMD_A, DBCMD_PDEN_VAL + +	/* step 7 */ +	write32 DBPDCNT3_A, DBPDCNT3_D + +	/* step 8 */ +	write32 DBPDCNT1_A, DBPDCNT1_D +	write32 DBPDCNT2_A, DBPDCNT2_D +	write32 DBPDLCK_A, DBPDLCK_D +	write32 DBPDRGA_A, DBPDRGA_D +	write32 DBPDRGD_A, DBPDRGD_D + +	/* step 9 */ +	wait_timer	WAIT_30US + +	/* step 10 */ +	write32 DBPDCNT0_A, DBPDCNT0_D + +	/* step 11 */ +	wait_timer	WAIT_30US +	wait_timer	WAIT_30US + +	/* step 12 */ +	write32 DBCMD_A, DBCMD_WAIT_VAL +	wait_DBCMD + +	/* step 13 */ +	write32 DBCMD_A, DBCMD_RSTH_VAL +	wait_DBCMD + +	/* step 14 */ +	write32 DBCMD_A, DBCMD_WAIT_VAL +	write32 DBCMD_A, DBCMD_WAIT_VAL +	write32 DBCMD_A, DBCMD_WAIT_VAL +	write32 DBCMD_A, DBCMD_WAIT_VAL + +	/* step 15 */ +	write32 DBCMD_A, DBCMD_PDXT_VAL + +	/* step 16 */ +	write32 DBCMD_A, DBCMD_MRS2_VAL + +	/* step 17 */ +	write32 DBCMD_A, DBCMD_MRS3_VAL + +	/* step 18 */ +	write32 DBCMD_A, DBCMD_MRS1_VAL + +	/* step 19 */ +	write32 DBCMD_A, DBCMD_MRS0_VAL +	write32 DBPDNCNF_A, DBPDNCNF_D + +	/* step 20 */ +	write32 DBCMD_A, DBCMD_ZQCL_VAL + +	write32 DBCMD_A, DBCMD_REF_VAL +	write32 DBCMD_A, DBCMD_REF_VAL +	wait_DBCMD + +	/* step 21 */ +	write32	DBCALTR_A, DBCALTR_D + +	/* step 22 */ +	write32 DBRFCNF0_A, DBRFCNF0_D +	write32 DBRFCNF1_A, DBRFCNF1_D +	write32 DBRFCNF2_A, DBRFCNF2_D + +	/* step 23 */ +	write32 DBCALCNF_A, DBCALCNF_D + +	/* step 24 */ +	write32 DBRFEN_A, DBRFEN_D +	write32 DBCMD_A, DBCMD_SRXT_VAL + +	/* step 25 */ +	write32 DBACEN_A, DBACEN_D + +	/* step 26 */ +	wait_DBCMD + +	bra	exit_ddr +	nop + +	.align 2 + +EXPEVT_A:		.long	0xff000024 +EXPEVT_POWER_ON_RESET:	.long	0x00000000 + +/*------- Reset -------*/ +MRSTCR0_A:	.long	0xffd50030 +MRSTCR0_D:	.long	0xfe1ffe7f +MRSTCR1_A:	.long	0xffd50034 +MRSTCR1_D:	.long	0xfff3ffff + +/*------- DBSC3 -------*/ +DBCMD_A:	.long	0xfe800018 +DBKIND_A:	.long	0xfe800020 +DBCONF_A:	.long	0xfe800024 +DBTR0_A:	.long	0xfe800040 +DBTR1_A:	.long	0xfe800044 +DBTR2_A:	.long	0xfe800048 +DBTR3_A:	.long	0xfe800050 +DBTR4_A:	.long	0xfe800054 +DBTR5_A:	.long	0xfe800058 +DBTR6_A:	.long	0xfe80005c +DBTR7_A:	.long	0xfe800060 +DBTR8_A:	.long	0xfe800064 +DBTR9_A:	.long	0xfe800068 +DBTR10_A:	.long	0xfe80006c +DBTR11_A:	.long	0xfe800070 +DBTR12_A:	.long	0xfe800074 +DBTR13_A:	.long	0xfe800078 +DBTR14_A:	.long	0xfe80007c +DBTR15_A:	.long	0xfe800080 +DBTR16_A:	.long	0xfe800084 +DBTR17_A:	.long	0xfe800088 +DBTR18_A:	.long	0xfe80008c +DBTR19_A:	.long	0xfe800090 +DBRNK0_A:	.long	0xfe800100 +DBPDCNT0_A:	.long	0xfe800200 +DBPDCNT1_A:	.long	0xfe800204 +DBPDCNT2_A:	.long	0xfe800208 +DBPDCNT3_A:	.long	0xfe80020c +DBPDLCK_A:	.long	0xfe800280 +DBPDRGA_A:	.long	0xfe800290 +DBPDRGD_A:	.long	0xfe8002a0 +DBADJ0_A:	.long	0xfe8000c0 +DBADJ2_A:	.long	0xfe8000c8 +DBRFCNF0_A:	.long	0xfe8000e0 +DBRFCNF1_A:	.long	0xfe8000e4 +DBRFCNF2_A:	.long	0xfe8000e8 +DBCALCNF_A:	.long	0xfe8000f4 +DBRFEN_A:	.long	0xfe800014 +DBACEN_A:	.long	0xfe800010 +DBWAIT_A:	.long	0xfe80001c +DBCALTR_A:	.long	0xfe8000f8 +DBPDNCNF_A:	.long	0xfe800180 + +WAIT_OSC_TIME:	.long	6000 +WAIT_30US:	.long	13333 + +DBCMD_RSTL_VAL:	.long	0x20000000 +DBCMD_PDEN_VAL:	.long	0x1000d73c +DBCMD_WAIT_VAL:	.long	0x0000d73c +DBCMD_RSTH_VAL:	.long	0x2100d73c +DBCMD_PDXT_VAL:	.long	0x110000c8 +DBCMD_MRS0_VAL:	.long	0x28000930 +DBCMD_MRS1_VAL:	.long	0x29000004 +DBCMD_MRS2_VAL:	.long	0x2a000008 +DBCMD_MRS3_VAL:	.long	0x2b000000 +DBCMD_ZQCL_VAL:	.long	0x03000200 +DBCMD_REF_VAL:	.long	0x0c000000 +DBCMD_SRXT_VAL:	.long	0x19000000 +DBKIND_D:	.long	0x00000007 +DBCONF_D:	.long	0x0f030a01 +DBTR0_D:	.long	0x00000007 +DBTR1_D:	.long	0x00000006 +DBTR2_D:	.long	0x00000000 +DBTR3_D:	.long	0x00000007 +DBTR4_D:	.long	0x00070007 +DBTR5_D:	.long	0x0000001b +DBTR6_D:	.long	0x00000014 +DBTR7_D:	.long	0x00000004 +DBTR8_D:	.long	0x00000014 +DBTR9_D:	.long	0x00000004 +DBTR10_D:	.long	0x00000008 +DBTR11_D:	.long	0x00000007 +DBTR12_D:	.long	0x0000000e +DBTR13_D:	.long	0x000000a0 +DBTR14_D:	.long	0x00060006 +DBTR15_D:	.long	0x00000003 +DBTR16_D:	.long	0x00160002 +DBTR17_D:	.long	0x000c0000 +DBTR18_D:	.long	0x00000200 +DBTR19_D:	.long	0x00000040 +DBRNK0_D:	.long	0x00000001 +DBPDCNT0_D:	.long	0x00000001 +DBPDCNT1_D:	.long	0x00000001 +DBPDCNT2_D:	.long	0x00000000 +DBPDCNT3_D:	.long	0x00004010 +DBPDLCK_D:	.long	0x0000a55a +DBPDRGA_D:	.long	0x00000028 +DBPDRGD_D:	.long	0x00017100 + +DBADJ0_D:	.long	0x00010000 +DBADJ2_D:	.long	0x18061806 +DBRFCNF0_D:	.long	0x000001ff +DBRFCNF1_D:	.long	0x00081040 +DBRFCNF2_D:	.long	0x00000000 +DBCALCNF_D:	.long	0x0000ffff +DBRFEN_D:	.long	0x00000001 +DBACEN_D:	.long	0x00000001 +DBCALTR_D:	.long	0x08200820 +DBPDNCNF_D:	.long	0x00000001 + +	.align 2 +exit_ddr: +#if defined(CONFIG_SH_32BIT) +	/*------- set PMB -------*/ +	write32	PASCR_A,	PASCR_29BIT_D +	write32	MMUCR_A,	MMUCR_D + +	/***************************************************************** +	 * ent	virt		phys		v	sz	c	wt +	 * 0	0xa0000000	0x00000000	1	128M	0	1 +	 * 1	0xa8000000	0x48000000	1	128M	0	1 +	 * 5	0x88000000	0x48000000	1	128M	1	1 +	 */ +	write32	PMB_ADDR_SPIBOOT_A,	PMB_ADDR_SPIBOOT_D +	write32	PMB_DATA_SPIBOOT_A,	PMB_DATA_SPIBOOT_D +	write32	PMB_ADDR_DDR_C1_A,	PMB_ADDR_DDR_C1_D +	write32	PMB_DATA_DDR_C1_A,	PMB_DATA_DDR_C1_D +	write32	PMB_ADDR_DDR_N1_A,	PMB_ADDR_DDR_N1_D +	write32	PMB_DATA_DDR_N1_A,	PMB_DATA_DDR_N1_D + +	write32	PMB_ADDR_ENTRY2,	PMB_ADDR_NOT_USE_D +	write32	PMB_ADDR_ENTRY3,	PMB_ADDR_NOT_USE_D +	write32	PMB_ADDR_ENTRY4,	PMB_ADDR_NOT_USE_D +	write32	PMB_ADDR_ENTRY6,	PMB_ADDR_NOT_USE_D +	write32	PMB_ADDR_ENTRY7,	PMB_ADDR_NOT_USE_D +	write32	PMB_ADDR_ENTRY8,	PMB_ADDR_NOT_USE_D +	write32	PMB_ADDR_ENTRY9,	PMB_ADDR_NOT_USE_D +	write32	PMB_ADDR_ENTRY10,	PMB_ADDR_NOT_USE_D +	write32	PMB_ADDR_ENTRY11,	PMB_ADDR_NOT_USE_D +	write32	PMB_ADDR_ENTRY12,	PMB_ADDR_NOT_USE_D +	write32	PMB_ADDR_ENTRY13,	PMB_ADDR_NOT_USE_D +	write32	PMB_ADDR_ENTRY14,	PMB_ADDR_NOT_USE_D +	write32	PMB_ADDR_ENTRY15,	PMB_ADDR_NOT_USE_D + +	write32	PASCR_A,	PASCR_INIT +	mov.l	DUMMY_ADDR, r0 +	icbi	@r0 +#endif	/* if defined(CONFIG_SH_32BIT) */ + +exit_pmb: +	/* CPU is running on ILRAM? */ +	mov	r14, r0 +	tst	#1, r0 +	bt	1f + +	mov.l	_stack_ilram, r15 +	mov.l	_spiboot_main, r0 +100:	bsrf	r0 +	nop + +	.align	2 +_spiboot_main:	.long	(spiboot_main - (100b + 4)) +_stack_ilram:	.long	0xe5204000 + +1: +	write32	CCR_A,	CCR_D + +	rts +	 nop + +	.align 2 + +#if defined(CONFIG_SH_32BIT) +/*------- set PMB -------*/ +PMB_ADDR_SPIBOOT_A:	.long	PMB_ADDR_BASE(0) +PMB_ADDR_DDR_N1_A:	.long	PMB_ADDR_BASE(1) +PMB_ADDR_DDR_C1_A:	.long	PMB_ADDR_BASE(5) +PMB_ADDR_ENTRY2:	.long	PMB_ADDR_BASE(2) +PMB_ADDR_ENTRY3:	.long	PMB_ADDR_BASE(3) +PMB_ADDR_ENTRY4:	.long	PMB_ADDR_BASE(4) +PMB_ADDR_ENTRY6:	.long	PMB_ADDR_BASE(6) +PMB_ADDR_ENTRY7:	.long	PMB_ADDR_BASE(7) +PMB_ADDR_ENTRY8:	.long	PMB_ADDR_BASE(8) +PMB_ADDR_ENTRY9:	.long	PMB_ADDR_BASE(9) +PMB_ADDR_ENTRY10:	.long	PMB_ADDR_BASE(10) +PMB_ADDR_ENTRY11:	.long	PMB_ADDR_BASE(11) +PMB_ADDR_ENTRY12:	.long	PMB_ADDR_BASE(12) +PMB_ADDR_ENTRY13:	.long	PMB_ADDR_BASE(13) +PMB_ADDR_ENTRY14:	.long	PMB_ADDR_BASE(14) +PMB_ADDR_ENTRY15:	.long	PMB_ADDR_BASE(15) + +PMB_ADDR_SPIBOOT_D:	.long	mk_pmb_addr_val(0xa0) +PMB_ADDR_DDR_C1_D:	.long	mk_pmb_addr_val(0x88) +PMB_ADDR_DDR_N1_D:	.long	mk_pmb_addr_val(0xa8) +PMB_ADDR_NOT_USE_D:	.long	0x00000000 + +PMB_DATA_SPIBOOT_A:	.long	PMB_DATA_BASE(0) +PMB_DATA_DDR_N1_A:	.long	PMB_DATA_BASE(1) +PMB_DATA_DDR_C1_A:	.long	PMB_DATA_BASE(5) + +/*						ppn   ub v s1 s0  c  wt */ +PMB_DATA_SPIBOOT_D:	.long	mk_pmb_data_val(0x00, 0, 1, 1, 0, 0, 1) +PMB_DATA_DDR_C1_D:	.long	mk_pmb_data_val(0x48, 0, 1, 1, 0, 1, 1) +PMB_DATA_DDR_N1_D:	.long	mk_pmb_data_val(0x48, 1, 1, 1, 0, 0, 1) + +PASCR_A:		.long	0xff000070 +DUMMY_ADDR:		.long	0xa0000000 +PASCR_29BIT_D:		.long	0x00000000 +PASCR_INIT:		.long	0x80000080 +MMUCR_A:		.long	0xff000010 +MMUCR_D:		.long	0x00000004	/* clear ITLB */ +#endif	/* CONFIG_SH_32BIT */ + +CCR_A:		.long	CCR +CCR_D:		.long	CCR_CACHE_INIT diff --git a/board/renesas/sh7753evb/sh7753evb.c b/board/renesas/sh7753evb/sh7753evb.c new file mode 100644 index 000000000..42b920fb3 --- /dev/null +++ b/board/renesas/sh7753evb/sh7753evb.c @@ -0,0 +1,326 @@ +/* + * Copyright (C) 2012  Renesas Solutions Corp. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#include <common.h> +#include <malloc.h> +#include <asm/processor.h> +#include <asm/io.h> +#include <asm/mmc.h> +#include <spi_flash.h> + +int checkboard(void) +{ +	puts("BOARD: SH7753 EVB\n"); + +	return 0; +} + +static void init_gpio(void) +{ +	struct gpio_regs *gpio = GPIO_BASE; +	struct sermux_regs *sermux = SERMUX_BASE; + +	/* GPIO */ +	writew(0x0000, &gpio->pacr);	/* GETHER */ +	writew(0x0001, &gpio->pbcr);	/* INTC */ +	writew(0x0000, &gpio->pccr);	/* PWMU, INTC */ +	writew(0x0000, &gpio->pdcr);	/* SPI0 */ +	writew(0xeaff, &gpio->pecr);	/* GPIO */ +	writew(0x0000, &gpio->pfcr);	/* WDT */ +	writew(0x0004, &gpio->pgcr);	/* SPI0, GETHER MDIO gate(PTG1) */ +	writew(0x0000, &gpio->phcr);	/* SPI1 */ +	writew(0x0000, &gpio->picr);	/* SDHI */ +	writew(0x0000, &gpio->pjcr);	/* SCIF4 */ +	writew(0x0003, &gpio->pkcr);	/* SerMux */ +	writew(0x0000, &gpio->plcr);	/* SerMux */ +	writew(0x0000, &gpio->pmcr);	/* RIIC */ +	writew(0x0000, &gpio->pncr);	/* USB, SGPIO */ +	writew(0x0000, &gpio->pocr);	/* SGPIO */ +	writew(0xd555, &gpio->pqcr);	/* GPIO */ +	writew(0x0000, &gpio->prcr);	/* RIIC */ +	writew(0x0000, &gpio->pscr);	/* RIIC */ +	writew(0x0000, &gpio->ptcr);	/* STATUS */ +	writeb(0x00, &gpio->pudr); +	writew(0x5555, &gpio->pucr);	/* Debug LED */ +	writew(0x0000, &gpio->pvcr);	/* RSPI */ +	writew(0x0000, &gpio->pwcr);	/* EVC */ +	writew(0x0000, &gpio->pxcr);	/* LBSC */ +	writew(0x0000, &gpio->pycr);	/* LBSC */ +	writew(0x0000, &gpio->pzcr);	/* eMMC */ +	writew(0xfe00, &gpio->psel0); +	writew(0x0000, &gpio->psel1); +	writew(0x3000, &gpio->psel2); +	writew(0xff00, &gpio->psel3); +	writew(0x771f, &gpio->psel4); +	writew(0x0ffc, &gpio->psel5); +	writew(0x00ff, &gpio->psel6); +	writew(0xfc00, &gpio->psel7); + +	writeb(0x10, &sermux->smr0);	/* SMR0: SerMux mode 0 */ +} + +static void init_usb_phy(void) +{ +	struct usb_common_regs *common0 = USB0_COMMON_BASE; +	struct usb_common_regs *common1 = USB1_COMMON_BASE; +	struct usb0_phy_regs *phy = USB0_PHY_BASE; +	struct usb1_port_regs *port = USB1_PORT_BASE; +	struct usb1_alignment_regs *align = USB1_ALIGNMENT_BASE; + +	writew(0x0100, &phy->reset);		/* set reset */ +	/* port0 = USB0, port1 = USB1 */ +	writew(0x0002, &phy->portsel); +	writel(0x0001, &port->port1sel);	/* port1 = Host */ +	writew(0x0111, &phy->reset);		/* clear reset */ + +	writew(0x4000, &common0->suspmode); +	writew(0x4000, &common1->suspmode); + +#if defined(__LITTLE_ENDIAN) +	writel(0x00000000, &align->ehcidatac); +	writel(0x00000000, &align->ohcidatac); +#endif +} + +static void init_gether_mdio(void) +{ +	struct gpio_regs *gpio = GPIO_BASE; + +	writew(readw(&gpio->pgcr) | 0x0004, &gpio->pgcr); +	writeb(readb(&gpio->pgdr) | 0x02, &gpio->pgdr);	/* Use ET0-MDIO */ +} + +static void set_mac_to_sh_giga_eth_register(int channel, char *mac_string) +{ +	struct ether_mac_regs *ether; +	unsigned char mac[6]; +	unsigned long val; + +	eth_parse_enetaddr(mac_string, mac); + +	if (!channel) +		ether = GETHER0_MAC_BASE; +	else +		ether = GETHER1_MAC_BASE; + +	val = (mac[0] << 24) | (mac[1] << 16) | (mac[2] << 8) | mac[3]; +	writel(val, ðer->mahr); +	val = (mac[4] << 8) | mac[5]; +	writel(val, ðer->malr); +} + +/***************************************************************** + * This PMB must be set on this timing. The lowlevel_init is run on + * Area 0(phys 0x00000000), so we have to map it. + * + * The new PMB table is following: + * ent	virt		phys		v	sz	c	wt + * 0	0xa0000000	0x40000000	1	128M	0	1 + * 1	0xa8000000	0x48000000	1	128M	0	1 + * 2	0xb0000000	0x50000000	1	128M	0	1 + * 3	0xb8000000	0x58000000	1	128M	0	1 + * 4	0x80000000	0x40000000	1	128M	1	1 + * 5	0x88000000	0x48000000	1	128M	1	1 + * 6	0x90000000	0x50000000	1	128M	1	1 + * 7	0x98000000	0x58000000	1	128M	1	1 + */ +static void set_pmb_on_board_init(void) +{ +	struct mmu_regs *mmu = MMU_BASE; + +	/* clear ITLB */ +	writel(0x00000004, &mmu->mmucr); + +	/* delete PMB for SPIBOOT */ +	writel(0, PMB_ADDR_BASE(0)); +	writel(0, PMB_DATA_BASE(0)); + +	/* add PMB for SDRAM(0x40000000 - 0x47ffffff) */ +	/*			ppn  ub v s1 s0  c  wt */ +	writel(mk_pmb_addr_val(0xa0), PMB_ADDR_BASE(0)); +	writel(mk_pmb_data_val(0x40, 1, 1, 1, 0, 0, 1), PMB_DATA_BASE(0)); +	writel(mk_pmb_addr_val(0xb0), PMB_ADDR_BASE(2)); +	writel(mk_pmb_data_val(0x50, 1, 1, 1, 0, 0, 1), PMB_DATA_BASE(2)); +	writel(mk_pmb_addr_val(0xb8), PMB_ADDR_BASE(3)); +	writel(mk_pmb_data_val(0x58, 1, 1, 1, 0, 0, 1), PMB_DATA_BASE(3)); +	writel(mk_pmb_addr_val(0x80), PMB_ADDR_BASE(4)); +	writel(mk_pmb_data_val(0x40, 0, 1, 1, 0, 1, 1), PMB_DATA_BASE(4)); +	writel(mk_pmb_addr_val(0x90), PMB_ADDR_BASE(6)); +	writel(mk_pmb_data_val(0x50, 0, 1, 1, 0, 1, 1), PMB_DATA_BASE(6)); +	writel(mk_pmb_addr_val(0x98), PMB_ADDR_BASE(7)); +	writel(mk_pmb_data_val(0x58, 0, 1, 1, 0, 1, 1), PMB_DATA_BASE(7)); +} + +int board_init(void) +{ +	struct gether_control_regs *gether = GETHER_CONTROL_BASE; + +	init_gpio(); +	set_pmb_on_board_init(); + +	/* Sets TXnDLY to B'010 */ +	writel(0x00000202, &gether->gbecont); + +	init_usb_phy(); +	init_gether_mdio(); + +	return 0; +} + +int dram_init(void) +{ +	DECLARE_GLOBAL_DATA_PTR; + +	gd->bd->bi_memstart = CONFIG_SYS_SDRAM_BASE; +	gd->bd->bi_memsize = CONFIG_SYS_SDRAM_SIZE; +	printf("DRAM:  %dMB\n", CONFIG_SYS_SDRAM_SIZE / (1024 * 1024)); + +	return 0; +} + +int board_mmc_init(bd_t *bis) +{ +	struct gpio_regs *gpio = GPIO_BASE; + +	writew(readw(&gpio->pgcr) | 0x0040, &gpio->pgcr); +	writeb(readb(&gpio->pgdr) & ~0x08, &gpio->pgdr); /* Reset */ +	udelay(1); +	writeb(readb(&gpio->pgdr) | 0x08, &gpio->pgdr);	/* Release reset */ +	udelay(200); + +	return mmcif_mmc_init(); +} + +static int get_sh_eth_mac_raw(unsigned char *buf, int size) +{ +	struct spi_flash *spi; +	int ret; + +	spi = spi_flash_probe(0, 0, 1000000, SPI_MODE_3); +	if (spi == NULL) { +		printf("%s: spi_flash probe failed.\n", __func__); +		return 1; +	} + +	ret = spi_flash_read(spi, SH7753EVB_ETHERNET_MAC_BASE, size, buf); +	if (ret) { +		printf("%s: spi_flash read failed.\n", __func__); +		spi_flash_free(spi); +		return 1; +	} +	spi_flash_free(spi); + +	return 0; +} + +static int get_sh_eth_mac(int channel, char *mac_string, unsigned char *buf) +{ +	memcpy(mac_string, &buf[channel * (SH7753EVB_ETHERNET_MAC_SIZE + 1)], +		SH7753EVB_ETHERNET_MAC_SIZE); +	mac_string[SH7753EVB_ETHERNET_MAC_SIZE] = 0x00;	/* terminate */ + +	return 0; +} + +static void init_ethernet_mac(void) +{ +	char mac_string[64]; +	char env_string[64]; +	int i; +	unsigned char *buf; + +	buf = malloc(256); +	if (!buf) { +		printf("%s: malloc failed.\n", __func__); +		return; +	} +	get_sh_eth_mac_raw(buf, 256); + +	/* Gigabit Ethernet */ +	for (i = 0; i < SH7753EVB_ETHERNET_NUM_CH; i++) { +		get_sh_eth_mac(i, mac_string, buf); +		if (i == 0) +			setenv("ethaddr", mac_string); +		else { +			sprintf(env_string, "eth%daddr", i); +			setenv(env_string, mac_string); +		} +		set_mac_to_sh_giga_eth_register(i, mac_string); +	} + +	free(buf); +} + +int board_late_init(void) +{ +	init_ethernet_mac(); + +	return 0; +} + +int do_write_mac(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +{ +	int i, ret; +	char mac_string[256]; +	struct spi_flash *spi; +	unsigned char *buf; + +	if (argc != 3) { +		buf = malloc(256); +		if (!buf) { +			printf("%s: malloc failed.\n", __func__); +			return 1; +		} + +		get_sh_eth_mac_raw(buf, 256); + +		/* print current MAC address */ +		for (i = 0; i < SH7753EVB_ETHERNET_NUM_CH; i++) { +			get_sh_eth_mac(i, mac_string, buf); +			printf("GETHERC ch%d = %s\n", i, mac_string); +		} +		free(buf); +		return 0; +	} + +	/* new setting */ +	memset(mac_string, 0xff, sizeof(mac_string)); +	sprintf(mac_string, "%s\t%s", +		argv[1], argv[2]); + +	/* write MAC data to SPI rom */ +	spi = spi_flash_probe(0, 0, 1000000, SPI_MODE_3); +	if (!spi) { +		printf("%s: spi_flash probe failed.\n", __func__); +		return 1; +	} + +	ret = spi_flash_erase(spi, SH7753EVB_ETHERNET_MAC_BASE_SPI, +				SH7753EVB_SPI_SECTOR_SIZE); +	if (ret) { +		printf("%s: spi_flash erase failed.\n", __func__); +		return 1; +	} + +	ret = spi_flash_write(spi, SH7753EVB_ETHERNET_MAC_BASE_SPI, +				sizeof(mac_string), mac_string); +	if (ret) { +		printf("%s: spi_flash write failed.\n", __func__); +		spi_flash_free(spi); +		return 1; +	} +	spi_flash_free(spi); + +	puts("The writing of the MAC address to SPI ROM was completed.\n"); + +	return 0; +} + +U_BOOT_CMD( +	write_mac,	3,	1,	do_write_mac, +	"write MAC address for GETHERC", +	"[GETHERC ch0] [GETHERC ch1]\n" +); diff --git a/board/renesas/sh7753evb/spi-boot.c b/board/renesas/sh7753evb/spi-boot.c new file mode 100644 index 000000000..21903d9c7 --- /dev/null +++ b/board/renesas/sh7753evb/spi-boot.c @@ -0,0 +1,134 @@ +/* + * Copyright (C) 2013  Renesas Solutions Corp. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#include <common.h> + +#define CONFIG_SPI_ADDR		0x00000000 +#define PHYADDR(_addr)		((_addr & 0x1fffffff) | 0x40000000) +#define CONFIG_RAM_BOOT_PHYS	PHYADDR(CONFIG_SYS_TEXT_BASE) + +#define SPIWDMADR	0xFE001018 +#define SPIWDMCNTR	0xFE001020 +#define SPIDMCOR	0xFE001028 +#define SPIDMINTSR	0xFE001188 +#define SPIDMINTMR	0xFE001190 + +#define SPIDMINTSR_DMEND	0x00000004 + +#define TBR	0xFE002000 +#define RBR	0xFE002000 + +#define CR1	0xFE002008 +#define CR2	0xFE002010 +#define CR3	0xFE002018 +#define CR4	0xFE002020 +#define CR7	0xFE002038 +#define CR8	0xFE002040 + +/* CR1 */ +#define SPI_TBE		0x80 +#define SPI_TBF		0x40 +#define SPI_RBE		0x20 +#define SPI_RBF		0x10 +#define SPI_PFONRD	0x08 +#define SPI_SSDB	0x04 +#define SPI_SSD		0x02 +#define SPI_SSA		0x01 + +/* CR2 */ +#define SPI_RSTF	0x80 +#define SPI_LOOPBK	0x40 +#define SPI_CPOL	0x20 +#define SPI_CPHA	0x10 +#define SPI_L1M0	0x08 + +/* CR4 */ +#define SPI_TBEI	0x80 +#define SPI_TBFI	0x40 +#define SPI_RBEI	0x20 +#define SPI_RBFI	0x10 +#define SPI_SpiS0	0x02 +#define SPI_SSS		0x01 + +/* CR7 */ +#define CR7_IDX_OR12	0x12 +#define OR12_ADDR32	0x00000001 + +#define spi_write(val, addr)	(*(volatile unsigned long *)(addr)) = val +#define spi_read(addr)		(*(volatile unsigned long *)(addr)) + +/* M25P80 */ +#define M25_READ	0x03 +#define M25_READ_4BYTE	0x13 + +extern void bss_start(void); + +#define __uses_spiboot2	__attribute__((section(".spiboot2.text"))) +static void __uses_spiboot2 spi_reset(void) +{ +	int timeout = 0x00100000; + +	/* Make sure the last transaction is finalized */ +	spi_write(0x00, CR3); +	spi_write(0x02, CR1); +	while (!(spi_read(CR4) & SPI_SpiS0)) { +		if (timeout-- < 0) +			break; +	} +	spi_write(0x00, CR1); + +	spi_write(spi_read(CR2) | SPI_RSTF, CR2);	/* fifo reset */ +	spi_write(spi_read(CR2) & ~SPI_RSTF, CR2); + +	spi_write(0, SPIDMCOR); +} + +static void __uses_spiboot2 spi_read_flash(void *buf, unsigned long addr, +					   unsigned long len) +{ +	spi_write(CR7_IDX_OR12, CR7); +	if (spi_read(CR8) & OR12_ADDR32) { +		/* 4-bytes address mode */ +		spi_write(M25_READ_4BYTE, TBR); +		spi_write((addr >> 24) & 0xFF, TBR);	/* ADDR31-24 */ +	} else { +		/* 3-bytes address mode */ +		spi_write(M25_READ, TBR); +	} +	spi_write((addr >> 16) & 0xFF, TBR);	/* ADDR23-16 */ +	spi_write((addr >> 8) & 0xFF, TBR);	/* ADDR15-8 */ +	spi_write(addr & 0xFF, TBR);		/* ADDR7-0 */ + +	spi_write(SPIDMINTSR_DMEND, SPIDMINTSR); +	spi_write((unsigned long)buf, SPIWDMADR); +	spi_write(len & 0xFFFFFFE0, SPIWDMCNTR); +	spi_write(1, SPIDMCOR); + +	spi_write(0xff, CR3); +	spi_write(spi_read(CR1) | SPI_SSDB, CR1); +	spi_write(spi_read(CR1) | SPI_SSA, CR1); + +	while (!(spi_read(SPIDMINTSR) & SPIDMINTSR_DMEND)) +		; + +	/* Nagate SP0-SS0 */ +	spi_write(0, CR1); +} + +void __uses_spiboot2 spiboot_main(void) +{ +	/* +	 * This code rounds len up for SPIWDMCNTR. We should set it to 0 in +	 * lower 5-bits. +	 */ +	void (*_start)(void) = (void *)CONFIG_SYS_TEXT_BASE; +	volatile unsigned long len = (bss_start - _start + 31) & 0xffffffe0; + +	spi_reset(); +	spi_read_flash((void *)CONFIG_RAM_BOOT_PHYS, CONFIG_SPI_ADDR, len); + +	_start(); +} diff --git a/board/renesas/sh7753evb/u-boot.lds b/board/renesas/sh7753evb/u-boot.lds new file mode 100644 index 000000000..053df642e --- /dev/null +++ b/board/renesas/sh7753evb/u-boot.lds @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2007 + * Nobuhiro Iwamatsu <iwamatsu@nigauri.org> + * + * Copyright (C) 2012 + * Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +OUTPUT_FORMAT("elf32-sh-linux", "elf32-sh-linux", "elf32-sh-linux") +OUTPUT_ARCH(sh) +ENTRY(_start) + +SECTIONS +{ +	/* +	 * entry and reloct_dst will be provided via ldflags +	 */ +	. = .; + +	PROVIDE (_ftext = .); +	PROVIDE (_fcode = .); +	PROVIDE (_start = .); + +	.text : +	{ +		KEEP(arch/sh/cpu/sh4/start.o		(.text)) +		*(.spiboot1.text) +		*(.spiboot2.text) +		. = ALIGN(8192); +		common/env_embedded.o	(.ppcenv) +		. = ALIGN(8192); +		common/env_embedded.o	(.ppcenvr) +		. = ALIGN(8192); +		*(.text) +		. = ALIGN(4); +	} =0xFF +	PROVIDE (_ecode = .); +	.rodata : +	{ +		*(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) +		. = ALIGN(4); +	} +	PROVIDE (_etext = .); + + +	PROVIDE (_fdata = .); +	.data : +	{ +		*(.data) +		. = ALIGN(4); +	} +	PROVIDE (_edata = .); + +	PROVIDE (_fgot = .); +	.got : +	{ +		*(.got) +		. = ALIGN(4); +	} +	PROVIDE (_egot = .); + +	.u_boot_list : { +		KEEP(*(SORT(.u_boot_list*))); +	} + +	PROVIDE (reloc_dst_end = .); +	/* _reloc_dst_end = .; */ + +	PROVIDE (bss_start = .); +	PROVIDE (__bss_start = .); +	.bss (NOLOAD) : +	{ +		*(.bss) +		. = ALIGN(4); +	} +	PROVIDE (bss_end = .); + +	PROVIDE (__bss_end = .); +} diff --git a/boards.cfg b/boards.cfg index a1a727fb5..d177f8227 100644 --- a/boards.cfg +++ b/boards.cfg @@ -281,7 +281,7 @@ Active  arm         armv7          exynos      samsung         smdk5420  Active  arm         armv7          exynos      samsung         smdkv310            smdkv310                             -                                                                                                                                 Chander Kashyap <k.chander@samsung.com>  Active  arm         armv7          exynos      samsung         trats               trats                                -                                                                                                                                 Lukasz Majewski <l.majewski@samsung.com>  Active  arm         armv7          exynos      samsung         trats2              trats2                               -                                                                                                                                 Piotr Wilczek <p.wilczek@samsung.com> -Active  arm         armv7          exynos      samsung         universal_c210      s5pc210_universal                    -                                                                                                                                 Minkyu Kang <mk7.kang@samsung.com> +Active  arm         armv7          exynos      samsung         universal_c210      s5pc210_universal                    -                                                                                                                                 Przemyslaw Marczak <p.marczak@samsung.com>  Active  arm         armv7          highbank    -               highbank            highbank                             -                                                                                                                                 Rob Herring <rob.herring@calxeda.com>  Active  arm         armv7          mx5         denx            m53evk              m53evk                               m53evk:IMX_CONFIG=board/denx/m53evk/imximage.cfg                                                                                  Marek Vasut <marek.vasut@gmail.com>  Active  arm         armv7          mx5         esg             ima3-mx53           ima3-mx53                            ima3-mx53:IMX_CONFIG=board/esg/ima3-mx53/imximage.cfg                                                                             - @@ -351,7 +351,7 @@ Active  arm         armv7          rmobile     renesas         lager  Active  arm         armv7          rmobile     renesas         lager               lager_nor                            lager:NORFLASH                                                                                                                    Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>  Active  arm         armv7          rmobile     renesas         koelsch             koelsch                              -                                                                                                                                 Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>  Active  arm         armv7          rmobile     renesas         koelsch             koelsch_nor                          koelsch:NORFLASH                                                                                                                  Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com> -Active  arm         armv7          s5pc1xx     samsung         goni                s5p_goni                             -                                                                                                                                 Minkyu Kang <mk7.kang@samsung.com> +Active  arm         armv7          s5pc1xx     samsung         goni                s5p_goni                             -                                                                                                                                 Mateusz Zalega <m.zalega@samsung.com>  Active  arm         armv7          s5pc1xx     samsung         smdkc100            smdkc100                             -                                                                                                                                 Minkyu Kang <mk7.kang@samsung.com>  Active  arm         armv7          socfpga     altera          socfpga             socfpga_cyclone5                     -                                                                                                                                 -  Active  arm         armv7          u8500       st-ericsson     snowball            snowball                             -                                                                                                                                 Mathieu Poirier <mathieu.poirier@linaro.org> @@ -645,7 +645,6 @@ Active  powerpc     mpc824x        -           -               cpc45  Active  powerpc     mpc824x        -           -               cu824               CU824                                -                                                                                                                                 Wolfgang Denk <wd@denx.de>  Active  powerpc     mpc824x        -           -               eXalion             eXalion                              -                                                                                                                                 Torsten Demke <torsten.demke@fci.com>  Active  powerpc     mpc824x        -           -               hidden_dragon       HIDDEN_DRAGON                        -                                                                                                                                 Yusdi Santoso <yusdi_santoso@adaptec.com> -Active  powerpc     mpc824x        -           -               linkstation         linkstation_HGLAN                    linkstation:HGLAN=1                                                                                                               Guennadi Liakhovetski <g.liakhovetski@gmx.de>  Active  powerpc     mpc824x        -           -               musenki             MUSENKI                              -                                                                                                                                 Jim Thompson <jim@musenki.com>  Active  powerpc     mpc824x        -           -               mvblue              MVBLUE                               -                                                                                                                                 -  Active  powerpc     mpc824x        -           -               sandpoint           Sandpoint8240                        -                                                                                                                                 Wolfgang Denk <wd@denx.de> @@ -975,6 +974,7 @@ Active  powerpc     mpc85xx        -           freescale       t4qds  Active  powerpc     mpc85xx        -           freescale       t4qds               T4160QDS_SPIFLASH                    T4240QDS:PPC_T4160,RAMBOOT_PBL,SPIFLASH,SYS_TEXT_BASE=0xFFF80000                                                                  -  Active  powerpc     mpc85xx        -           freescale       t4qds               T4240EMU                             T4240EMU:PPC_T4240                                                                                                                York Sun <yorksun@freescale.com>  Active  powerpc     mpc85xx        -           freescale       t4qds               T4240QDS                             T4240QDS:PPC_T4240                                                                                                                - +Active  powerpc     mpc85xx        -           freescale       t4qds               T4240QDS_NAND	                T4240QDS:PPC_T4240,RAMBOOT_PBL,NAND,SYS_TEXT_BASE=0xFFF80000                                                                      -  Active  powerpc     mpc85xx        -           freescale       t4qds               T4240QDS_SDCARD                      T4240QDS:PPC_T4240,RAMBOOT_PBL,SDCARD,SYS_TEXT_BASE=0xFFF80000                                                                    -  Active  powerpc     mpc85xx        -           freescale       t4qds               T4240QDS_SPIFLASH                    T4240QDS:PPC_T4240,RAMBOOT_PBL,SPIFLASH,SYS_TEXT_BASE=0xFFF80000                                                                  -  Active  powerpc     mpc85xx        -           freescale       t4qds               T4240QDS_SRIO_PCIE_BOOT              T4240QDS:PPC_T4240,SRIO_PCIE_BOOT_SLAVE,SYS_TEXT_BASE=0xFFF80000                                                                  - @@ -1218,6 +1218,7 @@ Active  sh          sh4            -           renesas         r0p7734  Active  sh          sh4            -           renesas         r2dplus             r2dplus                              -                                                                                                                                 Nobuhiro Iwamatsu <iwamatsu.nobuhiro@renesas.com>:Nobuhiro Iwamatsu <iwamatsu@nigauri.org>  Active  sh          sh4            -           renesas         r7780mp             r7780mp                              -                                                                                                                                 Nobuhiro Iwamatsu <iwamatsu.nobuhiro@renesas.com>:Nobuhiro Iwamatsu <iwamatsu@nigauri.org>  Active  sh          sh4            -           renesas         sh7752evb           sh7752evb                            -                                                                                                                                 - +Active  sh          sh4            -           renesas         sh7753evb           sh7753evb                            -                                                                                                                                 -  Active  sh          sh4            -           renesas         sh7757lcr           sh7757lcr                            -                                                                                                                                 -  Active  sh          sh4            -           renesas         sh7763rdp           sh7763rdp                            -                                                                                                                                 Nobuhiro Iwamatsu <iwamatsu.nobuhiro@renesas.com>:Nobuhiro Iwamatsu <iwamatsu@nigauri.org>  Active  sh          sh4            -           renesas         sh7785lcr           sh7785lcr                            -                                                                                                                                 - diff --git a/common/Makefile b/common/Makefile index 74404beb3..d12cba5bf 100644 --- a/common/Makefile +++ b/common/Makefile @@ -230,8 +230,6 @@ obj-$(CONFIG_FIT_SIGNATURE) += image-sig.o  obj-y += memsize.o  obj-y += stdio.o -CPPFLAGS += -I.. -  $(obj)env_embedded.o: $(src)env_embedded.c  	$(CC) $(AFLAGS) -Wa,--no-warn \  		-DENV_CRC=$(shell $(obj)../tools/envcrc) \ diff --git a/common/board_f.c b/common/board_f.c index d918e4bb1..aa70c3e57 100644 --- a/common/board_f.c +++ b/common/board_f.c @@ -347,9 +347,10 @@ done:  #ifdef CONFIG_SANDBOX  static int setup_ram_buf(void)  { -	gd->arch.ram_buf = os_malloc(CONFIG_SYS_SDRAM_SIZE); -	assert(gd->arch.ram_buf); -	gd->ram_size = CONFIG_SYS_SDRAM_SIZE; +	struct sandbox_state *state = state_get_current(); + +	gd->arch.ram_buf = state->ram_buf; +	gd->ram_size = state->ram_size;  	return 0;  } @@ -772,7 +773,7 @@ static int setup_reloc(void)  }  /* ARM calls relocate_code from its crt0.S */ -#if !defined(CONFIG_ARM) +#if !defined(CONFIG_ARM) && !defined(CONFIG_SANDBOX)  static int jump_to_copy(void)  { @@ -792,8 +793,6 @@ static int jump_to_copy(void)  	 * (CPU cache)  	 */  	board_init_f_r_trampoline(gd->start_addr_sp); -#elif defined(CONFIG_SANDBOX) -	board_init_r(gd->new_gd, 0);  #else  	relocate_code(gd->start_addr_sp, gd->new_gd, gd->relocaddr);  #endif @@ -990,7 +989,7 @@ static init_fnc_t init_sequence_f[] = {  	INIT_FUNC_WATCHDOG_RESET  	reloc_fdt,  	setup_reloc, -#ifndef CONFIG_ARM +#if !defined(CONFIG_ARM) && !defined(CONFIG_SANDBOX)  	jump_to_copy,  #endif  	NULL, @@ -1016,11 +1015,12 @@ void board_init_f(ulong boot_flags)  #endif  	gd->flags = boot_flags; +	gd->have_console = 0;  	if (initcall_run_list(init_sequence_f))  		hang(); -#ifndef CONFIG_ARM +#if !defined(CONFIG_ARM) && !defined(CONFIG_SANDBOX)  	/* NOTREACHED - jump_to_copy() does not return */  	hang();  #endif diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c index ba73f5781..3f576594d 100644 --- a/common/cmd_bootm.c +++ b/common/cmd_bootm.c @@ -23,6 +23,11 @@  #include <asm/io.h>  #include <linux/compiler.h> +#if defined(CONFIG_BOOTM_VXWORKS) && \ +	(defined(CONFIG_PPC) || defined(CONFIG_ARM)) +#include <vxworks.h> +#endif +  #if defined(CONFIG_CMD_USB)  #include <usb.h>  #endif @@ -120,8 +125,11 @@ static boot_os_fn do_bootm_ose;  #if defined(CONFIG_BOOTM_PLAN9)  static boot_os_fn do_bootm_plan9;  #endif -#if defined(CONFIG_CMD_ELF) +#if defined(CONFIG_BOOTM_VXWORKS) && \ +	(defined(CONFIG_PPC) || defined(CONFIG_ARM))  static boot_os_fn do_bootm_vxworks; +#endif +#if defined(CONFIG_CMD_ELF)  static boot_os_fn do_bootm_qnxelf;  int do_bootvx(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);  int do_bootelf(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]); @@ -149,8 +157,11 @@ static boot_os_fn *boot_os[] = {  #if defined(CONFIG_BOOTM_PLAN9)  	[IH_OS_PLAN9] = do_bootm_plan9,  #endif -#if defined(CONFIG_CMD_ELF) +#if defined(CONFIG_BOOTM_VXWORKS) && \ +	(defined(CONFIG_PPC) || defined(CONFIG_ARM))  	[IH_OS_VXWORKS] = do_bootm_vxworks, +#endif +#if defined(CONFIG_CMD_ELF)  	[IH_OS_QNX] = do_bootm_qnxelf,  #endif  #ifdef CONFIG_INTEGRITY @@ -333,7 +344,8 @@ static int bootm_find_other(cmd_tbl_t *cmdtp, int flag, int argc,  	if (((images.os.type == IH_TYPE_KERNEL) ||  	     (images.os.type == IH_TYPE_KERNEL_NOLOAD) ||  	     (images.os.type == IH_TYPE_MULTI)) && -	    (images.os.os == IH_OS_LINUX)) { +	    (images.os.os == IH_OS_LINUX || +		 images.os.os == IH_OS_VXWORKS)) {  		if (bootm_find_ramdisk(flag, argc, argv))  			return 1; @@ -1531,10 +1543,10 @@ static int do_bootm_netbsd(int flag, int argc, char * const argv[],  	/*  	 * NetBSD Stage-2 Loader Parameters: -	 *   r3: ptr to board info data -	 *   r4: image address -	 *   r5: console device -	 *   r6: boot args string +	 *   arg[0]: pointer to board info data +	 *   arg[1]: image load address +	 *   arg[2]: char pointer to the console device to use +	 *   arg[3]: char pointer to the boot arguments  	 */  	(*loader)(gd->bd, os_hdr, consdev, cmdline); @@ -1678,12 +1690,66 @@ static int do_bootm_plan9(int flag, int argc, char * const argv[],  }  #endif /* CONFIG_BOOTM_PLAN9 */ -#if defined(CONFIG_CMD_ELF) +#if defined(CONFIG_BOOTM_VXWORKS) && \ +	(defined(CONFIG_PPC) || defined(CONFIG_ARM)) + +void do_bootvx_fdt(bootm_headers_t *images) +{ +#if defined(CONFIG_OF_LIBFDT) +	int ret; +	char *bootline; +	ulong of_size = images->ft_len; +	char **of_flat_tree = &images->ft_addr; +	struct lmb *lmb = &images->lmb; + +	if (*of_flat_tree) { +		boot_fdt_add_mem_rsv_regions(lmb, *of_flat_tree); + +		ret = boot_relocate_fdt(lmb, of_flat_tree, &of_size); +		if (ret) +			return; + +		ret = fdt_add_subnode(*of_flat_tree, 0, "chosen"); +		if ((ret >= 0 || ret == -FDT_ERR_EXISTS)) { +			bootline = getenv("bootargs"); +			if (bootline) { +				ret = fdt_find_and_setprop(*of_flat_tree, +						"/chosen", "bootargs", +						bootline, +						strlen(bootline) + 1, 1); +				if (ret < 0) { +					printf("## ERROR: %s : %s\n", __func__, +					       fdt_strerror(ret)); +					return; +				} +			} +		} else { +			printf("## ERROR: %s : %s\n", __func__, +			       fdt_strerror(ret)); +			return; +		} +	} +#endif + +	boot_prep_vxworks(images); + +	bootstage_mark(BOOTSTAGE_ID_RUN_OS); + +#if defined(CONFIG_OF_LIBFDT) +	printf("## Starting vxWorks at 0x%08lx, device tree at 0x%08lx ...\n", +	       (ulong)images->ep, (ulong)*of_flat_tree); +#else +	printf("## Starting vxWorks at 0x%08lx\n", (ulong)images->ep); +#endif + +	boot_jump_vxworks(images); + +	puts("## vxWorks terminated\n"); +} +  static int do_bootm_vxworks(int flag, int argc, char * const argv[],  			     bootm_headers_t *images)  { -	char str[80]; -  	if (flag != BOOTM_STATE_OS_GO)  		return 0; @@ -1694,13 +1760,13 @@ static int do_bootm_vxworks(int flag, int argc, char * const argv[],  	}  #endif -	sprintf(str, "%lx", images->ep); /* write entry-point into string */ -	setenv("loadaddr", str); -	do_bootvx(NULL, 0, 0, NULL); +	do_bootvx_fdt(images);  	return 1;  } +#endif +#if defined(CONFIG_CMD_ELF)  static int do_bootm_qnxelf(int flag, int argc, char * const argv[],  			    bootm_headers_t *images)  { diff --git a/common/cmd_elf.c b/common/cmd_elf.c index f741f6b83..ab9c7e332 100644 --- a/common/cmd_elf.c +++ b/common/cmd_elf.c @@ -156,16 +156,16 @@ int do_bootvx(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  	 * If we don't know where the image is then we're done.  	 */ -	if (argc < 1) +	if (argc < 2)  		addr = load_addr;  	else -		addr = simple_strtoul(argv[0], NULL, 16); +		addr = simple_strtoul(argv[1], NULL, 16);  #if defined(CONFIG_CMD_NET)  	/*  	 * Check to see if we need to tftp the image ourselves before starting  	 */ -	if ((argc == 1) && (strcmp(argv[0], "tftp") == 0)) { +	if ((argc == 2) && (strcmp(argv[1], "tftp") == 0)) {  		if (NetLoop(TFTPGET) <= 0)  			return 1;  		printf("Automatic boot of VxWorks image at address 0x%08lx ...\n", diff --git a/common/cmd_mmc.c b/common/cmd_mmc.c index 67a94a746..da5fef9db 100644 --- a/common/cmd_mmc.c +++ b/common/cmd_mmc.c @@ -340,6 +340,28 @@ static int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  		}  #endif /* CONFIG_SUPPORT_EMMC_BOOT */  	} + +	else if (argc == 3 && strcmp(argv[1], "setdsr") == 0) { +		struct mmc *mmc = find_mmc_device(curr_device); +		u32 val = simple_strtoul(argv[2], NULL, 16); +		int ret; + +		if (!mmc) { +			printf("no mmc device at slot %x\n", curr_device); +			return 1; +		} +		ret = mmc_set_dsr(mmc, val); +		printf("set dsr %s\n", (!ret) ? "OK, force rescan" : "ERROR"); +		if (!ret) { +			mmc->has_init = 0; +			if (mmc_init(mmc)) +				return 1; +			else +				return 0; +		} +		return ret; +	} +  	state = MMC_INVALID;  	if (argc == 5 && strcmp(argv[1], "read") == 0)  		state = MMC_READ; @@ -423,5 +445,6 @@ U_BOOT_CMD(  	"mmc bootpart <device num> <boot part size MB> <RPMB part size MB>\n"  	" - change sizes of boot and RPMB partitions of specified device\n"  #endif +	"mmc setdsr - set DSR register value\n"  	);  #endif /* !CONFIG_GENERIC_MMC */ diff --git a/common/cmd_sandbox.c b/common/cmd_sandbox.c index 8d59364b6..00982b164 100644 --- a/common/cmd_sandbox.c +++ b/common/cmd_sandbox.c @@ -6,6 +6,9 @@  #include <common.h>  #include <fs.h> +#include <part.h> +#include <sandboxblockdev.h> +#include <asm/errno.h>  static int do_sandbox_load(cmd_tbl_t *cmdtp, int flag, int argc,  			   char * const argv[]) @@ -25,10 +28,69 @@ static int do_sandbox_save(cmd_tbl_t *cmdtp, int flag, int argc,  	return do_save(cmdtp, flag, argc, argv, FS_TYPE_SANDBOX);  } +static int do_sandbox_bind(cmd_tbl_t *cmdtp, int flag, int argc, +			   char * const argv[]) +{ +	if (argc < 2 || argc > 3) +		return CMD_RET_USAGE; +	char *ep; +	char *dev_str = argv[1]; +	char *file = argc >= 3 ? argv[2] : NULL; +	int dev = simple_strtoul(dev_str, &ep, 16); +	if (*ep) { +		printf("** Bad device specification %s **\n", dev_str); +		return CMD_RET_USAGE; +	} +	return host_dev_bind(dev, file); +} + +static int do_sandbox_info(cmd_tbl_t *cmdtp, int flag, int argc, +			   char * const argv[]) +{ +	if (argc < 1 || argc > 2) +		return CMD_RET_USAGE; +	int min_dev = 0; +	int max_dev = CONFIG_HOST_MAX_DEVICES - 1; +	if (argc >= 2) { +		char *ep; +		char *dev_str = argv[1]; +		int dev = simple_strtoul(dev_str, &ep, 16); +		if (*ep) { +			printf("** Bad device specification %s **\n", dev_str); +			return CMD_RET_USAGE; +		} +		min_dev = dev; +		max_dev = dev; +	} +	int dev; +	printf("%3s %12s %s\n", "dev", "blocks", "path"); +	for (dev = min_dev; dev <= max_dev; dev++) { +		block_dev_desc_t *blk_dev; +		int ret; + +		printf("%3d ", dev); +		ret = host_get_dev_err(dev, &blk_dev); +		if (ret) { +			if (ret == -ENOENT) +				puts("Not bound to a backing file\n"); +			else if (ret == -ENODEV) +				puts("Invalid host device number\n"); + +			continue; +		} +		struct host_block_dev *host_dev = blk_dev->priv; +		printf("%12lu %s\n", (unsigned long)blk_dev->lba, +		       host_dev->filename); +	} +	return 0; +} +  static cmd_tbl_t cmd_sandbox_sub[] = {  	U_BOOT_CMD_MKENT(load, 7, 0, do_sandbox_load, "", ""),  	U_BOOT_CMD_MKENT(ls, 3, 0, do_sandbox_ls, "", ""),  	U_BOOT_CMD_MKENT(save, 6, 0, do_sandbox_save, "", ""), +	U_BOOT_CMD_MKENT(bind, 3, 0, do_sandbox_bind, "", ""), +	U_BOOT_CMD_MKENT(info, 3, 0, do_sandbox_info, "", ""),  };  static int do_sandbox(cmd_tbl_t *cmdtp, int flag, int argc, @@ -57,4 +119,6 @@ U_BOOT_CMD(  	"sb ls host <filename>                      - list files on host\n"  	"sb save host <dev> <filename> <addr> <bytes> [<offset>] - "  		"save a file to host\n" +	"sb bind <dev> [<filename>] - bind \"host\" device to file\n" +	"sb info [<dev>]            - show device binding & info"  ); diff --git a/common/console.c b/common/console.c index cc55068c7..2dfb78888 100644 --- a/common/console.c +++ b/common/console.c @@ -8,6 +8,7 @@  #include <common.h>  #include <stdarg.h>  #include <malloc.h> +#include <os.h>  #include <serial.h>  #include <stdio_dev.h>  #include <exports.h> @@ -415,6 +416,12 @@ static inline void print_pre_console_buffer(void) {}  void putc(const char c)  { +#ifdef CONFIG_SANDBOX +	if (!gd) { +		os_putc(c); +		return; +	} +#endif  #ifdef CONFIG_SILENT_CONSOLE  	if (gd->flags & GD_FLG_SILENT)  		return; @@ -439,6 +446,13 @@ void putc(const char c)  void puts(const char *s)  { +#ifdef CONFIG_SANDBOX +	if (!gd) { +		os_puts(s); +		return; +	} +#endif +  #ifdef CONFIG_SILENT_CONSOLE  	if (gd->flags & GD_FLG_SILENT)  		return; @@ -467,7 +481,7 @@ int printf(const char *fmt, ...)  	uint i;  	char printbuffer[CONFIG_SYS_PBSIZE]; -#ifndef CONFIG_PRE_CONSOLE_BUFFER +#if !defined(CONFIG_SANDBOX) && !defined(CONFIG_PRE_CONSOLE_BUFFER)  	if (!gd->have_console)  		return 0;  #endif diff --git a/common/fdt_support.c b/common/fdt_support.c index a3f7442c3..b9dce9946 100644 --- a/common/fdt_support.c +++ b/common/fdt_support.c @@ -402,10 +402,11 @@ int fdt_fixup_memory_banks(void *blob, u64 start[], u64 size[], int banks)  	nodeoffset = fdt_path_offset(blob, "/memory");  	if (nodeoffset < 0) {  		nodeoffset = fdt_add_subnode(blob, 0, "memory"); -		if (nodeoffset < 0) +		if (nodeoffset < 0) {  			printf("WARNING: could not create /memory: %s.\n",  					fdt_strerror(nodeoffset)); -		return nodeoffset; +			return nodeoffset; +		}  	}  	err = fdt_setprop(blob, nodeoffset, "device_type", "memory",  			sizeof("memory")); @@ -125,9 +125,9 @@ endif  # cc-version  # Usage gcc-ver := $(call cc-version) -cc-version = $(shell $(SHELL) $(SRCTREE)/tools/gcc-version.sh $(CC)) -binutils-version = $(shell $(SHELL) $(SRCTREE)/tools/binutils-version.sh $(AS)) -dtc-version = $(shell $(SHELL) $(SRCTREE)/tools/dtc-version.sh $(DTC)) +cc-version = $(shell $(SHELL) $(SRCTREE)/scripts/gcc-version.sh $(CC)) +binutils-version = $(shell $(SHELL) $(SRCTREE)/scripts/binutils-version.sh $(AS)) +dtc-version = $(shell $(SHELL) $(SRCTREE)/scripts/dtc-version.sh $(DTC))  #  # Include the make variables (CC, etc...) diff --git a/disk/part.c b/disk/part.c index d2e34cfcf..6941033d8 100644 --- a/disk/part.c +++ b/disk/part.c @@ -43,6 +43,9 @@ static const struct block_drvr block_drvr[] = {  #if defined(CONFIG_SYSTEMACE)  	{ .name = "ace", .get_dev = systemace_get_dev, },  #endif +#if defined(CONFIG_SANDBOX) +	{ .name = "host", .get_dev = host_get_dev, }, +#endif  	{ },  }; @@ -286,6 +289,9 @@ static void print_part_header (const char *type, block_dev_desc_t * dev_desc)  	case IF_TYPE_MMC:  		puts ("MMC");  		break; +	case IF_TYPE_HOST: +		puts("HOST"); +		break;  	default:  		puts ("UNKNOWN");  		break; diff --git a/doc/README.sh7753evb b/doc/README.sh7753evb new file mode 100644 index 000000000..5fe178c53 --- /dev/null +++ b/doc/README.sh7753evb @@ -0,0 +1,67 @@ +======================================== +Renesas SH7753 EVB board +======================================== + +This board specification: +========================= + +The SH7753 EVB (board config name:sh7753evb) has the following device: + + - SH7753 (SH-4A) + - DDR3-SDRAM 512MB + - SPI ROM 8MB + - Gigabit Ethernet controllers + - eMMC 4GB + + +Configuration for This board: +============================= + +You can select the configuration as follows: + + - make sh7753evb_config + + +This board specific command: +============================ + +This board has the following its specific command: + + - write_mac + + +1. write_mac + +You can write MAC address to SPI ROM. + + Usage 1) Write MAC address + +   write_mac [GETHERC ch0] [GETHERC ch1] + +	For example) +	 => write_mac 74:90:50:00:33:9e 74:90:50:00:33:9f +		*) We have to input the command as a single line +		   (without carriage return) +		*) We have to reset after input the command. + + Usage 2) Show current data + +   write_mac + +	For example) +		=> write_mac +		GETHERC ch0 = 74:90:50:00:33:9e +		GETHERC ch1 = 74:90:50:00:33:9f + + +Update SPI ROM: +============================ + +1. Copy u-boot image to RAM area. +2. Probe SPI device. +   => sf probe 0 +   SF: Detected MX25L6405D with page size 64KiB, total 8 MiB +3. Erase SPI ROM. +   => sf erase 0 80000 +4. Write u-boot image to SPI ROM. +   => sf write 0x48000000 0 80000 diff --git a/doc/README.socfpga b/doc/README.socfpga new file mode 100644 index 000000000..cfcbbfe37 --- /dev/null +++ b/doc/README.socfpga @@ -0,0 +1,53 @@ + +-------------------------------------------- +SOCFPGA Documentation for U-Boot and SPL +-------------------------------------------- + +This README is about U-Boot and SPL support for Altera's ARM Cortex-A9MPCore +based SOCFPGA. To know more about the hardware itself, please refer to +www.altera.com. + + +-------------------------------------------- +socfpga_dw_mmc +-------------------------------------------- +Here are macro and detailed configuration required to enable DesignWare SDMMC +controller support within SOCFPGA + +#define CONFIG_MMC +-> To enable the SD MMC framework support + +#define CONFIG_SDMMC_BASE		(SOCFPGA_SDMMC_ADDRESS) +-> The base address of CSR register for DesignWare SDMMC controller + +#define CONFIG_GENERIC_MMC +-> Enable the generic MMC driver + +#define CONFIG_SYS_MMC_MAX_BLK_COUNT	256 +-> Using smaller max blk cnt to avoid flooding the limited stack in OCRAM + +#define CONFIG_DWMMC +-> Enable the common DesignWare SDMMC controller framework + +#define CONFIG_SOCFPGA_DWMMC +-> Enable the SOCFPGA specific driver for DesignWare SDMMC controller + +#define CONFIG_SOCFPGA_DWMMC_FIFO_DEPTH		1024 +-> The FIFO depth for SOCFPGA DesignWare SDMMC controller + +#define CONFIG_SOCFPGA_DWMMC_DRVSEL	3 +-> Phase-shifted clock of sdmmc_clk for controller to drive command and data to +the card to meet hold time requirements. SD clock is running at 50MHz and +drvsel is set to shift 135 degrees (3 * 45 degrees). With that, the hold time +is 135 / 360 * 20ns = 7.5ns. + +#define CONFIG_SOCFPGA_DWMMC_SMPSEL	0 +-> Phase-shifted clock of sdmmc_clk used to sample the command and data from +the card + +#define CONFIG_SOCFPGA_DWMMC_BUS_WIDTH	4 +-> Bus width of data line which either 1, 4 or 8 and based on board routing. + +#define CONFIG_SOCFPGA_DWMMC_BUS_HZ	50000000 +-> The clock rate to controller. Do note the controller have a wrapper which +divide the clock from PLL by 4. diff --git a/doc/README.vxworks b/doc/README.vxworks new file mode 100644 index 000000000..4cb302e7f --- /dev/null +++ b/doc/README.vxworks @@ -0,0 +1,19 @@ +From VxWorks 6.9+ (not include 6.9), VxWorks starts adopting device tree as its hardware +decription mechansim (for PowerPC and ARM), thus requiring boot interface changes. +This section will describe the new interface. + +For PowerPC, the calling convention of the new VxWorks entry point conforms to the ePAPR standard, +which is shown below (see ePAPR for more details): + +    void (*kernel_entry)(fdt_addr, +              0, 0, EPAPR_MAGIC, boot_IMA, 0, 0) + +For ARM, the calling convention is show below: + +    void (*kernel_entry)(void *fdt_addr) + +When booting new VxWorks kernel (uImage format), the parameters passed to bootm is like below: + +    bootm <kernel image address> - <device tree address> + +The do_bootvx command still works as it was for older VxWorks kernels. diff --git a/doc/SPI/README.sh_qspi_test b/doc/SPI/README.sh_qspi_test new file mode 100644 index 000000000..8a33fec32 --- /dev/null +++ b/doc/SPI/README.sh_qspi_test @@ -0,0 +1,38 @@ +------------------------------------------------- +   Simple steps used to test the SH-QSPI at U-Boot +------------------------------------------------- + +#0, Currently, SH-QSPI is used by lager board (Renesas ARM SoC R8A7790) +    and koelsch board (Renesas ARM SoC R8A7791). These boot from SPI ROM +    basically. Thus, U-Boot start, SH-QSPI will is operating normally. + +#1, build U-Boot and load u-boot.bin + +  => tftpboot 40000000 u-boot.bin +  sh_eth Waiting for PHY auto negotiation to complete.. done +  sh_eth: 100Base/Half +  Using sh_eth device +  TFTP from server 192.168.169.1; our IP address is 192.168.169.79 +  Filename 'u-boot.bin'. +  Load address: 0x40000000 +  Loading: ############ +    2.5 MiB/s +  done +  Bytes transferred = 175364 (2ad04 hex) + +#2, Commands to erase/write u-boot to flash device + +  Note: This method is description of the lager board. If you want to use the +  other boards, please change the value according to each environment. + +  =>  sf probe 0 +  SF: Detected S25FL512S_256K with page size 512 Bytes, erase size 64 KiB, total 64 MiB +  => sf erase 80000 40000 +  SF: 262144 bytes @ 0x80000 Erased: OK +  => sf write 40000000 80000 175364 +  SF: 1528676 bytes @ 0x80000 Written: OK +  => + +#3, Push reset button. + +  If you're written correctly and driver works properly, U-Boot starts. diff --git a/drivers/block/Makefile b/drivers/block/Makefile index 4e9437838..8697da426 100644 --- a/drivers/block/Makefile +++ b/drivers/block/Makefile @@ -18,5 +18,6 @@ obj-$(CONFIG_SATA_DWC) += sata_dwc.o  obj-$(CONFIG_SATA_SIL3114) += sata_sil3114.o  obj-$(CONFIG_SATA_SIL) += sata_sil.o  obj-$(CONFIG_IDE_SIL680) += sil680.o +obj-$(CONFIG_SANDBOX) += sandbox.o  obj-$(CONFIG_SCSI_SYM53C8XX) += sym53c8xx.o  obj-$(CONFIG_SYSTEMACE) += systemace.o diff --git a/drivers/block/sandbox.c b/drivers/block/sandbox.c new file mode 100644 index 000000000..73f4c4a9e --- /dev/null +++ b/drivers/block/sandbox.c @@ -0,0 +1,124 @@ +/* + * Copyright (C) 2013 Henrik Nordstrom <henrik@henriknordstrom.net> + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#include <config.h> +#include <common.h> +#include <part.h> +#include <os.h> +#include <malloc.h> +#include <sandboxblockdev.h> +#include <asm/errno.h> + +static struct host_block_dev host_devices[CONFIG_HOST_MAX_DEVICES]; + +static struct host_block_dev *find_host_device(int dev) +{ +	if (dev >= 0 && dev < CONFIG_HOST_MAX_DEVICES) +		return &host_devices[dev]; + +	return NULL; +} + +static unsigned long host_block_read(int dev, unsigned long start, +				     lbaint_t blkcnt, void *buffer) +{ +	struct host_block_dev *host_dev = find_host_device(dev); + +	if (!host_dev) +		return -1; +	if (os_lseek(host_dev->fd, +		     start * host_dev->blk_dev.blksz, +		     OS_SEEK_SET) == -1) { +		printf("ERROR: Invalid position\n"); +		return -1; +	} +	ssize_t len = os_read(host_dev->fd, buffer, +			      blkcnt * host_dev->blk_dev.blksz); +	if (len >= 0) +		return len / host_dev->blk_dev.blksz; +	return -1; +} + +static unsigned long host_block_write(int dev, unsigned long start, +				      lbaint_t blkcnt, const void *buffer) +{ +	struct host_block_dev *host_dev = find_host_device(dev); +	if (os_lseek(host_dev->fd, +		     start * host_dev->blk_dev.blksz, +		     OS_SEEK_SET) == -1) { +		printf("ERROR: Invalid position\n"); +		return -1; +	} +	ssize_t len = os_write(host_dev->fd, buffer, blkcnt * +			       host_dev->blk_dev.blksz); +	if (len >= 0) +		return len / host_dev->blk_dev.blksz; +	return -1; +} + +int host_dev_bind(int dev, char *filename) +{ +	struct host_block_dev *host_dev = find_host_device(dev); + +	if (!host_dev) +		return -1; +	if (host_dev->blk_dev.priv) { +		os_close(host_dev->fd); +		host_dev->blk_dev.priv = NULL; +	} +	if (host_dev->filename) +		free(host_dev->filename); +	if (filename && *filename) { +		host_dev->filename = strdup(filename); +	} else { +		host_dev->filename = NULL; +		return 0; +	} + +	host_dev->fd = os_open(host_dev->filename, OS_O_RDWR); +	if (host_dev->fd == -1) { +		printf("Failed to access host backing file '%s'\n", +		       host_dev->filename); +		return 1; +	} + +	block_dev_desc_t *blk_dev = &host_dev->blk_dev; +	blk_dev->if_type = IF_TYPE_HOST; +	blk_dev->priv = host_dev; +	blk_dev->blksz = 512; +	blk_dev->lba = os_lseek(host_dev->fd, 0, OS_SEEK_END) / blk_dev->blksz; +	blk_dev->block_read = host_block_read; +	blk_dev->block_write = host_block_write; +	blk_dev->dev = dev; +	blk_dev->part_type = PART_TYPE_UNKNOWN; +	init_part(blk_dev); + +	return 0; +} + +int host_get_dev_err(int dev, block_dev_desc_t **blk_devp) +{ +	struct host_block_dev *host_dev = find_host_device(dev); + +	if (!host_dev) +		return -ENODEV; + +	if (!host_dev->blk_dev.priv) +		return -ENOENT; + +	*blk_devp = &host_dev->blk_dev; +	return 0; +} + +block_dev_desc_t *host_get_dev(int dev) +{ +	block_dev_desc_t *blk_dev; + +	if (host_get_dev_err(dev, &blk_dev)) +		return NULL; + +	return blk_dev; +} diff --git a/drivers/dfu/dfu.c b/drivers/dfu/dfu.c index 1eb92e541..07011e99a 100644 --- a/drivers/dfu/dfu.c +++ b/drivers/dfu/dfu.c @@ -74,6 +74,11 @@ unsigned char *dfu_free_buf(void)  	return dfu_buf;  } +unsigned long dfu_get_buf_size(void) +{ +	return dfu_buf_size; +} +  unsigned char *dfu_get_buf(void)  {  	char *s; diff --git a/drivers/mmc/Makefile b/drivers/mmc/Makefile index 1ed26cab3..e793ed994 100644 --- a/drivers/mmc/Makefile +++ b/drivers/mmc/Makefile @@ -28,6 +28,7 @@ obj-$(CONFIG_TEGRA_MMC) += tegra_mmc.o  obj-$(CONFIG_DWMMC) += dw_mmc.o  obj-$(CONFIG_EXYNOS_DWMMC) += exynos_dw_mmc.o  obj-$(CONFIG_ZYNQ_SDHCI) += zynq_sdhci.o +obj-$(CONFIG_SOCFPGA_DWMMC) += socfpga_dw_mmc.o  ifdef CONFIG_SPL_BUILD  obj-$(CONFIG_SPL_MMC_BOOT) += fsl_esdhc_spl.o  else diff --git a/drivers/mmc/dw_mmc.c b/drivers/mmc/dw_mmc.c index 19d9b0b89..4cec5aaa6 100644..100755 --- a/drivers/mmc/dw_mmc.c +++ b/drivers/mmc/dw_mmc.c @@ -6,6 +6,7 @@   * SPDX-License-Identifier:	GPL-2.0+   */ +#include <bouncebuf.h>  #include <common.h>  #include <malloc.h>  #include <mmc.h> @@ -41,11 +42,13 @@ static void dwmci_set_idma_desc(struct dwmci_idmac *idmac,  }  static void dwmci_prepare_data(struct dwmci_host *host, -		struct mmc_data *data, struct dwmci_idmac *cur_idmac) +			       struct mmc_data *data, +			       struct dwmci_idmac *cur_idmac, +			       void *bounce_buffer)  {  	unsigned long ctrl;  	unsigned int i = 0, flags, cnt, blk_cnt; -	ulong data_start, data_end, start_addr; +	ulong data_start, data_end;  	blk_cnt = data->blocks; @@ -55,11 +58,6 @@ static void dwmci_prepare_data(struct dwmci_host *host,  	data_start = (ulong)cur_idmac;  	dwmci_writel(host, DWMCI_DBADDR, (unsigned int)cur_idmac); -	if (data->flags == MMC_DATA_READ) -		start_addr = (unsigned int)data->dest; -	else -		start_addr = (unsigned int)data->src; -  	do {  		flags = DWMCI_IDMAC_OWN | DWMCI_IDMAC_CH ;  		flags |= (i == 0) ? DWMCI_IDMAC_FS : 0; @@ -70,7 +68,7 @@ static void dwmci_prepare_data(struct dwmci_host *host,  			cnt = data->blocksize * 8;  		dwmci_set_idma_desc(cur_idmac, flags, cnt, -				start_addr + (i * PAGE_SIZE)); +				    (u32)bounce_buffer + (i * PAGE_SIZE));  		if (blk_cnt <= 8)  			break; @@ -117,6 +115,7 @@ static int dwmci_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,  	u32 retry = 10000;  	u32 mask, ctrl;  	ulong start = get_timer(0); +	struct bounce_buffer bbstate;  	while (dwmci_readl(host, DWMCI_STATUS) & DWMCI_BUSY) {  		if (get_timer(start) > timeout) { @@ -127,8 +126,19 @@ static int dwmci_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,  	dwmci_writel(host, DWMCI_RINTSTS, DWMCI_INTMSK_ALL); -	if (data) -		dwmci_prepare_data(host, data, cur_idmac); +	if (data) { +		if (data->flags == MMC_DATA_READ) { +			bounce_buffer_start(&bbstate, (void*)data->dest, +					    data->blocksize * +					    data->blocks, GEN_BB_WRITE); +		} else { +			bounce_buffer_start(&bbstate, (void*)data->src, +					    data->blocksize * +					    data->blocks, GEN_BB_READ); +		} +		dwmci_prepare_data(host, data, cur_idmac, +				   bbstate.bounce_buffer); +	}  	dwmci_writel(host, DWMCI_CMDARG, cmd->cmdarg); @@ -204,6 +214,8 @@ static int dwmci_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,  		ctrl = dwmci_readl(host, DWMCI_CTRL);  		ctrl &= ~(DWMCI_DMA_EN);  		dwmci_writel(host, DWMCI_CTRL, ctrl); + +		bounce_buffer_stop(&bbstate);  	}  	udelay(100); @@ -336,9 +348,9 @@ int add_dwmci(struct dwmci_host *host, u32 max_clk, u32 min_clk)  	struct mmc *mmc;  	int err = 0; -	mmc = malloc(sizeof(struct mmc)); +	mmc = calloc(sizeof(struct mmc), 1);  	if (!mmc) { -		printf("mmc malloc fail!\n"); +		printf("mmc calloc fail!\n");  		return -1;  	} diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index e1461a98d..c6a1c23fb 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -877,6 +877,7 @@ static int mmc_startup(struct mmc *mmc)  	mmc->tran_speed = freq * mult; +	mmc->dsr_imp = ((cmd.response[1] >> 12) & 0x1);  	mmc->read_bl_len = 1 << ((cmd.response[1] >> 16) & 0xf);  	if (IS_SD(mmc)) @@ -907,6 +908,14 @@ static int mmc_startup(struct mmc *mmc)  	if (mmc->write_bl_len > MMC_MAX_BLOCK_LEN)  		mmc->write_bl_len = MMC_MAX_BLOCK_LEN; +	if ((mmc->dsr_imp) && (0xffffffff != mmc->dsr)) { +		cmd.cmdidx = MMC_CMD_SET_DSR; +		cmd.cmdarg = (mmc->dsr & 0xffff) << 16; +		cmd.resp_type = MMC_RSP_NONE; +		if (mmc_send_cmd(mmc, &cmd, NULL)) +			printf("MMC: SET_DSR failed\n"); +	} +  	/* Select the card, and put it into Transfer Mode */  	if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */  		cmd.cmdidx = MMC_CMD_SELECT_CARD; @@ -1163,6 +1172,9 @@ static int mmc_send_if_cond(struct mmc *mmc)  int mmc_register(struct mmc *mmc)  { +	/* Setup dsr related values */ +	mmc->dsr_imp = 0; +	mmc->dsr = 0xffffffff;  	/* Setup the universal parts of the block interface just once */  	mmc->block_dev.if_type = IF_TYPE_MMC;  	mmc->block_dev.dev = cur_dev_num++; @@ -1280,6 +1292,12 @@ int mmc_init(struct mmc *mmc)  	return err;  } +int mmc_set_dsr(struct mmc *mmc, u16 val) +{ +	mmc->dsr = val; +	return 0; +} +  /*   * CPU and board-specific MMC initializations.  Aliased function   * signals caller to move on diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c index 46ae9cb52..1e86b92be 100644 --- a/drivers/mmc/sdhci.c +++ b/drivers/mmc/sdhci.c @@ -24,7 +24,8 @@ static void sdhci_reset(struct sdhci_host *host, u8 mask)  	sdhci_writeb(host, mask, SDHCI_SOFTWARE_RESET);  	while (sdhci_readb(host, SDHCI_SOFTWARE_RESET) & mask) {  		if (timeout == 0) { -			printf("Reset 0x%x never completed.\n", (int)mask); +			printf("%s: Reset 0x%x never completed.\n", +			       __func__, (int)mask);  			return;  		}  		timeout--; @@ -79,7 +80,8 @@ static int sdhci_transfer_data(struct sdhci_host *host, struct mmc_data *data,  	do {  		stat = sdhci_readl(host, SDHCI_INT_STATUS);  		if (stat & SDHCI_INT_ERROR) { -			printf("Error detected in status(0x%X)!\n", stat); +			printf("%s: Error detected in status(0x%X)!\n", +			       __func__, stat);  			return -1;  		}  		if (stat & rdy) { @@ -102,7 +104,7 @@ static int sdhci_transfer_data(struct sdhci_host *host, struct mmc_data *data,  		if (timeout-- > 0)  			udelay(10);  		else { -			printf("Transfer data timeout\n"); +			printf("%s: Transfer data timeout\n", __func__);  			return -1;  		}  	} while (!(stat & SDHCI_INT_DATA_END)); @@ -147,7 +149,7 @@ int sdhci_send_command(struct mmc *mmc, struct mmc_cmd *cmd,  	while (sdhci_readl(host, SDHCI_PRESENT_STATE) & mask) {  		if (time >= cmd_timeout) { -			printf("MMC: %d busy ", mmc_dev); +			printf("%s: MMC: %d busy ", __func__, mmc_dev);  			if (2 * cmd_timeout <= CONFIG_SDHCI_CMD_MAX_TIMEOUT) {  				cmd_timeout += cmd_timeout;  				printf("timeout increasing to: %u ms.\n", @@ -179,7 +181,7 @@ int sdhci_send_command(struct mmc *mmc, struct mmc_cmd *cmd,  	if (data)  		flags |= SDHCI_CMD_DATA; -	/*Set Transfer mode regarding to data flag*/ +	/* Set Transfer mode regarding to data flag */  	if (data != 0) {  		sdhci_writeb(host, 0xe, SDHCI_TIMEOUT_CONTROL);  		mode = SDHCI_TRNS_BLK_CNT_EN; @@ -230,7 +232,7 @@ int sdhci_send_command(struct mmc *mmc, struct mmc_cmd *cmd,  		if (host->quirks & SDHCI_QUIRK_BROKEN_R1B)  			return 0;  		else { -			printf("Timeout for status update!\n"); +			printf("%s: Timeout for status update!\n", __func__);  			return TIMEOUT;  		}  	} @@ -307,7 +309,8 @@ static int sdhci_set_clock(struct mmc *mmc, unsigned int clock)  	while (!((clk = sdhci_readw(host, SDHCI_CLOCK_CONTROL))  		& SDHCI_CLOCK_INT_STABLE)) {  		if (timeout == 0) { -			printf("Internal clock never stabilised.\n"); +			printf("%s: Internal clock never stabilised.\n", +			       __func__);  			return -1;  		}  		timeout--; @@ -397,7 +400,8 @@ int sdhci_init(struct mmc *mmc)  	if ((host->quirks & SDHCI_QUIRK_32BIT_DMA_ADDR) && !aligned_buffer) {  		aligned_buffer = memalign(8, 512*1024);  		if (!aligned_buffer) { -			printf("Aligned buffer alloc failed!!!"); +			printf("%s: Aligned buffer alloc failed!!!\n", +			       __func__);  			return -1;  		}  	} @@ -418,8 +422,8 @@ int sdhci_init(struct mmc *mmc)  	}  	/* Enable only interrupts served by the SD controller */ -	sdhci_writel(host, SDHCI_INT_DATA_MASK | SDHCI_INT_CMD_MASK -		     , SDHCI_INT_ENABLE); +	sdhci_writel(host, SDHCI_INT_DATA_MASK | SDHCI_INT_CMD_MASK, +		     SDHCI_INT_ENABLE);  	/* Mask all sdhci interrupt sources */  	sdhci_writel(host, 0x0, SDHCI_SIGNAL_ENABLE); @@ -433,7 +437,7 @@ int add_sdhci(struct sdhci_host *host, u32 max_clk, u32 min_clk)  	mmc = malloc(sizeof(struct mmc));  	if (!mmc) { -		printf("mmc malloc fail!\n"); +		printf("%s: mmc malloc fail!\n", __func__);  		return -1;  	} @@ -450,7 +454,8 @@ int add_sdhci(struct sdhci_host *host, u32 max_clk, u32 min_clk)  	caps = sdhci_readl(host, SDHCI_CAPABILITIES);  #ifdef CONFIG_MMC_SDMA  	if (!(caps & SDHCI_CAN_DO_SDMA)) { -		printf("Your controller don't support sdma!!\n"); +		printf("%s: Your controller doesn't support SDMA!!\n", +		       __func__);  		return -1;  	}  #endif @@ -467,7 +472,8 @@ int add_sdhci(struct sdhci_host *host, u32 max_clk, u32 min_clk)  		mmc->f_max *= 1000000;  	}  	if (mmc->f_max == 0) { -		printf("Hardware doesn't specify base clock frequency\n"); +		printf("%s: Hardware doesn't specify base clock frequency\n", +		       __func__);  		return -1;  	}  	if (min_clk) diff --git a/drivers/mmc/socfpga_dw_mmc.c b/drivers/mmc/socfpga_dw_mmc.c new file mode 100644 index 000000000..bc53a5da2 --- /dev/null +++ b/drivers/mmc/socfpga_dw_mmc.c @@ -0,0 +1,68 @@ +/* + * (C) Copyright 2013 Altera Corporation <www.altera.com> + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#include <common.h> +#include <malloc.h> +#include <dwmmc.h> +#include <asm/arch/dwmmc.h> +#include <asm/arch/clock_manager.h> +#include <asm/arch/system_manager.h> + +static const struct socfpga_clock_manager *clock_manager_base = +		(void *)SOCFPGA_CLKMGR_ADDRESS; +static const struct socfpga_system_manager *system_manager_base = +		(void *)SOCFPGA_SYSMGR_ADDRESS; + +static char *SOCFPGA_NAME = "SOCFPGA DWMMC"; + +static void socfpga_dwmci_clksel(struct dwmci_host *host) +{ +	unsigned int drvsel; +	unsigned int smplsel; + +	/* Disable SDMMC clock. */ +	clrbits_le32(&clock_manager_base->per_pll_en, +		CLKMGR_PERPLLGRP_EN_SDMMCCLK_MASK); + +	/* Configures drv_sel and smpl_sel */ +	drvsel = CONFIG_SOCFPGA_DWMMC_DRVSEL; +	smplsel = CONFIG_SOCFPGA_DWMMC_SMPSEL; + +	debug("%s: drvsel %d smplsel %d\n", __func__, drvsel, smplsel); +	writel(SYSMGR_SDMMC_CTRL_SET(smplsel, drvsel), +		&system_manager_base->sdmmcgrp_ctrl); + +	debug("%s: SYSMGR_SDMMCGRP_CTRL_REG = 0x%x\n", __func__, +		readl(&system_manager_base->sdmmcgrp_ctrl)); + +	/* Enable SDMMC clock */ +	setbits_le32(&clock_manager_base->per_pll_en, +		CLKMGR_PERPLLGRP_EN_SDMMCCLK_MASK); +} + +int socfpga_dwmmc_init(u32 regbase, int bus_width, int index) +{ +	struct dwmci_host *host = NULL; +	host = calloc(sizeof(struct dwmci_host), 1); +	if (!host) { +		printf("dwmci_host calloc fail!\n"); +		return -1; +	} + +	host->name = SOCFPGA_NAME; +	host->ioaddr = (void *)regbase; +	host->buswidth = bus_width; +	host->clksel = socfpga_dwmci_clksel; +	host->dev_index = index; +	/* fixed clock divide by 4 which due to the SDMMC wrapper */ +	host->bus_hz = CONFIG_SOCFPGA_DWMMC_BUS_HZ; +	host->fifoth_val = MSIZE(0x2) | +		RX_WMARK(CONFIG_SOCFPGA_DWMMC_FIFO_DEPTH / 2 - 1) | +		TX_WMARK(CONFIG_SOCFPGA_DWMMC_FIFO_DEPTH / 2); + +	return add_dwmci(host, host->bus_hz, 400000); +} + diff --git a/drivers/mtd/nand/Makefile b/drivers/mtd/nand/Makefile index e145cd184..02b149cac 100644 --- a/drivers/mtd/nand/Makefile +++ b/drivers/mtd/nand/Makefile @@ -5,8 +5,6 @@  # SPDX-License-Identifier:	GPL-2.0+  # -ifdef CONFIG_CMD_NAND -  ifdef CONFIG_SPL_BUILD  ifdef CONFIG_SPL_NAND_DRIVERS @@ -69,4 +67,3 @@ obj-$(CONFIG_NAND_FSL_IFC) += fsl_ifc_spl.o  obj-$(CONFIG_NAND_MXC) += mxc_nand_spl.o  endif # drivers -endif # nand diff --git a/drivers/mtd/nand/nand_util.c b/drivers/mtd/nand/nand_util.c index eeaa7e8a4..b29282603 100644 --- a/drivers/mtd/nand/nand_util.c +++ b/drivers/mtd/nand/nand_util.c @@ -315,7 +315,7 @@ int nand_unlock(struct mtd_info *mtd, loff_t start, size_t length,  	int page;  	struct nand_chip *chip = mtd->priv; -	debug("nand_unlock%s: start: %08llx, length: %d!\n", +	debug("nand_unlock%s: start: %08llx, length: %zd!\n",  		allexcept ? " (allexcept)" : "", start, length);  	/* select the NAND device */ diff --git a/drivers/mtd/nand/omap_gpmc.c b/drivers/mtd/nand/omap_gpmc.c index 5e7e6b337..790d5385e 100644 --- a/drivers/mtd/nand/omap_gpmc.c +++ b/drivers/mtd/nand/omap_gpmc.c @@ -283,53 +283,55 @@ static void omap_hwecc_init_bch(struct nand_chip *chip, int32_t mode)  	if (bch->ecc_scheme == OMAP_ECC_BCH8_CODE_HW) {  		wr_mode = BCH_WRAPMODE_1; -	switch (bch->nibbles) { -	case ECC_BCH4_NIBBLES: -		unused_length = 3; -		break; -	case ECC_BCH8_NIBBLES: -		unused_length = 2; -		break; -	case ECC_BCH16_NIBBLES: -		unused_length = 0; -		break; -	} - -	/* -	 * This is ecc_size_config for ELM mode. -	 * Here we are using different settings for read and write access and -	 * also depending on BCH strength. -	 */ -	switch (mode) { -	case NAND_ECC_WRITE: -		/* write access only setup eccsize1 config */ -		val = ((unused_length + bch->nibbles) << 22); -		break; +		switch (bch->nibbles) { +		case ECC_BCH4_NIBBLES: +			unused_length = 3; +			break; +		case ECC_BCH8_NIBBLES: +			unused_length = 2; +			break; +		case ECC_BCH16_NIBBLES: +			unused_length = 0; +			break; +		} -	case NAND_ECC_READ: -	default:  		/* -		 * by default eccsize0 selected for ecc1resultsize -		 * eccsize0 config. +		 * This is ecc_size_config for ELM mode.  Here we are using +		 * different settings for read and write access and also +		 * depending on BCH strength.  		 */ -		val  = (bch->nibbles << 12); -		/* eccsize1 config */ -		val |= (unused_length << 22); -		break; -	} +		switch (mode) { +		case NAND_ECC_WRITE: +			/* write access only setup eccsize1 config */ +			val = ((unused_length + bch->nibbles) << 22); +			break; + +		case NAND_ECC_READ: +		default: +			/* +			 * by default eccsize0 selected for ecc1resultsize +			 * eccsize0 config. +			 */ +			val  = (bch->nibbles << 12); +			/* eccsize1 config */ +			val |= (unused_length << 22); +			break; +		}  	} else { -	/* -	 * This ecc_size_config setting is for BCH sw library. -	 * -	 * Note: we only support BCH8 currently with BCH sw library! -	 * Should be really easy to adobt to BCH4, however some omap3 have -	 * flaws with BCH4. -	 * -	 * Here we are using wrapping mode 6 both for reading and writing, with: -	 *  size0 = 0  (no additional protected byte in spare area) -	 *  size1 = 32 (skip 32 nibbles = 16 bytes per sector in spare area) -	 */ -	val = (32 << 22) | (0 << 12); +		/* +		 * This ecc_size_config setting is for BCH sw library. +		 * +		 * Note: we only support BCH8 currently with BCH sw library! +		 * Should be really easy to adobt to BCH4, however some omap3 +		 * have flaws with BCH4. +		 * +		 * Here we are using wrapping mode 6 both for reading and +		 * writing, with: +		 *  size0 = 0  (no additional protected byte in spare area) +		 *  size1 = 32 (skip 32 nibbles = 16 bytes per sector in +		 *		spare area) +		 */ +		val = (32 << 22) | (0 << 12);  	}  	/* ecc size configuration */  	writel(val, &gpmc_cfg->ecc_size_config); @@ -761,7 +763,7 @@ static void __maybe_unused omap_free_bch(struct mtd_info *mtd)  static int omap_select_ecc_scheme(struct nand_chip *nand,  	enum omap_ecc ecc_scheme, unsigned int pagesize, unsigned int oobsize) {  	struct nand_bch_priv	*bch		= nand->priv; -	struct nand_ecclayout	*ecclayout	= nand->ecc.layout; +	struct nand_ecclayout	*ecclayout	= &omap_ecclayout;  	int eccsteps = pagesize / SECTOR_BYTES;  	int i; @@ -774,7 +776,7 @@ static int omap_select_ecc_scheme(struct nand_chip *nand,  		bch_priv.type		= 0;  		nand->ecc.mode		= NAND_ECC_SOFT;  		nand->ecc.layout	= NULL; -		nand->ecc.size		= pagesize; +		nand->ecc.size		= 0;  		bch->ecc_scheme		= OMAP_ECC_HAM1_CODE_SW;  		break; @@ -789,6 +791,7 @@ static int omap_select_ecc_scheme(struct nand_chip *nand,  		bch_priv.control	= NULL;  		bch_priv.type		= 0;  		/* populate ecc specific fields */ +		memset(&nand->ecc, 0, sizeof(struct nand_ecc_ctrl));  		nand->ecc.mode		= NAND_ECC_HW;  		nand->ecc.strength	= 1;  		nand->ecc.size		= SECTOR_BYTES; @@ -798,8 +801,12 @@ static int omap_select_ecc_scheme(struct nand_chip *nand,  		nand->ecc.calculate	= omap_calculate_ecc;  		/* define ecc-layout */  		ecclayout->eccbytes	= nand->ecc.bytes * eccsteps; -		for (i = 0; i < ecclayout->eccbytes; i++) -			ecclayout->eccpos[i] = i + BADBLOCK_MARKER_LENGTH; +		for (i = 0; i < ecclayout->eccbytes; i++) { +			if (nand->options & NAND_BUSWIDTH_16) +				ecclayout->eccpos[i] = i + 2; +			else +				ecclayout->eccpos[i] = i + 1; +		}  		ecclayout->oobfree[0].offset = i + BADBLOCK_MARKER_LENGTH;  		ecclayout->oobfree[0].length = oobsize - ecclayout->eccbytes -  						BADBLOCK_MARKER_LENGTH; @@ -823,6 +830,7 @@ static int omap_select_ecc_scheme(struct nand_chip *nand,  		}  		bch_priv.type = ECC_BCH8;  		/* populate ecc specific fields */ +		memset(&nand->ecc, 0, sizeof(struct nand_ecc_ctrl));  		nand->ecc.mode		= NAND_ECC_HW;  		nand->ecc.strength	= 8;  		nand->ecc.size		= SECTOR_BYTES; @@ -865,6 +873,7 @@ static int omap_select_ecc_scheme(struct nand_chip *nand,  		elm_init();  		bch_priv.type		= ECC_BCH8;  		/* populate ecc specific fields */ +		memset(&nand->ecc, 0, sizeof(struct nand_ecc_ctrl));  		nand->ecc.mode		= NAND_ECC_HW;  		nand->ecc.strength	= 8;  		nand->ecc.size		= SECTOR_BYTES; @@ -891,6 +900,11 @@ static int omap_select_ecc_scheme(struct nand_chip *nand,  		debug("nand: error: ecc scheme not enabled or supported\n");  		return -EINVAL;  	} + +	/* nand_scan_tail() sets ham1 sw ecc; hw ecc layout is set by driver */ +	if (ecc_scheme != OMAP_ECC_HAM1_CODE_SW) +		nand->ecc.layout = ecclayout; +  	return 0;  } diff --git a/drivers/mtd/onenand/onenand_base.c b/drivers/mtd/onenand/onenand_base.c index 979e4af7c..e33e8d38e 100644 --- a/drivers/mtd/onenand/onenand_base.c +++ b/drivers/mtd/onenand/onenand_base.c @@ -91,7 +91,13 @@ static struct nand_ecclayout onenand_oob_32 = {  	.oobfree	= { {2, 3}, {14, 2}, {18, 3}, {30, 2} }  }; -static const unsigned char ffchars[] = { +/* + * Warning! This array is used with the memcpy_16() function, thus + * it must be aligned to 2 bytes. GCC can make this array unaligned + * as the array is made of unsigned char, which memcpy16() doesn't + * like and will cause unaligned access. + */ +static const unsigned char __aligned(2) ffchars[] = {  	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,  	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,	/* 16 */  	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, diff --git a/drivers/mtd/spi/sf_ops.c b/drivers/mtd/spi/sf_ops.c index 108665f44..e316a692a 100644 --- a/drivers/mtd/spi/sf_ops.c +++ b/drivers/mtd/spi/sf_ops.c @@ -273,9 +273,15 @@ int spi_flash_cmd_read_ops(struct spi_flash *flash, u32 offset,  	/* Handle memory-mapped SPI */  	if (flash->memory_map) { +		ret = spi_claim_bus(flash->spi); +		if (ret) { +			debug("SF: unable to claim SPI bus\n"); +			return ret; +		}  		spi_xfer(flash->spi, 0, NULL, NULL, SPI_XFER_MMAP);  		memcpy(data, flash->memory_map + offset, len);  		spi_xfer(flash->spi, 0, NULL, NULL, SPI_XFER_MMAP_END); +		spi_release_bus(flash->spi);  		return 0;  	} diff --git a/drivers/mtd/spi/sf_probe.c b/drivers/mtd/spi/sf_probe.c index c1eb75489..b863a9828 100644 --- a/drivers/mtd/spi/sf_probe.c +++ b/drivers/mtd/spi/sf_probe.c @@ -60,6 +60,7 @@ static const struct spi_flash_params spi_flash_params_table[] = {  	{"GD25LQ32",	   0xc86016, 0x0,	64 * 1024,    64,	       SECT_4K},  #endif  #ifdef CONFIG_SPI_FLASH_MACRONIX	/* MACRONIX */ +	{"MX25L2006E",	   0xc22012, 0x0,	64 * 1024,     4,	             0},  	{"MX25L4005",	   0xc22013, 0x0,	64 * 1024,     8,	             0},  	{"MX25L8005",	   0xc22014, 0x0,	64 * 1024,    16,	             0},  	{"MX25L1605D",	   0xc22015, 0x0,	64 * 1024,    32,	             0}, @@ -67,7 +68,7 @@ static const struct spi_flash_params spi_flash_params_table[] = {  	{"MX25L6405D",	   0xc22017, 0x0,	64 * 1024,   128,	             0},  	{"MX25L12805",	   0xc22018, 0x0,	64 * 1024,   256,	             0},  	{"MX25L25635F",	   0xc22019, 0x0,	64 * 1024,   512,	             0}, -	{"MX25L51235F",	   0xc2201A, 0x0,	64 * 1024,  1024,	             0}, +	{"MX25L51235F",	   0xc2201a, 0x0,	64 * 1024,  1024,	             0},  	{"MX25L12855E",	   0xc22618, 0x0,	64 * 1024,   256,	             0},  #endif  #ifdef CONFIG_SPI_FLASH_SPANSION	/* SPANSION */ diff --git a/drivers/mtd/ubi/Makefile b/drivers/mtd/ubi/Makefile index e1f3a241a..56c282347 100644 --- a/drivers/mtd/ubi/Makefile +++ b/drivers/mtd/ubi/Makefile @@ -5,9 +5,6 @@  # SPDX-License-Identifier:	GPL-2.0+  # -ifdef CONFIG_CMD_UBI  obj-y += build.o vtbl.o vmt.o upd.o kapi.o eba.o io.o wl.o scan.o crc32.o -  obj-y += misc.o  obj-y += debug.o -endif diff --git a/drivers/net/fm/init.c b/drivers/net/fm/init.c index cd787f4ee..74c72d3ff 100644 --- a/drivers/net/fm/init.c +++ b/drivers/net/fm/init.c @@ -276,13 +276,64 @@ static void ft_fixup_port(void *blob, struct fm_eth_info *info, char *prop)  		"status", "disabled", strlen("disabled") + 1, 1);  } +#ifdef CONFIG_SYS_FMAN_V3 +static int ft_fixup_xgec(void *blob, struct fm_eth_info *info) +{ +	int off, i, ci; +#define FM1_10GEC3_RX_PORT_ADDR	(CONFIG_SYS_CCSRBAR_PHYS + 0x488000) +#define FM1_10GEC3_TX_PORT_ADDR	(CONFIG_SYS_CCSRBAR_PHYS + 0x4a8000) +#define FM1_10GEC3_MAC_ADDR	(CONFIG_SYS_CCSRBAR_PHYS + 0x4e0000) + +	if ((info->port == FM1_10GEC3) || (info->port == FM1_10GEC4)) { +		ci = (info->port == FM1_10GEC3) ? 2 : 3; +		i = (info->port == FM1_10GEC3) ? 0 : 1; + +		off = fdt_node_offset_by_compat_reg(blob, "fsl,fman-port-1g-rx", +						    FM1_10GEC3_RX_PORT_ADDR + +						    i * 0x1000); +		if (off > 0) { +			fdt_setprop(blob, off, "cell-index", &ci, sizeof(int)); +			fdt_setprop(blob, off, "compatible", +				    "fsl,fman-port-10g-rx", 20); +		} else { +			goto err; +		} + +		off = fdt_node_offset_by_compat_reg(blob, "fsl,fman-port-1g-tx", +						    FM1_10GEC3_TX_PORT_ADDR + +						    i * 0x1000); +		if (off > 0) { +			fdt_setprop(blob, off, "cell-index", &ci, sizeof(int)); +			fdt_setprop(blob, off, "compatible", +				    "fsl,fman-port-10g-tx", 20); +		} else { +			goto err; +		} + +		off = fdt_node_offset_by_compat_reg(blob, "fsl,fman-memac", +						    FM1_10GEC3_MAC_ADDR + +						    i * 0x2000); +		if (off > 0) +			fdt_setprop(blob, off, "cell-index", &ci, sizeof(int)); +		else +			goto err; +	} +	return 0; +err: +	printf("WARNING: Fail to find the node\n"); +	return -1; +} +#endif +  void fdt_fixup_fman_ethernet(void *blob)  {  	int i;  #ifdef CONFIG_SYS_FMAN_V3 -	for (i = 0; i < ARRAY_SIZE(fm_info); i++) +	for (i = 0; i < ARRAY_SIZE(fm_info); i++) {  		ft_fixup_port(blob, &fm_info[i], "fsl,fman-memac"); +		ft_fixup_xgec(blob, &fm_info[i]); +	}  #else  	for (i = 0; i < ARRAY_SIZE(fm_info); i++) {  		if (fm_info[i].type == FM_ETH_1G_E) diff --git a/drivers/net/sh_eth.h b/drivers/net/sh_eth.h index 8aa71098c..331c07cb5 100644 --- a/drivers/net/sh_eth.h +++ b/drivers/net/sh_eth.h @@ -287,7 +287,9 @@ static const u16 sh_eth_offset_fast_sh4[SH_ETH_MAX_REGISTER_OFFSET] = {  #if defined(CONFIG_CPU_SH7763) || defined(CONFIG_CPU_SH7734)  #define SH_ETH_TYPE_GETHER  #define BASE_IO_ADDR	0xfee00000 -#elif defined(CONFIG_CPU_SH7757) || defined(CONFIG_CPU_SH7752) +#elif defined(CONFIG_CPU_SH7757) || \ +	defined(CONFIG_CPU_SH7752) || \ +	defined(CONFIG_CPU_SH7753)  #if defined(CONFIG_SH_ETHER_USE_GETHER)  #define SH_ETH_TYPE_GETHER  #define BASE_IO_ADDR	0xfee00000 @@ -356,7 +358,9 @@ enum DMAC_T_BIT {  /* GECMR */  enum GECMR_BIT { -#if defined(CONFIG_CPU_SH7757) || defined(CONFIG_CPU_SH7752) +#if defined(CONFIG_CPU_SH7757) || \ +	defined(CONFIG_CPU_SH7752) || \ +	defined(CONFIG_CPU_SH7753)  	GECMR_1000B = 0x20, GECMR_100B = 0x01, GECMR_10B = 0x00,  #else  	GECMR_1000B = 0x01, GECMR_100B = 0x04, GECMR_10B = 0x00, diff --git a/drivers/serial/lpc32xx_hsuart.c b/drivers/serial/lpc32xx_hsuart.c index 9c7c6213a..c8926a894 100644 --- a/drivers/serial/lpc32xx_hsuart.c +++ b/drivers/serial/lpc32xx_hsuart.c @@ -38,6 +38,9 @@ static int lpc32xx_serial_getc(void)  static void lpc32xx_serial_putc(const char c)  { +	if (c == '\n') +		serial_putc('\r'); +  	writel(c, &hsuart->tx);  	/* Wait for character to be sent */ diff --git a/drivers/serial/serial_sh.h b/drivers/serial/serial_sh.h index 556b86815..f5e9854d1 100644 --- a/drivers/serial/serial_sh.h +++ b/drivers/serial/serial_sh.h @@ -143,7 +143,9 @@ struct uart_port {  #elif defined(CONFIG_H8S2678)  # define SCSCR_INIT(port)          0x30 /* TIE=0,RIE=0,TE=1,RE=1 */  # define H8300_SCI_DR(ch) (*(volatile char *)(P1DR + h8300_sci_pins[ch].port)) -#elif defined(CONFIG_CPU_SH7757) || defined(CONFIG_CPU_SH7752) +#elif defined(CONFIG_CPU_SH7757) || \ +	defined(CONFIG_CPU_SH7752) || \ +	defined(CONFIG_CPU_SH7753)  # define SCSPTR0 0xfe4b0020  # define SCSPTR1 0xfe4b0020  # define SCSPTR2 0xfe4b0020 diff --git a/drivers/spi/Makefile b/drivers/spi/Makefile index ed4ecd754..d5a7143b5 100644 --- a/drivers/spi/Makefile +++ b/drivers/spi/Makefile @@ -30,6 +30,7 @@ obj-$(CONFIG_OMAP3_SPI) += omap3_spi.o  obj-$(CONFIG_SANDBOX_SPI) += sandbox_spi.o  obj-$(CONFIG_SOFT_SPI) += soft_spi.o  obj-$(CONFIG_SH_SPI) += sh_spi.o +obj-$(CONFIG_SH_QSPI) += sh_qspi.o  obj-$(CONFIG_FSL_ESPI) += fsl_espi.o  obj-$(CONFIG_FDT_SPI) += fdt_spi.o  obj-$(CONFIG_TEGRA20_SFLASH) += tegra20_sflash.o diff --git a/drivers/spi/sh_qspi.c b/drivers/spi/sh_qspi.c new file mode 100644 index 000000000..edeb42d03 --- /dev/null +++ b/drivers/spi/sh_qspi.c @@ -0,0 +1,277 @@ +/* + * SH QSPI (Quad SPI) driver + * + * Copyright (C) 2013 Renesas Electronics Corporation + * Copyright (C) 2013 Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com> + * + * SPDX-License-Identifier:	GPL-2.0 + */ + +#include <common.h> +#include <malloc.h> +#include <spi.h> +#include <asm/io.h> + +/* SH QSPI register bit masks <REG>_<BIT> */ +#define SPCR_MSTR	0x08 +#define SPCR_SPE	0x40 +#define SPSR_SPRFF	0x80 +#define SPSR_SPTEF	0x20 +#define SPPCR_IO3FV	0x04 +#define SPPCR_IO2FV	0x02 +#define SPPCR_IO1FV	0x01 +#define SPBDCR_RXBC0	(1 << 0) +#define SPCMD_SCKDEN	(1 << 15) +#define SPCMD_SLNDEN	(1 << 14) +#define SPCMD_SPNDEN	(1 << 13) +#define SPCMD_SSLKP	(1 << 7) +#define SPCMD_BRDV0	(1 << 2) +#define SPCMD_INIT1	SPCMD_SCKDEN | SPCMD_SLNDEN | \ +			SPCMD_SPNDEN | SPCMD_SSLKP | \ +			SPCMD_BRDV0 +#define SPCMD_INIT2	SPCMD_SPNDEN | SPCMD_SSLKP | \ +			SPCMD_BRDV0 +#define SPBFCR_TXRST	(1 << 7) +#define SPBFCR_RXRST	(1 << 6) + +/* SH QSPI register set */ +struct sh_qspi_regs { +	unsigned char spcr; +	unsigned char sslp; +	unsigned char sppcr; +	unsigned char spsr; +	unsigned long spdr; +	unsigned char spscr; +	unsigned char spssr; +	unsigned char spbr; +	unsigned char spdcr; +	unsigned char spckd; +	unsigned char sslnd; +	unsigned char spnd; +	unsigned char dummy0; +	unsigned short spcmd0; +	unsigned short spcmd1; +	unsigned short spcmd2; +	unsigned short spcmd3; +	unsigned char spbfcr; +	unsigned char dummy1; +	unsigned short spbdcr; +	unsigned long spbmul0; +	unsigned long spbmul1; +	unsigned long spbmul2; +	unsigned long spbmul3; +}; + +struct sh_qspi_slave { +	struct spi_slave	slave; +	struct sh_qspi_regs	*regs; +}; + +static inline struct sh_qspi_slave *to_sh_qspi(struct spi_slave *slave) +{ +	return container_of(slave, struct sh_qspi_slave, slave); +} + +static void sh_qspi_init(struct sh_qspi_slave *ss) +{ +	/* QSPI initialize */ +	/* Set master mode only */ +	writeb(SPCR_MSTR, &ss->regs->spcr); + +	/* Set SSL signal level */ +	writeb(0x00, &ss->regs->sslp); + +	/* Set MOSI signal value when transfer is in idle state */ +	writeb(SPPCR_IO3FV|SPPCR_IO2FV, &ss->regs->sppcr); + +	/* Set bit rate. See 58.3.8 Quad Serial Peripheral Interface */ +	writeb(0x01, &ss->regs->spbr); + +	/* Disable Dummy Data Transmission */ +	writeb(0x00, &ss->regs->spdcr); + +	/* Set clock delay value */ +	writeb(0x00, &ss->regs->spckd); + +	/* Set SSL negation delay value */ +	writeb(0x00, &ss->regs->sslnd); + +	/* Set next-access delay value */ +	writeb(0x00, &ss->regs->spnd); + +	/* Set equence command */ +	writew(SPCMD_INIT2, &ss->regs->spcmd0); + +	/* Reset transfer and receive Buffer */ +	setbits_8(&ss->regs->spbfcr, SPBFCR_TXRST|SPBFCR_RXRST); + +	/* Clear transfer and receive Buffer control bit */ +	clrbits_8(&ss->regs->spbfcr, SPBFCR_TXRST|SPBFCR_RXRST); + +	/* Set equence control method. Use equence0 only */ +	writeb(0x00, &ss->regs->spscr); + +	/* Enable SPI function */ +	setbits_8(&ss->regs->spcr, SPCR_SPE); +} + +int spi_cs_is_valid(unsigned int bus, unsigned int cs) +{ +	return 1; +} + +void spi_cs_activate(struct spi_slave *slave) +{ +	struct sh_qspi_slave *ss = to_sh_qspi(slave); + +	/* Set master mode only */ +	writeb(SPCR_MSTR, &ss->regs->spcr); + +	/* Set command */ +	writew(SPCMD_INIT1, &ss->regs->spcmd0); + +	/* Reset transfer and receive Buffer */ +	setbits_8(&ss->regs->spbfcr, SPBFCR_TXRST|SPBFCR_RXRST); + +	/* Clear transfer and receive Buffer control bit */ +	clrbits_8(&ss->regs->spbfcr, SPBFCR_TXRST|SPBFCR_RXRST); + +	/* Set equence control method. Use equence0 only */ +	writeb(0x00, &ss->regs->spscr); + +	/* Enable SPI function */ +	setbits_8(&ss->regs->spcr, SPCR_SPE); +} + +void spi_cs_deactivate(struct spi_slave *slave) +{ +	struct sh_qspi_slave *ss = to_sh_qspi(slave); + +	/* Disable SPI Function */ +	clrbits_8(&ss->regs->spcr, SPCR_SPE); +} + +void spi_init(void) +{ +	/* nothing to do */ +} + +struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs, +		unsigned int max_hz, unsigned int mode) +{ +	struct sh_qspi_slave *ss; + +	if (!spi_cs_is_valid(bus, cs)) +		return NULL; + +	ss = spi_alloc_slave(struct sh_qspi_slave, bus, cs); +	if (!ss) { +		printf("SPI_error: Fail to allocate sh_qspi_slave\n"); +		return NULL; +	} + +	ss->regs = (struct sh_qspi_regs *)CONFIG_SH_QSPI_BASE; + +	/* Init SH QSPI */ +	sh_qspi_init(ss); + +	return &ss->slave; +} + +void spi_free_slave(struct spi_slave *slave) +{ +	struct sh_qspi_slave *spi = to_sh_qspi(slave); + +	free(spi); +} + +int spi_claim_bus(struct spi_slave *slave) +{ +	return 0; +} + +void spi_release_bus(struct spi_slave *slave) +{ +} + +int spi_xfer(struct spi_slave *slave, unsigned int bitlen, const void *dout, +	     void *din, unsigned long flags) +{ +	struct sh_qspi_slave *ss = to_sh_qspi(slave); +	unsigned long nbyte; +	int ret = 0; +	unsigned char dtdata = 0, drdata; +	unsigned char *tdata = &dtdata, *rdata = &drdata; +	unsigned long *spbmul0 = &ss->regs->spbmul0; + +	if (dout == NULL && din == NULL) { +		if (flags & SPI_XFER_END) +			spi_cs_deactivate(slave); +		return 0; +	} + +	if (bitlen % 8) { +		printf("%s: bitlen is not 8bit alined %d", __func__, bitlen); +		return 1; +	} + +	nbyte = bitlen / 8; + +	if (flags & SPI_XFER_BEGIN) { +		spi_cs_activate(slave); + +		/* Set 1048576 byte */ +		writel(0x100000, spbmul0); +	} + +	if (flags & SPI_XFER_END) +		writel(nbyte, spbmul0); + +	if (dout != NULL) +		tdata = (unsigned char *)dout; + +	if (din != NULL) +		rdata = din; + +	while (nbyte > 0) { +		while (!(readb(&ss->regs->spsr) & SPSR_SPTEF)) { +			if (ctrlc()) { +				puts("abort\n"); +				return 1; +			} +			udelay(10); +		} + +		writeb(*tdata, (unsigned char *)(&ss->regs->spdr)); + +		while ((readw(&ss->regs->spbdcr) != SPBDCR_RXBC0)) { +			if (ctrlc()) { +				puts("abort\n"); +				return 1; +			} +			udelay(1); +		} + +		while (!(readb(&ss->regs->spsr) & SPSR_SPRFF)) { +			if (ctrlc()) { +				puts("abort\n"); +				return 1; +			} +			udelay(10); +		} + +		*rdata = readb((unsigned char *)(&ss->regs->spdr)); + +		if (dout != NULL) +			tdata++; +		if (din != NULL) +			rdata++; + +		nbyte--; +	} + +	if (flags & SPI_XFER_END) +		spi_cs_deactivate(slave); + +	return ret; +} diff --git a/drivers/spi/tegra114_spi.c b/drivers/spi/tegra114_spi.c index 4d2af483d..810fa4718 100644 --- a/drivers/spi/tegra114_spi.c +++ b/drivers/spi/tegra114_spi.c @@ -289,9 +289,6 @@ int tegra114_spi_xfer(struct spi_slave *slave, unsigned int bitlen,  	reg = readl(®s->fifo_status);  	writel(reg, ®s->fifo_status); -	/* clear ready bit */ -	setbits_le32(®s->xfer_status, SPI_XFER_STS_RDY); -  	clrsetbits_le32(®s->command1, SPI_CMD1_CS_SW_VAL,  			SPI_CMD1_RX_EN | SPI_CMD1_TX_EN | SPI_CMD1_LSBY_FE |  			(slave->cs << SPI_CMD1_CS_SEL_SHIFT)); @@ -305,7 +302,6 @@ int tegra114_spi_xfer(struct spi_slave *slave, unsigned int bitlen,  	/* handle data in 32-bit chunks */  	while (num_bytes > 0) {  		int bytes; -		int is_read = 0;  		int tm, i;  		tmpdout = 0; @@ -319,6 +315,9 @@ int tegra114_spi_xfer(struct spi_slave *slave, unsigned int bitlen,  		num_bytes -= bytes; +		/* clear ready bit */ +		setbits_le32(®s->xfer_status, SPI_XFER_STS_RDY); +  		clrsetbits_le32(®s->command1,  				SPI_CMD1_BIT_LEN_MASK << SPI_CMD1_BIT_LEN_SHIFT,  				(bytes * 8 - 1) << SPI_CMD1_BIT_LEN_SHIFT); @@ -329,20 +328,14 @@ int tegra114_spi_xfer(struct spi_slave *slave, unsigned int bitlen,  		 * Wait for SPI transmit FIFO to empty, or to time out.  		 * The RX FIFO status will be read and cleared last  		 */ -		for (tm = 0, is_read = 0; tm < SPI_TIMEOUT; ++tm) { +		for (tm = 0; tm < SPI_TIMEOUT; ++tm) {  			u32 fifo_status, xfer_status; -			fifo_status = readl(®s->fifo_status); - -			/* We can exit when we've had both RX and TX activity */ -			if (is_read && -			    (fifo_status & SPI_FIFO_STS_TX_FIFO_EMPTY)) -				break; -  			xfer_status = readl(®s->xfer_status);  			if (!(xfer_status & SPI_XFER_STS_RDY))  				continue; +			fifo_status = readl(®s->fifo_status);  			if (fifo_status & SPI_FIFO_STS_ERR) {  				debug("%s: got a fifo error: ", __func__);  				if (fifo_status & SPI_FIFO_STS_TX_FIFO_OVF) @@ -367,7 +360,6 @@ int tegra114_spi_xfer(struct spi_slave *slave, unsigned int bitlen,  			if (!(fifo_status & SPI_FIFO_STS_RX_FIFO_EMPTY)) {  				tmpdin = readl(®s->rx_fifo); -				is_read = 1;  				/* swap bytes read in */  				if (din != NULL) { @@ -377,6 +369,9 @@ int tegra114_spi_xfer(struct spi_slave *slave, unsigned int bitlen,  					}  					din += bytes;  				} + +				/* We can exit when we've had both RX and TX */ +				break;  			}  		} diff --git a/drivers/tpm/Makefile b/drivers/tpm/Makefile index 2f2353f80..150570ee7 100644 --- a/drivers/tpm/Makefile +++ b/drivers/tpm/Makefile @@ -8,3 +8,4 @@ obj-$(CONFIG_TPM_ATMEL_TWI) += tpm_atmel_twi.o  obj-$(CONFIG_TPM_TIS_I2C) += tpm.o  obj-$(CONFIG_TPM_TIS_I2C) += tpm_tis_i2c.o  obj-$(CONFIG_TPM_TIS_LPC) += tpm_tis_lpc.o +obj-$(CONFIG_TPM_TIS_SANDBOX) += tpm_tis_sandbox.o diff --git a/drivers/tpm/tpm_tis_sandbox.c b/drivers/tpm/tpm_tis_sandbox.c new file mode 100644 index 000000000..ed4b03912 --- /dev/null +++ b/drivers/tpm/tpm_tis_sandbox.c @@ -0,0 +1,260 @@ +/* + * Copyright (c) 2013 Google, Inc + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#include <common.h> +#include <asm/state.h> +#include <asm/unaligned.h> +#include <linux/crc8.h> + +/* TPM NVRAM location indices. */ +#define FIRMWARE_NV_INDEX		0x1007 +#define KERNEL_NV_INDEX			0x1008 + +#define NV_DATA_PUBLIC_PERMISSIONS_OFFSET	60 + +/* Kernel TPM space - KERNEL_NV_INDEX, locked with physical presence */ +#define ROLLBACK_SPACE_KERNEL_VERSION	2 +#define ROLLBACK_SPACE_KERNEL_UID	0x4752574C  /* 'GRWL' */ + +struct rollback_space_kernel { +	/* Struct version, for backwards compatibility */ +	uint8_t struct_version; +	/* Unique ID to detect space redefinition */ +	uint32_t uid; +	/* Kernel versions */ +	uint32_t kernel_versions; +	/* Reserved for future expansion */ +	uint8_t reserved[3]; +	/* Checksum (v2 and later only) */ +	uint8_t crc8; +} __packed rollback_space_kernel; + +/* + * These numbers derive from adding the sizes of command fields as shown in + * the TPM commands manual. + */ +#define TPM_REQUEST_HEADER_LENGTH	10 +#define TPM_RESPONSE_HEADER_LENGTH	10 + +/* These are the different non-volatile spaces that we emulate */ +enum { +	NV_GLOBAL_LOCK, +	NV_SEQ_FIRMWARE, +	NV_SEQ_KERNEL, +	NV_SEQ_COUNT, +}; + +/* Size of each non-volatile space */ +#define NV_DATA_SIZE		0x20 + +/* + * Information about our TPM emulation. This is preserved in the sandbox + * state file if enabled. + */ +static struct tpm_state { +	uint8_t nvdata[NV_SEQ_COUNT][NV_DATA_SIZE]; +} state; + +/** + * sandbox_tpm_read_state() - read the sandbox EC state from the state file + * + * If data is available, then blob and node will provide access to it. If + * not this function sets up an empty TPM. + * + * @blob: Pointer to device tree blob, or NULL if no data to read + * @node: Node offset to read from + */ +static int sandbox_tpm_read_state(const void *blob, int node) +{ +	const char *prop; +	int len; +	int i; + +	if (!blob) +		return 0; + +	for (i = 0; i < NV_SEQ_COUNT; i++) { +		char prop_name[20]; + +		sprintf(prop_name, "nvdata%d", i); +		prop = fdt_getprop(blob, node, prop_name, &len); +		if (prop && len == NV_DATA_SIZE) +			memcpy(state.nvdata[i], prop, NV_DATA_SIZE); +	} + +	return 0; +} + +/** + * cros_ec_write_state() - Write out our state to the state file + * + * The caller will ensure that there is a node ready for the state. The node + * may already contain the old state, in which case it is overridden. + * + * @blob: Device tree blob holding state + * @node: Node to write our state into + */ +static int sandbox_tpm_write_state(void *blob, int node) +{ +	int i; + +	/* +	 * We are guaranteed enough space to write basic properties. +	 * We could use fdt_add_subnode() to put each set of data in its +	 * own node - perhaps useful if we add access informaiton to each. +	 */ +	for (i = 0; i < NV_SEQ_COUNT; i++) { +		char prop_name[20]; + +		sprintf(prop_name, "nvdata%d", i); +		fdt_setprop(blob, node, prop_name, state.nvdata[i], +			    NV_DATA_SIZE); +	} + +	return 0; +} + +SANDBOX_STATE_IO(sandbox_tpm, "google,sandbox-tpm", sandbox_tpm_read_state, +		 sandbox_tpm_write_state); + +static int index_to_seq(uint32_t index) +{ +	switch (index) { +	case FIRMWARE_NV_INDEX: +		return NV_SEQ_FIRMWARE; +	case KERNEL_NV_INDEX: +		return NV_SEQ_KERNEL; +	case 0: +		return NV_GLOBAL_LOCK; +	} + +	printf("Invalid nv index %#x\n", index); +	return -1; +} + +int tis_sendrecv(const u8 *sendbuf, size_t send_size, +		 u8 *recvbuf, size_t *recv_len) +{ +	struct tpm_state *tpm = &state; +	uint32_t code, index, length, type; +	uint8_t *data; +	int seq; + +	code = get_unaligned_be32(sendbuf + sizeof(uint16_t) + +				  sizeof(uint32_t)); +	printf("tpm: %zd bytes, recv_len %zd, cmd = %x\n", send_size, +	       *recv_len, code); +	print_buffer(0, sendbuf, 1, send_size, 0); +	switch (code) { +	case 0x65: /* get flags */ +		type = get_unaligned_be32(sendbuf + 14); +		switch (type) { +		case 4: +			index = get_unaligned_be32(sendbuf + 18); +			printf("Get flags index %#02x\n", index); +			*recv_len = 22; +			memset(recvbuf, '\0', *recv_len); +			put_unaligned_be32(22, recvbuf + +					   TPM_RESPONSE_HEADER_LENGTH); +			data = recvbuf + TPM_RESPONSE_HEADER_LENGTH + +					sizeof(uint32_t); +			switch (index) { +			case FIRMWARE_NV_INDEX: +				break; +			case KERNEL_NV_INDEX: +				/* TPM_NV_PER_PPWRITE */ +				put_unaligned_be32(1, data + +					NV_DATA_PUBLIC_PERMISSIONS_OFFSET); +				break; +			} +			break; +		case 0x11: /* TPM_CAP_NV_INDEX */ +			index = get_unaligned_be32(sendbuf + 18); +			printf("Get cap nv index %#02x\n", index); +			put_unaligned_be32(22, recvbuf + +					   TPM_RESPONSE_HEADER_LENGTH); +			break; +		default: +			printf("   ** Unknown 0x65 command type %#02x\n", +			       type); +			return -1; +		} +		break; +	case 0xcd: /* nvwrite */ +		index = get_unaligned_be32(sendbuf + 10); +		length = get_unaligned_be32(sendbuf + 18); +		seq = index_to_seq(index); +		if (seq < 0) +			return -1; +		printf("tpm: nvwrite index=%#02x, len=%#02x\n", index, length); +		memcpy(&tpm->nvdata[seq], sendbuf + 22, length); +		*recv_len = 12; +		memset(recvbuf, '\0', *recv_len); +		break; +	case 0xcf: /* nvread */ +		index = get_unaligned_be32(sendbuf + 10); +		length = get_unaligned_be32(sendbuf + 18); +		seq = index_to_seq(index); +		if (seq < 0) +			return -1; +		printf("tpm: nvread index=%#02x, len=%#02x\n", index, length); +		*recv_len = TPM_RESPONSE_HEADER_LENGTH + sizeof(uint32_t) + +					length; +		memset(recvbuf, '\0', *recv_len); +		put_unaligned_be32(length, recvbuf + +				   TPM_RESPONSE_HEADER_LENGTH); +		if (seq == NV_SEQ_KERNEL) { +			struct rollback_space_kernel rsk; + +			data = recvbuf + TPM_RESPONSE_HEADER_LENGTH + +					sizeof(uint32_t); +			rsk.struct_version = 2; +			rsk.uid = ROLLBACK_SPACE_KERNEL_UID; +			rsk.kernel_versions = 0; +			rsk.crc8 = crc8((unsigned char *)&rsk, +					offsetof(struct rollback_space_kernel, +						 crc8)); +			memcpy(data, &rsk, sizeof(rsk)); +		} else { +			memcpy(recvbuf + TPM_RESPONSE_HEADER_LENGTH + +			       sizeof(uint32_t), &tpm->nvdata[seq], length); +		} +		break; +	case 0x14: /* tpm extend */ +	case 0x15: /* pcr read */ +	case 0x5d: /* force clear */ +	case 0x6f: /* physical enable */ +	case 0x72: /* physical set deactivated */ +	case 0x99: /* startup */ +	case 0x4000000a:  /* assert physical presence */ +		*recv_len = 12; +		memset(recvbuf, '\0', *recv_len); +		break; +	default: +		printf("Unknown tpm command %02x\n", code); +		return -1; +	} + +	return 0; +} + +int tis_open(void) +{ +	printf("%s\n", __func__); +	return 0; +} + +int tis_close(void) +{ +	printf("%s\n", __func__); +	return 0; +} + +int tis_init(void) +{ +	printf("%s\n", __func__); +	return 0; +} diff --git a/drivers/usb/gadget/Makefile b/drivers/usb/gadget/Makefile index f52d3f450..f13b172a6 100644 --- a/drivers/usb/gadget/Makefile +++ b/drivers/usb/gadget/Makefile @@ -5,12 +5,8 @@  # SPDX-License-Identifier:	GPL-2.0+  # -# if defined(CONFIG_USB_GADGET) || defined(CONFIG_USB_ETHER) -#   Everytime you forget how crufty makefiles can get things like -#   this remind you... -ifneq (,$(CONFIG_USB_GADGET)$(CONFIG_USB_ETHER)) -obj-y += epautoconf.o config.o usbstring.o -endif +obj-$(CONFIG_USB_GADGET) += epautoconf.o config.o usbstring.o +obj-$(CONFIG_USB_ETHER) += epautoconf.o config.o usbstring.o  # new USB gadget layer dependencies  ifdef CONFIG_USB_GADGET diff --git a/drivers/usb/gadget/f_dfu.c b/drivers/usb/gadget/f_dfu.c index 37d04a192..a045864d7 100644 --- a/drivers/usb/gadget/f_dfu.c +++ b/drivers/usb/gadget/f_dfu.c @@ -40,6 +40,7 @@ struct f_dfu {  	/* Send/received block number is handy for data integrity check */  	int                             blk_seq_num; +	unsigned int                    poll_timeout;  };  typedef int (*dfu_state_fn) (struct f_dfu *, @@ -128,6 +129,33 @@ static struct usb_gadget_strings *dfu_strings[] = {  	NULL,  }; +static void dfu_set_poll_timeout(struct dfu_status *dstat, unsigned int ms) +{ +	/* +	 * The bwPollTimeout DFU_GETSTATUS request payload provides information +	 * about minimum time, in milliseconds, that the host should wait before +	 * sending a subsequent DFU_GETSTATUS request +	 * +	 * This permits the device to vary the delay depending on its need to +	 * erase or program the memory +	 * +	 */ + +	unsigned char *p = (unsigned char *)&ms; + +	if (!ms || (ms & ~DFU_POLL_TIMEOUT_MASK)) { +		dstat->bwPollTimeout[0] = 0; +		dstat->bwPollTimeout[1] = 0; +		dstat->bwPollTimeout[2] = 0; + +		return; +	} + +	dstat->bwPollTimeout[0] = *p++; +	dstat->bwPollTimeout[1] = *p++; +	dstat->bwPollTimeout[2] = *p; +} +  /*-------------------------------------------------------------------------*/  static void dnload_request_complete(struct usb_ep *ep, struct usb_request *req) @@ -157,11 +185,15 @@ static void handle_getstatus(struct usb_request *req)  		break;  	} +	dfu_set_poll_timeout(dstat, 0); + +	if (f_dfu->poll_timeout) +		if (!(f_dfu->blk_seq_num % +		      (dfu_get_buf_size() / DFU_USB_BUFSIZ))) +			dfu_set_poll_timeout(dstat, f_dfu->poll_timeout); +  	/* send status response */  	dstat->bStatus = f_dfu->dfu_status; -	dstat->bwPollTimeout[0] = 0; -	dstat->bwPollTimeout[1] = 0; -	dstat->bwPollTimeout[2] = 0;  	dstat->bState = f_dfu->dfu_state;  	dstat->iString = 0;  } @@ -723,8 +755,9 @@ static int dfu_bind_config(struct usb_configuration *c)  	f_dfu->usb_function.unbind = dfu_unbind;  	f_dfu->usb_function.set_alt = dfu_set_alt;  	f_dfu->usb_function.disable = dfu_disable; -	f_dfu->usb_function.strings = dfu_generic_strings, -	f_dfu->usb_function.setup = dfu_handle, +	f_dfu->usb_function.strings = dfu_generic_strings; +	f_dfu->usb_function.setup = dfu_handle; +	f_dfu->poll_timeout = DFU_DEFAULT_POLL_TIMEOUT;  	status = usb_add_function(c, &f_dfu->usb_function);  	if (status) diff --git a/drivers/usb/gadget/f_dfu.h b/drivers/usb/gadget/f_dfu.h index cc2c45567..0c29954ad 100644 --- a/drivers/usb/gadget/f_dfu.h +++ b/drivers/usb/gadget/f_dfu.h @@ -82,4 +82,6 @@ struct dfu_function_descriptor {  	__le16				wTransferSize;  	__le16				bcdDFUVersion;  } __packed; + +#define DFU_POLL_TIMEOUT_MASK           (0xFFFFFFUL)  #endif /* __F_DFU_H_ */ diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c index 8bd1eb8a9..17187caed 100644 --- a/drivers/usb/host/ehci-hcd.c +++ b/drivers/usb/host/ehci-hcd.c @@ -201,6 +201,9 @@ static int ehci_shutdown(struct ehci_ctrl *ctrl)  	int i, ret = 0;  	uint32_t cmd, reg; +	if (!ctrl || !ctrl->hcor) +		return -EINVAL; +  	cmd = ehci_readl(&ctrl->hcor->or_usbcmd);  	cmd &= ~(CMD_PSE | CMD_ASE);  	ehci_writel(&ctrl->hcor->or_usbcmd, cmd); @@ -945,7 +948,7 @@ int usb_lowlevel_init(int index, enum usb_init_type init, void **controller)  #endif  	/* Set the high address word (aka segment) for 64-bit controller */  	if (ehci_readl(&ehcic[index].hccr->cr_hccparams) & 1) -		ehci_writel(ehcic[index].hcor->or_ctrldssegment, 0); +		ehci_writel(&ehcic[index].hcor->or_ctrldssegment, 0);  	qh_list = &ehcic[index].qh_list; diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c index 7a1ffe5e2..991b19998 100644 --- a/drivers/usb/host/ehci-pci.c +++ b/drivers/usb/host/ehci-pci.c @@ -54,9 +54,31 @@ static pci_dev_t ehci_find_class(int index)  					bdf += PCI_BDF(0, 0, 1)) {  				pci_read_config_dword(bdf, PCI_CLASS_REVISION,  						      &class); -				if ((class >> 8 == PCI_CLASS_SERIAL_USB_EHCI) -						&& !index--) -					return bdf; +				class >>= 8; +				/* +				 * Here be dragons! In case we have multiple +				 * PCI EHCI controllers, this function will +				 * be called multiple times as well. This +				 * function will scan the PCI busses, always +				 * starting from bus 0, device 0, function 0, +				 * until it finds an USB controller. The USB +				 * stack gives us an 'index' of a controller +				 * that is currently being registered, which +				 * is a number, starting from 0 and growing +				 * in ascending order as controllers are added. +				 * To avoid probing the same controller in tne +				 * subsequent runs of this function, we will +				 * skip 'index - 1' detected controllers and +				 * report the index'th controller. +				 */ +				if (class != PCI_CLASS_SERIAL_USB_EHCI) +					continue; +				if (index) { +					index--; +					continue; +				} +				/* Return index'th controller. */ +				return bdf;  			}  		}  	} diff --git a/drivers/video/ipu_disp.c b/drivers/video/ipu_disp.c index 22ac1429b..cefd2dc14 100644 --- a/drivers/video/ipu_disp.c +++ b/drivers/video/ipu_disp.c @@ -889,7 +889,7 @@ int32_t ipu_init_sync_panel(int disp, uint32_t pixel_clk,  	debug("panel size = %d x %d\n", width, height);  	if ((v_sync_width == 0) || (h_sync_width == 0)) -		return EINVAL; +		return -EINVAL;  	adapt_panel_to_ipu_restricitions(&pixel_clk, width, height,  					 h_start_width, h_end_width, diff --git a/dts/Makefile b/dts/Makefile index 140c8bc5e..6c7198f65 100644 --- a/dts/Makefile +++ b/dts/Makefile @@ -10,7 +10,7 @@  ifeq ($(DEVICE_TREE),)  $(if $(CONFIG_DEFAULT_DEVICE_TREE),,\  $(error Please define CONFIG_DEFAULT_DEVICE_TREE in your board header file)) -DEVICE_TREE = $(subst ",,$(CONFIG_DEFAULT_DEVICE_TREE)) +DEVICE_TREE = $(CONFIG_DEFAULT_DEVICE_TREE:"%"=%)  endif  DTS_INCDIRS =  $(SRCTREE)/board/$(VENDOR)/$(BOARD)/dts diff --git a/examples/standalone/.gitignore b/examples/standalone/.gitignore index 4d9ce6640..6d3a6166d 100644 --- a/examples/standalone/.gitignore +++ b/examples/standalone/.gitignore @@ -1,6 +1,4 @@ -/82559_eeprom  /atmel_df_pow2 -/eepro100_eeprom  /hello_world  /interrupt  /mem_to_mem_idma2intr diff --git a/examples/standalone/82559_eeprom.c b/examples/standalone/82559_eeprom.c deleted file mode 100644 index c253055c0..000000000 --- a/examples/standalone/82559_eeprom.c +++ /dev/null @@ -1,356 +0,0 @@ -/* - * Copyright 1998-2001 by Donald Becker. - * This software may be used and distributed according to the terms of - * the GNU General Public License (GPL), incorporated herein by reference. - * Contact the author for use under other terms. - * - * This program must be compiled with "-O"! - * See the bottom of this file for the suggested compile-command. - * - * The author may be reached as becker@scyld.com, or C/O - *  Scyld Computing Corporation - *  410 Severn Ave., Suite 210 - *  Annapolis MD 21403 - * - * Common-sense licensing statement: Using any portion of this program in - * your own program means that you must give credit to the original author - * and release the resulting code under the GPL. - */ - -#define _PPC_STRING_H_		/* avoid unnecessary str/mem functions */ - -#include <common.h> -#include <exports.h> -#include <asm/io.h> - - -/* Default EEPROM for i82559 */ -static unsigned short default_eeprom[64] = { -	0x0100, 0x0302, 0x0504, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, -	0xffff, 0xffff, 0x40c0, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, -	0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, -	0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, -	0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, -	0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, -	0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, -	0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff -}; - -static unsigned short eeprom[256]; - -static int eeprom_size = 64; -static int eeprom_addr_size = 6; - -static int debug = 0; - -static inline unsigned short swap16(unsigned short x) -{ -	return (((x & 0xff) << 8) | ((x & 0xff00) >> 8)); -} - - -void * memcpy(void * dest,const void *src,size_t count) -{ -	char *tmp = (char *) dest, *s = (char *) src; - -	while (count--) -		*tmp++ = *s++; - -	return dest; -} - - -/* The EEPROM commands include the alway-set leading bit. */ -#define EE_WRITE_CMD	(5) -#define EE_READ_CMD		(6) -#define EE_ERASE_CMD	(7) - -/* Serial EEPROM section. */ -#define EE_SHIFT_CLK	0x01	/* EEPROM shift clock. */ -#define EE_CS			0x02	/* EEPROM chip select. */ -#define EE_DATA_WRITE	0x04	/* EEPROM chip data in. */ -#define EE_DATA_READ	0x08	/* EEPROM chip data out. */ -#define EE_ENB			(0x4800 | EE_CS) -#define EE_WRITE_0		0x4802 -#define EE_WRITE_1		0x4806 -#define EE_OFFSET		14 - -/* Delay between EEPROM clock transitions. */ -#define eeprom_delay(ee_addr)	inw(ee_addr) - -/* Wait for the EEPROM to finish the previous operation. */ -static int eeprom_busy_poll(long ee_ioaddr) -{ -	int i; -	outw(EE_ENB, ee_ioaddr); -	for (i = 0; i < 10000; i++)			/* Typical 2000 ticks */ -		if (inw(ee_ioaddr) & EE_DATA_READ) -			break; -	return i; -} - -/* This executes a generic EEPROM command, typically a write or write enable. -   It returns the data output from the EEPROM, and thus may also be used for -   reads. */ -static int do_eeprom_cmd(long ioaddr, int cmd, int cmd_len) -{ -	unsigned retval = 0; -	long ee_addr = ioaddr + EE_OFFSET; - -	if (debug > 1) -		printf(" EEPROM op 0x%x: ", cmd); - -	outw(EE_ENB | EE_SHIFT_CLK, ee_addr); - -	/* Shift the command bits out. */ -	do { -		short dataval = (cmd & (1 << cmd_len)) ? EE_WRITE_1 : EE_WRITE_0; -		outw(dataval, ee_addr); -		eeprom_delay(ee_addr); -		if (debug > 2) -			printf("%X", inw(ee_addr) & 15); -		outw(dataval | EE_SHIFT_CLK, ee_addr); -		eeprom_delay(ee_addr); -		retval = (retval << 1) | ((inw(ee_addr) & EE_DATA_READ) ? 1 : 0); -	} while (--cmd_len >= 0); -#if 0 -	outw(EE_ENB, ee_addr); -#endif -	/* Terminate the EEPROM access. */ -	outw(EE_ENB & ~EE_CS, ee_addr); -	if (debug > 1) -		printf(" EEPROM result is 0x%5.5x.\n", retval); -	return retval; -} - -static int read_eeprom(long ioaddr, int location, int addr_len) -{ -	return do_eeprom_cmd(ioaddr, ((EE_READ_CMD << addr_len) | location) -		<< 16 , 3 + addr_len + 16) & 0xffff; -} - -static void write_eeprom(long ioaddr, int index, int value, int addr_len) -{ -	long ee_ioaddr = ioaddr + EE_OFFSET; -	int i; - -	/* Poll for previous op finished. */ -	eeprom_busy_poll(ee_ioaddr);			/* Typical 0 ticks */ -	/* Enable programming modes. */ -	do_eeprom_cmd(ioaddr, (0x4f << (addr_len-4)), 3 + addr_len); -	/* Do the actual write. */ -	do_eeprom_cmd(ioaddr, -				  (((EE_WRITE_CMD<<addr_len) | index)<<16) | (value & 0xffff), -				  3 + addr_len + 16); -	/* Poll for write finished. */ -	i = eeprom_busy_poll(ee_ioaddr);			/* Typical 2000 ticks */ -	if (debug) -		printf(" Write finished after %d ticks.\n", i); -	/* Disable programming. This command is not instantaneous, so we check -	   for busy before the next op. */ -	do_eeprom_cmd(ioaddr, (0x40 << (addr_len-4)), 3 + addr_len); -	eeprom_busy_poll(ee_ioaddr); -} - -static int reset_eeprom(unsigned long ioaddr, unsigned char *hwaddr) -{ -	unsigned short checksum = 0; -	int size_test; -	int i; - -	printf("Resetting i82559 EEPROM @ 0x%08lx ... ", ioaddr); - -	size_test = do_eeprom_cmd(ioaddr, (EE_READ_CMD << 8) << 16, 27); -	eeprom_addr_size = (size_test & 0xffe0000) == 0xffe0000 ? 8 : 6; -	eeprom_size = 1 << eeprom_addr_size; - -	memcpy(eeprom, default_eeprom, sizeof default_eeprom); - -	for (i = 0; i < 3; i++) -		eeprom[i] = (hwaddr[i*2+1]<<8) + hwaddr[i*2]; - -	/* Recalculate the checksum. */ -	for (i = 0; i < eeprom_size - 1; i++) -		checksum += eeprom[i]; -	eeprom[i] = 0xBABA - checksum; - -	for (i = 0; i < eeprom_size; i++) -		write_eeprom(ioaddr, i, eeprom[i], eeprom_addr_size); - -	for (i = 0; i < eeprom_size; i++) -		if (read_eeprom(ioaddr, i, eeprom_addr_size) != eeprom[i]) { -			printf("failed\n"); -			return 1; -		} - -	printf("done\n"); -	return 0; -} - -static unsigned int hatoi(char *p, char **errp) -{ -	unsigned int res = 0; - -	while (1) { -		switch (*p) { -		case 'a': -		case 'b': -		case 'c': -		case 'd': -		case 'e': -		case 'f': -			res |= (*p - 'a' + 10); -			break; -		case 'A': -		case 'B': -		case 'C': -		case 'D': -		case 'E': -		case 'F': -			res |= (*p - 'A' + 10); -			break; -		case '0': -		case '1': -		case '2': -		case '3': -		case '4': -		case '5': -		case '6': -		case '7': -		case '8': -		case '9': -			res |= (*p - '0'); -			break; -		default: -			if (errp) { -				*errp = p; -			} -		return res; -		} -		p++; -		if (*p == 0) { -			break; -		} -		res <<= 4; -	} - -	if (errp) { -		*errp = NULL; -	} - -	return res; -} - -static unsigned char *gethwaddr(char *in, unsigned char *out) -{ -	char tmp[3]; -	int i; -	char *err; - -	for (i=0;i<6;i++) { -		if (in[i*3+2] == 0 && i == 5) { -			out[i] = hatoi(&in[i*3], &err); -			if (err) { -				return NULL; -			} -		} else if (in[i*3+2] == ':' && i < 5) { -			tmp[0] = in[i*3]; -			tmp[1] = in[i*3+1]; -			tmp[2] = 0; -			out[i] = hatoi(tmp, &err); -			if (err) { -				return NULL; -			} -		} else { -			return NULL; -		} -	} - -	return out; -} - -static u32 -read_config_dword(int bus, int dev, int func, int reg) -{ -	u32 res; - -	outl(0x80000000|(bus&0xff)<<16|(dev&0x1f)<<11|(func&7)<<8|(reg&0xfc), -	     0xcf8); -	res = inl(0xcfc); -	outl(0, 0xcf8); -	return res; -} - -static u16 -read_config_word(int bus, int dev, int func, int reg) -{ -	u32 res; - -	outl(0x80000000|(bus&0xff)<<16|(dev&0x1f)<<11|(func&7)<<8|(reg&0xfc), -	     0xcf8); -	res = inw(0xcfc + (reg & 2)); -	outl(0, 0xcf8); -	return res; -} - -static void -write_config_word(int bus, int dev, int func, int reg, u16 data) -{ - -	outl(0x80000000|(bus&0xff)<<16|(dev&0x1f)<<11|(func&7)<<8|(reg&0xfc), -	     0xcf8); -	outw(data, 0xcfc + (reg & 2)); -	outl(0, 0xcf8); -} - - -int main (int argc, char * const argv[]) -{ -	unsigned char *eth_addr; -	uchar buf[6]; -	int instance; - -	app_startup(argv); -	if (argc != 2) { -		printf ("call with base Ethernet address\n"); -		return 1; -	} - - -	eth_addr = gethwaddr(argv[1], buf); -	if (NULL == eth_addr) { -		printf ("Can not parse ethernet address\n"); -		return 1; -	} -	if (eth_addr[5] & 0x01) { -		printf("Base Ethernet address must be even\n"); -	} - - -	for (instance = 0; instance < 2; instance ++)  { -		unsigned int io_addr; -		unsigned char mac[6]; -		int bar1 = read_config_dword(0, 6+instance, 0, 0x14); -		if (! (bar1 & 1)) { -			printf("ETH%d is disabled %x\n", instance, bar1); -		} else { -			printf("ETH%d IO=0x%04x\n", instance, bar1 & ~3); -		} -		io_addr = (bar1 & (~3L)); - - -		write_config_word(0, 6+instance, 0, 4, -				  read_config_word(0, 6+instance, 0, 4) | 1); -		printf("ETH%d CMD %04x\n", instance, -			   read_config_word(0, 6+instance, 0, 4)); - -		memcpy(mac, eth_addr, 6); -		mac[5] += instance; - -		printf("got io=%04x, ha=%02x:%02x:%02x:%02x:%02x:%02x\n", -			   io_addr, mac[0], mac[1], mac[2], -			   mac[3], mac[4], mac[5]); -		reset_eeprom(io_addr, mac); -	} -	return 0; -} diff --git a/examples/standalone/Makefile b/examples/standalone/Makefile index f4f102b3e..0841c758f 100644 --- a/examples/standalone/Makefile +++ b/examples/standalone/Makefile @@ -7,25 +7,22 @@  include $(TOPDIR)/config.mk -ELF-$(ARCH)  := -ELF-$(CPU)   :=  ELF-y        := hello_world  ELF-$(CONFIG_SMC91111)           += smc91111_eeprom  ELF-$(CONFIG_SMC911X)            += smc911x_eeprom  ELF-$(CONFIG_SPI_FLASH_ATMEL)    += atmel_df_pow2 -ELF-i386                         += 82559_eeprom -ELF-mpc5xxx                      += interrupt -ELF-mpc8xx                       += test_burst timer -ELF-mpc8260                      += mem_to_mem_idma2intr -ELF-ppc                          += sched +ELF-$(CONFIG_MPC5xxx)            += interrupt +ELF-$(CONFIG_8xx)                += test_burst timer +ELF-$(CONFIG_8260)               += mem_to_mem_idma2intr +ELF-$(CONFIG_PPC)                += sched  #  # Some versions of make do not handle trailing white spaces properly;  # leading to build failures. The problem was found with GNU Make 3.80.  # Using 'strip' as a workaround for the problem.  # -ELF := $(strip $(ELF-y) $(ELF-$(ARCH)) $(ELF-$(CPU))) +ELF := $(strip $(ELF-y))  SREC := $(addsuffix .srec,$(ELF))  BIN  := $(addsuffix .bin,$(ELF)) @@ -34,11 +31,9 @@ COBJS	:= $(ELF:=.o)  LIB	= $(obj)libstubs.o -LIBAOBJS-$(ARCH)     := -LIBAOBJS-$(CPU)      := -LIBAOBJS-ppc         += $(ARCH)_longjmp.o $(ARCH)_setjmp.o -LIBAOBJS-mpc8xx      += test_burst_lib.o -LIBAOBJS := $(LIBAOBJS-$(ARCH)) $(LIBAOBJS-$(CPU)) +LIBAOBJS-$(CONFIG_PPC) += ppc_longjmp.o ppc_setjmp.o +LIBAOBJS-$(CONFIG_8xx) += test_burst_lib.o +LIBAOBJS := $(LIBAOBJS-y)  LIBCOBJS = stubs.o diff --git a/fs/jffs2/jffs2_1pass.c b/fs/jffs2/jffs2_1pass.c index c856983ef..3fb5db383 100644 --- a/fs/jffs2/jffs2_1pass.c +++ b/fs/jffs2/jffs2_1pass.c @@ -114,6 +114,7 @@  #include <common.h>  #include <config.h>  #include <malloc.h> +#include <div64.h>  #include <linux/stat.h>  #include <linux/time.h>  #include <watchdog.h> @@ -1438,7 +1439,7 @@ jffs2_1pass_build_lists(struct part_info * part)  {  	struct b_lists *pL;  	struct jffs2_unknown_node *node; -	u32 nr_sectors = part->size/part->sector_size; +	u32 nr_sectors;  	u32 i;  	u32 counter4 = 0;  	u32 counterF = 0; @@ -1447,6 +1448,7 @@ jffs2_1pass_build_lists(struct part_info * part)  	u32 buf_size = DEFAULT_EMPTY_SCAN_SIZE;  	char *buf; +	nr_sectors = lldiv(part->size, part->sector_size);  	/* turn off the lcd.  Refreshing the lcd adds 50% overhead to the */  	/* jffs2 list building enterprise nope.  in newer versions the overhead is */  	/* only about 5 %.  not enough to inconvenience people for. */ diff --git a/fs/yaffs2/yaffs_uboot_glue.c b/fs/yaffs2/yaffs_uboot_glue.c index e113e4039..50000a135 100644 --- a/fs/yaffs2/yaffs_uboot_glue.c +++ b/fs/yaffs2/yaffs_uboot_glue.c @@ -20,6 +20,7 @@   */  #include <common.h> +#include <div64.h>  #include <config.h>  #include "nand.h" @@ -184,7 +185,7 @@ void cmd_yaffs_devconfig(char *_mp, int flash_dev,  	}  	if (end_block == 0) -		end_block = mtd->size / mtd->erasesize - 1; +		end_block = lldiv(mtd->size, mtd->erasesize - 1);  	if (end_block < start_block) {  		printf("Bad start/end\n"); diff --git a/fs/yaffs2/yaffsfs.c b/fs/yaffs2/yaffsfs.c index ac4a010bd..334598eed 100644 --- a/fs/yaffs2/yaffsfs.c +++ b/fs/yaffs2/yaffsfs.c @@ -11,6 +11,7 @@   * published by the Free Software Foundation.   */ +#include <div64.h>  #include "yaffsfs.h"  #include "yaffs_guts.h"  #include "yaffscfg.h" @@ -1603,8 +1604,8 @@ static int yaffsfs_DoStat(struct yaffs_obj *obj, struct yaffs_stat *buf)  		buf->st_rdev = obj->yst_rdev;  		buf->st_size = yaffs_get_obj_length(obj);  		buf->st_blksize = obj->my_dev->data_bytes_per_chunk; -		buf->st_blocks = (buf->st_size + buf->st_blksize - 1) / -		    buf->st_blksize; +		buf->st_blocks = lldiv(buf->st_size + buf->st_blksize - 1, +		    buf->st_blksize);  #if CONFIG_YAFFS_WINCE  		buf->yst_wince_atime[0] = obj->win_atime[0];  		buf->yst_wince_atime[1] = obj->win_atime[1]; diff --git a/include/common.h b/include/common.h index 8ca67f64f..d49c51464 100644 --- a/include/common.h +++ b/include/common.h @@ -698,6 +698,10 @@ ulong get_ddr_freq(ulong);  #if defined(CONFIG_MPC85xx)  typedef MPC85xx_SYS_INFO sys_info_t;  void	get_sys_info  ( sys_info_t * ); +#  if defined(CONFIG_OF_LIBFDT) +	void ft_fixup_cpu(void *, u64); +	void ft_fixup_num_cores(void *); +#  endif  #endif  #if defined(CONFIG_MPC86xx)  typedef MPC86xx_SYS_INFO sys_info_t; diff --git a/include/config_defaults.h b/include/config_defaults.h index 567b46c87..ad08c1d33 100644 --- a/include/config_defaults.h +++ b/include/config_defaults.h @@ -14,6 +14,7 @@  #define CONFIG_BOOTM_NETBSD 1  #define CONFIG_BOOTM_PLAN9 1  #define CONFIG_BOOTM_RTEMS 1 +#define CONFIG_BOOTM_VXWORKS 1  #define CONFIG_GZIP 1  #define CONFIG_ZLIB 1 diff --git a/include/config_fallbacks.h b/include/config_fallbacks.h index 3633b09aa..d8339b26c 100644 --- a/include/config_fallbacks.h +++ b/include/config_fallbacks.h @@ -50,7 +50,8 @@  	defined(CONFIG_CMD_PART) || \  	defined(CONFIG_CMD_GPT) || \  	defined(CONFIG_MMC) || \ -	defined(CONFIG_SYSTEMACE) +	defined(CONFIG_SYSTEMACE) || \ +	defined(CONFIG_SANDBOX)  #define HAVE_BLOCK_DEVICE  #endif diff --git a/include/configs/B4860QDS.h b/include/configs/B4860QDS.h index b2a5c19e0..c182158be 100644 --- a/include/configs/B4860QDS.h +++ b/include/configs/B4860QDS.h @@ -289,6 +289,8 @@ unsigned long get_board_ddr_clk(void);  /* NAND Flash on IFC */  #define CONFIG_NAND_FSL_IFC +#define CONFIG_SYS_NAND_MAX_ECCPOS	256 +#define CONFIG_SYS_NAND_MAX_OOBFREE	2  #define CONFIG_SYS_NAND_BASE		0xff800000  #ifdef CONFIG_PHYS_64BIT  #define CONFIG_SYS_NAND_BASE_PHYS	(0xf00000000ull | CONFIG_SYS_NAND_BASE) @@ -737,7 +739,6 @@ unsigned long get_board_ddr_clk(void);  #ifdef CONFIG_CMD_KGDB  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/BSC9131RDB.h b/include/configs/BSC9131RDB.h index 499d8c205..584aba8d0 100644 --- a/include/configs/BSC9131RDB.h +++ b/include/configs/BSC9131RDB.h @@ -29,7 +29,7 @@  #define CONFIG_SPL_INIT_MINIMAL  #define CONFIG_SPL_SERIAL_SUPPORT  #define CONFIG_SPL_NAND_SUPPORT -#define CONFIG_SPL_NAND_MINIMAL +#define CONFIG_SPL_NAND_BOOT  #define CONFIG_SPL_FLUSH_IMAGE  #define CONFIG_SPL_TARGET		"u-boot-with-spl.bin" @@ -382,7 +382,6 @@ extern unsigned long get_sdram_size(void);  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  #define CONFIG_USB_EHCI diff --git a/include/configs/BSC9132QDS.h b/include/configs/BSC9132QDS.h index a6601fee8..6170cbc81 100644 --- a/include/configs/BSC9132QDS.h +++ b/include/configs/BSC9132QDS.h @@ -38,7 +38,7 @@  #define CONFIG_SPL_INIT_MINIMAL  #define CONFIG_SPL_SERIAL_SUPPORT  #define CONFIG_SPL_NAND_SUPPORT -#define CONFIG_SPL_NAND_MINIMAL +#define CONFIG_SPL_NAND_BOOT  #define CONFIG_SPL_FLUSH_IMAGE  #define CONFIG_SPL_TARGET		"u-boot-with-spl.bin" @@ -625,7 +625,6 @@ combinations. this should be removed later  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/CMS700.h b/include/configs/CMS700.h index 4a5fc864a..0bb22be9f 100644 --- a/include/configs/CMS700.h +++ b/include/configs/CMS700.h @@ -149,6 +149,9 @@  #define CONFIG_SYS_NAND_SKIP_BAD_DOT_I 1       /* ".i" read skips bad blocks   */  #define CONFIG_SYS_NAND_QUIET          1 +#define CONFIG_SYS_NAND_MAX_OOBFREE	2 +#define CONFIG_SYS_NAND_MAX_ECCPOS	48 +  /*   * For booting Linux, the board info and command line data   * have to be in the first 8 MB of memory, since this is diff --git a/include/configs/DU440.h b/include/configs/DU440.h index 2d7fc59ea..71be1224f 100644 --- a/include/configs/DU440.h +++ b/include/configs/DU440.h @@ -406,7 +406,6 @@ int du440_phy_addr(int devnum);  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  #define CONFIG_SOURCE		1 diff --git a/include/configs/EXBITGEN.h b/include/configs/EXBITGEN.h index f366308f4..208b599f6 100644 --- a/include/configs/EXBITGEN.h +++ b/include/configs/EXBITGEN.h @@ -186,6 +186,5 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  #endif	/* __CONFIG_H */ diff --git a/include/configs/JSE.h b/include/configs/JSE.h index 4284d6a3a..5738ea97a 100644 --- a/include/configs/JSE.h +++ b/include/configs/JSE.h @@ -274,6 +274,5 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  #endif	/* __CONFIG_H */ diff --git a/include/configs/KAREF.h b/include/configs/KAREF.h index 71e90d77d..39eb2ef13 100644 --- a/include/configs/KAREF.h +++ b/include/configs/KAREF.h @@ -273,7 +273,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE  230400	     /* kgdb serial port baud	*/ -#define CONFIG_KGDB_SER_INDEX 2		     /* kgdb serial port	*/  #endif  /*----------------------------------------------------------------------- diff --git a/include/configs/METROBOX.h b/include/configs/METROBOX.h index 32ec0bf06..67154353d 100644 --- a/include/configs/METROBOX.h +++ b/include/configs/METROBOX.h @@ -338,7 +338,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE  230400	     /* kgdb serial port baud	*/ -#define CONFIG_KGDB_SER_INDEX 2		     /* kgdb serial port	*/  #endif  /*----------------------------------------------------------------------- diff --git a/include/configs/MIP405.h b/include/configs/MIP405.h index f248a5642..6042a1e3c 100644 --- a/include/configs/MIP405.h +++ b/include/configs/MIP405.h @@ -396,7 +396,6 @@   ************************************************************/  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /************************************************************ diff --git a/include/configs/MPC8315ERDB.h b/include/configs/MPC8315ERDB.h index 0f9f436e3..aedb529f8 100644 --- a/include/configs/MPC8315ERDB.h +++ b/include/configs/MPC8315ERDB.h @@ -634,7 +634,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed of kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/MPC8323ERDB.h b/include/configs/MPC8323ERDB.h index a1e5f3b2b..c4c771b50 100644 --- a/include/configs/MPC8323ERDB.h +++ b/include/configs/MPC8323ERDB.h @@ -481,7 +481,6 @@  #if (CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed of kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/MPC832XEMDS.h b/include/configs/MPC832XEMDS.h index 71fc497e7..f5b62025d 100644 --- a/include/configs/MPC832XEMDS.h +++ b/include/configs/MPC832XEMDS.h @@ -574,7 +574,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed of kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/MPC8349EMDS.h b/include/configs/MPC8349EMDS.h index 037484104..7640d06ee 100644 --- a/include/configs/MPC8349EMDS.h +++ b/include/configs/MPC8349EMDS.h @@ -737,7 +737,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed of kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/MPC8349ITX.h b/include/configs/MPC8349ITX.h index e2ae59632..ffb9a158a 100644 --- a/include/configs/MPC8349ITX.h +++ b/include/configs/MPC8349ITX.h @@ -730,7 +730,6 @@ boards, we say we have two, but don't display a message if we find only one. */  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed of kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif diff --git a/include/configs/MPC8360EMDS.h b/include/configs/MPC8360EMDS.h index ed780f17f..d4c82cd66 100644 --- a/include/configs/MPC8360EMDS.h +++ b/include/configs/MPC8360EMDS.h @@ -683,7 +683,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed of kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/MPC8360ERDK.h b/include/configs/MPC8360ERDK.h index d31be1973..01e7ac768 100644 --- a/include/configs/MPC8360ERDK.h +++ b/include/configs/MPC8360ERDK.h @@ -544,7 +544,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed of kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/MPC837XEMDS.h b/include/configs/MPC837XEMDS.h index 98ffb9c29..f52e77a3a 100644 --- a/include/configs/MPC837XEMDS.h +++ b/include/configs/MPC837XEMDS.h @@ -662,7 +662,6 @@ extern int board_pci_host_broken(void);  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed of kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/MPC837XERDB.h b/include/configs/MPC837XERDB.h index ca28c0eb2..938f7ab3c 100644 --- a/include/configs/MPC837XERDB.h +++ b/include/configs/MPC837XERDB.h @@ -678,7 +678,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed of kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/MPC8536DS.h b/include/configs/MPC8536DS.h index 9ab1bc106..9b7cc6474 100644 --- a/include/configs/MPC8536DS.h +++ b/include/configs/MPC8536DS.h @@ -740,7 +740,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/MPC8540ADS.h b/include/configs/MPC8540ADS.h index 046b14bdd..2d42b2512 100644 --- a/include/configs/MPC8540ADS.h +++ b/include/configs/MPC8540ADS.h @@ -397,7 +397,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif diff --git a/include/configs/MPC8541CDS.h b/include/configs/MPC8541CDS.h index eca3b537b..b9ad03422 100644 --- a/include/configs/MPC8541CDS.h +++ b/include/configs/MPC8541CDS.h @@ -410,7 +410,6 @@ extern unsigned long get_clock_freq(void);  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/MPC8544DS.h b/include/configs/MPC8544DS.h index 8132ec055..90fc2da34 100644 --- a/include/configs/MPC8544DS.h +++ b/include/configs/MPC8544DS.h @@ -441,7 +441,6 @@ extern unsigned long get_board_sys_clk(unsigned long dummy);  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/MPC8548CDS.h b/include/configs/MPC8548CDS.h index 6acd54db8..5fff1e2ca 100644 --- a/include/configs/MPC8548CDS.h +++ b/include/configs/MPC8548CDS.h @@ -535,7 +535,6 @@ extern unsigned long get_clock_freq(void);  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/MPC8555CDS.h b/include/configs/MPC8555CDS.h index 5ffdd0162..23c6b07c3 100644 --- a/include/configs/MPC8555CDS.h +++ b/include/configs/MPC8555CDS.h @@ -408,7 +408,6 @@ extern unsigned long get_clock_freq(void);  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/MPC8560ADS.h b/include/configs/MPC8560ADS.h index bb9ae2dcb..44b767919 100644 --- a/include/configs/MPC8560ADS.h +++ b/include/configs/MPC8560ADS.h @@ -438,7 +438,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif diff --git a/include/configs/MPC8568MDS.h b/include/configs/MPC8568MDS.h index 7406ac3be..4f438a807 100644 --- a/include/configs/MPC8568MDS.h +++ b/include/configs/MPC8568MDS.h @@ -430,7 +430,6 @@ extern unsigned long get_clock_freq(void);  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/MPC8569MDS.h b/include/configs/MPC8569MDS.h index df5572b3a..d877e8bbd 100644 --- a/include/configs/MPC8569MDS.h +++ b/include/configs/MPC8569MDS.h @@ -566,7 +566,6 @@ extern unsigned long get_clock_freq(void);  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/MPC8572DS.h b/include/configs/MPC8572DS.h index 63480ecb0..44d83a236 100644 --- a/include/configs/MPC8572DS.h +++ b/include/configs/MPC8572DS.h @@ -682,7 +682,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/MPC8610HPCD.h b/include/configs/MPC8610HPCD.h index 41ebe31dd..f930fcde3 100644 --- a/include/configs/MPC8610HPCD.h +++ b/include/configs/MPC8610HPCD.h @@ -517,7 +517,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/MPC8641HPCN.h b/include/configs/MPC8641HPCN.h index 0e666bac0..65d61c28d 100644 --- a/include/configs/MPC8641HPCN.h +++ b/include/configs/MPC8641HPCN.h @@ -670,7 +670,6 @@ extern unsigned long get_board_sys_clk(unsigned long dummy);  #if defined(CONFIG_CMD_KGDB)      #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -    #define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/MigoR.h b/include/configs/MigoR.h index 9fd455142..88df94f11 100644 --- a/include/configs/MigoR.h +++ b/include/configs/MigoR.h @@ -10,8 +10,6 @@  #define __MIGO_R_H  #undef DEBUG -#define CONFIG_SH		1 -#define CONFIG_SH4		1  #define CONFIG_CPU_SH7722	1  #define CONFIG_MIGO_R		1 diff --git a/include/configs/P1010RDB.h b/include/configs/P1010RDB.h index 1ed5e1df2..ea5cb6501 100644 --- a/include/configs/P1010RDB.h +++ b/include/configs/P1010RDB.h @@ -37,7 +37,7 @@  #define CONFIG_SPL_INIT_MINIMAL  #define CONFIG_SPL_SERIAL_SUPPORT  #define CONFIG_SPL_NAND_SUPPORT -#define CONFIG_SPL_NAND_MINIMAL +#define CONFIG_SPL_NAND_BOOT  #define CONFIG_SPL_FLUSH_IMAGE  #define CONFIG_SPL_TARGET		"u-boot-with-spl.bin" @@ -739,7 +739,6 @@ extern unsigned long get_sdram_size(void);  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/P1022DS.h b/include/configs/P1022DS.h index 262c3e5f1..934a6cb7a 100644 --- a/include/configs/P1022DS.h +++ b/include/configs/P1022DS.h @@ -75,6 +75,8 @@  #endif  #define CONFIG_NAND_FSL_ELBC +#define CONFIG_SYS_NAND_MAX_ECCPOS	56 +#define CONFIG_SYS_NAND_MAX_OOBFREE	5  #ifdef CONFIG_NAND  #define CONFIG_SPL @@ -725,7 +727,6 @@  #ifdef CONFIG_CMD_KGDB  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/P1023RDS.h b/include/configs/P1023RDS.h index 2aa1f59ea..11c74ff5f 100644 --- a/include/configs/P1023RDS.h +++ b/include/configs/P1023RDS.h @@ -469,7 +469,6 @@ extern unsigned long get_clock_freq(void);  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/P1_P2_RDB.h b/include/configs/P1_P2_RDB.h index b592c1966..85cb0767e 100644 --- a/include/configs/P1_P2_RDB.h +++ b/include/configs/P1_P2_RDB.h @@ -606,7 +606,6 @@ extern unsigned long get_board_sys_clk(unsigned long dummy);  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/P2020COME.h b/include/configs/P2020COME.h index 15d2a43cd..ce3c76255 100644 --- a/include/configs/P2020COME.h +++ b/include/configs/P2020COME.h @@ -432,7 +432,6 @@ extern unsigned long get_board_sys_clk(unsigned long dummy);  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/P2020DS.h b/include/configs/P2020DS.h index 9d3d9b33e..ada6c7b87 100644 --- a/include/configs/P2020DS.h +++ b/include/configs/P2020DS.h @@ -670,7 +670,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/P2041RDB.h b/include/configs/P2041RDB.h index b238574b5..ee71252b0 100644 --- a/include/configs/P2041RDB.h +++ b/include/configs/P2041RDB.h @@ -677,7 +677,6 @@ unsigned long get_board_sys_clk(unsigned long dummy);  #ifdef CONFIG_CMD_KGDB  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/PIP405.h b/include/configs/PIP405.h index 118072486..29888b4e1 100644 --- a/include/configs/PIP405.h +++ b/include/configs/PIP405.h @@ -353,7 +353,6 @@   ************************************************************/  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /************************************************************ diff --git a/include/configs/PMC440.h b/include/configs/PMC440.h index 5ab9315b1..efe69601f 100644 --- a/include/configs/PMC440.h +++ b/include/configs/PMC440.h @@ -492,7 +492,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* pass open firmware flat tree */ diff --git a/include/configs/T1040QDS.h b/include/configs/T1040QDS.h index 43a577800..7d0bc043f 100644 --- a/include/configs/T1040QDS.h +++ b/include/configs/T1040QDS.h @@ -233,6 +233,7 @@ unsigned long get_board_ddr_clk(void);  #define QIXIS_RCFG_CTL_RECONFIG_IDLE	0x20  #define QIXIS_RCFG_CTL_RECONFIG_START	0x21  #define QIXIS_RCFG_CTL_WATCHDOG_ENBLE	0x08 +#define	QIXIS_RST_FORCE_MEM		0x01  #define CONFIG_SYS_CSPR3_EXT	(0xf)  #define CONFIG_SYS_CSPR3	(CSPR_PHYS_ADDR(QIXIS_BASE_PHYS) \ @@ -248,7 +249,7 @@ unsigned long get_board_ddr_clk(void);  #define CONFIG_SYS_CS3_FTIM1		(FTIM1_GPCM_TACO(0xff) | \  					FTIM1_GPCM_TRAD(0x3f))  #define CONFIG_SYS_CS3_FTIM2		(FTIM2_GPCM_TCS(0x0e) | \ -					FTIM2_GPCM_TCH(0x0) | \ +					FTIM2_GPCM_TCH(0x8) | \  					FTIM2_GPCM_TWP(0x1f))  #define CONFIG_SYS_CS3_FTIM3		0x0 @@ -682,7 +683,6 @@ unsigned long get_board_ddr_clk(void);  #ifdef CONFIG_CMD_KGDB  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/T1040RDB.h b/include/configs/T1040RDB.h index 79312311d..d721139a1 100644 --- a/include/configs/T1040RDB.h +++ b/include/configs/T1040RDB.h @@ -609,7 +609,6 @@  #ifdef CONFIG_CMD_KGDB  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/T1042RDB_PI.h b/include/configs/T1042RDB_PI.h index eff08e380..2c02d9da5 100644 --- a/include/configs/T1042RDB_PI.h +++ b/include/configs/T1042RDB_PI.h @@ -613,7 +613,6 @@  #ifdef CONFIG_CMD_KGDB  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/TQM834x.h b/include/configs/TQM834x.h index fc254256a..15cf2bd79 100644 --- a/include/configs/TQM834x.h +++ b/include/configs/TQM834x.h @@ -495,7 +495,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed of kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/VCMA9.h b/include/configs/VCMA9.h index 57b620d48..d40185e1e 100644 --- a/include/configs/VCMA9.h +++ b/include/configs/VCMA9.h @@ -138,8 +138,6 @@  #if defined(CONFIG_CMD_KGDB)  /* speed to run kgdb serial port */  #define CONFIG_KGDB_BAUDRATE		115200 -/* what's this ? it's not used anywhere */ -#define CONFIG_KGDB_SER_INDEX		2	/* which serial port to use */  #endif  /* Miscellaneous configurable options */ diff --git a/include/configs/W7OLMC.h b/include/configs/W7OLMC.h index 8fda1b1ea..00a24ab84 100644 --- a/include/configs/W7OLMC.h +++ b/include/configs/W7OLMC.h @@ -301,7 +301,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400		/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2		/* which serial port to use	*/  #endif  /* diff --git a/include/configs/W7OLMG.h b/include/configs/W7OLMG.h index 6836fc7b5..8ed2fa2d8 100644 --- a/include/configs/W7OLMG.h +++ b/include/configs/W7OLMG.h @@ -304,7 +304,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400		/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2		/* which serial port to use	*/  #endif  /* diff --git a/include/configs/ac14xx.h b/include/configs/ac14xx.h index 1205557d8..d6cef888c 100644 --- a/include/configs/ac14xx.h +++ b/include/configs/ac14xx.h @@ -471,7 +471,6 @@  #ifdef CONFIG_CMD_KGDB  #define CONFIG_KGDB_BAUDRATE		230400	/* speed of kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX		2	/* which serial port to use */  #endif  /* diff --git a/include/configs/actux1.h b/include/configs/actux1.h index 3315f54f3..9b8bd7894 100644 --- a/include/configs/actux1.h +++ b/include/configs/actux1.h @@ -58,8 +58,6 @@  #if defined(CONFIG_CMD_KGDB)  # define CONFIG_KGDB_BAUDRATE		230400 -/* which serial port to use */ -# define CONFIG_KGDB_SER_INDEX		1  #endif  /* Miscellaneous configurable options */ diff --git a/include/configs/actux2.h b/include/configs/actux2.h index fb391ecd5..f0cbff79c 100644 --- a/include/configs/actux2.h +++ b/include/configs/actux2.h @@ -51,8 +51,6 @@  #if defined(CONFIG_CMD_KGDB)  # define CONFIG_KGDB_BAUDRATE		230400 -/* which serial port to use */ -# define CONFIG_KGDB_SER_INDEX		1  #endif  /* Miscellaneous configurable options */ diff --git a/include/configs/actux3.h b/include/configs/actux3.h index 61d96f5ed..763910745 100644 --- a/include/configs/actux3.h +++ b/include/configs/actux3.h @@ -49,8 +49,6 @@  #if defined(CONFIG_CMD_KGDB)  # define CONFIG_KGDB_BAUDRATE		230400 -/* which serial port to use */ -# define CONFIG_KGDB_SER_INDEX		1  #endif  /* Miscellaneous configurable options */ diff --git a/include/configs/actux4.h b/include/configs/actux4.h index 23872794e..12bd98a7e 100644 --- a/include/configs/actux4.h +++ b/include/configs/actux4.h @@ -56,8 +56,6 @@  #if defined(CONFIG_CMD_KGDB)  # define CONFIG_KGDB_BAUDRATE		230400 -/* which serial port to use */ -# define CONFIG_KGDB_SER_INDEX		1  #endif  /* Miscellaneous configurable options */ diff --git a/include/configs/alpr.h b/include/configs/alpr.h index 61fdebac3..08bba3609 100644 --- a/include/configs/alpr.h +++ b/include/configs/alpr.h @@ -349,7 +349,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* pass open firmware flat tree */ diff --git a/include/configs/amcc-common.h b/include/configs/amcc-common.h index c9e9a038d..0f38c92fa 100644 --- a/include/configs/amcc-common.h +++ b/include/configs/amcc-common.h @@ -125,7 +125,6 @@   */  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port*/ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use	*/  #endif  /* diff --git a/include/configs/ap325rxa.h b/include/configs/ap325rxa.h index 933de52c5..462b2e291 100644 --- a/include/configs/ap325rxa.h +++ b/include/configs/ap325rxa.h @@ -11,8 +11,6 @@  #define __AP325RXA_H  #undef DEBUG -#define CONFIG_SH		1 -#define CONFIG_SH4		1  #define CONFIG_CPU_SH7723	1  #define CONFIG_AP325RXA	1 diff --git a/include/configs/ap_sh4a_4a.h b/include/configs/ap_sh4a_4a.h index 83a5c37e4..bb39491f8 100644 --- a/include/configs/ap_sh4a_4a.h +++ b/include/configs/ap_sh4a_4a.h @@ -10,9 +10,6 @@  #define __AP_SH4A_4A_H  #undef DEBUG -#define CONFIG_SH		1 -#define CONFIG_SH4		1 -#define CONFIG_SH4A		1  #define CONFIG_CPU_SH7734	1  #define CONFIG_AP_SH4A_4A	1  #define CONFIG_400MHZ_MODE	1 diff --git a/include/configs/aria.h b/include/configs/aria.h index 32216cd50..b8d955abd 100644 --- a/include/configs/aria.h +++ b/include/configs/aria.h @@ -507,7 +507,6 @@  #ifdef CONFIG_CMD_KGDB  #define CONFIG_KGDB_BAUDRATE		230400	/* speed of kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX		2	/* which serial port to use */  #endif  /* diff --git a/include/configs/arndale.h b/include/configs/arndale.h index b7fb29ea7..7e367f39b 100644 --- a/include/configs/arndale.h +++ b/include/configs/arndale.h @@ -85,6 +85,7 @@  #define CONFIG_DWMMC  #define CONFIG_EXYNOS_DWMMC  #define CONFIG_SUPPORT_EMMC_BOOT +#define CONFIG_BOUNCE_BUFFER  #define CONFIG_BOARD_EARLY_INIT_F diff --git a/include/configs/balloon3.h b/include/configs/balloon3.h index d3d62744f..b41a82360 100644 --- a/include/configs/balloon3.h +++ b/include/configs/balloon3.h @@ -61,7 +61,6 @@   */  #ifdef	CONFIG_CMD_KGDB  #define	CONFIG_KGDB_BAUDRATE		230400	/* kgdb serial port speed */ -#define	CONFIG_KGDB_SER_INDEX		2	/* which serial port to use */  #endif  /* diff --git a/include/configs/bf506f-ezkit.h b/include/configs/bf506f-ezkit.h index 5ad3ee70d..eed2d5bce 100644 --- a/include/configs/bf506f-ezkit.h +++ b/include/configs/bf506f-ezkit.h @@ -56,6 +56,7 @@  /*   * Flash Settings   */ +  #define CONFIG_FLASH_CFI_DRIVER  #define CONFIG_SYS_FLASH_BASE		0x20000000  #define CONFIG_SYS_FLASH_CFI @@ -63,7 +64,9 @@  #define CONFIG_SYS_MAX_FLASH_SECT	71  #define CONFIG_CMD_FLASH  #define CONFIG_MONITOR_IS_IN_RAM - +/* +#define CONFIG_SYS_NO_FLASH +*/  /*   * SPI Settings @@ -71,11 +74,12 @@  #define CONFIG_BFIN_SPI  #define CONFIG_ENV_SPI_MAX_HZ	30000000  #define CONFIG_SF_DEFAULT_SPEED	30000000 +/*  #define CONFIG_SPI_FLASH  #define CONFIG_SPI_FLASH_STMICRO  #define CONFIG_CMD_SF  #define CONFIG_CMD_SPI - +*/  /*   * Env Storage Settings diff --git a/include/configs/bf561-acvilon.h b/include/configs/bf561-acvilon.h index ee585c0ff..15ca1af23 100644 --- a/include/configs/bf561-acvilon.h +++ b/include/configs/bf561-acvilon.h @@ -53,7 +53,7 @@  #define CONFIG_EBIU_AMBCTL0_VAL		0xffc2ffc2  #define CONFIG_EBIU_AMBCTL1_VAL		0x99b35554 -#define CONFIG_SYS_MONITOR_LEN		(256 * 1024) +#define CONFIG_SYS_MONITOR_LEN		(384 * 1024)  #define CONFIG_SYS_MALLOC_LEN		(128 * 1024) diff --git a/include/configs/bf561-ezkit.h b/include/configs/bf561-ezkit.h index 404039ac2..fb6f94873 100644 --- a/include/configs/bf561-ezkit.h +++ b/include/configs/bf561-ezkit.h @@ -90,6 +90,7 @@   */  #define CONFIG_SYS_I2C_SOFT  #ifdef CONFIG_SYS_I2C_SOFT +#define CONFIG_SYS_I2C  #define CONFIG_SOFT_I2C_GPIO_SCL GPIO_PF0  #define CONFIG_SOFT_I2C_GPIO_SDA GPIO_PF1  #define I2C_DELAY		udelay(5)	/* 1/4 I2C clock duration */ diff --git a/include/configs/blackvme.h b/include/configs/blackvme.h index cd37f9adb..6e5774c6b 100644 --- a/include/configs/blackvme.h +++ b/include/configs/blackvme.h @@ -177,6 +177,7 @@  #define CONFIG_BAUDRATE		57600  #define CONFIG_LOADS_ECHO	1  #define CONFIG_UART_CONSOLE	0 +#define CONFIG_BFIN_SERIAL  /*   * U-Boot environment variables. Use "printenv" to examine. diff --git a/include/configs/cm-bf537e.h b/include/configs/cm-bf537e.h index 8f10eba46..2838012e2 100644 --- a/include/configs/cm-bf537e.h +++ b/include/configs/cm-bf537e.h @@ -55,7 +55,7 @@  #define CONFIG_EBIU_AMBCTL0_VAL	(B1WAT_7 | B1RAT_11 | B1HT_2 | B1ST_3 | B0WAT_7 | B0RAT_11 | B0HT_2 | B0ST_3)  #define CONFIG_EBIU_AMBCTL1_VAL	(B3WAT_7 | B3RAT_11 | B3HT_2 | B3ST_3 | B2WAT_7 | B2RAT_11 | B2HT_2 | B2ST_3) -#define CONFIG_SYS_MONITOR_LEN	(512 * 1024) +#define CONFIG_SYS_MONITOR_LEN	(768 * 1024)  #define CONFIG_SYS_MALLOC_LEN	(128 * 1024) @@ -145,7 +145,7 @@  #define FLASHBOOT_ENV_SETTINGS \  	"flashboot=flread 20040000 1000000 3c0000;" \  	"bootm 0x1000000\0" - +#define CONFIG_BOARD_SIZE_LIMIT $$((384 * 1024))  /*   * Pull in common ADI header for remaining command/environment setup diff --git a/include/configs/cm-bf537u.h b/include/configs/cm-bf537u.h index a1c8e8a85..da4cc6718 100644 --- a/include/configs/cm-bf537u.h +++ b/include/configs/cm-bf537u.h @@ -54,7 +54,7 @@  #define CONFIG_EBIU_AMBCTL0_VAL	(B1WAT_7 | B1RAT_11 | B1HT_2 | B1ST_3 | B0WAT_7 | B0RAT_11 | B0HT_2 | B0ST_3)  #define CONFIG_EBIU_AMBCTL1_VAL	(B3WAT_7 | B3RAT_11 | B3HT_2 | B3ST_3 | B2WAT_7 | B2RAT_11 | B2HT_2 | B2ST_3) -#define CONFIG_SYS_MONITOR_LEN	(512 * 1024) +#define CONFIG_SYS_MONITOR_LEN	(768 * 1024)  #define CONFIG_SYS_MALLOC_LEN	(128 * 1024) @@ -142,6 +142,7 @@  #define FLASHBOOT_ENV_SETTINGS \  	"flashboot=flread 20040000 1000000 300000;" \  	"bootm 0x1000000\0" +#define CONFIG_BOARD_SIZE_LIMIT $$((384 * 1024))  /* diff --git a/include/configs/coreboot.h b/include/configs/coreboot.h index 556b42a38..d1d732f21 100644 --- a/include/configs/coreboot.h +++ b/include/configs/coreboot.h @@ -204,7 +204,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE			115200 -#define CONFIG_KGDB_SER_INDEX			2  #endif  /* diff --git a/include/configs/corenet_ds.h b/include/configs/corenet_ds.h index 665295c1a..969b9903f 100644 --- a/include/configs/corenet_ds.h +++ b/include/configs/corenet_ds.h @@ -672,7 +672,6 @@  #ifdef CONFIG_CMD_KGDB  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/csb272.h b/include/configs/csb272.h index ca0bffa72..8a848bea8 100644 --- a/include/configs/csb272.h +++ b/include/configs/csb272.h @@ -99,7 +99,6 @@   */  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/csb472.h b/include/configs/csb472.h index 596095d21..5c034175c 100644 --- a/include/configs/csb472.h +++ b/include/configs/csb472.h @@ -98,7 +98,6 @@   */  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/dra7xx_evm.h b/include/configs/dra7xx_evm.h index 48b47cbd0..f210ed8b9 100644 --- a/include/configs/dra7xx_evm.h +++ b/include/configs/dra7xx_evm.h @@ -60,6 +60,7 @@  #define CONFIG_SPI_FLASH_SPANSION  #define CONFIG_CMD_SF  #define CONFIG_CMD_SPI +#define CONFIG_SPI_FLASH_BAR  #define CONFIG_TI_SPI_MMAP  #define CONFIG_SF_DEFAULT_SPEED                48000000  #define CONFIG_DEFAULT_SPI_MODE                SPI_MODE_3 diff --git a/include/configs/dvlhost.h b/include/configs/dvlhost.h index 87b331484..1af7f1698 100644 --- a/include/configs/dvlhost.h +++ b/include/configs/dvlhost.h @@ -57,8 +57,6 @@  #if defined(CONFIG_CMD_KGDB)  # define CONFIG_KGDB_BAUDRATE		230400 -/* which serial port to use */ -# define CONFIG_KGDB_SER_INDEX		1  #endif  /* Miscellaneous configurable options */ diff --git a/include/configs/ecovec.h b/include/configs/ecovec.h index 3483cf1f5..3a5cc7482 100644 --- a/include/configs/ecovec.h +++ b/include/configs/ecovec.h @@ -23,9 +23,6 @@   */  #undef DEBUG -#define CONFIG_SH		1 -#define CONFIG_SH4		1 -#define CONFIG_SH4A		1  #define CONFIG_CPU_SH7724	1  #define CONFIG_BOARD_LATE_INIT		1  #define CONFIG_ECOVEC		1 diff --git a/include/configs/espt.h b/include/configs/espt.h index 1bd7eeceb..de16be70b 100644 --- a/include/configs/espt.h +++ b/include/configs/espt.h @@ -10,8 +10,6 @@  #ifndef __ESPT_H  #define __ESPT_H -#define CONFIG_SH		1 -#define CONFIG_SH4		1  #define CONFIG_CPU_SH7763	1  #define CONFIG_ESPT	1  #define __LITTLE_ENDIAN		1 diff --git a/include/configs/exynos5-dt.h b/include/configs/exynos5-dt.h index d684790f8..414db420d 100644 --- a/include/configs/exynos5-dt.h +++ b/include/configs/exynos5-dt.h @@ -98,6 +98,7 @@  #define CONFIG_DWMMC  #define CONFIG_EXYNOS_DWMMC  #define CONFIG_SUPPORT_EMMC_BOOT +#define CONFIG_BOUNCE_BUFFER  #define CONFIG_BOARD_EARLY_INIT_F  #define CONFIG_SKIP_LOWLEVEL_INIT diff --git a/include/configs/km/kmp204x-common.h b/include/configs/km/kmp204x-common.h index 7700b38c2..50330ccf6 100644 --- a/include/configs/km/kmp204x-common.h +++ b/include/configs/km/kmp204x-common.h @@ -385,7 +385,6 @@ unsigned long get_board_sys_clk(unsigned long dummy);  #ifdef CONFIG_CMD_KGDB  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  #define __USB_PHY_TYPE	utmi diff --git a/include/configs/korat.h b/include/configs/korat.h index b09af199c..811ff995e 100644 --- a/include/configs/korat.h +++ b/include/configs/korat.h @@ -542,7 +542,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400 /* speed to run kgdb serial port	*/ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use	*/  #endif  /* Pass open firmware flat tree */ diff --git a/include/configs/linkstation.h b/include/configs/linkstation.h deleted file mode 100644 index fcd809dfb..000000000 --- a/include/configs/linkstation.h +++ /dev/null @@ -1,504 +0,0 @@ -/* - * Copyright (C) 2006 Mihai Georgian <u-boot@linuxnotincluded.org.uk> - * - * SPDX-License-Identifier:	GPL-2.0+ - */ - -#ifndef __CONFIG_H -#define __CONFIG_H - -/* - * Valid values for CONFIG_SYS_TEXT_BASE are: - * - * Standard configuration - all models - * 0xFFF00000	boot from flash - * - * Test configuration (boot from RAM using uloader.o) - * LinkStation HD-HLAN and KuroBox Standard - * 0x03F00000	boot from RAM - * LinkStation HD-HGLAN and KuroBox HG - * 0x07F00000	boot from RAM - */ -#ifndef CONFIG_SYS_TEXT_BASE -#define CONFIG_SYS_TEXT_BASE	0xFFF00000 -#endif - -#if 0 -#define DEBUG -#endif - -#define CONFIG_BOARD_EARLY_INIT_F 1	/* Call board_early_init_f	*/ - -/*----------------------------------------------------------------------- - * User configurable settings: - *   Mandatory settings: - *     CONFIG_IPADDR_LS		- the IP address of the LinkStation - *     CONFIG_SERVERIP_LS	- the address of the server for NFS/TFTP/DHCP/BOOTP - *   Optional settins: - *     CONFIG_NCIP_LS		- the adress of the computer running net console - *							  if not configured, it will be set to - *							  CONFIG_SERVERIP_LS - */ - - -#define CONFIG_IPADDR_LS	192.168.11.150 -#define CONFIG_SERVERIP_LS	192.168.11.149 - -#if !defined(CONFIG_IPADDR_LS) || !defined(CONFIG_SERVERIP_LS) -#error Both CONFIG_IPADDR_LS and CONFIG_SERVERIP_LS must be defined -#endif - -#if !defined(CONFIG_NCIP_LS) -#define CONFIG_NCIP_LS		CONFIG_SERVERIP_LS -#endif - -/*---------------------------------------------------------------------- - * DO NOT CHANGE ANYTHING BELOW, UNLESS YOU KNOW WHAT YOU ARE DOING - *---------------------------------------------------------------------*/ - -#define CONFIG_MPC8245		1 -#define CONFIG_LINKSTATION	1 - -/*--------------------------------------- - * Supported models - * - * LinkStation HDLAN /KuroBox Standard (CONFIG_HLAN) - * LinkStation old model               (CONFIG_LAN) - totally untested - * LinkStation HGLAN / KuroBox HG      (CONFIG_HGLAN) - * - * Models not supported yet - * TeraStatin                          (CONFIG_HTGL) - */ - -#if defined(CONFIG_HLAN) || defined(CONFIG_LAN) -#define CONFIG_IDENT_STRING		" LinkStation / KuroBox" -#elif defined(CONFIG_HGLAN) -#define CONFIG_IDENT_STRING		" LinkStation HG / KuroBox HG" -#elif defined(CONFIG_HTGL) -#define CONFIG_IDENT_STRING		" TeraStation" -#else -#error No LinkStation model defined -#endif - -#define CONFIG_BOOTDELAY	5 -#define CONFIG_ZERO_BOOTDELAY_CHECK -#undef CONFIG_BOOT_RETRY_TIME - -#define CONFIG_AUTOBOOT_KEYED -#define CONFIG_AUTOBOOT_PROMPT		\ -	"Boot in %02d seconds ('s' to stop)...", bootdelay -#define CONFIG_AUTOBOOT_STOP_STR	"s" - -#define CONFIG_CMD_IDE -#define CONFIG_CMD_PCI -#define CONFIG_CMD_DHCP -#define CONFIG_CMD_PING -#define CONFIG_CMD_EXT2 - -#define CONFIG_BOOTP_SUBNETMASK -#define CONFIG_BOOTP_GATEWAY -#define CONFIG_BOOTP_HOSTNAME -#define CONFIG_BOOTP_NISDOMAIN -#define CONFIG_BOOTP_BOOTPATH -#define CONFIG_BOOTP_BOOTFILESIZE -#define CONFIG_BOOTP_DNS -#define CONFIG_BOOTP_DNS2 -#define CONFIG_BOOTP_SEND_HOSTNAME -#define CONFIG_BOOTP_NTPSERVER -#define CONFIG_BOOTP_TIMEOFFSET - -#define CONFIG_OF_LIBFDT	1 - -#define OF_STDOUT_PATH		"/soc10x/serial@80004600" - -/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */ -#include <config_cmd_default.h> - -/* - * Miscellaneous configurable options - */ -#define CONFIG_SYS_LONGHELP				/* undef to save memory		*/ -#define CONFIG_SYS_CBSIZE		256		/* Console I/O Buffer Size	*/ - -#define CONFIG_SYS_PBSIZE		(CONFIG_SYS_CBSIZE + sizeof(CONFIG_SYS_PROMPT) + 16) -#define CONFIG_SYS_MAXARGS		16		/* Max number of command args	*/ -#define CONFIG_SYS_BARGSIZE		CONFIG_SYS_CBSIZE	/* Boot Argument Buffer Size	*/ -#define CONFIG_SYS_LOAD_ADDR		0x00800000	/* Default load address: 8 MB	*/ - -#define CONFIG_BOOTCOMMAND	"run bootcmd1" -#define CONFIG_BOOTARGS		"root=/dev/sda1 console=ttyS1,57600 netconsole=@192.168.1.7/eth0,@192.168.1.1/00:50:BF:A4:59:71 rtc-rs5c372.probe=0,0x32 debug" -#define CONFIG_NFSBOOTCOMMAND	"bootp;run nfsargs;bootm" - -#define CONFIG_SYS_CONSOLE_IS_IN_ENV - -#if defined(CONFIG_HLAN) || defined(CONFIG_LAN) -#define UBFILE			"share/u-boot/u-boot-hd.flash.bin" -#elif defined(CONFIG_HGLAN) -#define UBFILE			"share/u-boot/u-boot-hg.flash.bin" -#elif defined(CONFIG_HTGL) -#define UBFILE			"share/u-boot/u-boot-ht.flash.bin" -#else -#error No LinkStation model defined -#endif - -#define CONFIG_EXTRA_ENV_SETTINGS						\ -	"autoload=no\0"								\ -	"stdin=nc\0"								\ -	"stdout=nc\0"								\ -	"stderr=nc\0"								\ -	"ipaddr="__stringify(CONFIG_IPADDR_LS)"\0"			\ -	"netmask=255.255.255.0\0"						\ -	"serverip="__stringify(CONFIG_SERVERIP_LS)"\0"			\ -	"ncip="__stringify(CONFIG_NCIP_LS)"\0"				\ -	"netretry=no\0"								\ -	"nc=setenv stdin nc;setenv stdout nc;setenv stderr nc\0"		\ -	"ser=setenv stdin serial;setenv stdout serial;setenv stderr serial\0"	\ -	"ldaddr=800000\0"							\ -	"hdpart=0:1\0"								\ -	"hdfile=boot/uImage\0"							\ -	"hdload=echo Loading ${hdpart}:${hdfile};ext2load ide ${hdpart} ${ldaddr} ${hdfile};ext2load ide ${hdpart} 7f0000 boot/kuroboxHG.dtb\0"	\ -	"boothd=setenv bootargs " CONFIG_BOOTARGS ";bootm ${ldaddr} - 7f0000\0"	\ -	"hdboot=run hdload;run boothd\0"					\ -	"flboot=setenv bootargs root=/dev/hda1;bootm ffc00000\0"		\ -	"emboot=setenv bootargs root=/dev/ram0;bootm ffc00000\0"		\ -	"nfsargs=setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} "	\ -	"ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off\0"	\ -	"bootretry=30\0"							\ -	"bootcmd1=run hdboot;run flboot\0"					\ -	"bootcmd2=run flboot\0"							\ -	"bootcmd3=run emboot\0"							\ -	"writeng=protect off fff70000 fff7ffff;era fff70000 fff7ffff;mw.l 800000 4e474e47 1;cp.b 800000 fff70000 4\0" \ -	"writeok=protect off fff70000 fff7ffff;era fff70000 fff7ffff;mw.l 800000 4f4b4f4b 1;cp.b 800000 fff70000 4\0" \ -	"ubpart=0:3\0"								\ -	"ubfile="UBFILE"\0"							\ -	"ubload=echo Loading ${ubpart}:${ubfile};ext2load ide ${ubpart} ${ldaddr} ${ubfile}\0" \ -	"ubsaddr=fff00000\0"							\ -	"ubeaddr=fff2ffff\0"							\ -	"ubflash=protect off ${ubsaddr} ${ubeaddr};era ${ubsaddr} ${ubeaddr};cp.b ${ldaddr} ${ubsaddr} ${filesize};cmp.b ${ldaddr} ${ubsaddr} ${filesize}\0" \ -	"upgrade=run ubload ubflash\0" - -/*----------------------------------------------------------------------- - * PCI stuff - */ -#define CONFIG_PCI -#define CONFIG_PCI_INDIRECT_BRIDGE -/* Verified: CONFIG_PCI_PNP doesn't work */ -#undef CONFIG_PCI_PNP -#define CONFIG_PCI_SCAN_SHOW - -#ifndef CONFIG_PCI_PNP -/* Keep the following defines in sync with the BAT mappings */ - -#define PCI_ETH_IOADDR      0xbfff00 -#define PCI_ETH_MEMADDR     0xbffffc00 -#define PCI_IDE_IOADDR      0xbffed0 -#define PCI_IDE_MEMADDR     0xbffffb00 -#define PCI_USB0_IOADDR     0 -#define PCI_USB0_MEMADDR    0xbfffe000 -#define PCI_USB1_IOADDR     0 -#define PCI_USB1_MEMADDR    0xbfffd000 -#define PCI_USB2_IOADDR     0 -#define PCI_USB2_MEMADDR    0xbfffcf00 - -#endif - -/*----------------------------------------------------------------------- - * Ethernet stuff - */ - -#if defined(CONFIG_LAN) || defined(CONFIG_HLAN) -#define CONFIG_TULIP -#define CONFIG_TULIP_USE_IO -#elif defined(CONFIG_HGLAN) || defined(CONFIG_HTGL) -#define CONFIG_RTL8169 -#endif - -#define CONFIG_NET_RETRY_COUNT		5 - -#define CONFIG_NETCONSOLE - -/*----------------------------------------------------------------------- - * Start addresses for the final memory configuration - * (Set up by the startup code) - * Please note that CONFIG_SYS_SDRAM_BASE _must_ start at 0 - */ -#define CONFIG_SYS_SDRAM_BASE		0x00000000 - -#define CONFIG_SYS_FLASH_BASE		0xFFC00000 -#define CONFIG_SYS_FLASH_SIZE		0x00400000 -#define CONFIG_SYS_MONITOR_BASE	CONFIG_SYS_TEXT_BASE - -#define CONFIG_SYS_RESET_ADDRESS	0xFFF00100 -#define CONFIG_SYS_EUMB_ADDR		0x80000000 -#define CONFIG_SYS_PCI_MEM_ADDR	0xB0000000 -#define CONFIG_SYS_MISC_REGION_ADDR	0xFE000000 - -#define CONFIG_SYS_MONITOR_LEN		0x00040000	/* 256 kB			*/ -#define CONFIG_SYS_MALLOC_LEN		(512 << 10)	/* Reserve some kB for malloc()	*/ - -#define CONFIG_SYS_MEMTEST_START	0x00100000	/* memtest works on		*/ -#define CONFIG_SYS_MEMTEST_END		0x00800000	/* 1M ... 8M in DRAM		*/ - -/* Maximum amount of RAM */ -#if defined(CONFIG_HLAN) || defined(CONFIG_LAN) -#define CONFIG_SYS_MAX_RAM_SIZE	0x04000000	/* 64MB of SDRAM  */ -#elif defined(CONFIG_HGLAN) || defined(CONFIG_HTGL) -#define CONFIG_SYS_MAX_RAM_SIZE	0x08000000	/* 128MB of SDRAM */ -#else -#error Unknown LinkStation type -#endif - -/*----------------------------------------------------------------------- - * Change CONFIG_SYS_TEXT_BASE in bord/linkstation/config.mk to get a RAM build - * - * RAM based builds are for testing purposes. A Linux module, uloader.o, - * exists to load U-Boot and pass control to it - * - * Always do "make clean" after changing the build type - */ -#if CONFIG_SYS_MONITOR_BASE < CONFIG_SYS_FLASH_BASE -#define CONFIG_SYS_RAMBOOT -#endif - -/*----------------------------------------------------------------------- - * Definitions for initial stack pointer and data area - */ -#if 1 /* RAM is available when the first C function is called */ -#define CONFIG_SYS_INIT_RAM_ADDR	(CONFIG_SYS_SDRAM_BASE + CONFIG_SYS_MAX_RAM_SIZE - 0x1000) -#else -#define CONFIG_SYS_INIT_RAM_ADDR	0x40000000 -#endif -#define CONFIG_SYS_INIT_RAM_SIZE	0x1000 -#define CONFIG_SYS_GBL_DATA_OFFSET	(CONFIG_SYS_INIT_RAM_SIZE - GENERATED_GBL_DATA_SIZE) - -/*---------------------------------------------------------------------- - * Serial configuration - */ -#define CONFIG_CONS_INDEX	1 -#define CONFIG_BAUDRATE		57600 - -#define CONFIG_SYS_NS16550 -#define CONFIG_SYS_NS16550_SERIAL - -#define CONFIG_SYS_NS16550_REG_SIZE	1 - -#define CONFIG_SYS_NS16550_CLK		get_bus_freq(0) - -#define CONFIG_SYS_NS16550_COM1	(CONFIG_SYS_EUMB_ADDR + 0x4600)	/* Console port	*/ -#define CONFIG_SYS_NS16550_COM2	(CONFIG_SYS_EUMB_ADDR + 0x4500)	/* AVR port	*/ - -/* - * Low Level Configuration Settings - * (address mappings, register initial values, etc.) - * You should know what you are doing if you make changes here. - * For the detail description refer to the MPC8245 user's manual. - * - * Unless indicated otherwise, the values are - * taken from the orignal Linkstation boot code - * - * Most of the low level configuration setttings are normally used - * in arch/powerpc/cpu/mpc824x/cpu_init.c which is NOT used by this implementation. - * Low level initialisation is done in board/linkstation/early_init.S - * The values below are included for reference purpose only - */ - -/* FIXME: 32.768 MHz is the crystal frequency but */ -/* the real frequency is lower by about 0.75%     */ -#define CONFIG_SYS_CLK_FREQ	32768000 - -/* Bit-field values for MCCR1.  */ -#define CONFIG_SYS_ROMNAL      0 -#define CONFIG_SYS_ROMFAL      11 - -#define CONFIG_SYS_BANK0_ROW	2       /* Only bank 0 used: 13 x n x 4 */ -#define CONFIG_SYS_BANK1_ROW	0 -#define CONFIG_SYS_BANK2_ROW	0 -#define CONFIG_SYS_BANK3_ROW	0 -#define CONFIG_SYS_BANK4_ROW	0 -#define CONFIG_SYS_BANK5_ROW	0 -#define CONFIG_SYS_BANK6_ROW	0 -#define CONFIG_SYS_BANK7_ROW	0 - -/* Bit-field values for MCCR2.  */ -#define CONFIG_SYS_TSWAIT      0 -#if defined(CONFIG_LAN) || defined(CONFIG_HLAN) -#define CONFIG_SYS_REFINT      0x15e0 -#elif defined(CONFIG_HGLAN) || defined(CONFIG_HTGL) -#define CONFIG_SYS_REFINT      0x1580 -#endif - -/* Burst To Precharge. Bits of this value go to MCCR3 and MCCR4. */ -#define CONFIG_SYS_BSTOPRE	0x91c - -/* Bit-field values for MCCR3.  */ -#define CONFIG_SYS_REFREC      7 - -/* Bit-field values for MCCR4.  */ -#define CONFIG_SYS_PRETOACT		2 -#define CONFIG_SYS_ACTTOPRE		2	/* Original value was 2	*/ -#define CONFIG_SYS_ACTORW		2 -#if defined(CONFIG_LAN) || defined(CONFIG_HLAN) -#define CONFIG_SYS_SDMODE_CAS_LAT	2	/* For 100MHz bus	*/ -/*#define CONFIG_SYS_SDMODE_BURSTLEN	3*/ -#elif defined(CONFIG_HGLAN) || defined(CONFIG_HTGL) -#define CONFIG_SYS_SDMODE_CAS_LAT	3	/* For 133MHz bus	*/ -/*#define CONFIG_SYS_SDMODE_BURSTLEN	2*/ -#endif -#define CONFIG_SYS_REGISTERD_TYPE_BUFFER 1 -#define CONFIG_SYS_EXTROM		1	/* Original setting but there is no EXTROM */ -#define CONFIG_SYS_REGDIMM		0 -#define CONFIG_SYS_DBUS_SIZE2		1 -#define CONFIG_SYS_SDMODE_WRAP		0 - -#define CONFIG_SYS_PGMAX		0x32	/* All boards use this setting. Original 0x92 */ -#define CONFIG_SYS_SDRAM_DSCD		0x30 - -/* Memory bank settings. - * Only bits 20-29 are actually used from these vales to set the - * start/end addresses. The upper two bits will always be 0, and the lower - * 20 bits will be 0x00000 for a start address, or 0xfffff for an end - * address. Refer to the MPC8240 book. - */ - -#define CONFIG_SYS_BANK0_START	    0x00000000 -#define CONFIG_SYS_BANK0_END	    (CONFIG_SYS_MAX_RAM_SIZE - 1) -#define CONFIG_SYS_BANK0_ENABLE    1 -#define CONFIG_SYS_BANK1_START     0x3ff00000 -#define CONFIG_SYS_BANK1_END       0x3fffffff -#define CONFIG_SYS_BANK1_ENABLE    0 -#define CONFIG_SYS_BANK2_START     0x3ff00000 -#define CONFIG_SYS_BANK2_END       0x3fffffff -#define CONFIG_SYS_BANK2_ENABLE    0 -#define CONFIG_SYS_BANK3_START     0x3ff00000 -#define CONFIG_SYS_BANK3_END       0x3fffffff -#define CONFIG_SYS_BANK3_ENABLE    0 -#define CONFIG_SYS_BANK4_START     0x3ff00000 -#define CONFIG_SYS_BANK4_END       0x3fffffff -#define CONFIG_SYS_BANK4_ENABLE    0 -#define CONFIG_SYS_BANK5_START     0x3ff00000 -#define CONFIG_SYS_BANK5_END       0x3fffffff -#define CONFIG_SYS_BANK5_ENABLE    0 -#define CONFIG_SYS_BANK6_START     0x3ff00000 -#define CONFIG_SYS_BANK6_END       0x3fffffff -#define CONFIG_SYS_BANK6_ENABLE    0 -#define CONFIG_SYS_BANK7_START     0x3ff00000 -#define CONFIG_SYS_BANK7_END       0x3fffffff -#define CONFIG_SYS_BANK7_ENABLE    0 - -#define CONFIG_SYS_ODCR	    0x15 - -/*---------------------------------------------------------------------- - * Initial BAT mappings - */ - -/* NOTES: - * 1) GUARDED and WRITETHROUGH not allowed in IBATS - * 2) CACHEINHIBIT and WRITETHROUGH not allowed together in same BAT - */ - -/* SDRAM */ -#define CONFIG_SYS_IBAT0L	(CONFIG_SYS_SDRAM_BASE | BATL_PP_10 | BATL_MEMCOHERENCE) -#define CONFIG_SYS_IBAT0U	(CONFIG_SYS_SDRAM_BASE | BATU_BL_128M | BATU_VS | BATU_VP) - -#define CONFIG_SYS_DBAT0L	CONFIG_SYS_IBAT0L -#define CONFIG_SYS_DBAT0U	CONFIG_SYS_IBAT0U - -/* EUMB: 1MB of address space */ -#define CONFIG_SYS_IBAT1L	(CONFIG_SYS_EUMB_ADDR | BATL_PP_10 | BATL_CACHEINHIBIT) -#define CONFIG_SYS_IBAT1U	(CONFIG_SYS_EUMB_ADDR | BATU_BL_1M | BATU_VS | BATU_VP) - -#define CONFIG_SYS_DBAT1L	(CONFIG_SYS_IBAT1L | BATL_GUARDEDSTORAGE) -#define CONFIG_SYS_DBAT1U	CONFIG_SYS_IBAT1U - -/* PCI Mem: 256MB of address space */ -#define CONFIG_SYS_IBAT2L	(CONFIG_SYS_PCI_MEM_ADDR | BATL_PP_10 | BATL_CACHEINHIBIT) -#define CONFIG_SYS_IBAT2U	(CONFIG_SYS_PCI_MEM_ADDR | BATU_BL_256M | BATU_VS | BATU_VP) - -#define CONFIG_SYS_DBAT2L	(CONFIG_SYS_IBAT2L | BATL_GUARDEDSTORAGE) -#define CONFIG_SYS_DBAT2U	CONFIG_SYS_IBAT2U - -/* PCI and local ROM/Flash: last 32MB of address space */ -#define CONFIG_SYS_IBAT3L	(CONFIG_SYS_MISC_REGION_ADDR | BATL_PP_10 | BATL_CACHEINHIBIT) -#define CONFIG_SYS_IBAT3U	(CONFIG_SYS_MISC_REGION_ADDR | BATU_BL_32M | BATU_VS | BATU_VP) - -#define CONFIG_SYS_DBAT3L	(CONFIG_SYS_IBAT3L | BATL_GUARDEDSTORAGE) -#define CONFIG_SYS_DBAT3U	CONFIG_SYS_IBAT3U - -/* - * For booting Linux, the board info and command line data - * have to be in the first 8 MB of memory, since this is - * the maximum mapped by the Linux kernel during initialization. - * - * FIXME: This doesn't appear to be true for the newer kernels - * which map more that 8 MB - */ -#define CONFIG_SYS_BOOTMAPSZ	(8 << 20)	/* Initial Memory map for Linux */ - -/*----------------------------------------------------------------------- - * FLASH organization - */ -#define CONFIG_SYS_FLASH_CFI			/* The flash is CFI compatible	*/ -#define CONFIG_FLASH_CFI_DRIVER		/* Use common CFI driver	*/ - -#undef  CONFIG_SYS_FLASH_PROTECTION -#define CONFIG_SYS_FLASH_BANKS_LIST	{ CONFIG_SYS_FLASH_BASE } -#define CONFIG_SYS_MAX_FLASH_BANKS	1	/* Max number of flash banks		*/ -#define CONFIG_SYS_MAX_FLASH_SECT	72	/* Max number of sectors per flash	*/ - -#define CONFIG_SYS_FLASH_ERASE_TOUT	12000 -#define CONFIG_SYS_FLASH_WRITE_TOUT	1000 - -#define CONFIG_SYS_FLASH_USE_BUFFER_WRITE 1	/* use buffered writes (20x faster)	*/ - -#define CONFIG_SYS_FLASH_EMPTY_INFO		/* print 'E' for empty sector on flinfo */ -#define CONFIG_SYS_FLASH_QUIET_TEST	1	/* don't warn upon unknown flash	*/ - -#define CONFIG_ENV_IS_IN_FLASH -/* - * The original LinkStation flash organisation uses - * 448 kB (0xFFF00000 - 0xFFF6FFFF) for the boot loader - * We use the last sector of this area to store the environment - * which leaves max. 384 kB for the U-Boot itself - */ -#define CONFIG_ENV_ADDR		0xFFF60000 -#define CONFIG_ENV_SIZE		0x00010000 -#define CONFIG_ENV_SECT_SIZE	0x00010000 - -/*----------------------------------------------------------------------- - * Cache Configuration - */ -#define CONFIG_SYS_CACHELINE_SIZE	32 -#ifdef CONFIG_CMD_KGDB -#define CONFIG_SYS_CACHELINE_SHIFT	5	/* log base 2 of the above value	*/ -#endif - -/*----------------------------------------------------------------------- - * IDE/ATA definitions - */ -#undef  CONFIG_IDE_LED				/* No IDE LED			*/ -#define CONFIG_IDE_RESET			/* no reset for ide supported	*/ -#define CONFIG_IDE_PREINIT			/* check for units		*/ -#define CONFIG_LBA48				/* 48 bit LBA supported		*/ - -#if defined(CONFIG_LAN) || defined(CONFIG_HLAN) || defined(CONFIG_HGLAN) -#define CONFIG_SYS_IDE_MAXBUS		1		/* Scan only 1 IDE bus		*/ -#define CONFIG_SYS_IDE_MAXDEVICE	1		/* Only 1 drive per IDE bus	*/ -#elif defined(CONFIG_HGTL) -#define CONFIG_SYS_IDE_MAXBUS		2		/* Max. 2 IDE busses		*/ -#define CONFIG_SYS_IDE_MAXDEVICE	2		/* max. 2 drives per IDE bus	*/ -#else -#error Config IDE: Unknown LinkStation type -#endif - -#define CONFIG_SYS_ATA_BASE_ADDR	0 - -#define CONFIG_SYS_ATA_DATA_OFFSET	0		/* Offset for data I/O		*/ -#define CONFIG_SYS_ATA_REG_OFFSET	0		/* Offset for normal registers	*/ -#define CONFIG_SYS_ATA_ALT_OFFSET	0		/* Offset for alternate registers */ - -/*----------------------------------------------------------------------- - * Partitions and file system - */ -#define CONFIG_DOS_PARTITION - -#endif	/* __CONFIG_H */ diff --git a/include/configs/lp8x4x.h b/include/configs/lp8x4x.h index 8e58fea3b..a26937265 100644 --- a/include/configs/lp8x4x.h +++ b/include/configs/lp8x4x.h @@ -93,7 +93,6 @@   */  #ifdef	CONFIG_CMD_KGDB  #define	CONFIG_KGDB_BAUDRATE		230400	/* kgdb serial port speed */ -#define	CONFIG_KGDB_SER_INDEX		2	/* which serial port to use */  #endif  /* diff --git a/include/configs/lubbock.h b/include/configs/lubbock.h index b87df5479..4ffe165de 100644 --- a/include/configs/lubbock.h +++ b/include/configs/lubbock.h @@ -86,7 +86,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400		/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2		/* which serial port to use */  #endif  /* diff --git a/include/configs/lwmon5.h b/include/configs/lwmon5.h index c348329cb..e9c8d8fd5 100644 --- a/include/configs/lwmon5.h +++ b/include/configs/lwmon5.h @@ -660,7 +660,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	    /* which serial port to use */  #endif  /* diff --git a/include/configs/mecp5123.h b/include/configs/mecp5123.h index 6501ea40e..d415ecdb5 100644 --- a/include/configs/mecp5123.h +++ b/include/configs/mecp5123.h @@ -364,7 +364,6 @@  #ifdef CONFIG_CMD_KGDB  #define CONFIG_KGDB_BAUDRATE	230400	/* speed of kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/mpc5121ads.h b/include/configs/mpc5121ads.h index 4a8adf6f3..38337b456 100644 --- a/include/configs/mpc5121ads.h +++ b/include/configs/mpc5121ads.h @@ -520,7 +520,6 @@  #ifdef CONFIG_CMD_KGDB  #define CONFIG_KGDB_BAUDRATE	230400	/* speed of kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/mpq101.h b/include/configs/mpq101.h index ec09e15db..4cac8ee46 100644 --- a/include/configs/mpq101.h +++ b/include/configs/mpq101.h @@ -345,7 +345,6 @@  #ifdef CONFIG_CMD_KGDB  # define CONFIG_KGDB_BAUDRATE  230400 /* speed to run kgdb serial port */ -# define CONFIG_KGDB_SER_INDEX 2      /* which serial port to use */  #endif  /* diff --git a/include/configs/mpr2.h b/include/configs/mpr2.h index fcf237edb..8ae497c6d 100644 --- a/include/configs/mpr2.h +++ b/include/configs/mpr2.h @@ -24,8 +24,6 @@  #define CONFIG_VERSION_VARIABLE  /* CPU and platform */ -#define CONFIG_SH		1 -#define CONFIG_SH3		1  #define CONFIG_CPU_SH7720	1  #define CONFIG_MPR2		1 diff --git a/include/configs/ms7720se.h b/include/configs/ms7720se.h index ec8523eb9..585d68f20 100644 --- a/include/configs/ms7720se.h +++ b/include/configs/ms7720se.h @@ -9,8 +9,6 @@  #ifndef __MS7720SE_H  #define __MS7720SE_H -#define CONFIG_SH		1 -#define CONFIG_SH3		1  #define CONFIG_CPU_SH7720	1  #define CONFIG_MS7720SE		1 diff --git a/include/configs/ms7722se.h b/include/configs/ms7722se.h index 54fb7c3e8..1c8ada6c0 100644 --- a/include/configs/ms7722se.h +++ b/include/configs/ms7722se.h @@ -9,8 +9,6 @@  #ifndef __MS7722SE_H  #define __MS7722SE_H -#define CONFIG_SH		1 -#define CONFIG_SH4		1  #define CONFIG_CPU_SH7722	1  #define CONFIG_MS7722SE		1 diff --git a/include/configs/ms7750se.h b/include/configs/ms7750se.h index eea3bd1f2..4cf8efeca 100644 --- a/include/configs/ms7750se.h +++ b/include/configs/ms7750se.h @@ -9,8 +9,6 @@  #ifndef __MS7750SE_H  #define __MS7750SE_H -#define CONFIG_SH		1 -#define CONFIG_SH4		1  #define CONFIG_CPU_SH7750	1  /* #define CONFIG_CPU_SH7751	1 */  /* #define CONFIG_CPU_TYPE_R	1 */ diff --git a/include/configs/mx1ads.h b/include/configs/mx1ads.h index c15d54631..12667c57c 100644 --- a/include/configs/mx1ads.h +++ b/include/configs/mx1ads.h @@ -86,8 +86,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	115200		/* speed to run kgdb serial port */ -						/* what's this ? it's not used anywhere */ -#define CONFIG_KGDB_SER_INDEX	1		/* which serial port to use */  #endif  /* diff --git a/include/configs/omap5912osk.h b/include/configs/omap5912osk.h index c48790d2a..376dfdb14 100644 --- a/include/configs/omap5912osk.h +++ b/include/configs/omap5912osk.h @@ -94,7 +94,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	115200	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	1	/* which serial port to use */  #endif  /* diff --git a/include/configs/omap5_uevm.h b/include/configs/omap5_uevm.h index 2f128b8a6..76c5106b4 100644 --- a/include/configs/omap5_uevm.h +++ b/include/configs/omap5_uevm.h @@ -36,6 +36,7 @@  #define CONFIG_EFI_PARTITION  #define CONFIG_PARTITION_UUIDS  #define CONFIG_CMD_PART +#define CONFIG_HSMMC2_8BIT  /* Required support for the TCA642X GPIO we have on the uEVM */  #define CONFIG_TCA642X diff --git a/include/configs/p1_p2_rdb_pc.h b/include/configs/p1_p2_rdb_pc.h index 57ed01995..c6df11b8f 100644 --- a/include/configs/p1_p2_rdb_pc.h +++ b/include/configs/p1_p2_rdb_pc.h @@ -928,7 +928,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/p3p440.h b/include/configs/p3p440.h index 3fde7ca3a..1fdd602f5 100644 --- a/include/configs/p3p440.h +++ b/include/configs/p3p440.h @@ -303,6 +303,5 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  #endif	/* __CONFIG_H */ diff --git a/include/configs/palmld.h b/include/configs/palmld.h index a5b6e3aa9..2a9fd22dd 100644 --- a/include/configs/palmld.h +++ b/include/configs/palmld.h @@ -93,7 +93,6 @@   */  #ifdef	CONFIG_CMD_KGDB  #define	CONFIG_KGDB_BAUDRATE		230400	/* kgdb serial port speed */ -#define	CONFIG_KGDB_SER_INDEX		2	/* which serial port to use */  #endif  /* diff --git a/include/configs/palmtc.h b/include/configs/palmtc.h index 7303e1c31..de254076f 100644 --- a/include/configs/palmtc.h +++ b/include/configs/palmtc.h @@ -95,7 +95,6 @@   */  #ifdef	CONFIG_CMD_KGDB  #define	CONFIG_KGDB_BAUDRATE		230400	/* kgdb serial port speed */ -#define	CONFIG_KGDB_SER_INDEX		2	/* which serial port to use */  #endif  /* diff --git a/include/configs/palmtreo680.h b/include/configs/palmtreo680.h index adf85190d..36626639d 100644 --- a/include/configs/palmtreo680.h +++ b/include/configs/palmtreo680.h @@ -94,7 +94,6 @@   */  #ifdef CONFIG_CMD_KGDB  #define CONFIG_KGDB_BAUDRATE            230400  /* kgdb serial port speed */ -#define CONFIG_KGDB_SER_INDEX           2       /* which serial port to use */  #endif  /* diff --git a/include/configs/pcs440ep.h b/include/configs/pcs440ep.h index 400cb3e82..5a5fe7ff0 100644 --- a/include/configs/pcs440ep.h +++ b/include/configs/pcs440ep.h @@ -427,7 +427,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /*----------------------------------------------------------------------- diff --git a/include/configs/pdm360ng.h b/include/configs/pdm360ng.h index 266d107e4..2a54e5cea 100644 --- a/include/configs/pdm360ng.h +++ b/include/configs/pdm360ng.h @@ -441,7 +441,6 @@  #ifdef CONFIG_CMD_KGDB  #define CONFIG_KGDB_BAUDRATE	230400	/* speed of kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* POST support */ diff --git a/include/configs/pxa-common.h b/include/configs/pxa-common.h index 5856ee180..f0ecc3458 100644 --- a/include/configs/pxa-common.h +++ b/include/configs/pxa-common.h @@ -16,7 +16,6 @@   */  #ifdef	CONFIG_CMD_KGDB  #define	CONFIG_KGDB_BAUDRATE		230400 -#define	CONFIG_KGDB_SER_INDEX		2  #endif  /* diff --git a/include/configs/pxa255_idp.h b/include/configs/pxa255_idp.h index 84ad006ac..af7c076df 100644 --- a/include/configs/pxa255_idp.h +++ b/include/configs/pxa255_idp.h @@ -199,7 +199,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	115200		/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2		/* which serial port to use */  #endif  /* diff --git a/include/configs/quad100hd.h b/include/configs/quad100hd.h index 7b04e0c3e..20d6178dc 100644 --- a/include/configs/quad100hd.h +++ b/include/configs/quad100hd.h @@ -265,7 +265,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400		/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2		/* which serial port to use */  #endif  /* ENVIRONMENT VARS */ diff --git a/include/configs/r0p7734.h b/include/configs/r0p7734.h index dd26a71bc..53128ecc1 100644 --- a/include/configs/r0p7734.h +++ b/include/configs/r0p7734.h @@ -10,9 +10,6 @@  #define __R0P7734_H  #undef DEBUG -#define CONFIG_SH		1 -#define CONFIG_SH4		1 -#define CONFIG_SH4A		1  #define CONFIG_CPU_SH7734	1  #define CONFIG_R0P7734		1  #define CONFIG_400MHZ_MODE	1 diff --git a/include/configs/r2dplus.h b/include/configs/r2dplus.h index ddcc97587..24d0c34db 100644 --- a/include/configs/r2dplus.h +++ b/include/configs/r2dplus.h @@ -3,8 +3,6 @@  #undef DEBUG -#define CONFIG_SH		1 -#define CONFIG_SH4		1  #define CONFIG_CPU_SH7751	1  #define CONFIG_CPU_SH_TYPE_R	1  #define CONFIG_R2DPLUS		1 diff --git a/include/configs/r7780mp.h b/include/configs/r7780mp.h index f5e4daab8..8156724f7 100644 --- a/include/configs/r7780mp.h +++ b/include/configs/r7780mp.h @@ -11,8 +11,6 @@  #define __R7780RP_H  #undef DEBUG -#define CONFIG_SH		1 -#define CONFIG_SH4A		1  #define CONFIG_CPU_SH7780	1  #define CONFIG_R7780MP		1  #define CONFIG_SYS_R7780MP_OLD_FLASH	1 diff --git a/include/configs/rsdproto.h b/include/configs/rsdproto.h index f144f8432..92318c339 100644 --- a/include/configs/rsdproto.h +++ b/include/configs/rsdproto.h @@ -121,7 +121,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400		/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2		/* which serial port to use */  #endif  /* diff --git a/include/configs/rsk7203.h b/include/configs/rsk7203.h index acee4e898..543632458 100644 --- a/include/configs/rsk7203.h +++ b/include/configs/rsk7203.h @@ -11,8 +11,6 @@  #define __RSK7203_H  #undef DEBUG -#define CONFIG_SH		1 -#define CONFIG_SH2		1  #define CONFIG_SH2A		1  #define CONFIG_CPU_SH7203	1  #define CONFIG_RSK7203	1 @@ -87,7 +85,7 @@  #define CONFIG_SH_TMU_CLK_FREQ CONFIG_SYS_CLK_FREQ  #define CONFIG_SH_SCIF_CLK_FREQ CONFIG_SYS_CLK_FREQ  #define CMT_CLK_DIVIDER	32	/* 8 (default), 32, 128 or 512 */ -#define CONFIG_SYS_HZ			(CONFIG_SYS_CLK_FREQ / CMT_CLK_DIVIDER) +#define CONFIG_SH_CMT_CLK_FREQ (CONFIG_SYS_CLK_FREQ / CMT_CLK_DIVIDER)  /* Network interface */  #define CONFIG_SMC911X diff --git a/include/configs/rsk7264.h b/include/configs/rsk7264.h index a5dbb64f4..4aaa3ef74 100644 --- a/include/configs/rsk7264.h +++ b/include/configs/rsk7264.h @@ -12,8 +12,6 @@  #define __RSK7264_H  #undef DEBUG -#define CONFIG_SH		1 -#define CONFIG_SH2		1  #define CONFIG_SH2A		1  #define CONFIG_CPU_SH7264	1  #define CONFIG_RSK7264		1 @@ -67,7 +65,7 @@  #define CONFIG_SH_TMU_CLK_FREQ CONFIG_SYS_CLK_FREQ  #define CONFIG_SH_SCIF_CLK_FREQ CONFIG_SYS_CLK_FREQ  #define CMT_CLK_DIVIDER		32	/* 8 (default), 32, 128 or 512 */ -#define CONFIG_SYS_HZ		(CONFIG_SYS_CLK_FREQ / CMT_CLK_DIVIDER) +#define CONFIG_SH_CMT_CLK_FREQ (CONFIG_SYS_CLK_FREQ / CMT_CLK_DIVIDER)  /* Network interface */  #define CONFIG_SMC911X diff --git a/include/configs/rsk7269.h b/include/configs/rsk7269.h index 9f54160af..11fc231fa 100644 --- a/include/configs/rsk7269.h +++ b/include/configs/rsk7269.h @@ -11,8 +11,6 @@  #define __RSK7269_H  #undef DEBUG -#define CONFIG_SH		1 -#define CONFIG_SH2		1  #define CONFIG_SH2A		1  #define CONFIG_CPU_SH7269	1  #define CONFIG_RSK7269		1 @@ -66,7 +64,7 @@  #define CONFIG_SH_TMU_CLK_FREQ CONFIG_SYS_CLK_FREQ  #define CONFIG_SH_SCIF_CLK_FREQ CONFIG_SYS_CLK_FREQ  #define CMT_CLK_DIVIDER		32	/* 8 (default), 32, 128 or 512 */ -#define CONFIG_SYS_HZ		(CONFIG_SYS_CLK_FREQ / CMT_CLK_DIVIDER) +#define CONFIG_SH_CMT_CLK_FREQ (CONFIG_SYS_CLK_FREQ / CMT_CLK_DIVIDER)  /* Network interface */  #define CONFIG_SMC911X diff --git a/include/configs/sandbox.h b/include/configs/sandbox.h index 7e78a231d..a6d55822b 100644 --- a/include/configs/sandbox.h +++ b/include/configs/sandbox.h @@ -39,6 +39,9 @@  #define CONFIG_CMD_FAT  #define CONFIG_CMD_EXT4  #define CONFIG_CMD_EXT4_WRITE +#define CONFIG_CMD_PART +#define CONFIG_DOS_PARTITION +#define CONFIG_HOST_MAX_DEVICES 4  #define CONFIG_SYS_VSNPRINTF @@ -126,4 +129,6 @@  #define CONFIG_LZO  #define CONFIG_LZMA +#define CONFIG_TPM_TIS_SANDBOX +  #endif diff --git a/include/configs/sbc8349.h b/include/configs/sbc8349.h index a258fe83d..b7f83e010 100644 --- a/include/configs/sbc8349.h +++ b/include/configs/sbc8349.h @@ -643,7 +643,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed of kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/sbc8548.h b/include/configs/sbc8548.h index bdb8eb529..4912d69dc 100644 --- a/include/configs/sbc8548.h +++ b/include/configs/sbc8548.h @@ -575,7 +575,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/sbc8641d.h b/include/configs/sbc8641d.h index dba948a5c..78f8219c5 100644 --- a/include/configs/sbc8641d.h +++ b/include/configs/sbc8641d.h @@ -523,7 +523,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/sh7752evb.h b/include/configs/sh7752evb.h index ebdc5c8b0..f06abbca0 100644 --- a/include/configs/sh7752evb.h +++ b/include/configs/sh7752evb.h @@ -10,8 +10,6 @@  #define __SH7752EVB_H  #undef DEBUG -#define CONFIG_SH		1 -#define CONFIG_SH4A		1  #define CONFIG_SH_32BIT		1  #define CONFIG_CPU_SH7752	1  #define CONFIG_SH7752EVB	1 diff --git a/include/configs/sh7753evb.h b/include/configs/sh7753evb.h new file mode 100644 index 000000000..e400db08a --- /dev/null +++ b/include/configs/sh7753evb.h @@ -0,0 +1,135 @@ +/* + * Configuation settings for the sh7753evb board + * + * Copyright (C) 2012 Renesas Solutions Corp. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef __SH7753EVB_H +#define __SH7753EVB_H + +#undef DEBUG +#define CONFIG_SH_32BIT		1 +#define CONFIG_CPU_SH7753	1 +#define CONFIG_SH7753EVB	1 + +#define CONFIG_SYS_TEXT_BASE	0x5ff80000 +#define CONFIG_SYS_LDSCRIPT	"board/renesas/sh7753evb/u-boot.lds" + +#define CONFIG_CMD_MEMORY +#define CONFIG_CMD_NET +#define CONFIG_CMD_MII +#define CONFIG_CMD_PING +#define CONFIG_CMD_NFS +#define CONFIG_CMD_DFL +#define CONFIG_CMD_SDRAM +#define CONFIG_CMD_SF +#define CONFIG_CMD_RUN +#define CONFIG_CMD_SAVEENV +#define CONFIG_CMD_MD5SUM +#define CONFIG_MD5 +#define CONFIG_CMD_LOADS +#define CONFIG_CMD_MMC +#define CONFIG_CMD_EXT2 +#define CONFIG_DOS_PARTITION +#define CONFIG_MAC_PARTITION + +#define CONFIG_BAUDRATE		115200 +#define CONFIG_BOOTDELAY	3 +#define CONFIG_BOOTARGS		"console=ttySC2,115200 root=/dev/nfs ip=dhcp" + +#define CONFIG_VERSION_VARIABLE +#undef	CONFIG_SHOW_BOOT_PROGRESS +#define CONFIG_CMDLINE_EDITING +#define CONFIG_AUTO_COMPLETE + +/* MEMORY */ +#define SH7753EVB_SDRAM_BASE		(0x40000000) +#define SH7753EVB_SDRAM_SIZE		(512 * 1024 * 1024) + +#define CONFIG_SYS_LONGHELP +#define CONFIG_SYS_CBSIZE		256 +#define CONFIG_SYS_PBSIZE		256 +#define CONFIG_SYS_MAXARGS		16 +#define CONFIG_SYS_BARGSIZE		512 +#define CONFIG_SYS_BAUDRATE_TABLE	{ 115200 } + +/* SCIF */ +#define CONFIG_SCIF_CONSOLE	1 +#define CONFIG_CONS_SCIF2	1 +#undef	CONFIG_SYS_CONSOLE_INFO_QUIET +#undef	CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE +#undef	CONFIG_SYS_CONSOLE_ENV_OVERWRITE + +#define CONFIG_SYS_MEMTEST_START	(SH7753EVB_SDRAM_BASE) +#define CONFIG_SYS_MEMTEST_END		(CONFIG_SYS_MEMTEST_START + \ +					 480 * 1024 * 1024) +#undef	CONFIG_SYS_ALT_MEMTEST +#undef	CONFIG_SYS_MEMTEST_SCRATCH +#undef	CONFIG_SYS_LOADS_BAUD_CHANGE + +#define CONFIG_SYS_SDRAM_BASE		(SH7753EVB_SDRAM_BASE) +#define CONFIG_SYS_SDRAM_SIZE		(SH7753EVB_SDRAM_SIZE) +#define CONFIG_SYS_LOAD_ADDR		(CONFIG_SYS_SDRAM_BASE + \ +					 128 * 1024 * 1024) + +#define CONFIG_SYS_MONITOR_BASE		0x00000000 +#define CONFIG_SYS_MONITOR_LEN		(512 * 1024) +#define CONFIG_SYS_MALLOC_LEN		(4 * 1024 * 1024) +#define CONFIG_SYS_BOOTMAPSZ		(8 * 1024 * 1024) + +/* FLASH */ +#define CONFIG_SYS_NO_FLASH + +/* Ether */ +#define CONFIG_SH_ETHER			1 +#define CONFIG_SH_ETHER_USE_PORT	0 +#define CONFIG_SH_ETHER_PHY_ADDR	18 +#define CONFIG_SH_ETHER_CACHE_WRITEBACK	1 +#define CONFIG_SH_ETHER_USE_GETHER	1 +#define CONFIG_PHYLIB +#define CONFIG_BITBANGMII +#define CONFIG_BITBANGMII_MULTI +#define CONFIG_SH_ETHER_PHY_MODE PHY_INTERFACE_MODE_RGMII +#define CONFIG_PHY_VITESSE + +#define SH7753EVB_ETHERNET_MAC_BASE_SPI	0x00090000 +#define SH7753EVB_SPI_SECTOR_SIZE	(64 * 1024) +#define SH7753EVB_ETHERNET_MAC_BASE	SH7753EVB_ETHERNET_MAC_BASE_SPI +#define SH7753EVB_ETHERNET_MAC_SIZE	17 +#define SH7753EVB_ETHERNET_NUM_CH	2 +#define CONFIG_BOARD_LATE_INIT + +/* SPI */ +#define CONFIG_SH_SPI			1 +#define CONFIG_SH_SPI_BASE		0xfe002000 +#define CONFIG_SPI_FLASH +#define CONFIG_SPI_FLASH_STMICRO	1 +#define CONFIG_SPI_FLASH_MACRONIX	1 + +/* MMCIF */ +#define CONFIG_MMC			1 +#define CONFIG_GENERIC_MMC		1 +#define CONFIG_SH_MMCIF			1 +#define CONFIG_SH_MMCIF_ADDR		0xffcb0000 +#define CONFIG_SH_MMCIF_CLK		48000000 + +/* ENV setting */ +#define CONFIG_ENV_IS_EMBEDDED +#define CONFIG_ENV_IS_IN_SPI_FLASH +#define CONFIG_ENV_SECT_SIZE	(64 * 1024) +#define CONFIG_ENV_ADDR		(0x00080000) +#define CONFIG_ENV_OFFSET	(CONFIG_ENV_ADDR) +#define CONFIG_ENV_OVERWRITE	1 +#define CONFIG_ENV_SIZE		(CONFIG_ENV_SECT_SIZE) +#define CONFIG_ENV_SIZE_REDUND	(CONFIG_ENV_SECT_SIZE) +#define CONFIG_EXTRA_ENV_SETTINGS				\ +		"netboot=bootp; bootm\0" + +/* Board Clock */ +#define CONFIG_SYS_CLK_FREQ	48000000 +#define CONFIG_SH_TMU_CLK_FREQ CONFIG_SYS_CLK_FREQ +#define CONFIG_SH_SCIF_CLK_FREQ CONFIG_SYS_CLK_FREQ +#define CONFIG_SYS_TMU_CLK_DIV	4 +#endif	/* __SH7753EVB_H */ diff --git a/include/configs/sh7757lcr.h b/include/configs/sh7757lcr.h index ce1add268..08bff1da3 100644 --- a/include/configs/sh7757lcr.h +++ b/include/configs/sh7757lcr.h @@ -10,8 +10,6 @@  #define __SH7757LCR_H  #undef DEBUG -#define CONFIG_SH		1 -#define CONFIG_SH4A		1  #define CONFIG_SH_32BIT		1  #define CONFIG_CPU_SH7757	1  #define CONFIG_SH7757LCR	1 diff --git a/include/configs/sh7763rdp.h b/include/configs/sh7763rdp.h index a13778830..2438318fc 100644 --- a/include/configs/sh7763rdp.h +++ b/include/configs/sh7763rdp.h @@ -10,8 +10,6 @@  #ifndef __SH7763RDP_H  #define __SH7763RDP_H -#define CONFIG_SH		1 -#define CONFIG_SH4		1  #define CONFIG_CPU_SH7763	1  #define CONFIG_SH7763RDP	1  #define __LITTLE_ENDIAN		1 diff --git a/include/configs/sh7785lcr.h b/include/configs/sh7785lcr.h index 4acbcab1b..2723eaf2d 100644 --- a/include/configs/sh7785lcr.h +++ b/include/configs/sh7785lcr.h @@ -10,8 +10,6 @@  #define __SH7785LCR_H  #undef DEBUG -#define CONFIG_SH		1 -#define CONFIG_SH4A		1  #define CONFIG_CPU_SH7785	1  #define CONFIG_SH7785LCR	1 diff --git a/include/configs/shmin.h b/include/configs/shmin.h index 5c990fc96..f8155efbc 100644 --- a/include/configs/shmin.h +++ b/include/configs/shmin.h @@ -9,8 +9,6 @@  #ifndef __SHMIN_H  #define __SHMIN_H -#define CONFIG_SH		1 -#define CONFIG_SH3		1  #define CONFIG_CPU_SH7706	1  /* T-SH7706LAN */  #define CONFIG_SHMIN		1 diff --git a/include/configs/smdk2410.h b/include/configs/smdk2410.h index a87444e0b..d4ae19f96 100644 --- a/include/configs/smdk2410.h +++ b/include/configs/smdk2410.h @@ -101,8 +101,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	115200	/* speed to run kgdb serial port */ -/* what's this ? it's not used anywhere */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/socrates.h b/include/configs/socrates.h index 0e6b86412..fd590e4e1 100644 --- a/include/configs/socrates.h +++ b/include/configs/socrates.h @@ -363,7 +363,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port*/ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use	*/  #endif diff --git a/include/configs/stxgp3.h b/include/configs/stxgp3.h index ee1f1f3ed..2a9c9a349 100644 --- a/include/configs/stxgp3.h +++ b/include/configs/stxgp3.h @@ -341,7 +341,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /*Note: change below for your network setting!!! */ diff --git a/include/configs/stxssa.h b/include/configs/stxssa.h index 63dd76704..d0cb68a0e 100644 --- a/include/configs/stxssa.h +++ b/include/configs/stxssa.h @@ -376,7 +376,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /*Note: change below for your network setting!!! */ diff --git a/include/configs/t4qds.h b/include/configs/t4qds.h index d9b0ed07d..54a5e3e26 100644 --- a/include/configs/t4qds.h +++ b/include/configs/t4qds.h @@ -303,7 +303,6 @@  #ifdef CONFIG_CMD_KGDB  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/tcm-bf537.h b/include/configs/tcm-bf537.h index 627836a7e..58bcdc8f4 100644 --- a/include/configs/tcm-bf537.h +++ b/include/configs/tcm-bf537.h @@ -55,7 +55,7 @@  #define CONFIG_EBIU_AMBCTL0_VAL	(B1WAT_7 | B1RAT_11 | B1HT_2 | B1ST_3 | B0WAT_7 | B0RAT_11 | B0HT_2 | B0ST_3)  #define CONFIG_EBIU_AMBCTL1_VAL	(B3WAT_7 | B3RAT_11 | B3HT_2 | B3ST_3 | B2WAT_7 | B2RAT_11 | B2HT_2 | B2ST_3) -#define CONFIG_SYS_MONITOR_LEN	(512 * 1024) +#define CONFIG_SYS_MONITOR_LEN	(768 * 1024)  #define CONFIG_SYS_MALLOC_LEN	(128 * 1024) @@ -144,6 +144,7 @@  #define FLASHBOOT_ENV_SETTINGS \  	"flashboot=flread 20040000 1000000 300000;" \  	"bootm 0x1000000\0" +#define CONFIG_BOARD_SIZE_LIMIT $$((384 * 1024))  /* diff --git a/include/configs/trats.h b/include/configs/trats.h index 08771422e..6cd15c25b 100644 --- a/include/configs/trats.h +++ b/include/configs/trats.h @@ -99,6 +99,7 @@  #define CONFIG_THOR_FUNCTION  #define CONFIG_SYS_DFU_DATA_BUF_SIZE SZ_32M +#define DFU_DEFAULT_POLL_TIMEOUT 300  #define CONFIG_DFU_FUNCTION  #define CONFIG_DFU_MMC diff --git a/include/configs/trizepsiv.h b/include/configs/trizepsiv.h index 061511777..b7804d287 100644 --- a/include/configs/trizepsiv.h +++ b/include/configs/trizepsiv.h @@ -125,7 +125,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400		/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2		/* which serial port to use */  #endif  /* diff --git a/include/configs/vme8349.h b/include/configs/vme8349.h index 734d13f00..7ecbafe2e 100644 --- a/include/configs/vme8349.h +++ b/include/configs/vme8349.h @@ -539,7 +539,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400	/* speed of kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */  #endif  /* diff --git a/include/configs/vpac270.h b/include/configs/vpac270.h index c3ac612a8..71a89b6ed 100644 --- a/include/configs/vpac270.h +++ b/include/configs/vpac270.h @@ -124,7 +124,6 @@   */  #ifdef	CONFIG_CMD_KGDB  #define	CONFIG_KGDB_BAUDRATE		230400	/* kgdb serial port speed */ -#define	CONFIG_KGDB_SER_INDEX		2	/* which serial port to use */  #endif  /* diff --git a/include/configs/xaeniax.h b/include/configs/xaeniax.h index 431ed96e2..2999d1b0f 100644 --- a/include/configs/xaeniax.h +++ b/include/configs/xaeniax.h @@ -84,7 +84,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	115200			/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	1			/* which serial port to use */  #endif  /* diff --git a/include/configs/zeus.h b/include/configs/zeus.h index 9d58738ce..d8aeb3794 100644 --- a/include/configs/zeus.h +++ b/include/configs/zeus.h @@ -283,7 +283,6 @@  #if defined(CONFIG_CMD_KGDB)  #define CONFIG_KGDB_BAUDRATE	230400		/* speed to run kgdb serial port */ -#define CONFIG_KGDB_SER_INDEX	2		/* which serial port to use */  #endif  /* diff --git a/include/configs/zipitz2.h b/include/configs/zipitz2.h index 904f3b0fb..e38fa89fd 100644 --- a/include/configs/zipitz2.h +++ b/include/configs/zipitz2.h @@ -117,7 +117,6 @@ unsigned char zipitz2_spi_read(void);   */  #ifdef	CONFIG_CMD_KGDB  #define	CONFIG_KGDB_BAUDRATE		230400		/* speed to run kgdb serial port */ -#define	CONFIG_KGDB_SER_INDEX		2		/* which serial port to use */  #endif  /* diff --git a/include/dfu.h b/include/dfu.h index cc1404492..f973426aa 100644 --- a/include/dfu.h +++ b/include/dfu.h @@ -77,6 +77,9 @@ static inline unsigned int get_mmc_blk_size(int dev)  #ifndef CONFIG_SYS_DFU_MAX_FILE_SIZE  #define CONFIG_SYS_DFU_MAX_FILE_SIZE CONFIG_SYS_DFU_DATA_BUF_SIZE  #endif +#ifndef DFU_DEFAULT_POLL_TIMEOUT +#define DFU_DEFAULT_POLL_TIMEOUT 0 +#endif  struct dfu_entity {  	char			name[DFU_NAME_SIZE]; @@ -131,6 +134,7 @@ bool dfu_reset(void);  int dfu_init_env_entities(char *interface, int dev);  unsigned char *dfu_get_buf(void);  unsigned char *dfu_free_buf(void); +unsigned long dfu_get_buf_size(void);  int dfu_read(struct dfu_entity *de, void *buf, int size, int blk_seq_num);  int dfu_write(struct dfu_entity *de, void *buf, int size, int blk_seq_num); diff --git a/include/linux/crc8.h b/include/linux/crc8.h new file mode 100644 index 000000000..b5fd2ac9d --- /dev/null +++ b/include/linux/crc8.h @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2013 Google, Inc + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + + +#ifndef __linux_crc8_h +#define __linux_crc8_h + +/** + * crc8() - Calculate and return CRC-8 of the data + * + * This uses an x^8 + x^2 + x + 1 polynomial.  A table-based algorithm would + * be faster, but for only a few bytes it isn't worth the code size + * + * @vptr: Buffer to checksum + * @len: Length of buffer in bytes + * @return CRC8 checksum + */ +unsigned int crc8(const unsigned char *vptr, int len); + +#endif diff --git a/include/mmc.h b/include/mmc.h index cb558da63..e1060b9ff 100644 --- a/include/mmc.h +++ b/include/mmc.h @@ -262,6 +262,8 @@ struct mmc {  	uint card_caps;  	uint host_caps;  	uint ocr; +	uint dsr; +	uint dsr_imp;  	uint scr[2];  	uint csd[4];  	uint cid[4]; @@ -304,7 +306,7 @@ int board_mmc_getcd(struct mmc *mmc);  int mmc_switch_part(int dev_num, unsigned int part_num);  int mmc_getcd(struct mmc *mmc);  int mmc_getwp(struct mmc *mmc); -void spl_mmc_load(void) __noreturn; +int mmc_set_dsr(struct mmc *mmc, u16 val);  /* Function to change the size of boot partition and rpmb partitions */  int mmc_boot_partition_size_change(struct mmc *mmc, unsigned long bootsize,  					unsigned long rpmbsize); diff --git a/include/os.h b/include/os.h index 950433daa..b65fba430 100644 --- a/include/os.h +++ b/include/os.h @@ -107,6 +107,35 @@ void os_tty_raw(int fd);  void *os_malloc(size_t length);  /** + * Free memory previous allocated with os_malloc()/os_realloc() + * + * This returns the memory to the OS. + * + * \param ptr		Pointer to memory block to free + */ +void *os_free(void *ptr); + +/** + * Reallocate previously-allocated memory to increase/decrease space + * + * This works in a similar way to the C library realloc() function. If + * length is 0, then ptr is freed. Otherwise the space used by ptr is + * expanded or reduced depending on whether length is larger or smaller + * than before. + * + * If ptr is NULL, then this is similar to calling os_malloc(). + * + * This function may need to move the memory block to make room for any + * extra space, in which case the new pointer is returned. + * + * \param ptr		Pointer to memory block to reallocate + * \param length	New length for memory block + * \return pointer to new memory block, or NULL on failure or if length + *	is 0. + */ +void *os_realloc(void *ptr, size_t length); + +/**   * Access to the usleep function of the os   *   * \param usec Time to sleep in micro seconds @@ -180,4 +209,40 @@ const char *os_dirent_get_typename(enum os_dirent_t type);   */  ssize_t os_get_filesize(const char *fname); +/** + * Write a character to the controlling OS terminal + * + * This bypasses the U-Boot console support and writes directly to the OS + * stdout file descriptor. + * + * @param ch	Character to write + */ +void os_putc(int ch); + +/** + * Write a string to the controlling OS terminal + * + * This bypasses the U-Boot console support and writes directly to the OS + * stdout file descriptor. + * + * @param str	String to write (note that \n is not appended) + */ +void os_puts(const char *str); + +/** + * Write the sandbox RAM buffer to a existing file + * + * @param fname		Filename to write memory to (simple binary format) + * @return 0 if OK, -ve on error + */ +int os_write_ram_buf(const char *fname); + +/** + * Read the sandbox RAM buffer from an existing file + * + * @param fname		Filename containing memory (simple binary format) + * @return 0 if OK, -ve on error + */ +int os_read_ram_buf(const char *fname); +  #endif diff --git a/include/part.h b/include/part.h index ce840bd84..4beb6db89 100644 --- a/include/part.h +++ b/include/part.h @@ -58,6 +58,8 @@ typedef struct block_dev_desc {  #define IF_TYPE_MMC		6  #define IF_TYPE_SD		7  #define IF_TYPE_SATA		8 +#define IF_TYPE_HOST		9 +#define IF_TYPE_MAX		10	/* Max number of IF_TYPE_* supported */  /* Part types */  #define PART_TYPE_UNKNOWN	0x00 @@ -102,6 +104,8 @@ block_dev_desc_t* usb_stor_get_dev(int dev);  block_dev_desc_t* mmc_get_dev(int dev);  block_dev_desc_t* systemace_get_dev(int dev);  block_dev_desc_t* mg_disk_get_dev(int dev); +block_dev_desc_t *host_get_dev(int dev); +int host_get_dev_err(int dev, block_dev_desc_t **blk_devp);  /* disk/part.c */  int get_partition_info (block_dev_desc_t * dev_desc, int part, disk_partition_t *info); @@ -123,6 +127,7 @@ static inline block_dev_desc_t* usb_stor_get_dev(int dev) { return NULL; }  static inline block_dev_desc_t* mmc_get_dev(int dev) { return NULL; }  static inline block_dev_desc_t* systemace_get_dev(int dev) { return NULL; }  static inline block_dev_desc_t* mg_disk_get_dev(int dev) { return NULL; } +static inline block_dev_desc_t *host_get_dev(int dev) { return NULL; }  static inline int get_partition_info (block_dev_desc_t * dev_desc, int part,  	disk_partition_t *info) { return -1; } diff --git a/include/sandboxblockdev.h b/include/sandboxblockdev.h new file mode 100644 index 000000000..627787aa3 --- /dev/null +++ b/include/sandboxblockdev.h @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2013, Henrik Nordstrom <henrik@henriknordstrom.net> + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef __SANDBOX_BLOCK_DEV__ +#define __SANDBOX_BLOCK_DEV__ + +struct host_block_dev { +	block_dev_desc_t blk_dev; +	char *filename; +	int fd; +}; + +int host_dev_bind(int dev, char *filename); + +#endif diff --git a/include/sh_tmu.h b/include/sh_tmu.h index f5b42faea..61afc7136 100644 --- a/include/sh_tmu.h +++ b/include/sh_tmu.h @@ -47,7 +47,7 @@ struct tmu_regs {  };  #endif /* CONFIG_SH3 */ -#if defined(CONFIG_SH4) || defined(CONFIG_SH4A) || defined(CONFIG_RMOBILE) +#if defined(CONFIG_SH4) || defined(CONFIG_RMOBILE)  struct tmu_regs {  	u32 reserved;  	u8  tstr; diff --git a/include/vxworks.h b/include/vxworks.h index c5d1577f9..122043c94 100644 --- a/include/vxworks.h +++ b/include/vxworks.h @@ -9,6 +9,9 @@  #define _VXWORKS_H_  int do_bootvx(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]); +void boot_prep_vxworks(bootm_headers_t *images); +void boot_jump_vxworks(bootm_headers_t *images); +void do_bootvx_fdt(bootm_headers_t *images);  /*   * Use bootaddr to find the location in memory that VxWorks diff --git a/lib/Makefile b/lib/Makefile index e787f77be..760340fbd 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -21,6 +21,7 @@ obj-$(CONFIG_BZIP2) += bzlib_randtable.o  obj-$(CONFIG_BZIP2) += bzlib_huffman.o  obj-$(CONFIG_USB_TTY) += circbuf.o  obj-y += crc7.o +obj-y += crc8.o  obj-y += crc16.o  obj-$(CONFIG_OF_CONTROL) += fdtdec.o  obj-$(CONFIG_TEST_FDTDEC) += fdtdec_test.o diff --git a/lib/crc8.c b/lib/crc8.c new file mode 100644 index 000000000..8b68a29e4 --- /dev/null +++ b/lib/crc8.c @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2013 Google, Inc + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#include "linux/crc8.h" + +unsigned int crc8(const unsigned char *vptr, int len) +{ +	const unsigned char *data = vptr; +	unsigned int crc = 0; +	int i, j; + +	for (j = len; j; j--, data++) { +		crc ^= (*data << 8); +		for (i = 8; i; i--) { +			if (crc & 0x8000) +				crc ^= (0x1070 << 3); +			crc <<= 1; +		} +	} + +	return (crc >> 8) & 0xff; +} diff --git a/lib/time.c b/lib/time.c index 09bb05a24..8085aa40d 100644 --- a/lib/time.c +++ b/lib/time.c @@ -71,8 +71,8 @@ unsigned long __weak notrace timer_get_us(void)  }  static unsigned long long usec_to_tick(unsigned long usec)  { -	uint64_t tick = usec * get_tbclk(); -	usec *= get_tbclk(); +	uint64_t tick = usec; +	tick *= get_tbclk();  	do_div(tick, 1000000);  	return tick;  } diff --git a/post/Makefile b/post/Makefile index 143924482..2fa6f8a29 100644 --- a/post/Makefile +++ b/post/Makefile @@ -5,16 +5,14 @@  # SPDX-License-Identifier:	GPL-2.0+  # -obj-$(CONFIG_HAS_POST)	+= post.o +obj-y	+= post.o  obj-$(CONFIG_POST_STD_LIST)	+= tests.o -obj-$(CONFIG_HAS_POST) += drivers/ -ifeq ($(ARCH),powerpc) -obj-$(CONFIG_HAS_POST) += lib_powerpc/ -endif -ifneq ($(filter mpc83xx mpc8xx ppc4xx,$(CPU)),) -obj-$(CONFIG_HAS_POST) += cpu/$(CPU)/ -endif +obj-y += drivers/ +obj-$(CONFIG_PPC) += lib_powerpc/ +obj-$(CONFIG_MPC83xx) += cpu/mpc83xx/ +obj-$(CONFIG_8xx) += cpu/mpc8xx/ +obj-$(CONFIG_4xx) += cpu/ppc4xx/  ifneq ($(filter lwmon lwmon5 netta pdm360ng,$(BOARD)),) -obj-$(CONFIG_HAS_POST) += board/$(BOARD)/ +obj-y += board/$(BOARD)/  endif diff --git a/post/board/lwmon/Makefile b/post/board/lwmon/Makefile index b23debcab..7f6d5a084 100644 --- a/post/board/lwmon/Makefile +++ b/post/board/lwmon/Makefile @@ -5,4 +5,4 @@  # SPDX-License-Identifier:	GPL-2.0+  # -obj-$(CONFIG_HAS_POST)	+= sysmon.o +obj-y += sysmon.o diff --git a/post/board/lwmon5/Makefile b/post/board/lwmon5/Makefile index a50ce67cd..76262c76b 100644 --- a/post/board/lwmon5/Makefile +++ b/post/board/lwmon5/Makefile @@ -5,4 +5,4 @@  #  # SPDX-License-Identifier:	GPL-2.0+ -obj-$(CONFIG_HAS_POST)	+= sysmon.o watchdog.o dspic.o fpga.o dsp.o gdc.o +obj-y += sysmon.o watchdog.o dspic.o fpga.o dsp.o gdc.o diff --git a/post/board/netta/Makefile b/post/board/netta/Makefile index 5c37f497c..8fc1945b0 100644 --- a/post/board/netta/Makefile +++ b/post/board/netta/Makefile @@ -5,4 +5,4 @@  # SPDX-License-Identifier:	GPL-2.0+  # -obj-$(CONFIG_HAS_POST)	+= codec.o dsp.o +obj-y += codec.o dsp.o diff --git a/post/board/pdm360ng/Makefile b/post/board/pdm360ng/Makefile index b43b77b2d..9aa96a1f6 100644 --- a/post/board/pdm360ng/Makefile +++ b/post/board/pdm360ng/Makefile @@ -5,4 +5,4 @@  # SPDX-License-Identifier:	GPL-2.0+  # -obj-$(CONFIG_HAS_POST)	+= coproc_com.o +obj-y += coproc_com.o diff --git a/post/cpu/mpc83xx/Makefile b/post/cpu/mpc83xx/Makefile index 4b3c50e6a..d57b66757 100644 --- a/post/cpu/mpc83xx/Makefile +++ b/post/cpu/mpc83xx/Makefile @@ -5,4 +5,4 @@  # SPDX-License-Identifier:	GPL-2.0+  # -obj-$(CONFIG_HAS_POST)	+= ecc.o +obj-y += ecc.o diff --git a/post/cpu/ppc4xx/Makefile b/post/cpu/ppc4xx/Makefile index ed3e8e87f..e9ec286c7 100644 --- a/post/cpu/ppc4xx/Makefile +++ b/post/cpu/ppc4xx/Makefile @@ -5,12 +5,12 @@  # SPDX-License-Identifier:	GPL-2.0+  # -obj-$(CONFIG_HAS_POST)	+= cache_4xx.o -obj-$(CONFIG_HAS_POST)	+= cache.o -obj-$(CONFIG_HAS_POST)	+= denali_ecc.o -obj-$(CONFIG_HAS_POST)	+= ether.o -obj-$(CONFIG_HAS_POST)	+= fpu.o -obj-$(CONFIG_HAS_POST)	+= ocm.o -obj-$(CONFIG_HAS_POST)	+= spr.o -obj-$(CONFIG_HAS_POST)	+= uart.o -obj-$(CONFIG_HAS_POST)	+= watchdog.o +obj-y += cache_4xx.o +obj-y += cache.o +obj-y += denali_ecc.o +obj-y += ether.o +obj-y += fpu.o +obj-y += ocm.o +obj-y += spr.o +obj-y += uart.o +obj-y += watchdog.o diff --git a/post/drivers/Makefile b/post/drivers/Makefile index 328f880b1..1abfb1ffe 100644 --- a/post/drivers/Makefile +++ b/post/drivers/Makefile @@ -5,4 +5,4 @@  # SPDX-License-Identifier:	GPL-2.0+  # -obj-$(CONFIG_HAS_POST)	+= flash.o i2c.o memory.o rtc.o +obj-y += flash.o i2c.o memory.o rtc.o diff --git a/post/lib_powerpc/Makefile b/post/lib_powerpc/Makefile index d2b8a940d..0cbb6b6bd 100644 --- a/post/lib_powerpc/Makefile +++ b/post/lib_powerpc/Makefile @@ -5,9 +5,9 @@  # SPDX-License-Identifier:	GPL-2.0+  # -obj-$(CONFIG_HAS_POST) += asm.o -obj-$(CONFIG_HAS_POST) += cpu.o cmp.o cmpi.o two.o twox.o three.o threex.o -obj-$(CONFIG_HAS_POST) += threei.o andi.o srawi.o rlwnm.o rlwinm.o rlwimi.o -obj-$(CONFIG_HAS_POST) += store.o load.o cr.o b.o multi.o string.o complex.o +obj-y += asm.o +obj-y += cpu.o cmp.o cmpi.o two.o twox.o three.o threex.o +obj-y += threei.o andi.o srawi.o rlwnm.o rlwinm.o rlwimi.o +obj-y += store.o load.o cr.o b.o multi.o string.o complex.o -obj-$(CONFIG_HAS_POST) += fpu/ +obj-y += fpu/ diff --git a/post/lib_powerpc/fpu/Makefile b/post/lib_powerpc/fpu/Makefile index ee01a313f..ae56a82af 100644 --- a/post/lib_powerpc/fpu/Makefile +++ b/post/lib_powerpc/fpu/Makefile @@ -5,15 +5,15 @@  # SPDX-License-Identifier:	GPL-2.0+  # -obj-$(CONFIG_HAS_POST)	+= 20001122-1.o -obj-$(CONFIG_HAS_POST)	+= 20010114-2.o -obj-$(CONFIG_HAS_POST)	+= 20010226-1.o -obj-$(CONFIG_HAS_POST)	+= 980619-1.o -obj-$(CONFIG_HAS_POST)	+= acc1.o -obj-$(CONFIG_HAS_POST)	+= compare-fp-1.o -obj-$(CONFIG_HAS_POST)	+= fpu.o -obj-$(CONFIG_HAS_POST)	+= mul-subnormal-single-1.o -obj-$(CONFIG_HAS_POST)	+= darwin-ldouble.o +obj-y	+= 20001122-1.o +obj-y	+= 20010114-2.o +obj-y	+= 20010226-1.o +obj-y	+= 980619-1.o +obj-y	+= acc1.o +obj-y	+= compare-fp-1.o +obj-y	+= fpu.o +obj-y	+= mul-subnormal-single-1.o +obj-y	+= darwin-ldouble.o  CFLAGS := $(shell echo $(CFLAGS) | sed s/-msoft-float//)  CFLAGS += -mhard-float -fkeep-inline-functions diff --git a/tools/binutils-version.sh b/scripts/binutils-version.sh index d4d9eb436..d4d9eb436 100755..100644 --- a/tools/binutils-version.sh +++ b/scripts/binutils-version.sh diff --git a/tools/checkpatch.pl b/scripts/checkpatch.pl index 88c5bc773..88c5bc773 100755 --- a/tools/checkpatch.pl +++ b/scripts/checkpatch.pl diff --git a/tools/checkstack.pl b/scripts/checkstack.pl index c1cdc0a92..c1cdc0a92 100755 --- a/tools/checkstack.pl +++ b/scripts/checkstack.pl diff --git a/tools/cleanpatch b/scripts/cleanpatch index 9680d03ad..9680d03ad 100755 --- a/tools/cleanpatch +++ b/scripts/cleanpatch diff --git a/tools/dtc-version.sh b/scripts/dtc-version.sh index e8c94d390..e8c94d390 100755..100644 --- a/tools/dtc-version.sh +++ b/scripts/dtc-version.sh diff --git a/tools/gcc-version.sh b/scripts/gcc-version.sh index debecb556..debecb556 100755..100644 --- a/tools/gcc-version.sh +++ b/scripts/gcc-version.sh diff --git a/tools/setlocalversion b/scripts/setlocalversion index f551b4c4f..f551b4c4f 100755 --- a/tools/setlocalversion +++ b/scripts/setlocalversion diff --git a/spl/.gitignore b/spl/.gitignore deleted file mode 100644 index 7c8814709..000000000 --- a/spl/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -u-boot-spl -u-boot-spl.bin -u-boot-spl.lds -u-boot-spl.map diff --git a/spl/Makefile b/spl/Makefile index 0caa98247..003956ebb 100644 --- a/spl/Makefile +++ b/spl/Makefile @@ -37,22 +37,15 @@ endif  HAVE_VENDOR_COMMON_LIB = $(if $(wildcard $(SRCTREE)/board/$(VENDOR)/common/Makefile),y,n)  ifdef	CONFIG_SPL_START_S_PATH -START_PATH := $(subst ",,$(CONFIG_SPL_START_S_PATH)) +START_PATH := $(CONFIG_SPL_START_S_PATH:"%"=%)  else  START_PATH := $(CPUDIR)  endif -START := $(START_PATH)/start.o -ifeq ($(CPU),x86) -START += $(START_PATH)/start16.o -START += $(START_PATH)/resetvec.o -endif -ifeq ($(CPU),ppc4xx) -START += $(START_PATH)/resetvec.o -endif -ifeq ($(CPU),mpc85xx) -START += $(START_PATH)/resetvec.o -endif +head-y := $(START_PATH)/start.o +head-$(CONFIG_X86) += $(START_PATH)/start16.o $(START_PATH)/resetvec.o +head-$(CONFIG_4xx) += $(START_PATH)/resetvec.o +head-$(CONFIG_MPC85xx) += $(START_PATH)/resetvec.o  LIBS-y += arch/$(ARCH)/lib/ @@ -78,7 +71,7 @@ LIBS-y += fs/  LIBS-$(CONFIG_SPL_LIBGENERIC_SUPPORT) += lib/  LIBS-$(CONFIG_SPL_POWER_SUPPORT) += drivers/power/ \  	drivers/power/pmic/ -LIBS-$(CONFIG_SPL_NAND_SUPPORT) += drivers/mtd/nand/ +LIBS-$(if $(CONFIG_CMD_NAND),$(CONFIG_SPL_NAND_SUPPORT)) += drivers/mtd/nand/  LIBS-$(CONFIG_SPL_ONENAND_SUPPORT) += drivers/mtd/onenand/  LIBS-$(CONFIG_SPL_DMA_SUPPORT) += drivers/dma/  LIBS-$(CONFIG_SPL_POST_MEM_SUPPORT) += post/drivers/ @@ -90,17 +83,13 @@ LIBS-$(CONFIG_SPL_MUSB_NEW_SUPPORT) += drivers/usb/musb-new/  LIBS-$(CONFIG_SPL_USBETH_SUPPORT) += drivers/usb/gadget/  LIBS-$(CONFIG_SPL_WATCHDOG_SUPPORT) += drivers/watchdog/ -ifneq (,$(CONFIG_MX23)$(filter $(SOC), mx25 mx27 mx5 mx6 mx31 mx35)) +ifneq (,$(CONFIG_MX23)$(CONFIG_MX35)$(filter $(SOC), mx25 mx27 mx5 mx6 mx31 mx35))  LIBS-y += arch/$(ARCH)/imx-common/  endif  LIBS-$(CONFIG_ARM) += arch/arm/cpu/  LIBS-$(CONFIG_PPC) += arch/powerpc/cpu/ -ifneq ($(CONFIG_MX23)$(CONFIG_MX35),) -LIBS-y += arch/$(ARCH)/imx-common/ -endif -  LIBS-y := $(patsubst %/, %/built-in.o, $(LIBS-y))  # Add GCC lib @@ -109,7 +98,7 @@ PLATFORM_LIBGCC = $(SPLTREE)/arch/$(ARCH)/lib/libgcc.o  PLATFORM_LIBS := $(filter-out %/libgcc.o, $(filter-out -lgcc, $(PLATFORM_LIBS))) $(PLATFORM_LIBGCC)  endif -START := $(addprefix $(SPLTREE)/,$(START)) +START := $(addprefix $(SPLTREE)/,$(head-y))  LIBS := $(addprefix $(SPLTREE)/,$(sort $(LIBS-y)))  __START := $(subst $(obj),,$(START)) @@ -118,7 +107,7 @@ __LIBS := $(subst $(obj),,$(LIBS))  # Linker Script  ifdef CONFIG_SPL_LDSCRIPT  # need to strip off double quotes -LDSCRIPT := $(addprefix $(SRCTREE)/,$(subst ",,$(CONFIG_SPL_LDSCRIPT))) +LDSCRIPT := $(addprefix $(SRCTREE)/,$(CONFIG_SPL_LDSCRIPT:"%"=%))  endif  ifeq ($(wildcard $(LDSCRIPT)),) diff --git a/test/image/test-imagetools.sh b/test/image/test-imagetools.sh new file mode 100755 index 000000000..9e299e1e5 --- /dev/null +++ b/test/image/test-imagetools.sh @@ -0,0 +1,141 @@ +#!/bin/bash +# +# Written by Guilherme Maciel Ferreira <guilherme.maciel.ferreira@gmail.com> +# +# Sanity check for mkimage and dumpimage tools +# +# SPDX-License-Identifier:	GPL-2.0+ +# +# To run this: +# +# make O=sandbox sandbox_config +# make O=sandbox +# ./test/image/test-imagetools.sh + +BASEDIR=sandbox +SRCDIR=sandbox/boot +IMAGE_NAME="v1.0-test" +IMAGE=linux.img +DATAFILE0=vmlinuz +DATAFILE1=initrd.img +DATAFILE2=System.map +DATAFILES="${DATAFILE0} ${DATAFILE1} ${DATAFILE2}" +TEST_OUT=test_output +MKIMAGE=${BASEDIR}/tools/mkimage +DUMPIMAGE=${BASEDIR}/tools/dumpimage +MKIMAGE_LIST=mkimage.list +DUMPIMAGE_LIST=dumpimage.list + +# Remove all the files we created +cleanup() +{ +	local file + +	for file in ${DATAFILES}; do +		rm -f ${file} ${SRCDIR}/${file} +	done +	rm -f ${IMAGE} ${DUMPIMAGE_LIST} ${MKIMAGE_LIST} ${TEST_OUT} +	rmdir ${SRCDIR} +} + +# Check that two files are the same +assert_equal() +{ +	if ! diff $1 $2; then +		echo "Failed." +		cleanup +		exit 1 +	fi +} + +# Create some test files +create_files() +{ +	local file + +	mkdir -p ${SRCDIR} +	for file in ${DATAFILES}; do +		head -c $RANDOM /dev/urandom >${SRCDIR}/${file} +	done +} + +# Run a command, echoing it first +do_cmd() +{ +	local cmd="$@" + +	echo "# ${cmd}" +	${cmd} 2>&1 +} + +# Run a command, redirecting output +# Args: +#    redirect_file +#    command... +do_cmd_redir() +{ +	local redir="$1" +	shift +	local cmd="$@" + +	echo "# ${cmd}" +	${cmd} >${redir} +} + +# Write files into an image +create_image() +{ +	local files="${SRCDIR}/${DATAFILE0}:${SRCDIR}/${DATAFILE1}" +	files+=":${SRCDIR}/${DATAFILE2}" + +	echo -e "\nBuilding image..." +	do_cmd ${MKIMAGE} -A x86 -O linux -T multi -n \"${IMAGE_NAME}\" \ +		-d ${files} ${IMAGE} +	echo "done." +} + +# Extract files from an image +extract_image() +{ +	echo -e "\nExtracting image contents..." +	do_cmd ${DUMPIMAGE} -i ${IMAGE} -p 0 ${DATAFILE0} +	do_cmd ${DUMPIMAGE} -i ${IMAGE} -p 1 ${DATAFILE1} +	do_cmd ${DUMPIMAGE} -i ${IMAGE} -p 2 ${DATAFILE2} +	do_cmd ${DUMPIMAGE} -i ${IMAGE} -p 2 ${DATAFILE2} -o ${TEST_OUT} +	echo "done." +} + +# List the contents of a file +list_image() +{ +	echo -e "\nListing image contents..." +	do_cmd_redir ${MKIMAGE_LIST} ${MKIMAGE} -l ${IMAGE} +	do_cmd_redir ${DUMPIMAGE_LIST} ${DUMPIMAGE} -l ${IMAGE} +	echo "done." +} + +main() +{ +	local file + +	create_files + +	# Compress and extract multifile images, compare the result +	create_image +	extract_image +	for file in ${DATAFILES}; do +		assert_equal ${file} ${SRCDIR}/${file} +	done +	assert_equal ${TEST_OUT} ${DATAFILE2} + +	# List contents and compares output fro tools +	list_image +	assert_equal ${DUMPIMAGE_LIST} ${MKIMAGE_LIST} + +	# Remove files created +	cleanup + +	echo "Tests passed." +} + +main diff --git a/tools/.gitignore b/tools/.gitignore index a7fee26cd..930fa2e8a 100644 --- a/tools/.gitignore +++ b/tools/.gitignore @@ -3,12 +3,12 @@  /gen_eth_addr  /img2srec  /kwboot +/dumpimage  /mkenvimage  /mkimage  /mpc86x_clk  /mxsboot  /ncb -/ncp  /proftool  /ubsha1  /xway-swap-bytes diff --git a/tools/Makefile b/tools/Makefile index 4a7e7e572..328cea319 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -50,6 +50,7 @@ BIN_FILES-$(CONFIG_BUILD_ENVCRC) += envcrc$(SFX)  BIN_FILES-$(CONFIG_CMD_NET) += gen_eth_addr$(SFX)  BIN_FILES-$(CONFIG_CMD_LOADS) += img2srec$(SFX)  BIN_FILES-$(CONFIG_XWAY_SWAP_BYTES) += xway-swap-bytes$(SFX) +BIN_FILES-y += dumpimage$(SFX)  BIN_FILES-y += mkenvimage$(SFX)  BIN_FILES-y += mkimage$(SFX)  BIN_FILES-$(CONFIG_EXYNOS5250) += mk$(BOARD)spl$(SFX) @@ -74,10 +75,12 @@ EXT_OBJ_FILES-y += lib/sha1.o  # Source files located in the tools directory  NOPED_OBJ_FILES-y += aisimage.o  NOPED_OBJ_FILES-y += default_image.o +NOPED_OBJ_FILES-y += dumpimage.o  NOPED_OBJ_FILES-y += fit_image.o  NOPED_OBJ_FILES-y += image-host.o  NOPED_OBJ_FILES-y += imximage.o  NOPED_OBJ_FILES-y += kwbimage.o +NOPED_OBJ_FILES-y += imagetool.o  NOPED_OBJ_FILES-y += mkenvimage.o  NOPED_OBJ_FILES-y += mkimage.o  NOPED_OBJ_FILES-y += mxsimage.o @@ -202,6 +205,30 @@ $(obj)xway-swap-bytes$(SFX):	$(obj)xway-swap-bytes.o  	$(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^  	$(HOSTSTRIP) $@ +$(obj)dumpimage$(SFX):	$(obj)aisimage.o \ +			$(FIT_SIG_OBJS) \ +			$(obj)crc32.o \ +			$(obj)default_image.o \ +			$(obj)fit_image.o \ +			$(obj)image-fit.o \ +			$(obj)image.o \ +			$(obj)image-host.o \ +			$(obj)imagetool.o \ +			$(obj)imximage.o \ +			$(obj)kwbimage.o \ +			$(obj)dumpimage.o \ +			$(obj)md5.o \ +			$(obj)mxsimage.o \ +			$(obj)omapimage.o \ +			$(obj)os_support.o \ +			$(obj)pblimage.o \ +			$(obj)sha1.o \ +			$(obj)ublimage.o \ +			$(LIBFDT_OBJS) \ +			$(RSA_OBJS) +	$(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^ $(HOSTLIBS) +	$(HOSTSTRIP) $@ +  $(obj)mkenvimage$(SFX):	$(obj)crc32.o $(obj)mkenvimage.o \  	$(obj)os_support.o  	$(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^ @@ -215,6 +242,7 @@ $(obj)mkimage$(SFX):	$(obj)aisimage.o \  			$(obj)image-fit.o \  			$(obj)image-host.o \  			$(obj)image.o \ +			$(obj)imagetool.o \  			$(obj)imximage.o \  			$(obj)kwbimage.o \  			$(obj)md5.o \ diff --git a/tools/aisimage.c b/tools/aisimage.c index 04fb64989..8de370a2e 100644 --- a/tools/aisimage.c +++ b/tools/aisimage.c @@ -5,7 +5,7 @@   * SPDX-License-Identifier:	GPL-2.0+   */ -#include "mkimage.h" +#include "imagetool.h"  #include "aisimage.h"  #include <image.h> @@ -176,7 +176,7 @@ static uint32_t *ais_insert_cmd_header(uint32_t cmd, uint32_t nargs,  } -static uint32_t *ais_alloc_buffer(struct mkimage_params *params) +static uint32_t *ais_alloc_buffer(struct image_tool_params *params)  {  	int dfd;  	struct stat sbuf; @@ -216,7 +216,7 @@ static uint32_t *ais_alloc_buffer(struct mkimage_params *params)  	return ptr;  } -static uint32_t *ais_copy_image(struct mkimage_params *params, +static uint32_t *ais_copy_image(struct image_tool_params *params,  	uint32_t *aisptr)  { @@ -252,7 +252,7 @@ static uint32_t *ais_copy_image(struct mkimage_params *params,  } -static int aisimage_generate(struct mkimage_params *params, +static int aisimage_generate(struct image_tool_params *params,  	struct image_type_params *tparams)  {  	FILE *fd = NULL; @@ -370,7 +370,7 @@ static int aisimage_check_image_types(uint8_t type)  }  static int aisimage_verify_header(unsigned char *ptr, int image_size, -			struct mkimage_params *params) +			struct image_tool_params *params)  {  	struct ais_header *ais_hdr = (struct ais_header *)ptr; @@ -384,11 +384,11 @@ static int aisimage_verify_header(unsigned char *ptr, int image_size,  }  static void aisimage_set_header(void *ptr, struct stat *sbuf, int ifd, -				struct mkimage_params *params) +				struct image_tool_params *params)  {  } -int aisimage_check_params(struct mkimage_params *params) +int aisimage_check_params(struct image_tool_params *params)  {  	if (!params)  		return CFG_INVALID; @@ -427,5 +427,5 @@ static struct image_type_params aisimage_params = {  void init_ais_image_type(void)  { -	mkimage_register(&aisimage_params); +	register_image_type(&aisimage_params);  } diff --git a/tools/default_image.c b/tools/default_image.c index fd8b9f5f1..0a0792e50 100644 --- a/tools/default_image.c +++ b/tools/default_image.c @@ -14,7 +14,7 @@   * SPDX-License-Identifier:	GPL-2.0+   */ -#include "mkimage.h" +#include "imagetool.h"  #include <image.h>  #include <u-boot/crc.h> @@ -29,7 +29,7 @@ static int image_check_image_types(uint8_t type)  		return EXIT_FAILURE;  } -static int image_check_params(struct mkimage_params *params) +static int image_check_params(struct image_tool_params *params)  {  	return	((params->dflag && (params->fflag || params->lflag)) ||  		(params->fflag && (params->dflag || params->lflag)) || @@ -37,7 +37,7 @@ static int image_check_params(struct mkimage_params *params)  }  static int image_verify_header(unsigned char *ptr, int image_size, -			struct mkimage_params *params) +			struct image_tool_params *params)  {  	uint32_t len;  	const unsigned char *data; @@ -86,7 +86,7 @@ static int image_verify_header(unsigned char *ptr, int image_size,  }  static void image_set_header(void *ptr, struct stat *sbuf, int ifd, -				struct mkimage_params *params) +				struct image_tool_params *params)  {  	uint32_t checksum; @@ -117,6 +117,62 @@ static void image_set_header(void *ptr, struct stat *sbuf, int ifd,  	image_set_hcrc(hdr, checksum);  } +static int image_save_datafile(struct image_tool_params *params, +			       ulong file_data, ulong file_len) +{ +	int dfd; +	const char *datafile = params->outfile; + +	dfd = open(datafile, O_RDWR | O_CREAT | O_TRUNC | O_BINARY, +		   S_IRUSR | S_IWUSR); +	if (dfd < 0) { +		fprintf(stderr, "%s: Can't open \"%s\": %s\n", +			params->cmdname, datafile, strerror(errno)); +		return -1; +	} + +	if (write(dfd, (void *)file_data, file_len) != (ssize_t)file_len) { +		fprintf(stderr, "%s: Write error on \"%s\": %s\n", +			params->cmdname, datafile, strerror(errno)); +		close(dfd); +		return -1; +	} + +	close(dfd); + +	return 0; +} + +static int image_extract_datafile(void *ptr, struct image_tool_params *params) +{ +	const image_header_t *hdr = (const image_header_t *)ptr; +	ulong file_data; +	ulong file_len; + +	if (image_check_type(hdr, IH_TYPE_MULTI)) { +		ulong idx = params->pflag; +		ulong count; + +		/* get the number of data files present in the image */ +		count = image_multi_count(hdr); + +		/* retrieve the "data file" at the idx position */ +		image_multi_getimg(hdr, idx, &file_data, &file_len); + +		if ((file_len == 0) || (idx >= count)) { +			fprintf(stderr, "%s: No such data file %ld in \"%s\"\n", +				params->cmdname, idx, params->imagefile); +			return -1; +		} +	} else { +		file_data = image_get_data(hdr); +		file_len = image_get_size(hdr); +	} + +	/* save the "data file" into the file system */ +	return image_save_datafile(params, file_data, file_len); +} +  /*   * Default image type parameters definition   */ @@ -128,10 +184,11 @@ static struct image_type_params defimage_params = {  	.verify_header = image_verify_header,  	.print_header = image_print_contents,  	.set_header = image_set_header, +	.extract_datafile = image_extract_datafile,  	.check_params = image_check_params,  };  void init_default_image_type(void)  { -	mkimage_register(&defimage_params); +	register_image_type(&defimage_params);  } diff --git a/tools/dumpimage.c b/tools/dumpimage.c new file mode 100644 index 000000000..542ee2821 --- /dev/null +++ b/tools/dumpimage.c @@ -0,0 +1,305 @@ +/* + * Based on mkimage.c. + * + * Written by Guilherme Maciel Ferreira <guilherme.maciel.ferreira@gmail.com> + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#include "dumpimage.h" +#include <image.h> +#include <version.h> + +static void usage(void); + +/* image_type_params linked list to maintain registered image types supports */ +static struct image_type_params *dumpimage_tparams; + +/* parameters initialized by core will be used by the image type code */ +static struct image_tool_params params = { +	.type = IH_TYPE_KERNEL, +}; + +/** + * dumpimage_register() - register respective image generation/list support + * + * the input struct image_type_params is checked and appended to the link + * list, if the input structure is already registered, issue an error + * + * @tparams: Image type parameters + */ +static void dumpimage_register(struct image_type_params *tparams) +{ +	struct image_type_params **tp; + +	if (!tparams) { +		fprintf(stderr, "%s: %s: Null input\n", params.cmdname, +			__func__); +		exit(EXIT_FAILURE); +	} + +	/* scan the linked list, check for registry and point the last one */ +	for (tp = &dumpimage_tparams; *tp != NULL; tp = &(*tp)->next) { +		if (!strcmp((*tp)->name, tparams->name)) { +			fprintf(stderr, "%s: %s already registered\n", +				params.cmdname, tparams->name); +			return; +		} +	} + +	/* add input struct entry at the end of link list */ +	*tp = tparams; +	/* mark input entry as last entry in the link list */ +	tparams->next = NULL; + +	debug("Registered %s\n", tparams->name); +} + +/** + * dumpimage_get_type() - find the image type params for a given image type + * + * Scan all registered image types and check the input type_id for each + * supported image type + * + * @return respective image_type_params pointer. If the input type is not + * supported by any of registered image types, returns NULL + */ +static struct image_type_params *dumpimage_get_type(int type) +{ +	struct image_type_params *curr; + +	for (curr = dumpimage_tparams; curr != NULL; curr = curr->next) { +		if (curr->check_image_type) { +			if (!curr->check_image_type(type)) +				return curr; +		} +	} +	return NULL; +} + +/* + * dumpimage_verify_print_header() - verifies the image header + * + * Scan registered image types and verify the image_header for each + * supported image type. If verification is successful, this prints + * the respective header. + * + * @return 0 on success, negative if input image format does not match with + * any of supported image types + */ +static int dumpimage_verify_print_header(void *ptr, struct stat *sbuf) +{ +	int retval = -1; +	struct image_type_params *curr; + +	for (curr = dumpimage_tparams; curr != NULL; curr = curr->next) { +		if (curr->verify_header) { +			retval = curr->verify_header((unsigned char *)ptr, +						     sbuf->st_size, ¶ms); +			if (retval != 0) +				continue; +			/* +			 * Print the image information  if verify is +			 * successful +			 */ +			if (curr->print_header) { +				curr->print_header(ptr); +			} else { +				fprintf(stderr, +					"%s: print_header undefined for %s\n", +					params.cmdname, curr->name); +			} +			break; +		} +	} + +	return retval; +} + +/* + * dumpimage_extract_datafile - + * + * It scans all registered image types, + * verifies image_header for each supported image type + * if verification is successful, it extracts the desired file, + * indexed by pflag, from the image + * + * returns negative if input image format does not match with any of + * supported image types + */ +static int dumpimage_extract_datafile(void *ptr, struct stat *sbuf) +{ +	int retval = -1; +	struct image_type_params *curr; + +	for (curr = dumpimage_tparams; curr != NULL; curr = curr->next) { +		if (curr->verify_header) { +			retval = curr->verify_header((unsigned char *)ptr, +						     sbuf->st_size, ¶ms); +			if (retval != 0) +				continue; +			/* +			 * Extract the file from the image +			 * if verify is successful +			 */ +			if (curr->extract_datafile) { +				curr->extract_datafile(ptr, ¶ms); +			} else { +				fprintf(stderr, +					"%s: extract_datafile undefined for %s\n", +					params.cmdname, curr->name); +			break; +			} +		} +	} + +	return retval; +} + +int main(int argc, char **argv) +{ +	int opt; +	int ifd = -1; +	struct stat sbuf; +	char *ptr; +	int retval = 0; +	struct image_type_params *tparams = NULL; + +	/* Init all image generation/list support */ +	register_image_tool(dumpimage_register); + +	params.cmdname = *argv; + +	while ((opt = getopt(argc, argv, "li:o:p:V")) != -1) { +		switch (opt) { +		case 'l': +			params.lflag = 1; +			break; +		case 'i': +			params.imagefile = optarg; +			params.iflag = 1; +			break; +		case 'o': +			params.outfile = optarg; +			break; +		case 'p': +			params.pflag = strtoul(optarg, &ptr, 10); +			if (*ptr) { +				fprintf(stderr, +					"%s: invalid file position %s\n", +					params.cmdname, *argv); +				exit(EXIT_FAILURE); +			} +			break; +		case 'V': +			printf("dumpimage version %s\n", PLAIN_VERSION); +			exit(EXIT_SUCCESS); +		default: +			usage(); +		} +	} + +	if (optind >= argc) +		usage(); + +	/* set tparams as per input type_id */ +	tparams = dumpimage_get_type(params.type); +	if (tparams == NULL) { +		fprintf(stderr, "%s: unsupported type %s\n", +			params.cmdname, genimg_get_type_name(params.type)); +		exit(EXIT_FAILURE); +	} + +	/* +	 * check the passed arguments parameters meets the requirements +	 * as per image type to be generated/listed +	 */ +	if (tparams->check_params) { +		if (tparams->check_params(¶ms)) +			usage(); +	} + +	if (params.iflag) +		params.datafile = argv[optind]; +	else +		params.imagefile = argv[optind]; +	if (!params.outfile) +		params.outfile = params.datafile; + +	ifd = open(params.imagefile, O_RDONLY|O_BINARY); +	if (ifd < 0) { +		fprintf(stderr, "%s: Can't open \"%s\": %s\n", +			params.cmdname, params.imagefile, +			strerror(errno)); +		exit(EXIT_FAILURE); +	} + +	if (params.lflag || params.iflag) { +		if (fstat(ifd, &sbuf) < 0) { +			fprintf(stderr, "%s: Can't stat \"%s\": %s\n", +				params.cmdname, params.imagefile, +				strerror(errno)); +			exit(EXIT_FAILURE); +		} + +		if ((unsigned)sbuf.st_size < tparams->header_size) { +			fprintf(stderr, +				"%s: Bad size: \"%s\" is not valid image\n", +				params.cmdname, params.imagefile); +			exit(EXIT_FAILURE); +		} + +		ptr = mmap(0, sbuf.st_size, PROT_READ, MAP_SHARED, ifd, 0); +		if (ptr == MAP_FAILED) { +			fprintf(stderr, "%s: Can't read \"%s\": %s\n", +				params.cmdname, params.imagefile, +				strerror(errno)); +			exit(EXIT_FAILURE); +		} + +		/* +		 * Both calls bellow scan through dumpimage registry for all +		 * supported image types and verify the input image file +		 * header for match +		 */ +		if (params.iflag) { +			/* +			 * Extract the data files from within the matched +			 * image type. Returns the error code if not matched +			 */ +			retval = dumpimage_extract_datafile(ptr, &sbuf); +		} else { +			/* +			 * Print the image information for matched image type +			 * Returns the error code if not matched +			 */ +			retval = dumpimage_verify_print_header(ptr, &sbuf); +		} + +		(void)munmap((void *)ptr, sbuf.st_size); +		(void)close(ifd); + +		return retval; +	} + +	(void)close(ifd); + +	return EXIT_SUCCESS; +} + +static void usage(void) +{ +	fprintf(stderr, "Usage: %s -l image\n" +		"          -l ==> list image header information\n", +		params.cmdname); +	fprintf(stderr, +		"       %s -i image [-p position] [-o outfile] data_file\n" +		"          -i ==> extract from the 'image' a specific 'data_file'" +		", indexed by 'position' (starting at 0)\n", +		params.cmdname); +	fprintf(stderr, +		"       %s -V ==> print version information and exit\n", +		params.cmdname); + +	exit(EXIT_FAILURE); +} diff --git a/tools/dumpimage.h b/tools/dumpimage.h new file mode 100644 index 000000000..d78523ded --- /dev/null +++ b/tools/dumpimage.h @@ -0,0 +1,33 @@ +/* + * Based on mkimage.c. + * + * Written by Guilherme Maciel Ferreira <guilherme.maciel.ferreira@gmail.com> + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef _DUMPIMAGE_H_ +#define _DUMPIMAGE_H_ + +#include "os_support.h" +#include <errno.h> +#include <fcntl.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <sys/stat.h> +#include <time.h> +#include <unistd.h> +#include <sha1.h> +#include "fdt_host.h" +#include "imagetool.h" + +#undef DUMPIMAGE_DEBUG + +#ifdef DUMPIMAGE_DEBUG +#define debug(fmt, args...)	printf(fmt, ##args) +#else +#define debug(fmt, args...) +#endif /* DUMPIMAGE_DEBUG */ + +#endif /* _DUMPIMAGE_H_ */ diff --git a/tools/fit_image.c b/tools/fit_image.c index 0400a6067..1466164f0 100644 --- a/tools/fit_image.c +++ b/tools/fit_image.c @@ -14,6 +14,7 @@   * SPDX-License-Identifier:	GPL-2.0+   */ +#include "imagetool.h"  #include "mkimage.h"  #include <image.h>  #include <u-boot/crc.h> @@ -21,7 +22,7 @@  static image_header_t header;  static int fit_verify_header (unsigned char *ptr, int image_size, -			struct mkimage_params *params) +			struct image_tool_params *params)  {  	return fdt_check_header(ptr);  } @@ -34,7 +35,7 @@ static int fit_check_image_types (uint8_t type)  		return EXIT_FAILURE;  } -int mmap_fdt(struct mkimage_params *params, const char *fname, void **blobp, +int mmap_fdt(struct image_tool_params *params, const char *fname, void **blobp,  		struct stat *sbuf)  {  	void *ptr; @@ -88,7 +89,7 @@ int mmap_fdt(struct mkimage_params *params, const char *fname, void **blobp,   * returns:   *     only on success, otherwise calls exit (EXIT_FAILURE);   */ -static int fit_handle_file (struct mkimage_params *params) +static int fit_handle_file(struct image_tool_params *params)  {  	char tmpfile[MKIMAGE_MAX_TMPFILE_LEN];  	char cmd[MKIMAGE_MAX_DTC_CMDLINE_LEN]; @@ -184,7 +185,7 @@ err_system:  	return -1;  } -static int fit_check_params (struct mkimage_params *params) +static int fit_check_params(struct image_tool_params *params)  {  	return	((params->dflag && (params->fflag || params->lflag)) ||  		(params->fflag && (params->dflag || params->lflag)) || @@ -205,5 +206,5 @@ static struct image_type_params fitimage_params = {  void init_fit_image_type (void)  { -	mkimage_register (&fitimage_params); +	register_image_type(&fitimage_params);  } diff --git a/tools/imagetool.c b/tools/imagetool.c new file mode 100644 index 000000000..29d218909 --- /dev/null +++ b/tools/imagetool.c @@ -0,0 +1,58 @@ +/* + * (C) Copyright 2013 + * + * Written by Guilherme Maciel Ferreira <guilherme.maciel.ferreira@gmail.com> + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#include "imagetool.h" + +/* + * Callback function to register a image type within a tool + */ +static imagetool_register_t register_func; + +/* + * register_image_tool - + * + * The tool provides its own registration function in order to all image + * types initialize themselves. + */ +void register_image_tool(imagetool_register_t image_register) +{ +	/* +	 * Save the image tool callback function. It will be used to register +	 * image types within that tool +	 */ +	register_func = image_register; + +	/* Init Freescale PBL Boot image generation/list support */ +	init_pbl_image_type(); +	/* Init Kirkwood Boot image generation/list support */ +	init_kwb_image_type(); +	/* Init Freescale imx Boot image generation/list support */ +	init_imx_image_type(); +	/* Init Freescale mxs Boot image generation/list support */ +	init_mxs_image_type(); +	/* Init FIT image generation/list support */ +	init_fit_image_type(); +	/* Init TI OMAP Boot image generation/list support */ +	init_omap_image_type(); +	/* Init Default image generation/list support */ +	init_default_image_type(); +	/* Init Davinci UBL support */ +	init_ubl_image_type(); +	/* Init Davinci AIS support */ +	init_ais_image_type(); +} + +/* + * register_image_type - + * + * Register a image type within a tool + */ +void register_image_type(struct image_type_params *tparams) +{ +	register_func(tparams); +} diff --git a/tools/imagetool.h b/tools/imagetool.h new file mode 100644 index 000000000..c2c9aea60 --- /dev/null +++ b/tools/imagetool.h @@ -0,0 +1,173 @@ +/* + * (C) Copyright 2013 + * + * Written by Guilherme Maciel Ferreira <guilherme.maciel.ferreira@gmail.com> + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef _IMAGETOOL_H_ +#define _IMAGETOOL_H_ + +#include "os_support.h" +#include <errno.h> +#include <fcntl.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <sys/stat.h> +#include <time.h> +#include <unistd.h> +#include <sha1.h> +#include "fdt_host.h" + +#define ARRAY_SIZE(x)		(sizeof(x) / sizeof((x)[0])) + +#define IH_ARCH_DEFAULT		IH_ARCH_INVALID + +/* + * This structure defines all such variables those are initialized by + * mkimage and dumpimage main core and need to be referred by image + * type specific functions + */ +struct image_tool_params { +	int dflag; +	int eflag; +	int fflag; +	int iflag; +	int lflag; +	int pflag; +	int vflag; +	int xflag; +	int skipcpy; +	int os; +	int arch; +	int type; +	int comp; +	char *dtc; +	unsigned int addr; +	unsigned int ep; +	char *imagename; +	char *imagename2; +	char *datafile; +	char *imagefile; +	char *cmdname; +	const char *outfile;	/* Output filename */ +	const char *keydir;	/* Directory holding private keys */ +	const char *keydest;	/* Destination .dtb for public key */ +	const char *comment;	/* Comment to add to signature node */ +	int require_keys;	/* 1 to mark signing keys as 'required' */ +}; + +/* + * image type specific variables and callback functions + */ +struct image_type_params { +	/* name is an identification tag string for added support */ +	char *name; +	/* +	 * header size is local to the specific image type to be supported, +	 * mkimage core treats this as number of bytes +	 */ +	uint32_t header_size; +	/* Image type header pointer */ +	void *hdr; +	/* +	 * There are several arguments that are passed on the command line +	 * and are registered as flags in image_tool_params structure. +	 * This callback function can be used to check the passed arguments +	 * are in-lined with the image type to be supported +	 * +	 * Returns 1 if parameter check is successful +	 */ +	int (*check_params) (struct image_tool_params *); +	/* +	 * This function is used by list command (i.e. mkimage -l <filename>) +	 * image type verification code must be put here +	 * +	 * Returns 0 if image header verification is successful +	 * otherwise, returns respective negative error codes +	 */ +	int (*verify_header) (unsigned char *, int, struct image_tool_params *); +	/* Prints image information abstracting from image header */ +	void (*print_header) (const void *); +	/* +	 * The header or image contents need to be set as per image type to +	 * be generated using this callback function. +	 * further output file post processing (for ex. checksum calculation, +	 * padding bytes etc..) can also be done in this callback function. +	 */ +	void (*set_header) (void *, struct stat *, int, +					struct image_tool_params *); +	/* +	 * This function is used by the command to retrieve a data file from +	 * the image (i.e. dumpimage -i <image> -p <position> <data_file>). +	 * Thus the code to extract a file from an image must be put here. +	 * +	 * Returns 0 if the file was successfully retrieved from the image, +	 * or a negative value on error. +	 */ +	int (*extract_datafile) (void *, struct image_tool_params *); +	/* +	 * Some image generation support for ex (default image type) supports +	 * more than one type_ids, this callback function is used to check +	 * whether input (-T <image_type>) is supported by registered image +	 * generation/list low level code +	 */ +	int (*check_image_type) (uint8_t); +	/* This callback function will be executed if fflag is defined */ +	int (*fflag_handle) (struct image_tool_params *); +	/* +	 * This callback function will be executed for variable size record +	 * It is expected to build this header in memory and return its length +	 * and a pointer to it by using image_type_params.header_size and +	 * image_type_params.hdr. The return value shall indicate if an +	 * additional padding should be used when copying the data image +	 * by returning the padding length. +	 */ +	int (*vrec_header) (struct image_tool_params *, +		struct image_type_params *); +	/* pointer to the next registered entry in linked list */ +	struct image_type_params *next; +}; + +/* + * Tool registration function. + */ +typedef void (*imagetool_register_t)(struct image_type_params *); + +/* + * Initializes all image types with the given registration callback + * function. + * An image tool uses this function to initialize all image types. + */ +void register_image_tool(imagetool_register_t image_register); + +/* + * Register a image type within a tool. + * An image type uses this function to register itself within + * all tools. + */ +void register_image_type(struct image_type_params *tparams); + +/* + * There is a c file associated with supported image type low level code + * for ex. default_image.c, fit_image.c + * init_xxx_type() is the only function referred by image tool core to avoid + * a single lined header file, you can define them here + * + * Supported image types init functions + */ +void init_default_image_type(void); +void init_pbl_image_type(void); +void init_ais_image_type(void); +void init_kwb_image_type(void); +void init_imx_image_type(void); +void init_mxs_image_type(void); +void init_fit_image_type(void); +void init_ubl_image_type(void); +void init_omap_image_type(void); + +void pbl_load_uboot(int fd, struct image_tool_params *mparams); + +#endif /* _IMAGETOOL_H_ */ diff --git a/tools/imximage.c b/tools/imximage.c index 511e3f203..18dc051c5 100644 --- a/tools/imximage.c +++ b/tools/imximage.c @@ -9,7 +9,7 @@   * SPDX-License-Identifier:	GPL-2.0+   */ -#include "mkimage.h" +#include "imagetool.h"  #include <image.h>  #include "imximage.h" @@ -520,7 +520,7 @@ static int imximage_check_image_types(uint8_t type)  }  static int imximage_verify_header(unsigned char *ptr, int image_size, -			struct mkimage_params *params) +			struct image_tool_params *params)  {  	struct imx_header *imx_hdr = (struct imx_header *) ptr; @@ -549,7 +549,7 @@ static void imximage_print_header(const void *ptr)  }  static void imximage_set_header(void *ptr, struct stat *sbuf, int ifd, -				struct mkimage_params *params) +				struct image_tool_params *params)  {  	struct imx_header *imxhdr = (struct imx_header *)ptr;  	uint32_t dcd_len; @@ -589,7 +589,7 @@ static void imximage_set_header(void *ptr, struct stat *sbuf, int ifd,  	}  } -int imximage_check_params(struct mkimage_params *params) +int imximage_check_params(struct image_tool_params *params)  {  	if (!params)  		return CFG_INVALID; @@ -611,7 +611,7 @@ int imximage_check_params(struct mkimage_params *params)  		(params->xflag) || !(strlen(params->imagename));  } -static int imximage_generate(struct mkimage_params *params, +static int imximage_generate(struct image_tool_params *params,  	struct image_type_params *tparams)  {  	struct imx_header *imxhdr; @@ -701,5 +701,5 @@ static struct image_type_params imximage_params = {  void init_imx_image_type(void)  { -	mkimage_register(&imximage_params); +	register_image_type(&imximage_params);  } diff --git a/tools/kwbimage.c b/tools/kwbimage.c index 1df6b2051..109d61686 100644 --- a/tools/kwbimage.c +++ b/tools/kwbimage.c @@ -6,7 +6,7 @@   * SPDX-License-Identifier:	GPL-2.0+   */ -#include "mkimage.h" +#include "imagetool.h"  #include <image.h>  #include "kwbimage.h" @@ -54,7 +54,7 @@ static int lineno = -1;  /*   * Report Error if xflag is set in addition to default   */ -static int kwbimage_check_params (struct mkimage_params *params) +static int kwbimage_check_params(struct image_tool_params *params)  {  	if (!strlen (params->imagename)) {  		printf ("Error:%s - Configuration file not specified, " @@ -288,7 +288,7 @@ INVL_CMD:  }  static void kwbimage_set_header (void *ptr, struct stat *sbuf, int ifd, -				struct mkimage_params *params) +				struct image_tool_params *params)  {  	struct kwb_header *hdr = (struct kwb_header *)ptr;  	bhr_t *mhdr = &hdr->kwb_hdr; @@ -322,7 +322,7 @@ static void kwbimage_set_header (void *ptr, struct stat *sbuf, int ifd,  }  static int kwbimage_verify_header (unsigned char *ptr, int image_size, -			struct mkimage_params *params) +			struct image_tool_params *params)  {  	struct kwb_header *hdr = (struct kwb_header *)ptr;  	bhr_t *mhdr = &hdr->kwb_hdr; @@ -382,5 +382,5 @@ static struct image_type_params kwbimage_params = {  void init_kwb_image_type (void)  { -	mkimage_register (&kwbimage_params); +	register_image_type(&kwbimage_params);  } diff --git a/tools/mkimage.c b/tools/mkimage.c index 7f221013e..123d0c7d9 100644 --- a/tools/mkimage.c +++ b/tools/mkimage.c @@ -19,7 +19,7 @@ static void usage(void);  struct image_type_params *mkimage_tparams = NULL;  /* parameters initialized by core will be used by the image type code */ -struct mkimage_params params = { +struct image_tool_params params = {  	.os = IH_OS_LINUX,  	.arch = IH_ARCH_PPC,  	.type = IH_TYPE_KERNEL, @@ -139,24 +139,8 @@ main (int argc, char **argv)  	struct image_type_params *tparams = NULL;  	int pad_len = 0; -	/* Init Freescale PBL Boot image generation/list support */ -	init_pbl_image_type(); -	/* Init Kirkwood Boot image generation/list support */ -	init_kwb_image_type (); -	/* Init Freescale imx Boot image generation/list support */ -	init_imx_image_type (); -	/* Init Freescale mxs Boot image generation/list support */ -	init_mxs_image_type(); -	/* Init FIT image generation/list support */ -	init_fit_image_type (); -	/* Init TI OMAP Boot image generation/list support */ -	init_omap_image_type(); -	/* Init Default image generation/list support */ -	init_default_image_type (); -	/* Init Davinci UBL support */ -	init_ubl_image_type(); -	/* Init Davinci AIS support */ -	init_ais_image_type(); +	/* Init all image generation/list support */ +	register_image_tool(mkimage_register);  	params.cmdname = *argv;  	params.addr = params.ep = 0; @@ -632,8 +616,7 @@ copy_file (int ifd, const char *datafile, int pad)  	(void) close (dfd);  } -void -usage () +static void usage(void)  {  	fprintf (stderr, "Usage: %s -l image\n"  			 "          -l ==> list image header information\n", diff --git a/tools/mkimage.h b/tools/mkimage.h index af491544e..d5491b6e6 100644 --- a/tools/mkimage.h +++ b/tools/mkimage.h @@ -20,6 +20,7 @@  #include <unistd.h>  #include <sha1.h>  #include "fdt_host.h" +#include "imagetool.h"  #undef MKIMAGE_DEBUG @@ -29,8 +30,6 @@  #define debug(fmt,args...)  #endif /* MKIMAGE_DEBUG */ -#define ARRAY_SIZE(x)		(sizeof(x) / sizeof((x)[0])) -  static inline void *map_sysmem(ulong paddr, unsigned long len)  {  	return (void *)(uintptr_t)paddr; @@ -47,124 +46,4 @@ static inline ulong map_to_sysmem(void *ptr)  #define MKIMAGE_MAX_DTC_CMDLINE_LEN	512  #define MKIMAGE_DTC			"dtc"   /* assume dtc is in $PATH */ -#define IH_ARCH_DEFAULT		IH_ARCH_INVALID - -/* - * This structure defines all such variables those are initialized by - * mkimage main core and need to be referred by image type specific - * functions - */ -struct mkimage_params { -	int dflag; -	int eflag; -	int fflag; -	int lflag; -	int vflag; -	int xflag; -	int skipcpy; -	int os; -	int arch; -	int type; -	int comp; -	char *dtc; -	unsigned int addr; -	unsigned int ep; -	char *imagename; -	char *imagename2; -	char *datafile; -	char *imagefile; -	char *cmdname; -	const char *keydir;	/* Directory holding private keys */ -	const char *keydest;	/* Destination .dtb for public key */ -	const char *comment;	/* Comment to add to signature node */ -	int require_keys;	/* 1 to mark signing keys as 'required' */ -}; - -/* - * image type specific variables and callback functions - */ -struct image_type_params { -	/* name is an identification tag string for added support */ -	char *name; -	/* -	 * header size is local to the specific image type to be supported, -	 * mkimage core treats this as number of bytes -	 */ -	uint32_t header_size; -	/* Image type header pointer */ -	void *hdr; -	/* -	 * There are several arguments that are passed on the command line -	 * and are registered as flags in mkimage_params structure. -	 * This callback function can be used to check the passed arguments -	 * are in-lined with the image type to be supported -	 * -	 * Returns 1 if parameter check is successful -	 */ -	int (*check_params) (struct mkimage_params *); -	/* -	 * This function is used by list command (i.e. mkimage -l <filename>) -	 * image type verification code must be put here -	 * -	 * Returns 0 if image header verification is successful -	 * otherwise, returns respective negative error codes -	 */ -	int (*verify_header) (unsigned char *, int, struct mkimage_params *); -	/* Prints image information abstracting from image header */ -	void (*print_header) (const void *); -	/* -	 * The header or image contents need to be set as per image type to -	 * be generated using this callback function. -	 * further output file post processing (for ex. checksum calculation, -	 * padding bytes etc..) can also be done in this callback function. -	 */ -	void (*set_header) (void *, struct stat *, int, -					struct mkimage_params *); -	/* -	 * Some image generation support for ex (default image type) supports -	 * more than one type_ids, this callback function is used to check -	 * whether input (-T <image_type>) is supported by registered image -	 * generation/list low level code -	 */ -	int (*check_image_type) (uint8_t); -	/* This callback function will be executed if fflag is defined */ -	int (*fflag_handle) (struct mkimage_params *); -	/* -	 * This callback function will be executed for variable size record -	 * It is expected to build this header in memory and return its length -	 * and a pointer to it by using image_type_params.header_size and -	 * image_type_params.hdr. The return value shall indicate if an -	 * additional padding should be used when copying the data image -	 * by returning the padding length. -	 */ -	int (*vrec_header) (struct mkimage_params *, -		struct image_type_params *); -	/* pointer to the next registered entry in linked list */ -	struct image_type_params *next; -}; - -/* - * Exported functions - */ -void mkimage_register (struct image_type_params *tparams); - -/* - * There is a c file associated with supported image type low level code - * for ex. default_image.c, fit_image.c - * init is the only function referred by mkimage core. - * to avoid a single lined header file, you can define them here - * - * Supported image types init functions - */ -void pbl_load_uboot(int fd, struct mkimage_params *mparams); -void init_pbl_image_type(void); -void init_ais_image_type(void); -void init_kwb_image_type (void); -void init_imx_image_type (void); -void init_mxs_image_type(void); -void init_default_image_type (void); -void init_fit_image_type (void); -void init_ubl_image_type(void); -void init_omap_image_type(void); -  #endif /* _MKIIMAGE_H_ */ diff --git a/tools/mxsimage.c b/tools/mxsimage.c index 7bd9deef5..045b35a39 100644 --- a/tools/mxsimage.c +++ b/tools/mxsimage.c @@ -17,7 +17,7 @@  #include <openssl/evp.h> -#include "mkimage.h" +#include "imagetool.h"  #include "mxsimage.h"  #include <image.h> @@ -2149,11 +2149,11 @@ static int mxsimage_check_image_types(uint8_t type)  }  static void mxsimage_set_header(void *ptr, struct stat *sbuf, int ifd, -				struct mkimage_params *params) +				struct image_tool_params *params)  {  } -int mxsimage_check_params(struct mkimage_params *params) +int mxsimage_check_params(struct image_tool_params *params)  {  	if (!params)  		return -1; @@ -2194,7 +2194,7 @@ static int mxsimage_verify_print_header(char *file, int silent)  char *imagefile;  static int mxsimage_verify_header(unsigned char *ptr, int image_size, -			struct mkimage_params *params) +			struct image_tool_params *params)  {  	struct sb_boot_image_header *hdr; @@ -2292,7 +2292,7 @@ static int sb_build_image(struct sb_image_ctx *ictx,  	return 0;  } -static int mxsimage_generate(struct mkimage_params *params, +static int mxsimage_generate(struct image_tool_params *params,  	struct image_type_params *tparams)  {  	int ret; @@ -2338,7 +2338,7 @@ static struct image_type_params mxsimage_params = {  void init_mxs_image_type(void)  { -	mkimage_register(&mxsimage_params); +	register_image_type(&mxsimage_params);  }  #else diff --git a/tools/omapimage.c b/tools/omapimage.c index 8774a7e3a..d59bc4d40 100644 --- a/tools/omapimage.c +++ b/tools/omapimage.c @@ -14,7 +14,7 @@   * SPDX-License-Identifier:	GPL-2.0+   */ -#include "mkimage.h" +#include "imagetool.h"  #include <image.h>  #include "omapimage.h" @@ -69,7 +69,7 @@ static int valid_gph_load_addr(uint32_t load_addr)  }  static int omapimage_verify_header(unsigned char *ptr, int image_size, -			struct mkimage_params *params) +			struct image_tool_params *params)  {  	struct ch_toc *toc = (struct ch_toc *)ptr;  	struct gp_header *gph = (struct gp_header *)(ptr+OMAP_CH_HDR_SIZE); @@ -188,7 +188,7 @@ static int toc_offset(void *hdr, void *member)  }  static void omapimage_set_header(void *ptr, struct stat *sbuf, int ifd, -				struct mkimage_params *params) +				struct image_tool_params *params)  {  	struct ch_toc *toc = (struct ch_toc *)ptr;  	struct ch_settings *chs = (struct ch_settings *) @@ -224,7 +224,7 @@ static void omapimage_set_header(void *ptr, struct stat *sbuf, int ifd,  	}  } -int omapimage_check_params(struct mkimage_params *params) +int omapimage_check_params(struct image_tool_params *params)  {  	return	(params->dflag && (params->fflag || params->lflag)) ||  		(params->fflag && (params->dflag || params->lflag)) || @@ -247,5 +247,5 @@ static struct image_type_params omapimage_params = {  void init_omap_image_type(void)  { -	mkimage_register(&omapimage_params); +	register_image_type(&omapimage_params);  } diff --git a/tools/pblimage.c b/tools/pblimage.c index bac5faff9..ef3d7f629 100644 --- a/tools/pblimage.c +++ b/tools/pblimage.c @@ -3,7 +3,7 @@   *   * SPDX-License-Identifier:	GPL-2.0+   */ -#include "mkimage.h" +#include "imagetool.h"  #include <image.h>  #include "pblimage.h" @@ -242,7 +242,7 @@ static void add_end_cmd(void)  	}  } -void pbl_load_uboot(int ifd, struct mkimage_params *params) +void pbl_load_uboot(int ifd, struct image_tool_params *params)  {  	FILE *fp_uboot;  	int size; @@ -281,7 +281,7 @@ static int pblimage_check_image_types(uint8_t type)  }  static int pblimage_verify_header(unsigned char *ptr, int image_size, -			struct mkimage_params *params) +			struct image_tool_params *params)  {  	struct pbl_header *pbl_hdr = (struct pbl_header *) ptr; @@ -308,7 +308,7 @@ static void pblimage_print_header(const void *ptr)  }  static void pblimage_set_header(void *ptr, struct stat *sbuf, int ifd, -				struct mkimage_params *params) +				struct image_tool_params *params)  {  	/*nothing need to do, pbl_load_uboot takes care of whole file. */  } @@ -327,5 +327,5 @@ static struct image_type_params pblimage_params = {  void init_pbl_image_type(void)  {  	pbl_size = 0; -	mkimage_register(&pblimage_params); +	register_image_type(&pblimage_params);  } diff --git a/tools/ublimage.c b/tools/ublimage.c index aafe24875..cbbbe205d 100644 --- a/tools/ublimage.c +++ b/tools/ublimage.c @@ -13,7 +13,7 @@   * SPDX-License-Identifier:	GPL-2.0+   */ -#include "mkimage.h" +#include "imagetool.h"  #include <image.h>  #include "ublimage.h" @@ -193,7 +193,7 @@ static int ublimage_check_image_types(uint8_t type)  }  static int ublimage_verify_header(unsigned char *ptr, int image_size, -			struct mkimage_params *params) +			struct image_tool_params *params)  {  	struct ubl_header *ubl_hdr = (struct ubl_header *)ptr; @@ -211,7 +211,7 @@ static void ublimage_print_header(const void *ptr)  }  static void ublimage_set_header(void *ptr, struct stat *sbuf, int ifd, -				struct mkimage_params *params) +				struct image_tool_params *params)  {  	struct ubl_header *ublhdr = (struct ubl_header *)ptr; @@ -219,7 +219,7 @@ static void ublimage_set_header(void *ptr, struct stat *sbuf, int ifd,  	parse_cfg_file(ublhdr, params->imagename);  } -int ublimage_check_params(struct mkimage_params *params) +int ublimage_check_params(struct image_tool_params *params)  {  	if (!params)  		return CFG_INVALID; @@ -257,5 +257,5 @@ static struct image_type_params ublimage_params = {  void init_ubl_image_type(void)  { -	mkimage_register(&ublimage_params); +	register_image_type(&ublimage_params);  } |