Merge branch 'u-boot/master' into 'u-boot-arm/master'
authorAlbert ARIBAUD <albert.u.boot@aribaud.net>
Thu, 20 Feb 2014 12:16:05 +0000 (13:16 +0100)
committerAlbert ARIBAUD <albert.u.boot@aribaud.net>
Thu, 20 Feb 2014 12:16:05 +0000 (13:16 +0100)
Conflicts:
Makefile
drivers/net/npe/Makefile

These two conflicts arise from commit 0b2d3f20
("ARM: NET: Remove the IXP NPE ethernet driver") and are
resolved by deleting the drivers/net/npe/Makefile file
and removing the CONFIG_IXP4XX_NPE line from Makefile.

1  2 
MAKEALL
Makefile
README
include/common.h
include/configs/hummingboard.h
include/configs/udoo.h

diff --combined MAKEALL
index 8fedea242e2563dcb9c1cf12a5a1648cf4e79210,2bb6bb2638187faea48acf383f82ff6666647c13..705a0bb5e1a2f2c20c325e7b67452f5e3ab282a5
+++ b/MAKEALL
@@@ -398,6 -398,8 +398,6 @@@ LIST_at91="$(targets_by_soc at91)
  
  LIST_pxa="$(targets_by_cpu pxa)"
  
 -LIST_ixp="$(targets_by_cpu ixp)"
 -
  #########################################################################
  ## SPEAr Systems
  #########################################################################
@@@ -672,8 -674,6 +672,6 @@@ build_target() 
                output_dir="${OUTPUT_PREFIX}"
        fi
  
-       export BUILD_DIR="${output_dir}"
        target_arch=$(get_target_arch ${target})
        eval cross_toolchain=\$CROSS_COMPILE_`echo $target_arch | tr '[:lower:]' '[:upper:]'`
        if [ "${cross_toolchain}" ] ; then
            MAKE=make
        fi
  
+       if [  "${output_dir}" != "." ] ; then
+               MAKE="${MAKE} O=${output_dir}"
+       fi
        ${MAKE} distclean >/dev/null
        ${MAKE} -s ${target}_config
  
        if [ $BUILD_MANY == 1 ] ; then
                trap - TERM
  
-               ${MAKE} -s tidy
+               ${MAKE} -s clean
  
                if [ -s ${LOG_DIR}/${target}.ERR ] ; then
                        cp ${LOG_DIR}/${target}.ERR ${OUTPUT_PREFIX}/ERR/${target}
diff --combined Makefile
index 0e07aa597000245f0e962158bb9ead95ca924408,d9b2b7fa6005a84132713d0408a8ceba5a9fafa6..9a530b3e80a0295f18cab2ecde638a0facde84a3
+++ b/Makefile
  #
  
  VERSION = 2014
- PATCHLEVEL = 01
+ PATCHLEVEL = 04
  SUBLEVEL =
- EXTRAVERSION =
- ifneq "$(SUBLEVEL)" ""
- U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
+ EXTRAVERSION = -rc1
+ NAME =
+ # *DOCUMENTATION*
+ # To see a list of typical targets execute "make help"
+ # More info can be located in ./README
+ # Comments in this file are targeted only to the developer, do not
+ # expect to learn how to build the kernel reading this file.
+ # Do not:
+ # o  use make's built-in rules and variables
+ #    (this increases performance and avoids hard-to-debug behaviour);
+ # o  print "Entering directory ...";
+ MAKEFLAGS += -rR --no-print-directory
+ # Avoid funny character set dependencies
+ unexport LC_ALL
+ LC_COLLATE=C
+ LC_NUMERIC=C
+ export LC_COLLATE LC_NUMERIC
+ # We are using a recursive build, so we need to do a little thinking
+ # to get the ordering right.
+ #
+ # Most importantly: sub-Makefiles should only ever modify files in
+ # their own directory. If in some directory we have a dependency on
+ # a file in another dir (which doesn't happen often, but it's often
+ # unavoidable when linking the built-in.o targets which finally
+ # turn into vmlinux), we will call a sub make in that other dir, and
+ # after that we are sure that everything which is in that other dir
+ # is now up to date.
+ #
+ # The only cases where we need to modify files which have global
+ # effects are thus separated out and done before the recursive
+ # descending is started. They are now explicitly listed as the
+ # prepare rule.
+ # To put more focus on warnings, be less verbose as default
+ # Use 'make V=1' to see the full commands
+ ifeq ("$(origin V)", "command line")
+   KBUILD_VERBOSE = $(V)
+ endif
+ ifndef KBUILD_VERBOSE
+   KBUILD_VERBOSE = 0
+ endif
+ # Call a source code checker (by default, "sparse") as part of the
+ # C compilation.
+ #
+ # Use 'make C=1' to enable checking of only re-compiled files.
+ # Use 'make C=2' to enable checking of *all* source files, regardless
+ # of whether they are re-compiled or not.
+ #
+ # See the file "Documentation/sparse.txt" for more details, including
+ # where to get the "sparse" utility.
+ ifeq ("$(origin C)", "command line")
+   KBUILD_CHECKSRC = $(C)
+ endif
+ ifndef KBUILD_CHECKSRC
+   KBUILD_CHECKSRC = 0
+ endif
+ # Use make M=dir to specify directory of external module to build
+ # Old syntax make ... SUBDIRS=$PWD is still supported
+ # Setting the environment variable KBUILD_EXTMOD take precedence
+ ifdef SUBDIRS
+   KBUILD_EXTMOD ?= $(SUBDIRS)
+ endif
+ ifeq ("$(origin M)", "command line")
+   KBUILD_EXTMOD := $(M)
+ endif
+ # kbuild supports saving output files in a separate directory.
+ # To locate output files in a separate directory two syntaxes are supported.
+ # In both cases the working directory must be the root of the kernel src.
+ # 1) O=
+ # Use "make O=dir/to/store/output/files/"
+ #
+ # 2) Set KBUILD_OUTPUT
+ # Set the environment variable KBUILD_OUTPUT to point to the directory
+ # where the output files shall be placed.
+ # export KBUILD_OUTPUT=dir/to/store/output/files/
+ # make
+ #
+ # The O= assignment takes precedence over the KBUILD_OUTPUT environment
+ # variable.
+ # KBUILD_SRC is set on invocation of make in OBJ directory
+ # KBUILD_SRC is not intended to be used by the regular user (for now)
+ ifeq ($(KBUILD_SRC),)
+ # OK, Make called in directory where kernel src resides
+ # Do we want to locate output files in a separate directory?
+ ifeq ("$(origin O)", "command line")
+   KBUILD_OUTPUT := $(O)
+ endif
+ ifeq ("$(origin W)", "command line")
+   export KBUILD_ENABLE_EXTRA_GCC_CHECKS := $(W)
+ endif
+ # That's our default target when none is given on the command line
+ PHONY := _all
+ _all:
+ # Cancel implicit rules on top Makefile
+ $(CURDIR)/Makefile Makefile: ;
+ ifneq ($(KBUILD_OUTPUT),)
+ # Invoke a second make in the output directory, passing relevant variables
+ # check that the output directory actually exists
+ saved-output := $(KBUILD_OUTPUT)
+ KBUILD_OUTPUT := $(shell cd $(KBUILD_OUTPUT) && /bin/pwd)
+ $(if $(KBUILD_OUTPUT),, \
+      $(error output directory "$(saved-output)" does not exist))
+ PHONY += $(MAKECMDGOALS) sub-make
+ $(filter-out _all sub-make $(CURDIR)/Makefile, $(MAKECMDGOALS)) _all: sub-make
+       @:
+ sub-make: FORCE
+       $(if $(KBUILD_VERBOSE:1=),@)$(MAKE) -C $(KBUILD_OUTPUT) \
+       KBUILD_SRC=$(CURDIR) \
+       KBUILD_EXTMOD="$(KBUILD_EXTMOD)" -f $(CURDIR)/Makefile \
+       $(filter-out _all sub-make,$(MAKECMDGOALS))
+ # Leave processing to above invocation of make
+ skip-makefile := 1
+ endif # ifneq ($(KBUILD_OUTPUT),)
+ endif # ifeq ($(KBUILD_SRC),)
+ # We process the rest of the Makefile if this is the final invocation of make
+ ifeq ($(skip-makefile),)
+ # If building an external module we do not care about the all: rule
+ # but instead _all depend on modules
+ PHONY += all
+ ifeq ($(KBUILD_EXTMOD),)
+ _all: all
  else
