From: Michal Simek Date: Tue, 15 Jul 2014 11:35:24 +0000 (+0200) Subject: Merge tag 'v2014.04' into xilinx/master-next X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8ffced95b73a3bfa080ecc63261a9c6de3f2fe45;p=thirdparty%2Fu-boot.git Merge tag 'v2014.04' into xilinx/master-next Not so many merge conflits with mainline. Signed-off-by: Michal Simek --- 8ffced95b73a3bfa080ecc63261a9c6de3f2fe45 diff --cc Makefile index 0419debd8e9,c91c10ed3a3..dd0cca06269 mode 100755,100644..100755 --- a/Makefile +++ b/Makefile @@@ -36,140 -193,290 +193,290 @@@ export HOSTARCH HOSTO VENDOR= ######################################################################### - # Allow for silent builds - ifeq (,$(findstring s,$(MAKEFLAGS))) - XECHO = echo - else - XECHO = : + + # set default to nothing for native builds + ifeq ($(HOSTARCH),$(ARCH)) + CROSS_COMPILE ?= endif - ######################################################################### + # SHELL used by kbuild + CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \ + else if [ -x /bin/bash ]; then echo /bin/bash; \ + else echo sh; fi ; fi) + + HOSTCC = gcc + HOSTCFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer + + ifeq ($(HOSTOS),cygwin) + HOSTCFLAGS += -ansi + endif + + # Mac OS X / Darwin's C preprocessor is Apple specific. It + # generates numerous errors and warnings. We want to bypass it + # and use GNU C's cpp. To do this we pass the -traditional-cpp + # option to the compiler. Note that the -traditional-cpp flag + # DOES NOT have the same semantics as GNU C's flag, all it does + # is invoke the GNU preprocessor in stock ANSI/ISO C fashion. + # + # Apple's linker is similar, thanks to the new 2 stage linking + # multiple symbol definitions are treated as errors, hence the + # -multiply_defined suppress option to turn off this error. # - # U-boot build supports generating object files in a separate external - # directory. Two use cases are supported: + ifeq ($(HOSTOS),darwin) + # get major and minor product version (e.g. '10' and '6' for Snow Leopard) + DARWIN_MAJOR_VERSION = $(shell sw_vers -productVersion | cut -f 1 -d '.') + DARWIN_MINOR_VERSION = $(shell sw_vers -productVersion | cut -f 2 -d '.') + + os_x_before = $(shell if [ $(DARWIN_MAJOR_VERSION) -le $(1) -a \ + $(DARWIN_MINOR_VERSION) -le $(2) ] ; then echo "$(3)"; else echo "$(4)"; fi ;) + + # Snow Leopards build environment has no longer restrictions as described above + HOSTCC = $(call os_x_before, 10, 5, "cc", "gcc") + HOSTCFLAGS += $(call os_x_before, 10, 4, "-traditional-cpp") + HOSTLDFLAGS += $(call os_x_before, 10, 5, "-multiply_defined suppress") + endif + + # Decide whether to build built-in, modular, or both. + # Normally, just do built-in. + + KBUILD_MODULES := + KBUILD_BUILTIN := 1 + + # If we have only "make modules", don't compile built-in objects. + # When we're building modules with modversions, we need to consider + # the built-in objects during the descend as well, in order to + # make sure the checksums are up to date before we record them. + + ifeq ($(MAKECMDGOALS),modules) + KBUILD_BUILTIN := $(if $(CONFIG_MODVERSIONS),1) + endif + + # If we have "make modules", compile modules + # in addition to whatever we do anyway. + # Just "make" or "make all" shall build modules as well + + # U-Boot does not need modules + #ifneq ($(filter all _all modules,$(MAKECMDGOALS)),) + # KBUILD_MODULES := 1 + #endif + + #ifeq ($(MAKECMDGOALS),) + # KBUILD_MODULES := 1 + #endif + + export KBUILD_MODULES KBUILD_BUILTIN + export KBUILD_CHECKSRC KBUILD_SRC KBUILD_EXTMOD + + # Beautify output + # --------------------------------------------------------------------------- # - # 1) Add O= to the make command line - # 'make O=/tmp/build all' + # Normally, we echo the whole command before executing it. By making + # that echo $($(quiet)$(cmd)), we now have the possibility to set + # $(quiet) to choose other forms of output instead, e.g. # - # 2) Set environment variable BUILD_DIR to point to the desired location - # 'export BUILD_DIR=/tmp/build' - # 'make' + # quiet_cmd_cc_o_c = Compiling $(RELDIR)/$@ + # cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $< # - # The second approach can also be used with a MAKEALL script - # 'export BUILD_DIR=/tmp/build' - # './MAKEALL' + # If $(quiet) is empty, the whole command will be printed. -# If it is set to "quiet_", only the short version will be printed. ++# If it is set to "quiet_", only the short version will be printed. + # If it is set to "silent_", nothing will be printed at all, since + # the variable $(silent_cmd_cc_o_c) doesn't exist. # - # Command line 'O=' setting overrides BUILD_DIR environment variable. + # A simple variant is to prefix commands with $(Q) - that's useful + # for commands that shall be hidden in non-verbose mode. # - # When none of the above methods is used the local build is performed and - # the object files are placed in the source directory. + # $(Q)ln $@ :< # + # If KBUILD_VERBOSE equals 0 then the above command will be hidden. + # If KBUILD_VERBOSE equals 1 then the above command is displayed. - ifeq ("$(origin O)", "command line") - BUILD_DIR := $(O) + ifeq ($(KBUILD_VERBOSE),1) + quiet = + Q = + else + quiet=quiet_ + Q = @ endif - # Call a source code checker (by default, "sparse") as part of the - # C compilation. - # - # Use 'make C=1' to enable checking of re-compiled files. - # - # See the linux kernel file "Documentation/sparse.txt" for more details, - # including where to get the "sparse" utility. + # If the user is running make -s (silent mode), suppress echoing of + # commands - ifdef C - ifeq ("$(origin C)", "command line") - CHECKSRC := $(C) + ifneq ($(filter s% -s%,$(MAKEFLAGS)),) + quiet=silent_ endif + + export quiet Q KBUILD_VERBOSE + + + # Look for make include files relative to root of kernel src + MAKEFLAGS += --include-dir=$(srctree) + + # We need some generic definitions (do not try to remake the file). + $(srctree)/scripts/Kbuild.include: ; + include $(srctree)/scripts/Kbuild.include + + # Make variables (CC, etc...) + + AS = $(CROSS_COMPILE)as + # Always use GNU ld + ifneq ($(shell $(CROSS_COMPILE)ld.bfd -v 2> /dev/null),) + LD = $(CROSS_COMPILE)ld.bfd + else + LD = $(CROSS_COMPILE)ld endif - ifndef CHECKSRC - CHECKSRC = 0 + CC = $(CROSS_COMPILE)gcc + CPP = $(CC) -E + AR = $(CROSS_COMPILE)ar + NM = $(CROSS_COMPILE)nm + LDR = $(CROSS_COMPILE)ldr + STRIP = $(CROSS_COMPILE)strip + OBJCOPY = $(CROSS_COMPILE)objcopy + OBJDUMP = $(CROSS_COMPILE)objdump + AWK = awk + RANLIB = $(CROSS_COMPILE)RANLIB + DTC = dtc + CHECK = sparse + + CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \ + -Wbitwise -Wno-return-void -D__CHECK_ENDIAN__ $(CF) + + KBUILD_CPPFLAGS := -D__KERNEL__ + + KBUILD_CFLAGS := -Wall -Wstrict-prototypes \ + -Wno-format-security \ + -fno-builtin -ffreestanding + KBUILD_AFLAGS := -D__ASSEMBLY__ + + # Read UBOOTRELEASE from include/config/uboot.release (if it exists) + UBOOTRELEASE = $(shell cat include/config/uboot.release 2> /dev/null) + UBOOTVERSION = $(VERSION)$(if $(PATCHLEVEL),.$(PATCHLEVEL)$(if $(SUBLEVEL),.$(SUBLEVEL)))$(EXTRAVERSION) + + export VERSION PATCHLEVEL SUBLEVEL UBOOTRELEASE UBOOTVERSION + export ARCH CPU BOARD VENDOR SOC CPUDIR BOARDDIR + export CONFIG_SHELL HOSTCC HOSTCFLAGS HOSTLDFLAGS CROSS_COMPILE AS LD CC + export CPP AR NM LDR STRIP OBJCOPY OBJDUMP + export MAKE AWK + export DTC CHECK CHECKFLAGS + + export KBUILD_CPPFLAGS NOSTDINC_FLAGS UBOOTINCLUDE OBJCOPYFLAGS LDFLAGS + export KBUILD_CFLAGS KBUILD_AFLAGS + + # When compiling out-of-tree modules, put MODVERDIR in the module + # tree rather than in the kernel tree. The kernel tree might + # even be read-only. + export MODVERDIR := $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/).tmp_versions + + # Files to ignore in find ... statements + + RCS_FIND_IGNORE := \( -name SCCS -o -name BitKeeper -o -name .svn -o -name CVS \ + -o -name .pc -o -name .hg -o -name .git \) -prune -o + export RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn \ + --exclude CVS --exclude .pc --exclude .hg --exclude .git + + # =========================================================================== + # Rules shared between *config targets and build targets + + # Basic helpers built in scripts/ + PHONY += scripts_basic + scripts_basic: + $(Q)$(MAKE) $(build)=scripts/basic + $(Q)rm -f .tmp_quiet_recordmcount + + # To avoid any implicit rule to kick in, define an empty command. + scripts/basic/%: scripts_basic ; + + PHONY += outputmakefile + # outputmakefile generates a Makefile in the output directory, if using a + # separate output directory. This allows convenient use of make in the + # output directory. + outputmakefile: + ifneq ($(KBUILD_SRC),) + $(Q)ln -fsn $(srctree) source + $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile \ + $(srctree) $(objtree) $(VERSION) $(PATCHLEVEL) endif - export CHECKSRC - ifneq ($(BUILD_DIR),) - saved-output := $(BUILD_DIR) + # To make sure we do not include .config for any of the *config targets + # catch them early, and hand them over to scripts/kconfig/Makefile + # It is allowed to specify more targets when calling make, including + # mixing *config targets and build targets. + # For example 'make oldconfig all'. + # Detect when mixed targets is specified, and make a second invocation + # of make so .config is not included in this case either (for *config). - # Attempt to create a output directory. - $(shell [ -d ${BUILD_DIR} ] || mkdir -p ${BUILD_DIR}) + version_h := include/generated/version_autogenerated.h + timestamp_h := include/generated/timestamp_autogenerated.h - # Verify if it was successful. - BUILD_DIR := $(shell cd $(BUILD_DIR) && /bin/pwd) - $(if $(BUILD_DIR),,$(error output directory "$(saved-output)" does not exist)) - endif # ifneq ($(BUILD_DIR),) + no-dot-config-targets := clean clobber mrproper distclean \ + help %docs check% coccicheck \ + ubootversion backup tools-only - OBJTREE := $(if $(BUILD_DIR),$(BUILD_DIR),$(CURDIR)) - SPLTREE := $(OBJTREE)/spl - TPLTREE := $(OBJTREE)/tpl - SRCTREE := $(CURDIR) - TOPDIR := $(SRCTREE) - LNDIR := $(OBJTREE) - export TOPDIR SRCTREE OBJTREE SPLTREE TPLTREE + config-targets := 0 + mixed-targets := 0 + dot-config := 1 - MKCONFIG := $(SRCTREE)/mkconfig - export MKCONFIG + ifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),) + ifeq ($(filter-out $(no-dot-config-targets), $(MAKECMDGOALS)),) + dot-config := 0 + endif + 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. - ifneq ($(OBJTREE),$(SRCTREE)) - obj := $(OBJTREE)/ - src := $(SRCTREE)/ - else - obj := - src := + ifeq ($(KBUILD_EXTMOD),) + ifneq ($(filter config %config,$(MAKECMDGOALS)),) + config-targets := 1 + ifneq ($(filter-out config %config,$(MAKECMDGOALS)),) + mixed-targets := 1 + endif + endif endif - export obj src - # Make sure CDPATH settings don't interfere - unexport CDPATH + ifeq ($(mixed-targets),1) + # =========================================================================== + # We're called with mixed targets (*config and build targets). + # Handle them one by one. - ######################################################################### + PHONY += $(MAKECMDGOALS) build-one-by-one - # The "tools" are needed early, so put this first - # Don't include stuff already done in $(LIBS) - # The "examples" conditionally depend on U-Boot (say, when USE_PRIVATE_LIBGCC - # is "yes"), so compile examples after U-Boot is compiled. - SUBDIR_TOOLS = tools - SUBDIRS = $(SUBDIR_TOOLS) + $(MAKECMDGOALS): build-one-by-one + @: - .PHONY : $(SUBDIRS) $(VERSION_FILE) $(TIMESTAMP_FILE) + build-one-by-one: + $(Q)set -e; \ + for i in $(MAKECMDGOALS); do \ + $(MAKE) -f $(srctree)/Makefile $$i; \ + done - ifeq ($(obj)include/config.mk,$(wildcard $(obj)include/config.mk)) + else + ifeq ($(config-targets),1) + # =========================================================================== + # *config targets only - make sure prerequisites are updated, and descend + # in scripts/kconfig to make the *config target - # Include autoconf.mk before config.mk so that the config options are available - # to all top level build files. We need the dummy all: target to prevent the - # dependency target in autoconf.mk.dep from being the default. - all: - sinclude $(obj)include/autoconf.mk.dep - sinclude $(obj)include/autoconf.mk + # Read arch specific Makefile to set KBUILD_DEFCONFIG as needed. + # KBUILD_DEFCONFIG may point out an alternative default configuration + # used for 'make defconfig' - SUBDIR_EXAMPLES-y := examples/standalone - SUBDIR_EXAMPLES-$(CONFIG_API) += examples/api - ifndef CONFIG_SANDBOX - SUBDIRS += $(SUBDIR_EXAMPLES-y) - endif + %_config:: outputmakefile + @$(MKCONFIG) -A $(@:_config=) + + else + # =========================================================================== + # Build targets only - this includes vmlinux, arch specific targets, clean + # targets and others. In general all targets except *config targets. # load ARCH, BOARD, and CPU configuration - include $(obj)include/config.mk - export ARCH CPU BOARD VENDOR SOC + -include include/config.mk - # set default to nothing for native builds - ifeq ($(HOSTARCH),$(ARCH)) - CROSS_COMPILE ?= - endif + ifeq ($(dot-config),1) + # Read in config + -include include/autoconf.mk + -include include/autoconf.mk.dep # load other configuration - include $(TOPDIR)/config.mk - - # Targets which don't build the source code - NON_BUILD_TARGETS = backup clean clobber distclean mrproper tidy unconfig + include $(srctree)/config.mk - # Only do the generic board check when actually building, not configuring - ifeq ($(filter $(NON_BUILD_TARGETS),$(MAKECMDGOALS)),) - ifeq ($(findstring _config,$(MAKECMDGOALS)),) - $(CHECK_GENERIC_BOARD) - endif + ifeq ($(wildcard include/config.mk),) + $(error "System not configured - see README") endif # If board code explicitly specified LDSCRIPT or CONFIG_SYS_LDSCRIPT, use @@@ -362,35 -721,59 +721,65 @@@ endi endif endif +ifneq ($(CONFIG_ZYNQ),) +ifeq ($(CONFIG_SPL),y) - ALL-y += $(obj)boot.bin ++ALL-y += boot.bin +endif +endif + - build := -f $(TOPDIR)/scripts/Makefile.build -C + LDFLAGS_u-boot += $(LDFLAGS_FINAL) + ifneq ($(CONFIG_SYS_TEXT_BASE),) + LDFLAGS_u-boot += -Ttext $(CONFIG_SYS_TEXT_BASE) + endif - all: $(ALL-y) $(SUBDIR_EXAMPLES-y) + quiet_cmd_objcopy = OBJCOPY $@ + cmd_objcopy = $(OBJCOPY) $(OBJCOPYFLAGS) $(OBJCOPYFLAGS_$(@F)) $< $@ - $(obj)u-boot.dtb: checkdtc $(obj)u-boot - $(MAKE) $(build) dts binary - mv $(obj)dts/dt.dtb $@ + quiet_cmd_mkimage = MKIMAGE $@ + cmd_mkimage = $(objtree)/tools/mkimage $(MKIMAGEFLAGS_$(@F)) -d $< $@ \ + $(if $(KBUILD_VERBOSE:1=), >/dev/null) - $(obj)u-boot-dtb.bin: $(obj)u-boot.bin $(obj)u-boot.dtb - cat $^ >$@ + quiet_cmd_cat = CAT $@ + cmd_cat = cat $(filter-out $(PHONY), $^) > $@ - $(obj)u-boot.hex: $(obj)u-boot - $(OBJCOPY) ${OBJCFLAGS} -O ihex $< $@ + append = cat $(filter-out $< $(PHONY), $^) >> $@ - $(obj)u-boot.srec: $(obj)u-boot - $(OBJCOPY) ${OBJCFLAGS} -O srec $< $@ + quiet_cmd_pad_cat = CAT $@ + cmd_pad_cat = $(cmd_objcopy) && $(append) || rm -f $@ - $(obj)u-boot.bin: $(obj)u-boot - $(OBJCOPY) ${OBJCFLAGS} -O binary $< $@ - $(call DO_STATIC_RELA,$<,$@,$(CONFIG_SYS_TEXT_BASE)) - $(BOARD_SIZE_CHECK) + all: $(ALL-y) + + PHONY += dtbs + dtbs dts/dt.dtb: checkdtc u-boot + $(Q)$(MAKE) $(build)=dts dtbs + + u-boot-dtb.bin: u-boot.bin dts/dt.dtb FORCE + $(call if_changed,cat) + + %.imx: %.bin + $(Q)$(MAKE) $(build)=arch/arm/imx-common $@ + + quiet_cmd_copy = COPY $@ + cmd_copy = cp $< $@ + + u-boot.dtb: dts/dt.dtb + $(call cmd,copy) + + OBJCOPYFLAGS_u-boot.hex := -O ihex - $(obj)u-boot.ldr: $(obj)u-boot + OBJCOPYFLAGS_u-boot.srec := -O srec + + u-boot.hex u-boot.srec: u-boot FORCE + $(call if_changed,objcopy) + + OBJCOPYFLAGS_u-boot.bin := -O binary + + u-boot.bin: u-boot FORCE + $(call if_changed,objcopy) + $(call DO_STATIC_RELA,$<,$@,$(CONFIG_SYS_TEXT_BASE)) + $(BOARD_SIZE_CHECK) + + u-boot.ldr: u-boot $(CREATE_LDR_ENV) $(LDR) -T $(CONFIG_BFIN_CPU) -c $@ $< $(LDR_FLAGS) $(BOARD_SIZE_CHECK) @@@ -509,12 -881,9 +887,12 @@@ u-boot-dtb-tegra.bin: u-boot-nodtb-tegr endif endif - $(obj)u-boot-img.bin: $(obj)spl/u-boot-spl.bin $(obj)u-boot.img - cat $(obj)spl/u-boot-spl.bin $(obj)u-boot.img > $@ + u-boot-img.bin: spl/u-boot-spl.bin u-boot.img FORCE + $(call if_changed,cat) - $(obj)boot.bin: $(obj)spl/u-boot-spl.bin - tools/zynq-boot-bin.py -o $(obj)boot.bin -u $(obj)spl/u-boot-spl.bin ++boot.bin: spl/u-boot-spl.bin ++ tools/zynq-boot-bin.py -o boot.bin -u spl/u-boot-spl.bin + # PPC4xx needs the SPL at the end of the image, since the reset vector # is located at 0xfffffffc. So we can't use the "u-boot-img.bin" target # and need to introduce a new build target with the full blown U-Boot @@@ -537,68 -907,184 +916,184 @@@ u-boot.elf: u-boot.bi --defsym=_start=$(CONFIG_SYS_TEXT_BASE) \ -Ttext=$(CONFIG_SYS_TEXT_BASE) - ifeq ($(CONFIG_SANDBOX),y) - GEN_UBOOT = \ - cd $(LNDIR) && $(CC) $(SYMS) -T $(obj)u-boot.lds \ - -Wl,--start-group $(__LIBS) -Wl,--end-group \ - $(PLATFORM_LIBS) -Wl,-Map -Wl,u-boot.map -o u-boot - else - GEN_UBOOT = \ - cd $(LNDIR) && $(LD) $(LDFLAGS) $(LDFLAGS_$(@F)) \ - $(__OBJS) \ - --start-group $(__LIBS) --end-group $(PLATFORM_LIBS) \ - -Map u-boot.map -o u-boot - endif + # Rule to link u-boot + # May be overridden by arch/$(ARCH)/config.mk + quiet_cmd_u-boot__ ?= LD $@ + cmd_u-boot__ ?= $(LD) $(LDFLAGS) $(LDFLAGS_u-boot) -o $@ \ + -T u-boot.lds $(u-boot-init) \ + --start-group $(u-boot-main) --end-group \ + $(PLATFORM_LIBS) -Map u-boot.map - $(obj)u-boot: depend \ - $(SUBDIR_TOOLS) $(OBJS) $(LIBS) $(obj)u-boot.lds - $(GEN_UBOOT) + u-boot: $(u-boot-init) $(u-boot-main) u-boot.lds + $(call if_changed,u-boot__) ifeq ($(CONFIG_KALLSYMS),y) - smap=`$(call SYSTEM_MAP,$(obj)u-boot) | \ - awk '$$2 ~ /[tTwW]/ {printf $$1 $$3 "\\\\000"}'` ; \ - $(CC) $(CFLAGS) -DSYSTEM_MAP="\"$${smap}\"" \ - -c common/system_map.c -o $(obj)common/system_map.o - $(GEN_UBOOT) $(obj)common/system_map.o + smap=`$(call SYSTEM_MAP,u-boot) | \ + awk '$$2 ~ /[tTwW]/ {printf $$1 $$3 "\\\\000"}'` ; \ + $(CC) $(c_flags) -DSYSTEM_MAP="\"$${smap}\"" \ + -c $(srctree)/common/system_map.c -o common/system_map.o + $(call cmd,u-boot__) common/system_map.o endif - $(OBJS): - @: -# The actual objects are generated when descending, ++# The actual objects are generated when descending, + # make sure no implicit rule kicks in + $(sort $(u-boot-init) $(u-boot-main)): $(u-boot-dirs) ; + + # Handle descending into subdirectories listed in $(vmlinux-dirs) + # Preset locale variables to speed up the build process. Limit locale + # tweaks to this spot to avoid wrong language settings when running + # make menuconfig etc. + # Error messages still appears in the original language + + PHONY += $(u-boot-dirs) + $(u-boot-dirs): prepare scripts + $(Q)$(MAKE) $(build)=$@ + + tools: prepare + # The "tools" are needed early + $(filter-out tools, $(u-boot-dirs)): tools + # The "examples" conditionally depend on U-Boot (say, when USE_PRIVATE_LIBGCC + # is "yes"), so compile examples after U-Boot is compiled. + examples: $(filter-out examples, $(u-boot-dirs)) + + define filechk_uboot.release + echo "$(UBOOTVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))" + endef + + # Store (new) UBOOTRELEASE string in include/config/uboot.release + include/config/uboot.release: Makefile FORCE + $(call filechk,uboot.release) + + + # Things we need to do before we recursively start building the kernel + # or the modules are listed in "prepare". + # A multi level approach is used. prepareN is processed before prepareN-1. + # archprepare is used in arch Makefiles and when processed asm symlink, + # version.h and scripts_basic is processed / created. + + # Listed in dependency order + PHONY += prepare archprepare prepare0 prepare1 prepare2 prepare3 + + # prepare3 is used to check if we are building in a separate output directory, + # and if so do: + # 1) Check that make has not been executed in the kernel src $(srctree) + prepare3: include/config/uboot.release + ifneq ($(KBUILD_SRC),) + @$(kecho) ' Using $(srctree) as source for u-boot' + $(Q)if [ -f $(srctree)/include/config.mk ]; then \ + echo >&2 " $(srctree) is not clean, please run 'make mrproper'"; \ + echo >&2 " in the '$(srctree)' directory.";\ + /bin/false; \ + fi; + endif + + # prepare2 creates a makefile if using a separate output directory + prepare2: prepare3 outputmakefile + + prepare1: prepare2 $(version_h) $(timestamp_h) + ifeq ($(__HAVE_ARCH_GENERIC_BOARD),) + ifeq ($(CONFIG_SYS_GENERIC_BOARD),y) + @echo >&2 " Your architecture does not support generic board." + @echo >&2 " Please undefine CONFIG_SYS_GENERIC_BOARD in your board config file." + @/bin/false + endif + endif + ifeq ($(wildcard $(LDSCRIPT)),) + @echo >&2 " Could not find linker script." + @/bin/false + endif + + archprepare: prepare1 scripts_basic + + prepare0: archprepare FORCE + $(Q)$(MAKE) $(build)=. + + # All the preparing.. + prepare: prepare0 + + # Generate some files + # --------------------------------------------------------------------------- + + define filechk_version.h + (echo \#define PLAIN_VERSION \"$(UBOOTRELEASE)\"; \ + echo \#define U_BOOT_VERSION \"U-Boot \" PLAIN_VERSION; \ + echo \#define CC_VERSION_STRING \"$$($(CC) --version | head -n 1)\"; \ + echo \#define LD_VERSION_STRING \"$$($(LD) --version | head -n 1)\"; ) + endef + + define filechk_timestamp.h + (LC_ALL=C date +'#define U_BOOT_DATE "%b %d %C%y"'; \ + LC_ALL=C date +'#define U_BOOT_TIME "%T"') + endef + + $(version_h): include/config/uboot.release FORCE + $(call filechk,version.h) + + $(timestamp_h): $(srctree)/Makefile FORCE + $(call filechk,timestamp.h) + + # + # Auto-generate the autoconf.mk file (which is included by all makefiles) + # + # This target actually generates 2 files; autoconf.mk and autoconf.mk.dep. + # the dep file is only include in this top level makefile to determine when + # to regenerate the autoconf.mk file. + + quiet_cmd_autoconf_dep = GEN $@ + cmd_autoconf_dep = $(CC) -x c -DDO_DEPS_ONLY -M $(c_flags) \ + -MQ include/autoconf.mk $(srctree)/include/common.h > $@ || rm $@ + + include/autoconf.mk.dep: include/config.h include/common.h + $(call cmd,autoconf_dep) + + quiet_cmd_autoconf = GEN $@ + cmd_autoconf = \ + $(CPP) $(c_flags) -DDO_DEPS_ONLY -dM $(srctree)/include/common.h > $@.tmp && \ + sed -n -f $(srctree)/tools/scripts/define2mk.sed $@.tmp > $@; \ + rm $@.tmp + + include/autoconf.mk: include/config.h + $(call cmd,autoconf) - $(LIBS): depend $(SUBDIR_TOOLS) - $(MAKE) $(build) $(dir $(subst $(obj),,$@)) + # --------------------------------------------------------------------------- - $(SUBDIRS): depend - $(MAKE) -C $@ all + PHONY += depend dep + depend dep: + @echo '*** Warning: make $@ is unnecessary now.' - $(SUBDIR_EXAMPLES-y): $(obj)u-boot + # --------------------------------------------------------------------------- + quiet_cmd_cpp_lds = LDS $@ + cmd_cpp_lds = $(CPP) -Wp,-MD,$(depfile) $(cpp_flags) $(LDPPFLAGS) -ansi \ + -D__ASSEMBLY__ -x assembler-with-cpp -P -o $@ $< - $(obj)u-boot.lds: $(LDSCRIPT) depend - $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$< >$@ + u-boot.lds: $(LDSCRIPT) prepare FORCE + $(call if_changed_dep,cpp_lds) - nand_spl: $(TIMESTAMP_FILE) $(VERSION_FILE) depend - $(MAKE) -C nand_spl/board/$(BOARDDIR) all + PHONY += nand_spl + nand_spl: prepare + $(Q)$(MAKE) $(build)=nand_spl/board/$(BOARDDIR) all + @echo >&2 + @echo >&2 "==================== WARNING =====================" + @echo >&2 "nand_spl will not be included in v2014.07 release." + @echo >&2 "Please switch over to SPL." + @echo >&2 "Otherwise, this board will be removed." + @echo >&2 "==================================================" + @echo >&2 - $(obj)u-boot-nand.bin: nand_spl $(obj)u-boot.bin - cat $(obj)nand_spl/u-boot-spl-16k.bin $(obj)u-boot.bin > $(obj)u-boot-nand.bin + nand_spl/u-boot-spl-16k.bin: nand_spl + @: - $(obj)spl/u-boot-spl.bin: $(SUBDIR_TOOLS) depend - $(MAKE) -C spl all + u-boot-nand.bin: nand_spl/u-boot-spl-16k.bin u-boot.bin FORCE + $(call if_changed,cat) - $(obj)tpl/u-boot-tpl.bin: $(SUBDIR_TOOLS) depend - $(MAKE) -C spl all CONFIG_TPL_BUILD=y + spl/u-boot-spl.bin: spl/u-boot-spl + @: + spl/u-boot-spl: tools prepare + $(Q)$(MAKE) obj=spl -f $(srctree)/spl/Makefile all - # Explicitly make _depend in subdirs containing multiple targets to prevent - # parallel sub-makes creating .depend files simultaneously. - depend dep: $(TIMESTAMP_FILE) $(VERSION_FILE) \ - $(obj)include/spl-autoconf.mk \ - $(obj)include/tpl-autoconf.mk \ - $(obj)include/autoconf.mk \ - $(obj)include/generated/generic-asm-offsets.h \ - $(obj)include/generated/asm-offsets.h + tpl/u-boot-tpl.bin: tools prepare + $(Q)$(MAKE) obj=tpl -f $(srctree)/spl/Makefile all CONFIG_TPL_BUILD=y - TAG_SUBDIRS = $(SUBDIRS) - TAG_SUBDIRS += $(dir $(__LIBS)) - TAG_SUBDIRS += include + TAG_SUBDIRS := $(u-boot-dirs) include FIND := find FINDFLAGS := -L @@@ -773,106 -1148,250 +1157,250 @@@ include/license.h: tools/bin2header COP cat COPYING | gzip -9 -c | ./tools/bin2header license_gzip > include/license.h ######################################################################### - unconfig: - @rm -f $(obj)include/config.h $(obj)include/config.mk \ - $(obj)board/*/config.tmp $(obj)board/*/*/config.tmp \ - $(obj)include/autoconf.mk $(obj)include/autoconf.mk.dep \ - $(obj)include/spl-autoconf.mk \ - $(obj)include/tpl-autoconf.mk + ### + # Cleaning is done on three levels. + # make clean Delete most generated files + # Leave enough to build external modules + # make mrproper Delete the current configuration, and all generated files + # make distclean Remove editor backup files, patch leftover files and the like + + # Directories & files removed with 'make clean' + CLEAN_DIRS += $(MODVERDIR) + CLEAN_FILES += u-boot.lds include/bmp_logo.h include/bmp_logo_data.h \ + include/autoconf.mk* include/spl-autoconf.mk \ + include/tpl-autoconf.mk + + # Directories & files removed with 'make clobber' + CLOBBER_DIRS += $(patsubst %,spl/%, $(filter-out Makefile, \ + $(shell ls -1 spl 2>/dev/null))) \ + tpl + CLOBBER_FILES += u-boot* MLO* SPL System.map nand_spl/u-boot* + + # Directories & files removed with 'make mrproper' + MRPROPER_DIRS += include/config include/generated + MRPROPER_FILES += .config .config.old \ + tags TAGS cscope* GPATH GTAGS GRTAGS GSYMS \ + include/config.h include/config.mk + + # clean - Delete most, but leave enough to build external modules + # + clean: rm-dirs := $(CLEAN_DIRS) + clean: rm-files := $(CLEAN_FILES) + + clean-dirs := $(foreach f,$(u-boot-alldirs),$(if $(wildcard $(srctree)/$f/Makefile),$f)) + + clean-dirs := $(addprefix _clean_, $(clean-dirs) doc/DocBook) + + PHONY += $(clean-dirs) clean archclean + $(clean-dirs): + $(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@) + + # TODO: Do not use *.cfgtmp + clean: $(clean-dirs) + $(call cmd,rmdirs) + $(call cmd,rmfiles) + @find $(if $(KBUILD_EXTMOD), $(KBUILD_EXTMOD), .) $(RCS_FIND_IGNORE) \ + \( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \ + -o -name '*.ko.*' -o -name '*.su' -o -name '*.cfgtmp' \ + -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \ + -o -name '*.symtypes' -o -name 'modules.order' \ + -o -name modules.builtin -o -name '.tmp_*.o.*' \ + -o -name '*.gcno' \) -type f -print | xargs rm -f + @find $(if $(KBUILD_EXTMOD), $(KBUILD_EXTMOD), .) $(RCS_FIND_IGNORE) \ + -path './nand_spl/*' -type l -print | xargs rm -f + + # clobber + # + clobber: rm-dirs := $(CLOBBER_DIRS) + clobber: rm-files := $(CLOBBER_FILES) - %_config:: unconfig - @$(MKCONFIG) -A $(@:_config=) + PHONY += clobber - sinclude $(obj).boards.depend - $(obj).boards.depend: boards.cfg - @awk '(NF && $$1 !~ /^#/) { print $$7 ": " $$7 "_config; $$(MAKE)" }' $< > $@ + clobber: clean + $(call cmd,rmdirs) + $(call cmd,rmfiles) - ######################################################################### - ######################################################################### + # mrproper - Delete all generated files, including .config + # + mrproper: rm-dirs := $(wildcard $(MRPROPER_DIRS)) + mrproper: rm-files := $(wildcard $(MRPROPER_FILES)) + mrproper-dirs := $(addprefix _mrproper_,scripts) - clean: - @rm -f $(obj)examples/standalone/atmel_df_pow2 \ - $(obj)examples/standalone/hello_world \ - $(obj)examples/standalone/interrupt \ - $(obj)examples/standalone/mem_to_mem_idma2intr \ - $(obj)examples/standalone/sched \ - $(obj)examples/standalone/smc911{11,x}_eeprom \ - $(obj)examples/standalone/test_burst \ - $(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 \ - $(obj)tools/envcrc \ - $(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 \ - $(obj)tools/ncb $(obj)tools/ubsha1 \ - $(obj)tools/kernel-doc/docproc \ - $(obj)tools/proftool - @rm -f $(obj)board/cray/L1/{bootscript.c,bootscript.image} \ - $(obj)board/matrix_vision/*/bootscript.img \ - $(obj)u-boot.lds \ - $(obj)arch/blackfin/cpu/init.{lds,elf} - @rm -f $(obj)include/bmp_logo.h - @rm -f $(obj)include/bmp_logo_data.h - @rm -f $(obj)lib/asm-offsets.s - @rm -f $(obj)include/generated/asm-offsets.h - @rm -f $(obj)$(CPUDIR)/$(SOC)/asm-offsets.s - @rm -f $(TIMESTAMP_FILE) $(VERSION_FILE) - @$(MAKE) -s -C doc/DocBook/ cleandocs - @find $(OBJTREE) -type f \ - \( -name 'core' -o -name '*.bak' -o -name '*~' -o -name '*.su' \ - -o -name '*.o' -o -name '*.a' -o -name '*.exe' \ - -o -name '*.cfgtmp' \) -print \ - | xargs rm -f - - # Removes everything not needed for testing u-boot - tidy: clean - @find $(OBJTREE) -type f \( -name '*.depend*' \) -print | xargs rm -f - - clobber: tidy - @find $(OBJTREE) -type f \( -name '*.srec' \ - -o -name '*.bin' -o -name u-boot.img \) \ - -print0 | xargs -0 rm -f - @rm -f $(OBJS) $(obj)*.bak $(obj)ctags $(obj)etags $(obj)TAGS \ - $(obj)cscope.* $(obj)*.*~ - @rm -f $(obj)u-boot $(obj)u-boot.map $(obj)u-boot.hex $(ALL-y) - @rm -f $(obj)u-boot.kwb - @rm -f $(obj)u-boot.pbl - @rm -f $(obj)u-boot.imx - @rm -f $(obj)u-boot-with-spl.imx - @rm -f $(obj)u-boot-with-nand-spl.imx - @rm -f $(obj)u-boot.ubl - @rm -f $(obj)u-boot.ais - @rm -f $(obj)u-boot.dtb - @rm -f $(obj)u-boot.sb - @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} - @rm -f $(obj)spl/{u-boot-spl,u-boot-spl.bin,u-boot-spl.map} - @rm -f $(obj)spl/u-boot-spl.lds - @rm -f $(obj)tpl/{u-boot-tpl,u-boot-tpl.bin,u-boot-tpl.map} - @rm -f $(obj)tpl/u-boot-spl.lds - @rm -f $(obj)MLO MLO.byteswap - @rm -f $(obj)SPL - @rm -f $(obj)tools/xway-swap-bytes - @rm -fr $(obj)include/asm/proc $(obj)include/asm/arch $(obj)include/asm - @rm -fr $(obj)include/generated - @[ ! -d $(obj)nand_spl ] || find $(obj)nand_spl -name "*" -type l -print | xargs rm -f - @rm -f $(obj)dts/*.tmp - @rm -f $(obj)spl/u-boot-spl{,-pad}.ais - - mrproper \ - distclean: clobber unconfig - ifneq ($(OBJTREE),$(SRCTREE)) - rm -rf $(obj)* - endif + PHONY += $(mrproper-dirs) mrproper archmrproper + $(mrproper-dirs): + $(Q)$(MAKE) $(clean)=$(patsubst _mrproper_%,%,$@) + + mrproper: clobber $(mrproper-dirs) + $(call cmd,rmdirs) + $(call cmd,rmfiles) + @rm -f arch/*/include/asm/arch arch/*/include/asm/proc + + # distclean + # + PHONY += distclean + + distclean: mrproper + @find $(srctree) $(RCS_FIND_IGNORE) \ + \( -name '*.orig' -o -name '*.rej' -o -name '*~' \ + -o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \ + -o -name '.*.rej' -o -name '*.pyc' \ + -o -name '*%' -o -name '.*.cmd' -o -name 'core' \) \ + -type f -print | xargs rm -f backup: - F=`basename $(TOPDIR)` ; cd .. ; \ + F=`basename $(srctree)` ; cd .. ; \ gtar --force-local -zcvf `LC_ALL=C date "+$$F-%Y-%m-%d-%T.tar.gz"` $$F - ######################################################################### + help: + @echo 'Cleaning targets:' + @echo ' clean - Remove most generated files but keep the config and' + @echo ' necessities for testing u-boot' + @echo ' clobber - Remove most generated files but keep the config' + @echo ' mrproper - Remove all generated files + config + various backup files' + @echo ' distclean - mrproper + remove editor backup and patch files' + @echo '' + # uncomment after adding Kconfig feature + # @echo 'Configuration targets:' + # @$(MAKE) -f $(srctree)/scripts/kconfig/Makefile help + # @echo '' + @echo 'Other generic targets:' + @echo ' all - Build all necessary images depending on configuration' + @echo ' u-boot - Build the bare u-boot' + @echo ' dir/ - Build all files in dir and below' + @echo ' dir/file.[oisS] - Build specified target only' + @echo ' dir/file.lst - Build specified mixed source/assembly target only' + @echo ' (requires a recent binutils and recent build (System.map))' + @echo ' tags/TAGS - Generate tags file for editors' + @echo ' cscope - Generate cscope index' + @echo ' ubootrelease - Output the release version string' + @echo ' ubootversion - Output the version stored in Makefile' + @echo '' + @echo 'Static analysers' + @echo ' checkstack - Generate a list of stack hogs' + @echo '' + @echo 'Documentation targets:' + @$(MAKE) -f $(srctree)/doc/DocBook/Makefile dochelp + @echo '' + @echo ' make V=0|1 [targets] 0 => quiet build (default), 1 => verbose build' + @echo ' make V=2 [targets] 2 => give reason for rebuild of target' + @echo ' make O=dir [targets] Locate all output files in "dir", including .config' + @echo ' make C=1 [targets] Check all c source with $$CHECK (sparse by default)' + @echo ' make C=2 [targets] Force check of all c source with $$CHECK' + @echo ' make RECORDMCOUNT_WARN=1 [targets] Warn about ignored mcount sections' + @echo ' make W=n [targets] Enable extra gcc checks, n=1,2,3 where' + @echo ' 1: warnings which may be relevant and do not occur too often' + @echo ' 2: warnings which occur quite often but may still be relevant' + @echo ' 3: more obscure warnings, can most likely be ignored' + @echo ' Multiple levels can be combined with W=12 or W=123' + @echo '' + @echo 'Execute "make" or "make all" to build all targets marked with [*] ' + @echo 'For further info see the ./README file' + + + # Documentation targets + # --------------------------------------------------------------------------- + %docs: scripts_basic FORCE + $(Q)$(MAKE) $(build)=scripts build_docproc + $(Q)$(MAKE) $(build)=doc/DocBook $@ + + # Dummies... + PHONY += prepare scripts + prepare: ; + scripts: ; + + endif #ifeq ($(config-targets),1) + endif #ifeq ($(mixed-targets),1) + + PHONY += checkstack ubootrelease ubootversion + + checkstack: + $(OBJDUMP) -d u-boot $$(find . -name u-boot-spl) | \ + $(PERL) $(src)/scripts/checkstack.pl $(ARCH) + + ubootrelease: + @echo "$(UBOOTVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))" + + ubootversion: + @echo $(UBOOTVERSION) + + # Single targets + # --------------------------------------------------------------------------- + # Single targets are compatible with: + # - build with mixed source and output + # - build with separate output dir 'make O=...' + # - external modules + # + # target-dir => where to store outputfile + # build-dir => directory in kernel source tree to use + + ifeq ($(KBUILD_EXTMOD),) + build-dir = $(patsubst %/,%,$(dir $@)) + target-dir = $(dir $@) + else + zap-slash=$(filter-out .,$(patsubst %/,%,$(dir $@))) + build-dir = $(KBUILD_EXTMOD)$(if $(zap-slash),/$(zap-slash)) + target-dir = $(if $(KBUILD_EXTMOD),$(dir $<),$(dir $@)) + endif + + %.s: %.c prepare scripts FORCE + $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) + %.i: %.c prepare scripts FORCE + $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) + %.o: %.c prepare scripts FORCE + $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) + %.lst: %.c prepare scripts FORCE + $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) + %.s: %.S prepare scripts FORCE + $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) + %.o: %.S prepare scripts FORCE + $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) + %.symtypes: %.c prepare scripts FORCE + $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) + + # Modules + /: prepare scripts FORCE + $(cmd_crmodverdir) + $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \ + $(build)=$(build-dir) + %/: prepare scripts FORCE + $(cmd_crmodverdir) + $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \ + $(build)=$(build-dir) + %.ko: prepare scripts FORCE + $(cmd_crmodverdir) + $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \ + $(build)=$(build-dir) $(@:.ko=.o) + $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost + -# FIXME Should go into a make.lib or something ++# FIXME Should go into a make.lib or something + # =========================================================================== + + quiet_cmd_rmdirs = $(if $(wildcard $(rm-dirs)),CLEAN $(wildcard $(rm-dirs))) + cmd_rmdirs = rm -rf $(rm-dirs) + + quiet_cmd_rmfiles = $(if $(wildcard $(rm-files)),CLEAN $(wildcard $(rm-files))) + cmd_rmfiles = rm -f $(rm-files) + + # read all saved command lines + + targets := $(wildcard $(sort $(targets))) + cmd_files := $(wildcard .*.cmd $(foreach f,$(targets),$(dir $(f)).$(notdir $(f)).cmd)) + + ifneq ($(cmd_files),) + $(cmd_files): ; # Do not try to update included dependency files + include $(cmd_files) + endif + + # Shorthand for $(Q)$(MAKE) -f scripts/Makefile.clean obj=dir + # Usage: + # $(Q)$(MAKE) $(clean)=dir + clean := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.clean obj + + endif # skip-makefile + + PHONY += FORCE + FORCE: + + # Declare the contents of the .PHONY variable as phony. We keep that + # information in a variable so we can use it in if_changed and friends. + .PHONY: $(PHONY) diff --cc README index fb1c0fd20de,39e05d333c6..0145be2f687 --- a/README +++ b/README @@@ -981,11 -1014,8 +1014,11 @@@ The following options need to be config CONFIG_CMD_CDP * Cisco Discover Protocol support CONFIG_CMD_MFSL * Microblaze FSL support CONFIG_CMD_XIMG Load part of Multi Image + CONFIG_CMD_UUID * Generate random UUID or GUID string + CONFIG_CMD_ZYNQ_AES * Support decryption of encrypted images for zynq + CONFIG_CMD_ZYNQ_RSA * Support RSA-AES for zynq. This enables + CONFIG_CMD_ZYNQ_AES too. - EXAMPLE: If you want all functions except of network support you can write: diff --cc arch/arm/cpu/armv7/zynq/cpu.c index cf3d92febfd,7626b5c1a3b..5159c021a4a --- a/arch/arm/cpu/armv7/zynq/cpu.c +++ b/arch/arm/cpu/armv7/zynq/cpu.c @@@ -6,12 -6,13 +6,13 @@@ */ #include #include + #include #include #include +#include -void lowlevel_init(void) -{ -} +#define ZYNQ_SILICON_VER_MASK 0xF0000000 +#define ZYNQ_SILICON_VER_SHIFT 28 int arch_cpu_init(void) { diff --cc arch/arm/cpu/armv7/zynq/spl.c index f6686b4d649,fcad762c030..c4556c94d62 --- a/arch/arm/cpu/armv7/zynq/spl.c +++ b/arch/arm/cpu/armv7/zynq/spl.c @@@ -33,11 -28,6 +28,13 @@@ void board_init_f(ulong dummy board_init_r(NULL, 0); } ++#ifdef CONFIG_SPL_BOARD_INIT +void spl_board_init(void) +{ + board_init(); +} ++#endif + u32 spl_boot_device(void) { u32 mode; diff --cc board/xilinx/zynq/Makefile index 2bc7d4cacf5,3f19a1cd8b2..131addeea44 --- a/board/xilinx/zynq/Makefile +++ b/board/xilinx/zynq/Makefile @@@ -6,12 -6,4 +6,10 @@@ # obj-y := board.o + obj-$(CONFIG_SPL_BUILD) += ps7_init.o + - ifneq ($(wildcard ps7_init.c),) +ifneq ($(wildcard ps7_init.h),) - obj-$(CONFIG_SPL_BUILD) += ps7_init.o +ifeq ($(CONFIG_SPL_BUILD),y) +$(shell touch xil_io.h) +endif +endif - endif diff --cc board/xilinx/zynq/board.c index 9a45fe11392,485a5e4a249..6f48253c1a6 --- a/board/xilinx/zynq/board.c +++ b/board/xilinx/zynq/board.c @@@ -5,7 -5,7 +5,9 @@@ */ #include +#include + #include ++#include #include #include #include @@@ -59,13 -54,7 +61,14 @@@ int board_init(void } #endif - /* temporary hack to clear pending irqs before Linux as it -#ifdef CONFIG_FPGA ++ /* ++ * temporary hack to clear pending irqs before Linux as it + * will hang Linux + */ + writel(0x26d, 0xe0001014); + +#if (defined(CONFIG_FPGA) && !defined(CONFIG_SPL_BUILD)) || \ + (defined(CONFIG_SPL_FPGA_SUPPORT) && defined(CONFIG_SPL_BUILD)) fpga_init(); fpga_add(fpga_xilinx, &fpga); #endif diff --cc boards.cfg index 711f58b4f3d,b4203f1b576..eefa6a68a2f --- a/boards.cfg +++ b/boards.cfg @@@ -356,31 -374,14 +374,32 @@@ Active arm armv7 socf Active arm armv7 u8500 st-ericsson snowball snowball - Mathieu Poirier Active arm armv7 u8500 st-ericsson u8500 u8500_href - - Active arm armv7 vf610 freescale vf610twr vf610twr vf610twr:IMX_CONFIG=board/freescale/vf610twr/imximage.cfg Alison Wang - Active arm armv7 zynq xilinx zynq zynq_zc70x - Michal Simek :Jagannadha Sutradharudu Teki - Active arm armv7 zynq xilinx zynq zynq_zed - Michal Simek :Jagannadha Sutradharudu Teki - Active arm armv7 zynq xilinx zynq zynq_microzed - Michal Simek :Jagannadha Sutradharudu Teki - Active arm armv7 zynq xilinx zynq zynq_zc770_XM010 zynq_zc770:ZC770_XM010 Michal Simek :Jagannadha Sutradharudu Teki - Active arm armv7 zynq xilinx zynq zynq_zc770_XM012 zynq_zc770:ZC770_XM012 Michal Simek :Jagannadha Sutradharudu Teki - Active arm armv7 zynq xilinx zynq zynq_zc770_XM013 zynq_zc770:ZC770_XM013 Michal Simek :Jagannadha Sutradharudu Teki + Active arm armv7 zynq xilinx zynq zynq_microzed - Michal Simek :Jagannadha Sutradharudu Teki + Active arm armv7 zynq xilinx zynq zynq_zc70x - Michal Simek :Jagannadha Sutradharudu Teki -Active arm armv7 zynq xilinx zynq zynq_zc770_xm010 zynq_zc770:ZC770_XM010 Michal Simek :Jagannadha Sutradharudu Teki -Active arm armv7 zynq xilinx zynq zynq_zc770_xm012 zynq_zc770:ZC770_XM012 Michal Simek :Jagannadha Sutradharudu Teki -Active arm armv7 zynq xilinx zynq zynq_zc770_xm013 zynq_zc770:ZC770_XM013 Michal Simek :Jagannadha Sutradharudu Teki ++Active arm armv7 zynq xilinx zynq zynq_zc770_XM010 zynq_zc770:ZC770_XM010 Michal Simek :Jagannadha Sutradharudu Teki +Active arm armv7 zynq xilinx zynq zynq_zc770_XM011 zynq_zc770:ZC770_XM011 Michal Simek ++Active arm armv7 zynq xilinx zynq zynq_zc770_XM012 zynq_zc770:ZC770_XM012 Michal Simek :Jagannadha Sutradharudu Teki ++Active arm armv7 zynq xilinx zynq zynq_zc770_XM013 zynq_zc770:ZC770_XM013 Michal Simek :Jagannadha Sutradharudu Teki + Active arm armv7 zynq xilinx zynq zynq_zed - Michal Simek :Jagannadha Sutradharudu Teki +Active arm armv7 zynq xilinx zynq zynq_afx_nor zynq_afx:AFX_NOR Michal Simek +Active arm armv7 zynq xilinx zynq zynq_afx_qspi zynq_afx:AFX_QSPI Michal Simek +Active arm armv7 zynq xilinx zynq zynq_afx_nand zynq_afx:AFX_NAND Michal Simek +Active arm armv7 zynq xilinx zynq zynq_cse_nor zynq_cse:CSE_NOR Michal Simek +Active arm armv7 zynq xilinx zynq zynq_cse_qspi zynq_cse:CSE_QSPI Michal Simek +Active arm armv7 zynq xilinx zynq zynq_cse_nand zynq_cse:CSE_NAND Michal Simek +Active arm armv7 zynq xilinx zynq zynq_ocm - Michal Simek +Active arm armv7 zynq xilinx zynq zynq_cc108 - Michal Simek +Active arm armv7 zynq xilinx zynq zynq_zc770_XM010_RSA zynq_zc770:ZC770_XM010,CMD_ZYNQ_RSA Michal Simek +Active arm armv7 zynq xilinx zynq zynq_zc770_XM011_RSA zynq_zc770:ZC770_XM011,CMD_ZYNQ_RSA Michal Simek +Active arm armv7 zynq xilinx zynq zynq_zc770_XM012_RSA zynq_zc770:ZC770_XM012,CMD_ZYNQ_RSA Michal Simek +Active arm armv7 zynq xilinx zynq zynq_zc770_XM013_RSA zynq_zc770:ZC770_XM013,CMD_ZYNQ_RSA Michal Simek +Active arm armv7 zynq xilinx zynq zynq_afx_nor_RSA zynq_afx:AFX_NOR,CMD_ZYNQ_RSA Michal Simek +Active arm armv7 zynq xilinx zynq zynq_afx_qspi_RSA zynq_afx:AFX_QSPI,CMD_ZYNQ_RSA Michal Simek +Active arm armv7 zynq xilinx zynq zynq_afx_nand_RSA zynq_afx:AFX_NAND,CMD_ZYNQ_RSA Michal Simek +Active arm armv7 zynq xilinx zynq zynq_zc70x_RSA zynq_zc70x:CMD_ZYNQ_RSA Michal Simek +Active arm armv7 zynq xilinx zynq zynq_zed_RSA zynq_zed:CMD_ZYNQ_RSA Michal Simek Active arm armv7:arm720t tegra114 nvidia dalmore dalmore - Tom Warren + Active arm armv7:arm720t tegra124 nvidia venice2 venice2 - Tom Warren Active arm armv7:arm720t tegra20 avionic-design medcom-wide medcom-wide - Alban Bedel Active arm armv7:arm720t tegra20 avionic-design plutux plutux - Alban Bedel Active arm armv7:arm720t tegra20 avionic-design tec tec - Alban Bedel @@@ -1154,7 -1102,10 +1120,6 @@@ Active powerpc ppc4xx Active powerpc ppc4xx - amcc walnut walnut - Stefan Roese Active powerpc ppc4xx - amcc yosemite yellowstone yosemite:YELLOWSTONE Stefan Roese Active powerpc ppc4xx - amcc yosemite yosemite yosemite:YOSEMITE Stefan Roese - Active powerpc ppc4xx - cray L1 CRAYL1 - David Updegraff -Active powerpc ppc4xx - avnet fx12mm fx12mm fx12mm:SYS_TEXT_BASE=0x04000000,RESET_VECTOR_ADDRESS=0x04100000,INIT_TLB=board/xilinx/ppc405-generic/init.o Georg Schardt -Active powerpc ppc4xx - avnet fx12mm fx12mm_flash fx12mm:SYS_TEXT_BASE=0xF7F60000,RESET_VECTOR_ADDRESS=0xF7FFFFFC,INIT_TLB=board/xilinx/ppc405-generic/init.o Georg Schardt -Active powerpc ppc4xx - avnet v5fx30teval v5fx30teval v5fx30teval:SYS_TEXT_BASE=0x04000000,RESET_VECTOR_ADDRESS=0x04100000,BOOT_FROM_XMD=1,INIT_TLB=board/xilinx/ppc440-generic/init.o Ricardo Ribalda -Active powerpc ppc4xx - avnet v5fx30teval v5fx30teval_flash v5fx30teval:SYS_TEXT_BASE=0xF7F60000,RESET_VECTOR_ADDRESS=0xF7FFFFFC,INIT_TLB=board/xilinx/ppc440-generic/init.o Ricardo Ribalda Active powerpc ppc4xx - dave PPChameleonEVB CATcenter CATcenter:PPCHAMELEON_MODULE_MODEL=1 - Active powerpc ppc4xx - dave PPChameleonEVB CATcenter_25 CATcenter:PPCHAMELEON_MODULE_MODEL=1,PPCHAMELEON_CLK_25 - Active powerpc ppc4xx - dave PPChameleonEVB CATcenter_33 CATcenter:PPCHAMELEON_MODULE_MODEL=1,PPCHAMELEON_CLK_33 - @@@ -1204,11 -1155,13 +1169,9 @@@ Active powerpc ppc4xx Active powerpc ppc4xx - mpl pip405 PIP405 - Denis Peter Active powerpc ppc4xx - prodrive - alpr - Stefan Roese Active powerpc ppc4xx - prodrive - p3p440 - Stefan Roese - Active powerpc ppc4xx - sandburst karef KAREF - Travis Sawyer (travis.sawyer@sandburst.com> - Active powerpc ppc4xx - sandburst metrobox METROBOX - Travis Sawyer (travis.sawyer@sandburst.com> Active powerpc ppc4xx - xes - xpedite1000 - Peter Tyser -Active powerpc ppc4xx - xilinx ml507 ml507 ml507:SYS_TEXT_BASE=0x04000000,RESET_VECTOR_ADDRESS=0x04100000,BOOT_FROM_XMD=1,INIT_TLB=board/xilinx/ppc440-generic/init.o Ricardo Ribalda -Active powerpc ppc4xx - xilinx ml507 ml507_flash ml507:SYS_TEXT_BASE=0xF7F60000,RESET_VECTOR_ADDRESS=0xF7FFFFFC,INIT_TLB=board/xilinx/ppc440-generic/init.o Ricardo Ribalda -Active powerpc ppc4xx - xilinx ppc405-generic xilinx-ppc405-generic xilinx-ppc405-generic:SYS_TEXT_BASE=0x04000000,RESET_VECTOR_ADDRESS=0x04100000 Ricardo Ribalda -Active powerpc ppc4xx - xilinx ppc405-generic xilinx-ppc405-generic_flash xilinx-ppc405-generic:SYS_TEXT_BASE=0xF7F60000,RESET_VECTOR_ADDRESS=0xF7FFFFFC Ricardo Ribalda -Active powerpc ppc4xx - xilinx ppc440-generic xilinx-ppc440-generic xilinx-ppc440-generic:SYS_TEXT_BASE=0x04000000,RESET_VECTOR_ADDRESS=0x04100000,BOOT_FROM_XMD=1 Ricardo Ribalda -Active powerpc ppc4xx - xilinx ppc440-generic xilinx-ppc440-generic_flash xilinx-ppc440-generic:SYS_TEXT_BASE=0xF7F60000,RESET_VECTOR_ADDRESS=0xF7FFFFFC Ricardo Ribalda +Active powerpc ppc4xx - xilinx ppc405-generic xilinx-ppc405-generic - Michal Simek +Active powerpc ppc4xx - xilinx ppc440-generic xilinx-ppc440-generic - Michal Simek Active sandbox sandbox - sandbox sandbox sandbox - Simon Glass Active sh sh2 - renesas rsk7203 rsk7203 - Nobuhiro Iwamatsu :Nobuhiro Iwamatsu Active sh sh2 - renesas rsk7264 rsk7264 - Phil Edworthy diff --cc common/spl/spl_mmc.c index e18ee648897,fa6f891bc80..edbdd03c0d4 --- a/common/spl/spl_mmc.c +++ b/common/spl/spl_mmc.c @@@ -10,11 -10,8 +10,11 @@@ #include #include #include - #include #include #include ++#include +#include +#include DECLARE_GLOBAL_DATA_PTR; @@@ -71,83 -68,6 +71,35 @@@ static int mmc_load_image_raw_os(struc } #endif +#ifdef CONFIG_SPL_FPGA_SUPPORT +static int mmc_load_fpga_image_fat(struct mmc *mmc) +{ + int err; + int devnum = 0; + const fpga_desc *const desc = fpga_get_desc(devnum); + Xilinx_desc *desc_xilinx = desc->devdesc; + + /* FIXME = standard file size + header desc_xilinx->size + 0x6c */ + err = file_fat_read(CONFIG_SPL_FPGA_LOAD_ARGS_NAME, + (void *)CONFIG_SPL_FPGA_LOAD_ADDR, + 0); + if (err <= 0) { +#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT + printf("spl: error reading image %s, err - %d\n", + CONFIG_SPL_FPGA_LOAD_ARGS_NAME, err); +#endif + return -1; + } +#ifdef CONFIG_SPL_FPGA_BIT + return fpga_loadbitstream(devnum, (char *)CONFIG_SPL_FPGA_LOAD_ADDR, + desc_xilinx->size, BIT_FULL); +#else + return fpga_load(devnum, (const void *)CONFIG_SPL_FPGA_LOAD_ADDR, + desc_xilinx->size, BIT_FULL); +#endif +} +#endif + - #ifdef CONFIG_SPL_FAT_SUPPORT - static int mmc_load_image_fat(struct mmc *mmc, const char *filename) - { - int err; - struct image_header *header; - - header = (struct image_header *)(CONFIG_SYS_TEXT_BASE - - sizeof(struct image_header)); - - err = file_fat_read(filename, header, sizeof(struct image_header)); - if (err <= 0) - goto end; - - spl_parse_image_header(header); - - err = file_fat_read(filename, (u8 *)spl_image.load_addr, 0); - - end: - #ifdef CONFIG_SPL_LIBCOMMON_SUPPORT - if (err <= 0) - printf("spl: error reading image %s, err - %d\n", - filename, err); - #endif - - return (err <= 0); - } - - #ifdef CONFIG_SPL_OS_BOOT - static int mmc_load_image_fat_os(struct mmc *mmc) - { - int err; - - err = file_fat_read(CONFIG_SPL_FAT_LOAD_ARGS_NAME, - (void *)CONFIG_SYS_SPL_ARGS_ADDR, 0); - if (err <= 0) { - #ifdef CONFIG_SPL_LIBCOMMON_SUPPORT - printf("spl: error reading image %s, err - %d\n", - CONFIG_SPL_FAT_LOAD_ARGS_NAME, err); - #endif - return -1; - } - - return mmc_load_image_fat(mmc, CONFIG_SPL_FAT_LOAD_KERNEL_NAME); - } - #endif - - #endif - void spl_mmc_load_image(void) { struct mmc *mmc; @@@ -172,7 -92,7 +124,7 @@@ hang(); } -- boot_mode = spl_boot_mode(); ++ boot_mode = spl_boot_mode(); if (boot_mode == MMCSD_MODE_RAW) { debug("boot mode - RAW\n"); #ifdef CONFIG_SPL_OS_BOOT @@@ -183,23 -103,37 +135,43 @@@ #ifdef CONFIG_SPL_FAT_SUPPORT } else if (boot_mode == MMCSD_MODE_FAT) { debug("boot mode - FAT\n"); + - err = fat_register_device(&mmc->block_dev, - CONFIG_SYS_MMC_SD_FAT_BOOT_PARTITION); - if (err) { ++#ifdef CONFIG_SPL_FPGA_SUPPORT ++ mmc_load_fpga_image_fat(mmc); ++#endif ++ + #ifdef CONFIG_SPL_OS_BOOT + if (spl_start_uboot() || spl_load_image_fat_os(&mmc->block_dev, + CONFIG_SYS_MMC_SD_FAT_BOOT_PARTITION)) + #endif + err = spl_load_image_fat(&mmc->block_dev, + CONFIG_SYS_MMC_SD_FAT_BOOT_PARTITION, + CONFIG_SPL_FAT_LOAD_PAYLOAD_NAME); + #endif + #ifdef CONFIG_SUPPORT_EMMC_BOOT + } else if (boot_mode == MMCSD_MODE_EMMCBOOT) { + /* + * We need to check what the partition is configured to. + * 1 and 2 match up to boot0 / boot1 and 7 is user data + * which is the first physical partition (0). + */ + int part = (mmc->part_config >> 3) & PART_ACCESS_MASK; + + if (part == 7) + part = 0; + + if (mmc_switch_part(0, part)) { #ifdef CONFIG_SPL_LIBCOMMON_SUPPORT - printf("spl: fat register err - %d\n", err); + puts("MMC partition switch failed\n"); #endif hang(); } - #ifdef CONFIG_SPL_FPGA_SUPPORT - mmc_load_fpga_image_fat(mmc); - #endif + #ifdef CONFIG_SPL_OS_BOOT - if (spl_start_uboot() || mmc_load_image_fat_os(mmc)) + if (spl_start_uboot() || mmc_load_image_raw_os(mmc)) #endif - err = mmc_load_image_fat(mmc, CONFIG_SPL_FAT_LOAD_PAYLOAD_NAME); + err = mmc_load_image_raw(mmc, + CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR); #endif } else { #ifdef CONFIG_SPL_LIBCOMMON_SUPPORT diff --cc drivers/fpga/zynqpl.c index e098d1389a1,923a1586d8b..90a97db54b6 --- a/drivers/fpga/zynqpl.c +++ b/drivers/fpga/zynqpl.c @@@ -10,15 -10,11 +10,15 @@@ #include #include #include - #include + #include #include #include +#if defined(CONFIG_FPGA_LOADFS) && !defined(CONFIG_SPL_BUILD) +#include +#endif #define DEVCFG_CTRL_PCFG_PROG_B 0x40000000 +#define DEVCFG_CTRL_PCAP_RATE_EN_MASK 0x02000000 #define DEVCFG_ISR_FATAL_ERROR_MASK 0x00740040 #define DEVCFG_ISR_ERROR_FLAGS_MASK 0x00340840 #define DEVCFG_ISR_RX_FIFO_OV 0x00040000 diff --cc drivers/mtd/spi/sf_probe.c index 3f2f0ed810a,0a46fe38da6..9de867f674f --- a/drivers/mtd/spi/sf_probe.c +++ b/drivers/mtd/spi/sf_probe.c @@@ -147,9 -146,23 +146,23 @@@ static struct spi_flash *spi_flash_vali /* Compute the flash size */ flash->shift = (flash->dual_flash & SF_DUAL_PARALLEL_FLASH) ? 1 : 0; - flash->page_size = ((ext_jedec == 0x4d00) ? 512 : 256) << flash->shift; + /* + * The Spansion S25FL032P and S25FL064P have 256b pages, yet use the + * 0x4d00 Extended JEDEC code. The rest of the Spansion flashes with + * the 0x4d00 Extended JEDEC code have 512b pages. All of the others + * have 256b pages. + */ + if (ext_jedec == 0x4d00) { + if ((jedec == 0x0215) || (jedec == 0x216)) + flash->page_size = 256; + else + flash->page_size = 512; + } else { + flash->page_size = 256; + } + flash->page_size <<= flash->shift; flash->sector_size = params->sector_size << flash->shift; - flash->size = flash->sector_size * params->nr_sectors << flash->shift; + flash->size = flash->sector_size * params->nr_sectors; #ifdef CONFIG_SF_DUAL_FLASH if (flash->dual_flash & SF_DUAL_STACKED_FLASH) flash->size <<= 1; diff --cc drivers/net/xilinx_emaclite.c index a1766052fdf,2a5cc445530..dbda9e6f245 --- a/drivers/net/xilinx_emaclite.c +++ b/drivers/net/xilinx_emaclite.c @@@ -12,12 -12,8 +12,10 @@@ #include #include #include +#include +#include #include - DECLARE_GLOBAL_DATA_PTR; - #undef DEBUG #define ENET_ADDR_LENGTH 6 diff --cc include/configs/zynq-common.h index c028509a59c,731e69b5fd8..00f08aee0cc --- a/include/configs/zynq-common.h +++ b/include/configs/zynq-common.h @@@ -38,6 -39,8 +34,10 @@@ #if defined(CONFIG_ZYNQ_DCC) # define CONFIG_ARM_DCC # define CONFIG_CPU_V6 /* Required by CONFIG_ARM_DCC */ + #else -# define CONFIG_ZYNQ_SERIAL ++# if defined(CONFIG_ZYNQ_SERIAL_UART0) || defined(CONFIG_ZYNQ_SERIAL_UART1) ++# define CONFIG_ZYNQ_SERIAL ++# endif #endif /* Ethernet driver */ @@@ -295,8 -163,10 +295,10 @@@ #define CONFIG_AUTO_COMPLETE #define CONFIG_BOARD_LATE_INIT #define CONFIG_SYS_LONGHELP + #define CONFIG_CLOCKS + #define CONFIG_CMD_CLK -#define CONFIG_SYS_MAXARGS 15 /* max number of command args */ -#define CONFIG_SYS_CBSIZE 256 /* Console I/O Buffer Size */ +#define CONFIG_SYS_MAXARGS 32 /* max number of command args */ +#define CONFIG_SYS_CBSIZE 2048 /* Console I/O Buffer Size */ #define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + \ sizeof(CONFIG_SYS_PROMPT) + 16) @@@ -349,39 -218,15 +351,37 @@@ # define CONFIG_SYS_MMC_MAX_DEVICE 1 #endif -#define CONFIG_SYS_LDSCRIPT "arch/arm/cpu/armv7/zynq/u-boot.lds" - + /* Commands */ #include -#define CONFIG_CMD_PING -#define CONFIG_CMD_DHCP -#define CONFIG_CMD_MII -#define CONFIG_CMD_TFTPPUT +#ifdef CONFIG_SYS_ENET +# define CONFIG_CMD_PING +# define CONFIG_CMD_DHCP +# define CONFIG_CMD_MII +# define CONFIG_CMD_TFTPPUT +#else +# undef CONFIG_CMD_NET +# undef CONFIG_CMD_NFS +#endif + - #define CONFIG_CLOCKS - #define CONFIG_CMD_CLK - +#if defined(CONFIG_CMD_ZYNQ_RSA) +#define CONFIG_RSA +#define CONFIG_SHA256 +#define CONFIG_CMD_ZYNQ_AES +#endif + +#define CONFIG_CMD_BOOTZ +#undef CONFIG_BOOTM_NETBSD + +#define CONFIG_SYS_HZ 1000 + +/* For development/debugging */ +#ifdef DEBUG +# define CONFIG_CMD_REGINFO +# define CONFIG_PANIC_HANG +#endif + +#define CONFIG_SYS_LDSCRIPT "arch/arm/cpu/armv7/zynq/u-boot.lds" /* SPL part */ #define CONFIG_SPL @@@ -456,7 -284,7 +456,8 @@@ #define CONFIG_SPL_TEXT_BASE 0x0 /* 3 * 64kB blocks of OCM - one is on the top because of bootrom */ +#define CONFIG_SPL_MAX_FOOTPRINT 0x30000 + #define CONFIG_SPL_MAX_SIZE 0x30000 /* The highest 64k OCM address */ #define OCM_HIGH_ADDR 0xffff0000 diff --cc include/netdev.h index f78d7fff22c,32b5073ef02..c256881cee5 --- a/include/netdev.h +++ b/include/netdev.h @@@ -86,10 -86,12 +86,12 @@@ int uli526x_initialize(bd_t *bis) int armada100_fec_register(unsigned long base_addr); int xilinx_axiemac_initialize(bd_t *bis, unsigned long base_addr, unsigned long dma_addr); + int xilinx_emaclite_of_init(const void *blob); int xilinx_emaclite_initialize(bd_t *bis, unsigned long base_addr, int txpp, int rxpp); -int xilinx_ll_temac_eth_init(bd_t *bis, unsigned long base_addr, int flags, - unsigned long ctrl_addr); +int xilinx_ll_temac_initialize(bd_t *bis, unsigned long base_addr, + int mode, unsigned long ctrl); + int zynq_gem_of_init(const void *blob); int zynq_gem_initialize(bd_t *bis, int base_addr, int phy_addr, u32 emio); /* * As long as the Xilinx xps_ll_temac ethernet driver has not its own interface diff --cc spl/Makefile index c7b626c4bcc,6fec2522a8c..430fcafbf2f --- a/spl/Makefile +++ b/spl/Makefile @@@ -47,63 -81,66 +81,67 @@@ head-$(CONFIG_X86) += $(START_PATH)/sta head-$(CONFIG_4xx) += $(START_PATH)/resetvec.o head-$(CONFIG_MPC85xx) += $(START_PATH)/resetvec.o - LIBS-y += arch/$(ARCH)/lib/ + libs-y += arch/$(ARCH)/lib/ - LIBS-y += $(CPUDIR)/ + libs-y += $(CPUDIR)/ ifdef SOC - LIBS-y += $(CPUDIR)/$(SOC)/ - endif - LIBS-y += board/$(BOARDDIR)/ - LIBS-$(HAVE_VENDOR_COMMON_LIB) += board/$(VENDOR)/common/ - - LIBS-$(CONFIG_SPL_FRAMEWORK) += common/spl/ - LIBS-$(CONFIG_SPL_LIBCOMMON_SUPPORT) += common/ - LIBS-$(CONFIG_SPL_LIBDISK_SUPPORT) += disk/ - LIBS-$(CONFIG_SPL_I2C_SUPPORT) += drivers/i2c/ - LIBS-$(CONFIG_SPL_GPIO_SUPPORT) += drivers/gpio/ - LIBS-$(CONFIG_SPL_MMC_SUPPORT) += drivers/mmc/ - LIBS-$(CONFIG_SPL_MPC8XXX_INIT_DDR_SUPPORT) += drivers/ddr/fsl/ - LIBS-$(CONFIG_SPL_SERIAL_SUPPORT) += drivers/serial/ - LIBS-$(CONFIG_SPL_SPI_FLASH_SUPPORT) += drivers/mtd/spi/ - LIBS-$(CONFIG_SPL_SPI_SUPPORT) += drivers/spi/ - LIBS-y += fs/ - LIBS-$(CONFIG_SPL_FPGA_SUPPORT) += drivers/fpga/ - LIBS-$(CONFIG_SPL_LIBGENERIC_SUPPORT) += lib/ - LIBS-$(CONFIG_SPL_POWER_SUPPORT) += drivers/power/ \ - drivers/power/pmic/ - 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/ - LIBS-$(CONFIG_SPL_NET_SUPPORT) += net/ - LIBS-$(CONFIG_SPL_ETH_SUPPORT) += drivers/net/ - LIBS-$(CONFIG_SPL_ETH_SUPPORT) += drivers/net/phy/ - LIBS-$(CONFIG_SPL_USBETH_SUPPORT) += drivers/net/phy/ - 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/ + libs-y += $(CPUDIR)/$(SOC)/ + endif + libs-y += board/$(BOARDDIR)/ + libs-$(HAVE_VENDOR_COMMON_LIB) += board/$(VENDOR)/common/ + + libs-$(CONFIG_SPL_FRAMEWORK) += common/spl/ + libs-$(CONFIG_SPL_LIBCOMMON_SUPPORT) += common/ + libs-$(CONFIG_SPL_LIBDISK_SUPPORT) += disk/ + libs-$(CONFIG_SPL_I2C_SUPPORT) += drivers/i2c/ + libs-$(CONFIG_SPL_GPIO_SUPPORT) += drivers/gpio/ + libs-$(CONFIG_SPL_MMC_SUPPORT) += drivers/mmc/ + libs-$(CONFIG_SPL_MPC8XXX_INIT_DDR_SUPPORT) += drivers/ddr/fsl/ + libs-$(CONFIG_SPL_SERIAL_SUPPORT) += drivers/serial/ + libs-$(CONFIG_SPL_SPI_FLASH_SUPPORT) += drivers/mtd/spi/ + libs-$(CONFIG_SPL_SPI_SUPPORT) += drivers/spi/ + libs-y += fs/ ++libs-$(CONFIG_SPL_FPGA_SUPPORT) += drivers/fpga/ + libs-$(CONFIG_SPL_LIBGENERIC_SUPPORT) += lib/ + libs-$(CONFIG_SPL_POWER_SUPPORT) += drivers/power/ drivers/power/pmic/ + libs-$(if $(CONFIG_CMD_NAND),$(CONFIG_SPL_NAND_SUPPORT)) += drivers/mtd/nand/ + libs-$(CONFIG_SPL_DRIVERS_MISC_SUPPORT) += drivers/misc/ + libs-$(CONFIG_SPL_ONENAND_SUPPORT) += drivers/mtd/onenand/ + libs-$(CONFIG_SPL_DMA_SUPPORT) += drivers/dma/ + libs-$(CONFIG_SPL_POST_MEM_SUPPORT) += post/drivers/ + libs-$(CONFIG_SPL_NET_SUPPORT) += net/ + libs-$(CONFIG_SPL_ETH_SUPPORT) += drivers/net/ + libs-$(CONFIG_SPL_ETH_SUPPORT) += drivers/net/phy/ + libs-$(CONFIG_SPL_USBETH_SUPPORT) += drivers/net/phy/ + 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/ + libs-$(CONFIG_SPL_USB_HOST_SUPPORT) += drivers/usb/host/ + libs-$(CONFIG_OMAP_USB_PHY) += drivers/usb/phy/ + libs-$(CONFIG_SPL_SATA_SUPPORT) += drivers/block/ ifneq (,$(CONFIG_MX23)$(CONFIG_MX35)$(filter $(SOC), mx25 mx27 mx5 mx6 mx31 mx35)) - LIBS-y += arch/$(ARCH)/imx-common/ + libs-y += arch/$(ARCH)/imx-common/ endif - LIBS-$(CONFIG_ARM) += arch/arm/cpu/ - LIBS-$(CONFIG_PPC) += arch/powerpc/cpu/ + libs-$(CONFIG_ARM) += arch/arm/cpu/ + libs-$(CONFIG_PPC) += arch/powerpc/cpu/ - LIBS-y := $(patsubst %/, %/built-in.o, $(LIBS-y)) + head-y := $(addprefix $(obj)/,$(head-y)) + libs-y := $(addprefix $(obj)/,$(libs-y)) + u-boot-spl-dirs := $(patsubst %/,%,$(filter %/, $(libs-y))) + + libs-y := $(patsubst %/, %/built-in.o, $(libs-y)) # Add GCC lib - ifeq ("$(USE_PRIVATE_LIBGCC)", "yes") - PLATFORM_LIBGCC = $(SPLTREE)/arch/$(ARCH)/lib/libgcc.o - PLATFORM_LIBS := $(filter-out %/libgcc.o, $(filter-out -lgcc, $(PLATFORM_LIBS))) $(PLATFORM_LIBGCC) + ifeq ($(CONFIG_USE_PRIVATE_LIBGCC),y) + PLATFORM_LIBGCC = arch/$(ARCH)/lib/lib.a + PLATFORM_LIBS := $(filter-out %/lib.a, $(filter-out -lgcc, $(PLATFORM_LIBS))) $(PLATFORM_LIBGCC) endif - START := $(addprefix $(SPLTREE)/,$(head-y)) - LIBS := $(addprefix $(SPLTREE)/,$(sort $(LIBS-y))) - - __START := $(subst $(obj),,$(START)) - __LIBS := $(subst $(obj),,$(LIBS)) + u-boot-spl-init := $(head-y) + u-boot-spl-main := $(libs-y) # Linker Script ifdef CONFIG_SPL_LDSCRIPT