]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
Merge tag 'v2014.04' into xilinx/master-next
authorMichal Simek <michal.simek@xilinx.com>
Tue, 15 Jul 2014 11:35:24 +0000 (13:35 +0200)
committerMichal Simek <michal.simek@xilinx.com>
Wed, 16 Jul 2014 13:29:22 +0000 (15:29 +0200)
Not so many merge conflits with mainline.

Signed-off-by: Michal Simek <michal.simek@xilinx.com>
26 files changed:
1  2 
Makefile
README
arch/arm/cpu/armv7/zynq/cpu.c
arch/arm/cpu/armv7/zynq/spl.c
arch/arm/include/asm/arch-zynq/spl.h
arch/arm/include/asm/arch-zynq/sys_proto.h
arch/arm/lib/bootm.c
board/xilinx/zynq/Makefile
board/xilinx/zynq/board.c
boards.cfg
common/Makefile
common/spl/spl_mmc.c
drivers/fpga/zynqpl.c
drivers/mtd/spi/sf_ops.c
drivers/mtd/spi/sf_params.c
drivers/mtd/spi/sf_probe.c
drivers/net/xilinx_emaclite.c
drivers/net/zynq_gem.c
drivers/usb/host/Makefile
fs/fat/fat.c
include/config_cmd_all.h
include/configs/zynq-common.h
include/fat.h
include/netdev.h
include/spi_flash.h
spl/Makefile

diff --cc Makefile
index 0419debd8e9cd4549daf5e96163097e4706ba42f,c91c10ed3a33089a94fe06e6d2ebee05753111c0..dd0cca06269039d2022b3e3bf01a3890943a4bf4
mode 100755,100644..100755
+++ 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 <whatever> 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
  
- ALL-y += $(obj)boot.bin
 +ifneq ($(CONFIG_ZYNQ),)
 +ifeq ($(CONFIG_SPL),y)
- build := -f $(TOPDIR)/scripts/Makefile.build -C
++ALL-y += boot.bin
 +endif
 +endif
 +
+ 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 fb1c0fd20de6186d6e8106f4fec3ed62c243e74c,39e05d333c672b5183908a4016ad223641ca023a..0145be2f687147640b352954efaeaffb5b6fd3f0
--- 1/README
--- 2/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:
  
index cf3d92febfd026fe0f58044abc55dec953d7ee31,7626b5c1a3b5e85a18e8560b438cf67ad1ce75b6..5159c021a4a3c14cf9858898629e2d92adfc4525
@@@ -6,12 -6,13 +6,13 @@@
   */
  #include <common.h>
  #include <asm/io.h>