- U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL)$(EXTRAVERSION)
+ _all: modules
  endif
- TIMESTAMP_FILE = $(obj)include/generated/timestamp_autogenerated.h
- VERSION_FILE = $(obj)include/generated/version_autogenerated.h
+ srctree               := $(if $(KBUILD_SRC),$(KBUILD_SRC),$(CURDIR))
+ objtree               := $(CURDIR)
+ src           := $(srctree)
+ obj           := $(objtree)
+ VPATH         := $(srctree)$(if $(KBUILD_EXTMOD),:$(KBUILD_EXTMOD))
+ export srctree objtree VPATH
+ OBJTREE               := $(objtree)
+ SPLTREE               := $(OBJTREE)/spl
+ TPLTREE               := $(OBJTREE)/tpl
+ SRCTREE               := $(srctree)
+ TOPDIR                := $(SRCTREE)
+ export        TOPDIR SRCTREE OBJTREE SPLTREE TPLTREE
+ MKCONFIG      := $(SRCTREE)/mkconfig
+ export MKCONFIG
+ # Make sure CDPATH settings don't interfere
+ unexport CDPATH
+ #########################################################################
+ TIMESTAMP_FILE = include/generated/timestamp_autogenerated.h
+ VERSION_FILE = include/generated/version_autogenerated.h
  
  HOSTARCH := $(shell uname -m | \
        sed -e s/i.86/x86/ \
@@@ -36,139 -202,291 +202,291 @@@ 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.
  #
- # U-boot build supports generating object files in a separate external
- # directory. Two use cases are supported:
+ # 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.
  #
- # 1) Add O= to the make command line
- # 'make O=/tmp/build all'
+ 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
+ # ---------------------------------------------------------------------------
+ #
+ # 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 "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)
- endif
+ ifneq ($(filter s% -s%,$(MAKEFLAGS)),)
+   quiet=silent_
  endif
- ifndef CHECKSRC
-   CHECKSRC = 0
- endif
- export CHECKSRC
  
- ifneq ($(BUILD_DIR),)
- saved-output := $(BUILD_DIR)
+ export quiet Q KBUILD_VERBOSE
  
- # Attempt to create a output directory.
- $(shell [ -d ${BUILD_DIR} ] || mkdir -p ${BUILD_DIR})
  
- # 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),)
+ # Look for make include files relative to root of kernel src
+ MAKEFLAGS += --include-dir=$(srctree)
  
- 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
+ # We need some generic definitions (do not try to remake the file).
+ $(srctree)/scripts/Kbuild.include: ;
+ include $(srctree)/scripts/Kbuild.include
  
- MKCONFIG      := $(SRCTREE)/mkconfig
- export MKCONFIG
+ # Make variables (CC, etc...)
  
- # $(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)/
+ AS            = $(CROSS_COMPILE)as
+ # Always use GNU ld
+ ifneq ($(shell $(CROSS_COMPILE)ld.bfd -v 2> /dev/null),)
+ LD            = $(CROSS_COMPILE)ld.bfd
  else
- obj :=
- src :=
+ LD            = $(CROSS_COMPILE)ld
+ endif
+ 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__
+ U_BOOT_VERSION = $(VERSION)$(if $(PATCHLEVEL),.$(PATCHLEVEL)$(if $(SUBLEVEL),.$(SUBLEVEL)))$(EXTRAVERSION)
+ export VERSION PATCHLEVEL SUBLEVEL U_BOOT_VERSION
+ export ARCH CPU BOARD VENDOR SOC
+ 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
+ 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 obj src
  
- # Make sure CDPATH settings don't interfere
- unexport CDPATH
+ # 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).
+ no-dot-config-targets := clean clobber mrproper distclean \
+                        cscope TAGS %tags help %docs check% coccicheck \
+                        backup
+ config-targets := 0
+ mixed-targets  := 0
+ dot-config     := 1
+ ifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),)
+       ifeq ($(filter-out $(no-dot-config-targets), $(MAKECMDGOALS)),)
+               dot-config := 0
+       endif
+ endif
  
- #########################################################################
+ ifeq ($(KBUILD_EXTMOD),)
+         ifneq ($(filter config %config,$(MAKECMDGOALS)),)
+                 config-targets := 1
+                 ifneq ($(filter-out config %config,$(MAKECMDGOALS)),)
+                         mixed-targets := 1
+                 endif
+         endif
+ endif
  
- # 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)
+ 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
  
- .PHONY : $(SUBDIRS) $(VERSION_FILE) $(TIMESTAMP_FILE)
+ $(MAKECMDGOALS): build-one-by-one
+       @:
+ 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
+ include $(srctree)/config.mk
  
- # Targets which don't build the source code
- NON_BUILD_TARGETS = backup clean clobber distclean mrproper tidy unconfig
+ ifeq ($(wildcard include/config.mk),)
+ $(error "System not configured - see README")
+ endif
  
- # Only do the generic board check when actually building, not configuring
- ifeq ($(filter $(NON_BUILD_TARGETS),$(MAKECMDGOALS)),)
- ifeq ($(findstring _config,$(MAKECMDGOALS)),)
$(CHECK_GENERIC_BOARD)
+ ifeq ($(__HAVE_ARCH_GENERIC_BOARD),)
+ ifneq ($(CONFIG_SYS_GENERIC_BOARD),)
+ $(error Your architecture does not support generic board. \
Please undefined CONFIG_SYS_GENERIC_BOARD in your board config file)
  endif
  endif
  
