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.

317 files changed:
.gitignore
MAKEALL
Makefile
README
arch/arm/cpu/arm1136/config.mk
arch/arm/cpu/arm926ejs/config.mk
arch/arm/cpu/arm926ejs/davinci/config.mk
arch/arm/cpu/arm926ejs/omap/Makefile
arch/arm/cpu/arm926ejs/omap/cpuinfo.c
arch/arm/cpu/armv7/am33xx/config.mk
arch/arm/cpu/armv7/config.mk
arch/arm/cpu/armv7/omap-common/hwinit-common.c
arch/arm/cpu/armv7/omap-common/sata.c
arch/arm/cpu/armv7/omap3/config.mk
arch/arm/cpu/armv7/omap4/config.mk
arch/arm/cpu/armv7/omap5/config.mk
arch/arm/cpu/armv7/socfpga/config.mk
arch/arm/cpu/armv7/tegra114/Makefile
arch/arm/cpu/armv7/tegra124/Makefile
arch/arm/cpu/armv7/tegra30/Makefile
arch/arm/cpu/tegra-common/Makefile
arch/arm/cpu/tegra-common/sys_info.c
arch/arm/dts/.gitignore [new file with mode: 0644]
arch/arm/dts/Makefile [new file with mode: 0644]
arch/arm/dts/exynos5250-arndale.dts [new file with mode: 0644]
arch/arm/dts/exynos5250-smdk5250.dts [new file with mode: 0644]
arch/arm/dts/exynos5250-snow.dts [new file with mode: 0644]
arch/arm/dts/exynos5420-smdk5420.dts [new file with mode: 0644]
arch/arm/dts/tegra114-dalmore.dts [new file with mode: 0644]
arch/arm/dts/tegra20-colibri_t20_iris.dts [new file with mode: 0644]
arch/arm/dts/tegra20-harmony.dts [new file with mode: 0644]
arch/arm/dts/tegra20-medcom-wide.dts [new file with mode: 0644]
arch/arm/dts/tegra20-paz00.dts [new file with mode: 0644]
arch/arm/dts/tegra20-plutux.dts [new file with mode: 0644]
arch/arm/dts/tegra20-seaboard.dts [new file with mode: 0644]
arch/arm/dts/tegra20-tamonten.dtsi [new file with mode: 0644]
arch/arm/dts/tegra20-tec.dts [new file with mode: 0644]
arch/arm/dts/tegra20-trimslice.dts [new file with mode: 0644]
arch/arm/dts/tegra20-ventana.dts [new file with mode: 0644]
arch/arm/dts/tegra20-whistler.dts [new file with mode: 0644]
arch/arm/dts/tegra30-beaver.dts [new file with mode: 0644]
arch/arm/dts/tegra30-cardhu.dts [new file with mode: 0644]
arch/arm/dts/tegra30-tamonten.dtsi [new file with mode: 0644]
arch/arm/dts/tegra30-tec-ng.dts [new file with mode: 0644]
arch/arm/dts/zynq-microzed.dts [new file with mode: 0644]
arch/arm/dts/zynq-zc702.dts [new file with mode: 0644]
arch/arm/dts/zynq-zc706.dts [new file with mode: 0644]
arch/arm/dts/zynq-zc770-xm010.dts [new file with mode: 0644]
arch/arm/dts/zynq-zc770-xm012.dts [new file with mode: 0644]
arch/arm/dts/zynq-zc770-xm013.dts [new file with mode: 0644]
arch/arm/dts/zynq-zed.dts [new file with mode: 0644]
arch/arm/imx-common/Makefile
arch/arm/include/asm/arch-am33xx/sys_proto.h
arch/arm/include/asm/arch-omap5/sata.h
arch/arm/include/asm/arch-omap5/spl.h
arch/arm/lib/board.c
arch/blackfin/config.mk
arch/blackfin/cpu/Makefile
arch/blackfin/lib/Makefile
arch/m68k/cpu/mcf5227x/Makefile
arch/m68k/cpu/mcf523x/Makefile
arch/m68k/cpu/mcf52x2/Makefile
arch/m68k/cpu/mcf532x/Makefile
arch/m68k/cpu/mcf5445x/Makefile
arch/m68k/cpu/mcf547x_8x/Makefile
arch/microblaze/dts/.gitignore [new file with mode: 0644]
arch/microblaze/dts/Makefile [new file with mode: 0644]
arch/microblaze/dts/microblaze-generic.dts [new file with mode: 0644]
arch/microblaze/lib/board.c
arch/microblaze/lib/time.c [deleted file]
arch/mips/cpu/mips32/config.mk
arch/mips/cpu/mips64/config.mk
arch/mips/cpu/xburst/config.mk
arch/nds32/config.mk
arch/nds32/cpu/n1213/Makefile
arch/powerpc/cpu/mpc8xx/Makefile
arch/powerpc/lib/Makefile
arch/sandbox/cpu/Makefile
arch/sparc/config.mk
arch/x86/dts/.gitignore [new file with mode: 0644]
arch/x86/dts/Makefile [new file with mode: 0644]
arch/x86/dts/alex.dts [new file with mode: 0644]
arch/x86/dts/link.dts [new file with mode: 0644]
arch/x86/lib/Makefile
arch/x86/lib/init_helpers.c
board/ait/cam_enc_4xx/config.mk
board/altera/socfpga/socfpga_cyclone5.c
board/avionic-design/dts/tegra20-medcom-wide.dts [deleted file]
board/avionic-design/dts/tegra20-plutux.dts [deleted file]
board/avionic-design/dts/tegra20-tamonten.dtsi [deleted file]
board/avionic-design/dts/tegra20-tec.dts [deleted file]
board/avionic-design/dts/tegra30-tamonten.dtsi [deleted file]
board/avionic-design/dts/tegra30-tec-ng.dts [deleted file]
board/avionic-design/medcom-wide/Makefile
board/avionic-design/plutux/Makefile
board/avionic-design/tec-ng/Makefile
board/avionic-design/tec/Makefile
board/bct-brettl2/config.mk
board/bf518f-ezbrd/config.mk
board/bf526-ezbrd/config.mk
board/bf527-ad7160-eval/config.mk
board/bf527-ezkit/config.mk
board/bf527-sdp/config.mk
board/bf533-ezkit/config.mk
board/bf533-stamp/config.mk
board/bf537-stamp/config.mk
board/bf538f-ezkit/config.mk
board/bf548-ezkit/config.mk
board/bf561-acvilon/config.mk
board/bf561-ezkit/config.mk
board/br4/config.mk
board/chromebook-x86/dts/alex.dts [deleted file]
board/chromebook-x86/dts/link.dts [deleted file]
board/cm-bf527/config.mk
board/cm-bf533/config.mk
board/cm-bf537e/config.mk
board/cm-bf537u/config.mk
board/cm-bf548/config.mk
board/cm-bf561/config.mk
board/compal/dts/tegra20-paz00.dts [deleted file]
board/compal/paz00/Makefile
board/compulab/dts/tegra20-trimslice.dts [deleted file]
board/compulab/trimslice/Makefile
board/cray/L1/Makefile
board/fads/fads.h
board/freescale/common/Makefile
board/freescale/mx53loco/mx53loco.c
board/h2200/Makefile
board/ip04/config.mk
board/matrix_vision/mvblm7/Makefile
board/matrix_vision/mvblx/Makefile
board/matrix_vision/mvsmr/Makefile
board/nokia/rx51/rx51.h
board/nvidia/common/Makefile
board/nvidia/dts/tegra114-dalmore.dts [deleted file]
board/nvidia/dts/tegra20-harmony.dts [deleted file]
board/nvidia/dts/tegra20-seaboard.dts [deleted file]
board/nvidia/dts/tegra20-ventana.dts [deleted file]
board/nvidia/dts/tegra20-whistler.dts [deleted file]
board/nvidia/dts/tegra30-beaver.dts [deleted file]
board/nvidia/dts/tegra30-cardhu.dts [deleted file]
board/pcs440ep/config.mk
board/pr1/config.mk
board/samsung/dts/exynos5250-arndale.dts [deleted file]
board/samsung/dts/exynos5250-smdk5250.dts [deleted file]
board/samsung/dts/exynos5250-snow.dts [deleted file]
board/samsung/dts/exynos5420-smdk5420.dts [deleted file]
board/samsung/origen/Makefile
board/samsung/origen/tools/mkorigenspl.c [new file with mode: 0644]
board/samsung/origen/tools/mkv310_image.c [deleted file]
board/samsung/smdkv310/Makefile
board/samsung/smdkv310/tools/mksmdkv310spl.c [new file with mode: 0644]
board/samsung/smdkv310/tools/mkv310_image.c [deleted file]
board/sandburst/karef/Makefile
board/sandburst/metrobox/Makefile
board/spear/common/Makefile
board/spear/x600/Makefile
board/st-ericsson/snowball/Makefile
board/st-ericsson/u8500/Makefile
board/tcm-bf518/config.mk
board/tcm-bf537/config.mk
board/ti/dra7xx/evm.c
board/ti/omap5_uevm/evm.c
board/toradex/dts/tegra20-colibri_t20_iris.dts [deleted file]
board/xilinx/dts/microblaze-generic.dts [deleted file]
board/xilinx/dts/zynq-microzed.dts [deleted file]
board/xilinx/dts/zynq-zc702.dts [deleted file]
board/xilinx/dts/zynq-zc706.dts [deleted file]
board/xilinx/dts/zynq-zc770-xm010.dts [deleted file]
board/xilinx/dts/zynq-zc770-xm012.dts [deleted file]
board/xilinx/dts/zynq-zc770-xm013.dts [deleted file]
board/xilinx/dts/zynq-zed.dts [deleted file]
common/Makefile
common/board_f.c
common/cmd_ext4.c
common/cmd_scsi.c
common/cmd_test.c
common/image-fdt.c
common/image-fit.c
common/spl/Makefile
common/spl/spl.c
common/spl/spl_sata.c [new file with mode: 0644]
config.mk
disk/Makefile
doc/DocBook/.gitignore
doc/DocBook/Makefile
doc/DocBook/stylesheet.xsl
drivers/bios_emulator/Makefile
drivers/hwmon/Makefile
drivers/net/phy/atheros.c
drivers/rtc/Makefile
drivers/usb/musb-new/Makefile
dts/.gitignore [new file with mode: 0644]
dts/Makefile
examples/Makefile [new file with mode: 0644]
examples/api/Makefile
examples/standalone/Makefile
fs/ext4/ext4fs.c
fs/fat/fat.c
fs/fs.c
fs/sandbox/sandboxfs.c
fs/ubifs/Makefile
fs/yaffs2/Makefile
include/.gitignore
include/common.h
include/configs/M54418TWR.h
include/configs/MERGERBOX.h
include/configs/P1023RDS.h
include/configs/T1040QDS.h
include/configs/T1040RDB.h
include/configs/T1042RDB_PI.h
include/configs/T2080QDS.h
include/configs/ac14xx.h
include/configs/adp-ag101.h
include/configs/adp-ag101p.h
include/configs/adp-ag102.h
include/configs/ap_sh4a_4a.h
include/configs/apf27.h
include/configs/armadillo-800eva.h
include/configs/balloon3.h
include/configs/corvus.h
include/configs/devkit3250.h
include/configs/dlvision-10g.h
include/configs/ecovec.h
include/configs/hummingboard.h
include/configs/io.h
include/configs/iocon.h
include/configs/km/km83xx-common.h
include/configs/koelsch.h
include/configs/kzm9g.h
include/configs/lager.h
include/configs/mini2440.h [deleted file]
include/configs/mxs.h
include/configs/o2dnt-common.h
include/configs/p1_twr.h
include/configs/palmld.h
include/configs/palmtc.h
include/configs/r0p7734.h
include/configs/sandbox.h
include/configs/scb9328.h
include/configs/shmin.h
include/configs/snowball.h
include/configs/taurus.h
include/configs/u8500_href.h
include/configs/udoo.h
include/configs/usb_a9263.h
include/configs/vl_ma2sc.h
include/configs/x600.h
include/configs/zipitz2.h
include/ext4fs.h
include/fat.h
include/fs.h
include/image.h
include/linker_lists.h
include/sandboxfs.h
include/spl.h
lib/Makefile
lib/lzma/Makefile
mkconfig
nand_spl/board/amcc/acadia/Makefile
nand_spl/board/amcc/bamboo/Makefile
nand_spl/board/amcc/canyonlands/Makefile
nand_spl/board/amcc/kilauea/Makefile
nand_spl/board/amcc/sequoia/Makefile
nand_spl/board/freescale/mpc8315erdb/Makefile
nand_spl/board/freescale/mpc8536ds/Makefile
nand_spl/board/freescale/mpc8569mds/Makefile
nand_spl/board/freescale/mpc8572ds/Makefile
nand_spl/board/freescale/p1023rds/Makefile
nand_spl/board/freescale/p1_p2_rdb/Makefile
nand_spl/board/sheldon/simpc8313/Makefile
net/Makefile
post/lib_powerpc/fpu/Makefile
rules.mk [deleted file]
scripts/.gitignore [new file with mode: 0644]
scripts/Kbuild.include [new file with mode: 0644]
scripts/Makefile [new file with mode: 0644]
scripts/Makefile.build
scripts/Makefile.clean [new file with mode: 0644]
scripts/Makefile.host [new file with mode: 0644]
scripts/Makefile.lib [new file with mode: 0644]
scripts/basic/.gitignore [new file with mode: 0644]
scripts/basic/Makefile [new file with mode: 0644]
scripts/basic/fixdep.c [new file with mode: 0644]
scripts/docproc.c [new file with mode: 0644]
scripts/kernel-doc [new file with mode: 0755]
scripts/mkmakefile [new file with mode: 0644]
spl/Makefile
test/command_ut.c
tools/.gitignore
tools/Makefile
tools/crc32.c [new file with mode: 0644]
tools/easylogo/Makefile
tools/env/.gitignore [new file with mode: 0644]
tools/env/Makefile
tools/env/README
tools/env/crc32.c [new file with mode: 0644]
tools/env/ctype.c [new file with mode: 0644]
tools/env/env_attr.c [new file with mode: 0644]
tools/env/env_flags.c [new file with mode: 0644]
tools/env/linux_string.c [new file with mode: 0644]
tools/env_embedded.c [new file with mode: 0644]
tools/fdt.c [new file with mode: 0644]
tools/fdt_ro.c [new file with mode: 0644]
tools/fdt_rw.c [new file with mode: 0644]
tools/fdt_strerror.c [new file with mode: 0644]
tools/fdt_wip.c [new file with mode: 0644]
tools/gdb/Makefile
tools/image-fit.c [new file with mode: 0644]
tools/image-sig.c [new file with mode: 0644]
tools/image.c [new file with mode: 0644]
tools/kernel-doc/Makefile [deleted file]
tools/kernel-doc/docproc.c [deleted file]
tools/kernel-doc/kernel-doc [deleted file]
tools/md5.c [new file with mode: 0644]
tools/rsa-sign.c [new file with mode: 0644]
tools/sha1.c [new file with mode: 0644]

index d7d55383acbe6a35fa74c2b4cd669ace3d59ed23..5882ff50b1daca0edf01505a3039c91178bb8f8b 100644 (file)
@@ -5,16 +5,20 @@
 #
 # Normal rules
 #
-
-*.rej
-*.orig
-*.a
+.*
 *.o
+*.o.*
+*.a
+*.s
 *.su
-*~
+*.mod.c
+*.i
+*.lst
+*.order
+*.elf
 *.swp
-*.patch
 *.bin
+*.patch
 *.cfgtmp
 *.dts.tmp
 
 #
 # Top-level generic files
 #
-
 /MLO*
 /SPL
 /System.map
 /u-boot
-/u-boot.elf
 /u-boot.hex
 /u-boot.imx
 /u-boot-with-spl.imx
 /u-boot.lds
 /u-boot.ubl
 /u-boot.ais
-/u-boot.dtb
 /u-boot.sb
 
+#
+# git files that we don't want to ignore even it they are dot-files
+#
+!.gitignore
+!.mailmap
+
 #
 # Generated files
 #
 
-*.depend*
 /LOG
 /errlog
 /reloc_off
@@ -65,7 +71,6 @@
 /include/generated/
 /include/spl-autoconf.mk
 /include/tpl-autoconf.mk
-asm-offsets.s
 
 # stgit generated dirs
 patches-*
@@ -91,3 +96,7 @@ GPATH
 GRTAGS
 GSYMS
 GTAGS
+
+*.orig
+*~
+\#*#
diff --git a/MAKEALL b/MAKEALL
index 8fedea242e2563dcb9c1cf12a5a1648cf4e79210..705a0bb5e1a2f2c20c325e7b67452f5e3ab282a5 100755 (executable)
--- a/MAKEALL
+++ b/MAKEALL
@@ -672,8 +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
@@ -684,6 +682,10 @@ build_target() {
            MAKE=make
        fi
 
+       if [  "${output_dir}" != "." ] ; then
+               MAKE="${MAKE} O=${output_dir}"
+       fi
+
        ${MAKE} distclean >/dev/null
        ${MAKE} -s ${target}_config
 
@@ -698,7 +700,7 @@ build_target() {
        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}
index 0e07aa597000245f0e962158bb9ead95ca924408..9a530b3e80a0295f18cab2ecde638a0facde84a3 100644 (file)
--- a/Makefile
+++ 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 @@ export   HOSTARCH HOSTOS
 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 @@ $(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,85 @@ head-y := $(CPUDIR)/start.o
 head-$(CONFIG_4xx) += arch/powerpc/cpu/ppc4xx/resetvec.o
 head-$(CONFIG_MPC85xx) += arch/powerpc/cpu/mpc85xx/resetvec.o
 
-OBJS := $(addprefix $(obj),$(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_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 +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 +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 +780,78 @@ ifndef CONFIG_SYS_UBOOT_START
 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
@@ -482,124 +859,188 @@ $(obj)u-boot.sb:       $(obj)u-boot.bin $(obj)spl/u-boot-spl.bin
 # 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 +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 +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 +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 +1160,132 @@ include/license.h: tools/bin2header COPYING
        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 --git a/README b/README
index 4376f280d4e4944e861e2bff009d8954d914800f..d4eb0992a35795e44a69197885fdaa96f52ea6f4 100644 (file)
--- a/README
+++ b/README
@@ -922,6 +922,8 @@ The following options need to be configured:
                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 +2849,7 @@ CBFS (Coreboot Filesystem) support
                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.
index f74228cdba1ef1a0271e9e2d52849d8a505d2614..ab1fc4ad156c4be3132f4c131c447cfbe89dee58 100644 (file)
@@ -14,6 +14,6 @@ ifdef CONFIG_SPL_BUILD
 ALL-y  += $(OBJTREE)/SPL
 endif
 else
-ALL-y  += $(obj)u-boot.imx
+ALL-y  += u-boot.imx
 endif
 endif
index 4d9895f5d8feee285b588b54fa6314970b0dba60..f27ca15086f28eb3c570077dec50456d0820d3e8 100644 (file)
@@ -13,6 +13,6 @@ ifdef CONFIG_SPL_BUILD
 ALL-y  += $(OBJTREE)/SPL
 endif
 else
-ALL-y  += $(obj)u-boot.imx
+ALL-y  += u-boot.imx
 endif
 endif
index d5c978b446754309b06c07178e20b4dd4610614e..69e9d5ab211253b722d1c00d0b0f605eae4c3dbf 100644 (file)
@@ -4,5 +4,5 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 ifndef CONFIG_SPL_BUILD
-ALL-$(CONFIG_SPL_FRAMEWORK)    += $(obj)u-boot.ais
+ALL-$(CONFIG_SPL_FRAMEWORK)    += u-boot.ais
 endif
index bd0a2fbe92b1b061b64b47fb64bf5197bfed4b78..add923276c9c49e72167f9acee807fd62680d2a7 100644 (file)
@@ -5,5 +5,6 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-obj-y  = timer.o cpuinfo.o
+obj-y  = timer.o
+obj-$(CONFIG_DISPLAY_CPUINFO) += cpuinfo.o
 obj-y  += reset.o
index 02332eee0e13fa514234288fe7405f4e79d6bff4..587d99a2bb02c5a368b7781d729f37f7eb5a2244 100644 (file)
@@ -13,7 +13,7 @@
 #include <command.h>
 #include <linux/compiler.h>
 
-#if defined(CONFIG_DISPLAY_CPUINFO) && defined(CONFIG_OMAP)
+#if defined(CONFIG_OMAP)
 
 #define omap_readw(x)          *(volatile unsigned short *)(x)
 #define omap_readl(x)          *(volatile unsigned long *)(x)
@@ -239,4 +239,4 @@ int print_cpuinfo (void)
        return 0;
 }
 
-#endif /* #if defined(CONFIG_DISPLAY_CPUINFO) && defined(CONFIG_OMAP) */
+#endif /* #if defined(CONFIG_OMAP) */
index 8e3668f781e9c449b7e67328b6bbbb250d737b09..1c06fb40a4f62e45503d8b042ea5c6465a0a2412 100644 (file)
@@ -7,5 +7,5 @@ ifdef CONFIG_SPL_BUILD
 ALL-y  += $(OBJTREE)/MLO
 ALL-$(CONFIG_SPL_SPI_SUPPORT) += $(OBJTREE)/MLO.byteswap
 else
-ALL-y  += $(obj)u-boot.img
+ALL-y  += u-boot.img
 endif
index 38b7c401f854936ac7dd06ee49d201da85185177..d01f3d9f5009f55fb81773873862954902d8879b 100644 (file)
@@ -20,6 +20,6 @@ ifdef CONFIG_SPL_BUILD
 ALL-y  += $(OBJTREE)/SPL
 endif
 else
-ALL-y  += $(obj)u-boot.imx
+ALL-y  += u-boot.imx
 endif
 endif
index bf2951031d99c832b298d0bcaaf36ff05e1658c7..ade744e31fe4feff27f266a685d3b87d92df91ff 100644 (file)
@@ -248,6 +248,7 @@ u32 get_device_type(void)
                                      (DEVICE_TYPE_MASK)) >> DEVICE_TYPE_SHIFT;
 }
 
+#if defined(CONFIG_DISPLAY_CPUINFO)
 /*
  * Print CPU information
  */
@@ -258,6 +259,8 @@ int print_cpuinfo(void)
 
        return 0;
 }
+#endif
+
 #ifndef CONFIG_SYS_DCACHE_OFF
 void enable_caches(void)
 {
index f5468c4c97c033ef51f28ca87824b9492f92dee3..cad4feed000595410a396ee34961a727aa007a69 100644 (file)
@@ -12,6 +12,7 @@
 #include <scsi.h>
 #include <asm/arch/clock.h>
 #include <asm/arch/sata.h>
+#include <sata.h>
 #include <asm/io.h>
 #include "pipe3-phy.h"
 
@@ -31,7 +32,7 @@ struct omap_pipe3 sata_phy = {
        .dpll_map = dpll_map_sata,
 };
 
-int omap_sata_init(void)
+int init_sata(int dev)
 {
        int ret;
        u32 val;
index 1d6a57c66c6f07fc09b9fb5fbe6808a7f053318f..2a3d1c5c3a5385dd690ebf34b046bdd2b79d676f 100644 (file)
@@ -11,5 +11,5 @@
 ifdef CONFIG_SPL_BUILD
 ALL-y  += $(OBJTREE)/MLO
 else
-ALL-y  += $(obj)u-boot.img
+ALL-y  += u-boot.img
 endif
index 1d6a57c66c6f07fc09b9fb5fbe6808a7f053318f..2a3d1c5c3a5385dd690ebf34b046bdd2b79d676f 100644 (file)
@@ -11,5 +11,5 @@
 ifdef CONFIG_SPL_BUILD
 ALL-y  += $(OBJTREE)/MLO
 else
-ALL-y  += $(obj)u-boot.img
+ALL-y  += u-boot.img
 endif
index 2673af96681aa62ddb3fc774a09465b6ca88357c..261b272234a507dfe8fe1cd24aa57ba4f6925248 100644 (file)
@@ -9,5 +9,5 @@
 ifdef CONFIG_SPL_BUILD
 ALL-y  += $(OBJTREE)/MLO
 else
-ALL-y  += $(obj)u-boot.img
+ALL-y  += u-boot.img
 endif
index d33ab7d62fdc5b9fa16965c87b69d1f2810a5db7..3d18491577f2ec845787ffcd30c88c532e097062 100644 (file)
@@ -4,5 +4,5 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 ifndef CONFIG_SPL_BUILD
-ALL-y  += $(obj)u-boot.img
+ALL-y  += u-boot.img
 endif
index 886b5092d68206e38e550ac3112d8eb75c12b243..77e231959b351280096902444b6266ded8a12d5b 100644 (file)
@@ -17,4 +17,5 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 
-obj- :=
+# necessary to create built-in.o
+obj- := __dummy__.o
index 7f127b1ee55432aa87ae0475241fa6ca50a614a9..9478d447db41afdcf72707a8c0d0363a170561a1 100644 (file)
@@ -4,3 +4,6 @@
 #
 # SPDX-License-Identifier:     GPL-2.0+
 #
+
+# necessary to create built-in.o
+obj- := __dummy__.o
index 518d6d1b3e4aafc0f753494f103b06f26ea89b6f..413eba102a4463768c94e43f9a3aec0a20d1be91 100644 (file)
@@ -17,4 +17,5 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 
-obj- :=
+# necessary to create built-in.o
+obj- := __dummy__.o
index edfc1a83a950fb2767be371f55781acc690f45a5..34d57349afb5b631c516c52edb65d5427e8ee907 100644 (file)
@@ -8,4 +8,5 @@
 #
 
 obj-y += lowlevel_init.o
-obj-y  += ap.o board.o sys_info.o clock.o cache.o
+obj-y  += ap.o board.o clock.o cache.o
+obj-$(CONFIG_DISPLAY_CPUINFO) += sys_info.o
index dc8a2e4d3168860c2864ee4f74acbeb4b222f8bc..de20325ecf3239666e5da6e5d23cbcba5811108c 100644 (file)
@@ -8,7 +8,6 @@
 #include <common.h>
 #include <linux/ctype.h>
 
-#ifdef CONFIG_DISPLAY_CPUINFO
 void upstring(char *s)
 {
        while (*s) {
@@ -30,4 +29,3 @@ int print_cpuinfo(void)
        /* TBD: Add printf of major/minor rev info, stepping, etc. */
        return 0;
 }
-#endif /* CONFIG_DISPLAY_CPUINFO */
diff --git a/arch/arm/dts/.gitignore b/arch/arm/dts/.gitignore
new file mode 100644 (file)
index 0000000..b60ed20
--- /dev/null
@@ -0,0 +1 @@
+*.dtb
diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
new file mode 100644 (file)
index 0000000..2658911
--- /dev/null
@@ -0,0 +1,37 @@
+dtb-$(CONFIG_EXYNOS5) += exynos5250-arndale.dtb \
+       exynos5250-snow.dtb \
+       exynos5250-smdk5250.dtb \
+       exynos5420-smdk5420.dtb
+
+dtb-$(CONFIG_TEGRA) += tegra20-harmony.dtb \
+       tegra20-medcom-wide.dtb \
+       tegra20-paz00.dtb \
+       tegra20-plutux.dtb \
+       tegra20-seaboard.dtb \
+       tegra20-tec.dtb \
+       tegra20-trimslice.dtb \
+       tegra20-ventana.dtb \
+       tegra20-whistler.dtb \
+       tegra20-colibri_t20_iris.dtb \
+       tegra30-beaver.dtb \
+       tegra30-cardhu.dtb \
+       tegra30-tec-ng.dtb \
+       tegra114-dalmore.dtb
+
+dtb-$(CONFIG_ZYNQ) += zynq-zc702.dtb \
+       zynq-zc706.dtb \
+       zynq-zed.dtb \
+       zynq-microzed.dtb \
+       zynq-zc770-xm010.dtb \
+       zynq-zc770-xm012.dtb \
+       zynq-zc770-xm013.dtb
+
+targets += $(dtb-y)
+
+DTC_FLAGS += -R 4 -p 0x1000
+
+PHONY += dtbs
+dtbs: $(addprefix $(obj)/, $(dtb-y))
+       @:
+
+clean-files := *.dtb
diff --git a/arch/arm/dts/exynos5250-arndale.dts b/arch/arm/dts/exynos5250-arndale.dts
new file mode 100644 (file)
index 0000000..202f2ea
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * SAMSUNG Arndale board device tree source
+ *
+ * Copyright (c) 2013 Samsung Electronics Co., Ltd.
+ *             http://www.samsung.com
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+*/
+
+/dts-v1/;
+#include "exynos5250.dtsi"
+
+/ {
+       model = "SAMSUNG Arndale board based on EXYNOS5250";
+       compatible = "samsung,arndale", "samsung,exynos5250";
+
+       aliases {
+               serial0 = "/serial@12C20000";
+               console = "/serial@12C20000";
+       };
+
+       mmc@12200000 {
+               samsung,bus-width = <8>;
+               samsung,timing = <1 3 3>;
+       };
+
+       mmc@12210000 {
+               status = "disabled";
+       };
+
+       mmc@12220000 {
+               samsung,bus-width = <4>;
+               samsung,timing = <1 2 3>;
+       };
+
+       mmc@12230000 {
+               status = "disabled";
+       };
+};
diff --git a/arch/arm/dts/exynos5250-smdk5250.dts b/arch/arm/dts/exynos5250-smdk5250.dts
new file mode 100644 (file)
index 0000000..9020382
--- /dev/null
@@ -0,0 +1,151 @@
+/*
+ * SAMSUNG SMDK5250 board device tree source
+ *
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd.
+ *             http://www.samsung.com
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+*/
+
+/dts-v1/;
+/include/ "exynos5250.dtsi"
+
+/ {
+       model = "SAMSUNG SMDK5250 board based on EXYNOS5250";
+       compatible = "samsung,smdk5250", "samsung,exynos5250";
+
+       aliases {
+               i2c0 = "/i2c@12c60000";
+               i2c1 = "/i2c@12c70000";
+               i2c2 = "/i2c@12c80000";
+               i2c3 = "/i2c@12c90000";
+               i2c4 = "/i2c@12ca0000";
+               i2c5 = "/i2c@12cb0000";
+               i2c6 = "/i2c@12cc0000";
+               i2c7 = "/i2c@12cd0000";
+               spi0 = "/spi@12d20000";
+               spi1 = "/spi@12d30000";
+               spi2 = "/spi@12d40000";
+               spi3 = "/spi@131a0000";
+               spi4 = "/spi@131b0000";
+               mmc0 = "/mmc@12200000";
+               mmc1 = "/mmc@12210000";
+               mmc2 = "/mmc@12220000";
+               mmc3 = "/mmc@12230000";
+               serial0 = "/serial@12C30000";
+               console = "/serial@12C30000";
+               i2s = "/sound@3830000";
+       };
+
+       sromc@12250000 {
+               bank = <1>;
+               srom-timing = <1 9 12 1 6 1 1>;
+               width = <2>;
+               lan@5000000 {
+                       compatible = "smsc,lan9215", "smsc,lan";
+                       reg = <0x5000000 0x100>;
+                       phy-mode = "mii";
+               };
+       };
+
+       sound@3830000 {
+               samsung,codec-type = "wm8994";
+       };
+
+       sound@12d60000 {
+               status = "disabled";
+       };
+
+       i2c@12c70000 {
+               soundcodec@1a {
+                       reg = <0x1a>;
+                       compatible = "wolfson,wm8994-codec";
+               };
+       };
+
+       i2c@12c60000 {
+               pmic@9 {
+                       reg = <0x9>;
+                       compatible = "maxim,max77686_pmic";
+               };
+       };
+
+       tmu@10060000 {
+               samsung,min-temp        = <25>;
+               samsung,max-temp        = <125>;
+               samsung,start-warning   = <95>;
+               samsung,start-tripping  = <105>;
+               samsung,hw-tripping     = <110>;
+               samsung,efuse-min-value = <40>;
+               samsung,efuse-value     = <55>;
+               samsung,efuse-max-value = <100>;
+               samsung,slope           = <274761730>;
+               samsung,dc-value        = <25>;
+       };
+
+       fimd@14400000 {
+               samsung,vl-freq = <60>;
+               samsung,vl-col = <2560>;
+               samsung,vl-row = <1600>;
+               samsung,vl-width = <2560>;
+               samsung,vl-height = <1600>;
+
+               samsung,vl-clkp;
+               samsung,vl-dp;
+               samsung,vl-bpix = <4>;
+
+               samsung,vl-hspw = <32>;
+               samsung,vl-hbpd = <80>;
+               samsung,vl-hfpd = <48>;
+               samsung,vl-vspw = <6>;
+               samsung,vl-vbpd = <37>;
+               samsung,vl-vfpd = <3>;
+               samsung,vl-cmd-allow-len = <0xf>;
+
+               samsung,winid = <3>;
+               samsung,interface-mode = <1>;
+               samsung,dp-enabled = <1>;
+               samsung,dual-lcd-enabled = <0>;
+       };
+
+       dp@145b0000 {
+               samsung,lt-status = <0>;
+
+               samsung,master-mode = <0>;
+               samsung,bist-mode = <0>;
+               samsung,bist-pattern = <0>;
+               samsung,h-sync-polarity = <0>;
+               samsung,v-sync-polarity = <0>;
+               samsung,interlaced = <0>;
+               samsung,color-space = <0>;
+               samsung,dynamic-range = <0>;
+               samsung,ycbcr-coeff = <0>;
+               samsung,color-depth = <1>;
+       };
+
+       mmc@12200000 {
+               samsung,bus-width = <8>;
+               samsung,timing = <1 3 3>;
+               samsung,removable = <0>;
+       };
+
+       mmc@12210000 {
+               status = "disabled";
+       };
+
+       mmc@12220000 {
+               samsung,bus-width = <4>;
+               samsung,timing = <1 2 3>;
+               samsung,removable = <1>;
+       };
+
+       mmc@12230000 {
+               status = "disabled";
+       };
+
+       ehci@12110000 {
+               samsung,vbus-gpio = <&gpio 0x316 0>; /* X26 */
+       };
+};
diff --git a/arch/arm/dts/exynos5250-snow.dts b/arch/arm/dts/exynos5250-snow.dts
new file mode 100644 (file)
index 0000000..9b48a0c
--- /dev/null
@@ -0,0 +1,187 @@
+/*
+ * SAMSUNG Snow board device tree source
+ *
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd.
+ *             http://www.samsung.com
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+*/
+
+/dts-v1/;
+/include/ "exynos5250.dtsi"
+
+/ {
+       model = "Google Snow";
+       compatible = "google,snow", "samsung,exynos5250";
+
+       aliases {
+               i2c0 = "/i2c@12c60000";
+               i2c1 = "/i2c@12c70000";
+               i2c2 = "/i2c@12c80000";
+               i2c3 = "/i2c@12c90000";
+               i2c4 = "/i2c@12ca0000";
+               i2c5 = "/i2c@12cb0000";
+               i2c6 = "/i2c@12cc0000";
+               i2c7 = "/i2c@12cd0000";
+               spi0 = "/spi@12d20000";
+               spi1 = "/spi@12d30000";
+               spi2 = "/spi@12d40000";
+               spi3 = "/spi@131a0000";
+               spi4 = "/spi@131b0000";
+               mmc0 = "/mmc@12200000";
+               mmc1 = "/mmc@12210000";
+               mmc2 = "/mmc@12220000";
+               mmc3 = "/mmc@12230000";
+               serial0 = "/serial@12C30000";
+               console = "/serial@12C30000";
+               i2s = "/sound@3830000";
+       };
+
+       i2c4: i2c@12ca0000 {
+               cros-ec@1e {
+                       reg = <0x1e>;
+                       compatible = "google,cros-ec";
+                       i2c-max-frequency = <100000>;
+                       ec-interrupt = <&gpio 782 1>;
+               };
+
+               power-regulator@48 {
+                       compatible = "ti,tps65090";
+                       reg = <0x48>;
+               };
+       };
+
+       spi@131b0000 {
+               spi-max-frequency = <1000000>;
+               spi-deactivate-delay = <100>;
+               cros-ec@0 {
+                       reg = <0>;
+                       compatible = "google,cros-ec";
+                       spi-max-frequency = <5000000>;
+                       ec-interrupt = <&gpio 782 1>;
+                       optimise-flash-write;
+                       status = "disabled";
+               };
+       };
+
+       sound@3830000 {
+               samsung,codec-type = "max98095";
+               codec-enable-gpio = <&gpio 0xb7 0>;
+       };
+
+       sound@12d60000 {
+               status = "disabled";
+       };
+
+       i2c@12cd0000 {
+               soundcodec@22 {
+                       reg = <0x22>;
+                       compatible = "maxim,max98095-codec";
+               };
+       };
+
+       i2c@12c60000 {
+               pmic@9 {
+                       reg = <0x9>;
+                       compatible = "maxim,max77686_pmic";
+               };
+       };
+
+       mmc@12200000 {
+               samsung,bus-width = <8>;
+               samsung,timing = <1 3 3>;
+               samsung,removable = <0>;
+       };
+
+       mmc@12210000 {
+               status = "disabled";
+       };
+
+       mmc@12220000 {
+               samsung,bus-width = <4>;
+               samsung,timing = <1 2 3>;
+               samsung,removable = <1>;
+       };
+
+       mmc@12230000 {
+               status = "disabled";
+       };
+
+       ehci@12110000 {
+               samsung,vbus-gpio = <&gpio 0x309 0>; /* X11 */
+       };
+
+       xhci@12000000 {
+               samsung,vbus-gpio = <&gpio 0x317 0>; /* X27 */
+       };
+
+       tmu@10060000 {
+               samsung,min-temp        = <25>;
+               samsung,max-temp        = <125>;
+               samsung,start-warning   = <95>;
+               samsung,start-tripping  = <105>;
+               samsung,hw-tripping     = <110>;
+               samsung,efuse-min-value = <40>;
+               samsung,efuse-value     = <55>;
+               samsung,efuse-max-value = <100>;
+               samsung,slope           = <274761730>;
+               samsung,dc-value        = <25>;
+       };
+
+       cros-ec-keyb {
+               compatible = "google,cros-ec-keyb";
+               google,key-rows = <8>;
+               google,key-columns = <13>;
+               google,repeat-delay-ms = <240>;
+               google,repeat-rate-ms = <30>;
+               google,ghost-filter;
+               /*
+                * Keymap entries take the form of 0xRRCCKKKK where
+                * RR=Row CC=Column KKKK=Key Code
+                * The values below are for a US keyboard layout and
+                * are taken from the Linux driver. Note that the
+                * 102ND key is not used for US keyboards.
+                */
+               linux,keymap = <
+                       /* CAPSLCK F1         B          F10     */
+                       0x0001003a 0x0002003b 0x00030030 0x00040044
+                       /* N       =          R_ALT      ESC     */
+                       0x00060031 0x0008000d 0x000a0064 0x01010001
+                       /* F4      G          F7         H       */
+                       0x0102003e 0x01030022 0x01040041 0x01060023
+                       /* '       F9         BKSPACE    L_CTRL  */
+                       0x01080028 0x01090043 0x010b000e 0x0200001d
+                       /* TAB     F3         T          F6      */
+                       0x0201000f 0x0202003d 0x02030014 0x02040040
+                       /* ]       Y          102ND      [       */
+                       0x0205001b 0x02060015 0x02070056 0x0208001a
+                       /* F8      GRAVE      F2         5       */
+                       0x02090042 0x03010029 0x0302003c 0x03030006
+                       /* F5      6          -          \       */
+                       0x0304003f 0x03060007 0x0308000c 0x030b002b
+                       /* R_CTRL  A          D          F       */
+                       0x04000061 0x0401001e 0x04020020 0x04030021
+                       /* S       K          J          ;       */
+                       0x0404001f 0x04050025 0x04060024 0x04080027
+                       /* L       ENTER      Z          C       */
+                       0x04090026 0x040b001c 0x0501002c 0x0502002e
+                       /* V       X          ,          M       */
+                       0x0503002f 0x0504002d 0x05050033 0x05060032
+                       /* L_SHIFT /          .          SPACE   */
+                       0x0507002a 0x05080035 0x05090034 0x050B0039
+                       /* 1       3          4          2       */
+                       0x06010002 0x06020004 0x06030005 0x06040003
+                       /* 8       7          0          9       */
+                       0x06050009 0x06060008 0x0608000b 0x0609000a
+                       /* L_ALT   DOWN       RIGHT      Q       */
+                       0x060a0038 0x060b006c 0x060c006a 0x07010010
+                       /* E       R          W          I       */
+                       0x07020012 0x07030013 0x07040011 0x07050017
+                       /* U       R_SHIFT    P          O       */
+                       0x07060016 0x07070036 0x07080019 0x07090018
+                       /* UP      LEFT    */
+                       0x070b0067 0x070c0069>;
+       };
+};
diff --git a/arch/arm/dts/exynos5420-smdk5420.dts b/arch/arm/dts/exynos5420-smdk5420.dts
new file mode 100644 (file)
index 0000000..d739763
--- /dev/null
@@ -0,0 +1,169 @@
+/*
+ * SAMSUNG SMDK5420 board device tree source
+ *
+ * Copyright (c) 2013 Samsung Electronics Co., Ltd.
+ *             http://www.samsung.com
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+/dts-v1/;
+/include/ "exynos5420.dtsi"
+
+/ {
+       model = "SAMSUNG SMDK5420 board based on EXYNOS5420";
+       compatible = "samsung,smdk5420", "samsung,exynos5";
+
+       config {
+               hwid = "smdk5420 TEST A-A 9382";
+       };
+
+       aliases {
+               i2c0 = "/i2c@12c60000";
+               i2c1 = "/i2c@12c70000";
+               i2c2 = "/i2c@12c80000";
+               i2c3 = "/i2c@12c90000";
+               i2c4 = "/i2c@12ca0000";
+               i2c5 = "/i2c@12cb0000";
+               i2c6 = "/i2c@12cc0000";
+               i2c7 = "/i2c@12cd0000";
+               i2c8 = "/i2c@12e00000";
+               i2c9 = "/i2c@12e10000";
+               i2c10 = "/i2c@12e20000";
+               spi0 = "/spi@12d20000";
+               spi1 = "/spi@12d30000";
+               spi2 = "/spi@12d40000";
+               spi3 = "/spi@131a0000";
+               spi4 = "/spi@131b0000";
+               mmc0 = "/mmc@12200000";
+               mmc1 = "/mmc@12210000";
+               mmc2 = "/mmc@12220000";
+               xhci0 = "/xhci@12000000";
+               xhci1 = "/xhci@12400000";
+               serial0 = "/serial@12C30000";
+               console = "/serial@12C30000";
+       };
+
+       tmu@10060000 {
+               samsung,min-temp        = <25>;
+               samsung,max-temp        = <125>;
+               samsung,start-warning   = <95>;
+               samsung,start-tripping  = <105>;
+               samsung,hw-tripping     = <110>;
+               samsung,efuse-min-value = <40>;
+               samsung,efuse-value     = <55>;
+               samsung,efuse-max-value = <100>;
+               samsung,slope           = <274761730>;
+               samsung,dc-value        = <25>;
+       };
+
+       /* s2mps11 is on i2c bus 4 */
+       i2c@12ca0000 {
+               #address-cells = <1>;
+               #size-cells = <0>;
+               pmic@66 {
+                       reg = <0x66>;
+                       compatible = "samsung,s2mps11-pmic";
+               };
+       };
+
+       spi@12d20000 { /* spi0 */
+               spi-max-frequency = <50000000>;
+               firmware_storage_spi: flash@0 {
+                       reg = <0>;
+               };
+       };
+
+       fimd@14400000 {
+               samsung,vl-freq = <60>;
+               samsung,vl-col = <2560>;
+               samsung,vl-row = <1600>;
+               samsung,vl-width = <2560>;
+               samsung,vl-height = <1600>;
+
+               samsung,vl-clkp;
+               samsung,vl-dp;
+               samsung,vl-bpix = <4>;
+
+               samsung,vl-hspw = <32>;
+               samsung,vl-hbpd = <80>;
+               samsung,vl-hfpd = <48>;
+               samsung,vl-vspw = <6>;
+               samsung,vl-vbpd = <37>;
+               samsung,vl-vfpd = <3>;
+               samsung,vl-cmd-allow-len = <0xf>;
+
+               samsung,winid = <3>;
+               samsung,interface-mode = <1>;
+               samsung,dp-enabled = <1>;
+               samsung,dual-lcd-enabled = <0>;
+       };
+
+       sound@3830000 {
+               samsung,codec-type = "wm8994";
+       };
+
+       i2c@12c70000 {
+               soundcodec@1a {
+                       reg = <0x1a>;
+                       compatible = "wolfson,wm8994-codec";
+               };
+       };
+
+       mmc@12200000 {
+               samsung,bus-width = <8>;
+               samsung,timing = <1 3 3>;
+               samsung,removable = <0>;
+               samsung,pre-init;
+       };
+
+       mmc@12210000 {
+               status = "disabled";
+       };
+
+       mmc@12220000 {
+               samsung,bus-width = <4>;
+               samsung,timing = <1 2 3>;
+               samsung,removable = <1>;
+       };
+
+       mmc@12230000 {
+               status = "disabled";
+       };
+
+       fimd@14400000 {
+               /* sysmmu is not used in U-Boot */
+               samsung,disable-sysmmu;
+       };
+
+       dp@145b0000 {
+               samsung,lt-status = <0>;
+
+               samsung,master-mode = <0>;
+               samsung,bist-mode = <0>;
+               samsung,bist-pattern = <0>;
+               samsung,h-sync-polarity = <0>;
+               samsung,v-sync-polarity = <0>;
+               samsung,interlaced = <0>;
+               samsung,color-space = <0>;
+               samsung,dynamic-range = <0>;
+               samsung,ycbcr-coeff = <0>;
+               samsung,color-depth = <1>;
+       };
+
+       dmc {
+               mem-type = "ddr3";
+       };
+
+       xhci1: xhci@12400000 {
+               compatible = "samsung,exynos5250-xhci";
+               reg = <0x12400000 0x10000>;
+               #address-cells = <1>;
+               #size-cells = <1>;
+
+               phy {
+                       compatible = "samsung,exynos5250-usb3-phy";
+                       reg = <0x12500000 0x100>;
+               };
+       };
+};
diff --git a/arch/arm/dts/tegra114-dalmore.dts b/arch/arm/dts/tegra114-dalmore.dts
new file mode 100644 (file)
index 0000000..435c01e
--- /dev/null
@@ -0,0 +1,71 @@
+/dts-v1/;
+
+#include "tegra114.dtsi"
+
+/ {
+       model = "NVIDIA Dalmore";
+       compatible = "nvidia,dalmore", "nvidia,tegra114";
+
+       aliases {
+               i2c0 = "/i2c@7000d000";
+               i2c1 = "/i2c@7000c000";
+               i2c2 = "/i2c@7000c400";
+               i2c3 = "/i2c@7000c500";
+               i2c4 = "/i2c@7000c700";
+               sdhci0 = "/sdhci@78000600";
+               sdhci1 = "/sdhci@78000400";
+               usb0 = "/usb@7d008000";
+       };
+
+       memory {
+               device_type = "memory";
+               reg = <0x80000000 0x80000000>;
+       };
+
+       i2c@7000c000 {
+               status = "okay";
+               clock-frequency = <100000>;
+       };
+
+       i2c@7000c400 {
+               status = "okay";
+               clock-frequency = <100000>;
+       };
+
+       i2c@7000c500 {
+               status = "okay";
+               clock-frequency = <100000>;
+       };
+
+       i2c@7000c700 {
+               status = "okay";
+               clock-frequency = <100000>;
+       };
+
+       i2c@7000d000 {
+               status = "okay";
+               clock-frequency = <400000>;
+       };
+
+       spi@7000da00 {
+               status = "okay";
+               spi-max-frequency = <25000000>;
+       };
+
+       sdhci@78000400 {
+               cd-gpios = <&gpio 170 1>; /* gpio PV2 */
+               bus-width = <4>;
+               status = "okay";
+       };
+
+       sdhci@78000600 {
+               bus-width = <8>;
+               status = "okay";
+       };
+
+       usb@7d008000 {
+               /* SPDIF_IN: USB_VBUS_EN1 */
+               nvidia,vbus-gpio = <&gpio 86 0>;
+               status = "okay";
+       };
+};
diff --git a/arch/arm/dts/tegra20-colibri_t20_iris.dts b/arch/arm/dts/tegra20-colibri_t20_iris.dts
new file mode 100644 (file)
index 0000000..c0e54af
--- /dev/null
@@ -0,0 +1,45 @@
+/dts-v1/;
+
+#include "tegra20.dtsi"
+
+/ {
+       model = "Toradex Colibri T20";
+       compatible = "toradex,t20", "nvidia,tegra20";
+
+       aliases {
+               usb0 = "/usb@c5008000";
+               usb1 = "/usb@c5000000";
+               usb2 = "/usb@c5004000";
+               sdhci0 = "/sdhci@c8000600";
+       };
+
+       usb@c5000000 {
+               dr_mode = "otg";
+       };
+
+       usb@c5004000 {
+               nvidia,phy-reset-gpio = <&gpio 169 0>; /* PV1 */
+               nvidia,vbus-gpio = <&gpio 217 0>; /* PBB1 */
+       };
+
+       usb@c5008000 {
+               nvidia,vbus-gpio = <&gpio 178 1>; /* PW2 low-active */
+       };
+
+       nand-controller@70008000 {
+               nvidia,wp-gpios = <&gpio 144 0>; /* PS0 */
+               nvidia,width = <8>;
+               nvidia,timing = <15 100 25 80 25 10 15 10 100>;
+
+               nand@0 {
+                       reg = <0>;
+                       compatible = "nand-flash";
+               };
+       };
+
+       sdhci@c8000600 {
+               status = "okay";
+               cd-gpios = <&gpio 23 1>; /* gpio PC7 */
+               bus-width = <4>;
+       };
+};
diff --git a/arch/arm/dts/tegra20-harmony.dts b/arch/arm/dts/tegra20-harmony.dts
new file mode 100644 (file)
index 0000000..b115f87
--- /dev/null
@@ -0,0 +1,105 @@
+/dts-v1/;
+
+#include "tegra20.dtsi"
+
+/ {
+       model = "NVIDIA Tegra20 Harmony evaluation board";
+       compatible = "nvidia,harmony", "nvidia,tegra20";
+
+       aliases {
+               usb0 = "/usb@c5008000";
+               usb1 = "/usb@c5004000";
+               sdhci0 = "/sdhci@c8000600";
+               sdhci1 = "/sdhci@c8000200";
+       };
+
+       memory {
+               reg = <0x00000000 0x40000000>;
+       };
+
+       host1x {
+               status = "okay";
+               dc@54200000 {
+                       status = "okay";
+                       rgb {
+                               status = "okay";
+                               nvidia,panel = <&lcd_panel>;
+                       };
+               };
+       };
+
+       serial@70006300 {
+               clock-frequency = < 216000000 >;
+       };
+
+       nand-controller@70008000 {
+               nvidia,wp-gpios = <&gpio 23 0>;         /* PC7 */
+               nvidia,width = <8>;
+               nvidia,timing = <26 100 20 80 20 10 12 10 70>;
+               nand@0 {
+                       reg = <0>;
+                       compatible = "hynix,hy27uf4g2b", "nand-flash";
+               };
+       };
+
+       i2c@7000c000 {
+               status = "disabled";
+       };
+
+       i2c@7000c400 {
+               status = "disabled";
+       };
+
+       i2c@7000c500 {
+               status = "disabled";
+       };
+
+       i2c@7000d000 {
+               status = "disabled";
+       };
+
+       usb@c5000000 {
+               status = "disabled";
+       };
+
+       usb@c5004000 {
+               nvidia,phy-reset-gpio = <&gpio 169 0>; /* gpio PV1 */
+       };
+
+       sdhci@c8000200 {
+               status = "okay";
+               cd-gpios = <&gpio 69 1>; /* gpio PI5 */
+               wp-gpios = <&gpio 57 0>; /* gpio PH1 */
+               power-gpios = <&gpio 155 0>; /* gpio PT3 */
+               bus-width = <4>;
+       };
+
+       sdhci@c8000600 {
+               status = "okay";
+               cd-gpios = <&gpio 58 1>; /* gpio PH2 */
+               wp-gpios = <&gpio 59 0>; /* gpio PH3 */
+               power-gpios = <&gpio 70 0>; /* gpio PI6 */
+               bus-width = <8>;
+       };
+
+       lcd_panel: panel {
+               clock = <42430000>;
+               xres = <1024>;
+               yres = <600>;
+               left-margin = <138>;
+               right-margin = <34>;
+               hsync-len = <136>;
+               lower-margin = <4>;
+               upper-margin = <21>;
+               vsync-len = <4>;
+               hsync-active-high;
+               vsyncx-active-high;
+               nvidia,bits-per-pixel = <16>;
+               nvidia,pwm = <&pwm 0 0>;
+               nvidia,backlight-enable-gpios = <&gpio 13 0>;   /* PB5 */
+               nvidia,lvds-shutdown-gpios = <&gpio 10 0>;      /* PB2 */
+               nvidia,backlight-vdd-gpios = <&gpio 176 0>;     /* PW0 */
+               nvidia,panel-vdd-gpios = <&gpio 22 0>;          /* PC6 */
+               nvidia,panel-timings = <0 0 200 0 0>;
+       };
+};
diff --git a/arch/arm/dts/tegra20-medcom-wide.dts b/arch/arm/dts/tegra20-medcom-wide.dts
new file mode 100644 (file)
index 0000000..a9a07f9
--- /dev/null
@@ -0,0 +1,77 @@
+/dts-v1/;
+
+#include "tegra20-tamonten.dtsi"
+
+/ {
+       model = "Avionic Design Medcom-Wide";
+       compatible = "ad,medcom-wide", "nvidia,tegra20";
+
+       aliases {
+               usb0 = "/usb@c5008000";
+               sdhci0 = "/sdhci@c8000600";
+       };
+
+       memory {
+               reg = <0x00000000 0x20000000>;
+       };
+
+       host1x {
+               status = "okay";
+
+               dc@54200000 {
+                       status = "okay";
+
+                       rgb {
+                               nvidia,panel = <&lcd_panel>;
+                               status = "okay";
+                       };
+               };
+       };
+
+       serial@70006300 {
+               clock-frequency = <216000000>;
+       };
+
+       i2c@7000c000 {
+               status = "disabled";
+       };
+
+       i2c@7000c400 {
+               status = "disabled";
+       };
+
+       i2c@7000c500 {
+               status = "disabled";
+       };
+
+       i2c@7000d000 {
+               status = "disabled";
+       };
+
+       usb@c5000000 {
+               status = "disabled";
+       };
+
+       usb@c5004000 {
+               status = "disabled";
+       };
+
+       lcd_panel: panel {
+               clock = <61715000>;
+               xres = <1366>;
+               yres = <768>;
+               left-margin = <2>;
+               right-margin = <47>;
+               hsync-len = <136>;
+               lower-margin = <21>;
+               upper-margin = <11>;
+               vsync-len = <4>;
+
+               nvidia,bits-per-pixel = <16>;
+               nvidia,pwm = <&pwm 0 500000>;
+               nvidia,backlight-enable-gpios = <&gpio 13 0>; /* PB5 */
+               nvidia,backlight-vdd-gpios = <&gpio 176 0>; /* PW0 */
+               nvidia,lvds-shutdown-gpios = <&gpio 10 0>; /* PB2 */
+               nvidia,panel-timings = <0 0 0 0>;
+       };
+};
diff --git a/arch/arm/dts/tegra20-paz00.dts b/arch/arm/dts/tegra20-paz00.dts
new file mode 100644 (file)
index 0000000..780203c
--- /dev/null
@@ -0,0 +1,91 @@
+/dts-v1/;
+
+#include "tegra20.dtsi"
+
+/ {
+       model = "Toshiba AC100 / Dynabook AZ";
+       compatible = "compal,paz00", "nvidia,tegra20";
+
+       aliases {
+               usb0 = "/usb@c5008000";
+               sdhci0 = "/sdhci@c8000600";
+               sdhci1 = "/sdhci@c8000000";
+       };
+
+       memory {
+               reg = <0x00000000 0x20000000>;
+       };
+
+       host1x {
+               status = "okay";
+               dc@54200000 {
+                       status = "okay";
+                       rgb {
+                               status = "okay";
+                               nvidia,panel = <&lcd_panel>;
+                       };
+               };
+       };
+
+       serial@70006000 {
+               clock-frequency = < 216000000 >;
+       };
+
+       i2c@7000c000 {
+               status = "disabled";
+       };
+
+       i2c@7000c400 {
+               status = "disabled";
+       };
+
+       i2c@7000c500 {
+               status = "disabled";
+       };
+
+       i2c@7000d000 {
+               status = "disabled";
+       };
+
+       usb@c5000000 {
+               status = "disabled";
+       };
+
+       usb@c5004000 {
+               status = "disabled";
+       };
+
+       sdhci@c8000000 {
+               status = "okay";
+               cd-gpios = <&gpio 173 1>; /* gpio PV5 */
+               wp-gpios = <&gpio 57 0>; /* gpio PH1 */
+               power-gpios = <&gpio 169 0>; /* gpio PV1 */
+               bus-width = <4>;
+       };
+
+       sdhci@c8000600 {
+               status = "okay";
+               bus-width = <8>;
+       };
+
+       lcd_panel: panel {
+               /* PAZ00 has 1024x600 */
+               clock = <54030000>;
+               xres = <1024>;
+               yres = <600>;
+               right-margin = <160>;
+               left-margin = <24>;
+               hsync-len = <136>;
+               upper-margin = <3>;
+               lower-margin = <61>;
+               vsync-len = <6>;
+               hsync-active-high;
+               nvidia,bits-per-pixel = <16>;
+               nvidia,pwm = <&pwm 0 0>;
+               nvidia,backlight-enable-gpios = <&gpio 164 0>;  /* PU4 */
+               nvidia,lvds-shutdown-gpios = <&gpio 102 0>;     /* PM6 */
+               nvidia,backlight-vdd-gpios = <&gpio 176 0>;     /* PW0 */
+               nvidia,panel-vdd-gpios = <&gpio 4 0>;           /* PA4 */
+               nvidia,panel-timings = <400 4 203 17 15>;
+       };
+};
diff --git a/arch/arm/dts/tegra20-plutux.dts b/arch/arm/dts/tegra20-plutux.dts
new file mode 100644 (file)
index 0000000..20016f2
--- /dev/null
@@ -0,0 +1,45 @@
+/dts-v1/;
+
+#include "tegra20-tamonten.dtsi"
+
+/ {
+       model = "Avionic Design Plutux";
+       compatible = "ad,plutux", "nvidia,tegra20";
+
+       aliases {
+               usb0 = "/usb@c5008000";
+               sdhci0 = "/sdhci@c8000600";
+       };
+
+       memory {
+               reg = <0x00000000 0x20000000>;
+       };
+
+       serial@70006300 {
+               clock-frequency = <216000000>;
+       };
+
+       i2c@7000c000 {
+               status = "disabled";
+       };
+
+       i2c@7000c400 {
+               status = "disabled";
+       };
+
+       i2c@7000c500 {
+               status = "disabled";
+       };
+
+       i2c@7000d000 {
+               status = "disabled";
+       };
+
+       usb@c5000000 {
+               status = "disabled";
+       };
+
+       usb@c5004000 {
+               status = "disabled";
+       };
+};
diff --git a/arch/arm/dts/tegra20-seaboard.dts b/arch/arm/dts/tegra20-seaboard.dts
new file mode 100644 (file)
index 0000000..c0e2e1e
--- /dev/null
@@ -0,0 +1,191 @@
+/dts-v1/;
+
+#include "tegra20.dtsi"
+
+/ {
+       model = "NVIDIA Seaboard";
+       compatible = "nvidia,seaboard", "nvidia,tegra20";
+
+       chosen {
+               bootargs = "vmalloc=192M video=tegrafb console=ttyS0,115200n8 root=/dev/mmcblk1p3 rw rootwait";
+       };
+
+       aliases {
+               /* This defines the order of our ports */
+               usb0 = "/usb@c5008000";
+               usb1 = "/usb@c5000000";
+               i2c0 = "/i2c@7000d000";
+               i2c1 = "/i2c@7000c000";
+               i2c2 = "/i2c@7000c400";
+               i2c3 = "/i2c@7000c500";
+               sdhci0 = "/sdhci@c8000600";
+               sdhci1 = "/sdhci@c8000400";
+       };
+
+       memory {
+               device_type = "memory";
+               reg = < 0x00000000 0x40000000 >;
+       };
+
+       host1x {
+               status = "okay";
+               dc@54200000 {
+                       status = "okay";
+                       rgb {
+                               status = "okay";
+                               nvidia,panel = <&lcd_panel>;
+                       };
+               };
+       };
+
+       /* This is not used in U-Boot, but is expected to be in kernel .dts */
+       i2c@7000d000 {
+               clock-frequency = <100000>;
+               pmic@34 {
+                       compatible = "ti,tps6586x";
+                       reg = <0x34>;
+
+                       clk_32k: clock {
+                               compatible = "fixed-clock";
+                               /*
+                                * leave out for now due to CPP:
+                                * #clock-cells = <0>;
+                                */
+                               clock-frequency = <32768>;
+                       };
+               };
+       };
+
+       serial@70006300 {
+               clock-frequency = < 216000000 >;
+       };
+
+       nand-controller@70008000 {
+               nvidia,wp-gpios = <&gpio 59 0>;         /* PH3 */
+               nvidia,width = <8>;
+               nvidia,timing = <26 100 20 80 20 10 12 10 70>;
+               nand@0 {
+                       reg = <0>;
+                       compatible = "hynix,hy27uf4g2b", "nand-flash";
+               };
+       };
+
+       i2c@7000c000 {
+               clock-frequency = <100000>;
+       };
+
+       i2c@7000c400 {
+               status = "disabled";
+       };
+
+       i2c@7000c500 {
+               clock-frequency = <100000>;
+       };
+
+       kbc@7000e200 {
+               linux,keymap = <0x00020011 0x0003001f 0x0004001e 0x0005002c
+                       0x000701d0 0x0107007d 0x02060064 0x02070038 0x03000006
+                       0x03010005 0x03020013 0x03030012 0x03040021 0x03050020
+                       0x0306002d 0x04000008 0x04010007 0x04020014 0x04030023
+                       0x04040022 0x0405002f 0x0406002e 0x04070039 0x0500000a
+                       0x05010009 0x05020016 0x05030015 0x05040024 0x05050031
+                       0x05060030 0x0507002b 0x0600000c 0x0601000b 0x06020018
+                       0x06030017 0x06040026 0x06050025 0x06060033 0x06070032
+                       0x0701000d 0x0702001b 0x0703001c 0x0707008b 0x08040036
+                       0x0805002a 0x09050061 0x0907001d 0x0b00001a 0x0b010019
+                       0x0b020028 0x0b030027 0x0b040035 0x0b050034 0x0c000044
+                       0x0c010043 0x0c02000e 0x0c030004 0x0c040003 0x0c050067
+                       0x0c0600d2 0x0c070077 0x0d00006e 0x0d01006f 0x0d030068
+                       0x0d04006d 0x0d05006a 0x0d06006c 0x0d070069 0x0e000057
+                       0x0e010058 0x0e020042 0x0e030010 0x0e04003e 0x0e05003d
+                       0x0e060002 0x0e070041 0x0f000001 0x0f010029 0x0f02003f
+                       0x0f03000f 0x0f04003b 0x0f05003c 0x0f06003a 0x0f070040
+                       0x14000047 0x15000049 0x15010048 0x1502004b 0x1504004f
+                       0x16010062 0x1602004d 0x1603004c 0x16040051 0x16050050
+                       0x16070052 0x1b010037 0x1b03004a 0x1b04004e 0x1b050053
+                       0x1c050073 0x1d030066 0x1d04006b 0x1d0500e0 0x1d060072
+                       0x1d0700e1 0x1e000045 0x1e010046 0x1e020071
+                       0x1f04008a>;
+               linux,fn-keymap = <0x05040002>;
+       };
+
+       emc@7000f400 {
+               emc-table@190000 {
+                       reg = < 190000 >;
+                       compatible = "nvidia,tegra20-emc-table";
+                       clock-frequency = < 190000 >;
+                       nvidia,emc-registers = < 0x0000000c 0x00000026
+                               0x00000009 0x00000003 0x00000004 0x00000004
+                               0x00000002 0x0000000c 0x00000003 0x00000003
+                               0x00000002 0x00000001 0x00000004 0x00000005
+                               0x00000004 0x00000009 0x0000000d 0x0000059f
+                               0x00000000 0x00000003 0x00000003 0x00000003
+                               0x00000003 0x00000001 0x0000000b 0x000000c8
+                               0x00000003 0x00000007 0x00000004 0x0000000f
+                               0x00000002 0x00000000 0x00000000 0x00000002
+                               0x00000000 0x00000000 0x00000083 0xa06204ae
+                               0x007dc010 0x00000000 0x00000000 0x00000000
+                               0x00000000 0x00000000 0x00000000 0x00000000 >;
+               };
+               emc-table@380000 {
+                       reg = < 380000 >;
+                       compatible = "nvidia,tegra20-emc-table";
+                       clock-frequency = < 380000 >;
+                       nvidia,emc-registers = < 0x00000017 0x0000004b
+                               0x00000012 0x00000006 0x00000004 0x00000005
+                               0x00000003 0x0000000c 0x00000006 0x00000006
+                               0x00000003 0x00000001 0x00000004 0x00000005
+                               0x00000004 0x00000009 0x0000000d 0x00000b5f
+                               0x00000000 0x00000003 0x00000003 0x00000006
+                               0x00000006 0x00000001 0x00000011 0x000000c8
+                               0x00000003 0x0000000e 0x00000007 0x0000000f
+                               0x00000002 0x00000000 0x00000000 0x00000002
+                               0x00000000 0x00000000 0x00000083 0xe044048b
+                               0x007d8010 0x00000000 0x00000000 0x00000000
+                               0x00000000 0x00000000 0x00000000 0x00000000 >;
+               };
+       };
+
+       usb@c5000000 {
+               nvidia,vbus-gpio = <&gpio 24 0>; /* PD0 */
+               dr_mode = "otg";
+       };
+
+       usb@c5004000 {
+               status = "disabled";
+       };
+
+       sdhci@c8000400 {
+               status = "okay";
+               cd-gpios = <&gpio 69 1>; /* gpio PI5 */
+               wp-gpios = <&gpio 57 0>; /* gpio PH1 */
+               power-gpios = <&gpio 70 0>; /* gpio PI6 */
+               bus-width = <4>;
+       };
+
+       sdhci@c8000600 {
+               status = "okay";
+               bus-width = <8>;
+       };
+
+       lcd_panel: panel {
+               /* Seaboard has 1366x768 */
+               clock = <70600000>;
+               xres = <1366>;
+               yres = <768>;
+               left-margin = <58>;
+               right-margin = <58>;
+               hsync-len = <58>;
+               lower-margin = <4>;
+               upper-margin = <4>;
+               vsync-len = <4>;
+               hsync-active-high;
+               nvidia,bits-per-pixel = <16>;
+               nvidia,pwm = <&pwm 2 0>;
+               nvidia,backlight-enable-gpios = <&gpio 28 0>;   /* PD4 */
+               nvidia,lvds-shutdown-gpios = <&gpio 10 0>;      /* PB2 */
+               nvidia,backlight-vdd-gpios = <&gpio 176 0>;     /* PW0 */
+               nvidia,panel-vdd-gpios = <&gpio 22 0>;          /* PC6 */
+               nvidia,panel-timings = <400 4 203 17 15>;
+       };
+};
diff --git a/arch/arm/dts/tegra20-tamonten.dtsi b/arch/arm/dts/tegra20-tamonten.dtsi
new file mode 100644 (file)
index 0000000..f379622
--- /dev/null
@@ -0,0 +1,500 @@
+#include "tegra20.dtsi"
+
+/ {
+       model = "Avionic Design Tamonten SOM";
+       compatible = "ad,tamonten", "nvidia,tegra20";
+
+       memory {
+               reg = <0x00000000 0x20000000>;
+       };
+
+       host1x {
+               hdmi {
+                       vdd-supply = <&hdmi_vdd_reg>;
+                       pll-supply = <&hdmi_pll_reg>;
+
+                       nvidia,ddc-i2c-bus = <&hdmi_ddc>;
+                       nvidia,hpd-gpio = <&gpio 111 0>; /* PN7 */
+               };
+       };
+
+       pinmux {
+               pinctrl-names = "default";
+               pinctrl-0 = <&state_default>;
+
+               state_default: pinmux {
+                       ata {
+                               nvidia,pins = "ata";
+                               nvidia,function = "ide";
+                       };
+                       atb {
+                               nvidia,pins = "atb", "gma", "gme";
+                               nvidia,function = "sdio4";
+                       };
+                       atc {
+                               nvidia,pins = "atc";
+                               nvidia,function = "nand";
+                       };
+                       atd {
+                               nvidia,pins = "atd", "ate", "gmb", "gmd", "gpu",
+                                       "spia", "spib", "spic";
+                               nvidia,function = "gmi";
+                       };
+                       cdev1 {
+                               nvidia,pins = "cdev1";
+                               nvidia,function = "plla_out";
+                       };
+                       cdev2 {
+                               nvidia,pins = "cdev2";
+                               nvidia,function = "pllp_out4";
+                       };
+                       crtp {
+                               nvidia,pins = "crtp";
+                               nvidia,function = "crt";
+                       };
+                       csus {
+                               nvidia,pins = "csus";
+                               nvidia,function = "vi_sensor_clk";
+                       };
+                       dap1 {
+                               nvidia,pins = "dap1";
+                               nvidia,function = "dap1";
+                       };
+                       dap2 {
+                               nvidia,pins = "dap2";
+                               nvidia,function = "dap2";
+                       };
+                       dap3 {
+                               nvidia,pins = "dap3";
+                               nvidia,function = "dap3";
+                       };
+                       dap4 {
+                               nvidia,pins = "dap4";
+                               nvidia,function = "dap4";
+                       };
+                       dta {
+                               nvidia,pins = "dta", "dtd";
+                               nvidia,function = "sdio2";
+                       };
+                       dtb {
+                               nvidia,pins = "dtb", "dtc", "dte";
+                               nvidia,function = "rsvd1";
+                       };
+                       dtf {
+                               nvidia,pins = "dtf";
+                               nvidia,function = "i2c3";
+                       };
+                       gmc {
+                               nvidia,pins = "gmc";
+                               nvidia,function = "uartd";
+                       };
+                       gpu7 {
+                               nvidia,pins = "gpu7";
+                               nvidia,function = "rtck";
+                       };
+                       gpv {
+                               nvidia,pins = "gpv", "slxa", "slxk";
+                               nvidia,function = "pcie";
+                       };
+                       hdint {
+                               nvidia,pins = "hdint";
+                               nvidia,function = "hdmi";
+                       };
+                       i2cp {
+                               nvidia,pins = "i2cp";
+                               nvidia,function = "i2cp";
+                       };
+                       irrx {
+                               nvidia,pins = "irrx", "irtx";
+                               nvidia,function = "uarta";
+                       };
+                       kbca {
+                               nvidia,pins = "kbca", "kbcb", "kbcc", "kbcd",
+                                       "kbce", "kbcf";
+                               nvidia,function = "kbc";
+                       };
+                       lcsn {
+                               nvidia,pins = "lcsn", "ld0", "ld1", "ld2",
+                                       "ld3", "ld4", "ld5", "ld6", "ld7",
+                                       "ld8", "ld9", "ld10", "ld11", "ld12",
+                                       "ld13", "ld14", "ld15", "ld16", "ld17",
+                                       "ldc", "ldi", "lhp0", "lhp1", "lhp2",
+                                       "lhs", "lm0", "lm1", "lpp", "lpw0",
+                                       "lpw1", "lpw2", "lsc0", "lsc1", "lsck",
+                                       "lsda", "lsdi", "lspi", "lvp0", "lvp1",
+                                       "lvs";
+                               nvidia,function = "displaya";
+                       };
+                       owc {
+                               nvidia,pins = "owc", "spdi", "spdo", "uac";
+                               nvidia,function = "rsvd2";
+                       };
+                       pmc {
+                               nvidia,pins = "pmc";
+                               nvidia,function = "pwr_on";
+                       };
+                       rm {
+                               nvidia,pins = "rm";
+                               nvidia,function = "i2c1";
+                       };
+                       sdb {
+                               nvidia,pins = "sdb", "sdc", "sdd";
+                               nvidia,function = "pwm";
+                       };
+                       sdio1 {
+                               nvidia,pins = "sdio1";
+                               nvidia,function = "sdio1";
+                       };
+                       slxc {
+                               nvidia,pins = "slxc", "slxd";
+                               nvidia,function = "spdif";
+                       };
+                       spid {
+                               nvidia,pins = "spid", "spie", "spif";
+                               nvidia,function = "spi1";
+                       };
+                       spig {
+                               nvidia,pins = "spig", "spih";
+                               nvidia,function = "spi2_alt";
+                       };
+                       uaa {
+                               nvidia,pins = "uaa", "uab", "uda";
+                               nvidia,function = "ulpi";
+                       };
+                       uad {
+                               nvidia,pins = "uad";
+                               nvidia,function = "irda";
+                       };
+                       uca {
+                               nvidia,pins = "uca", "ucb";
+                               nvidia,function = "uartc";
+                       };
+                       conf_ata {
+                               nvidia,pins = "ata", "atb", "atc", "atd", "ate",
+                                       "cdev1", "cdev2", "dap1", "dtb", "gma",
+                                       "gmb", "gmc", "gmd", "gme", "gpu7",
+                                       "gpv", "i2cp", "pta", "rm", "slxa",
+                                       "slxk", "spia", "spib", "uac";
+                               nvidia,pull = <0>;
+                               nvidia,tristate = <0>;
+                       };
+                       conf_ck32 {
+                               nvidia,pins = "ck32", "ddrc", "pmca", "pmcb",
+                                       "pmcc", "pmcd", "pmce", "xm2c", "xm2d";
+                               nvidia,pull = <0>;
+                       };
+                       conf_csus {
+                               nvidia,pins = "csus", "spid", "spif";
+                               nvidia,pull = <1>;
+                               nvidia,tristate = <1>;
+                       };
+                       conf_crtp {
+                               nvidia,pins = "crtp", "dap2", "dap3", "dap4",
+                                       "dtc", "dte", "dtf", "gpu", "sdio1",
+                                       "slxc", "slxd", "spdi", "spdo", "spig",
+                                       "uda";
+                               nvidia,pull = <0>;
+                               nvidia,tristate = <1>;
+                       };
+                       conf_ddc {
+                               nvidia,pins = "ddc", "dta", "dtd", "kbca",
+                                       "kbcb", "kbcc", "kbcd", "kbce", "kbcf",
+                                       "sdc";
+                               nvidia,pull = <2>;
+                               nvidia,tristate = <0>;
+                       };
+                       conf_hdint {
+                               nvidia,pins = "hdint", "lcsn", "ldc", "lm1",
+                                       "lpw1", "lsc1", "lsck", "lsda", "lsdi",
+                                       "lvp0", "owc", "sdb";
+                               nvidia,tristate = <1>;
+                       };
+                       conf_irrx {
+                               nvidia,pins = "irrx", "irtx", "sdd", "spic",
+                                       "spie", "spih", "uaa", "uab", "uad",
+                                       "uca", "ucb";
+                               nvidia,pull = <2>;
+                               nvidia,tristate = <1>;
+                       };
+                       conf_lc {
+                               nvidia,pins = "lc", "ls";
+                               nvidia,pull = <2>;
+                       };
+                       conf_ld0 {
+                               nvidia,pins = "ld0", "ld1", "ld2", "ld3", "ld4",
+                                       "ld5", "ld6", "ld7", "ld8", "ld9",
+                                       "ld10", "ld11", "ld12", "ld13", "ld14",
+                                       "ld15", "ld16", "ld17", "ldi", "lhp0",
+                                       "lhp1", "lhp2", "lhs", "lm0", "lpp",
+                                       "lpw0", "lpw2", "lsc0", "lspi", "lvp1",
+                                       "lvs", "pmc";
+                               nvidia,tristate = <0>;
+                       };
+                       conf_ld17_0 {
+                               nvidia,pins = "ld17_0", "ld19_18", "ld21_20",
+                                       "ld23_22";
+                               nvidia,pull = <1>;
+                       };
+               };
+
+               state_i2cmux_ddc: pinmux_i2cmux_ddc {
+                       ddc {
+                               nvidia,pins = "ddc";
+                               nvidia,function = "i2c2";
+                       };
+                       pta {
+                               nvidia,pins = "pta";
+                               nvidia,function = "rsvd4";
+                       };
+               };
+
+               state_i2cmux_pta: pinmux_i2cmux_pta {
+                       ddc {
+                               nvidia,pins = "ddc";
+                               nvidia,function = "rsvd4";
+                       };
+                       pta {
+                               nvidia,pins = "pta";
+                               nvidia,function = "i2c2";
+                       };
+               };
+
+               state_i2cmux_idle: pinmux_i2cmux_idle {
+                       ddc {
+                               nvidia,pins = "ddc";
+                               nvidia,function = "rsvd4";
+                       };
+                       pta {
+                               nvidia,pins = "pta";
+                               nvidia,function = "rsvd4";
+                       };
+               };
+       };
+
+       i2s@70002800 {
+               status = "okay";
+       };
+
+       serial@70006300 {
+               status = "okay";
+       };
+
+       nand-controller@70008000 {
+               nvidia,wp-gpios = <&gpio 23 0>; /* PC7 */
+               nvidia,width = <8>;
+               nvidia,timing = <26 100 20 80 20 10 12 10 70>;
+
+               nand@0 {
+                       reg = <0>;
+                       compatible = "hynix,hy27uf4g2b", "nand-flash";
+               };
+       };
+
+       i2c@7000c000 {
+               clock-frequency = <400000>;
+               status = "okay";
+       };
+
+       i2c@7000c400 {
+               clock-frequency = <100000>;
+               status = "okay";
+       };
+
+       i2cmux {
+               compatible = "i2c-mux-pinctrl";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               i2c-parent = <&{/i2c@7000c400}>;
+
+               pinctrl-names = "ddc", "pta", "idle";
+               pinctrl-0 = <&state_i2cmux_ddc>;
+               pinctrl-1 = <&state_i2cmux_pta>;
+               pinctrl-2 = <&state_i2cmux_idle>;
+
+               hdmi_ddc: i2c@0 {
+                       reg = <0>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+               };
+
+               i2c@1 {
+                       reg = <1>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+               };
+       };
+
+       i2c@7000d000 {
+               clock-frequency = <400000>;
+               status = "okay";
+
+               pmic: tps6586x@34 {
+                       compatible = "ti,tps6586x";
+                       reg = <0x34>;
+                       interrupts = <0 86 0x4>;
+
+                       ti,system-power-controller;
+
+                       #gpio-cells = <2>;
+                       gpio-controller;
+
+                       sys-supply = <&vdd_5v0_reg>;
+                       vin-sm0-supply = <&sys_reg>;
+                       vin-sm1-supply = <&sys_reg>;
+                       vin-sm2-supply = <&sys_reg>;
+                       vinldo01-supply = <&sm2_reg>;
+                       vinldo23-supply = <&sm2_reg>;
+                       vinldo4-supply = <&sm2_reg>;
+                       vinldo678-supply = <&sm2_reg>;
+                       vinldo9-supply = <&sm2_reg>;
+
+                       regulators {
+                               sys_reg: sys {
+                                       regulator-name = "vdd_sys";
+                                       regulator-always-on;
+                               };
+
+                               sm0 {
+                                       regulator-name = "vdd_sys_sm0,vdd_core";
+                                       regulator-min-microvolt = <1200000>;
+                                       regulator-max-microvolt = <1200000>;
+                                       regulator-always-on;
+                               };
+
+                               sm1 {
+                                       regulator-name = "vdd_sys_sm1,vdd_cpu";
+                                       regulator-min-microvolt = <1000000>;
+                                       regulator-max-microvolt = <1000000>;
+                                       regulator-always-on;
+                               };
+
+                               sm2_reg: sm2 {
+                                       regulator-name = "vdd_sys_sm2,vin_ldo*";
+                                       regulator-min-microvolt = <3700000>;
+                                       regulator-max-microvolt = <3700000>;
+                                       regulator-always-on;
+                               };
+
+                               ldo0 {
+                                       regulator-name = "vdd_ldo0,vddio_pex_clk";
+                                       regulator-min-microvolt = <3300000>;
+                                       regulator-max-microvolt = <3300000>;
+                               };
+
+                               ldo1 {
+                                       regulator-name = "vdd_ldo1,avdd_pll*";
+                                       regulator-min-microvolt = <1100000>;
+                                       regulator-max-microvolt = <1100000>;
+                                       regulator-always-on;
+                               };
+
+                               ldo2 {
+                                       regulator-name = "vdd_ldo2,vdd_rtc";
+                                       regulator-min-microvolt = <1200000>;
+                                       regulator-max-microvolt = <1200000>;
+                               };
+
+                               ldo3 {
+                                       regulator-name = "vdd_ldo3,avdd_usb*";
+                                       regulator-min-microvolt = <3300000>;
+                                       regulator-max-microvolt = <3300000>;
+                                       regulator-always-on;
+                               };
+
+                               ldo4 {
+                                       regulator-name = "vdd_ldo4,avdd_osc,vddio_sys";
+                                       regulator-min-microvolt = <1800000>;
+                                       regulator-max-microvolt = <1800000>;
+                                       regulator-always-on;
+                               };
+
+                               ldo5 {
+                                       regulator-name = "vdd_ldo5,vcore_mmc";
+                                       regulator-min-microvolt = <2850000>;
+                                       regulator-max-microvolt = <2850000>;
+                               };
+
+                               ldo6 {
+                                       regulator-name = "vdd_ldo6,avdd_vdac";
+                                       /*
+                                        * According to the Tegra 2 Automotive
+                                        * DataSheet, a typical value for this
+                                        * would be 2.8V, but the PMIC only
+                                        * supports 2.85V.
+                                        */
+                                       regulator-min-microvolt = <2850000>;
+                                       regulator-max-microvolt = <2850000>;
+                               };
+
+                               hdmi_vdd_reg: ldo7 {
+                                       regulator-name = "vdd_ldo7,avdd_hdmi";
+                                       regulator-min-microvolt = <3300000>;
+                                       regulator-max-microvolt = <3300000>;
+                               };
+
+                               hdmi_pll_reg: ldo8 {
+                                       regulator-name = "vdd_ldo8,avdd_hdmi_pll";
+                                       regulator-min-microvolt = <1800000>;
+                                       regulator-max-microvolt = <1800000>;
+                               };
+
+                               ldo9 {
+                                       regulator-name = "vdd_ldo9,vdd_ddr_rx,avdd_cam";
+                                       /*
+                                        * According to the Tegra 2 Automotive
+                                        * DataSheet, a typical value for this
+                                        * would be 2.8V, but the PMIC only
+                                        * supports 2.85V.
+                                        */
+                                       regulator-min-microvolt = <2850000>;
+                                       regulator-max-microvolt = <2850000>;
+                                       regulator-always-on;
+                               };
+
+                               ldo_rtc {
+                                       regulator-name = "vdd_rtc_out";
+                                       regulator-min-microvolt = <3300000>;
+                                       regulator-max-microvolt = <3300000>;
+                                       regulator-always-on;
+                               };
+                       };
+               };
+
+               temperature-sensor@4c {
+                       compatible = "onnn,nct1008";
+                       reg = <0x4c>;
+               };
+       };
+
+       pmc {
+               nvidia,invert-interrupt;
+       };
+
+       usb@c5008000 {
+               status = "okay";
+       };
+
+       sdhci@c8000600 {
+               cd-gpios = <&gpio 58 1>; /* gpio PH2 */
+               wp-gpios = <&gpio 59 0>; /* gpio PH3 */
+               bus-width = <4>;
+               status = "okay";
+       };
+
+       regulators {
+               compatible = "simple-bus";
+
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               vdd_5v0_reg: regulator@0 {
+                       compatible = "regulator-fixed";
+                       reg = <0>;
+                       regulator-name = "vdd_5v0";
+                       regulator-min-microvolt = <5000000>;
+                       regulator-max-microvolt = <5000000>;
+                       regulator-always-on;
+               };
+       };
+};
diff --git a/arch/arm/dts/tegra20-tec.dts b/arch/arm/dts/tegra20-tec.dts
new file mode 100644 (file)
index 0000000..4c1b08d
--- /dev/null
@@ -0,0 +1,77 @@
+/dts-v1/;
+
+#include "tegra20-tamonten.dtsi"
+
+/ {
+       model = "Avionic Design Tamonten Evaluation Carrier";
+       compatible = "ad,tec", "nvidia,tegra20";
+
+       aliases {
+               usb0 = "/usb@c5008000";
+               sdhci0 = "/sdhci@c8000600";
+       };
+
+       memory {
+               reg = <0x00000000 0x20000000>;
+       };
+
+       host1x {
+               status = "okay";
+
+               dc@54200000 {
+                       status = "okay";
+
+                       rgb {
+                               nvidia,panel = <&lcd_panel>;
+                               status = "okay";
+                       };
+               };
+       };
+
+       serial@70006300 {
+               clock-frequency = <216000000>;
+       };
+
+       i2c@7000c000 {
+               status = "disabled";
+       };
+
+       i2c@7000c400 {
+               status = "disabled";
+       };
+
+       i2c@7000c500 {
+               status = "disabled";
+       };
+
+       i2c@7000d000 {
+               status = "disabled";
+       };
+
+       usb@c5000000 {
+               status = "disabled";
+       };
+
+       usb@c5004000 {
+               status = "disabled";
+       };
+
+       lcd_panel: panel {
+               clock = <33260000>;
+               xres = <800>;
+               yres = <480>;
+               left-margin = <120>;
+               right-margin = <120>;
+               hsync-len = <16>;
+               lower-margin = <15>;
+               upper-margin = <15>;
+               vsync-len = <15>;
+
+               nvidia,bits-per-pixel = <16>;
+               nvidia,pwm = <&pwm 0 500000>;
+               nvidia,backlight-enable-gpios = <&gpio 13 0>; /* PB5 */
+               nvidia,backlight-vdd-gpios = <&gpio 176 0>; /* PW0 */
+               nvidia,lvds-shutdown-gpios = <&gpio 10 0>; /* PB2 */
+               nvidia,panel-timings = <0 0 0 0>;
+       };
+};
diff --git a/arch/arm/dts/tegra20-trimslice.dts b/arch/arm/dts/tegra20-trimslice.dts
new file mode 100644 (file)
index 0000000..ee31476
--- /dev/null
@@ -0,0 +1,64 @@
+/dts-v1/;
+
+#include "tegra20.dtsi"
+
+/ {
+       model = "Compulab TrimSlice board";
+       compatible = "compulab,trimslice", "nvidia,tegra20";
+
+       aliases {
+               usb0 = "/usb@c5008000";
+               usb1 = "/usb@c5000000";
+               sdhci0 = "/sdhci@c8000600";
+               sdhci1 = "/sdhci@c8000000";
+       };
+
+       memory {
+               reg = <0x00000000 0x40000000>;
+       };
+
+       serial@70006000 {
+               clock-frequency = <216000000>;
+       };
+
+       i2c@7000c000 {
+               status = "disabled";
+       };
+
+       spi@7000c380 {
+               status = "okay";
+               spi-max-frequency = <25000000>;
+       };
+
+       i2c@7000c400 {
+               status = "disabled";
+       };
+
+       i2c@7000c500 {
+               status = "disabled";
+       };
+
+       i2c@7000d000 {
+               status = "disabled";
+       };
+
+       usb@c5000000 {
+               nvidia,vbus-gpio = <&gpio 170 0>; /* PV2 */
+       };
+
+       usb@c5004000 {
+               status = "disabled";
+       };
+
+       sdhci@c8000000 {
+               status = "okay";
+               bus-width = <4>;
+       };
+
+       sdhci@c8000600 {
+               status = "okay";
+               cd-gpios = <&gpio 121 1>; /* gpio PP1 */
+               wp-gpios = <&gpio 122 0>; /* gpio PP2 */
+               bus-width = <4>;
+       };
+};
diff --git a/arch/arm/dts/tegra20-ventana.dts b/arch/arm/dts/tegra20-ventana.dts
new file mode 100644 (file)
index 0000000..1a526ba
--- /dev/null
@@ -0,0 +1,91 @@
+/dts-v1/;
+
+#include "tegra20.dtsi"
+
+/ {
+       model = "NVIDIA Tegra20 Ventana evaluation board";
+       compatible = "nvidia,ventana", "nvidia,tegra20";
+
+       aliases {
+               usb0 = "/usb@c5008000";
+               sdhci0 = "/sdhci@c8000600";
+               sdhci1 = "/sdhci@c8000400";
+       };
+
+       memory {
+               reg = <0x00000000 0x40000000>;
+       };
+
+       host1x {
+               status = "okay";
+               dc@54200000 {
+                       status = "okay";
+                       rgb {
+                               status = "okay";
+                               nvidia,panel = <&lcd_panel>;
+                       };
+               };
+       };
+
+       serial@70006300 {
+               clock-frequency = < 216000000 >;
+       };
+
+       i2c@7000c000 {
+               status = "disabled";
+       };
+
+       i2c@7000c400 {
+               status = "disabled";
+       };
+
+       i2c@7000c500 {
+               status = "disabled";
+       };
+
+       i2c@7000d000 {
+               status = "disabled";
+       };
+
+       usb@c5000000 {
+               status = "disabled";
+       };
+
+       usb@c5004000 {
+               status = "disabled";
+       };
+
+       sdhci@c8000400 {
+               status = "okay";
+               cd-gpios = <&gpio 69 1>; /* gpio PI5 */
+               wp-gpios = <&gpio 57 0>; /* gpio PH1 */
+               power-gpios = <&gpio 70 0>; /* gpio PI6 */
+               bus-width = <4>;
+       };
+
+       sdhci@c8000600 {
+               status = "okay";
+               bus-width = <8>;
+       };
+
+       lcd_panel: panel {
+               clock = <72072000>;
+               xres = <1366>;
+               yres = <768>;
+               left-margin = <58>;
+               right-margin = <58>;
+               hsync-len = <58>;
+               lower-margin = <4>;
+               upper-margin = <4>;
+               vsync-len = <4>;
+               hsync-active-high;
+               vsync-active-high;
+               nvidia,bits-per-pixel = <16>;
+               nvidia,pwm = <&pwm 2 0>;
+               nvidia,backlight-enable-gpios = <&gpio 28 0>;   /* PD4 */
+               nvidia,lvds-shutdown-gpios = <&gpio 10 0>;      /* PB2 */
+               nvidia,backlight-vdd-gpios = <&gpio 176 0>;     /* PW0 */
+               nvidia,panel-vdd-gpios = <&gpio 22 0>;          /* PC6 */
+               nvidia,panel-timings = <0 0 200 0 0>;
+       };
+};
diff --git a/arch/arm/dts/tegra20-whistler.dts b/arch/arm/dts/tegra20-whistler.dts
new file mode 100644 (file)
index 0000000..eb92264
--- /dev/null
@@ -0,0 +1,73 @@
+/dts-v1/;
+
+#include "tegra20.dtsi"
+
+/ {
+       model = "NVIDIA Tegra20 Whistler evaluation board";
+       compatible = "nvidia,whistler", "nvidia,tegra20";
+
+       aliases {
+               i2c0 = "/i2c@7000d000";
+               usb0 = "/usb@c5008000";
+               sdhci0 = "/sdhci@c8000600";
+               sdhci1 = "/sdhci@c8000400";
+       };
+
+       memory {
+               device_type = "memory";
+               reg = < 0x00000000 0x20000000 >;
+       };
+
+       serial@70006000 {
+               clock-frequency = < 216000000 >;
+       };
+
+       i2c@7000c000 {
+               status = "disabled";
+       };
+
+       i2c@7000c400 {
+               status = "disabled";
+       };
+
+       i2c@7000c500 {
+               status = "disabled";
+       };
+
+       i2c@7000d000 {
+               clock-frequency = <100000>;
+
+               pmic@3c {
+                       compatible = "maxim,max8907b";
+                       reg = <0x3c>;
+
+                       clk_32k: clock {
+                               compatible = "fixed-clock";
+                               /*
+                                * leave out for now due to CPP:
+                                * #clock-cells = <0>;
+                                */
+                               clock-frequency = <32768>;
+                       };
+               };
+       };
+
+       usb@c5000000 {
+               status = "disabled";
+       };
+
+       usb@c5004000 {
+               status = "disabled";
+       };
+
+       sdhci@c8000400 {
+               status = "okay";
+               wp-gpios = <&gpio 173 0>; /* gpio PV5 */
+               bus-width = <8>;
+       };
+
+       sdhci@c8000600 {
+               status = "okay";
+               bus-width = <8>;
+       };
+};
diff --git a/arch/arm/dts/tegra30-beaver.dts b/arch/arm/dts/tegra30-beaver.dts
new file mode 100644 (file)
index 0000000..a7cc93e
--- /dev/null
@@ -0,0 +1,77 @@
+/dts-v1/;
+
+#include "tegra30.dtsi"
+
+/ {
+       model = "NVIDIA Beaver";
+       compatible = "nvidia,beaver", "nvidia,tegra30";
+
+       aliases {
+               i2c0 = "/i2c@7000d000";
+               i2c1 = "/i2c@7000c000";
+               i2c2 = "/i2c@7000c400";
+               i2c3 = "/i2c@7000c500";
+               i2c4 = "/i2c@7000c700";
+               sdhci0 = "/sdhci@78000600";
+               sdhci1 = "/sdhci@78000000";
+               usb0 = "/usb@7d008000";
+       };
+
+       memory {
+               device_type = "memory";
+               reg = <0x80000000 0x7ff00000>;
+       };
+
+       i2c@7000c000 {
+               status = "okay";
+               clock-frequency = <100000>;
+       };
+
+       i2c@7000c400 {
+               status = "okay";
+               clock-frequency = <100000>;
+       };
+
+       i2c@7000c500 {
+               status = "okay";
+               clock-frequency = <100000>;
+       };
+
+       i2c@7000c700 {
+               status = "okay";
+               clock-frequency = <100000>;
+       };
+
+       i2c@7000d000 {
+               status = "okay";
+               clock-frequency = <100000>;
+       };
+
+       spi@7000da00 {
+               status = "okay";
+               spi-max-frequency = <25000000>;
+               spi-flash@1 {
+                       compatible = "winbond,w25q32";
+                       reg = <1>;
+                       spi-max-frequency = <20000000>;
+               };
+       };
+
+       sdhci@78000000 {
+               status = "okay";
+               cd-gpios = <&gpio 69 1>; /* gpio PI5 */
+               wp-gpios = <&gpio 155 0>; /* gpio PT3 */
+               power-gpios = <&gpio 31 0>; /* gpio PD7 */
+               bus-width = <4>;
+       };
+
+       sdhci@78000600 {
+               status = "okay";
+               bus-width = <8>;
+       };
+
+       usb@7d008000 {
+               nvidia,vbus-gpio = <&gpio 236 0>; /* PDD4 */
+               status = "okay";
+       };
+};
diff --git a/arch/arm/dts/tegra30-cardhu.dts b/arch/arm/dts/tegra30-cardhu.dts
new file mode 100644 (file)
index 0000000..ea2cf76
--- /dev/null
@@ -0,0 +1,72 @@
+/dts-v1/;
+
+#include "tegra30.dtsi"
+
+/ {
+       model = "NVIDIA Cardhu";
+       compatible = "nvidia,cardhu", "nvidia,tegra30";
+
+       aliases {
+               i2c0 = "/i2c@7000d000";
+               i2c1 = "/i2c@7000c000";
+               i2c2 = "/i2c@7000c400";
+               i2c3 = "/i2c@7000c500";
+               i2c4 = "/i2c@7000c700";
+               sdhci0 = "/sdhci@78000600";
+               sdhci1 = "/sdhci@78000000";
+               usb0 = "/usb@7d008000";
+       };
+
+       memory {
+               device_type = "memory";
+               reg = <0x80000000 0x40000000>;
+       };
+
+       i2c@7000c000 {
+               status = "okay";
+               clock-frequency = <100000>;
+       };
+
+       i2c@7000c400 {
+               status = "okay";
+               clock-frequency = <100000>;
+       };
+
+       i2c@7000c500 {
+               status = "okay";
+               clock-frequency = <100000>;
+       };
+
+       i2c@7000c700 {
+               status = "okay";
+               clock-frequency = <100000>;
+       };
+
+       i2c@7000d000 {
+               status = "okay";
+               clock-frequency = <100000>;
+       };
+
+       spi@7000da00 {
+               status = "okay";
+               spi-max-frequency = <25000000>;
+       };
+
+       sdhci@78000000 {
+               status = "okay";
+               cd-gpios = <&gpio 69 1>; /* gpio PI5 */
+               wp-gpios = <&gpio 155 0>; /* gpio PT3 */
+               power-gpios = <&gpio 31 0>; /* gpio PD7 */
+               bus-width = <4>;
+       };
+
+       sdhci@78000600 {
+               status = "okay";
+               bus-width = <8>;
+       };
+
+       usb@7d008000 {
+               nvidia,vbus-gpio = <&gpio 236 0>;       /* PDD4 */
+               status = "okay";
+       };
+};
diff --git a/arch/arm/dts/tegra30-tamonten.dtsi b/arch/arm/dts/tegra30-tamonten.dtsi
new file mode 100644 (file)
index 0000000..50d5762
--- /dev/null
@@ -0,0 +1,69 @@
+#include "tegra30.dtsi"
+
+/ {
+       model = "Avionic Design Tamonten NG";
+       compatible = "ad,tamonten-ng", "nvidia,tegra30";
+
+       memory {
+               reg = <0x80000000 0x40000000>;
+       };
+
+       aliases {
+               i2c0 = "/i2c@7000c000";
+               i2c1 = "/i2c@7000c700";
+               i2c2 = "/i2c@7000c400";
+               i2c3 = "/i2c@7000c500";
+               i2c4 = "/i2c@7000d000";
+               sdhci0 = "/sdhci@78000600";
+               sdhci1 = "/sdhci@78000400";
+               sdhci2 = "/sdhci@78000000";
+               usb0 = "/usb@7d008000";
+       };
+
+       /* GEN1 */
+       i2c@7000c000 {
+               status = "okay";
+               clock-frequency = <100000>;
+       };
+
+       /* GEN2 */
+       i2c@7000c400 {
+               clock-frequency = <100000>;
+       };
+
+       /* CAM */
+       i2c@7000c500 {
+               status = "okay";
+               clock-frequency = <100000>;
+       };
+
+       /* DDC */
+       i2c@7000c700 {
+               status = "okay";
+               clock-frequency = <100000>;
+       };
+
+       /* PWR */
+       i2c@7000d000 {
+               status = "okay";
+               clock-frequency = <100000>;
+       };
+
+       /* SD slot on the base board */
+       sdhci@78000400 {
+               cd-gpios = <&gpio 69 1>; /* gpio PI5 */
+               wp-gpios = <&gpio 67 0>; /* gpio PI3 */
+               bus-width = <4>;
+       };
+
+       /* EMMC on the COM module */
+       sdhci@78000600 {
+               status = "okay";
+               bus-width = <8>;
+       };
+
+       usb@7d008000 {
+               status = "okay";
+       };
+
+};
diff --git a/arch/arm/dts/tegra30-tec-ng.dts b/arch/arm/dts/tegra30-tec-ng.dts
new file mode 100644 (file)
index 0000000..8a69e81
--- /dev/null
@@ -0,0 +1,18 @@
+/dts-v1/;
+
+#include "tegra30-tamonten.dtsi"
+
+/ {
+       model = "Avionic Design Tamontenâ„¢ NG Evaluation Carrier";
+       compatible = "ad,tec-ng", "nvidia,tegra30";
+
+       /* GEN2 */
+       i2c@7000c400 {
+               status = "okay";
+       };
+
+       /* SD card slot */
+       sdhci@78000400 {
+               status = "okay";
+       };
+};
diff --git a/arch/arm/dts/zynq-microzed.dts b/arch/arm/dts/zynq-microzed.dts
new file mode 100644 (file)
index 0000000..6da71c1
--- /dev/null
@@ -0,0 +1,14 @@
+/*
+ * Xilinx MicroZED board DTS
+ *
+ * Copyright (C) 2013 Xilinx, Inc.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+/dts-v1/;
+#include "zynq-7000.dtsi"
+
+/ {
+       model = "Zynq MicroZED Board";
+       compatible = "xlnx,zynq-microzed", "xlnx,zynq-7000";
+};
diff --git a/arch/arm/dts/zynq-zc702.dts b/arch/arm/dts/zynq-zc702.dts
new file mode 100644 (file)
index 0000000..667dc28
--- /dev/null
@@ -0,0 +1,14 @@
+/*
+ * Xilinx ZC702 board DTS
+ *
+ * Copyright (C) 2013 Xilinx, Inc.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+/dts-v1/;
+#include "zynq-7000.dtsi"
+
+/ {
+       model = "Zynq ZC702 Board";
+       compatible = "xlnx,zynq-zc702", "xlnx,zynq-7000";
+};
diff --git a/arch/arm/dts/zynq-zc706.dts b/arch/arm/dts/zynq-zc706.dts
new file mode 100644 (file)
index 0000000..526fc88
--- /dev/null
@@ -0,0 +1,14 @@
+/*
+ * Xilinx ZC706 board DTS
+ *
+ * Copyright (C) 2013 Xilinx, Inc.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+/dts-v1/;
+#include "zynq-7000.dtsi"
+
+/ {
+       model = "Zynq ZC706 Board";
+       compatible = "xlnx,zynq-zc706", "xlnx,zynq-7000";
+};
diff --git a/arch/arm/dts/zynq-zc770-xm010.dts b/arch/arm/dts/zynq-zc770-xm010.dts
new file mode 100644 (file)
index 0000000..8b542a1
--- /dev/null
@@ -0,0 +1,14 @@
+/*
+ * Xilinx ZC770 XM010 board DTS
+ *
+ * Copyright (C) 2013 Xilinx, Inc.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+/dts-v1/;
+#include "zynq-7000.dtsi"
+
+/ {
+       model = "Zynq ZC770 XM010 Board";
+       compatible = "xlnx,zynq-zc770-xm010", "xlnx,zynq-7000";
+};
diff --git a/arch/arm/dts/zynq-zc770-xm012.dts b/arch/arm/dts/zynq-zc770-xm012.dts
new file mode 100644 (file)
index 0000000..0379a07
--- /dev/null
@@ -0,0 +1,14 @@
+/*
+ * Xilinx ZC770 XM012 board DTS
+ *
+ * Copyright (C) 2013 Xilinx, Inc.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+/dts-v1/;
+#include "zynq-7000.dtsi"
+
+/ {
+       model = "Zynq ZC770 XM012 Board";
+       compatible = "xlnx,zynq-zc770-xm012", "xlnx,zynq-7000";
+};
diff --git a/arch/arm/dts/zynq-zc770-xm013.dts b/arch/arm/dts/zynq-zc770-xm013.dts
new file mode 100644 (file)
index 0000000..a4f9e05
--- /dev/null
@@ -0,0 +1,14 @@
+/*
+ * Xilinx ZC770 XM013 board DTS
+ *
+ * Copyright (C) 2013 Xilinx, Inc.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+/dts-v1/;
+#include "zynq-7000.dtsi"
+
+/ {
+       model = "Zynq ZC770 XM013 Board";
+       compatible = "xlnx,zynq-zc770-xm013", "xlnx,zynq-7000";
+};
diff --git a/arch/arm/dts/zynq-zed.dts b/arch/arm/dts/zynq-zed.dts
new file mode 100644 (file)
index 0000000..91a5deb
--- /dev/null
@@ -0,0 +1,14 @@
+/*
+ * Xilinx ZED board DTS
+ *
+ * Copyright (C) 2013 Xilinx, Inc.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+/dts-v1/;
+#include "zynq-7000.dtsi"
+
+/ {
+       model = "Zynq ZED Board";
+       compatible = "xlnx,zynq-zed", "xlnx,zynq-7000";
+};
index ee5c872f51e6d49e3e878c4e8d93c9ac59bb805a..9dda59df04b8526e9879b664d21af7174fb453de 100644 (file)
@@ -25,7 +25,7 @@ obj-$(CONFIG_CMD_HDMIDETECT) += cmd_hdmidet.o
 
 $(OBJTREE)/$(patsubst "%",%,$(CONFIG_IMX_CONFIG)).cfgtmp: $(OBJTREE)/%.cfgtmp : $(SRCTREE)/%
        mkdir -p $(dir $@)
-       $(CC) -E -x c $< $(CPPFLAGS) -o $@
+       $(CPP) $(cpp_flags) -x c -o $@ $<
 
 $(OBJTREE)/u-boot.imx: $(OBJTREE)/u-boot.bin $(OBJTREE)/$(patsubst "%",%,$(CONFIG_IMX_CONFIG)).cfgtmp
        $(OBJTREE)/tools/mkimage -n $(filter-out %.bin,$^) -T imximage \
index 87b7d367b9d881eb4068ef7e1baa606cc5d6990b..2e5c356e448746e225636b920820ffb867a43400 100644 (file)
 u32 get_cpu_rev(void);
 u32 get_sysboot_value(void);
 
-#ifdef CONFIG_DISPLAY_CPUINFO
-int print_cpuinfo(void);
-#endif
-
 extern struct ctrl_stat *cstat;
 u32 get_device_type(void);
 void save_omap_boot_params(void);
index 2ca89477305f1c3255b6f08bfbd0791fdd2d15b8..b69165b5ee2ffdc5abb2e02a039ef2b2d46ea190 100644 (file)
 #define TI_SATA_IDLE_SMART_WAKE                        (0x3 << 2)
 #define TI_SATA_IDLE_SMART                     (0x2 << 2)
 
-#ifdef CONFIG_SCSI_AHCI_PLAT
-int omap_sata_init(void);
-#else
-static inline int omap_sata_init(void)
-{
-       return 0;
-}
-#endif /* CONFIG_SCSI_AHCI_PLAT */
-
 #endif /* _TI_SATA_H */
index 2d5a62e660338f1c2ed6bd8f2bc8fad4c43177bc..4a279cf0525b56a65cd9ed3a58bdd62bc8ab32e8 100644 (file)
@@ -15,6 +15,7 @@
 #define BOOT_DEVICE_MMC1        5
 #define BOOT_DEVICE_MMC2        6
 #define BOOT_DEVICE_MMC2_2     7
+#define BOOT_DEVICE_SATA       9
 #define BOOT_DEVICE_SPI                10
 #define BOOT_DEVICE_UART       0x43
 
index b770e25d87bafa78a533fe851aaec993ff973c43..c320a35166b82009a7cc623b7460754294bf3ba5 100644 (file)
@@ -197,8 +197,6 @@ static int arm_pci_init(void)
  */
 typedef int (init_fnc_t) (void);
 
-int print_cpuinfo(void);
-
 void __dram_init_banksize(void)
 {
        gd->bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE;
@@ -250,9 +248,7 @@ init_fnc_t *init_sequence[] = {
        serial_init,            /* serial communications setup */
        console_init_f,         /* stage 1 init of console */
        display_banner,         /* say that we are here */
-#if defined(CONFIG_DISPLAY_CPUINFO)
        print_cpuinfo,          /* display cpu info (and speed) */
-#endif
 #if defined(CONFIG_DISPLAY_BOARDINFO)
        checkboard,             /* display board info */
 #endif
@@ -280,7 +276,7 @@ void board_init_f(ulong bootflag)
        gd->mon_len = _bss_end_ofs;
 #ifdef CONFIG_OF_EMBED
        /* Get a pointer to the FDT */
-       gd->fdt_blob = _binary_dt_dtb_start;
+       gd->fdt_blob = __dtb_db_begin;
 #elif defined CONFIG_OF_SEPARATE
        /* FDT is at end of image */
        gd->fdt_blob = (void *)(_end_ofs + _TEXT_BASE);
index 73fa79855f59bf38715d55160010ce25d2cedbff..c752025aaf73e86ff81f3714a916b968e66411d8 100644 (file)
@@ -12,7 +12,7 @@ CONFIG_STANDALONE_LOAD_ADDR ?= 0x1000 -m elf32bfin
 ifeq ($(CONFIG_BFIN_CPU),)
 CONFIG_BFIN_CPU := \
        $(shell awk '$$2 == "CONFIG_BFIN_CPU" { print $$3 }' \
-               $(src)include/configs/$(BOARD).h)
+               $(srctree)/include/configs/$(BOARD).h)
 else
 CONFIG_BFIN_CPU := $(strip $(CONFIG_BFIN_CPU:"%"=%))
 endif
@@ -28,10 +28,10 @@ PLATFORM_RELFLAGS += -ffunction-sections -fdata-sections
 PLATFORM_RELFLAGS += -mcpu=$(CONFIG_BFIN_CPU)
 
 ifneq ($(CONFIG_BFIN_BOOT_MODE),BFIN_BOOT_BYPASS)
-ALL-y += $(obj)u-boot.ldr
+ALL-y += u-boot.ldr
 endif
 ifeq ($(CONFIG_ENV_IS_EMBEDDED_IN_LDR),y)
-CREATE_LDR_ENV = $(obj)tools/envcrc --binary > $(obj)env-ldr.o
+CREATE_LDR_ENV = tools/envcrc --binary > env-ldr.o
 HOSTCFLAGS_NOPED_ADSP := \
        $(shell $(CPP) -dD - -mcpu=$(CONFIG_BFIN_CPU) </dev/null \
                | awk '$$2 ~ /ADSP/ { print "-D" $$2 }')
@@ -47,10 +47,10 @@ LDR_FLAGS-$(CONFIG_BFIN_BOOTROM_USES_EVT1) += -J
 
 LDR_FLAGS += --bmode $(subst BFIN_BOOT_,,$(CONFIG_BFIN_BOOT_MODE))
 LDR_FLAGS += --use-vmas
-LDR_FLAGS += --initcode $(obj)$(CPUDIR)/initcode.o
+LDR_FLAGS += --initcode $(CPUDIR)/initcode.o
 ifneq ($(CONFIG_BFIN_BOOT_MODE),BFIN_BOOT_UART)
 LDR_FLAGS-$(CONFIG_ENV_IS_EMBEDDED_IN_LDR) += \
-       --punchit $$(($(CONFIG_ENV_OFFSET))):$$(($(CONFIG_ENV_SIZE))):$(obj)env-ldr.o
+       --punchit $$(($(CONFIG_ENV_OFFSET))):$$(($(CONFIG_ENV_SIZE))):env-ldr.o
 endif
 ifneq (,$(findstring s,$(MAKEFLAGS)))
 LDR_FLAGS += --quiet
index a61594ab72a9c94c6a4791b651a31e4703abf5b0..426292f988d9511b3573086adfd3c929bd06fe8d 100644 (file)
@@ -22,12 +22,13 @@ obj-y  += reset.o
 obj-y  += traps.o
 
 extra-y += check_initcode
+clean-files := init.lds
 
 # make sure our initcode (which goes into LDR) does not
 # have relocs or external references
-$(obj)initcode.o: CFLAGS += -fno-function-sections -fno-data-sections
+CFLAGS_REMOVE_initcode.o := -ffunction-sections -fdata-sections
 READINIT = env LC_ALL=C $(CROSS_COMPILE)readelf -s $<
-$(obj)check_initcode: $(obj)initcode.o
+$(obj)/check_initcode: $(obj)/initcode.o
 ifneq ($(CONFIG_BFIN_BOOT_MODE),BFIN_BOOT_BYPASS)
        @if $(READINIT) | grep '\<GLOBAL\>.*\<UND\>' ; then \
                echo "$< contains external references!" 1>&2 ; \
@@ -35,7 +36,6 @@ ifneq ($(CONFIG_BFIN_BOOT_MODE),BFIN_BOOT_BYPASS)
        fi
 endif
 
-$(obj)init.lds: init.lds.S
-       $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P $^ -o $@
-$(obj)init.elf: $(obj)init.lds $(obj)init.o $(obj)initcode.o
+CPPFLAGS_init.lds := -ansi
+$(obj)/init.elf: $(obj)/init.lds $(obj)/init.o $(obj)/initcode.o
        $(LD) $(LDFLAGS) -T $^ -o $@
index a5c552f38a63bb0871916cfdfb13304007107a8a..4ba7bf694934d9c2aef6dbf9dbda7244049f6419 100644 (file)
@@ -9,7 +9,10 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-CFLAGS += -DBFIN_BOARD_NAME='"$(BOARD)"'
+# Unnecessary.
+# Use CONFIG_SYS_BOARD instead of BFIN_BOARD_NAME
+# and delete this.
+ccflags-y += -DBFIN_BOARD_NAME='"$(BOARD)"'
 
 obj-y  += ins.o
 obj-y  += memcmp.o
index a47fd56739d5a9452f04256a4e8d12d45f895ec7..e0c5db60f4efb6d265fa23611f1af9101897fbfc 100644 (file)
@@ -5,7 +5,7 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-# CFLAGS += -DET_DEBUG
+# ccflags-y += -DET_DEBUG
 
 extra-y        = start.o
 obj-y  = cpu.o speed.o cpu_init.o interrupts.o
index a47fd56739d5a9452f04256a4e8d12d45f895ec7..e0c5db60f4efb6d265fa23611f1af9101897fbfc 100644 (file)
@@ -5,7 +5,7 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-# CFLAGS += -DET_DEBUG
+# ccflags-y += -DET_DEBUG
 
 extra-y        = start.o
 obj-y  = cpu.o speed.o cpu_init.o interrupts.o
index d9bf9008ecc5a3d9f9393b87857e17aecd1e0606..b92fd864c4d7312610b5bcf1aac6fe51bda24994 100644 (file)
@@ -5,7 +5,7 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-# CFLAGS += -DET_DEBUG
+# ccflags-y += -DET_DEBUG
 
 extra-y        = start.o
 obj-y  = interrupts.o cpu.o speed.o cpu_init.o
index 97aa3f16a9fb62f3cda7134e39bc009ab21fbd08..9c53c50c4870efdcabe426ca2984300c232e01d0 100644 (file)
@@ -5,7 +5,7 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-# CFLAGS += -DET_DEBUG
+# ccflags-y += -DET_DEBUG
 
 extra-y := start.o
 obj-y  = cpu.o speed.o cpu_init.o interrupts.o
index b506719c8f0b27860a2b267a25e46ad1b4941720..9be91ed1572043a4e42d4fefd0cc98e9d5f227dc 100644 (file)
@@ -5,7 +5,7 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-# CFLAGS += -DET_DEBUG
+# ccflags-y += -DET_DEBUG
 
 extra-y        = start.o
 obj-y  = cpu.o speed.o cpu_init.o interrupts.o pci.o
index 0fa50bfccd892ee3bf808c8a95ffb93a7ca2babf..4f82099b6b239e2da79408583806aa05591d6136 100644 (file)
@@ -5,7 +5,7 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-# CFLAGS += -DET_DEBUG
+# ccflags-y += -DET_DEBUG
 
 extra-y = start.o
 obj-y  = cpu.o speed.o cpu_init.o pci.o interrupts.o slicetimer.o
diff --git a/arch/microblaze/dts/.gitignore b/arch/microblaze/dts/.gitignore
new file mode 100644 (file)
index 0000000..b60ed20
--- /dev/null
@@ -0,0 +1 @@
+*.dtb
diff --git a/arch/microblaze/dts/Makefile b/arch/microblaze/dts/Makefile
new file mode 100644 (file)
index 0000000..6d4a11f
--- /dev/null
@@ -0,0 +1,11 @@
+dtb-y += microblaze-generic.dtb
+
+targets += $(dtb-y)
+
+DTC_FLAGS += -R 4 -p 0x1000
+
+PHONY += dtbs
+dtbs: $(addprefix $(obj)/, $(dtb-y))
+       @:
+
+clean-files := *.dtb
diff --git a/arch/microblaze/dts/microblaze-generic.dts b/arch/microblaze/dts/microblaze-generic.dts
new file mode 100644 (file)
index 0000000..2033309
--- /dev/null
@@ -0,0 +1,7 @@
+/dts-v1/;
+/ {
+       #address-cells = <1>;
+       #size-cells = <1>;
+       aliases {
+       } ;
+} ;
index 59956a8673d46e5a56a604dc9612ec7634cf794e..fafeeaebd6395acd9353bf92a4c1c3eaae0492ee 100644 (file)
@@ -87,7 +87,7 @@ void board_init_f(ulong not_used)
 
 #ifdef CONFIG_OF_EMBED
        /* Get a pointer to the FDT */
-       gd->fdt_blob = _binary_dt_dtb_start;
+       gd->fdt_blob = __dtb_dt_begin;
 #elif defined CONFIG_OF_SEPARATE
        /* FDT is at end of image */
        gd->fdt_blob = (void *)__end;
diff --git a/arch/microblaze/lib/time.c b/arch/microblaze/lib/time.c
deleted file mode 100644 (file)
index e69de29..0000000
index 067f8715259385da245a7b70516feee7a14124ff..7ee7faae8f749d2a33dd0475d94307ddd1a88c60 100644 (file)
@@ -21,4 +21,4 @@ else
 PLATFORM_LDFLAGS  += -m elf32ltsmip
 endif
 
-CONFIG_STANDALONE_LOAD_ADDR ?= 0x80200000 -T mips.lds
+CONFIG_STANDALONE_LOAD_ADDR ?= 0x80200000 -T $(srctree)/$(src)/mips.lds
index d1a8b2c7aa35ced56cebbf05f9c04873dbcbf40f..02113a1f09161b5862d66a7397a50011e19ea281 100644 (file)
@@ -21,4 +21,4 @@ else
 PLATFORM_LDFLAGS  += -m elf64ltsmip
 endif
 
-CONFIG_STANDALONE_LOAD_ADDR ?= 0xffffffff80200000 -T mips64.lds
+CONFIG_STANDALONE_LOAD_ADDR ?= 0xffffffff80200000 -T $(srctree)/$(src)/mips64.lds
index d81da210170529c36c383b03d2a2becc2a3746f8..00b0fd9c9c63e8525c90aada51ffc22656cf709d 100644 (file)
@@ -12,4 +12,4 @@ else
 PLATFORM_LDFLAGS  += -m elf32ltsmip
 endif
 
-CONFIG_STANDALONE_LOAD_ADDR ?= 0x80200000 -T mips.lds
+CONFIG_STANDALONE_LOAD_ADDR ?= 0x80200000 -T $(srctree)/$(src)/mips.lds
index e93e3a8c28d229ab8ac08867bc951b86a9e0b4ac..550f8a440e6dbd44feab981ca587f8d80378c330 100644 (file)
@@ -10,7 +10,7 @@
 
 CROSS_COMPILE ?= nds32le-linux-
 
-CONFIG_STANDALONE_LOAD_ADDR = 0x300000 -T nds32.lds
+CONFIG_STANDALONE_LOAD_ADDR = 0x300000 -T $(srctree)/$(src)/nds32.lds
 
 PLATFORM_RELFLAGS      += -fno-strict-aliasing -fno-common -mrelax
 PLATFORM_RELFLAGS      += -gdwarf-2
index bb3550eb47636b06d3ef6e0c86c21a3ce8ba86b7..206d304d4c5ff597f41b248c7c2af01c525d93f3 100644 (file)
@@ -9,4 +9,7 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
+# necessary to create built-in.o
+obj- := __dummy__.o
+
 extra-y        = start.o
index d40bdab1e1428906096c1ccd8e39682114f640ec..f83fd5ecf4d2045a8d039163e18d3123add3631f 100644 (file)
@@ -5,7 +5,7 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-# CFLAGS += -DET_DEBUG
+# ccflags-y += -DET_DEBUG
 
 extra-y += start.o
 extra-y += traps.o
index a706d3cc70f5a5a7ae614b6aa659c97b72979212..e6d8be51cae831a60367cc233299e1fd98ef0811 100644 (file)
@@ -54,11 +54,11 @@ ifndef CONFIG_SPL_BUILD
 # Workaround for local bus unaligned access problems
 # on MPC512x and MPC5200
 ifdef CONFIG_MPC512X
-$(obj)ppcstring.o: AFLAGS += -Dmemcpy=__memcpy
+AFLAGS_ppcstring.o += -Dmemcpy=__memcpy
 obj-y += memcpy_mpc5200.o
 endif
 ifdef CONFIG_MPC5200
-$(obj)ppcstring.o: AFLAGS += -Dmemcpy=__memcpy
+AFLAGS_ppcstring.o += -Dmemcpy=__memcpy
 obj-y += memcpy_mpc5200.o
 endif
 endif
index b564294a847891eac0d69470b2ab3c5954194433..63dededf70f85125bbb67a9dce1c3cb31e6a23e6 100644 (file)
 obj-y  := cpu.o os.o start.o state.o
 
 # os.c is build in the system environment, so needs standard includes
-$(obj)os.o: CFLAGS := $(filter-out -nostdinc,\
-       $(patsubst -I%,-idirafter%,$(CFLAGS)))
-$(obj).depend.os: CPPFLAGS := $(filter-out -nostdinc,\
-       $(patsubst -I%,-idirafter%,$(CPPFLAGS)))
+# CFLAGS_REMOVE_os.o cannot be used to drop header include path
+quiet_cmd_cc_os.o = CC $(quiet_modtag)  $@
+cmd_cc_os.o = $(CC) $(filter-out -nostdinc, \
+       $(patsubst -I%,-idirafter%,$(c_flags))) -c -o $@ $<
+
+$(obj)/os.o: $(src)/os.c FORCE
+       $(call if_changed_dep,cc_os.o)
index e94e7cbab5600e21d0fc0b9b688281e057f46be7..9bb37241d2e57de53c4ca849fcf3e4d9db6102d7 100644 (file)
@@ -7,6 +7,7 @@
 
 CROSS_COMPILE ?= sparc-elf-
 
-CONFIG_STANDALONE_LOAD_ADDR ?= 0x00000000 -L $(gcclibdir) -T sparc.lds
+CONFIG_STANDALONE_LOAD_ADDR ?= 0x00000000 -L $(gcclibdir) \
+                       -T $(srctree)/$(src)/sparc.lds
 
 PLATFORM_CPPFLAGS += -DCONFIG_SPARC -D__sparc__
diff --git a/arch/x86/dts/.gitignore b/arch/x86/dts/.gitignore
new file mode 100644 (file)
index 0000000..b60ed20
--- /dev/null
@@ -0,0 +1 @@
+*.dtb
diff --git a/arch/x86/dts/Makefile b/arch/x86/dts/Makefile
new file mode 100644 (file)
index 0000000..48265ef
--- /dev/null
@@ -0,0 +1,12 @@
+dtb-y += link.dtb \
+       alex.dtb
+
+targets += $(dtb-y)
+
+DTC_FLAGS += -R 4 -p 0x1000
+
+PHONY += dtbs
+dtbs: $(addprefix $(obj)/, $(dtb-y))
+       @:
+
+clean-files := *.dtb
diff --git a/arch/x86/dts/alex.dts b/arch/x86/dts/alex.dts
new file mode 100644 (file)
index 0000000..2f13544
--- /dev/null
@@ -0,0 +1,24 @@
+/dts-v1/;
+
+/include/ "coreboot.dtsi"
+
+/ {
+       #address-cells = <1>;
+       #size-cells = <1>;
+       model = "Google Alex";
+       compatible = "google,alex", "intel,atom-pineview";
+
+       config {
+              silent_console = <0>;
+       };
+
+       gpio: gpio {};
+
+       serial {
+               reg = <0x3f8 8>;
+               clock-frequency = <115200>;
+       };
+
+       chosen { };
+       memory { device_type = "memory"; reg = <0 0>; };
+};
diff --git a/arch/x86/dts/link.dts b/arch/x86/dts/link.dts
new file mode 100644 (file)
index 0000000..4a37dac
--- /dev/null
@@ -0,0 +1,35 @@
+/dts-v1/;
+
+/include/ "coreboot.dtsi"
+
+/ {
+       #address-cells = <1>;
+       #size-cells = <1>;
+       model = "Google Link";
+       compatible = "google,link", "intel,celeron-ivybridge";
+
+       config {
+              silent_console = <0>;
+       };
+
+       gpio: gpio {};
+
+       serial {
+               reg = <0x3f8 8>;
+               clock-frequency = <115200>;
+       };
+
+       chosen { };
+       memory { device_type = "memory"; reg = <0 0>; };
+
+       spi {
+               #address-cells = <1>;
+               #size-cells = <0>;
+               compatible = "intel,ich9";
+               spi-flash@0 {
+                       reg = <0>;
+                       compatible = "winbond,w25q64", "spi-flash";
+                       memory-map = <0xff800000 0x00800000>;
+               };
+       };
+};
index 638f79069ccaa09269436d65db3dbe1f950aa08c..a35d062792a4f20a4cada129816bb2be2cf8a90f 100644 (file)
@@ -23,5 +23,5 @@ obj-$(CONFIG_CMD_ZBOOT)       += zimage.o
 LIBGCC := $(notdir $(NORMAL_LIBGCC))
 extra-y := $(LIBGCC)
 
-$(obj)$(LIBGCC): $(NORMAL_LIBGCC)
+$(obj)/$(LIBGCC): $(NORMAL_LIBGCC)
        $(OBJCOPY) $< $@ --prefix-symbols=__normal_
index 582c0ffe245ca6739d40347408a89bc80c728744..b5d937feb3a5a10c9ed04e83c4f0718de602c16c 100644 (file)
@@ -92,7 +92,7 @@ int find_fdt(void)
 {
 #ifdef CONFIG_OF_EMBED
        /* Get a pointer to the FDT */
-       gd->fdt_blob = _binary_dt_dtb_start;
+       gd->fdt_blob = __dtb_dt_begin;
 #elif defined CONFIG_OF_SEPARATE
        /* FDT is at end of image */
        gd->fdt_blob = (ulong *)&_end;
index d7e7894831d090d2f78de734c1f4a7c4eb1041e1..c7cfacacba8f601e2eec3c58efce06e31a94cb12 100644 (file)
@@ -9,7 +9,7 @@
 
 UBL_CONFIG = $(SRCTREE)/board/$(BOARDDIR)/ublimage.cfg
 ifndef CONFIG_SPL_BUILD
-ALL-y += $(obj)u-boot.ubl
+ALL-y += u-boot.ubl
 else
 # as SPL_TEXT_BASE is not page-aligned, we need for some
 # linkers the -n flag (Do not page align data), to prevent
index 576066bef13f3bd06a8b5d93e9206189a0b95462..a960eb60028b52e187ecabf04341e2074de53c38 100644 (file)
@@ -12,6 +12,7 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
+#if defined(CONFIG_DISPLAY_CPUINFO)
 /*
  * Print CPU information
  */
@@ -20,6 +21,7 @@ int print_cpuinfo(void)
        puts("CPU   : Altera SOCFPGA Platform\n");
        return 0;
 }
+#endif
 
 /*
  * Print Board information
diff --git a/board/avionic-design/dts/tegra20-medcom-wide.dts b/board/avionic-design/dts/tegra20-medcom-wide.dts
deleted file mode 100644 (file)
index a9a07f9..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-/dts-v1/;
-
-#include "tegra20-tamonten.dtsi"
-
-/ {
-       model = "Avionic Design Medcom-Wide";
-       compatible = "ad,medcom-wide", "nvidia,tegra20";
-
-       aliases {
-               usb0 = "/usb@c5008000";
-               sdhci0 = "/sdhci@c8000600";
-       };
-
-       memory {
-               reg = <0x00000000 0x20000000>;
-       };
-
-       host1x {
-               status = "okay";
-
-               dc@54200000 {
-                       status = "okay";
-
-                       rgb {
-                               nvidia,panel = <&lcd_panel>;
-                               status = "okay";
-                       };
-               };
-       };
-
-       serial@70006300 {
-               clock-frequency = <216000000>;
-       };
-
-       i2c@7000c000 {
-               status = "disabled";
-       };
-
-       i2c@7000c400 {
-               status = "disabled";
-       };
-
-       i2c@7000c500 {
-               status = "disabled";
-       };
-
-       i2c@7000d000 {
-               status = "disabled";
-       };
-
-       usb@c5000000 {
-               status = "disabled";
-       };
-
-       usb@c5004000 {
-               status = "disabled";
-       };
-
-       lcd_panel: panel {
-               clock = <61715000>;
-               xres = <1366>;
-               yres = <768>;
-               left-margin = <2>;
-               right-margin = <47>;
-               hsync-len = <136>;
-               lower-margin = <21>;
-               upper-margin = <11>;
-               vsync-len = <4>;
-
-               nvidia,bits-per-pixel = <16>;
-               nvidia,pwm = <&pwm 0 500000>;
-               nvidia,backlight-enable-gpios = <&gpio 13 0>; /* PB5 */
-               nvidia,backlight-vdd-gpios = <&gpio 176 0>; /* PW0 */
-               nvidia,lvds-shutdown-gpios = <&gpio 10 0>; /* PB2 */
-               nvidia,panel-timings = <0 0 0 0>;
-       };
-};
diff --git a/board/avionic-design/dts/tegra20-plutux.dts b/board/avionic-design/dts/tegra20-plutux.dts
deleted file mode 100644 (file)
index 20016f2..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/dts-v1/;
-
-#include "tegra20-tamonten.dtsi"
-
-/ {
-       model = "Avionic Design Plutux";
-       compatible = "ad,plutux", "nvidia,tegra20";
-
-       aliases {
-               usb0 = "/usb@c5008000";
-               sdhci0 = "/sdhci@c8000600";
-       };
-
-       memory {
-               reg = <0x00000000 0x20000000>;
-       };
-
-       serial@70006300 {
-               clock-frequency = <216000000>;
-       };
-
-       i2c@7000c000 {
-               status = "disabled";
-       };
-
-       i2c@7000c400 {
-               status = "disabled";
-       };
-
-       i2c@7000c500 {
-               status = "disabled";
-       };
-
-       i2c@7000d000 {
-               status = "disabled";
-       };
-
-       usb@c5000000 {
-               status = "disabled";
-       };
-
-       usb@c5004000 {
-               status = "disabled";
-       };
-};
diff --git a/board/avionic-design/dts/tegra20-tamonten.dtsi b/board/avionic-design/dts/tegra20-tamonten.dtsi
deleted file mode 100644 (file)
index f379622..0000000
+++ /dev/null
@@ -1,500 +0,0 @@
-#include "tegra20.dtsi"
-
-/ {
-       model = "Avionic Design Tamonten SOM";
-       compatible = "ad,tamonten", "nvidia,tegra20";
-
-       memory {
-               reg = <0x00000000 0x20000000>;
-       };
-
-       host1x {
-               hdmi {
-                       vdd-supply = <&hdmi_vdd_reg>;
-                       pll-supply = <&hdmi_pll_reg>;
-
-                       nvidia,ddc-i2c-bus = <&hdmi_ddc>;
-                       nvidia,hpd-gpio = <&gpio 111 0>; /* PN7 */
-               };
-       };
-
-       pinmux {
-               pinctrl-names = "default";
-               pinctrl-0 = <&state_default>;
-
-               state_default: pinmux {
-                       ata {
-                               nvidia,pins = "ata";
-                               nvidia,function = "ide";
-                       };
-                       atb {
-                               nvidia,pins = "atb", "gma", "gme";
-                               nvidia,function = "sdio4";
-                       };
-                       atc {
-                               nvidia,pins = "atc";
-                               nvidia,function = "nand";
-                       };
-                       atd {
-                               nvidia,pins = "atd", "ate", "gmb", "gmd", "gpu",
-                                       "spia", "spib", "spic";
-                               nvidia,function = "gmi";
-                       };
-                       cdev1 {
-                               nvidia,pins = "cdev1";
-                               nvidia,function = "plla_out";
-                       };
-                       cdev2 {
-                               nvidia,pins = "cdev2";
-                               nvidia,function = "pllp_out4";
-                       };
-                       crtp {
-                               nvidia,pins = "crtp";
-                               nvidia,function = "crt";
-                       };
-                       csus {
-                               nvidia,pins = "csus";
-                               nvidia,function = "vi_sensor_clk";
-                       };
-                       dap1 {
-                               nvidia,pins = "dap1";
-                               nvidia,function = "dap1";
-                       };
-                       dap2 {
-                               nvidia,pins = "dap2";
-                               nvidia,function = "dap2";
-                       };
-                       dap3 {
-                               nvidia,pins = "dap3";
-                               nvidia,function = "dap3";
-                       };
-                       dap4 {
-                               nvidia,pins = "dap4";
-                               nvidia,function = "dap4";
-                       };
-                       dta {
-                               nvidia,pins = "dta", "dtd";
-                               nvidia,function = "sdio2";
-                       };
-                       dtb {
-                               nvidia,pins = "dtb", "dtc", "dte";
-                               nvidia,function = "rsvd1";
-                       };
-                       dtf {
-                               nvidia,pins = "dtf";
-                               nvidia,function = "i2c3";
-                       };
-                       gmc {
-                               nvidia,pins = "gmc";
-                               nvidia,function = "uartd";
-                       };
-                       gpu7 {
-                               nvidia,pins = "gpu7";
-                               nvidia,function = "rtck";
-                       };
-                       gpv {
-                               nvidia,pins = "gpv", "slxa", "slxk";
-                               nvidia,function = "pcie";
-                       };
-                       hdint {
-                               nvidia,pins = "hdint";
-                               nvidia,function = "hdmi";
-                       };
-                       i2cp {
-                               nvidia,pins = "i2cp";
-                               nvidia,function = "i2cp";
-                       };
-                       irrx {
-                               nvidia,pins = "irrx", "irtx";
-                               nvidia,function = "uarta";
-                       };
-                       kbca {
-                               nvidia,pins = "kbca", "kbcb", "kbcc", "kbcd",
-                                       "kbce", "kbcf";
-                               nvidia,function = "kbc";
-                       };
-                       lcsn {
-                               nvidia,pins = "lcsn", "ld0", "ld1", "ld2",
-                                       "ld3", "ld4", "ld5", "ld6", "ld7",
-                                       "ld8", "ld9", "ld10", "ld11", "ld12",
-                                       "ld13", "ld14", "ld15", "ld16", "ld17",
-                                       "ldc", "ldi", "lhp0", "lhp1", "lhp2",
-                                       "lhs", "lm0", "lm1", "lpp", "lpw0",
-                                       "lpw1", "lpw2", "lsc0", "lsc1", "lsck",
-                                       "lsda", "lsdi", "lspi", "lvp0", "lvp1",
-                                       "lvs";
-                               nvidia,function = "displaya";
-                       };
-                       owc {
-                               nvidia,pins = "owc", "spdi", "spdo", "uac";
-                               nvidia,function = "rsvd2";
-                       };
-                       pmc {
-                               nvidia,pins = "pmc";
-                               nvidia,function = "pwr_on";
-                       };
-                       rm {
-                               nvidia,pins = "rm";
-                               nvidia,function = "i2c1";
-                       };
-                       sdb {
-                               nvidia,pins = "sdb", "sdc", "sdd";
-                               nvidia,function = "pwm";
-                       };
-                       sdio1 {
-                               nvidia,pins = "sdio1";
-                               nvidia,function = "sdio1";
-                       };
-                       slxc {
-                               nvidia,pins = "slxc", "slxd";
-                               nvidia,function = "spdif";
-                       };
-                       spid {
-                               nvidia,pins = "spid", "spie", "spif";
-                               nvidia,function = "spi1";
-                       };
-                       spig {
-                               nvidia,pins = "spig", "spih";
-                               nvidia,function = "spi2_alt";
-                       };
-                       uaa {
-                               nvidia,pins = "uaa", "uab", "uda";
-                               nvidia,function = "ulpi";
-                       };
-                       uad {
-                               nvidia,pins = "uad";
-                               nvidia,function = "irda";
-                       };
-                       uca {
-                               nvidia,pins = "uca", "ucb";
-                               nvidia,function = "uartc";
-                       };
-                       conf_ata {
-                               nvidia,pins = "ata", "atb", "atc", "atd", "ate",
-                                       "cdev1", "cdev2", "dap1", "dtb", "gma",
-                                       "gmb", "gmc", "gmd", "gme", "gpu7",
-                                       "gpv", "i2cp", "pta", "rm", "slxa",
-                                       "slxk", "spia", "spib", "uac";
-                               nvidia,pull = <0>;
-                               nvidia,tristate = <0>;
-                       };
-                       conf_ck32 {
-                               nvidia,pins = "ck32", "ddrc", "pmca", "pmcb",
-                                       "pmcc", "pmcd", "pmce", "xm2c", "xm2d";
-                               nvidia,pull = <0>;
-                       };
-                       conf_csus {
-                               nvidia,pins = "csus", "spid", "spif";
-                               nvidia,pull = <1>;
-                               nvidia,tristate = <1>;
-                       };
-                       conf_crtp {
-                               nvidia,pins = "crtp", "dap2", "dap3", "dap4",
-                                       "dtc", "dte", "dtf", "gpu", "sdio1",
-                                       "slxc", "slxd", "spdi", "spdo", "spig",
-                                       "uda";
-                               nvidia,pull = <0>;
-                               nvidia,tristate = <1>;
-                       };
-                       conf_ddc {
-                               nvidia,pins = "ddc", "dta", "dtd", "kbca",
-                                       "kbcb", "kbcc", "kbcd", "kbce", "kbcf",
-                                       "sdc";
-                               nvidia,pull = <2>;
-                               nvidia,tristate = <0>;
-                       };
-                       conf_hdint {
-                               nvidia,pins = "hdint", "lcsn", "ldc", "lm1",
-                                       "lpw1", "lsc1", "lsck", "lsda", "lsdi",
-                                       "lvp0", "owc", "sdb";
-                               nvidia,tristate = <1>;
-                       };
-                       conf_irrx {
-                               nvidia,pins = "irrx", "irtx", "sdd", "spic",
-                                       "spie", "spih", "uaa", "uab", "uad",
-                                       "uca", "ucb";
-                               nvidia,pull = <2>;
-                               nvidia,tristate = <1>;
-                       };
-                       conf_lc {
-                               nvidia,pins = "lc", "ls";
-                               nvidia,pull = <2>;
-                       };
-                       conf_ld0 {
-                               nvidia,pins = "ld0", "ld1", "ld2", "ld3", "ld4",
-                                       "ld5", "ld6", "ld7", "ld8", "ld9",
-                                       "ld10", "ld11", "ld12", "ld13", "ld14",
-                                       "ld15", "ld16", "ld17", "ldi", "lhp0",
-                                       "lhp1", "lhp2", "lhs", "lm0", "lpp",
-                                       "lpw0", "lpw2", "lsc0", "lspi", "lvp1",
-                                       "lvs", "pmc";
-                               nvidia,tristate = <0>;
-                       };
-                       conf_ld17_0 {
-                               nvidia,pins = "ld17_0", "ld19_18", "ld21_20",
-                                       "ld23_22";
-                               nvidia,pull = <1>;
-                       };
-               };
-
-               state_i2cmux_ddc: pinmux_i2cmux_ddc {
-                       ddc {
-                               nvidia,pins = "ddc";
-                               nvidia,function = "i2c2";
-                       };
-                       pta {
-                               nvidia,pins = "pta";
-                               nvidia,function = "rsvd4";
-                       };
-               };
-
-               state_i2cmux_pta: pinmux_i2cmux_pta {
-                       ddc {
-                               nvidia,pins = "ddc";
-                               nvidia,function = "rsvd4";
-                       };
-                       pta {
-                               nvidia,pins = "pta";
-                               nvidia,function = "i2c2";
-                       };
-               };
-
-               state_i2cmux_idle: pinmux_i2cmux_idle {
-                       ddc {
-                               nvidia,pins = "ddc";
-                               nvidia,function = "rsvd4";
-                       };
-                       pta {
-                               nvidia,pins = "pta";
-                               nvidia,function = "rsvd4";
-                       };
-               };
-       };
-
-       i2s@70002800 {
-               status = "okay";
-       };
-
-       serial@70006300 {
-               status = "okay";
-       };
-
-       nand-controller@70008000 {
-               nvidia,wp-gpios = <&gpio 23 0>; /* PC7 */
-               nvidia,width = <8>;
-               nvidia,timing = <26 100 20 80 20 10 12 10 70>;
-
-               nand@0 {
-                       reg = <0>;
-                       compatible = "hynix,hy27uf4g2b", "nand-flash";
-               };
-       };
-
-       i2c@7000c000 {
-               clock-frequency = <400000>;
-               status = "okay";
-       };
-
-       i2c@7000c400 {
-               clock-frequency = <100000>;
-               status = "okay";
-       };
-
-       i2cmux {
-               compatible = "i2c-mux-pinctrl";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               i2c-parent = <&{/i2c@7000c400}>;
-
-               pinctrl-names = "ddc", "pta", "idle";
-               pinctrl-0 = <&state_i2cmux_ddc>;
-               pinctrl-1 = <&state_i2cmux_pta>;
-               pinctrl-2 = <&state_i2cmux_idle>;
-
-               hdmi_ddc: i2c@0 {
-                       reg = <0>;
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-               };
-
-               i2c@1 {
-                       reg = <1>;
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-               };
-       };
-
-       i2c@7000d000 {
-               clock-frequency = <400000>;
-               status = "okay";
-
-               pmic: tps6586x@34 {
-                       compatible = "ti,tps6586x";
-                       reg = <0x34>;
-                       interrupts = <0 86 0x4>;
-
-                       ti,system-power-controller;
-
-                       #gpio-cells = <2>;
-                       gpio-controller;
-
-                       sys-supply = <&vdd_5v0_reg>;
-                       vin-sm0-supply = <&sys_reg>;
-                       vin-sm1-supply = <&sys_reg>;
-                       vin-sm2-supply = <&sys_reg>;
-                       vinldo01-supply = <&sm2_reg>;
-                       vinldo23-supply = <&sm2_reg>;
-                       vinldo4-supply = <&sm2_reg>;
-                       vinldo678-supply = <&sm2_reg>;
-                       vinldo9-supply = <&sm2_reg>;
-
-                       regulators {
-                               sys_reg: sys {
-                                       regulator-name = "vdd_sys";
-                                       regulator-always-on;
-                               };
-
-                               sm0 {
-                                       regulator-name = "vdd_sys_sm0,vdd_core";
-                                       regulator-min-microvolt = <1200000>;
-                                       regulator-max-microvolt = <1200000>;
-                                       regulator-always-on;
-                               };
-
-                               sm1 {
-                                       regulator-name = "vdd_sys_sm1,vdd_cpu";
-                                       regulator-min-microvolt = <1000000>;
-                                       regulator-max-microvolt = <1000000>;
-                                       regulator-always-on;
-                               };
-
-                               sm2_reg: sm2 {
-                                       regulator-name = "vdd_sys_sm2,vin_ldo*";
-                                       regulator-min-microvolt = <3700000>;
-                                       regulator-max-microvolt = <3700000>;
-                                       regulator-always-on;
-                               };
-
-                               ldo0 {
-                                       regulator-name = "vdd_ldo0,vddio_pex_clk";
-                                       regulator-min-microvolt = <3300000>;
-                                       regulator-max-microvolt = <3300000>;
-                               };
-
-                               ldo1 {
-                                       regulator-name = "vdd_ldo1,avdd_pll*";
-                                       regulator-min-microvolt = <1100000>;
-                                       regulator-max-microvolt = <1100000>;
-                                       regulator-always-on;
-                               };
-
-                               ldo2 {
-                                       regulator-name = "vdd_ldo2,vdd_rtc";
-                                       regulator-min-microvolt = <1200000>;
-                                       regulator-max-microvolt = <1200000>;
-                               };
-
-                               ldo3 {
-                                       regulator-name = "vdd_ldo3,avdd_usb*";
-                                       regulator-min-microvolt = <3300000>;
-                                       regulator-max-microvolt = <3300000>;
-                                       regulator-always-on;
-                               };
-
-                               ldo4 {
-                                       regulator-name = "vdd_ldo4,avdd_osc,vddio_sys";
-                                       regulator-min-microvolt = <1800000>;
-                                       regulator-max-microvolt = <1800000>;
-                                       regulator-always-on;
-                               };
-
-                               ldo5 {
-                                       regulator-name = "vdd_ldo5,vcore_mmc";
-                                       regulator-min-microvolt = <2850000>;
-                                       regulator-max-microvolt = <2850000>;
-                               };
-
-                               ldo6 {
-                                       regulator-name = "vdd_ldo6,avdd_vdac";
-                                       /*
-                                        * According to the Tegra 2 Automotive
-                                        * DataSheet, a typical value for this
-                                        * would be 2.8V, but the PMIC only
-                                        * supports 2.85V.
-                                        */
-                                       regulator-min-microvolt = <2850000>;
-                                       regulator-max-microvolt = <2850000>;
-                               };
-
-                               hdmi_vdd_reg: ldo7 {
-                                       regulator-name = "vdd_ldo7,avdd_hdmi";
-                                       regulator-min-microvolt = <3300000>;
-                                       regulator-max-microvolt = <3300000>;
-                               };
-
-                               hdmi_pll_reg: ldo8 {
-                                       regulator-name = "vdd_ldo8,avdd_hdmi_pll";
-                                       regulator-min-microvolt = <1800000>;
-                                       regulator-max-microvolt = <1800000>;
-                               };
-
-                               ldo9 {
-                                       regulator-name = "vdd_ldo9,vdd_ddr_rx,avdd_cam";
-                                       /*
-                                        * According to the Tegra 2 Automotive
-                                        * DataSheet, a typical value for this
-                                        * would be 2.8V, but the PMIC only
-                                        * supports 2.85V.
-                                        */
-                                       regulator-min-microvolt = <2850000>;
-                                       regulator-max-microvolt = <2850000>;
-                                       regulator-always-on;
-                               };
-
-                               ldo_rtc {
-                                       regulator-name = "vdd_rtc_out";
-                                       regulator-min-microvolt = <3300000>;
-                                       regulator-max-microvolt = <3300000>;
-                                       regulator-always-on;
-                               };
-                       };
-               };
-
-               temperature-sensor@4c {
-                       compatible = "onnn,nct1008";
-                       reg = <0x4c>;
-               };
-       };
-
-       pmc {
-               nvidia,invert-interrupt;
-       };
-
-       usb@c5008000 {
-               status = "okay";
-       };
-
-       sdhci@c8000600 {
-               cd-gpios = <&gpio 58 1>; /* gpio PH2 */
-               wp-gpios = <&gpio 59 0>; /* gpio PH3 */
-               bus-width = <4>;
-               status = "okay";
-       };
-
-       regulators {
-               compatible = "simple-bus";
-
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               vdd_5v0_reg: regulator@0 {
-                       compatible = "regulator-fixed";
-                       reg = <0>;
-                       regulator-name = "vdd_5v0";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-always-on;
-               };
-       };
-};
diff --git a/board/avionic-design/dts/tegra20-tec.dts b/board/avionic-design/dts/tegra20-tec.dts
deleted file mode 100644 (file)
index 4c1b08d..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-/dts-v1/;
-
-#include "tegra20-tamonten.dtsi"
-
-/ {
-       model = "Avionic Design Tamonten Evaluation Carrier";
-       compatible = "ad,tec", "nvidia,tegra20";
-
-       aliases {
-               usb0 = "/usb@c5008000";
-               sdhci0 = "/sdhci@c8000600";
-       };
-
-       memory {
-               reg = <0x00000000 0x20000000>;
-       };
-
-       host1x {
-               status = "okay";
-
-               dc@54200000 {
-                       status = "okay";
-
-                       rgb {
-                               nvidia,panel = <&lcd_panel>;
-                               status = "okay";
-                       };
-               };
-       };
-
-       serial@70006300 {
-               clock-frequency = <216000000>;
-       };
-
-       i2c@7000c000 {
-               status = "disabled";
-       };
-
-       i2c@7000c400 {
-               status = "disabled";
-       };
-
-       i2c@7000c500 {
-               status = "disabled";
-       };
-
-       i2c@7000d000 {
-               status = "disabled";
-       };
-
-       usb@c5000000 {
-               status = "disabled";
-       };
-
-       usb@c5004000 {
-               status = "disabled";
-       };
-
-       lcd_panel: panel {
-               clock = <33260000>;
-               xres = <800>;
-               yres = <480>;
-               left-margin = <120>;
-               right-margin = <120>;
-               hsync-len = <16>;
-               lower-margin = <15>;
-               upper-margin = <15>;
-               vsync-len = <15>;
-
-               nvidia,bits-per-pixel = <16>;
-               nvidia,pwm = <&pwm 0 500000>;
-               nvidia,backlight-enable-gpios = <&gpio 13 0>; /* PB5 */
-               nvidia,backlight-vdd-gpios = <&gpio 176 0>; /* PW0 */
-               nvidia,lvds-shutdown-gpios = <&gpio 10 0>; /* PB2 */
-               nvidia,panel-timings = <0 0 0 0>;
-       };
-};
diff --git a/board/avionic-design/dts/tegra30-tamonten.dtsi b/board/avionic-design/dts/tegra30-tamonten.dtsi
deleted file mode 100644 (file)
index 50d5762..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-#include "tegra30.dtsi"
-
-/ {
-       model = "Avionic Design Tamonten NG";
-       compatible = "ad,tamonten-ng", "nvidia,tegra30";
-
-       memory {
-               reg = <0x80000000 0x40000000>;
-       };
-
-       aliases {
-               i2c0 = "/i2c@7000c000";
-               i2c1 = "/i2c@7000c700";
-               i2c2 = "/i2c@7000c400";
-               i2c3 = "/i2c@7000c500";
-               i2c4 = "/i2c@7000d000";
-               sdhci0 = "/sdhci@78000600";
-               sdhci1 = "/sdhci@78000400";
-               sdhci2 = "/sdhci@78000000";
-               usb0 = "/usb@7d008000";
-       };
-
-       /* GEN1 */
-       i2c@7000c000 {
-               status = "okay";
-               clock-frequency = <100000>;
-       };
-
-       /* GEN2 */
-       i2c@7000c400 {
-               clock-frequency = <100000>;
-       };
-
-       /* CAM */
-       i2c@7000c500 {
-               status = "okay";
-               clock-frequency = <100000>;
-       };
-
-       /* DDC */
-       i2c@7000c700 {
-               status = "okay";
-               clock-frequency = <100000>;
-       };
-
-       /* PWR */
-       i2c@7000d000 {
-               status = "okay";
-               clock-frequency = <100000>;
-       };
-
-       /* SD slot on the base board */
-       sdhci@78000400 {
-               cd-gpios = <&gpio 69 1>; /* gpio PI5 */
-               wp-gpios = <&gpio 67 0>; /* gpio PI3 */
-               bus-width = <4>;
-       };
-
-       /* EMMC on the COM module */
-       sdhci@78000600 {
-               status = "okay";
-               bus-width = <8>;
-       };
-
-       usb@7d008000 {
-               status = "okay";
-       };
-
-};
diff --git a/board/avionic-design/dts/tegra30-tec-ng.dts b/board/avionic-design/dts/tegra30-tec-ng.dts
deleted file mode 100644 (file)
index 8a69e81..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-/dts-v1/;
-
-#include "tegra30-tamonten.dtsi"
-
-/ {
-       model = "Avionic Design Tamontenâ„¢ NG Evaluation Carrier";
-       compatible = "ad,tec-ng", "nvidia,tegra30";
-
-       /* GEN2 */
-       i2c@7000c400 {
-               status = "okay";
-       };
-
-       /* SD card slot */
-       sdhci@78000400 {
-               status = "okay";
-       };
-};
index 87e19123b0427f9cf8abf92bf3e7b7401a9de2fe..bcf7ccfe2acb3957a59540ea302bef9e702c27b4 100644 (file)
@@ -9,4 +9,4 @@
 
 obj-y  := ../common/tamonten.o
 
-include ../../nvidia/common/common.mk
+include $(srctree)/board/nvidia/common/common.mk
index 87e19123b0427f9cf8abf92bf3e7b7401a9de2fe..bcf7ccfe2acb3957a59540ea302bef9e702c27b4 100644 (file)
@@ -9,4 +9,4 @@
 
 obj-y  := ../common/tamonten.o
 
-include ../../nvidia/common/common.mk
+include $(srctree)/board/nvidia/common/common.mk
index 79d86026261be586889202f6c25f927c6e3d3fe0..a556b92e8ed50da6007cc2de2009fd3a0dd89495 100644 (file)
@@ -7,4 +7,4 @@
 
 obj-y  := ../common/tamonten-ng.o
 
-include ../../nvidia/common/common.mk
+include $(srctree)/board/nvidia/common/common.mk
index 87e19123b0427f9cf8abf92bf3e7b7401a9de2fe..bcf7ccfe2acb3957a59540ea302bef9e702c27b4 100644 (file)
@@ -9,4 +9,4 @@
 
 obj-y  := ../common/tamonten.o
 
-include ../../nvidia/common/common.mk
+include $(srctree)/board/nvidia/common/common.mk
index f1ef9bf682dde110e7a1f50f0cf5cc853d79a953..0d3df2dbd90209ee815c93a3c6a114625c9f2267 100644 (file)
@@ -7,6 +7,7 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-CFLAGS_lib += -O2
-CFLAGS_lib/lzma += -O2
-CFLAGS_lib/zlib += -O2
+# FIX ME
+ifneq ($(filter lib lib/lzma lib/zlib, $(obj)),)
+ccflags-y := -O2
+endif
index f1ef9bf682dde110e7a1f50f0cf5cc853d79a953..0d3df2dbd90209ee815c93a3c6a114625c9f2267 100644 (file)
@@ -7,6 +7,7 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-CFLAGS_lib += -O2
-CFLAGS_lib/lzma += -O2
-CFLAGS_lib/zlib += -O2
+# FIX ME
+ifneq ($(filter lib lib/lzma lib/zlib, $(obj)),)
+ccflags-y := -O2
+endif
index f1ef9bf682dde110e7a1f50f0cf5cc853d79a953..0d3df2dbd90209ee815c93a3c6a114625c9f2267 100644 (file)
@@ -7,6 +7,7 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-CFLAGS_lib += -O2
-CFLAGS_lib/lzma += -O2
-CFLAGS_lib/zlib += -O2
+# FIX ME
+ifneq ($(filter lib lib/lzma lib/zlib, $(obj)),)
+ccflags-y := -O2
+endif
index f1ef9bf682dde110e7a1f50f0cf5cc853d79a953..0d3df2dbd90209ee815c93a3c6a114625c9f2267 100644 (file)
@@ -7,6 +7,7 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-CFLAGS_lib += -O2
-CFLAGS_lib/lzma += -O2
-CFLAGS_lib/zlib += -O2
+# FIX ME
+ifneq ($(filter lib lib/lzma lib/zlib, $(obj)),)
+ccflags-y := -O2
+endif
index f1ef9bf682dde110e7a1f50f0cf5cc853d79a953..0d3df2dbd90209ee815c93a3c6a114625c9f2267 100644 (file)
@@ -7,6 +7,7 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-CFLAGS_lib += -O2
-CFLAGS_lib/lzma += -O2
-CFLAGS_lib/zlib += -O2
+# FIX ME
+ifneq ($(filter lib lib/lzma lib/zlib, $(obj)),)
+ccflags-y := -O2
+endif
index 5f327a990e1f2875d7dcca497465356c3f382d92..af299f5f1e17256bc90c725c97b1c60e44461039 100644 (file)
@@ -7,9 +7,10 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-CFLAGS_lib += -O2
-CFLAGS_lib/lzma += -O2
-CFLAGS_lib/zlib += -O2
+# FIX ME
+ifneq ($(filter lib lib/lzma lib/zlib, $(obj)),)
+ccflags-y := -O2
+endif
 
 # Set some default LDR flags based on boot mode.
 LDR_FLAGS-BFIN_BOOT_PARA := --bits 16 --dma 6
index 973d357559369c8cbf8ed1175938992f4018ef8d..97eaafef2e2b980b9ed66325d46cefd584c18284 100644 (file)
@@ -7,9 +7,10 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-CFLAGS_lib += -O2
-CFLAGS_lib/lzma += -O2
-CFLAGS_lib/zlib += -O2
+# FIX ME
+ifneq ($(filter lib lib/lzma lib/zlib, $(obj)),)
+ccflags-y := -O2
+endif
 
 # Set some default LDR flags based on boot mode.
 LDR_FLAGS-BFIN_BOOT_PARA := --bits 16 --dma 8
index 973d357559369c8cbf8ed1175938992f4018ef8d..97eaafef2e2b980b9ed66325d46cefd584c18284 100644 (file)
@@ -7,9 +7,10 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-CFLAGS_lib += -O2
-CFLAGS_lib/lzma += -O2
-CFLAGS_lib/zlib += -O2
+# FIX ME
+ifneq ($(filter lib lib/lzma lib/zlib, $(obj)),)
+ccflags-y := -O2
+endif
 
 # Set some default LDR flags based on boot mode.
 LDR_FLAGS-BFIN_BOOT_PARA := --bits 16 --dma 8
index ae2ea0b74763208a87b2ea499ee627f4ffa9fab3..bc0e7476e504100a1289f9108448687990304d5a 100644 (file)
@@ -7,9 +7,10 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-CFLAGS_lib += -O2
-CFLAGS_lib/lzma += -O2
-CFLAGS_lib/zlib += -O2
+# FIX ME
+ifneq ($(filter lib lib/lzma lib/zlib, $(obj)),)
+ccflags-y := -O2
+endif
 
 # Set some default LDR flags based on boot mode.
 LDR_FLAGS-BFIN_BOOT_PARA := --bits 16 --dma 8
index 973d357559369c8cbf8ed1175938992f4018ef8d..97eaafef2e2b980b9ed66325d46cefd584c18284 100644 (file)
@@ -7,9 +7,10 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-CFLAGS_lib += -O2
-CFLAGS_lib/lzma += -O2
-CFLAGS_lib/zlib += -O2
+# FIX ME
+ifneq ($(filter lib lib/lzma lib/zlib, $(obj)),)
+ccflags-y := -O2
+endif
 
 # Set some default LDR flags based on boot mode.
 LDR_FLAGS-BFIN_BOOT_PARA := --bits 16 --dma 8
index ad3a7293dfe24003a8980e3f67adc292a4e15cec..8d2c60f308c91064f63e4054132c87cec122120f 100644 (file)
@@ -7,9 +7,10 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-CFLAGS_lib += -O2
-CFLAGS_lib/lzma += -O2
-CFLAGS_lib/zlib += -O2
+# FIX ME
+ifneq ($(filter lib lib/lzma lib/zlib, $(obj)),)
+ccflags-y := -O2
+endif
 
 # Set some default LDR flags based on boot mode.
 LDR_FLAGS-BFIN_BOOT_PARA       := --dma 6
index c33aef9d283c7ef116644705f5dc4dad3717c251..ce9471557228ccd9d926f8a4ceef2a775137d875 100644 (file)
@@ -7,9 +7,10 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-CFLAGS_lib += -O2
-CFLAGS_lib/lzma += -O2
-CFLAGS_lib/zlib += -O2
+# FIX ME
+ifneq ($(filter lib lib/lzma lib/zlib, $(obj)),)
+ccflags-y := -O2
+endif
 
 # Set some default LDR flags based on boot mode.
 LDR_FLAGS-BFIN_BOOT_PARA := --bits 16
index c33aef9d283c7ef116644705f5dc4dad3717c251..ce9471557228ccd9d926f8a4ceef2a775137d875 100644 (file)
@@ -7,9 +7,10 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-CFLAGS_lib += -O2
-CFLAGS_lib/lzma += -O2
-CFLAGS_lib/zlib += -O2
+# FIX ME
+ifneq ($(filter lib lib/lzma lib/zlib, $(obj)),)
+ccflags-y := -O2
+endif
 
 # Set some default LDR flags based on boot mode.
 LDR_FLAGS-BFIN_BOOT_PARA := --bits 16
index 5c18d5c9e468db4b2b518b2676cd37bf2120972c..2436ec07f43b2d117d2161c08be630f5426dd5be 100644 (file)
@@ -9,6 +9,7 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-CFLAGS_lib += -O2
-CFLAGS_lib/lzma += -O2
-CFLAGS_lib/zlib += -O2
+# FIX ME
+ifneq ($(filter lib lib/lzma lib/zlib, $(obj)),)
+ccflags-y := -O2
+endif
diff --git a/board/chromebook-x86/dts/alex.dts b/board/chromebook-x86/dts/alex.dts
deleted file mode 100644 (file)
index 2f13544..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/dts-v1/;
-
-/include/ "coreboot.dtsi"
-
-/ {
-       #address-cells = <1>;
-       #size-cells = <1>;
-       model = "Google Alex";
-       compatible = "google,alex", "intel,atom-pineview";
-
-       config {
-              silent_console = <0>;
-       };
-
-       gpio: gpio {};
-
-       serial {
-               reg = <0x3f8 8>;
-               clock-frequency = <115200>;
-       };
-
-       chosen { };
-       memory { device_type = "memory"; reg = <0 0>; };
-};
diff --git a/board/chromebook-x86/dts/link.dts b/board/chromebook-x86/dts/link.dts
deleted file mode 100644 (file)
index 4a37dac..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/dts-v1/;
-
-/include/ "coreboot.dtsi"
-
-/ {
-       #address-cells = <1>;
-       #size-cells = <1>;
-       model = "Google Link";
-       compatible = "google,link", "intel,celeron-ivybridge";
-
-       config {
-              silent_console = <0>;
-       };
-
-       gpio: gpio {};
-
-       serial {
-               reg = <0x3f8 8>;
-               clock-frequency = <115200>;
-       };
-
-       chosen { };
-       memory { device_type = "memory"; reg = <0 0>; };
-
-       spi {
-               #address-cells = <1>;
-               #size-cells = <0>;
-               compatible = "intel,ich9";
-               spi-flash@0 {
-                       reg = <0>;
-                       compatible = "winbond,w25q64", "spi-flash";
-                       memory-map = <0xff800000 0x00800000>;
-               };
-       };
-};
index f1ef9bf682dde110e7a1f50f0cf5cc853d79a953..0d3df2dbd90209ee815c93a3c6a114625c9f2267 100644 (file)
@@ -7,6 +7,7 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-CFLAGS_lib += -O2
-CFLAGS_lib/lzma += -O2
-CFLAGS_lib/zlib += -O2
+# FIX ME
+ifneq ($(filter lib lib/lzma lib/zlib, $(obj)),)
+ccflags-y := -O2
+endif
index 973d357559369c8cbf8ed1175938992f4018ef8d..97eaafef2e2b980b9ed66325d46cefd584c18284 100644 (file)
@@ -7,9 +7,10 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-CFLAGS_lib += -O2
-CFLAGS_lib/lzma += -O2
-CFLAGS_lib/zlib += -O2
+# FIX ME
+ifneq ($(filter lib lib/lzma lib/zlib, $(obj)),)
+ccflags-y := -O2
+endif
 
 # Set some default LDR flags based on boot mode.
 LDR_FLAGS-BFIN_BOOT_PARA := --bits 16 --dma 8
index 973d357559369c8cbf8ed1175938992f4018ef8d..97eaafef2e2b980b9ed66325d46cefd584c18284 100644 (file)
@@ -7,9 +7,10 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-CFLAGS_lib += -O2
-CFLAGS_lib/lzma += -O2
-CFLAGS_lib/zlib += -O2
+# FIX ME
+ifneq ($(filter lib lib/lzma lib/zlib, $(obj)),)
+ccflags-y := -O2
+endif
 
 # Set some default LDR flags based on boot mode.
 LDR_FLAGS-BFIN_BOOT_PARA := --bits 16 --dma 8
index 973d357559369c8cbf8ed1175938992f4018ef8d..97eaafef2e2b980b9ed66325d46cefd584c18284 100644 (file)
@@ -7,9 +7,10 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-CFLAGS_lib += -O2
-CFLAGS_lib/lzma += -O2
-CFLAGS_lib/zlib += -O2
+# FIX ME
+ifneq ($(filter lib lib/lzma lib/zlib, $(obj)),)
+ccflags-y := -O2
+endif
 
 # Set some default LDR flags based on boot mode.
 LDR_FLAGS-BFIN_BOOT_PARA := --bits 16 --dma 8
index c005afb881f66f80f1005f71186bd2a098058688..289c8a488e0bef7307530b2b24ba6172b8e4e540 100644 (file)
@@ -7,9 +7,10 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-CFLAGS_lib += -O2
-CFLAGS_lib/lzma += -O2
-CFLAGS_lib/zlib += -O2
+# FIX ME
+ifneq ($(filter lib lib/lzma lib/zlib, $(obj)),)
+ccflags-y := -O2
+endif
 
 # Set some default LDR flags based on boot mode.
 LDR_FLAGS-BFIN_BOOT_PARA       := --dma 6
index c33aef9d283c7ef116644705f5dc4dad3717c251..ce9471557228ccd9d926f8a4ceef2a775137d875 100644 (file)
@@ -7,9 +7,10 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-CFLAGS_lib += -O2
-CFLAGS_lib/lzma += -O2
-CFLAGS_lib/zlib += -O2
+# FIX ME
+ifneq ($(filter lib lib/lzma lib/zlib, $(obj)),)
+ccflags-y := -O2
+endif
 
 # Set some default LDR flags based on boot mode.
 LDR_FLAGS-BFIN_BOOT_PARA := --bits 16
diff --git a/board/compal/dts/tegra20-paz00.dts b/board/compal/dts/tegra20-paz00.dts
deleted file mode 100644 (file)
index 780203c..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-/dts-v1/;
-
-#include "tegra20.dtsi"
-
-/ {
-       model = "Toshiba AC100 / Dynabook AZ";
-       compatible = "compal,paz00", "nvidia,tegra20";
-
-       aliases {
-               usb0 = "/usb@c5008000";
-               sdhci0 = "/sdhci@c8000600";
-               sdhci1 = "/sdhci@c8000000";
-       };
-
-       memory {
-               reg = <0x00000000 0x20000000>;
-       };
-
-       host1x {
-               status = "okay";
-               dc@54200000 {
-                       status = "okay";
-                       rgb {
-                               status = "okay";
-                               nvidia,panel = <&lcd_panel>;
-                       };
-               };
-       };
-
-       serial@70006000 {
-               clock-frequency = < 216000000 >;
-       };
-
-       i2c@7000c000 {
-               status = "disabled";
-       };
-
-       i2c@7000c400 {
-               status = "disabled";
-       };
-
-       i2c@7000c500 {
-               status = "disabled";
-       };
-
-       i2c@7000d000 {
-               status = "disabled";
-       };
-
-       usb@c5000000 {
-               status = "disabled";
-       };
-
-       usb@c5004000 {
-               status = "disabled";
-       };
-
-       sdhci@c8000000 {
-               status = "okay";
-               cd-gpios = <&gpio 173 1>; /* gpio PV5 */
-               wp-gpios = <&gpio 57 0>; /* gpio PH1 */
-               power-gpios = <&gpio 169 0>; /* gpio PV1 */
-               bus-width = <4>;
-       };
-
-       sdhci@c8000600 {
-               status = "okay";
-               bus-width = <8>;
-       };
-
-       lcd_panel: panel {
-               /* PAZ00 has 1024x600 */
-               clock = <54030000>;
-               xres = <1024>;
-               yres = <600>;
-               right-margin = <160>;
-               left-margin = <24>;
-               hsync-len = <136>;
-               upper-margin = <3>;
-               lower-margin = <61>;
-               vsync-len = <6>;
-               hsync-active-high;
-               nvidia,bits-per-pixel = <16>;
-               nvidia,pwm = <&pwm 0 0>;
-               nvidia,backlight-enable-gpios = <&gpio 164 0>;  /* PU4 */
-               nvidia,lvds-shutdown-gpios = <&gpio 102 0>;     /* PM6 */
-               nvidia,backlight-vdd-gpios = <&gpio 176 0>;     /* PW0 */
-               nvidia,panel-vdd-gpios = <&gpio 4 0>;           /* PA4 */
-               nvidia,panel-timings = <400 4 203 17 15>;
-       };
-};
index b2d3b6b4b25d2b31b4c85d5af1a9f4c288905a84..e6a0b29997373d08707ce502823f2074cc1c7365 100644 (file)
@@ -16,4 +16,4 @@
 
 obj-y  := paz00.o
 
-include ../../nvidia/common/common.mk
+include $(srctree)/board/nvidia/common/common.mk
diff --git a/board/compulab/dts/tegra20-trimslice.dts b/board/compulab/dts/tegra20-trimslice.dts
deleted file mode 100644 (file)
index ee31476..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/dts-v1/;
-
-#include "tegra20.dtsi"
-
-/ {
-       model = "Compulab TrimSlice board";
-       compatible = "compulab,trimslice", "nvidia,tegra20";
-
-       aliases {
-               usb0 = "/usb@c5008000";
-               usb1 = "/usb@c5000000";
-               sdhci0 = "/sdhci@c8000600";
-               sdhci1 = "/sdhci@c8000000";
-       };
-
-       memory {
-               reg = <0x00000000 0x40000000>;
-       };
-
-       serial@70006000 {
-               clock-frequency = <216000000>;
-       };
-
-       i2c@7000c000 {
-               status = "disabled";
-       };
-
-       spi@7000c380 {
-               status = "okay";
-               spi-max-frequency = <25000000>;
-       };
-
-       i2c@7000c400 {
-               status = "disabled";
-       };
-
-       i2c@7000c500 {
-               status = "disabled";
-       };
-
-       i2c@7000d000 {
-               status = "disabled";
-       };
-
-       usb@c5000000 {
-               nvidia,vbus-gpio = <&gpio 170 0>; /* PV2 */
-       };
-
-       usb@c5004000 {
-               status = "disabled";
-       };
-
-       sdhci@c8000000 {
-               status = "okay";
-               bus-width = <4>;
-       };
-
-       sdhci@c8000600 {
-               status = "okay";
-               cd-gpios = <&gpio 121 1>; /* gpio PP1 */
-               wp-gpios = <&gpio 122 0>; /* gpio PP2 */
-               bus-width = <4>;
-       };
-};
index f3bd00dbf18d1c042eb9f10a076792494203ceee..311eb92d7b9b31bd5c596c252f29ba46dcd0514f 100644 (file)
@@ -7,4 +7,4 @@
 
 obj-y  := trimslice.o
 
-include ../../nvidia/common/common.mk
+include $(srctree)/board/nvidia/common/common.mk
index 5f6c690b7c2c41c2c18b63e9d194b92895ecaef7..63f43dab294e4051b106a3427f45ec8911d59d04 100644 (file)
@@ -9,8 +9,10 @@ obj-y  = L1.o flash.o
 obj-y  += init.o
 obj-y  += bootscript.o
 
-$(obj)bootscript.c: $(obj)bootscript.image
-       od -t x1 -v -A x $^ | awk -f x2c.awk > $@
+$(obj)/bootscript.c: $(obj)/bootscript.image
+       od -t x1 -v -A x $^ | awk -f $(srctree)/$(src)/x2c.awk > $@
 
-$(obj)bootscript.image: $(src)bootscript.hush $(src)Makefile
-       -$(OBJTREE)/tools/mkimage -A ppc -O linux -T script -C none -a 0 -e 0 -n bootscript -d $(src)bootscript.hush $@
+$(obj)/bootscript.image: $(src)/bootscript.hush
+       -$(OBJTREE)/tools/mkimage -A ppc -O linux -T script -C none -a 0 -e 0 -n bootscript -d $< $@
+
+clean-files := bootscript.c bootscript.image
\ No newline at end of file
index cf6c928dc73a40bd858c839c85d0d4194c878606..fa49080fb73064eb9037af4731a3f442bbee9741 100644 (file)
 
 #define CONFIG_SYS_LOAD_ADDR           0x00100000
 
-#define        CONFIG_SYS_HZ                   1000    /* decrementer freq: 1 ms ticks */
-
 /*
  * Low Level Configuration Settings
  * (address mappings, register initial values, etc.)
index 25f063d3add9f6043b5ce6b52f46dd3e67522130..f6a08797531c731c3abf6bc44aaccfdbd4f491d2 100644 (file)
@@ -13,7 +13,10 @@ MINIMAL=y
 endif
 endif
 
-ifndef MINIMAL
+ifdef MINIMAL
+# necessary to create built-in.o
+obj- := __dummy__.o
+else
 obj-$(CONFIG_FSL_CADMUS)       += cadmus.o
 obj-$(CONFIG_FSL_VIA)          += cds_via.o
 obj-$(CONFIG_FMAN_ENET)        += fman.o
index db0bf17363e17346adc9e1357246595d9576f33c..08dd66fcc6414d8bd7afceb9244861858da34d06 100644 (file)
@@ -343,6 +343,7 @@ int board_early_init_f(void)
        return 0;
 }
 
+#if defined(CONFIG_DISPLAY_CPUINFO)
 int print_cpuinfo(void)
 {
        u32 cpurev;
@@ -356,6 +357,7 @@ int print_cpuinfo(void)
        printf("Reset cause: %s\n", get_reset_cause());
        return 0;
 }
+#endif
 
 /*
  * Do not overwrite the console
index d4fa15344cc642539fd2aa2ac86c2757476e4cfe..e516e916b41f69121176c972ed16f28b537cce2f 100644 (file)
@@ -10,5 +10,5 @@ obj-y := h2200.o
 
 extra-y := h2200-header.bin
 
-$(obj)h2200-header.bin: $(obj)h2200-header.o
+$(obj)/h2200-header.bin: $(obj)/h2200-header.o
        $(OBJCOPY) -O binary $< $@
index ae2ea0b74763208a87b2ea499ee627f4ffa9fab3..bc0e7476e504100a1289f9108448687990304d5a 100644 (file)
@@ -7,9 +7,10 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-CFLAGS_lib += -O2
-CFLAGS_lib/lzma += -O2
-CFLAGS_lib/zlib += -O2
+# FIX ME
+ifneq ($(filter lib lib/lzma lib/zlib, $(obj)),)
+ccflags-y := -O2
+endif
 
 # Set some default LDR flags based on boot mode.
 LDR_FLAGS-BFIN_BOOT_PARA := --bits 16 --dma 8
index 879d79465547801dac47b1e8cfa71c5b9ab792d5..1bc1d61dcf623c5fe1e35a5031eeee0a659c45ba 100644 (file)
@@ -8,5 +8,5 @@ obj-y   := mvblm7.o pci.o fpga.o
 
 extra-y := bootscript.img
 
-$(obj)bootscript.img:
-       @mkimage -T script -C none -n M7_script -d bootscript $@
+$(obj)/bootscript.img: $(src)/bootscript
+       @mkimage -T script -C none -n M7_script -d $< $@
index c6c09339562af7644e2c75e3dbbb4c28e80e9c8b..c056ebaf781d4a07dc787f1a69b439882e7f8ad4 100644 (file)
@@ -8,4 +8,4 @@
 obj-y += mvblx.o fpga.o
 obj-$(CONFIG_ID_EEPROM) += sys_eeprom.o
 
-CFLAGS += -Werror
+ccflags-y += -Werror
index b6a4f6754bf5f8c413515eabb5893d4e5bc585f2..9454259c17204e1667be44a3fd4442a0d2693b58 100644 (file)
@@ -12,5 +12,5 @@ obj-y := mvsmr.o fpga.o
 
 extra-y := bootscript.img
 
-$(obj)bootscript.img: bootscript
+$(obj)/bootscript.img: $(src)/bootscript
        @mkimage -T script -C none -n mvSMR_Script -d $< $@
index 4a230dd596e8b1662c6e6b4b1e9a49559479ab1e..0d2f0a54c56bdd01f66f27c02160a078878fed47 100644 (file)
@@ -22,8 +22,6 @@ struct emu_hal_params_rx51 {
        u32 param4;
 };
 
-int print_cpuinfo(void);
-
 /*
  * IEN  - Input Enable
  * IDIS - Input Disable
index e3fcf2bdffcb4e052bd809b9d967159f11e46c4c..e3b2651570dad52cede30a3390710341d5ab4ee3 100644 (file)
@@ -1,4 +1,4 @@
 # Copyright (c) 2011 The Chromium OS Authors.
 # SPDX-License-Identifier:     GPL-2.0+
 
-include common.mk
+include $(src)/common.mk
diff --git a/board/nvidia/dts/tegra114-dalmore.dts b/board/nvidia/dts/tegra114-dalmore.dts
deleted file mode 100644 (file)
index 435c01e..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/dts-v1/;
-
-#include "tegra114.dtsi"
-
-/ {
-       model = "NVIDIA Dalmore";
-       compatible = "nvidia,dalmore", "nvidia,tegra114";
-
-       aliases {
-               i2c0 = "/i2c@7000d000";
-               i2c1 = "/i2c@7000c000";
-               i2c2 = "/i2c@7000c400";
-               i2c3 = "/i2c@7000c500";
-               i2c4 = "/i2c@7000c700";
-               sdhci0 = "/sdhci@78000600";
-               sdhci1 = "/sdhci@78000400";
-               usb0 = "/usb@7d008000";
-       };
-
-       memory {
-               device_type = "memory";
-               reg = <0x80000000 0x80000000>;
-       };
-
-       i2c@7000c000 {
-               status = "okay";
-               clock-frequency = <100000>;
-       };
-
-       i2c@7000c400 {
-               status = "okay";
-               clock-frequency = <100000>;
-       };
-
-       i2c@7000c500 {
-               status = "okay";
-               clock-frequency = <100000>;
-       };
-
-       i2c@7000c700 {
-               status = "okay";
-               clock-frequency = <100000>;
-       };
-
-       i2c@7000d000 {
-               status = "okay";
-               clock-frequency = <400000>;
-       };
-
-       spi@7000da00 {
-               status = "okay";
-               spi-max-frequency = <25000000>;
-       };
-
-       sdhci@78000400 {
-               cd-gpios = <&gpio 170 1>; /* gpio PV2 */
-               bus-width = <4>;
-               status = "okay";
-       };
-
-       sdhci@78000600 {
-               bus-width = <8>;
-               status = "okay";
-       };
-
-       usb@7d008000 {
-               /* SPDIF_IN: USB_VBUS_EN1 */
-               nvidia,vbus-gpio = <&gpio 86 0>;
-               status = "okay";
-       };
-};
diff --git a/board/nvidia/dts/tegra20-harmony.dts b/board/nvidia/dts/tegra20-harmony.dts
deleted file mode 100644 (file)
index b115f87..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/dts-v1/;
-
-#include "tegra20.dtsi"
-
-/ {
-       model = "NVIDIA Tegra20 Harmony evaluation board";
-       compatible = "nvidia,harmony", "nvidia,tegra20";
-
-       aliases {
-               usb0 = "/usb@c5008000";
-               usb1 = "/usb@c5004000";
-               sdhci0 = "/sdhci@c8000600";
-               sdhci1 = "/sdhci@c8000200";
-       };
-
-       memory {
-               reg = <0x00000000 0x40000000>;
-       };
-
-       host1x {
-               status = "okay";
-               dc@54200000 {
-                       status = "okay";
-                       rgb {
-                               status = "okay";
-                               nvidia,panel = <&lcd_panel>;
-                       };
-               };
-       };
-
-       serial@70006300 {
-               clock-frequency = < 216000000 >;
-       };
-
-       nand-controller@70008000 {
-               nvidia,wp-gpios = <&gpio 23 0>;         /* PC7 */
-               nvidia,width = <8>;
-               nvidia,timing = <26 100 20 80 20 10 12 10 70>;
-               nand@0 {
-                       reg = <0>;
-                       compatible = "hynix,hy27uf4g2b", "nand-flash";
-               };
-       };
-
-       i2c@7000c000 {
-               status = "disabled";
-       };
-
-       i2c@7000c400 {
-               status = "disabled";
-       };
-
-       i2c@7000c500 {
-               status = "disabled";
-       };
-
-       i2c@7000d000 {
-               status = "disabled";
-       };
-
-       usb@c5000000 {
-               status = "disabled";
-       };
-
-       usb@c5004000 {
-               nvidia,phy-reset-gpio = <&gpio 169 0>; /* gpio PV1 */
-       };
-
-       sdhci@c8000200 {
-               status = "okay";
-               cd-gpios = <&gpio 69 1>; /* gpio PI5 */
-               wp-gpios = <&gpio 57 0>; /* gpio PH1 */
-               power-gpios = <&gpio 155 0>; /* gpio PT3 */
-               bus-width = <4>;
-       };
-
-       sdhci@c8000600 {
-               status = "okay";
-               cd-gpios = <&gpio 58 1>; /* gpio PH2 */
-               wp-gpios = <&gpio 59 0>; /* gpio PH3 */
-               power-gpios = <&gpio 70 0>; /* gpio PI6 */
-               bus-width = <8>;
-       };
-
-       lcd_panel: panel {
-               clock = <42430000>;
-               xres = <1024>;
-               yres = <600>;
-               left-margin = <138>;
-               right-margin = <34>;
-               hsync-len = <136>;
-               lower-margin = <4>;
-               upper-margin = <21>;
-               vsync-len = <4>;
-               hsync-active-high;
-               vsyncx-active-high;
-               nvidia,bits-per-pixel = <16>;
-               nvidia,pwm = <&pwm 0 0>;
-               nvidia,backlight-enable-gpios = <&gpio 13 0>;   /* PB5 */
-               nvidia,lvds-shutdown-gpios = <&gpio 10 0>;      /* PB2 */
-               nvidia,backlight-vdd-gpios = <&gpio 176 0>;     /* PW0 */
-               nvidia,panel-vdd-gpios = <&gpio 22 0>;          /* PC6 */
-               nvidia,panel-timings = <0 0 200 0 0>;
-       };
-};
diff --git a/board/nvidia/dts/tegra20-seaboard.dts b/board/nvidia/dts/tegra20-seaboard.dts
deleted file mode 100644 (file)
index c0e2e1e..0000000
+++ /dev/null
@@ -1,191 +0,0 @@
-/dts-v1/;
-
-#include "tegra20.dtsi"
-
-/ {
-       model = "NVIDIA Seaboard";
-       compatible = "nvidia,seaboard", "nvidia,tegra20";
-
-       chosen {
-               bootargs = "vmalloc=192M video=tegrafb console=ttyS0,115200n8 root=/dev/mmcblk1p3 rw rootwait";
-       };
-
-       aliases {
-               /* This defines the order of our ports */
-               usb0 = "/usb@c5008000";
-               usb1 = "/usb@c5000000";
-               i2c0 = "/i2c@7000d000";
-               i2c1 = "/i2c@7000c000";
-               i2c2 = "/i2c@7000c400";
-               i2c3 = "/i2c@7000c500";
-               sdhci0 = "/sdhci@c8000600";
-               sdhci1 = "/sdhci@c8000400";
-       };
-
-       memory {
-               device_type = "memory";
-               reg = < 0x00000000 0x40000000 >;
-       };
-
-       host1x {
-               status = "okay";
-               dc@54200000 {
-                       status = "okay";
-                       rgb {
-                               status = "okay";
-                               nvidia,panel = <&lcd_panel>;
-                       };
-               };
-       };
-
-       /* This is not used in U-Boot, but is expected to be in kernel .dts */
-       i2c@7000d000 {
-               clock-frequency = <100000>;
-               pmic@34 {
-                       compatible = "ti,tps6586x";
-                       reg = <0x34>;
-
-                       clk_32k: clock {
-                               compatible = "fixed-clock";
-                               /*
-                                * leave out for now due to CPP:
-                                * #clock-cells = <0>;
-                                */
-                               clock-frequency = <32768>;
-                       };
-               };
-       };
-
-       serial@70006300 {
-               clock-frequency = < 216000000 >;
-       };
-
-       nand-controller@70008000 {
-               nvidia,wp-gpios = <&gpio 59 0>;         /* PH3 */
-               nvidia,width = <8>;
-               nvidia,timing = <26 100 20 80 20 10 12 10 70>;
-               nand@0 {
-                       reg = <0>;
-                       compatible = "hynix,hy27uf4g2b", "nand-flash";
-               };
-       };
-
-       i2c@7000c000 {
-               clock-frequency = <100000>;
-       };
-
-       i2c@7000c400 {
-               status = "disabled";
-       };
-
-       i2c@7000c500 {
-               clock-frequency = <100000>;
-       };
-
-       kbc@7000e200 {
-               linux,keymap = <0x00020011 0x0003001f 0x0004001e 0x0005002c
-                       0x000701d0 0x0107007d 0x02060064 0x02070038 0x03000006
-                       0x03010005 0x03020013 0x03030012 0x03040021 0x03050020
-                       0x0306002d 0x04000008 0x04010007 0x04020014 0x04030023
-                       0x04040022 0x0405002f 0x0406002e 0x04070039 0x0500000a
-                       0x05010009 0x05020016 0x05030015 0x05040024 0x05050031
-                       0x05060030 0x0507002b 0x0600000c 0x0601000b 0x06020018
-                       0x06030017 0x06040026 0x06050025 0x06060033 0x06070032
-                       0x0701000d 0x0702001b 0x0703001c 0x0707008b 0x08040036
-                       0x0805002a 0x09050061 0x0907001d 0x0b00001a 0x0b010019
-                       0x0b020028 0x0b030027 0x0b040035 0x0b050034 0x0c000044
-                       0x0c010043 0x0c02000e 0x0c030004 0x0c040003 0x0c050067
-                       0x0c0600d2 0x0c070077 0x0d00006e 0x0d01006f 0x0d030068
-                       0x0d04006d 0x0d05006a 0x0d06006c 0x0d070069 0x0e000057
-                       0x0e010058 0x0e020042 0x0e030010 0x0e04003e 0x0e05003d
-                       0x0e060002 0x0e070041 0x0f000001 0x0f010029 0x0f02003f
-                       0x0f03000f 0x0f04003b 0x0f05003c 0x0f06003a 0x0f070040
-                       0x14000047 0x15000049 0x15010048 0x1502004b 0x1504004f
-                       0x16010062 0x1602004d 0x1603004c 0x16040051 0x16050050
-                       0x16070052 0x1b010037 0x1b03004a 0x1b04004e 0x1b050053
-                       0x1c050073 0x1d030066 0x1d04006b 0x1d0500e0 0x1d060072
-                       0x1d0700e1 0x1e000045 0x1e010046 0x1e020071
-                       0x1f04008a>;
-               linux,fn-keymap = <0x05040002>;
-       };
-
-       emc@7000f400 {
-               emc-table@190000 {
-                       reg = < 190000 >;
-                       compatible = "nvidia,tegra20-emc-table";
-                       clock-frequency = < 190000 >;
-                       nvidia,emc-registers = < 0x0000000c 0x00000026
-                               0x00000009 0x00000003 0x00000004 0x00000004
-                               0x00000002 0x0000000c 0x00000003 0x00000003
-                               0x00000002 0x00000001 0x00000004 0x00000005
-                               0x00000004 0x00000009 0x0000000d 0x0000059f
-                               0x00000000 0x00000003 0x00000003 0x00000003
-                               0x00000003 0x00000001 0x0000000b 0x000000c8
-                               0x00000003 0x00000007 0x00000004 0x0000000f
-                               0x00000002 0x00000000 0x00000000 0x00000002
-                               0x00000000 0x00000000 0x00000083 0xa06204ae
-                               0x007dc010 0x00000000 0x00000000 0x00000000
-                               0x00000000 0x00000000 0x00000000 0x00000000 >;
-               };
-               emc-table@380000 {
-                       reg = < 380000 >;
-                       compatible = "nvidia,tegra20-emc-table";
-                       clock-frequency = < 380000 >;
-                       nvidia,emc-registers = < 0x00000017 0x0000004b
-                               0x00000012 0x00000006 0x00000004 0x00000005
-                               0x00000003 0x0000000c 0x00000006 0x00000006
-                               0x00000003 0x00000001 0x00000004 0x00000005
-                               0x00000004 0x00000009 0x0000000d 0x00000b5f
-                               0x00000000 0x00000003 0x00000003 0x00000006
-                               0x00000006 0x00000001 0x00000011 0x000000c8
-                               0x00000003 0x0000000e 0x00000007 0x0000000f
-                               0x00000002 0x00000000 0x00000000 0x00000002
-                               0x00000000 0x00000000 0x00000083 0xe044048b
-                               0x007d8010 0x00000000 0x00000000 0x00000000
-                               0x00000000 0x00000000 0x00000000 0x00000000 >;
-               };
-       };
-
-       usb@c5000000 {
-               nvidia,vbus-gpio = <&gpio 24 0>; /* PD0 */
-               dr_mode = "otg";
-       };
-
-       usb@c5004000 {
-               status = "disabled";
-       };
-
-       sdhci@c8000400 {
-               status = "okay";
-               cd-gpios = <&gpio 69 1>; /* gpio PI5 */
-               wp-gpios = <&gpio 57 0>; /* gpio PH1 */
-               power-gpios = <&gpio 70 0>; /* gpio PI6 */
-               bus-width = <4>;
-       };
-
-       sdhci@c8000600 {
-               status = "okay";
-               bus-width = <8>;
-       };
-
-       lcd_panel: panel {
-               /* Seaboard has 1366x768 */
-               clock = <70600000>;
-               xres = <1366>;
-               yres = <768>;
-               left-margin = <58>;
-               right-margin = <58>;
-               hsync-len = <58>;
-               lower-margin = <4>;
-               upper-margin = <4>;
-               vsync-len = <4>;
-               hsync-active-high;
-               nvidia,bits-per-pixel = <16>;
-               nvidia,pwm = <&pwm 2 0>;
-               nvidia,backlight-enable-gpios = <&gpio 28 0>;   /* PD4 */
-               nvidia,lvds-shutdown-gpios = <&gpio 10 0>;      /* PB2 */
-               nvidia,backlight-vdd-gpios = <&gpio 176 0>;     /* PW0 */
-               nvidia,panel-vdd-gpios = <&gpio 22 0>;          /* PC6 */
-               nvidia,panel-timings = <400 4 203 17 15>;
-       };
-};
diff --git a/board/nvidia/dts/tegra20-ventana.dts b/board/nvidia/dts/tegra20-ventana.dts
deleted file mode 100644 (file)
index 1a526ba..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-/dts-v1/;
-
-#include "tegra20.dtsi"
-
-/ {
-       model = "NVIDIA Tegra20 Ventana evaluation board";
-       compatible = "nvidia,ventana", "nvidia,tegra20";
-
-       aliases {
-               usb0 = "/usb@c5008000";
-               sdhci0 = "/sdhci@c8000600";
-               sdhci1 = "/sdhci@c8000400";
-       };
-
-       memory {
-               reg = <0x00000000 0x40000000>;
-       };
-
-       host1x {
-               status = "okay";
-               dc@54200000 {
-                       status = "okay";
-                       rgb {
-                               status = "okay";
-                               nvidia,panel = <&lcd_panel>;
-                       };
-               };
-       };
-
-       serial@70006300 {
-               clock-frequency = < 216000000 >;
-       };
-
-       i2c@7000c000 {
-               status = "disabled";
-       };
-
-       i2c@7000c400 {
-               status = "disabled";
-       };
-
-       i2c@7000c500 {
-               status = "disabled";
-       };
-
-       i2c@7000d000 {
-               status = "disabled";
-       };
-
-       usb@c5000000 {
-               status = "disabled";
-       };
-
-       usb@c5004000 {
-               status = "disabled";
-       };
-
-       sdhci@c8000400 {
-               status = "okay";
-               cd-gpios = <&gpio 69 1>; /* gpio PI5 */
-               wp-gpios = <&gpio 57 0>; /* gpio PH1 */
-               power-gpios = <&gpio 70 0>; /* gpio PI6 */
-               bus-width = <4>;
-       };
-
-       sdhci@c8000600 {
-               status = "okay";
-               bus-width = <8>;
-       };
-
-       lcd_panel: panel {
-               clock = <72072000>;
-               xres = <1366>;
-               yres = <768>;
-               left-margin = <58>;
-               right-margin = <58>;
-               hsync-len = <58>;
-               lower-margin = <4>;
-               upper-margin = <4>;
-               vsync-len = <4>;
-               hsync-active-high;
-               vsync-active-high;
-               nvidia,bits-per-pixel = <16>;
-               nvidia,pwm = <&pwm 2 0>;
-               nvidia,backlight-enable-gpios = <&gpio 28 0>;   /* PD4 */
-               nvidia,lvds-shutdown-gpios = <&gpio 10 0>;      /* PB2 */
-               nvidia,backlight-vdd-gpios = <&gpio 176 0>;     /* PW0 */
-               nvidia,panel-vdd-gpios = <&gpio 22 0>;          /* PC6 */
-               nvidia,panel-timings = <0 0 200 0 0>;
-       };
-};
diff --git a/board/nvidia/dts/tegra20-whistler.dts b/board/nvidia/dts/tegra20-whistler.dts
deleted file mode 100644 (file)
index eb92264..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/dts-v1/;
-
-#include "tegra20.dtsi"
-
-/ {
-       model = "NVIDIA Tegra20 Whistler evaluation board";
-       compatible = "nvidia,whistler", "nvidia,tegra20";
-
-       aliases {
-               i2c0 = "/i2c@7000d000";
-               usb0 = "/usb@c5008000";
-               sdhci0 = "/sdhci@c8000600";
-               sdhci1 = "/sdhci@c8000400";
-       };
-
-       memory {
-               device_type = "memory";
-               reg = < 0x00000000 0x20000000 >;
-       };
-
-       serial@70006000 {
-               clock-frequency = < 216000000 >;
-       };
-
-       i2c@7000c000 {
-               status = "disabled";
-       };
-
-       i2c@7000c400 {
-               status = "disabled";
-       };
-
-       i2c@7000c500 {
-               status = "disabled";
-       };
-
-       i2c@7000d000 {
-               clock-frequency = <100000>;
-
-               pmic@3c {
-                       compatible = "maxim,max8907b";
-                       reg = <0x3c>;
-
-                       clk_32k: clock {
-                               compatible = "fixed-clock";
-                               /*
-                                * leave out for now due to CPP:
-                                * #clock-cells = <0>;
-                                */
-                               clock-frequency = <32768>;
-                       };
-               };
-       };
-
-       usb@c5000000 {
-               status = "disabled";
-       };
-
-       usb@c5004000 {
-               status = "disabled";
-       };
-
-       sdhci@c8000400 {
-               status = "okay";
-               wp-gpios = <&gpio 173 0>; /* gpio PV5 */
-               bus-width = <8>;
-       };
-
-       sdhci@c8000600 {
-               status = "okay";
-               bus-width = <8>;
-       };
-};
diff --git a/board/nvidia/dts/tegra30-beaver.dts b/board/nvidia/dts/tegra30-beaver.dts
deleted file mode 100644 (file)
index a7cc93e..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-/dts-v1/;
-
-#include "tegra30.dtsi"
-
-/ {
-       model = "NVIDIA Beaver";
-       compatible = "nvidia,beaver", "nvidia,tegra30";
-
-       aliases {
-               i2c0 = "/i2c@7000d000";
-               i2c1 = "/i2c@7000c000";
-               i2c2 = "/i2c@7000c400";
-               i2c3 = "/i2c@7000c500";
-               i2c4 = "/i2c@7000c700";
-               sdhci0 = "/sdhci@78000600";
-               sdhci1 = "/sdhci@78000000";
-               usb0 = "/usb@7d008000";
-       };
-
-       memory {
-               device_type = "memory";
-               reg = <0x80000000 0x7ff00000>;
-       };
-
-       i2c@7000c000 {
-               status = "okay";
-               clock-frequency = <100000>;
-       };
-
-       i2c@7000c400 {
-               status = "okay";
-               clock-frequency = <100000>;
-       };
-
-       i2c@7000c500 {
-               status = "okay";
-               clock-frequency = <100000>;
-       };
-
-       i2c@7000c700 {
-               status = "okay";
-               clock-frequency = <100000>;
-       };
-
-       i2c@7000d000 {
-               status = "okay";
-               clock-frequency = <100000>;
-       };
-
-       spi@7000da00 {
-               status = "okay";
-               spi-max-frequency = <25000000>;
-               spi-flash@1 {
-                       compatible = "winbond,w25q32";
-                       reg = <1>;
-                       spi-max-frequency = <20000000>;
-               };
-       };
-
-       sdhci@78000000 {
-               status = "okay";
-               cd-gpios = <&gpio 69 1>; /* gpio PI5 */
-               wp-gpios = <&gpio 155 0>; /* gpio PT3 */
-               power-gpios = <&gpio 31 0>; /* gpio PD7 */
-               bus-width = <4>;
-       };
-
-       sdhci@78000600 {
-               status = "okay";
-               bus-width = <8>;
-       };
-
-       usb@7d008000 {
-               nvidia,vbus-gpio = <&gpio 236 0>; /* PDD4 */
-               status = "okay";
-       };
-};
diff --git a/board/nvidia/dts/tegra30-cardhu.dts b/board/nvidia/dts/tegra30-cardhu.dts
deleted file mode 100644 (file)
index ea2cf76..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-/dts-v1/;
-
-#include "tegra30.dtsi"
-
-/ {
-       model = "NVIDIA Cardhu";
-       compatible = "nvidia,cardhu", "nvidia,tegra30";
-
-       aliases {
-               i2c0 = "/i2c@7000d000";
-               i2c1 = "/i2c@7000c000";
-               i2c2 = "/i2c@7000c400";
-               i2c3 = "/i2c@7000c500";
-               i2c4 = "/i2c@7000c700";
-               sdhci0 = "/sdhci@78000600";
-               sdhci1 = "/sdhci@78000000";
-               usb0 = "/usb@7d008000";
-       };
-
-       memory {
-               device_type = "memory";
-               reg = <0x80000000 0x40000000>;
-       };
-
-       i2c@7000c000 {
-               status = "okay";
-               clock-frequency = <100000>;
-       };
-
-       i2c@7000c400 {
-               status = "okay";
-               clock-frequency = <100000>;
-       };
-
-       i2c@7000c500 {
-               status = "okay";
-               clock-frequency = <100000>;
-       };
-
-       i2c@7000c700 {
-               status = "okay";
-               clock-frequency = <100000>;
-       };
-
-       i2c@7000d000 {
-               status = "okay";
-               clock-frequency = <100000>;
-       };
-
-       spi@7000da00 {
-               status = "okay";
-               spi-max-frequency = <25000000>;
-       };
-
-       sdhci@78000000 {
-               status = "okay";
-               cd-gpios = <&gpio 69 1>; /* gpio PI5 */
-               wp-gpios = <&gpio 155 0>; /* gpio PT3 */
-               power-gpios = <&gpio 31 0>; /* gpio PD7 */
-               bus-width = <4>;
-       };
-
-       sdhci@78000600 {
-               status = "okay";
-               bus-width = <8>;
-       };
-
-       usb@7d008000 {
-               nvidia,vbus-gpio = <&gpio 236 0>;       /* PDD4 */
-               status = "okay";
-       };
-};
index 1e761284e4dc6c62047703b9764f3e9aeb0a4438..b90d5d0ec1f0238e72f62595bcb1a0801721e950 100644 (file)
@@ -10,7 +10,7 @@
 #
 
 # Check the U-Boot Image with a SHA1 checksum
-ALL-y += $(obj)u-boot.sha1
+ALL-y += u-boot.sha1
 
 PLATFORM_CPPFLAGS += -DCONFIG_440=1
 
index 5c18d5c9e468db4b2b518b2676cd37bf2120972c..2436ec07f43b2d117d2161c08be630f5426dd5be 100644 (file)
@@ -9,6 +9,7 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-CFLAGS_lib += -O2
-CFLAGS_lib/lzma += -O2
-CFLAGS_lib/zlib += -O2
+# FIX ME
+ifneq ($(filter lib lib/lzma lib/zlib, $(obj)),)
+ccflags-y := -O2
+endif
diff --git a/board/samsung/dts/exynos5250-arndale.dts b/board/samsung/dts/exynos5250-arndale.dts
deleted file mode 100644 (file)
index 202f2ea..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * SAMSUNG Arndale board device tree source
- *
- * Copyright (c) 2013 Samsung Electronics Co., Ltd.
- *             http://www.samsung.com
- *
- * SPDX-License-Identifier:    GPL-2.0+
-*/
-
-/dts-v1/;
-#include "exynos5250.dtsi"
-
-/ {
-       model = "SAMSUNG Arndale board based on EXYNOS5250";
-       compatible = "samsung,arndale", "samsung,exynos5250";
-
-       aliases {
-               serial0 = "/serial@12C20000";
-               console = "/serial@12C20000";
-       };
-
-       mmc@12200000 {
-               samsung,bus-width = <8>;
-               samsung,timing = <1 3 3>;
-       };
-
-       mmc@12210000 {
-               status = "disabled";
-       };
-
-       mmc@12220000 {
-               samsung,bus-width = <4>;
-               samsung,timing = <1 2 3>;
-       };
-
-       mmc@12230000 {
-               status = "disabled";
-       };
-};
diff --git a/board/samsung/dts/exynos5250-smdk5250.dts b/board/samsung/dts/exynos5250-smdk5250.dts
deleted file mode 100644 (file)
index 9020382..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * SAMSUNG SMDK5250 board device tree source
- *
- * Copyright (c) 2012 Samsung Electronics Co., Ltd.
- *             http://www.samsung.com
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
-*/
-
-/dts-v1/;
-/include/ "exynos5250.dtsi"
-
-/ {
-       model = "SAMSUNG SMDK5250 board based on EXYNOS5250";
-       compatible = "samsung,smdk5250", "samsung,exynos5250";
-
-       aliases {
-               i2c0 = "/i2c@12c60000";
-               i2c1 = "/i2c@12c70000";
-               i2c2 = "/i2c@12c80000";
-               i2c3 = "/i2c@12c90000";
-               i2c4 = "/i2c@12ca0000";
-               i2c5 = "/i2c@12cb0000";
-               i2c6 = "/i2c@12cc0000";
-               i2c7 = "/i2c@12cd0000";
-               spi0 = "/spi@12d20000";
-               spi1 = "/spi@12d30000";
-               spi2 = "/spi@12d40000";
-               spi3 = "/spi@131a0000";
-               spi4 = "/spi@131b0000";
-               mmc0 = "/mmc@12200000";
-               mmc1 = "/mmc@12210000";
-               mmc2 = "/mmc@12220000";
-               mmc3 = "/mmc@12230000";
-               serial0 = "/serial@12C30000";
-               console = "/serial@12C30000";
-               i2s = "/sound@3830000";
-       };
-
-       sromc@12250000 {
-               bank = <1>;
-               srom-timing = <1 9 12 1 6 1 1>;
-               width = <2>;
-               lan@5000000 {
-                       compatible = "smsc,lan9215", "smsc,lan";
-                       reg = <0x5000000 0x100>;
-                       phy-mode = "mii";
-               };
-       };
-
-       sound@3830000 {
-               samsung,codec-type = "wm8994";
-       };
-
-       sound@12d60000 {
-               status = "disabled";
-       };
-
-       i2c@12c70000 {
-               soundcodec@1a {
-                       reg = <0x1a>;
-                       compatible = "wolfson,wm8994-codec";
-               };
-       };
-
-       i2c@12c60000 {
-               pmic@9 {
-                       reg = <0x9>;
-                       compatible = "maxim,max77686_pmic";
-               };
-       };
-
-       tmu@10060000 {
-               samsung,min-temp        = <25>;
-               samsung,max-temp        = <125>;
-               samsung,start-warning   = <95>;
-               samsung,start-tripping  = <105>;
-               samsung,hw-tripping     = <110>;
-               samsung,efuse-min-value = <40>;
-               samsung,efuse-value     = <55>;
-               samsung,efuse-max-value = <100>;
-               samsung,slope           = <274761730>;
-               samsung,dc-value        = <25>;
-       };
-
-       fimd@14400000 {
-               samsung,vl-freq = <60>;
-               samsung,vl-col = <2560>;
-               samsung,vl-row = <1600>;
-               samsung,vl-width = <2560>;
-               samsung,vl-height = <1600>;
-
-               samsung,vl-clkp;
-               samsung,vl-dp;
-               samsung,vl-bpix = <4>;
-
-               samsung,vl-hspw = <32>;
-               samsung,vl-hbpd = <80>;
-               samsung,vl-hfpd = <48>;
-               samsung,vl-vspw = <6>;
-               samsung,vl-vbpd = <37>;
-               samsung,vl-vfpd = <3>;
-               samsung,vl-cmd-allow-len = <0xf>;
-
-               samsung,winid = <3>;
-               samsung,interface-mode = <1>;
-               samsung,dp-enabled = <1>;
-               samsung,dual-lcd-enabled = <0>;
-       };
-
-       dp@145b0000 {
-               samsung,lt-status = <0>;
-
-               samsung,master-mode = <0>;
-               samsung,bist-mode = <0>;
-               samsung,bist-pattern = <0>;
-               samsung,h-sync-polarity = <0>;
-               samsung,v-sync-polarity = <0>;
-               samsung,interlaced = <0>;
-               samsung,color-space = <0>;
-               samsung,dynamic-range = <0>;
-               samsung,ycbcr-coeff = <0>;
-               samsung,color-depth = <1>;
-       };
-
-       mmc@12200000 {
-               samsung,bus-width = <8>;
-               samsung,timing = <1 3 3>;
-               samsung,removable = <0>;
-       };
-
-       mmc@12210000 {
-               status = "disabled";
-       };
-
-       mmc@12220000 {
-               samsung,bus-width = <4>;
-               samsung,timing = <1 2 3>;
-               samsung,removable = <1>;
-       };
-
-       mmc@12230000 {
-               status = "disabled";
-       };
-
-       ehci@12110000 {
-               samsung,vbus-gpio = <&gpio 0x316 0>; /* X26 */
-       };
-};
diff --git a/board/samsung/dts/exynos5250-snow.dts b/board/samsung/dts/exynos5250-snow.dts
deleted file mode 100644 (file)
index 9b48a0c..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * SAMSUNG Snow board device tree source
- *
- * Copyright (c) 2012 Samsung Electronics Co., Ltd.
- *             http://www.samsung.com
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
-*/
-
-/dts-v1/;
-/include/ "exynos5250.dtsi"
-
-/ {
-       model = "Google Snow";
-       compatible = "google,snow", "samsung,exynos5250";
-
-       aliases {
-               i2c0 = "/i2c@12c60000";
-               i2c1 = "/i2c@12c70000";
-               i2c2 = "/i2c@12c80000";
-               i2c3 = "/i2c@12c90000";
-               i2c4 = "/i2c@12ca0000";
-               i2c5 = "/i2c@12cb0000";
-               i2c6 = "/i2c@12cc0000";
-               i2c7 = "/i2c@12cd0000";
-               spi0 = "/spi@12d20000";
-               spi1 = "/spi@12d30000";
-               spi2 = "/spi@12d40000";
-               spi3 = "/spi@131a0000";
-               spi4 = "/spi@131b0000";
-               mmc0 = "/mmc@12200000";
-               mmc1 = "/mmc@12210000";
-               mmc2 = "/mmc@12220000";
-               mmc3 = "/mmc@12230000";
-               serial0 = "/serial@12C30000";
-               console = "/serial@12C30000";
-               i2s = "/sound@3830000";
-       };
-
-       i2c4: i2c@12ca0000 {
-               cros-ec@1e {
-                       reg = <0x1e>;
-                       compatible = "google,cros-ec";
-                       i2c-max-frequency = <100000>;
-                       ec-interrupt = <&gpio 782 1>;
-               };
-
-               power-regulator@48 {
-                       compatible = "ti,tps65090";
-                       reg = <0x48>;
-               };
-       };
-
-       spi@131b0000 {
-               spi-max-frequency = <1000000>;
-               spi-deactivate-delay = <100>;
-               cros-ec@0 {
-                       reg = <0>;
-                       compatible = "google,cros-ec";
-                       spi-max-frequency = <5000000>;
-                       ec-interrupt = <&gpio 782 1>;
-                       optimise-flash-write;
-                       status = "disabled";
-               };
-       };
-
-       sound@3830000 {
-               samsung,codec-type = "max98095";
-               codec-enable-gpio = <&gpio 0xb7 0>;
-       };
-
-       sound@12d60000 {
-               status = "disabled";
-       };
-
-       i2c@12cd0000 {
-               soundcodec@22 {
-                       reg = <0x22>;
-                       compatible = "maxim,max98095-codec";
-               };
-       };
-
-       i2c@12c60000 {
-               pmic@9 {
-                       reg = <0x9>;
-                       compatible = "maxim,max77686_pmic";
-               };
-       };
-
-       mmc@12200000 {
-               samsung,bus-width = <8>;
-               samsung,timing = <1 3 3>;
-               samsung,removable = <0>;
-       };
-
-       mmc@12210000 {
-               status = "disabled";
-       };
-
-       mmc@12220000 {
-               samsung,bus-width = <4>;
-               samsung,timing = <1 2 3>;
-               samsung,removable = <1>;
-       };
-
-       mmc@12230000 {
-               status = "disabled";
-       };
-
-       ehci@12110000 {
-               samsung,vbus-gpio = <&gpio 0x309 0>; /* X11 */
-       };
-
-       xhci@12000000 {
-               samsung,vbus-gpio = <&gpio 0x317 0>; /* X27 */
-       };
-
-       tmu@10060000 {
-               samsung,min-temp        = <25>;
-               samsung,max-temp        = <125>;
-               samsung,start-warning   = <95>;
-               samsung,start-tripping  = <105>;
-               samsung,hw-tripping     = <110>;
-               samsung,efuse-min-value = <40>;
-               samsung,efuse-value     = <55>;
-               samsung,efuse-max-value = <100>;
-               samsung,slope           = <274761730>;
-               samsung,dc-value        = <25>;
-       };
-
-       cros-ec-keyb {
-               compatible = "google,cros-ec-keyb";
-               google,key-rows = <8>;
-               google,key-columns = <13>;
-               google,repeat-delay-ms = <240>;
-               google,repeat-rate-ms = <30>;
-               google,ghost-filter;
-               /*
-                * Keymap entries take the form of 0xRRCCKKKK where
-                * RR=Row CC=Column KKKK=Key Code
-                * The values below are for a US keyboard layout and
-                * are taken from the Linux driver. Note that the
-                * 102ND key is not used for US keyboards.
-                */
-               linux,keymap = <
-                       /* CAPSLCK F1         B          F10     */
-                       0x0001003a 0x0002003b 0x00030030 0x00040044
-                       /* N       =          R_ALT      ESC     */
-                       0x00060031 0x0008000d 0x000a0064 0x01010001
-                       /* F4      G          F7         H       */
-                       0x0102003e 0x01030022 0x01040041 0x01060023
-                       /* '       F9         BKSPACE    L_CTRL  */
-                       0x01080028 0x01090043 0x010b000e 0x0200001d
-                       /* TAB     F3         T          F6      */
-                       0x0201000f 0x0202003d 0x02030014 0x02040040
-                       /* ]       Y          102ND      [       */
-                       0x0205001b 0x02060015 0x02070056 0x0208001a
-                       /* F8      GRAVE      F2         5       */
-                       0x02090042 0x03010029 0x0302003c 0x03030006
-                       /* F5      6          -          \       */
-                       0x0304003f 0x03060007 0x0308000c 0x030b002b
-                       /* R_CTRL  A          D          F       */
-                       0x04000061 0x0401001e 0x04020020 0x04030021
-                       /* S       K          J          ;       */
-                       0x0404001f 0x04050025 0x04060024 0x04080027
-                       /* L       ENTER      Z          C       */
-                       0x04090026 0x040b001c 0x0501002c 0x0502002e
-                       /* V       X          ,          M       */
-                       0x0503002f 0x0504002d 0x05050033 0x05060032
-                       /* L_SHIFT /          .          SPACE   */
-                       0x0507002a 0x05080035 0x05090034 0x050B0039
-                       /* 1       3          4          2       */
-                       0x06010002 0x06020004 0x06030005 0x06040003
-                       /* 8       7          0          9       */
-                       0x06050009 0x06060008 0x0608000b 0x0609000a
-                       /* L_ALT   DOWN       RIGHT      Q       */
-                       0x060a0038 0x060b006c 0x060c006a 0x07010010
-                       /* E       R          W          I       */
-                       0x07020012 0x07030013 0x07040011 0x07050017
-                       /* U       R_SHIFT    P          O       */
-                       0x07060016 0x07070036 0x07080019 0x07090018
-                       /* UP      LEFT    */
-                       0x070b0067 0x070c0069>;
-       };
-};
diff --git a/board/samsung/dts/exynos5420-smdk5420.dts b/board/samsung/dts/exynos5420-smdk5420.dts
deleted file mode 100644 (file)
index d739763..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * SAMSUNG SMDK5420 board device tree source
- *
- * Copyright (c) 2013 Samsung Electronics Co., Ltd.
- *             http://www.samsung.com
- *
- * SPDX-License-Identifier:    GPL-2.0+
- */
-
-/dts-v1/;
-/include/ "exynos5420.dtsi"
-
-/ {
-       model = "SAMSUNG SMDK5420 board based on EXYNOS5420";
-       compatible = "samsung,smdk5420", "samsung,exynos5";
-
-       config {
-               hwid = "smdk5420 TEST A-A 9382";
-       };
-
-       aliases {
-               i2c0 = "/i2c@12c60000";
-               i2c1 = "/i2c@12c70000";
-               i2c2 = "/i2c@12c80000";
-               i2c3 = "/i2c@12c90000";
-               i2c4 = "/i2c@12ca0000";
-               i2c5 = "/i2c@12cb0000";
-               i2c6 = "/i2c@12cc0000";
-               i2c7 = "/i2c@12cd0000";
-               i2c8 = "/i2c@12e00000";
-               i2c9 = "/i2c@12e10000";
-               i2c10 = "/i2c@12e20000";
-               spi0 = "/spi@12d20000";
-               spi1 = "/spi@12d30000";
-               spi2 = "/spi@12d40000";
-               spi3 = "/spi@131a0000";
-               spi4 = "/spi@131b0000";
-               mmc0 = "/mmc@12200000";
-               mmc1 = "/mmc@12210000";
-               mmc2 = "/mmc@12220000";
-               xhci0 = "/xhci@12000000";
-               xhci1 = "/xhci@12400000";
-               serial0 = "/serial@12C30000";
-               console = "/serial@12C30000";
-       };
-
-       tmu@10060000 {
-               samsung,min-temp        = <25>;
-               samsung,max-temp        = <125>;
-               samsung,start-warning   = <95>;
-               samsung,start-tripping  = <105>;
-               samsung,hw-tripping     = <110>;
-               samsung,efuse-min-value = <40>;
-               samsung,efuse-value     = <55>;
-               samsung,efuse-max-value = <100>;
-               samsung,slope           = <274761730>;
-               samsung,dc-value        = <25>;
-       };
-
-       /* s2mps11 is on i2c bus 4 */
-       i2c@12ca0000 {
-               #address-cells = <1>;
-               #size-cells = <0>;
-               pmic@66 {
-                       reg = <0x66>;
-                       compatible = "samsung,s2mps11-pmic";
-               };
-       };
-
-       spi@12d20000 { /* spi0 */
-               spi-max-frequency = <50000000>;
-               firmware_storage_spi: flash@0 {
-                       reg = <0>;
-               };
-       };
-
-       fimd@14400000 {
-               samsung,vl-freq = <60>;
-               samsung,vl-col = <2560>;
-               samsung,vl-row = <1600>;
-               samsung,vl-width = <2560>;
-               samsung,vl-height = <1600>;
-
-               samsung,vl-clkp;
-               samsung,vl-dp;
-               samsung,vl-bpix = <4>;
-
-               samsung,vl-hspw = <32>;
-               samsung,vl-hbpd = <80>;
-               samsung,vl-hfpd = <48>;
-               samsung,vl-vspw = <6>;
-               samsung,vl-vbpd = <37>;
-               samsung,vl-vfpd = <3>;
-               samsung,vl-cmd-allow-len = <0xf>;
-
-               samsung,winid = <3>;
-               samsung,interface-mode = <1>;
-               samsung,dp-enabled = <1>;
-               samsung,dual-lcd-enabled = <0>;
-       };
-
-       sound@3830000 {
-               samsung,codec-type = "wm8994";
-       };
-
-       i2c@12c70000 {
-               soundcodec@1a {
-                       reg = <0x1a>;
-                       compatible = "wolfson,wm8994-codec";
-               };
-       };
-
-       mmc@12200000 {
-               samsung,bus-width = <8>;
-               samsung,timing = <1 3 3>;
-               samsung,removable = <0>;
-               samsung,pre-init;
-       };
-
-       mmc@12210000 {
-               status = "disabled";
-       };
-
-       mmc@12220000 {
-               samsung,bus-width = <4>;
-               samsung,timing = <1 2 3>;
-               samsung,removable = <1>;
-       };
-
-       mmc@12230000 {
-               status = "disabled";
-       };
-
-       fimd@14400000 {
-               /* sysmmu is not used in U-Boot */
-               samsung,disable-sysmmu;
-       };
-
-       dp@145b0000 {
-               samsung,lt-status = <0>;
-
-               samsung,master-mode = <0>;
-               samsung,bist-mode = <0>;
-               samsung,bist-pattern = <0>;
-               samsung,h-sync-polarity = <0>;
-               samsung,v-sync-polarity = <0>;
-               samsung,interlaced = <0>;
-               samsung,color-space = <0>;
-               samsung,dynamic-range = <0>;
-               samsung,ycbcr-coeff = <0>;
-               samsung,color-depth = <1>;
-       };
-
-       dmc {
-               mem-type = "ddr3";
-       };
-
-       xhci1: xhci@12400000 {
-               compatible = "samsung,exynos5250-xhci";
-               reg = <0x12400000 0x10000>;
-               #address-cells = <1>;
-               #size-cells = <1>;
-
-               phy {
-                       compatible = "samsung,exynos5250-usb3-phy";
-                       reg = <0x12500000 0x100>;
-               };
-       };
-};
index e8818bf9b11f18a6a855bcc685d61c1a12a5c184..1add9fe626fd17f67f7c209db5eddc63eb6b357f 100644 (file)
@@ -4,16 +4,19 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-ifndef CONFIG_SPL_BUILD
-obj-y  += origen.o
-endif
-
 ifdef CONFIG_SPL_BUILD
-all: $(OBJTREE)/tools/mk$(BOARD)spl
-endif
+# necessary to create built-in.o
+obj- := __dummy__.o
 
-# Fix ME after we implement hostprogs-y.
-ifdef CONFIG_SPL_BUILD
-$(OBJTREE)/tools/mk$(BOARD)spl:        tools/mkv310_image.c
-       $(HOSTCC) tools/mkv310_image.c -o $(OBJTREE)/tools/mk$(BOARD)spl
+hostprogs-y := tools/mkorigenspl
+always := $(hostprogs-y)
+
+# omit -O2 option to suppress
+#   warning: dereferencing type-punned pointer will break strict-aliasing rules
+#
+# TODO:
+# Fix the root cause in tools/mkorigenspl.c and delete the following work-around
+$(obj)/tools/mkorigenspl: HOSTCFLAGS:=$(filter-out -O2,$(HOSTCFLAGS))
+else
+obj-y  += origen.o
 endif
diff --git a/board/samsung/origen/tools/mkorigenspl.c b/board/samsung/origen/tools/mkorigenspl.c
new file mode 100644 (file)
index 0000000..3ed20ef
--- /dev/null
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 2011 Samsung Electronics
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/stat.h>
+
+#define BUFSIZE                        (16*1024)
+#define IMG_SIZE               (16*1024)
+#define SPL_HEADER_SIZE                16
+#define FILE_PERM              (S_IRUSR | S_IWUSR | S_IRGRP \
+                               | S_IWGRP | S_IROTH | S_IWOTH)
+#define SPL_HEADER             "S5PC210 HEADER  "
+/*
+* Requirement:
+* IROM code reads first 14K bytes from boot device.
+* It then calculates the checksum of 14K-4 bytes and compare with data at
+* 14K-4 offset.
+*
+* This function takes two filenames:
+* IN  "u-boot-spl.bin" and
+* OUT "$(BOARD)-spl.bin as filenames.
+* It reads the "u-boot-spl.bin" in 16K buffer.
+* It calculates checksum of 14K-4 Bytes and stores at 14K-4 offset in buffer.
+* It writes the buffer to "$(BOARD)-spl.bin" file.
+*/
+
+int main(int argc, char **argv)
+{
+       int i, len;
+       unsigned char buffer[BUFSIZE] = {0};
+       int ifd, ofd;
+       unsigned int checksum = 0, count;
+
+       if (argc != 3) {
+               printf(" %d Wrong number of arguments\n", argc);
+               exit(EXIT_FAILURE);
+       }
+
+       ifd = open(argv[1], O_RDONLY);
+       if (ifd < 0) {
+               fprintf(stderr, "%s: Can't open %s: %s\n",
+                       argv[0], argv[1], strerror(errno));
+               exit(EXIT_FAILURE);
+       }
+
+       ofd = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC, FILE_PERM);
+       if (ifd < 0) {
+               fprintf(stderr, "%s: Can't open %s: %s\n",
+                       argv[0], argv[2], strerror(errno));
+               if (ifd)
+                       close(ifd);
+               exit(EXIT_FAILURE);
+       }
+
+       len = lseek(ifd, 0, SEEK_END);
+       lseek(ifd, 0, SEEK_SET);
+
+       memcpy(&buffer[0], SPL_HEADER, SPL_HEADER_SIZE);
+
+       count = (len < (IMG_SIZE - SPL_HEADER_SIZE))
+               ? len : (IMG_SIZE - SPL_HEADER_SIZE);
+
+       if (read(ifd, buffer + SPL_HEADER_SIZE, count) != count) {
+               fprintf(stderr, "%s: Can't read %s: %s\n",
+                       argv[0], argv[1], strerror(errno));
+
+               if (ifd)
+                       close(ifd);
+               if (ofd)
+                       close(ofd);
+
+               exit(EXIT_FAILURE);
+       }
+
+       for (i = 0; i < IMG_SIZE - SPL_HEADER_SIZE; i++)
+               checksum += buffer[i+16];
+
+       *(ulong *)buffer ^= 0x1f;
+       *(ulong *)(buffer+4) ^= checksum;
+
+       for (i = 1; i < SPL_HEADER_SIZE; i++)
+               buffer[i] ^= buffer[i-1];
+
+       if (write(ofd, buffer, BUFSIZE) != BUFSIZE) {
+               fprintf(stderr, "%s: Can't write %s: %s\n",
+                       argv[0], argv[2], strerror(errno));
+
+               if (ifd)
+                       close(ifd);
+               if (ofd)
+                       close(ofd);
+
+               exit(EXIT_FAILURE);
+       }
+
+       if (ifd)
+               close(ifd);
+       if (ofd)
+               close(ofd);
+
+       return EXIT_SUCCESS;
+}
diff --git a/board/samsung/origen/tools/mkv310_image.c b/board/samsung/origen/tools/mkv310_image.c
deleted file mode 100644 (file)
index 3ed20ef..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright (C) 2011 Samsung Electronics
- *
- * SPDX-License-Identifier:    GPL-2.0+
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <sys/stat.h>
-
-#define BUFSIZE                        (16*1024)
-#define IMG_SIZE               (16*1024)
-#define SPL_HEADER_SIZE                16
-#define FILE_PERM              (S_IRUSR | S_IWUSR | S_IRGRP \
-                               | S_IWGRP | S_IROTH | S_IWOTH)
-#define SPL_HEADER             "S5PC210 HEADER  "
-/*
-* Requirement:
-* IROM code reads first 14K bytes from boot device.
-* It then calculates the checksum of 14K-4 bytes and compare with data at
-* 14K-4 offset.
-*
-* This function takes two filenames:
-* IN  "u-boot-spl.bin" and
-* OUT "$(BOARD)-spl.bin as filenames.
-* It reads the "u-boot-spl.bin" in 16K buffer.
-* It calculates checksum of 14K-4 Bytes and stores at 14K-4 offset in buffer.
-* It writes the buffer to "$(BOARD)-spl.bin" file.
-*/
-
-int main(int argc, char **argv)
-{
-       int i, len;
-       unsigned char buffer[BUFSIZE] = {0};
-       int ifd, ofd;
-       unsigned int checksum = 0, count;
-
-       if (argc != 3) {
-               printf(" %d Wrong number of arguments\n", argc);
-               exit(EXIT_FAILURE);
-       }
-
-       ifd = open(argv[1], O_RDONLY);
-       if (ifd < 0) {
-               fprintf(stderr, "%s: Can't open %s: %s\n",
-                       argv[0], argv[1], strerror(errno));
-               exit(EXIT_FAILURE);
-       }
-
-       ofd = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC, FILE_PERM);
-       if (ifd < 0) {
-               fprintf(stderr, "%s: Can't open %s: %s\n",
-                       argv[0], argv[2], strerror(errno));
-               if (ifd)
-                       close(ifd);
-               exit(EXIT_FAILURE);
-       }
-
-       len = lseek(ifd, 0, SEEK_END);
-       lseek(ifd, 0, SEEK_SET);
-
-       memcpy(&buffer[0], SPL_HEADER, SPL_HEADER_SIZE);
-
-       count = (len < (IMG_SIZE - SPL_HEADER_SIZE))
-               ? len : (IMG_SIZE - SPL_HEADER_SIZE);
-
-       if (read(ifd, buffer + SPL_HEADER_SIZE, count) != count) {
-               fprintf(stderr, "%s: Can't read %s: %s\n",
-                       argv[0], argv[1], strerror(errno));
-
-               if (ifd)
-                       close(ifd);
-               if (ofd)
-                       close(ofd);
-
-               exit(EXIT_FAILURE);
-       }
-
-       for (i = 0; i < IMG_SIZE - SPL_HEADER_SIZE; i++)
-               checksum += buffer[i+16];
-
-       *(ulong *)buffer ^= 0x1f;
-       *(ulong *)(buffer+4) ^= checksum;
-
-       for (i = 1; i < SPL_HEADER_SIZE; i++)
-               buffer[i] ^= buffer[i-1];
-
-       if (write(ofd, buffer, BUFSIZE) != BUFSIZE) {
-               fprintf(stderr, "%s: Can't write %s: %s\n",
-                       argv[0], argv[2], strerror(errno));
-
-               if (ifd)
-                       close(ifd);
-               if (ofd)
-                       close(ofd);
-
-               exit(EXIT_FAILURE);
-       }
-
-       if (ifd)
-               close(ifd);
-       if (ofd)
-               close(ofd);
-
-       return EXIT_SUCCESS;
-}
index dbc621bd61b191711c2db7d370af31c30d52c14d..de0da167be1e58f539c2a4fee3e0ec2d3b60655d 100644 (file)
@@ -4,16 +4,12 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-ifndef CONFIG_SPL_BUILD
-obj-y  += smdkv310.o
-endif
-
 ifdef CONFIG_SPL_BUILD
-all: $(OBJTREE)/tools/mk$(BOARD)spl
-endif
+# necessary to create built-in.o
+obj- := __dummy__.o
 
-# Fix ME after we implement hostprogs-y.
-ifdef CONFIG_SPL_BUILD
-$(OBJTREE)/tools/mk$(BOARD)spl:        tools/mkv310_image.c
-       $(HOSTCC) tools/mkv310_image.c -o $(OBJTREE)/tools/mk$(BOARD)spl
+hostprogs-y := tools/mksmdkv310spl
+always := $(hostprogs-y)
+else
+obj-y  += smdkv310.o
 endif
diff --git a/board/samsung/smdkv310/tools/mksmdkv310spl.c b/board/samsung/smdkv310/tools/mksmdkv310spl.c
new file mode 100644 (file)
index 0000000..9a64ca6
--- /dev/null
@@ -0,0 +1,101 @@
+/*
+ * Copyright (C) 2011 Samsung Electronics
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/stat.h>
+
+#define CHECKSUM_OFFSET                (14*1024-4)
+#define BUFSIZE                        (16*1024)
+#define FILE_PERM              (S_IRUSR | S_IWUSR | S_IRGRP \
+                               | S_IWGRP | S_IROTH | S_IWOTH)
+/*
+* Requirement:
+* IROM code reads first 14K bytes from boot device.
+* It then calculates the checksum of 14K-4 bytes and compare with data at
+* 14K-4 offset.
+*
+* This function takes two filenames:
+* IN  "u-boot-spl.bin" and
+* OUT "u-boot-mmc-spl.bin" as filenames.
+* It reads the "u-boot-spl.bin" in 16K buffer.
+* It calculates checksum of 14K-4 Bytes and stores at 14K-4 offset in buffer.
+* It writes the buffer to "u-boot-mmc-spl.bin" file.
+*/
+
+int main(int argc, char **argv)
+{
+       int i, len;
+       unsigned char buffer[BUFSIZE] = {0};
+       int ifd, ofd;
+       unsigned int checksum = 0, count;
+
+       if (argc != 3) {
+               printf(" %d Wrong number of arguments\n", argc);
+               exit(EXIT_FAILURE);
+       }
+
+       ifd = open(argv[1], O_RDONLY);
+       if (ifd < 0) {
+               fprintf(stderr, "%s: Can't open %s: %s\n",
+                       argv[0], argv[1], strerror(errno));
+               exit(EXIT_FAILURE);
+       }
+
+       ofd = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC, FILE_PERM);
+       if (ifd < 0) {
+               fprintf(stderr, "%s: Can't open %s: %s\n",
+                       argv[0], argv[2], strerror(errno));
+               if (ifd)
+                       close(ifd);
+               exit(EXIT_FAILURE);
+       }
+
+       len = lseek(ifd, 0, SEEK_END);
+       lseek(ifd, 0, SEEK_SET);
+
+       count = (len < CHECKSUM_OFFSET) ? len : CHECKSUM_OFFSET;
+
+       if (read(ifd, buffer, count) != count) {
+               fprintf(stderr, "%s: Can't read %s: %s\n",
+                       argv[0], argv[1], strerror(errno));
+
+               if (ifd)
+                       close(ifd);
+               if (ofd)
+                       close(ofd);
+
+               exit(EXIT_FAILURE);
+       }
+
+       for (i = 0, checksum = 0; i < CHECKSUM_OFFSET; i++)
+               checksum += buffer[i];
+
+       memcpy(&buffer[CHECKSUM_OFFSET], &checksum, sizeof(checksum));
+
+       if (write(ofd, buffer, BUFSIZE) != BUFSIZE) {
+               fprintf(stderr, "%s: Can't write %s: %s\n",
+                       argv[0], argv[2], strerror(errno));
+
+               if (ifd)
+                       close(ifd);
+               if (ofd)
+                       close(ofd);
+
+               exit(EXIT_FAILURE);
+       }
+
+       if (ifd)
+               close(ifd);
+       if (ofd)
+               close(ofd);
+
+       return EXIT_SUCCESS;
+}
diff --git a/board/samsung/smdkv310/tools/mkv310_image.c b/board/samsung/smdkv310/tools/mkv310_image.c
deleted file mode 100644 (file)
index 9a64ca6..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright (C) 2011 Samsung Electronics
- *
- * SPDX-License-Identifier:    GPL-2.0+
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <sys/stat.h>
-
-#define CHECKSUM_OFFSET                (14*1024-4)
-#define BUFSIZE                        (16*1024)
-#define FILE_PERM              (S_IRUSR | S_IWUSR | S_IRGRP \
-                               | S_IWGRP | S_IROTH | S_IWOTH)
-/*
-* Requirement:
-* IROM code reads first 14K bytes from boot device.
-* It then calculates the checksum of 14K-4 bytes and compare with data at
-* 14K-4 offset.
-*
-* This function takes two filenames:
-* IN  "u-boot-spl.bin" and
-* OUT "u-boot-mmc-spl.bin" as filenames.
-* It reads the "u-boot-spl.bin" in 16K buffer.
-* It calculates checksum of 14K-4 Bytes and stores at 14K-4 offset in buffer.
-* It writes the buffer to "u-boot-mmc-spl.bin" file.
-*/
-
-int main(int argc, char **argv)
-{
-       int i, len;
-       unsigned char buffer[BUFSIZE] = {0};
-       int ifd, ofd;
-       unsigned int checksum = 0, count;
-
-       if (argc != 3) {
-               printf(" %d Wrong number of arguments\n", argc);
-               exit(EXIT_FAILURE);
-       }
-
-       ifd = open(argv[1], O_RDONLY);
-       if (ifd < 0) {
-               fprintf(stderr, "%s: Can't open %s: %s\n",
-                       argv[0], argv[1], strerror(errno));
-               exit(EXIT_FAILURE);
-       }
-
-       ofd = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC, FILE_PERM);
-       if (ifd < 0) {
-               fprintf(stderr, "%s: Can't open %s: %s\n",
-                       argv[0], argv[2], strerror(errno));
-               if (ifd)
-                       close(ifd);
-               exit(EXIT_FAILURE);
-       }
-
-       len = lseek(ifd, 0, SEEK_END);
-       lseek(ifd, 0, SEEK_SET);
-
-       count = (len < CHECKSUM_OFFSET) ? len : CHECKSUM_OFFSET;
-
-       if (read(ifd, buffer, count) != count) {
-               fprintf(stderr, "%s: Can't read %s: %s\n",
-                       argv[0], argv[1], strerror(errno));
-
-               if (ifd)
-                       close(ifd);
-               if (ofd)
-                       close(ofd);
-
-               exit(EXIT_FAILURE);
-       }
-
-       for (i = 0, checksum = 0; i < CHECKSUM_OFFSET; i++)
-               checksum += buffer[i];
-
-       memcpy(&buffer[CHECKSUM_OFFSET], &checksum, sizeof(checksum));
-
-       if (write(ofd, buffer, BUFSIZE) != BUFSIZE) {
-               fprintf(stderr, "%s: Can't write %s: %s\n",
-                       argv[0], argv[2], strerror(errno));
-
-               if (ifd)
-                       close(ifd);
-               if (ofd)
-                       close(ofd);
-
-               exit(EXIT_FAILURE);
-       }
-
-       if (ifd)
-               close(ifd);
-       if (ofd)
-               close(ofd);
-
-       return EXIT_SUCCESS;
-}
index f890008be22885f86ce712d94a1c6cee86718ca6..ce29b4100e24bb85e1311802ae0064db86412ecf 100644 (file)
 #
 
 # TBS: add for debugging purposes
-BUILDUSER := $(shell whoami)
-FORCEBUILD := $(shell rm -f karef.o)
-
-CFLAGS += -DBUILDUSER='"$(BUILDUSER)"'
-# TBS: end debugging
+ccflags-y += -DBUILDUSER='"$(shell whoami)"'
 
 obj-y  = karef.o ../common/flash.o ../common/sb_common.o
 extra-y        += init.o
index 37d91a51a3a22f80c1d0e8356f3634c701b085b4..2c1028bd2b9117352df54923957da3fcaadc5693 100644 (file)
@@ -9,11 +9,7 @@
 #
 
 # TBS: add for debugging purposes
-BUILDUSER := $(shell whoami)
-FORCEBUILD := $(shell rm -f metrobox.o)
-
-CFLAGS += -DBUILDUSER='"$(BUILDUSER)"'
-# TBS: end debugging
+ccflags-y += -DBUILDUSER='"$(shell whoami)"'
 
 obj-y  = metrobox.o ../common/flash.o ../common/sb_common.o
 extra-y        += init.o
index 08dc09f06dfc4b3abb5c379fba20dc0700a1a39c..b0ba320481b68c5eaca959193e48553d1b0a6ba6 100644 (file)
@@ -5,7 +5,10 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-ifndef CONFIG_SPL_BUILD
+ifdef CONFIG_SPL_BUILD
+# necessary to create built-in.o
+obj- := __dummy__.o
+else
 obj-y  := spr_misc.o
 obj-y  += spr_lowlevel_init.o
 endif
index f9053feec35538c801c4cf396c541d5e9d7c1d4f..18d3dd2e6fad49f775e26014841679da42bce471 100644 (file)
@@ -5,6 +5,9 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-ifndef CONFIG_SPL_BUILD
+ifdef CONFIG_SPL_BUILD
+# necessary to create built-in.o
+obj- := __dummy__.o
+else
 obj-y  := fpga.o x600.o
 endif
index 6867a70b7cf269b4b3bb8c26fc9d26e92839af5c..f0605e2bcd3ca3685a1e85e7fbeda1c4a1b5d4c7 100644 (file)
@@ -4,6 +4,6 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-CFLAGS += -D__RELEASE -D__STN_8500
+ccflags-y += -D__RELEASE -D__STN_8500
 
 obj-y  := snowball.o
index b9dfbe935959cb3ac73d31b5742e7aa0d866a95d..d6c4280475aac343a13ed8539b9ed53ed860fa16 100644 (file)
@@ -4,6 +4,6 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-CFLAGS += -D__RELEASE -D__STN_8500
+ccflags-y += -D__RELEASE -D__STN_8500
 
 obj-y  := u8500_href.o gpio.o
index f1ef9bf682dde110e7a1f50f0cf5cc853d79a953..0d3df2dbd90209ee815c93a3c6a114625c9f2267 100644 (file)
@@ -7,6 +7,7 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-CFLAGS_lib += -O2
-CFLAGS_lib/lzma += -O2
-CFLAGS_lib/zlib += -O2
+# FIX ME
+ifneq ($(filter lib lib/lzma lib/zlib, $(obj)),)
+ccflags-y := -O2
+endif
index 973d357559369c8cbf8ed1175938992f4018ef8d..97eaafef2e2b980b9ed66325d46cefd584c18284 100644 (file)
@@ -7,9 +7,10 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-CFLAGS_lib += -O2
-CFLAGS_lib/lzma += -O2
-CFLAGS_lib/zlib += -O2
+# FIX ME
+ifneq ($(filter lib lib/lzma lib/zlib, $(obj)),)
+ccflags-y := -O2
+endif
 
 # Set some default LDR flags based on boot mode.
 LDR_FLAGS-BFIN_BOOT_PARA := --bits 16 --dma 8
index 1b60b8f672eaa4ca7116365730996acad389d51c..bed828584bf73bbd656c39e0eacc0556e5ddca09 100644 (file)
@@ -12,6 +12,7 @@
  */
 #include <common.h>
 #include <palmas.h>
+#include <sata.h>
 #include <asm/arch/sys_proto.h>
 #include <asm/arch/mmc_host_def.h>
 #include <asm/arch/sata.h>
@@ -80,7 +81,7 @@ int board_init(void)
 
 int board_late_init(void)
 {
-       omap_sata_init();
+       init_sata(0);
        return 0;
 }
 
index b549d72900652cfa020e9c36ff1e62891175f21f..3eaa5ac3986b3688224babc8c90be0eac18c3552 100644 (file)
@@ -15,6 +15,7 @@
 #include "mux_data.h"
 
 #if defined(CONFIG_USB_EHCI) || defined(CONFIG_USB_XHCI_OMAP)
+#include <sata.h>
 #include <usb.h>
 #include <asm/gpio.h>
 #include <asm/arch/clock.h>
@@ -70,7 +71,7 @@ int board_init(void)
 
 int board_late_init(void)
 {
-       omap_sata_init();
+       init_sata(0);
        return 0;
 }
 
diff --git a/board/toradex/dts/tegra20-colibri_t20_iris.dts b/board/toradex/dts/tegra20-colibri_t20_iris.dts
deleted file mode 100644 (file)
index c0e54af..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/dts-v1/;
-
-#include "tegra20.dtsi"
-
-/ {
-       model = "Toradex Colibri T20";
-       compatible = "toradex,t20", "nvidia,tegra20";
-
-       aliases {
-               usb0 = "/usb@c5008000";
-               usb1 = "/usb@c5000000";
-               usb2 = "/usb@c5004000";
-               sdhci0 = "/sdhci@c8000600";
-       };
-
-       usb@c5000000 {
-               dr_mode = "otg";
-       };
-
-       usb@c5004000 {
-               nvidia,phy-reset-gpio = <&gpio 169 0>; /* PV1 */
-               nvidia,vbus-gpio = <&gpio 217 0>; /* PBB1 */
-       };
-
-       usb@c5008000 {
-               nvidia,vbus-gpio = <&gpio 178 1>; /* PW2 low-active */
-       };
-
-       nand-controller@70008000 {
-               nvidia,wp-gpios = <&gpio 144 0>; /* PS0 */
-               nvidia,width = <8>;
-               nvidia,timing = <15 100 25 80 25 10 15 10 100>;
-
-               nand@0 {
-                       reg = <0>;
-                       compatible = "nand-flash";
-               };
-       };
-
-       sdhci@c8000600 {
-               status = "okay";
-               cd-gpios = <&gpio 23 1>; /* gpio PC7 */
-               bus-width = <4>;
-       };
-};
diff --git a/board/xilinx/dts/microblaze-generic.dts b/board/xilinx/dts/microblaze-generic.dts
deleted file mode 100644 (file)
index 2033309..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-/dts-v1/;
-/ {
-       #address-cells = <1>;
-       #size-cells = <1>;
-       aliases {
-       } ;
-} ;
diff --git a/board/xilinx/dts/zynq-microzed.dts b/board/xilinx/dts/zynq-microzed.dts
deleted file mode 100644 (file)
index 6da71c1..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * Xilinx MicroZED board DTS
- *
- * Copyright (C) 2013 Xilinx, Inc.
- *
- * SPDX-License-Identifier:    GPL-2.0+
- */
-/dts-v1/;
-#include "zynq-7000.dtsi"
-
-/ {
-       model = "Zynq MicroZED Board";
-       compatible = "xlnx,zynq-microzed", "xlnx,zynq-7000";
-};
diff --git a/board/xilinx/dts/zynq-zc702.dts b/board/xilinx/dts/zynq-zc702.dts
deleted file mode 100644 (file)
index 667dc28..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * Xilinx ZC702 board DTS
- *
- * Copyright (C) 2013 Xilinx, Inc.
- *
- * SPDX-License-Identifier:    GPL-2.0+
- */
-/dts-v1/;
-#include "zynq-7000.dtsi"
-
-/ {
-       model = "Zynq ZC702 Board";
-       compatible = "xlnx,zynq-zc702", "xlnx,zynq-7000";
-};
diff --git a/board/xilinx/dts/zynq-zc706.dts b/board/xilinx/dts/zynq-zc706.dts
deleted file mode 100644 (file)
index 526fc88..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * Xilinx ZC706 board DTS
- *
- * Copyright (C) 2013 Xilinx, Inc.
- *
- * SPDX-License-Identifier:    GPL-2.0+
- */
-/dts-v1/;
-#include "zynq-7000.dtsi"
-
-/ {
-       model = "Zynq ZC706 Board";
-       compatible = "xlnx,zynq-zc706", "xlnx,zynq-7000";
-};
diff --git a/board/xilinx/dts/zynq-zc770-xm010.dts b/board/xilinx/dts/zynq-zc770-xm010.dts
deleted file mode 100644 (file)
index 8b542a1..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * Xilinx ZC770 XM010 board DTS
- *
- * Copyright (C) 2013 Xilinx, Inc.
- *
- * SPDX-License-Identifier:    GPL-2.0+
- */
-/dts-v1/;
-#include "zynq-7000.dtsi"
-
-/ {
-       model = "Zynq ZC770 XM010 Board";
-       compatible = "xlnx,zynq-zc770-xm010", "xlnx,zynq-7000";
-};
diff --git a/board/xilinx/dts/zynq-zc770-xm012.dts b/board/xilinx/dts/zynq-zc770-xm012.dts
deleted file mode 100644 (file)
index 0379a07..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * Xilinx ZC770 XM012 board DTS
- *
- * Copyright (C) 2013 Xilinx, Inc.
- *
- * SPDX-License-Identifier:    GPL-2.0+
- */
-/dts-v1/;
-#include "zynq-7000.dtsi"
-
-/ {
-       model = "Zynq ZC770 XM012 Board";
-       compatible = "xlnx,zynq-zc770-xm012", "xlnx,zynq-7000";
-};
diff --git a/board/xilinx/dts/zynq-zc770-xm013.dts b/board/xilinx/dts/zynq-zc770-xm013.dts
deleted file mode 100644 (file)
index a4f9e05..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * Xilinx ZC770 XM013 board DTS
- *
- * Copyright (C) 2013 Xilinx, Inc.
- *
- * SPDX-License-Identifier:    GPL-2.0+
- */
-/dts-v1/;
-#include "zynq-7000.dtsi"
-
-/ {
-       model = "Zynq ZC770 XM013 Board";
-       compatible = "xlnx,zynq-zc770-xm013", "xlnx,zynq-7000";
-};
diff --git a/board/xilinx/dts/zynq-zed.dts b/board/xilinx/dts/zynq-zed.dts
deleted file mode 100644 (file)
index 91a5deb..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * Xilinx ZED board DTS
- *
- * Copyright (C) 2013 Xilinx, Inc.
- *
- * SPDX-License-Identifier:    GPL-2.0+
- */
-/dts-v1/;
-#include "zynq-7000.dtsi"
-
-/ {
-       model = "Zynq ZED Board";
-       compatible = "xlnx,zynq-zed", "xlnx,zynq-7000";
-};
index a83246ee27b293944819fc01be0ce90b22f82c87..3b2ff9bb529476b8e60e8c5f52befebc0f4268ef 100644 (file)
@@ -202,6 +202,9 @@ ifdef CONFIG_SPL_USB_HOST_SUPPORT
 obj-$(CONFIG_SPL_USB_SUPPORT) += usb.o usb_hub.o
 obj-$(CONFIG_USB_STORAGE) += usb_storage.o
 endif
+ifdef CONFIG_SPL_SATA_SUPPORT
+obj-$(CONFIG_CMD_SCSI) += cmd_scsi.o
+endif
 ifneq ($(CONFIG_SPL_NET_SUPPORT),y)
 obj-$(CONFIG_ENV_IS_NOWHERE) += env_nowhere.o
 obj-$(CONFIG_ENV_IS_IN_MMC) += env_mmc.o
@@ -235,11 +238,6 @@ obj-$(CONFIG_FIT_SIGNATURE) += image-sig.o
 obj-y += memsize.o
 obj-y += stdio.o
 
-$(obj)env_embedded.o: $(src)env_embedded.c
-       $(CC) $(AFLAGS) -Wa,--no-warn \
-               -DENV_CRC=$(shell $(obj)../tools/envcrc) \
-               -c -o $@ $(src)env_embedded.c
-
-# SEE README.arm-unaligned-accesses
-$(obj)hush.o: CFLAGS += $(PLATFORM_NO_UNALIGNED)
-$(obj)fdt_support.o: CFLAGS += $(PLATFORM_NO_UNALIGNED)
+CFLAGS_env_embedded.o := -Wa,--no-warn -DENV_CRC=$(shell tools/envcrc 2>/dev/null)
+CFLAGS_hush.o := $(PLATFORM_NO_UNALIGNED)
+CFLAGS_fdt_support.o := $(PLATFORM_NO_UNALIGNED)
index aa70c3e57de67e5041225abd88b6080fa46ca692..02965b0df76a36a2218264d82365d087816d831f 100644 (file)
@@ -360,7 +360,7 @@ static int setup_fdt(void)
 {
 #ifdef CONFIG_OF_EMBED
        /* Get a pointer to the FDT */
-       gd->fdt_blob = _binary_dt_dtb_start;
+       gd->fdt_blob = __dtb_dt_begin;
 #elif defined CONFIG_OF_SEPARATE
        /* FDT is at end of image */
 # ifdef CONFIG_SYS_SYM_OFFSETS
@@ -887,9 +887,7 @@ static init_fnc_t init_sequence_f[] = {
 #ifdef CONFIG_PPC
        checkcpu,
 #endif
-#if defined(CONFIG_DISPLAY_CPUINFO)
        print_cpuinfo,          /* display cpu info (and speed) */
-#endif
 #if defined(CONFIG_MPC5xxx)
        prt_mpc5xxx_clks,
 #endif /* CONFIG_MPC5xxx */
index 8289d25b0623468017282393e9127841918fbba5..68b047ba6aed1b07509b7ffd8b26fc715c139ce6 100644 (file)
@@ -79,8 +79,8 @@ int do_ext4_write(cmd_tbl_t *cmdtp, int flag, int argc,
        /* get the address in hexadecimal format (string to int) */
        ram_address = simple_strtoul(argv[3], NULL, 16);
 
-       /* get the filesize in base 10 format */
-       file_size = simple_strtoul(argv[5], NULL, 10);
+       /* get the filesize in hexadecimal format */
+       file_size = simple_strtoul(argv[5], NULL, 16);
 
        /* set the device as block device */
        ext4fs_set_blk_dev(dev_desc, &info);
index 7b97dc9332b4d275ee05eb97690102a1a95a4e3f..b3f7687aee6a2c87bd802539d7cdb96d9a4c0847 100644 (file)
@@ -168,7 +168,9 @@ removable:
                scsi_curr_dev = -1;
 
        printf("Found %d device(s).\n", scsi_max_devs);
+#ifndef CONFIG_SPL_BUILD
        setenv_ulong("scsidevs", scsi_max_devs);
+#endif
 }
 
 int scsi_get_disk_count(void)
index bacc3684069b89f39b899cb21a19f33379328bbe..c93fe78231000e1ad1f28fa8dec560e35f8161ea 100644 (file)
 
 #include <common.h>
 #include <command.h>
+#include <fs.h>
+
+#define OP_INVALID     0
+#define OP_NOT         1
+#define OP_OR          2
+#define OP_AND         3
+#define OP_STR_EMPTY   4
+#define OP_STR_NEMPTY  5
+#define OP_STR_EQ      6
+#define OP_STR_NEQ     7
+#define OP_STR_LT      8
+#define OP_STR_GT      9
+#define OP_INT_EQ      10
+#define OP_INT_NEQ     11
+#define OP_INT_LT      12
+#define OP_INT_LE      13
+#define OP_INT_GT      14
+#define OP_INT_GE      15
+#define OP_FILE_EXISTS 16
+
+const struct {
+       int arg;
+       const char *str;
+       int op;
+       int adv;
+} op_adv[] = {
+       {1, "=", OP_STR_EQ, 3},
+       {1, "!=", OP_STR_NEQ, 3},
+       {1, "<", OP_STR_LT, 3},
+       {1, ">", OP_STR_GT, 3},
+       {1, "-eq", OP_INT_EQ, 3},
+       {1, "-ne", OP_INT_NEQ, 3},
+       {1, "-lt", OP_INT_LT, 3},
+       {1, "-le", OP_INT_LE, 3},
+       {1, "-gt", OP_INT_GT, 3},
+       {1, "-ge", OP_INT_GE, 3},
+       {0, "!", OP_NOT, 1},
+       {0, "-o", OP_OR, 1},
+       {0, "-a", OP_AND, 1},
+       {0, "-z", OP_STR_EMPTY, 2},
+       {0, "-n", OP_STR_NEMPTY, 2},
+       {0, "-e", OP_FILE_EXISTS, 4},
+};
 
 static int do_test(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
        char * const *ap;
-       int left, adv, expr, last_expr, neg, last_cmp;
+       int i, op, left, adv, expr, last_expr, last_unop, last_binop;
 
        /* args? */
        if (argc < 3)
@@ -35,101 +78,112 @@ static int do_test(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        }
 #endif
 
-       last_expr = 0;
-       left = argc - 1; ap = argv + 1;
-       if (left > 0 && strcmp(ap[0], "!") == 0) {
-               neg = 1;
-               ap++;
-               left--;
-       } else
-               neg = 0;
-
-       expr = -1;
-       last_cmp = -1;
+       left = argc - 1;
+       ap = argv + 1;
+       expr = 0;
+       last_unop = OP_INVALID;
+       last_binop = OP_INVALID;
        last_expr = -1;
        while (left > 0) {
-
-               if (strcmp(ap[0], "-o") == 0 || strcmp(ap[0], "-a") == 0)
-                       adv = 1;
-               else if (strcmp(ap[0], "-z") == 0 || strcmp(ap[0], "-n") == 0)
-                       adv = 2;
-               else
-                       adv = 3;
-
+               for (i = 0; i < ARRAY_SIZE(op_adv); i++) {
+                       if (left <= op_adv[i].arg)
+                               continue;
+                       if (!strcmp(ap[op_adv[i].arg], op_adv[i].str)) {
+                               op = op_adv[i].op;
+                               adv = op_adv[i].adv;
+                               break;
+                       }
+               }
+               if (i == ARRAY_SIZE(op_adv)) {
+                       expr = 1;
+                       break;
+               }
                if (left < adv) {
                        expr = 1;
                        break;
                }
 
-               if (adv == 1) {
-                       if (strcmp(ap[0], "-o") == 0) {
-                               last_expr = expr;
-                               last_cmp = 0;
-                       } else if (strcmp(ap[0], "-a") == 0) {
-                               last_expr = expr;
-                               last_cmp = 1;
-                       } else {
-                               expr = 1;
-                               break;
-                       }
+               switch (op) {
+               case OP_STR_EMPTY:
+                       expr = strlen(ap[1]) == 0 ? 1 : 0;
+                       break;
+               case OP_STR_NEMPTY:
+                       expr = strlen(ap[1]) == 0 ? 0 : 1;
+                       break;
+               case OP_STR_EQ:
+                       expr = strcmp(ap[0], ap[2]) == 0;
+                       break;
+               case OP_STR_NEQ:
+                       expr = strcmp(ap[0], ap[2]) != 0;
+                       break;
+               case OP_STR_LT:
+                       expr = strcmp(ap[0], ap[2]) < 0;
+                       break;
+               case OP_STR_GT:
+                       expr = strcmp(ap[0], ap[2]) > 0;
+                       break;
+               case OP_INT_EQ:
+                       expr = simple_strtol(ap[0], NULL, 10) ==
+                                       simple_strtol(ap[2], NULL, 10);
+                       break;
+               case OP_INT_NEQ:
+                       expr = simple_strtol(ap[0], NULL, 10) !=
+                                       simple_strtol(ap[2], NULL, 10);
+                       break;
+               case OP_INT_LT:
+                       expr = simple_strtol(ap[0], NULL, 10) <
+                                       simple_strtol(ap[2], NULL, 10);
+                       break;
+               case OP_INT_LE:
+                       expr = simple_strtol(ap[0], NULL, 10) <=
+                                       simple_strtol(ap[2], NULL, 10);
+                       break;
+               case OP_INT_GT:
+                       expr = simple_strtol(ap[0], NULL, 10) >
+                                       simple_strtol(ap[2], NULL, 10);
+                       break;
+               case OP_INT_GE:
+                       expr = simple_strtol(ap[0], NULL, 10) >=
+                                       simple_strtol(ap[2], NULL, 10);
+                       break;
+               case OP_FILE_EXISTS:
+                       expr = file_exists(ap[1], ap[2], ap[3], FS_TYPE_ANY);
+                       break;
                }
 
-               if (adv == 2) {
-                       if (strcmp(ap[0], "-z") == 0)
-                               expr = strlen(ap[1]) == 0 ? 1 : 0;
-                       else if (strcmp(ap[0], "-n") == 0)
-                               expr = strlen(ap[1]) == 0 ? 0 : 1;
-                       else {
-                               expr = 1;
-                               break;
+               switch (op) {
+               case OP_OR:
+                       last_expr = expr;
+                       last_binop = OP_OR;
+                       break;
+               case OP_AND:
+                       last_expr = expr;
+                       last_binop = OP_AND;
+                       break;
+               case OP_NOT:
+                       if (last_unop == OP_NOT)
+                               last_unop = OP_INVALID;
+                       else
+                               last_unop = OP_NOT;
+                       break;
+               default:
+                       if (last_unop == OP_NOT) {
+                               expr = !expr;
+                               last_unop = OP_INVALID;
                        }
 
-                       if (last_cmp == 0)
+                       if (last_binop == OP_OR)
                                expr = last_expr || expr;
-                       else if (last_cmp == 1)
+                       else if (last_binop == OP_AND)
                                expr = last_expr && expr;
-                       last_cmp = -1;
-               }
-
-               if (adv == 3) {
-                       if (strcmp(ap[1], "=") == 0)
-                               expr = strcmp(ap[0], ap[2]) == 0;
-                       else if (strcmp(ap[1], "!=") == 0)
-                               expr = strcmp(ap[0], ap[2]) != 0;
-                       else if (strcmp(ap[1], ">") == 0)
-                               expr = strcmp(ap[0], ap[2]) > 0;
-                       else if (strcmp(ap[1], "<") == 0)
-                               expr = strcmp(ap[0], ap[2]) < 0;
-                       else if (strcmp(ap[1], "-eq") == 0)
-                               expr = simple_strtol(ap[0], NULL, 10) == simple_strtol(ap[2], NULL, 10);
-                       else if (strcmp(ap[1], "-ne") == 0)
-                               expr = simple_strtol(ap[0], NULL, 10) != simple_strtol(ap[2], NULL, 10);
-                       else if (strcmp(ap[1], "-lt") == 0)
-                               expr = simple_strtol(ap[0], NULL, 10) < simple_strtol(ap[2], NULL, 10);
-                       else if (strcmp(ap[1], "-le") == 0)
-                               expr = simple_strtol(ap[0], NULL, 10) <= simple_strtol(ap[2], NULL, 10);
-                       else if (strcmp(ap[1], "-gt") == 0)
-                               expr = simple_strtol(ap[0], NULL, 10) > simple_strtol(ap[2], NULL, 10);
-                       else if (strcmp(ap[1], "-ge") == 0)
-                               expr = simple_strtol(ap[0], NULL, 10) >= simple_strtol(ap[2], NULL, 10);
-                       else {
-                               expr = 1;
-                               break;
-                       }
+                       last_binop = OP_INVALID;
 
-                       if (last_cmp == 0)
-                               expr = last_expr || expr;
-                       else if (last_cmp == 1)
-                               expr = last_expr && expr;
-                       last_cmp = -1;
+                       break;
                }
 
                ap += adv; left -= adv;
        }
 
-       if (neg)
-               expr = !expr;
-
        expr = !expr;
 
        debug (": returns %d\n", expr);
index 6f9ce7d37c227f81f15f0127fe5f1c6d9c8c3566..a54a919a5b30827abc3fda437837463851500a21 100644 (file)
@@ -463,7 +463,7 @@ int image_setup_libfdt(bootm_headers_t *images, void *blob,
                return -1;
        }
        arch_fixup_memory_node(blob);
-       if (IMAAGE_OF_BOARD_SETUP)
+       if (IMAGE_OF_BOARD_SETUP)
                ft_board_setup(blob, gd->bd);
        fdt_fixup_ethernet(blob);
 
index cf4b67e3e832dfbe29acfabb15a53e3248b81c47..b94a3fe86dc3469bf651f09980b3d366b573cb04 100644 (file)
@@ -1500,7 +1500,7 @@ int fit_image_load(bootm_headers_t *images, const char *prop_name, ulong addr,
        }
        bootstage_mark(bootstage_id + BOOTSTAGE_SUB_FORMAT_OK);
        if (fit_uname) {
-               /* get ramdisk component image node offset */
+               /* get FIT component image node offset */
                bootstage_mark(bootstage_id + BOOTSTAGE_SUB_UNIT_NAME);
                noffset = fit_image_get_node(fit, fit_uname);
        } else {
index 65a1484fc4e48fc6016e57c385778837599add63..64569c2cc6d563732a259c237db0ac7d52060bc9 100644 (file)
@@ -18,4 +18,5 @@ obj-$(CONFIG_SPL_NET_SUPPORT) += spl_net.o
 obj-$(CONFIG_SPL_MMC_SUPPORT) += spl_mmc.o
 obj-$(CONFIG_SPL_USB_SUPPORT) += spl_usb.o
 obj-$(CONFIG_SPL_FAT_SUPPORT) += spl_fat.o
+obj-$(CONFIG_SPL_SATA_SUPPORT) += spl_sata.o
 endif
index 0645cee789ff8640f12ab69de458b1cd91013eef..774fdad2523b7ff0e4f5a48371756053fda0e7a6 100644 (file)
@@ -209,6 +209,11 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
        case BOOT_DEVICE_USB:
                spl_usb_load_image();
                break;
+#endif
+#ifdef CONFIG_SPL_SATA_SUPPORT
+       case BOOT_DEVICE_SATA:
+               spl_sata_load_image();
+               break;
 #endif
        default:
                debug("SPL: Un-supported Boot Device\n");
diff --git a/common/spl/spl_sata.c b/common/spl/spl_sata.c
new file mode 100644 (file)
index 0000000..2e7adca
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * (C) Copyright 2013
+ * Texas Instruments, <www.ti.com>
+ *
+ * Dan Murphy <dmurphy@ti.com>
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ *
+ * Derived work from spl_usb.c
+ */
+
+#include <common.h>
+#include <spl.h>
+#include <asm/u-boot.h>
+#include <sata.h>
+#include <fat.h>
+#include <version.h>
+#include <image.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+void spl_sata_load_image(void)
+{
+       int err;
+       block_dev_desc_t *stor_dev;
+
+       err = init_sata(CONFIG_SPL_SATA_BOOT_DEVICE);
+       if (err) {
+#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
+               printf("spl: sata init failed: err - %d\n", err);
+#endif
+               hang();
+       } else {
+               /* try to recognize storage devices immediately */
+               stor_dev = scsi_get_dev(0);
+       }
+
+#ifdef CONFIG_SPL_OS_BOOT
+       if (spl_start_uboot() || spl_load_image_fat_os(stor_dev,
+                                                                       CONFIG_SYS_SATA_FAT_BOOT_PARTITION))
+#endif
+       err = spl_load_image_fat(stor_dev,
+                               CONFIG_SYS_SATA_FAT_BOOT_PARTITION,
+                               CONFIG_SPL_FAT_LOAD_PAYLOAD_NAME);
+       if (err) {
+               puts("Error loading sata device\n");
+               hang();
+       }
+}
index 60e297ae9c75c7559c3b1c905810e755467a5ceb..5b886aa70069de1e54339356f99c819b799faf28 100644 (file)
--- a/config.mk
+++ b/config.mk
@@ -6,49 +6,6 @@
 #
 #########################################################################
 
-# Set shell to bash if possible, otherwise fall back to sh
-SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
-       else if [ -x /bin/bash ]; then echo /bin/bash; \
-       else echo sh; fi; fi)
-
-export SHELL
-
-ifeq ($(CURDIR),$(SRCTREE))
-dir :=
-else
-dir := $(subst $(SRCTREE)/,,$(CURDIR))
-endif
-
-ifneq ($(OBJTREE),$(SRCTREE))
-# Create object files for SPL in a separate directory
-ifeq ($(CONFIG_SPL_BUILD),y)
-ifeq ($(CONFIG_TPL_BUILD),y)
-obj := $(if $(dir),$(TPLTREE)/$(dir)/,$(TPLTREE)/)
-else
-obj := $(if $(dir),$(SPLTREE)/$(dir)/,$(SPLTREE)/)
-endif
-else
-obj := $(if $(dir),$(OBJTREE)/$(dir)/,$(OBJTREE)/)
-endif
-src := $(if $(dir),$(SRCTREE)/$(dir)/,$(SRCTREE)/)
-
-$(shell mkdir -p $(obj))
-else
-# Create object files for SPL in a separate directory
-ifeq ($(CONFIG_SPL_BUILD),y)
-ifeq ($(CONFIG_TPL_BUILD),y)
-obj := $(if $(dir),$(TPLTREE)/$(dir)/,$(TPLTREE)/)
-else
-obj := $(if $(dir),$(SPLTREE)/$(dir)/,$(SPLTREE)/)
-
-endif
-$(shell mkdir -p $(obj))
-else
-obj :=
-endif
-src :=
-endif
-
 # clean the slate ...
 PLATFORM_RELFLAGS =
 PLATFORM_CPPFLAGS =
@@ -56,117 +13,6 @@ PLATFORM_LDFLAGS =
 
 #########################################################################
 
-HOSTCFLAGS     = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer \
-                 $(HOSTCPPFLAGS)
-HOSTSTRIP      = strip
-
-#
-# 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.
-#
-
-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")
-else
-HOSTCC         = gcc
-endif
-
-ifeq ($(HOSTOS),cygwin)
-HOSTCFLAGS     += -ansi
-endif
-
-# We build some files with extra pedantic flags to try to minimize things
-# that won't build on some weird host compiler -- though there are lots of
-# exceptions for files that aren't complaint.
-
-HOSTCFLAGS_NOPED = $(filter-out -pedantic,$(HOSTCFLAGS))
-HOSTCFLAGS     += -pedantic
-
-#########################################################################
-#
-# Option checker, gcc version (courtesy linux kernel) to ensure
-# only supported compiler options are used
-#
-CC_OPTIONS_CACHE_FILE := $(OBJTREE)/include/generated/cc_options.mk
-CC_TEST_OFILE := $(OBJTREE)/include/generated/cc_test_file.o
-
--include $(CC_OPTIONS_CACHE_FILE)
-
-cc-option-sys = $(shell mkdir -p $(dir $(CC_TEST_OFILE)); \
-               if $(CC) $(CFLAGS) $(1) -S -xc /dev/null -o $(CC_TEST_OFILE) \
-               > /dev/null 2>&1; then \
-               echo 'CC_OPTIONS += $(strip $1)' >> $(CC_OPTIONS_CACHE_FILE); \
-               echo "$(1)"; fi)
-
-ifeq ($(CONFIG_CC_OPT_CACHE_DISABLE),y)
-cc-option = $(strip $(if $(call cc-option-sys,$1),$1,$2))
-else
-cc-option = $(strip $(if $(findstring $1,$(CC_OPTIONS)),$1,\
-               $(if $(call cc-option-sys,$1),$1,$2)))
-endif
-
-# cc-version
-# Usage gcc-ver := $(call cc-version)
-cc-version = $(shell $(SHELL) $(SRCTREE)/scripts/gcc-version.sh $(CC))
-binutils-version = $(shell $(SHELL) $(SRCTREE)/scripts/binutils-version.sh $(AS))
-dtc-version = $(shell $(SHELL) $(SRCTREE)/scripts/dtc-version.sh $(DTC))
-
-#
-# Include the make variables (CC, etc...)
-#
-AS     = $(CROSS_COMPILE)as
-
-# Always use GNU ld
-LD     = $(shell if $(CROSS_COMPILE)ld.bfd -v > /dev/null 2>&1; \
-               then echo "$(CROSS_COMPILE)ld.bfd"; else echo "$(CROSS_COMPILE)ld"; fi;)
-
-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
-RANLIB = $(CROSS_COMPILE)RANLIB
-DTC    = dtc
-CHECK  = sparse
-
-#########################################################################
-
-# Load generated board configuration
-ifeq ($(CONFIG_TPL_BUILD),y)
-# Include TPL autoconf
-sinclude $(OBJTREE)/include/tpl-autoconf.mk
-else
-ifeq ($(CONFIG_SPL_BUILD),y)
-# Include SPL autoconf
-sinclude $(OBJTREE)/include/spl-autoconf.mk
-else
-# Include normal autoconf
-sinclude $(OBJTREE)/include/autoconf.mk
-endif
-endif
-sinclude $(OBJTREE)/include/config.mk
-
 # Some architecture config.mk files need to know what CPUDIR is set to,
 # so calculate CPUDIR before including ARCH/SOC/CPU config.mk files.
 # Check if arch/$ARCH/cpu/$CPU exists, otherwise assume arch/$ARCH/cpu contains
@@ -193,189 +39,14 @@ endif
 
 #########################################################################
 
-# We don't actually use $(ARFLAGS) anywhere anymore, so catch people
-# who are porting old code to latest mainline but not updating $(AR).
-ARFLAGS = $(error update your Makefile to use cmd_link_o_target and not AR)
 RELFLAGS= $(PLATFORM_RELFLAGS)
-DBGFLAGS= -g # -DDEBUG
-OPTFLAGS= -Os #-fomit-frame-pointer
 
 OBJCFLAGS += --gap-fill=0xff
 
-gccincdir := $(shell $(CC) -print-file-name=include)
-
-CPPFLAGS := $(DBGFLAGS) $(OPTFLAGS) $(RELFLAGS)                \
-       -D__KERNEL__
-
-# Enable garbage collection of un-used sections for SPL
-ifeq ($(CONFIG_SPL_BUILD),y)
-CPPFLAGS += -ffunction-sections -fdata-sections
-LDFLAGS_FINAL += --gc-sections
-endif
-
-# TODO(sjg@chromium.org): Is this correct on Mac OS?
-
-# MXSImage needs LibSSL
-ifneq ($(CONFIG_MX23)$(CONFIG_MX28),)
-HOSTLIBS       += -lssl -lcrypto
-# Add CONFIG_MXS into host CFLAGS, so we can check whether or not register
-# the mxsimage support within tools/mxsimage.c .
-HOSTCFLAGS     += -DCONFIG_MXS
-endif
-
-ifdef CONFIG_FIT_SIGNATURE
-HOSTLIBS       += -lssl -lcrypto
-
-# This affects include/image.h, but including the board config file
-# is tricky, so manually define this options here.
-HOSTCFLAGS     += -DCONFIG_FIT_SIGNATURE
-endif
-
-ifneq ($(CONFIG_SYS_TEXT_BASE),)
-CPPFLAGS += -DCONFIG_SYS_TEXT_BASE=$(CONFIG_SYS_TEXT_BASE)
-endif
-
-ifeq ($(CONFIG_SPL_BUILD),y)
-CPPFLAGS += -DCONFIG_SPL_BUILD
-ifeq ($(CONFIG_TPL_BUILD),y)
-CPPFLAGS += -DCONFIG_TPL_BUILD
-endif
-endif
-
-# Does this architecture support generic board init?
-ifeq ($(__HAVE_ARCH_GENERIC_BOARD),)
-ifneq ($(CONFIG_SYS_GENERIC_BOARD),)
-CHECK_GENERIC_BOARD = $(error Your architecture does not support generic board. \
-Please undefined CONFIG_SYS_GENERIC_BOARD in your board config file)
-endif
-endif
-
-ifneq ($(OBJTREE),$(SRCTREE))
-CPPFLAGS += -I$(OBJTREE)/include
-endif
-
-CPPFLAGS += -I$(TOPDIR)/include -I$(SRCTREE)/arch/$(ARCH)/include
-CPPFLAGS += -fno-builtin -ffreestanding -nostdinc      \
-       -isystem $(gccincdir) -pipe $(PLATFORM_CPPFLAGS)
-
-CFLAGS := $(CPPFLAGS) -Wall -Wstrict-prototypes
-
-ifdef BUILD_TAG
-CFLAGS += -DBUILD_TAG='"$(BUILD_TAG)"'
-endif
-
-CFLAGS_SSP := $(call cc-option,-fno-stack-protector)
-CFLAGS += $(CFLAGS_SSP)
-# Some toolchains enable security related warning flags by default,
-# but they don't make much sense in the u-boot world, so disable them.
-CFLAGS_WARN := $(call cc-option,-Wno-format-nonliteral) \
-              $(call cc-option,-Wno-format-security)
-CFLAGS += $(CFLAGS_WARN)
-
-# Report stack usage if supported
-CFLAGS_STACK := $(call cc-option,-fstack-usage)
-CFLAGS += $(CFLAGS_STACK)
+CPPFLAGS = $(RELFLAGS)
+CPPFLAGS += -pipe $(PLATFORM_CPPFLAGS)
 
 BCURDIR = $(subst $(SRCTREE)/,,$(CURDIR:$(obj)%=%))
 
-ifeq ($(findstring examples/,$(BCURDIR)),)
-ifeq ($(CONFIG_SPL_BUILD),)
-ifdef FTRACE
-CFLAGS += -finstrument-functions -DFTRACE
-endif
-endif
-endif
-
-# $(CPPFLAGS) sets -g, which causes gcc to pass a suitable -g<format>
-# option to the assembler.
-AFLAGS_DEBUG :=
-
-# turn jbsr into jsr for m68k
-ifeq ($(ARCH),m68k)
-ifeq ($(findstring 3.4,$(shell $(CC) --version)),3.4)
-AFLAGS_DEBUG := -Wa,-gstabs,-S
-endif
-endif
-
-AFLAGS := $(AFLAGS_DEBUG) -D__ASSEMBLY__ $(CPPFLAGS)
-
 LDFLAGS += $(PLATFORM_LDFLAGS)
 LDFLAGS_FINAL += -Bstatic
-
-LDFLAGS_u-boot += -T $(obj)u-boot.lds $(LDFLAGS_FINAL)
-ifneq ($(CONFIG_SYS_TEXT_BASE),)
-LDFLAGS_u-boot += -Ttext $(CONFIG_SYS_TEXT_BASE)
-endif
-
-LDFLAGS_$(SPL_BIN) += -T $(obj)u-boot-spl.lds $(LDFLAGS_FINAL)
-ifneq ($(CONFIG_SPL_TEXT_BASE),)
-LDFLAGS_$(SPL_BIN) += -Ttext $(CONFIG_SPL_TEXT_BASE)
-endif
-
-# Linus' kernel sanity checking tool
-CHECKFLAGS     := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \
-                 -Wbitwise -Wno-return-void -D__CHECK_ENDIAN__ $(CF)
-
-# Location of a usable BFD library, where we define "usable" as
-# "built for ${HOST}, supports ${TARGET}".  Sensible values are
-# - When cross-compiling: the root of the cross-environment
-# - Linux/ppc (native): /usr
-# - NetBSD/ppc (native): you lose ... (must extract these from the
-#   binutils build directory, plus the native and U-Boot include
-#   files don't like each other)
-#
-# So far, this is used only by tools/gdb/Makefile.
-
-ifeq ($(HOSTOS),darwin)
-BFD_ROOT_DIR =         /usr/local/tools
-else
-ifeq ($(HOSTARCH),$(ARCH))
-# native
-BFD_ROOT_DIR =         /usr
-else
-#BFD_ROOT_DIR =                /LinuxPPC/CDK           # Linux/i386
-#BFD_ROOT_DIR =                /usr/pkg/cross          # NetBSD/i386
-BFD_ROOT_DIR =         /opt/powerpc
-endif
-endif
-
-#########################################################################
-
-export HOSTCC HOSTCFLAGS HOSTLDFLAGS PEDCFLAGS HOSTSTRIP CROSS_COMPILE \
-       AS LD CC CPP AR NM STRIP OBJCOPY OBJDUMP MAKE
-export CONFIG_SYS_TEXT_BASE PLATFORM_CPPFLAGS PLATFORM_RELFLAGS CPPFLAGS CFLAGS AFLAGS
-
-#########################################################################
-
-# Allow boards to use custom optimize flags on a per dir/file basis
-ALL_AFLAGS = $(AFLAGS) $(AFLAGS_$(BCURDIR)/$(@F)) $(AFLAGS_$(BCURDIR))
-ALL_CFLAGS = $(CFLAGS) $(CFLAGS_$(BCURDIR)/$(@F)) $(CFLAGS_$(BCURDIR))
-EXTRA_CPPFLAGS = $(CPPFLAGS_$(BCURDIR)/$(@F)) $(CPPFLAGS_$(BCURDIR))
-ALL_CFLAGS += $(EXTRA_CPPFLAGS)
-
-# The _DEP version uses the $< file target (for dependency generation)
-# See rules.mk
-EXTRA_CPPFLAGS_DEP = $(CPPFLAGS_$(BCURDIR)/$(addsuffix .o,$(basename $<))) \
-               $(CPPFLAGS_$(BCURDIR))
-$(obj)%.s:     %.S
-       $(CPP) $(ALL_AFLAGS) -o $@ $<
-$(obj)%.o:     %.S
-       $(CC)  $(ALL_AFLAGS) -o $@ $< -c
-$(obj)%.o:     %.c
-ifneq ($(CHECKSRC),0)
-       $(CHECK) $(CHECKFLAGS) $(ALL_CFLAGS) $<
-endif
-       $(CC)  $(ALL_CFLAGS) -o $@ $< -c
-$(obj)%.i:     %.c
-       $(CPP) $(ALL_CFLAGS) -o $@ $< -c
-$(obj)%.s:     %.c
-       $(CC)  $(ALL_CFLAGS) -o $@ $< -c -S
-
-#########################################################################
-
-# If the list of objects to link is empty, just create an empty built-in.o
-cmd_link_o_target = $(if $(strip $1),\
-                     $(LD) $(LDFLAGS) -r -o $@ $1,\
-                     rm -f $@; $(AR) rcs $@ )
-
-#########################################################################
index 48abec8328ea9bde177554dea741430f53e56be5..6970cecc71a1730b15616e3f36ce396bbd847a4d 100644 (file)
@@ -5,7 +5,7 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-#CFLAGS += -DET_DEBUG -DDEBUG
+#ccflags-y += -DET_DEBUG -DDEBUG
 
 obj-$(CONFIG_PARTITIONS)       += part.o
 obj-$(CONFIG_MAC_PARTITION)   += part_mac.o
index 90c1b112a15073f3c08bfe44c81e35e52a33d24b..720f245ceb1f34dcf2f01c9607291db14a118d40 100644 (file)
@@ -1,4 +1,3 @@
-*/
 *.xml
 *.ps
 *.pdf
index 29b79d7cd11e5c83b24601add7c70c10365a7a4d..44afc471486ae444117fcb31a1bffa20f07a5975 100644 (file)
@@ -1,14 +1,12 @@
 ###
 # This makefile is used to generate the kernel documentation,
 # primarily based on in-line comments in various source files.
-# See doc/kernel-doc-nano-HOWTO.txt for instruction in how
+# See Documentation/kernel-doc-nano-HOWTO.txt for instruction in how
 # to document the SRC - and how to read it.
 # To add a new book the only step required is to add the book to the
 # list of DOCBOOKS.
 
-include $(TOPDIR)/config.mk
-
-DOCBOOKS := fs.xml linker_lists.xml stdio.xml
+DOCBOOKS := linker_lists.xml stdio.xml
 
 ###
 # The build process is as follows (targets):
@@ -26,9 +24,9 @@ PS_METHOD     = $(prefer-db2x)
 
 ###
 # The targets that may be used.
-PHONY += $(obj).depend xmldocs sgmldocs psdocs pdfdocs htmldocs mandocs installmandocs cleandocs
+PHONY += xmldocs sgmldocs psdocs pdfdocs htmldocs mandocs installmandocs cleandocs
 
-BOOKS := $(addprefix $(OBJTREE)/doc/DocBook/,$(DOCBOOKS))
+BOOKS := $(addprefix $(obj)/,$(DOCBOOKS))
 xmldocs: $(BOOKS)
 sgmldocs: xmldocs
 
@@ -53,10 +51,10 @@ installmandocs: mandocs
 
 ###
 #External programs used
-KERNELDOC = $(SRCTREE)/tools/kernel-doc/kernel-doc
-DOCPROC   = $(OBJTREE)/tools/kernel-doc/docproc
+KERNELDOC = $(srctree)/scripts/kernel-doc
+DOCPROC   = $(objtree)/scripts/docproc
 
-XMLTOFLAGS = -m $(SRCTREE)/doc/DocBook/stylesheet.xsl
+XMLTOFLAGS = -m $(srctree)/doc/DocBook/stylesheet.xsl
 XMLTOFLAGS += --skip-validation
 
 ###
@@ -66,28 +64,36 @@ XMLTOFLAGS += --skip-validation
 #     appropriate parameters.
 # The following rules are used to generate the .xml documentation
 # required to generate the final targets. (ps, pdf, html).
-%.xml: %.tmpl
-       $(DOCPROC) doc $< >$@
-
-ifeq ($@, "cleandocs")
-sinclude $(obj).depend
-$(obj).depend: $(patsubst %.xml, %.tmpl, $(DOCBOOKS))
-       rm -f $(obj).depend ;                                   \
-       touch $(obj).depend ;                                   \
-       for file in $^ ; do                                     \
-               xmlfile=`echo "$${file}" |                      \
-                       sed "s/tmpl$$/xml/"` ;                  \
-               echo -n "$${xmlfile}: ">> $(obj).depend ;       \
-               $(DOCPROC) depend $$file >> $(obj).depend ;     \
-               echo -e "\n\t$(DOCPROC) doc $< >$${xmlfile} " >>        \
-                       $(obj).depend ;                         \
-       done
+quiet_cmd_docproc = DOCPROC $@
+      cmd_docproc = SRCTREE=$(srctree)/ $(DOCPROC) doc $< >$@
+define rule_docproc
+       set -e;                                                         \
+        $(if $($(quiet)cmd_$(1)),echo '  $($(quiet)cmd_$(1))';)        \
+        $(cmd_$(1));                                                   \
+        (                                                              \
+          echo 'cmd_$@ := $(cmd_$(1))';                                \
+          echo $@: `SRCTREE=$(srctree) $(DOCPROC) depend $<`;          \
+        ) > $(dir $@).$(notdir $@).cmd
+endef
+
+%.xml: %.tmpl FORCE
+       $(call if_changed_rule,docproc)
+
+###
+#Read in all saved dependency files
+cmd_files := $(wildcard $(foreach f,$(BOOKS),$(dir $(f)).$(notdir $(f)).cmd))
+
+ifneq ($(cmd_files),)
+  include $(cmd_files)
 endif
 
 ###
 # Changes in kernel-doc force a rebuild of all documentation
 $(BOOKS): $(KERNELDOC)
 
+# Tell kbuild to always build the programs
+always := $(hostprogs-y)
+
 notfoundtemplate = echo "*** You have to install docbook-utils or xmlto ***"; \
                   exit 1
 db2xtemplate = db2TYPE -o $(dir $@) $<
@@ -113,37 +119,34 @@ endif
 quiet_cmd_db2ps = PS      $@
       cmd_db2ps = $(subst TYPE,ps, $($(PS_METHOD)template))
 %.ps : %.xml
-       $(call cmd_db2ps)
+       $(call cmd,db2ps)
 
 quiet_cmd_db2pdf = PDF     $@
       cmd_db2pdf = $(subst TYPE,pdf, $($(PDF_METHOD)template))
 %.pdf : %.xml
-       $(call cmd_db2pdf)
+       $(call cmd,db2pdf)
 
 
 index = index.html
-main_idx = $(index)
+main_idx = doc/DocBook/$(index)
 build_main_index = rm -rf $(main_idx); \
                   echo '<h1>U-Boot Bootloader HTML Documentation</h1>' >> $(main_idx) && \
                   echo '<h2>U-Boot Version: $(U_BOOT_VERSION)</h2>' >> $(main_idx) && \
                   cat $(HTML) >> $(main_idx)
 
-# To work around bug [1] in docbook-xsl-stylesheets 1.76.1 , generate only html
-# docs instead of xhtml with xmlto.
-# [1] http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=654338
 quiet_cmd_db2html = HTML    $@
-      cmd_db2html = xmlto html $(XMLTOFLAGS) -o $(patsubst %.html,%,$@) $< && \
+      cmd_db2html = xmlto xhtml $(XMLTOFLAGS) -o $(patsubst %.html,%,$@) $< && \
                echo '<a HREF="$(patsubst %.html,%,$(notdir $@))/index.html"> \
-       $(patsubst %.html,%,$(notdir $@))</a><p>' > $@
+        $(patsubst %.html,%,$(notdir $@))</a><p>' > $@
 
 %.html:        %.xml
        @(which xmlto > /dev/null 2>&1) || \
         (echo "*** You need to install xmlto ***"; \
          exit 1)
        @rm -rf $@ $(patsubst %.html,%,$@)
-       $(call cmd_db2html)
+       $(call cmd,db2html)
        @if [ ! -z "$(PNG-$(basename $(notdir $@)))" ]; then \
-           cp $(PNG-$(basename $(notdir $@))) $(patsubst %.html,%,$@); fi
+            cp $(PNG-$(basename $(notdir $@))) $(patsubst %.html,%,$@); fi
 
 quiet_cmd_db2man = MAN     $@
       cmd_db2man = if grep -q refentry $<; then xmlto man $(XMLTOFLAGS) -o $(obj)/man $< ; gzip -f $(obj)/man/*.9; fi
@@ -151,8 +154,8 @@ quiet_cmd_db2man = MAN     $@
        @(which xmlto > /dev/null 2>&1) || \
         (echo "*** You need to install xmlto ***"; \
          exit 1)
-       $(Q)mkdir -p $(obj)man
-       $(call cmd_db2man)
+       $(Q)mkdir -p $(obj)/man
+       $(call cmd,db2man)
        @touch $@
 
 ###
@@ -164,7 +167,7 @@ quiet_cmd_fig2eps = FIG2EPS $@
        @(which fig2dev > /dev/null 2>&1) || \
         (echo "*** You need to install transfig ***"; \
          exit 1)
-       $(call cmd_fig2eps)
+       $(call cmd,fig2eps)
 
 quiet_cmd_fig2png = FIG2PNG $@
       cmd_fig2png = fig2dev -Lpng $< $@
@@ -173,7 +176,7 @@ quiet_cmd_fig2png = FIG2PNG $@
        @(which fig2dev > /dev/null 2>&1) || \
         (echo "*** You need to install transfig ***"; \
          exit 1)
-       $(call cmd_fig2png)
+       $(call cmd,fig2png)
 
 ###
 # Rule to convert a .c file to inline XML documentation
@@ -219,9 +222,8 @@ clean-files := $(DOCBOOKS) \
 clean-dirs := $(patsubst %.xml,%,$(DOCBOOKS)) man
 
 cleandocs:
-       @rm -f $(obj).depend
-       @$(Q)rm -f $(call objectify, $(clean-files))
-       @$(Q)rm -rf $(call objectify, $(clean-dirs))
+       $(Q)rm -f $(call objectify, $(clean-files))
+       $(Q)rm -rf $(call objectify, $(clean-dirs))
 
 # Declare the contents of the .PHONY variable as phony.  We keep that
 # information in a variable se we can use it in if_changed and friends.
index 8adce568b6040df7ba3d426ca91f09e81ee2e236..85b25275196ffab5d34e31e207b78a483128a3f1 100644 (file)
@@ -7,5 +7,4 @@
 <!-- <param name="paper.type">A4</param> -->
 <param name="generate.section.toc.level">2</param>
 <param name="use.id.as.filename">1</param>
-<param name="html.stylesheet">../docbook.css</param>
 </stylesheet>
index 52a2ceb4759ae181c95a5d0c2d17c84a245d915b..e56356ee867f7b9d3e4ffffebe69941bd3118054 100644 (file)
@@ -8,8 +8,5 @@ obj-y = atibios.o biosemu.o besys.o bios.o \
        $(X86DIR)/sys.o \
        $(X86DIR)/debug.o
 
-EXTRA_CFLAGS += -I. -I./include \
+ccflags-y := -I$(srctree)/$(src) -I$(srctree)/$(src)/include \
        -D__PPC__  -D__BIG_ENDIAN__
-
-CFLAGS += $(EXTRA_CFLAGS)
-CPPFLAGS += $(EXTRA_CFLAGS)
index a78a7242534fb3800ecf2ae8f287e1fed57451bf..25b8e8a2d79f4490e246aa2b687a522523e11818 100644 (file)
@@ -8,7 +8,7 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-#CFLAGS += -DDEBUG
+#ccflags-y += -DDEBUG
 
 obj-$(CONFIG_DTT_ADM1021) += adm1021.o
 obj-$(CONFIG_DTT_ADT7460) += adt7460.o
index 32c2ab9944e1dfd15cf2153a55c9035d7444589c..994500b688bd45b24cc3b288ea4f6ca064c49393 100644 (file)
@@ -52,7 +52,7 @@ static struct phy_driver AR8031_driver =  {
        .uid = 0x4dd074,
        .mask = 0xffffffef,
        .features = PHY_GBIT_FEATURES,
-       .config = ar8021_config,
+       .config = genphy_config,
        .startup = genphy_startup,
        .shutdown = genphy_shutdown,
 };
index d5a2725c971b3311fd336587b5ccf249edc2ff8a..003d322d23a19ed004561d1a052344aa146f634f 100644 (file)
@@ -5,7 +5,7 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-#CFLAGS += -DDEBUG
+#ccflags-y += -DDEBUG
 
 obj-$(CONFIG_RTC_AT91SAM9_RTT) += at91sam9_rtt.o
 obj-$(CONFIG_RTC_BFIN) += bfin_rtc.o
index ba72348b76a60b4c1791b0377a0a4b6feb246bbc..3facf0fc105dbf430d0eeb6b884fcb7e0ee9081e 100644 (file)
@@ -9,7 +9,6 @@ obj-$(CONFIG_USB_MUSB_DSPS) += musb_dsps.o
 obj-$(CONFIG_USB_MUSB_AM35X) += am35x.o
 obj-$(CONFIG_USB_MUSB_OMAP2PLUS) += omap2430.o
 
-CFLAGS_NO_WARN := $(call cc-option,-Wno-unused-variable) \
-                       $(call cc-option,-Wno-unused-but-set-variable) \
-                       $(call cc-option,-Wno-unused-label)
-CFLAGS += $(CFLAGS_NO_WARN)
+ccflags-y := $(call cc-option,-Wno-unused-variable) \
+               $(call cc-option,-Wno-unused-but-set-variable) \
+               $(call cc-option,-Wno-unused-label)
diff --git a/dts/.gitignore b/dts/.gitignore
new file mode 100644 (file)
index 0000000..1b37180
--- /dev/null
@@ -0,0 +1,2 @@
+*.dtb
+*.dtb.S
index 6c7198f65ff565da9d305d318f1047551c5764cc..9907463fc6344d524d9ea415db5112573c6e1a8b 100644 (file)
@@ -7,64 +7,41 @@
 # This Makefile builds the internal U-Boot fdt if CONFIG_OF_CONTROL is
 # enabled. See doc/README.fdt-control for more details.
 
+DEVICE_TREE ?= $(CONFIG_DEFAULT_DEVICE_TREE:"%"=%)
 ifeq ($(DEVICE_TREE),)
-$(if $(CONFIG_DEFAULT_DEVICE_TREE),,\
-$(error Please define CONFIG_DEFAULT_DEVICE_TREE in your board header file))
-DEVICE_TREE = $(CONFIG_DEFAULT_DEVICE_TREE:"%"=%)
+DEVICE_TREE := unset
 endif
 
-DTS_INCDIRS =  $(SRCTREE)/board/$(VENDOR)/$(BOARD)/dts
-DTS_INCDIRS += $(SRCTREE)/board/$(VENDOR)/dts
-DTS_INCDIRS += $(SRCTREE)/arch/$(ARCH)/dts
+DTB := arch/$(ARCH)/dts/$(DEVICE_TREE).dtb
 
-DTS_CPPFLAGS := -x assembler-with-cpp -undef -D__DTS__ \
-               -nostdinc $(addprefix -I,$(DTS_INCDIRS))
+quiet_cmd_copy = COPY    $@
+      cmd_copy = cp $< $@
 
-DTC_FLAGS := -R 4 -p 0x1000 \
-       $(addprefix -i ,$(DTS_INCDIRS))
+$(obj)/dt.dtb: $(DTB) FORCE
+       $(call if_changed,copy)
 
-# Use a constant name for this so we can access it from C code.
-# objcopy doesn't seem to allow us to set the symbol name independently of
-# the filename.
-DT_BIN := $(obj)dt.dtb
+targets += dt.dtb
 
-$(DT_BIN): $(TOPDIR)/board/$(VENDOR)/dts/$(DEVICE_TREE).dts
-       $(CPP) $(DTS_CPPFLAGS) $< -o $(DT_BIN).dts.tmp
-       $(DTC) $(DTC_FLAGS) -O dtb -o ${DT_BIN} $(DT_BIN).dts.tmp
+$(DTB): arch-dtbs
+       $(Q)test -e $@ || (                                             \
+       echo >&2;                                                       \
+       echo >&2 "Device Tree Source is not correctly specified.";      \
+       echo >&2 "Please define 'CONFIG_DEFAULT_DEVICE_TREE'";          \
+       echo >&2 "or build with 'DEVICE_TREE=<device_tree>' argument";  \
+       echo >&2;                                                       \
+       /bin/false)
 
-process_lds = \
-       $(1) | sed -r -n 's/^OUTPUT_$(2)[ ("]*([^")]*).*/\1/p'
+arch-dtbs:
+       $(Q)$(MAKE) $(build)=arch/$(ARCH)/dts dtbs
 
-# Run the compiler and get the link script from the linker
-GET_LDS = $(CC) $(CFLAGS) $(LDFLAGS) -Wl,--verbose 2>&1
+.SECONDARY: $(obj)/dt.dtb.S
 
-$(obj)dt.o: $(DT_BIN)
-       # We want the output format and arch.
-       # We also hope to win a prize for ugliest Makefile / shell interaction
-       # We look in the LDSCRIPT first.
-       # Then try the linker which should give us the answer.
-       # Then check it worked.
-       [ -n "$(LDSCRIPT)" ] && \
-               oformat=`$(call process_lds,cat $(LDSCRIPT),FORMAT)` && \
-               oarch=`$(call process_lds,cat $(LDSCRIPT),ARCH)` ;\
-       \
-       [ -z $${oformat} ] && \
-               oformat=`$(call process_lds,$(GET_LDS),FORMAT)` ;\
-       [ -z $${oarch} ] && \
-               oarch=`$(call process_lds,$(GET_LDS),ARCH)` ;\
-       \
-       [ -z $${oformat} ] && \
-               echo "Cannot read OUTPUT_FORMAT from lds file $(LDSCRIPT)" && \
-               exit 1 || true ;\
-       [ -z $${oarch} ] && \
-               echo "Cannot read OUTPUT_ARCH from lds file $(LDSCRIPT)" && \
-               exit 1 || true ;\
-       \
-       cd $(dir ${DT_BIN}) && \
-       $(OBJCOPY) -I binary -O $${oformat} -B $${oarch} \
-               $(notdir ${DT_BIN}) $@
-       rm $(DT_BIN)
+obj-$(CONFIG_OF_EMBED) := dt.dtb.o
 
-obj-$(CONFIG_OF_EMBED) := dt.o
+dtbs: $(obj)/dt.dtb
+       @:
 
-binary:        $(DT_BIN)
+clean-files := dt.dtb.S
+
+# Let clean descend into dts directories
+subdir- += ../arch/*/dts
diff --git a/examples/Makefile b/examples/Makefile
new file mode 100644 (file)
index 0000000..18d008e
--- /dev/null
@@ -0,0 +1,9 @@
+ifndef CONFIG_SANDBOX
+
+ifdef FTRACE
+subdir-ccflags-y += -finstrument-functions -DFTRACE
+endif
+
+subdir-y += standalone
+subdir-$(CONFIG_API) += api
+endif
index cad10a3ecb453cafa1fa3f472dbe0633fc0f691f..09475f87e496a908f6d3d2a7f81c1768a015a2e5 100644 (file)
@@ -11,10 +11,8 @@ ifeq ($(ARCH),arm)
 LOAD_ADDR = 0x1000000
 endif
 
-include $(TOPDIR)/config.mk
-
 # Resulting ELF and binary exectuables will be named demo and demo.bin
-OUTPUT = $(obj)demo
+extra-y = demo
 
 # Source files located in the examples/api directory
 SOBJ_FILES-y += crt0.o
@@ -31,39 +29,25 @@ EXT_COBJ_FILES-y += lib/time.o
 EXT_COBJ_FILES-y += lib/vsprintf.o
 EXT_SOBJ_FILES-$(CONFIG_PPC) += arch/powerpc/lib/ppcstring.o
 
-# Create a list of source files so their dependencies can be auto-generated
-SRCS   += $(addprefix $(SRCTREE)/,$(EXT_COBJ_FILES-y:.o=.c))
-SRCS   += $(addprefix $(SRCTREE)/,$(EXT_SOBJ_FILES-y:.o=.S))
-SRCS   += $(addprefix $(SRCTREE)/examples/api/,$(COBJ_FILES-y:.o=.c))
-SRCS   += $(addprefix $(SRCTREE)/examples/api/,$(SOBJ_FILES-y:.o=.S))
-
 # Create a list of object files to be compiled
-OBJS   += $(addprefix $(obj),$(SOBJ_FILES-y))
-OBJS   += $(addprefix $(obj),$(COBJ_FILES-y))
-OBJS   += $(addprefix $(obj),$(notdir $(EXT_COBJ_FILES-y)))
-OBJS   += $(addprefix $(obj),$(notdir $(EXT_SOBJ_FILES-y)))
-
-all:   $(obj).depend $(OUTPUT)
+OBJS   += $(addprefix $(obj)/,$(SOBJ_FILES-y))
+OBJS   += $(addprefix $(obj)/,$(COBJ_FILES-y))
+OBJS   += $(addprefix $(obj)/,$(notdir $(EXT_COBJ_FILES-y)))
+OBJS   += $(addprefix $(obj)/,$(notdir $(EXT_SOBJ_FILES-y)))
 
 #########################################################################
 
-$(OUTPUT):     $(OBJS)
+$(obj)/demo:   $(OBJS)
                $(LD) --gc-sections -Ttext $(LOAD_ADDR) -o $@ $^ $(PLATFORM_LIBS)
-               $(OBJCOPY) -O binary $@ $(OUTPUT).bin 2>/dev/null
+
+$(obj)/demo.bin: $(obj)/demo
+               $(OBJCOPY) -O binary $< $@ 2>/dev/null
 
 # Rule to build generic library C files
-$(obj)%.o: $(SRCTREE)/lib/%.c
-       $(CC) -g $(CFLAGS) -c -o $@ $<
+$(addprefix $(obj)/,$(notdir $(EXT_COBJ_FILES-y))): $(obj)/%.o: $(SRCTREE)/lib/%.c FORCE
+       $(call cmd,force_checksrc)
+       $(call if_changed_rule,cc_o_c)
 
 # Rule to build architecture-specific library assembly files
-$(obj)%.o: $(SRCTREE)/arch/$(ARCH)/lib/%.S
-       $(CC) -g $(CFLAGS) -c -o $@ $<
-
-#########################################################################
-
-# defines $(obj).depend target
-include $(SRCTREE)/rules.mk
-
-sinclude $(obj).depend
-
-#########################################################################
+$(addprefix $(obj)/,$(notdir $(EXT_SOBJ_FILES-y))): $(obj)/%.o: $(SRCTREE)/arch/$(ARCH)/lib/%.S
+       $(call if_changed_dep,as_o_S)
index 0841c758ff9660e33123ef00ab234bf85d32de65..47c9d54f5f791f775a0e011e6037b95ae2081d19 100644 (file)
@@ -5,31 +5,29 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-include $(TOPDIR)/config.mk
-
-ELF-y        := hello_world
-
-ELF-$(CONFIG_SMC91111)           += smc91111_eeprom
-ELF-$(CONFIG_SMC911X)            += smc911x_eeprom
-ELF-$(CONFIG_SPI_FLASH_ATMEL)    += atmel_df_pow2
-ELF-$(CONFIG_MPC5xxx)            += interrupt
-ELF-$(CONFIG_8xx)                += test_burst timer
-ELF-$(CONFIG_8260)               += mem_to_mem_idma2intr
-ELF-$(CONFIG_PPC)                += sched
+extra-y        := hello_world
+extra-$(CONFIG_SMC91111)           += smc91111_eeprom
+extra-$(CONFIG_SMC911X)            += smc911x_eeprom
+extra-$(CONFIG_SPI_FLASH_ATMEL)    += atmel_df_pow2
+extra-$(CONFIG_MPC5xxx)            += interrupt
+extra-$(CONFIG_8xx)                += test_burst timer
+extra-$(CONFIG_8260)               += mem_to_mem_idma2intr
+extra-$(CONFIG_PPC)                += sched
 
 #
 # Some versions of make do not handle trailing white spaces properly;
 # leading to build failures. The problem was found with GNU Make 3.80.
 # Using 'strip' as a workaround for the problem.
 #
-ELF := $(strip $(ELF-y))
+ELF := $(strip $(extra-y))
+
+extra-y += $(addsuffix .srec,$(extra-y)) $(addsuffix .bin,$(extra-y))
+clean-files  := $(extra-) $(addsuffix .srec,$(extra-)) $(addsuffix .bin,$(extra-))
 
-SREC := $(addsuffix .srec,$(ELF))
-BIN  := $(addsuffix .bin,$(ELF))
 
 COBJS  := $(ELF:=.o)
 
-LIB    = $(obj)libstubs.o
+LIB    = $(obj)/libstubs.o
 
 LIBAOBJS-$(CONFIG_PPC) += ppc_longjmp.o ppc_setjmp.o
 LIBAOBJS-$(CONFIG_8xx) += test_burst_lib.o
@@ -37,13 +35,12 @@ LIBAOBJS := $(LIBAOBJS-y)
 
 LIBCOBJS = stubs.o
 
-LIBOBJS        = $(addprefix $(obj),$(LIBAOBJS) $(LIBCOBJS))
+.SECONDARY: $(call objectify,$(COBJS))
+targets += $(patsubst $(obj)/%,%,$(LIB)) $(COBJS) $(LIBAOBJS) $(LIBCOBJS)
+
+LIBOBJS        = $(addprefix $(obj)/,$(LIBAOBJS) $(LIBCOBJS))
 
-SRCS   := $(COBJS:.o=.c) $(LIBCOBJS:.o=.c) $(LIBAOBJS:.o=.S)
-OBJS   := $(addprefix $(obj),$(COBJS))
-ELF    := $(addprefix $(obj),$(ELF))
-BIN    := $(addprefix $(obj),$(BIN))
-SREC   := $(addprefix $(obj),$(SREC))
+ELF    := $(addprefix $(obj)/,$(ELF))
 
 gcclibdir := $(shell dirname `$(CC) -print-libgcc-file-name`)
 
@@ -52,42 +49,31 @@ gcclibdir := $(shell dirname `$(CC) -print-libgcc-file-name`)
 # also causes the entry point of the standalone application to be
 # inconsistent.
 ifeq ($(ARCH),powerpc)
-AFLAGS := $(filter-out $(RELFLAGS),$(AFLAGS))
-CFLAGS := $(filter-out $(RELFLAGS),$(CFLAGS))
-CPPFLAGS := $(filter-out $(RELFLAGS),$(CPPFLAGS))
+# FIX ME
+CPPFLAGS := $(filter-out $(RELFLAGS), $(CPPFLAGS))
 endif
 
 # We don't want gcc reordering functions if possible.  This ensures that an
 # application's entry point will be the first function in the application's
 # source file.
-CFLAGS_NTR := $(call cc-option,-fno-toplevel-reorder)
-CFLAGS += $(CFLAGS_NTR)
-
-all:   $(obj).depend $(OBJS) $(LIB) $(SREC) $(BIN) $(ELF)
+ccflags-y += $(call cc-option,-fno-toplevel-reorder)
 
 #########################################################################
-$(LIB):        $(obj).depend $(LIBOBJS)
-       $(call cmd_link_o_target, $(LIBOBJS))
+
+quiet_cmd_link_lib = LD      $@
+      cmd_link_lib = $(LD) $(ld_flags) -r -o $@ $(filter $(LIBOBJS), $^)
+
+$(LIB):        $(LIBOBJS) FORCE
+       $(call if_changed,link_lib)
 
 $(ELF):
-$(obj)%:       $(obj)%.o $(LIB)
+$(obj)/%:      $(obj)/%.o $(LIB)
                $(LD) $(LDFLAGS) -g -Ttext $(CONFIG_STANDALONE_LOAD_ADDR) \
                        -o $@ -e $(SYM_PREFIX)$(notdir $(<:.o=)) $< $(LIB) \
                        -L$(gcclibdir) -lgcc
 
-$(SREC):
-$(obj)%.srec:  $(obj)%
+$(obj)/%.srec: $(obj)/%
                $(OBJCOPY) -O srec $< $@ 2>/dev/null
 
-$(BIN):
-$(obj)%.bin:   $(obj)%
+$(obj)/%.bin:  $(obj)/%
                $(OBJCOPY) -O binary $< $@ 2>/dev/null
-
-#########################################################################
-
-# defines $(obj).depend target
-include $(SRCTREE)/rules.mk
-
-sinclude $(obj).depend
-
-#########################################################################
index 735b2564175b1e85a08d8e5bfce5704491ea6b26..417ce7b63bf0215122821cee7236e0062e9ee7ef 100644 (file)
@@ -174,6 +174,14 @@ int ext4fs_ls(const char *dirname)
        return 0;
 }
 
+int ext4fs_exists(const char *filename)
+{
+       int file_len;
+
+       file_len = ext4fs_open(filename);
+       return file_len >= 0;
+}
+
 int ext4fs_read(char *buf, unsigned len)
 {
        if (ext4fs_root == NULL || ext4fs_file == NULL)
index b41d62e3c38654fadfee6a6993203227a5eb3e24..54f42eae0d05eec8d456bde67d2f52122d23d369 100644 (file)
@@ -808,7 +808,7 @@ __u8 do_fat_read_at_block[MAX_CLUSTSIZE]
 
 long
 do_fat_read_at(const char *filename, unsigned long pos, void *buffer,
-              unsigned long maxsize, int dols)
+              unsigned long maxsize, int dols, int dogetsize)
 {
        char fnamecopy[2048];
        boot_sector bs;
@@ -1152,7 +1152,10 @@ rootdir_done:
                        subname = nextname;
        }
 
-       ret = get_contents(mydata, dentptr, pos, buffer, maxsize);
+       if (dogetsize)
+               ret = FAT2CPU32(dentptr->size);
+       else
+               ret = get_contents(mydata, dentptr, pos, buffer, maxsize);
        debug("Size: %d, got: %ld\n", FAT2CPU32(dentptr->size), ret);
 
 exit:
@@ -1163,7 +1166,7 @@ exit:
 long
 do_fat_read(const char *filename, void *buffer, unsigned long maxsize, int dols)
 {
-       return do_fat_read_at(filename, 0, buffer, maxsize, dols);
+       return do_fat_read_at(filename, 0, buffer, maxsize, dols, 0);
 }
 
 int file_fat_detectfs(void)
@@ -1233,11 +1236,18 @@ int file_fat_ls(const char *dir)
        return do_fat_read(dir, NULL, 0, LS_YES);
 }
 
+int fat_exists(const char *filename)
+{
+       int sz;
+       sz = do_fat_read_at(filename, 0, NULL, 0, LS_NO, 1);
+       return sz >= 0;
+}
+
 long file_fat_read_at(const char *filename, unsigned long pos, void *buffer,
                      unsigned long maxsize)
 {
        printf("reading %s\n", filename);
-       return do_fat_read_at(filename, pos, buffer, maxsize, LS_NO);
+       return do_fat_read_at(filename, pos, buffer, maxsize, LS_NO, 0);
 }
 
 long file_fat_read(const char *filename, void *buffer, unsigned long maxsize)
diff --git a/fs/fs.c b/fs/fs.c
index be1855d1291f217b19720ae0faa45076eb0cc5ac..79d432d58fe094c8eb09e04204114b8bd0d7f172 100644 (file)
--- a/fs/fs.c
+++ b/fs/fs.c
@@ -41,6 +41,11 @@ static inline int fs_ls_unsupported(const char *dirname)
        return -1;
 }
 
+static inline int fs_exists_unsupported(const char *filename)
+{
+       return 0;
+}
+
 static inline int fs_read_unsupported(const char *filename, void *buf,
                                      int offset, int len)
 {
@@ -59,9 +64,19 @@ static inline void fs_close_unsupported(void)
 
 struct fstype_info {
        int fstype;
+       /*
+        * Is it legal to pass NULL as .probe()'s  fs_dev_desc parameter? This
+        * should be false in most cases. For "virtual" filesystems which
+        * aren't based on a U-Boot block device (e.g. sandbox), this can be
+        * set to true. This should also be true for the dumm entry at the end
+        * of fstypes[], since that is essentially a "virtual" (non-existent)
+        * filesystem.
+        */
+       bool null_dev_desc_ok;
        int (*probe)(block_dev_desc_t *fs_dev_desc,
                     disk_partition_t *fs_partition);
        int (*ls)(const char *dirname);
+       int (*exists)(const char *filename);
        int (*read)(const char *filename, void *buf, int offset, int len);
        int (*write)(const char *filename, void *buf, int offset, int len);
        void (*close)(void);
@@ -71,36 +86,46 @@ static struct fstype_info fstypes[] = {
 #ifdef CONFIG_FS_FAT
        {
                .fstype = FS_TYPE_FAT,
+               .null_dev_desc_ok = false,
                .probe = fat_set_blk_dev,
                .close = fat_close,
                .ls = file_fat_ls,
+               .exists = fat_exists,
                .read = fat_read_file,
+               .write = fs_write_unsupported,
        },
 #endif
 #ifdef CONFIG_FS_EXT4
        {
                .fstype = FS_TYPE_EXT,
+               .null_dev_desc_ok = false,
                .probe = ext4fs_probe,
                .close = ext4fs_close,
                .ls = ext4fs_ls,
+               .exists = ext4fs_exists,
                .read = ext4_read_file,
+               .write = fs_write_unsupported,
        },
 #endif
 #ifdef CONFIG_SANDBOX
        {
                .fstype = FS_TYPE_SANDBOX,
+               .null_dev_desc_ok = true,
                .probe = sandbox_fs_set_blk_dev,
                .close = sandbox_fs_close,
                .ls = sandbox_fs_ls,
+               .exists = sandbox_fs_exists,
                .read = fs_read_sandbox,
                .write = fs_write_sandbox,
        },
 #endif
        {
                .fstype = FS_TYPE_ANY,
+               .null_dev_desc_ok = true,
                .probe = fs_probe_unsupported,
                .close = fs_close_unsupported,
                .ls = fs_ls_unsupported,
+               .exists = fs_exists_unsupported,
                .read = fs_read_unsupported,
                .write = fs_write_unsupported,
        },
@@ -150,6 +175,9 @@ int fs_set_blk_dev(const char *ifname, const char *dev_part_str, int fstype)
                                fstype != info->fstype)
                        continue;
 
+               if (!fs_dev_desc && !info->null_dev_desc_ok)
+                       continue;
+
                if (!info->probe(fs_dev_desc, &fs_partition)) {
                        fs_type = info->fstype;
                        return 0;
@@ -182,6 +210,19 @@ int fs_ls(const char *dirname)
        return ret;
 }
 
+int fs_exists(const char *filename)
+{
+       int ret;
+
+       struct fstype_info *info = fs_get_info(fs_type);
+
+       ret = info->exists(filename);
+
+       fs_close();
+
+       return ret;
+}
+
 int fs_read(const char *filename, ulong addr, int offset, int len)
 {
        struct fstype_info *info = fs_get_info(fs_type);
@@ -212,16 +253,11 @@ int fs_write(const char *filename, ulong addr, int offset, int len)
        void *buf;
        int ret;
 
-       /*
-        * We don't actually know how many bytes are being read, since len==0
-        * means read the whole file.
-        */
        buf = map_sysmem(addr, len);
        ret = info->write(filename, buf, offset, len);
        unmap_sysmem(buf);
 
-       /* If we requested a specific number of bytes, check we got it */
-       if (ret >= 0 && len && ret != len) {
+       if (ret >= 0 && ret != len) {
                printf("** Unable to write file %s **\n", filename);
                ret = -1;
        }
@@ -312,6 +348,15 @@ int do_ls(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[],
        return 0;
 }
 
+int file_exists(const char *dev_type, const char *dev_part, const char *file,
+               int fstype)
+{
+       if (fs_set_blk_dev(dev_type, dev_part, fstype))
+               return 0;
+
+       return fs_exists(file);
+}
+
 int do_save(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[],
                int fstype)
 {
index dd028da8e32bbafaea23129b418cd319aaa0677e..85079788c990f712f8711b947539e2886d8684e9 100644 (file)
@@ -72,6 +72,14 @@ int sandbox_fs_ls(const char *dirname)
        return 0;
 }
 
+int sandbox_fs_exists(const char *filename)
+{
+       ssize_t sz;
+
+       sz = os_get_filesize(filename);
+       return sz >= 0;
+}
+
 void sandbox_fs_close(void)
 {
 }
index 389b0e37e796cbd9d6cca0f48fc8b076a31e30da..6b1a9a5b005cd298803b99601946cc9dfe55bcbf 100644 (file)
@@ -15,4 +15,4 @@ obj-y += tnc.o tnc_misc.o debug.o crc16.o budget.o
 obj-y += log.o orphan.o recovery.o replay.o
 
 # SEE README.arm-unaligned-accesses
-$(obj)super.o: CFLAGS += $(PLATFORM_NO_UNALIGNED)
+CFLAGS_super.o := $(PLATFORM_NO_UNALIGNED)
index d811287ddbf0034c3b61905edaeb9dc7a0d70a51..45ff7458c60205b6884a0ebf76bda956b518d0a0 100644 (file)
@@ -24,9 +24,6 @@ obj-y := \
        yaffs_summary.o yaffs_tagscompat.o yaffs_verify.o yaffs_yaffs1.o \
        yaffs_yaffs2.o yaffs_mtdif.o yaffs_mtdif2.o
 
-YCFLAGS =  -DCONFIG_YAFFS_DIRECT -DCONFIG_YAFFS_SHORT_NAMES_IN_RAM
-YCFLAGS += -DCONFIG_YAFFS_YAFFS2 -DNO_Y_INLINE
-YCFLAGS += -DCONFIG_YAFFS_PROVIDE_DEFS -DCONFIG_YAFFSFS_PROVIDE_VALUES
-
-CFLAGS += $(YCFLAGS)
-CPPFLAGS +=  $(YCFLAGS)
+ccflags-y = -DCONFIG_YAFFS_DIRECT -DCONFIG_YAFFS_SHORT_NAMES_IN_RAM \
+               -DCONFIG_YAFFS_YAFFS2 -DNO_Y_INLINE \
+               -DCONFIG_YAFFS_PROVIDE_DEFS -DCONFIG_YAFFSFS_PROVIDE_VALUES
index 7cd3e907002a5c909ce91bb8605619a986f628d7..bf142fc2f9d8b22e32926b18923da492519ea449 100644 (file)
@@ -1,5 +1,4 @@
 /autoconf.mk*
-/asm
 /bmp_logo.h
 /bmp_logo_data.h
 /config.h
index ea3e5ed69f1a3087ca674766b65bde6d50a4717d..033b5d946d11b76040a37bf9db13ef16df129ba9 100644 (file)
@@ -302,9 +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);
 
 /**
index de063b70d6f664c1437c0daf69e51eb5c344b6e0..3d7dc1fb2dd0f0fb898edb16e251379e42902aae 100644 (file)
@@ -77,7 +77,6 @@
 #define CONFIG_SYS_MAX_NAND_DEVICE     1
 #define NAND_MAX_CHIPS                 CONFIG_SYS_MAX_NAND_DEVICE
 #define CONFIG_SYS_NAND_SELECT_DEVICE
-#define        CONFIG_SYS_64BIT_VSPRINTF       /* needed for nand_util.c */
 #endif
 
 /* Network configuration */
 /* End of used area in internal SRAM */
 #define CONFIG_SYS_INIT_RAM_SIZE       0x10000
 #define CONFIG_SYS_INIT_RAM_CTRL       0x221
-/* size in bytes reserved for initial data */
-#define CONFIG_SYS_GBL_DATA_SIZE       256
 #define CONFIG_SYS_GBL_DATA_OFFSET     ((CONFIG_SYS_INIT_RAM_SIZE - \
-                                       CONFIG_SYS_GBL_DATA_SIZE) - 32)
+                                       GENERATED_GBL_DATA_SIZE) - 32)
 #define CONFIG_SYS_INIT_SP_OFFSET      CONFIG_SYS_GBL_DATA_OFFSET
 #define CONFIG_SYS_SBFHDR_DATA_OFFSET  (CONFIG_SYS_INIT_RAM_SIZE - 32)
 
index 3dcea0b595bc725e021dafc3e9ec9085f93dcf4c..930699ba6da53adc9080fdc2d421b03dcf6be6a5 100644 (file)
 #define CONFIG_SYS_INIT_RAM_LOCK       1
 #define CONFIG_SYS_INIT_RAM_ADDR       0xE6000000 /* Initial RAM address */
 #define CONFIG_SYS_INIT_RAM_SIZE       0x1000 /* End of used area in RAM */
-#define CONFIG_SYS_GBL_DATA_SIZE       0x100 /* num bytes initial data */
 #define CONFIG_SYS_GBL_DATA_OFFSET     (CONFIG_SYS_INIT_RAM_SIZE -\
-                                        CONFIG_SYS_GBL_DATA_SIZE)
+                                        GENERATED_GBL_DATA_SIZE)
 
 /*
  * Local Bus Configuration & Clock Setup
index b51354525a84c9737d010ff4b4b7c4c3c1733b9b..ec72c78861a2eba65d9168197738a54b755813b6 100644 (file)
@@ -194,9 +194,8 @@ extern unsigned long get_clock_freq(void);
 #define CONFIG_SYS_INIT_RAM_ADDR       0xffd00000      /* Initial L1 address */
 #define CONFIG_SYS_INIT_RAM_END        0x00004000      /* End of used area in RAM */
 
-#define CONFIG_SYS_GBL_DATA_SIZE       128     /* num bytes initial data */
 #define CONFIG_SYS_GBL_DATA_OFFSET     \
-       (CONFIG_SYS_INIT_RAM_END - CONFIG_SYS_GBL_DATA_SIZE)
+       (CONFIG_SYS_INIT_RAM_END - GENERATED_GBL_DATA_SIZE)
 #define CONFIG_SYS_INIT_SP_OFFSET      CONFIG_SYS_GBL_DATA_OFFSET
 
 #define CONFIG_SYS_MONITOR_LEN (256 * 1024) /* Reserve 256 kB for Mon */
index 75ea125f5391108a1583804db1747abc654ba0dd..da6e76002e39b84a8c8173a17ff40e279fcd63a4 100644 (file)
@@ -669,7 +669,6 @@ unsigned long get_board_ddr_clk(void);
 #define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE+sizeof(CONFIG_SYS_PROMPT)+16)
 #define CONFIG_SYS_MAXARGS     16              /* max number of command args */
 #define CONFIG_SYS_BARGSIZE    CONFIG_SYS_CBSIZE/* Boot Argument Buffer Size */
-#define CONFIG_SYS_HZ          1000            /* decrementer freq: 1ms ticks*/
 
 /*
  * For booting Linux, the board info and command line data
index 7cfda50c8cdbe2692e330aa5dc7ea4abbbd4b6da..fd010c057c38f96067d59bf4bb3d9a3e7e55bcad 100644 (file)
 #define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE+sizeof(CONFIG_SYS_PROMPT)+16)
 #define CONFIG_SYS_MAXARGS     16              /* max number of command args */
 #define CONFIG_SYS_BARGSIZE    CONFIG_SYS_CBSIZE/* Boot Argument Buffer Size */
-#define CONFIG_SYS_HZ          1000            /* decrementer freq: 1ms ticks*/
 
 /*
  * For booting Linux, the board info and command line data
index ed9ca8a3e19dae43dd3f46c9908ca9a97de6e914..6d07805ffd039898f6771a230cd5a3f8db7cd4fb 100644 (file)
 #define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE+sizeof(CONFIG_SYS_PROMPT)+16)
 #define CONFIG_SYS_MAXARGS     16              /* max number of command args */
 #define CONFIG_SYS_BARGSIZE    CONFIG_SYS_CBSIZE/* Boot Argument Buffer Size */
-#define CONFIG_SYS_HZ          1000            /* decrementer freq: 1ms ticks*/
 
 /*
  * For booting Linux, the board info and command line data
index 9bd0fe238204bd5790f1408ae2fc326e2698f337..9448ec8c45decfad8f69afe440f44e26796214e4 100644 (file)
@@ -680,7 +680,6 @@ unsigned long get_board_ddr_clk(void);
 #define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE+sizeof(CONFIG_SYS_PROMPT)+16)
 #define CONFIG_SYS_MAXARGS     16      /* max number of command args */
 #define CONFIG_SYS_BARGSIZE    CONFIG_SYS_CBSIZE/* Boot Argument Buffer Size */
-#define CONFIG_SYS_HZ          1000    /* decrementer freq: 1ms ticks*/
 
 /*
  * For booting Linux, the board info and command line data
index aa584b776805955f9006a4525af3bec31e7570ee..f57820d8f59ad8ebc65894ef740f1c6de8274149 100644 (file)
 #define CONFIG_SYS_INIT_RAM_ADDR       CONFIG_SYS_SRAM_BASE
 #define CONFIG_SYS_INIT_RAM_END                CONFIG_SYS_SRAM_SIZE
 
-#define CONFIG_SYS_GBL_DATA_SIZE       0x100
 #define CONFIG_SYS_GBL_DATA_OFFSET     (CONFIG_SYS_INIT_RAM_END - \
-                                        CONFIG_SYS_GBL_DATA_SIZE)
+                                        GENERATED_GBL_DATA_SIZE)
 #define CONFIG_SYS_INIT_SP_OFFSET      CONFIG_SYS_GBL_DATA_OFFSET
 
 #define CONFIG_SYS_MONITOR_BASE                CONFIG_SYS_TEXT_BASE
index e31131f6e2a4fb3f01254c48ef4df8d5ce759d3a..e318c7543f362d7540646fa764d7f7ee047c01af 100644 (file)
 /* 512kB is suggested, (CONFIG_ENV_SIZE + 128 * 1024) was not enough */
 #define CONFIG_SYS_MALLOC_LEN          (512 << 10)
 
-/*
- * size in bytes reserved for initial data
- */
-#define CONFIG_SYS_GBL_DATA_SIZE       128
-
 /*
  * AHB Controller configuration
  */
index ded3f331e8ea4b659fc6852118df55917c4318cd..24904b0b7c3c39507ce146ab401edf2256f74174 100644 (file)
 /* 512kB is suggested, (CONFIG_ENV_SIZE + 128 * 1024) was not enough */
 #define CONFIG_SYS_MALLOC_LEN          (512 << 10)
 
-/*
- * size in bytes reserved for initial data
- */
-#define CONFIG_SYS_GBL_DATA_SIZE       128
-
 /*
  * AHB Controller configuration
  */
index 1e4ce2e7d97281c4b1a83891b4018ed1073320b8..39f7a3cd46fead68a98a8ac74c28fe43b499321e 100644 (file)
  */
 #define CONFIG_SYS_MALLOC_LEN          (CONFIG_ENV_SIZE + 128 * 1024)
 
-/*
- * size in bytes reserved for initial data
-*/
-#define CONFIG_SYS_GBL_DATA_SIZE       128
-
 /*
  * AHB Controller configuration
  */
index bb39491f8b6d329d8b017af7ed2dd6d0bc3c9eed..4282d7026624c6dfe41b5e41fe33ee0beeae2fcc 100644 (file)
 #define CONFIG_SYS_MONITOR_LEN (256 * 1024)
 /* Size of DRAM reserved for malloc() use */
 #define CONFIG_SYS_MALLOC_LEN  (256 * 1024)
-/* size in bytes reserved for initial data */
-#define CONFIG_SYS_GBL_DATA_SIZE       (256)
 #define CONFIG_SYS_BOOTMAPSZ   (8 * 1024 * 1024)
 
 /* ENV setting */
index 1193013ea07f9f0bd61c15f8c146690b0b105890..b10c48c20e3921da4b12673ec716b45ce834f629 100644 (file)
 #define CONFIG_SYS_RTC_BUS_NUM         0
 #endif /* CONFIG_CMD_DATE */
 
-/*
- * Clocks
- */
-#define        CONFIG_SYS_HZ                   1000    /* Ticks per second */
-
 /*
  * PLL
  *
index e5569c72966dc996235c54872e9346487054aa8a..17a2da034d91e2c28c6d964fc6a9f331fa472598 100644 (file)
@@ -94,7 +94,6 @@
 #define CONFIG_SYS_MONITOR_BASE                0x00000000
 #define CONFIG_SYS_MONITOR_LEN         (256 * 1024)
 #define CONFIG_SYS_MALLOC_LEN          (1 * 1024 * 1024)
-#define CONFIG_SYS_GBL_DATA_SIZE       (256)
 #define CONFIG_SYS_BOOTMAPSZ           (8 * 1024 * 1024)
 #define CONFIG_SYS_TEXT_BASE   0xE80C0000
 
index b41a823600d74348a5260bb3d255467ad0ea1e22..5228ba6ef708a073b4e43f2ca2ce15d2e00a2d31 100644 (file)
@@ -84,7 +84,6 @@
  * Clock Configuration
  */
 #undef CONFIG_SYS_CLKS_IN_HZ
-#define        CONFIG_SYS_HZ                   1000
 #define        CONFIG_SYS_CPUSPEED             0x290           /* 520MHz */
 
 /*
index 11ba4cffc4442e0787b3a282a29af6e5c965c369..959e188d9ad162a51c39668183c317dc3348ffa2 100644 (file)
@@ -33,7 +33,6 @@
 /* ARM asynchronous clock */
 #define CONFIG_SYS_AT91_SLOW_CLOCK      32768
 #define CONFIG_SYS_AT91_MAIN_CLOCK      12000000 /* from 12 MHz crystal */
-#define CONFIG_SYS_HZ                  1000
 
 #define CONFIG_AT91FAMILY
 
index bcb21fefe337deffbe62f82bc6303a2a75ff6c93..3d39b106584710bfd97a7825ebcb35e5a764c401 100644 (file)
@@ -29,7 +29,6 @@
  */
 #define CONFIG_NR_DRAM_BANKS           1
 #define CONFIG_SYS_MALLOC_LEN          SZ_1M
-#define CONFIG_SYS_GBL_DATA_SIZE       128
 #define CONFIG_SYS_SDRAM_BASE          EMC_DYCS0_BASE
 #define CONFIG_SYS_SDRAM_SIZE          SZ_64M
 #define CONFIG_SYS_TEXT_BASE           0x83FA0000
index 31fc65d19696af3442174efec615c958c88318a9..78778970f4a51de4aa56fd0c1b425bf3ad6faa3f 100644 (file)
 #define CONFIG_SYS_INIT_RAM_ADDR       CONFIG_SYS_OCM_DATA_ADDR /* in SDRAM */
 #define CONFIG_SYS_INIT_RAM_END        CONFIG_SYS_OCM_DATA_SIZE /* End of used area */
 
-#define CONFIG_SYS_GBL_DATA_SIZE       128  /* size/bytes res'd for init data*/
 #define CONFIG_SYS_GBL_DATA_OFFSET \
-       (CONFIG_SYS_INIT_RAM_END - CONFIG_SYS_GBL_DATA_SIZE)
+       (CONFIG_SYS_INIT_RAM_END - GENERATED_GBL_DATA_SIZE)
 #define CONFIG_SYS_INIT_SP_OFFSET      CONFIG_SYS_GBL_DATA_OFFSET
 
 /*
index 3a5cc74829cc37db26ba6babb10bcd96457eed21..e26591c14f766816a6b39b304a7809b554788359 100644 (file)
 #define CONFIG_SYS_MONITOR_LEN (256 * 1024)
 /* Size of DRAM reserved for malloc() use */
 #define CONFIG_SYS_MALLOC_LEN  (256 * 1024)
-/* size in bytes reserved for initial data */
-#define CONFIG_SYS_GBL_DATA_SIZE       (256)
 #define CONFIG_SYS_BOOTMAPSZ   (8 * 1024 * 1024)
 
 /* ENV setting */
index ac65620db687c6ea04377a7134323790a44432a3..6bf3408dd00a5b4bd137146c12cef830806c0f41 100644 (file)
 #define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE
 
 #define CONFIG_SYS_LOAD_ADDR           CONFIG_LOADADDR
-#define CONFIG_SYS_HZ                  1000
 
 #define CONFIG_CMDLINE_EDITING
 
index 7f86767e944d0eb0f8327f4a992a860e58016441..9da6cc685592b95d5593c04cbe54b300d2451fe8 100644 (file)
 #define CONFIG_SYS_INIT_RAM_ADDR       CONFIG_SYS_OCM_DATA_ADDR /* in SDRAM */
 #define CONFIG_SYS_INIT_RAM_END        CONFIG_SYS_OCM_DATA_SIZE /* End of used area */
 
-#define CONFIG_SYS_GBL_DATA_SIZE       128  /* size/bytes res'd for init data*/
 #define CONFIG_SYS_GBL_DATA_OFFSET \
-       (CONFIG_SYS_INIT_RAM_END - CONFIG_SYS_GBL_DATA_SIZE)
+       (CONFIG_SYS_INIT_RAM_END - GENERATED_GBL_DATA_SIZE)
 #define CONFIG_SYS_INIT_SP_OFFSET      CONFIG_SYS_GBL_DATA_OFFSET
 
 /*
index d34b91dfde827dcdcab275b8a26ab80f86ec8065..f36c2a3504e442f718bba1843bcaaf79d8b6fca1 100644 (file)
@@ -238,9 +238,8 @@ int fpga_gpio_get(unsigned int bus, int pin);
 #define CONFIG_SYS_INIT_RAM_ADDR       CONFIG_SYS_OCM_DATA_ADDR /* in SDRAM */
 #define CONFIG_SYS_INIT_RAM_END        CONFIG_SYS_OCM_DATA_SIZE /* End of used area */
 
-#define CONFIG_SYS_GBL_DATA_SIZE       128  /* size/bytes res'd for init data*/
 #define CONFIG_SYS_GBL_DATA_OFFSET \
-       (CONFIG_SYS_INIT_RAM_END - CONFIG_SYS_GBL_DATA_SIZE)
+       (CONFIG_SYS_INIT_RAM_END - GENERATED_GBL_DATA_SIZE)
 #define CONFIG_SYS_INIT_SP_OFFSET      CONFIG_SYS_GBL_DATA_OFFSET
 
 /*
index 5e075c8dd2a0bfe023cd978640ef8f61a1944cb4..ae6b6dcf246c27d2bb1837bd21986d88c2784b64 100644 (file)
@@ -84,7 +84,6 @@
 #define CONFIG_SYS_INIT_RAM_LOCK
 #define CONFIG_SYS_INIT_RAM_ADDR       0xE6000000 /* Initial RAM address */
 #define CONFIG_SYS_INIT_RAM_SIZE       0x1000 /* End of used area in RAM */
-#define CONFIG_SYS_GBL_DATA_SIZE       0x100 /* num bytes initial data */
 #define CONFIG_SYS_GBL_DATA_OFFSET     (CONFIG_SYS_INIT_RAM_SIZE - \
                                                GENERATED_GBL_DATA_SIZE)
 
index cc3c7a8e6a94ebcdb24451433b67069e54285148..90e2d7a030d176cdee1f16b4065a3ba64e5b7f88 100644 (file)
 #define CONFIG_SYS_MONITOR_BASE                0x00000000
 #define CONFIG_SYS_MONITOR_LEN         (256 * 1024)
 #define CONFIG_SYS_MALLOC_LEN          (1 * 1024 * 1024)
-#define CONFIG_SYS_GBL_DATA_SIZE       (256)
 #define CONFIG_SYS_BOOTMAPSZ           (8 * 1024 * 1024)
 
 /* FLASH */
 #define CONFIG_SH_TMU_CLK_FREQ CONFIG_SYS_CLK_FREQ
 #define CONFIG_SH_SCIF_CLK_FREQ        14745600
 #define CONFIG_SYS_TMU_CLK_DIV 4
-#define CONFIG_SYS_HZ          1000
 
 /* i2c */
 #define CONFIG_CMD_I2C
index f183279ba89b2f177fb3d4e64001e18d53646374..4d11c7d08c09eb6a8171139d71ba85cb5ca20601 100644 (file)
@@ -88,7 +88,6 @@
 
 #define CONFIG_SYS_MONITOR_BASE        (KZM_FLASH_BASE)
 #define CONFIG_SYS_MALLOC_LEN  (CONFIG_ENV_SIZE + 128 * 1024)
-#define CONFIG_SYS_GBL_DATA_SIZE       (256)
 #define CONFIG_SYS_BOOTMAPSZ   (8 * 1024 * 1024)
 
 #define CONFIG_SYS_TEXT_BASE           0x00000000
index b6c1954a9493e19ed5456554a40bd027180e23c0..b420e45e63cd1dff711bd00105b678df5719dd20 100644 (file)
 #define CONFIG_SYS_MONITOR_BASE                0x00000000
 #define CONFIG_SYS_MONITOR_LEN         (256 * 1024)
 #define CONFIG_SYS_MALLOC_LEN          (1 * 1024 * 1024)
-#define CONFIG_SYS_GBL_DATA_SIZE       (256)
 #define CONFIG_SYS_BOOTMAPSZ           (8 * 1024 * 1024)
 
 #if defined(CONFIG_SYS_USE_BOOT_NORFLASH)
 #define CONFIG_SH_SCIF_CLK_FREQ        CONFIG_MP_CLK_FREQ
 
 #define CONFIG_SYS_TMU_CLK_DIV 4
-#define CONFIG_SYS_HZ          1000
 
 #endif /* __LAGER_H */
diff --git a/include/configs/mini2440.h b/include/configs/mini2440.h
deleted file mode 100644 (file)
index 5e9e98d..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * (C) Copyright 2002
- * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
- * Marius Groeger <mgroeger@sysgo.de>
- * Gary Jennejohn <gj@denx.de>
- * David Mueller <d.mueller@elsoft.ch>
- *
- * (C) Copyright 2009-2010
- * Michel Pollet <buserror@gmail.com>
- *
- * (C) Copyright 2012
- * Gabriel Huau <contact@huau-gabriel.fr>
- *
- * Configuation settings for the MINI2440 board.
- *
- * SPDX-License-Identifier:    GPL-2.0+
- */
-
-#ifndef __CONFIG_H
-#define __CONFIG_H
-
-#define CONFIG_SYS_TEXT_BASE 0x0
-#define CONFIG_S3C2440_GPIO
-
-/*
- * High Level Configuration Options
- */
-#define CONFIG_ARM920T                 /* This is an ARM920T Core      */
-#define CONFIG_S3C24X0                 /* in a SAMSUNG S3C24X0 SoC */
-#define CONFIG_S3C2440                 /* in a SAMSUNG S3C2440 SoC */
-#define CONFIG_MINI2440                        /* on a MIN2440 Board       */
-
-#define MACH_TYPE_MINI2440     1999
-#define CONFIG_MACH_TYPE       MACH_TYPE_MINI2440
-
-/*
- * We don't use lowlevel_init
- */
-#define CONFIG_SKIP_LOWLEVEL_INIT
-#define CONFIG_BOARD_EARLY_INIT_F
-
-/*
- * input clock of PLL
- */
-/* MINI2440 has 12.0000MHz input clock */
-#define CONFIG_SYS_CLK_FREQ    12000000
-
-/*
- * Size of malloc() pool
- */
-#define CONFIG_SYS_MALLOC_LEN  (CONFIG_ENV_SIZE + 2048*1024)
-
-/*
- * Hardware drivers
- */
-#define CONFIG_DRIVER_DM9000
-#define CONFIG_DRIVER_DM9000_NO_EEPROM
-#define CONFIG_DM9000_BASE                             0x20000300
-#define DM9000_IO              CONFIG_DM9000_BASE
-#define DM9000_DATA            (CONFIG_DM9000_BASE+4)
-
-/*
- * select serial console configuration
- */
-#define CONFIG_S3C24X0_SERIAL
-#define CONFIG_SERIAL1
-
-/*
- * allow to overwrite serial and ethaddr
- */
-#define CONFIG_ENV_OVERWRITE
-
-/*
- * Command definition
- */
-#include <config_cmd_default.h>
-
-#define CONFIG_CMD_DHCP
-#define CONFIG_CMD_PORTIO
-#define CONFIG_CMD_REGINFO
-#define CONFIG_CMD_SAVES
-
-/*
- * Miscellaneous configurable options
- */
-#define CONFIG_LONGHELP
-#define CONFIG_SYS_PROMPT      "MINI2440 => "
-#define CONFIG_SYS_CBSIZE      256
-#define CONFIG_SYS_PBSIZE      (CONFIG_SYS_CBSIZE+sizeof(CONFIG_SYS_PROMPT)+16)
-#define CONFIG_SYS_MAXARGS     32
-#define CONFIG_SYS_BARGSIZE    CONFIG_SYS_CBSIZE
-
-#define CONFIG_SYS_MEMTEST_START       0x30000000
-#define CONFIG_SYS_MEMTEST_END         0x34000000      /* 64MB in DRAM */
-
-/* default load address        */
-#define CONFIG_SYS_LOAD_ADDR           0x32000000
-
-/* boot parameters address */
-#define CONFIG_BOOT_PARAM_ADDR         0x30000100
-
-/*
- * the PWM TImer 4 uses a counter of 15625 for 10 ms, so we need
- * it to wrap 100 times (total 1562500) to get 1 sec.
- */
-#define CONFIG_SYS_HZ                  1562500
-
-/*
- * valid baudrates
- */
-#define CONFIG_SYS_BAUDRATE_TABLE      { 9600, 19200, 38400, 57600, 115200 }
-#define CONFIG_BAUDRATE                115200
-
-/*
- * Stack sizes
- * The stack sizes are set up in start.S using the settings below
- */
-#define CONFIG_STACKSIZE       (128*1024)      /* regular stack */
-#ifdef CONFIG_USE_IRQ
-#define CONFIG_STACKSIZE_IRQ   (8*1024)        /* IRQ stack */
-#define CONFIG_STACKSIZE_FIQ   (4*1024)        /* FIQ stack */
-#endif
-
-/*
- * Physical Memory Map
- */
-#define CONFIG_NR_DRAM_BANKS        1          /* we have 1 bank of DRAM */
-#define PHYS_SDRAM_SIZE             (64*1024*1024) /* 64MB of DRAM */
-#define CONFIG_SYS_SDRAM_BASE       0x30000000
-#define CONFIG_SYS_FLASH_BASE          0x0
-
-/*
- * Stack should be on the SRAM because
- * DRAM is not init
- */
-#define CONFIG_SYS_INIT_SP_ADDR                (0x40001000 - GENERATED_GBL_DATA_SIZE)
-
-/*
- * NOR FLASH organization
- * Now uses the standard CFI interface
- * FLASH and environment organization
- */
-#define CONFIG_SYS_FLASH_CFI
-#define CONFIG_FLASH_CFI_DRIVER
-#define CONFIG_SYS_FLASH_CFI_WIDTH     FLASH_CFI_16BIT
-#define CONFIG_SYS_MONITOR_BASE                0x0
-/* max number of memory banks */
-#define CONFIG_SYS_MAX_FLASH_BANKS     1
-/* 512 * 4096 sectors, or 32 * 64k blocks */
-#define CONFIG_SYS_MAX_FLASH_SECT      512
-#define CONFIG_FLASH_SHOW_PROGRESS  1
-
-/*
- * Config for NOR flash
- */
-#define CONFIG_ENV_IS_IN_FLASH
-#define CONFIG_MY_ENV_OFFSET   0x40000
-/* addr of environment */
-#define CONFIG_ENV_ADDR                (CONFIG_SYS_FLASH_BASE + CONFIG_MY_ENV_OFFSET)
-/* 16k Total Size of Environment Sector */
-#define CONFIG_ENV_SIZE                0x4000
-
-/* ATAG configuration */
-#define CONFIG_INITRD_TAG
-#define CONFIG_SETUP_MEMORY_TAGS
-#define CONFIG_CMDLINE_TAG
-#define CONFIG_CMDLINE_EDITING
-#define CONFIG_AUTO_COMPLETE
-
-#endif /* __CONFIG_H */
index 363b277635c70a3ba8c52c9b9e4b18aff4820797..55ecef92a9ded24e1abf3dddeecc725d5463a26f 100644 (file)
@@ -59,7 +59,6 @@
 
 /* Memory sizes */
 #define CONFIG_SYS_MALLOC_LEN          0x00400000      /* 4 MB for malloc */
-#define CONFIG_SYS_GBL_DATA_SIZE       128             /* Initial data */
 #define CONFIG_SYS_MEMTEST_START       0x40000000      /* Memtest start adr */
 #define CONFIG_SYS_MEMTEST_END         0x40400000      /* 4 MB RAM test */
 
index 18714eae1e99ebea0378afe326db053d9496ecba..133dc6f8cd137c93c5d09f9bd34dc8816495fcac 100644 (file)
 #define CONFIG_SYS_INIT_RAM_END                MPC5XXX_SRAM_SIZE
 #endif
 
-/* size in bytes reserved for initial data */
-#define CONFIG_SYS_GBL_DATA_SIZE       128
 #define CONFIG_SYS_GBL_DATA_OFFSET     (CONFIG_SYS_INIT_RAM_END - \
-                                        CONFIG_SYS_GBL_DATA_SIZE)
+                                        GENERATED_GBL_DATA_SIZE)
 #define CONFIG_SYS_INIT_SP_OFFSET      CONFIG_SYS_GBL_DATA_OFFSET
 
 #define CONFIG_SYS_MONITOR_BASE                CONFIG_SYS_TEXT_BASE
index 601bac72e0a0a8cf6900ed607e339e900a60120a..c296a0759947f2c1081cd91a931302ae10092805 100644 (file)
@@ -238,9 +238,6 @@ extern unsigned long get_board_sys_clk(unsigned long dummy);
 #define CONFIG_OF_BOARD_SETUP
 #define CONFIG_OF_STDOUT_VIA_ALIAS
 
-#define CONFIG_SYS_64BIT_VSPRINTF
-#define CONFIG_SYS_64BIT_STRTOUL
-
 /* new uImage format support */
 #define CONFIG_FIT
 #define CONFIG_FIT_VERBOSE     /* enable fit_format_{error,warning}() */
index 2a9fd22dd6b901b6a09955045b6438ae5f654117..9480d8daf2f28ed5c5f686ea4ce0941a42f98c6a 100644 (file)
  * Clock Configuration
  */
 #undef CONFIG_SYS_CLKS_IN_HZ
-#define        CONFIG_SYS_HZ                   1000
 #define        CONFIG_SYS_CPUSPEED             0x210           /* 416MHz ; N=2,L=16 */
 
 /*
index de254076f23c3c82c54c1929a412a6d73e0802c4..8abce1b425f66bfddf92a02780ed0fa01f395a6c 100644 (file)
  * Clock Configuration
  */
 #undef CONFIG_SYS_CLKS_IN_HZ
-#define        CONFIG_SYS_HZ                   1000
 #define        CONFIG_SYS_CPUSPEED             0x161           /* 400MHz;L=1 M=3 T=1 */
 
 /*
index 53128ecc12045717643455dafe4340b100f8b58b..a71709bc7c2975203c10168df7635f902a701881 100644 (file)
 #define CONFIG_SYS_MONITOR_LEN (256 * 1024)
 /* Size of DRAM reserved for malloc() use */
 #define CONFIG_SYS_MALLOC_LEN  (256 * 1024)
-/* size in bytes reserved for initial data */
-#define CONFIG_SYS_GBL_DATA_SIZE       (256)
 #define CONFIG_SYS_BOOTMAPSZ   (8 * 1024 * 1024)
 
 /* ENV setting */
index a6d55822b82e238ceb449b5935fc8044341d0e74..e77d06bcd3edccf79ab2f94a12545f534dcef1bd 100644 (file)
@@ -42,6 +42,7 @@
 #define CONFIG_CMD_PART
 #define CONFIG_DOS_PARTITION
 #define CONFIG_HOST_MAX_DEVICES 4
+#define CONFIG_CMD_FS_GENERIC
 
 #define CONFIG_SYS_VSNPRINTF
 
index c0048aca78a5ff263b85a97a2dd21f41a5c5ce69..e6d272dd1f53c4d7b1b71e006c0cc8b1f2a64ac1 100644 (file)
@@ -69,7 +69,6 @@
 #define CONFIG_SYS_MEMTEST_START       0x08100000            /* memtest test area   */
 #define CONFIG_SYS_MEMTEST_END         0x08F00000
 
-#define CONFIG_SYS_HZ                  1000
 #define CONFIG_SYS_CPUSPEED            0x141        /* core clock - register value  */
 
 #define CONFIG_BAUDRATE 115200
index f8155efbc9848cc9ecd5fa13d726517847e10f0a..4d38f6c5540666f234734ee981b3c2c24be30e6f 100644 (file)
@@ -62,7 +62,6 @@
 #define CONFIG_SYS_MONITOR_BASE                (SHMIN_FLASH_BASE_1 + CONFIG_ENV_SECT_SIZE)
 #define CONFIG_SYS_MONITOR_LEN         (128 * 1024)
 #define CONFIG_SYS_MALLOC_LEN          (256 * 1024)
-#define CONFIG_SYS_GBL_DATA_SIZE       256
 #define CONFIG_SYS_BOOTMAPSZ           (8 * 1024 * 1024)
 
 /* FLASH */
index 9a069f3cdba522bfb42d01d7e57c5c0f016421c7..dacb5604cd6400ec442199d9628af9e3bc7a7588 100644 (file)
@@ -41,8 +41,6 @@
 #define CONFIG_ENV_SIZE                (8*1024)
 #define CONFIG_SYS_MALLOC_LEN  (CONFIG_ENV_SIZE + 256*1024)
 
-#define CONFIG_SYS_GBL_DATA_SIZE       128     /* for initial data */
-
 #define CONFIG_ENV_IS_IN_MMC
 #define CONFIG_CMD_ENV
 #define CONFIG_CMD_SAVEENV
index c98002317fe238251ead9dd864288c0b6cdf1bb2..20d4cee011f5698bb9ddf9ba52e32e601c7e515c 100644 (file)
@@ -37,7 +37,6 @@
 /* ARM asynchronous clock */
 #define CONFIG_SYS_AT91_SLOW_CLOCK     32768           /* slow clock xtal */
 #define CONFIG_SYS_AT91_MAIN_CLOCK     18432000        /* main clock xtal */
-#define CONFIG_SYS_HZ                  1000
 
 /* Misc CPU related */
 #define CONFIG_ARCH_CPU_INIT
index 629299d107022edc0d4f56b1624c25c40f078c5f..8d7970a376ee44bb6411ad6974e8c33c084bfbd7 100644 (file)
@@ -29,7 +29,6 @@
 #define CONFIG_ENV_SIZE                (128*1024)
 #define CONFIG_SYS_MALLOC_LEN  (CONFIG_ENV_SIZE + 256*1024)
 #endif
-#define CONFIG_SYS_GBL_DATA_SIZE       128     /* for initial data */
 
 /*
  * PL011 Configuration
index 7f094891187f112d8e8413a274fad31b28bd8c68..4f518527a0f3b42eff39769eedc177bd83149451 100644 (file)
 #define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE
 
 #define CONFIG_SYS_LOAD_ADDR           CONFIG_LOADADDR
-#define CONFIG_SYS_HZ                  1000
 
 #define CONFIG_CMDLINE_EDITING
 
index c4d04dec386df7404627ba006dc0890e292c7c2f..3c54870783d2cb78f252fbe25a2dd9938913cf9e 100644 (file)
@@ -20,7 +20,6 @@
 /* ARM asynchronous clock */
 #define CONFIG_SYS_AT91_MAIN_CLOCK     12000000        /* 12 MHz crystal */
 #define CONFIG_SYS_AT91_SLOW_CLOCK     32768
-#define CONFIG_SYS_HZ                  1000
 
 #define CONFIG_MACH_TYPE               MACH_TYPE_USB_A9263
 
index 88aaa95fb1131dadee0bea04c158f240e715e8df..14c6e675c1b8429b463d2b0672683a378f22581f 100644 (file)
 #define CONFIG_SYS_NAND_MASK_CLE       (1 << 22)       /* our CLE is AD22 */
 #define CONFIG_SYS_NAND_ENABLE_PIN     GPIO_PIN_PD(15)
 #define CONFIG_SYS_NAND_READY_PIN      GPIO_PIN_PB(0)
-#define CONFIG_SYS_64BIT_VSPRINTF      /* needed for nand_util.c */
 #endif
 
 /* Ethernet */
  */
 #define CONFIG_SYS_MALLOC_LEN          \
        ROUND(3 * CONFIG_ENV_SIZE + 128 * 1024, 0x1000)
-#define CONFIG_SYS_GBL_DATA_SIZE       128     /* 128 bytes for initial data */
 
 #ifndef CONFIG_RAMLOAD
 #define CONFIG_BOOTCOMMAND             "run nfsboot"
index 00b938a21601760eb4243f8e385180a5b06ca8fa..d420efe54389aba93f45899c60a5b75cc3381dfb 100644 (file)
 #define CONFIG_SYS_BARGSIZE                    CONFIG_SYS_CBSIZE
 #define CONFIG_SYS_LOAD_ADDR                   0x00800000
 #define CONFIG_SYS_CONSOLE_INFO_QUIET
-#define CONFIG_SYS_64BIT_VSPRINTF
 
 /* Use last 2 lwords in internal SRAM for bootcounter */
 #define CONFIG_BOOTCOUNT_LIMIT
index e38fa89fdac504972f3e245d42ad1a31cd3f1ae1..41a7c99edcfd64094d871529c7856c3adf32fcd4 100644 (file)
@@ -138,7 +138,6 @@ unsigned char zipitz2_spi_read(void);
  * Clock Configuration
  */
 #undef CONFIG_SYS_CLKS_IN_HZ
-#define        CONFIG_SYS_HZ                   1000
 #define CONFIG_SYS_CPUSPEED            0x190           /* standard setting for 312MHz; L=16, N=1.5, A=0, SDCLK!=SystemBus */
 
 /*
index 24293803966297480b268145840ad2a8f8a34b64..aacb147de24bae919c42efdac08dd6c4bf3b8b15 100644 (file)
@@ -134,6 +134,7 @@ int ext4fs_read(char *buf, unsigned len);
 int ext4fs_mount(unsigned part_length);
 void ext4fs_close(void);
 int ext4fs_ls(const char *dirname);
+int ext4fs_exists(const char *filename);
 void ext4fs_free_node(struct ext2fs_node *node, struct ext2fs_node *currroot);
 int ext4fs_devread(lbaint_t sector, int byte_offset, int byte_len, char *buf);
 void ext4fs_set_blk_dev(block_dev_desc_t *rbdd, disk_partition_t *info);
index 2c951e7d79c626bdff3749eabd2cce5283089050..c8eb7ccd2904c2e9977b252f4234d20854e29501 100644 (file)
@@ -188,6 +188,7 @@ file_read_func              file_fat_read;
 int file_cd(const char *path);
 int file_fat_detectfs(void);
 int file_fat_ls(const char *dir);
+int fat_exists(const char *filename);
 long file_fat_read_at(const char *filename, unsigned long pos, void *buffer,
                      unsigned long maxsize);
 long file_fat_read(const char *filename, void *buffer, unsigned long maxsize);
index 7d9403ed87588c2f254ec0a4b514fe5840eac0b9..26de0539f7d9d9f47e4250b46af92417dd5c9d26 100644 (file)
@@ -43,6 +43,13 @@ int fs_set_blk_dev(const char *ifname, const char *dev_part_str, int fstype);
  */
 int fs_ls(const char *dirname);
 
+/*
+ * Determine whether a file exists
+ *
+ * Returns 1 if the file exists, 0 if it doesn't exist.
+ */
+int fs_exists(const char *filename);
+
 /*
  * Read file "filename" from the partition previously set by fs_set_blk_dev(),
  * to address "addr", starting at byte offset "offset", and reading "len"
@@ -54,6 +61,16 @@ int fs_ls(const char *dirname);
  */
 int fs_read(const char *filename, ulong addr, int offset, int len);
 
+/*
+ * Write file "filename" to the partition previously set by fs_set_blk_dev(),
+ * from address "addr", starting at byte offset "offset", and writing "len"
+ * bytes. "offset" may be 0 to write to the start of the file. Note that not
+ * all filesystem types support offset!=0.
+ *
+ * Returns number of bytes read on success. Returns <= 0 on error.
+ */
+int fs_write(const char *filename, ulong addr, int offset, int len);
+
 /*
  * Common implementation for various filesystem commands, optionally limited
  * to a specific filesystem type via the fstype parameter.
@@ -62,6 +79,8 @@ int do_load(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[],
                int fstype);
 int do_ls(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[],
                int fstype);
+int file_exists(const char *dev_type, const char *dev_part, const char *file,
+               int fstype);
 int do_save(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[],
                int fstype);
 
index 3ba8c2ea304bf1f1dd762fb358fcd191e3c957bd..6afd57bafddec7ac067a948897018d3bc334915c 100644 (file)
@@ -99,9 +99,9 @@ struct lmb;
 #endif
 
 #ifdef CONFIG_OF_BOARD_SETUP
-# define IMAAGE_OF_BOARD_SETUP         1
+# define IMAGE_OF_BOARD_SETUP          1
 #else
-# define IMAAGE_OF_BOARD_SETUP         0
+# define IMAGE_OF_BOARD_SETUP          0
 #endif
 
 /*
index 1eebb95fbb9b7efb9c01a3cbb57303875baf9bae..997d149b71de2eee294d0595bff34a02dd23fdce 100644 (file)
@@ -8,6 +8,9 @@
  * SPDX-License-Identifier:    GPL-2.0+
  */
 
+#ifndef __LINKER_LISTS_H__
+#define __LINKER_LISTS_H__
+
 /*
  * There is no use in including this from ASM files, but that happens
  * anyway, e.g. PPC kgdb.S includes command.h which incluse us.
  *   %u_boot_list_2_drivers_3
  */
 
-#ifndef __LINKER_LISTS_H__
-#define __LINKER_LISTS_H__
-
 /**
  * ll_entry_declare() - Declare linker-generated array entry
  * @_type:     Data type of the entry
index 8ea8cb7e2e627f091bd626421fe1ad1bc8623240..a51ad13044e174440fff9c1f69c7f2cebe16bf23 100644 (file)
@@ -25,6 +25,7 @@ long sandbox_fs_read_at(const char *filename, unsigned long pos,
 
 void sandbox_fs_close(void);
 int sandbox_fs_ls(const char *dirname);
+int sandbox_fs_exists(const char *filename);
 int fs_read_sandbox(const char *filename, void *buf, int offset, int len);
 int fs_write_sandbox(const char *filename, void *buf, int offset, int len);
 
index dad00c0075d9b6904d1db8248c8464e6cd7e2e03..a7e41da7fd4980ef2362816a63d8680cc26ef1b9 100644 (file)
@@ -65,6 +65,9 @@ void spl_net_load_image(const char *device);
 /* USB SPL functions */
 void spl_usb_load_image(void);
 
+/* SATA SPL functions */
+void spl_sata_load_image(void);
+
 /* SPL FAT image functions */
 int spl_load_image_fat(block_dev_desc_t *block_dev, int partition, const char *filename);
 int spl_load_image_fat_os(block_dev_desc_t *block_dev, int partition);
index 760340fbdef85f0ad1980b6c062093522ba8d0d5..8c483c99a3a139d0fcb9362eb22dcaae4c69f5ed 100644 (file)
@@ -67,4 +67,4 @@ obj-$(CONFIG_BOOTP_RANDOM_DELAY) += rand.o
 obj-$(CONFIG_CMD_LINK_LOCAL) += rand.o
 
 # SEE README.arm-unaligned-accesses
-$(obj)bzlib.o: CFLAGS += $(PLATFORM_NO_UNALIGNED)
+CFLAGS_bzlib.o := $(PLATFORM_NO_UNALIGNED)
index f8eda06c9f59849382f96838c9f7a4855fd2dbfd..b6c80671b900958f470e92836bae31fcd87a8da6 100644 (file)
@@ -8,6 +8,6 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-CFLAGS += -D_LZMA_PROB32
+ccflags-y += -D_LZMA_PROB32
 
 obj-y += LzmaDec.o LzmaTools.o
index b96c81fbc2b50336e279cd3d78495badaf1fb9de..5f516f214a3995633a93c4e95a26feb12b8de546 100755 (executable)
--- a/mkconfig
+++ b/mkconfig
@@ -23,7 +23,7 @@ options=""
 
 if [ \( $# -eq 2 \) -a \( "$1" = "-A" \) ] ; then
        # Automatic mode
-       line=`awk '($0 !~ /^#/ && $7 ~ /^'"$2"'$/) { print $1, $2, $3, $4, $5, $6, $7, $8 }' boards.cfg`
+       line=`awk '($0 !~ /^#/ && $7 ~ /^'"$2"'$/) { print $1, $2, $3, $4, $5, $6, $7, $8 }' $srctree/boards.cfg`
        if [ -z "$line" ] ; then
                echo "make: *** No rule to make target \`$2_config'.  Stop." >&2
                exit 1
index 022a20555f5e0105d0a78b6818ddead63095281f..d256abf9e18c03fd8af94c99ab224c0be9c8abf2 100644 (file)
@@ -5,7 +5,6 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-include $(TOPDIR)/config.mk
 include $(TOPDIR)/nand_spl/board/$(BOARDDIR)/config.mk
 
 nandobj        := $(OBJTREE)/nand_spl/
@@ -13,17 +12,18 @@ nandobj     := $(OBJTREE)/nand_spl/
 LDSCRIPT= $(TOPDIR)/nand_spl/board/$(BOARDDIR)/u-boot.lds
 LDFLAGS := -T $(nandobj)u-boot.lds -Ttext $(CONFIG_SYS_TEXT_BASE) $(LDFLAGS) \
           $(LDFLAGS_FINAL)
-AFLAGS += -DCONFIG_NAND_SPL
-CFLAGS += -DCONFIG_NAND_SPL
+asflags-y += -DCONFIG_NAND_SPL
+ccflags-y += -DCONFIG_NAND_SPL
 
 SOBJS  = start.o resetvec.o cache.o
 COBJS  = gpio.o nand_boot.o nand_ecc.o memory.o ndfc.o pll.o
 
-SRCS   := $(addprefix $(obj),$(SOBJS:.o=.S) $(COBJS:.o=.c))
-OBJS   := $(addprefix $(obj),$(SOBJS) $(COBJS))
+OBJS   := $(addprefix $(obj)/,$(SOBJS) $(COBJS))
 __OBJS := $(SOBJS) $(COBJS)
 LNDIR  := $(nandobj)board/$(BOARDDIR)
 
+targets += $(__OBJS)
+
 all: $(nandobj)u-boot-spl.bin $(nandobj)u-boot-spl-16k.bin \
        $(nandobj)System.map
 
@@ -43,61 +43,46 @@ $(nandobj)System.map:       $(nandobj)u-boot-spl
                sort > $@
 
 $(nandobj)u-boot.lds: $(LDSCRIPT)
-       $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$^ >$@
+       $(CPP) $(cpp_flags) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$^ >$@
 
 # create symbolic links for common files
 
 # from cpu directory
-$(obj)cache.S:
+$(obj)/cache.S:
        @rm -f $@
        ln -s $(SRCTREE)/arch/powerpc/cpu/ppc4xx/cache.S $@
 
-$(obj)gpio.c:
+$(obj)/gpio.c:
        @rm -f $@
        ln -s $(SRCTREE)/arch/powerpc/cpu/ppc4xx/gpio.c $@
 
-$(obj)ndfc.c:
+$(obj)/ndfc.c:
        @rm -f $@
        ln -s $(SRCTREE)/drivers/mtd/nand/ndfc.c $@
 
-$(obj)resetvec.S:
+$(obj)/resetvec.S:
        @rm -f $@
        ln -s $(SRCTREE)/arch/powerpc/cpu/ppc4xx/resetvec.S $@
 
-$(obj)start.S:
+$(obj)/start.S:
        @rm -f $@
        ln -s $(SRCTREE)/arch/powerpc/cpu/ppc4xx/start.S $@
 
 # from board directory
-$(obj)memory.c:
+$(obj)/memory.c:
        @rm -f $@
        ln -s $(SRCTREE)/board/amcc/acadia/memory.c $@
 
-$(obj)pll.c:
+$(obj)/pll.c:
        @rm -f $@
        ln -s $(SRCTREE)/board/amcc/acadia/pll.c $@
 
 # from nand_spl directory
-$(obj)nand_boot.c:
+$(obj)/nand_boot.c:
        @rm -f $@
        ln -s $(SRCTREE)/nand_spl/nand_boot.c $@
 
 # from drivers/mtd/nand directory
-$(obj)nand_ecc.c:
+$(obj)/nand_ecc.c:
        @rm -f $@
        ln -s $(SRCTREE)/drivers/mtd/nand/nand_ecc.c $@
-
-#########################################################################
-
-$(obj)%.o:     $(obj)%.S
-       $(CC) $(AFLAGS) -c -o $@ $<
-
-$(obj)%.o:     $(obj)%.c
-       $(CC) $(CFLAGS) -c -o $@ $<
-
-# defines $(obj).depend target
-include $(SRCTREE)/rules.mk
-
-sinclude $(obj).depend
-
-#########################################################################
index d413a480ad84349180d202c6a05d03a30f250dc8..4f36d6c882f2f95ba0cfff740affddba58edff8c 100644 (file)
@@ -5,7 +5,6 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-include $(TOPDIR)/config.mk
 include $(TOPDIR)/nand_spl/board/$(BOARDDIR)/config.mk
 
 nandobj        := $(OBJTREE)/nand_spl/
@@ -13,17 +12,18 @@ nandobj     := $(OBJTREE)/nand_spl/
 LDSCRIPT= $(TOPDIR)/nand_spl/board/$(BOARDDIR)/u-boot.lds
 LDFLAGS := -T $(nandobj)u-boot.lds -Ttext $(CONFIG_SYS_TEXT_BASE) $(LDFLAGS) \
           $(LDFLAGS_FINAL)
-AFLAGS += -DCONFIG_NAND_SPL
-CFLAGS += -DCONFIG_NAND_SPL
+asflags-y += -DCONFIG_NAND_SPL
+ccflags-y += -DCONFIG_NAND_SPL
 
 SOBJS  = start.o init.o resetvec.o
 COBJS  = nand_boot.o nand_ecc.o ndfc.o sdram.o
 
-SRCS   := $(addprefix $(obj),$(SOBJS:.o=.S) $(COBJS:.o=.c))
-OBJS   := $(addprefix $(obj),$(SOBJS) $(COBJS))
+OBJS   := $(addprefix $(obj)/,$(SOBJS) $(COBJS))
 __OBJS := $(SOBJS) $(COBJS)
 LNDIR  := $(nandobj)board/$(BOARDDIR)
 
+targets += $(__OBJS)
+
 all: $(nandobj)u-boot-spl.bin $(nandobj)u-boot-spl-16k.bin
 
 $(nandobj)u-boot-spl-16k.bin: $(nandobj)u-boot-spl
@@ -37,55 +37,34 @@ $(nandobj)u-boot-spl:       $(OBJS) $(nandobj)u-boot.lds
                -Map $(nandobj)u-boot-spl.map -o $@
 
 $(nandobj)u-boot.lds: $(LDSCRIPT)
-       $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$^ >$@
+       $(CPP) $(cpp_flags) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$^ >$@
 
 # create symbolic links for common files
 
 # from cpu directory
-$(obj)ndfc.c:
+$(obj)/ndfc.c:
        @rm -f $@
        ln -s $(SRCTREE)/drivers/mtd/nand/ndfc.c $@
 
-$(obj)resetvec.S:
+$(obj)/resetvec.S:
        @rm -f $@
        ln -s $(SRCTREE)/arch/powerpc/cpu/ppc4xx/resetvec.S $@
 
-$(obj)start.S:
+$(obj)/start.S:
        @rm -f $@
        ln -s $(SRCTREE)/arch/powerpc/cpu/ppc4xx/start.S $@
 
 # from board directory
-$(obj)init.S:
+$(obj)/init.S:
        @rm -f $@
        ln -s $(SRCTREE)/board/amcc/bamboo/init.S $@
 
 # from nand_spl directory
-$(obj)nand_boot.c:
+$(obj)/nand_boot.c:
        @rm -f $@
        ln -s $(SRCTREE)/nand_spl/nand_boot.c $@
 
 # from drivers/mtd/nand directory
-$(obj)nand_ecc.c:
+$(obj)/nand_ecc.c:
        @rm -f $@
        ln -s $(SRCTREE)/drivers/mtd/nand/nand_ecc.c $@
-
-ifneq ($(OBJTREE), $(SRCTREE))
-$(obj)sdram.c:
-       @rm -f $@
-       ln -s $(SRCTREE)/nand_spl/board/$(BOARDDIR)/sdram.c $@
-endif
-
-#########################################################################
-
-$(obj)%.o:     $(obj)%.S
-       $(CC) $(AFLAGS) -c -o $@ $<
-
-$(obj)%.o:     $(obj)%.c
-       $(CC) $(CFLAGS) -c -o $@ $<
-
-# defines $(obj).depend target
-include $(SRCTREE)/rules.mk
-
-sinclude $(obj).depend
-
-#########################################################################
index b2ef03f78b09286785a027d0cc5e700162194b3d..5c9c8e83edad56ec91387fd0cfef47cb8cb34522 100644 (file)
@@ -5,7 +5,6 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-include $(TOPDIR)/config.mk
 include $(TOPDIR)/nand_spl/board/$(BOARDDIR)/config.mk
 
 nandobj        := $(OBJTREE)/nand_spl/
@@ -13,8 +12,8 @@ nandobj       := $(OBJTREE)/nand_spl/
 LDSCRIPT= $(TOPDIR)/nand_spl/board/$(BOARDDIR)/u-boot.lds
 LDFLAGS := -T $(nandobj)u-boot.lds -Ttext $(CONFIG_SYS_TEXT_BASE) $(LDFLAGS) \
           $(LDFLAGS_FINAL)
-AFLAGS += -DCONFIG_NAND_SPL
-CFLAGS += -DCONFIG_NAND_SPL
+asflags-y += -DCONFIG_NAND_SPL
+ccflags-y += -DCONFIG_NAND_SPL
 
 SOBJS  := start.o
 SOBJS  += init.o
@@ -24,11 +23,12 @@ COBJS       += nand_boot.o
 COBJS  += nand_ecc.o
 COBJS  += ndfc.o
 
-SRCS   := $(addprefix $(obj),$(SOBJS:.o=.S) $(COBJS:.o=.c))
-OBJS   := $(addprefix $(obj),$(SOBJS) $(COBJS))
+OBJS   := $(addprefix $(obj)/,$(SOBJS) $(COBJS))
 __OBJS := $(SOBJS) $(COBJS)
 LNDIR  := $(nandobj)board/$(BOARDDIR)
 
+targets += $(__OBJS)
+
 all: $(nandobj)u-boot-spl.bin $(nandobj)u-boot-spl-16k.bin
 
 $(nandobj)u-boot-spl-16k.bin: $(nandobj)u-boot-spl
@@ -42,55 +42,34 @@ $(nandobj)u-boot-spl:       $(OBJS) $(nandobj)u-boot.lds
                -Map $(nandobj)u-boot-spl.map -o $@
 
 $(nandobj)u-boot.lds: $(LDSCRIPT)
-       $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$^ >$@
+       $(CPP) $(cpp_flags) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$^ >$@
 
 # create symbolic links for common files
 
 # from cpu directory
-$(obj)ndfc.c:
+$(obj)/ndfc.c:
        @rm -f $@
        ln -s $(SRCTREE)/drivers/mtd/nand/ndfc.c $@
 
-$(obj)resetvec.S:
+$(obj)/resetvec.S:
        @rm -f $@
        ln -s $(SRCTREE)/arch/powerpc/cpu/ppc4xx/resetvec.S $@
 
-$(obj)start.S:
+$(obj)/start.S:
        @rm -f $@
        ln -s $(SRCTREE)/arch/powerpc/cpu/ppc4xx/start.S $@
 
 # from board directory
-$(obj)init.S:
+$(obj)/init.S:
        @rm -f $@
        ln -s $(SRCTREE)/board/amcc/canyonlands/init.S $@
 
 # from nand_spl directory
-$(obj)nand_boot.c:
+$(obj)/nand_boot.c:
        @rm -f $@
        ln -s $(SRCTREE)/nand_spl/nand_boot.c $@
 
 # from drivers/mtd/nand directory
-$(obj)nand_ecc.c:
+$(obj)/nand_ecc.c:
        @rm -f $@
        ln -s $(SRCTREE)/drivers/mtd/nand/nand_ecc.c $@
-
-ifneq ($(OBJTREE), $(SRCTREE))
-$(obj)ddr2_fixed.c:
-       @rm -f $@
-       ln -s $(SRCTREE)/nand_spl/board/$(BOARDDIR)/ddr2_fixed.c $@
-endif
-
-#########################################################################
-
-$(obj)%.o:     $(obj)%.S
-       $(CC) $(AFLAGS) -c -o $@ $<
-
-$(obj)%.o:     $(obj)%.c
-       $(CC) $(CFLAGS) -c -o $@ $<
-
-# defines $(obj).depend target
-include $(SRCTREE)/rules.mk
-
-sinclude $(obj).depend
-
-#########################################################################
index 5899b9efe835ea5f99958feeebf8f485c41c1653..cfe308222b36d09ece5608ac7b7aa168334c7f7c 100644 (file)
@@ -5,7 +5,6 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-include $(TOPDIR)/config.mk
 include $(TOPDIR)/nand_spl/board/$(BOARDDIR)/config.mk
 
 nandobj        := $(OBJTREE)/nand_spl/
@@ -13,17 +12,18 @@ nandobj     := $(OBJTREE)/nand_spl/
 LDSCRIPT= $(TOPDIR)/nand_spl/board/$(BOARDDIR)/u-boot.lds
 LDFLAGS := -T $(nandobj)u-boot.lds -Ttext $(CONFIG_SYS_TEXT_BASE) $(LDFLAGS) \
           $(LDFLAGS_FINAL)
-AFLAGS += -DCONFIG_NAND_SPL
-CFLAGS += -DCONFIG_NAND_SPL
+asflags-y += -DCONFIG_NAND_SPL
+ccflags-y += -DCONFIG_NAND_SPL
 
 SOBJS  = start.o resetvec.o cache.o
 COBJS  = 44x_spd_ddr2.o nand_boot.o nand_ecc.o ndfc.o
 
-SRCS   := $(addprefix $(obj),$(SOBJS:.o=.S) $(COBJS:.o=.c))
-OBJS   := $(addprefix $(obj),$(SOBJS) $(COBJS))
+OBJS   := $(addprefix $(obj)/,$(SOBJS) $(COBJS))
 __OBJS := $(SOBJS) $(COBJS)
 LNDIR  := $(nandobj)board/$(BOARDDIR)
 
+targets += $(__OBJS)
+
 all: $(nandobj)u-boot-spl.bin $(nandobj)u-boot-spl-16k.bin
 
 $(nandobj)u-boot-spl-16k.bin: $(nandobj)u-boot-spl
@@ -37,56 +37,41 @@ $(nandobj)u-boot-spl:       $(OBJS) $(nandobj)u-boot.lds
                -Map $(nandobj)u-boot-spl.map -o $@
 
 $(nandobj)u-boot.lds: $(LDSCRIPT)
-       $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$^ >$@
+       $(CPP) $(cpp_flags) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$^ >$@
 
 # create symbolic links for common files
 
 # from cpu directory
-$(obj)44x_spd_ddr2.c: $(obj)ecc.h
+$(obj)/44x_spd_ddr2.c: $(obj)/ecc.h
        @rm -f $@
        ln -s $(SRCTREE)/arch/powerpc/cpu/ppc4xx/44x_spd_ddr2.c $@
 
-$(obj)cache.S:
+$(obj)/cache.S:
        @rm -f $@
        ln -s $(SRCTREE)/arch/powerpc/cpu/ppc4xx/cache.S $@
 
-$(obj)ecc.h:
+$(obj)/ecc.h:
        @rm -f $@
        ln -s $(SRCTREE)/arch/powerpc/cpu/ppc4xx/ecc.h $@
 
-$(obj)ndfc.c:
+$(obj)/ndfc.c:
        @rm -f $@
        ln -s $(SRCTREE)/drivers/mtd/nand/ndfc.c $@
 
-$(obj)resetvec.S:
+$(obj)/resetvec.S:
        @rm -f $@
        ln -s $(SRCTREE)/arch/powerpc/cpu/ppc4xx/resetvec.S $@
 
-$(obj)start.S:
+$(obj)/start.S:
        @rm -f $@
        ln -s $(SRCTREE)/arch/powerpc/cpu/ppc4xx/start.S $@
 
 # from nand_spl directory
-$(obj)nand_boot.c:
+$(obj)/nand_boot.c:
        @rm -f $@
        ln -s $(SRCTREE)/nand_spl/nand_boot.c $@
 
 # from drivers/nand directory
-$(obj)nand_ecc.c:
+$(obj)/nand_ecc.c:
        @rm -f $@
        ln -s $(SRCTREE)/drivers/mtd/nand/nand_ecc.c $@
-
-#########################################################################
-
-$(obj)%.o:     $(obj)%.S
-       $(CC) $(AFLAGS) -c -o $@ $<
-
-$(obj)%.o:     $(obj)%.c
-       $(CC) $(CFLAGS) -c -o $@ $<
-
-# defines $(obj).depend target
-include $(SRCTREE)/rules.mk
-
-sinclude $(obj).depend
-
-#########################################################################
index fea6c4e489b0c2d0076b77fb26c50216a26f47a9..de02886b291d923175eb13adcb82f5141db501f3 100644 (file)
@@ -5,7 +5,6 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-include $(TOPDIR)/config.mk
 include $(TOPDIR)/nand_spl/board/$(BOARDDIR)/config.mk
 
 nandobj        := $(OBJTREE)/nand_spl/
@@ -13,17 +12,18 @@ nandobj     := $(OBJTREE)/nand_spl/
 LDSCRIPT= $(TOPDIR)/nand_spl/board/$(BOARDDIR)/u-boot.lds
 LDFLAGS := -T $(nandobj)u-boot.lds -Ttext $(CONFIG_SYS_TEXT_BASE) $(LDFLAGS) \
           $(LDFLAGS_FINAL)
-AFLAGS += -DCONFIG_NAND_SPL
-CFLAGS += -DCONFIG_NAND_SPL
+asflags-y += -DCONFIG_NAND_SPL
+ccflags-y += -DCONFIG_NAND_SPL
 
 SOBJS  = start.o init.o resetvec.o
 COBJS  = denali_data_eye.o nand_boot.o nand_ecc.o ndfc.o sdram.o
 
-SRCS   := $(addprefix $(obj),$(SOBJS:.o=.S) $(COBJS:.o=.c))
-OBJS   := $(addprefix $(obj),$(SOBJS) $(COBJS))
+OBJS   := $(addprefix $(obj)/,$(SOBJS) $(COBJS))
 __OBJS := $(SOBJS) $(COBJS)
 LNDIR  := $(nandobj)board/$(BOARDDIR)
 
+targets += $(__OBJS)
+
 all: $(nandobj)u-boot-spl.bin $(nandobj)u-boot-spl-16k.bin
 
 $(nandobj)u-boot-spl-16k.bin: $(nandobj)u-boot-spl
@@ -37,59 +37,44 @@ $(nandobj)u-boot-spl:       $(OBJS) $(nandobj)u-boot.lds
                -Map $(nandobj)u-boot-spl.map -o $@
 
 $(nandobj)u-boot.lds: $(LDSCRIPT)
-       $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$^ >$@
+       $(CPP) $(cpp_flags) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$^ >$@
 
 # create symbolic links for common files
 
 # from cpu directory
-$(obj)denali_data_eye.c:
+$(obj)/denali_data_eye.c:
        @rm -f $@
        ln -s $(SRCTREE)/arch/powerpc/cpu/ppc4xx/denali_data_eye.c $@
 
-$(obj)ndfc.c:
+$(obj)/ndfc.c:
        @rm -f $@
        ln -s $(SRCTREE)/drivers/mtd/nand/ndfc.c $@
 
-$(obj)resetvec.S:
+$(obj)/resetvec.S:
        @rm -f $@
        ln -s $(SRCTREE)/arch/powerpc/cpu/ppc4xx/resetvec.S $@
 
-$(obj)start.S:
+$(obj)/start.S:
        @rm -f $@
        ln -s $(SRCTREE)/arch/powerpc/cpu/ppc4xx/start.S $@
 
 # from board directory
-$(obj)init.S:
+$(obj)/init.S:
        @rm -f $@
        ln -s $(SRCTREE)/board/amcc/sequoia/init.S $@
 
-$(obj)sdram.c:
+$(obj)/sdram.c:
        @rm -f $@
-       @rm -f $(obj)sdram.h
+       @rm -f $(obj)/sdram.h
        ln -s $(SRCTREE)/board/amcc/sequoia/sdram.c $@
-       ln -s $(SRCTREE)/board/amcc/sequoia/sdram.h $(obj)sdram.h
+       ln -s $(SRCTREE)/board/amcc/sequoia/sdram.h $(obj)/sdram.h
 
 # from nand_spl directory
-$(obj)nand_boot.c:
+$(obj)/nand_boot.c:
        @rm -f $@
        ln -s $(SRCTREE)/nand_spl/nand_boot.c $@
 
 # from drivers/mtd/nand directory
-$(obj)nand_ecc.c:
+$(obj)/nand_ecc.c:
        @rm -f $@
        ln -s $(SRCTREE)/drivers/mtd/nand/nand_ecc.c $@
-
-#########################################################################
-
-$(obj)%.o:     $(obj)%.S
-       $(CC) $(AFLAGS) -c -o $@ $<
-
-$(obj)%.o:     $(obj)%.c
-       $(CC) $(CFLAGS) -c -o $@ $<
-
-# defines $(obj).depend target
-include $(SRCTREE)/rules.mk
-
-sinclude $(obj).depend
-
-#########################################################################
index c49a6e0b8f6553ea8eb4e41857347a769abfe1de..a68567427e59b4534155126d0921a4fa7b9f6bcf 100644 (file)
@@ -6,28 +6,26 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-NAND_SPL := y
 PAD_TO := 0xfff04000
 
-include $(TOPDIR)/config.mk
-
 nandobj        := $(OBJTREE)/nand_spl/
 
 LDSCRIPT= $(TOPDIR)/nand_spl/board/$(BOARDDIR)/u-boot.lds
 LDFLAGS := -T $(nandobj)u-boot.lds -Ttext $(CONFIG_SYS_TEXT_BASE_SPL) \
           $(LDFLAGS) $(LDFLAGS_FINAL)
-AFLAGS += -DCONFIG_NAND_SPL
-CFLAGS += -DCONFIG_NAND_SPL
+asflags-y += -DCONFIG_NAND_SPL
+ccflags-y += -DCONFIG_NAND_SPL
 
 SOBJS  = start.o ticks.o
 COBJS  = nand_boot_fsl_elbc.o $(BOARD).o sdram.o ns16550.o spl_minimal.o \
          time.o cache.o
 
-SRCS   := $(addprefix $(obj),$(SOBJS:.o=.S) $(COBJS:.o=.c))
-OBJS   := $(addprefix $(obj),$(SOBJS) $(COBJS))
+OBJS   := $(addprefix $(obj)/,$(SOBJS) $(COBJS))
 __OBJS := $(SOBJS) $(COBJS)
 LNDIR  := $(nandobj)board/$(BOARDDIR)
 
+targets += $(__OBJS)
+
 all: $(nandobj)u-boot-spl.bin $(nandobj)u-boot-spl-16k.bin
 
 $(nandobj)u-boot-spl-16k.bin: $(nandobj)u-boot-spl
@@ -41,48 +39,33 @@ $(nandobj)u-boot-spl:       $(OBJS) $(nandobj)u-boot.lds
                -Map $(nandobj)u-boot-spl.map -o $@
 
 $(nandobj)u-boot.lds: $(LDSCRIPT)
-       $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$^ >$@
+       $(CPP) $(cpp_flags) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$^ >$@
 
 # create symbolic links for common files
 
-$(obj)start.S:
+$(obj)/start.S:
        ln -sf $(SRCTREE)/arch/powerpc/cpu/mpc83xx/start.S $@
 
-$(obj)nand_boot_fsl_elbc.c:
+$(obj)/nand_boot_fsl_elbc.c:
        ln -sf $(SRCTREE)/nand_spl/nand_boot_fsl_elbc.c $@
 
-$(obj)sdram.c:
+$(obj)/sdram.c:
        ln -sf $(SRCTREE)/board/$(BOARDDIR)/sdram.c $@
 
-$(obj)$(BOARD).c:
+$(obj)/$(BOARD).c:
        ln -sf $(SRCTREE)/board/$(BOARDDIR)/$(BOARD).c $@
 
-$(obj)ns16550.c:
+$(obj)/ns16550.c:
        ln -sf $(SRCTREE)/drivers/serial/ns16550.c $@
 
-$(obj)spl_minimal.c:
+$(obj)/spl_minimal.c:
        ln -sf $(SRCTREE)/arch/powerpc/cpu/mpc83xx/spl_minimal.c $@
 
-$(obj)cache.c:
+$(obj)/cache.c:
        ln -sf $(SRCTREE)/arch/powerpc/lib/cache.c $@
 
-$(obj)time.c:
+$(obj)/time.c:
        ln -sf $(SRCTREE)/arch/powerpc/lib/time.c $@
 
-$(obj)ticks.S:
+$(obj)/ticks.S:
        ln -sf $(SRCTREE)/arch/powerpc/lib/ticks.S $@
-
-#########################################################################
-
-$(obj)%.o:     $(obj)%.S
-       $(CC) $(AFLAGS) -c -o $@ $<
-
-$(obj)%.o:     $(obj)%.c
-       $(CC) $(CFLAGS) -c -o $@ $<
-
-# defines $(obj).depend target
-include $(SRCTREE)/rules.mk
-
-sinclude $(obj).depend
-
-#########################################################################
index 62330815cc731ba2fcb37c56ad2e58673e399239..f0beaedf1a523b4bd93c180df586dc598ff6d05a 100644 (file)
@@ -7,29 +7,27 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-NAND_SPL := y
 CONFIG_SYS_TEXT_BASE_SPL := 0xfff00000
 PAD_TO := 0xfff01000
 
-include $(TOPDIR)/config.mk
-
 nandobj        := $(OBJTREE)/nand_spl/
 
 LDSCRIPT= $(TOPDIR)/$(CPUDIR)/u-boot-nand_spl.lds
 LDFLAGS := -T $(nandobj)u-boot-nand_spl.lds -Ttext $(CONFIG_SYS_TEXT_BASE_SPL) \
                $(LDFLAGS) $(LDFLAGS_FINAL)
-AFLAGS += -DCONFIG_NAND_SPL
-CFLAGS += -DCONFIG_NAND_SPL
+asflags-y += -DCONFIG_NAND_SPL
+ccflags-y += -DCONFIG_NAND_SPL
 
 SOBJS  = start.o resetvec.o
 COBJS  = cache.o cpu_init_early.o spl_minimal.o fsl_law.o law.o \
          nand_boot.o nand_boot_fsl_elbc.o ns16550.o tlb.o tlb_table.o
 
-SRCS   := $(addprefix $(obj),$(SOBJS:.o=.S) $(COBJS:.o=.c))
-OBJS   := $(addprefix $(obj),$(SOBJS) $(COBJS))
+OBJS   := $(addprefix $(obj)/,$(SOBJS) $(COBJS))
 __OBJS := $(SOBJS) $(COBJS)
 LNDIR  := $(nandobj)board/$(BOARDDIR)
 
+targets += $(__OBJS)
+
 all: $(nandobj)u-boot-spl.bin $(nandobj)u-boot-spl-16k.bin
 
 $(nandobj)u-boot-spl-16k.bin: $(nandobj)u-boot-spl
@@ -43,76 +41,55 @@ $(nandobj)u-boot-spl:       $(OBJS) $(nandobj)u-boot-nand_spl.lds
                -Map $(nandobj)u-boot-spl.map -o $@
 
 $(nandobj)u-boot-nand_spl.lds: $(LDSCRIPT)
-       $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(nandobj)/board/$(BOARDDIR) \
+       $(CPP) $(cpp_flags) $(LDPPFLAGS) -I$(nandobj)/board/$(BOARDDIR) \
                -ansi -D__ASSEMBLY__ -P - <$< >$@
 
 # create symbolic links for common files
 
-$(obj)cache.c:
+$(obj)/cache.c:
        @rm -f $@
        ln -sf $(SRCTREE)/arch/powerpc/lib/cache.c $@
 
-$(obj)cpu_init_early.c:
+$(obj)/cpu_init_early.c:
        @rm -f $@
        ln -sf $(SRCTREE)/arch/powerpc/cpu/mpc85xx/cpu_init_early.c $@
 
-$(obj)spl_minimal.c:
+$(obj)/spl_minimal.c:
        @rm -f $@
        ln -sf $(SRCTREE)/arch/powerpc/cpu/mpc85xx/spl_minimal.c $@
 
-$(obj)fsl_law.c:
+$(obj)/fsl_law.c:
        @rm -f $@
        ln -sf $(SRCTREE)/arch/powerpc/cpu/mpc8xxx/law.c $@
 
-$(obj)law.c:
+$(obj)/law.c:
        @rm -f $@
        ln -sf $(SRCTREE)/board/$(BOARDDIR)/law.c $@
 
-$(obj)nand_boot_fsl_elbc.c:
+$(obj)/nand_boot_fsl_elbc.c:
        @rm -f $@
        ln -sf $(SRCTREE)/nand_spl/nand_boot_fsl_elbc.c $@
 
-$(obj)ns16550.c:
+$(obj)/ns16550.c:
        @rm -f $@
        ln -sf $(SRCTREE)/drivers/serial/ns16550.c $@
 
-$(obj)resetvec.S:
+$(obj)/resetvec.S:
        @rm -f $@
        ln -s $(SRCTREE)/$(CPUDIR)/resetvec.S $@
 
-$(obj)fixed_ivor.S:
+$(obj)/fixed_ivor.S:
        @rm -f $@
        ln -sf $(SRCTREE)/arch/powerpc/cpu/mpc85xx/fixed_ivor.S $@
 
-$(obj)start.S: $(obj)fixed_ivor.S
+$(obj)/start.S: $(obj)/fixed_ivor.S
        @rm -f $@
        ln -sf $(SRCTREE)/arch/powerpc/cpu/mpc85xx/start.S $@
 
-$(obj)tlb.c:
+$(obj)/tlb.c:
        @rm -f $@
        ln -sf $(SRCTREE)/arch/powerpc/cpu/mpc85xx/tlb.c $@
 
-$(obj)tlb_table.c:
+$(obj)/tlb_table.c:
        @rm -f $@
        ln -sf $(SRCTREE)/board/$(BOARDDIR)/tlb.c $@
-
-ifneq ($(OBJTREE), $(SRCTREE))
-$(obj)nand_boot.c:
-       @rm -f $@
-       ln -s $(SRCTREE)/nand_spl/board/$(BOARDDIR)/nand_boot.c $@
-endif
-
-#########################################################################
-
-$(obj)%.o:     $(obj)%.S
-       $(CC) $(AFLAGS) -c -o $@ $<
-
-$(obj)%.o:     $(obj)%.c
-       $(CC) $(CFLAGS) -c -o $@ $<
-
-# defines $(obj).depend target
-include $(SRCTREE)/rules.mk
-
-sinclude $(obj).depend
-
-#########################################################################
index 62330815cc731ba2fcb37c56ad2e58673e399239..f0beaedf1a523b4bd93c180df586dc598ff6d05a 100644 (file)
@@ -7,29 +7,27 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-NAND_SPL := y
 CONFIG_SYS_TEXT_BASE_SPL := 0xfff00000
 PAD_TO := 0xfff01000
 
-include $(TOPDIR)/config.mk
-
 nandobj        := $(OBJTREE)/nand_spl/
 
 LDSCRIPT= $(TOPDIR)/$(CPUDIR)/u-boot-nand_spl.lds
 LDFLAGS := -T $(nandobj)u-boot-nand_spl.lds -Ttext $(CONFIG_SYS_TEXT_BASE_SPL) \
                $(LDFLAGS) $(LDFLAGS_FINAL)
-AFLAGS += -DCONFIG_NAND_SPL
-CFLAGS += -DCONFIG_NAND_SPL
+asflags-y += -DCONFIG_NAND_SPL
+ccflags-y += -DCONFIG_NAND_SPL
 
 SOBJS  = start.o resetvec.o
 COBJS  = cache.o cpu_init_early.o spl_minimal.o fsl_law.o law.o \
          nand_boot.o nand_boot_fsl_elbc.o ns16550.o tlb.o tlb_table.o
 
-SRCS   := $(addprefix $(obj),$(SOBJS:.o=.S) $(COBJS:.o=.c))
-OBJS   := $(addprefix $(obj),$(SOBJS) $(COBJS))
+OBJS   := $(addprefix $(obj)/,$(SOBJS) $(COBJS))
 __OBJS := $(SOBJS) $(COBJS)
 LNDIR  := $(nandobj)board/$(BOARDDIR)
 
+targets += $(__OBJS)
+
 all: $(nandobj)u-boot-spl.bin $(nandobj)u-boot-spl-16k.bin
 
 $(nandobj)u-boot-spl-16k.bin: $(nandobj)u-boot-spl
@@ -43,76 +41,55 @@ $(nandobj)u-boot-spl:       $(OBJS) $(nandobj)u-boot-nand_spl.lds
                -Map $(nandobj)u-boot-spl.map -o $@
 
 $(nandobj)u-boot-nand_spl.lds: $(LDSCRIPT)
-       $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(nandobj)/board/$(BOARDDIR) \
+       $(CPP) $(cpp_flags) $(LDPPFLAGS) -I$(nandobj)/board/$(BOARDDIR) \
                -ansi -D__ASSEMBLY__ -P - <$< >$@
 
 # create symbolic links for common files
 
-$(obj)cache.c:
+$(obj)/cache.c:
        @rm -f $@
        ln -sf $(SRCTREE)/arch/powerpc/lib/cache.c $@
 
-$(obj)cpu_init_early.c:
+$(obj)/cpu_init_early.c:
        @rm -f $@
        ln -sf $(SRCTREE)/arch/powerpc/cpu/mpc85xx/cpu_init_early.c $@
 
-$(obj)spl_minimal.c:
+$(obj)/spl_minimal.c:
        @rm -f $@
        ln -sf $(SRCTREE)/arch/powerpc/cpu/mpc85xx/spl_minimal.c $@
 
-$(obj)fsl_law.c:
+$(obj)/fsl_law.c:
        @rm -f $@
        ln -sf $(SRCTREE)/arch/powerpc/cpu/mpc8xxx/law.c $@
 
-$(obj)law.c:
+$(obj)/law.c:
        @rm -f $@
        ln -sf $(SRCTREE)/board/$(BOARDDIR)/law.c $@
 
-$(obj)nand_boot_fsl_elbc.c:
+$(obj)/nand_boot_fsl_elbc.c:
        @rm -f $@
        ln -sf $(SRCTREE)/nand_spl/nand_boot_fsl_elbc.c $@
 
-$(obj)ns16550.c:
+$(obj)/ns16550.c:
        @rm -f $@
        ln -sf $(SRCTREE)/drivers/serial/ns16550.c $@
 
-$(obj)resetvec.S:
+$(obj)/resetvec.S:
        @rm -f $@
        ln -s $(SRCTREE)/$(CPUDIR)/resetvec.S $@
 
-$(obj)fixed_ivor.S:
+$(obj)/fixed_ivor.S:
        @rm -f $@
        ln -sf $(SRCTREE)/arch/powerpc/cpu/mpc85xx/fixed_ivor.S $@
 
-$(obj)start.S: $(obj)fixed_ivor.S
+$(obj)/start.S: $(obj)/fixed_ivor.S
        @rm -f $@
        ln -sf $(SRCTREE)/arch/powerpc/cpu/mpc85xx/start.S $@
 
-$(obj)tlb.c:
+$(obj)/tlb.c:
        @rm -f $@
        ln -sf $(SRCTREE)/arch/powerpc/cpu/mpc85xx/tlb.c $@
 
-$(obj)tlb_table.c:
+$(obj)/tlb_table.c:
        @rm -f $@
        ln -sf $(SRCTREE)/board/$(BOARDDIR)/tlb.c $@
-
-ifneq ($(OBJTREE), $(SRCTREE))
-$(obj)nand_boot.c:
-       @rm -f $@
-       ln -s $(SRCTREE)/nand_spl/board/$(BOARDDIR)/nand_boot.c $@
-endif
-
-#########################################################################
-
-$(obj)%.o:     $(obj)%.S
-       $(CC) $(AFLAGS) -c -o $@ $<
-
-$(obj)%.o:     $(obj)%.c
-       $(CC) $(CFLAGS) -c -o $@ $<
-
-# defines $(obj).depend target
-include $(SRCTREE)/rules.mk
-
-sinclude $(obj).depend
-
-#########################################################################
index 62330815cc731ba2fcb37c56ad2e58673e399239..f0beaedf1a523b4bd93c180df586dc598ff6d05a 100644 (file)
@@ -7,29 +7,27 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-NAND_SPL := y
 CONFIG_SYS_TEXT_BASE_SPL := 0xfff00000
 PAD_TO := 0xfff01000
 
-include $(TOPDIR)/config.mk
-
 nandobj        := $(OBJTREE)/nand_spl/
 
 LDSCRIPT= $(TOPDIR)/$(CPUDIR)/u-boot-nand_spl.lds
 LDFLAGS := -T $(nandobj)u-boot-nand_spl.lds -Ttext $(CONFIG_SYS_TEXT_BASE_SPL) \
                $(LDFLAGS) $(LDFLAGS_FINAL)
-AFLAGS += -DCONFIG_NAND_SPL
-CFLAGS += -DCONFIG_NAND_SPL
+asflags-y += -DCONFIG_NAND_SPL
+ccflags-y += -DCONFIG_NAND_SPL
 
 SOBJS  = start.o resetvec.o
 COBJS  = cache.o cpu_init_early.o spl_minimal.o fsl_law.o law.o \
          nand_boot.o nand_boot_fsl_elbc.o ns16550.o tlb.o tlb_table.o
 
-SRCS   := $(addprefix $(obj),$(SOBJS:.o=.S) $(COBJS:.o=.c))
-OBJS   := $(addprefix $(obj),$(SOBJS) $(COBJS))
+OBJS   := $(addprefix $(obj)/,$(SOBJS) $(COBJS))
 __OBJS := $(SOBJS) $(COBJS)
 LNDIR  := $(nandobj)board/$(BOARDDIR)
 
+targets += $(__OBJS)
+
 all: $(nandobj)u-boot-spl.bin $(nandobj)u-boot-spl-16k.bin
 
 $(nandobj)u-boot-spl-16k.bin: $(nandobj)u-boot-spl
@@ -43,76 +41,55 @@ $(nandobj)u-boot-spl:       $(OBJS) $(nandobj)u-boot-nand_spl.lds
                -Map $(nandobj)u-boot-spl.map -o $@
 
 $(nandobj)u-boot-nand_spl.lds: $(LDSCRIPT)
-       $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(nandobj)/board/$(BOARDDIR) \
+       $(CPP) $(cpp_flags) $(LDPPFLAGS) -I$(nandobj)/board/$(BOARDDIR) \
                -ansi -D__ASSEMBLY__ -P - <$< >$@
 
 # create symbolic links for common files
 
-$(obj)cache.c:
+$(obj)/cache.c:
        @rm -f $@
        ln -sf $(SRCTREE)/arch/powerpc/lib/cache.c $@
 
-$(obj)cpu_init_early.c:
+$(obj)/cpu_init_early.c:
        @rm -f $@
        ln -sf $(SRCTREE)/arch/powerpc/cpu/mpc85xx/cpu_init_early.c $@
 
-$(obj)spl_minimal.c:
+$(obj)/spl_minimal.c:
        @rm -f $@
        ln -sf $(SRCTREE)/arch/powerpc/cpu/mpc85xx/spl_minimal.c $@
 
-$(obj)fsl_law.c:
+$(obj)/fsl_law.c:
        @rm -f $@
        ln -sf $(SRCTREE)/arch/powerpc/cpu/mpc8xxx/law.c $@
 
-$(obj)law.c:
+$(obj)/law.c:
        @rm -f $@
        ln -sf $(SRCTREE)/board/$(BOARDDIR)/law.c $@
 
-$(obj)nand_boot_fsl_elbc.c:
+$(obj)/nand_boot_fsl_elbc.c:
        @rm -f $@
        ln -sf $(SRCTREE)/nand_spl/nand_boot_fsl_elbc.c $@
 
-$(obj)ns16550.c:
+$(obj)/ns16550.c:
        @rm -f $@
        ln -sf $(SRCTREE)/drivers/serial/ns16550.c $@
 
-$(obj)resetvec.S:
+$(obj)/resetvec.S:
        @rm -f $@
        ln -s $(SRCTREE)/$(CPUDIR)/resetvec.S $@
 
-$(obj)fixed_ivor.S:
+$(obj)/fixed_ivor.S:
        @rm -f $@
        ln -sf $(SRCTREE)/arch/powerpc/cpu/mpc85xx/fixed_ivor.S $@
 
-$(obj)start.S: $(obj)fixed_ivor.S
+$(obj)/start.S: $(obj)/fixed_ivor.S
        @rm -f $@
        ln -sf $(SRCTREE)/arch/powerpc/cpu/mpc85xx/start.S $@
 
-$(obj)tlb.c:
+$(obj)/tlb.c:
        @rm -f $@
        ln -sf $(SRCTREE)/arch/powerpc/cpu/mpc85xx/tlb.c $@
 
-$(obj)tlb_table.c:
+$(obj)/tlb_table.c:
        @rm -f $@
        ln -sf $(SRCTREE)/board/$(BOARDDIR)/tlb.c $@
-
-ifneq ($(OBJTREE), $(SRCTREE))
-$(obj)nand_boot.c:
-       @rm -f $@
-       ln -s $(SRCTREE)/nand_spl/board/$(BOARDDIR)/nand_boot.c $@
-endif
-
-#########################################################################
-
-$(obj)%.o:     $(obj)%.S
-       $(CC) $(AFLAGS) -c -o $@ $<
-
-$(obj)%.o:     $(obj)%.c
-       $(CC) $(CFLAGS) -c -o $@ $<
-
-# defines $(obj).depend target
-include $(SRCTREE)/rules.mk
-
-sinclude $(obj).depend
-
-#########################################################################
index dbdfa198959522cfaaadf933bc36441d102a2898..3918ac585bb47395eca44f8ba64ff79811373ccb 100644 (file)
@@ -3,28 +3,27 @@
 #
 # SPDX-License-Identifier:     GPL-2.0+
 #
-NAND_SPL := y
-PAD_TO := 0xfff01000
 
-include $(TOPDIR)/config.mk
+PAD_TO := 0xfff01000
 
 nandobj        := $(OBJTREE)/nand_spl/
 
 LDSCRIPT= $(TOPDIR)/$(CPUDIR)/u-boot-nand_spl.lds
 LDFLAGS := -T $(nandobj)u-boot-nand_spl.lds -Ttext $(CONFIG_SYS_TEXT_BASE_SPL) \
                $(LDFLAGS) $(LDFLAGS_FINAL)
-AFLAGS += -DCONFIG_NAND_SPL
-CFLAGS += -DCONFIG_NAND_SPL
+asflags-y += -DCONFIG_NAND_SPL
+ccflags-y += -DCONFIG_NAND_SPL
 
 SOBJS  = start.o resetvec.o
 COBJS  = cache.o cpu_init_early.o spl_minimal.o fsl_law.o law.o \
          nand_boot.o nand_boot_fsl_elbc.o ns16550.o tlb.o tlb_table.o
 
-SRCS   := $(addprefix $(obj),$(SOBJS:.o=.S) $(COBJS:.o=.c))
-OBJS   := $(addprefix $(obj),$(SOBJS) $(COBJS))
+OBJS   := $(addprefix $(obj)/,$(SOBJS) $(COBJS))
 __OBJS := $(SOBJS) $(COBJS)
 LNDIR  := $(nandobj)board/$(BOARDDIR)
 
+targets += $(__OBJS)
+
 all: $(nandobj)u-boot-spl.bin $(nandobj)u-boot-spl-16k.bin
 
 $(nandobj)u-boot-spl-16k.bin: $(nandobj)u-boot-spl
@@ -38,76 +37,55 @@ $(nandobj)u-boot-spl:       $(OBJS) $(nandobj)u-boot-nand_spl.lds
                -Map $(nandobj)u-boot-spl.map -o $@
 
 $(nandobj)u-boot-nand_spl.lds: $(LDSCRIPT)
-       $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(nandobj)/board/$(BOARDDIR) \
+       $(CPP) $(cpp_flags) $(LDPPFLAGS) -I$(nandobj)/board/$(BOARDDIR) \
                -ansi -D__ASSEMBLY__ -P - <$< >$@
 
 # create symbolic links for common files
 
-$(obj)cache.c:
+$(obj)/cache.c:
        @rm -f $@
        ln -sf $(SRCTREE)/arch/powerpc/lib/cache.c $@
 
-$(obj)cpu_init_early.c:
+$(obj)/cpu_init_early.c:
        @rm -f $@
        ln -sf $(SRCTREE)/$(CPUDIR)/cpu_init_early.c $@
 
-$(obj)spl_minimal.c:
+$(obj)/spl_minimal.c:
        @rm -f $@
        ln -sf $(SRCTREE)/$(CPUDIR)/spl_minimal.c $@
 
-$(obj)fsl_law.c:
+$(obj)/fsl_law.c:
        @rm -f $@
        ln -sf $(SRCTREE)/arch/powerpc/cpu/mpc8xxx/law.c $@
 
-$(obj)law.c:
+$(obj)/law.c:
        @rm -f $@
        ln -sf $(SRCTREE)/board/$(BOARDDIR)/law.c $@
 
-$(obj)nand_boot_fsl_elbc.c:
+$(obj)/nand_boot_fsl_elbc.c:
        @rm -f $@
        ln -sf $(SRCTREE)/nand_spl/nand_boot_fsl_elbc.c $@
 
-$(obj)ns16550.c:
+$(obj)/ns16550.c:
        @rm -f $@
        ln -sf $(SRCTREE)/drivers/serial/ns16550.c $@
 
-$(obj)resetvec.S:
+$(obj)/resetvec.S:
        @rm -f $@
        ln -s $(SRCTREE)/$(CPUDIR)/resetvec.S $@
 
-$(obj)fixed_ivor.S:
+$(obj)/fixed_ivor.S:
        @rm -f $@
        ln -sf $(SRCTREE)/$(CPUDIR)/fixed_ivor.S $@
 
-$(obj)start.S: $(obj)fixed_ivor.S
+$(obj)/start.S: $(obj)/fixed_ivor.S
        @rm -f $@
        ln -sf $(SRCTREE)/$(CPUDIR)/start.S $@
 
-$(obj)tlb.c:
+$(obj)/tlb.c:
        @rm -f $@
        ln -sf $(SRCTREE)/$(CPUDIR)/tlb.c $@
 
-$(obj)tlb_table.c:
+$(obj)/tlb_table.c:
        @rm -f $@
        ln -sf $(SRCTREE)/board/$(BOARDDIR)/tlb.c $@
-
-ifneq ($(OBJTREE), $(SRCTREE))
-$(obj)nand_boot.c:
-       @rm -f $@
-       ln -s $(SRCTREE)/nand_spl/board/$(BOARDDIR)/nand_boot.c $@
-endif
-
-#########################################################################
-
-$(obj)%.o:     $(obj)%.S
-       $(CC) $(AFLAGS) -c -o $@ $<
-
-$(obj)%.o:     $(obj)%.c
-       $(CC) $(CFLAGS) -c -o $@ $<
-
-# defines $(obj).depend target
-include $(SRCTREE)/rules.mk
-
-sinclude $(obj).depend
-
-#########################################################################
index 62330815cc731ba2fcb37c56ad2e58673e399239..f0beaedf1a523b4bd93c180df586dc598ff6d05a 100644 (file)
@@ -7,29 +7,27 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-NAND_SPL := y
 CONFIG_SYS_TEXT_BASE_SPL := 0xfff00000
 PAD_TO := 0xfff01000
 
-include $(TOPDIR)/config.mk
-
 nandobj        := $(OBJTREE)/nand_spl/
 
 LDSCRIPT= $(TOPDIR)/$(CPUDIR)/u-boot-nand_spl.lds
 LDFLAGS := -T $(nandobj)u-boot-nand_spl.lds -Ttext $(CONFIG_SYS_TEXT_BASE_SPL) \
                $(LDFLAGS) $(LDFLAGS_FINAL)
-AFLAGS += -DCONFIG_NAND_SPL
-CFLAGS += -DCONFIG_NAND_SPL
+asflags-y += -DCONFIG_NAND_SPL
+ccflags-y += -DCONFIG_NAND_SPL
 
 SOBJS  = start.o resetvec.o
 COBJS  = cache.o cpu_init_early.o spl_minimal.o fsl_law.o law.o \
          nand_boot.o nand_boot_fsl_elbc.o ns16550.o tlb.o tlb_table.o
 
-SRCS   := $(addprefix $(obj),$(SOBJS:.o=.S) $(COBJS:.o=.c))
-OBJS   := $(addprefix $(obj),$(SOBJS) $(COBJS))
+OBJS   := $(addprefix $(obj)/,$(SOBJS) $(COBJS))
 __OBJS := $(SOBJS) $(COBJS)
 LNDIR  := $(nandobj)board/$(BOARDDIR)
 
+targets += $(__OBJS)
+
 all: $(nandobj)u-boot-spl.bin $(nandobj)u-boot-spl-16k.bin
 
 $(nandobj)u-boot-spl-16k.bin: $(nandobj)u-boot-spl
@@ -43,76 +41,55 @@ $(nandobj)u-boot-spl:       $(OBJS) $(nandobj)u-boot-nand_spl.lds
                -Map $(nandobj)u-boot-spl.map -o $@
 
 $(nandobj)u-boot-nand_spl.lds: $(LDSCRIPT)
-       $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(nandobj)/board/$(BOARDDIR) \
+       $(CPP) $(cpp_flags) $(LDPPFLAGS) -I$(nandobj)/board/$(BOARDDIR) \
                -ansi -D__ASSEMBLY__ -P - <$< >$@
 
 # create symbolic links for common files
 
-$(obj)cache.c:
+$(obj)/cache.c:
        @rm -f $@
        ln -sf $(SRCTREE)/arch/powerpc/lib/cache.c $@
 
-$(obj)cpu_init_early.c:
+$(obj)/cpu_init_early.c:
        @rm -f $@
        ln -sf $(SRCTREE)/arch/powerpc/cpu/mpc85xx/cpu_init_early.c $@
 
-$(obj)spl_minimal.c:
+$(obj)/spl_minimal.c:
        @rm -f $@
        ln -sf $(SRCTREE)/arch/powerpc/cpu/mpc85xx/spl_minimal.c $@
 
-$(obj)fsl_law.c:
+$(obj)/fsl_law.c:
        @rm -f $@
        ln -sf $(SRCTREE)/arch/powerpc/cpu/mpc8xxx/law.c $@
 
-$(obj)law.c:
+$(obj)/law.c:
        @rm -f $@
        ln -sf $(SRCTREE)/board/$(BOARDDIR)/law.c $@
 
-$(obj)nand_boot_fsl_elbc.c:
+$(obj)/nand_boot_fsl_elbc.c:
        @rm -f $@
        ln -sf $(SRCTREE)/nand_spl/nand_boot_fsl_elbc.c $@
 
-$(obj)ns16550.c:
+$(obj)/ns16550.c:
        @rm -f $@
        ln -sf $(SRCTREE)/drivers/serial/ns16550.c $@
 
-$(obj)resetvec.S:
+$(obj)/resetvec.S:
        @rm -f $@
        ln -s $(SRCTREE)/$(CPUDIR)/resetvec.S $@
 
-$(obj)fixed_ivor.S:
+$(obj)/fixed_ivor.S:
        @rm -f $@
        ln -sf $(SRCTREE)/arch/powerpc/cpu/mpc85xx/fixed_ivor.S $@
 
-$(obj)start.S: $(obj)fixed_ivor.S
+$(obj)/start.S: $(obj)/fixed_ivor.S
        @rm -f $@
        ln -sf $(SRCTREE)/arch/powerpc/cpu/mpc85xx/start.S $@
 
-$(obj)tlb.c:
+$(obj)/tlb.c:
        @rm -f $@
        ln -sf $(SRCTREE)/arch/powerpc/cpu/mpc85xx/tlb.c $@
 
-$(obj)tlb_table.c:
+$(obj)/tlb_table.c:
        @rm -f $@
        ln -sf $(SRCTREE)/board/$(BOARDDIR)/tlb.c $@
-
-ifneq ($(OBJTREE), $(SRCTREE))
-$(obj)nand_boot.c:
-       @rm -f $@
-       ln -s $(SRCTREE)/nand_spl/board/$(BOARDDIR)/nand_boot.c $@
-endif
-
-#########################################################################
-
-$(obj)%.o:     $(obj)%.S
-       $(CC) $(AFLAGS) -c -o $@ $<
-
-$(obj)%.o:     $(obj)%.c
-       $(CC) $(CFLAGS) -c -o $@ $<
-
-# defines $(obj).depend target
-include $(SRCTREE)/rules.mk
-
-sinclude $(obj).depend
-
-#########################################################################
index 90f132c34c0bab4f2d3b3223e9f14191528f6592..35b1f974db2f92b07910b6321039d2344c795b9a 100644 (file)
@@ -7,27 +7,24 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-NAND_SPL := y
-
-include $(TOPDIR)/config.mk
-
 nandobj        := $(OBJTREE)/nand_spl/
 
 LDSCRIPT= $(TOPDIR)/nand_spl/board/$(BOARDDIR)/u-boot.lds
 LDFLAGS := -T $(nandobj)u-boot.lds -Ttext $(CONFIG_SYS_TEXT_BASE_SPL) \
           $(LDFLAGS) $(LDFLAGS_FINAL)
-AFLAGS += -DCONFIG_NAND_SPL
-CFLAGS += -DCONFIG_NAND_SPL
+asflags-y += -DCONFIG_NAND_SPL
+ccflags-y += -DCONFIG_NAND_SPL
 
 SOBJS  = start.o ticks.o
 COBJS  = nand_boot_fsl_elbc.o $(BOARD).o sdram.o ns16550.o spl_minimal.o \
          time.o cache.o
 
-SRCS   := $(addprefix $(obj),$(SOBJS:.o=.S) $(COBJS:.o=.c))
-OBJS   := $(addprefix $(obj),$(SOBJS) $(COBJS))
+OBJS   := $(addprefix $(obj)/,$(SOBJS) $(COBJS))
 __OBJS := $(SOBJS) $(COBJS)
 LNDIR  := $(nandobj)board/$(BOARDDIR)
 
+targets += $(__OBJS)
+
 all: $(nandobj)u-boot-spl.bin $(nandobj)u-boot-spl-16k.bin
 
 $(nandobj)u-boot-spl-16k.bin:  $(nandobj)u-boot-spl
@@ -41,57 +38,42 @@ $(nandobj)u-boot-spl:       $(OBJS) $(nandobj)u-boot.lds
                -Map $(nandobj)u-boot-spl.map -o $@
 
 $(nandobj)u-boot.lds: $(LDSCRIPT)
-       $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$^ >$@
+       $(CPP) $(cpp_flags) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$^ >$@
 
 # create symbolic links for common files
 
-$(obj)start.S:
+$(obj)/start.S:
        @rm -f $@
        ln -s $(SRCTREE)/arch/powerpc/cpu/mpc83xx/start.S $@
 
-$(obj)nand_boot_fsl_elbc.c:
+$(obj)/nand_boot_fsl_elbc.c:
        @rm -f $@
        ln -s $(SRCTREE)/nand_spl/nand_boot_fsl_elbc.c $@
 
-$(obj)sdram.c:
+$(obj)/sdram.c:
        @rm -f $@
        ln -s $(SRCTREE)/board/$(BOARDDIR)/sdram.c $@
 
-$(obj)$(BOARD).c:
+$(obj)/$(BOARD).c:
        @rm -f $@
        ln -s $(SRCTREE)/board/$(BOARDDIR)/$(BOARD).c $@
 
-$(obj)ns16550.c:
+$(obj)/ns16550.c:
        @rm -f $@
        ln -s $(SRCTREE)/drivers/serial/ns16550.c $@
 
-$(obj)spl_minimal.c:
+$(obj)/spl_minimal.c:
        @rm -f $@
        ln -s $(SRCTREE)/arch/powerpc/cpu/mpc83xx/spl_minimal.c $@
 
-$(obj)cache.c:
+$(obj)/cache.c:
        @rm -f $@
        ln -s $(SRCTREE)/arch/powerpc/lib/cache.c $@
 
-$(obj)time.c:
+$(obj)/time.c:
        @rm -f $@
        ln -s $(SRCTREE)/arch/powerpc/lib/time.c $@
 
-$(obj)ticks.S:
+$(obj)/ticks.S:
        @rm -f $@
        ln -s $(SRCTREE)/arch/powerpc/lib/ticks.S $@
-
-#########################################################################
-
-$(obj)%.o:     $(obj)%.S
-       $(CC) $(AFLAGS) -c -o $@ $<
-
-$(obj)%.o:     $(obj)%.c
-       $(CC) $(CFLAGS) -c -o $@ $<
-
-# defines $(obj).depend target
-include $(SRCTREE)/rules.mk
-
-sinclude $(obj).depend
-
-#########################################################################
index 31aadc2ffc11d5882047a789e3f88e66a7aac698..942595021dad1cf3fccb27531bde72e20e0acd88 100644 (file)
@@ -5,7 +5,7 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-# CFLAGS += -DDEBUG
+#ccflags-y += -DDEBUG
 
 obj-$(CONFIG_CMD_NET)  += arp.o
 obj-$(CONFIG_CMD_NET)  += bootp.o
index ae56a82af350da370534f468e4723437e691a9af..556a833f6df67af6be90308af7038a261ad62331 100644 (file)
@@ -5,20 +5,19 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-obj-y  += 20001122-1.o
-obj-y  += 20010114-2.o
-obj-y  += 20010226-1.o
-obj-y  += 980619-1.o
-obj-y  += acc1.o
-obj-y  += compare-fp-1.o
-obj-y  += fpu.o
-obj-y  += mul-subnormal-single-1.o
-obj-y  += darwin-ldouble.o
+objs-before-objcopy := 20001122-1.o 20010114-2.o 20010226-1.o 980619-1.o \
+       acc1.o compare-fp-1.o fpu.o mul-subnormal-single-1.o darwin-ldouble.o
+targets += $(objs-before-objcopy)
 
-CFLAGS := $(shell echo $(CFLAGS) | sed s/-msoft-float//)
-CFLAGS += -mhard-float -fkeep-inline-functions
+# remove -msoft-float flag
+$(foreach m, $(objs-before-objcopy), $(eval CFLAGS_REMOVE_$m := -msoft-float))
+ccflags-y := -mhard-float -fkeep-inline-functions
 
-$(obj)%.o:     %.c
-       $(CC)  $(ALL_CFLAGS) -o $@.fp $< -c
-       $(OBJCOPY) -R .gnu.attributes $@.fp $@
-       rm -f $@.fp
+# Do not delete intermidiate files (*.o)
+.SECONDARY: $(call objectify, $(objs-before-objcopy))
+
+obj-y := $(objs-before-objcopy:.o=_.o)
+
+OBJCOPYFLAGS := -R .gnu.attributes
+$(obj)/%_.o: $(obj)/%.o
+       $(call if_changed,objcopy)
diff --git a/rules.mk b/rules.mk
deleted file mode 100644 (file)
index f4510b7..0000000
--- a/rules.mk
+++ /dev/null
@@ -1,51 +0,0 @@
-#
-# (C) Copyright 2006-2013
-# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
-#
-# SPDX-License-Identifier:     GPL-2.0+
-#
-#########################################################################
-
-_depend:       $(obj).depend
-
-# Split the source files into two camps: those in the current directory, and
-# those somewhere else. For the first camp we want to support CPPFLAGS_<fname>
-# and for the second we don't / can't.
-PWD_SRCS := $(filter $(notdir $(SRCS)),$(SRCS))
-OTHER_SRCS := $(filter-out $(notdir $(SRCS)),$(SRCS))
-
-# This is a list of dependency files to generate
-DEPS := $(basename $(patsubst %,$(obj).depend.%,$(PWD_SRCS)))
-
-# Join all the dependencies into a single file, in three parts
-#      1 .Concatenate all the generated depend files together
-#      2. Add in the deps from OTHER_SRCS which we couldn't process
-#      3. Add in the HOSTSRCS
-$(obj).depend: $(src)Makefile $(TOPDIR)/config.mk $(DEPS) $(OTHER_SRCS) \
-               $(HOSTSRCS)
-       cat /dev/null $(DEPS) >$@
-       @for f in $(OTHER_SRCS); do \
-               g=`basename $$f | sed -e 's/\(.*\)\.[[:alnum:]_]/\1.o/'`; \
-               $(CC) -M $(CPPFLAGS) -MQ $(obj)$$g $$f >> $@ ; \
-       done
-       @for f in $(HOSTSRCS); do \
-               g=`basename $$f | sed -e 's/\(.*\)\.[[:alnum:]_]/\1.o/'`; \
-               $(HOSTCC) -M $(HOSTCPPFLAGS) -MQ $(obj)$$g $$f >> $@ ; \
-       done
-
-MAKE_DEPEND = $(CC) -M $(CPPFLAGS) $(EXTRA_CPPFLAGS_DEP) \
-               -MQ $(addsuffix .o,$(obj)$(basename $<)) $< >$@
-
-
-$(obj).depend.%:       %.c
-       $(MAKE_DEPEND)
-
-$(obj).depend.%:       %.S
-       $(MAKE_DEPEND)
-
-$(HOSTOBJS): $(obj)%.o: %.c
-       $(HOSTCC) $(HOSTCFLAGS) $(HOSTCFLAGS_$(@F)) $(HOSTCFLAGS_$(BCURDIR)) -o $@ $< -c
-$(NOPEDOBJS): $(obj)%.o: %.c
-       $(HOSTCC) $(HOSTCFLAGS_NOPED) $(HOSTCFLAGS_$(@F)) $(HOSTCFLAGS_$(BCURDIR)) -o $@ $< -c
-
-#########################################################################
diff --git a/scripts/.gitignore b/scripts/.gitignore
new file mode 100644 (file)
index 0000000..82bc06e
--- /dev/null
@@ -0,0 +1,4 @@
+#
+# Generated files
+#
+docproc
diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include
new file mode 100644 (file)
index 0000000..6504571
--- /dev/null
@@ -0,0 +1,284 @@
+####
+# kbuild: Generic definitions
+
+# Convenient variables
+comma   := ,
+squote  := '
+empty   :=
+space   := $(empty) $(empty)
+
+###
+# Name of target with a '.' as filename prefix. foo/bar.o => foo/.bar.o
+dot-target = $(dir $@).$(notdir $@)
+
+###
+# The temporary file to save gcc -MD generated dependencies must not
+# contain a comma
+depfile = $(subst $(comma),_,$(dot-target).d)
+
+###
+# filename of target with directory and extension stripped
+basetarget = $(basename $(notdir $@))
+
+###
+# filename of first prerequisite with directory and extension stripped
+baseprereq = $(basename $(notdir $<))
+
+###
+# Escape single quote for use in echo statements
+escsq = $(subst $(squote),'\$(squote)',$1)
+
+###
+# Easy method for doing a status message
+       kecho := :
+ quiet_kecho := echo
+silent_kecho := :
+kecho := $($(quiet)kecho)
+
+###
+# filechk is used to check if the content of a generated file is updated.
+# Sample usage:
+# define filechk_sample
+#      echo $KERNELRELEASE
+# endef
+# version.h : Makefile
+#      $(call filechk,sample)
+# The rule defined shall write to stdout the content of the new file.
+# The existing file will be compared with the new one.
+# - If no file exist it is created
+# - If the content differ the new file is used
+# - If they are equal no change, and no timestamp update
+# - stdin is piped in from the first prerequisite ($<) so one has
+#   to specify a valid file as first prerequisite (often the kbuild file)
+define filechk
+       $(Q)set -e;                             \
+       $(kecho) '  CHK     $@';                \
+       mkdir -p $(dir $@);                     \
+       $(filechk_$(1)) < $< > $@.tmp;          \
+       if [ -r $@ ] && cmp -s $@ $@.tmp; then  \
+               rm -f $@.tmp;                   \
+       else                                    \
+               $(kecho) '  UPD     $@';        \
+               mv -f $@.tmp $@;                \
+       fi
+endef
+
+######
+# gcc support functions
+# See documentation in Documentation/kbuild/makefiles.txt
+
+# cc-cross-prefix
+# Usage: CROSS_COMPILE := $(call cc-cross-prefix, m68k-linux-gnu- m68k-linux-)
+# Return first prefix where a prefix$(CC) is found in PATH.
+# If no $(CC) found in PATH with listed prefixes return nothing
+cc-cross-prefix =  \
+       $(word 1, $(foreach c,$(1),                                   \
+               $(shell set -e;                                       \
+               if (which $(strip $(c))$(CC)) > /dev/null 2>&1 ; then \
+                       echo $(c);                                    \
+               fi)))
+
+# output directory for tests below
+TMPOUT := $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/)
+
+# try-run
+# Usage: option = $(call try-run, $(CC)...-o "$$TMP",option-ok,otherwise)
+# Exit code chooses option. "$$TMP" is can be used as temporary file and
+# is automatically cleaned up.
+# modifed for U-Boot: prevent cc-option from leaving .*.su files
+try-run = $(shell set -e;              \
+       TMP="$(TMPOUT).$$$$.tmp";       \
+       TMPO="$(TMPOUT).$$$$.o";        \
+       TMPSU="$(TMPOUT).$$$$.su";      \
+       if ($(1)) >/dev/null 2>&1;      \
+       then echo "$(2)";               \
+       else echo "$(3)";               \
+       fi;                             \
+       rm -f "$$TMP" "$$TMPO" "$$TMPSU")
+
+# as-option
+# Usage: cflags-y += $(call as-option,-Wa$(comma)-isa=foo,)
+
+as-option = $(call try-run,\
+       $(CC) $(KBUILD_CFLAGS) $(1) -c -x assembler /dev/null -o "$$TMP",$(1),$(2))
+
+# as-instr
+# Usage: cflags-y += $(call as-instr,instr,option1,option2)
+
+as-instr = $(call try-run,\
+       printf "%b\n" "$(1)" | $(CC) $(KBUILD_AFLAGS) -c -x assembler -o "$$TMP" -,$(2),$(3))
+
+# cc-option
+# Usage: cflags-y += $(call cc-option,-march=winchip-c6,-march=i586)
+
+cc-option = $(call try-run,\
+       $(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) $(1) -c -x c /dev/null -o "$$TMP",$(1),$(2))
+
+# cc-option-yn
+# Usage: flag := $(call cc-option-yn,-march=winchip-c6)
+cc-option-yn = $(call try-run,\
+       $(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) $(1) -c -x c /dev/null -o "$$TMP",y,n)
+
+# cc-option-align
+# Prefix align with either -falign or -malign
+cc-option-align = $(subst -functions=0,,\
+       $(call cc-option,-falign-functions=0,-malign-functions=0))
+
+# cc-disable-warning
+# Usage: cflags-y += $(call cc-disable-warning,unused-but-set-variable)
+cc-disable-warning = $(call try-run,\
+       $(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) -W$(strip $(1)) -c -x c /dev/null -o "$$TMP",-Wno-$(strip $(1)))
+
+# cc-version
+# Usage gcc-ver := $(call cc-version)
+cc-version = $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-version.sh $(CC))
+
+# cc-fullversion
+# Usage gcc-ver := $(call cc-fullversion)
+cc-fullversion = $(shell $(CONFIG_SHELL) \
+       $(srctree)/scripts/gcc-version.sh -p $(CC))
+
+# cc-ifversion
+# Usage:  EXTRA_CFLAGS += $(call cc-ifversion, -lt, 0402, -O1)
+cc-ifversion = $(shell [ $(call cc-version, $(CC)) $(1) $(2) ] && echo $(3))
+
+# added for U-Boot
+binutils-version = $(shell $(CONFIG_SHELL) $(srctree)/scripts/binutils-version.sh $(AS))
+dtc-version = $(shell $(CONFIG_SHELL) $(srctree)/scripts/dtc-version.sh $(DTC))
+
+# cc-ldoption
+# Usage: ldflags += $(call cc-ldoption, -Wl$(comma)--hash-style=both)
+cc-ldoption = $(call try-run,\
+       $(CC) $(1) -nostdlib -x c /dev/null -o "$$TMP",$(1),$(2))
+
+# ld-option
+# Usage: LDFLAGS += $(call ld-option, -X)
+ld-option = $(call try-run,\
+       $(CC) -x c /dev/null -c -o "$$TMPO" ; $(LD) $(1) "$$TMPO" -o "$$TMP",$(1),$(2))
+
+# ar-option
+# Usage: KBUILD_ARFLAGS := $(call ar-option,D)
+# Important: no spaces around options
+ar-option = $(call try-run, $(AR) rc$(1) "$$TMP",$(1),$(2))
+
+######
+
+###
+# Shorthand for $(Q)$(MAKE) -f scripts/Makefile.build obj=
+# Usage:
+# $(Q)$(MAKE) $(build)=dir
+build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj
+
+###
+# Shorthand for $(Q)$(MAKE) -f scripts/Makefile.modbuiltin obj=
+# Usage:
+# $(Q)$(MAKE) $(modbuiltin)=dir
+modbuiltin := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.modbuiltin obj
+
+# Prefix -I with $(srctree) if it is not an absolute path.
+# skip if -I has no parameter
+addtree = $(if $(patsubst -I%,%,$(1)), \
+$(if $(filter-out -I/%,$(1)),$(patsubst -I%,-I$(srctree)/%,$(1))) $(1))
+
+# Find all -I options and call addtree
+flags = $(foreach o,$($(1)),$(if $(filter -I%,$(o)),$(call addtree,$(o)),$(o)))
+
+# echo command.
+# Short version is used, if $(quiet) equals `quiet_', otherwise full one.
+echo-cmd = $(if $($(quiet)cmd_$(1)),\
+       echo '  $(call escsq,$($(quiet)cmd_$(1)))$(echo-why)';)
+
+# printing commands
+cmd = @$(echo-cmd) $(cmd_$(1))
+
+# Add $(obj)/ for paths that are not absolute
+objectify = $(foreach o,$(1),$(if $(filter /%,$(o)),$(o),$(obj)/$(o)))
+
+###
+# if_changed      - execute command if any prerequisite is newer than
+#                   target, or command line has changed
+# if_changed_dep  - as if_changed, but uses fixdep to reveal dependencies
+#                   including used config symbols
+# if_changed_rule - as if_changed but execute rule instead
+# See Documentation/kbuild/makefiles.txt for more info
+
+ifneq ($(KBUILD_NOCMDDEP),1)
+# Check if both arguments has same arguments. Result is empty string if equal.
+# User may override this check using make KBUILD_NOCMDDEP=1
+arg-check = $(strip $(filter-out $(cmd_$(1)), $(cmd_$@)) \
+                    $(filter-out $(cmd_$@),   $(cmd_$(1))) )
+else
+arg-check = $(if $(strip $(cmd_$@)),,1)
+endif
+
+# >'< substitution is for echo to work,
+# >$< substitution to preserve $ when reloading .cmd file
+# note: when using inline perl scripts [perl -e '...$$t=1;...']
+# in $(cmd_xxx) double $$ your perl vars
+make-cmd = $(subst \\,\\\\,$(subst \#,\\\#,$(subst $$,$$$$,$(call escsq,$(cmd_$(1))))))
+
+# Find any prerequisites that is newer than target or that does not exist.
+# PHONY targets skipped in both cases.
+any-prereq = $(filter-out $(PHONY),$?) $(filter-out $(PHONY) $(wildcard $^),$^)
+
+# Execute command if command has changed or prerequisite(s) are updated.
+#
+if_changed = $(if $(strip $(any-prereq) $(arg-check)),                       \
+       @set -e;                                                             \
+       $(echo-cmd) $(cmd_$(1));                                             \
+       echo 'cmd_$@ := $(make-cmd)' > $(dot-target).cmd)
+
+# Execute the command and also postprocess generated .d dependencies file.
+if_changed_dep = $(if $(strip $(any-prereq) $(arg-check) ),                  \
+       @set -e;                                                             \
+       $(echo-cmd) $(cmd_$(1));                                             \
+       scripts/basic/fixdep $(depfile) $@ '$(make-cmd)' > $(dot-target).tmp;\
+       rm -f $(depfile);                                                    \
+       mv -f $(dot-target).tmp $(dot-target).cmd)
+
+# Usage: $(call if_changed_rule,foo)
+# Will check if $(cmd_foo) or any of the prerequisites changed,
+# and if so will execute $(rule_foo).
+if_changed_rule = $(if $(strip $(any-prereq) $(arg-check) ),                 \
+       @set -e;                                                             \
+       $(rule_$(1)))
+
+###
+# why - tell why a a target got build
+#       enabled by make V=2
+#       Output (listed in the order they are checked):
+#          (1) - due to target is PHONY
+#          (2) - due to target missing
+#          (3) - due to: file1.h file2.h
+#          (4) - due to command line change
+#          (5) - due to missing .cmd file
+#          (6) - due to target not in $(targets)
+# (1) PHONY targets are always build
+# (2) No target, so we better build it
+# (3) Prerequisite is newer than target
+# (4) The command line stored in the file named dir/.target.cmd
+#     differed from actual command line. This happens when compiler
+#     options changes
+# (5) No dir/.target.cmd file (used to store command line)
+# (6) No dir/.target.cmd file and target not listed in $(targets)
+#     This is a good hint that there is a bug in the kbuild file
+ifeq ($(KBUILD_VERBOSE),2)
+why =                                                                        \
+    $(if $(filter $@, $(PHONY)),- due to target is PHONY,                    \
+        $(if $(wildcard $@),                                                 \
+            $(if $(strip $(any-prereq)),- due to: $(any-prereq),             \
+                $(if $(arg-check),                                           \
+                    $(if $(cmd_$@),- due to command line change,             \
+                        $(if $(filter $@, $(targets)),                       \
+                            - due to missing .cmd file,                      \
+                            - due to $(notdir $@) not in $$(targets)         \
+                         )                                                   \
+                     )                                                       \
+                 )                                                           \
+             ),                                                              \
+             - due to target missing                                         \
+         )                                                                   \
+     )
+
+echo-why = $(call escsq, $(strip $(why)))
+endif
diff --git a/scripts/Makefile b/scripts/Makefile
new file mode 100644 (file)
index 0000000..242e3a0
--- /dev/null
@@ -0,0 +1,16 @@
+###
+# scripts contains sources for various helper programs used throughout
+# the kernel for the build process.
+# ---------------------------------------------------------------------------
+# docproc:       Used in Documentation/DocBook
+
+# The following hostprogs-y programs are only build on demand
+hostprogs-y += docproc
+
+# These targets are used internally to avoid "is up to date" messages
+PHONY += build_docproc
+build_docproc: scripts/docproc
+       @:
+
+# Let clean descend into subdirs
+subdir-        += basic
index e3354aaa3ff31f4d509342c7fa6fa046135379c7..59361f4d7ab4d0d53eb462af0705a5de828f0907 100644 (file)
-# our default target
-.PHONY: all
-all:
+# ==========================================================================
+# Building
+# ==========================================================================
 
-include $(TOPDIR)/config.mk
+# Modified for U-Boot
+ifeq ($(CONFIG_TPL_BUILD),y)
+  src := $(patsubst tpl/%,%,$(obj))
+else
+  ifeq ($(CONFIG_SPL_BUILD),y)
+    src := $(patsubst spl/%,%,$(obj))
+  else
+    src := $(obj)
+  endif
+endif
+
+PHONY := __build
+__build:
+
+# Init all relevant variables used in kbuild files so
+# 1) they have correct type
+# 2) they do not inherit any value from the environment
+obj-y :=
+obj-m :=
+lib-y :=
+lib-m :=
+always :=
+targets :=
+subdir-y :=
+subdir-m :=
+EXTRA_AFLAGS   :=
+EXTRA_CFLAGS   :=
+EXTRA_CPPFLAGS :=
+EXTRA_LDFLAGS  :=
+asflags-y  :=
+ccflags-y  :=
+cppflags-y :=
+ldflags-y  :=
+
+subdir-asflags-y :=
+subdir-ccflags-y :=
+
+# Read auto.conf if it exists, otherwise ignore
+-include include/config/auto.conf
+
+# Added for U-Boot: Load U-Boot configuration
+ifeq ($(CONFIG_TPL_BUILD),y)
+  -include include/tpl-autoconf.mk
+else
+  ifeq ($(CONFIG_SPL_BUILD),y)
+    -include include/spl-autoconf.mk
+  else
+    -include include/autoconf.mk
+  endif
+endif
+
+include scripts/Kbuild.include
+
+# Added for U-Boot
+# We must include config.mk after Kbuild.include
+# so that some config.mk can use cc-option.
+include config.mk
+
+# For backward compatibility check that these variables do not change
+save-cflags := $(CFLAGS)
+
+# The filename Kbuild has precedence over Makefile
+kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src))
+kbuild-file := $(if $(wildcard $(kbuild-dir)/Kbuild),$(kbuild-dir)/Kbuild,$(kbuild-dir)/Makefile)
+include $(kbuild-file)
+
+# If the save-* variables changed error out
+ifeq ($(KBUILD_NOPEDANTIC),)
+        ifneq ("$(save-cflags)","$(CFLAGS)")
+                $(error CFLAGS was changed in "$(kbuild-file)". Fix it to use ccflags-y)
+        endif
+endif
+
+#
+# make W=... settings
+#
+# W=1 - warnings that may be relevant and does not occur too often
+# W=2 - warnings that occur quite often but may still be relevant
+# W=3 - the more obscure warnings, can most likely be ignored
+#
+# $(call cc-option, -W...) handles gcc -W.. options which
+# are not supported by all versions of the compiler
+ifdef KBUILD_ENABLE_EXTRA_GCC_CHECKS
+warning-  := $(empty)
+
+warning-1 := -Wextra -Wunused -Wno-unused-parameter
+warning-1 += -Wmissing-declarations
+warning-1 += -Wmissing-format-attribute
+warning-1 += -Wmissing-prototypes
+warning-1 += -Wold-style-definition
+warning-1 += $(call cc-option, -Wmissing-include-dirs)
+warning-1 += $(call cc-option, -Wunused-but-set-variable)
+warning-1 += $(call cc-disable-warning, missing-field-initializers)
+
+warning-2 := -Waggregate-return
+warning-2 += -Wcast-align
+warning-2 += -Wdisabled-optimization
+warning-2 += -Wnested-externs
+warning-2 += -Wshadow
+warning-2 += $(call cc-option, -Wlogical-op)
+warning-2 += $(call cc-option, -Wmissing-field-initializers)
+
+warning-3 := -Wbad-function-cast
+warning-3 += -Wcast-qual
+warning-3 += -Wconversion
+warning-3 += -Wpacked
+warning-3 += -Wpadded
+warning-3 += -Wpointer-arith
+warning-3 += -Wredundant-decls
+warning-3 += -Wswitch-default
+warning-3 += $(call cc-option, -Wpacked-bitfield-compat)
+warning-3 += $(call cc-option, -Wvla)
+
+warning := $(warning-$(findstring 1, $(KBUILD_ENABLE_EXTRA_GCC_CHECKS)))
+warning += $(warning-$(findstring 2, $(KBUILD_ENABLE_EXTRA_GCC_CHECKS)))
+warning += $(warning-$(findstring 3, $(KBUILD_ENABLE_EXTRA_GCC_CHECKS)))
 
-LIB := $(obj)built-in.o
-LIBGCC = $(obj)libgcc.o
-SRCS :=
+ifeq ("$(strip $(warning))","")
+        $(error W=$(KBUILD_ENABLE_EXTRA_GCC_CHECKS) is unknown)
+endif
 
-include Makefile
+KBUILD_CFLAGS += $(warning)
+endif
 
-# Going forward use the following
-obj-y := $(sort $(obj-y))
-extra-y := $(sort $(extra-y))
-lib-y := $(sort $(lib-y))
+include scripts/Makefile.lib
 
-subdir-y       := $(patsubst %/,%,$(filter %/, $(obj-y)))
-obj-y          := $(patsubst %/, %/built-in.o, $(obj-y))
-subdir-obj-y   := $(filter %/built-in.o, $(obj-y))
-subdir-obj-y   := $(addprefix $(obj),$(subdir-obj-y))
+ifdef host-progs
+ifneq ($(hostprogs-y),$(host-progs))
+$(warning kbuild: $(obj)/Makefile - Usage of host-progs is deprecated. Please replace with hostprogs-y!)
+hostprogs-y += $(host-progs)
+endif
+endif
 
-SRCS   += $(wildcard $(obj-y:.o=.c) $(obj-y:.o=.S) $(lib-y:.o=.c) \
-       $(lib-y:.o=.S) $(extra-y:.o=.c) $(extra-y:.o=.S))
-OBJS   := $(addprefix $(obj),$(obj-y))
+# Do not include host rules unless needed
+ifneq ($(hostprogs-y)$(hostprogs-m),)
+include scripts/Makefile.host
+endif
 
-# $(obj-dirs) is a list of directories that contain object files
-obj-dirs := $(dir $(OBJS))
+# Uncommented for U-Boot
+#  We need to create output dicrectory for SPL and TPL even for in-tree build
+#ifneq ($(KBUILD_SRC),)
+# Create output directory if not already present
+_dummy := $(shell [ -d $(obj) ] || mkdir -p $(obj))
 
 # Create directories for object files if directory does not exist
 # Needed when obj-y := dir/file.o syntax is used
 _dummy := $(foreach d,$(obj-dirs), $(shell [ -d $(d) ] || mkdir -p $(d)))
+#endif
+
+ifndef obj
+$(warning kbuild: Makefile.build is included improperly)
+endif
+
+# ===========================================================================
+
+ifneq ($(strip $(lib-y) $(lib-m) $(lib-n) $(lib-)),)
+lib-target := $(obj)/lib.a
+endif
 
-LGOBJS := $(addprefix $(obj),$(sort $(lib-y)))
+ifneq ($(strip $(obj-y) $(obj-m) $(obj-n) $(obj-) $(subdir-m) $(lib-target)),)
+builtin-target := $(obj)/built-in.o
+endif
 
-all: $(LIB) $(addprefix $(obj),$(extra-y))
+modorder-target := $(obj)/modules.order
 
-$(LIB):        $(obj).depend $(OBJS)
-       $(call cmd_link_o_target, $(OBJS))
+# We keep a list of all modules in $(MODVERDIR)
 
-ifneq ($(strip $(lib-y)),)
-all: $(LIBGCC)
+__build: $(if $(KBUILD_BUILTIN),$(builtin-target) $(lib-target) $(extra-y)) \
+        $(if $(KBUILD_MODULES),$(obj-m) $(modorder-target)) \
+        $(subdir-ym) $(always)
+       @:
 
-$(LIBGCC): $(obj).depend $(LGOBJS)
-       $(call cmd_link_o_target, $(LGOBJS))
+# Linus' kernel sanity checking tool
+ifneq ($(KBUILD_CHECKSRC),0)
+  ifeq ($(KBUILD_CHECKSRC),2)
+    quiet_cmd_force_checksrc = CHECK   $<
+          cmd_force_checksrc = $(CHECK) $(CHECKFLAGS) $(c_flags) $< ;
+  else
+      quiet_cmd_checksrc     = CHECK   $<
+            cmd_checksrc     = $(CHECK) $(CHECKFLAGS) $(c_flags) $< ;
+  endif
 endif
 
-ifneq ($(subdir-obj-y),)
-# Descending
-$(subdir-obj-y): $(subdir-y)
+# Do section mismatch analysis for each module/built-in.o
+ifdef CONFIG_DEBUG_SECTION_MISMATCH
+  cmd_secanalysis = ; scripts/mod/modpost $@
+endif
+
+# Compile C sources (.c)
+# ---------------------------------------------------------------------------
+
+# Default is built-in, unless we know otherwise
+modkern_cflags =                                          \
+       $(if $(part-of-module),                           \
+               $(KBUILD_CFLAGS_MODULE) $(CFLAGS_MODULE), \
+               $(KBUILD_CFLAGS_KERNEL) $(CFLAGS_KERNEL))
+quiet_modtag := $(empty)   $(empty)
+
+$(real-objs-m)        : part-of-module := y
+$(real-objs-m:.o=.i)  : part-of-module := y
+$(real-objs-m:.o=.s)  : part-of-module := y
+$(real-objs-m:.o=.lst): part-of-module := y
+
+$(real-objs-m)        : quiet_modtag := [M]
+$(real-objs-m:.o=.i)  : quiet_modtag := [M]
+$(real-objs-m:.o=.s)  : quiet_modtag := [M]
+$(real-objs-m:.o=.lst): quiet_modtag := [M]
+
+$(obj-m)              : quiet_modtag := [M]
+
+# Default for not multi-part modules
+modname = $(basetarget)
+
+$(multi-objs-m)         : modname = $(modname-multi)
+$(multi-objs-m:.o=.i)   : modname = $(modname-multi)
+$(multi-objs-m:.o=.s)   : modname = $(modname-multi)
+$(multi-objs-m:.o=.lst) : modname = $(modname-multi)
+$(multi-objs-y)         : modname = $(modname-multi)
+$(multi-objs-y:.o=.i)   : modname = $(modname-multi)
+$(multi-objs-y:.o=.s)   : modname = $(modname-multi)
+$(multi-objs-y:.o=.lst) : modname = $(modname-multi)
+
+quiet_cmd_cc_s_c = CC $(quiet_modtag)  $@
+cmd_cc_s_c       = $(CC) $(c_flags) -fverbose-asm -S -o $@ $<
+
+$(obj)/%.s: $(src)/%.c FORCE
+       $(call if_changed_dep,cc_s_c)
+
+quiet_cmd_cc_i_c = CPP $(quiet_modtag) $@
+cmd_cc_i_c       = $(CPP) $(c_flags)   -o $@ $<
+
+$(obj)/%.i: $(src)/%.c FORCE
+       $(call if_changed_dep,cc_i_c)
+
+cmd_gensymtypes =                                                           \
+    $(CPP) -D__GENKSYMS__ $(c_flags) $< |                                   \
+    $(GENKSYMS) $(if $(1), -T $(2))                                         \
+     $(patsubst y,-s _,$(CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX))             \
+     $(if $(KBUILD_PRESERVE),-p)                                            \
+     -r $(firstword $(wildcard $(2:.symtypes=.symref) /dev/null))
+
+quiet_cmd_cc_symtypes_c = SYM $(quiet_modtag) $@
+cmd_cc_symtypes_c =                                                         \
+    set -e;                                                                 \
+    $(call cmd_gensymtypes,true,$@) >/dev/null;                             \
+    test -s $@ || rm -f $@
+
+$(obj)/%.symtypes : $(src)/%.c FORCE
+       $(call cmd,cc_symtypes_c)
+
+# C (.c) files
+# The C file is compiled and updated dependency information is generated.
+# (See cmd_cc_o_c + relevant part of rule_cc_o_c)
+
+quiet_cmd_cc_o_c = CC $(quiet_modtag)  $@
+
+ifndef CONFIG_MODVERSIONS
+cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $<
 
-$(subdir-y): FORCE
-       $(MAKE) -C $@ -f $(TOPDIR)/scripts/Makefile.build
+else
+# When module versioning is enabled the following steps are executed:
+# o compile a .tmp_<file>.o from <file>.c
+# o if .tmp_<file>.o doesn't contain a __ksymtab version, i.e. does
+#   not export symbols, we just rename .tmp_<file>.o to <file>.o and
+#   are done.
+# o otherwise, we calculate symbol versions using the good old
+#   genksyms on the preprocessed source and postprocess them in a way
+#   that they are usable as a linker script
+# o generate <file>.o from .tmp_<file>.o using the linker to
+#   replace the unresolved symbols __crc_exported_symbol with
+#   the actual value of the checksum generated by genksyms
+
+cmd_cc_o_c = $(CC) $(c_flags) -c -o $(@D)/.tmp_$(@F) $<
+cmd_modversions =                                                              \
+       if $(OBJDUMP) -h $(@D)/.tmp_$(@F) | grep -q __ksymtab; then             \
+               $(call cmd_gensymtypes,$(KBUILD_SYMTYPES),$(@:.o=.symtypes))    \
+                   > $(@D)/.tmp_$(@F:.o=.ver);                                 \
+                                                                               \
+               $(LD) $(LDFLAGS) -r -o $@ $(@D)/.tmp_$(@F)                      \
+                       -T $(@D)/.tmp_$(@F:.o=.ver);                            \
+               rm -f $(@D)/.tmp_$(@F) $(@D)/.tmp_$(@F:.o=.ver);                \
+       else                                                                    \
+               mv -f $(@D)/.tmp_$(@F) $@;                                      \
+       fi;
+endif
+
+ifdef CONFIG_FTRACE_MCOUNT_RECORD
+ifdef BUILD_C_RECORDMCOUNT
+ifeq ("$(origin RECORDMCOUNT_WARN)", "command line")
+  RECORDMCOUNT_FLAGS = -w
 endif
+# Due to recursion, we must skip empty.o.
+# The empty.o file is created in the make process in order to determine
+#  the target endianness and word size. It is made before all other C
+#  files, including recordmcount.
+sub_cmd_record_mcount =                                        \
+       if [ $(@) != "scripts/mod/empty.o" ]; then      \
+               $(objtree)/scripts/recordmcount $(RECORDMCOUNT_FLAGS) "$(@)";   \
+       fi;
+recordmcount_source := $(srctree)/scripts/recordmcount.c \
+                   $(srctree)/scripts/recordmcount.h
+else
+sub_cmd_record_mcount = set -e ; perl $(srctree)/scripts/recordmcount.pl "$(ARCH)" \
+       "$(if $(CONFIG_CPU_BIG_ENDIAN),big,little)" \
+       "$(if $(CONFIG_64BIT),64,32)" \
+       "$(OBJDUMP)" "$(OBJCOPY)" "$(CC) $(KBUILD_CFLAGS)" \
+       "$(LD)" "$(NM)" "$(RM)" "$(MV)" \
+       "$(if $(part-of-module),1,0)" "$(@)";
+recordmcount_source := $(srctree)/scripts/recordmcount.pl
+endif
+cmd_record_mcount =                                            \
+       if [ "$(findstring -pg,$(_c_flags))" = "-pg" ]; then    \
+               $(sub_cmd_record_mcount)                        \
+       fi;
+endif
+
+define rule_cc_o_c
+       $(call echo-cmd,checksrc) $(cmd_checksrc)                         \
+       $(call echo-cmd,cc_o_c) $(cmd_cc_o_c);                            \
+       $(cmd_modversions)                                                \
+       $(call echo-cmd,record_mcount)                                    \
+       $(cmd_record_mcount)                                              \
+       scripts/basic/fixdep $(depfile) $@ '$(call make-cmd,cc_o_c)' >    \
+                                                     $(dot-target).tmp;  \
+       rm -f $(depfile);                                                 \
+       mv -f $(dot-target).tmp $(dot-target).cmd
+endef
+
+# Built-in and composite module parts
+$(obj)/%.o: $(src)/%.c $(recordmcount_source) FORCE
+       $(call cmd,force_checksrc)
+       $(call if_changed_rule,cc_o_c)
+
+# Single-part modules are special since we need to mark them in $(MODVERDIR)
+
+$(single-used-m): $(obj)/%.o: $(src)/%.c $(recordmcount_source) FORCE
+       $(call cmd,force_checksrc)
+       $(call if_changed_rule,cc_o_c)
+       @{ echo $(@:.o=.ko); echo $@; } > $(MODVERDIR)/$(@F:.o=.mod)
+
+quiet_cmd_cc_lst_c = MKLST   $@
+      cmd_cc_lst_c = $(CC) $(c_flags) -g -c -o $*.o $< && \
+                    $(CONFIG_SHELL) $(srctree)/scripts/makelst $*.o \
+                                    System.map $(OBJDUMP) > $@
+
+$(obj)/%.lst: $(src)/%.c FORCE
+       $(call if_changed_dep,cc_lst_c)
+
+# Compile assembler sources (.S)
+# ---------------------------------------------------------------------------
+
+modkern_aflags := $(KBUILD_AFLAGS_KERNEL) $(AFLAGS_KERNEL)
+
+$(real-objs-m)      : modkern_aflags := $(KBUILD_AFLAGS_MODULE) $(AFLAGS_MODULE)
+$(real-objs-m:.o=.s): modkern_aflags := $(KBUILD_AFLAGS_MODULE) $(AFLAGS_MODULE)
+
+quiet_cmd_as_s_S = CPP $(quiet_modtag) $@
+cmd_as_s_S       = $(CPP) $(a_flags)   -o $@ $< 
+
+$(obj)/%.s: $(src)/%.S FORCE
+       $(call if_changed_dep,as_s_S)
+
+quiet_cmd_as_o_S = AS $(quiet_modtag)  $@
+cmd_as_o_S       = $(CC) $(a_flags) -c -o $@ $<
+
+$(obj)/%.o: $(src)/%.S FORCE
+       $(call if_changed_dep,as_o_S)
+
+targets += $(real-objs-y) $(real-objs-m) $(lib-y)
+targets += $(extra-y) $(MAKECMDGOALS) $(always)
+
+# Linker scripts preprocessor (.lds.S -> .lds)
+# ---------------------------------------------------------------------------
+quiet_cmd_cpp_lds_S = LDS     $@
+      cmd_cpp_lds_S = $(CPP) $(cpp_flags) -P -C -U$(ARCH) \
+                            -D__ASSEMBLY__ -DLINKER_SCRIPT -o $@ $<
+
+$(obj)/%.lds: $(src)/%.lds.S FORCE
+       $(call if_changed_dep,cpp_lds_S)
+
+# ASN.1 grammar
+# ---------------------------------------------------------------------------
+quiet_cmd_asn1_compiler = ASN.1   $@
+      cmd_asn1_compiler = $(objtree)/scripts/asn1_compiler $< \
+                               $(subst .h,.c,$@) $(subst .c,.h,$@)
+
+.PRECIOUS: $(objtree)/$(obj)/%-asn1.c $(objtree)/$(obj)/%-asn1.h
+
+$(obj)/%-asn1.c $(obj)/%-asn1.h: $(src)/%.asn1 $(objtree)/scripts/asn1_compiler
+       $(call cmd,asn1_compiler)
 
-#########################################################################
+# Build the compiled-in targets
+# ---------------------------------------------------------------------------
 
-# defines $(obj).depend target
+# To build objects in subdirs, we need to descend into the directories
+$(sort $(subdir-obj-y)): $(subdir-ym) ;
 
-include $(TOPDIR)/rules.mk
+#
+# Rule to compile a set of .o files into one .o file
+#
+ifdef builtin-target
+quiet_cmd_link_o_target = LD      $@
+# If the list of objects to link is empty, just create an empty built-in.o
+cmd_link_o_target = $(if $(strip $(obj-y)),\
+                     $(LD) $(ld_flags) -r -o $@ $(filter $(obj-y), $^) \
+                     $(cmd_secanalysis),\
+                     rm -f $@; $(AR) rcs$(KBUILD_ARFLAGS) $@)
 
-sinclude $(obj).depend
+$(builtin-target): $(obj-y) FORCE
+       $(call if_changed,link_o_target)
+
+targets += $(builtin-target)
+endif # builtin-target
+
+#
+# Rule to create modules.order file
+#
+# Create commands to either record .ko file or cat modules.order from
+# a subdirectory
+modorder-cmds =                                                \
+       $(foreach m, $(modorder),                       \
+               $(if $(filter %/modules.order, $m),     \
+                       cat $m;, echo kernel/$m;))
+
+$(modorder-target): $(subdir-ym) FORCE
+       $(Q)(cat /dev/null; $(modorder-cmds)) > $@
+
+#
+# Rule to compile a set of .o files into one .a file
+#
+ifdef lib-target
+quiet_cmd_link_l_target = AR      $@
+cmd_link_l_target = rm -f $@; $(AR) rcs$(KBUILD_ARFLAGS) $@ $(lib-y)
+
+$(lib-target): $(lib-y) FORCE
+       $(call if_changed,link_l_target)
+
+targets += $(lib-target)
+endif
+
+#
+# Rule to link composite objects
+#
+#  Composite objects are specified in kbuild makefile as follows:
+#    <composite-object>-objs := <list of .o files>
+#  or
+#    <composite-object>-y    := <list of .o files>
+link_multi_deps =                     \
+$(filter $(addprefix $(obj)/,         \
+$($(subst $(obj)/,,$(@:.o=-objs)))    \
+$($(subst $(obj)/,,$(@:.o=-y)))), $^)
+quiet_cmd_link_multi-y = LD      $@
+cmd_link_multi-y = $(LD) $(ld_flags) -r -o $@ $(link_multi_deps) $(cmd_secanalysis)
+
+quiet_cmd_link_multi-m = LD [M]  $@
+cmd_link_multi-m = $(cmd_link_multi-y)
+
+# We would rather have a list of rules like
+#      foo.o: $(foo-objs)
+# but that's not so easy, so we rather make all composite objects depend
+# on the set of all their parts
+$(multi-used-y) : %.o: $(multi-objs-y) FORCE
+       $(call if_changed,link_multi-y)
+
+$(multi-used-m) : %.o: $(multi-objs-m) FORCE
+       $(call if_changed,link_multi-m)
+       @{ echo $(@:.o=.ko); echo $(link_multi_deps); } > $(MODVERDIR)/$(@F:.o=.mod)
+
+targets += $(multi-used-y) $(multi-used-m)
+
+
+# Descending
+# ---------------------------------------------------------------------------
+
+PHONY += $(subdir-ym)
+$(subdir-ym):
+       $(Q)$(MAKE) $(build)=$@
+
+# Add FORCE to the prequisites of a target to force it to be always rebuilt.
+# ---------------------------------------------------------------------------
+
+PHONY += FORCE
+
+FORCE:
+
+# Read all saved command lines and dependencies for the $(targets) we
+# may be building above, using $(if_changed{,_dep}). As an
+# optimization, we don't need to read them if the target does not
+# exist, we will rebuild anyway in that case.
+
+targets := $(wildcard $(sort $(targets)))
+cmd_files := $(wildcard $(foreach f,$(targets),$(dir $(f)).$(notdir $(f)).cmd))
+
+ifneq ($(cmd_files),)
+  include $(cmd_files)
+endif
 
-#########################################################################
+# Declare the contents of the .PHONY variable as phony.  We keep that
+# information in a variable se we can use it in if_changed and friends.
 
-.PHONY: FORCE
+.PHONY: $(PHONY)
diff --git a/scripts/Makefile.clean b/scripts/Makefile.clean
new file mode 100644 (file)
index 0000000..5cd0f51
--- /dev/null
@@ -0,0 +1,108 @@
+# ==========================================================================
+# Cleaning up
+# ==========================================================================
+
+src := $(obj)
+
+PHONY := __clean
+__clean:
+
+# Shorthand for $(Q)$(MAKE) scripts/Makefile.clean obj=dir
+# Usage:
+# $(Q)$(MAKE) $(clean)=dir
+clean := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.clean obj
+
+# The filename Kbuild has precedence over Makefile
+kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src))
+include $(if $(wildcard $(kbuild-dir)/Kbuild), $(kbuild-dir)/Kbuild, $(kbuild-dir)/Makefile)
+
+# Figure out what we need to build from the various variables
+# ==========================================================================
+
+__subdir-y     := $(patsubst %/,%,$(filter %/, $(obj-y)))
+subdir-y       += $(__subdir-y)
+__subdir-m     := $(patsubst %/,%,$(filter %/, $(obj-m)))
+subdir-m       += $(__subdir-m)
+__subdir-n     := $(patsubst %/,%,$(filter %/, $(obj-n)))
+subdir-n       += $(__subdir-n)
+__subdir-      := $(patsubst %/,%,$(filter %/, $(obj-)))
+subdir-                += $(__subdir-)
+
+# Subdirectories we need to descend into
+
+subdir-ym      := $(sort $(subdir-y) $(subdir-m))
+subdir-ymn      := $(sort $(subdir-ym) $(subdir-n) $(subdir-))
+
+# Add subdir path
+
+subdir-ymn     := $(addprefix $(obj)/,$(subdir-ymn))
+
+# Temporal work-around for U-Boot
+
+subdir-ymn     := $(foreach f, $(subdir-ymn), $(if $(wildcard $f/Makefile),$f))
+
+# build a list of files to remove, usually relative to the current
+# directory
+
+__clean-files  := $(extra-y) $(always)                  \
+                  $(targets) $(clean-files)             \
+                  $(host-progs)                         \
+                  $(hostprogs-y) $(hostprogs-m) $(hostprogs-)
+
+__clean-files   := $(filter-out $(no-clean-files), $(__clean-files))
+
+# as clean-files is given relative to the current directory, this adds
+# a $(obj) prefix, except for absolute paths
+
+__clean-files   := $(wildcard                                               \
+                   $(addprefix $(obj)/, $(filter-out /%, $(__clean-files))) \
+                  $(filter /%, $(__clean-files)))
+
+# as clean-dirs is given relative to the current directory, this adds
+# a $(obj) prefix, except for absolute paths
+
+__clean-dirs    := $(wildcard                                               \
+                   $(addprefix $(obj)/, $(filter-out /%, $(clean-dirs)))    \
+                  $(filter /%, $(clean-dirs)))
+
+# ==========================================================================
+
+quiet_cmd_clean    = CLEAN   $(obj)
+      cmd_clean    = rm -f $(__clean-files)
+quiet_cmd_cleandir = CLEAN   $(__clean-dirs)
+      cmd_cleandir = rm -rf $(__clean-dirs)
+
+
+__clean: $(subdir-ymn)
+ifneq ($(strip $(__clean-files)),)
+       +$(call cmd,clean)
+endif
+ifneq ($(strip $(__clean-dirs)),)
+       +$(call cmd,cleandir)
+endif
+ifneq ($(strip $(clean-rule)),)
+       +$(clean-rule)
+endif
+       @:
+
+
+# ===========================================================================
+# Generic stuff
+# ===========================================================================
+
+# Descending
+# ---------------------------------------------------------------------------
+
+PHONY += $(subdir-ymn)
+$(subdir-ymn):
+       $(Q)$(MAKE) $(clean)=$@
+
+# If quiet is set, only print short version of command
+
+cmd = @$(if $($(quiet)cmd_$(1)),echo '  $($(quiet)cmd_$(1))' &&) $(cmd_$(1))
+
+
+# Declare the contents of the .PHONY variable as phony.  We keep that
+# information in a variable se we can use it in if_changed and friends.
+
+.PHONY: $(PHONY)
diff --git a/scripts/Makefile.host b/scripts/Makefile.host
new file mode 100644 (file)
index 0000000..1ac414f
--- /dev/null
@@ -0,0 +1,170 @@
+# ==========================================================================
+# Building binaries on the host system
+# Binaries are used during the compilation of the kernel, for example
+# to preprocess a data file.
+#
+# Both C and C++ are supported, but preferred language is C for such utilities.
+#
+# Sample syntax (see Documentation/kbuild/makefiles.txt for reference)
+# hostprogs-y := bin2hex
+# Will compile bin2hex.c and create an executable named bin2hex
+#
+# hostprogs-y    := lxdialog
+# lxdialog-objs := checklist.o lxdialog.o
+# Will compile lxdialog.c and checklist.c, and then link the executable
+# lxdialog, based on checklist.o and lxdialog.o
+#
+# hostprogs-y      := qconf
+# qconf-cxxobjs   := qconf.o
+# qconf-objs      := menu.o
+# Will compile qconf as a C++ program, and menu as a C program.
+# They are linked as C++ code to the executable qconf
+
+# hostprogs-y := conf
+# conf-objs  := conf.o libkconfig.so
+# libkconfig-objs := expr.o type.o
+# Will create a shared library named libkconfig.so that consists of
+# expr.o and type.o (they are both compiled as C code and the object files
+# are made as position independent code).
+# conf.c is compiled as a C program, and conf.o is linked together with
+# libkconfig.so as the executable conf.
+# Note: Shared libraries consisting of C++ files are not supported
+
+__hostprogs := $(sort $(hostprogs-y) $(hostprogs-m))
+
+# C code
+# Executables compiled from a single .c file
+host-csingle   := $(foreach m,$(__hostprogs),$(if $($(m)-objs),,$(m)))
+
+# C executables linked based on several .o files
+host-cmulti    := $(foreach m,$(__hostprogs),\
+                  $(if $($(m)-cxxobjs),,$(if $($(m)-objs),$(m))))
+
+# Object (.o) files compiled from .c files
+host-cobjs     := $(sort $(foreach m,$(__hostprogs),$($(m)-objs)))
+
+# C++ code
+# C++ executables compiled from at least on .cc file
+# and zero or more .c files
+host-cxxmulti  := $(foreach m,$(__hostprogs),$(if $($(m)-cxxobjs),$(m)))
+
+# C++ Object (.o) files compiled from .cc files
+host-cxxobjs   := $(sort $(foreach m,$(host-cxxmulti),$($(m)-cxxobjs)))
+
+# Shared libaries (only .c supported)
+# Shared libraries (.so) - all .so files referenced in "xxx-objs"
+host-cshlib    := $(sort $(filter %.so, $(host-cobjs)))
+# Remove .so files from "xxx-objs"
+host-cobjs     := $(filter-out %.so,$(host-cobjs))
+
+#Object (.o) files used by the shared libaries
+host-cshobjs   := $(sort $(foreach m,$(host-cshlib),$($(m:.so=-objs))))
+
+# output directory for programs/.o files
+# hostprogs-y := tools/build may have been specified. Retrieve directory
+host-objdirs := $(foreach f,$(__hostprogs), $(if $(dir $(f)),$(dir $(f))))
+# directory of .o files from prog-objs notation
+host-objdirs += $(foreach f,$(host-cmulti),                  \
+                    $(foreach m,$($(f)-objs),                \
+                        $(if $(dir $(m)),$(dir $(m)))))
+# directory of .o files from prog-cxxobjs notation
+host-objdirs += $(foreach f,$(host-cxxmulti),                  \
+                    $(foreach m,$($(f)-cxxobjs),                \
+                        $(if $(dir $(m)),$(dir $(m)))))
+
+host-objdirs := $(strip $(sort $(filter-out ./,$(host-objdirs))))
+
+
+__hostprogs     := $(addprefix $(obj)/,$(__hostprogs))
+host-csingle   := $(addprefix $(obj)/,$(host-csingle))
+host-cmulti    := $(addprefix $(obj)/,$(host-cmulti))
+host-cobjs     := $(addprefix $(obj)/,$(host-cobjs))
+host-cxxmulti  := $(addprefix $(obj)/,$(host-cxxmulti))
+host-cxxobjs   := $(addprefix $(obj)/,$(host-cxxobjs))
+host-cshlib    := $(addprefix $(obj)/,$(host-cshlib))
+host-cshobjs   := $(addprefix $(obj)/,$(host-cshobjs))
+host-objdirs    := $(addprefix $(obj)/,$(host-objdirs))
+
+obj-dirs += $(host-objdirs)
+
+#####
+# Handle options to gcc. Support building with separate output directory
+
+_hostc_flags   = $(HOSTCFLAGS)   $(HOST_EXTRACFLAGS)   \
+                 $(HOSTCFLAGS_$(basetarget).o)
+_hostcxx_flags = $(HOSTCXXFLAGS) $(HOST_EXTRACXXFLAGS) \
+                 $(HOSTCXXFLAGS_$(basetarget).o)
+
+ifeq ($(KBUILD_SRC),)
+__hostc_flags  = $(_hostc_flags)
+__hostcxx_flags        = $(_hostcxx_flags)
+else
+__hostc_flags  = -I$(obj) $(call flags,_hostc_flags)
+__hostcxx_flags        = -I$(obj) $(call flags,_hostcxx_flags)
+endif
+
+hostc_flags    = -Wp,-MD,$(depfile) $(__hostc_flags)
+hostcxx_flags  = -Wp,-MD,$(depfile) $(__hostcxx_flags)
+
+#####
+# Compile programs on the host
+
+# Create executable from a single .c file
+# host-csingle -> Executable
+quiet_cmd_host-csingle         = HOSTCC  $@
+      cmd_host-csingle = $(HOSTCC) $(hostc_flags) -o $@ $< \
+               $(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F))
+$(host-csingle): $(obj)/%: $(src)/%.c FORCE
+       $(call if_changed_dep,host-csingle)
+
+# Link an executable based on list of .o files, all plain c
+# host-cmulti -> executable
+quiet_cmd_host-cmulti  = HOSTLD  $@
+      cmd_host-cmulti  = $(HOSTCC) $(HOSTLDFLAGS) -o $@ \
+                         $(addprefix $(obj)/,$($(@F)-objs)) \
+                         $(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F))
+$(host-cmulti): $(obj)/%: $(host-cobjs) $(host-cshlib) FORCE
+       $(call if_changed,host-cmulti)
+
+# Create .o file from a single .c file
+# host-cobjs -> .o
+quiet_cmd_host-cobjs   = HOSTCC  $@
+      cmd_host-cobjs   = $(HOSTCC) $(hostc_flags) -c -o $@ $<
+$(host-cobjs): $(obj)/%.o: $(src)/%.c FORCE
+       $(call if_changed_dep,host-cobjs)
+
+# Link an executable based on list of .o files, a mixture of .c and .cc
+# host-cxxmulti -> executable
+quiet_cmd_host-cxxmulti        = HOSTLD  $@
+      cmd_host-cxxmulti        = $(HOSTCXX) $(HOSTLDFLAGS) -o $@ \
+                         $(foreach o,objs cxxobjs,\
+                         $(addprefix $(obj)/,$($(@F)-$(o)))) \
+                         $(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F))
+$(host-cxxmulti): $(obj)/%: $(host-cobjs) $(host-cxxobjs) $(host-cshlib) FORCE
+       $(call if_changed,host-cxxmulti)
+
+# Create .o file from a single .cc (C++) file
+quiet_cmd_host-cxxobjs = HOSTCXX $@
+      cmd_host-cxxobjs = $(HOSTCXX) $(hostcxx_flags) -c -o $@ $<
+$(host-cxxobjs): $(obj)/%.o: $(src)/%.cc FORCE
+       $(call if_changed_dep,host-cxxobjs)
+
+# Compile .c file, create position independent .o file
+# host-cshobjs -> .o
+quiet_cmd_host-cshobjs = HOSTCC  -fPIC $@
+      cmd_host-cshobjs = $(HOSTCC) $(hostc_flags) -fPIC -c -o $@ $<
+$(host-cshobjs): $(obj)/%.o: $(src)/%.c FORCE
+       $(call if_changed_dep,host-cshobjs)
+
+# Link a shared library, based on position independent .o files
+# *.o -> .so shared library (host-cshlib)
+quiet_cmd_host-cshlib  = HOSTLLD -shared $@
+      cmd_host-cshlib  = $(HOSTCC) $(HOSTLDFLAGS) -shared -o $@ \
+                         $(addprefix $(obj)/,$($(@F:.so=-objs))) \
+                         $(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F))
+$(host-cshlib): $(obj)/%: $(host-cshobjs) FORCE
+       $(call if_changed,host-cshlib)
+
+targets += $(host-csingle)  $(host-cmulti) $(host-cobjs)\
+          $(host-cxxmulti) $(host-cxxobjs) $(host-cshlib) $(host-cshobjs) 
+
diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
new file mode 100644 (file)
index 0000000..02b17b1
--- /dev/null
@@ -0,0 +1,374 @@
+# Backward compatibility
+asflags-y  += $(EXTRA_AFLAGS)
+ccflags-y  += $(EXTRA_CFLAGS)
+cppflags-y += $(EXTRA_CPPFLAGS)
+ldflags-y  += $(EXTRA_LDFLAGS)
+
+#
+# flags that take effect in sub directories
+export KBUILD_SUBDIR_ASFLAGS := $(KBUILD_SUBDIR_ASFLAGS) $(subdir-asflags-y)
+export KBUILD_SUBDIR_CCFLAGS := $(KBUILD_SUBDIR_CCFLAGS) $(subdir-ccflags-y)
+
+# Figure out what we need to build from the various variables
+# ===========================================================================
+
+# When an object is listed to be built compiled-in and modular,
+# only build the compiled-in version
+
+obj-m := $(filter-out $(obj-y),$(obj-m))
+
+# Libraries are always collected in one lib file.
+# Filter out objects already built-in
+
+lib-y := $(filter-out $(obj-y), $(sort $(lib-y) $(lib-m)))
+
+
+# Handle objects in subdirs
+# ---------------------------------------------------------------------------
+# o if we encounter foo/ in $(obj-y), replace it by foo/built-in.o
+#   and add the directory to the list of dirs to descend into: $(subdir-y)
+# o if we encounter foo/ in $(obj-m), remove it from $(obj-m) 
+#   and add the directory to the list of dirs to descend into: $(subdir-m)
+
+# Determine modorder.
+# Unfortunately, we don't have information about ordering between -y
+# and -m subdirs.  Just put -y's first.
+modorder       := $(patsubst %/,%/modules.order, $(filter %/, $(obj-y)) $(obj-m:.o=.ko))
+
+__subdir-y     := $(patsubst %/,%,$(filter %/, $(obj-y)))
+subdir-y       += $(__subdir-y)
+__subdir-m     := $(patsubst %/,%,$(filter %/, $(obj-m)))
+subdir-m       += $(__subdir-m)
+obj-y          := $(patsubst %/, %/built-in.o, $(obj-y))
+obj-m          := $(filter-out %/, $(obj-m))
+
+# Subdirectories we need to descend into
+
+subdir-ym      := $(sort $(subdir-y) $(subdir-m))
+
+# if $(foo-objs) exists, foo.o is a composite object 
+multi-used-y := $(sort $(foreach m,$(obj-y), $(if $(strip $($(m:.o=-objs)) $($(m:.o=-y))), $(m))))
+multi-used-m := $(sort $(foreach m,$(obj-m), $(if $(strip $($(m:.o=-objs)) $($(m:.o=-y))), $(m))))
+multi-used   := $(multi-used-y) $(multi-used-m)
+single-used-m := $(sort $(filter-out $(multi-used-m),$(obj-m)))
+
+# Build list of the parts of our composite objects, our composite
+# objects depend on those (obviously)
+multi-objs-y := $(foreach m, $(multi-used-y), $($(m:.o=-objs)) $($(m:.o=-y)))
+multi-objs-m := $(foreach m, $(multi-used-m), $($(m:.o=-objs)) $($(m:.o=-y)))
+multi-objs   := $(multi-objs-y) $(multi-objs-m)
+
+# $(subdir-obj-y) is the list of objects in $(obj-y) which uses dir/ to
+# tell kbuild to descend
+subdir-obj-y := $(filter %/built-in.o, $(obj-y))
+
+# $(obj-dirs) is a list of directories that contain object files
+obj-dirs := $(dir $(multi-objs) $(obj-y))
+
+# Replace multi-part objects by their individual parts, look at local dir only
+real-objs-y := $(foreach m, $(filter-out $(subdir-obj-y), $(obj-y)), $(if $(strip $($(m:.o=-objs)) $($(m:.o=-y))),$($(m:.o=-objs)) $($(m:.o=-y)),$(m))) $(extra-y)
+real-objs-m := $(foreach m, $(obj-m), $(if $(strip $($(m:.o=-objs)) $($(m:.o=-y))),$($(m:.o=-objs)) $($(m:.o=-y)),$(m)))
+
+# Add subdir path
+
+extra-y                := $(addprefix $(obj)/,$(extra-y))
+always         := $(addprefix $(obj)/,$(always))
+targets                := $(addprefix $(obj)/,$(targets))
+modorder       := $(addprefix $(obj)/,$(modorder))
+obj-y          := $(addprefix $(obj)/,$(obj-y))
+obj-m          := $(addprefix $(obj)/,$(obj-m))
+lib-y          := $(addprefix $(obj)/,$(lib-y))
+subdir-obj-y   := $(addprefix $(obj)/,$(subdir-obj-y))
+real-objs-y    := $(addprefix $(obj)/,$(real-objs-y))
+real-objs-m    := $(addprefix $(obj)/,$(real-objs-m))
+single-used-m  := $(addprefix $(obj)/,$(single-used-m))
+multi-used-y   := $(addprefix $(obj)/,$(multi-used-y))
+multi-used-m   := $(addprefix $(obj)/,$(multi-used-m))
+multi-objs-y   := $(addprefix $(obj)/,$(multi-objs-y))
+multi-objs-m   := $(addprefix $(obj)/,$(multi-objs-m))
+subdir-ym      := $(addprefix $(obj)/,$(subdir-ym))
+obj-dirs       := $(addprefix $(obj)/,$(obj-dirs))
+
+# These flags are needed for modversions and compiling, so we define them here
+# already
+# $(modname_flags) #defines KBUILD_MODNAME as the name of the module it will 
+# end up in (or would, if it gets compiled in)
+# Note: Files that end up in two or more modules are compiled without the
+#       KBUILD_MODNAME definition. The reason is that any made-up name would
+#       differ in different configs.
+name-fix = $(subst $(comma),_,$(subst -,_,$1))
+basename_flags = -D"KBUILD_BASENAME=KBUILD_STR($(call name-fix,$(basetarget)))"
+modname_flags  = $(if $(filter 1,$(words $(modname))),\
+                 -D"KBUILD_MODNAME=KBUILD_STR($(call name-fix,$(modname)))")
+
+# U-Boot also uses $(CPPFLAGS)
+orig_c_flags   = $(KBUILD_CPPFLAGS) $(CPPFLAGS) $(KBUILD_CFLAGS) $(KBUILD_SUBDIR_CCFLAGS) \
+                 $(ccflags-y) $(CFLAGS_$(basetarget).o)
+_c_flags       = $(filter-out $(CFLAGS_REMOVE_$(basetarget).o), $(orig_c_flags))
+_a_flags       = $(KBUILD_CPPFLAGS) $(CPPFLAGS) $(KBUILD_AFLAGS) $(KBUILD_SUBDIR_ASFLAGS) \
+                 $(asflags-y) $(AFLAGS_$(basetarget).o)
+_cpp_flags     = $(KBUILD_CPPFLAGS) $(CPPFLAGS) $(cppflags-y) $(CPPFLAGS_$(@F))
+
+#
+# Enable gcov profiling flags for a file, directory or for all files depending
+# on variables GCOV_PROFILE_obj.o, GCOV_PROFILE and CONFIG_GCOV_PROFILE_ALL
+# (in this order)
+#
+ifeq ($(CONFIG_GCOV_KERNEL),y)
+_c_flags += $(if $(patsubst n%,, \
+               $(GCOV_PROFILE_$(basetarget).o)$(GCOV_PROFILE)$(CONFIG_GCOV_PROFILE_ALL)), \
+               $(CFLAGS_GCOV))
+endif
+
+# If building the kernel in a separate objtree expand all occurrences
+# of -Idir to -I$(srctree)/dir except for absolute paths (starting with '/').
+
+ifeq ($(KBUILD_SRC),)
+__c_flags      = $(_c_flags)
+__a_flags      = $(_a_flags)
+__cpp_flags     = $(_cpp_flags)
+else
+
+# -I$(obj) locates generated .h files
+# $(call addtree,-I$(obj)) locates .h files in srctree, from generated .c files
+#   and locates generated .h files
+# FIXME: Replace both with specific CFLAGS* statements in the makefiles
+__c_flags      = $(call addtree,-I$(obj)) $(call flags,_c_flags)
+__a_flags      =                          $(call flags,_a_flags)
+__cpp_flags     =                          $(call flags,_cpp_flags)
+endif
+
+# Modified for U-Boot: LINUXINCLUDE -> UBOOTINCLUDE
+c_flags        = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(UBOOTINCLUDE)     \
+                $(__c_flags) $(modkern_cflags)                           \
+                -D"KBUILD_STR(s)=\#s" $(basename_flags) $(modname_flags)
+
+a_flags        = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(UBOOTINCLUDE)     \
+                $(__a_flags) $(modkern_aflags)
+
+cpp_flags      = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(UBOOTINCLUDE)     \
+                $(__cpp_flags)
+
+ld_flags       = $(LDFLAGS) $(ldflags-y)
+
+# Modified for U-Boot
+dtc_cpp_flags  = -Wp,-MD,$(depfile).pre.tmp -nostdinc                    \
+                -I$(srctree)/arch/$(ARCH)/dts                           \
+                -undef -D__DTS__
+
+# Finds the multi-part object the current object will be linked into
+modname-multi = $(sort $(foreach m,$(multi-used),\
+               $(if $(filter $(subst $(obj)/,,$*.o), $($(m:.o=-objs)) $($(m:.o=-y))),$(m:.o=))))
+
+ifdef REGENERATE_PARSERS
+
+# GPERF
+# ---------------------------------------------------------------------------
+quiet_cmd_gperf = GPERF $@
+      cmd_gperf = gperf -t --output-file $@ -a -C -E -g -k 1,3,$$ -p -t $<
+
+.PRECIOUS: $(src)/%.hash.c_shipped
+$(src)/%.hash.c_shipped: $(src)/%.gperf
+       $(call cmd,gperf)
+
+# LEX
+# ---------------------------------------------------------------------------
+LEX_PREFIX = $(if $(LEX_PREFIX_${baseprereq}),$(LEX_PREFIX_${baseprereq}),yy)
+
+quiet_cmd_flex = LEX     $@
+      cmd_flex = flex -o$@ -L -P $(LEX_PREFIX) $<
+
+.PRECIOUS: $(src)/%.lex.c_shipped
+$(src)/%.lex.c_shipped: $(src)/%.l
+       $(call cmd,flex)
+
+# YACC
+# ---------------------------------------------------------------------------
+YACC_PREFIX = $(if $(YACC_PREFIX_${baseprereq}),$(YACC_PREFIX_${baseprereq}),yy)
+
+quiet_cmd_bison = YACC    $@
+      cmd_bison = bison -o$@ -t -l -p $(YACC_PREFIX) $<
+
+.PRECIOUS: $(src)/%.tab.c_shipped
+$(src)/%.tab.c_shipped: $(src)/%.y
+       $(call cmd,bison)
+
+quiet_cmd_bison_h = YACC    $@
+      cmd_bison_h = bison -o/dev/null --defines=$@ -t -l -p $(YACC_PREFIX) $<
+
+.PRECIOUS: $(src)/%.tab.h_shipped
+$(src)/%.tab.h_shipped: $(src)/%.y
+       $(call cmd,bison_h)
+
+endif
+
+# Shipped files
+# ===========================================================================
+
+quiet_cmd_shipped = SHIPPED $@
+cmd_shipped = cat $< > $@
+
+$(obj)/%: $(src)/%_shipped
+       $(call cmd,shipped)
+
+# Commands useful for building a boot image
+# ===========================================================================
+# 
+#      Use as following:
+#
+#      target: source(s) FORCE
+#              $(if_changed,ld/objcopy/gzip)
+#
+#      and add target to extra-y so that we know we have to
+#      read in the saved command line
+
+# Linking
+# ---------------------------------------------------------------------------
+
+quiet_cmd_ld = LD      $@
+cmd_ld = $(LD) $(LDFLAGS) $(ldflags-y) $(LDFLAGS_$(@F)) \
+              $(filter-out FORCE,$^) -o $@ 
+
+# Objcopy
+# ---------------------------------------------------------------------------
+
+quiet_cmd_objcopy = OBJCOPY $@
+cmd_objcopy = $(OBJCOPY) $(OBJCOPYFLAGS) $(OBJCOPYFLAGS_$(@F)) $< $@
+
+# Gzip
+# ---------------------------------------------------------------------------
+
+quiet_cmd_gzip = GZIP    $@
+cmd_gzip = (cat $(filter-out FORCE,$^) | gzip -n -f -9 > $@) || \
+       (rm -f $@ ; false)
+
+# DTC
+# ---------------------------------------------------------------------------
+
+# Generate an assembly file to wrap the output of the device tree compiler
+quiet_cmd_dt_S_dtb= DTB     $@
+# Modified for U-Boot
+cmd_dt_S_dtb=                                          \
+(                                                      \
+       echo '.section .dtb.init.rodata,"a"';           \
+       echo '.global __dtb_$(*F)_begin';               \
+       echo '__dtb_$(*F)_begin:';                      \
+       echo '.incbin "$<" ';                           \
+       echo '__dtb_$(*F)_end:';                        \
+       echo '.global __dtb_$(*F)_end';                 \
+) > $@
+
+$(obj)/%.dtb.S: $(obj)/%.dtb
+       $(call cmd,dt_S_dtb)
+
+quiet_cmd_dtc = DTC     $@
+# Modified for U-Boot
+cmd_dtc = $(CPP) $(dtc_cpp_flags) -x assembler-with-cpp -o $(dtc-tmp) $< ; \
+       dtc -O dtb -o $@ -b 0 \
+               -i $(dir $<) $(DTC_FLAGS) \
+               -d $(depfile).dtc.tmp $(dtc-tmp) ; \
+       cat $(depfile).pre.tmp $(depfile).dtc.tmp > $(depfile)
+
+$(obj)/%.dtb: $(src)/%.dts FORCE
+       $(call if_changed_dep,dtc)
+
+dtc-tmp = $(subst $(comma),_,$(dot-target).dts.tmp)
+
+# Bzip2
+# ---------------------------------------------------------------------------
+
+# Bzip2 and LZMA do not include size in file... so we have to fake that;
+# append the size as a 32-bit littleendian number as gzip does.
+size_append = printf $(shell                                           \
+dec_size=0;                                                            \
+for F in $1; do                                                                \
+       fsize=$$(stat -c "%s" $$F);                                     \
+       dec_size=$$(expr $$dec_size + $$fsize);                         \
+done;                                                                  \
+printf "%08x\n" $$dec_size |                                           \
+       sed 's/\(..\)/\1 /g' | {                                        \
+               read ch0 ch1 ch2 ch3;                                   \
+               for ch in $$ch3 $$ch2 $$ch1 $$ch0; do                   \
+                       printf '%s%03o' '\\' $$((0x$$ch));              \
+               done;                                                   \
+       }                                                               \
+)
+
+quiet_cmd_bzip2 = BZIP2   $@
+cmd_bzip2 = (cat $(filter-out FORCE,$^) | \
+       bzip2 -9 && $(call size_append, $(filter-out FORCE,$^))) > $@ || \
+       (rm -f $@ ; false)
+
+# Lzma
+# ---------------------------------------------------------------------------
+
+quiet_cmd_lzma = LZMA    $@
+cmd_lzma = (cat $(filter-out FORCE,$^) | \
+       lzma -9 && $(call size_append, $(filter-out FORCE,$^))) > $@ || \
+       (rm -f $@ ; false)
+
+quiet_cmd_lzo = LZO     $@
+cmd_lzo = (cat $(filter-out FORCE,$^) | \
+       lzop -9 && $(call size_append, $(filter-out FORCE,$^))) > $@ || \
+       (rm -f $@ ; false)
+
+quiet_cmd_lz4 = LZ4     $@
+cmd_lz4 = (cat $(filter-out FORCE,$^) | \
+       lz4c -l -c1 stdin stdout && $(call size_append, $(filter-out FORCE,$^))) > $@ || \
+       (rm -f $@ ; false)
+
+# U-Boot mkimage
+# ---------------------------------------------------------------------------
+
+MKIMAGE := $(srctree)/scripts/mkuboot.sh
+
+# SRCARCH just happens to match slightly more than ARCH (on sparc), so reduces
+# the number of overrides in arch makefiles
+UIMAGE_ARCH ?= $(SRCARCH)
+UIMAGE_COMPRESSION ?= $(if $(2),$(2),none)
+UIMAGE_OPTS-y ?=
+UIMAGE_TYPE ?= kernel
+UIMAGE_LOADADDR ?= arch_must_set_this
+UIMAGE_ENTRYADDR ?= $(UIMAGE_LOADADDR)
+UIMAGE_NAME ?= 'Linux-$(KERNELRELEASE)'
+UIMAGE_IN ?= $<
+UIMAGE_OUT ?= $@
+
+quiet_cmd_uimage = UIMAGE  $(UIMAGE_OUT)
+      cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) -A $(UIMAGE_ARCH) -O linux \
+                       -C $(UIMAGE_COMPRESSION) $(UIMAGE_OPTS-y) \
+                       -T $(UIMAGE_TYPE) \
+                       -a $(UIMAGE_LOADADDR) -e $(UIMAGE_ENTRYADDR) \
+                       -n $(UIMAGE_NAME) -d $(UIMAGE_IN) $(UIMAGE_OUT)
+
+# XZ
+# ---------------------------------------------------------------------------
+# Use xzkern to compress the kernel image and xzmisc to compress other things.
+#
+# xzkern uses a big LZMA2 dictionary since it doesn't increase memory usage
+# of the kernel decompressor. A BCJ filter is used if it is available for
+# the target architecture. xzkern also appends uncompressed size of the data
+# using size_append. The .xz format has the size information available at
+# the end of the file too, but it's in more complex format and it's good to
+# avoid changing the part of the boot code that reads the uncompressed size.
+# Note that the bytes added by size_append will make the xz tool think that
+# the file is corrupt. This is expected.
+#
+# xzmisc doesn't use size_append, so it can be used to create normal .xz
+# files. xzmisc uses smaller LZMA2 dictionary than xzkern, because a very
+# big dictionary would increase the memory usage too much in the multi-call
+# decompression mode. A BCJ filter isn't used either.
+quiet_cmd_xzkern = XZKERN  $@
+cmd_xzkern = (cat $(filter-out FORCE,$^) | \
+       sh $(srctree)/scripts/xz_wrap.sh && \
+       $(call size_append, $(filter-out FORCE,$^))) > $@ || \
+       (rm -f $@ ; false)
+
+quiet_cmd_xzmisc = XZMISC  $@
+cmd_xzmisc = (cat $(filter-out FORCE,$^) | \
+       xz --check=crc32 --lzma2=dict=1MiB) > $@ || \
+       (rm -f $@ ; false)
+
+# misc stuff
+# ---------------------------------------------------------------------------
+quote:="
diff --git a/scripts/basic/.gitignore b/scripts/basic/.gitignore
new file mode 100644 (file)
index 0000000..a776371
--- /dev/null
@@ -0,0 +1 @@
+fixdep
diff --git a/scripts/basic/Makefile b/scripts/basic/Makefile
new file mode 100644 (file)
index 0000000..4fcef87
--- /dev/null
@@ -0,0 +1,15 @@
+###
+# Makefile.basic lists the most basic programs used during the build process.
+# The programs listed herein are what are needed to do the basic stuff,
+# such as fix file dependencies.
+# This initial step is needed to avoid files to be recompiled
+# when kernel configuration changes (which is what happens when
+# .config is included by main Makefile.
+# ---------------------------------------------------------------------------
+# fixdep:       Used to generate dependency information during build process
+
+hostprogs-y    := fixdep
+always         := $(hostprogs-y)
+
+# fixdep is needed to compile other host programs
+$(addprefix $(obj)/,$(filter-out fixdep,$(always))): $(obj)/fixdep
diff --git a/scripts/basic/fixdep.c b/scripts/basic/fixdep.c
new file mode 100644 (file)
index 0000000..078fe1d
--- /dev/null
@@ -0,0 +1,462 @@
+/*
+ * "Optimize" a list of dependencies as spit out by gcc -MD
+ * for the kernel build
+ * ===========================================================================
+ *
+ * Author       Kai Germaschewski
+ * Copyright    2002 by Kai Germaschewski  <kai.germaschewski@gmx.de>
+ *
+ * This software may be used and distributed according to the terms
+ * of the GNU General Public License, incorporated herein by reference.
+ *
+ *
+ * Introduction:
+ *
+ * gcc produces a very nice and correct list of dependencies which
+ * tells make when to remake a file.
+ *
+ * To use this list as-is however has the drawback that virtually
+ * every file in the kernel includes autoconf.h.
+ *
+ * If the user re-runs make *config, autoconf.h will be
+ * regenerated.  make notices that and will rebuild every file which
+ * includes autoconf.h, i.e. basically all files. This is extremely
+ * annoying if the user just changed CONFIG_HIS_DRIVER from n to m.
+ *
+ * So we play the same trick that "mkdep" played before. We replace
+ * the dependency on autoconf.h by a dependency on every config
+ * option which is mentioned in any of the listed prequisites.
+ *
+ * kconfig populates a tree in include/config/ with an empty file
+ * for each config symbol and when the configuration is updated
+ * the files representing changed config options are touched
+ * which then let make pick up the changes and the files that use
+ * the config symbols are rebuilt.
+ *
+ * So if the user changes his CONFIG_HIS_DRIVER option, only the objects
+ * which depend on "include/linux/config/his/driver.h" will be rebuilt,
+ * so most likely only his driver ;-)
+ *
+ * The idea above dates, by the way, back to Michael E Chastain, AFAIK.
+ *
+ * So to get dependencies right, there are two issues:
+ * o if any of the files the compiler read changed, we need to rebuild
+ * o if the command line given to the compile the file changed, we
+ *   better rebuild as well.
+ *
+ * The former is handled by using the -MD output, the later by saving
+ * the command line used to compile the old object and comparing it
+ * to the one we would now use.
+ *
+ * Again, also this idea is pretty old and has been discussed on
+ * kbuild-devel a long time ago. I don't have a sensibly working
+ * internet connection right now, so I rather don't mention names
+ * without double checking.
+ *
+ * This code here has been based partially based on mkdep.c, which
+ * says the following about its history:
+ *
+ *   Copyright abandoned, Michael Chastain, <mailto:mec@shout.net>.
+ *   This is a C version of syncdep.pl by Werner Almesberger.
+ *
+ *
+ * It is invoked as
+ *
+ *   fixdep <depfile> <target> <cmdline>
+ *
+ * and will read the dependency file <depfile>
+ *
+ * The transformed dependency snipped is written to stdout.
+ *
+ * It first generates a line
+ *
+ *   cmd_<target> = <cmdline>
+ *
+ * and then basically copies the .<target>.d file to stdout, in the
+ * process filtering out the dependency on autoconf.h and adding
+ * dependencies on include/config/my/option.h for every
+ * CONFIG_MY_OPTION encountered in any of the prequisites.
+ *
+ * It will also filter out all the dependencies on *.ver. We need
+ * to make sure that the generated version checksum are globally up
+ * to date before even starting the recursive build, so it's too late
+ * at this point anyway.
+ *
+ * The algorithm to grep for "CONFIG_..." is bit unusual, but should
+ * be fast ;-) We don't even try to really parse the header files, but
+ * merely grep, i.e. if CONFIG_FOO is mentioned in a comment, it will
+ * be picked up as well. It's not a problem with respect to
+ * correctness, since that can only give too many dependencies, thus
+ * we cannot miss a rebuild. Since people tend to not mention totally
+ * unrelated CONFIG_ options all over the place, it's not an
+ * efficiency problem either.
+ *
+ * (Note: it'd be easy to port over the complete mkdep state machine,
+ *  but I don't think the added complexity is worth it)
+ */
+/*
+ * Note 2: if somebody writes HELLO_CONFIG_BOOM in a file, it will depend onto
+ * CONFIG_BOOM. This could seem a bug (not too hard to fix), but please do not
+ * fix it! Some UserModeLinux files (look at arch/um/) call CONFIG_BOOM as
+ * UML_CONFIG_BOOM, to avoid conflicts with /usr/include/linux/autoconf.h,
+ * through arch/um/include/uml-config.h; this fixdep "bug" makes sure that
+ * those files will have correct dependencies.
+ */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/mman.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <limits.h>
+#include <ctype.h>
+#include <arpa/inet.h>
+
+#define INT_CONF ntohl(0x434f4e46)
+#define INT_ONFI ntohl(0x4f4e4649)
+#define INT_NFIG ntohl(0x4e464947)
+#define INT_FIG_ ntohl(0x4649475f)
+
+char *target;
+char *depfile;
+char *cmdline;
+
+static void usage(void)
+{
+       fprintf(stderr, "Usage: fixdep <depfile> <target> <cmdline>\n");
+       exit(1);
+}
+
+/*
+ * Print out the commandline prefixed with cmd_<target filename> :=
+ */
+static void print_cmdline(void)
+{
+       printf("cmd_%s := %s\n\n", target, cmdline);
+}
+
+struct item {
+       struct item     *next;
+       unsigned int    len;
+       unsigned int    hash;
+       char            name[0];
+};
+
+#define HASHSZ 256
+static struct item *hashtab[HASHSZ];
+
+static unsigned int strhash(const char *str, unsigned int sz)
+{
+       /* fnv32 hash */
+       unsigned int i, hash = 2166136261U;
+
+       for (i = 0; i < sz; i++)
+               hash = (hash ^ str[i]) * 0x01000193;
+       return hash;
+}
+
+/*
+ * Lookup a value in the configuration string.
+ */
+static int is_defined_config(const char *name, int len, unsigned int hash)
+{
+       struct item *aux;
+
+       for (aux = hashtab[hash % HASHSZ]; aux; aux = aux->next) {
+               if (aux->hash == hash && aux->len == len &&
+                   memcmp(aux->name, name, len) == 0)
+                       return 1;
+       }
+       return 0;
+}
+
+/*
+ * Add a new value to the configuration string.
+ */
+static void define_config(const char *name, int len, unsigned int hash)
+{
+       struct item *aux = malloc(sizeof(*aux) + len);
+
+       if (!aux) {
+               perror("fixdep:malloc");
+               exit(1);
+       }
+       memcpy(aux->name, name, len);
+       aux->len = len;
+       aux->hash = hash;
+       aux->next = hashtab[hash % HASHSZ];
+       hashtab[hash % HASHSZ] = aux;
+}
+
+/*
+ * Clear the set of configuration strings.
+ */
+static void clear_config(void)
+{
+       struct item *aux, *next;
+       unsigned int i;
+
+       for (i = 0; i < HASHSZ; i++) {
+               for (aux = hashtab[i]; aux; aux = next) {
+                       next = aux->next;
+                       free(aux);
+               }
+               hashtab[i] = NULL;
+       }
+}
+
+/*
+ * Record the use of a CONFIG_* word.
+ */
+static void use_config(const char *m, int slen)
+{
+       unsigned int hash = strhash(m, slen);
+       int c, i;
+
+       if (is_defined_config(m, slen, hash))
+           return;
+
+       define_config(m, slen, hash);
+
+       printf("    $(wildcard include/config/");
+       for (i = 0; i < slen; i++) {
+               c = m[i];
+               if (c == '_')
+                       c = '/';
+               else
+                       c = tolower(c);
+               putchar(c);
+       }
+       printf(".h) \\\n");
+}
+
+static void parse_config_file(const char *map, size_t len)
+{
+       const int *end = (const int *) (map + len);
+       /* start at +1, so that p can never be < map */
+       const int *m   = (const int *) map + 1;
+       const char *p, *q;
+
+       for (; m < end; m++) {
+               if (*m == INT_CONF) { p = (char *) m  ; goto conf; }
+               if (*m == INT_ONFI) { p = (char *) m-1; goto conf; }
+               if (*m == INT_NFIG) { p = (char *) m-2; goto conf; }
+               if (*m == INT_FIG_) { p = (char *) m-3; goto conf; }
+               continue;
+       conf:
+               if (p > map + len - 7)
+                       continue;
+               if (memcmp(p, "CONFIG_", 7))
+                       continue;
+               for (q = p + 7; q < map + len; q++) {
+                       if (!(isalnum(*q) || *q == '_'))
+                               goto found;
+               }
+               continue;
+
+       found:
+               if (!memcmp(q - 7, "_MODULE", 7))
+                       q -= 7;
+               if( (q-p-7) < 0 )
+                       continue;
+               use_config(p+7, q-p-7);
+       }
+}
+
+/* test is s ends in sub */
+static int strrcmp(char *s, char *sub)
+{
+       int slen = strlen(s);
+       int sublen = strlen(sub);
+
+       if (sublen > slen)
+               return 1;
+
+       return memcmp(s + slen - sublen, sub, sublen);
+}
+
+static void do_config_file(const char *filename)
+{
+       struct stat st;
+       int fd;
+       void *map;
+
+       fd = open(filename, O_RDONLY);
+       if (fd < 0) {
+               fprintf(stderr, "fixdep: error opening config file: ");
+               perror(filename);
+               exit(2);
+       }
+       fstat(fd, &st);
+       if (st.st_size == 0) {
+               close(fd);
+               return;
+       }
+       map = mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
+       if ((long) map == -1) {
+               perror("fixdep: mmap");
+               close(fd);
+               return;
+       }
+
+       parse_config_file(map, st.st_size);
+
+       munmap(map, st.st_size);
+
+       close(fd);
+}
+
+/*
+ * Important: The below generated source_foo.o and deps_foo.o variable
+ * assignments are parsed not only by make, but also by the rather simple
+ * parser in scripts/mod/sumversion.c.
+ */
+static void parse_dep_file(void *map, size_t len)
+{
+       char *m = map;
+       char *end = m + len;
+       char *p;
+       char s[PATH_MAX];
+       int is_target;
+       int saw_any_target = 0;
+       int is_first_dep = 0;
+
+       clear_config();
+
+       while (m < end) {
+               /* Skip any "white space" */
+               while (m < end && (*m == ' ' || *m == '\\' || *m == '\n'))
+                       m++;
+               /* Find next "white space" */
+               p = m;
+               while (p < end && *p != ' ' && *p != '\\' && *p != '\n')
+                       p++;
+               /* Is the token we found a target name? */
+               is_target = (*(p-1) == ':');
+               /* Don't write any target names into the dependency file */
+               if (is_target) {
+                       /* The /next/ file is the first dependency */
+                       is_first_dep = 1;
+               } else {
+                       /* Save this token/filename */
+                       memcpy(s, m, p-m);
+                       s[p - m] = 0;
+
+                       /* Ignore certain dependencies */
+                       if (strrcmp(s, "include/generated/autoconf.h") &&
+                           strrcmp(s, "arch/um/include/uml-config.h") &&
+                           strrcmp(s, "include/linux/kconfig.h") &&
+                           strrcmp(s, ".ver")) {
+                               /*
+                                * Do not list the source file as dependency,
+                                * so that kbuild is not confused if a .c file
+                                * is rewritten into .S or vice versa. Storing
+                                * it in source_* is needed for modpost to
+                                * compute srcversions.
+                                */
+                               if (is_first_dep) {
+                                       /*
+                                        * If processing the concatenation of
+                                        * multiple dependency files, only
+                                        * process the first target name, which
+                                        * will be the original source name,
+                                        * and ignore any other target names,
+                                        * which will be intermediate temporary
+                                        * files.
+                                        */
+                                       if (!saw_any_target) {
+                                               saw_any_target = 1;
+                                               printf("source_%s := %s\n\n",
+                                                       target, s);
+                                               printf("deps_%s := \\\n",
+                                                       target);
+                                       }
+                                       is_first_dep = 0;
+                               } else
+                                       printf("  %s \\\n", s);
+                               do_config_file(s);
+                       }
+               }
+               /*
+                * Start searching for next token immediately after the first
+                * "whitespace" character that follows this token.
+                */
+               m = p + 1;
+       }
+
+       if (!saw_any_target) {
+               fprintf(stderr, "fixdep: parse error; no targets found\n");
+               exit(1);
+       }
+
+       printf("\n%s: $(deps_%s)\n\n", target, target);
+       printf("$(deps_%s):\n", target);
+}
+
+static void print_deps(void)
+{
+       struct stat st;
+       int fd;
+       void *map;
+
+       fd = open(depfile, O_RDONLY);
+       if (fd < 0) {
+               fprintf(stderr, "fixdep: error opening depfile: ");
+               perror(depfile);
+               exit(2);
+       }
+       if (fstat(fd, &st) < 0) {
+                fprintf(stderr, "fixdep: error fstat'ing depfile: ");
+                perror(depfile);
+                exit(2);
+        }
+       if (st.st_size == 0) {
+               fprintf(stderr,"fixdep: %s is empty\n",depfile);
+               close(fd);
+               return;
+       }
+       map = mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
+       if ((long) map == -1) {
+               perror("fixdep: mmap");
+               close(fd);
+               return;
+       }
+
+       parse_dep_file(map, st.st_size);
+
+       munmap(map, st.st_size);
+
+       close(fd);
+}
+
+static void traps(void)
+{
+       static char test[] __attribute__((aligned(sizeof(int)))) = "CONF";
+       int *p = (int *)test;
+
+       if (*p != INT_CONF) {
+               fprintf(stderr, "fixdep: sizeof(int) != 4 or wrong endianness? %#x\n",
+                       *p);
+               exit(2);
+       }
+}
+
+int main(int argc, char *argv[])
+{
+       traps();
+
+       if (argc != 4)
+               usage();
+
+       depfile = argv[1];
+       target = argv[2];
+       cmdline = argv[3];
+
+       print_cmdline();
+       print_deps();
+
+       return 0;
+}
diff --git a/scripts/docproc.c b/scripts/docproc.c
new file mode 100644 (file)
index 0000000..2b69eaf
--- /dev/null
@@ -0,0 +1,580 @@
+/*
+ *     docproc is a simple preprocessor for the template files
+ *      used as placeholders for the kernel internal documentation.
+ *     docproc is used for documentation-frontend and
+ *      dependency-generator.
+ *     The two usages have in common that they require
+ *     some knowledge of the .tmpl syntax, therefore they
+ *     are kept together.
+ *
+ *     documentation-frontend
+ *             Scans the template file and call kernel-doc for
+ *             all occurrences of ![EIF]file
+ *             Beforehand each referenced file is scanned for
+ *             any symbols that are exported via these macros:
+ *                     EXPORT_SYMBOL(), EXPORT_SYMBOL_GPL(), &
+ *                     EXPORT_SYMBOL_GPL_FUTURE()
+ *             This is used to create proper -function and
+ *             -nofunction arguments in calls to kernel-doc.
+ *             Usage: docproc doc file.tmpl
+ *
+ *     dependency-generator:
+ *             Scans the template file and list all files
+ *             referenced in a format recognized by make.
+ *             Usage:  docproc depend file.tmpl
+ *             Writes dependency information to stdout
+ *             in the following format:
+ *             file.tmpl src.c src2.c
+ *             The filenames are obtained from the following constructs:
+ *             !Efilename
+ *             !Ifilename
+ *             !Dfilename
+ *             !Ffilename
+ *             !Pfilename
+ *
+ */
+
+#define _GNU_SOURCE
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <limits.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+
+/* exitstatus is used to keep track of any failing calls to kernel-doc,
+ * but execution continues. */
+int exitstatus = 0;
+
+typedef void DFL(char *);
+DFL *defaultline;
+
+typedef void FILEONLY(char * file);
+FILEONLY *internalfunctions;
+FILEONLY *externalfunctions;
+FILEONLY *symbolsonly;
+FILEONLY *findall;
+
+typedef void FILELINE(char * file, char * line);
+FILELINE * singlefunctions;
+FILELINE * entity_system;
+FILELINE * docsection;
+
+#define MAXLINESZ     2048
+#define MAXFILES      250
+#define KERNELDOCPATH "scripts/"
+#define KERNELDOC     "kernel-doc"
+#define DOCBOOK       "-docbook"
+#define LIST          "-list"
+#define FUNCTION      "-function"
+#define NOFUNCTION    "-nofunction"
+#define NODOCSECTIONS "-no-doc-sections"
+#define SHOWNOTFOUND  "-show-not-found"
+
+static char *srctree, *kernsrctree;
+
+static char **all_list = NULL;
+static int all_list_len = 0;
+
+static void consume_symbol(const char *sym)
+{
+       int i;
+
+       for (i = 0; i < all_list_len; i++) {
+               if (!all_list[i])
+                       continue;
+               if (strcmp(sym, all_list[i]))
+                       continue;
+               all_list[i] = NULL;
+               break;
+       }
+}
+
+static void usage (void)
+{
+       fprintf(stderr, "Usage: docproc {doc|depend} file\n");
+       fprintf(stderr, "Input is read from file.tmpl. Output is sent to stdout\n");
+       fprintf(stderr, "doc: frontend when generating kernel documentation\n");
+       fprintf(stderr, "depend: generate list of files referenced within file\n");
+       fprintf(stderr, "Environment variable SRCTREE: absolute path to sources.\n");
+       fprintf(stderr, "                     KBUILD_SRC: absolute path to kernel source tree.\n");
+}
+
+/*
+ * Execute kernel-doc with parameters given in svec
+ */
+static void exec_kernel_doc(char **svec)
+{
+       pid_t pid;
+       int ret;
+       char real_filename[PATH_MAX + 1];
+       /* Make sure output generated so far are flushed */
+       fflush(stdout);
+       switch (pid=fork()) {
+               case -1:
+                       perror("fork");
+                       exit(1);
+               case  0:
+                       memset(real_filename, 0, sizeof(real_filename));
+                       strncat(real_filename, kernsrctree, PATH_MAX);
+                       strncat(real_filename, "/" KERNELDOCPATH KERNELDOC,
+                                       PATH_MAX - strlen(real_filename));
+                       execvp(real_filename, svec);
+                       fprintf(stderr, "exec ");
+                       perror(real_filename);
+                       exit(1);
+               default:
+                       waitpid(pid, &ret ,0);
+       }
+       if (WIFEXITED(ret))
+               exitstatus |= WEXITSTATUS(ret);
+       else
+               exitstatus = 0xff;
+}
+
+/* Types used to create list of all exported symbols in a number of files */
+struct symbols
+{
+       char *name;
+};
+
+struct symfile
+{
+       char *filename;
+       struct symbols *symbollist;
+       int symbolcnt;
+};
+
+struct symfile symfilelist[MAXFILES];
+int symfilecnt = 0;
+
+static void add_new_symbol(struct symfile *sym, char * symname)
+{
+       sym->symbollist =
+          realloc(sym->symbollist, (sym->symbolcnt + 1) * sizeof(char *));
+       sym->symbollist[sym->symbolcnt++].name = strdup(symname);
+}
+
+/* Add a filename to the list */
+static struct symfile * add_new_file(char * filename)
+{
+       symfilelist[symfilecnt++].filename = strdup(filename);
+       return &symfilelist[symfilecnt - 1];
+}
+
+/* Check if file already are present in the list */
+static struct symfile * filename_exist(char * filename)
+{
+       int i;
+       for (i=0; i < symfilecnt; i++)
+               if (strcmp(symfilelist[i].filename, filename) == 0)
+                       return &symfilelist[i];
+       return NULL;
+}
+
+/*
+ * List all files referenced within the template file.
+ * Files are separated by tabs.
+ */
+static void adddep(char * file)                   { printf("\t%s", file); }
+static void adddep2(char * file, char * line)     { line = line; adddep(file); }
+static void noaction(char * line)                 { line = line; }
+static void noaction2(char * file, char * line)   { file = file; line = line; }
+
+/* Echo the line without further action */
+static void printline(char * line)               { printf("%s", line); }
+
+/*
+ * Find all symbols in filename that are exported with EXPORT_SYMBOL &
+ * EXPORT_SYMBOL_GPL (& EXPORT_SYMBOL_GPL_FUTURE implicitly).
+ * All symbols located are stored in symfilelist.
+ */
+static void find_export_symbols(char * filename)
+{
+       FILE * fp;
+       struct symfile *sym;
+       char line[MAXLINESZ];
+       if (filename_exist(filename) == NULL) {
+               char real_filename[PATH_MAX + 1];
+               memset(real_filename, 0, sizeof(real_filename));
+               strncat(real_filename, srctree, PATH_MAX);
+               strncat(real_filename, "/", PATH_MAX - strlen(real_filename));
+               strncat(real_filename, filename,
+                               PATH_MAX - strlen(real_filename));
+               sym = add_new_file(filename);
+               fp = fopen(real_filename, "r");
+               if (fp == NULL) {
+                       fprintf(stderr, "docproc: ");
+                       perror(real_filename);
+                       exit(1);
+               }
+               while (fgets(line, MAXLINESZ, fp)) {
+                       char *p;
+                       char *e;
+                       if (((p = strstr(line, "EXPORT_SYMBOL_GPL")) != NULL) ||
+                            ((p = strstr(line, "EXPORT_SYMBOL")) != NULL)) {
+                               /* Skip EXPORT_SYMBOL{_GPL} */
+                               while (isalnum(*p) || *p == '_')
+                                       p++;
+                               /* Remove parentheses & additional whitespace */
+                               while (isspace(*p))
+                                       p++;
+                               if (*p != '(')
+                                       continue; /* Syntax error? */
+                               else
+                                       p++;
+                               while (isspace(*p))
+                                       p++;
+                               e = p;
+                               while (isalnum(*e) || *e == '_')
+                                       e++;
+                               *e = '\0';
+                               add_new_symbol(sym, p);
+                       }
+               }
+               fclose(fp);
+       }
+}
+
+/*
+ * Document all external or internal functions in a file.
+ * Call kernel-doc with following parameters:
+ * kernel-doc -docbook -nofunction function_name1 filename
+ * Function names are obtained from all the src files
+ * by find_export_symbols.
+ * intfunc uses -nofunction
+ * extfunc uses -function
+ */
+static void docfunctions(char * filename, char * type)
+{
+       int i,j;
+       int symcnt = 0;
+       int idx = 0;
+       char **vec;
+
+       for (i=0; i <= symfilecnt; i++)
+               symcnt += symfilelist[i].symbolcnt;
+       vec = malloc((2 + 2 * symcnt + 3) * sizeof(char *));
+       if (vec == NULL) {
+               perror("docproc: ");
+               exit(1);
+       }
+       vec[idx++] = KERNELDOC;
+       vec[idx++] = DOCBOOK;
+       vec[idx++] = NODOCSECTIONS;
+       for (i=0; i < symfilecnt; i++) {
+               struct symfile * sym = &symfilelist[i];
+               for (j=0; j < sym->symbolcnt; j++) {
+                       vec[idx++]     = type;
+                       consume_symbol(sym->symbollist[j].name);
+                       vec[idx++] = sym->symbollist[j].name;
+               }
+       }
+       vec[idx++]     = filename;
+       vec[idx] = NULL;
+       printf("<!-- %s -->\n", filename);
+       exec_kernel_doc(vec);
+       fflush(stdout);
+       free(vec);
+}
+static void intfunc(char * filename) { docfunctions(filename, NOFUNCTION); }
+static void extfunc(char * filename) { docfunctions(filename, FUNCTION);   }
+
+/*
+ * Document specific function(s) in a file.
+ * Call kernel-doc with the following parameters:
+ * kernel-doc -docbook -function function1 [-function function2]
+ */
+static void singfunc(char * filename, char * line)
+{
+       char *vec[200]; /* Enough for specific functions */
+        int i, idx = 0;
+        int startofsym = 1;
+       vec[idx++] = KERNELDOC;
+       vec[idx++] = DOCBOOK;
+       vec[idx++] = SHOWNOTFOUND;
+
+        /* Split line up in individual parameters preceded by FUNCTION */
+        for (i=0; line[i]; i++) {
+                if (isspace(line[i])) {
+                        line[i] = '\0';
+                        startofsym = 1;
+                        continue;
+                }
+                if (startofsym) {
+                        startofsym = 0;
+                        vec[idx++] = FUNCTION;
+                        vec[idx++] = &line[i];
+                }
+        }
+       for (i = 0; i < idx; i++) {
+               if (strcmp(vec[i], FUNCTION))
+                       continue;
+               consume_symbol(vec[i + 1]);
+       }
+       vec[idx++] = filename;
+       vec[idx] = NULL;
+       exec_kernel_doc(vec);
+}
+
+/*
+ * Insert specific documentation section from a file.
+ * Call kernel-doc with the following parameters:
+ * kernel-doc -docbook -function "doc section" filename
+ */
+static void docsect(char *filename, char *line)
+{
+       /* kerneldoc -docbook -show-not-found -function "section" file NULL */
+       char *vec[7];
+       char *s;
+
+       for (s = line; *s; s++)
+               if (*s == '\n')
+                       *s = '\0';
+
+       if (asprintf(&s, "DOC: %s", line) < 0) {
+               perror("asprintf");
+               exit(1);
+       }
+       consume_symbol(s);
+       free(s);
+
+       vec[0] = KERNELDOC;
+       vec[1] = DOCBOOK;
+       vec[2] = SHOWNOTFOUND;
+       vec[3] = FUNCTION;
+       vec[4] = line;
+       vec[5] = filename;
+       vec[6] = NULL;
+       exec_kernel_doc(vec);
+}
+
+static void find_all_symbols(char *filename)
+{
+       char *vec[4]; /* kerneldoc -list file NULL */
+       pid_t pid;
+       int ret, i, count, start;
+       char real_filename[PATH_MAX + 1];
+       int pipefd[2];
+       char *data, *str;
+       size_t data_len = 0;
+
+       vec[0] = KERNELDOC;
+       vec[1] = LIST;
+       vec[2] = filename;
+       vec[3] = NULL;
+
+       if (pipe(pipefd)) {
+               perror("pipe");
+               exit(1);
+       }
+
+       switch (pid=fork()) {
+               case -1:
+                       perror("fork");
+                       exit(1);
+               case  0:
+                       close(pipefd[0]);
+                       dup2(pipefd[1], 1);
+                       memset(real_filename, 0, sizeof(real_filename));
+                       strncat(real_filename, kernsrctree, PATH_MAX);
+                       strncat(real_filename, "/" KERNELDOCPATH KERNELDOC,
+                                       PATH_MAX - strlen(real_filename));
+                       execvp(real_filename, vec);
+                       fprintf(stderr, "exec ");
+                       perror(real_filename);
+                       exit(1);
+               default:
+                       close(pipefd[1]);
+                       data = malloc(4096);
+                       do {
+                               while ((ret = read(pipefd[0],
+                                                  data + data_len,
+                                                  4096)) > 0) {
+                                       data_len += ret;
+                                       data = realloc(data, data_len + 4096);
+                               }
+                       } while (ret == -EAGAIN);
+                       if (ret != 0) {
+                               perror("read");
+                               exit(1);
+                       }
+                       waitpid(pid, &ret ,0);
+       }
+       if (WIFEXITED(ret))
+               exitstatus |= WEXITSTATUS(ret);
+       else
+               exitstatus = 0xff;
+
+       count = 0;
+       /* poor man's strtok, but with counting */
+       for (i = 0; i < data_len; i++) {
+               if (data[i] == '\n') {
+                       count++;
+                       data[i] = '\0';
+               }
+       }
+       start = all_list_len;
+       all_list_len += count;
+       all_list = realloc(all_list, sizeof(char *) * all_list_len);
+       str = data;
+       for (i = 0; i < data_len && start != all_list_len; i++) {
+               if (data[i] == '\0') {
+                       all_list[start] = str;
+                       str = data + i + 1;
+                       start++;
+               }
+       }
+}
+
+/*
+ * Parse file, calling action specific functions for:
+ * 1) Lines containing !E
+ * 2) Lines containing !I
+ * 3) Lines containing !D
+ * 4) Lines containing !F
+ * 5) Lines containing !P
+ * 6) Lines containing !C
+ * 7) Default lines - lines not matching the above
+ */
+static void parse_file(FILE *infile)
+{
+       char line[MAXLINESZ];
+       char * s;
+       while (fgets(line, MAXLINESZ, infile)) {
+               if (line[0] == '!') {
+                       s = line + 2;
+                       switch (line[1]) {
+                               case 'E':
+                                       while (*s && !isspace(*s)) s++;
+                                       *s = '\0';
+                                       externalfunctions(line+2);
+                                       break;
+                               case 'I':
+                                       while (*s && !isspace(*s)) s++;
+                                       *s = '\0';
+                                       internalfunctions(line+2);
+                                       break;
+                               case 'D':
+                                       while (*s && !isspace(*s)) s++;
+                                        *s = '\0';
+                                        symbolsonly(line+2);
+                                        break;
+                               case 'F':
+                                       /* filename */
+                                       while (*s && !isspace(*s)) s++;
+                                       *s++ = '\0';
+                                        /* function names */
+                                       while (isspace(*s))
+                                               s++;
+                                       singlefunctions(line +2, s);
+                                       break;
+                               case 'P':
+                                       /* filename */
+                                       while (*s && !isspace(*s)) s++;
+                                       *s++ = '\0';
+                                       /* DOC: section name */
+                                       while (isspace(*s))
+                                               s++;
+                                       docsection(line + 2, s);
+                                       break;
+                               case 'C':
+                                       while (*s && !isspace(*s)) s++;
+                                       *s = '\0';
+                                       if (findall)
+                                               findall(line+2);
+                                       break;
+                               default:
+                                       defaultline(line);
+                       }
+               } else {
+                       defaultline(line);
+               }
+       }
+       fflush(stdout);
+}
+
+
+int main(int argc, char *argv[])
+{
+       FILE * infile;
+       int i;
+
+       srctree = getenv("SRCTREE");
+       if (!srctree)
+               srctree = getcwd(NULL, 0);
+       kernsrctree = getenv("KBUILD_SRC");
+       if (!kernsrctree || !*kernsrctree)
+               kernsrctree = srctree;
+       if (argc != 3) {
+               usage();
+               exit(1);
+       }
+       /* Open file, exit on error */
+       infile = fopen(argv[2], "r");
+        if (infile == NULL) {
+                fprintf(stderr, "docproc: ");
+                perror(argv[2]);
+                exit(2);
+        }
+
+       if (strcmp("doc", argv[1]) == 0) {
+               /* Need to do this in two passes.
+                * First pass is used to collect all symbols exported
+                * in the various files;
+                * Second pass generate the documentation.
+                * This is required because some functions are declared
+                * and exported in different files :-((
+                */
+               /* Collect symbols */
+               defaultline       = noaction;
+               internalfunctions = find_export_symbols;
+               externalfunctions = find_export_symbols;
+               symbolsonly       = find_export_symbols;
+               singlefunctions   = noaction2;
+               docsection        = noaction2;
+               findall           = find_all_symbols;
+               parse_file(infile);
+
+               /* Rewind to start from beginning of file again */
+               fseek(infile, 0, SEEK_SET);
+               defaultline       = printline;
+               internalfunctions = intfunc;
+               externalfunctions = extfunc;
+               symbolsonly       = printline;
+               singlefunctions   = singfunc;
+               docsection        = docsect;
+               findall           = NULL;
+
+               parse_file(infile);
+
+               for (i = 0; i < all_list_len; i++) {
+                       if (!all_list[i])
+                               continue;
+                       fprintf(stderr, "Warning: didn't use docs for %s\n",
+                               all_list[i]);
+               }
+       } else if (strcmp("depend", argv[1]) == 0) {
+               /* Create first part of dependency chain
+                * file.tmpl */
+               printf("%s\t", argv[2]);
+               defaultline       = noaction;
+               internalfunctions = adddep;
+               externalfunctions = adddep;
+               symbolsonly       = adddep;
+               singlefunctions   = adddep2;
+               docsection        = adddep2;
+               findall           = adddep;
+               parse_file(infile);
+               printf("\n");
+       } else {
+               fprintf(stderr, "Unknown option: %s\n", argv[1]);
+               exit(1);
+       }
+       fclose(infile);
+       fflush(stdout);
+       return exitstatus;
+}
diff --git a/scripts/kernel-doc b/scripts/kernel-doc
new file mode 100755 (executable)
index 0000000..ba2bafd
--- /dev/null
@@ -0,0 +1,2609 @@
+#!/usr/bin/perl -w
+
+use strict;
+
+## Copyright (c) 1998 Michael Zucchi, All Rights Reserved        ##
+## Copyright (C) 2000, 1  Tim Waugh <twaugh@redhat.com>          ##
+## Copyright (C) 2001  Simon Huggins                             ##
+## Copyright (C) 2005-2012  Randy Dunlap                         ##
+## Copyright (C) 2012  Dan Luedtke                               ##
+##                                                              ##
+## #define enhancements by Armin Kuster <akuster@mvista.com>    ##
+## Copyright (c) 2000 MontaVista Software, Inc.                         ##
+##                                                              ##
+## This software falls under the GNU General Public License.     ##
+## Please read the COPYING file for more information             ##
+
+# 18/01/2001 -         Cleanups
+#              Functions prototyped as foo(void) same as foo()
+#              Stop eval'ing where we don't need to.
+# -- huggie@earth.li
+
+# 27/06/2001 -  Allowed whitespace after initial "/**" and
+#               allowed comments before function declarations.
+# -- Christian Kreibich <ck@whoop.org>
+
+# Still to do:
+#      - add perldoc documentation
+#      - Look more closely at some of the scarier bits :)
+
+# 26/05/2001 -         Support for separate source and object trees.
+#              Return error code.
+#              Keith Owens <kaos@ocs.com.au>
+
+# 23/09/2001 - Added support for typedefs, structs, enums and unions
+#              Support for Context section; can be terminated using empty line
+#              Small fixes (like spaces vs. \s in regex)
+# -- Tim Jansen <tim@tjansen.de>
+
+# 25/07/2012 - Added support for HTML5
+# -- Dan Luedtke <mail@danrl.de>
+
+#
+# This will read a 'c' file and scan for embedded comments in the
+# style of gnome comments (+minor extensions - see below).
+#
+
+# Note: This only supports 'c'.
+
+# usage:
+# kernel-doc [ -docbook | -html | -html5 | -text | -man | -list ]
+#            [ -no-doc-sections ]
+#            [ -function funcname [ -function funcname ...] ]
+#            c file(s)s > outputfile
+# or
+#            [ -nofunction funcname [ -function funcname ...] ]
+#            c file(s)s > outputfile
+#
+#  Set output format using one of -docbook -html -html5 -text or -man.
+#  Default is man.
+#  The -list format is for internal use by docproc.
+#
+#  -no-doc-sections
+#      Do not output DOC: sections
+#
+#  -function funcname
+#      If set, then only generate documentation for the given function(s) or
+#      DOC: section titles.  All other functions and DOC: sections are ignored.
+#
+#  -nofunction funcname
+#      If set, then only generate documentation for the other function(s)/DOC:
+#      sections. Cannot be used together with -function (yes, that's a bug --
+#      perl hackers can fix it 8))
+#
+#  c files - list of 'c' files to process
+#
+#  All output goes to stdout, with errors to stderr.
+
+#
+# format of comments.
+# In the following table, (...)? signifies optional structure.
+#                         (...)* signifies 0 or more structure elements
+# /**
+#  * function_name(:)? (- short description)?
+# (* @parameterx: (description of parameter x)?)*
+# (* a blank line)?
+#  * (Description:)? (Description of function)?
+#  * (section header: (section description)? )*
+#  (*)?*/
+#
+# So .. the trivial example would be:
+#
+# /**
+#  * my_function
+#  */
+#
+# If the Description: header tag is omitted, then there must be a blank line
+# after the last parameter specification.
+# e.g.
+# /**
+#  * my_function - does my stuff
+#  * @my_arg: its mine damnit
+#  *
+#  * Does my stuff explained.
+#  */
+#
+#  or, could also use:
+# /**
+#  * my_function - does my stuff
+#  * @my_arg: its mine damnit
+#  * Description: Does my stuff explained.
+#  */
+# etc.
+#
+# Besides functions you can also write documentation for structs, unions,
+# enums and typedefs. Instead of the function name you must write the name
+# of the declaration;  the struct/union/enum/typedef must always precede
+# the name. Nesting of declarations is not supported.
+# Use the argument mechanism to document members or constants.
+# e.g.
+# /**
+#  * struct my_struct - short description
+#  * @a: first member
+#  * @b: second member
+#  *
+#  * Longer description
+#  */
+# struct my_struct {
+#     int a;
+#     int b;
+# /* private: */
+#     int c;
+# };
+#
+# All descriptions can be multiline, except the short function description.
+#
+# You can also add additional sections. When documenting kernel functions you
+# should document the "Context:" of the function, e.g. whether the functions
+# can be called form interrupts. Unlike other sections you can end it with an
+# empty line.
+# A non-void function should have a "Return:" section describing the return
+# value(s).
+# Example-sections should contain the string EXAMPLE so that they are marked
+# appropriately in DocBook.
+#
+# Example:
+# /**
+#  * user_function - function that can only be called in user context
+#  * @a: some argument
+#  * Context: !in_interrupt()
+#  *
+#  * Some description
+#  * Example:
+#  *    user_function(22);
+#  */
+# ...
+#
+#
+# All descriptive text is further processed, scanning for the following special
+# patterns, which are highlighted appropriately.
+#
+# 'funcname()' - function
+# '$ENVVAR' - environmental variable
+# '&struct_name' - name of a structure (up to two words including 'struct')
+# '@parameter' - name of a parameter
+# '%CONST' - name of a constant.
+
+## init lots of data
+
+my $errors = 0;
+my $warnings = 0;
+my $anon_struct_union = 0;
+
+# match expressions used to find embedded type information
+my $type_constant = '\%([-_\w]+)';
+my $type_func = '(\w+)\(\)';
+my $type_param = '\@(\w+)';
+my $type_struct = '\&((struct\s*)*[_\w]+)';
+my $type_struct_xml = '\\&amp;((struct\s*)*[_\w]+)';
+my $type_env = '(\$\w+)';
+
+# Output conversion substitutions.
+#  One for each output format
+
+# these work fairly well
+my %highlights_html = ( $type_constant, "<i>\$1</i>",
+                       $type_func, "<b>\$1</b>",
+                       $type_struct_xml, "<i>\$1</i>",
+                       $type_env, "<b><i>\$1</i></b>",
+                       $type_param, "<tt><b>\$1</b></tt>" );
+my $local_lt = "\\\\\\\\lt:";
+my $local_gt = "\\\\\\\\gt:";
+my $blankline_html = $local_lt . "p" . $local_gt;      # was "<p>"
+
+# html version 5
+my %highlights_html5 = ( $type_constant, "<span class=\"const\">\$1</span>",
+                       $type_func, "<span class=\"func\">\$1</span>",
+                       $type_struct_xml, "<span class=\"struct\">\$1</span>",
+                       $type_env, "<span class=\"env\">\$1</span>",
+                       $type_param, "<span class=\"param\">\$1</span>" );
+my $blankline_html5 = $local_lt . "br /" . $local_gt;
+
+# XML, docbook format
+my %highlights_xml = ( "([^=])\\\"([^\\\"<]+)\\\"", "\$1<quote>\$2</quote>",
+                       $type_constant, "<constant>\$1</constant>",
+                       $type_func, "<function>\$1</function>",
+                       $type_struct_xml, "<structname>\$1</structname>",
+                       $type_env, "<envar>\$1</envar>",
+                       $type_param, "<parameter>\$1</parameter>" );
+my $blankline_xml = $local_lt . "/para" . $local_gt . $local_lt . "para" . $local_gt . "\n";
+
+# gnome, docbook format
+my %highlights_gnome = ( $type_constant, "<replaceable class=\"option\">\$1</replaceable>",
+                        $type_func, "<function>\$1</function>",
+                        $type_struct, "<structname>\$1</structname>",
+                        $type_env, "<envar>\$1</envar>",
+                        $type_param, "<parameter>\$1</parameter>" );
+my $blankline_gnome = "</para><para>\n";
+
+# these are pretty rough
+my %highlights_man = ( $type_constant, "\$1",
+                      $type_func, "\\\\fB\$1\\\\fP",
+                      $type_struct, "\\\\fI\$1\\\\fP",
+                      $type_param, "\\\\fI\$1\\\\fP" );
+my $blankline_man = "";
+
+# text-mode
+my %highlights_text = ( $type_constant, "\$1",
+                       $type_func, "\$1",
+                       $type_struct, "\$1",
+                       $type_param, "\$1" );
+my $blankline_text = "";
+
+# list mode
+my %highlights_list = ( $type_constant, "\$1",
+                       $type_func, "\$1",
+                       $type_struct, "\$1",
+                       $type_param, "\$1" );
+my $blankline_list = "";
+
+# read arguments
+if ($#ARGV == -1) {
+    usage();
+}
+
+my $kernelversion;
+my $dohighlight = "";
+
+my $verbose = 0;
+my $output_mode = "man";
+my $output_preformatted = 0;
+my $no_doc_sections = 0;
+my %highlights = %highlights_man;
+my $blankline = $blankline_man;
+my $modulename = "Bootloader API";
+my $function_only = 0;
+my $man_date = ('January', 'February', 'March', 'April', 'May', 'June',
+               'July', 'August', 'September', 'October',
+               'November', 'December')[(localtime)[4]] .
+  " " . ((localtime)[5]+1900);
+my $show_not_found = 0;
+
+# Essentially these are globals.
+# They probably want to be tidied up, made more localised or something.
+# CAVEAT EMPTOR!  Some of the others I localised may not want to be, which
+# could cause "use of undefined value" or other bugs.
+my ($function, %function_table, %parametertypes, $declaration_purpose);
+my ($type, $declaration_name, $return_type);
+my ($newsection, $newcontents, $prototype, $brcount, %source_map);
+
+if (defined($ENV{'KBUILD_VERBOSE'})) {
+       $verbose = "$ENV{'KBUILD_VERBOSE'}";
+}
+
+# Generated docbook code is inserted in a template at a point where
+# docbook v3.1 requires a non-zero sequence of RefEntry's; see:
+# http://www.oasis-open.org/docbook/documentation/reference/html/refentry.html
+# We keep track of number of generated entries and generate a dummy
+# if needs be to ensure the expanded template can be postprocessed
+# into html.
+my $section_counter = 0;
+
+my $lineprefix="";
+
+# states
+# 0 - normal code
+# 1 - looking for function name
+# 2 - scanning field start.
+# 3 - scanning prototype.
+# 4 - documentation block
+my $state;
+my $in_doc_sect;
+
+#declaration types: can be
+# 'function', 'struct', 'union', 'enum', 'typedef'
+my $decl_type;
+
+my $doc_special = "\@\%\$\&";
+
+my $doc_start = '^/\*\*\s*$'; # Allow whitespace at end of comment start.
+my $doc_end = '\*/';
+my $doc_com = '\s*\*\s*';
+my $doc_com_body = '\s*\* ?';
+my $doc_decl = $doc_com . '(\w+)';
+my $doc_sect = $doc_com . '([' . $doc_special . ']?[\w\s]+):(.*)';
+my $doc_content = $doc_com_body . '(.*)';
+my $doc_block = $doc_com . 'DOC:\s*(.*)?';
+
+my %constants;
+my %parameterdescs;
+my @parameterlist;
+my %sections;
+my @sectionlist;
+my $sectcheck;
+my $struct_actual;
+
+my $contents = "";
+my $section_default = "Description";   # default section
+my $section_intro = "Introduction";
+my $section = $section_default;
+my $section_context = "Context";
+my $section_return = "Return";
+
+my $undescribed = "-- undescribed --";
+
+reset_state();
+
+while ($ARGV[0] =~ m/^-(.*)/) {
+    my $cmd = shift @ARGV;
+    if ($cmd eq "-html") {
+       $output_mode = "html";
+       %highlights = %highlights_html;
+       $blankline = $blankline_html;
+    } elsif ($cmd eq "-html5") {
+       $output_mode = "html5";
+       %highlights = %highlights_html5;
+       $blankline = $blankline_html5;
+    } elsif ($cmd eq "-man") {
+       $output_mode = "man";
+       %highlights = %highlights_man;
+       $blankline = $blankline_man;
+    } elsif ($cmd eq "-text") {
+       $output_mode = "text";
+       %highlights = %highlights_text;
+       $blankline = $blankline_text;
+    } elsif ($cmd eq "-docbook") {
+       $output_mode = "xml";
+       %highlights = %highlights_xml;
+       $blankline = $blankline_xml;
+    } elsif ($cmd eq "-list") {
+       $output_mode = "list";
+       %highlights = %highlights_list;
+       $blankline = $blankline_list;
+    } elsif ($cmd eq "-gnome") {
+       $output_mode = "gnome";
+       %highlights = %highlights_gnome;
+       $blankline = $blankline_gnome;
+    } elsif ($cmd eq "-module") { # not needed for XML, inherits from calling document
+       $modulename = shift @ARGV;
+    } elsif ($cmd eq "-function") { # to only output specific functions
+       $function_only = 1;
+       $function = shift @ARGV;
+       $function_table{$function} = 1;
+    } elsif ($cmd eq "-nofunction") { # to only output specific functions
+       $function_only = 2;
+       $function = shift @ARGV;
+       $function_table{$function} = 1;
+    } elsif ($cmd eq "-v") {
+       $verbose = 1;
+    } elsif (($cmd eq "-h") || ($cmd eq "--help")) {
+       usage();
+    } elsif ($cmd eq '-no-doc-sections') {
+           $no_doc_sections = 1;
+    } elsif ($cmd eq '-show-not-found') {
+       $show_not_found = 1;
+    }
+}
+
+# continue execution near EOF;
+
+sub usage {
+    print "Usage: $0 [ -docbook | -html | -html5 | -text | -man | -list ]\n";
+    print "         [ -no-doc-sections ]\n";
+    print "         [ -function funcname [ -function funcname ...] ]\n";
+    print "         [ -nofunction funcname [ -nofunction funcname ...] ]\n";
+    print "         [ -v ]\n";
+    print "         c source file(s) > outputfile\n";
+    print "         -v : verbose output, more warnings & other info listed\n";
+    exit 1;
+}
+
+# get kernel version from env
+sub get_kernel_version() {
+    my $version = 'unknown kernel version';
+
+    if (defined($ENV{'U_BOOT_VERSION'})) {
+       $version = $ENV{'U_BOOT_VERSION'};
+    }
+    return $version;
+}
+
+##
+# dumps section contents to arrays/hashes intended for that purpose.
+#
+sub dump_section {
+    my $file = shift;
+    my $name = shift;
+    my $contents = join "\n", @_;
+
+    if ($name =~ m/$type_constant/) {
+       $name = $1;
+#      print STDERR "constant section '$1' = '$contents'\n";
+       $constants{$name} = $contents;
+    } elsif ($name =~ m/$type_param/) {
+#      print STDERR "parameter def '$1' = '$contents'\n";
+       $name = $1;
+       $parameterdescs{$name} = $contents;
+       $sectcheck = $sectcheck . $name . " ";
+    } elsif ($name eq "@\.\.\.") {
+#      print STDERR "parameter def '...' = '$contents'\n";
+       $name = "...";
+       $parameterdescs{$name} = $contents;
+       $sectcheck = $sectcheck . $name . " ";
+    } else {
+#      print STDERR "other section '$name' = '$contents'\n";
+       if (defined($sections{$name}) && ($sections{$name} ne "")) {
+               print STDERR "Error(${file}:$.): duplicate section name '$name'\n";
+               ++$errors;
+       }
+       $sections{$name} = $contents;
+       push @sectionlist, $name;
+    }
+}
+
+##
+# dump DOC: section after checking that it should go out
+#
+sub dump_doc_section {
+    my $file = shift;
+    my $name = shift;
+    my $contents = join "\n", @_;
+
+    if ($no_doc_sections) {
+        return;
+    }
+
+    if (($function_only == 0) ||
+       ( $function_only == 1 && defined($function_table{$name})) ||
+       ( $function_only == 2 && !defined($function_table{$name})))
+    {
+       dump_section($file, $name, $contents);
+       output_blockhead({'sectionlist' => \@sectionlist,
+                         'sections' => \%sections,
+                         'module' => $modulename,
+                         'content-only' => ($function_only != 0), });
+    }
+}
+
+##
+# output function
+#
+# parameterdescs, a hash.
+#  function => "function name"
+#  parameterlist => @list of parameters
+#  parameterdescs => %parameter descriptions
+#  sectionlist => @list of sections
+#  sections => %section descriptions
+#
+
+sub output_highlight {
+    my $contents = join "\n",@_;
+    my $line;
+
+#   DEBUG
+#   if (!defined $contents) {
+#      use Carp;
+#      confess "output_highlight got called with no args?\n";
+#   }
+
+    if ($output_mode eq "html" || $output_mode eq "html5" ||
+       $output_mode eq "xml") {
+       $contents = local_unescape($contents);
+       # convert data read & converted thru xml_escape() into &xyz; format:
+       $contents =~ s/\\\\\\/\&/g;
+    }
+#   print STDERR "contents b4:$contents\n";
+    eval $dohighlight;
+    die $@ if $@;
+#   print STDERR "contents af:$contents\n";
+
+#   strip whitespaces when generating html5
+    if ($output_mode eq "html5") {
+       $contents =~ s/^\s+//;
+       $contents =~ s/\s+$//;
+    }
+    foreach $line (split "\n", $contents) {
+       if (! $output_preformatted) {
+           $line =~ s/^\s*//;
+       }
+       if ($line eq ""){
+           if (! $output_preformatted) {
+               print $lineprefix, local_unescape($blankline);
+           }
+       } else {
+           $line =~ s/\\\\\\/\&/g;
+           if ($output_mode eq "man" && substr($line, 0, 1) eq ".") {
+               print "\\&$line";
+           } else {
+               print $lineprefix, $line;
+           }
+       }
+       print "\n";
+    }
+}
+
+# output sections in html
+sub output_section_html(%) {
+    my %args = %{$_[0]};
+    my $section;
+
+    foreach $section (@{$args{'sectionlist'}}) {
+       print "<h3>$section</h3>\n";
+       print "<blockquote>\n";
+       output_highlight($args{'sections'}{$section});
+       print "</blockquote>\n";
+    }
+}
+
+# output enum in html
+sub output_enum_html(%) {
+    my %args = %{$_[0]};
+    my ($parameter);
+    my $count;
+    print "<h2>enum " . $args{'enum'} . "</h2>\n";
+
+    print "<b>enum " . $args{'enum'} . "</b> {<br>\n";
+    $count = 0;
+    foreach $parameter (@{$args{'parameterlist'}}) {
+       print " <b>" . $parameter . "</b>";
+       if ($count != $#{$args{'parameterlist'}}) {
+           $count++;
+           print ",\n";
+       }
+       print "<br>";
+    }
+    print "};<br>\n";
+
+    print "<h3>Constants</h3>\n";
+    print "<dl>\n";
+    foreach $parameter (@{$args{'parameterlist'}}) {
+       print "<dt><b>" . $parameter . "</b>\n";
+       print "<dd>";
+       output_highlight($args{'parameterdescs'}{$parameter});
+    }
+    print "</dl>\n";
+    output_section_html(@_);
+    print "<hr>\n";
+}
+
+# output typedef in html
+sub output_typedef_html(%) {
+    my %args = %{$_[0]};
+    my ($parameter);
+    my $count;
+    print "<h2>typedef " . $args{'typedef'} . "</h2>\n";
+
+    print "<b>typedef " . $args{'typedef'} . "</b>\n";
+    output_section_html(@_);
+    print "<hr>\n";
+}
+
+# output struct in html
+sub output_struct_html(%) {
+    my %args = %{$_[0]};
+    my ($parameter);
+
+    print "<h2>" . $args{'type'} . " " . $args{'struct'} . " - " . $args{'purpose'} . "</h2>\n";
+    print "<b>" . $args{'type'} . " " . $args{'struct'} . "</b> {<br>\n";
+    foreach $parameter (@{$args{'parameterlist'}}) {
+       if ($parameter =~ /^#/) {
+               print "$parameter<br>\n";
+               next;
+       }
+       my $parameter_name = $parameter;
+       $parameter_name =~ s/\[.*//;
+
+       ($args{'parameterdescs'}{$parameter_name} ne $undescribed) || next;
+       $type = $args{'parametertypes'}{$parameter};
+       if ($type =~ m/([^\(]*\(\*)\s*\)\s*\(([^\)]*)\)/) {
+           # pointer-to-function
+           print "&nbsp; &nbsp; <i>$1</i><b>$parameter</b>) <i>($2)</i>;<br>\n";
+       } elsif ($type =~ m/^(.*?)\s*(:.*)/) {
+           # bitfield
+           print "&nbsp; &nbsp; <i>$1</i> <b>$parameter</b>$2;<br>\n";
+       } else {
+           print "&nbsp; &nbsp; <i>$type</i> <b>$parameter</b>;<br>\n";
+       }
+    }
+    print "};<br>\n";
+
+    print "<h3>Members</h3>\n";
+    print "<dl>\n";
+    foreach $parameter (@{$args{'parameterlist'}}) {
+       ($parameter =~ /^#/) && next;
+
+       my $parameter_name = $parameter;
+       $parameter_name =~ s/\[.*//;
+
+       ($args{'parameterdescs'}{$parameter_name} ne $undescribed) || next;
+       print "<dt><b>" . $parameter . "</b>\n";
+       print "<dd>";
+       output_highlight($args{'parameterdescs'}{$parameter_name});
+    }
+    print "</dl>\n";
+    output_section_html(@_);
+    print "<hr>\n";
+}
+
+# output function in html
+sub output_function_html(%) {
+    my %args = %{$_[0]};
+    my ($parameter, $section);
+    my $count;
+
+    print "<h2>" . $args{'function'} . " - " . $args{'purpose'} . "</h2>\n";
+    print "<i>" . $args{'functiontype'} . "</i>\n";
+    print "<b>" . $args{'function'} . "</b>\n";
+    print "(";
+    $count = 0;
+    foreach $parameter (@{$args{'parameterlist'}}) {
+       $type = $args{'parametertypes'}{$parameter};
+       if ($type =~ m/([^\(]*\(\*)\s*\)\s*\(([^\)]*)\)/) {
+           # pointer-to-function
+           print "<i>$1</i><b>$parameter</b>) <i>($2)</i>";
+       } else {
+           print "<i>" . $type . "</i> <b>" . $parameter . "</b>";
+       }
+       if ($count != $#{$args{'parameterlist'}}) {
+           $count++;
+           print ",\n";
+       }
+    }
+    print ")\n";
+
+    print "<h3>Arguments</h3>\n";
+    print "<dl>\n";
+    foreach $parameter (@{$args{'parameterlist'}}) {
+       my $parameter_name = $parameter;
+       $parameter_name =~ s/\[.*//;
+
+       ($args{'parameterdescs'}{$parameter_name} ne $undescribed) || next;
+       print "<dt><b>" . $parameter . "</b>\n";
+       print "<dd>";
+       output_highlight($args{'parameterdescs'}{$parameter_name});
+    }
+    print "</dl>\n";
+    output_section_html(@_);
+    print "<hr>\n";
+}
+
+# output DOC: block header in html
+sub output_blockhead_html(%) {
+    my %args = %{$_[0]};
+    my ($parameter, $section);
+    my $count;
+
+    foreach $section (@{$args{'sectionlist'}}) {
+       print "<h3>$section</h3>\n";
+       print "<ul>\n";
+       output_highlight($args{'sections'}{$section});
+       print "</ul>\n";
+    }
+    print "<hr>\n";
+}
+
+# output sections in html5
+sub output_section_html5(%) {
+    my %args = %{$_[0]};
+    my $section;
+
+    foreach $section (@{$args{'sectionlist'}}) {
+       print "<section>\n";
+       print "<h1>$section</h1>\n";
+       print "<p>\n";
+       output_highlight($args{'sections'}{$section});
+       print "</p>\n";
+       print "</section>\n";
+    }
+}
+
+# output enum in html5
+sub output_enum_html5(%) {
+    my %args = %{$_[0]};
+    my ($parameter);
+    my $count;
+    my $html5id;
+
+    $html5id = $args{'enum'};
+    $html5id =~ s/[^a-zA-Z0-9\-]+/_/g;
+    print "<article class=\"enum\" id=\"enum:". $html5id . "\">";
+    print "<h1>enum " . $args{'enum'} . "</h1>\n";
+    print "<ol class=\"code\">\n";
+    print "<li>";
+    print "<span class=\"keyword\">enum</span> ";
+    print "<span class=\"identifier\">" . $args{'enum'} . "</span> {";
+    print "</li>\n";
+    $count = 0;
+    foreach $parameter (@{$args{'parameterlist'}}) {
+       print "<li class=\"indent\">";
+       print "<span class=\"param\">" . $parameter . "</span>";
+       if ($count != $#{$args{'parameterlist'}}) {
+           $count++;
+           print ",";
+       }
+       print "</li>\n";
+    }
+    print "<li>};</li>\n";
+    print "</ol>\n";
+
+    print "<section>\n";
+    print "<h1>Constants</h1>\n";
+    print "<dl>\n";
+    foreach $parameter (@{$args{'parameterlist'}}) {
+       print "<dt>" . $parameter . "</dt>\n";
+       print "<dd>";
+       output_highlight($args{'parameterdescs'}{$parameter});
+       print "</dd>\n";
+    }
+    print "</dl>\n";
+    print "</section>\n";
+    output_section_html5(@_);
+    print "</article>\n";
+}
+
+# output typedef in html5
+sub output_typedef_html5(%) {
+    my %args = %{$_[0]};
+    my ($parameter);
+    my $count;
+    my $html5id;
+
+    $html5id = $args{'typedef'};
+    $html5id =~ s/[^a-zA-Z0-9\-]+/_/g;
+    print "<article class=\"typedef\" id=\"typedef:" . $html5id . "\">\n";
+    print "<h1>typedef " . $args{'typedef'} . "</h1>\n";
+
+    print "<ol class=\"code\">\n";
+    print "<li>";
+    print "<span class=\"keyword\">typedef</span> ";
+    print "<span class=\"identifier\">" . $args{'typedef'} . "</span>";
+    print "</li>\n";
+    print "</ol>\n";
+    output_section_html5(@_);
+    print "</article>\n";
+}
+
+# output struct in html5
+sub output_struct_html5(%) {
+    my %args = %{$_[0]};
+    my ($parameter);
+    my $html5id;
+
+    $html5id = $args{'struct'};
+    $html5id =~ s/[^a-zA-Z0-9\-]+/_/g;
+    print "<article class=\"struct\" id=\"struct:" . $html5id . "\">\n";
+    print "<hgroup>\n";
+    print "<h1>" . $args{'type'} . " " . $args{'struct'} . "</h1>";
+    print "<h2>". $args{'purpose'} . "</h2>\n";
+    print "</hgroup>\n";
+    print "<ol class=\"code\">\n";
+    print "<li>";
+    print "<span class=\"type\">" . $args{'type'} . "</span> ";
+    print "<span class=\"identifier\">" . $args{'struct'} . "</span> {";
+    print "</li>\n";
+    foreach $parameter (@{$args{'parameterlist'}}) {
+       print "<li class=\"indent\">";
+       if ($parameter =~ /^#/) {
+               print "<span class=\"param\">" . $parameter ."</span>\n";
+               print "</li>\n";
+               next;
+       }
+       my $parameter_name = $parameter;
+       $parameter_name =~ s/\[.*//;
+
+       ($args{'parameterdescs'}{$parameter_name} ne $undescribed) || next;
+       $type = $args{'parametertypes'}{$parameter};
+       if ($type =~ m/([^\(]*\(\*)\s*\)\s*\(([^\)]*)\)/) {
+           # pointer-to-function
+           print "<span class=\"type\">$1</span> ";
+           print "<span class=\"param\">$parameter</span>";
+           print "<span class=\"type\">)</span> ";
+           print "(<span class=\"args\">$2</span>);";
+       } elsif ($type =~ m/^(.*?)\s*(:.*)/) {
+           # bitfield
+           print "<span class=\"type\">$1</span> ";
+           print "<span class=\"param\">$parameter</span>";
+           print "<span class=\"bits\">$2</span>;";
+       } else {
+           print "<span class=\"type\">$type</span> ";
+           print "<span class=\"param\">$parameter</span>;";
+       }
+       print "</li>\n";
+    }
+    print "<li>};</li>\n";
+    print "</ol>\n";
+
+    print "<section>\n";
+    print "<h1>Members</h1>\n";
+    print "<dl>\n";
+    foreach $parameter (@{$args{'parameterlist'}}) {
+       ($parameter =~ /^#/) && next;
+
+       my $parameter_name = $parameter;
+       $parameter_name =~ s/\[.*//;
+
+       ($args{'parameterdescs'}{$parameter_name} ne $undescribed) || next;
+       print "<dt>" . $parameter . "</dt>\n";
+       print "<dd>";
+       output_highlight($args{'parameterdescs'}{$parameter_name});
+       print "</dd>\n";
+    }
+    print "</dl>\n";
+    print "</section>\n";
+    output_section_html5(@_);
+    print "</article>\n";
+}
+
+# output function in html5
+sub output_function_html5(%) {
+    my %args = %{$_[0]};
+    my ($parameter, $section);
+    my $count;
+    my $html5id;
+
+    $html5id = $args{'function'};
+    $html5id =~ s/[^a-zA-Z0-9\-]+/_/g;
+    print "<article class=\"function\" id=\"func:". $html5id . "\">\n";
+    print "<hgroup>\n";
+    print "<h1>" . $args{'function'} . "</h1>";
+    print "<h2>" . $args{'purpose'} . "</h2>\n";
+    print "</hgroup>\n";
+    print "<ol class=\"code\">\n";
+    print "<li>";
+    print "<span class=\"type\">" . $args{'functiontype'} . "</span> ";
+    print "<span class=\"identifier\">" . $args{'function'} . "</span> (";
+    print "</li>";
+    $count = 0;
+    foreach $parameter (@{$args{'parameterlist'}}) {
+       print "<li class=\"indent\">";
+       $type = $args{'parametertypes'}{$parameter};
+       if ($type =~ m/([^\(]*\(\*)\s*\)\s*\(([^\)]*)\)/) {
+           # pointer-to-function
+           print "<span class=\"type\">$1</span> ";
+           print "<span class=\"param\">$parameter</span>";
+           print "<span class=\"type\">)</span> ";
+           print "(<span class=\"args\">$2</span>)";
+       } else {
+           print "<span class=\"type\">$type</span> ";
+           print "<span class=\"param\">$parameter</span>";
+       }
+       if ($count != $#{$args{'parameterlist'}}) {
+           $count++;
+           print ",";
+       }
+       print "</li>\n";
+    }
+    print "<li>)</li>\n";
+    print "</ol>\n";
+
+    print "<section>\n";
+    print "<h1>Arguments</h1>\n";
+    print "<p>\n";
+    print "<dl>\n";
+    foreach $parameter (@{$args{'parameterlist'}}) {
+       my $parameter_name = $parameter;
+       $parameter_name =~ s/\[.*//;
+
+       ($args{'parameterdescs'}{$parameter_name} ne $undescribed) || next;
+       print "<dt>" . $parameter . "</dt>\n";
+       print "<dd>";
+       output_highlight($args{'parameterdescs'}{$parameter_name});
+       print "</dd>\n";
+    }
+    print "</dl>\n";
+    print "</section>\n";
+    output_section_html5(@_);
+    print "</article>\n";
+}
+
+# output DOC: block header in html5
+sub output_blockhead_html5(%) {
+    my %args = %{$_[0]};
+    my ($parameter, $section);
+    my $count;
+    my $html5id;
+
+    foreach $section (@{$args{'sectionlist'}}) {
+       $html5id = $section;
+       $html5id =~ s/[^a-zA-Z0-9\-]+/_/g;
+       print "<article class=\"doc\" id=\"doc:". $html5id . "\">\n";
+       print "<h1>$section</h1>\n";
+       print "<p>\n";
+       output_highlight($args{'sections'}{$section});
+       print "</p>\n";
+    }
+    print "</article>\n";
+}
+
+sub output_section_xml(%) {
+    my %args = %{$_[0]};
+    my $section;
+    # print out each section
+    $lineprefix="   ";
+    foreach $section (@{$args{'sectionlist'}}) {
+       print "<refsect1>\n";
+       print "<title>$section</title>\n";
+       if ($section =~ m/EXAMPLE/i) {
+           print "<informalexample><programlisting>\n";
+           $output_preformatted = 1;
+       } else {
+           print "<para>\n";
+       }
+       output_highlight($args{'sections'}{$section});
+       $output_preformatted = 0;
+       if ($section =~ m/EXAMPLE/i) {
+           print "</programlisting></informalexample>\n";
+       } else {
+           print "</para>\n";
+       }
+       print "</refsect1>\n";
+    }
+}
+
+# output function in XML DocBook
+sub output_function_xml(%) {
+    my %args = %{$_[0]};
+    my ($parameter, $section);
+    my $count;
+    my $id;
+
+    $id = "API-" . $args{'function'};
+    $id =~ s/[^A-Za-z0-9]/-/g;
+
+    print "<refentry id=\"$id\">\n";
+    print "<refentryinfo>\n";
+    print " <title>U-BOOT</title>\n";
+    print " <productname>Bootloader Hackers Manual</productname>\n";
+    print " <date>$man_date</date>\n";
+    print "</refentryinfo>\n";
+    print "<refmeta>\n";
+    print " <refentrytitle><phrase>" . $args{'function'} . "</phrase></refentrytitle>\n";
+    print " <manvolnum>9</manvolnum>\n";
+    print " <refmiscinfo class=\"version\">" . $kernelversion . "</refmiscinfo>\n";
+    print "</refmeta>\n";
+    print "<refnamediv>\n";
+    print " <refname>" . $args{'function'} . "</refname>\n";
+    print " <refpurpose>\n";
+    print "  ";
+    output_highlight ($args{'purpose'});
+    print " </refpurpose>\n";
+    print "</refnamediv>\n";
+
+    print "<refsynopsisdiv>\n";
+    print " <title>Synopsis</title>\n";
+    print "  <funcsynopsis><funcprototype>\n";
+    print "   <funcdef>" . $args{'functiontype'} . " ";
+    print "<function>" . $args{'function'} . " </function></funcdef>\n";
+
+    $count = 0;
+    if ($#{$args{'parameterlist'}} >= 0) {
+       foreach $parameter (@{$args{'parameterlist'}}) {
+           $type = $args{'parametertypes'}{$parameter};
+           if ($type =~ m/([^\(]*\(\*)\s*\)\s*\(([^\)]*)\)/) {
+               # pointer-to-function
+               print "   <paramdef>$1<parameter>$parameter</parameter>)\n";
+               print "     <funcparams>$2</funcparams></paramdef>\n";
+           } else {
+               print "   <paramdef>" . $type;
+               print " <parameter>$parameter</parameter></paramdef>\n";
+           }
+       }
+    } else {
+       print "  <void/>\n";
+    }
+    print "  </funcprototype></funcsynopsis>\n";
+    print "</refsynopsisdiv>\n";
+
+    # print parameters
+    print "<refsect1>\n <title>Arguments</title>\n";
+    if ($#{$args{'parameterlist'}} >= 0) {
+       print " <variablelist>\n";
+       foreach $parameter (@{$args{'parameterlist'}}) {
+           my $parameter_name = $parameter;
+           $parameter_name =~ s/\[.*//;
+
+           print "  <varlistentry>\n   <term><parameter>$parameter</parameter></term>\n";
+           print "   <listitem>\n    <para>\n";
+           $lineprefix="     ";
+           output_highlight($args{'parameterdescs'}{$parameter_name});
+           print "    </para>\n   </listitem>\n  </varlistentry>\n";
+       }
+       print " </variablelist>\n";
+    } else {
+       print " <para>\n  None\n </para>\n";
+    }
+    print "</refsect1>\n";
+
+    output_section_xml(@_);
+    print "</refentry>\n\n";
+}
+
+# output struct in XML DocBook
+sub output_struct_xml(%) {
+    my %args = %{$_[0]};
+    my ($parameter, $section);
+    my $id;
+
+    $id = "API-struct-" . $args{'struct'};
+    $id =~ s/[^A-Za-z0-9]/-/g;
+
+    print "<refentry id=\"$id\">\n";
+    print "<refentryinfo>\n";
+    print " <title>U-BOOT</title>\n";
+    print " <productname>Bootloader Hackers Manual</productname>\n";
+    print " <date>$man_date</date>\n";
+    print "</refentryinfo>\n";
+    print "<refmeta>\n";
+    print " <refentrytitle><phrase>" . $args{'type'} . " " . $args{'struct'} . "</phrase></refentrytitle>\n";
+    print " <manvolnum>9</manvolnum>\n";
+    print " <refmiscinfo class=\"version\">" . $kernelversion . "</refmiscinfo>\n";
+    print "</refmeta>\n";
+    print "<refnamediv>\n";
+    print " <refname>" . $args{'type'} . " " . $args{'struct'} . "</refname>\n";
+    print " <refpurpose>\n";
+    print "  ";
+    output_highlight ($args{'purpose'});
+    print " </refpurpose>\n";
+    print "</refnamediv>\n";
+
+    print "<refsynopsisdiv>\n";
+    print " <title>Synopsis</title>\n";
+    print "  <programlisting>\n";
+    print $args{'type'} . " " . $args{'struct'} . " {\n";
+    foreach $parameter (@{$args{'parameterlist'}}) {
+       if ($parameter =~ /^#/) {
+           my $prm = $parameter;
+           # convert data read & converted thru xml_escape() into &xyz; format:
+           # This allows us to have #define macros interspersed in a struct.
+           $prm =~ s/\\\\\\/\&/g;
+           print "$prm\n";
+           next;
+       }
+
+       my $parameter_name = $parameter;
+       $parameter_name =~ s/\[.*//;
+
+       defined($args{'parameterdescs'}{$parameter_name}) || next;
+       ($args{'parameterdescs'}{$parameter_name} ne $undescribed) || next;
+       $type = $args{'parametertypes'}{$parameter};
+       if ($type =~ m/([^\(]*\(\*)\s*\)\s*\(([^\)]*)\)/) {
+           # pointer-to-function
+           print "  $1 $parameter) ($2);\n";
+       } elsif ($type =~ m/^(.*?)\s*(:.*)/) {
+           # bitfield
+           print "  $1 $parameter$2;\n";
+       } else {
+           print "  " . $type . " " . $parameter . ";\n";
+       }
+    }
+    print "};";
+    print "  </programlisting>\n";
+    print "</refsynopsisdiv>\n";
+
+    print " <refsect1>\n";
+    print "  <title>Members</title>\n";
+
+    if ($#{$args{'parameterlist'}} >= 0) {
+    print "  <variablelist>\n";
+    foreach $parameter (@{$args{'parameterlist'}}) {
+      ($parameter =~ /^#/) && next;
+
+      my $parameter_name = $parameter;
+      $parameter_name =~ s/\[.*//;
+
+      defined($args{'parameterdescs'}{$parameter_name}) || next;
+      ($args{'parameterdescs'}{$parameter_name} ne $undescribed) || next;
+      print "    <varlistentry>";
+      print "      <term>$parameter</term>\n";
+      print "      <listitem><para>\n";
+      output_highlight($args{'parameterdescs'}{$parameter_name});
+      print "      </para></listitem>\n";
+      print "    </varlistentry>\n";
+    }
+    print "  </variablelist>\n";
+    } else {
+       print " <para>\n  None\n </para>\n";
+    }
+    print " </refsect1>\n";
+
+    output_section_xml(@_);
+
+    print "</refentry>\n\n";
+}
+
+# output enum in XML DocBook
+sub output_enum_xml(%) {
+    my %args = %{$_[0]};
+    my ($parameter, $section);
+    my $count;
+    my $id;
+
+    $id = "API-enum-" . $args{'enum'};
+    $id =~ s/[^A-Za-z0-9]/-/g;
+
+    print "<refentry id=\"$id\">\n";
+    print "<refentryinfo>\n";
+    print " <title>U-BOOT</title>\n";
+    print " <productname>Bootloader Hackers Manual</productname>\n";
+    print " <date>$man_date</date>\n";
+    print "</refentryinfo>\n";
+    print "<refmeta>\n";
+    print " <refentrytitle><phrase>enum " . $args{'enum'} . "</phrase></refentrytitle>\n";
+    print " <manvolnum>9</manvolnum>\n";
+    print " <refmiscinfo class=\"version\">" . $kernelversion . "</refmiscinfo>\n";
+    print "</refmeta>\n";
+    print "<refnamediv>\n";
+    print " <refname>enum " . $args{'enum'} . "</refname>\n";
+    print " <refpurpose>\n";
+    print "  ";
+    output_highlight ($args{'purpose'});
+    print " </refpurpose>\n";
+    print "</refnamediv>\n";
+
+    print "<refsynopsisdiv>\n";
+    print " <title>Synopsis</title>\n";
+    print "  <programlisting>\n";
+    print "enum " . $args{'enum'} . " {\n";
+    $count = 0;
+    foreach $parameter (@{$args{'parameterlist'}}) {
+       print "  $parameter";
+       if ($count != $#{$args{'parameterlist'}}) {
+           $count++;
+           print ",";
+       }
+       print "\n";
+    }
+    print "};";
+    print "  </programlisting>\n";
+    print "</refsynopsisdiv>\n";
+
+    print "<refsect1>\n";
+    print " <title>Constants</title>\n";
+    print "  <variablelist>\n";
+    foreach $parameter (@{$args{'parameterlist'}}) {
+      my $parameter_name = $parameter;
+      $parameter_name =~ s/\[.*//;
+
+      print "    <varlistentry>";
+      print "      <term>$parameter</term>\n";
+      print "      <listitem><para>\n";
+      output_highlight($args{'parameterdescs'}{$parameter_name});
+      print "      </para></listitem>\n";
+      print "    </varlistentry>\n";
+    }
+    print "  </variablelist>\n";
+    print "</refsect1>\n";
+
+    output_section_xml(@_);
+
+    print "</refentry>\n\n";
+}
+
+# output typedef in XML DocBook
+sub output_typedef_xml(%) {
+    my %args = %{$_[0]};
+    my ($parameter, $section);
+    my $id;
+
+    $id = "API-typedef-" . $args{'typedef'};
+    $id =~ s/[^A-Za-z0-9]/-/g;
+
+    print "<refentry id=\"$id\">\n";
+    print "<refentryinfo>\n";
+    print " <title>U-BOOT</title>\n";
+    print " <productname>Bootloader Hackers Manual</productname>\n";
+    print " <date>$man_date</date>\n";
+    print "</refentryinfo>\n";
+    print "<refmeta>\n";
+    print " <refentrytitle><phrase>typedef " . $args{'typedef'} . "</phrase></refentrytitle>\n";
+    print " <manvolnum>9</manvolnum>\n";
+    print "</refmeta>\n";
+    print "<refnamediv>\n";
+    print " <refname>typedef " . $args{'typedef'} . "</refname>\n";
+    print " <refpurpose>\n";
+    print "  ";
+    output_highlight ($args{'purpose'});
+    print " </refpurpose>\n";
+    print "</refnamediv>\n";
+
+    print "<refsynopsisdiv>\n";
+    print " <title>Synopsis</title>\n";
+    print "  <synopsis>typedef " . $args{'typedef'} . ";</synopsis>\n";
+    print "</refsynopsisdiv>\n";
+
+    output_section_xml(@_);
+
+    print "</refentry>\n\n";
+}
+
+# output in XML DocBook
+sub output_blockhead_xml(%) {
+    my %args = %{$_[0]};
+    my ($parameter, $section);
+    my $count;
+
+    my $id = $args{'module'};
+    $id =~ s/[^A-Za-z0-9]/-/g;
+
+    # print out each section
+    $lineprefix="   ";
+    foreach $section (@{$args{'sectionlist'}}) {
+       if (!$args{'content-only'}) {
+               print "<refsect1>\n <title>$section</title>\n";
+       }
+       if ($section =~ m/EXAMPLE/i) {
+           print "<example><para>\n";
+           $output_preformatted = 1;
+       } else {
+           print "<para>\n";
+       }
+       output_highlight($args{'sections'}{$section});
+       $output_preformatted = 0;
+       if ($section =~ m/EXAMPLE/i) {
+           print "</para></example>\n";
+       } else {
+           print "</para>";
+       }
+       if (!$args{'content-only'}) {
+               print "\n</refsect1>\n";
+       }
+    }
+
+    print "\n\n";
+}
+
+# output in XML DocBook
+sub output_function_gnome {
+    my %args = %{$_[0]};
+    my ($parameter, $section);
+    my $count;
+    my $id;
+
+    $id = $args{'module'} . "-" . $args{'function'};
+    $id =~ s/[^A-Za-z0-9]/-/g;
+
+    print "<sect2>\n";
+    print " <title id=\"$id\">" . $args{'function'} . "</title>\n";
+
+    print "  <funcsynopsis>\n";
+    print "   <funcdef>" . $args{'functiontype'} . " ";
+    print "<function>" . $args{'function'} . " ";
+    print "</function></funcdef>\n";
+
+    $count = 0;
+    if ($#{$args{'parameterlist'}} >= 0) {
+       foreach $parameter (@{$args{'parameterlist'}}) {
+           $type = $args{'parametertypes'}{$parameter};
+           if ($type =~ m/([^\(]*\(\*)\s*\)\s*\(([^\)]*)\)/) {
+               # pointer-to-function
+               print "   <paramdef>$1 <parameter>$parameter</parameter>)\n";
+               print "     <funcparams>$2</funcparams></paramdef>\n";
+           } else {
+               print "   <paramdef>" . $type;
+               print " <parameter>$parameter</parameter></paramdef>\n";
+           }
+       }
+    } else {
+       print "  <void>\n";
+    }
+    print "  </funcsynopsis>\n";
+    if ($#{$args{'parameterlist'}} >= 0) {
+       print " <informaltable pgwide=\"1\" frame=\"none\" role=\"params\">\n";
+       print "<tgroup cols=\"2\">\n";
+       print "<colspec colwidth=\"2*\">\n";
+       print "<colspec colwidth=\"8*\">\n";
+       print "<tbody>\n";
+       foreach $parameter (@{$args{'parameterlist'}}) {
+           my $parameter_name = $parameter;
+           $parameter_name =~ s/\[.*//;
+
+           print "  <row><entry align=\"right\"><parameter>$parameter</parameter></entry>\n";
+           print "   <entry>\n";
+           $lineprefix="     ";
+           output_highlight($args{'parameterdescs'}{$parameter_name});
+           print "    </entry></row>\n";
+       }
+       print " </tbody></tgroup></informaltable>\n";
+    } else {
+       print " <para>\n  None\n </para>\n";
+    }
+
+    # print out each section
+    $lineprefix="   ";
+    foreach $section (@{$args{'sectionlist'}}) {
+       print "<simplesect>\n <title>$section</title>\n";
+       if ($section =~ m/EXAMPLE/i) {
+           print "<example><programlisting>\n";
+           $output_preformatted = 1;
+       } else {
+       }
+       print "<para>\n";
+       output_highlight($args{'sections'}{$section});
+       $output_preformatted = 0;
+       print "</para>\n";
+       if ($section =~ m/EXAMPLE/i) {
+           print "</programlisting></example>\n";
+       } else {
+       }
+       print " </simplesect>\n";
+    }
+
+    print "</sect2>\n\n";
+}
+
+##
+# output function in man
+sub output_function_man(%) {
+    my %args = %{$_[0]};
+    my ($parameter, $section);
+    my $count;
+
+    print ".TH \"$args{'function'}\" 9 \"$args{'function'}\" \"$man_date\" \"Bootloader Hacker's Manual\" U-BOOT\n";
+
+    print ".SH NAME\n";
+    print $args{'function'} . " \\- " . $args{'purpose'} . "\n";
+
+    print ".SH SYNOPSIS\n";
+    if ($args{'functiontype'} ne "") {
+       print ".B \"" . $args{'functiontype'} . "\" " . $args{'function'} . "\n";
+    } else {
+       print ".B \"" . $args{'function'} . "\n";
+    }
+    $count = 0;
+    my $parenth = "(";
+    my $post = ",";
+    foreach my $parameter (@{$args{'parameterlist'}}) {
+       if ($count == $#{$args{'parameterlist'}}) {
+           $post = ");";
+       }
+       $type = $args{'parametertypes'}{$parameter};
+       if ($type =~ m/([^\(]*\(\*)\s*\)\s*\(([^\)]*)\)/) {
+           # pointer-to-function
+           print ".BI \"" . $parenth . $1 . "\" " . $parameter . " \") (" . $2 . ")" . $post . "\"\n";
+       } else {
+           $type =~ s/([^\*])$/$1 /;
+           print ".BI \"" . $parenth . $type . "\" " . $parameter . " \"" . $post . "\"\n";
+       }
+       $count++;
+       $parenth = "";
+    }
+
+    print ".SH ARGUMENTS\n";
+    foreach $parameter (@{$args{'parameterlist'}}) {
+       my $parameter_name = $parameter;
+       $parameter_name =~ s/\[.*//;
+
+       print ".IP \"" . $parameter . "\" 12\n";
+       output_highlight($args{'parameterdescs'}{$parameter_name});
+    }
+    foreach $section (@{$args{'sectionlist'}}) {
+       print ".SH \"", uc $section, "\"\n";
+       output_highlight($args{'sections'}{$section});
+    }
+}
+
+##
+# output enum in man
+sub output_enum_man(%) {
+    my %args = %{$_[0]};
+    my ($parameter, $section);
+    my $count;
+
+    print ".TH \"$args{'module'}\" 9 \"enum $args{'enum'}\" \"$man_date\" \"API Manual\" U-BOOT\n";
+
+    print ".SH NAME\n";
+    print "enum " . $args{'enum'} . " \\- " . $args{'purpose'} . "\n";
+
+    print ".SH SYNOPSIS\n";
+    print "enum " . $args{'enum'} . " {\n";
+    $count = 0;
+    foreach my $parameter (@{$args{'parameterlist'}}) {
+       print ".br\n.BI \"    $parameter\"\n";
+       if ($count == $#{$args{'parameterlist'}}) {
+           print "\n};\n";
+           last;
+       }
+       else {
+           print ", \n.br\n";
+       }
+       $count++;
+    }
+
+    print ".SH Constants\n";
+    foreach $parameter (@{$args{'parameterlist'}}) {
+       my $parameter_name = $parameter;
+       $parameter_name =~ s/\[.*//;
+
+       print ".IP \"" . $parameter . "\" 12\n";
+       output_highlight($args{'parameterdescs'}{$parameter_name});
+    }
+    foreach $section (@{$args{'sectionlist'}}) {
+       print ".SH \"$section\"\n";
+       output_highlight($args{'sections'}{$section});
+    }
+}
+
+##
+# output struct in man
+sub output_struct_man(%) {
+    my %args = %{$_[0]};
+    my ($parameter, $section);
+
+    print ".TH \"$args{'module'}\" 9 \"" . $args{'type'} . " " . $args{'struct'} . "\" \"$man_date\" \"API Manual\" U-BOOT\n";
+
+    print ".SH NAME\n";
+    print $args{'type'} . " " . $args{'struct'} . " \\- " . $args{'purpose'} . "\n";
+
+    print ".SH SYNOPSIS\n";
+    print $args{'type'} . " " . $args{'struct'} . " {\n.br\n";
+
+    foreach my $parameter (@{$args{'parameterlist'}}) {
+       if ($parameter =~ /^#/) {
+           print ".BI \"$parameter\"\n.br\n";
+           next;
+       }
+       my $parameter_name = $parameter;
+       $parameter_name =~ s/\[.*//;
+
+       ($args{'parameterdescs'}{$parameter_name} ne $undescribed) || next;
+       $type = $args{'parametertypes'}{$parameter};
+       if ($type =~ m/([^\(]*\(\*)\s*\)\s*\(([^\)]*)\)/) {
+           # pointer-to-function
+           print ".BI \"    " . $1 . "\" " . $parameter . " \") (" . $2 . ")" . "\"\n;\n";
+       } elsif ($type =~ m/^(.*?)\s*(:.*)/) {
+           # bitfield
+           print ".BI \"    " . $1 . "\ \" " . $parameter . $2 . " \"" . "\"\n;\n";
+       } else {
+           $type =~ s/([^\*])$/$1 /;
+           print ".BI \"    " . $type . "\" " . $parameter . " \"" . "\"\n;\n";
+       }
+       print "\n.br\n";
+    }
+    print "};\n.br\n";
+
+    print ".SH Members\n";
+    foreach $parameter (@{$args{'parameterlist'}}) {
+       ($parameter =~ /^#/) && next;
+
+       my $parameter_name = $parameter;
+       $parameter_name =~ s/\[.*//;
+
+       ($args{'parameterdescs'}{$parameter_name} ne $undescribed) || next;
+       print ".IP \"" . $parameter . "\" 12\n";
+       output_highlight($args{'parameterdescs'}{$parameter_name});
+    }
+    foreach $section (@{$args{'sectionlist'}}) {
+       print ".SH \"$section\"\n";
+       output_highlight($args{'sections'}{$section});
+    }
+}
+
+##
+# output typedef in man
+sub output_typedef_man(%) {
+    my %args = %{$_[0]};
+    my ($parameter, $section);
+
+    print ".TH \"$args{'module'}\" 9 \"$args{'typedef'}\" \"$man_date\" \"API Manual\" U-BOOT\n";
+
+    print ".SH NAME\n";
+    print "typedef " . $args{'typedef'} . " \\- " . $args{'purpose'} . "\n";
+
+    foreach $section (@{$args{'sectionlist'}}) {
+       print ".SH \"$section\"\n";
+       output_highlight($args{'sections'}{$section});
+    }
+}
+
+sub output_blockhead_man(%) {
+    my %args = %{$_[0]};
+    my ($parameter, $section);
+    my $count;
+
+    print ".TH \"$args{'module'}\" 9 \"$args{'module'}\" \"$man_date\" \"API Manual\" U-BOOT\n";
+
+    foreach $section (@{$args{'sectionlist'}}) {
+       print ".SH \"$section\"\n";
+       output_highlight($args{'sections'}{$section});
+    }
+}
+
+##
+# output in text
+sub output_function_text(%) {
+    my %args = %{$_[0]};
+    my ($parameter, $section);
+    my $start;
+
+    print "Name:\n\n";
+    print $args{'function'} . " - " . $args{'purpose'} . "\n";
+
+    print "\nSynopsis:\n\n";
+    if ($args{'functiontype'} ne "") {
+       $start = $args{'functiontype'} . " " . $args{'function'} . " (";
+    } else {
+       $start = $args{'function'} . " (";
+    }
+    print $start;
+
+    my $count = 0;
+    foreach my $parameter (@{$args{'parameterlist'}}) {
+       $type = $args{'parametertypes'}{$parameter};
+       if ($type =~ m/([^\(]*\(\*)\s*\)\s*\(([^\)]*)\)/) {
+           # pointer-to-function
+           print $1 . $parameter . ") (" . $2;
+       } else {
+           print $type . " " . $parameter;
+       }
+       if ($count != $#{$args{'parameterlist'}}) {
+           $count++;
+           print ",\n";
+           print " " x length($start);
+       } else {
+           print ");\n\n";
+       }
+    }
+
+    print "Arguments:\n\n";
+    foreach $parameter (@{$args{'parameterlist'}}) {
+       my $parameter_name = $parameter;
+       $parameter_name =~ s/\[.*//;
+
+       print $parameter . "\n\t" . $args{'parameterdescs'}{$parameter_name} . "\n";
+    }
+    output_section_text(@_);
+}
+
+#output sections in text
+sub output_section_text(%) {
+    my %args = %{$_[0]};
+    my $section;
+
+    print "\n";
+    foreach $section (@{$args{'sectionlist'}}) {
+       print "$section:\n\n";
+       output_highlight($args{'sections'}{$section});
+    }
+    print "\n\n";
+}
+
+# output enum in text
+sub output_enum_text(%) {
+    my %args = %{$_[0]};
+    my ($parameter);
+    my $count;
+    print "Enum:\n\n";
+
+    print "enum " . $args{'enum'} . " - " . $args{'purpose'} . "\n\n";
+    print "enum " . $args{'enum'} . " {\n";
+    $count = 0;
+    foreach $parameter (@{$args{'parameterlist'}}) {
+       print "\t$parameter";
+       if ($count != $#{$args{'parameterlist'}}) {
+           $count++;
+           print ",";
+       }
+       print "\n";
+    }
+    print "};\n\n";
+
+    print "Constants:\n\n";
+    foreach $parameter (@{$args{'parameterlist'}}) {
+       print "$parameter\n\t";
+       print $args{'parameterdescs'}{$parameter} . "\n";
+    }
+
+    output_section_text(@_);
+}
+
+# output typedef in text
+sub output_typedef_text(%) {
+    my %args = %{$_[0]};
+    my ($parameter);
+    my $count;
+    print "Typedef:\n\n";
+
+    print "typedef " . $args{'typedef'} . " - " . $args{'purpose'} . "\n";
+    output_section_text(@_);
+}
+
+# output struct as text
+sub output_struct_text(%) {
+    my %args = %{$_[0]};
+    my ($parameter);
+
+    print $args{'type'} . " " . $args{'struct'} . " - " . $args{'purpose'} . "\n\n";
+    print $args{'type'} . " " . $args{'struct'} . " {\n";
+    foreach $parameter (@{$args{'parameterlist'}}) {
+       if ($parameter =~ /^#/) {
+           print "$parameter\n";
+           next;
+       }
+
+       my $parameter_name = $parameter;
+       $parameter_name =~ s/\[.*//;
+
+       ($args{'parameterdescs'}{$parameter_name} ne $undescribed) || next;
+       $type = $args{'parametertypes'}{$parameter};
+       if ($type =~ m/([^\(]*\(\*)\s*\)\s*\(([^\)]*)\)/) {
+           # pointer-to-function
+           print "\t$1 $parameter) ($2);\n";
+       } elsif ($type =~ m/^(.*?)\s*(:.*)/) {
+           # bitfield
+           print "\t$1 $parameter$2;\n";
+       } else {
+           print "\t" . $type . " " . $parameter . ";\n";
+       }
+    }
+    print "};\n\n";
+
+    print "Members:\n\n";
+    foreach $parameter (@{$args{'parameterlist'}}) {
+       ($parameter =~ /^#/) && next;
+
+       my $parameter_name = $parameter;
+       $parameter_name =~ s/\[.*//;
+
+       ($args{'parameterdescs'}{$parameter_name} ne $undescribed) || next;
+       print "$parameter\n\t";
+       print $args{'parameterdescs'}{$parameter_name} . "\n";
+    }
+    print "\n";
+    output_section_text(@_);
+}
+
+sub output_blockhead_text(%) {
+    my %args = %{$_[0]};
+    my ($parameter, $section);
+
+    foreach $section (@{$args{'sectionlist'}}) {
+       print " $section:\n";
+       print "    -> ";
+       output_highlight($args{'sections'}{$section});
+    }
+}
+
+## list mode output functions
+
+sub output_function_list(%) {
+    my %args = %{$_[0]};
+
+    print $args{'function'} . "\n";
+}
+
+# output enum in list
+sub output_enum_list(%) {
+    my %args = %{$_[0]};
+    print $args{'enum'} . "\n";
+}
+
+# output typedef in list
+sub output_typedef_list(%) {
+    my %args = %{$_[0]};
+    print $args{'typedef'} . "\n";
+}
+
+# output struct as list
+sub output_struct_list(%) {
+    my %args = %{$_[0]};
+
+    print $args{'struct'} . "\n";
+}
+
+sub output_blockhead_list(%) {
+    my %args = %{$_[0]};
+    my ($parameter, $section);
+
+    foreach $section (@{$args{'sectionlist'}}) {
+       print "DOC: $section\n";
+    }
+}
+
+##
+# generic output function for all types (function, struct/union, typedef, enum);
+# calls the generated, variable output_ function name based on
+# functype and output_mode
+sub output_declaration {
+    no strict 'refs';
+    my $name = shift;
+    my $functype = shift;
+    my $func = "output_${functype}_$output_mode";
+    if (($function_only==0) ||
+       ( $function_only == 1 && defined($function_table{$name})) ||
+       ( $function_only == 2 && !defined($function_table{$name})))
+    {
+       &$func(@_);
+       $section_counter++;
+    }
+}
+
+##
+# generic output function - calls the right one based on current output mode.
+sub output_blockhead {
+    no strict 'refs';
+    my $func = "output_blockhead_" . $output_mode;
+    &$func(@_);
+    $section_counter++;
+}
+
+##
+# takes a declaration (struct, union, enum, typedef) and
+# invokes the right handler. NOT called for functions.
+sub dump_declaration($$) {
+    no strict 'refs';
+    my ($prototype, $file) = @_;
+    my $func = "dump_" . $decl_type;
+    &$func(@_);
+}
+
+sub dump_union($$) {
+    dump_struct(@_);
+}
+
+sub dump_struct($$) {
+    my $x = shift;
+    my $file = shift;
+    my $nested;
+
+    if ($x =~ /(struct|union)\s+(\w+)\s*{(.*)}/) {
+       #my $decl_type = $1;
+       $declaration_name = $2;
+       my $members = $3;
+
+       # ignore embedded structs or unions
+       $members =~ s/({.*})//g;
+       $nested = $1;
+
+       # ignore members marked private:
+       $members =~ s/\/\*\s*private:.*?\/\*\s*public:.*?\*\///gos;
+       $members =~ s/\/\*\s*private:.*//gos;
+       # strip comments:
+       $members =~ s/\/\*.*?\*\///gos;
+       $nested =~ s/\/\*.*?\*\///gos;
+       # strip kmemcheck_bitfield_{begin,end}.*;
+       $members =~ s/kmemcheck_bitfield_.*?;//gos;
+       # strip attributes
+       $members =~ s/__aligned\s*\(.+\)//gos;
+
+       create_parameterlist($members, ';', $file);
+       check_sections($file, $declaration_name, "struct", $sectcheck, $struct_actual, $nested);
+
+       output_declaration($declaration_name,
+                          'struct',
+                          {'struct' => $declaration_name,
+                           'module' => $modulename,
+                           'parameterlist' => \@parameterlist,
+                           'parameterdescs' => \%parameterdescs,
+                           'parametertypes' => \%parametertypes,
+                           'sectionlist' => \@sectionlist,
+                           'sections' => \%sections,
+                           'purpose' => $declaration_purpose,
+                           'type' => $decl_type
+                          });
+    }
+    else {
+       print STDERR "Error(${file}:$.): Cannot parse struct or union!\n";
+       ++$errors;
+    }
+}
+
+sub dump_enum($$) {
+    my $x = shift;
+    my $file = shift;
+
+    $x =~ s@/\*.*?\*/@@gos;    # strip comments.
+    $x =~ s/^#\s*define\s+.*$//; # strip #define macros inside enums
+
+    if ($x =~ /enum\s+(\w+)\s*{(.*)}/) {
+       $declaration_name = $1;
+       my $members = $2;
+
+       foreach my $arg (split ',', $members) {
+           $arg =~ s/^\s*(\w+).*/$1/;
+           push @parameterlist, $arg;
+           if (!$parameterdescs{$arg}) {
+               $parameterdescs{$arg} = $undescribed;
+               print STDERR "Warning(${file}:$.): Enum value '$arg' ".
+                   "not described in enum '$declaration_name'\n";
+           }
+
+       }
+
+       output_declaration($declaration_name,
+                          'enum',
+                          {'enum' => $declaration_name,
+                           'module' => $modulename,
+                           'parameterlist' => \@parameterlist,
+                           'parameterdescs' => \%parameterdescs,
+                           'sectionlist' => \@sectionlist,
+                           'sections' => \%sections,
+                           'purpose' => $declaration_purpose
+                          });
+    }
+    else {
+       print STDERR "Error(${file}:$.): Cannot parse enum!\n";
+       ++$errors;
+    }
+}
+
+sub dump_typedef($$) {
+    my $x = shift;
+    my $file = shift;
+
+    $x =~ s@/\*.*?\*/@@gos;    # strip comments.
+    while (($x =~ /\(*.\)\s*;$/) || ($x =~ /\[*.\]\s*;$/)) {
+       $x =~ s/\(*.\)\s*;$/;/;
+       $x =~ s/\[*.\]\s*;$/;/;
+    }
+
+    if ($x =~ /typedef.*\s+(\w+)\s*;/) {
+       $declaration_name = $1;
+
+       output_declaration($declaration_name,
+                          'typedef',
+                          {'typedef' => $declaration_name,
+                           'module' => $modulename,
+                           'sectionlist' => \@sectionlist,
+                           'sections' => \%sections,
+                           'purpose' => $declaration_purpose
+                          });
+    }
+    else {
+       print STDERR "Error(${file}:$.): Cannot parse typedef!\n";
+       ++$errors;
+    }
+}
+
+sub save_struct_actual($) {
+    my $actual = shift;
+
+    # strip all spaces from the actual param so that it looks like one string item
+    $actual =~ s/\s*//g;
+    $struct_actual = $struct_actual . $actual . " ";
+}
+
+sub create_parameterlist($$$) {
+    my $args = shift;
+    my $splitter = shift;
+    my $file = shift;
+    my $type;
+    my $param;
+
+    # temporarily replace commas inside function pointer definition
+    while ($args =~ /(\([^\),]+),/) {
+       $args =~ s/(\([^\),]+),/$1#/g;
+    }
+
+    foreach my $arg (split($splitter, $args)) {
+       # strip comments
+       $arg =~ s/\/\*.*\*\///;
+       # strip leading/trailing spaces
+       $arg =~ s/^\s*//;
+       $arg =~ s/\s*$//;
+       $arg =~ s/\s+/ /;
+
+       if ($arg =~ /^#/) {
+           # Treat preprocessor directive as a typeless variable just to fill
+           # corresponding data structures "correctly". Catch it later in
+           # output_* subs.
+           push_parameter($arg, "", $file);
+       } elsif ($arg =~ m/\(.+\)\s*\(/) {
+           # pointer-to-function
+           $arg =~ tr/#/,/;
+           $arg =~ m/[^\(]+\(\*?\s*(\w*)\s*\)/;
+           $param = $1;
+           $type = $arg;
+           $type =~ s/([^\(]+\(\*?)\s*$param/$1/;
+           save_struct_actual($param);
+           push_parameter($param, $type, $file);
+       } elsif ($arg) {
+           $arg =~ s/\s*:\s*/:/g;
+           $arg =~ s/\s*\[/\[/g;
+
+           my @args = split('\s*,\s*', $arg);
+           if ($args[0] =~ m/\*/) {
+               $args[0] =~ s/(\*+)\s*/ $1/;
+           }
+
+           my @first_arg;
+           if ($args[0] =~ /^(.*\s+)(.*?\[.*\].*)$/) {
+                   shift @args;
+                   push(@first_arg, split('\s+', $1));
+                   push(@first_arg, $2);
+           } else {
+                   @first_arg = split('\s+', shift @args);
+           }
+
+           unshift(@args, pop @first_arg);
+           $type = join " ", @first_arg;
+
+           foreach $param (@args) {
+               if ($param =~ m/^(\*+)\s*(.*)/) {
+                   save_struct_actual($2);
+                   push_parameter($2, "$type $1", $file);
+               }
+               elsif ($param =~ m/(.*?):(\d+)/) {
+                   if ($type ne "") { # skip unnamed bit-fields
+                       save_struct_actual($1);
+                       push_parameter($1, "$type:$2", $file)
+                   }
+               }
+               else {
+                   save_struct_actual($param);
+                   push_parameter($param, $type, $file);
+               }
+           }
+       }
+    }
+}
+
+sub push_parameter($$$) {
+       my $param = shift;
+       my $type = shift;
+       my $file = shift;
+
+       if (($anon_struct_union == 1) && ($type eq "") &&
+           ($param eq "}")) {
+               return;         # ignore the ending }; from anon. struct/union
+       }
+
+       $anon_struct_union = 0;
+       my $param_name = $param;
+       $param_name =~ s/\[.*//;
+
+       if ($type eq "" && $param =~ /\.\.\.$/)
+       {
+           if (!defined $parameterdescs{$param} || $parameterdescs{$param} eq "") {
+               $parameterdescs{$param} = "variable arguments";
+           }
+       }
+       elsif ($type eq "" && ($param eq "" or $param eq "void"))
+       {
+           $param="void";
+           $parameterdescs{void} = "no arguments";
+       }
+       elsif ($type eq "" && ($param eq "struct" or $param eq "union"))
+       # handle unnamed (anonymous) union or struct:
+       {
+               $type = $param;
+               $param = "{unnamed_" . $param . "}";
+               $parameterdescs{$param} = "anonymous\n";
+               $anon_struct_union = 1;
+       }
+
+       # warn if parameter has no description
+       # (but ignore ones starting with # as these are not parameters
+       # but inline preprocessor statements);
+       # also ignore unnamed structs/unions;
+       if (!$anon_struct_union) {
+       if (!defined $parameterdescs{$param_name} && $param_name !~ /^#/) {
+
+           $parameterdescs{$param_name} = $undescribed;
+
+           if (($type eq 'function') || ($type eq 'enum')) {
+               print STDERR "Warning(${file}:$.): Function parameter ".
+                   "or member '$param' not " .
+                   "described in '$declaration_name'\n";
+           }
+           print STDERR "Warning(${file}:$.):" .
+                        " No description found for parameter '$param'\n";
+           ++$warnings;
+       }
+       }
+
+       $param = xml_escape($param);
+
+       # strip spaces from $param so that it is one continuous string
+       # on @parameterlist;
+       # this fixes a problem where check_sections() cannot find
+       # a parameter like "addr[6 + 2]" because it actually appears
+       # as "addr[6", "+", "2]" on the parameter list;
+       # but it's better to maintain the param string unchanged for output,
+       # so just weaken the string compare in check_sections() to ignore
+       # "[blah" in a parameter string;
+       ###$param =~ s/\s*//g;
+       push @parameterlist, $param;
+       $parametertypes{$param} = $type;
+}
+
+sub check_sections($$$$$$) {
+       my ($file, $decl_name, $decl_type, $sectcheck, $prmscheck, $nested) = @_;
+       my @sects = split ' ', $sectcheck;
+       my @prms = split ' ', $prmscheck;
+       my $err;
+       my ($px, $sx);
+       my $prm_clean;          # strip trailing "[array size]" and/or beginning "*"
+
+       foreach $sx (0 .. $#sects) {
+               $err = 1;
+               foreach $px (0 .. $#prms) {
+                       $prm_clean = $prms[$px];
+                       $prm_clean =~ s/\[.*\]//;
+                       $prm_clean =~ s/__attribute__\s*\(\([a-z,_\*\s\(\)]*\)\)//i;
+                       # ignore array size in a parameter string;
+                       # however, the original param string may contain
+                       # spaces, e.g.:  addr[6 + 2]
+                       # and this appears in @prms as "addr[6" since the
+                       # parameter list is split at spaces;
+                       # hence just ignore "[..." for the sections check;
+                       $prm_clean =~ s/\[.*//;
+
+                       ##$prm_clean =~ s/^\**//;
+                       if ($prm_clean eq $sects[$sx]) {
+                               $err = 0;
+                               last;
+                       }
+               }
+               if ($err) {
+                       if ($decl_type eq "function") {
+                               print STDERR "Warning(${file}:$.): " .
+                                       "Excess function parameter " .
+                                       "'$sects[$sx]' " .
+                                       "description in '$decl_name'\n";
+                               ++$warnings;
+                       } else {
+                               if ($nested !~ m/\Q$sects[$sx]\E/) {
+                                   print STDERR "Warning(${file}:$.): " .
+                                       "Excess struct/union/enum/typedef member " .
+                                       "'$sects[$sx]' " .
+                                       "description in '$decl_name'\n";
+                                   ++$warnings;
+                               }
+                       }
+               }
+       }
+}
+
+##
+# Checks the section describing the return value of a function.
+sub check_return_section {
+        my $file = shift;
+        my $declaration_name = shift;
+        my $return_type = shift;
+
+        # Ignore an empty return type (It's a macro)
+        # Ignore functions with a "void" return type. (But don't ignore "void *")
+        if (($return_type eq "") || ($return_type =~ /void\s*\w*\s*$/)) {
+                return;
+        }
+
+        if (!defined($sections{$section_return}) ||
+            $sections{$section_return} eq "") {
+                print STDERR "Warning(${file}:$.): " .
+                        "No description found for return value of " .
+                        "'$declaration_name'\n";
+                ++$warnings;
+        }
+}
+
+##
+# takes a function prototype and the name of the current file being
+# processed and spits out all the details stored in the global
+# arrays/hashes.
+sub dump_function($$) {
+    my $prototype = shift;
+    my $file = shift;
+
+    $prototype =~ s/^static +//;
+    $prototype =~ s/^extern +//;
+    $prototype =~ s/^asmlinkage +//;
+    $prototype =~ s/^inline +//;
+    $prototype =~ s/^__inline__ +//;
+    $prototype =~ s/^__inline +//;
+    $prototype =~ s/^__always_inline +//;
+    $prototype =~ s/^noinline +//;
+    $prototype =~ s/__init +//;
+    $prototype =~ s/__init_or_module +//;
+    $prototype =~ s/__must_check +//;
+    $prototype =~ s/__weak +//;
+    $prototype =~ s/^#\s*define\s+//; #ak added
+    $prototype =~ s/__attribute__\s*\(\([a-z,]*\)\)//;
+
+    # Yes, this truly is vile.  We are looking for:
+    # 1. Return type (may be nothing if we're looking at a macro)
+    # 2. Function name
+    # 3. Function parameters.
+    #
+    # All the while we have to watch out for function pointer parameters
+    # (which IIRC is what the two sections are for), C types (these
+    # regexps don't even start to express all the possibilities), and
+    # so on.
+    #
+    # If you mess with these regexps, it's a good idea to check that
+    # the following functions' documentation still comes out right:
+    # - parport_register_device (function pointer parameters)
+    # - atomic_set (macro)
+    # - pci_match_device, __copy_to_user (long return type)
+
+    if ($prototype =~ m/^()([a-zA-Z0-9_~:]+)\s*\(([^\(]*)\)/ ||
+       $prototype =~ m/^(\w+)\s+([a-zA-Z0-9_~:]+)\s*\(([^\(]*)\)/ ||
+       $prototype =~ m/^(\w+\s*\*)\s*([a-zA-Z0-9_~:]+)\s*\(([^\(]*)\)/ ||
+       $prototype =~ m/^(\w+\s+\w+)\s+([a-zA-Z0-9_~:]+)\s*\(([^\(]*)\)/ ||
+       $prototype =~ m/^(\w+\s+\w+\s*\*+)\s*([a-zA-Z0-9_~:]+)\s*\(([^\(]*)\)/ ||
+       $prototype =~ m/^(\w+\s+\w+\s+\w+)\s+([a-zA-Z0-9_~:]+)\s*\(([^\(]*)\)/ ||
+       $prototype =~ m/^(\w+\s+\w+\s+\w+\s*\*)\s*([a-zA-Z0-9_~:]+)\s*\(([^\(]*)\)/ ||
+       $prototype =~ m/^()([a-zA-Z0-9_~:]+)\s*\(([^\{]*)\)/ ||
+       $prototype =~ m/^(\w+)\s+([a-zA-Z0-9_~:]+)\s*\(([^\{]*)\)/ ||
+       $prototype =~ m/^(\w+\s*\*)\s*([a-zA-Z0-9_~:]+)\s*\(([^\{]*)\)/ ||
+       $prototype =~ m/^(\w+\s+\w+)\s+([a-zA-Z0-9_~:]+)\s*\(([^\{]*)\)/ ||
+       $prototype =~ m/^(\w+\s+\w+\s*\*)\s*([a-zA-Z0-9_~:]+)\s*\(([^\{]*)\)/ ||
+       $prototype =~ m/^(\w+\s+\w+\s+\w+)\s+([a-zA-Z0-9_~:]+)\s*\(([^\{]*)\)/ ||
+       $prototype =~ m/^(\w+\s+\w+\s+\w+\s*\*)\s*([a-zA-Z0-9_~:]+)\s*\(([^\{]*)\)/ ||
+       $prototype =~ m/^(\w+\s+\w+\s+\w+\s+\w+)\s+([a-zA-Z0-9_~:]+)\s*\(([^\{]*)\)/ ||
+       $prototype =~ m/^(\w+\s+\w+\s+\w+\s+\w+\s*\*)\s*([a-zA-Z0-9_~:]+)\s*\(([^\{]*)\)/ ||
+       $prototype =~ m/^(\w+\s+\w+\s*\*\s*\w+\s*\*\s*)\s*([a-zA-Z0-9_~:]+)\s*\(([^\{]*)\)/)  {
+       $return_type = $1;
+       $declaration_name = $2;
+       my $args = $3;
+
+       create_parameterlist($args, ',', $file);
+    } else {
+       print STDERR "Warning(${file}:$.): cannot understand function prototype: '$prototype'\n";
+       return;
+    }
+
+       my $prms = join " ", @parameterlist;
+       check_sections($file, $declaration_name, "function", $sectcheck, $prms, "");
+
+        # This check emits a lot of warnings at the moment, because many
+        # functions don't have a 'Return' doc section. So until the number
+        # of warnings goes sufficiently down, the check is only performed in
+        # verbose mode.
+        # TODO: always perform the check.
+        if ($verbose) {
+                check_return_section($file, $declaration_name, $return_type);
+        }
+
+    output_declaration($declaration_name,
+                      'function',
+                      {'function' => $declaration_name,
+                       'module' => $modulename,
+                       'functiontype' => $return_type,
+                       'parameterlist' => \@parameterlist,
+                       'parameterdescs' => \%parameterdescs,
+                       'parametertypes' => \%parametertypes,
+                       'sectionlist' => \@sectionlist,
+                       'sections' => \%sections,
+                       'purpose' => $declaration_purpose
+                      });
+}
+
+sub reset_state {
+    $function = "";
+    %constants = ();
+    %parameterdescs = ();
+    %parametertypes = ();
+    @parameterlist = ();
+    %sections = ();
+    @sectionlist = ();
+    $sectcheck = "";
+    $struct_actual = "";
+    $prototype = "";
+
+    $state = 0;
+}
+
+sub tracepoint_munge($) {
+       my $file = shift;
+       my $tracepointname = 0;
+       my $tracepointargs = 0;
+
+       if ($prototype =~ m/TRACE_EVENT\((.*?),/) {
+               $tracepointname = $1;
+       }
+       if ($prototype =~ m/DEFINE_SINGLE_EVENT\((.*?),/) {
+               $tracepointname = $1;
+       }
+       if ($prototype =~ m/DEFINE_EVENT\((.*?),(.*?),/) {
+               $tracepointname = $2;
+       }
+       $tracepointname =~ s/^\s+//; #strip leading whitespace
+       if ($prototype =~ m/TP_PROTO\((.*?)\)/) {
+               $tracepointargs = $1;
+       }
+       if (($tracepointname eq 0) || ($tracepointargs eq 0)) {
+               print STDERR "Warning(${file}:$.): Unrecognized tracepoint format: \n".
+                            "$prototype\n";
+       } else {
+               $prototype = "static inline void trace_$tracepointname($tracepointargs)";
+       }
+}
+
+sub syscall_munge() {
+       my $void = 0;
+
+       $prototype =~ s@[\r\n\t]+@ @gos; # strip newlines/CR's/tabs
+##     if ($prototype =~ m/SYSCALL_DEFINE0\s*\(\s*(a-zA-Z0-9_)*\s*\)/) {
+       if ($prototype =~ m/SYSCALL_DEFINE0/) {
+               $void = 1;
+##             $prototype = "long sys_$1(void)";
+       }
+
+       $prototype =~ s/SYSCALL_DEFINE.*\(/long sys_/; # fix return type & func name
+       if ($prototype =~ m/long (sys_.*?),/) {
+               $prototype =~ s/,/\(/;
+       } elsif ($void) {
+               $prototype =~ s/\)/\(void\)/;
+       }
+
+       # now delete all of the odd-number commas in $prototype
+       # so that arg types & arg names don't have a comma between them
+       my $count = 0;
+       my $len = length($prototype);
+       if ($void) {
+               $len = 0;       # skip the for-loop
+       }
+       for (my $ix = 0; $ix < $len; $ix++) {
+               if (substr($prototype, $ix, 1) eq ',') {
+                       $count++;
+                       if ($count % 2 == 1) {
+                               substr($prototype, $ix, 1) = ' ';
+                       }
+               }
+       }
+}
+
+sub process_state3_function($$) {
+    my $x = shift;
+    my $file = shift;
+
+    $x =~ s@\/\/.*$@@gos; # strip C99-style comments to end of line
+
+    if ($x =~ m#\s*/\*\s+MACDOC\s*#io || ($x =~ /^#/ && $x !~ /^#\s*define/)) {
+       # do nothing
+    }
+    elsif ($x =~ /([^\{]*)/) {
+       $prototype .= $1;
+    }
+
+    if (($x =~ /\{/) || ($x =~ /\#\s*define/) || ($x =~ /;/)) {
+       $prototype =~ s@/\*.*?\*/@@gos; # strip comments.
+       $prototype =~ s@[\r\n]+@ @gos; # strip newlines/cr's.
+       $prototype =~ s@^\s+@@gos; # strip leading spaces
+       if ($prototype =~ /SYSCALL_DEFINE/) {
+               syscall_munge();
+       }
+       if ($prototype =~ /TRACE_EVENT/ || $prototype =~ /DEFINE_EVENT/ ||
+           $prototype =~ /DEFINE_SINGLE_EVENT/)
+       {
+               tracepoint_munge($file);
+       }
+       dump_function($prototype, $file);
+       reset_state();
+    }
+}
+
+sub process_state3_type($$) {
+    my $x = shift;
+    my $file = shift;
+
+    $x =~ s@[\r\n]+@ @gos; # strip newlines/cr's.
+    $x =~ s@^\s+@@gos; # strip leading spaces
+    $x =~ s@\s+$@@gos; # strip trailing spaces
+    $x =~ s@\/\/.*$@@gos; # strip C99-style comments to end of line
+
+    if ($x =~ /^#/) {
+       # To distinguish preprocessor directive from regular declaration later.
+       $x .= ";";
+    }
+
+    while (1) {
+       if ( $x =~ /([^{};]*)([{};])(.*)/ ) {
+           $prototype .= $1 . $2;
+           ($2 eq '{') && $brcount++;
+           ($2 eq '}') && $brcount--;
+           if (($2 eq ';') && ($brcount == 0)) {
+               dump_declaration($prototype, $file);
+               reset_state();
+               last;
+           }
+           $x = $3;
+       } else {
+           $prototype .= $x;
+           last;
+       }
+    }
+}
+
+# xml_escape: replace <, >, and & in the text stream;
+#
+# however, formatting controls that are generated internally/locally in the
+# kernel-doc script are not escaped here; instead, they begin life like
+# $blankline_html (4 of '\' followed by a mnemonic + ':'), then these strings
+# are converted to their mnemonic-expected output, without the 4 * '\' & ':',
+# just before actual output; (this is done by local_unescape())
+sub xml_escape($) {
+       my $text = shift;
+       if (($output_mode eq "text") || ($output_mode eq "man")) {
+               return $text;
+       }
+       $text =~ s/\&/\\\\\\amp;/g;
+       $text =~ s/\</\\\\\\lt;/g;
+       $text =~ s/\>/\\\\\\gt;/g;
+       return $text;
+}
+
+# convert local escape strings to html
+# local escape strings look like:  '\\\\menmonic:' (that's 4 backslashes)
+sub local_unescape($) {
+       my $text = shift;
+       if (($output_mode eq "text") || ($output_mode eq "man")) {
+               return $text;
+       }
+       $text =~ s/\\\\\\\\lt:/</g;
+       $text =~ s/\\\\\\\\gt:/>/g;
+       return $text;
+}
+
+sub process_file($) {
+    my $file;
+    my $identifier;
+    my $func;
+    my $descr;
+    my $in_purpose = 0;
+    my $initial_section_counter = $section_counter;
+
+    if (defined($ENV{'SRCTREE'})) {
+       $file = "$ENV{'SRCTREE'}" . "/" . "@_";
+    }
+    else {
+       $file = "@_";
+    }
+    if (defined($source_map{$file})) {
+       $file = $source_map{$file};
+    }
+
+    if (!open(IN,"<$file")) {
+       print STDERR "Error: Cannot open file $file\n";
+       ++$errors;
+       return;
+    }
+
+    $. = 1;
+
+    $section_counter = 0;
+    while (<IN>) {
+       while (s/\\\s*$//) {
+           $_ .= <IN>;
+       }
+       if ($state == 0) {
+           if (/$doc_start/o) {
+               $state = 1;             # next line is always the function name
+               $in_doc_sect = 0;
+           }
+       } elsif ($state == 1) { # this line is the function name (always)
+           if (/$doc_block/o) {
+               $state = 4;
+               $contents = "";
+               if ( $1 eq "" ) {
+                       $section = $section_intro;
+               } else {
+                       $section = $1;
+               }
+           }
+           elsif (/$doc_decl/o) {
+               $identifier = $1;
+               if (/\s*([\w\s]+?)\s*-/) {
+                   $identifier = $1;
+               }
+
+               $state = 2;
+               if (/-(.*)/) {
+                   # strip leading/trailing/multiple spaces
+                   $descr= $1;
+                   $descr =~ s/^\s*//;
+                   $descr =~ s/\s*$//;
+                   $descr =~ s/\s+/ /g;
+                   $declaration_purpose = xml_escape($descr);
+                   $in_purpose = 1;
+               } else {
+                   $declaration_purpose = "";
+               }
+
+               if (($declaration_purpose eq "") && $verbose) {
+                       print STDERR "Warning(${file}:$.): missing initial short description on line:\n";
+                       print STDERR $_;
+                       ++$warnings;
+               }
+
+               if ($identifier =~ m/^struct/) {
+                   $decl_type = 'struct';
+               } elsif ($identifier =~ m/^union/) {
+                   $decl_type = 'union';
+               } elsif ($identifier =~ m/^enum/) {
+                   $decl_type = 'enum';
+               } elsif ($identifier =~ m/^typedef/) {
+                   $decl_type = 'typedef';
+               } else {
+                   $decl_type = 'function';
+               }
+
+               if ($verbose) {
+                   print STDERR "Info(${file}:$.): Scanning doc for $identifier\n";
+               }
+           } else {
+               print STDERR "Warning(${file}:$.): Cannot understand $_ on line $.",
+               " - I thought it was a doc line\n";
+               ++$warnings;
+               $state = 0;
+           }
+       } elsif ($state == 2) { # look for head: lines, and include content
+           if (/$doc_sect/o) {
+               $newsection = $1;
+               $newcontents = $2;
+
+               if (($contents ne "") && ($contents ne "\n")) {
+                   if (!$in_doc_sect && $verbose) {
+                       print STDERR "Warning(${file}:$.): contents before sections\n";
+                       ++$warnings;
+                   }
+                   dump_section($file, $section, xml_escape($contents));
+                   $section = $section_default;
+               }
+
+               $in_doc_sect = 1;
+               $in_purpose = 0;
+               $contents = $newcontents;
+               if ($contents ne "") {
+                   while ((substr($contents, 0, 1) eq " ") ||
+                       substr($contents, 0, 1) eq "\t") {
+                           $contents = substr($contents, 1);
+                   }
+                   $contents .= "\n";
+               }
+               $section = $newsection;
+           } elsif (/$doc_end/) {
+
+               if (($contents ne "") && ($contents ne "\n")) {
+                   dump_section($file, $section, xml_escape($contents));
+                   $section = $section_default;
+                   $contents = "";
+               }
+               # look for doc_com + <text> + doc_end:
+               if ($_ =~ m'\s*\*\s*[a-zA-Z_0-9:\.]+\*/') {
+                   print STDERR "Warning(${file}:$.): suspicious ending line: $_";
+                   ++$warnings;
+               }
+
+               $prototype = "";
+               $state = 3;
+               $brcount = 0;
+#              print STDERR "end of doc comment, looking for prototype\n";
+           } elsif (/$doc_content/) {
+               # miguel-style comment kludge, look for blank lines after
+               # @parameter line to signify start of description
+               if ($1 eq "") {
+                   if ($section =~ m/^@/ || $section eq $section_context) {
+                       dump_section($file, $section, xml_escape($contents));
+                       $section = $section_default;
+                       $contents = "";
+                   } else {
+                       $contents .= "\n";
+                   }
+                   $in_purpose = 0;
+               } elsif ($in_purpose == 1) {
+                   # Continued declaration purpose
+                   chomp($declaration_purpose);
+                   $declaration_purpose .= " " . xml_escape($1);
+                   $declaration_purpose =~ s/\s+/ /g;
+               } else {
+                   $contents .= $1 . "\n";
+               }
+           } else {
+               # i dont know - bad line?  ignore.
+               print STDERR "Warning(${file}:$.): bad line: $_";
+               ++$warnings;
+           }
+       } elsif ($state == 3) { # scanning for function '{' (end of prototype)
+           if ($decl_type eq 'function') {
+               process_state3_function($_, $file);
+           } else {
+               process_state3_type($_, $file);
+           }
+       } elsif ($state == 4) {
+               # Documentation block
+               if (/$doc_block/) {
+                       dump_doc_section($file, $section, xml_escape($contents));
+                       $contents = "";
+                       $function = "";
+                       %constants = ();
+                       %parameterdescs = ();
+                       %parametertypes = ();
+                       @parameterlist = ();
+                       %sections = ();
+                       @sectionlist = ();
+                       $prototype = "";
+                       if ( $1 eq "" ) {
+                               $section = $section_intro;
+                       } else {
+                               $section = $1;
+                       }
+               }
+               elsif (/$doc_end/)
+               {
+                       dump_doc_section($file, $section, xml_escape($contents));
+                       $contents = "";
+                       $function = "";
+                       %constants = ();
+                       %parameterdescs = ();
+                       %parametertypes = ();
+                       @parameterlist = ();
+                       %sections = ();
+                       @sectionlist = ();
+                       $prototype = "";
+                       $state = 0;
+               }
+               elsif (/$doc_content/)
+               {
+                       if ( $1 eq "" )
+                       {
+                               $contents .= $blankline;
+                       }
+                       else
+                       {
+                               $contents .= $1 . "\n";
+                       }
+               }
+       }
+    }
+    if ($initial_section_counter == $section_counter) {
+       print STDERR "Warning(${file}): no structured comments found\n";
+       if (($function_only == 1) && ($show_not_found == 1)) {
+           print STDERR "    Was looking for '$_'.\n" for keys %function_table;
+       }
+       if ($output_mode eq "xml") {
+           # The template wants at least one RefEntry here; make one.
+           print "<refentry>\n";
+           print " <refnamediv>\n";
+           print "  <refname>\n";
+           print "   ${file}\n";
+           print "  </refname>\n";
+           print "  <refpurpose>\n";
+           print "   Document generation inconsistency\n";
+           print "  </refpurpose>\n";
+           print " </refnamediv>\n";
+           print " <refsect1>\n";
+           print "  <title>\n";
+           print "   Oops\n";
+           print "  </title>\n";
+           print "  <warning>\n";
+           print "   <para>\n";
+           print "    The template for this document tried to insert\n";
+           print "    the structured comment from the file\n";
+           print "    <filename>${file}</filename> at this point,\n";
+           print "    but none was found.\n";
+           print "    This dummy section is inserted to allow\n";
+           print "    generation to continue.\n";
+           print "   </para>\n";
+           print "  </warning>\n";
+           print " </refsect1>\n";
+           print "</refentry>\n";
+       }
+    }
+}
+
+
+$kernelversion = get_kernel_version();
+
+# generate a sequence of code that will splice in highlighting information
+# using the s// operator.
+foreach my $pattern (keys %highlights) {
+#   print STDERR "scanning pattern:$pattern, highlight:($highlights{$pattern})\n";
+    $dohighlight .=  "\$contents =~ s:$pattern:$highlights{$pattern}:gs;\n";
+}
+
+# Read the file that maps relative names to absolute names for
+# separate source and object directories and for shadow trees.
+if (open(SOURCE_MAP, "<.tmp_filelist.txt")) {
+       my ($relname, $absname);
+       while(<SOURCE_MAP>) {
+               chop();
+               ($relname, $absname) = (split())[0..1];
+               $relname =~ s:^/+::;
+               $source_map{$relname} = $absname;
+       }
+       close(SOURCE_MAP);
+}
+
+foreach (@ARGV) {
+    chomp;
+    process_file($_);
+}
+if ($verbose && $errors) {
+  print STDERR "$errors errors\n";
+}
+if ($verbose && $warnings) {
+  print STDERR "$warnings warnings\n";
+}
+
+exit($errors);
diff --git a/scripts/mkmakefile b/scripts/mkmakefile
new file mode 100644 (file)
index 0000000..0cc0442
--- /dev/null
@@ -0,0 +1,59 @@
+#!/bin/sh
+# Generates a small Makefile used in the root of the output
+# directory, to allow make to be started from there.
+# The Makefile also allow for more convinient build of external modules
+
+# Usage
+# $1 - Kernel src directory
+# $2 - Output directory
+# $3 - version
+# $4 - patchlevel
+
+
+test ! -r $2/Makefile -o -O $2/Makefile || exit 0
+# Only overwrite automatically generated Makefiles
+# (so we do not overwrite kernel Makefile)
+if test -e $2/Makefile && ! grep -q Automatically $2/Makefile
+then
+       exit 0
+fi
+if [ "${quiet}" != "silent_" ]; then
+       echo "  GEN     $2/Makefile"
+fi
+
+cat << EOF > $2/Makefile
+# Automatically generated by $0: don't edit
+
+VERSION = $3
+PATCHLEVEL = $4
+
+lastword = \$(word \$(words \$(1)),\$(1))
+makedir := \$(dir \$(call lastword,\$(MAKEFILE_LIST)))
+
+ifeq ("\$(origin V)", "command line")
+VERBOSE := \$(V)
+endif
+ifneq (\$(VERBOSE),1)
+Q := @
+endif
+
+MAKEARGS := -C $1
+MAKEARGS += O=\$(if \$(patsubst /%,,\$(makedir)),\$(CURDIR)/)\$(patsubst %/,%,\$(makedir))
+
+MAKEFLAGS += --no-print-directory
+
+.PHONY: all \$(MAKECMDGOALS)
+
+all    := \$(filter-out all Makefile,\$(MAKECMDGOALS))
+
+all:
+       \$(Q)\$(MAKE) \$(MAKEARGS) \$(all)
+
+Makefile:;
+
+\$(all): all
+       @:
+
+%/: all
+       @:
+EOF
index 4143e3810cd4340eae32b155307cbe24975e77f1..bf980249ebc93808bdd90539fd972d66e3c827c0 100644 (file)
 # Based on top-level Makefile.
 #
 
+src := $(obj)
+
+# Create output directory if not already present
+_dummy := $(shell [ -d $(obj) ] || mkdir -p $(obj))
+
+include $(srctree)/scripts/Kbuild.include
+
 CONFIG_SPL_BUILD := y
 export CONFIG_SPL_BUILD
 
+KBUILD_CPPFLAGS += -DCONFIG_SPL_BUILD
+ifeq ($(CONFIG_TPL_BUILD),y)
+KBUILD_CPPFLAGS += -DCONFIG_TPL_BUILD
+endif
+
+# Enable garbage collection of un-used sections for SPL
+KBUILD_CFLAGS += -ffunction-sections -fdata-sections
+LDFLAGS_FINAL += --gc-sections
+
 ifeq ($(CONFIG_TPL_BUILD),y)
 export CONFIG_TPL_BUILD
 SPL_BIN := u-boot-tpl
@@ -24,16 +40,32 @@ else
 SPL_BIN := u-boot-spl
 endif
 
-include $(TOPDIR)/config.mk
+include include/config.mk
 
-# We want the final binaries in this directory
 ifeq ($(CONFIG_TPL_BUILD),y)
-obj := $(OBJTREE)/tpl/
-SPLTREE := $(TPLTREE)
+  -include include/tpl-autoconf.mk
 else
-obj := $(OBJTREE)/spl/
+  -include include/spl-autoconf.mk
 endif
 
+include $(TOPDIR)/config.mk
+
+# FIX ME
+c_flags := $(KBUILD_CFLAGS) $(KBUILD_CPPFLAGS) $(CPPFLAGS) $(UBOOTINCLUDE) $(NOSTDINC_FLAGS)
+
+# Auto-generate the spl-autoconf.mk file (which is included by all makefiles for SPL)
+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/tpl-autoconf.mk: include/config.h
+       $(call cmd,autoconf)
+
+include/spl-autoconf.mk: include/config.h
+       $(call cmd,autoconf)
+
 HAVE_VENDOR_COMMON_LIB = $(if $(wildcard $(SRCTREE)/board/$(VENDOR)/common/Makefile),y,n)
 
 ifdef  CONFIG_SPL_START_S_PATH
@@ -47,65 +79,65 @@ head-$(CONFIG_X86) += $(START_PATH)/start16.o $(START_PATH)/resetvec.o
 head-$(CONFIG_4xx) += $(START_PATH)/resetvec.o
 head-$(CONFIG_MPC85xx) += $(START_PATH)/resetvec.o
 
-LIBS-y += arch/$(ARCH)/lib/
+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_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-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_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/
+
+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))
+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)
+PLATFORM_LIBS := $(SPLTREE)/arch/$(ARCH)/lib/lib.a
 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
@@ -126,8 +158,6 @@ ifeq ($(wildcard $(LDSCRIPT)),)
 $(error could not find linker script)
 endif
 
-build := -f $(TOPDIR)/scripts/Makefile.build -C
-
 # Special flags for CPP when processing the linker script.
 # Pass the version down so we can handle backwards compatibility
 # on the fly.
@@ -138,21 +168,21 @@ 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')
 
-$(OBJTREE)/MLO:        $(obj)u-boot-spl.bin
+$(OBJTREE)/MLO:        $(obj)/u-boot-spl.bin
        $(OBJTREE)/tools/mkimage -T omapimage \
                -a $(CONFIG_SPL_TEXT_BASE) -d $< $@
 
-$(OBJTREE)/MLO.byteswap: $(obj)u-boot-spl.bin
+$(OBJTREE)/MLO.byteswap: $(obj)/u-boot-spl.bin
        $(OBJTREE)/tools/mkimage -T omapimage -n byteswap \
                -a $(CONFIG_SPL_TEXT_BASE) -d $< $@
 
-$(OBJTREE)/SPL : $(obj)u-boot-spl.bin depend
-               $(MAKE) $(build) $(SRCTREE)/arch/arm/imx-common $@
+$(objtree)/SPL : $(obj)/u-boot-spl.bin
+               $(MAKE) $(build)=spl/arch/arm/imx-common $@
 
-ALL-y  += $(obj)$(SPL_BIN).bin
+ALL-y  += $(obj)/$(SPL_BIN).bin
 
 ifdef CONFIG_SAMSUNG
-ALL-y  += $(obj)$(BOARD)-spl.bin
+ALL-y  += $(obj)/$(BOARD)-spl.bin
 endif
 
 all:   $(ALL-y)
@@ -163,32 +193,44 @@ VAR_SIZE_PARAM = --vs
 else
 VAR_SIZE_PARAM =
 endif
-$(obj)$(BOARD)-spl.bin: $(obj)u-boot-spl.bin
-       $(OBJTREE)/tools/mk$(BOARD)spl $(VAR_SIZE_PARAM) $< $@
+$(obj)/$(BOARD)-spl.bin: $(obj)/u-boot-spl.bin
+       $(if $(wildcard $(OBJTREE)/spl/board/samsung/$(BOARD)/tools/mk$(BOARD)spl),\
+       $(OBJTREE)/spl/board/samsung/$(BOARD)/tools/mk$(BOARD)spl,\
+       $(OBJTREE)/tools/mkexynosspl) $(VAR_SIZE_PARAM) $< $@
 endif
 
-$(obj)$(SPL_BIN).bin:  $(obj)$(SPL_BIN)
+$(obj)/$(SPL_BIN).bin: $(obj)/$(SPL_BIN)
        $(OBJCOPY) $(OBJCFLAGS) $(SPL_OBJCFLAGS) -O binary $< $@
 
-GEN_UBOOT = \
-       cd $(obj) && $(LD) $(LDFLAGS) $(LDFLAGS_$(@F)) $(__START) \
-               --start-group $(__LIBS) --end-group $(PLATFORM_LIBS) \
-               -Map $(SPL_BIN).map -o $(SPL_BIN)
+LDFLAGS_$(SPL_BIN) += -T u-boot-spl.lds $(LDFLAGS_FINAL)
+ifneq ($(CONFIG_SPL_TEXT_BASE),)
+LDFLAGS_$(SPL_BIN) += -Ttext $(CONFIG_SPL_TEXT_BASE)
+endif
+
+quiet_cmd_u-boot-spl = LD      $@
+      cmd_u-boot-spl = cd $(obj) && $(LD) $(LDFLAGS) $(LDFLAGS_$(@F)) \
+                      $(patsubst $(obj)/%,%,$(u-boot-spl-init)) --start-group \
+                      $(patsubst $(obj)/%,%,$(u-boot-spl-main)) --end-group \
+                      $(PLATFORM_LIBS) -Map $(SPL_BIN).map -o $(SPL_BIN)
+
+$(obj)/$(SPL_BIN): $(u-boot-spl-init) $(u-boot-spl-main) $(obj)/u-boot-spl.lds
+       $(call cmd,u-boot-spl)
 
-$(obj)$(SPL_BIN):      depend $(START) $(LIBS) $(obj)u-boot-spl.lds
-       $(GEN_UBOOT)
+$(sort $(u-boot-spl-init) $(u-boot-spl-main)): $(u-boot-spl-dirs) ;
 
-$(START):
-       @:
+PHONY += $(u-boot-spl-dirs)
+$(u-boot-spl-dirs):
+       $(Q)$(MAKE) $(build)=$@
 
-$(LIBS):       depend
-       $(MAKE) $(build) $(SRCTREE)$(dir $(subst $(SPLTREE),,$@))
+# FIX ME
+cpp_flags := $(KBUILD_CPPFLAGS) $(CPPFLAGS) $(UBOOTINCLUDE) $(NOSTDINC_FLAGS)
 
-$(obj)u-boot-spl.lds: $(LDSCRIPT) depend
-       $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -I$(obj). -ansi -D__ASSEMBLY__ -P - < $< > $@
+$(obj)/u-boot-spl.lds: $(LDSCRIPT) FORCE
+       $(CPP) $(cpp_flags) $(LDPPFLAGS) -I$(obj). -ansi -D__ASSEMBLY__ -P - < $< > $@
 
-depend:        $(obj).depend
-.PHONY: depend
+PHONY += FORCE
+FORCE:
 
-# defines $(obj).depend target
-include $(SRCTREE)/rules.mk
+# 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)
index 0e83db0cca0ecadc8f8380bc210b9882a5a41eef..620a297d45ac3e3b3d051b580b76c817b2e4c301 100644 (file)
@@ -15,7 +15,7 @@ static const char test_cmd[] = "setenv list 1\n setenv list ${list}2; "
 static int do_ut_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
        printf("%s: Testing commands\n", __func__);
-       run_command("env default -f", 0);
+       run_command("env default -f -a", 0);
 
        /* run a single command */
        run_command("setenv single 1", 0);
@@ -58,6 +58,95 @@ static int do_ut_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
                "setenv list ${list}3", strlen("setenv list 1"), 0);
        assert(!strcmp("1", getenv("list")));
 
+#ifdef CONFIG_SYS_HUSH_PARSER
+       /* Test the 'test' command */
+
+#define HUSH_TEST(name, expr, expected_result) \
+       run_command("if test " expr " ; then " \
+                       "setenv " #name "_" #expected_result " y; else " \
+                       "setenv " #name "_" #expected_result " n; fi", 0); \
+       assert(!strcmp(#expected_result, getenv(#name "_" #expected_result)));
+
+       /* Basic operators */
+       HUSH_TEST(streq, "aaa = aaa", y);
+       HUSH_TEST(streq, "aaa = bbb", n);
+
+       HUSH_TEST(strneq, "aaa != bbb", y);
+       HUSH_TEST(strneq, "aaa != aaa", n);
+
+       HUSH_TEST(strlt, "aaa < bbb", y);
+       HUSH_TEST(strlt, "bbb < aaa", n);
+
+       HUSH_TEST(strgt, "bbb > aaa", y);
+       HUSH_TEST(strgt, "aaa > bbb", n);
+
+       HUSH_TEST(eq, "123 -eq 123", y);
+       HUSH_TEST(eq, "123 -eq 456", n);
+
+       HUSH_TEST(ne, "123 -ne 456", y);
+       HUSH_TEST(ne, "123 -ne 123", n);
+
+       HUSH_TEST(lt, "123 -lt 456", y);
+       HUSH_TEST(lt_eq, "123 -lt 123", n);
+       HUSH_TEST(lt, "456 -lt 123", n);
+
+       HUSH_TEST(le, "123 -le 456", y);
+       HUSH_TEST(le_eq, "123 -le 123", y);
+       HUSH_TEST(le, "456 -le 123", n);
+
+       HUSH_TEST(gt, "456 -gt 123", y);
+       HUSH_TEST(gt_eq, "123 -gt 123", n);
+       HUSH_TEST(gt, "123 -gt 456", n);
+
+       HUSH_TEST(ge, "456 -ge 123", y);
+       HUSH_TEST(ge_eq, "123 -ge 123", y);
+       HUSH_TEST(ge, "123 -ge 456", n);
+
+       HUSH_TEST(z, "-z \"\"", y);
+       HUSH_TEST(z, "-z \"aaa\"", n);
+
+       HUSH_TEST(n, "-n \"aaa\"", y);
+       HUSH_TEST(n, "-n \"\"", n);
+
+       /* Inversion of simple tests */
+       HUSH_TEST(streq_inv, "! aaa = aaa", n);
+       HUSH_TEST(streq_inv, "! aaa = bbb", y);
+
+       HUSH_TEST(streq_inv_inv, "! ! aaa = aaa", y);
+       HUSH_TEST(streq_inv_inv, "! ! aaa = bbb", n);
+
+       /* Binary operators */
+       HUSH_TEST(or_0_0, "aaa != aaa -o bbb != bbb", n);
+       HUSH_TEST(or_0_1, "aaa != aaa -o bbb = bbb", y);
+       HUSH_TEST(or_1_0, "aaa = aaa -o bbb != bbb", y);
+       HUSH_TEST(or_1_1, "aaa = aaa -o bbb = bbb", y);
+
+       HUSH_TEST(and_0_0, "aaa != aaa -a bbb != bbb", n);
+       HUSH_TEST(and_0_1, "aaa != aaa -a bbb = bbb", n);
+       HUSH_TEST(and_1_0, "aaa = aaa -a bbb != bbb", n);
+       HUSH_TEST(and_1_1, "aaa = aaa -a bbb = bbb", y);
+
+       /* Inversion within binary operators */
+       HUSH_TEST(or_0_0_inv, "! aaa != aaa -o ! bbb != bbb", y);
+       HUSH_TEST(or_0_1_inv, "! aaa != aaa -o ! bbb = bbb", y);
+       HUSH_TEST(or_1_0_inv, "! aaa = aaa -o ! bbb != bbb", y);
+       HUSH_TEST(or_1_1_inv, "! aaa = aaa -o ! bbb = bbb", n);
+
+       HUSH_TEST(or_0_0_inv_inv, "! ! aaa != aaa -o ! ! bbb != bbb", n);
+       HUSH_TEST(or_0_1_inv_inv, "! ! aaa != aaa -o ! ! bbb = bbb", y);
+       HUSH_TEST(or_1_0_inv_inv, "! ! aaa = aaa -o ! ! bbb != bbb", y);
+       HUSH_TEST(or_1_1_inv_inv, "! ! aaa = aaa -o ! ! bbb = bbb", y);
+
+#ifdef CONFIG_SANDBOX
+       /*
+        * File existence
+        * This assume U-Boot sandbox is run from the U-Boot build directory
+        */
+       HUSH_TEST(e, "-e host - u-boot", y);
+       HUSH_TEST(e, "-e host - creating_this_file_breaks_uboot_unit_test", n);
+#endif
+#endif
+
        printf("%s: Everything went swimmingly\n", __func__);
        return 0;
 }
index cd2f041cc2cf9519afd805376419fc0576455d87..2a90dfe83a52339e2434207f192e475bdaa245d0 100644 (file)
@@ -6,6 +6,7 @@
 /dumpimage
 /mkenvimage
 /mkimage
+/mkexynosspl
 /mpc86x_clk
 /mxsboot
 /ncb
@@ -15,8 +16,5 @@
 /xway-swap-bytes
 /*.exe
 /easylogo/easylogo
-/env/crc32.c
-/env/fw_printenv
 /gdb/gdbcont
 /gdb/gdbsend
-/kernel-doc/docproc
index 328cea319ed7fffb32c047de17b2e6d66732ff81..dcd49f82916379e99e5e6776de865863da037c7e 100644 (file)
@@ -5,14 +5,6 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-TOOLSUBDIRS = kernel-doc
-
-#
-# Include this after HOSTOS HOSTARCH check
-# so that we can act intelligently.
-#
-include $(TOPDIR)/config.mk
-
 #
 # toolchains targeting win32 generate .exe files
 #
@@ -32,6 +24,9 @@ CONFIG_NETCONSOLE = y
 CONFIG_SHA1_CHECK_UB_IMG = y
 endif
 
+subdir-$(HOST_TOOLS_ALL) += easylogo
+subdir-$(HOST_TOOLS_ALL) += gdb
+
 # Merge all the different vars for envcrc into one
 ENVCRC-$(CONFIG_ENV_IS_EMBEDDED) = y
 ENVCRC-$(CONFIG_ENV_IS_IN_DATAFLASH) = y
@@ -43,86 +38,115 @@ ENVCRC-$(CONFIG_ENV_IS_IN_NVRAM) = y
 ENVCRC-$(CONFIG_ENV_IS_IN_SPI_FLASH) = y
 CONFIG_BUILD_ENVCRC ?= $(ENVCRC-y)
 
-# Generated executable files
-BIN_FILES-$(CONFIG_LCD_LOGO) += bmp_logo$(SFX)
-BIN_FILES-$(CONFIG_VIDEO_LOGO) += bmp_logo$(SFX)
-BIN_FILES-$(CONFIG_BUILD_ENVCRC) += envcrc$(SFX)
-BIN_FILES-$(CONFIG_CMD_NET) += gen_eth_addr$(SFX)
-BIN_FILES-$(CONFIG_CMD_LOADS) += img2srec$(SFX)
-BIN_FILES-$(CONFIG_XWAY_SWAP_BYTES) += xway-swap-bytes$(SFX)
-BIN_FILES-y += dumpimage$(SFX)
-BIN_FILES-y += mkenvimage$(SFX)
-BIN_FILES-y += mkimage$(SFX)
-BIN_FILES-$(CONFIG_EXYNOS5250) += mk$(BOARD)spl$(SFX)
-BIN_FILES-$(CONFIG_EXYNOS5420) += mk$(BOARD)spl$(SFX)
-BIN_FILES-$(CONFIG_MX23) += mxsboot$(SFX)
-BIN_FILES-$(CONFIG_MX28) += mxsboot$(SFX)
-BIN_FILES-$(CONFIG_NETCONSOLE) += ncb$(SFX)
-BIN_FILES-$(CONFIG_SHA1_CHECK_UB_IMG) += ubsha1$(SFX)
-BIN_FILES-$(CONFIG_KIRKWOOD) += kwboot$(SFX)
-BIN_FILES-y += proftool(SFX)
-BIN_FILES-$(CONFIG_STATIC_RELA) += relocate-rela$(SFX)
-
-# Source files which exist outside the tools directory
-EXT_OBJ_FILES-$(CONFIG_BUILD_ENVCRC) += common/env_embedded.o
-EXT_OBJ_FILES-y += common/image.o
-EXT_OBJ_FILES-$(CONFIG_FIT) += common/image-fit.o
-EXT_OBJ_FILES-y += common/image-sig.o
-EXT_OBJ_FILES-y += lib/crc32.o
-EXT_OBJ_FILES-y += lib/md5.o
-EXT_OBJ_FILES-y += lib/sha1.o
-
-# Source files located in the tools directory
-NOPED_OBJ_FILES-y += aisimage.o
-NOPED_OBJ_FILES-y += default_image.o
-NOPED_OBJ_FILES-y += dumpimage.o
-NOPED_OBJ_FILES-y += fit_image.o
-NOPED_OBJ_FILES-y += image-host.o
-NOPED_OBJ_FILES-y += imximage.o
-NOPED_OBJ_FILES-y += kwbimage.o
-NOPED_OBJ_FILES-y += imagetool.o
-NOPED_OBJ_FILES-y += mkenvimage.o
-NOPED_OBJ_FILES-y += mkimage.o
-NOPED_OBJ_FILES-y += mxsimage.o
-NOPED_OBJ_FILES-y += omapimage.o
-NOPED_OBJ_FILES-y += os_support.o
-NOPED_OBJ_FILES-y += pblimage.o
-NOPED_OBJ_FILES-y += proftool.o
-NOPED_OBJ_FILES-y += ublimage.o
-NOPED_OBJ_FILES-y += relocate-rela.o
-OBJ_FILES-$(CONFIG_BUILD_ENVCRC) += envcrc.o
-OBJ_FILES-$(CONFIG_CMD_LOADS) += img2srec.o
-OBJ_FILES-$(CONFIG_CMD_NET) += gen_eth_addr.o
-OBJ_FILES-$(CONFIG_EXYNOS_SPL) += mkexynosspl.o
-OBJ_FILES-$(CONFIG_KIRKWOOD) += kwboot.o
-OBJ_FILES-$(CONFIG_LCD_LOGO) += bmp_logo.o
-OBJ_FILES-$(CONFIG_MX23) += mxsboot.o
-OBJ_FILES-$(CONFIG_MX28) += mxsboot.o
-OBJ_FILES-$(CONFIG_NETCONSOLE) += ncb.o
-OBJ_FILES-$(CONFIG_SHA1_CHECK_UB_IMG) += ubsha1.o
-OBJ_FILES-$(CONFIG_SMDK5250) += mkexynosspl.o
-OBJ_FILES-$(CONFIG_VIDEO_LOGO) += bmp_logo.o
-OBJ_FILES-$(CONFIG_XWAY_SWAP_BYTES) += xway-swap-bytes.o
+# TODO: CONFIG_CMD_LICENSE does not work
+hostprogs-$(CONFIG_CMD_LICENSE) += bin2header$(SFX)
 
-# Don't build by default
-#ifeq ($(ARCH),ppc)
-#BIN_FILES-y += mpc86x_clk$(SFX)
-#OBJ_FILES-y += mpc86x_clk.o
-#endif
+hostprogs-$(CONFIG_LCD_LOGO) += bmp_logo$(SFX)
+hostprogs-$(CONFIG_VIDEO_LOGO) += bmp_logo$(SFX)
+HOSTCFLAGS_bmp_logo$(SFX).o := -pedantic
+
+hostprogs-$(CONFIG_BUILD_ENVCRC) += envcrc$(SFX)
+envcrc$(SFX)-objs := crc32.o env_embedded.o envcrc.o sha1.o
 
+hostprogs-$(CONFIG_CMD_NET) += gen_eth_addr$(SFX)
+HOSTCFLAGS_gen_eth_addr$(SFX).o := -pedantic
+
+hostprogs-$(CONFIG_CMD_LOADS) += img2srec$(SFX)
+HOSTCFLAGS_img2srec$(SFX).o := -pedantic
+
+hostprogs-$(CONFIG_XWAY_SWAP_BYTES) += xway-swap-bytes$(SFX)
+HOSTCFLAGS_xway-swap-bytes$(SFX).o := -pedantic
+
+hostprogs-y += mkenvimage$(SFX)
+mkenvimage$(SFX)-objs := crc32.o mkenvimage.o os_support.o
+
+hostprogs-y += dumpimage$(SFX) mkimage$(SFX)
+
+FIT_SIG_OBJS-$(CONFIG_FIT_SIGNATURE) := image-sig.o
 # Flattened device tree objects
-LIBFDT_OBJ_FILES-y += fdt.o
-LIBFDT_OBJ_FILES-y += fdt_ro.o
-LIBFDT_OBJ_FILES-y += fdt_rw.o
-LIBFDT_OBJ_FILES-y += fdt_strerror.o
-LIBFDT_OBJ_FILES-y += fdt_wip.o
+LIBFDT_OBJS := fdt.o fdt_ro.o fdt_rw.o fdt_strerror.o fdt_wip.o
+RSA_OBJS-$(CONFIG_FIT_SIGNATURE) := rsa-sign.o
+
+# common objs for dumpimage and mkimage
+dumpimage-mkimage-objs := aisimage.o \
+                       $(FIT_SIG_OBJS-y) \
+                       crc32.o \
+                       default_image.o \
+                       fit_image.o \
+                       image-fit.o \
+                       image-host.o \
+                       image.o \
+                       imagetool.o \
+                       imximage.o \
+                       kwbimage.o \
+                       md5.o \
+                       mxsimage.o \
+                       omapimage.o \
+                       os_support.o \
+                       pblimage.o \
+                       sha1.o \
+                       ublimage.o \
+                       $(LIBFDT_OBJS) \
+                       $(RSA_OBJS-y)
+
+dumpimage$(SFX)-objs := $(dumpimage-mkimage-objs) dumpimage.o
+mkimage$(SFX)-objs   := $(dumpimage-mkimage-objs) mkimage.o
+
+# TODO(sjg@chromium.org): Is this correct on Mac OS?
+
+# MXSImage needs LibSSL
+ifneq ($(CONFIG_MX23)$(CONFIG_MX28),)
+HOSTLOADLIBES_dumpimage$(SFX) := -lssl -lcrypto
+HOSTLOADLIBES_mkimage$(SFX) := -lssl -lcrypto
+# Add CONFIG_MXS into host CFLAGS, so we can check whether or not register
+# the mxsimage support within tools/mxsimage.c .
+HOSTCFLAGS_mxsimage.o += -DCONFIG_MXS
+endif
+
+ifdef CONFIG_FIT_SIGNATURE
+HOSTLOADLIBES_dumpimage$(SFX) := -lssl -lcrypto
+HOSTLOADLIBES_mkimage$(SFX) := -lssl -lcrypto
+
+# This affects include/image.h, but including the board config file
+# is tricky, so manually define this options here.
+HOST_EXTRACFLAGS       += -DCONFIG_FIT_SIGNATURE
+endif
+
+hostprogs-$(CONFIG_EXYNOS5250) += mkexynosspl$(SFX)
+hostprogs-$(CONFIG_EXYNOS5420) += mkexynosspl$(SFX)
+HOSTCFLAGS_mkexynosspl$(SFX).o := -pedantic
+
+hostprogs-$(CONFIG_MX23) += mxsboot$(SFX)
+hostprogs-$(CONFIG_MX28) += mxsboot$(SFX)
+HOSTCFLAGS_mxsboot$(SFX).o := -pedantic
+
+hostprogs-$(CONFIG_NETCONSOLE) += ncb$(SFX)
+hostprogs-$(CONFIG_SHA1_CHECK_UB_IMG) += ubsha1$(SFX)
+
+ubsha1$(SFX)-objs := os_support.o sha1.o ubsha1.o
+
+HOSTCFLAGS_ubsha1.o := -pedantic
+
+hostprogs-$(CONFIG_KIRKWOOD) += kwboot$(SFX)
+hostprogs-y += proftool$(SFX)
+hostprogs-$(CONFIG_STATIC_RELA) += relocate-rela$(SFX)
 
-# RSA objects
-RSA_OBJ_FILES-$(CONFIG_FIT_SIGNATURE) += rsa-sign.o
+# We build some files with extra pedantic flags to try to minimize things
+# that won't build on some weird host compiler -- though there are lots of
+# exceptions for files that aren't complaint.
+HOSTCFLAGS_crc32.o := -pedantic
+HOSTCFLAGS_md5.o := -pedantic
+HOSTCFLAGS_sha1.o := -pedantic
+
+# Don't build by default
+#hostprogs-$(CONFIG_PPC) += mpc86x_clk$(SFX)
+#HOSTCFLAGS_mpc86x_clk$(SFX).o := -pedantic
+
+always := $(hostprogs-y)
 
 # Generated LCD/video logo
-LOGO_H = $(OBJTREE)/include/bmp_logo.h
-LOGO_DATA_H = $(OBJTREE)/include/bmp_logo_data.h
+LOGO_H = $(objtree)/include/bmp_logo.h
+LOGO_DATA_H = $(objtree)/include/bmp_logo_data.h
 LOGO-$(CONFIG_LCD_LOGO) += $(LOGO_H)
 LOGO-$(CONFIG_LCD_LOGO) += $(LOGO_DATA_H)
 LOGO-$(CONFIG_VIDEO_LOGO) += $(LOGO_H)
@@ -130,197 +154,40 @@ LOGO-$(CONFIG_VIDEO_LOGO) += $(LOGO_DATA_H)
 
 # Generic logo
 ifeq ($(LOGO_BMP),)
-LOGO_BMP= logos/denx.bmp
+LOGO_BMP= $(srctree)/$(src)/logos/denx.bmp
 
 # Use board logo and fallback to vendor
 ifneq ($(wildcard logos/$(BOARD).bmp),)
-LOGO_BMP= logos/$(BOARD).bmp
+LOGO_BMP= $(srctree)/$(src)/logos/$(BOARD).bmp
 else
 ifneq ($(wildcard logos/$(VENDOR).bmp),)
-LOGO_BMP= logos/$(VENDOR).bmp
+LOGO_BMP= $(srctree)/$(src)/logos/$(VENDOR).bmp
 endif
 endif
 
 endif # !LOGO_BMP
 
-# now $(obj) is defined
-HOSTSRCS += $(addprefix $(SRCTREE)/,$(EXT_OBJ_FILES-y:.o=.c))
-HOSTSRCS += $(addprefix $(SRCTREE)/tools/,$(OBJ_FILES-y:.o=.c))
-HOSTSRCS += $(addprefix $(SRCTREE)/lib/libfdt/,$(LIBFDT_OBJ_FILES-y:.o=.c))
-HOSTSRCS += $(addprefix $(SRCTREE)/lib/rsa/,$(RSA_OBJ_FILES-y:.o=.c))
-BINS   := $(addprefix $(obj),$(sort $(BIN_FILES-y)))
-LIBFDT_OBJS    := $(addprefix $(obj),$(LIBFDT_OBJ_FILES-y))
-RSA_OBJS       := $(addprefix $(obj),$(RSA_OBJ_FILES-y))
-
-# We cannot check CONFIG_FIT_SIGNATURE here since it is not set on the host
-FIT_SIG_OBJ_FILES      := image-sig.o
-FIT_SIG_OBJS           := $(addprefix $(obj),$(FIT_SIG_OBJ_FILES))
-
-HOSTOBJS := $(addprefix $(obj),$(OBJ_FILES-y))
-NOPEDOBJS := $(addprefix $(obj),$(NOPED_OBJ_FILES-y))
-
 #
 # Use native tools and options
 # Define __KERNEL_STRICT_NAMES to prevent typedef overlaps
 # Define _GNU_SOURCE to obtain the getline prototype from stdio.h
 #
-HOSTCPPFLAGS = -include $(SRCTREE)/include/libfdt_env.h \
-               -idirafter $(SRCTREE)/include \
-               -idirafter $(SRCTREE)/arch/$(ARCH)/include \
-               -idirafter $(OBJTREE)/include \
-               -I $(SRCTREE)/lib/libfdt \
-               -I $(SRCTREE)/tools \
+HOST_EXTRACFLAGS += -include $(SRCTREE)/include/libfdt_env.h \
+               $(patsubst -I%,-idirafter%, $(UBOOTINCLUDE)) \
+               -I$(SRCTREE)/lib/libfdt \
+               -I$(SRCTREE)/tools \
                -DCONFIG_SYS_TEXT_BASE=$(CONFIG_SYS_TEXT_BASE) \
                -DUSE_HOSTCC \
                -D__KERNEL_STRICT_NAMES \
                -D_GNU_SOURCE
 
+__build:       $(LOGO-y)
 
-all:   $(obj).depend $(BINS) $(LOGO-y) subdirs
-
-$(obj)bin2header$(SFX): $(obj)bin2header.o
-       $(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^
-       $(HOSTSTRIP) $@
-
-$(obj)bmp_logo$(SFX):  $(obj)bmp_logo.o
-       $(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^
-       $(HOSTSTRIP) $@
-
-$(obj)proftool(SFX):   $(obj)proftool.o
-       $(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^
-       $(HOSTSTRIP) $@
-
-$(obj)envcrc$(SFX):    $(obj)crc32.o $(obj)env_embedded.o $(obj)envcrc.o $(obj)sha1.o
-       $(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^
-
-$(obj)gen_eth_addr$(SFX):      $(obj)gen_eth_addr.o
-       $(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^
-       $(HOSTSTRIP) $@
-
-$(obj)img2srec$(SFX):  $(obj)img2srec.o
-       $(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^
-       $(HOSTSTRIP) $@
-
-$(obj)xway-swap-bytes$(SFX):   $(obj)xway-swap-bytes.o
-       $(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^
-       $(HOSTSTRIP) $@
-
-$(obj)dumpimage$(SFX): $(obj)aisimage.o \
-                       $(FIT_SIG_OBJS) \
-                       $(obj)crc32.o \
-                       $(obj)default_image.o \
-                       $(obj)fit_image.o \
-                       $(obj)image-fit.o \
-                       $(obj)image.o \
-                       $(obj)image-host.o \
-                       $(obj)imagetool.o \
-                       $(obj)imximage.o \
-                       $(obj)kwbimage.o \
-                       $(obj)dumpimage.o \
-                       $(obj)md5.o \
-                       $(obj)mxsimage.o \
-                       $(obj)omapimage.o \
-                       $(obj)os_support.o \
-                       $(obj)pblimage.o \
-                       $(obj)sha1.o \
-                       $(obj)ublimage.o \
-                       $(LIBFDT_OBJS) \
-                       $(RSA_OBJS)
-       $(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^ $(HOSTLIBS)
-       $(HOSTSTRIP) $@
-
-$(obj)mkenvimage$(SFX):        $(obj)crc32.o $(obj)mkenvimage.o \
-       $(obj)os_support.o
-       $(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^
-       $(HOSTSTRIP) $@
-
-$(obj)mkimage$(SFX):   $(obj)aisimage.o \
-                       $(FIT_SIG_OBJS) \
-                       $(obj)crc32.o \
-                       $(obj)default_image.o \
-                       $(obj)fit_image.o \
-                       $(obj)image-fit.o \
-                       $(obj)image-host.o \
-                       $(obj)image.o \
-                       $(obj)imagetool.o \
-                       $(obj)imximage.o \
-                       $(obj)kwbimage.o \
-                       $(obj)md5.o \
-                       $(obj)mkimage.o \
-                       $(obj)mxsimage.o \
-                       $(obj)omapimage.o \
-                       $(obj)os_support.o \
-                       $(obj)pblimage.o \
-                       $(obj)sha1.o \
-                       $(obj)ublimage.o \
-                       $(LIBFDT_OBJS) \
-                       $(RSA_OBJS)
-       $(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^ $(HOSTLIBS)
-       $(HOSTSTRIP) $@
-
-$(obj)mk$(BOARD)spl$(SFX):     $(obj)mkexynosspl.o
-       $(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^
-       $(HOSTSTRIP) $@
-
-$(obj)mpc86x_clk$(SFX):        $(obj)mpc86x_clk.o
-       $(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^
-       $(HOSTSTRIP) $@
-
-$(obj)mxsboot$(SFX):   $(obj)mxsboot.o
-       $(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^
-       $(HOSTSTRIP) $@
-
-$(obj)ncb$(SFX):       $(obj)ncb.o
-       $(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^
-       $(HOSTSTRIP) $@
-
-$(obj)ubsha1$(SFX):    $(obj)os_support.o $(obj)sha1.o $(obj)ubsha1.o
-       $(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^
-
-$(obj)kwboot$(SFX): $(obj)kwboot.o
-       $(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^
-       $(HOSTSTRIP) $@
-
-$(obj)relocate-rela$(SFX): $(obj)relocate-rela.o
-       $(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^
-       $(HOSTSTRIP) $@
-
-# Some of the tool objects need to be accessed from outside the tools directory
-$(obj)%.o: $(SRCTREE)/common/%.c
-       $(HOSTCC) -g $(HOSTCFLAGS_NOPED) -c -o $@ $<
-
-$(obj)%.o: $(SRCTREE)/lib/%.c
-       $(HOSTCC) -g $(HOSTCFLAGS) -c -o $@ $<
-
-$(obj)%.o: $(SRCTREE)/lib/libfdt/%.c
-       $(HOSTCC) -g $(HOSTCFLAGS_NOPED) -c -o $@ $<
-
-$(obj)%.o: $(SRCTREE)/lib/rsa/%.c
-       $(HOSTCC) -g $(HOSTCFLAGS_NOPED) -c -o $@ $<
-
-subdirs:
-ifeq ($(TOOLSUBDIRS),)
-       @:
-else
-       @for dir in $(TOOLSUBDIRS) ; do \
-           $(MAKE) \
-               HOSTOS=$(HOSTOS) \
-               HOSTARCH=$(HOSTARCH) \
-               -C $$dir || exit 1 ; \
-       done
-endif
-
-$(LOGO_H):     $(obj)bmp_logo $(LOGO_BMP)
-       $(obj)./bmp_logo --gen-info $(LOGO_BMP) > $@
-
-$(LOGO_DATA_H):        $(obj)bmp_logo $(LOGO_BMP)
-       $(obj)./bmp_logo --gen-data $(LOGO_BMP) > $@
-
-#########################################################################
-
-# defines $(obj).depend target
-include $(SRCTREE)/rules.mk
+$(LOGO_H):     $(obj)/bmp_logo $(LOGO_BMP)
+       $(obj)/bmp_logo --gen-info $(LOGO_BMP) > $@
 
-sinclude $(obj).depend
+$(LOGO_DATA_H):        $(obj)/bmp_logo $(LOGO_BMP)
+       $(obj)/bmp_logo --gen-data $(LOGO_BMP) > $@
 
-#########################################################################
+# Let clean descend into subdirs
+subdir- += env
diff --git a/tools/crc32.c b/tools/crc32.c
new file mode 100644 (file)
index 0000000..aed7112
--- /dev/null
@@ -0,0 +1 @@
+#include "../lib/crc32.c"
index d8e28b0e12adae3978dd8d5959d3b98b8da5350d..10aba2ba66ded871e1b08f72402bf5682a7998da 100644 (file)
@@ -1,11 +1,3 @@
-include $(TOPDIR)/config.mk
+hostprogs-y := easylogo
 
-all: $(obj)easylogo
-
-$(obj)easylogo: $(SRCTREE)/tools/easylogo/easylogo.c
-       $(HOSTCC) $(HOSTCFLAGS_NOPED) $(HOSTLDFLAGS) -o $@ $^
-
-clean:
-       rm -f $(obj)easylogo
-
-.PHONY: all clean
+always := $(hostprogs-y)
diff --git a/tools/env/.gitignore b/tools/env/.gitignore
new file mode 100644 (file)
index 0000000..804abac
--- /dev/null
@@ -0,0 +1,2 @@
+fw_printenv
+fw_printenv_unstripped
index 27892f74d096b56c8440c898e0af73e876b8cf4e..6ad81fdb330dac971b4410a182a189afc031bb51 100644 (file)
@@ -5,39 +5,30 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-include $(TOPDIR)/config.mk
-
-HOSTSRCS := $(SRCTREE)/lib/crc32.c  fw_env.c  fw_env_main.c
-HOSTSRCS += $(SRCTREE)/lib/ctype.c $(SRCTREE)/lib/linux_string.c
-HOSTSRCS += $(SRCTREE)/common/env_attr.c $(SRCTREE)/common/env_flags.c
-HEADERS        := fw_env.h $(OBJTREE)/include/config.h
+# fw_printenv is supposed to run on the target system, which means it should be
+# built with cross tools. Although it may look weird, we only replace "HOSTCC"
+# with "CC" here for the maximum code reuse of scripts/Makefile.host.
+HOSTCC = $(CC)
 
 # Compile for a hosted environment on the target
-HOSTCPPFLAGS  = -idirafter $(SRCTREE)/include \
-               -idirafter $(SRCTREE)/arch/$(ARCH)/include \
-               -idirafter $(OBJTREE)/include \
+HOST_EXTRACFLAGS  = $(patsubst -I%,-idirafter%, $(UBOOTINCLUDE)) \
                -idirafter $(SRCTREE)/tools/env \
                -DUSE_HOSTCC \
                -DTEXT_BASE=$(TEXT_BASE)
 
 ifeq ($(MTD_VERSION),old)
-HOSTCPPFLAGS += -DMTD_OLD
+HOST_EXTRACFLAGS += -DMTD_OLD
 endif
 
-all:   $(obj)fw_printenv
-
-# Some files complain if compiled with -pedantic, use HOSTCFLAGS_NOPED
-$(obj)fw_printenv:     $(HOSTSRCS) $(HEADERS)
-       $(HOSTCC) $(HOSTCFLAGS_NOPED) $(HOSTLDFLAGS) -o $@ $(HOSTSRCS)
-       $(HOSTSTRIP) $@
-
-clean:
-       rm -f $(obj)fw_printenv
-
-#########################################################################
+always := fw_printenv
+hostprogs-y := fw_printenv_unstripped
 
-include $(TOPDIR)/rules.mk
+fw_printenv_unstripped-objs := fw_env.o fw_env_main.o \
+       crc32.o ctype.o linux_string.o \
+       env_attr.o env_flags.o
 
-sinclude $(obj).depend
+quiet_cmd_strip = STRIP   $@
+      cmd_strip = $(STRIP) -o $@ $<
 
-#########################################################################
+$(obj)/fw_printenv: $(obj)/fw_printenv_unstripped FORCE
+       $(call if_changed,strip)
index 1020b57b059c5c4508551efd364caac55f9aa0be..24e31bc9f808fd6513893b44aefa2d29134e97ef 100644 (file)
@@ -2,11 +2,10 @@
 This is a demo implementation of a Linux command line tool to access
 the U-Boot's environment variables.
 
-In the current version, there is an issue in cross-compilation.
 In order to cross-compile fw_printenv, run
-    make HOSTCC=<your CC cross-compiler> env
+    make CROSS_COMPILE=<your cross-compiler prefix> env
 in the root directory of the U-Boot distribution. For example,
-    make HOSTCC=arm-linux-gcc env
+    make CROSS_COMPILE=arm-linux- env
 
 For the run-time utility configuration uncomment the line
 #define CONFIG_FILE  "/etc/fw_env.config"
diff --git a/tools/env/crc32.c b/tools/env/crc32.c
new file mode 100644 (file)
index 0000000..34f8178
--- /dev/null
@@ -0,0 +1 @@
+#include "../../lib/crc32.c"
diff --git a/tools/env/ctype.c b/tools/env/ctype.c
new file mode 100644 (file)
index 0000000..21050e9
--- /dev/null
@@ -0,0 +1 @@
+#include "../../lib/ctype.c"
diff --git a/tools/env/env_attr.c b/tools/env/env_attr.c
new file mode 100644 (file)
index 0000000..502d4c9
--- /dev/null
@@ -0,0 +1 @@
+#include "../../common/env_attr.c"
diff --git a/tools/env/env_flags.c b/tools/env/env_flags.c
new file mode 100644 (file)
index 0000000..b261cb8
--- /dev/null
@@ -0,0 +1 @@
+#include "../../common/env_flags.c"
diff --git a/tools/env/linux_string.c b/tools/env/linux_string.c
new file mode 100644 (file)
index 0000000..6c01add
--- /dev/null
@@ -0,0 +1 @@
+#include "../../lib/linux_string.c"
diff --git a/tools/env_embedded.c b/tools/env_embedded.c
new file mode 100644 (file)
index 0000000..59a6357
--- /dev/null
@@ -0,0 +1 @@
+#include "../common/env_embedded.c"
diff --git a/tools/fdt.c b/tools/fdt.c
new file mode 100644 (file)
index 0000000..1eafc56
--- /dev/null
@@ -0,0 +1 @@
+#include "../lib/libfdt/fdt.c"
diff --git a/tools/fdt_ro.c b/tools/fdt_ro.c
new file mode 100644 (file)
index 0000000..9005fe3
--- /dev/null
@@ -0,0 +1 @@
+#include "../lib/libfdt/fdt_ro.c"
diff --git a/tools/fdt_rw.c b/tools/fdt_rw.c
new file mode 100644 (file)
index 0000000..adc3fdf
--- /dev/null
@@ -0,0 +1 @@
+#include "../lib/libfdt/fdt_rw.c"
diff --git a/tools/fdt_strerror.c b/tools/fdt_strerror.c
new file mode 100644 (file)
index 0000000..d0b5822
--- /dev/null
@@ -0,0 +1 @@
+#include "../lib/libfdt/fdt_strerror.c"
diff --git a/tools/fdt_wip.c b/tools/fdt_wip.c
new file mode 100644 (file)
index 0000000..7810f07
--- /dev/null
@@ -0,0 +1 @@
+#include "../lib/libfdt/fdt_wip.c"
index dd98fb65c0dccef2701d1bb877f055d0cda58c83..451332031ecbf322c513c8b0bd1bbd48b3b97cdc 100644 (file)
@@ -8,49 +8,39 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-include $(TOPDIR)/config.mk
-
-BINS   = gdbsend gdbcont
-
-COBJS  = gdbsend.o gdbcont.o error.o remote.o serial.o
-
-HOSTOBJS := $(addprefix $(obj),$(COBJS))
-HOSTSRCS := $(COBJS:.o=.c)
-BINS   := $(addprefix $(obj),$(BINS))
+ifneq ($(HOSTOS),cygwin)
+
+# Location of a usable BFD library, where we define "usable" as
+# "built for ${HOST}, supports ${TARGET}".  Sensible values are
+# - When cross-compiling: the root of the cross-environment
+# - Linux/ppc (native): /usr
+# - NetBSD/ppc (native): you lose ... (must extract these from the
+#   binutils build directory, plus the native and U-Boot include
+#   files don't like each other)
+
+ifeq ($(HOSTOS),darwin)
+BFD_ROOT_DIR =         /usr/local/tools
+else
+ifeq ($(HOSTARCH),$(ARCH))
+# native
+BFD_ROOT_DIR =         /usr
+else
+#BFD_ROOT_DIR =                /LinuxPPC/CDK           # Linux/i386
+#BFD_ROOT_DIR =                /usr/pkg/cross          # NetBSD/i386
+BFD_ROOT_DIR =         /opt/powerpc
+endif
+endif
 
 #
 # Use native tools and options
 #
-HOSTCPPFLAGS = -I$(BFD_ROOT_DIR)/include
-
-ifeq ($(HOSTOS),cygwin)
-
-all:
-$(obj).depend:
-
-else   # ! CYGWIN
-
-all:   $(obj).depend $(BINS)
-
-$(obj)gdbsend: $(obj)gdbsend.o $(obj)error.o $(obj)remote.o $(obj)serial.o
-               $(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^
-
-$(obj)gdbcont: $(obj)gdbcont.o $(obj)error.o $(obj)remote.o $(obj)serial.o
-               $(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^
-
-clean:
-       rm -f $(HOSTOBJS)
-
-distclean:     clean
-       rm -f $(BINS) $(obj)core $(obj)*.bak $(obj).depend
-
-#########################################################################
+HOST_EXTRACFLAGS := -I$(BFD_ROOT_DIR)/include -pedantic
 
-# defines $(obj).depend target
-include $(SRCTREE)/rules.mk
+hostprogs-y := gdbsend gdbcont
 
-sinclude $(obj).depend
+gdbsend-objs := gdbsend.o error.o remote.o serial.o
+gdbcont-objs := gdbcont.o error.o remote.o serial.o
 
-#########################################################################
+always := $(hostprogs-y)
 
 endif  # cygwin
diff --git a/tools/image-fit.c b/tools/image-fit.c
new file mode 100644 (file)
index 0000000..037e5cc
--- /dev/null
@@ -0,0 +1 @@
+#include "../common/image-fit.c"
diff --git a/tools/image-sig.c b/tools/image-sig.c
new file mode 100644 (file)
index 0000000..e45419f
--- /dev/null
@@ -0,0 +1 @@
+#include "../common/image-sig.c"
diff --git a/tools/image.c b/tools/image.c
new file mode 100644 (file)
index 0000000..0f9bacc
--- /dev/null
@@ -0,0 +1 @@
+#include "../common/image.c"
diff --git a/tools/kernel-doc/Makefile b/tools/kernel-doc/Makefile
deleted file mode 100644 (file)
index eb56e2e..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# Copyright (C) 2012 Marek Vasut <marex@denx.de>
-#
-# SPDX-License-Identifier:     GPL-2.0+
-#
-
-include $(TOPDIR)/config.mk
-
-all:   $(obj)docproc
-
-$(obj)docproc: docproc.c
-       $(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^
-       $(HOSTSTRIP) $@
-
-clean:
-       rm -rf docproc
-
-#########################################################################
-
-# defines $(obj).depend target
-include $(SRCTREE)/rules.mk
-
-sinclude $(obj).depend
-
-#########################################################################
diff --git a/tools/kernel-doc/docproc.c b/tools/kernel-doc/docproc.c
deleted file mode 100644 (file)
index a9b49c5..0000000
+++ /dev/null
@@ -1,576 +0,0 @@
-/*
- *     docproc is a simple preprocessor for the template files
- *      used as placeholders for the kernel internal documentation.
- *     docproc is used for documentation-frontend and
- *      dependency-generator.
- *     The two usages have in common that they require
- *     some knowledge of the .tmpl syntax, therefore they
- *     are kept together.
- *
- *     documentation-frontend
- *             Scans the template file and call kernel-doc for
- *             all occurrences of ![EIF]file
- *             Beforehand each referenced file is scanned for
- *             any symbols that are exported via these macros:
- *                     EXPORT_SYMBOL(), EXPORT_SYMBOL_GPL(), &
- *                     EXPORT_SYMBOL_GPL_FUTURE()
- *             This is used to create proper -function and
- *             -nofunction arguments in calls to kernel-doc.
- *             Usage: docproc doc file.tmpl
- *
- *     dependency-generator:
- *             Scans the template file and list all files
- *             referenced in a format recognized by make.
- *             Usage:  docproc depend file.tmpl
- *             Writes dependency information to stdout
- *             in the following format:
- *             file.tmpl src.c src2.c
- *             The filenames are obtained from the following constructs:
- *             !Efilename
- *             !Ifilename
- *             !Dfilename
- *             !Ffilename
- *             !Pfilename
- *
- */
-
-#define _GNU_SOURCE
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <unistd.h>
-#include <limits.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-
-/* exitstatus is used to keep track of any failing calls to kernel-doc,
- * but execution continues. */
-int exitstatus = 0;
-
-typedef void DFL(char *);
-DFL *defaultline;
-
-typedef void FILEONLY(char * file);
-FILEONLY *internalfunctions;
-FILEONLY *externalfunctions;
-FILEONLY *symbolsonly;
-FILEONLY *findall;
-
-typedef void FILELINE(char * file, char * line);
-FILELINE * singlefunctions;
-FILELINE * entity_system;
-FILELINE * docsection;
-
-#define MAXLINESZ     2048
-#define MAXFILES      250
-#define KERNELDOCPATH "tools/kernel-doc/"
-#define KERNELDOC     "kernel-doc"
-#define DOCBOOK       "-docbook"
-#define LIST          "-list"
-#define FUNCTION      "-function"
-#define NOFUNCTION    "-nofunction"
-#define NODOCSECTIONS "-no-doc-sections"
-
-static char *srctree, *kernsrctree;
-
-static char **all_list = NULL;
-static int all_list_len = 0;
-
-static void consume_symbol(const char *sym)
-{
-       int i;
-
-       for (i = 0; i < all_list_len; i++) {
-               if (!all_list[i])
-                       continue;
-               if (strcmp(sym, all_list[i]))
-                       continue;
-               all_list[i] = NULL;
-               break;
-       }
-}
-
-static void usage (void)
-{
-       fprintf(stderr, "Usage: docproc {doc|depend} file\n");
-       fprintf(stderr, "Input is read from file.tmpl. Output is sent to stdout\n");
-       fprintf(stderr, "doc: frontend when generating kernel documentation\n");
-       fprintf(stderr, "depend: generate list of files referenced within file\n");
-       fprintf(stderr, "Environment variable SRCTREE: absolute path to sources.\n");
-       fprintf(stderr, "                     KBUILD_SRC: absolute path to kernel source tree.\n");
-}
-
-/*
- * Execute kernel-doc with parameters given in svec
- */
-static void exec_kernel_doc(char **svec)
-{
-       pid_t pid;
-       int ret;
-       char real_filename[PATH_MAX + 1];
-       /* Make sure output generated so far are flushed */
-       fflush(stdout);
-       switch (pid=fork()) {
-               case -1:
-                       perror("fork");
-                       exit(1);
-               case  0:
-                       memset(real_filename, 0, sizeof(real_filename));
-                       strncat(real_filename, kernsrctree, PATH_MAX);
-                       strncat(real_filename, "/" KERNELDOCPATH KERNELDOC,
-                                       PATH_MAX - strlen(real_filename));
-                       execvp(real_filename, svec);
-                       fprintf(stderr, "exec ");
-                       perror(real_filename);
-                       exit(1);
-               default:
-                       waitpid(pid, &ret ,0);
-       }
-       if (WIFEXITED(ret))
-               exitstatus |= WEXITSTATUS(ret);
-       else
-               exitstatus = 0xff;
-}
-
-/* Types used to create list of all exported symbols in a number of files */
-struct symbols
-{
-       char *name;
-};
-
-struct symfile
-{
-       char *filename;
-       struct symbols *symbollist;
-       int symbolcnt;
-};
-
-struct symfile symfilelist[MAXFILES];
-int symfilecnt = 0;
-
-static void add_new_symbol(struct symfile *sym, char * symname)
-{
-       sym->symbollist =
-         realloc(sym->symbollist, (sym->symbolcnt + 1) * sizeof(char *));
-       sym->symbollist[sym->symbolcnt++].name = strdup(symname);
-}
-
-/* Add a filename to the list */
-static struct symfile * add_new_file(char * filename)
-{
-       symfilelist[symfilecnt++].filename = strdup(filename);
-       return &symfilelist[symfilecnt - 1];
-}
-
-/* Check if file already are present in the list */
-static struct symfile * filename_exist(char * filename)
-{
-       int i;
-       for (i=0; i < symfilecnt; i++)
-               if (strcmp(symfilelist[i].filename, filename) == 0)
-                       return &symfilelist[i];
-       return NULL;
-}
-
-/*
- * List all files referenced within the template file.
- * Files are separated by tabs.
- */
-static void adddep(char * file)                   { printf("\t%s", file); }
-static void adddep2(char * file, char * line)     { line = line; adddep(file); }
-static void noaction(char * line)                 { line = line; }
-static void noaction2(char * file, char * line)   { file = file; line = line; }
-
-/* Echo the line without further action */
-static void printline(char * line)               { printf("%s", line); }
-
-/*
- * Find all symbols in filename that are exported with EXPORT_SYMBOL &
- * EXPORT_SYMBOL_GPL (& EXPORT_SYMBOL_GPL_FUTURE implicitly).
- * All symbols located are stored in symfilelist.
- */
-static void find_export_symbols(char * filename)
-{
-       FILE * fp;
-       struct symfile *sym;
-       char line[MAXLINESZ];
-       if (filename_exist(filename) == NULL) {
-               char real_filename[PATH_MAX + 1];
-               memset(real_filename, 0, sizeof(real_filename));
-               strncat(real_filename, srctree, PATH_MAX);
-               strncat(real_filename, "/", PATH_MAX - strlen(real_filename));
-               strncat(real_filename, filename,
-                               PATH_MAX - strlen(real_filename));
-               sym = add_new_file(filename);
-               fp = fopen(real_filename, "r");
-               if (fp == NULL) {
-                       fprintf(stderr, "docproc: ");
-                       perror(real_filename);
-                       exit(1);
-               }
-               while (fgets(line, MAXLINESZ, fp)) {
-                       char *p;
-                       char *e;
-                       if (((p = strstr(line, "EXPORT_SYMBOL_GPL")) != NULL) ||
-                           ((p = strstr(line, "EXPORT_SYMBOL")) != NULL)) {
-                               /* Skip EXPORT_SYMBOL{_GPL} */
-                               while (isalnum(*p) || *p == '_')
-                                       p++;
-                               /* Remove parentheses & additional whitespace */
-                               while (isspace(*p))
-                                       p++;
-                               if (*p != '(')
-                                       continue; /* Syntax error? */
-                               else
-                                       p++;
-                               while (isspace(*p))
-                                       p++;
-                               e = p;
-                               while (isalnum(*e) || *e == '_')
-                                       e++;
-                               *e = '\0';
-                               add_new_symbol(sym, p);
-                       }
-               }
-               fclose(fp);
-       }
-}
-
-/*
- * Document all external or internal functions in a file.
- * Call kernel-doc with following parameters:
- * kernel-doc -docbook -nofunction function_name1 filename
- * Function names are obtained from all the src files
- * by find_export_symbols.
- * intfunc uses -nofunction
- * extfunc uses -function
- */
-static void docfunctions(char * filename, char * type)
-{
-       int i,j;
-       int symcnt = 0;
-       int idx = 0;
-       char **vec;
-
-       for (i=0; i <= symfilecnt; i++)
-               symcnt += symfilelist[i].symbolcnt;
-       vec = malloc((2 + 2 * symcnt + 3) * sizeof(char *));
-       if (vec == NULL) {
-               perror("docproc: ");
-               exit(1);
-       }
-       vec[idx++] = KERNELDOC;
-       vec[idx++] = DOCBOOK;
-       vec[idx++] = NODOCSECTIONS;
-       for (i=0; i < symfilecnt; i++) {
-               struct symfile * sym = &symfilelist[i];
-               for (j=0; j < sym->symbolcnt; j++) {
-                       vec[idx++]     = type;
-                       consume_symbol(sym->symbollist[j].name);
-                       vec[idx++] = sym->symbollist[j].name;
-               }
-       }
-       vec[idx++]     = filename;
-       vec[idx] = NULL;
-       printf("<!-- %s -->\n", filename);
-       exec_kernel_doc(vec);
-       fflush(stdout);
-       free(vec);
-}
-static void intfunc(char * filename) { docfunctions(filename, NOFUNCTION); }
-static void extfunc(char * filename) { docfunctions(filename, FUNCTION);   }
-
-/*
- * Document specific function(s) in a file.
- * Call kernel-doc with the following parameters:
- * kernel-doc -docbook -function function1 [-function function2]
- */
-static void singfunc(char * filename, char * line)
-{
-       char *vec[200]; /* Enough for specific functions */
-       int i, idx = 0;
-       int startofsym = 1;
-       vec[idx++] = KERNELDOC;
-       vec[idx++] = DOCBOOK;
-
-       /* Split line up in individual parameters preceded by FUNCTION */
-       for (i=0; line[i]; i++) {
-               if (isspace(line[i])) {
-                       line[i] = '\0';
-                       startofsym = 1;
-                       continue;
-               }
-               if (startofsym) {
-                       startofsym = 0;
-                       vec[idx++] = FUNCTION;
-                       vec[idx++] = &line[i];
-               }
-       }
-       for (i = 0; i < idx; i++) {
-               if (strcmp(vec[i], FUNCTION))
-                       continue;
-               consume_symbol(vec[i + 1]);
-       }
-       vec[idx++] = filename;
-       vec[idx] = NULL;
-       exec_kernel_doc(vec);
-}
-
-/*
- * Insert specific documentation section from a file.
- * Call kernel-doc with the following parameters:
- * kernel-doc -docbook -function "doc section" filename
- */
-static void docsect(char *filename, char *line)
-{
-       char *vec[6]; /* kerneldoc -docbook -function "section" file NULL */
-       char *s;
-
-       for (s = line; *s; s++)
-               if (*s == '\n')
-                       *s = '\0';
-
-       if (asprintf(&s, "DOC: %s", line) < 0) {
-               perror("asprintf");
-               exit(1);
-       }
-       consume_symbol(s);
-       free(s);
-
-       vec[0] = KERNELDOC;
-       vec[1] = DOCBOOK;
-       vec[2] = FUNCTION;
-       vec[3] = line;
-       vec[4] = filename;
-       vec[5] = NULL;
-       exec_kernel_doc(vec);
-}
-
-static void find_all_symbols(char *filename)
-{
-       char *vec[4]; /* kerneldoc -list file NULL */
-       pid_t pid;
-       int ret, i, count, start;
-       char real_filename[PATH_MAX + 1];
-       int pipefd[2];
-       char *data, *str;
-       size_t data_len = 0;
-
-       vec[0] = KERNELDOC;
-       vec[1] = LIST;
-       vec[2] = filename;
-       vec[3] = NULL;
-
-       if (pipe(pipefd)) {
-               perror("pipe");
-               exit(1);
-       }
-
-       switch (pid=fork()) {
-               case -1:
-                       perror("fork");
-                       exit(1);
-               case  0:
-                       close(pipefd[0]);
-                       dup2(pipefd[1], 1);
-                       memset(real_filename, 0, sizeof(real_filename));
-                       strncat(real_filename, kernsrctree, PATH_MAX);
-                       strncat(real_filename, "/" KERNELDOCPATH KERNELDOC,
-                                       PATH_MAX - strlen(real_filename));
-                       execvp(real_filename, vec);
-                       fprintf(stderr, "exec ");
-                       perror(real_filename);
-                       exit(1);
-               default:
-                       close(pipefd[1]);
-                       data = malloc(4096);
-                       do {
-                               while ((ret = read(pipefd[0],
-                                                  data + data_len,
-                                                  4096)) > 0) {
-                                       data_len += ret;
-                                       data = realloc(data, data_len + 4096);
-                               }
-                       } while (ret == -EAGAIN);
-                       if (ret != 0) {
-                               perror("read");
-                               exit(1);
-                       }
-                       waitpid(pid, &ret ,0);
-       }
-       if (WIFEXITED(ret))
-               exitstatus |= WEXITSTATUS(ret);
-       else
-               exitstatus = 0xff;
-
-       count = 0;
-       /* poor man's strtok, but with counting */
-       for (i = 0; i < data_len; i++) {
-               if (data[i] == '\n') {
-                       count++;
-                       data[i] = '\0';
-               }
-       }
-       start = all_list_len;
-       all_list_len += count;
-       all_list = realloc(all_list, sizeof(char *) * all_list_len);
-       str = data;
-       for (i = 0; i < data_len && start != all_list_len; i++) {
-               if (data[i] == '\0') {
-                       all_list[start] = str;
-                       str = data + i + 1;
-                       start++;
-               }
-       }
-}
-
-/*
- * Parse file, calling action specific functions for:
- * 1) Lines containing !E
- * 2) Lines containing !I
- * 3) Lines containing !D
- * 4) Lines containing !F
- * 5) Lines containing !P
- * 6) Lines containing !C
- * 7) Default lines - lines not matching the above
- */
-static void parse_file(FILE *infile)
-{
-       char line[MAXLINESZ];
-       char * s;
-       while (fgets(line, MAXLINESZ, infile)) {
-               if (line[0] == '!') {
-                       s = line + 2;
-                       switch (line[1]) {
-                               case 'E':
-                                       while (*s && !isspace(*s)) s++;
-                                       *s = '\0';
-                                       externalfunctions(line+2);
-                                       break;
-                               case 'I':
-                                       while (*s && !isspace(*s)) s++;
-                                       *s = '\0';
-                                       internalfunctions(line+2);
-                                       break;
-                               case 'D':
-                                       while (*s && !isspace(*s)) s++;
-                                       *s = '\0';
-                                       symbolsonly(line+2);
-                                       break;
-                               case 'F':
-                                       /* filename */
-                                       while (*s && !isspace(*s)) s++;
-                                       *s++ = '\0';
-                                       /* function names */
-                                       while (isspace(*s))
-                                               s++;
-                                       singlefunctions(line +2, s);
-                                       break;
-                               case 'P':
-                                       /* filename */
-                                       while (*s && !isspace(*s)) s++;
-                                       *s++ = '\0';
-                                       /* DOC: section name */
-                                       while (isspace(*s))
-                                               s++;
-                                       docsection(line + 2, s);
-                                       break;
-                               case 'C':
-                                       while (*s && !isspace(*s)) s++;
-                                       *s = '\0';
-                                       if (findall)
-                                               findall(line+2);
-                                       break;
-                               default:
-                                       defaultline(line);
-                       }
-               } else {
-                       defaultline(line);
-               }
-       }
-       fflush(stdout);
-}
-
-
-int main(int argc, char *argv[])
-{
-       FILE * infile;
-       int i;
-
-       srctree = getenv("SRCTREE");
-       if (!srctree)
-               srctree = getcwd(NULL, 0);
-       kernsrctree = getenv("KBUILD_SRC");
-       if (!kernsrctree || !*kernsrctree)
-               kernsrctree = srctree;
-       if (argc != 3) {
-               usage();
-               exit(1);
-       }
-       /* Open file, exit on error */
-       infile = fopen(argv[2], "r");
-       if (infile == NULL) {
-               fprintf(stderr, "docproc: ");
-               perror(argv[2]);
-               exit(2);
-       }
-
-       if (strcmp("doc", argv[1]) == 0) {
-               /* Need to do this in two passes.
-                * First pass is used to collect all symbols exported
-                * in the various files;
-                * Second pass generate the documentation.
-                * This is required because some functions are declared
-                * and exported in different files :-((
-                */
-               /* Collect symbols */
-               defaultline       = noaction;
-               internalfunctions = find_export_symbols;
-               externalfunctions = find_export_symbols;
-               symbolsonly       = find_export_symbols;
-               singlefunctions   = noaction2;
-               docsection        = noaction2;
-               findall           = find_all_symbols;
-               parse_file(infile);
-
-               /* Rewind to start from beginning of file again */
-               fseek(infile, 0, SEEK_SET);
-               defaultline       = printline;
-               internalfunctions = intfunc;
-               externalfunctions = extfunc;
-               symbolsonly       = printline;
-               singlefunctions   = singfunc;
-               docsection        = docsect;
-               findall           = NULL;
-
-               parse_file(infile);
-
-               for (i = 0; i < all_list_len; i++) {
-                       if (!all_list[i])
-                               continue;
-                       fprintf(stderr, "Warning: didn't use docs for %s\n",
-                               all_list[i]);
-               }
-       } else if (strcmp("depend", argv[1]) == 0) {
-               /* Create first part of dependency chain
-                * file.tmpl */
-               printf("%s\t", argv[2]);
-               defaultline       = noaction;
-               internalfunctions = adddep;
-               externalfunctions = adddep;
-               symbolsonly       = adddep;
-               singlefunctions   = adddep2;
-               docsection        = adddep2;
-               findall           = adddep;
-               parse_file(infile);
-               printf("\n");
-       } else {
-               fprintf(stderr, "Unknown option: %s\n", argv[1]);
-               exit(1);
-       }
-       fclose(infile);
-       fflush(stdout);
-       return exitstatus;
-}
diff --git a/tools/kernel-doc/kernel-doc b/tools/kernel-doc/kernel-doc
deleted file mode 100755 (executable)
index cbbf34c..0000000
+++ /dev/null
@@ -1,2557 +0,0 @@
-#!/usr/bin/perl -w
-
-use strict;
-
-## Copyright (c) 1998 Michael Zucchi, All Rights Reserved        ##
-## Copyright (C) 2000, 1  Tim Waugh <twaugh@redhat.com>          ##
-## Copyright (C) 2001  Simon Huggins                             ##
-## Copyright (C) 2005-2012  Randy Dunlap                         ##
-## Copyright (C) 2012  Dan Luedtke                               ##
-##                                                              ##
-## #define enhancements by Armin Kuster <akuster@mvista.com>    ##
-## Copyright (c) 2000 MontaVista Software, Inc.                         ##
-##                                                              ##
-## This software falls under the GNU General Public License.     ##
-## Please read the COPYING file for more information             ##
-
-# 18/01/2001 -         Cleanups
-#              Functions prototyped as foo(void) same as foo()
-#              Stop eval'ing where we don't need to.
-# -- huggie@earth.li
-
-# 27/06/2001 -  Allowed whitespace after initial "/**" and
-#               allowed comments before function declarations.
-# -- Christian Kreibich <ck@whoop.org>
-
-# Still to do:
-#      - add perldoc documentation
-#      - Look more closely at some of the scarier bits :)
-
-# 26/05/2001 -         Support for separate source and object trees.
-#              Return error code.
-#              Keith Owens <kaos@ocs.com.au>
-
-# 23/09/2001 - Added support for typedefs, structs, enums and unions
-#              Support for Context section; can be terminated using empty line
-#              Small fixes (like spaces vs. \s in regex)
-# -- Tim Jansen <tim@tjansen.de>
-
-# 25/07/2012 - Added support for HTML5
-# -- Dan Luedtke <mail@danrl.de>
-
-#
-# This will read a 'c' file and scan for embedded comments in the
-# style of gnome comments (+minor extensions - see below).
-#
-
-# Note: This only supports 'c'.
-
-# usage:
-# kernel-doc [ -docbook | -html | -html5 | -text | -man | -list ]
-#            [ -no-doc-sections ]
-#            [ -function funcname [ -function funcname ...] ]
-#            c file(s)s > outputfile
-# or
-#            [ -nofunction funcname [ -function funcname ...] ]
-#            c file(s)s > outputfile
-#
-#  Set output format using one of -docbook -html -html5 -text or -man.
-#  Default is man.
-#  The -list format is for internal use by docproc.
-#
-#  -no-doc-sections
-#      Do not output DOC: sections
-#
-#  -function funcname
-#      If set, then only generate documentation for the given function(s) or
-#      DOC: section titles.  All other functions and DOC: sections are ignored.
-#
-#  -nofunction funcname
-#      If set, then only generate documentation for the other function(s)/DOC:
-#      sections. Cannot be used together with -function (yes, that's a bug --
-#      perl hackers can fix it 8))
-#
-#  c files - list of 'c' files to process
-#
-#  All output goes to stdout, with errors to stderr.
-
-#
-# format of comments.
-# In the following table, (...)? signifies optional structure.
-#                         (...)* signifies 0 or more structure elements
-# /**
-#  * function_name(:)? (- short description)?
-# (* @parameterx: (description of parameter x)?)*
-# (* a blank line)?
-#  * (Description:)? (Description of function)?
-#  * (section header: (section description)? )*
-#  (*)?*/
-#
-# So .. the trivial example would be:
-#
-# /**
-#  * my_function
-#  */
-#
-# If the Description: header tag is omitted, then there must be a blank line
-# after the last parameter specification.
-# e.g.
-# /**
-#  * my_function - does my stuff
-#  * @my_arg: its mine damnit
-#  *
-#  * Does my stuff explained.
-#  */
-#
-#  or, could also use:
-# /**
-#  * my_function - does my stuff
-#  * @my_arg: its mine damnit
-#  * Description: Does my stuff explained.
-#  */
-# etc.
-#
-# Besides functions you can also write documentation for structs, unions,
-# enums and typedefs. Instead of the function name you must write the name
-# of the declaration;  the struct/union/enum/typedef must always precede
-# the name. Nesting of declarations is not supported.
-# Use the argument mechanism to document members or constants.
-# e.g.
-# /**
-#  * struct my_struct - short description
-#  * @a: first member
-#  * @b: second member
-#  *
-#  * Longer description
-#  */
-# struct my_struct {
-#     int a;
-#     int b;
-# /* private: */
-#     int c;
-# };
-#
-# All descriptions can be multiline, except the short function description.
-#
-# You can also add additional sections. When documenting kernel functions you
-# should document the "Context:" of the function, e.g. whether the functions
-# can be called form interrupts. Unlike other sections you can end it with an
-# empty line.
-# Example-sections should contain the string EXAMPLE so that they are marked
-# appropriately in DocBook.
-#
-# Example:
-# /**
-#  * user_function - function that can only be called in user context
-#  * @a: some argument
-#  * Context: !in_interrupt()
-#  *
-#  * Some description
-#  * Example:
-#  *    user_function(22);
-#  */
-# ...
-#
-#
-# All descriptive text is further processed, scanning for the following special
-# patterns, which are highlighted appropriately.
-#
-# 'funcname()' - function
-# '$ENVVAR' - environmental variable
-# '&struct_name' - name of a structure (up to two words including 'struct')
-# '@parameter' - name of a parameter
-# '%CONST' - name of a constant.
-
-## init lots of data
-
-my $errors = 0;
-my $warnings = 0;
-my $anon_struct_union = 0;
-
-# match expressions used to find embedded type information
-my $type_constant = '\%([-_\w]+)';
-my $type_func = '(\w+)\(\)';
-my $type_param = '\@(\w+)';
-my $type_struct = '\&((struct\s*)*[_\w]+)';
-my $type_struct_xml = '\\&amp;((struct\s*)*[_\w]+)';
-my $type_env = '(\$\w+)';
-
-# Output conversion substitutions.
-#  One for each output format
-
-# these work fairly well
-my %highlights_html = ( $type_constant, "<i>\$1</i>",
-                       $type_func, "<b>\$1</b>",
-                       $type_struct_xml, "<i>\$1</i>",
-                       $type_env, "<b><i>\$1</i></b>",
-                       $type_param, "<tt><b>\$1</b></tt>" );
-my $local_lt = "\\\\\\\\lt:";
-my $local_gt = "\\\\\\\\gt:";
-my $blankline_html = $local_lt . "p" . $local_gt;      # was "<p>"
-
-# html version 5
-my %highlights_html5 = ( $type_constant, "<span class=\"const\">\$1</span>",
-                       $type_func, "<span class=\"func\">\$1</span>",
-                       $type_struct_xml, "<span class=\"struct\">\$1</span>",
-                       $type_env, "<span class=\"env\">\$1</span>",
-                       $type_param, "<span class=\"param\">\$1</span>" );
-my $blankline_html5 = $local_lt . "br /" . $local_gt;
-
-# XML, docbook format
-my %highlights_xml = ( "([^=])\\\"([^\\\"<]+)\\\"", "\$1<quote>\$2</quote>",
-                       $type_constant, "<constant>\$1</constant>",
-                       $type_func, "<function>\$1</function>",
-                       $type_struct_xml, "<structname>\$1</structname>",
-                       $type_env, "<envar>\$1</envar>",
-                       $type_param, "<parameter>\$1</parameter>" );
-my $blankline_xml = $local_lt . "/para" . $local_gt . $local_lt . "para" . $local_gt . "\n";
-
-# gnome, docbook format
-my %highlights_gnome = ( $type_constant, "<replaceable class=\"option\">\$1</replaceable>",
-                        $type_func, "<function>\$1</function>",
-                        $type_struct, "<structname>\$1</structname>",
-                        $type_env, "<envar>\$1</envar>",
-                        $type_param, "<parameter>\$1</parameter>" );
-my $blankline_gnome = "</para><para>\n";
-
-# these are pretty rough
-my %highlights_man = ( $type_constant, "\$1",
-                      $type_func, "\\\\fB\$1\\\\fP",
-                      $type_struct, "\\\\fI\$1\\\\fP",
-                      $type_param, "\\\\fI\$1\\\\fP" );
-my $blankline_man = "";
-
-# text-mode
-my %highlights_text = ( $type_constant, "\$1",
-                       $type_func, "\$1",
-                       $type_struct, "\$1",
-                       $type_param, "\$1" );
-my $blankline_text = "";
-
-# list mode
-my %highlights_list = ( $type_constant, "\$1",
-                       $type_func, "\$1",
-                       $type_struct, "\$1",
-                       $type_param, "\$1" );
-my $blankline_list = "";
-
-# read arguments
-if ($#ARGV == -1) {
-    usage();
-}
-
-my $kernelversion;
-my $dohighlight = "";
-
-my $verbose = 0;
-my $output_mode = "man";
-my $no_doc_sections = 0;
-my %highlights = %highlights_man;
-my $blankline = $blankline_man;
-my $modulename = "Bootloader API";
-my $function_only = 0;
-my $man_date = ('January', 'February', 'March', 'April', 'May', 'June',
-               'July', 'August', 'September', 'October',
-               'November', 'December')[(localtime)[4]] .
-  " " . ((localtime)[5]+1900);
-
-# Essentially these are globals.
-# They probably want to be tidied up, made more localised or something.
-# CAVEAT EMPTOR!  Some of the others I localised may not want to be, which
-# could cause "use of undefined value" or other bugs.
-my ($function, %function_table, %parametertypes, $declaration_purpose);
-my ($type, $declaration_name, $return_type);
-my ($newsection, $newcontents, $prototype, $brcount, %source_map);
-
-if (defined($ENV{'KBUILD_VERBOSE'})) {
-       $verbose = "$ENV{'KBUILD_VERBOSE'}";
-}
-
-# Generated docbook code is inserted in a template at a point where
-# docbook v3.1 requires a non-zero sequence of RefEntry's; see:
-# http://www.oasis-open.org/docbook/documentation/reference/html/refentry.html
-# We keep track of number of generated entries and generate a dummy
-# if needs be to ensure the expanded template can be postprocessed
-# into html.
-my $section_counter = 0;
-
-my $lineprefix="";
-
-# states
-# 0 - normal code
-# 1 - looking for function name
-# 2 - scanning field start.
-# 3 - scanning prototype.
-# 4 - documentation block
-my $state;
-my $in_doc_sect;
-
-#declaration types: can be
-# 'function', 'struct', 'union', 'enum', 'typedef'
-my $decl_type;
-
-my $doc_special = "\@\%\$\&";
-
-my $doc_start = '^/\*\*\s*$'; # Allow whitespace at end of comment start.
-my $doc_end = '\*/';
-my $doc_com = '\s*\*\s*';
-my $doc_decl = $doc_com . '(\w+)';
-my $doc_sect = $doc_com . '([' . $doc_special . ']?[\w\s]+):(.*)';
-my $doc_content = $doc_com . '(.*)';
-my $doc_block = $doc_com . 'DOC:\s*(.*)?';
-
-my %constants;
-my %parameterdescs;
-my @parameterlist;
-my %sections;
-my @sectionlist;
-my $sectcheck;
-my $struct_actual;
-
-my $contents = "";
-my $section_default = "Description";   # default section
-my $section_intro = "Introduction";
-my $section = $section_default;
-my $section_context = "Context";
-
-my $undescribed = "-- undescribed --";
-
-reset_state();
-
-while ($ARGV[0] =~ m/^-(.*)/) {
-    my $cmd = shift @ARGV;
-    if ($cmd eq "-html") {
-       $output_mode = "html";
-       %highlights = %highlights_html;
-       $blankline = $blankline_html;
-    } elsif ($cmd eq "-html5") {
-       $output_mode = "html5";
-       %highlights = %highlights_html5;
-       $blankline = $blankline_html5;
-    } elsif ($cmd eq "-man") {
-       $output_mode = "man";
-       %highlights = %highlights_man;
-       $blankline = $blankline_man;
-    } elsif ($cmd eq "-text") {
-       $output_mode = "text";
-       %highlights = %highlights_text;
-       $blankline = $blankline_text;
-    } elsif ($cmd eq "-docbook") {
-       $output_mode = "xml";
-       %highlights = %highlights_xml;
-       $blankline = $blankline_xml;
-    } elsif ($cmd eq "-list") {
-       $output_mode = "list";
-       %highlights = %highlights_list;
-       $blankline = $blankline_list;
-    } elsif ($cmd eq "-gnome") {
-       $output_mode = "gnome";
-       %highlights = %highlights_gnome;
-       $blankline = $blankline_gnome;
-    } elsif ($cmd eq "-module") { # not needed for XML, inherits from calling document
-       $modulename = shift @ARGV;
-    } elsif ($cmd eq "-function") { # to only output specific functions
-       $function_only = 1;
-       $function = shift @ARGV;
-       $function_table{$function} = 1;
-    } elsif ($cmd eq "-nofunction") { # to only output specific functions
-       $function_only = 2;
-       $function = shift @ARGV;
-       $function_table{$function} = 1;
-    } elsif ($cmd eq "-v") {
-       $verbose = 1;
-    } elsif (($cmd eq "-h") || ($cmd eq "--help")) {
-       usage();
-    } elsif ($cmd eq '-no-doc-sections') {
-           $no_doc_sections = 1;
-    }
-}
-
-# continue execution near EOF;
-
-sub usage {
-    print "Usage: $0 [ -docbook | -html | -html5 | -text | -man | -list ]\n";
-    print "         [ -no-doc-sections ]\n";
-    print "         [ -function funcname [ -function funcname ...] ]\n";
-    print "         [ -nofunction funcname [ -nofunction funcname ...] ]\n";
-    print "         [ -v ]\n";
-    print "         c source file(s) > outputfile\n";
-    print "         -v : verbose output, more warnings & other info listed\n";
-    exit 1;
-}
-
-# get kernel version from env
-sub get_kernel_version() {
-    my $version = 'unknown kernel version';
-
-    if (defined($ENV{'U_BOOT_VERSION'})) {
-       $version = $ENV{'U_BOOT_VERSION'};
-    }
-    return $version;
-}
-
-##
-# dumps section contents to arrays/hashes intended for that purpose.
-#
-sub dump_section {
-    my $file = shift;
-    my $name = shift;
-    my $contents = join "\n", @_;
-
-    if ($name =~ m/$type_constant/) {
-       $name = $1;
-#      print STDERR "constant section '$1' = '$contents'\n";
-       $constants{$name} = $contents;
-    } elsif ($name =~ m/$type_param/) {
-#      print STDERR "parameter def '$1' = '$contents'\n";
-       $name = $1;
-       $parameterdescs{$name} = $contents;
-       $sectcheck = $sectcheck . $name . " ";
-    } elsif ($name eq "@\.\.\.") {
-#      print STDERR "parameter def '...' = '$contents'\n";
-       $name = "...";
-       $parameterdescs{$name} = $contents;
-       $sectcheck = $sectcheck . $name . " ";
-    } else {
-#      print STDERR "other section '$name' = '$contents'\n";
-       if (defined($sections{$name}) && ($sections{$name} ne "")) {
-               print STDERR "Error(${file}:$.): duplicate section name '$name'\n";
-               ++$errors;
-       }
-       $sections{$name} = $contents;
-       push @sectionlist, $name;
-    }
-}
-
-##
-# dump DOC: section after checking that it should go out
-#
-sub dump_doc_section {
-    my $file = shift;
-    my $name = shift;
-    my $contents = join "\n", @_;
-
-    if ($no_doc_sections) {
-       return;
-    }
-
-    if (($function_only == 0) ||
-       ( $function_only == 1 && defined($function_table{$name})) ||
-       ( $function_only == 2 && !defined($function_table{$name})))
-    {
-       dump_section($file, $name, $contents);
-       output_blockhead({'sectionlist' => \@sectionlist,
-                         'sections' => \%sections,
-                         'module' => $modulename,
-                         'content-only' => ($function_only != 0), });
-    }
-}
-
-##
-# output function
-#
-# parameterdescs, a hash.
-#  function => "function name"
-#  parameterlist => @list of parameters
-#  parameterdescs => %parameter descriptions
-#  sectionlist => @list of sections
-#  sections => %section descriptions
-#
-
-sub output_highlight {
-    my $contents = join "\n",@_;
-    my $line;
-
-#   DEBUG
-#   if (!defined $contents) {
-#      use Carp;
-#      confess "output_highlight got called with no args?\n";
-#   }
-
-    if ($output_mode eq "html" || $output_mode eq "html5" ||
-       $output_mode eq "xml") {
-       $contents = local_unescape($contents);
-       # convert data read & converted thru xml_escape() into &xyz; format:
-       $contents =~ s/\\\\\\/\&/g;
-    }
-#   print STDERR "contents b4:$contents\n";
-    eval $dohighlight;
-    die $@ if $@;
-#   print STDERR "contents af:$contents\n";
-
-#   strip whitespaces when generating html5
-    if ($output_mode eq "html5") {
-       $contents =~ s/^\s+//;
-       $contents =~ s/\s+$//;
-    }
-    foreach $line (split "\n", $contents) {
-       if ($line eq ""){
-           print $lineprefix, local_unescape($blankline);
-       } else {
-           $line =~ s/\\\\\\/\&/g;
-           if ($output_mode eq "man" && substr($line, 0, 1) eq ".") {
-               print "\\&$line";
-           } else {
-               print $lineprefix, $line;
-           }
-       }
-       print "\n";
-    }
-}
-
-# output sections in html
-sub output_section_html(%) {
-    my %args = %{$_[0]};
-    my $section;
-
-    foreach $section (@{$args{'sectionlist'}}) {
-       print "<h3>$section</h3>\n";
-       print "<blockquote>\n";
-       output_highlight($args{'sections'}{$section});
-       print "</blockquote>\n";
-    }
-}
-
-# output enum in html
-sub output_enum_html(%) {
-    my %args = %{$_[0]};
-    my ($parameter);
-    my $count;
-    print "<h2>enum " . $args{'enum'} . "</h2>\n";
-
-    print "<b>enum " . $args{'enum'} . "</b> {<br>\n";
-    $count = 0;
-    foreach $parameter (@{$args{'parameterlist'}}) {
-       print " <b>" . $parameter . "</b>";
-       if ($count != $#{$args{'parameterlist'}}) {
-           $count++;
-           print ",\n";
-       }
-       print "<br>";
-    }
-    print "};<br>\n";
-
-    print "<h3>Constants</h3>\n";
-    print "<dl>\n";
-    foreach $parameter (@{$args{'parameterlist'}}) {
-       print "<dt><b>" . $parameter . "</b>\n";
-       print "<dd>";
-       output_highlight($args{'parameterdescs'}{$parameter});
-    }
-    print "</dl>\n";
-    output_section_html(@_);
-    print "<hr>\n";
-}
-
-# output typedef in html
-sub output_typedef_html(%) {
-    my %args = %{$_[0]};
-    my ($parameter);
-    my $count;
-    print "<h2>typedef " . $args{'typedef'} . "</h2>\n";
-
-    print "<b>typedef " . $args{'typedef'} . "</b>\n";
-    output_section_html(@_);
-    print "<hr>\n";
-}
-
-# output struct in html
-sub output_struct_html(%) {
-    my %args = %{$_[0]};
-    my ($parameter);
-
-    print "<h2>" . $args{'type'} . " " . $args{'struct'} . " - " . $args{'purpose'} . "</h2>\n";
-    print "<b>" . $args{'type'} . " " . $args{'struct'} . "</b> {<br>\n";
-    foreach $parameter (@{$args{'parameterlist'}}) {
-       if ($parameter =~ /^#/) {
-               print "$parameter<br>\n";
-               next;
-       }
-       my $parameter_name = $parameter;
-       $parameter_name =~ s/\[.*//;
-
-       ($args{'parameterdescs'}{$parameter_name} ne $undescribed) || next;
-       $type = $args{'parametertypes'}{$parameter};
-       if ($type =~ m/([^\(]*\(\*)\s*\)\s*\(([^\)]*)\)/) {
-           # pointer-to-function
-           print "&nbsp; &nbsp; <i>$1</i><b>$parameter</b>) <i>($2)</i>;<br>\n";
-       } elsif ($type =~ m/^(.*?)\s*(:.*)/) {
-           # bitfield
-           print "&nbsp; &nbsp; <i>$1</i> <b>$parameter</b>$2;<br>\n";
-       } else {
-           print "&nbsp; &nbsp; <i>$type</i> <b>$parameter</b>;<br>\n";
-       }
-    }
-    print "};<br>\n";
-
-    print "<h3>Members</h3>\n";
-    print "<dl>\n";
-    foreach $parameter (@{$args{'parameterlist'}}) {
-       ($parameter =~ /^#/) && next;
-
-       my $parameter_name = $parameter;
-       $parameter_name =~ s/\[.*//;
-
-       ($args{'parameterdescs'}{$parameter_name} ne $undescribed) || next;
-       print "<dt><b>" . $parameter . "</b>\n";
-       print "<dd>";
-       output_highlight($args{'parameterdescs'}{$parameter_name});
-    }
-    print "</dl>\n";
-    output_section_html(@_);
-    print "<hr>\n";
-}
-
-# output function in html
-sub output_function_html(%) {
-    my %args = %{$_[0]};
-    my ($parameter, $section);
-    my $count;
-
-    print "<h2>" . $args{'function'} . " - " . $args{'purpose'} . "</h2>\n";
-    print "<i>" . $args{'functiontype'} . "</i>\n";
-    print "<b>" . $args{'function'} . "</b>\n";
-    print "(";
-    $count = 0;
-    foreach $parameter (@{$args{'parameterlist'}}) {
-       $type = $args{'parametertypes'}{$parameter};
-       if ($type =~ m/([^\(]*\(\*)\s*\)\s*\(([^\)]*)\)/) {
-           # pointer-to-function
-           print "<i>$1</i><b>$parameter</b>) <i>($2)</i>";
-       } else {
-           print "<i>" . $type . "</i> <b>" . $parameter . "</b>";
-       }
-       if ($count != $#{$args{'parameterlist'}}) {
-           $count++;
-           print ",\n";
-       }
-    }
-    print ")\n";
-
-    print "<h3>Arguments</h3>\n";
-    print "<dl>\n";
-    foreach $parameter (@{$args{'parameterlist'}}) {
-       my $parameter_name = $parameter;
-       $parameter_name =~ s/\[.*//;
-
-       ($args{'parameterdescs'}{$parameter_name} ne $undescribed) || next;
-       print "<dt><b>" . $parameter . "</b>\n";
-       print "<dd>";
-       output_highlight($args{'parameterdescs'}{$parameter_name});
-    }
-    print "</dl>\n";
-    output_section_html(@_);
-    print "<hr>\n";
-}
-
-# output DOC: block header in html
-sub output_blockhead_html(%) {
-    my %args = %{$_[0]};
-    my ($parameter, $section);
-    my $count;
-
-    foreach $section (@{$args{'sectionlist'}}) {
-       print "<h3>$section</h3>\n";
-       print "<ul>\n";
-       output_highlight($args{'sections'}{$section});
-       print "</ul>\n";
-    }
-    print "<hr>\n";
-}
-
-# output sections in html5
-sub output_section_html5(%) {
-    my %args = %{$_[0]};
-    my $section;
-
-    foreach $section (@{$args{'sectionlist'}}) {
-       print "<section>\n";
-       print "<h1>$section</h1>\n";
-       print "<p>\n";
-       output_highlight($args{'sections'}{$section});
-       print "</p>\n";
-       print "</section>\n";
-    }
-}
-
-# output enum in html5
-sub output_enum_html5(%) {
-    my %args = %{$_[0]};
-    my ($parameter);
-    my $count;
-    my $html5id;
-
-    $html5id = $args{'enum'};
-    $html5id =~ s/[^a-zA-Z0-9\-]+/_/g;
-    print "<article class=\"enum\" id=\"enum:". $html5id . "\">";
-    print "<h1>enum " . $args{'enum'} . "</h1>\n";
-    print "<ol class=\"code\">\n";
-    print "<li>";
-    print "<span class=\"keyword\">enum</span> ";
-    print "<span class=\"identifier\">" . $args{'enum'} . "</span> {";
-    print "</li>\n";
-    $count = 0;
-    foreach $parameter (@{$args{'parameterlist'}}) {
-       print "<li class=\"indent\">";
-       print "<span class=\"param\">" . $parameter . "</span>";
-       if ($count != $#{$args{'parameterlist'}}) {
-           $count++;
-           print ",";
-       }
-       print "</li>\n";
-    }
-    print "<li>};</li>\n";
-    print "</ol>\n";
-
-    print "<section>\n";
-    print "<h1>Constants</h1>\n";
-    print "<dl>\n";
-    foreach $parameter (@{$args{'parameterlist'}}) {
-       print "<dt>" . $parameter . "</dt>\n";
-       print "<dd>";
-       output_highlight($args{'parameterdescs'}{$parameter});
-       print "</dd>\n";
-    }
-    print "</dl>\n";
-    print "</section>\n";
-    output_section_html5(@_);
-    print "</article>\n";
-}
-
-# output typedef in html5
-sub output_typedef_html5(%) {
-    my %args = %{$_[0]};
-    my ($parameter);
-    my $count;
-    my $html5id;
-
-    $html5id = $args{'typedef'};
-    $html5id =~ s/[^a-zA-Z0-9\-]+/_/g;
-    print "<article class=\"typedef\" id=\"typedef:" . $html5id . "\">\n";
-    print "<h1>typedef " . $args{'typedef'} . "</h1>\n";
-
-    print "<ol class=\"code\">\n";
-    print "<li>";
-    print "<span class=\"keyword\">typedef</span> ";
-    print "<span class=\"identifier\">" . $args{'typedef'} . "</span>";
-    print "</li>\n";
-    print "</ol>\n";
-    output_section_html5(@_);
-    print "</article>\n";
-}
-
-# output struct in html5
-sub output_struct_html5(%) {
-    my %args = %{$_[0]};
-    my ($parameter);
-    my $html5id;
-
-    $html5id = $args{'struct'};
-    $html5id =~ s/[^a-zA-Z0-9\-]+/_/g;
-    print "<article class=\"struct\" id=\"struct:" . $html5id . "\">\n";
-    print "<hgroup>\n";
-    print "<h1>" . $args{'type'} . " " . $args{'struct'} . "</h1>";
-    print "<h2>". $args{'purpose'} . "</h2>\n";
-    print "</hgroup>\n";
-    print "<ol class=\"code\">\n";
-    print "<li>";
-    print "<span class=\"type\">" . $args{'type'} . "</span> ";
-    print "<span class=\"identifier\">" . $args{'struct'} . "</span> {";
-    print "</li>\n";
-    foreach $parameter (@{$args{'parameterlist'}}) {
-       print "<li class=\"indent\">";
-       if ($parameter =~ /^#/) {
-               print "<span class=\"param\">" . $parameter ."</span>\n";
-               print "</li>\n";
-               next;
-       }
-       my $parameter_name = $parameter;
-       $parameter_name =~ s/\[.*//;
-
-       ($args{'parameterdescs'}{$parameter_name} ne $undescribed) || next;
-       $type = $args{'parametertypes'}{$parameter};
-       if ($type =~ m/([^\(]*\(\*)\s*\)\s*\(([^\)]*)\)/) {
-           # pointer-to-function
-           print "<span class=\"type\">$1</span> ";
-           print "<span class=\"param\">$parameter</span>";
-           print "<span class=\"type\">)</span> ";
-           print "(<span class=\"args\">$2</span>);";
-       } elsif ($type =~ m/^(.*?)\s*(:.*)/) {
-           # bitfield
-           print "<span class=\"type\">$1</span> ";
-           print "<span class=\"param\">$parameter</span>";
-           print "<span class=\"bits\">$2</span>;";
-       } else {
-           print "<span class=\"type\">$type</span> ";
-           print "<span class=\"param\">$parameter</span>;";
-       }
-       print "</li>\n";
-    }
-    print "<li>};</li>\n";
-    print "</ol>\n";
-
-    print "<section>\n";
-    print "<h1>Members</h1>\n";
-    print "<dl>\n";
-    foreach $parameter (@{$args{'parameterlist'}}) {
-       ($parameter =~ /^#/) && next;
-
-       my $parameter_name = $parameter;
-       $parameter_name =~ s/\[.*//;
-
-       ($args{'parameterdescs'}{$parameter_name} ne $undescribed) || next;
-       print "<dt>" . $parameter . "</dt>\n";
-       print "<dd>";
-       output_highlight($args{'parameterdescs'}{$parameter_name});
-       print "</dd>\n";
-    }
-    print "</dl>\n";
-    print "</section>\n";
-    output_section_html5(@_);
-    print "</article>\n";
-}
-
-# output function in html5
-sub output_function_html5(%) {
-    my %args = %{$_[0]};
-    my ($parameter, $section);
-    my $count;
-    my $html5id;
-
-    $html5id = $args{'function'};
-    $html5id =~ s/[^a-zA-Z0-9\-]+/_/g;
-    print "<article class=\"function\" id=\"func:". $html5id . "\">\n";
-    print "<hgroup>\n";
-    print "<h1>" . $args{'function'} . "</h1>";
-    print "<h2>" . $args{'purpose'} . "</h2>\n";
-    print "</hgroup>\n";
-    print "<ol class=\"code\">\n";
-    print "<li>";
-    print "<span class=\"type\">" . $args{'functiontype'} . "</span> ";
-    print "<span class=\"identifier\">" . $args{'function'} . "</span> (";
-    print "</li>";
-    $count = 0;
-    foreach $parameter (@{$args{'parameterlist'}}) {
-       print "<li class=\"indent\">";
-       $type = $args{'parametertypes'}{$parameter};
-       if ($type =~ m/([^\(]*\(\*)\s*\)\s*\(([^\)]*)\)/) {
-           # pointer-to-function
-           print "<span class=\"type\">$1</span> ";
-           print "<span class=\"param\">$parameter</span>";
-           print "<span class=\"type\">)</span> ";
-           print "(<span class=\"args\">$2</span>)";
-       } else {
-           print "<span class=\"type\">$type</span> ";
-           print "<span class=\"param\">$parameter</span>";
-       }
-       if ($count != $#{$args{'parameterlist'}}) {
-           $count++;
-           print ",";
-       }
-       print "</li>\n";
-    }
-    print "<li>)</li>\n";
-    print "</ol>\n";
-
-    print "<section>\n";
-    print "<h1>Arguments</h1>\n";
-    print "<p>\n";
-    print "<dl>\n";
-    foreach $parameter (@{$args{'parameterlist'}}) {
-       my $parameter_name = $parameter;
-       $parameter_name =~ s/\[.*//;
-
-       ($args{'parameterdescs'}{$parameter_name} ne $undescribed) || next;
-       print "<dt>" . $parameter . "</dt>\n";
-       print "<dd>";
-       output_highlight($args{'parameterdescs'}{$parameter_name});
-       print "</dd>\n";
-    }
-    print "</dl>\n";
-    print "</section>\n";
-    output_section_html5(@_);
-    print "</article>\n";
-}
-
-# output DOC: block header in html5
-sub output_blockhead_html5(%) {
-    my %args = %{$_[0]};
-    my ($parameter, $section);
-    my $count;
-    my $html5id;
-
-    foreach $section (@{$args{'sectionlist'}}) {
-       $html5id = $section;
-       $html5id =~ s/[^a-zA-Z0-9\-]+/_/g;
-       print "<article class=\"doc\" id=\"doc:". $html5id . "\">\n";
-       print "<h1>$section</h1>\n";
-       print "<p>\n";
-       output_highlight($args{'sections'}{$section});
-       print "</p>\n";
-    }
-    print "</article>\n";
-}
-
-sub output_section_xml(%) {
-    my %args = %{$_[0]};
-    my $section;
-    # print out each section
-    $lineprefix="   ";
-    foreach $section (@{$args{'sectionlist'}}) {
-       print "<refsect1>\n";
-       print "<title>$section</title>\n";
-       if ($section =~ m/EXAMPLE/i) {
-           print "<informalexample><programlisting>\n";
-       } else {
-           print "<para>\n";
-       }
-       output_highlight($args{'sections'}{$section});
-       if ($section =~ m/EXAMPLE/i) {
-           print "</programlisting></informalexample>\n";
-       } else {
-           print "</para>\n";
-       }
-       print "</refsect1>\n";
-    }
-}
-
-# output function in XML DocBook
-sub output_function_xml(%) {
-    my %args = %{$_[0]};
-    my ($parameter, $section);
-    my $count;
-    my $id;
-
-    $id = "API-" . $args{'function'};
-    $id =~ s/[^A-Za-z0-9]/-/g;
-
-    print "<refentry id=\"$id\">\n";
-    print "<refentryinfo>\n";
-    print " <title>U-BOOT</title>\n";
-    print " <productname>Bootloader Hackers Manual</productname>\n";
-    print " <date>$man_date</date>\n";
-    print "</refentryinfo>\n";
-    print "<refmeta>\n";
-    print " <refentrytitle><phrase>" . $args{'function'} . "</phrase></refentrytitle>\n";
-    print " <manvolnum>9</manvolnum>\n";
-    print " <refmiscinfo class=\"version\">" . $kernelversion . "</refmiscinfo>\n";
-    print "</refmeta>\n";
-    print "<refnamediv>\n";
-    print " <refname>" . $args{'function'} . "</refname>\n";
-    print " <refpurpose>\n";
-    print "  ";
-    output_highlight ($args{'purpose'});
-    print " </refpurpose>\n";
-    print "</refnamediv>\n";
-
-    print "<refsynopsisdiv>\n";
-    print " <title>Synopsis</title>\n";
-    print "  <funcsynopsis><funcprototype>\n";
-    print "   <funcdef>" . $args{'functiontype'} . " ";
-    print "<function>" . $args{'function'} . " </function></funcdef>\n";
-
-    $count = 0;
-    if ($#{$args{'parameterlist'}} >= 0) {
-       foreach $parameter (@{$args{'parameterlist'}}) {
-           $type = $args{'parametertypes'}{$parameter};
-           if ($type =~ m/([^\(]*\(\*)\s*\)\s*\(([^\)]*)\)/) {
-               # pointer-to-function
-               print "   <paramdef>$1<parameter>$parameter</parameter>)\n";
-               print "     <funcparams>$2</funcparams></paramdef>\n";
-           } else {
-               print "   <paramdef>" . $type;
-               print " <parameter>$parameter</parameter></paramdef>\n";
-           }
-       }
-    } else {
-       print "  <void/>\n";
-    }
-    print "  </funcprototype></funcsynopsis>\n";
-    print "</refsynopsisdiv>\n";
-
-    # print parameters
-    print "<refsect1>\n <title>Arguments</title>\n";
-    if ($#{$args{'parameterlist'}} >= 0) {
-       print " <variablelist>\n";
-       foreach $parameter (@{$args{'parameterlist'}}) {
-           my $parameter_name = $parameter;
-           $parameter_name =~ s/\[.*//;
-
-           print "  <varlistentry>\n   <term><parameter>$parameter</parameter></term>\n";
-           print "   <listitem>\n    <para>\n";
-           $lineprefix="     ";
-           output_highlight($args{'parameterdescs'}{$parameter_name});
-           print "    </para>\n   </listitem>\n  </varlistentry>\n";
-       }
-       print " </variablelist>\n";
-    } else {
-       print " <para>\n  None\n </para>\n";
-    }
-    print "</refsect1>\n";
-
-    output_section_xml(@_);
-    print "</refentry>\n\n";
-}
-
-# output struct in XML DocBook
-sub output_struct_xml(%) {
-    my %args = %{$_[0]};
-    my ($parameter, $section);
-    my $id;
-
-    $id = "API-struct-" . $args{'struct'};
-    $id =~ s/[^A-Za-z0-9]/-/g;
-
-    print "<refentry id=\"$id\">\n";
-    print "<refentryinfo>\n";
-    print " <title>U-BOOT</title>\n";
-    print " <productname>Bootloader Hackers Manual</productname>\n";
-    print " <date>$man_date</date>\n";
-    print "</refentryinfo>\n";
-    print "<refmeta>\n";
-    print " <refentrytitle><phrase>" . $args{'type'} . " " . $args{'struct'} . "</phrase></refentrytitle>\n";
-    print " <manvolnum>9</manvolnum>\n";
-    print " <refmiscinfo class=\"version\">" . $kernelversion . "</refmiscinfo>\n";
-    print "</refmeta>\n";
-    print "<refnamediv>\n";
-    print " <refname>" . $args{'type'} . " " . $args{'struct'} . "</refname>\n";
-    print " <refpurpose>\n";
-    print "  ";
-    output_highlight ($args{'purpose'});
-    print " </refpurpose>\n";
-    print "</refnamediv>\n";
-
-    print "<refsynopsisdiv>\n";
-    print " <title>Synopsis</title>\n";
-    print "  <programlisting>\n";
-    print $args{'type'} . " " . $args{'struct'} . " {\n";
-    foreach $parameter (@{$args{'parameterlist'}}) {
-       if ($parameter =~ /^#/) {
-           my $prm = $parameter;
-           # convert data read & converted thru xml_escape() into &xyz; format:
-           # This allows us to have #define macros interspersed in a struct.
-           $prm =~ s/\\\\\\/\&/g;
-           print "$prm\n";
-           next;
-       }
-
-       my $parameter_name = $parameter;
-       $parameter_name =~ s/\[.*//;
-
-       defined($args{'parameterdescs'}{$parameter_name}) || next;
-       ($args{'parameterdescs'}{$parameter_name} ne $undescribed) || next;
-       $type = $args{'parametertypes'}{$parameter};
-       if ($type =~ m/([^\(]*\(\*)\s*\)\s*\(([^\)]*)\)/) {
-           # pointer-to-function
-           print "  $1 $parameter) ($2);\n";
-       } elsif ($type =~ m/^(.*?)\s*(:.*)/) {
-           # bitfield
-           print "  $1 $parameter$2;\n";
-       } else {
-           print "  " . $type . " " . $parameter . ";\n";
-       }
-    }
-    print "};";
-    print "  </programlisting>\n";
-    print "</refsynopsisdiv>\n";
-
-    print " <refsect1>\n";
-    print "  <title>Members</title>\n";
-
-    if ($#{$args{'parameterlist'}} >= 0) {
-    print "  <variablelist>\n";
-    foreach $parameter (@{$args{'parameterlist'}}) {
-      ($parameter =~ /^#/) && next;
-
-      my $parameter_name = $parameter;
-      $parameter_name =~ s/\[.*//;
-
-      defined($args{'parameterdescs'}{$parameter_name}) || next;
-      ($args{'parameterdescs'}{$parameter_name} ne $undescribed) || next;
-      print "    <varlistentry>";
-      print "      <term>$parameter</term>\n";
-      print "      <listitem><para>\n";
-      output_highlight($args{'parameterdescs'}{$parameter_name});
-      print "      </para></listitem>\n";
-      print "    </varlistentry>\n";
-    }
-    print "  </variablelist>\n";
-    } else {
-       print " <para>\n  None\n </para>\n";
-    }
-    print " </refsect1>\n";
-
-    output_section_xml(@_);
-
-    print "</refentry>\n\n";
-}
-
-# output enum in XML DocBook
-sub output_enum_xml(%) {
-    my %args = %{$_[0]};
-    my ($parameter, $section);
-    my $count;
-    my $id;
-
-    $id = "API-enum-" . $args{'enum'};
-    $id =~ s/[^A-Za-z0-9]/-/g;
-
-    print "<refentry id=\"$id\">\n";
-    print "<refentryinfo>\n";
-    print " <title>U-BOOT</title>\n";
-    print " <productname>Bootloader Hackers Manual</productname>\n";
-    print " <date>$man_date</date>\n";
-    print "</refentryinfo>\n";
-    print "<refmeta>\n";
-    print " <refentrytitle><phrase>enum " . $args{'enum'} . "</phrase></refentrytitle>\n";
-    print " <manvolnum>9</manvolnum>\n";
-    print " <refmiscinfo class=\"version\">" . $kernelversion . "</refmiscinfo>\n";
-    print "</refmeta>\n";
-    print "<refnamediv>\n";
-    print " <refname>enum " . $args{'enum'} . "</refname>\n";
-    print " <refpurpose>\n";
-    print "  ";
-    output_highlight ($args{'purpose'});
-    print " </refpurpose>\n";
-    print "</refnamediv>\n";
-
-    print "<refsynopsisdiv>\n";
-    print " <title>Synopsis</title>\n";
-    print "  <programlisting>\n";
-    print "enum " . $args{'enum'} . " {\n";
-    $count = 0;
-    foreach $parameter (@{$args{'parameterlist'}}) {
-       print "  $parameter";
-       if ($count != $#{$args{'parameterlist'}}) {
-           $count++;
-           print ",";
-       }
-       print "\n";
-    }
-    print "};";
-    print "  </programlisting>\n";
-    print "</refsynopsisdiv>\n";
-
-    print "<refsect1>\n";
-    print " <title>Constants</title>\n";
-    print "  <variablelist>\n";
-    foreach $parameter (@{$args{'parameterlist'}}) {
-      my $parameter_name = $parameter;
-      $parameter_name =~ s/\[.*//;
-
-      print "    <varlistentry>";
-      print "      <term>$parameter</term>\n";
-      print "      <listitem><para>\n";
-      output_highlight($args{'parameterdescs'}{$parameter_name});
-      print "      </para></listitem>\n";
-      print "    </varlistentry>\n";
-    }
-    print "  </variablelist>\n";
-    print "</refsect1>\n";
-
-    output_section_xml(@_);
-
-    print "</refentry>\n\n";
-}
-
-# output typedef in XML DocBook
-sub output_typedef_xml(%) {
-    my %args = %{$_[0]};
-    my ($parameter, $section);
-    my $id;
-
-    $id = "API-typedef-" . $args{'typedef'};
-    $id =~ s/[^A-Za-z0-9]/-/g;
-
-    print "<refentry id=\"$id\">\n";
-    print "<refentryinfo>\n";
-    print " <title>U-BOOT</title>\n";
-    print " <productname>Bootloader Hackers Manual</productname>\n";
-    print " <date>$man_date</date>\n";
-    print "</refentryinfo>\n";
-    print "<refmeta>\n";
-    print " <refentrytitle><phrase>typedef " . $args{'typedef'} . "</phrase></refentrytitle>\n";
-    print " <manvolnum>9</manvolnum>\n";
-    print "</refmeta>\n";
-    print "<refnamediv>\n";
-    print " <refname>typedef " . $args{'typedef'} . "</refname>\n";
-    print " <refpurpose>\n";
-    print "  ";
-    output_highlight ($args{'purpose'});
-    print " </refpurpose>\n";
-    print "</refnamediv>\n";
-
-    print "<refsynopsisdiv>\n";
-    print " <title>Synopsis</title>\n";
-    print "  <synopsis>typedef " . $args{'typedef'} . ";</synopsis>\n";
-    print "</refsynopsisdiv>\n";
-
-    output_section_xml(@_);
-
-    print "</refentry>\n\n";
-}
-
-# output in XML DocBook
-sub output_blockhead_xml(%) {
-    my %args = %{$_[0]};
-    my ($parameter, $section);
-    my $count;
-
-    my $id = $args{'module'};
-    $id =~ s/[^A-Za-z0-9]/-/g;
-
-    # print out each section
-    $lineprefix="   ";
-    foreach $section (@{$args{'sectionlist'}}) {
-       if (!$args{'content-only'}) {
-               print "<refsect1>\n <title>$section</title>\n";
-       }
-       if ($section =~ m/EXAMPLE/i) {
-           print "<example><para>\n";
-       } else {
-           print "<para>\n";
-       }
-       output_highlight($args{'sections'}{$section});
-       if ($section =~ m/EXAMPLE/i) {
-           print "</para></example>\n";
-       } else {
-           print "</para>";
-       }
-       if (!$args{'content-only'}) {
-               print "\n</refsect1>\n";
-       }
-    }
-
-    print "\n\n";
-}
-
-# output in XML DocBook
-sub output_function_gnome {
-    my %args = %{$_[0]};
-    my ($parameter, $section);
-    my $count;
-    my $id;
-
-    $id = $args{'module'} . "-" . $args{'function'};
-    $id =~ s/[^A-Za-z0-9]/-/g;
-
-    print "<sect2>\n";
-    print " <title id=\"$id\">" . $args{'function'} . "</title>\n";
-
-    print "  <funcsynopsis>\n";
-    print "   <funcdef>" . $args{'functiontype'} . " ";
-    print "<function>" . $args{'function'} . " ";
-    print "</function></funcdef>\n";
-
-    $count = 0;
-    if ($#{$args{'parameterlist'}} >= 0) {
-       foreach $parameter (@{$args{'parameterlist'}}) {
-           $type = $args{'parametertypes'}{$parameter};
-           if ($type =~ m/([^\(]*\(\*)\s*\)\s*\(([^\)]*)\)/) {
-               # pointer-to-function
-               print "   <paramdef>$1 <parameter>$parameter</parameter>)\n";
-               print "     <funcparams>$2</funcparams></paramdef>\n";
-           } else {
-               print "   <paramdef>" . $type;
-               print " <parameter>$parameter</parameter></paramdef>\n";
-           }
-       }
-    } else {
-       print "  <void>\n";
-    }
-    print "  </funcsynopsis>\n";
-    if ($#{$args{'parameterlist'}} >= 0) {
-       print " <informaltable pgwide=\"1\" frame=\"none\" role=\"params\">\n";
-       print "<tgroup cols=\"2\">\n";
-       print "<colspec colwidth=\"2*\">\n";
-       print "<colspec colwidth=\"8*\">\n";
-       print "<tbody>\n";
-       foreach $parameter (@{$args{'parameterlist'}}) {
-           my $parameter_name = $parameter;
-           $parameter_name =~ s/\[.*//;
-
-           print "  <row><entry align=\"right\"><parameter>$parameter</parameter></entry>\n";
-           print "   <entry>\n";
-           $lineprefix="     ";
-           output_highlight($args{'parameterdescs'}{$parameter_name});
-           print "    </entry></row>\n";
-       }
-       print " </tbody></tgroup></informaltable>\n";
-    } else {
-       print " <para>\n  None\n </para>\n";
-    }
-
-    # print out each section
-    $lineprefix="   ";
-    foreach $section (@{$args{'sectionlist'}}) {
-       print "<simplesect>\n <title>$section</title>\n";
-       if ($section =~ m/EXAMPLE/i) {
-           print "<example><programlisting>\n";
-       } else {
-       }
-       print "<para>\n";
-       output_highlight($args{'sections'}{$section});
-       print "</para>\n";
-       if ($section =~ m/EXAMPLE/i) {
-           print "</programlisting></example>\n";
-       } else {
-       }
-       print " </simplesect>\n";
-    }
-
-    print "</sect2>\n\n";
-}
-
-##
-# output function in man
-sub output_function_man(%) {
-    my %args = %{$_[0]};
-    my ($parameter, $section);
-    my $count;
-
-    print ".TH \"$args{'function'}\" 9 \"$args{'function'}\" \"$man_date\" \"Bootloader Hacker's Manual\" U-BOOT\n";
-
-    print ".SH NAME\n";
-    print $args{'function'} . " \\- " . $args{'purpose'} . "\n";
-
-    print ".SH SYNOPSIS\n";
-    if ($args{'functiontype'} ne "") {
-       print ".B \"" . $args{'functiontype'} . "\" " . $args{'function'} . "\n";
-    } else {
-       print ".B \"" . $args{'function'} . "\n";
-    }
-    $count = 0;
-    my $parenth = "(";
-    my $post = ",";
-    foreach my $parameter (@{$args{'parameterlist'}}) {
-       if ($count == $#{$args{'parameterlist'}}) {
-           $post = ");";
-       }
-       $type = $args{'parametertypes'}{$parameter};
-       if ($type =~ m/([^\(]*\(\*)\s*\)\s*\(([^\)]*)\)/) {
-           # pointer-to-function
-           print ".BI \"" . $parenth . $1 . "\" " . $parameter . " \") (" . $2 . ")" . $post . "\"\n";
-       } else {
-           $type =~ s/([^\*])$/$1 /;
-           print ".BI \"" . $parenth . $type . "\" " . $parameter . " \"" . $post . "\"\n";
-       }
-       $count++;
-       $parenth = "";
-    }
-
-    print ".SH ARGUMENTS\n";
-    foreach $parameter (@{$args{'parameterlist'}}) {
-       my $parameter_name = $parameter;
-       $parameter_name =~ s/\[.*//;
-
-       print ".IP \"" . $parameter . "\" 12\n";
-       output_highlight($args{'parameterdescs'}{$parameter_name});
-    }
-    foreach $section (@{$args{'sectionlist'}}) {
-       print ".SH \"", uc $section, "\"\n";
-       output_highlight($args{'sections'}{$section});
-    }
-}
-
-##
-# output enum in man
-sub output_enum_man(%) {
-    my %args = %{$_[0]};
-    my ($parameter, $section);
-    my $count;
-
-    print ".TH \"$args{'module'}\" 9 \"enum $args{'enum'}\" \"$man_date\" \"API Manual\" U-BOOT\n";
-
-    print ".SH NAME\n";
-    print "enum " . $args{'enum'} . " \\- " . $args{'purpose'} . "\n";
-
-    print ".SH SYNOPSIS\n";
-    print "enum " . $args{'enum'} . " {\n";
-    $count = 0;
-    foreach my $parameter (@{$args{'parameterlist'}}) {
-       print ".br\n.BI \"    $parameter\"\n";
-       if ($count == $#{$args{'parameterlist'}}) {
-           print "\n};\n";
-           last;
-       }
-       else {
-           print ", \n.br\n";
-       }
-       $count++;
-    }
-
-    print ".SH Constants\n";
-    foreach $parameter (@{$args{'parameterlist'}}) {
-       my $parameter_name = $parameter;
-       $parameter_name =~ s/\[.*//;
-
-       print ".IP \"" . $parameter . "\" 12\n";
-       output_highlight($args{'parameterdescs'}{$parameter_name});
-    }
-    foreach $section (@{$args{'sectionlist'}}) {
-       print ".SH \"$section\"\n";
-       output_highlight($args{'sections'}{$section});
-    }
-}
-
-##
-# output struct in man
-sub output_struct_man(%) {
-    my %args = %{$_[0]};
-    my ($parameter, $section);
-
-    print ".TH \"$args{'module'}\" 9 \"" . $args{'type'} . " " . $args{'struct'} . "\" \"$man_date\" \"API Manual\" U-BOOT\n";
-
-    print ".SH NAME\n";
-    print $args{'type'} . " " . $args{'struct'} . " \\- " . $args{'purpose'} . "\n";
-
-    print ".SH SYNOPSIS\n";
-    print $args{'type'} . " " . $args{'struct'} . " {\n.br\n";
-
-    foreach my $parameter (@{$args{'parameterlist'}}) {
-       if ($parameter =~ /^#/) {
-           print ".BI \"$parameter\"\n.br\n";
-           next;
-       }
-       my $parameter_name = $parameter;
-       $parameter_name =~ s/\[.*//;
-
-       ($args{'parameterdescs'}{$parameter_name} ne $undescribed) || next;
-       $type = $args{'parametertypes'}{$parameter};
-       if ($type =~ m/([^\(]*\(\*)\s*\)\s*\(([^\)]*)\)/) {
-           # pointer-to-function
-           print ".BI \"    " . $1 . "\" " . $parameter . " \") (" . $2 . ")" . "\"\n;\n";
-       } elsif ($type =~ m/^(.*?)\s*(:.*)/) {
-           # bitfield
-           print ".BI \"    " . $1 . "\ \" " . $parameter . $2 . " \"" . "\"\n;\n";
-       } else {
-           $type =~ s/([^\*])$/$1 /;
-           print ".BI \"    " . $type . "\" " . $parameter . " \"" . "\"\n;\n";
-       }
-       print "\n.br\n";
-    }
-    print "};\n.br\n";
-
-    print ".SH Members\n";
-    foreach $parameter (@{$args{'parameterlist'}}) {
-       ($parameter =~ /^#/) && next;
-
-       my $parameter_name = $parameter;
-       $parameter_name =~ s/\[.*//;
-
-       ($args{'parameterdescs'}{$parameter_name} ne $undescribed) || next;
-       print ".IP \"" . $parameter . "\" 12\n";
-       output_highlight($args{'parameterdescs'}{$parameter_name});
-    }
-    foreach $section (@{$args{'sectionlist'}}) {
-       print ".SH \"$section\"\n";
-       output_highlight($args{'sections'}{$section});
-    }
-}
-
-##
-# output typedef in man
-sub output_typedef_man(%) {
-    my %args = %{$_[0]};
-    my ($parameter, $section);
-
-    print ".TH \"$args{'module'}\" 9 \"$args{'typedef'}\" \"$man_date\" \"API Manual\" U-BOOT\n";
-
-    print ".SH NAME\n";
-    print "typedef " . $args{'typedef'} . " \\- " . $args{'purpose'} . "\n";
-
-    foreach $section (@{$args{'sectionlist'}}) {
-       print ".SH \"$section\"\n";
-       output_highlight($args{'sections'}{$section});
-    }
-}
-
-sub output_blockhead_man(%) {
-    my %args = %{$_[0]};
-    my ($parameter, $section);
-    my $count;
-
-    print ".TH \"$args{'module'}\" 9 \"$args{'module'}\" \"$man_date\" \"API Manual\" U-BOOT\n";
-
-    foreach $section (@{$args{'sectionlist'}}) {
-       print ".SH \"$section\"\n";
-       output_highlight($args{'sections'}{$section});
-    }
-}
-
-##
-# output in text
-sub output_function_text(%) {
-    my %args = %{$_[0]};
-    my ($parameter, $section);
-    my $start;
-
-    print "Name:\n\n";
-    print $args{'function'} . " - " . $args{'purpose'} . "\n";
-
-    print "\nSynopsis:\n\n";
-    if ($args{'functiontype'} ne "") {
-       $start = $args{'functiontype'} . " " . $args{'function'} . " (";
-    } else {
-       $start = $args{'function'} . " (";
-    }
-    print $start;
-
-    my $count = 0;
-    foreach my $parameter (@{$args{'parameterlist'}}) {
-       $type = $args{'parametertypes'}{$parameter};
-       if ($type =~ m/([^\(]*\(\*)\s*\)\s*\(([^\)]*)\)/) {
-           # pointer-to-function
-           print $1 . $parameter . ") (" . $2;
-       } else {
-           print $type . " " . $parameter;
-       }
-       if ($count != $#{$args{'parameterlist'}}) {
-           $count++;
-           print ",\n";
-           print " " x length($start);
-       } else {
-           print ");\n\n";
-       }
-    }
-
-    print "Arguments:\n\n";
-    foreach $parameter (@{$args{'parameterlist'}}) {
-       my $parameter_name = $parameter;
-       $parameter_name =~ s/\[.*//;
-
-       print $parameter . "\n\t" . $args{'parameterdescs'}{$parameter_name} . "\n";
-    }
-    output_section_text(@_);
-}
-
-#output sections in text
-sub output_section_text(%) {
-    my %args = %{$_[0]};
-    my $section;
-
-    print "\n";
-    foreach $section (@{$args{'sectionlist'}}) {
-       print "$section:\n\n";
-       output_highlight($args{'sections'}{$section});
-    }
-    print "\n\n";
-}
-
-# output enum in text
-sub output_enum_text(%) {
-    my %args = %{$_[0]};
-    my ($parameter);
-    my $count;
-    print "Enum:\n\n";
-
-    print "enum " . $args{'enum'} . " - " . $args{'purpose'} . "\n\n";
-    print "enum " . $args{'enum'} . " {\n";
-    $count = 0;
-    foreach $parameter (@{$args{'parameterlist'}}) {
-       print "\t$parameter";
-       if ($count != $#{$args{'parameterlist'}}) {
-           $count++;
-           print ",";
-       }
-       print "\n";
-    }
-    print "};\n\n";
-
-    print "Constants:\n\n";
-    foreach $parameter (@{$args{'parameterlist'}}) {
-       print "$parameter\n\t";
-       print $args{'parameterdescs'}{$parameter} . "\n";
-    }
-
-    output_section_text(@_);
-}
-
-# output typedef in text
-sub output_typedef_text(%) {
-    my %args = %{$_[0]};
-    my ($parameter);
-    my $count;
-    print "Typedef:\n\n";
-
-    print "typedef " . $args{'typedef'} . " - " . $args{'purpose'} . "\n";
-    output_section_text(@_);
-}
-
-# output struct as text
-sub output_struct_text(%) {
-    my %args = %{$_[0]};
-    my ($parameter);
-
-    print $args{'type'} . " " . $args{'struct'} . " - " . $args{'purpose'} . "\n\n";
-    print $args{'type'} . " " . $args{'struct'} . " {\n";
-    foreach $parameter (@{$args{'parameterlist'}}) {
-       if ($parameter =~ /^#/) {
-           print "$parameter\n";
-           next;
-       }
-
-       my $parameter_name = $parameter;
-       $parameter_name =~ s/\[.*//;
-
-       ($args{'parameterdescs'}{$parameter_name} ne $undescribed) || next;
-       $type = $args{'parametertypes'}{$parameter};
-       if ($type =~ m/([^\(]*\(\*)\s*\)\s*\(([^\)]*)\)/) {
-           # pointer-to-function
-           print "\t$1 $parameter) ($2);\n";
-       } elsif ($type =~ m/^(.*?)\s*(:.*)/) {
-           # bitfield
-           print "\t$1 $parameter$2;\n";
-       } else {
-           print "\t" . $type . " " . $parameter . ";\n";
-       }
-    }
-    print "};\n\n";
-
-    print "Members:\n\n";
-    foreach $parameter (@{$args{'parameterlist'}}) {
-       ($parameter =~ /^#/) && next;
-
-       my $parameter_name = $parameter;
-       $parameter_name =~ s/\[.*//;
-
-       ($args{'parameterdescs'}{$parameter_name} ne $undescribed) || next;
-       print "$parameter\n\t";
-       print $args{'parameterdescs'}{$parameter_name} . "\n";
-    }
-    print "\n";
-    output_section_text(@_);
-}
-
-sub output_blockhead_text(%) {
-    my %args = %{$_[0]};
-    my ($parameter, $section);
-
-    foreach $section (@{$args{'sectionlist'}}) {
-       print " $section:\n";
-       print "    -> ";
-       output_highlight($args{'sections'}{$section});
-    }
-}
-
-## list mode output functions
-
-sub output_function_list(%) {
-    my %args = %{$_[0]};
-
-    print $args{'function'} . "\n";
-}
-
-# output enum in list
-sub output_enum_list(%) {
-    my %args = %{$_[0]};
-    print $args{'enum'} . "\n";
-}
-
-# output typedef in list
-sub output_typedef_list(%) {
-    my %args = %{$_[0]};
-    print $args{'typedef'} . "\n";
-}
-
-# output struct as list
-sub output_struct_list(%) {
-    my %args = %{$_[0]};
-
-    print $args{'struct'} . "\n";
-}
-
-sub output_blockhead_list(%) {
-    my %args = %{$_[0]};
-    my ($parameter, $section);
-
-    foreach $section (@{$args{'sectionlist'}}) {
-       print "DOC: $section\n";
-    }
-}
-
-##
-# generic output function for all types (function, struct/union, typedef, enum);
-# calls the generated, variable output_ function name based on
-# functype and output_mode
-sub output_declaration {
-    no strict 'refs';
-    my $name = shift;
-    my $functype = shift;
-    my $func = "output_${functype}_$output_mode";
-    if (($function_only==0) ||
-       ( $function_only == 1 && defined($function_table{$name})) ||
-       ( $function_only == 2 && !defined($function_table{$name})))
-    {
-       &$func(@_);
-       $section_counter++;
-    }
-}
-
-##
-# generic output function - calls the right one based on current output mode.
-sub output_blockhead {
-    no strict 'refs';
-    my $func = "output_blockhead_" . $output_mode;
-    &$func(@_);
-    $section_counter++;
-}
-
-##
-# takes a declaration (struct, union, enum, typedef) and
-# invokes the right handler. NOT called for functions.
-sub dump_declaration($$) {
-    no strict 'refs';
-    my ($prototype, $file) = @_;
-    my $func = "dump_" . $decl_type;
-    &$func(@_);
-}
-
-sub dump_union($$) {
-    dump_struct(@_);
-}
-
-sub dump_struct($$) {
-    my $x = shift;
-    my $file = shift;
-    my $nested;
-
-    if ($x =~ /(struct|union)\s+(\w+)\s*{(.*)}/) {
-       #my $decl_type = $1;
-       $declaration_name = $2;
-       my $members = $3;
-
-       # ignore embedded structs or unions
-       $members =~ s/({.*})//g;
-       $nested = $1;
-
-       # ignore members marked private:
-       $members =~ s/\/\*\s*private:.*?\/\*\s*public:.*?\*\///gos;
-       $members =~ s/\/\*\s*private:.*//gos;
-       # strip comments:
-       $members =~ s/\/\*.*?\*\///gos;
-       $nested =~ s/\/\*.*?\*\///gos;
-       # strip kmemcheck_bitfield_{begin,end}.*;
-       $members =~ s/kmemcheck_bitfield_.*?;//gos;
-       # strip attributes
-       $members =~ s/__aligned\s*\(\d+\)//gos;
-
-       create_parameterlist($members, ';', $file);
-       check_sections($file, $declaration_name, "struct", $sectcheck, $struct_actual, $nested);
-
-       output_declaration($declaration_name,
-                          'struct',
-                          {'struct' => $declaration_name,
-                           'module' => $modulename,
-                           'parameterlist' => \@parameterlist,
-                           'parameterdescs' => \%parameterdescs,
-                           'parametertypes' => \%parametertypes,
-                           'sectionlist' => \@sectionlist,
-                           'sections' => \%sections,
-                           'purpose' => $declaration_purpose,
-                           'type' => $decl_type
-                          });
-    }
-    else {
-       print STDERR "Error(${file}:$.): Cannot parse struct or union!\n";
-       ++$errors;
-    }
-}
-
-sub dump_enum($$) {
-    my $x = shift;
-    my $file = shift;
-
-    $x =~ s@/\*.*?\*/@@gos;    # strip comments.
-    $x =~ s/^#\s*define\s+.*$//; # strip #define macros inside enums
-
-    if ($x =~ /enum\s+(\w+)\s*{(.*)}/) {
-       $declaration_name = $1;
-       my $members = $2;
-
-       foreach my $arg (split ',', $members) {
-           $arg =~ s/^\s*(\w+).*/$1/;
-           push @parameterlist, $arg;
-           if (!$parameterdescs{$arg}) {
-               $parameterdescs{$arg} = $undescribed;
-               print STDERR "Warning(${file}:$.): Enum value '$arg' ".
-                   "not described in enum '$declaration_name'\n";
-           }
-
-       }
-
-       output_declaration($declaration_name,
-                          'enum',
-                          {'enum' => $declaration_name,
-                           'module' => $modulename,
-                           'parameterlist' => \@parameterlist,
-                           'parameterdescs' => \%parameterdescs,
-                           'sectionlist' => \@sectionlist,
-                           'sections' => \%sections,
-                           'purpose' => $declaration_purpose
-                          });
-    }
-    else {
-       print STDERR "Error(${file}:$.): Cannot parse enum!\n";
-       ++$errors;
-    }
-}
-
-sub dump_typedef($$) {
-    my $x = shift;
-    my $file = shift;
-
-    $x =~ s@/\*.*?\*/@@gos;    # strip comments.
-    while (($x =~ /\(*.\)\s*;$/) || ($x =~ /\[*.\]\s*;$/)) {
-       $x =~ s/\(*.\)\s*;$/;/;
-       $x =~ s/\[*.\]\s*;$/;/;
-    }
-
-    if ($x =~ /typedef.*\s+(\w+)\s*;/) {
-       $declaration_name = $1;
-
-       output_declaration($declaration_name,
-                          'typedef',
-                          {'typedef' => $declaration_name,
-                           'module' => $modulename,
-                           'sectionlist' => \@sectionlist,
-                           'sections' => \%sections,
-                           'purpose' => $declaration_purpose
-                          });
-    }
-    else {
-       print STDERR "Error(${file}:$.): Cannot parse typedef!\n";
-       ++$errors;
-    }
-}
-
-sub save_struct_actual($) {
-    my $actual = shift;
-
-    # strip all spaces from the actual param so that it looks like one string item
-    $actual =~ s/\s*//g;
-    $struct_actual = $struct_actual . $actual . " ";
-}
-
-sub create_parameterlist($$$) {
-    my $args = shift;
-    my $splitter = shift;
-    my $file = shift;
-    my $type;
-    my $param;
-
-    # temporarily replace commas inside function pointer definition
-    while ($args =~ /(\([^\),]+),/) {
-       $args =~ s/(\([^\),]+),/$1#/g;
-    }
-
-    foreach my $arg (split($splitter, $args)) {
-       # strip comments
-       $arg =~ s/\/\*.*\*\///;
-       # strip leading/trailing spaces
-       $arg =~ s/^\s*//;
-       $arg =~ s/\s*$//;
-       $arg =~ s/\s+/ /;
-
-       if ($arg =~ /^#/) {
-           # Treat preprocessor directive as a typeless variable just to fill
-           # corresponding data structures "correctly". Catch it later in
-           # output_* subs.
-           push_parameter($arg, "", $file);
-       } elsif ($arg =~ m/\(.+\)\s*\(/) {
-           # pointer-to-function
-           $arg =~ tr/#/,/;
-           $arg =~ m/[^\(]+\(\*?\s*(\w*)\s*\)/;
-           $param = $1;
-           $type = $arg;
-           $type =~ s/([^\(]+\(\*?)\s*$param/$1/;
-           save_struct_actual($param);
-           push_parameter($param, $type, $file);
-       } elsif ($arg) {
-           $arg =~ s/\s*:\s*/:/g;
-           $arg =~ s/\s*\[/\[/g;
-
-           my @args = split('\s*,\s*', $arg);
-           if ($args[0] =~ m/\*/) {
-               $args[0] =~ s/(\*+)\s*/ $1/;
-           }
-
-           my @first_arg;
-           if ($args[0] =~ /^(.*\s+)(.*?\[.*\].*)$/) {
-                   shift @args;
-                   push(@first_arg, split('\s+', $1));
-                   push(@first_arg, $2);
-           } else {
-                   @first_arg = split('\s+', shift @args);
-           }
-
-           unshift(@args, pop @first_arg);
-           $type = join " ", @first_arg;
-
-           foreach $param (@args) {
-               if ($param =~ m/^(\*+)\s*(.*)/) {
-                   save_struct_actual($2);
-                   push_parameter($2, "$type $1", $file);
-               }
-               elsif ($param =~ m/(.*?):(\d+)/) {
-                   if ($type ne "") { # skip unnamed bit-fields
-                       save_struct_actual($1);
-                       push_parameter($1, "$type:$2", $file)
-                   }
-               }
-               else {
-                   save_struct_actual($param);
-                   push_parameter($param, $type, $file);
-               }
-           }
-       }
-    }
-}
-
-sub push_parameter($$$) {
-       my $param = shift;
-       my $type = shift;
-       my $file = shift;
-
-       if (($anon_struct_union == 1) && ($type eq "") &&
-           ($param eq "}")) {
-               return;         # ignore the ending }; from anon. struct/union
-       }
-
-       $anon_struct_union = 0;
-       my $param_name = $param;
-       $param_name =~ s/\[.*//;
-
-       if ($type eq "" && $param =~ /\.\.\.$/)
-       {
-           if (!defined $parameterdescs{$param} || $parameterdescs{$param} eq "") {
-               $parameterdescs{$param} = "variable arguments";
-           }
-       }
-       elsif ($type eq "" && ($param eq "" or $param eq "void"))
-       {
-           $param="void";
-           $parameterdescs{void} = "no arguments";
-       }
-       elsif ($type eq "" && ($param eq "struct" or $param eq "union"))
-       # handle unnamed (anonymous) union or struct:
-       {
-               $type = $param;
-               $param = "{unnamed_" . $param . "}";
-               $parameterdescs{$param} = "anonymous\n";
-               $anon_struct_union = 1;
-       }
-
-       # warn if parameter has no description
-       # (but ignore ones starting with # as these are not parameters
-       # but inline preprocessor statements);
-       # also ignore unnamed structs/unions;
-       if (!$anon_struct_union) {
-       if (!defined $parameterdescs{$param_name} && $param_name !~ /^#/) {
-
-           $parameterdescs{$param_name} = $undescribed;
-
-           if (($type eq 'function') || ($type eq 'enum')) {
-               print STDERR "Warning(${file}:$.): Function parameter ".
-                   "or member '$param' not " .
-                   "described in '$declaration_name'\n";
-           }
-           print STDERR "Warning(${file}:$.):" .
-                        " No description found for parameter '$param'\n";
-           ++$warnings;
-       }
-       }
-
-       $param = xml_escape($param);
-
-       # strip spaces from $param so that it is one continuous string
-       # on @parameterlist;
-       # this fixes a problem where check_sections() cannot find
-       # a parameter like "addr[6 + 2]" because it actually appears
-       # as "addr[6", "+", "2]" on the parameter list;
-       # but it's better to maintain the param string unchanged for output,
-       # so just weaken the string compare in check_sections() to ignore
-       # "[blah" in a parameter string;
-       ###$param =~ s/\s*//g;
-       push @parameterlist, $param;
-       $parametertypes{$param} = $type;
-}
-
-sub check_sections($$$$$$) {
-       my ($file, $decl_name, $decl_type, $sectcheck, $prmscheck, $nested) = @_;
-       my @sects = split ' ', $sectcheck;
-       my @prms = split ' ', $prmscheck;
-       my $err;
-       my ($px, $sx);
-       my $prm_clean;          # strip trailing "[array size]" and/or beginning "*"
-
-       foreach $sx (0 .. $#sects) {
-               $err = 1;
-               foreach $px (0 .. $#prms) {
-                       $prm_clean = $prms[$px];
-                       $prm_clean =~ s/\[.*\]//;
-                       $prm_clean =~ s/__attribute__\s*\(\([a-z,_\*\s\(\)]*\)\)//i;
-                       # ignore array size in a parameter string;
-                       # however, the original param string may contain
-                       # spaces, e.g.:  addr[6 + 2]
-                       # and this appears in @prms as "addr[6" since the
-                       # parameter list is split at spaces;
-                       # hence just ignore "[..." for the sections check;
-                       $prm_clean =~ s/\[.*//;
-
-                       ##$prm_clean =~ s/^\**//;
-                       if ($prm_clean eq $sects[$sx]) {
-                               $err = 0;
-                               last;
-                       }
-               }
-               if ($err) {
-                       if ($decl_type eq "function") {
-                               print STDERR "Warning(${file}:$.): " .
-                                       "Excess function parameter " .
-                                       "'$sects[$sx]' " .
-                                       "description in '$decl_name'\n";
-                               ++$warnings;
-                       } else {
-                               if ($nested !~ m/\Q$sects[$sx]\E/) {
-                                   print STDERR "Warning(${file}:$.): " .
-                                       "Excess struct/union/enum/typedef member " .
-                                       "'$sects[$sx]' " .
-                                       "description in '$decl_name'\n";
-                                   ++$warnings;
-                               }
-                       }
-               }
-       }
-}
-
-##
-# takes a function prototype and the name of the current file being
-# processed and spits out all the details stored in the global
-# arrays/hashes.
-sub dump_function($$) {
-    my $prototype = shift;
-    my $file = shift;
-
-    $prototype =~ s/^static +//;
-    $prototype =~ s/^extern +//;
-    $prototype =~ s/^asmlinkage +//;
-    $prototype =~ s/^inline +//;
-    $prototype =~ s/^__inline__ +//;
-    $prototype =~ s/^__inline +//;
-    $prototype =~ s/^__always_inline +//;
-    $prototype =~ s/^noinline +//;
-    $prototype =~ s/__devinit +//;
-    $prototype =~ s/__init +//;
-    $prototype =~ s/__init_or_module +//;
-    $prototype =~ s/__must_check +//;
-    $prototype =~ s/__weak +//;
-    $prototype =~ s/^#\s*define\s+//; #ak added
-    $prototype =~ s/__attribute__\s*\(\([a-z,]*\)\)//;
-
-    # Yes, this truly is vile.  We are looking for:
-    # 1. Return type (may be nothing if we're looking at a macro)
-    # 2. Function name
-    # 3. Function parameters.
-    #
-    # All the while we have to watch out for function pointer parameters
-    # (which IIRC is what the two sections are for), C types (these
-    # regexps don't even start to express all the possibilities), and
-    # so on.
-    #
-    # If you mess with these regexps, it's a good idea to check that
-    # the following functions' documentation still comes out right:
-    # - parport_register_device (function pointer parameters)
-    # - atomic_set (macro)
-    # - pci_match_device, __copy_to_user (long return type)
-
-    if ($prototype =~ m/^()([a-zA-Z0-9_~:]+)\s*\(([^\(]*)\)/ ||
-       $prototype =~ m/^(\w+)\s+([a-zA-Z0-9_~:]+)\s*\(([^\(]*)\)/ ||
-       $prototype =~ m/^(\w+\s*\*)\s*([a-zA-Z0-9_~:]+)\s*\(([^\(]*)\)/ ||
-       $prototype =~ m/^(\w+\s+\w+)\s+([a-zA-Z0-9_~:]+)\s*\(([^\(]*)\)/ ||
-       $prototype =~ m/^(\w+\s+\w+\s*\*+)\s*([a-zA-Z0-9_~:]+)\s*\(([^\(]*)\)/ ||
-       $prototype =~ m/^(\w+\s+\w+\s+\w+)\s+([a-zA-Z0-9_~:]+)\s*\(([^\(]*)\)/ ||
-       $prototype =~ m/^(\w+\s+\w+\s+\w+\s*\*)\s*([a-zA-Z0-9_~:]+)\s*\(([^\(]*)\)/ ||
-       $prototype =~ m/^()([a-zA-Z0-9_~:]+)\s*\(([^\{]*)\)/ ||
-       $prototype =~ m/^(\w+)\s+([a-zA-Z0-9_~:]+)\s*\(([^\{]*)\)/ ||
-       $prototype =~ m/^(\w+\s*\*)\s*([a-zA-Z0-9_~:]+)\s*\(([^\{]*)\)/ ||
-       $prototype =~ m/^(\w+\s+\w+)\s+([a-zA-Z0-9_~:]+)\s*\(([^\{]*)\)/ ||
-       $prototype =~ m/^(\w+\s+\w+\s*\*)\s*([a-zA-Z0-9_~:]+)\s*\(([^\{]*)\)/ ||
-       $prototype =~ m/^(\w+\s+\w+\s+\w+)\s+([a-zA-Z0-9_~:]+)\s*\(([^\{]*)\)/ ||
-       $prototype =~ m/^(\w+\s+\w+\s+\w+\s*\*)\s*([a-zA-Z0-9_~:]+)\s*\(([^\{]*)\)/ ||
-       $prototype =~ m/^(\w+\s+\w+\s+\w+\s+\w+)\s+([a-zA-Z0-9_~:]+)\s*\(([^\{]*)\)/ ||
-       $prototype =~ m/^(\w+\s+\w+\s+\w+\s+\w+\s*\*)\s*([a-zA-Z0-9_~:]+)\s*\(([^\{]*)\)/ ||
-       $prototype =~ m/^(\w+\s+\w+\s*\*\s*\w+\s*\*\s*)\s*([a-zA-Z0-9_~:]+)\s*\(([^\{]*)\)/)  {
-       $return_type = $1;
-       $declaration_name = $2;
-       my $args = $3;
-
-       create_parameterlist($args, ',', $file);
-    } else {
-       print STDERR "Error(${file}:$.): cannot understand prototype: '$prototype'\n";
-       ++$errors;
-       return;
-    }
-
-       my $prms = join " ", @parameterlist;
-       check_sections($file, $declaration_name, "function", $sectcheck, $prms, "");
-
-    output_declaration($declaration_name,
-                      'function',
-                      {'function' => $declaration_name,
-                       'module' => $modulename,
-                       'functiontype' => $return_type,
-                       'parameterlist' => \@parameterlist,
-                       'parameterdescs' => \%parameterdescs,
-                       'parametertypes' => \%parametertypes,
-                       'sectionlist' => \@sectionlist,
-                       'sections' => \%sections,
-                       'purpose' => $declaration_purpose
-                      });
-}
-
-sub reset_state {
-    $function = "";
-    %constants = ();
-    %parameterdescs = ();
-    %parametertypes = ();
-    @parameterlist = ();
-    %sections = ();
-    @sectionlist = ();
-    $sectcheck = "";
-    $struct_actual = "";
-    $prototype = "";
-
-    $state = 0;
-}
-
-sub tracepoint_munge($) {
-       my $file = shift;
-       my $tracepointname = 0;
-       my $tracepointargs = 0;
-
-       if ($prototype =~ m/TRACE_EVENT\((.*?),/) {
-               $tracepointname = $1;
-       }
-       if ($prototype =~ m/DEFINE_SINGLE_EVENT\((.*?),/) {
-               $tracepointname = $1;
-       }
-       if ($prototype =~ m/DEFINE_EVENT\((.*?),(.*?),/) {
-               $tracepointname = $2;
-       }
-       $tracepointname =~ s/^\s+//; #strip leading whitespace
-       if ($prototype =~ m/TP_PROTO\((.*?)\)/) {
-               $tracepointargs = $1;
-       }
-       if (($tracepointname eq 0) || ($tracepointargs eq 0)) {
-               print STDERR "Warning(${file}:$.): Unrecognized tracepoint format: \n".
-                            "$prototype\n";
-       } else {
-               $prototype = "static inline void trace_$tracepointname($tracepointargs)";
-       }
-}
-
-sub syscall_munge() {
-       my $void = 0;
-
-       $prototype =~ s@[\r\n\t]+@ @gos; # strip newlines/CR's/tabs
-##     if ($prototype =~ m/SYSCALL_DEFINE0\s*\(\s*(a-zA-Z0-9_)*\s*\)/) {
-       if ($prototype =~ m/SYSCALL_DEFINE0/) {
-               $void = 1;
-##             $prototype = "long sys_$1(void)";
-       }
-
-       $prototype =~ s/SYSCALL_DEFINE.*\(/long sys_/; # fix return type & func name
-       if ($prototype =~ m/long (sys_.*?),/) {
-               $prototype =~ s/,/\(/;
-       } elsif ($void) {
-               $prototype =~ s/\)/\(void\)/;
-       }
-
-       # now delete all of the odd-number commas in $prototype
-       # so that arg types & arg names don't have a comma between them
-       my $count = 0;
-       my $len = length($prototype);
-       if ($void) {
-               $len = 0;       # skip the for-loop
-       }
-       for (my $ix = 0; $ix < $len; $ix++) {
-               if (substr($prototype, $ix, 1) eq ',') {
-                       $count++;
-                       if ($count % 2 == 1) {
-                               substr($prototype, $ix, 1) = ' ';
-                       }
-               }
-       }
-}
-
-sub process_state3_function($$) {
-    my $x = shift;
-    my $file = shift;
-
-    $x =~ s@\/\/.*$@@gos; # strip C99-style comments to end of line
-
-    if ($x =~ m#\s*/\*\s+MACDOC\s*#io || ($x =~ /^#/ && $x !~ /^#\s*define/)) {
-       # do nothing
-    }
-    elsif ($x =~ /([^\{]*)/) {
-       $prototype .= $1;
-    }
-
-    if (($x =~ /\{/) || ($x =~ /\#\s*define/) || ($x =~ /;/)) {
-       $prototype =~ s@/\*.*?\*/@@gos; # strip comments.
-       $prototype =~ s@[\r\n]+@ @gos; # strip newlines/cr's.
-       $prototype =~ s@^\s+@@gos; # strip leading spaces
-       if ($prototype =~ /SYSCALL_DEFINE/) {
-               syscall_munge();
-       }
-       if ($prototype =~ /TRACE_EVENT/ || $prototype =~ /DEFINE_EVENT/ ||
-           $prototype =~ /DEFINE_SINGLE_EVENT/)
-       {
-               tracepoint_munge($file);
-       }
-       dump_function($prototype, $file);
-       reset_state();
-    }
-}
-
-sub process_state3_type($$) {
-    my $x = shift;
-    my $file = shift;
-
-    $x =~ s@[\r\n]+@ @gos; # strip newlines/cr's.
-    $x =~ s@^\s+@@gos; # strip leading spaces
-    $x =~ s@\s+$@@gos; # strip trailing spaces
-    $x =~ s@\/\/.*$@@gos; # strip C99-style comments to end of line
-
-    if ($x =~ /^#/) {
-       # To distinguish preprocessor directive from regular declaration later.
-       $x .= ";";
-    }
-
-    while (1) {
-       if ( $x =~ /([^{};]*)([{};])(.*)/ ) {
-           $prototype .= $1 . $2;
-           ($2 eq '{') && $brcount++;
-           ($2 eq '}') && $brcount--;
-           if (($2 eq ';') && ($brcount == 0)) {
-               dump_declaration($prototype, $file);
-               reset_state();
-               last;
-           }
-           $x = $3;
-       } else {
-           $prototype .= $x;
-           last;
-       }
-    }
-}
-
-# xml_escape: replace <, >, and & in the text stream;
-#
-# however, formatting controls that are generated internally/locally in the
-# kernel-doc script are not escaped here; instead, they begin life like
-# $blankline_html (4 of '\' followed by a mnemonic + ':'), then these strings
-# are converted to their mnemonic-expected output, without the 4 * '\' & ':',
-# just before actual output; (this is done by local_unescape())
-sub xml_escape($) {
-       my $text = shift;
-       if (($output_mode eq "text") || ($output_mode eq "man")) {
-               return $text;
-       }
-       $text =~ s/\&/\\\\\\amp;/g;
-       $text =~ s/\</\\\\\\lt;/g;
-       $text =~ s/\>/\\\\\\gt;/g;
-       return $text;
-}
-
-# convert local escape strings to html
-# local escape strings look like:  '\\\\menmonic:' (that's 4 backslashes)
-sub local_unescape($) {
-       my $text = shift;
-       if (($output_mode eq "text") || ($output_mode eq "man")) {
-               return $text;
-       }
-       $text =~ s/\\\\\\\\lt:/</g;
-       $text =~ s/\\\\\\\\gt:/>/g;
-       return $text;
-}
-
-sub process_file($) {
-    my $file;
-    my $identifier;
-    my $func;
-    my $descr;
-    my $in_purpose = 0;
-    my $initial_section_counter = $section_counter;
-
-    if (defined($ENV{'SRCTREE'})) {
-       $file = "$ENV{'SRCTREE'}" . "/" . "@_";
-    }
-    else {
-       $file = "@_";
-    }
-    if (defined($source_map{$file})) {
-       $file = $source_map{$file};
-    }
-
-    if (!open(IN,"<$file")) {
-       print STDERR "Error: Cannot open file $file\n";
-       ++$errors;
-       return;
-    }
-
-    $. = 1;
-
-    $section_counter = 0;
-    while (<IN>) {
-       if ($state == 0) {
-           if (/$doc_start/o) {
-               $state = 1;             # next line is always the function name
-               $in_doc_sect = 0;
-           }
-       } elsif ($state == 1) { # this line is the function name (always)
-           if (/$doc_block/o) {
-               $state = 4;
-               $contents = "";
-               if ( $1 eq "" ) {
-                       $section = $section_intro;
-               } else {
-                       $section = $1;
-               }
-           }
-           elsif (/$doc_decl/o) {
-               $identifier = $1;
-               if (/\s*([\w\s]+?)\s*-/) {
-                   $identifier = $1;
-               }
-
-               $state = 2;
-               if (/-(.*)/) {
-                   # strip leading/trailing/multiple spaces
-                   $descr= $1;
-                   $descr =~ s/^\s*//;
-                   $descr =~ s/\s*$//;
-                   $descr =~ s/\s+/ /;
-                   $declaration_purpose = xml_escape($descr);
-                   $in_purpose = 1;
-               } else {
-                   $declaration_purpose = "";
-               }
-
-               if (($declaration_purpose eq "") && $verbose) {
-                       print STDERR "Warning(${file}:$.): missing initial short description on line:\n";
-                       print STDERR $_;
-                       ++$warnings;
-               }
-
-               if ($identifier =~ m/^struct/) {
-                   $decl_type = 'struct';
-               } elsif ($identifier =~ m/^union/) {
-                   $decl_type = 'union';
-               } elsif ($identifier =~ m/^enum/) {
-                   $decl_type = 'enum';
-               } elsif ($identifier =~ m/^typedef/) {
-                   $decl_type = 'typedef';
-               } else {
-                   $decl_type = 'function';
-               }
-
-               if ($verbose) {
-                   print STDERR "Info(${file}:$.): Scanning doc for $identifier\n";
-               }
-           } else {
-               print STDERR "Warning(${file}:$.): Cannot understand $_ on line $.",
-               " - I thought it was a doc line\n";
-               ++$warnings;
-               $state = 0;
-           }
-       } elsif ($state == 2) { # look for head: lines, and include content
-           if (/$doc_sect/o) {
-               $newsection = $1;
-               $newcontents = $2;
-
-               if (($contents ne "") && ($contents ne "\n")) {
-                   if (!$in_doc_sect && $verbose) {
-                       print STDERR "Warning(${file}:$.): contents before sections\n";
-                       ++$warnings;
-                   }
-                   dump_section($file, $section, xml_escape($contents));
-                   $section = $section_default;
-               }
-
-               $in_doc_sect = 1;
-               $in_purpose = 0;
-               $contents = $newcontents;
-               if ($contents ne "") {
-                   while ((substr($contents, 0, 1) eq " ") ||
-                       substr($contents, 0, 1) eq "\t") {
-                           $contents = substr($contents, 1);
-                   }
-                   $contents .= "\n";
-               }
-               $section = $newsection;
-           } elsif (/$doc_end/) {
-
-               if (($contents ne "") && ($contents ne "\n")) {
-                   dump_section($file, $section, xml_escape($contents));
-                   $section = $section_default;
-                   $contents = "";
-               }
-               # look for doc_com + <text> + doc_end:
-               if ($_ =~ m'\s*\*\s*[a-zA-Z_0-9:\.]+\*/') {
-                   print STDERR "Warning(${file}:$.): suspicious ending line: $_";
-                   ++$warnings;
-               }
-
-               $prototype = "";
-               $state = 3;
-               $brcount = 0;
-#              print STDERR "end of doc comment, looking for prototype\n";
-           } elsif (/$doc_content/) {
-               # miguel-style comment kludge, look for blank lines after
-               # @parameter line to signify start of description
-               if ($1 eq "") {
-                   if ($section =~ m/^@/ || $section eq $section_context) {
-                       dump_section($file, $section, xml_escape($contents));
-                       $section = $section_default;
-                       $contents = "";
-                   } else {
-                       $contents .= "\n";
-                   }
-                   $in_purpose = 0;
-               } elsif ($in_purpose == 1) {
-                   # Continued declaration purpose
-                   chomp($declaration_purpose);
-                   $declaration_purpose .= " " . xml_escape($1);
-               } elsif ($section =~ m/^Example/) {
-                   $_ =~ s/^\s*\*//;
-                   $contents .= $_;
-               } else {
-                   $contents .= $1 . "\n";
-               }
-           } else {
-               # i dont know - bad line?  ignore.
-               print STDERR "Warning(${file}:$.): bad line: $_";
-               ++$warnings;
-           }
-       } elsif ($state == 3) { # scanning for function '{' (end of prototype)
-           if ($decl_type eq 'function') {
-               process_state3_function($_, $file);
-           } else {
-               process_state3_type($_, $file);
-           }
-       } elsif ($state == 4) {
-               # Documentation block
-               if (/$doc_block/) {
-                       dump_doc_section($file, $section, xml_escape($contents));
-                       $contents = "";
-                       $function = "";
-                       %constants = ();
-                       %parameterdescs = ();
-                       %parametertypes = ();
-                       @parameterlist = ();
-                       %sections = ();
-                       @sectionlist = ();
-                       $prototype = "";
-                       if ( $1 eq "" ) {
-                               $section = $section_intro;
-                       } else {
-                               $section = $1;
-                       }
-               }
-               elsif (/$doc_end/)
-               {
-                       dump_doc_section($file, $section, xml_escape($contents));
-                       $contents = "";
-                       $function = "";
-                       %constants = ();
-                       %parameterdescs = ();
-                       %parametertypes = ();
-                       @parameterlist = ();
-                       %sections = ();
-                       @sectionlist = ();
-                       $prototype = "";
-                       $state = 0;
-               }
-               elsif (/$doc_content/)
-               {
-                       if ( $1 eq "" )
-                       {
-                               $contents .= $blankline;
-                       }
-                       else
-                       {
-                               $contents .= $1 . "\n";
-                       }
-               }
-       }
-    }
-    if ($initial_section_counter == $section_counter) {
-       print STDERR "Warning(${file}): no structured comments found\n";
-       if ($output_mode eq "xml") {
-           # The template wants at least one RefEntry here; make one.
-           print "<refentry>\n";
-           print " <refnamediv>\n";
-           print "  <refname>\n";
-           print "   ${file}\n";
-           print "  </refname>\n";
-           print "  <refpurpose>\n";
-           print "   Document generation inconsistency\n";
-           print "  </refpurpose>\n";
-           print " </refnamediv>\n";
-           print " <refsect1>\n";
-           print "  <title>\n";
-           print "   Oops\n";
-           print "  </title>\n";
-           print "  <warning>\n";
-           print "   <para>\n";
-           print "    The template for this document tried to insert\n";
-           print "    the structured comment from the file\n";
-           print "    <filename>${file}</filename> at this point,\n";
-           print "    but none was found.\n";
-           print "    This dummy section is inserted to allow\n";
-           print "    generation to continue.\n";
-           print "   </para>\n";
-           print "  </warning>\n";
-           print " </refsect1>\n";
-           print "</refentry>\n";
-       }
-    }
-}
-
-
-$kernelversion = get_kernel_version();
-
-# generate a sequence of code that will splice in highlighting information
-# using the s// operator.
-foreach my $pattern (keys %highlights) {
-#   print STDERR "scanning pattern:$pattern, highlight:($highlights{$pattern})\n";
-    $dohighlight .=  "\$contents =~ s:$pattern:$highlights{$pattern}:gs;\n";
-}
-
-# Read the file that maps relative names to absolute names for
-# separate source and object directories and for shadow trees.
-if (open(SOURCE_MAP, "<.tmp_filelist.txt")) {
-       my ($relname, $absname);
-       while(<SOURCE_MAP>) {
-               chop();
-               ($relname, $absname) = (split())[0..1];
-               $relname =~ s:^/+::;
-               $source_map{$relname} = $absname;
-       }
-       close(SOURCE_MAP);
-}
-
-foreach (@ARGV) {
-    chomp;
-    process_file($_);
-}
-if ($verbose && $errors) {
-  print STDERR "$errors errors\n";
-}
-if ($verbose && $warnings) {
-  print STDERR "$warnings warnings\n";
-}
-
-exit($errors);
diff --git a/tools/md5.c b/tools/md5.c
new file mode 100644 (file)
index 0000000..befaa32
--- /dev/null
@@ -0,0 +1 @@
+#include "../lib/md5.c"
diff --git a/tools/rsa-sign.c b/tools/rsa-sign.c
new file mode 100644 (file)
index 0000000..150bbe1
--- /dev/null
@@ -0,0 +1 @@
+#include "../lib/rsa/rsa-sign.c"
diff --git a/tools/sha1.c b/tools/sha1.c
new file mode 100644 (file)
index 0000000..0d717df
--- /dev/null
@@ -0,0 +1 @@
+#include "../lib/sha1.c"