+ #include <asm/arch/clk.h>
  #include <asm/arch/sys_proto.h>
  #include <asm/arch/hardware.h>
 +#include <asm/arch/clk.h>
  
 -void lowlevel_init(void)
 -{
 -}
 +#define ZYNQ_SILICON_VER_MASK 0xF0000000
 +#define ZYNQ_SILICON_VER_SHIFT        28
  
  int arch_cpu_init(void)
  {
index f6686b4d649b606dc8539bd50575c86dfb9990ba,fcad762c030644d3d004cebbbdba9670a9b638a4..c4556c94d6209b808a84fccb292c97a091685805
@@@ -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;
Simple merge
Simple merge
index 2bc7d4cacf59e7c4bcfaeaba52cb421c03b1fd65,3f19a1cd8b23d281cacb5f3a823f8e899fc79457..131addeea44744d2c7d8d8a638c0f1acae4cd529
@@@ -6,12 -6,4 +6,10 @@@
  #
  
  obj-y := board.o
- ifneq ($(wildcard ps7_init.c),)
+ obj-$(CONFIG_SPL_BUILD)       += ps7_init.o
 +
- obj-$(CONFIG_SPL_BUILD)       += ps7_init.o
 +ifneq ($(wildcard ps7_init.h),)
- endif
 +ifeq ($(CONFIG_SPL_BUILD),y)
 +$(shell touch xil_io.h)
 +endif
 +endif
index 9a45fe11392428f0a3b27e8d54bd5b2aa42948a3,485a5e4a249251d4c478884143a754b90b4e1536..6f48253c1a6a0e8db394b95d6bd11414daca1a76
@@@ -5,7 -5,7 +5,9 @@@
   */
  
  #include <common.h>
 +#include <asm/io.h>
+ #include <fdtdec.h>
++#include <fpga.h>
  #include <netdev.h>
  #include <zynqpl.h>
  #include <asm/arch/hardware.h>
@@@ -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 711f58b4f3d443260ba5f8b294f89df15e9f8c96,b4203f1b576fee0b39dafd21706a3fb9073fea1c..eefa6a68a2fa7d8c99a1dabb1bdfc19cf4409a46
@@@ -356,31 -374,14 +374,32 @@@ Active  arm         armv7          socf
  Active  arm         armv7          u8500       st-ericsson     snowball            snowball                             -                                                                                                                                 Mathieu Poirier <mathieu.poirier@linaro.org>
  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 <b18965@freescale.com>
- Active  arm       armv7          zynq        xilinx          zynq                zynq_zc70x                           -                                                                                                                                 Michal Simek <monstr@monstr.eu>:Jagannadha Sutradharudu Teki <jaganna@xilinx.com>
- Active  arm       armv7          zynq        xilinx          zynq                zynq_zed                             -                                                                                                                                 Michal Simek <monstr@monstr.eu>:Jagannadha Sutradharudu Teki <jaganna@xilinx.com>
- Active  arm       armv7          zynq        xilinx          zynq                zynq_microzed                        -                                                                                                                                 Michal Simek <monstr@monstr.eu>:Jagannadha Sutradharudu Teki <jaganna@xilinx.com>
- Active  arm       armv7          zynq        xilinx          zynq                zynq_zc770_XM010                     zynq_zc770:ZC770_XM010                                                                                                            Michal Simek <monstr@monstr.eu>:Jagannadha Sutradharudu Teki <jaganna@xilinx.com>
- Active  arm       armv7          zynq        xilinx          zynq                zynq_zc770_XM012                     zynq_zc770:ZC770_XM012                                                                                                            Michal Simek <monstr@monstr.eu>:Jagannadha Sutradharudu Teki <jaganna@xilinx.com>
- Active  arm       armv7          zynq        xilinx          zynq                zynq_zc770_XM013                     zynq_zc770:ZC770_XM013                                                                                                            Michal Simek <monstr@monstr.eu>:Jagannadha Sutradharudu Teki <jaganna@xilinx.com>
+ Active  arm         armv7          zynq        xilinx          zynq                zynq_microzed                        -                                                                                                                                 Michal Simek <monstr@monstr.eu>:Jagannadha Sutradharudu Teki <jaganna@xilinx.com>
+ Active  arm         armv7          zynq        xilinx          zynq                zynq_zc70x                           -                                                                                                                                 Michal Simek <monstr@monstr.eu>:Jagannadha Sutradharudu Teki <jaganna@xilinx.com>
 -Active  arm         armv7          zynq        xilinx          zynq                zynq_zc770_xm010                     zynq_zc770:ZC770_XM010                                                                                                            Michal Simek <monstr@monstr.eu>:Jagannadha Sutradharudu Teki <jaganna@xilinx.com>
 -Active  arm         armv7          zynq        xilinx          zynq                zynq_zc770_xm012                     zynq_zc770:ZC770_XM012                                                                                                            Michal Simek <monstr@monstr.eu>:Jagannadha Sutradharudu Teki <jaganna@xilinx.com>
 -Active  arm         armv7          zynq        xilinx          zynq                zynq_zc770_xm013                     zynq_zc770:ZC770_XM013                                                                                                            Michal Simek <monstr@monstr.eu>:Jagannadha Sutradharudu Teki <jaganna@xilinx.com>
++Active  arm         armv7          zynq        xilinx          zynq                zynq_zc770_XM010                     zynq_zc770:ZC770_XM010                                                                                                            Michal Simek <monstr@monstr.eu>:Jagannadha Sutradharudu Teki <jaganna@xilinx.com>
 +Active  arm         armv7          zynq        xilinx          zynq                zynq_zc770_XM011                     zynq_zc770:ZC770_XM011                                                                                                            Michal Simek <michal.simek@xilinx.com>
++Active  arm         armv7          zynq        xilinx          zynq                zynq_zc770_XM012                     zynq_zc770:ZC770_XM012                                                                                                            Michal Simek <monstr@monstr.eu>:Jagannadha Sutradharudu Teki <jaganna@xilinx.com>
++Active  arm         armv7          zynq        xilinx          zynq                zynq_zc770_XM013                     zynq_zc770:ZC770_XM013                                                                                                            Michal Simek <monstr@monstr.eu>:Jagannadha Sutradharudu Teki <jaganna@xilinx.com>
+ Active  arm         armv7          zynq        xilinx          zynq                zynq_zed                             -                                                                                                                                 Michal Simek <monstr@monstr.eu>:Jagannadha Sutradharudu Teki <jaganna@xilinx.com>
 +Active  arm         armv7          zynq        xilinx          zynq                zynq_afx_nor                         zynq_afx:AFX_NOR                                                                                                                  Michal Simek <michal.simek@xilinx.com>
 +Active  arm         armv7          zynq        xilinx          zynq                zynq_afx_qspi                        zynq_afx:AFX_QSPI                                                                                                                 Michal Simek <michal.simek@xilinx.com>
 +Active  arm         armv7          zynq        xilinx          zynq                zynq_afx_nand                        zynq_afx:AFX_NAND                                                                                                                 Michal Simek <michal.simek@xilinx.com>
 +Active  arm         armv7          zynq        xilinx          zynq                zynq_cse_nor                         zynq_cse:CSE_NOR                                                                                                                  Michal Simek <michal.simek@xilinx.com>
 +Active  arm         armv7          zynq        xilinx          zynq                zynq_cse_qspi                        zynq_cse:CSE_QSPI                                                                                                                 Michal Simek <michal.simek@xilinx.com>
 +Active  arm         armv7          zynq        xilinx          zynq                zynq_cse_nand                        zynq_cse:CSE_NAND                                                                                                                 Michal Simek <michal.simek@xilinx.com>
 +Active  arm         armv7          zynq        xilinx          zynq                zynq_ocm                             -                                                                                                                                 Michal Simek <michal.simek@xilinx.com>
 +Active  arm         armv7          zynq        xilinx          zynq                zynq_cc108                           -                                                                                                                                 Michal Simek <michal.simek@xilinx.com>
 +Active  arm         armv7          zynq        xilinx          zynq                zynq_zc770_XM010_RSA                 zynq_zc770:ZC770_XM010,CMD_ZYNQ_RSA                                                                                                   Michal Simek <michal.simek@xilinx.com>
 +Active  arm         armv7          zynq        xilinx          zynq                zynq_zc770_XM011_RSA                 zynq_zc770:ZC770_XM011,CMD_ZYNQ_RSA                                                                                                   Michal Simek <michal.simek@xilinx.com>
 +Active  arm         armv7          zynq        xilinx          zynq                zynq_zc770_XM012_RSA                 zynq_zc770:ZC770_XM012,CMD_ZYNQ_RSA                                                                                                   Michal Simek <michal.simek@xilinx.com>
 +Active  arm         armv7          zynq        xilinx          zynq                zynq_zc770_XM013_RSA                 zynq_zc770:ZC770_XM013,CMD_ZYNQ_RSA                                                                                                   Michal Simek <michal.simek@xilinx.com>
 +Active  arm         armv7          zynq        xilinx          zynq                zynq_afx_nor_RSA                     zynq_afx:AFX_NOR,CMD_ZYNQ_RSA                                                                                                         Michal Simek <michal.simek@xilinx.com>
 +Active  arm         armv7          zynq        xilinx          zynq                zynq_afx_qspi_RSA                    zynq_afx:AFX_QSPI,CMD_ZYNQ_RSA                                                                                                        Michal Simek <michal.simek@xilinx.com>
 +Active  arm         armv7          zynq        xilinx          zynq                zynq_afx_nand_RSA                    zynq_afx:AFX_NAND,CMD_ZYNQ_RSA                                                                                                        Michal Simek <michal.simek@xilinx.com>
 +Active  arm         armv7          zynq        xilinx          zynq                zynq_zc70x_RSA                       zynq_zc70x:CMD_ZYNQ_RSA                                                                                                               Michal Simek <michal.simek@xilinx.com>
 +Active  arm         armv7          zynq        xilinx          zynq                zynq_zed_RSA                         zynq_zed:CMD_ZYNQ_RSA                                                                                                                 Michal Simek <michal.simek@xilinx.com>
  Active  arm         armv7:arm720t  tegra114    nvidia          dalmore             dalmore                              -                                                                                                                                 Tom Warren <twarren@nvidia.com>
+ Active  arm         armv7:arm720t  tegra124    nvidia          venice2             venice2                              -                                                                                                                                 Tom Warren <twarren@nvidia.com>
  Active  arm         armv7:arm720t  tegra20     avionic-design  medcom-wide         medcom-wide                          -                                                                                                                                 Alban Bedel <alban.bedel@avionic-design.de>
  Active  arm         armv7:arm720t  tegra20     avionic-design  plutux              plutux                               -                                                                                                                                 Alban Bedel <alban.bedel@avionic-design.de>
  Active  arm         armv7:arm720t  tegra20     avionic-design  tec                 tec                                  -                                                                                                                                 Alban Bedel <alban.bedel@avionic-design.de>
@@@ -1154,7 -1102,10 +1120,6 @@@ Active  powerpc     ppc4xx         
  Active  powerpc     ppc4xx         -           amcc            walnut              walnut                               -                                                                                                                                 Stefan Roese <sr@denx.de>
  Active  powerpc     ppc4xx         -           amcc            yosemite            yellowstone                          yosemite:YELLOWSTONE                                                                                                              Stefan Roese <sr@denx.de>
  Active  powerpc     ppc4xx         -           amcc            yosemite            yosemite                             yosemite:YOSEMITE                                                                                                                 Stefan Roese <sr@denx.de>
- Active  powerpc     ppc4xx         -           cray            L1                  CRAYL1                               -                                                                                                                                 David Updegraff <dave@cray.com>
 -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 <schardt@team-ctech.de>
 -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 <schardt@team-ctech.de>
 -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 <ricardo.ribalda@uam.es>
 -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 <ricardo.ribalda@uam.es>
  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 <d.peter@mpl.ch>
  Active  powerpc     ppc4xx         -           prodrive        -                   alpr                                 -                                                                                                                                 Stefan Roese <sr@denx.de>
  Active  powerpc     ppc4xx         -           prodrive        -                   p3p440                               -                                                                                                                                 Stefan Roese <sr@denx.de>
- 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 <ptyser@xes-inc.com>
 -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 <ricardo.ribalda@uam.es>
 -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 <ricardo.ribalda@uam.es>
 -Active  powerpc     ppc4xx         -           xilinx          ppc405-generic      xilinx-ppc405-generic                xilinx-ppc405-generic:SYS_TEXT_BASE=0x04000000,RESET_VECTOR_ADDRESS=0x04100000                                                    Ricardo Ribalda <ricardo.ribalda@uam.es>
 -Active  powerpc     ppc4xx         -           xilinx          ppc405-generic      xilinx-ppc405-generic_flash          xilinx-ppc405-generic:SYS_TEXT_BASE=0xF7F60000,RESET_VECTOR_ADDRESS=0xF7FFFFFC                                                    Ricardo Ribalda <ricardo.ribalda@uam.es>
 -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 <ricardo.ribalda@uam.es>
 -Active  powerpc     ppc4xx         -           xilinx          ppc440-generic      xilinx-ppc440-generic_flash          xilinx-ppc440-generic:SYS_TEXT_BASE=0xF7F60000,RESET_VECTOR_ADDRESS=0xF7FFFFFC                                                    Ricardo Ribalda <ricardo.ribalda@uam.es>
 +Active  powerpc     ppc4xx         -           xilinx          ppc405-generic      xilinx-ppc405-generic                -                                                                                                                                 Michal Simek <michal.simek@xilinx.com>
 +Active  powerpc     ppc4xx         -           xilinx          ppc440-generic      xilinx-ppc440-generic                -                                                                                                                                 Michal Simek <michal.simek@xilinx.com>
  Active  sandbox     sandbox        -           sandbox         sandbox             sandbox                              -                                                                                                                                 Simon Glass <sjg@chromium.org>
  Active  sh          sh2            -           renesas         rsk7203             rsk7203                              -                                                                                                                                 Nobuhiro Iwamatsu <iwamatsu.nobuhiro@renesas.com>:Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
  Active  sh          sh2            -           renesas         rsk7264             rsk7264                              -                                                                                                                                 Phil Edworthy <phil.edworthy@renesas.com>
diff --cc common/Makefile
Simple merge
index e18ee648897952123b4bba0a2f81a8bdd6fc674c,fa6f891bc805e30bd64723a9ca98f352cf38af45..edbdd03c0d47f498649c0c4cd246b7f69c9465d6
  #include <spl.h>
  #include <asm/u-boot.h>
  #include <mmc.h>
- #include <fat.h>
  #include <version.h>
  #include <image.h>
++#include <fat.h>
 +#include <fpga.h>
 +#include <xilinx.h>
  
  DECLARE_GLOBAL_DATA_PTR;
  
@@@ -71,83 -68,6 +71,35 @@@ static int mmc_load_image_raw_os(struc
  }
  #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
 +#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
 +
  void spl_mmc_load_image(void)
  {
        struct mmc *mmc;
                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
  #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
index e098d1389a101282d8af566d2137d2b8e4d1bd3b,923a1586d8b558e7ac2241383fb9d8d7bca70c6a..90a97db54b68b271077be687b135622439a8c177
  #include <common.h>
  #include <asm/io.h>
  #include <zynqpl.h>
- #include <asm/sizes.h>
+ #include <linux/sizes.h>
  #include <asm/arch/hardware.h>
  #include <asm/arch/sys_proto.h>
 +#if defined(CONFIG_FPGA_LOADFS) && !defined(CONFIG_SPL_BUILD)
 +#include <fs.h>
 +#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
Simple merge
Simple merge
index 3f2f0ed810a001c63f21e4ed1d4255c503e06056,0a46fe38da6899fd4c26702ec1981a720828c532..9de867f674f966255da9b27e597189a9939fa7ea
@@@ -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;
index a1766052fdf3a74eb0824a01d29c3f16445fad17,2a5cc445530f9f58fc29abd03858d60f1bd6cb57..dbda9e6f245cb444b0e5ebd093b5e0f3feb22803
  #include <config.h>
  #include <malloc.h>
  #include <asm/io.h>
 +#include <phy.h>
 +#include <miiphy.h>
  #include <fdtdec.h>
  
- DECLARE_GLOBAL_DATA_PTR;
  #undef DEBUG
  
  #define ENET_ADDR_LENGTH      6
Simple merge
Simple merge
diff --cc fs/fat/fat.c
Simple merge
Simple merge
index c028509a59c374bc5d22fd73d50f27693c4728df,731e69b5fd89dcb2aa275f38f04d7e87dcfa1def..00f08aee0ccb131eefe9cb60f19a473ff852d0b3
  #if defined(CONFIG_ZYNQ_DCC)
  # define CONFIG_ARM_DCC
  # define CONFIG_CPU_V6 /* Required by CONFIG_ARM_DCC */
 -# define CONFIG_ZYNQ_SERIAL
+ #else
++# if defined(CONFIG_ZYNQ_SERIAL_UART0) || defined(CONFIG_ZYNQ_SERIAL_UART1)
++#  define CONFIG_ZYNQ_SERIAL
++# endif
  #endif
  
  /* Ethernet driver */
  #define CONFIG_AUTO_COMPLETE
  #define CONFIG_BOARD_LATE_INIT
  #define CONFIG_SYS_LONGHELP
 -#define CONFIG_SYS_MAXARGS            15 /* max number of command args */
 -#define CONFIG_SYS_CBSIZE             256 /* Console I/O Buffer Size */
+ #define CONFIG_CLOCKS
+ #define CONFIG_CMD_CLK
 +#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)
  
  # define CONFIG_SYS_MMC_MAX_DEVICE    1
  #endif
  
 -#define CONFIG_SYS_LDSCRIPT  "arch/arm/cpu/armv7/zynq/u-boot.lds"
 -
+ /* Commands */
  #include <config_cmd_default.h>
  
 -#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
  #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/fat.h
Simple merge
index f78d7fff22c511d0b74c1a11d82f93cf2cdcce29,32b5073ef025bb3e8d5e8b2bac0c3558236d0a25..c256881cee5d5d0b4d732982f398e890621a3113
@@@ -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
Simple merge
diff --cc spl/Makefile
index c7b626c4bcc17339637447b53444175d2aac4367,6fec2522a8c90f3598237f46b7592a0fef8ab206..430fcafbf2fc39e98fe10cf84c5c3c19f7bbb485
@@@ -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