@@@ -210,6 -528,60 +528,60 @@@ $(error could not find linker script
        endif
  endif
  
+ else
+ endif # $(dot-config)
+ KBUILD_CFLAGS += -Os #-fomit-frame-pointer
+ ifdef BUILD_TAG
+ KBUILD_CFLAGS += -DBUILD_TAG='"$(BUILD_TAG)"'
+ endif
+ KBUILD_CFLAGS += $(call cc-option,-fno-stack-protector)
+ KBUILD_CFLAGS += -g
+ # $(KBUILD_AFLAGS) sets -g, which causes gcc to pass a suitable -g<format>
+ # option to the assembler.
+ KBUILD_AFLAGS += -g
+ # Report stack usage if supported
+ KBUILD_CFLAGS += $(call cc-option,-fstack-usage)
+ KBUILD_CFLAGS += $(call cc-option,-Wno-format-nonliteral)
+ # turn jbsr into jsr for m68k
+ ifeq ($(ARCH),m68k)
+ ifeq ($(findstring 3.4,$(shell $(CC) --version)),3.4)
+ KBUILD_AFLAGS += -Wa,-gstabs,-S
+ endif
+ endif
+ ifneq ($(CONFIG_SYS_TEXT_BASE),)
+ KBUILD_CPPFLAGS += -DCONFIG_SYS_TEXT_BASE=$(CONFIG_SYS_TEXT_BASE)
+ endif
+ export CONFIG_SYS_TEXT_BASE
+ # Use UBOOTINCLUDE when you must reference the include/ directory.
+ # Needed to be compatible with the O= option
+ UBOOTINCLUDE    :=
+ ifneq ($(OBJTREE),$(SRCTREE))
+ UBOOTINCLUDE  += -I$(OBJTREE)/include
+ endif
+ UBOOTINCLUDE  += -I$(srctree)/include \
+               -I$(srctree)/arch/$(ARCH)/include
+ NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
+ CHECKFLAGS     += $(NOSTDINC_FLAGS)
+ # FIX ME
+ cpp_flags := $(KBUILD_CPPFLAGS) $(CPPFLAGS) $(UBOOTINCLUDE) $(NOSTDINC_FLAGS)
+ c_flags := $(KBUILD_CFLAGS) $(cpp_flags)
+ .PHONY : $(VERSION_FILE) $(TIMESTAMP_FILE)
  #########################################################################
  # U-Boot objects....order is important (i.e. start must be first)
  
@@@ -217,79 -589,86 +589,85 @@@ head-y := $(CPUDIR)/start.
  head-$(CONFIG_4xx) += arch/powerpc/cpu/ppc4xx/resetvec.o
  head-$(CONFIG_MPC85xx) += arch/powerpc/cpu/mpc85xx/resetvec.o
  
- OBJS := $(addprefix $(obj),$(head-y))
- HAVE_VENDOR_COMMON_LIB = $(if $(wildcard board/$(VENDOR)/common/Makefile),y,n)
+ HAVE_VENDOR_COMMON_LIB = $(if $(wildcard $(srctree)/board/$(VENDOR)/common/Makefile),y,n)
  
LIBS-y += lib/
LIBS-$(HAVE_VENDOR_COMMON_LIB) += board/$(VENDOR)/common/
LIBS-y += $(CPUDIR)/
libs-y += lib/
libs-$(HAVE_VENDOR_COMMON_LIB) += board/$(VENDOR)/common/
libs-y += $(CPUDIR)/
  ifdef SOC
- LIBS-y += $(CPUDIR)/$(SOC)/
- endif
- LIBS-$(CONFIG_OF_EMBED) += dts/
- LIBS-y += arch/$(ARCH)/lib/
- LIBS-y += fs/
- LIBS-y += net/
- LIBS-y += disk/
- LIBS-y += drivers/
- LIBS-y += drivers/dma/
- LIBS-y += drivers/gpio/
- LIBS-y += drivers/i2c/
- LIBS-y += drivers/input/
- LIBS-y += drivers/mmc/
- LIBS-y += drivers/mtd/
- LIBS-$(CONFIG_CMD_NAND) += drivers/mtd/nand/
- LIBS-y += drivers/mtd/onenand/
- LIBS-$(CONFIG_CMD_UBI) += drivers/mtd/ubi/
- LIBS-y += drivers/mtd/spi/
- LIBS-y += drivers/net/
- LIBS-y += drivers/net/phy/
- LIBS-y += drivers/pci/
- LIBS-y += drivers/power/ \
+ libs-y += $(CPUDIR)/$(SOC)/
+ endif
 -libs-$(CONFIG_IXP4XX_NPE) += drivers/net/npe/
+ libs-$(CONFIG_OF_EMBED) += dts/
+ libs-y += arch/$(ARCH)/lib/
+ libs-y += fs/
+ libs-y += net/
+ libs-y += disk/
+ libs-y += drivers/
+ libs-y += drivers/dma/
+ libs-y += drivers/gpio/
+ libs-y += drivers/i2c/
+ libs-y += drivers/input/
+ libs-y += drivers/mmc/
+ libs-y += drivers/mtd/
+ libs-$(CONFIG_CMD_NAND) += drivers/mtd/nand/
+ libs-y += drivers/mtd/onenand/
+ libs-$(CONFIG_CMD_UBI) += drivers/mtd/ubi/
+ libs-y += drivers/mtd/spi/
+ libs-y += drivers/net/
+ libs-y += drivers/net/phy/
+ libs-y += drivers/pci/
+ libs-y += drivers/power/ \
        drivers/power/fuel_gauge/ \
        drivers/power/mfd/ \
        drivers/power/pmic/ \
        drivers/power/battery/
LIBS-y += drivers/spi/
LIBS-$(CONFIG_FMAN_ENET) += drivers/net/fm/
LIBS-$(CONFIG_SYS_FSL_DDR) += drivers/ddr/fsl/
LIBS-y += drivers/serial/
LIBS-y += drivers/usb/eth/
LIBS-y += drivers/usb/gadget/
LIBS-y += drivers/usb/host/
LIBS-y += drivers/usb/musb/
LIBS-y += drivers/usb/musb-new/
LIBS-y += drivers/usb/phy/
LIBS-y += drivers/usb/ulpi/
LIBS-y += common/
LIBS-y += lib/libfdt/
LIBS-$(CONFIG_API) += api/
LIBS-$(CONFIG_HAS_POST) += post/
LIBS-y += test/
libs-y += drivers/spi/
libs-$(CONFIG_FMAN_ENET) += drivers/net/fm/
libs-$(CONFIG_SYS_FSL_DDR) += drivers/ddr/fsl/
libs-y += drivers/serial/
libs-y += drivers/usb/eth/
libs-y += drivers/usb/gadget/
libs-y += drivers/usb/host/
libs-y += drivers/usb/musb/
libs-y += drivers/usb/musb-new/
libs-y += drivers/usb/phy/
libs-y += drivers/usb/ulpi/
libs-y += common/
libs-y += lib/libfdt/
libs-$(CONFIG_API) += api/
libs-$(CONFIG_HAS_POST) += post/
libs-y += test/
  
  ifneq (,$(filter $(SOC), mx25 mx27 mx5 mx6 mx31 mx35 mxs vf610))
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 += board/$(BOARDDIR)/
+ libs-y := $(sort $(libs-y))
  
- LIBS-y += board/$(BOARDDIR)/
+ u-boot-dirs   := $(patsubst %/,%,$(filter %/, $(libs-y))) tools examples
+ u-boot-alldirs        := $(sort $(u-boot-dirs) $(patsubst %/,%,$(filter %/, $(libs-))))
+ libs-y                := $(patsubst %/, %/built-in.o, $(libs-y))
+ u-boot-init := $(head-y)
+ u-boot-main := $(libs-y)
  
- LIBS-y := $(patsubst %/, %/built-in.o, $(LIBS-y))
- LIBS := $(addprefix $(obj),$(sort $(LIBS-y)))
- .PHONY : $(LIBS)
  
  # Add GCC lib
  ifdef USE_PRIVATE_LIBGCC
  ifeq ("$(USE_PRIVATE_LIBGCC)", "yes")
- PLATFORM_LIBGCC = $(OBJTREE)/arch/$(ARCH)/lib/libgcc.o
+ PLATFORM_LIBGCC = $(OBJTREE)/arch/$(ARCH)/lib/lib.a
  else
  PLATFORM_LIBGCC = -L $(USE_PRIVATE_LIBGCC) -lgcc
  endif
  else
- PLATFORM_LIBGCC := -L $(shell dirname `$(CC) $(CFLAGS) -print-libgcc-file-name`) -lgcc
+ PLATFORM_LIBGCC := -L $(shell dirname `$(CC) $(c_flags) -print-libgcc-file-name`) -lgcc
  endif
  PLATFORM_LIBS += $(PLATFORM_LIBGCC)
  export PLATFORM_LIBS
@@@ -303,9 -682,6 +681,6 @@@ LDPPFLAGS += 
        $(shell $(LD) --version | \
          sed -ne 's/GNU ld version \([0-9][0-9]*\)\.\([0-9][0-9]*\).*/-DLD_MAJOR=\1 -DLD_MINOR=\2/p')
  
- __OBJS := $(subst $(obj),,$(OBJS))
- __LIBS := $(subst $(obj),,$(LIBS))
  #########################################################################
  #########################################################################
  
@@@ -330,68 -706,71 +705,71 @@@ ifneq ($(CONFIG_STATIC_RELA),
  DO_STATIC_RELA = \
        start=$$($(NM) $(1) | grep __rel_dyn_start | cut -f 1 -d ' '); \
        end=$$($(NM) $(1) | grep __rel_dyn_end | cut -f 1 -d ' '); \
-       $(obj)tools/relocate-rela $(2) $(3) $$start $$end
+       tools/relocate-rela $(2) $(3) $$start $$end
  else
  DO_STATIC_RELA =
  endif
  
  # Always append ALL so that arch config.mk's can add custom ones
- ALL-y += $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map
- ALL-$(CONFIG_NAND_U_BOOT) += $(obj)u-boot-nand.bin
- ALL-$(CONFIG_ONENAND_U_BOOT) += $(obj)u-boot-onenand.bin
- ALL-$(CONFIG_RAMBOOT_PBL) += $(obj)u-boot.pbl
- ALL-$(CONFIG_SPL) += $(obj)spl/u-boot-spl.bin
- ALL-$(CONFIG_SPL_FRAMEWORK) += $(obj)u-boot.img
- ALL-$(CONFIG_TPL) += $(obj)tpl/u-boot-tpl.bin
- ALL-$(CONFIG_OF_SEPARATE) += $(obj)u-boot.dtb $(obj)u-boot-dtb.bin
+ ALL-y += u-boot.srec u-boot.bin System.map
+ ALL-$(CONFIG_NAND_U_BOOT) += u-boot-nand.bin
+ ALL-$(CONFIG_ONENAND_U_BOOT) += u-boot-onenand.bin
+ ALL-$(CONFIG_RAMBOOT_PBL) += u-boot.pbl
+ ALL-$(CONFIG_SPL) += spl/u-boot-spl.bin
+ ALL-$(CONFIG_SPL_FRAMEWORK) += u-boot.img
+ ALL-$(CONFIG_TPL) += tpl/u-boot-tpl.bin
+ ALL-$(CONFIG_OF_SEPARATE) += u-boot-dtb.bin
  ifneq ($(CONFIG_SPL_TARGET),)
- ALL-$(CONFIG_SPL) += $(obj)$(CONFIG_SPL_TARGET:"%"=%)
+ ALL-$(CONFIG_SPL) += $(CONFIG_SPL_TARGET:"%"=%)
  endif
- ALL-$(CONFIG_REMAKE_ELF) += $(obj)u-boot.elf
+ ALL-$(CONFIG_REMAKE_ELF) += u-boot.elf
  
  # enable combined SPL/u-boot/dtb rules for tegra
  ifneq ($(CONFIG_TEGRA),)
  ifeq ($(CONFIG_SPL),y)
  ifeq ($(CONFIG_OF_SEPARATE),y)
- ALL-y += $(obj)u-boot-dtb-tegra.bin
+ ALL-y += u-boot-dtb-tegra.bin
  else
- ALL-y += $(obj)u-boot-nodtb-tegra.bin
+ ALL-y += u-boot-nodtb-tegra.bin
  endif
  endif
  endif
  
- build := -f $(TOPDIR)/scripts/Makefile.build -C
+ LDFLAGS_u-boot += -T u-boot.lds $(LDFLAGS_FINAL)
+ ifneq ($(CONFIG_SYS_TEXT_BASE),)
+ LDFLAGS_u-boot += -Ttext $(CONFIG_SYS_TEXT_BASE)
+ endif
  
- all:          $(ALL-y) $(SUBDIR_EXAMPLES-y)
+ all:          $(ALL-y)
  
- $(obj)u-boot.dtb:     checkdtc $(obj)u-boot
-               $(MAKE) $(build) dts binary
-               mv $(obj)dts/dt.dtb $@
+ PHONY += dtbs
+ dtbs dts/dt.dtb: checkdtc u-boot
+       $(Q)$(MAKE) $(build)=dts dtbs
  
$(obj)u-boot-dtb.bin: $(obj)u-boot.bin $(obj)u-boot.dtb
u-boot-dtb.bin: u-boot.bin dts/dt.dtb
                cat $^ >$@
  
$(obj)u-boot.hex:     $(obj)u-boot
u-boot.hex:   u-boot
                $(OBJCOPY) ${OBJCFLAGS} -O ihex $< $@
  
$(obj)u-boot.srec:    $(obj)u-boot
u-boot.srec:  u-boot
                $(OBJCOPY) ${OBJCFLAGS} -O srec $< $@
  
$(obj)u-boot.bin:     $(obj)u-boot
u-boot.bin:   u-boot
                $(OBJCOPY) ${OBJCFLAGS} -O binary $< $@
                $(call DO_STATIC_RELA,$<,$@,$(CONFIG_SYS_TEXT_BASE))
                $(BOARD_SIZE_CHECK)
  
$(obj)u-boot.ldr:     $(obj)u-boot
u-boot.ldr:   u-boot
                $(CREATE_LDR_ENV)
                $(LDR) -T $(CONFIG_BFIN_CPU) -c $@ $< $(LDR_FLAGS)
                $(BOARD_SIZE_CHECK)
  
$(obj)u-boot.ldr.hex: $(obj)u-boot.ldr
u-boot.ldr.hex:       u-boot.ldr
                $(OBJCOPY) ${OBJCFLAGS} -O ihex $< $@ -I binary
  
$(obj)u-boot.ldr.srec:        $(obj)u-boot.ldr
u-boot.ldr.srec:      u-boot.ldr
                $(OBJCOPY) ${OBJCFLAGS} -O srec $< $@ -I binary
  
  #
@@@ -402,79 -781,78 +780,78 @@@ ifndef CONFIG_SYS_UBOOT_STAR
  CONFIG_SYS_UBOOT_START := 0
  endif
  
$(obj)u-boot.img:     $(obj)u-boot.bin
-               $(obj)tools/mkimage -A $(ARCH) -T firmware -C none \
u-boot.img:   u-boot.bin
+               tools/mkimage -A $(ARCH) -T firmware -C none \
                -O u-boot -a $(CONFIG_SYS_TEXT_BASE) \
                -e $(CONFIG_SYS_UBOOT_START) \
                -n $(shell sed -n -e 's/.*U_BOOT_VERSION//p' $(VERSION_FILE) | \
                        sed -e 's/"[     ]*$$/ for $(BOARD) board"/') \
                -d $< $@
  
- $(obj)u-boot.imx: $(obj)u-boot.bin depend
-               $(MAKE) $(build) $(SRCTREE)/arch/arm/imx-common $(OBJTREE)/u-boot.imx
+ u-boot.imx: u-boot.bin
+               $(MAKE) $(build)=arch/arm/imx-common $(objtree)/u-boot.imx
  
$(obj)u-boot.kwb:       $(obj)u-boot.bin
-               $(obj)tools/mkimage -n $(CONFIG_SYS_KWD_CONFIG) -T kwbimage \
u-boot.kwb:       u-boot.bin
+               tools/mkimage -n $(CONFIG_SYS_KWD_CONFIG) -T kwbimage \
                -a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_TEXT_BASE) -d $< $@
  
$(obj)u-boot.pbl:     $(obj)u-boot.bin
-               $(obj)tools/mkimage -n $(CONFIG_SYS_FSL_PBL_RCW) \
u-boot.pbl:   u-boot.bin
+               tools/mkimage -n $(CONFIG_SYS_FSL_PBL_RCW) \
                -R $(CONFIG_SYS_FSL_PBL_PBI) -T pblimage \
                -d $< $@
  
$(obj)u-boot.sha1:    $(obj)u-boot.bin
-               $(obj)tools/ubsha1 $(obj)u-boot.bin
u-boot.sha1:  u-boot.bin
+               tools/ubsha1 u-boot.bin
  
$(obj)u-boot.dis:     $(obj)u-boot
u-boot.dis:   u-boot
                $(OBJDUMP) -d $< > $@
  
  # $@ is output, $(1) and $(2) are inputs, $(3) is padded intermediate,
  # $(4) is pad-to
  SPL_PAD_APPEND = \
                $(OBJCOPY) ${OBJCFLAGS} --pad-to=$(4) -I binary -O binary \
-               $(1) $(obj)$(3); \
-               cat $(obj)$(3) $(2) > $@; \
-               rm $(obj)$(3)
+               $(1) $(3); \
+               cat $(3) $(2) > $@; \
+               rm $(3)
  
  ifdef CONFIG_TPL
- SPL_PAYLOAD := $(obj)tpl/u-boot-with-tpl.bin
+ SPL_PAYLOAD := tpl/u-boot-with-tpl.bin
  else
- SPL_PAYLOAD := $(obj)u-boot.bin
+ SPL_PAYLOAD := u-boot.bin
  endif
  
$(obj)u-boot-with-spl.bin: $(obj)spl/u-boot-spl.bin $(SPL_PAYLOAD)
u-boot-with-spl.bin: spl/u-boot-spl.bin $(SPL_PAYLOAD)
                $(call SPL_PAD_APPEND,$<,$(SPL_PAYLOAD),spl/u-boot-spl-pad.bin,$(CONFIG_SPL_PAD_TO))
  
$(obj)tpl/u-boot-with-tpl.bin: $(obj)tpl/u-boot-tpl.bin $(obj)u-boot.bin
-               $(call SPL_PAD_APPEND,$<,$(obj)u-boot.bin,tpl/u-boot-tpl-pad.bin,$(CONFIG_TPL_PAD_TO))
tpl/u-boot-with-tpl.bin: tpl/u-boot-tpl.bin u-boot.bin
+               $(call SPL_PAD_APPEND,$<,u-boot.bin,tpl/u-boot-tpl-pad.bin,$(CONFIG_TPL_PAD_TO))
  
$(obj)u-boot-with-spl.imx: $(obj)spl/u-boot-spl.bin $(obj)u-boot.bin
-               $(MAKE) $(build) $(SRCTREE)/arch/arm/imx-common \
u-boot-with-spl.imx: spl/u-boot-spl.bin u-boot.bin
+               $(MAKE) $(build)=arch/arm/imx-common \
                        $(OBJTREE)/u-boot-with-spl.imx
  
$(obj)u-boot-with-nand-spl.imx: $(obj)spl/u-boot-spl.bin $(obj)u-boot.bin
-               $(MAKE) $(build) $(SRCTREE)/arch/arm/imx-common \
u-boot-with-nand-spl.imx: spl/u-boot-spl.bin u-boot.bin
+               $(MAKE) $(build)=arch/arm/imx-common \
                        $(OBJTREE)/u-boot-with-nand-spl.imx
  
$(obj)u-boot.ubl:       $(obj)u-boot-with-spl.bin
-               $(obj)tools/mkimage -n $(UBL_CONFIG) -T ublimage \
-               -e $(CONFIG_SYS_TEXT_BASE) -d $< $(obj)u-boot.ubl
u-boot.ubl:       u-boot-with-spl.bin
+               tools/mkimage -n $(UBL_CONFIG) -T ublimage \
+               -e $(CONFIG_SYS_TEXT_BASE) -d $< u-boot.ubl
  
$(obj)u-boot.ais:       $(obj)spl/u-boot-spl.bin $(obj)u-boot.img
-               $(obj)tools/mkimage -s -n $(if $(CONFIG_AIS_CONFIG_FILE),$(CONFIG_AIS_CONFIG_FILE),"/dev/null") \
u-boot.ais:       spl/u-boot-spl.bin u-boot.img
+               tools/mkimage -s -n $(if $(CONFIG_AIS_CONFIG_FILE),$(srctree)/$(CONFIG_AIS_CONFIG_FILE:"%"=%),"/dev/null") \
                        -T aisimage \
                        -e $(CONFIG_SPL_TEXT_BASE) \
-                       -d $(obj)spl/u-boot-spl.bin \
-                       $(obj)spl/u-boot-spl.ais
+                       -d spl/u-boot-spl.bin \
+                       spl/u-boot-spl.ais
                $(OBJCOPY) ${OBJCFLAGS} -I binary \
                        --pad-to=$(CONFIG_SPL_MAX_SIZE) -O binary \
-                       $(obj)spl/u-boot-spl.ais $(obj)spl/u-boot-spl-pad.ais
-               cat $(obj)spl/u-boot-spl-pad.ais $(obj)u-boot.img > \
-                       $(obj)u-boot.ais
+                       spl/u-boot-spl.ais spl/u-boot-spl-pad.ais
+               cat spl/u-boot-spl-pad.ais u-boot.img > u-boot.ais
  
  
$(obj)u-boot.sb:       $(obj)u-boot.bin $(obj)spl/u-boot-spl.bin
-               $(MAKE) $(build) $(SRCTREE)/$(CPUDIR)/$(SOC)/ $(OBJTREE)/u-boot.sb
u-boot.sb:       u-boot.bin spl/u-boot-spl.bin
+               $(MAKE) $(build)=$(CPUDIR)/$(SOC)/ $(OBJTREE)/u-boot.sb
  
  # On x600 (SPEAr600) U-Boot is appended to U-Boot SPL.
  # Both images are created using mkimage (crc etc), so that the ROM
  # SPL image (with mkimage header) and not the binary. Otherwise the resulting image
  # which is loaded/copied by the ROM bootloader to SRAM doesn't fit.
  # The resulting image containing both U-Boot images is called u-boot.spr
$(obj)u-boot.spr:     $(obj)u-boot.img $(obj)spl/u-boot-spl.bin
-               $(obj)tools/mkimage -A $(ARCH) -T firmware -C none \
u-boot.spr:   u-boot.img spl/u-boot-spl.bin
+               tools/mkimage -A $(ARCH) -T firmware -C none \
                -a $(CONFIG_SPL_TEXT_BASE) -e $(CONFIG_SPL_TEXT_BASE) -n XLOADER \
-               -d $(obj)spl/u-boot-spl.bin $@
+               -d spl/u-boot-spl.bin $@
                $(OBJCOPY) -I binary -O binary \
                        --pad-to=$(CONFIG_SPL_PAD_TO) --gap-fill=0xff $@
-               cat $(obj)u-boot.img >> $@
+               cat u-boot.img >> $@
  
  ifneq ($(CONFIG_TEGRA),)
$(obj)u-boot-nodtb-tegra.bin: $(obj)spl/u-boot-spl.bin $(obj)u-boot.bin
-               $(OBJCOPY) ${OBJCFLAGS} --pad-to=$(CONFIG_SYS_TEXT_BASE) -O binary $(obj)spl/u-boot-spl $(obj)spl/u-boot-spl-pad.bin
-               cat $(obj)spl/u-boot-spl-pad.bin $(obj)u-boot.bin > $@
-               rm $(obj)spl/u-boot-spl-pad.bin
u-boot-nodtb-tegra.bin: spl/u-boot-spl.bin u-boot.bin
+               $(OBJCOPY) ${OBJCFLAGS} --pad-to=$(CONFIG_SYS_TEXT_BASE) -O binary spl/u-boot-spl spl/u-boot-spl-pad.bin
+               cat spl/u-boot-spl-pad.bin u-boot.bin > $@
+               rm spl/u-boot-spl-pad.bin
  
  ifeq ($(CONFIG_OF_SEPARATE),y)
$(obj)u-boot-dtb-tegra.bin: $(obj)u-boot-nodtb-tegra.bin $(obj)u-boot.dtb
-               cat $(obj)u-boot-nodtb-tegra.bin $(obj)u-boot.dtb > $@
u-boot-dtb-tegra.bin: u-boot-nodtb-tegra.bin dts/dt.dtb
+               cat $^ > $@
  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
+               cat spl/u-boot-spl.bin u-boot.img > $@
  
  # 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
  # at the start padded up to the start of the SPL image. And then concat
  # the SPL image to the end.
$(obj)u-boot-img-spl-at-end.bin: $(obj)spl/u-boot-spl.bin $(obj)u-boot.img
u-boot-img-spl-at-end.bin: spl/u-boot-spl.bin u-boot.img
                $(OBJCOPY) -I binary -O binary --pad-to=$(CONFIG_UBOOT_PAD_TO) \
-                        --gap-fill=0xff $(obj)u-boot.img $@
-               cat $(obj)spl/u-boot-spl.bin >> $@
+                        --gap-fill=0xff u-boot.img $@
+               cat spl/u-boot-spl.bin >> $@
  
  # Create a new ELF from a raw binary file.  This is useful for arm64
  # where static relocation needs to be performed on the raw binary,
  # but certain simulators only accept an ELF file (but don't do the
  # relocation).
  # FIXME refactor dts/Makefile to share target/arch detection
$(obj)u-boot.elf: $(obj)u-boot.bin
u-boot.elf: u-boot.bin
        @$(OBJCOPY)  -B aarch64 -I binary -O elf64-littleaarch64 \
-               $< $(obj)u-boot-elf.o
-       @$(LD) $(obj)u-boot-elf.o -o $@ \
+               $< u-boot-elf.o
+       @$(LD) u-boot-elf.o -o $@ \
                --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 \
+               $(CC) $(SYMS) -T u-boot.lds \
+                       -Wl,--start-group $(u-boot-main) -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) \
+               $(LD) $(LDFLAGS) $(LDFLAGS_$(@F)) \
+                       $(u-boot-init) \
+                       --start-group $(u-boot-main) --end-group $(PLATFORM_LIBS) \
                        -Map u-boot.map -o u-boot
  endif
  
- $(obj)u-boot: depend \
-               $(SUBDIR_TOOLS) $(OBJS) $(LIBS) $(obj)u-boot.lds
+ u-boot:       $(u-boot-init) $(u-boot-main) u-boot.lds
                $(GEN_UBOOT)
  ifeq ($(CONFIG_KALLSYMS),y)
-               smap=`$(call SYSTEM_MAP,$(obj)u-boot) | \
+               smap=`$(call SYSTEM_MAP,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
+               $(CC) $(c_flags) -DSYSTEM_MAP="\"$${smap}\"" \
+                       -c $(srctree)/common/system_map.c -o common/system_map.o
+               $(GEN_UBOOT) common/system_map.o
+ endif
+ # 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): depend prepare scripts
+       $(Q)$(MAKE) $(build)=$@
+ tools: $(TIMESTAMP_FILE) $(VERSION_FILE)
+ # 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))
+ # 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:
+ 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
  
- $(OBJS):
+ # prepare2 creates a makefile if using a separate output directory
+ prepare2: prepare3 outputmakefile
+ prepare1: prepare2
        @:
  
- $(LIBS):      depend $(SUBDIR_TOOLS)
-               $(MAKE) $(build) $(dir $(subst $(obj),,$@))
+ archprepare: prepare1 scripts_basic
+ prepare0: archprepare FORCE
+       @:
  
- $(SUBDIRS):   depend
-               $(MAKE) -C $@ all
+ # All the preparing..
+ prepare: prepare0
  
- $(SUBDIR_EXAMPLES-y): $(obj)u-boot
+ #
+ # 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
  
- $(obj)u-boot.lds: $(LDSCRIPT) depend
-               $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$< >$@
+ include/autoconf.mk: include/config.h
+       $(call cmd,autoconf)
  
nand_spl:     $(TIMESTAMP_FILE) $(VERSION_FILE) depend
-               $(MAKE) -C nand_spl/board/$(BOARDDIR) all
u-boot.lds: $(LDSCRIPT) depend
+               $(CPP) $(cpp_flags) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$< >$@
  
- $(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:     $(TIMESTAMP_FILE) $(VERSION_FILE) depend prepare
+               $(MAKE) $(build)=nand_spl/board/$(BOARDDIR) all
  
- $(obj)spl/u-boot-spl.bin:     $(SUBDIR_TOOLS) depend
-               $(MAKE) -C spl all
+ u-boot-nand.bin:      nand_spl u-boot.bin
+               cat nand_spl/u-boot-spl-16k.bin u-boot.bin > u-boot-nand.bin
  
- $(obj)tpl/u-boot-tpl.bin:     $(SUBDIR_TOOLS) depend
-               $(MAKE) -C spl all CONFIG_TPL_BUILD=y
+ spl/u-boot-spl.bin: tools depend prepare 
+               $(MAKE) obj=spl -f $(srctree)/spl/Makefile all
+ tpl/u-boot-tpl.bin: tools depend prepare
+               $(MAKE) obj=tpl -f $(srctree)/spl/Makefile all CONFIG_TPL_BUILD=y
  
  # 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
+               include/generated/generic-asm-offsets.h \
+               include/generated/asm-offsets.h
  
- TAG_SUBDIRS = $(SUBDIRS)
- TAG_SUBDIRS += $(dir $(__LIBS))
- TAG_SUBDIRS += include
+ TAG_SUBDIRS := $(u-boot-dirs) include
  
  FIND := find
  FINDFLAGS := -L
  
+ PHONY += checkstack
  checkstack:
-               $(CROSS_COMPILE)objdump -d $(obj)u-boot \
-                       `$(FIND) $(obj) -name u-boot-spl -print` | \
-                       perl $(src)scripts/checkstack.pl $(ARCH)
+       $(OBJDUMP) -d u-boot $$(find . -name u-boot-spl) | \
+       $(PERL) $(src)/scripts/checkstack.pl $(ARCH)
  
  tags ctags:
-               ctags -w -o $(obj)ctags `$(FIND) $(FINDFLAGS) $(TAG_SUBDIRS) \
+               ctags -w -o ctags `$(FIND) $(FINDFLAGS) $(TAG_SUBDIRS) \
                                                -name '*.[chS]' -print`
  
  etags:
@@@ -614,7 -1056,7 +1055,7 @@@ SYSTEM_MAP = 
                $(NM) $1 | \
                grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | \
                LC_ALL=C sort
$(obj)System.map:     $(obj)u-boot
System.map:   u-boot
                @$(call SYSTEM_MAP,$<) > $@
  
  checkthumb:
@@@ -640,82 -1082,42 +1081,42 @@@ checkdtc
                false; \
        fi
  
- #
- # 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.
- $(obj)include/autoconf.mk.dep: $(obj)include/config.h include/common.h
-       @$(XECHO) Generating $@ ; \
-       : Generate the dependancies ; \
-       $(CC) -x c -DDO_DEPS_ONLY -M $(CFLAGS) $(CPPFLAGS) \
-               -MQ $(obj)include/autoconf.mk include/common.h > $@ || \
-               rm $@
- $(obj)include/autoconf.mk: $(obj)include/config.h
-       @$(XECHO) Generating $@ ; \
-       : Extract the config macros ; \
-       $(CPP) $(CFLAGS) -DDO_DEPS_ONLY -dM include/common.h > $@.tmp && \
-               sed -n -f tools/scripts/define2mk.sed $@.tmp > $@; \
-       rm $@.tmp
- # Auto-generate the spl-autoconf.mk file (which is included by all makefiles for SPL)
- $(obj)include/tpl-autoconf.mk: $(obj)include/config.h
-       @$(XECHO) Generating $@ ; \
-       : Extract the config macros ; \
-       $(CPP) $(CFLAGS) -DCONFIG_TPL_BUILD  -DCONFIG_SPL_BUILD\
-                       -DDO_DEPS_ONLY -dM include/common.h > $@.tmp && \
-               sed -n -f tools/scripts/define2mk.sed $@.tmp > $@; \
-       rm $@.tmp
+ quiet_cmd_offsets = GEN     $@
+       cmd_offsets = $(srctree)/tools/scripts/make-asm-offsets $< $@
  
- $(obj)include/spl-autoconf.mk: $(obj)include/config.h
-       @$(XECHO) Generating $@ ; \
-       : Extract the config macros ; \
-       $(CPP) $(CFLAGS) -DCONFIG_SPL_BUILD -DDO_DEPS_ONLY -dM include/common.h > $@.tmp && \
-               sed -n -f tools/scripts/define2mk.sed $@.tmp > $@; \
-       rm $@.tmp
+ include/generated/generic-asm-offsets.h: lib/asm-offsets.s
+       $(call cmd,offsets)
  
- $(obj)include/generated/generic-asm-offsets.h: $(obj)lib/asm-offsets.s
-       @$(XECHO) Generating $@
-       tools/scripts/make-asm-offsets $(obj)lib/asm-offsets.s $@
+ quiet_cmd_asm-offsets.s = CC      $@
+       cmd_asm-offsets.s = mkdir -p lib; \
+               $(CC) -DDO_DEPS_ONLY \
+               $(c_flags) $(CFLAGS_$(BCURDIR)/$(@F)) $(CFLAGS_$(BCURDIR)) \
+               -o $@ $< -c -S
  
- $(obj)lib/asm-offsets.s: $(obj)include/config.h $(src)lib/asm-offsets.c
-       @mkdir -p $(obj)lib
-       $(CC) -DDO_DEPS_ONLY \
-               $(CFLAGS) $(CFLAGS_$(BCURDIR)/$(@F)) $(CFLAGS_$(BCURDIR)) \
-               -o $@ $(src)lib/asm-offsets.c -c -S
+ lib/asm-offsets.s: $(srctree)/lib/asm-offsets.c include/config.h
+       $(call cmd,asm-offsets.s)
  
- $(obj)include/generated/asm-offsets.h: $(obj)$(CPUDIR)/$(SOC)/asm-offsets.s
-       @$(XECHO) Generating $@
-       tools/scripts/make-asm-offsets $(obj)$(CPUDIR)/$(SOC)/asm-offsets.s $@
+ include/generated/asm-offsets.h: $(CPUDIR)/$(SOC)/asm-offsets.s
+       $(call cmd,offsets)
  
- $(obj)$(CPUDIR)/$(SOC)/asm-offsets.s: $(obj)include/config.h
-       @mkdir -p $(obj)$(CPUDIR)/$(SOC)
-       if [ -f $(src)$(CPUDIR)/$(SOC)/asm-offsets.c ];then \
+ quiet_cmd_soc_asm-offsets.s = CC      $@
+       cmd_soc_asm-offsets.s = mkdir -p $(CPUDIR)/$(SOC); \
+       if [ -f $(srctree)/$(CPUDIR)/$(SOC)/asm-offsets.c ];then \
                $(CC) -DDO_DEPS_ONLY \
-               $(CFLAGS) $(CFLAGS_$(BCURDIR)/$(@F)) $(CFLAGS_$(BCURDIR)) \
-                       -o $@ $(src)$(CPUDIR)/$(SOC)/asm-offsets.c -c -S; \
+               $(c_flags) $(CFLAGS_$(BCURDIR)/$(@F)) $(CFLAGS_$(BCURDIR)) \
+                       -o $@ $(srctree)/$(CPUDIR)/$(SOC)/asm-offsets.c -c -S; \
        else \
                touch $@; \
        fi
  
+ $(CPUDIR)/$(SOC)/asm-offsets.s:       include/config.h
+       $(call cmd,soc_asm-offsets.s)
  #########################################################################
- else  # !config.mk
- all $(obj)u-boot.hex $(obj)u-boot.srec $(obj)u-boot.bin \
- $(obj)u-boot.img $(obj)u-boot.dis $(obj)u-boot \
- $(filter-out tools,$(SUBDIRS)) \
- depend dep tags ctags etags cscope $(obj)System.map:
-       @echo "System not configured - see README" >&2
-       @ exit 1
- tools: $(VERSION_FILE) $(TIMESTAMP_FILE)
-       $(MAKE) -C $@ all
- endif # config.mk
  
  # ARM relocations should all be R_ARM_RELATIVE (32-bit) or
  # R_AARCH64_RELATIVE (64-bit).
- checkarmreloc: $(obj)u-boot
+ checkarmreloc: u-boot
        @RELOC="`$(CROSS_COMPILE)readelf -r -W $< | cut -d ' ' -f 4 | \
                grep R_A | sort -u`"; \
        if test "$$RELOC" != "R_ARM_RELATIVE" -a \
@@@ -744,15 -1146,11 +1145,11 @@@ $(TIMESTAMP_FILE)
                @LC_ALL=C date +'#define U_BOOT_TIME "%T"' >> $@.tmp
                @cmp -s $@ $@.tmp && rm -f $@.tmp || mv -f $@.tmp $@
  
- easylogo env gdb:
-       $(MAKE) -C tools/$@ all MTD_VERSION=${MTD_VERSION}
- gdbtools: gdb
+ env: depend scripts_basic
+       $(Q)$(MAKE) $(build)=tools/$@
  
- xmldocs pdfdocs psdocs htmldocs mandocs: tools/kernel-doc/docproc
-       $(MAKE) U_BOOT_VERSION=$(U_BOOT_VERSION) -C doc/DocBook/ $@
- tools-all: easylogo env gdb $(VERSION_FILE) $(TIMESTAMP_FILE)
-       $(MAKE) -C tools HOST_TOOLS_ALL=y
+ tools-all: HOST_TOOLS_ALL=y
+ tools-all: env tools ;
  
  .PHONY : CHANGELOG
  CHANGELOG:
@@@ -763,106 -1161,132 +1160,132 @@@ 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 \
+              board/*/config.tmp board/*/*/config.tmp \
+              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 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 $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 '*%' -o -name '.*.cmd' -o -name 'core' \) \
+               -type f -print | xargs rm -f
  
  backup:
        F=`basename $(TOPDIR)` ; cd .. ; \
        gtar --force-local -zcvf `LC_ALL=C date "+$$F-%Y-%m-%d-%T.tar.gz"` $$F
  
- #########################################################################
+ # 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)
+ 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)
+ # 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 --combined README
index 4376f280d4e4944e861e2bff009d8954d914800f,bfd89b0bfb091259f091db5ff68f3f8f0b2be63f..d4eb0992a35795e44a69197885fdaa96f52ea6f4
--- 1/README
--- 2/README
+++ b/README
@@@ -141,6 -141,7 +141,6 @@@ Directory Hierarchy
        /s3c24x0        Files specific to Samsung S3C24X0 CPUs
        /arm926ejs      Files specific to ARM 926 CPUs
        /arm1136                Files specific to ARM 1136 CPUs
 -      /ixp            Files specific to Intel XScale IXP CPUs
        /pxa            Files specific to Intel XScale PXA CPUs
        /sa1100         Files specific to Intel StrongARM SA1100 CPUs
      /lib              Architecture specific library files
@@@ -922,6 -923,8 +922,8 @@@ The following options need to be config
                CONFIG_CMD_EXPORTENV    * export the environment
                CONFIG_CMD_EXT2         * ext2 command support
                CONFIG_CMD_EXT4         * ext4 command support
+               CONFIG_CMD_FS_GENERIC   * filesystem commands (e.g. load, ls)
+                                         that work for multiple fs types
                CONFIG_CMD_SAVEENV        saveenv
                CONFIG_CMD_FDC          * Floppy Disk Support
                CONFIG_CMD_FAT          * FAT command support
@@@ -2847,7 -2850,7 +2849,7 @@@ CBFS (Coreboot Filesystem) suppor
                CONFIG_RSA
  
                This enables the RSA algorithm used for FIT image verification
-               in U-Boot. See doc/uImage/signature for more information.
+               in U-Boot. See doc/uImage.FIT/signature.txt for more information.
  
                The signing part is build into mkimage regardless of this
                option.
diff --combined include/common.h
index ea3e5ed69f1a3087ca674766b65bde6d50a4717d,08b294cfd9124f9bcac11e7fda85163fe60c1a2a..033b5d946d11b76040a37bf9db13ef16df129ba9
@@@ -302,9 -302,16 +302,16 @@@ int      checkdram     (void)
  int   last_stage_init(void);
  extern ulong monitor_flash_len;
  int mac_read_from_eeprom(void);
- extern u8 _binary_dt_dtb_start[];     /* embedded device tree blob */
+ extern u8 __dtb_dt_begin[];   /* embedded device tree blob */
  int set_cpu_clk_info(void);
+ #if defined(CONFIG_DISPLAY_CPUINFO)
  int print_cpuinfo(void);
+ #else
+ static inline int print_cpuinfo(void)
+ {
+       return 0;
+ }
+ #endif
  int update_flash_size(int flash_size);
  
  /**
@@@ -964,22 -971,6 +971,22 @@@ static inline phys_addr_t map_to_sysmem
  #define DIV_ROUND_UP(n,d)     (((n) + (d) - 1) / (d))
  #define roundup(x, y)         ((((x) + ((y) - 1)) / (y)) * (y))
  
 +/*
 + * Divide positive or negative dividend by positive divisor and round
 + * to closest integer. Result is undefined for negative divisors and
 + * for negative dividends if the divisor variable type is unsigned.
 + */
 +#define DIV_ROUND_CLOSEST(x, divisor)(                        \
 +{                                                     \
 +      typeof(x) __x = x;                              \
 +      typeof(divisor) __d = divisor;                  \
 +      (((typeof(x))-1) > 0 ||                         \
 +       ((typeof(divisor))-1) > 0 || (__x) > 0) ?      \
 +              (((__x) + ((__d) / 2)) / (__d)) :       \
 +              (((__x) - ((__d) / 2)) / (__d));        \
 +}                                                     \
 +)
 +
  #define ALIGN(x,a)            __ALIGN_MASK((x),(typeof(x))(a)-1)
  #define __ALIGN_MASK(x,mask)  (((x)+(mask))&~(mask))
  
index ac65620db687c6ea04377a7134323790a44432a3,d36d16e6e3ef14a0cd36fef7a10d158e63942180..6bf3408dd00a5b4bd137146c12cef830806c0f41
@@@ -92,7 -92,7 +92,7 @@@
  
  #define CONFIG_EXTRA_ENV_SETTINGS \
        "script=boot.scr\0" \
 -      "uimage=uImage\0" \
 +      "image=zImage\0" \
        "console=ttymxc0\0" \
        "splashpos=m,m\0" \
        "fdt_high=0xffffffff\0" \
                "fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};\0" \
        "bootscript=echo Running bootscript from mmc ...; " \
                "source\0" \
 -      "loaduimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${uimage}\0" \
 +      "loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}\0" \
        "loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}\0" \
        "mmcboot=echo Booting from mmc ...; " \
                "run mmcargs; " \
                "if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \
                        "if run loadfdt; then " \
 -                              "bootm ${loadaddr} - ${fdt_addr}; " \
 +                              "bootz ${loadaddr} - ${fdt_addr}; " \
                        "else " \
                                "if test ${boot_fdt} = try; then " \
 -                                      "bootm; " \
 +                                      "bootz; " \
                                "else " \
                                        "echo WARN: Cannot load the DT; " \
                                "fi; " \
                        "fi; " \
                "else " \
 -                      "bootm; " \
 +                      "bootz; " \
                "fi;\0" \
        "netargs=setenv bootargs console=${console},${baudrate} " \
                "root=/dev/nfs " \
                "else " \
                        "setenv get_cmd tftp; " \
                "fi; " \
 -              "${get_cmd} ${uimage}; " \
 +              "${get_cmd} ${image}; " \
                "if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \
                        "if ${get_cmd} ${fdt_addr} ${fdt_file}; then " \
 -                              "bootm ${loadaddr} - ${fdt_addr}; " \
 +                              "bootz ${loadaddr} - ${fdt_addr}; " \
                        "else " \
                                "if test ${boot_fdt} = try; then " \
 -                                      "bootm; " \
 +                                      "bootz; " \
                                "else " \
                                        "echo WARN: Cannot load the DT; " \
                                "fi; " \
                        "fi; " \
                "else " \
 -                      "bootm; " \
 +                      "bootz; " \
                "fi;\0"
  
  #define CONFIG_BOOTCOMMAND \
                   "if run loadbootscript; then " \
                           "run bootscript; " \
                   "else " \
 -                         "if run loaduimage; then " \
 +                         "if run loadimage; then " \
                                   "run mmcboot; " \
                           "else run netboot; " \
                           "fi; " \
  #define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE
  
  #define CONFIG_SYS_LOAD_ADDR          CONFIG_LOADADDR
- #define CONFIG_SYS_HZ                 1000
  
  #define CONFIG_CMDLINE_EDITING
  
diff --combined include/configs/udoo.h
index 7f094891187f112d8e8413a274fad31b28bd8c68,28e20b9092a3159811cc9350c22799d436d4d5f9..4f518527a0f3b42eff39769eedc177bd83149451
  
  #define CONFIG_EXTRA_ENV_SETTINGS \
        "script=boot.scr\0" \
 -      "uimage=uImage\0" \
 +      "image=zImage\0" \
        "console=ttymxc1\0" \
        "splashpos=m,m\0" \
        "fdt_high=0xffffffff\0" \
                "fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};\0" \
        "bootscript=echo Running bootscript from mmc ...; " \
                "source\0" \
 -      "loaduimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${uimage}\0" \
 +      "loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}\0" \
        "loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}\0" \
        "mmcboot=echo Booting from mmc ...; " \
                "run mmcargs; " \
                "if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \
                        "if run loadfdt; then " \
 -                              "bootm ${loadaddr} - ${fdt_addr}; " \
 +                              "bootz ${loadaddr} - ${fdt_addr}; " \
                        "else " \
                                "if test ${boot_fdt} = try; then " \
 -                                      "bootm; " \
 +                                      "bootz; " \
                                "else " \
                                        "echo WARN: Cannot load the DT; " \
                                "fi; " \
                        "fi; " \
                "else " \
 -                      "bootm; " \
 +                      "bootz; " \
                "fi;\0" \
        "netargs=setenv bootargs console=${console},${baudrate} " \
                "root=/dev/nfs " \
                "else " \
                        "setenv get_cmd tftp; " \
                "fi; " \
 -              "${get_cmd} ${uimage}; " \
 +              "${get_cmd} ${image}; " \
                "if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \
                        "if ${get_cmd} ${fdt_addr} ${fdt_file}; then " \
 -                              "bootm ${loadaddr} - ${fdt_addr}; " \
 +                              "bootz ${loadaddr} - ${fdt_addr}; " \
                        "else " \
                                "if test ${boot_fdt} = try; then " \
 -                                      "bootm; " \
 +                                      "bootz; " \
                                "else " \
                                        "echo WARN: Cannot load the DT; " \
                                "fi; " \
                        "fi; " \
                "else " \
 -                      "bootm; " \
 +                      "bootz; " \
                "fi;\0"
  
  #define CONFIG_BOOTCOMMAND \
                   "if run loadbootscript; then " \
                           "run bootscript; " \
                   "else " \
 -                         "if run loaduimage; then " \
 +                         "if run loadimage; then " \
                                   "run mmcboot; " \
                           "else run netboot; " \
                           "fi; " \
  #define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE
  
  #define CONFIG_SYS_LOAD_ADDR          CONFIG_LOADADDR
- #define CONFIG_SYS_HZ                 1000
  
  #define CONFIG_CMDLINE_EDITING