Project import generated by Copybara.

GitOrigin-RevId: 3253e868d3c66301a17dc6ad57b214fce9e75bce
diff --git a/.checkpatch.conf b/.checkpatch.conf
index 95f1963..35167e1 100644
--- a/.checkpatch.conf
+++ b/.checkpatch.conf
@@ -21,10 +21,3 @@
 
 # Ignore networking block comment style
 --ignore NETWORKING_BLOCK_COMMENT_STYLE
-
-# Ignore "WARNING: Prefer ether_addr_copy() over memcpy() if the Ethernet
-# addresses are __aligned(2)".
---ignore PREFER_ETHER_ADDR_COPY
-
-# A bit shorter of a description is OK with us.
---min-conf-desc-length=2
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
deleted file mode 100644
index 23599b9..0000000
--- a/.github/pull_request_template.md
+++ /dev/null
@@ -1,3 +0,0 @@
-Please do not submit a Pull Request via github.  Our project makes use of
-mailing lists for patch submission and review.  For more details please
-see https://www.denx.de/wiki/U-Boot/Patches
diff --git a/.mailmap b/.mailmap
index 1bee048..e1c6663 100644
--- a/.mailmap
+++ b/.mailmap
@@ -10,21 +10,13 @@
 
 Allen Martin <amartin@nvidia.com>
 Andreas Bießmann <andreas.devel@googlemail.com>
-Andreas Bießmann <andreas@biessmann.org>
 Aneesh V <aneesh@ti.com>
 Dirk Behme <dirk.behme@googlemail.com>
-Fabio Estevam <fabio.estevam@nxp.com>
-Jagan Teki <402jagan@gmail.com>
-Jagan Teki <jaganna@gmail.com>
-Jagan Teki <jaganna@xilinx.com>
-Jagan Teki <jagannadh.teki@gmail.com>
-Jagan Teki <jagannadha.sutradharudu-teki@xilinx.com>
+Fabio Estevam <fabio.estevam@freescale.com>
+Jagannadha Sutradharudu Teki <402jagan@gmail.com>
 Markus Klotzbuecher <mk@denx.de>
-Paul Burton <paul.burton@mips.com> <paul.burton@imgtec.com>
 Prabhakar Kushwaha <prabhakar@freescale.com>
 Rajeshwari Shinde <rajeshwari.s@samsung.com>
-Ricardo Ribalda <ricardo.ribalda@uam.es>
-Ricardo Ribalda <ricardo.ribalda@gmail.com>
 Sandeep Paulraj <s-paulraj@ti.com>
 Shaohui Xie <Shaohui.Xie@freescale.com>
 Stefan Roese <stroese>
@@ -32,7 +24,4 @@
 TsiChung Liew <Tsi-Chung.Liew@freescale.com>
 Wolfgang Denk <wdenk>
 York Sun <yorksun@freescale.com>
-York Sun <york.sun@nxp.com>
 Ɓukasz Majewski <l.majewski@samsung.com>
-Lukasz Majewski <lukma@denx.de>
-Mirza <Taimoor_Mirza@mentor.com>
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 321fd79..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,465 +0,0 @@
-# SPDX-License-Identifier: GPL-2.0+
-# Copyright Roger Meier <r.meier@siemens.com>
-
-# build U-Boot on Travis CI - https://travis-ci.org/
-
-sudo: required
-dist: trusty
-
-language: c
-
-addons:
-  apt:
-    sources:
-    - ubuntu-toolchain-r-test
-    - llvm-toolchain-trusty-7
-    packages:
-    - cppcheck
-    - sloccount
-    - sparse
-    - bc
-    - build-essential
-    - libsdl1.2-dev
-    - python
-    - python-virtualenv
-    - swig
-    - libpython-dev
-    - iasl
-    - grub-efi-ia32-bin
-    - grub-efi-amd64-bin
-    - rpm2cpio
-    - wget
-    - device-tree-compiler
-    - lzop
-    - liblz4-tool
-    - libisl15
-    - clang-7
-
-install:
- # Clone uboot-test-hooks
- - git clone --depth=1 git://github.com/swarren/uboot-test-hooks.git /tmp/uboot-test-hooks
- - ln -s travis-ci /tmp/uboot-test-hooks/bin/`hostname`
- - ln -s travis-ci /tmp/uboot-test-hooks/py/`hostname`
- # prepare buildman environment
- - echo -e "[toolchain]\nroot = /usr" > ~/.buildman
- - echo -e "arc = /tmp/arc_gnu_2018.09_prebuilt_uclibc_le_archs_linux_install" >> ~/.buildman
- - echo -e "\n[toolchain-alias]\nsh = sh2\n" >> ~/.buildman
- - cat ~/.buildman
- - virtualenv /tmp/venv
- - . /tmp/venv/bin/activate
- - pip install pytest==2.8.7
- - pip install python-subunit
- - grub-mkimage -o ~/grub_x86.efi -O i386-efi normal  echo lsefimmap lsefi lsefisystab efinet tftp minicmd
- - grub-mkimage -o ~/grub_x64.efi -O x86_64-efi normal  echo lsefimmap lsefi lsefisystab efinet tftp minicmd
- - mkdir ~/grub2-arm
- - ( cd ~/grub2-arm; wget -O - http://download.opensuse.org/ports/armv7hl/distribution/leap/42.2/repo/oss/suse/armv7hl/grub2-arm-efi-2.02~beta2-87.1.armv7hl.rpm | rpm2cpio | cpio -di )
- - mkdir ~/grub2-arm64
- - ( cd ~/grub2-arm64; wget -O - http://download.opensuse.org/ports/aarch64/distribution/leap/42.2/repo/oss/suse/aarch64/grub2-arm64-efi-2.02~beta2-87.1.aarch64.rpm | rpm2cpio | cpio -di )
-
-env:
-  global:
-    - PATH=/tmp/qemu-install/bin:/tmp/uboot-test-hooks/bin:/usr/bin:/bin
-    - PYTHONPATH=/tmp/uboot-test-hooks/py/travis-ci
-    - BUILD_DIR=build
-    - HOSTCC="cc"
-    - HOSTCXX="c++"
-
-before_script:
-  # install toolchains based on TOOLCHAIN} variable
-  - if [[ "${TOOLCHAIN}" == *m68k* ]]; then ./tools/buildman/buildman --fetch-arch m68k ; fi
-  - if [[ "${TOOLCHAIN}" == *microblaze* ]]; then ./tools/buildman/buildman --fetch-arch microblaze ; fi
-  - if [[ "${TOOLCHAIN}" == *mips* ]]; then ./tools/buildman/buildman --fetch-arch mips ; fi
-  - if [[ "${TOOLCHAIN}" == *sh* ]]; then ./tools/buildman/buildman --fetch-arch sh2 ; fi
-  - if [[ "${TOOLCHAIN}" == *i386* ]]; then
-      ./tools/buildman/buildman --fetch-arch i386;
-      echo -e "\n[toolchain-alias]\nx86 = i386" >> ~/.buildman;
-    fi
-  - if [[ "${TOOLCHAIN}" == arc ]]; then
-       wget https://github.com/foss-for-synopsys-dwc-arc-processors/toolchain/releases/download/arc-2018.09-release/arc_gnu_2018.09_prebuilt_uclibc_le_archs_linux_install.tar.gz &&
-       tar -C /tmp -xf arc_gnu_2018.09_prebuilt_uclibc_le_archs_linux_install.tar.gz;
-    fi
-  - if [[ "${TOOLCHAIN}" == *xtensa* ]]; then
-       wget https://github.com/foss-xtensa/toolchain/releases/download/2018.02/x86_64-2018.02-${TOOLCHAIN}.tar.gz &&
-       tar -C /tmp -xf x86_64-2018.02-${TOOLCHAIN}.tar.gz &&
-       echo -e "\n[toolchain-prefix]\nxtensa = /tmp/2018.02/${TOOLCHAIN}/bin/${TOOLCHAIN}-" >> ~/.buildman;
-    fi
-  # If TOOLCHAIN is unset, we're on some flavour of ARM.
-  - if [[ "${TOOLCHAIN}" == "" ]]; then
-       ./tools/buildman/buildman --fetch-arch arm &&
-       ./tools/buildman/buildman --fetch-arch aarch64;
-    fi
-  - if [[ "${TOOLCHAIN}" == "powerpc" ]]; then ./tools/buildman/buildman --fetch-arch powerpc; fi
-  - if [[ "${TOOLCHAIN}" == "riscv" ]]; then
-       ./tools/buildman/buildman --fetch-arch riscv64;
-       echo -e "\n[toolchain-alias]\nriscv = riscv64" >> ~/.buildman;
-    fi
-  - if [[ "${QEMU_TARGET}" != "" ]]; then
-       git clone git://git.qemu.org/qemu.git /tmp/qemu;
-       pushd /tmp/qemu;
-       git submodule update --init dtc &&
-       git checkout v3.0.0 &&
-       ./configure --prefix=/tmp/qemu-install --target-list=${QEMU_TARGET} &&
-       make -j4 all install;
-       popd;
-    fi
-
-script:
- # Comments must be outside the command strings below, or the Travis parser
- # will get confused.
- #
- # From buildman, exit code 129 means warnings only.  If we've been asked to
- # use clang only do one configuration.
- - if [[ "${TOOLCHAIN}" == "clang" ]]; then
-     ret=0;
-     make O=../.bm-work/${TEST_PY_BD} HOSTCC=clang-7 CC=clang-7 -j$(nproc)
-       KCFLAGS=-Werror sandbox_config all || ret=$?;
-     if [[ $ret -ne 0 ]]; then
-       exit $ret;
-     fi;
-   elif [[ "${BUILDMAN}" != "" ]]; then
-     ret=0;
-     tools/buildman/buildman -P -E ${BUILDMAN} || ret=$?;
-     if [[ $ret -ne 0 && $ret -ne 129 ]]; then
-       tools/buildman/buildman -sdeP ${BUILDMAN};
-       exit $ret;
-     fi;
-   fi
- # "not a_test_which_does_not_exist" is a dummy -k parameter which will
- # never prevent any test from running. That way, we can always pass
- # "-k something" even when $TEST_PY_TEST_SPEC doesnt need a custom
- # value.
- - export UBOOT_TRAVIS_BUILD_DIR=`cd .. && pwd`/.bm-work/${TEST_PY_BD};
-   cp ~/grub_x86.efi $UBOOT_TRAVIS_BUILD_DIR/;
-   cp ~/grub_x64.efi $UBOOT_TRAVIS_BUILD_DIR/;
-   cp ~/grub2-arm/usr/lib/grub2/arm-efi/grub.efi $UBOOT_TRAVIS_BUILD_DIR/grub_arm.efi;
-   cp ~/grub2-arm64/usr/lib/grub2/arm64-efi/grub.efi $UBOOT_TRAVIS_BUILD_DIR/grub_arm64.efi;
-   if [[ "${TEST_PY_BD}" != "" ]]; then
-     ./test/py/test.py --bd ${TEST_PY_BD} ${TEST_PY_ID}
-       -k "${TEST_PY_TEST_SPEC:-not a_test_which_does_not_exist}"
-       --build-dir "$UBOOT_TRAVIS_BUILD_DIR";
-     ret=$?;
-     if [[ $ret -ne 0 ]]; then
-       exit $ret;
-     fi;
-   fi;
-   if [[ -n "${TEST_PY_TOOLS}" ]]; then
-     PYTHONPATH="${UBOOT_TRAVIS_BUILD_DIR}/scripts/dtc/pylibfdt"
-     PATH="${UBOOT_TRAVIS_BUILD_DIR}/scripts/dtc:${PATH}"
-     ./tools/binman/binman -t &&
-     ./tools/patman/patman --test &&
-     ./tools/buildman/buildman -t &&
-     PYTHONPATH="${UBOOT_TRAVIS_BUILD_DIR}/scripts/dtc/pylibfdt"
-     PATH="${UBOOT_TRAVIS_BUILD_DIR}/scripts/dtc:${PATH}"
-     ./tools/dtoc/dtoc -t;
-   fi
-
-matrix:
-  include:
-  # we need to build by vendor due to 50min time limit for builds
-  # each env setting here is a dedicated build
-    - name: "buildman arc"
-      env:
-        - BUILDMAN="arc"
-          TOOLCHAIN="arc"
-    - name: "buildman arm11 arm7 arm920t arm946es"
-      env:
-        - BUILDMAN="arm11 arm7 arm920t arm946es"
-    - name: "buildman arm926ejs (non-freescale,siemens,atmel,kirkwood,spear)"
-      env:
-        - JOB="arm926ejs"
-          BUILDMAN="arm926ejs -x freescale,siemens,atmel,kirkwood,spear"
-    - name: "buildman atmel"
-      env:
-        - BUILDMAN="atmel"
-    - name: "buildman boundary engicam toradex"
-      env:
-        - BUILDMAN="boundary engicam toradex"
-    - name: "buildman Freescale ARM32"
-      env:
-        - BUILDMAN="freescale -x powerpc,m68k,aarch64"
-    - name: "buildman Freescale AArch64 LS10xx"
-      env:
-        - BUILDMAN="freescale&aarch64&&ls1"
-    - name: "buildman Freescale AArch64 LS20xx"
-      env:
-        - BUILDMAN="freescale&aarch64&&ls2"
-    - name: "buildman i.MX6 (non-Freescale)"
-      env:
-        - BUILDMAN="mx6 -x freescale,toradex,boundary,engicam"
-    - name: "buildman i.MX (non-Freescale,i.MX6,toradex)"
-      env:
-        - BUILDMAN="mx -x freescale,mx6,toradex"
-    - name: "buildman k2"
-      env:
-        - BUILDMAN="k2"
-    - name: "buildman samsung socfpga"
-      env:
-        - BUILDMAN="samsung socfpga"
-    - name: "buildman spear"
-      env:
-        - BUILDMAN="spear"
-    - name: "buildman sun4i"
-      env:
-        - BUILDMAN="sun4i"
-    - name: "buildman sun5i"
-      env:
-        - BUILDMAN="sun5i"
-    - name: "buildman sun6i"
-      env:
-        - BUILDMAN="sun6i"
-    - name: "buildman sun7i"
-      env:
-        - BUILDMAN="sun7i"
-    - name: "buildman sun8i"
-      env:
-        - BUILDMAN="sun8i"
-    - name: "buildman sun9i"
-      env:
-        - BUILDMAN="sun9i"
-    - name: "buildman sun50i"
-      env:
-        - BUILDMAN="sun50i"
-    - name: "buildman catch-all ARM"
-      env:
-        - BUILDMAN="arm -x arm11,arm7,arm9,aarch64,atmel,freescale,kirkwood,mvebu,siemens,tegra,uniphier,mx,samsung,sunxi,am33xx,omap,pxa,rockchip,toradex,socfpga,k2,xilinx"
-    - name: "buildman sandbox x86"
-      env:
-        - BUILDMAN="sandbox x86"
-          TOOLCHAIN="i386"
-    - name: "buildman kirkwood (excluding openrd)"
-      env:
-        - BUILDMAN="kirkwood -x openrd"
-    - name: "buildman mvebu"
-      env:
-        - BUILDMAN="mvebu"
-    - name: "buildman PXA (non-toradex)"
-      env:
-        - BUILDMAN="pxa -x toradex"
-    - name: "buildman m68k"
-      env:
-        - BUILDMAN="m68k"
-          TOOLCHAIN="m68k"
-    - name: "buildman microblaze"
-      env:
-        - BUILDMAN="microblaze"
-          TOOLCHAIN="microblaze"
-    - name: "buildman mips"
-      env:
-        - BUILDMAN="mips"
-          TOOLCHAIN="mips"
-    - name: "buildman non-Freescale PowerPC"
-      env:
-        - BUILDMAN="powerpc -x freescale"
-          TOOLCHAIN="powerpc"
-    - name: "buildman mpc85xx&freescale (excluding many)"
-      env:
-        - BUILDMAN="mpc85xx&freescale -x t208xrdb -x t4qds -x t102* -x p1_p2_rdb_pc -x p1010rdb -x corenet_ds -x b4860qds -x bsc91*"
-          TOOLCHAIN="powerpc"
-    - name: "buildman t208xrdb corenet_ds"
-      env:
-        - BUILDMAN="t208xrdb corenet_ds"
-          TOOLCHAIN="powerpc"
-    - name: "buildman Freescale PowerPC"
-      env:
-        - BUILDMAN="t4qds b4860qds mpc83xx&freescale mpc86xx&freescale"
-          TOOLCHAIN="powerpc"
-    - name: "buildman t102*"
-      env:
-        - BUILDMAN="t102*"
-          TOOLCHAIN="powerpc"
-    - name: "buildman p1_p2_rdb_pc"
-      env:
-        - BUILDMAN="p1_p2_rdb_pc"
-          TOOLCHAIN="powerpc"
-    - name: "buildman p1010rdb bsc91"
-      env:
-        - BUILDMAN="p1010rdb bsc91"
-          TOOLCHAIN="powerpc"
-    - name: "buildman siemens"
-      env:
-        - BUILDMAN="siemens"
-    - name: "buildman tegra"
-      env:
-        - BUILDMAN="tegra -x toradex"
-    - name: "buildman am33xx (no siemens)"
-      env:
-        - BUILDMAN="am33xx -x siemens"
-    - name: "buildman omap"
-      env:
-        - BUILDMAN="omap"
-    - name: "buildman uniphier"
-      env:
-        - BUILDMAN="uniphier"
-    - name: "buildman catch-all AArch64"
-      env:
-        - BUILDMAN="aarch64 -x tegra,ls1,ls2,mvebu,uniphier,sunxi,samsung,rockchip,xilinx"
-    - name: "buildman rockchip"
-      env:
-        - BUILDMAN="rockchip"
-    - name: "buildman sh"
-      env:
-        - BUILDMAN="sh -x arm"
-          TOOLCHAIN="sh"
-    - name: "buildman Xilinx (ARM)"
-      env:
-        - BUILDMAN="xilinx -x microblaze"
-    - name: "buildman xtensa"
-      env:
-        - BUILDMAN="xtensa"
-          TOOLCHAIN="xtensa-dc233c-elf"
-    - name: "buildman riscv"
-      env:
-        - BUILDMAN="riscv"
-          TOOLCHAIN="riscv"
-
-    # QA jobs for code analytics
-    # static code analysis with cppcheck (we can add --enable=all later)
-    - name: "cppcheck"
-      script:
-        - cppcheck --force --quiet --inline-suppr .
-    # search for TODO within source tree
-    - name: "grep TODO"
-      script:
-        - grep -r TODO .
-    # search for FIXME within source tree
-    - name: "grep FIXME HACK"
-      script:
-        - grep -r FIXME .
-    # search for HACK within source tree and ignore HACKKIT board
-      script:
-        - grep -r HACK . | grep -v HACKKIT
-    # some statistics about the code base
-    - name: "sloccount"
-      script:
-        - sloccount .
-    # ensure all configs have MAINTAINERS entries
-    - name: "Check for configs without MAINTAINERS entry"
-      script:
-        - if [ `./tools/genboardscfg.py -f 2>&1 | wc -l` -ne 0 ]; then exit 1; fi
-    # Ensure host tools build
-    - name: "Build tools-only"
-      script:
-        - make tools-only_config tools-only -j$(nproc)
-
-    # test/py
-    - name: "test/py sandbox"
-      env:
-        - TEST_PY_BD="sandbox"
-          BUILDMAN="^sandbox$"
-          TOOLCHAIN="i386"
-    - name: "test/py sandbox with clang"
-      env:
-        - TEST_PY_BD="sandbox"
-          BUILDMAN="^sandbox$"
-          TOOLCHAIN="clang"
-    - name: "test/py sandbox_spl"
-      env:
-        - TEST_PY_BD="sandbox_spl"
-          TEST_PY_TEST_SPEC="test_ofplatdata"
-          BUILDMAN="^sandbox$"
-          TOOLCHAIN="i386"
-          TEST_PY_TOOLS="yes"
-    - name: "test/py sandbox_flattree"
-      env:
-        - TEST_PY_BD="sandbox_flattree"
-          BUILDMAN="^sandbox_flattree$"
-          TOOLCHAIN="i386"
-    - name: "test/py vexpress_ca15_tc2"
-      env:
-        - TEST_PY_BD="vexpress_ca15_tc2"
-          TEST_PY_ID="--id qemu"
-          QEMU_TARGET="arm-softmmu"
-          BUILDMAN="^vexpress_ca15_tc2$"
-    - name: "test/py vexpress_ca9x4"
-      env:
-        - TEST_PY_BD="vexpress_ca9x4"
-          TEST_PY_ID="--id qemu"
-          QEMU_TARGET="arm-softmmu"
-          BUILDMAN="^vexpress_ca9x4$"
-    - name: "test/py integratorcp_cm926ejs"
-      env:
-        - TEST_PY_BD="integratorcp_cm926ejs"
-          TEST_PY_TEST_SPEC="not sleep"
-          TEST_PY_ID="--id qemu"
-          QEMU_TARGET="arm-softmmu"
-          BUILDMAN="^integratorcp_cm926ejs$"
-    - name: "test/py qemu_arm"
-      env:
-        - TEST_PY_BD="qemu_arm"
-          TEST_PY_TEST_SPEC="not sleep"
-          QEMU_TARGET="arm-softmmu"
-          BUILDMAN="^qemu_arm$"
-    - name: "test/py qemu_arm64"
-      env:
-        - TEST_PY_BD="qemu_arm64"
-          TEST_PY_TEST_SPEC="not sleep"
-          QEMU_TARGET="aarch64-softmmu"
-          BUILDMAN="^qemu_arm64$"
-    - name: "test/py qemu_mips"
-      env:
-        - TEST_PY_BD="qemu_mips"
-          TEST_PY_TEST_SPEC="not sleep"
-          QEMU_TARGET="mips-softmmu"
-          BUILDMAN="^qemu_mips$"
-          TOOLCHAIN="mips"
-    - name: "test/py qemu_mipsel"
-      env:
-        - TEST_PY_BD="qemu_mipsel"
-          TEST_PY_TEST_SPEC="not sleep"
-          QEMU_TARGET="mipsel-softmmu"
-          BUILDMAN="^qemu_mipsel$"
-          TOOLCHAIN="mips"
-    - name: "test/py qemu_mips64"
-      env:
-        - TEST_PY_BD="qemu_mips64"
-          TEST_PY_TEST_SPEC="not sleep"
-          QEMU_TARGET="mips64-softmmu"
-          BUILDMAN="^qemu_mips64$"
-          TOOLCHAIN="mips"
-    - name: "test/py qemu_mips64el"
-      env:
-        - TEST_PY_BD="qemu_mips64el"
-          TEST_PY_TEST_SPEC="not sleep"
-          QEMU_TARGET="mips64el-softmmu"
-          BUILDMAN="^qemu_mips64el$"
-          TOOLCHAIN="mips"
-    - name: "test/py qemu-ppce500"
-      env:
-        - TEST_PY_BD="qemu-ppce500"
-          TEST_PY_TEST_SPEC="not sleep"
-          QEMU_TARGET="ppc-softmmu"
-          BUILDMAN="^qemu-ppce500$"
-          TOOLCHAIN="powerpc"
-    - name: "test/py qemu-x86"
-      env:
-        - TEST_PY_BD="qemu-x86"
-          TEST_PY_TEST_SPEC="not sleep"
-          QEMU_TARGET="i386-softmmu"
-          BUILDMAN="^qemu-x86$"
-          TOOLCHAIN="i386"
-          BUILD_ROM="yes"
-    - name: "test/py qemu-x86_64"
-      env:
-        - TEST_PY_BD="qemu-x86_64"
-          TEST_PY_TEST_SPEC="not sleep"
-          QEMU_TARGET="x86_64-softmmu"
-          BUILDMAN="^qemu-x86_64$"
-          TOOLCHAIN="i386"
-          BUILD_ROM="yes"
-    - name: "test/py zynq_zc702"
-      env:
-        - TEST_PY_BD="zynq_zc702"
-          TEST_PY_TEST_SPEC="not sleep"
-          QEMU_TARGET="arm-softmmu"
-          TEST_PY_ID="--id qemu"
-          BUILDMAN="^zynq_zc702$"
-    - name: "test/py xtfpga"
-      env:
-        - TEST_PY_BD="xtfpga"
-          TEST_PY_TEST_SPEC="not sleep"
-          QEMU_TARGET="xtensa-softmmu"
-          TEST_PY_ID="--id qemu"
-          BUILDMAN="^xtfpga$"
-          TOOLCHAIN="xtensa-dc233c-elf"
-
-# TODO make it perfect ;-r
diff --git a/Documentation/.gitignore b/Documentation/.gitignore
deleted file mode 100644
index e74fec8..0000000
--- a/Documentation/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-output
-*.pyc
diff --git a/Documentation/Makefile b/Documentation/Makefile
deleted file mode 100644
index 2ca77ad..0000000
--- a/Documentation/Makefile
+++ /dev/null
@@ -1,124 +0,0 @@
-# -*- makefile -*-
-# Makefile for Sphinx documentation
-#
-
-subdir-y :=
-
-# You can set these variables from the command line.
-SPHINXBUILD   = sphinx-build
-SPHINXOPTS    =
-SPHINXDIRS    = .
-_SPHINXDIRS   = $(patsubst $(srctree)/Documentation/%/conf.py,%,$(wildcard $(srctree)/Documentation/*/conf.py))
-SPHINX_CONF   = conf.py
-PAPER         =
-BUILDDIR      = $(obj)/output
-PDFLATEX      = xelatex
-LATEXOPTS     = -interaction=batchmode
-
-# User-friendly check for sphinx-build
-HAVE_SPHINX := $(shell if which $(SPHINXBUILD) >/dev/null 2>&1; then echo 1; else echo 0; fi)
-
-ifeq ($(HAVE_SPHINX),0)
-
-.DEFAULT:
-	$(warning The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed and in PATH, or set the SPHINXBUILD make variable to point to the full path of the '$(SPHINXBUILD)' executable.)
-	@echo
-	@./scripts/sphinx-pre-install
-	@echo "  SKIP    Sphinx $@ target."
-
-else # HAVE_SPHINX
-
-# User-friendly check for pdflatex
-HAVE_PDFLATEX := $(shell if which $(PDFLATEX) >/dev/null 2>&1; then echo 1; else echo 0; fi)
-
-# Internal variables.
-PAPEROPT_a4     = -D latex_paper_size=a4
-PAPEROPT_letter = -D latex_paper_size=letter
-KERNELDOC       = $(srctree)/scripts/kernel-doc
-KERNELDOC_CONF  = -D kerneldoc_srctree=$(srctree) -D kerneldoc_bin=$(KERNELDOC)
-ALLSPHINXOPTS   =  $(KERNELDOC_CONF) $(PAPEROPT_$(PAPER)) $(SPHINXOPTS)
-# the i18n builder cannot share the environment and doctrees with the others
-I18NSPHINXOPTS  = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
-
-# commands; the 'cmd' from scripts/Kbuild.include is not *loopable*
-loop_cmd = $(echo-cmd) $(cmd_$(1)) || exit;
-
-# $2 sphinx builder e.g. "html"
-# $3 name of the build subfolder / e.g. "media", used as:
-#    * dest folder relative to $(BUILDDIR) and
-#    * cache folder relative to $(BUILDDIR)/.doctrees
-# $4 dest subfolder e.g. "man" for man pages at media/man
-# $5 reST source folder relative to $(srctree)/$(src),
-#    e.g. "media" for the linux-tv book-set at ./Documentation/media
-
-quiet_cmd_sphinx = SPHINX  $@ --> file://$(abspath $(BUILDDIR)/$3/$4)
-      cmd_sphinx = $(MAKE) BUILDDIR=$(abspath $(BUILDDIR)) $(build)=Documentation/media $2 && \
-	PYTHONDONTWRITEBYTECODE=1 \
-	BUILDDIR=$(abspath $(BUILDDIR)) SPHINX_CONF=$(abspath $(srctree)/$(src)/$5/$(SPHINX_CONF)) \
-	$(SPHINXBUILD) \
-	-b $2 \
-	-c $(abspath $(srctree)/$(src)) \
-	-d $(abspath $(BUILDDIR)/.doctrees/$3) \
-	-D version=$(KERNELVERSION) -D release=$(KERNELRELEASE) \
-	$(ALLSPHINXOPTS) \
-	$(abspath $(srctree)/$(src)/$5) \
-	$(abspath $(BUILDDIR)/$3/$4)
-
-htmldocs:
-	@+$(foreach var,$(SPHINXDIRS),$(call loop_cmd,sphinx,html,$(var),,$(var)))
-
-linkcheckdocs:
-	@$(foreach var,$(SPHINXDIRS),$(call loop_cmd,sphinx,linkcheck,$(var),,$(var)))
-
-latexdocs:
-	@+$(foreach var,$(SPHINXDIRS),$(call loop_cmd,sphinx,latex,$(var),latex,$(var)))
-
-ifeq ($(HAVE_PDFLATEX),0)
-
-pdfdocs:
-	$(warning The '$(PDFLATEX)' command was not found. Make sure you have it installed and in PATH to produce PDF output.)
-	@echo "  SKIP    Sphinx $@ target."
-
-else # HAVE_PDFLATEX
-
-pdfdocs: latexdocs
-	$(foreach var,$(SPHINXDIRS), $(MAKE) PDFLATEX=$(PDFLATEX) LATEXOPTS="$(LATEXOPTS)" -C $(BUILDDIR)/$(var)/latex || exit;)
-
-endif # HAVE_PDFLATEX
-
-epubdocs:
-	@+$(foreach var,$(SPHINXDIRS),$(call loop_cmd,sphinx,epub,$(var),epub,$(var)))
-
-xmldocs:
-	@+$(foreach var,$(SPHINXDIRS),$(call loop_cmd,sphinx,xml,$(var),xml,$(var)))
-
-endif # HAVE_SPHINX
-
-# The following targets are independent of HAVE_SPHINX, and the rules should
-# work or silently pass without Sphinx.
-
-refcheckdocs:
-	$(Q)cd $(srctree);scripts/documentation-file-ref-check
-
-cleandocs:
-	$(Q)rm -rf $(BUILDDIR)
-	$(Q)$(MAKE) BUILDDIR=$(abspath $(BUILDDIR)) $(build)=Documentation/media clean
-
-dochelp:
-	@echo  ' Linux kernel internal documentation in different formats from ReST:'
-	@echo  '  htmldocs        - HTML'
-	@echo  '  latexdocs       - LaTeX'
-	@echo  '  pdfdocs         - PDF'
-	@echo  '  epubdocs        - EPUB'
-	@echo  '  xmldocs         - XML'
-	@echo  '  linkcheckdocs   - check for broken external links (will connect to external hosts)'
-	@echo  '  refcheckdocs    - check for references to non-existing files under Documentation'
-	@echo  '  cleandocs       - clean all generated files'
-	@echo
-	@echo  '  make SPHINXDIRS="s1 s2" [target] Generate only docs of folder s1, s2'
-	@echo  '  valid values for SPHINXDIRS are: $(_SPHINXDIRS)'
-	@echo
-	@echo  '  make SPHINX_CONF={conf-file} [target] use *additional* sphinx-build'
-	@echo  '  configuration. This is e.g. useful to build with nit-picking config.'
-	@echo
-	@echo  '  Default location for the generated documents is Documentation/output'
diff --git a/Documentation/conf.py b/Documentation/conf.py
deleted file mode 100644
index 168c313..0000000
--- a/Documentation/conf.py
+++ /dev/null
@@ -1,528 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# The U-Boot documentation build configuration file, created by
-# sphinx-quickstart on Fri Feb 12 13:51:46 2016.
-#
-# This file is execfile()d with the current directory set to its
-# containing dir.
-#
-# Note that not all possible configuration values are present in this
-# autogenerated file.
-#
-# All configuration values have a default; values that are commented out
-# serve to show the default.
-
-import sys
-import os
-import sphinx
-
-# Get Sphinx version
-major, minor, patch = sphinx.version_info[:3]
-
-
-# If extensions (or modules to document with autodoc) are in another directory,
-# add these directories to sys.path here. If the directory is relative to the
-# documentation root, use os.path.abspath to make it absolute, like shown here.
-sys.path.insert(0, os.path.abspath('sphinx'))
-from load_config import loadConfig
-
-# -- General configuration ------------------------------------------------
-
-# If your documentation needs a minimal Sphinx version, state it here.
-needs_sphinx = '1.3'
-
-# Add any Sphinx extension module names here, as strings. They can be
-# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
-# ones.
-extensions = ['kerneldoc', 'rstFlatTable', 'kernel_include', 'cdomain', 'kfigure']
-
-# The name of the math extension changed on Sphinx 1.4
-if major == 1 and minor > 3:
-    extensions.append("sphinx.ext.imgmath")
-else:
-    extensions.append("sphinx.ext.pngmath")
-
-# Add any paths that contain templates here, relative to this directory.
-templates_path = ['_templates']
-
-# The suffix(es) of source filenames.
-# You can specify multiple suffix as a list of string:
-# source_suffix = ['.rst', '.md']
-source_suffix = '.rst'
-
-# The encoding of source files.
-#source_encoding = 'utf-8-sig'
-
-# The master toctree document.
-master_doc = 'index'
-
-# General information about the project.
-project = 'Das U-Boot'
-copyright = 'The U-Boot development community'
-author = 'The U-Boot development community'
-
-# The version info for the project you're documenting, acts as replacement for
-# |version| and |release|, also used in various other places throughout the
-# built documents.
-#
-# In a normal build, version and release are are set to KERNELVERSION and
-# KERNELRELEASE, respectively, from the Makefile via Sphinx command line
-# arguments.
-#
-# The following code tries to extract the information by reading the Makefile,
-# when Sphinx is run directly (e.g. by Read the Docs).
-try:
-    makefile_version = None
-    makefile_patchlevel = None
-    for line in open('../Makefile'):
-        key, val = [x.strip() for x in line.split('=', 2)]
-        if key == 'VERSION':
-            makefile_version = val
-        elif key == 'PATCHLEVEL':
-            makefile_patchlevel = val
-        if makefile_version and makefile_patchlevel:
-            break
-except:
-    pass
-finally:
-    if makefile_version and makefile_patchlevel:
-        version = release = makefile_version + '.' + makefile_patchlevel
-    else:
-        version = release = "unknown version"
-
-# The language for content autogenerated by Sphinx. Refer to documentation
-# for a list of supported languages.
-#
-# This is also used if you do content translation via gettext catalogs.
-# Usually you set "language" from the command line for these cases.
-language = None
-
-# There are two options for replacing |today|: either, you set today to some
-# non-false value, then it is used:
-#today = ''
-# Else, today_fmt is used as the format for a strftime call.
-#today_fmt = '%B %d, %Y'
-
-# List of patterns, relative to source directory, that match files and
-# directories to ignore when looking for source files.
-exclude_patterns = ['output']
-
-# The reST default role (used for this markup: `text`) to use for all
-# documents.
-#default_role = None
-
-# If true, '()' will be appended to :func: etc. cross-reference text.
-#add_function_parentheses = True
-
-# If true, the current module name will be prepended to all description
-# unit titles (such as .. function::).
-#add_module_names = True
-
-# If true, sectionauthor and moduleauthor directives will be shown in the
-# output. They are ignored by default.
-#show_authors = False
-
-# The name of the Pygments (syntax highlighting) style to use.
-pygments_style = 'sphinx'
-
-# A list of ignored prefixes for module index sorting.
-#modindex_common_prefix = []
-
-# If true, keep warnings as "system message" paragraphs in the built documents.
-#keep_warnings = False
-
-# If true, `todo` and `todoList` produce output, else they produce nothing.
-todo_include_todos = False
-
-primary_domain = 'c'
-highlight_language = 'none'
-
-# -- Options for HTML output ----------------------------------------------
-
-# The theme to use for HTML and HTML Help pages.  See the documentation for
-# a list of builtin themes.
-
-# The Read the Docs theme is available from
-# - https://github.com/snide/sphinx_rtd_theme
-# - https://pypi.python.org/pypi/sphinx_rtd_theme
-# - python-sphinx-rtd-theme package (on Debian)
-try:
-    import sphinx_rtd_theme
-    html_theme = 'sphinx_rtd_theme'
-    html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
-except ImportError:
-    sys.stderr.write('Warning: The Sphinx \'sphinx_rtd_theme\' HTML theme was not found. Make sure you have the theme installed to produce pretty HTML output. Falling back to the default theme.\n')
-
-# Theme options are theme-specific and customize the look and feel of a theme
-# further.  For a list of options available for each theme, see the
-# documentation.
-#html_theme_options = {}
-
-# Add any paths that contain custom themes here, relative to this directory.
-#html_theme_path = []
-
-# The name for this set of Sphinx documents.  If None, it defaults to
-# "<project> v<release> documentation".
-#html_title = None
-
-# A shorter title for the navigation bar.  Default is the same as html_title.
-#html_short_title = None
-
-# The name of an image file (relative to this directory) to place at the top
-# of the sidebar.
-#html_logo = None
-
-# The name of an image file (within the static path) to use as favicon of the
-# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
-# pixels large.
-#html_favicon = None
-
-# Add any paths that contain custom static files (such as style sheets) here,
-# relative to this directory. They are copied after the builtin static files,
-# so a file named "default.css" will overwrite the builtin "default.css".
-
-html_static_path = ['sphinx-static']
-
-html_context = {
-    'css_files': [
-        '_static/theme_overrides.css',
-    ],
-}
-
-# Add any extra paths that contain custom files (such as robots.txt or
-# .htaccess) here, relative to this directory. These files are copied
-# directly to the root of the documentation.
-#html_extra_path = []
-
-# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
-# using the given strftime format.
-#html_last_updated_fmt = '%b %d, %Y'
-
-# If true, SmartyPants will be used to convert quotes and dashes to
-# typographically correct entities.
-#html_use_smartypants = True
-
-# Custom sidebar templates, maps document names to template names.
-#html_sidebars = {}
-
-# Additional templates that should be rendered to pages, maps page names to
-# template names.
-#html_additional_pages = {}
-
-# If false, no module index is generated.
-#html_domain_indices = True
-
-# If false, no index is generated.
-#html_use_index = True
-
-# If true, the index is split into individual pages for each letter.
-#html_split_index = False
-
-# If true, links to the reST sources are added to the pages.
-#html_show_sourcelink = True
-
-# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
-#html_show_sphinx = True
-
-# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
-#html_show_copyright = True
-
-# If true, an OpenSearch description file will be output, and all pages will
-# contain a <link> tag referring to it.  The value of this option must be the
-# base URL from which the finished HTML is served.
-#html_use_opensearch = ''
-
-# This is the file name suffix for HTML files (e.g. ".xhtml").
-#html_file_suffix = None
-
-# Language to be used for generating the HTML full-text search index.
-# Sphinx supports the following languages:
-#   'da', 'de', 'en', 'es', 'fi', 'fr', 'h', 'it', 'ja'
-#   'nl', 'no', 'pt', 'ro', 'r', 'sv', 'tr'
-#html_search_language = 'en'
-
-# A dictionary with options for the search language support, empty by default.
-# Now only 'ja' uses this config value
-#html_search_options = {'type': 'default'}
-
-# The name of a javascript file (relative to the configuration directory) that
-# implements a search results scorer. If empty, the default will be used.
-#html_search_scorer = 'scorer.js'
-
-# Output file base name for HTML help builder.
-htmlhelp_basename = 'TheUBootdoc'
-
-# -- Options for LaTeX output ---------------------------------------------
-
-latex_elements = {
-# The paper size ('letterpaper' or 'a4paper').
-'papersize': 'a4paper',
-
-# The font size ('10pt', '11pt' or '12pt').
-'pointsize': '8pt',
-
-# Latex figure (float) alignment
-#'figure_align': 'htbp',
-
-# Don't mangle with UTF-8 chars
-'inputenc': '',
-'utf8extra': '',
-
-# Additional stuff for the LaTeX preamble.
-    'preamble': '''
-	% Use some font with UTF-8 support with XeLaTeX
-        \\usepackage{fontspec}
-        \\setsansfont{DejaVu Serif}
-        \\setromanfont{DejaVu Sans}
-        \\setmonofont{DejaVu Sans Mono}
-
-     '''
-}
-
-# Fix reference escape troubles with Sphinx 1.4.x
-if major == 1 and minor > 3:
-    latex_elements['preamble']  += '\\renewcommand*{\\DUrole}[2]{ #2 }\n'
-
-if major == 1 and minor <= 4:
-    latex_elements['preamble']  += '\\usepackage[margin=0.5in, top=1in, bottom=1in]{geometry}'
-elif major == 1 and (minor > 5 or (minor == 5 and patch >= 3)):
-    latex_elements['sphinxsetup'] = 'hmargin=0.5in, vmargin=1in'
-    latex_elements['preamble']  += '\\fvset{fontsize=auto}\n'
-
-# Customize notice background colors on Sphinx < 1.6:
-if major == 1 and minor < 6:
-   latex_elements['preamble']  += '''
-        \\usepackage{ifthen}
-
-        % Put notes in color and let them be inside a table
-	\\definecolor{NoteColor}{RGB}{204,255,255}
-	\\definecolor{WarningColor}{RGB}{255,204,204}
-	\\definecolor{AttentionColor}{RGB}{255,255,204}
-	\\definecolor{ImportantColor}{RGB}{192,255,204}
-	\\definecolor{OtherColor}{RGB}{204,204,204}
-        \\newlength{\\mynoticelength}
-        \\makeatletter\\newenvironment{coloredbox}[1]{%
-	   \\setlength{\\fboxrule}{1pt}
-	   \\setlength{\\fboxsep}{7pt}
-	   \\setlength{\\mynoticelength}{\\linewidth}
-	   \\addtolength{\\mynoticelength}{-2\\fboxsep}
-	   \\addtolength{\\mynoticelength}{-2\\fboxrule}
-           \\begin{lrbox}{\\@tempboxa}\\begin{minipage}{\\mynoticelength}}{\\end{minipage}\\end{lrbox}%
-	   \\ifthenelse%
-	      {\\equal{\\py@noticetype}{note}}%
-	      {\\colorbox{NoteColor}{\\usebox{\\@tempboxa}}}%
-	      {%
-	         \\ifthenelse%
-	         {\\equal{\\py@noticetype}{warning}}%
-	         {\\colorbox{WarningColor}{\\usebox{\\@tempboxa}}}%
-		 {%
-	            \\ifthenelse%
-	            {\\equal{\\py@noticetype}{attention}}%
-	            {\\colorbox{AttentionColor}{\\usebox{\\@tempboxa}}}%
-		    {%
-	               \\ifthenelse%
-	               {\\equal{\\py@noticetype}{important}}%
-	               {\\colorbox{ImportantColor}{\\usebox{\\@tempboxa}}}%
-	               {\\colorbox{OtherColor}{\\usebox{\\@tempboxa}}}%
-		    }%
-		 }%
-	      }%
-        }\\makeatother
-
-        \\makeatletter
-        \\renewenvironment{notice}[2]{%
-          \\def\\py@noticetype{#1}
-          \\begin{coloredbox}{#1}
-          \\bf\\it
-          \\par\\strong{#2}
-          \\csname py@noticestart@#1\\endcsname
-        }
-	{
-          \\csname py@noticeend@\\py@noticetype\\endcsname
-          \\end{coloredbox}
-        }
-	\\makeatother
-
-     '''
-
-# With Sphinx 1.6, it is possible to change the Bg color directly
-# by using:
-#	\definecolor{sphinxnoteBgColor}{RGB}{204,255,255}
-#	\definecolor{sphinxwarningBgColor}{RGB}{255,204,204}
-#	\definecolor{sphinxattentionBgColor}{RGB}{255,255,204}
-#	\definecolor{sphinximportantBgColor}{RGB}{192,255,204}
-#
-# However, it require to use sphinx heavy box with:
-#
-#	\renewenvironment{sphinxlightbox} {%
-#		\\begin{sphinxheavybox}
-#	}
-#		\\end{sphinxheavybox}
-#	}
-#
-# Unfortunately, the implementation is buggy: if a note is inside a
-# table, it isn't displayed well. So, for now, let's use boring
-# black and white notes.
-
-# Grouping the document tree into LaTeX files. List of tuples
-# (source start file, target name, title,
-#  author, documentclass [howto, manual, or own class]).
-# Sorted in alphabetical order
-latex_documents = [
-    ('index', 'u-boot-hacker-manual.tex', 'U-Boot Hacker Manual',
-     'The U-Boot development community', 'manual'),
-]
-
-# The name of an image file (relative to this directory) to place at the top of
-# the title page.
-#latex_logo = None
-
-# For "manual" documents, if this is true, then toplevel headings are parts,
-# not chapters.
-#latex_use_parts = False
-
-# If true, show page references after internal links.
-#latex_show_pagerefs = False
-
-# If true, show URL addresses after external links.
-#latex_show_urls = False
-
-# Documents to append as an appendix to all manuals.
-#latex_appendices = []
-
-# If false, no module index is generated.
-#latex_domain_indices = True
-
-
-# -- Options for manual page output ---------------------------------------
-
-# One entry per manual page. List of tuples
-# (source start file, name, description, authors, manual section).
-man_pages = [
-    (master_doc, 'dasuboot', 'The U-Boot Documentation',
-     [author], 1)
-]
-
-# If true, show URL addresses after external links.
-#man_show_urls = False
-
-
-# -- Options for Texinfo output -------------------------------------------
-
-# Grouping the document tree into Texinfo files. List of tuples
-# (source start file, target name, title, author,
-#  dir menu entry, description, category)
-texinfo_documents = [
-    (master_doc, 'DasUBoot', 'The U-Boot Documentation',
-     author, 'DasUBoot', 'One line description of project.',
-     'Miscellaneous'),
-]
-
-# Documents to append as an appendix to all manuals.
-#texinfo_appendices = []
-
-# If false, no module index is generated.
-#texinfo_domain_indices = True
-
-# How to display URL addresses: 'footnote', 'no', or 'inline'.
-#texinfo_show_urls = 'footnote'
-
-# If true, do not generate a @detailmenu in the "Top" node's menu.
-#texinfo_no_detailmenu = False
-
-
-# -- Options for Epub output ----------------------------------------------
-
-# Bibliographic Dublin Core info.
-epub_title = project
-epub_author = author
-epub_publisher = author
-epub_copyright = copyright
-
-# The basename for the epub file. It defaults to the project name.
-#epub_basename = project
-
-# The HTML theme for the epub output. Since the default themes are not
-# optimized for small screen space, using the same theme for HTML and epub
-# output is usually not wise. This defaults to 'epub', a theme designed to save
-# visual space.
-#epub_theme = 'epub'
-
-# The language of the text. It defaults to the language option
-# or 'en' if the language is not set.
-#epub_language = ''
-
-# The scheme of the identifier. Typical schemes are ISBN or URL.
-#epub_scheme = ''
-
-# The unique identifier of the text. This can be a ISBN number
-# or the project homepage.
-#epub_identifier = ''
-
-# A unique identification for the text.
-#epub_uid = ''
-
-# A tuple containing the cover image and cover page html template filenames.
-#epub_cover = ()
-
-# A sequence of (type, uri, title) tuples for the guide element of content.opf.
-#epub_guide = ()
-
-# HTML files that should be inserted before the pages created by sphinx.
-# The format is a list of tuples containing the path and title.
-#epub_pre_files = []
-
-# HTML files that should be inserted after the pages created by sphinx.
-# The format is a list of tuples containing the path and title.
-#epub_post_files = []
-
-# A list of files that should not be packed into the epub file.
-epub_exclude_files = ['search.html']
-
-# The depth of the table of contents in toc.ncx.
-#epub_tocdepth = 3
-
-# Allow duplicate toc entries.
-#epub_tocdup = True
-
-# Choose between 'default' and 'includehidden'.
-#epub_tocscope = 'default'
-
-# Fix unsupported image types using the Pillow.
-#epub_fix_images = False
-
-# Scale large images.
-#epub_max_image_width = 0
-
-# How to display URL addresses: 'footnote', 'no', or 'inline'.
-#epub_show_urls = 'inline'
-
-# If false, no index is generated.
-#epub_use_index = True
-
-#=======
-# rst2pdf
-#
-# Grouping the document tree into PDF files. List of tuples
-# (source start file, target name, title, author, options).
-#
-# See the Sphinx chapter of http://ralsina.me/static/manual.pdf
-#
-# FIXME: Do not add the index file here; the result will be too big. Adding
-# multiple PDF files here actually tries to get the cross-referencing right
-# *between* PDF files.
-pdf_documents = [
-    ('uboot-documentation', u'U-Boot', u'U-Boot', u'J. Random Bozo'),
-]
-
-# kernel-doc extension configuration for running Sphinx directly (e.g. by Read
-# the Docs). In a normal build, these are supplied from the Makefile via command
-# line arguments.
-kerneldoc_bin = '../scripts/kernel-doc'
-kerneldoc_srctree = '..'
-
-# ------------------------------------------------------------------------------
-# Since loadConfig overwrites settings from the global namespace, it has to be
-# the last statement in the conf.py file
-# ------------------------------------------------------------------------------
-loadConfig(globals())
diff --git a/Documentation/devicetree/bindings/axi/gdsys,ihs_axi.txt b/Documentation/devicetree/bindings/axi/gdsys,ihs_axi.txt
deleted file mode 100644
index 110788f..0000000
--- a/Documentation/devicetree/bindings/axi/gdsys,ihs_axi.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-gdsys AXI busses of IHS FPGA devices
-
-Certain gdsys IHS FPGAs offer a interface to their built-in AXI bus with which
-the connected devices (usually IP cores) can be controlled via software.
-
-Required properties:
-- compatible: must be "gdsys,ihs_axi"
-- reg: describes the address and length of the AXI bus's register map (within
-  the FPGA's register space)
-
-Example:
-
-fpga0_axi_video0 {
-	#address-cells = <1>;
-	#size-cells = <1>;
-	compatible = "gdsys,ihs_axi";
-	reg = <0x170 0x10>;
-
-	axi_dev_1 {
-        ...
-	};
-};
diff --git a/Documentation/devicetree/bindings/board/gdsys,board_gazerbeam.txt b/Documentation/devicetree/bindings/board/gdsys,board_gazerbeam.txt
deleted file mode 100644
index 28c1080..0000000
--- a/Documentation/devicetree/bindings/board/gdsys,board_gazerbeam.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-gdsys Gazerbeam board driver
-
-This driver provides capabilities to access the gdsys Gazerbeam board's device
-information. Furthermore, phandles to some internal devices are provided for
-the board files.
-
-Required properties:
-- compatible:  should be "gdsys,board_gazerbeam"
-- csb:         phandle to the board's coherent system bus (CSB) device node
-- rxaui[0-3]:  phandles to the rxaui control device nodes
-- fpga[0-1]:   phandles to the board's gdsys FPGA device nodes
-- ioep[0-1]:   phandles to the board's IO endpoint device nodes
-- ver-gpios:   GPIO list to read the hardware version from
-- var-gpios:   GPIO list to read the hardware variant information from
-- reset-gpios: GPIO list for the board's reset GPIOs
-
-Example:
-
-
-board {
-	compatible = "gdsys,board_gazerbeam";
-	csb = <&board_soc>;
-	serdes = <&SERDES>;
-	rxaui0 = <&RXAUI0>;
-	rxaui1 = <&RXAUI1>;
-	rxaui2 = <&RXAUI2>;
-	rxaui3 = <&RXAUI3>;
-	fpga0 = <&FPGA0>;
-	fpga1 = <&FPGA1>;
-	ioep0 = <&IOEP0>;
-	ioep1 = <&IOEP1>;
-
-	ver-gpios = <&PPCPCA 12 0
-		     &PPCPCA 13 0
-		     &PPCPCA 14 0
-		     &PPCPCA 15 0>;
-
-	/* MC2/SC-Board */
-	var-gpios-mc2 = <&GPIO_VB0 0 0    /* VAR-MC_SC */
-			 &GPIO_VB0 11 0>; /* VAR-CON */
-	/* MC4-Board */
-	var-gpios-mc4 = <&GPIO_VB1 0 0    /* VAR-MC_SC */
-			 &GPIO_VB1 11 0>; /* VAR-CON */
-
-	reset-gpios = <&gpio0 1 0 &gpio0 2 1>;
-};
diff --git a/Documentation/devicetree/bindings/clk/fsl,mpc83xx-clk.txt b/Documentation/devicetree/bindings/clk/fsl,mpc83xx-clk.txt
deleted file mode 100644
index 8313da8..0000000
--- a/Documentation/devicetree/bindings/clk/fsl,mpc83xx-clk.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-MPC83xx system clock devices
-
-MPC83xx SoCs supply a variety of clocks to drive various components of a
-system.
-
-Required properties:
-- compatible: must be one of "fsl,mpc8308-clk",
-                             "fsl,mpc8309-clk",
-                             "fsl,mpc8313-clk",
-                             "fsl,mpc8315-clk",
-                             "fsl,mpc832x-clk",
-                             "fsl,mpc8349-clk",
-                             "fsl,mpc8360-clk",
-                             "fsl,mpc8379-clk"
-  depending on which SoC is employed
-- #clock-cells: Must be 1
-
-Example:
-
-socclocks: clocks {
-	compatible = "fsl,mpc832x-clk";
-	#clock-cells = <1>;
-};
diff --git a/Documentation/devicetree/bindings/cpu/fsl,mpc83xx.txt b/Documentation/devicetree/bindings/cpu/fsl,mpc83xx.txt
deleted file mode 100644
index ac563d9..0000000
--- a/Documentation/devicetree/bindings/cpu/fsl,mpc83xx.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-MPC83xx CPU devices
-
-MPC83xx SoCs contain a e300 core as their main processor.
-
-Required properties:
-- compatible: must be one of "fsl,mpc83xx",
-                             "fsl,mpc8308",
-                             "fsl,mpc8309",
-                             "fsl,mpc8313",
-                             "fsl,mpc8315",
-                             "fsl,mpc832x",
-                             "fsl,mpc8349",
-                             "fsl,mpc8360",
-                             "fsl,mpc8379"
-- clocks: has to have two entries, which must be the core clock at index 0 and
-  the CSB (Coherent System Bus) clock at index 1. Both are given by a suitable
-  "fsl,mpc83xx-clk" device
-
-Example:
-
-socclocks: clocks {
-	compatible = "fsl,mpc8315-clk";
-	#clock-cells = <1>;
-};
-
-cpus {
-	compatible = "cpu_bus";
-
-	PowerPC,8315@0 {
-		compatible = "fsl,mpc8315";
-		clocks = <&socclocks MPC83XX_CLK_CORE
-		          &socclocks MPC83XX_CLK_CSB>;
-	};
-};
diff --git a/Documentation/devicetree/bindings/misc/fsl,mpc83xx-serdes.txt b/Documentation/devicetree/bindings/misc/fsl,mpc83xx-serdes.txt
deleted file mode 100644
index 64a9b5b..0000000
--- a/Documentation/devicetree/bindings/misc/fsl,mpc83xx-serdes.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-MPC83xx SerDes controller devices
-
-MPC83xx SoCs contain a built-in SerDes controller that determines which
-protocols (SATA, PCI Express, SGMII, ...) are used on the system's serdes lines
-and how the lines are configured.
-
-Required properties:
-- compatible: must be "fsl,mpc83xx-serdes"
-- reg: must point to the serdes controller's register map
-- proto: selects for which protocol the serdes lines are configured. One of
-  "sata", "pex", "pex-x2", "sgmii"
-- serdes-clk: determines the frequency the serdes lines are configured for. One
-  of 100, 125, 150.
-- vdd: determines whether 1.0V core VDD is used or not
-
-Example:
-
-SERDES: serdes@e3000 {
-	reg = <0xe3000 0x200>;
-	compatible = "fsl,mpc83xx-serdes";
-	proto = "pex";
-	serdes-clk = <100>;
-	vdd;
-};
diff --git a/Documentation/devicetree/bindings/misc/gdsys,io-endpoint.txt b/Documentation/devicetree/bindings/misc/gdsys,io-endpoint.txt
deleted file mode 100644
index db2ff8c..0000000
--- a/Documentation/devicetree/bindings/misc/gdsys,io-endpoint.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-gdsys IO endpoint of IHS FPGA devices
-
-The IO endpoint of IHS FPGA devices is a packet-based transmission interface
-that allows interconnected gdsys devices to send and receive data over the
-FPGA's main ethernet connection.
-
-Required properties:
-- compatible: must be "gdsys,io-endpoint"
-- reg: describes the address and length of the endpoint's register map (within
-  the FPGA's register space)
-
-Example:
-
-fpga0_ep0 {
-	compatible = "gdsys,io-endpoint";
-	reg = <0x020 0x10
-           0x320 0x10
-           0x340 0x10
-           0x360 0x10>;
-};
diff --git a/Documentation/devicetree/bindings/misc/gdsys,iocon_fpga.txt b/Documentation/devicetree/bindings/misc/gdsys,iocon_fpga.txt
deleted file mode 100644
index acd466f..0000000
--- a/Documentation/devicetree/bindings/misc/gdsys,iocon_fpga.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-gdsys IHS FPGA for CON devices
-
-The gdsys IHS FPGA is the main FPGA on gdsys CON devices. This driver provides
-support for enabling and starting the FPGA, as well as verifying working bus
-communication.
-
-Required properties:
-- compatible: must be "gdsys,iocon_fpga"
-- reset-gpios: List of GPIOs controlling the FPGA's reset
-- done-gpios: List of GPIOs notifying whether the FPGA's reconfiguration is
-              done
-
-Example:
-
-FPGA0 {
-	compatible = "gdsys,iocon_fpga";
-	reset-gpios = <&PPCPCA 26 0>;
-	done-gpios = <&GPIO_VB0 19 0>;
-};
diff --git a/Documentation/devicetree/bindings/misc/gdsys,iocpu_fpga.txt b/Documentation/devicetree/bindings/misc/gdsys,iocpu_fpga.txt
deleted file mode 100644
index 819db22..0000000
--- a/Documentation/devicetree/bindings/misc/gdsys,iocpu_fpga.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-gdsys IHS FPGA for CPU devices
-
-The gdsys IHS FPGA is the main FPGA on gdsys CPU devices. This driver provides
-support for enabling and starting the FPGA, as well as verifying working bus
-communication.
-
-Required properties:
-- compatible: must be "gdsys,iocpu_fpga"
-- reset-gpios: List of GPIOs controlling the FPGA's reset
-- done-gpios: List of GPIOs notifying whether the FPGA's reconfiguration is
-              done
-
-Example:
-
-FPGA0 {
-	compatible = "gdsys,iocpu_fpga";
-	reset-gpios = <&PPCPCA 26 0>;
-	done-gpios = <&GPIO_VB0 19 0>;
-};
diff --git a/Documentation/devicetree/bindings/misc/gdsys,soc.txt b/Documentation/devicetree/bindings/misc/gdsys,soc.txt
deleted file mode 100644
index 278e935..0000000
--- a/Documentation/devicetree/bindings/misc/gdsys,soc.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-gdsys soc bus driver
-
-This driver provides a simple interface for the busses associated with gdsys
-IHS FPGAs. The bus itself contains devices whose register maps are contained
-within the FPGA's register space.
-
-Required properties:
-- fpga: A phandle to the controlling IHS FPGA
-
-Example:
-
-FPGA0BUS: fpga0bus {
-	compatible = "gdsys,soc";
-	ranges = <0x0 0xe0600000 0x00004000>;
-	fpga = <&FPGA0>;
-};
diff --git a/Documentation/devicetree/bindings/ram/fsl,mpc83xx-mem-controller.txt b/Documentation/devicetree/bindings/ram/fsl,mpc83xx-mem-controller.txt
deleted file mode 100644
index da01fe9..0000000
--- a/Documentation/devicetree/bindings/ram/fsl,mpc83xx-mem-controller.txt
+++ /dev/null
@@ -1,314 +0,0 @@
-MPC83xx RAM controller
-
-This driver supplies support for the embedded RAM controller on MCP83xx-series
-SoCs.
-
-For static configuration mode, each controller node should have child nodes
-describing the actual RAM modules installed.
-
-Controller node
-===============
-
-Required properties:
-- compatible:                Must be "fsl,mpc83xx-mem-controller"
-- reg:                       The address of the RAM controller's register space
-- #address-cells:            Must be 2
-- #size-cells:               Must be 1
-- driver_software_override:  DDR driver software override is enabled (1) or
-                             disabled (0)
-- p_impedance_override:      DDR driver software p-impedance override; possible
-                             values:
-                              * DSO_P_IMPEDANCE_HIGHEST_Z
-                              * DSO_P_IMPEDANCE_MUCH_HIGHER_Z
-                              * DSO_P_IMPEDANCE_HIGHER_Z
-                              * DSO_P_IMPEDANCE_NOMINAL
-                              * DSO_P_IMPEDANCE_LOWER_Z
-- n_impedance_override:      DDR driver software n-impedance override; possible
-                             values:
-                              * DSO_N_IMPEDANCE_HIGHEST_Z
-                              * DSO_N_IMPEDANCE_MUCH_HIGHER_Z
-                              * DSO_N_IMPEDANCE_HIGHER_Z
-                              * DSO_N_IMPEDANCE_NOMINAL
-                              * DSO_N_IMPEDANCE_LOWER_Z
-- odt_termination_value:     ODT termination value for I/Os; possible values:
-                              * ODT_TERMINATION_75_OHM
-                              * ODT_TERMINATION_150_OHM
-- ddr_type:                  Selects voltage level for DDR pads; possible
-                             values:
-                              * DDR_TYPE_DDR2_1_8_VOLT
-                              * DDR_TYPE_DDR1_2_5_VOLT
-- mvref_sel:                 Determine where MVREF_SEL signal is generated;
-                             possible values:
-                              * MVREF_SEL_EXTERNAL
-                              * MVREF_SEL_INTERNAL_GVDD
-- m_odr:                     Disable memory transaction reordering; possible
-                             values:
-                              * M_ODR_ENABLE
-                              * M_ODR_DISABLE
-- clock_adjust:              Clock adjust; possible values:
-                              * CLOCK_ADJUST_025
-                              * CLOCK_ADJUST_05
-                              * CLOCK_ADJUST_075
-                              * CLOCK_ADJUST_1
-- ext_refresh_rec:           Extended refresh recovery time; possible values:
-                              0, 16, 32, 48, 64, 80, 96, 112
-- read_to_write:             Read-to-write turnaround; possible values:
-                              0, 1, 2, 3
-- write_to_read:             Write-to-read turnaround; possible values:
-                              0, 1, 2, 3
-- read_to_read:              Read-to-read turnaround; possible values:
-                              0, 1, 2, 3
-- write_to_write:            Write-to-write turnaround; possible values:
-                              0, 1, 2, 3
-- active_powerdown_exit:     Active powerdown exit timing; possible values:
-                              1, 2, 3, 4, 5, 6, 7
-- precharge_powerdown_exit:  Precharge powerdown exit timing; possible values:
-                              1, 2, 3, 4, 5, 6, 7
-- odt_powerdown_exit:        ODT powerdown exit timing; possible values:
-                              0, 1, 2, 3, 4, 5, 6, 7, 8,
-                              9, 10, 11, 12, 13, 14, 15
-- mode_reg_set_cycle:        Mode register set cycle time; possible values:
-                              1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
-- precharge_to_activate:     Precharge-to-acitvate interval; possible values:
-                              1, 2, 3, 4, 5, 6, 7
-- activate_to_precharge:     Activate to precharge interval; possible values:
-                              4, 5, 6, 7, 8, 9, 10, 11, 12,
-                              13, 14, 15, 16, 17, 18, 19
-- activate_to_readwrite:     Activate to read/write interval for SDRAM;
-                             possible values:
-                              1, 2, 3, 4, 5, 6, 7
-- mcas_latency:              MCAS latency from READ command; possible values:
-                              * CASLAT_20
-                              * CASLAT_25
-                              * CASLAT_30
-                              * CASLAT_35
-                              * CASLAT_40
-                              * CASLAT_45
-                              * CASLAT_50
-                              * CASLAT_55
-                              * CASLAT_60
-                              * CASLAT_65
-                              * CASLAT_70
-                              * CASLAT_75
-                              * CASLAT_80
-- refresh_recovery:          Refresh recovery time; possible values:
-                              8, 9, 10, 11, 12, 13, 14, 15,
-                              16, 17, 18, 19, 20, 21, 22, 23
-- last_data_to_precharge:    Last data to precharge minimum interval; possible
-                             values:
-                              1, 2, 3, 4, 5, 6, 7
-- activate_to_activate:      Activate-to-activate interval; possible values:
-                              1, 2, 3, 4, 5, 6, 7
-- last_write_data_to_read:   Last write data pair to read command issue
-                             interval; possible values:
-                              1, 2, 3, 4, 5, 6, 7
-- additive_latency:          Additive latency; possible values:
-                              0, 1, 2, 3, 4, 5
-- mcas_to_preamble_override: MCAS-to-preamble-override; possible values:
-                              * READ_LAT
-                              * READ_LAT_PLUS_1_4
-                              * READ_LAT_PLUS_1_2
-                              * READ_LAT_PLUS_3_4
-                              * READ_LAT_PLUS_1
-                              * READ_LAT_PLUS_5_4
-                              * READ_LAT_PLUS_3_2
-                              * READ_LAT_PLUS_7_4
-                              * READ_LAT_PLUS_2
-                              * READ_LAT_PLUS_9_4
-                              * READ_LAT_PLUS_5_2
-                              * READ_LAT_PLUS_11_4
-                              * READ_LAT_PLUS_3
-                              * READ_LAT_PLUS_13_4
-                              * READ_LAT_PLUS_7_2
-                              * READ_LAT_PLUS_15_4
-                              * READ_LAT_PLUS_4
-                              * READ_LAT_PLUS_17_4
-                              * READ_LAT_PLUS_9_2
-                              * READ_LAT_PLUS_19_4
-- write_latency:             Write latency; possible values:
-                              1, 2, 3, 4, 5, 6, 7
-- read_to_precharge:         Read to precharge; possible values:
-                              1, 2, 3, 4
-- write_cmd_to_write_data:   Write command to write data strobe timing
-                             adjustment; possible values:
-                              * CLOCK_DELAY_0
-                              * CLOCK_DELAY_1_4
-                              * CLOCK_DELAY_1_2
-                              * CLOCK_DELAY_3_4
-                              * CLOCK_DELAY_1
-                              * CLOCK_DELAY_5_4
-                              * CLOCK_DELAY_3_2
-- minimum_cke_pulse_width:   Minimum CKE pulse width; possible values:
-                              1, 2, 3, 4
-- four_activates_window:     Window for four activates; possible values:
-                              1, 2, 3, 4 8, 9, 10, 11, 12,
-                              13, 14, 15, 16, 17, 18, 19
-- self_refresh:              Self refresh (during sleep); possible values:
-                              * SREN_DISABLE
-                              * SREN_ENABLE
-- ecc:                       Support for ECC; possible values:
-                              * ECC_DISABLE
-                              * ECC_ENABLE
-- registered_dram:           Support for registered DRAM; possible values:
-                              * RD_DISABLE
-                              * RD_ENABLE
-- sdram_type:                Type of SDRAM device to be used; possible values:
-                              * TYPE_DDR1
-                              * TYPE_DDR2
-- dynamic_power_management:  Dynamic power management mode; possible values:
-                              * DYN_PWR_DISABLE
-                              * DYN_PWR_ENABLE
-- databus_width:             DRAM data bus width; possible values
-                              * DATA_BUS_WIDTH_16
-                              * DATA_BUS_WIDTH_32
-- nc_auto_precharge:         Non-concurrent auto-precharge; possible values:
-                              * NCAP_DISABLE
-                              * NCAP_ENABLE
-- timing_2t:                 2T timing; possible values:
-                              * TIMING_1T
-                              * TIMING_2T
-- bank_interleaving_ctrl:    Bank (chip select) interleaving control; possible
-                             values:
-                              * INTERLEAVE_NONE
-                              * INTERLEAVE_1_AND_2
-- precharge_bit_8:           Precharge bin 8; possible values
-                              * PRECHARGE_MA_10
-                              * PRECHARGE_MA_8
-- half_strength:             Global half-strength override; possible values:
-                              * STRENGTH_FULL
-                              * STRENGTH_HALF
-- bypass_initialization:     Bypass initialization; possible values:
-                              * INITIALIZATION_DONT_BYPASS
-                              * INITIALIZATION_BYPASS
-- force_self_refresh:         Force self refresh; possible values:
-                               * MODE_NORMAL
-                               * MODE_REFRESH
-- dll_reset:                  DLL reset; possible values:
-                               * DLL_RESET_ENABLE
-                               * DLL_RESET_DISABLE
-- dqs_config:                 DQS configuration; possible values:
-                               * DQS_TRUE
-- odt_config:                 ODT configuration; possible values:
-                               * ODT_ASSERT_NEVER
-                               * ODT_ASSERT_WRITES
-                               * ODT_ASSERT_READS
-                               * ODT_ASSERT_ALWAYS
-- posted_refreshes:           Number of posted refreshes
-                               1, 2, 3, 4, 5, 6, 7, 8
-- sdmode:                     Initial value loaded into the DDR SDRAM mode
-                              register
-- esdmode:                    Initial value loaded into the DDR SDRAM extended
-                              mode register
-- esdmode2:                   Initial value loaded into the DDR SDRAM extended
-                              mode 2 register
-- esdmode3:                   Initial value loaded into the DDR SDRAM extended
-                              mode 3 register
-- refresh_interval:           Refresh interval; possible values:
-                               0 - 65535
-- precharge_interval:         Precharge interval; possible values:
-                               0 - 16383
-
-RAM module node:
-================
-
-Required properties:
-- reg:            A triple <cs addr size>, which consists of:
-                   * cs - the chipselect used to drive this RAM module
-                   * addr - the address where this RAM module's memory is map
-                     to in the global memory space
-                   * size - the size of the RAM module's memory in bytes
-- auto_precharge: Chip select auto-precharge; possible values:
-                   * AUTO_PRECHARGE_ENABLE
-                   * AUTO_PRECHARGE_DISABLE
-- odt_rd_cfg:     ODT for reads configuration; possible values:
-                   * ODT_RD_NEVER
-                   * ODT_RD_ONLY_CURRENT
-                   * ODT_RD_ONLY_OTHER_CS
-                   * ODT_RD_ONLY_OTHER_DIMM
-                   * ODT_RD_ALL
-- odt_wr_cfg:     ODT for writes configuration; possible values:
-                   * ODT_WR_NEVER
-                   * ODT_WR_ONLY_CURRENT
-                   * ODT_WR_ONLY_OTHER_CS
-                   * ODT_WR_ONLY_OTHER_DIMM
-                   * ODT_WR_ALL
-- bank_bits:      Number of bank bits for SDRAM on chip select; possible
-                  values:
-                   2, 3
-- row_bits:       Number of row bits for SDRAM on chip select; possible values:
-                   12, 13, 14
-- col_bits:       Number of column bits for SDRAM on chip select; possible
-                  values:
-                   8, 9, 10, 11
-
-Example:
-
-memory@2000 {
-	#address-cells = <2>;
-	#size-cells = <1>;
-	compatible = "fsl,mpc83xx-mem-controller";
-	reg = <0x2000 0x1000>;
-	device_type = "memory";
-	u-boot,dm-pre-reloc;
-
-	driver_software_override = <DSO_ENABLE>;
-	p_impedance_override = <DSO_P_IMPEDANCE_NOMINAL>;
-	n_impedance_override = <DSO_N_IMPEDANCE_NOMINAL>;
-	odt_termination_value = <ODT_TERMINATION_150_OHM>;
-	ddr_type = <DDR_TYPE_DDR2_1_8_VOLT>;
-
-	clock_adjust = <CLOCK_ADJUST_05>;
-
-	read_to_write = <0>;
-	write_to_read = <0>;
-	read_to_read = <0>;
-	write_to_write = <0>;
-	active_powerdown_exit = <2>;
-	precharge_powerdown_exit = <6>;
-	odt_powerdown_exit = <8>;
-	mode_reg_set_cycle = <2>;
-
-	precharge_to_activate = <2>;
-	activate_to_precharge = <6>;
-	activate_to_readwrite = <2>;
-	mcas_latency = <CASLAT_40>;
-	refresh_recovery = <17>;
-	last_data_to_precharge = <2>;
-	activate_to_activate = <2>;
-	last_write_data_to_read = <2>;
-
-	additive_latency = <0>;
-	mcas_to_preamble_override = <READ_LAT_PLUS_1_2>;
-	write_latency = <3>;
-	read_to_precharge = <2>;
-	write_cmd_to_write_data = <CLOCK_DELAY_1_2>;
-	minimum_cke_pulse_width = <3>;
-	four_activates_window = <5>;
-
-	self_refresh = <SREN_ENABLE>;
-	sdram_type = <TYPE_DDR2>;
-	databus_width = <DATA_BUS_WIDTH_32>;
-
-	force_self_refresh = <MODE_NORMAL>;
-	dll_reset = <DLL_RESET_ENABLE>;
-	dqs_config = <DQS_TRUE>;
-	odt_config = <ODT_ASSERT_READS>;
-	posted_refreshes = <1>;
-
-	refresh_interval = <2084>;
-	precharge_interval = <256>;
-
-	sdmode = <0x0242>;
-	esdmode = <0x0440>;
-
-	ram@0 {
-		reg = <0x0 0x0 0x8000000>;
-		compatible = "nanya,nt5tu64m16hg";
-
-		odt_rd_cfg = <ODT_RD_NEVER>;
-		odt_wr_cfg = <ODT_WR_ONLY_CURRENT>;
-		bank_bits = <3>;
-		row_bits = <13>;
-		col_bits = <10>;
-	};
-};
diff --git a/Documentation/devicetree/bindings/timer/fsl,mpc83xx-timer.txt b/Documentation/devicetree/bindings/timer/fsl,mpc83xx-timer.txt
deleted file mode 100644
index 608d241..0000000
--- a/Documentation/devicetree/bindings/timer/fsl,mpc83xx-timer.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-MPC83xx timer devices
-
-MPC83xx SoCs offer a decrementer interrupt that can be used to implement delay
-functionality, and periodically triggered actions.
-
-Required properties:
-- compatible: must be "fsl,mpc83xx-timer"
-- clocks: must be a reference to the system's CSB (coherent system bus) clock,
-  provided by one of the "fsl,mpc83xx-clk" devices
-
-Example:
-
-socclocks: clocks {
-	compatible = "fsl,mpc832x-clk";
-	#clock-cells = <1>;
-};
-
-timer {
-	compatible = "fsl,mpc83xx-timer";
-	clocks = <&socclocks MPC83XX_CLK_CSB>;
-};
diff --git a/Documentation/efi.rst b/Documentation/efi.rst
deleted file mode 100644
index 51c1de2..0000000
--- a/Documentation/efi.rst
+++ /dev/null
@@ -1,16 +0,0 @@
-.. SPDX-License-Identifier: GPL-2.0+
-
-EFI subsystem
-=============
-
-Boot services
--------------
-
-.. kernel-doc:: lib/efi_loader/efi_boottime.c
-   :internal:
-
-Runtime services
-----------------
-
-.. kernel-doc:: lib/efi_loader/efi_runtime.c
-   :internal:
diff --git a/Documentation/index.rst b/Documentation/index.rst
deleted file mode 100644
index 0353c10..0000000
--- a/Documentation/index.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-.. SPDX-License-Identifier: GPL-2.0+
-
-#######################
-U-Boot Developer Manual
-#######################
-
-.. toctree::
-
-   efi
-   linker_lists
-   serial
diff --git a/Documentation/linker_lists.rst b/Documentation/linker_lists.rst
deleted file mode 100644
index 72f514e..0000000
--- a/Documentation/linker_lists.rst
+++ /dev/null
@@ -1,100 +0,0 @@
-.. SPDX-License-Identifier: GPL-2.0+
-
-Linker-Generated Arrays
-=======================
-
-A linker list is constructed by grouping together linker input
-sections, each containing one entry of the list. Each input section
-contains a constant initialized variable which holds the entry's
-content. Linker list input sections are constructed from the list
-and entry names, plus a prefix which allows grouping all lists
-together. Assuming _list and _entry are the list and entry names,
-then the corresponding input section name is
-
-::
-
-  .u_boot_list_ + 2_ + @_list + _2_ + @_entry
-
-and the C variable name is
-
-::
-
-  _u_boot_list + _2_ + @_list + _2_ + @_entry
-
-This ensures uniqueness for both input section and C variable name.
-
-Note that the names differ only in the first character, "." for the
-section and "_" for the variable, so that the linker cannot confuse
-section and symbol names. From now on, both names will be referred
-to as
-
-::
-
-  %u_boot_list_ + 2_ + @_list + _2_ + @_entry
-
-Entry variables need never be referred to directly.
-
-The naming scheme for input sections allows grouping all linker lists
-into a single linker output section and grouping all entries for a
-single list.
-
-Note the two '_2_' constant components in the names: their presence
-allows putting a start and end symbols around a list, by mapping
-these symbols to sections names with components "1" (before) and
-"3" (after) instead of "2" (within).
-Start and end symbols for a list can generally be defined as
-
-::
-
-  %u_boot_list_2_ + @_list + _1_...
-  %u_boot_list_2_ + @_list + _3_...
-
-Start and end symbols for the whole of the linker lists area can be
-defined as
-
-::
-
-  %u_boot_list_1_...
-  %u_boot_list_3_...
-
-Here is an example of the sorted sections which result from a list
-"array" made up of three entries : "first", "second" and "third",
-iterated at least once.
-
-::
-
-  .u_boot_list_2_array_1
-  .u_boot_list_2_array_2_first
-  .u_boot_list_2_array_2_second
-  .u_boot_list_2_array_2_third
-  .u_boot_list_2_array_3
-
-If lists must be divided into sublists (e.g. for iterating only on
-part of a list), one can simply give the list a name of the form
-'outer_2_inner', where 'outer' is the global list name and 'inner'
-is the sub-list name. Iterators for the whole list should use the
-global list name ("outer"); iterators for only a sub-list should use
-the full sub-list name ("outer_2_inner").
-
-Here is an example of the sections generated from a global list
-named "drivers", two sub-lists named "i2c" and "pci", and iterators
-defined for the whole list and each sub-list:
-
-::
-
-  %u_boot_list_2_drivers_1
-  %u_boot_list_2_drivers_2_i2c_1
-  %u_boot_list_2_drivers_2_i2c_2_first
-  %u_boot_list_2_drivers_2_i2c_2_first
-  %u_boot_list_2_drivers_2_i2c_2_second
-  %u_boot_list_2_drivers_2_i2c_2_third
-  %u_boot_list_2_drivers_2_i2c_3
-  %u_boot_list_2_drivers_2_pci_1
-  %u_boot_list_2_drivers_2_pci_2_first
-  %u_boot_list_2_drivers_2_pci_2_second
-  %u_boot_list_2_drivers_2_pci_2_third
-  %u_boot_list_2_drivers_2_pci_3
-  %u_boot_list_2_drivers_3
-
-.. kernel-doc:: include/linker_lists.h
-   :internal:
diff --git a/Documentation/media/Makefile b/Documentation/media/Makefile
deleted file mode 100644
index 0efd18a..0000000
--- a/Documentation/media/Makefile
+++ /dev/null
@@ -1,38 +0,0 @@
-# Rules to convert a .h file to inline RST documentation
-
-SRC_DIR=$(srctree)/Documentation/media
-PARSER = $(srctree)/Documentation/sphinx/parse-headers.pl
-API = $(srctree)/include
-
-FILES = linker_lists.h.rst
-
-TARGETS := $(addprefix $(BUILDDIR)/, $(FILES))
-
-gen_rst = \
-	echo ${PARSER} $< $@ $(SRC_DIR)/$(notdir $@).exceptions; \
-	${PARSER} $< $@ $(SRC_DIR)/$(notdir $@).exceptions
-
-quiet_gen_rst = echo '  PARSE   $(patsubst $(srctree)/%,%,$<)'; \
-	${PARSER} $< $@ $(SRC_DIR)/$(notdir $@).exceptions
-
-silent_gen_rst = ${gen_rst}
-
-$(BUILDDIR)/linker_lists.h.rst: ${API}/linker_lists.h ${PARSER} $(SRC_DIR)/linker_lists.h.rst.exceptions
-	@$($(quiet)gen_rst)
-
-# Media build rules
-
-.PHONY: all html epub xml latex
-
-all: $(IMGDOT) $(BUILDDIR) ${TARGETS}
-html: all
-epub: all
-xml: all
-latex: $(IMGPDF) all
-linkcheck:
-
-clean:
-	-rm -f $(DOTTGT) $(IMGTGT) ${TARGETS} 2>/dev/null
-
-$(BUILDDIR):
-	$(Q)mkdir -p $@
diff --git a/Documentation/serial.rst b/Documentation/serial.rst
deleted file mode 100644
index ed34e59..0000000
--- a/Documentation/serial.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-.. SPDX-License-Identifier: GPL-2.0+
-
-Serial system
-=============
-
-.. kernel-doc:: drivers/serial/serial.c
-   :internal:
diff --git a/Documentation/sphinx-static/theme_overrides.css b/Documentation/sphinx-static/theme_overrides.css
deleted file mode 100644
index 522b6d4..0000000
--- a/Documentation/sphinx-static/theme_overrides.css
+++ /dev/null
@@ -1,89 +0,0 @@
-/* -*- coding: utf-8; mode: css -*-
- *
- * Sphinx HTML theme customization: read the doc
- *
- */
-
-/* Interim: Code-blocks with line nos - lines and line numbers don't line up.
- * see: https://github.com/rtfd/sphinx_rtd_theme/issues/419
- */
-
-div[class^="highlight"] pre {
-    line-height: normal;
-}
-.rst-content .highlight > pre {
-    line-height: normal;
-}
-
-@media screen {
-
-    /* content column
-     *
-     * RTD theme's default is 800px as max width for the content, but we have
-     * tables with tons of columns, which need the full width of the view-port.
-     */
-
-    .wy-nav-content{max-width: none; }
-
-    /* table:
-     *
-     *   - Sequences of whitespace should collapse into a single whitespace.
-     *   - make the overflow auto (scrollbar if needed)
-     *   - align caption "left" ("center" is unsuitable on vast tables)
-     */
-
-    .wy-table-responsive table td { white-space: normal; }
-    .wy-table-responsive { overflow: auto; }
-    .rst-content table.docutils caption { text-align: left; font-size: 100%; }
-
-    /* captions:
-     *
-     *   - captions should have 100% (not 85%) font size
-     *   - hide the permalink symbol as long as link is not hovered
-     */
-
-    .toc-title {
-        font-size: 150%;
-	font-weight: bold;
-    }
-
-    caption, .wy-table caption, .rst-content table.field-list caption {
-        font-size: 100%;
-    }
-    caption a.headerlink { opacity: 0; }
-    caption a.headerlink:hover { opacity: 1; }
-
-    /* Menu selection and keystrokes */
-
-    span.menuselection {
-	color: blue;
-	font-family: "Courier New", Courier, monospace
-    }
-
-    code.kbd, code.kbd span {
-	color: white;
-	background-color: darkblue;
-	font-weight: bold;
-	font-family: "Courier New", Courier, monospace
-    }
-
-    /* fix bottom margin of lists items */
-
-    .rst-content .section ul li:last-child, .rst-content .section ul li p:last-child {
-          margin-bottom: 12px;
-    }
-
-    /* inline literal: drop the borderbox, padding and red color */
-
-    code, .rst-content tt, .rst-content code {
-        color: inherit;
-        border: none;
-        padding: unset;
-        background: inherit;
-        font-size: 85%;
-    }
-
-    .rst-content tt.literal,.rst-content tt.literal,.rst-content code.literal {
-        color: inherit;
-    }
-}
diff --git a/Documentation/sphinx/cdomain.py b/Documentation/sphinx/cdomain.py
deleted file mode 100644
index cf13ff3..0000000
--- a/Documentation/sphinx/cdomain.py
+++ /dev/null
@@ -1,165 +0,0 @@
-# -*- coding: utf-8; mode: python -*-
-# pylint: disable=W0141,C0113,C0103,C0325
-u"""
-    cdomain
-    ~~~~~~~
-
-    Replacement for the sphinx c-domain.
-
-    :copyright:  Copyright (C) 2016  Markus Heiser
-    :license:    GPL Version 2, June 1991 see Linux/COPYING for details.
-
-    List of customizations:
-
-    * Moved the *duplicate C object description* warnings for function
-      declarations in the nitpicky mode. See Sphinx documentation for
-      the config values for ``nitpick`` and ``nitpick_ignore``.
-
-    * Add option 'name' to the "c:function:" directive.  With option 'name' the
-      ref-name of a function can be modified. E.g.::
-
-          .. c:function:: int ioctl( int fd, int request )
-             :name: VIDIOC_LOG_STATUS
-
-      The func-name (e.g. ioctl) remains in the output but the ref-name changed
-      from 'ioctl' to 'VIDIOC_LOG_STATUS'. The function is referenced by::
-
-          * :c:func:`VIDIOC_LOG_STATUS` or
-          * :any:`VIDIOC_LOG_STATUS` (``:any:`` needs sphinx 1.3)
-
-     * Handle signatures of function-like macros well. Don't try to deduce
-       arguments types of function-like macros.
-
-"""
-
-from docutils import nodes
-from docutils.parsers.rst import directives
-
-import sphinx
-from sphinx import addnodes
-from sphinx.domains.c import c_funcptr_sig_re, c_sig_re
-from sphinx.domains.c import CObject as Base_CObject
-from sphinx.domains.c import CDomain as Base_CDomain
-
-__version__  = '1.0'
-
-# Get Sphinx version
-major, minor, patch = sphinx.version_info[:3]
-
-def setup(app):
-
-    app.override_domain(CDomain)
-
-    return dict(
-        version = __version__,
-        parallel_read_safe = True,
-        parallel_write_safe = True
-    )
-
-class CObject(Base_CObject):
-
-    """
-    Description of a C language object.
-    """
-    option_spec = {
-        "name" : directives.unchanged
-    }
-
-    def handle_func_like_macro(self, sig, signode):
-        u"""Handles signatures of function-like macros.
-
-        If the objtype is 'function' and the the signature ``sig`` is a
-        function-like macro, the name of the macro is returned. Otherwise
-        ``False`` is returned.  """
-
-        if not self.objtype == 'function':
-            return False
-
-        m = c_funcptr_sig_re.match(sig)
-        if m is None:
-            m = c_sig_re.match(sig)
-            if m is None:
-                raise ValueError('no match')
-
-        rettype, fullname, arglist, _const = m.groups()
-        arglist = arglist.strip()
-        if rettype or not arglist:
-            return False
-
-        arglist = arglist.replace('`', '').replace('\\ ', '') # remove markup
-        arglist = [a.strip() for a in arglist.split(",")]
-
-        # has the first argument a type?
-        if len(arglist[0].split(" ")) > 1:
-            return False
-
-        # This is a function-like macro, it's arguments are typeless!
-        signode  += addnodes.desc_name(fullname, fullname)
-        paramlist = addnodes.desc_parameterlist()
-        signode  += paramlist
-
-        for argname in arglist:
-            param = addnodes.desc_parameter('', '', noemph=True)
-            # separate by non-breaking space in the output
-            param += nodes.emphasis(argname, argname)
-            paramlist += param
-
-        return fullname
-
-    def handle_signature(self, sig, signode):
-        """Transform a C signature into RST nodes."""
-
-        fullname = self.handle_func_like_macro(sig, signode)
-        if not fullname:
-            fullname = super(CObject, self).handle_signature(sig, signode)
-
-        if "name" in self.options:
-            if self.objtype == 'function':
-                fullname = self.options["name"]
-            else:
-                # FIXME: handle :name: value of other declaration types?
-                pass
-        return fullname
-
-    def add_target_and_index(self, name, sig, signode):
-        # for C API items we add a prefix since names are usually not qualified
-        # by a module name and so easily clash with e.g. section titles
-        targetname = 'c.' + name
-        if targetname not in self.state.document.ids:
-            signode['names'].append(targetname)
-            signode['ids'].append(targetname)
-            signode['first'] = (not self.names)
-            self.state.document.note_explicit_target(signode)
-            inv = self.env.domaindata['c']['objects']
-            if (name in inv and self.env.config.nitpicky):
-                if self.objtype == 'function':
-                    if ('c:func', name) not in self.env.config.nitpick_ignore:
-                        self.state_machine.reporter.warning(
-                            'duplicate C object description of %s, ' % name +
-                            'other instance in ' + self.env.doc2path(inv[name][0]),
-                            line=self.lineno)
-            inv[name] = (self.env.docname, self.objtype)
-
-        indextext = self.get_index_text(name)
-        if indextext:
-            if major == 1 and minor < 4:
-                # indexnode's tuple changed in 1.4
-                # https://github.com/sphinx-doc/sphinx/commit/e6a5a3a92e938fcd75866b4227db9e0524d58f7c
-                self.indexnode['entries'].append(
-                    ('single', indextext, targetname, ''))
-            else:
-                self.indexnode['entries'].append(
-                    ('single', indextext, targetname, '', None))
-
-class CDomain(Base_CDomain):
-
-    """C language domain."""
-    name = 'c'
-    label = 'C'
-    directives = {
-        'function': CObject,
-        'member':   CObject,
-        'macro':    CObject,
-        'type':     CObject,
-        'var':      CObject,
-    }
diff --git a/Documentation/sphinx/kernel_include.py b/Documentation/sphinx/kernel_include.py
deleted file mode 100755
index f523aa6..0000000
--- a/Documentation/sphinx/kernel_include.py
+++ /dev/null
@@ -1,190 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8; mode: python -*-
-# pylint: disable=R0903, C0330, R0914, R0912, E0401
-
-u"""
-    kernel-include
-    ~~~~~~~~~~~~~~
-
-    Implementation of the ``kernel-include`` reST-directive.
-
-    :copyright:  Copyright (C) 2016  Markus Heiser
-    :license:    GPL Version 2, June 1991 see linux/COPYING for details.
-
-    The ``kernel-include`` reST-directive is a replacement for the ``include``
-    directive. The ``kernel-include`` directive expand environment variables in
-    the path name and allows to include files from arbitrary locations.
-
-    .. hint::
-
-      Including files from arbitrary locations (e.g. from ``/etc``) is a
-      security risk for builders. This is why the ``include`` directive from
-      docutils *prohibit* pathnames pointing to locations *above* the filesystem
-      tree where the reST document with the include directive is placed.
-
-    Substrings of the form $name or ${name} are replaced by the value of
-    environment variable name. Malformed variable names and references to
-    non-existing variables are left unchanged.
-"""
-
-# ==============================================================================
-# imports
-# ==============================================================================
-
-import os.path
-
-from docutils import io, nodes, statemachine
-from docutils.utils.error_reporting import SafeString, ErrorString
-from docutils.parsers.rst import directives
-from docutils.parsers.rst.directives.body import CodeBlock, NumberLines
-from docutils.parsers.rst.directives.misc import Include
-
-__version__  = '1.0'
-
-# ==============================================================================
-def setup(app):
-# ==============================================================================
-
-    app.add_directive("kernel-include", KernelInclude)
-    return dict(
-        version = __version__,
-        parallel_read_safe = True,
-        parallel_write_safe = True
-    )
-
-# ==============================================================================
-class KernelInclude(Include):
-# ==============================================================================
-
-    u"""KernelInclude (``kernel-include``) directive"""
-
-    def run(self):
-        path = os.path.realpath(
-            os.path.expandvars(self.arguments[0]))
-
-        # to get a bit security back, prohibit /etc:
-        if path.startswith(os.sep + "etc"):
-            raise self.severe(
-                'Problems with "%s" directive, prohibited path: %s'
-                % (self.name, path))
-
-        self.arguments[0] = path
-
-        #return super(KernelInclude, self).run() # won't work, see HINTs in _run()
-        return self._run()
-
-    def _run(self):
-        """Include a file as part of the content of this reST file."""
-
-        # HINT: I had to copy&paste the whole Include.run method. I'am not happy
-        # with this, but due to security reasons, the Include.run method does
-        # not allow absolute or relative pathnames pointing to locations *above*
-        # the filesystem tree where the reST document is placed.
-
-        if not self.state.document.settings.file_insertion_enabled:
-            raise self.warning('"%s" directive disabled.' % self.name)
-        source = self.state_machine.input_lines.source(
-            self.lineno - self.state_machine.input_offset - 1)
-        source_dir = os.path.dirname(os.path.abspath(source))
-        path = directives.path(self.arguments[0])
-        if path.startswith('<') and path.endswith('>'):
-            path = os.path.join(self.standard_include_path, path[1:-1])
-        path = os.path.normpath(os.path.join(source_dir, path))
-
-        # HINT: this is the only line I had to change / commented out:
-        #path = utils.relative_path(None, path)
-
-        path = nodes.reprunicode(path)
-        encoding = self.options.get(
-            'encoding', self.state.document.settings.input_encoding)
-        e_handler=self.state.document.settings.input_encoding_error_handler
-        tab_width = self.options.get(
-            'tab-width', self.state.document.settings.tab_width)
-        try:
-            self.state.document.settings.record_dependencies.add(path)
-            include_file = io.FileInput(source_path=path,
-                                        encoding=encoding,
-                                        error_handler=e_handler)
-        except UnicodeEncodeError as error:
-            raise self.severe('Problems with "%s" directive path:\n'
-                              'Cannot encode input file path "%s" '
-                              '(wrong locale?).' %
-                              (self.name, SafeString(path)))
-        except IOError as error:
-            raise self.severe('Problems with "%s" directive path:\n%s.' %
-                      (self.name, ErrorString(error)))
-        startline = self.options.get('start-line', None)
-        endline = self.options.get('end-line', None)
-        try:
-            if startline or (endline is not None):
-                lines = include_file.readlines()
-                rawtext = ''.join(lines[startline:endline])
-            else:
-                rawtext = include_file.read()
-        except UnicodeError as error:
-            raise self.severe('Problem with "%s" directive:\n%s' %
-                              (self.name, ErrorString(error)))
-        # start-after/end-before: no restrictions on newlines in match-text,
-        # and no restrictions on matching inside lines vs. line boundaries
-        after_text = self.options.get('start-after', None)
-        if after_text:
-            # skip content in rawtext before *and incl.* a matching text
-            after_index = rawtext.find(after_text)
-            if after_index < 0:
-                raise self.severe('Problem with "start-after" option of "%s" '
-                                  'directive:\nText not found.' % self.name)
-            rawtext = rawtext[after_index + len(after_text):]
-        before_text = self.options.get('end-before', None)
-        if before_text:
-            # skip content in rawtext after *and incl.* a matching text
-            before_index = rawtext.find(before_text)
-            if before_index < 0:
-                raise self.severe('Problem with "end-before" option of "%s" '
-                                  'directive:\nText not found.' % self.name)
-            rawtext = rawtext[:before_index]
-
-        include_lines = statemachine.string2lines(rawtext, tab_width,
-                                                  convert_whitespace=True)
-        if 'literal' in self.options:
-            # Convert tabs to spaces, if `tab_width` is positive.
-            if tab_width >= 0:
-                text = rawtext.expandtabs(tab_width)
-            else:
-                text = rawtext
-            literal_block = nodes.literal_block(rawtext, source=path,
-                                    classes=self.options.get('class', []))
-            literal_block.line = 1
-            self.add_name(literal_block)
-            if 'number-lines' in self.options:
-                try:
-                    startline = int(self.options['number-lines'] or 1)
-                except ValueError:
-                    raise self.error(':number-lines: with non-integer '
-                                     'start value')
-                endline = startline + len(include_lines)
-                if text.endswith('\n'):
-                    text = text[:-1]
-                tokens = NumberLines([([], text)], startline, endline)
-                for classes, value in tokens:
-                    if classes:
-                        literal_block += nodes.inline(value, value,
-                                                      classes=classes)
-                    else:
-                        literal_block += nodes.Text(value, value)
-            else:
-                literal_block += nodes.Text(text, text)
-            return [literal_block]
-        if 'code' in self.options:
-            self.options['source'] = path
-            codeblock = CodeBlock(self.name,
-                                  [self.options.pop('code')], # arguments
-                                  self.options,
-                                  include_lines, # content
-                                  self.lineno,
-                                  self.content_offset,
-                                  self.block_text,
-                                  self.state,
-                                  self.state_machine)
-            return codeblock.run()
-        self.state_machine.insert_input(include_lines, path)
-        return []
diff --git a/Documentation/sphinx/kerneldoc.py b/Documentation/sphinx/kerneldoc.py
deleted file mode 100644
index fbedcc3..0000000
--- a/Documentation/sphinx/kerneldoc.py
+++ /dev/null
@@ -1,146 +0,0 @@
-# coding=utf-8
-#
-# Copyright © 2016 Intel Corporation
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# the rights to use, copy, modify, merge, publish, distribute, sublicense,
-# and/or sell copies of the Software, and to permit persons to whom the
-# Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice (including the next
-# paragraph) shall be included in all copies or substantial portions of the
-# Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
-# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-#
-# Authors:
-#    Jani Nikula <jani.nikula@intel.com>
-#
-# Please make sure this works on both python2 and python3.
-#
-
-import codecs
-import os
-import subprocess
-import sys
-import re
-import glob
-
-from docutils import nodes, statemachine
-from docutils.statemachine import ViewList
-from docutils.parsers.rst import directives, Directive
-from sphinx.ext.autodoc import AutodocReporter
-
-__version__  = '1.0'
-
-class KernelDocDirective(Directive):
-    """Extract kernel-doc comments from the specified file"""
-    required_argument = 1
-    optional_arguments = 4
-    option_spec = {
-        'doc': directives.unchanged_required,
-        'functions': directives.unchanged_required,
-        'export': directives.unchanged,
-        'internal': directives.unchanged,
-    }
-    has_content = False
-
-    def run(self):
-        env = self.state.document.settings.env
-        cmd = [env.config.kerneldoc_bin, '-rst', '-enable-lineno']
-
-        filename = env.config.kerneldoc_srctree + '/' + self.arguments[0]
-        export_file_patterns = []
-
-        # Tell sphinx of the dependency
-        env.note_dependency(os.path.abspath(filename))
-
-        tab_width = self.options.get('tab-width', self.state.document.settings.tab_width)
-
-        # FIXME: make this nicer and more robust against errors
-        if 'export' in self.options:
-            cmd += ['-export']
-            export_file_patterns = str(self.options.get('export')).split()
-        elif 'internal' in self.options:
-            cmd += ['-internal']
-            export_file_patterns = str(self.options.get('internal')).split()
-        elif 'doc' in self.options:
-            cmd += ['-function', str(self.options.get('doc'))]
-        elif 'functions' in self.options:
-            for f in str(self.options.get('functions')).split():
-                cmd += ['-function', f]
-
-        for pattern in export_file_patterns:
-            for f in glob.glob(env.config.kerneldoc_srctree + '/' + pattern):
-                env.note_dependency(os.path.abspath(f))
-                cmd += ['-export-file', f]
-
-        cmd += [filename]
-
-        try:
-            env.app.verbose('calling kernel-doc \'%s\'' % (" ".join(cmd)))
-
-            p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-            out, err = p.communicate()
-
-            out, err = codecs.decode(out, 'utf-8'), codecs.decode(err, 'utf-8')
-
-            if p.returncode != 0:
-                sys.stderr.write(err)
-
-                env.app.warn('kernel-doc \'%s\' failed with return code %d' % (" ".join(cmd), p.returncode))
-                return [nodes.error(None, nodes.paragraph(text = "kernel-doc missing"))]
-            elif env.config.kerneldoc_verbosity > 0:
-                sys.stderr.write(err)
-
-            lines = statemachine.string2lines(out, tab_width, convert_whitespace=True)
-            result = ViewList()
-
-            lineoffset = 0;
-            line_regex = re.compile("^#define LINENO ([0-9]+)$")
-            for line in lines:
-                match = line_regex.search(line)
-                if match:
-                    # sphinx counts lines from 0
-                    lineoffset = int(match.group(1)) - 1
-                    # we must eat our comments since the upset the markup
-                else:
-                    result.append(line, filename, lineoffset)
-                    lineoffset += 1
-
-            node = nodes.section()
-            buf = self.state.memo.title_styles, self.state.memo.section_level, self.state.memo.reporter
-            self.state.memo.reporter = AutodocReporter(result, self.state.memo.reporter)
-            self.state.memo.title_styles, self.state.memo.section_level = [], 0
-            try:
-                self.state.nested_parse(result, 0, node, match_titles=1)
-            finally:
-                self.state.memo.title_styles, self.state.memo.section_level, self.state.memo.reporter = buf
-
-            return node.children
-
-        except Exception as e:  # pylint: disable=W0703
-            env.app.warn('kernel-doc \'%s\' processing failed with: %s' %
-                         (" ".join(cmd), str(e)))
-            return [nodes.error(None, nodes.paragraph(text = "kernel-doc missing"))]
-
-def setup(app):
-    app.add_config_value('kerneldoc_bin', None, 'env')
-    app.add_config_value('kerneldoc_srctree', None, 'env')
-    app.add_config_value('kerneldoc_verbosity', 1, 'env')
-
-    app.add_directive('kernel-doc', KernelDocDirective)
-
-    return dict(
-        version = __version__,
-        parallel_read_safe = True,
-        parallel_write_safe = True
-    )
diff --git a/Documentation/sphinx/kfigure.py b/Documentation/sphinx/kfigure.py
deleted file mode 100644
index b97228d..0000000
--- a/Documentation/sphinx/kfigure.py
+++ /dev/null
@@ -1,551 +0,0 @@
-# -*- coding: utf-8; mode: python -*-
-# pylint: disable=C0103, R0903, R0912, R0915
-u"""
-    scalable figure and image handling
-    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-    Sphinx extension which implements scalable image handling.
-
-    :copyright:  Copyright (C) 2016  Markus Heiser
-    :license:    GPL Version 2, June 1991 see Linux/COPYING for details.
-
-    The build for image formats depend on image's source format and output's
-    destination format. This extension implement methods to simplify image
-    handling from the author's POV. Directives like ``kernel-figure`` implement
-    methods *to* always get the best output-format even if some tools are not
-    installed. For more details take a look at ``convert_image(...)`` which is
-    the core of all conversions.
-
-    * ``.. kernel-image``: for image handling / a ``.. image::`` replacement
-
-    * ``.. kernel-figure``: for figure handling / a ``.. figure::`` replacement
-
-    * ``.. kernel-render``: for render markup / a concept to embed *render*
-      markups (or languages). Supported markups (see ``RENDER_MARKUP_EXT``)
-
-      - ``DOT``: render embedded Graphviz's **DOC**
-      - ``SVG``: render embedded Scalable Vector Graphics (**SVG**)
-      - ... *developable*
-
-    Used tools:
-
-    * ``dot(1)``: Graphviz (http://www.graphviz.org). If Graphviz is not
-      available, the DOT language is inserted as literal-block.
-
-    * SVG to PDF: To generate PDF, you need at least one of this tools:
-
-      - ``convert(1)``: ImageMagick (https://www.imagemagick.org)
-
-    List of customizations:
-
-    * generate PDF from SVG / used by PDF (LaTeX) builder
-
-    * generate SVG (html-builder) and PDF (latex-builder) from DOT files.
-      DOT: see http://www.graphviz.org/content/dot-language
-
-    """
-
-import os
-from os import path
-import subprocess
-from hashlib import sha1
-import sys
-
-from docutils import nodes
-from docutils.statemachine import ViewList
-from docutils.parsers.rst import directives
-from docutils.parsers.rst.directives import images
-import sphinx
-
-from sphinx.util.nodes import clean_astext
-from six import iteritems
-
-PY3 = sys.version_info[0] == 3
-
-if PY3:
-    _unicode = str
-else:
-    _unicode = unicode
-
-# Get Sphinx version
-major, minor, patch = sphinx.version_info[:3]
-if major == 1 and minor > 3:
-    # patches.Figure only landed in Sphinx 1.4
-    from sphinx.directives.patches import Figure  # pylint: disable=C0413
-else:
-    Figure = images.Figure
-
-__version__  = '1.0.0'
-
-# simple helper
-# -------------
-
-def which(cmd):
-    """Searches the ``cmd`` in the ``PATH`` environment.
-
-    This *which* searches the PATH for executable ``cmd`` . First match is
-    returned, if nothing is found, ``None` is returned.
-    """
-    envpath = os.environ.get('PATH', None) or os.defpath
-    for folder in envpath.split(os.pathsep):
-        fname = folder + os.sep + cmd
-        if path.isfile(fname):
-            return fname
-
-def mkdir(folder, mode=0o775):
-    if not path.isdir(folder):
-        os.makedirs(folder, mode)
-
-def file2literal(fname):
-    with open(fname, "r") as src:
-        data = src.read()
-        node = nodes.literal_block(data, data)
-    return node
-
-def isNewer(path1, path2):
-    """Returns True if ``path1`` is newer than ``path2``
-
-    If ``path1`` exists and is newer than ``path2`` the function returns
-    ``True`` is returned otherwise ``False``
-    """
-    return (path.exists(path1)
-            and os.stat(path1).st_ctime > os.stat(path2).st_ctime)
-
-def pass_handle(self, node):           # pylint: disable=W0613
-    pass
-
-# setup conversion tools and sphinx extension
-# -------------------------------------------
-
-# Graphviz's dot(1) support
-dot_cmd = None
-
-# ImageMagick' convert(1) support
-convert_cmd = None
-
-
-def setup(app):
-    # check toolchain first
-    app.connect('builder-inited', setupTools)
-
-    # image handling
-    app.add_directive("kernel-image",  KernelImage)
-    app.add_node(kernel_image,
-                 html    = (visit_kernel_image, pass_handle),
-                 latex   = (visit_kernel_image, pass_handle),
-                 texinfo = (visit_kernel_image, pass_handle),
-                 text    = (visit_kernel_image, pass_handle),
-                 man     = (visit_kernel_image, pass_handle), )
-
-    # figure handling
-    app.add_directive("kernel-figure", KernelFigure)
-    app.add_node(kernel_figure,
-                 html    = (visit_kernel_figure, pass_handle),
-                 latex   = (visit_kernel_figure, pass_handle),
-                 texinfo = (visit_kernel_figure, pass_handle),
-                 text    = (visit_kernel_figure, pass_handle),
-                 man     = (visit_kernel_figure, pass_handle), )
-
-    # render handling
-    app.add_directive('kernel-render', KernelRender)
-    app.add_node(kernel_render,
-                 html    = (visit_kernel_render, pass_handle),
-                 latex   = (visit_kernel_render, pass_handle),
-                 texinfo = (visit_kernel_render, pass_handle),
-                 text    = (visit_kernel_render, pass_handle),
-                 man     = (visit_kernel_render, pass_handle), )
-
-    app.connect('doctree-read', add_kernel_figure_to_std_domain)
-
-    return dict(
-        version = __version__,
-        parallel_read_safe = True,
-        parallel_write_safe = True
-    )
-
-
-def setupTools(app):
-    u"""
-    Check available build tools and log some *verbose* messages.
-
-    This function is called once, when the builder is initiated.
-    """
-    global dot_cmd, convert_cmd   # pylint: disable=W0603
-    app.verbose("kfigure: check installed tools ...")
-
-    dot_cmd = which('dot')
-    convert_cmd = which('convert')
-
-    if dot_cmd:
-        app.verbose("use dot(1) from: " + dot_cmd)
-    else:
-        app.warn("dot(1) not found, for better output quality install "
-                 "graphviz from http://www.graphviz.org")
-    if convert_cmd:
-        app.verbose("use convert(1) from: " + convert_cmd)
-    else:
-        app.warn(
-            "convert(1) not found, for SVG to PDF conversion install "
-            "ImageMagick (https://www.imagemagick.org)")
-
-
-# integrate conversion tools
-# --------------------------
-
-RENDER_MARKUP_EXT = {
-    # The '.ext' must be handled by convert_image(..) function's *in_ext* input.
-    # <name> : <.ext>
-    'DOT' : '.dot',
-    'SVG' : '.svg'
-}
-
-def convert_image(img_node, translator, src_fname=None):
-    """Convert a image node for the builder.
-
-    Different builder prefer different image formats, e.g. *latex* builder
-    prefer PDF while *html* builder prefer SVG format for images.
-
-    This function handles output image formats in dependence of source the
-    format (of the image) and the translator's output format.
-    """
-    app = translator.builder.app
-
-    fname, in_ext = path.splitext(path.basename(img_node['uri']))
-    if src_fname is None:
-        src_fname = path.join(translator.builder.srcdir, img_node['uri'])
-        if not path.exists(src_fname):
-            src_fname = path.join(translator.builder.outdir, img_node['uri'])
-
-    dst_fname = None
-
-    # in kernel builds, use 'make SPHINXOPTS=-v' to see verbose messages
-
-    app.verbose('assert best format for: ' + img_node['uri'])
-
-    if in_ext == '.dot':
-
-        if not dot_cmd:
-            app.verbose("dot from graphviz not available / include DOT raw.")
-            img_node.replace_self(file2literal(src_fname))
-
-        elif translator.builder.format == 'latex':
-            dst_fname = path.join(translator.builder.outdir, fname + '.pdf')
-            img_node['uri'] = fname + '.pdf'
-            img_node['candidates'] = {'*': fname + '.pdf'}
-
-
-        elif translator.builder.format == 'html':
-            dst_fname = path.join(
-                translator.builder.outdir,
-                translator.builder.imagedir,
-                fname + '.svg')
-            img_node['uri'] = path.join(
-                translator.builder.imgpath, fname + '.svg')
-            img_node['candidates'] = {
-                '*': path.join(translator.builder.imgpath, fname + '.svg')}
-
-        else:
-            # all other builder formats will include DOT as raw
-            img_node.replace_self(file2literal(src_fname))
-
-    elif in_ext == '.svg':
-
-        if translator.builder.format == 'latex':
-            if convert_cmd is None:
-                app.verbose("no SVG to PDF conversion available / include SVG raw.")
-                img_node.replace_self(file2literal(src_fname))
-            else:
-                dst_fname = path.join(translator.builder.outdir, fname + '.pdf')
-                img_node['uri'] = fname + '.pdf'
-                img_node['candidates'] = {'*': fname + '.pdf'}
-
-    if dst_fname:
-        # the builder needs not to copy one more time, so pop it if exists.
-        translator.builder.images.pop(img_node['uri'], None)
-        _name = dst_fname[len(translator.builder.outdir) + 1:]
-
-        if isNewer(dst_fname, src_fname):
-            app.verbose("convert: {out}/%s already exists and is newer" % _name)
-
-        else:
-            ok = False
-            mkdir(path.dirname(dst_fname))
-
-            if in_ext == '.dot':
-                app.verbose('convert DOT to: {out}/' + _name)
-                ok = dot2format(app, src_fname, dst_fname)
-
-            elif in_ext == '.svg':
-                app.verbose('convert SVG to: {out}/' + _name)
-                ok = svg2pdf(app, src_fname, dst_fname)
-
-            if not ok:
-                img_node.replace_self(file2literal(src_fname))
-
-
-def dot2format(app, dot_fname, out_fname):
-    """Converts DOT file to ``out_fname`` using ``dot(1)``.
-
-    * ``dot_fname`` pathname of the input DOT file, including extension ``.dot``
-    * ``out_fname`` pathname of the output file, including format extension
-
-    The *format extension* depends on the ``dot`` command (see ``man dot``
-    option ``-Txxx``). Normally you will use one of the following extensions:
-
-    - ``.ps`` for PostScript,
-    - ``.svg`` or ``svgz`` for Structured Vector Graphics,
-    - ``.fig`` for XFIG graphics and
-    - ``.png`` or ``gif`` for common bitmap graphics.
-
-    """
-    out_format = path.splitext(out_fname)[1][1:]
-    cmd = [dot_cmd, '-T%s' % out_format, dot_fname]
-    exit_code = 42
-
-    with open(out_fname, "w") as out:
-        exit_code = subprocess.call(cmd, stdout = out)
-        if exit_code != 0:
-            app.warn("Error #%d when calling: %s" % (exit_code, " ".join(cmd)))
-    return bool(exit_code == 0)
-
-def svg2pdf(app, svg_fname, pdf_fname):
-    """Converts SVG to PDF with ``convert(1)`` command.
-
-    Uses ``convert(1)`` from ImageMagick (https://www.imagemagick.org) for
-    conversion.  Returns ``True`` on success and ``False`` if an error occurred.
-
-    * ``svg_fname`` pathname of the input SVG file with extension (``.svg``)
-    * ``pdf_name``  pathname of the output PDF file with extension (``.pdf``)
-
-    """
-    cmd = [convert_cmd, svg_fname, pdf_fname]
-    # use stdout and stderr from parent
-    exit_code = subprocess.call(cmd)
-    if exit_code != 0:
-        app.warn("Error #%d when calling: %s" % (exit_code, " ".join(cmd)))
-    return bool(exit_code == 0)
-
-
-# image handling
-# ---------------------
-
-def visit_kernel_image(self, node):    # pylint: disable=W0613
-    """Visitor of the ``kernel_image`` Node.
-
-    Handles the ``image`` child-node with the ``convert_image(...)``.
-    """
-    img_node = node[0]
-    convert_image(img_node, self)
-
-class kernel_image(nodes.image):
-    """Node for ``kernel-image`` directive."""
-    pass
-
-class KernelImage(images.Image):
-    u"""KernelImage directive
-
-    Earns everything from ``.. image::`` directive, except *remote URI* and
-    *glob* pattern. The KernelImage wraps a image node into a
-    kernel_image node. See ``visit_kernel_image``.
-    """
-
-    def run(self):
-        uri = self.arguments[0]
-        if uri.endswith('.*') or uri.find('://') != -1:
-            raise self.severe(
-                'Error in "%s: %s": glob pattern and remote images are not allowed'
-                % (self.name, uri))
-        result = images.Image.run(self)
-        if len(result) == 2 or isinstance(result[0], nodes.system_message):
-            return result
-        (image_node,) = result
-        # wrap image node into a kernel_image node / see visitors
-        node = kernel_image('', image_node)
-        return [node]
-
-# figure handling
-# ---------------------
-
-def visit_kernel_figure(self, node):   # pylint: disable=W0613
-    """Visitor of the ``kernel_figure`` Node.
-
-    Handles the ``image`` child-node with the ``convert_image(...)``.
-    """
-    img_node = node[0][0]
-    convert_image(img_node, self)
-
-class kernel_figure(nodes.figure):
-    """Node for ``kernel-figure`` directive."""
-
-class KernelFigure(Figure):
-    u"""KernelImage directive
-
-    Earns everything from ``.. figure::`` directive, except *remote URI* and
-    *glob* pattern.  The KernelFigure wraps a figure node into a kernel_figure
-    node. See ``visit_kernel_figure``.
-    """
-
-    def run(self):
-        uri = self.arguments[0]
-        if uri.endswith('.*') or uri.find('://') != -1:
-            raise self.severe(
-                'Error in "%s: %s":'
-                ' glob pattern and remote images are not allowed'
-                % (self.name, uri))
-        result = Figure.run(self)
-        if len(result) == 2 or isinstance(result[0], nodes.system_message):
-            return result
-        (figure_node,) = result
-        # wrap figure node into a kernel_figure node / see visitors
-        node = kernel_figure('', figure_node)
-        return [node]
-
-
-# render handling
-# ---------------------
-
-def visit_kernel_render(self, node):
-    """Visitor of the ``kernel_render`` Node.
-
-    If rendering tools available, save the markup of the ``literal_block`` child
-    node into a file and replace the ``literal_block`` node with a new created
-    ``image`` node, pointing to the saved markup file. Afterwards, handle the
-    image child-node with the ``convert_image(...)``.
-    """
-    app = self.builder.app
-    srclang = node.get('srclang')
-
-    app.verbose('visit kernel-render node lang: "%s"' % (srclang))
-
-    tmp_ext = RENDER_MARKUP_EXT.get(srclang, None)
-    if tmp_ext is None:
-        app.warn('kernel-render: "%s" unknown / include raw.' % (srclang))
-        return
-
-    if not dot_cmd and tmp_ext == '.dot':
-        app.verbose("dot from graphviz not available / include raw.")
-        return
-
-    literal_block = node[0]
-
-    code      = literal_block.astext()
-    hashobj   = code.encode('utf-8') #  str(node.attributes)
-    fname     = path.join('%s-%s' % (srclang, sha1(hashobj).hexdigest()))
-
-    tmp_fname = path.join(
-        self.builder.outdir, self.builder.imagedir, fname + tmp_ext)
-
-    if not path.isfile(tmp_fname):
-        mkdir(path.dirname(tmp_fname))
-        with open(tmp_fname, "w") as out:
-            out.write(code)
-
-    img_node = nodes.image(node.rawsource, **node.attributes)
-    img_node['uri'] = path.join(self.builder.imgpath, fname + tmp_ext)
-    img_node['candidates'] = {
-        '*': path.join(self.builder.imgpath, fname + tmp_ext)}
-
-    literal_block.replace_self(img_node)
-    convert_image(img_node, self, tmp_fname)
-
-
-class kernel_render(nodes.General, nodes.Inline, nodes.Element):
-    """Node for ``kernel-render`` directive."""
-    pass
-
-class KernelRender(Figure):
-    u"""KernelRender directive
-
-    Render content by external tool.  Has all the options known from the
-    *figure*  directive, plus option ``caption``.  If ``caption`` has a
-    value, a figure node with the *caption* is inserted. If not, a image node is
-    inserted.
-
-    The KernelRender directive wraps the text of the directive into a
-    literal_block node and wraps it into a kernel_render node. See
-    ``visit_kernel_render``.
-    """
-    has_content = True
-    required_arguments = 1
-    optional_arguments = 0
-    final_argument_whitespace = False
-
-    # earn options from 'figure'
-    option_spec = Figure.option_spec.copy()
-    option_spec['caption'] = directives.unchanged
-
-    def run(self):
-        return [self.build_node()]
-
-    def build_node(self):
-
-        srclang = self.arguments[0].strip()
-        if srclang not in RENDER_MARKUP_EXT.keys():
-            return [self.state_machine.reporter.warning(
-                'Unknown source language "%s", use one of: %s.' % (
-                    srclang, ",".join(RENDER_MARKUP_EXT.keys())),
-                line=self.lineno)]
-
-        code = '\n'.join(self.content)
-        if not code.strip():
-            return [self.state_machine.reporter.warning(
-                'Ignoring "%s" directive without content.' % (
-                    self.name),
-                line=self.lineno)]
-
-        node = kernel_render()
-        node['alt'] = self.options.get('alt','')
-        node['srclang'] = srclang
-        literal_node = nodes.literal_block(code, code)
-        node += literal_node
-
-        caption = self.options.get('caption')
-        if caption:
-            # parse caption's content
-            parsed = nodes.Element()
-            self.state.nested_parse(
-                ViewList([caption], source=''), self.content_offset, parsed)
-            caption_node = nodes.caption(
-                parsed[0].rawsource, '', *parsed[0].children)
-            caption_node.source = parsed[0].source
-            caption_node.line = parsed[0].line
-
-            figure_node = nodes.figure('', node)
-            for k,v in self.options.items():
-                figure_node[k] = v
-            figure_node += caption_node
-
-            node = figure_node
-
-        return node
-
-def add_kernel_figure_to_std_domain(app, doctree):
-    """Add kernel-figure anchors to 'std' domain.
-
-    The ``StandardDomain.process_doc(..)`` method does not know how to resolve
-    the caption (label) of ``kernel-figure`` directive (it only knows about
-    standard nodes, e.g. table, figure etc.). Without any additional handling
-    this will result in a 'undefined label' for kernel-figures.
-
-    This handle adds labels of kernel-figure to the 'std' domain labels.
-    """
-
-    std = app.env.domains["std"]
-    docname = app.env.docname
-    labels = std.data["labels"]
-
-    for name, explicit in iteritems(doctree.nametypes):
-        if not explicit:
-            continue
-        labelid = doctree.nameids[name]
-        if labelid is None:
-            continue
-        node = doctree.ids[labelid]
-
-        if node.tagname == 'kernel_figure':
-            for n in node.next_node():
-                if n.tagname == 'caption':
-                    sectname = clean_astext(n)
-                    # add label to std domain
-                    labels[name] = docname, labelid, sectname
-                    break
diff --git a/Documentation/sphinx/load_config.py b/Documentation/sphinx/load_config.py
deleted file mode 100644
index 301a21a..0000000
--- a/Documentation/sphinx/load_config.py
+++ /dev/null
@@ -1,32 +0,0 @@
-# -*- coding: utf-8; mode: python -*-
-# pylint: disable=R0903, C0330, R0914, R0912, E0401
-
-import os
-import sys
-from sphinx.util.pycompat import execfile_
-
-# ------------------------------------------------------------------------------
-def loadConfig(namespace):
-# ------------------------------------------------------------------------------
-
-    u"""Load an additional configuration file into *namespace*.
-
-    The name of the configuration file is taken from the environment
-    ``SPHINX_CONF``. The external configuration file extends (or overwrites) the
-    configuration values from the origin ``conf.py``.  With this you are able to
-    maintain *build themes*.  """
-
-    config_file = os.environ.get("SPHINX_CONF", None)
-    if (config_file is not None
-        and os.path.normpath(namespace["__file__"]) != os.path.normpath(config_file) ):
-        config_file = os.path.abspath(config_file)
-
-        if os.path.isfile(config_file):
-            sys.stdout.write("load additional sphinx-config: %s\n" % config_file)
-            config = namespace.copy()
-            config['__file__'] = config_file
-            execfile_(config_file, config)
-            del config['__file__']
-            namespace.update(config)
-        else:
-            sys.stderr.write("WARNING: additional sphinx-config not found: %s\n" % config_file)
diff --git a/Documentation/sphinx/parse-headers.pl b/Documentation/sphinx/parse-headers.pl
deleted file mode 100755
index d410f47..0000000
--- a/Documentation/sphinx/parse-headers.pl
+++ /dev/null
@@ -1,401 +0,0 @@
-#!/usr/bin/perl
-use strict;
-use Text::Tabs;
-use Getopt::Long;
-use Pod::Usage;
-
-my $debug;
-my $help;
-my $man;
-
-GetOptions(
-	"debug" => \$debug,
-	'usage|?' => \$help,
-	'help' => \$man
-) or pod2usage(2);
-
-pod2usage(1) if $help;
-pod2usage(-exitstatus => 0, -verbose => 2) if $man;
-pod2usage(2) if (scalar @ARGV < 2 || scalar @ARGV > 3);
-
-my ($file_in, $file_out, $file_exceptions) = @ARGV;
-
-my $data;
-my %ioctls;
-my %defines;
-my %typedefs;
-my %enums;
-my %enum_symbols;
-my %structs;
-
-require Data::Dumper if ($debug);
-
-#
-# read the file and get identifiers
-#
-
-my $is_enum = 0;
-my $is_comment = 0;
-open IN, $file_in or die "Can't open $file_in";
-while (<IN>) {
-	$data .= $_;
-
-	my $ln = $_;
-	if (!$is_comment) {
-		$ln =~ s,/\*.*(\*/),,g;
-
-		$is_comment = 1 if ($ln =~ s,/\*.*,,);
-	} else {
-		if ($ln =~ s,^(.*\*/),,) {
-			$is_comment = 0;
-		} else {
-			next;
-		}
-	}
-
-	if ($is_enum && $ln =~ m/^\s*([_\w][\w\d_]+)\s*[\,=]?/) {
-		my $s = $1;
-		my $n = $1;
-		$n =~ tr/A-Z/a-z/;
-		$n =~ tr/_/-/;
-
-		$enum_symbols{$s} =  "\\ :ref:`$s <$n>`\\ ";
-
-		$is_enum = 0 if ($is_enum && m/\}/);
-		next;
-	}
-	$is_enum = 0 if ($is_enum && m/\}/);
-
-	if ($ln =~ m/^\s*#\s*define\s+([_\w][\w\d_]+)\s+_IO/) {
-		my $s = $1;
-		my $n = $1;
-		$n =~ tr/A-Z/a-z/;
-
-		$ioctls{$s} = "\\ :ref:`$s <$n>`\\ ";
-		next;
-	}
-
-	if ($ln =~ m/^\s*#\s*define\s+([_\w][\w\d_]+)\s+/) {
-		my $s = $1;
-		my $n = $1;
-		$n =~ tr/A-Z/a-z/;
-		$n =~ tr/_/-/;
-
-		$defines{$s} = "\\ :ref:`$s <$n>`\\ ";
-		next;
-	}
-
-	if ($ln =~ m/^\s*typedef\s+([_\w][\w\d_]+)\s+(.*)\s+([_\w][\w\d_]+);/) {
-		my $s = $2;
-		my $n = $3;
-
-		$typedefs{$n} = "\\ :c:type:`$n <$s>`\\ ";
-		next;
-	}
-	if ($ln =~ m/^\s*enum\s+([_\w][\w\d_]+)\s+\{/
-	    || $ln =~ m/^\s*enum\s+([_\w][\w\d_]+)$/
-	    || $ln =~ m/^\s*typedef\s*enum\s+([_\w][\w\d_]+)\s+\{/
-	    || $ln =~ m/^\s*typedef\s*enum\s+([_\w][\w\d_]+)$/) {
-		my $s = $1;
-
-		$enums{$s} =  "enum :c:type:`$s`\\ ";
-
-		$is_enum = $1;
-		next;
-	}
-	if ($ln =~ m/^\s*struct\s+([_\w][\w\d_]+)\s+\{/
-	    || $ln =~ m/^\s*struct\s+([[_\w][\w\d_]+)$/
-	    || $ln =~ m/^\s*typedef\s*struct\s+([_\w][\w\d_]+)\s+\{/
-	    || $ln =~ m/^\s*typedef\s*struct\s+([[_\w][\w\d_]+)$/
-	    ) {
-		my $s = $1;
-
-		$structs{$s} = "struct :c:type:`$s`\\ ";
-		next;
-	}
-}
-close IN;
-
-#
-# Handle multi-line typedefs
-#
-
-my @matches = ($data =~ m/typedef\s+struct\s+\S+?\s*\{[^\}]+\}\s*(\S+)\s*\;/g,
-	       $data =~ m/typedef\s+enum\s+\S+?\s*\{[^\}]+\}\s*(\S+)\s*\;/g,);
-foreach my $m (@matches) {
-	my $s = $m;
-
-	$typedefs{$s} = "\\ :c:type:`$s`\\ ";
-	next;
-}
-
-#
-# Handle exceptions, if any
-#
-
-my %def_reftype = (
-	"ioctl"   => ":ref",
-	"define"  => ":ref",
-	"symbol"  => ":ref",
-	"typedef" => ":c:type",
-	"enum"    => ":c:type",
-	"struct"  => ":c:type",
-);
-
-if ($file_exceptions) {
-	open IN, $file_exceptions or die "Can't read $file_exceptions";
-	while (<IN>) {
-		next if (m/^\s*$/ || m/^\s*#/);
-
-		# Parsers to ignore a symbol
-
-		if (m/^ignore\s+ioctl\s+(\S+)/) {
-			delete $ioctls{$1} if (exists($ioctls{$1}));
-			next;
-		}
-		if (m/^ignore\s+define\s+(\S+)/) {
-			delete $defines{$1} if (exists($defines{$1}));
-			next;
-		}
-		if (m/^ignore\s+typedef\s+(\S+)/) {
-			delete $typedefs{$1} if (exists($typedefs{$1}));
-			next;
-		}
-		if (m/^ignore\s+enum\s+(\S+)/) {
-			delete $enums{$1} if (exists($enums{$1}));
-			next;
-		}
-		if (m/^ignore\s+struct\s+(\S+)/) {
-			delete $structs{$1} if (exists($structs{$1}));
-			next;
-		}
-		if (m/^ignore\s+symbol\s+(\S+)/) {
-			delete $enum_symbols{$1} if (exists($enum_symbols{$1}));
-			next;
-		}
-
-		# Parsers to replace a symbol
-		my ($type, $old, $new, $reftype);
-
-		if (m/^replace\s+(\S+)\s+(\S+)\s+(\S+)/) {
-			$type = $1;
-			$old = $2;
-			$new = $3;
-		} else {
-			die "Can't parse $file_exceptions: $_";
-		}
-
-		if ($new =~ m/^\:c\:(data|func|macro|type)\:\`(.+)\`/) {
-			$reftype = ":c:$1";
-			$new = $2;
-		} elsif ($new =~ m/\:ref\:\`(.+)\`/) {
-			$reftype = ":ref";
-			$new = $1;
-		} else {
-			$reftype = $def_reftype{$type};
-		}
-		$new = "$reftype:`$old <$new>`";
-
-		if ($type eq "ioctl") {
-			$ioctls{$old} = $new if (exists($ioctls{$old}));
-			next;
-		}
-		if ($type eq "define") {
-			$defines{$old} = $new if (exists($defines{$old}));
-			next;
-		}
-		if ($type eq "symbol") {
-			$enum_symbols{$old} = $new if (exists($enum_symbols{$old}));
-			next;
-		}
-		if ($type eq "typedef") {
-			$typedefs{$old} = $new if (exists($typedefs{$old}));
-			next;
-		}
-		if ($type eq "enum") {
-			$enums{$old} = $new if (exists($enums{$old}));
-			next;
-		}
-		if ($type eq "struct") {
-			$structs{$old} = $new if (exists($structs{$old}));
-			next;
-		}
-
-		die "Can't parse $file_exceptions: $_";
-	}
-}
-
-if ($debug) {
-	print Data::Dumper->Dump([\%ioctls], [qw(*ioctls)]) if (%ioctls);
-	print Data::Dumper->Dump([\%typedefs], [qw(*typedefs)]) if (%typedefs);
-	print Data::Dumper->Dump([\%enums], [qw(*enums)]) if (%enums);
-	print Data::Dumper->Dump([\%structs], [qw(*structs)]) if (%structs);
-	print Data::Dumper->Dump([\%defines], [qw(*defines)]) if (%defines);
-	print Data::Dumper->Dump([\%enum_symbols], [qw(*enum_symbols)]) if (%enum_symbols);
-}
-
-#
-# Align block
-#
-$data = expand($data);
-$data = "    " . $data;
-$data =~ s/\n/\n    /g;
-$data =~ s/\n\s+$/\n/g;
-$data =~ s/\n\s+\n/\n\n/g;
-
-#
-# Add escape codes for special characters
-#
-$data =~ s,([\_\`\*\<\>\&\\\\:\/\|\%\$\#\{\}\~\^]),\\$1,g;
-
-$data =~ s,DEPRECATED,**DEPRECATED**,g;
-
-#
-# Add references
-#
-
-my $start_delim = "[ \n\t\(\=\*\@]";
-my $end_delim = "(\\s|,|\\\\=|\\\\:|\\;|\\\)|\\}|\\{)";
-
-foreach my $r (keys %ioctls) {
-	my $s = $ioctls{$r};
-
-	$r =~ s,([\_\`\*\<\>\&\\\\:\/]),\\\\$1,g;
-
-	print "$r -> $s\n" if ($debug);
-
-	$data =~ s/($start_delim)($r)$end_delim/$1$s$3/g;
-}
-
-foreach my $r (keys %defines) {
-	my $s = $defines{$r};
-
-	$r =~ s,([\_\`\*\<\>\&\\\\:\/]),\\\\$1,g;
-
-	print "$r -> $s\n" if ($debug);
-
-	$data =~ s/($start_delim)($r)$end_delim/$1$s$3/g;
-}
-
-foreach my $r (keys %enum_symbols) {
-	my $s = $enum_symbols{$r};
-
-	$r =~ s,([\_\`\*\<\>\&\\\\:\/]),\\\\$1,g;
-
-	print "$r -> $s\n" if ($debug);
-
-	$data =~ s/($start_delim)($r)$end_delim/$1$s$3/g;
-}
-
-foreach my $r (keys %enums) {
-	my $s = $enums{$r};
-
-	$r =~ s,([\_\`\*\<\>\&\\\\:\/]),\\\\$1,g;
-
-	print "$r -> $s\n" if ($debug);
-
-	$data =~ s/enum\s+($r)$end_delim/$s$2/g;
-}
-
-foreach my $r (keys %structs) {
-	my $s = $structs{$r};
-
-	$r =~ s,([\_\`\*\<\>\&\\\\:\/]),\\\\$1,g;
-
-	print "$r -> $s\n" if ($debug);
-
-	$data =~ s/struct\s+($r)$end_delim/$s$2/g;
-}
-
-foreach my $r (keys %typedefs) {
-	my $s = $typedefs{$r};
-
-	$r =~ s,([\_\`\*\<\>\&\\\\:\/]),\\\\$1,g;
-
-	print "$r -> $s\n" if ($debug);
-	$data =~ s/($start_delim)($r)$end_delim/$1$s$3/g;
-}
-
-$data =~ s/\\ ([\n\s])/\1/g;
-
-#
-# Generate output file
-#
-
-my $title = $file_in;
-$title =~ s,.*/,,;
-
-open OUT, "> $file_out" or die "Can't open $file_out";
-print OUT ".. -*- coding: utf-8; mode: rst -*-\n\n";
-print OUT "$title\n";
-print OUT "=" x length($title);
-print OUT "\n\n.. parsed-literal::\n\n";
-print OUT $data;
-close OUT;
-
-__END__
-
-=head1 NAME
-
-parse_headers.pl - parse a C file, in order to identify functions, structs,
-enums and defines and create cross-references to a Sphinx book.
-
-=head1 SYNOPSIS
-
-B<parse_headers.pl> [<options>] <C_FILE> <OUT_FILE> [<EXCEPTIONS_FILE>]
-
-Where <options> can be: --debug, --help or --man.
-
-=head1 OPTIONS
-
-=over 8
-
-=item B<--debug>
-
-Put the script in verbose mode, useful for debugging.
-
-=item B<--usage>
-
-Prints a brief help message and exits.
-
-=item B<--help>
-
-Prints a more detailed help message and exits.
-
-=back
-
-=head1 DESCRIPTION
-
-Convert a C header or source file (C_FILE), into a ReStructured Text
-included via ..parsed-literal block with cross-references for the
-documentation files that describe the API. It accepts an optional
-EXCEPTIONS_FILE with describes what elements will be either ignored or
-be pointed to a non-default reference.
-
-The output is written at the (OUT_FILE).
-
-It is capable of identifying defines, functions, structs, typedefs,
-enums and enum symbols and create cross-references for all of them.
-It is also capable of distinguish #define used for specifying a Linux
-ioctl.
-
-The EXCEPTIONS_FILE contain two rules to allow ignoring a symbol or
-to replace the default references by a custom one.
-
-Please read Documentation/doc-guide/parse-headers.rst at the Kernel's
-tree for more details.
-
-=head1 BUGS
-
-Report bugs to Mauro Carvalho Chehab <mchehab@kernel.org>
-
-=head1 COPYRIGHT
-
-Copyright (c) 2016 by Mauro Carvalho Chehab <mchehab+samsung@kernel.org>.
-
-License GPLv2: GNU GPL version 2 <http://gnu.org/licenses/gpl.html>.
-
-This is free software: you are free to change and redistribute it.
-There is NO WARRANTY, to the extent permitted by law.
-
-=cut
diff --git a/Documentation/sphinx/requirements.txt b/Documentation/sphinx/requirements.txt
deleted file mode 100644
index 742be3e..0000000
--- a/Documentation/sphinx/requirements.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-docutils==0.12
-Sphinx==1.4.9
-sphinx_rtd_theme
diff --git a/Documentation/sphinx/rstFlatTable.py b/Documentation/sphinx/rstFlatTable.py
deleted file mode 100755
index 25feb0d..0000000
--- a/Documentation/sphinx/rstFlatTable.py
+++ /dev/null
@@ -1,376 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8; mode: python -*-
-# pylint: disable=C0330, R0903, R0912
-
-u"""
-    flat-table
-    ~~~~~~~~~~
-
-    Implementation of the ``flat-table`` reST-directive.
-
-    :copyright:  Copyright (C) 2016  Markus Heiser
-    :license:    GPL Version 2, June 1991 see linux/COPYING for details.
-
-    The ``flat-table`` (:py:class:`FlatTable`) is a double-stage list similar to
-    the ``list-table`` with some additional features:
-
-    * *column-span*: with the role ``cspan`` a cell can be extended through
-      additional columns
-
-    * *row-span*: with the role ``rspan`` a cell can be extended through
-      additional rows
-
-    * *auto span* rightmost cell of a table row over the missing cells on the
-      right side of that table-row.  With Option ``:fill-cells:`` this behavior
-      can changed from *auto span* to *auto fill*, which automaticly inserts
-      (empty) cells instead of spanning the last cell.
-
-    Options:
-
-    * header-rows:   [int] count of header rows
-    * stub-columns:  [int] count of stub columns
-    * widths:        [[int] [int] ... ] widths of columns
-    * fill-cells:    instead of autospann missing cells, insert missing cells
-
-    roles:
-
-    * cspan: [int] additionale columns (*morecols*)
-    * rspan: [int] additionale rows (*morerows*)
-"""
-
-# ==============================================================================
-# imports
-# ==============================================================================
-
-import sys
-
-from docutils import nodes
-from docutils.parsers.rst import directives, roles
-from docutils.parsers.rst.directives.tables import Table
-from docutils.utils import SystemMessagePropagation
-
-# ==============================================================================
-# common globals
-# ==============================================================================
-
-# The version numbering follows numbering of the specification
-# (Documentation/books/kernel-doc-HOWTO).
-__version__  = '1.0'
-
-PY3 = sys.version_info[0] == 3
-PY2 = sys.version_info[0] == 2
-
-if PY3:
-    # pylint: disable=C0103, W0622
-    unicode     = str
-    basestring  = str
-
-# ==============================================================================
-def setup(app):
-# ==============================================================================
-
-    app.add_directive("flat-table", FlatTable)
-    roles.register_local_role('cspan', c_span)
-    roles.register_local_role('rspan', r_span)
-
-    return dict(
-        version = __version__,
-        parallel_read_safe = True,
-        parallel_write_safe = True
-    )
-
-# ==============================================================================
-def c_span(name, rawtext, text, lineno, inliner, options=None, content=None):
-# ==============================================================================
-    # pylint: disable=W0613
-
-    options  = options if options is not None else {}
-    content  = content if content is not None else []
-    nodelist = [colSpan(span=int(text))]
-    msglist  = []
-    return nodelist, msglist
-
-# ==============================================================================
-def r_span(name, rawtext, text, lineno, inliner, options=None, content=None):
-# ==============================================================================
-    # pylint: disable=W0613
-
-    options  = options if options is not None else {}
-    content  = content if content is not None else []
-    nodelist = [rowSpan(span=int(text))]
-    msglist  = []
-    return nodelist, msglist
-
-
-# ==============================================================================
-class rowSpan(nodes.General, nodes.Element): pass # pylint: disable=C0103,C0321
-class colSpan(nodes.General, nodes.Element): pass # pylint: disable=C0103,C0321
-# ==============================================================================
-
-# ==============================================================================
-class FlatTable(Table):
-# ==============================================================================
-
-    u"""FlatTable (``flat-table``) directive"""
-
-    option_spec = {
-        'name': directives.unchanged
-        , 'class': directives.class_option
-        , 'header-rows': directives.nonnegative_int
-        , 'stub-columns': directives.nonnegative_int
-        , 'widths': directives.positive_int_list
-        , 'fill-cells' : directives.flag }
-
-    def run(self):
-
-        if not self.content:
-            error = self.state_machine.reporter.error(
-                'The "%s" directive is empty; content required.' % self.name,
-                nodes.literal_block(self.block_text, self.block_text),
-                line=self.lineno)
-            return [error]
-
-        title, messages = self.make_title()
-        node = nodes.Element()          # anonymous container for parsing
-        self.state.nested_parse(self.content, self.content_offset, node)
-
-        tableBuilder = ListTableBuilder(self)
-        tableBuilder.parseFlatTableNode(node)
-        tableNode = tableBuilder.buildTableNode()
-        # SDK.CONSOLE()  # print --> tableNode.asdom().toprettyxml()
-        if title:
-            tableNode.insert(0, title)
-        return [tableNode] + messages
-
-
-# ==============================================================================
-class ListTableBuilder(object):
-# ==============================================================================
-
-    u"""Builds a table from a double-stage list"""
-
-    def __init__(self, directive):
-        self.directive = directive
-        self.rows      = []
-        self.max_cols  = 0
-
-    def buildTableNode(self):
-
-        colwidths    = self.directive.get_column_widths(self.max_cols)
-        if isinstance(colwidths, tuple):
-            # Since docutils 0.13, get_column_widths returns a (widths,
-            # colwidths) tuple, where widths is a string (i.e. 'auto').
-            # See https://sourceforge.net/p/docutils/patches/120/.
-            colwidths = colwidths[1]
-        stub_columns = self.directive.options.get('stub-columns', 0)
-        header_rows  = self.directive.options.get('header-rows', 0)
-
-        table = nodes.table()
-        tgroup = nodes.tgroup(cols=len(colwidths))
-        table += tgroup
-
-
-        for colwidth in colwidths:
-            colspec = nodes.colspec(colwidth=colwidth)
-            # FIXME: It seems, that the stub method only works well in the
-            # absence of rowspan (observed by the html buidler, the docutils-xml
-            # build seems OK).  This is not extraordinary, because there exists
-            # no table directive (except *this* flat-table) which allows to
-            # define coexistent of rowspan and stubs (there was no use-case
-            # before flat-table). This should be reviewed (later).
-            if stub_columns:
-                colspec.attributes['stub'] = 1
-                stub_columns -= 1
-            tgroup += colspec
-        stub_columns = self.directive.options.get('stub-columns', 0)
-
-        if header_rows:
-            thead = nodes.thead()
-            tgroup += thead
-            for row in self.rows[:header_rows]:
-                thead += self.buildTableRowNode(row)
-
-        tbody = nodes.tbody()
-        tgroup += tbody
-
-        for row in self.rows[header_rows:]:
-            tbody += self.buildTableRowNode(row)
-        return table
-
-    def buildTableRowNode(self, row_data, classes=None):
-        classes = [] if classes is None else classes
-        row = nodes.row()
-        for cell in row_data:
-            if cell is None:
-                continue
-            cspan, rspan, cellElements = cell
-
-            attributes = {"classes" : classes}
-            if rspan:
-                attributes['morerows'] = rspan
-            if cspan:
-                attributes['morecols'] = cspan
-            entry = nodes.entry(**attributes)
-            entry.extend(cellElements)
-            row += entry
-        return row
-
-    def raiseError(self, msg):
-        error =  self.directive.state_machine.reporter.error(
-            msg
-            , nodes.literal_block(self.directive.block_text
-                                  , self.directive.block_text)
-            , line = self.directive.lineno )
-        raise SystemMessagePropagation(error)
-
-    def parseFlatTableNode(self, node):
-        u"""parses the node from a :py:class:`FlatTable` directive's body"""
-
-        if len(node) != 1 or not isinstance(node[0], nodes.bullet_list):
-            self.raiseError(
-                'Error parsing content block for the "%s" directive: '
-                'exactly one bullet list expected.' % self.directive.name )
-
-        for rowNum, rowItem in enumerate(node[0]):
-            row = self.parseRowItem(rowItem, rowNum)
-            self.rows.append(row)
-        self.roundOffTableDefinition()
-
-    def roundOffTableDefinition(self):
-        u"""Round off the table definition.
-
-        This method rounds off the table definition in :py:member:`rows`.
-
-        * This method inserts the needed ``None`` values for the missing cells
-        arising from spanning cells over rows and/or columns.
-
-        * recount the :py:member:`max_cols`
-
-        * Autospan or fill (option ``fill-cells``) missing cells on the right
-          side of the table-row
-        """
-
-        y = 0
-        while y < len(self.rows):
-            x = 0
-
-            while x < len(self.rows[y]):
-                cell = self.rows[y][x]
-                if cell is None:
-                    x += 1
-                    continue
-                cspan, rspan = cell[:2]
-                # handle colspan in current row
-                for c in range(cspan):
-                    try:
-                        self.rows[y].insert(x+c+1, None)
-                    except: # pylint: disable=W0702
-                        # the user sets ambiguous rowspans
-                        pass # SDK.CONSOLE()
-                # handle colspan in spanned rows
-                for r in range(rspan):
-                    for c in range(cspan + 1):
-                        try:
-                            self.rows[y+r+1].insert(x+c, None)
-                        except: # pylint: disable=W0702
-                            # the user sets ambiguous rowspans
-                            pass # SDK.CONSOLE()
-                x += 1
-            y += 1
-
-        # Insert the missing cells on the right side. For this, first
-        # re-calculate the max columns.
-
-        for row in self.rows:
-            if self.max_cols < len(row):
-                self.max_cols = len(row)
-
-        # fill with empty cells or cellspan?
-
-        fill_cells = False
-        if 'fill-cells' in self.directive.options:
-            fill_cells = True
-
-        for row in self.rows:
-            x =  self.max_cols - len(row)
-            if x and not fill_cells:
-                if row[-1] is None:
-                    row.append( ( x - 1, 0, []) )
-                else:
-                    cspan, rspan, content = row[-1]
-                    row[-1] = (cspan + x, rspan, content)
-            elif x and fill_cells:
-                for i in range(x):
-                    row.append( (0, 0, nodes.comment()) )
-
-    def pprint(self):
-        # for debugging
-        retVal = "[   "
-        for row in self.rows:
-            retVal += "[ "
-            for col in row:
-                if col is None:
-                    retVal += ('%r' % col)
-                    retVal += "\n    , "
-                else:
-                    content = col[2][0].astext()
-                    if len (content) > 30:
-                        content = content[:30] + "..."
-                    retVal += ('(cspan=%s, rspan=%s, %r)'
-                               % (col[0], col[1], content))
-                    retVal += "]\n    , "
-            retVal = retVal[:-2]
-            retVal += "]\n  , "
-        retVal = retVal[:-2]
-        return retVal + "]"
-
-    def parseRowItem(self, rowItem, rowNum):
-        row = []
-        childNo = 0
-        error   = False
-        cell    = None
-        target  = None
-
-        for child in rowItem:
-            if (isinstance(child , nodes.comment)
-                or isinstance(child, nodes.system_message)):
-                pass
-            elif isinstance(child , nodes.target):
-                target = child
-            elif isinstance(child, nodes.bullet_list):
-                childNo += 1
-                cell = child
-            else:
-                error = True
-                break
-
-        if childNo != 1 or error:
-            self.raiseError(
-                'Error parsing content block for the "%s" directive: '
-                'two-level bullet list expected, but row %s does not '
-                'contain a second-level bullet list.'
-                % (self.directive.name, rowNum + 1))
-
-        for cellItem in cell:
-            cspan, rspan, cellElements = self.parseCellItem(cellItem)
-            if target is not None:
-                cellElements.insert(0, target)
-            row.append( (cspan, rspan, cellElements) )
-        return row
-
-    def parseCellItem(self, cellItem):
-        # search and remove cspan, rspan colspec from the first element in
-        # this listItem (field).
-        cspan = rspan = 0
-        if not len(cellItem):
-            return cspan, rspan, []
-        for elem in cellItem[0]:
-            if isinstance(elem, colSpan):
-                cspan = elem.get("span")
-                elem.parent.remove(elem)
-                continue
-            if isinstance(elem, rowSpan):
-                rspan = elem.get("span")
-                elem.parent.remove(elem)
-                continue
-        return cspan, rspan, cellItem[:]
diff --git a/Kbuild b/Kbuild
index e2e3b29..ef97787 100644
--- a/Kbuild
+++ b/Kbuild
@@ -4,47 +4,39 @@
 # 1) Generate generic-asm-offsets.h
 # 2) Generate asm-offsets.h
 
-# Default sed regexp - multiline due to syntax constraints
-define sed-y
-	"s:[[:space:]]*\.ascii[[:space:]]*\"\(.*\)\":\1:; \
-	/^->/{s:->#\(.*\):/* \1 */:; \
-	s:^->\([^ ]*\) [\$$#]*\([-0-9]*\) \(.*\):#define \1 \2 /* \3 */:; \
-	s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; \
-	s:->::; p;}"
-endef
-
-# Use filechk to avoid rebuilds when a header changes, but the resulting file
-# does not
-define filechk_offsets
-	(set -e; \
-	 echo "#ifndef $2"; \
-	 echo "#define $2"; \
-	 echo "/*"; \
-	 echo " * DO NOT MODIFY."; \
-	 echo " *"; \
-	 echo " * This file was generated by Kbuild"; \
-	 echo " */"; \
-	 echo ""; \
-	 sed -ne $(sed-y); \
-	 echo ""; \
-	 echo "#endif" )
-endef
-
 #####
 # 1) Generate generic-asm-offsets.h
 
 generic-offsets-file := include/generated/generic-asm-offsets.h
 
 always  := $(generic-offsets-file)
-targets := lib/asm-offsets.s
+targets := $(generic-offsets-file) lib/asm-offsets.s
+
+quiet_cmd_generic-offsets = GEN     $@
+define cmd_generic-offsets
+	(set -e; \
+	 echo "#ifndef __GENERIC_ASM_OFFSETS_H__"; \
+	 echo "#define __GENERIC_ASM_OFFSETS_H__"; \
+	 echo "/*"; \
+	 echo " * DO NOT MODIFY."; \
+	 echo " *"; \
+	 echo " * This file was generated by Kbuild"; \
+	 echo " *"; \
+	 echo " */"; \
+	 echo ""; \
+	 sed -ne $(sed-y) $<; \
+	 echo ""; \
+	 echo "#endif" ) > $@
+endef
 
 # We use internal kbuild rules to avoid the "is up to date" message from make
 lib/asm-offsets.s: lib/asm-offsets.c FORCE
 	$(Q)mkdir -p $(dir $@)
 	$(call if_changed_dep,cc_s_c)
 
-$(obj)/$(generic-offsets-file): lib/asm-offsets.s FORCE
-	$(call filechk,offsets,__GENERIC_ASM_OFFSETS_H__)
+$(obj)/$(generic-offsets-file): lib/asm-offsets.s Kbuild
+	$(Q)mkdir -p $(dir $@)
+	$(call cmd,generic-offsets)
 
 #####
 # 2) Generate asm-offsets.h
@@ -55,14 +47,42 @@
 endif
 
 always  += $(offsets-file)
+targets += $(offsets-file)
 targets += arch/$(ARCH)/lib/asm-offsets.s
 
+
+# Default sed regexp - multiline due to syntax constraints
+define sed-y
+	"s:[[:space:]]*\.ascii[[:space:]]*\"\(.*\)\":\1:; \
+	/^->/{s:->#\(.*\):/* \1 */:; \
+	s:^->\([^ ]*\) [\$$#]*\([-0-9]*\) \(.*\):#define \1 \2 /* \3 */:; \
+	s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; \
+	s:->::; p;}"
+endef
+
 CFLAGS_asm-offsets.o := -DDO_DEPS_ONLY
 
+quiet_cmd_offsets = GEN     $@
+define cmd_offsets
+	(set -e; \
+	 echo "#ifndef __ASM_OFFSETS_H__"; \
+	 echo "#define __ASM_OFFSETS_H__"; \
+	 echo "/*"; \
+	 echo " * DO NOT MODIFY."; \
+	 echo " *"; \
+	 echo " * This file was generated by Kbuild"; \
+	 echo " *"; \
+	 echo " */"; \
+	 echo ""; \
+	 sed -ne $(sed-y) $<; \
+	 echo ""; \
+	 echo "#endif" ) > $@
+endef
+
 # We use internal kbuild rules to avoid the "is up to date" message from make
 arch/$(ARCH)/lib/asm-offsets.s: arch/$(ARCH)/lib/asm-offsets.c FORCE
 	$(Q)mkdir -p $(dir $@)
 	$(call if_changed_dep,cc_s_c)
 
-$(obj)/$(offsets-file): arch/$(ARCH)/lib/asm-offsets.s FORCE
-	$(call filechk,offsets,__ASM_OFFSETS_H__)
+$(obj)/$(offsets-file): arch/$(ARCH)/lib/asm-offsets.s Kbuild
+	$(call cmd,offsets)
diff --git a/Kconfig b/Kconfig
index d424d6e..60cf1dd 100644
--- a/Kconfig
+++ b/Kconfig
@@ -1,7 +1,6 @@
 #
 # For a description of the syntax of this configuration file,
-# see the file Documentation/kbuild/kconfig-language.txt in the
-# Linux kernel source tree.
+# see Documentation/kbuild/kconfig-language.txt.
 #
 mainmenu "U-Boot $UBOOTVERSION Configuration"
 
@@ -9,22 +8,18 @@
 	string
 	option env="UBOOTVERSION"
 
-# Allow defaults in arch-specific code to override any given here
-source "arch/Kconfig"
+config KCONFIG_OBJDIR
+	string
+	option env="KCONFIG_OBJDIR"
 
 menu "General setup"
 
-config BROKEN
-	bool
-	help
-	  This option cannot be enabled. It is used as dependency
-	  for broken and incomplete features.
-
 config LOCALVERSION
 	string "Local version - append to U-Boot release"
+	depends on !SPL_BUILD
 	help
 	  Append an extra string to the end of your U-Boot version.
-	  This will show up in your boot log, for example.
+	  This will show up on your boot log, for example.
 	  The string you set here will be appended after the contents of
 	  any files with a filename matching localversion* in your
 	  object and source tree, in that order.  Your total string can
@@ -32,14 +27,15 @@
 
 config LOCALVERSION_AUTO
 	bool "Automatically append version information to the version string"
+	depends on !SPL_BUILD
 	default y
 	help
 	  This will try to automatically determine if the current tree is a
-	  release tree by looking for Git tags that belong to the current
+	  release tree by looking for git tags that belong to the current
 	  top of tree revision.
 
 	  A string of the format -gxxxxxxxx will be added to the localversion
-	  if a Git-based tree is found.  The string generated by this will be
+	  if a git-based tree is found.  The string generated by this will be
 	  appended after any matching localversion* files, and after the value
 	  set in CONFIG_LOCALVERSION.
 
@@ -52,6 +48,7 @@
 
 config CC_OPTIMIZE_FOR_SIZE
 	bool "Optimize for size"
+	depends on !SPL_BUILD
 	default y
 	help
 	  Enabling this option will pass "-Os" instead of "-O2" to gcc
@@ -59,422 +56,76 @@
 
 	  This option is enabled by default for U-Boot.
 
-config CC_COVERAGE
-	bool "Enable code coverage analysis"
-	depends on SANDBOX
-	help
-	  Enabling this option will pass "--coverage" to gcc to compile
-	  and link code instrumented for coverage analysis.
-
-config DISTRO_DEFAULTS
-	bool "Select defaults suitable for booting general purpose Linux distributions"
-	select AUTO_COMPLETE
-	select CMDLINE_EDITING
-	select CMD_BOOTZ if ARM && !ARM64
-	select CMD_DHCP if CMD_NET
-	select CMD_ENV_EXISTS
-	select CMD_EXT4
-	select CMD_FAT
-	select CMD_PING if CMD_NET
-	select ENV_VARS_UBOOT_CONFIG
-	select HUSH_PARSER
-	select SUPPORT_RAW_INITRD
-	select SYS_LONGHELP
-	imply CMD_MII if NET
-	imply USB_STORAGE
-	imply USE_BOOTCOMMAND
-	help
-	  Select this to enable various options and commands which are suitable
-	  for building u-boot for booting general purpose Linux distributions.
-
-config ENV_VARS_UBOOT_CONFIG
-	bool "Add arch, board, vendor and soc variables to default environment"
-	help
-	  Define this in order to add variables describing the
-	  U-Boot build configuration to the default environment.
-	  These will be named arch, cpu, board, vendor, and soc.
-	  Enabling this option will cause the following to be defined:
-	  - CONFIG_SYS_ARCH
-	  - CONFIG_SYS_CPU
-	  - CONFIG_SYS_BOARD
-	  - CONFIG_SYS_VENDOR
-	  - CONFIG_SYS_SOC
-
-config NR_DRAM_BANKS
-	int "Number of DRAM banks"
-	default 4
-	help
-	  This defines the number of DRAM banks.
-
-config SYS_BOOT_GET_CMDLINE
-	bool "Enable kernel command line setup"
-	help
-	  Enables allocating and saving kernel cmdline in space between
-	  "bootm_low" and "bootm_low" + BOOTMAPSZ.
-
-config SYS_BOOT_GET_KBD
-	bool "Enable kernel board information setup"
-	help
-	  Enables allocating and saving a kernel copy of the bd_info in
-	  space between "bootm_low" and "bootm_low" + BOOTMAPSZ.
-
-config SYS_MALLOC_F
-	bool "Enable malloc() pool before relocation"
-	default y if DM
-
-	help
-	  Before relocation, memory is very limited on many platforms. Still,
-	  we can provide a small malloc() pool if needed. Driver model in
-	  particular needs this to operate, so that it can allocate the
-	  initial serial device and any others that are needed.
-
-config SYS_MALLOC_F_LEN
-	hex "Size of malloc() pool before relocation"
-	depends on SYS_MALLOC_F
-	default 0x1000 if AM33XX
-	default 0x2800 if SANDBOX
-	default 0x400
-	help
-	  Before relocation, memory is very limited on many platforms. Still,
-	  we can provide a small malloc() pool if needed. Driver model in
-	  particular needs this to operate, so that it can allocate the
-	  initial serial device and any others that are needed.
-
-config SYS_MALLOC_LEN
-	hex "Define memory for Dynamic allocation"
-	depends on ARCH_ZYNQ || ARCH_VERSAL
-	help
-	  This defines memory to be allocated for Dynamic allocation
-	  TODO: Use for other architectures
-
-config SPL_SYS_MALLOC_F_LEN
-	hex "Size of malloc() pool in SPL before relocation"
-	depends on SYS_MALLOC_F
-	default SYS_MALLOC_F_LEN
-	help
-	  Before relocation, memory is very limited on many platforms. Still,
-	  we can provide a small malloc() pool if needed. Driver model in
-	  particular needs this to operate, so that it can allocate the
-	  initial serial device and any others that are needed.
-
-config TPL_SYS_MALLOC_F_LEN
-	hex "Size of malloc() pool in TPL before relocation"
-	depends on SYS_MALLOC_F
-	default SYS_MALLOC_F_LEN
-	help
-	  Before relocation, memory is very limited on many platforms. Still,
-	  we can provide a small malloc() pool if needed. Driver model in
-	  particular needs this to operate, so that it can allocate the
-	  initial serial device and any others that are needed.
-
 menuconfig EXPERT
-	bool "Configure standard U-Boot features (expert users)"
-	default y
-	help
-	  This option allows certain base U-Boot options and settings
-	  to be disabled or tweaked. This is for specialized
-	  environments which can tolerate a "non-standard" U-Boot.
-	  Use this only if you really know what you are doing.
-
-if EXPERT
-	config SYS_MALLOC_CLEAR_ON_INIT
-	bool "Init with zeros the memory reserved for malloc (slow)"
-	default y
-	help
-	  This setting is enabled by default. The reserved malloc
-	  memory is initialized with zeros, so first malloc calls
-	  will return the pointer to the zeroed memory. But this
-	  slows the boot time.
-
-	  It is recommended to disable it, when CONFIG_SYS_MALLOC_LEN
-	  value, has more than few MiB, e.g. when uses bzip2 or bmp logo.
-	  Then the boot time can be significantly reduced.
-	  Warning:
-	  When disabling this, please check if malloc calls, maybe
-	  should be replaced by calloc - if one expects zeroed memory.
-
-config TOOLS_DEBUG
-	bool "Enable debug information for tools"
-	help
-	  Enable generation of debug information for tools such as mkimage.
-	  This can be used for debugging purposes. With debug information
-	  it is possible to set breakpoints on particular lines, single-step
-	  debug through the source code, etc.
-
-endif # EXPERT
-
-config PHYS_64BIT
-	bool "64bit physical address support"
-	help
-	  Say Y here to support 64bit physical memory address.
-	  This can be used not only for 64bit SoCs, but also for
-	  large physical address extention on 32bit SoCs.
-
-config BUILD_ROM
-	bool "Build U-Boot as BIOS replacement"
-	depends on X86
-	help
-	  This option allows to build a ROM version of U-Boot.
-	  The build process generally requires several binary blobs
-	  which are not shipped in the U-Boot source tree.
-	  Please, see doc/README.x86 for details.
+        bool "Configure standard U-Boot features (expert users)"
+        help
+          This option allows certain base U-Boot options and settings
+          to be disabled or tweaked. This is for specialized
+          environments which can tolerate a "non-standard" U-Boot.
+          Only use this if you really know what you are doing.
 
 endmenu		# General setup
 
 menu "Boot images"
 
-config ANDROID_BOOT_IMAGE
-	bool "Enable support for Android Boot Images"
-	default y if FASTBOOT
+config SPL_BUILD
+	bool
+	depends on $KCONFIG_OBJDIR="spl" || $KCONFIG_OBJDIR="tpl"
+	default y
+
+config TPL_BUILD
+	bool
+	depends on $KCONFIG_OBJDIR="tpl"
+	default y
+
+config SUPPORT_SPL
+	bool
+
+config SUPPORT_TPL
+	bool
+
+config SPL
+	bool
+	depends on SUPPORT_SPL
+	prompt "Enable SPL" if !SPL_BUILD
+	default y if SPL_BUILD
 	help
-	  This enables support for booting images which use the Android
-	  image format header.
+	  If you want to build SPL as well as the normal image, say Y.
+
+config TPL
+	bool
+	depends on SPL && SUPPORT_TPL
+	prompt "Enable TPL" if !SPL_BUILD
+	default y if TPL_BUILD
+	default n
+	help
+	  If you want to build TPL as well as the normal image and SPL, say Y.
 
 config FIT
 	bool "Support Flattened Image Tree"
-	select MD5
-	select SHA1
+	depends on !SPL_BUILD
 	help
-	  This option allows you to boot the new uImage structure,
+	  This option allows to boot the new uImage structrure,
 	  Flattened Image Tree.  FIT is formally a FDT, which can include
 	  images of various types (kernel, FDT blob, ramdisk, etc.)
 	  in a single blob.  To boot this new uImage structure,
-	  pass the address of the blob to the "bootm" command.
-	  FIT is very flexible, supporting compression, multiple images,
-	  multiple configurations, verification through hashing and also
-	  verified boot (secure boot using RSA).
-
-if FIT
-
-config FIT_EXTERNAL_OFFSET
-	hex "Text Base"
-	default 0x0
-	help
-	  This specifies a data offset in fit image.
-	  The offset is from data payload offset to the beginning of
-	  fit image header. When specifies a offset, specific data
-	  could be put in the hole between data payload and fit image
-	  header, such as CSF data on i.MX platform.
-
-config FIT_ENABLE_SHA256_SUPPORT
-	bool "Support SHA256 checksum of FIT image contents"
-	default y
-	select SHA256
-	help
-	  Enable this to support SHA256 checksum of FIT image contents. A
-	  SHA256 checksum is a 256-bit (32-byte) hash value used to check that
-	  the image contents have not been corrupted. SHA256 is recommended
-	  for use in secure applications since (as at 2016) there is no known
-	  feasible attack that could produce a 'collision' with differing
-	  input data. Use this for the highest security. Note that only the
-	  SHA256 variant is supported: SHA512 and others are not currently
-	  supported in U-Boot.
-
-config FIT_FULL_CHECK
-	bool "Do a full check of the FIT before using it"
-	default y
-	help
-	  Enable this do a full check of the FIT to make sure it is valid. This
-	  helps to protect against carefully crafted FITs which take advantage
-	  of bugs or omissions in the code. This includes a bad structure,
-	  multiple root nodes and the like.
-
-config FIT_SIGNATURE
-	bool "Enable signature verification of FIT uImages"
-	depends on DM
-	select HASH
-	select FIT_FULL_CHECK
-	select RSA
-	help
-	  This option enables signature verification of FIT uImages,
-	  using a hash signed and verified using RSA. If
-	  CONFIG_SHA_PROG_HW_ACCEL is defined, i.e support for progressive
-	  hashing is available using hardware, then the RSA library will use
-	  it. See doc/uImage.FIT/signature.txt for more details.
-
-	  WARNING: When relying on signed FIT images with a required signature
-	  check the legacy image format is disabled by default, so that
-	  unsigned images cannot be loaded. If a board needs the legacy image
-	  format support in this case, enable it using
-	  CONFIG_IMAGE_FORMAT_LEGACY.
-
-config FIT_SIGNATURE_MAX_SIZE
-	hex "Max size of signed FIT structures"
-	depends on FIT_SIGNATURE
-	default 0x10000000
-	help
-	  This option sets a max size in bytes for verified FIT uImages.
-	  A sane value of 256MB protects corrupted DTB structures from overlapping
-	  device memory. Assure this size does not extend past expected storage
-	  space.
-
-config FIT_ENABLE_RSASSA_PSS_SUPPORT
-	bool "Support rsassa-pss signature scheme of FIT image contents"
-	depends on FIT_SIGNATURE
-	default n
-	help
-	  Enable this to support the pss padding algorithm as described
-	  in the rfc8017 (https://tools.ietf.org/html/rfc8017).
+	  pass the the address of the blob to the "bootm" command.
 
 config FIT_VERBOSE
-	bool "Show verbose messages when FIT images fail"
+	bool "Display verbose messages on FIT boot"
+	depends on FIT
+
+config FIT_SIGNATURE
+	bool "Enabel signature verification of FIT uImages"
+	depends on FIT
 	help
-	  Generally a system will have valid FIT images so debug messages
-	  are a waste of code space. If you are debugging your images then
-	  you can enable this option to get more verbose information about
-	  failures.
-
-config FIT_BEST_MATCH
-	bool "Select the best match for the kernel device tree"
-	help
-	  When no configuration is explicitly selected, default to the
-	  one whose fdt's compatibility field best matches that of
-	  U-Boot itself. A match is considered "best" if it matches the
-	  most specific compatibility entry of U-Boot's fdt's root node.
-	  The order of entries in the configuration's fdt is ignored.
-
-config FIT_IMAGE_POST_PROCESS
-	bool "Enable post-processing of FIT artifacts after loading by U-Boot"
-	depends on TI_SECURE_DEVICE
-	help
-	  Allows doing any sort of manipulation to blobs after they got extracted
-	  from FIT images like stripping off headers or modifying the size of the
-	  blob, verification, authentication, decryption etc. in a platform or
-	  board specific way. In order to use this feature a platform or board-
-	  specific implementation of board_fit_image_post_process() must be
-	  provided. Also, anything done during this post-processing step would
-	  need to be comprehended in how the images were prepared before being
-	  injected into the FIT creation (i.e. the blobs would have been pre-
-	  processed before being added to the FIT image).
-
-if SPL
-
-config SPL_FIT
-	bool "Support Flattened Image Tree within SPL"
-	depends on SPL
-	select SPL_OF_LIBFDT
-
-config SPL_FIT_PRINT
-	bool "Support FIT printing within SPL"
-	depends on SPL_FIT
-	help
-	  Support printing the content of the fitImage in a verbose manner in SPL.
-
-config SPL_FIT_FULL_CHECK
-	bool "Do a full check of the FIT before using it"
-	help
-	  Enable this do a full check of the FIT to make sure it is valid. This
-	  helps to protect against carefully crafted FITs which take advantage
-	  of bugs or omissions in the code. This includes a bad structure,
-	  multiple root nodes and the like.
-
-
-config SPL_FIT_SIGNATURE
-	bool "Enable signature verification of FIT firmware within SPL"
-	depends on SPL_DM
-	select SPL_FIT
-	select SPL_RSA
-	select SPL_FIT_FULL_CHECK
-
-config SPL_LOAD_FIT
-	bool "Enable SPL loading U-Boot as a FIT"
-	select SPL_FIT
-	help
-	  Normally with the SPL framework a legacy image is generated as part
-	  of the build. This contains U-Boot along with information as to
-	  where it should be loaded. This option instead enables generation
-	  of a FIT (Flat Image Tree) which provides more flexibility. In
-	  particular it can handle selecting from multiple device tree
-	  and passing the correct one to U-Boot.
-
-config SPL_LOAD_FIT_FULL
-	bool "Enable SPL loading U-Boot as a FIT"
-	select SPL_FIT
-	help
-	  Normally with the SPL framework a legacy image is generated as part
-	  of the build. This contains U-Boot along with information as to
-	  where it should be loaded. This option instead enables generation
-	  of a FIT (Flat Image Tree) which provides more flexibility. In
-	  particular it can handle selecting from multiple device tree
-	  and passing the correct one to U-Boot.
-
-config SPL_FIT_IMAGE_POST_PROCESS
-	bool "Enable post-processing of FIT artifacts after loading by the SPL"
-	depends on SPL_LOAD_FIT
-	help
-	  Allows doing any sort of manipulation to blobs after they got extracted
-	  from the U-Boot FIT image like stripping off headers or modifying the
-	  size of the blob, verification, authentication, decryption etc. in a
-	  platform or board specific way. In order to use this feature a platform
-	  or board-specific implementation of board_fit_image_post_process() must
-	  be provided. Also, anything done during this post-processing step would
-	  need to be comprehended in how the images were prepared before being
-	  injected into the FIT creation (i.e. the blobs would have been pre-
-	  processed before being added to the FIT image).
-
-config SPL_FIT_SOURCE
-	string ".its source file for U-Boot FIT image"
-	depends on SPL_FIT
-	help
-	  Specifies a (platform specific) FIT source file to generate the
-	  U-Boot FIT image. This could specify further image to load and/or
-	  execute.
-
-config SPL_FIT_GENERATOR
-	string ".its file generator script for U-Boot FIT image"
-	depends on SPL_FIT
-	default "board/sunxi/mksunxi_fit_atf.sh" if SPL_LOAD_FIT && ARCH_SUNXI
-	help
-	  Specifies a (platform specific) script file to generate the FIT
-	  source file used to build the U-Boot FIT image file. This gets
-	  passed a list of supported device tree file stub names to
-	  include in the generated image.
-
-endif # SPL
-
-endif # FIT
-
-config IMAGE_FORMAT_LEGACY
-	bool "Enable support for the legacy image format"
-	default y if !FIT_SIGNATURE
-	help
-	  This option enables the legacy image format. It is enabled by
-	  default for backward compatibility, unless FIT_SIGNATURE is
-	  set where it is disabled so that unsigned images cannot be
-	  loaded. If a board needs the legacy image format support in this
-	  case, enable it here.
-
-config OF_BOARD_SETUP
-	bool "Set up board-specific details in device tree before boot"
-	depends on OF_LIBFDT
-	help
-	  This causes U-Boot to call ft_board_setup() before booting into
-	  the Operating System. This function can set up various
-	  board-specific information in the device tree for use by the OS.
-	  The device tree is then passed to the OS.
-
-config OF_SYSTEM_SETUP
-	bool "Set up system-specific details in device tree before boot"
-	depends on OF_LIBFDT
-	help
-	  This causes U-Boot to call ft_system_setup() before booting into
-	  the Operating System. This function can set up various
-	  system-specific information in the device tree for use by the OS.
-	  The device tree is then passed to the OS.
-
-config OF_STDOUT_VIA_ALIAS
-	bool "Update the device-tree stdout alias from U-Boot"
-	depends on OF_LIBFDT
-	help
-	  This uses U-Boot's serial alias from the aliases node to update
-	  the device tree passed to the OS. The "linux,stdout-path" property
-	  in the chosen node is set to point to the correct serial node.
-	  This option currently references CONFIG_CONS_INDEX, which is
-	  incorrect when used with device tree as this option does not
-	  exist / should not be used.
+	  This option enables signature verification of FIT uImages,
+	  using a hash signed and verified using RSA.
+	  See doc/uImage.FIT/signature.txt for more details.
 
 config SYS_EXTRA_OPTIONS
 	string "Extra Options (DEPRECATED)"
+	depends on !SPL_BUILD
 	help
 	  The old configuration infrastructure (= mkconfig + boards.cfg)
 	  provided the extra options field. If you have something like
@@ -487,46 +138,19 @@
 	  new boards should not use this option.
 
 config SYS_TEXT_BASE
-	depends on !NIOS2 && !XTENSA
-	depends on !EFI_APP
-	default 0x80800000 if ARCH_OMAP2PLUS || ARCH_K3
-	default 0x4a000000 if ARCH_SUNXI && !MACH_SUN9I && !MACH_SUN8I_V3S
-	default 0x2a000000 if ARCH_SUNXI && MACH_SUN9I
-	default 0x42e00000 if ARCH_SUNXI && MACH_SUN8I_V3S
+	depends on SPARC
 	hex "Text Base"
 	help
-	  The address in memory that U-Boot will be running from, initially.
-
-
-
-config SYS_CLK_FREQ
-	depends on ARC || ARCH_SUNXI
-	int "CPU clock frequency"
-	help
-	  TODO: Move CONFIG_SYS_CLK_FREQ for all the architecture
-
-config ARCH_FIXUP_FDT_MEMORY
-	bool "Enable arch_fixup_memory_banks() call"
-	default y
-	help
-	  Enable FDT memory map syncup before OS boot. This feature can be
-	  used for booting OS with different memory setup where the part of
-	  the memory location should be used for different purpose.
+	  TODO: Move CONFIG_SYS_TEXT_BASE for all the architecture
 
 endmenu		# Boot images
 
-source "api/Kconfig"
+source "arch/Kconfig"
 
 source "common/Kconfig"
 
-source "cmd/Kconfig"
-
-source "disk/Kconfig"
-
 source "dts/Kconfig"
 
-source "env/Kconfig"
-
 source "net/Kconfig"
 
 source "drivers/Kconfig"
@@ -534,5 +158,3 @@
 source "fs/Kconfig"
 
 source "lib/Kconfig"
-
-source "test/Kconfig"
diff --git a/Licenses/OFL.txt b/Licenses/OFL.txt
deleted file mode 100644
index 07c881f..0000000
--- a/Licenses/OFL.txt
+++ /dev/null
@@ -1,97 +0,0 @@
-Copyright (c) 2010, Andrey Makarov (makarov@bmstu.ru, mka-at-mailru@mail.ru),
-with Reserved Font Name Anka/Coder Narrow.
-
-Copyright (c) 2011, Pablo Impallari (www.impallari.com|impallari@gmail.com),
-Rodrigo Fuenzalida (www.rfuenzalida.com) with Reserved Font Name Cantora.
-
-This Font Software is licensed under the SIL Open Font License, Version 1.1.
-This license is copied below, and is also available with a FAQ at:
-http://scripts.sil.org/OFL
-
-
------------------------------------------------------------
-SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
------------------------------------------------------------
-
-PREAMBLE
-The goals of the Open Font License (OFL) are to stimulate worldwide
-development of collaborative font projects, to support the font creation
-efforts of academic and linguistic communities, and to provide a free and
-open framework in which fonts may be shared and improved in partnership
-with others.
-
-The OFL allows the licensed fonts to be used, studied, modified and
-redistributed freely as long as they are not sold by themselves. The
-fonts, including any derivative works, can be bundled, embedded,
-redistributed and/or sold with any software provided that any reserved
-names are not used by derivative works. The fonts and derivatives,
-however, cannot be released under any other type of license. The
-requirement for fonts to remain under this license does not apply
-to any document created using the fonts or their derivatives.
-
-DEFINITIONS
-"Font Software" refers to the set of files released by the Copyright
-Holder(s) under this license and clearly marked as such. This may
-include source files, build scripts and documentation.
-
-"Reserved Font Name" refers to any names specified as such after the
-copyright statement(s).
-
-"Original Version" refers to the collection of Font Software components as
-distributed by the Copyright Holder(s).
-
-"Modified Version" refers to any derivative made by adding to, deleting,
-or substituting -- in part or in whole -- any of the components of the
-Original Version, by changing formats or by porting the Font Software to a
-new environment.
-
-"Author" refers to any designer, engineer, programmer, technical
-writer or other person who contributed to the Font Software.
-
-PERMISSION & CONDITIONS
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of the Font Software, to use, study, copy, merge, embed, modify,
-redistribute, and sell modified and unmodified copies of the Font
-Software, subject to the following conditions:
-
-1) Neither the Font Software nor any of its individual components,
-in Original or Modified Versions, may be sold by itself.
-
-2) Original or Modified Versions of the Font Software may be bundled,
-redistributed and/or sold with any software, provided that each copy
-contains the above copyright notice and this license. These can be
-included either as stand-alone text files, human-readable headers or
-in the appropriate machine-readable metadata fields within text or
-binary files as long as those fields can be easily viewed by the user.
-
-3) No Modified Version of the Font Software may use the Reserved Font
-Name(s) unless explicit written permission is granted by the corresponding
-Copyright Holder. This restriction only applies to the primary font name as
-presented to the users.
-
-4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
-Software shall not be used to promote, endorse or advertise any
-Modified Version, except to acknowledge the contribution(s) of the
-Copyright Holder(s) and the Author(s) or with their explicit written
-permission.
-
-5) The Font Software, modified or unmodified, in part or in whole,
-must be distributed entirely under this license, and must not be
-distributed under any other license. The requirement for fonts to
-remain under this license does not apply to any document created
-using the Font Software.
-
-TERMINATION
-This license becomes null and void if any of the above conditions are
-not met.
-
-DISCLAIMER
-THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
-OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
-COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
-DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
-OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/Licenses/README b/Licenses/README
index 486e18d..fe6dadc 100644
--- a/Licenses/README
+++ b/Licenses/README
@@ -1,5 +1,3 @@
-SPDX-License-Identifier: GPL-2.0
-
   U-Boot is Free Software.  It is copyrighted by Wolfgang Denk and
 many others who contributed code (see the actual source code and the
 git commit messages for details).  You can redistribute U-Boot and/or
@@ -33,107 +31,27 @@
 
 To make this easier, such license headers in the source files will be
 replaced with a single line reference to Unique License Identifiers
-as defined by the Linux Foundation's SPDX project [1].
+as defined by the Linux Foundation's SPDX project [1].  For example,
+in a source file the full "GPL v2.0 or later" header text will be
+replaced by a single line:
+
+	SPDX-License-Identifier:	GPL-2.0+
+
+Ideally, the license terms of all files in the source tree should be
+defined by such License Identifiers; in no case a file can contain
+more than one such License Identifier list.
 
 If a "SPDX-License-Identifier:" line references more than one Unique
 License Identifier, then this means that the respective file can be
 used under the terms of either of these licenses, i. e. with
 
-	SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
+	SPDX-License-Identifier:	GPL-2.0+	BSD-3-Clause
 
-you can choose between GPL-2.0+ and BSD-3-Clause licensing.
+you can chose between GPL-2.0+ and BSD-3-Clause licensing.
 
 We use the SPDX Unique License Identifiers here; these are available
 at [2].
 
-License identifier syntax
--------------------------
-
-1. Placement:
-
-   The SPDX license identifier in U-Boot files shall be added at the first
-   possible line in a file which can contain a comment.  For the majority
-   or files this is the first line, except for scripts which require the
-   '#!PATH_TO_INTERPRETER' in the first line.  For those scripts the SPDX
-   identifier goes into the second line.
-
-|
-
-2. Style:
-
-   The SPDX license identifier is added in form of a comment.  The comment
-   style depends on the file type::
-
-      C source:	// SPDX-License-Identifier: <SPDX License Expression>
-      C header:	/* SPDX-License-Identifier: <SPDX License Expression> */
-      ASM:	/* SPDX-License-Identifier: <SPDX License Expression> */
-      scripts:	# SPDX-License-Identifier: <SPDX License Expression>
-      .rst:	.. SPDX-License-Identifier: <SPDX License Expression>
-      .dts{i}:	// SPDX-License-Identifier: <SPDX License Expression>
-
-   If a specific tool cannot handle the standard comment style, then the
-   appropriate comment mechanism which the tool accepts shall be used. This
-   is the reason for having the "/\* \*/" style comment in C header
-   files. There was build breakage observed with generated .lds files where
-   'ld' failed to parse the C++ comment. This has been fixed by now, but
-   there are still older assembler tools which cannot handle C++ style
-   comments.
-
-|
-
-3. Syntax:
-
-   A <SPDX License Expression> is either an SPDX short form license
-   identifier found on the SPDX License List, or the combination of two
-   SPDX short form license identifiers separated by "WITH" when a license
-   exception applies. When multiple licenses apply, an expression consists
-   of keywords "AND", "OR" separating sub-expressions and surrounded by
-   "(", ")" .
-
-   License identifiers for licenses like [L]GPL with the 'or later' option
-   are constructed by using a "+" for indicating the 'or later' option.::
-
-      // SPDX-License-Identifier: GPL-2.0+
-      // SPDX-License-Identifier: LGPL-2.1+
-
-   WITH should be used when there is a modifier to a license needed.
-   For example, the linux kernel UAPI files use the expression::
-
-      // SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note
-      // SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note
-
-   Other examples using WITH exceptions found in the linux kernel are::
-
-      // SPDX-License-Identifier: GPL-2.0 WITH mif-exception
-      // SPDX-License-Identifier: GPL-2.0+ WITH GCC-exception-2.0
-
-   Exceptions can only be used with particular License identifiers. The
-   valid License identifiers are listed in the tags of the exception text
-   file.
-
-   OR should be used if the file is dual licensed and only one license is
-   to be selected.  For example, some dtsi files are available under dual
-   licenses::
-
-      // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
-
-   Examples from U-Boot for license expressions in dual licensed files::
-
-      // SPDX-License-Identifier: GPL-2.0 OR MIT
-      // SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
-
-   AND should be used if the file has multiple licenses whose terms all
-   apply to use the file. For example, if code is inherited from another
-   project and permission has been given to put it in U-Boot, but the
-   original license terms need to remain in effect::
-
-      // SPDX-License-Identifier: (GPL-2.0 WITH Linux-syscall-note) AND MIT
-
-   Another other example where both sets of license terms need to be
-   adhered to is::
-
-      // SPDX-License-Identifier: GPL-1.0+ AND LGPL-2.1+
-
 [1] http://spdx.org/
 [2] http://spdx.org/licenses/
 
@@ -149,5 +67,3 @@
 IBM PIBS (PowerPC Initialization and		IBM-pibs			ibm-pibs.txt
 	Boot Software) license
 ISC License					ISC		Y		isc.txt			https://spdx.org/licenses/ISC
-SIL OPEN FONT LICENSE (OFL-1.1)			OFL-1.1		Y		OFL.txt			https://spdx.org/licenses/OFL-1.1.html
-X11 License					X11				x11.txt			https://spdx.org/licenses/X11.html
diff --git a/Licenses/r8a779x_usb3.txt b/Licenses/r8a779x_usb3.txt
deleted file mode 100644
index e2afcc9..0000000
--- a/Licenses/r8a779x_usb3.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-Copyright (c) 2014, Renesas Electronics Corporation
-All rights reserved.
-
-Redistribution and use in binary form, without modification, are permitted
-provided that the following conditions are met:
-
-1. Redistribution in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-2. The name of Renesas Electronics Corporation may not be used to endorse or
-   promote products derived from this software without specific prior written
-   permission.
-3. Reverse engineering, decompilation, or disassembly of this software is
-   not permitted.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS ELECTRONICS CORPORATION DISCLAIMS
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, AND
-NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL RENESAS ELECTRONICS
-CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
diff --git a/Licenses/x11.txt b/Licenses/x11.txt
deleted file mode 100644
index 23a3c63..0000000
--- a/Licenses/x11.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-X11 License
-Copyright (C) 1996 X Consortium
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE X
-CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of the X Consortium shall not be
-used in advertising or otherwise to promote the sale, use or other dealings in
-this Software without prior written authorization from the X Consortium.
-
-X Window System is a trademark of X Consortium, Inc.
diff --git a/MAINTAINERS b/MAINTAINERS
index f86fdf9..57d2cfd 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2,8 +2,6 @@
 
 	P: Person (obsolete)
 	M: Mail patches to: FullName <address@domain>
-	R: Designated reviewer: FullName <address@domain>
-	   These reviewers should be CCed on patches.
 	L: Mailing list that is relevant to this area
 	W: Web-page with status/info
 	Q: Patchwork web based patch tracking system site
@@ -57,27 +55,9 @@
 		-----------------------------------
 ARC
 M:	Alexey Brodkin <alexey.brodkin@synopsys.com>
-M:	Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
 S:	Maintained
-L:	uboot-snps-arc@synopsys.com
 T:	git git://git.denx.de/u-boot-arc.git
 F:	arch/arc/
-F:	board/synopsys/
-
-ARC HSDK CGU CLOCK
-M:	Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
-S:	Maintained
-L:	uboot-snps-arc@synopsys.com
-F:	drivers/clk/clk-hsdk-cgu.c
-F:	include/dt-bindings/clock/snps,hsdk-cgu.h
-F:	doc/device-tree-bindings/clock/snps,hsdk-cgu.txt
-
-ARC HSDK CREG GPIO
-M:	Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
-S:	Maintained
-L:	uboot-snps-arc@synopsys.com
-F:	doc/device-tree-bindings/gpio/snps,creg-gpio.txt
-F:	drivers/gpio/hsdk-creg-gpio.c
 
 ARM
 M:	Albert Aribaud <albert.u.boot@aribaud.net>
@@ -89,69 +69,39 @@
 M:	Marek Vasut <marex@denx.de>
 S:	Maintainted
 T:	git git://git.denx.de/u-boot-socfpga.git
-F:	arch/arm/mach-socfpga/
+F:	arch/arm/cpu/armv7/socfpga/
+F:	board/altera/socfpga/
 
 ARM ATMEL AT91
-M:	Andreas Bießmann <andreas@biessmann.org>
+M:	Andreas Bießmann <andreas.devel@googlemail.com>
 S:	Maintained
 T:	git git://git.denx.de/u-boot-atmel.git
-F:	arch/arm/mach-at91/
-
-ARM BROADCOM BCM283X
-M:	Alexander Graf <agraf@suse.de>
-S:	Maintained
-F:	arch/arm/mach-bcm283x/
-F:	drivers/gpio/bcm2835_gpio.c
-F:	drivers/mmc/bcm2835_sdhci.c
-F:	drivers/mmc/bcm2835_sdhost.c
-F:	drivers/serial/serial_bcm283x_mu.c
-F:	drivers/serial/serial_bcm283x_pl011.c
-F:	drivers/video/bcm2835.c
-F:	include/dm/platform_data/serial_bcm283x_mu.h
-F:	drivers/pinctrl/broadcom/
-
-ARM BROADCOM BCMSTB
-M:	Thomas Fitzsimmons <fitzsim@fitzsim.org>
-S:	Maintained
-F:	arch/arm/mach-bcmstb/
-F:	board/broadcom/bcmstb/
-F:	configs/bcm7*_defconfig
-F:	doc/README.bcm7xxx
-F:	drivers/mmc/bcmstb_sdhci.c
-F:	drivers/spi/bcmstb_spi.c
+F:	arch/arm/cpu/armv7/at91/
+F:	arch/arm/cpu/at91-common/
+F:	arch/arm/include/asm/arch-at91/
 
 ARM FREESCALE IMX
 M:	Stefano Babic <sbabic@denx.de>
-M:	Fabio Estevam <fabio.estevam@nxp.com>
-R:	NXP i.MX U-Boot Team <uboot-imx@nxp.com>
 S:	Maintained
 T:	git git://git.denx.de/u-boot-imx.git
 F:	arch/arm/cpu/arm1136/mx*/
 F:	arch/arm/cpu/arm926ejs/mx*/
+F:	arch/arm/cpu/arm926ejs/imx/
+F:	arch/arm/cpu/armv7/mx*/
 F:	arch/arm/cpu/armv7/vf610/
-F:	arch/arm/mach-imx/
+F:	arch/arm/cpu/imx-common/
 F:	arch/arm/include/asm/arch-imx/
 F:	arch/arm/include/asm/arch-mx*/
 F:	arch/arm/include/asm/arch-vf610/
-F:	arch/arm/include/asm/mach-imx/
-F:	board/freescale/*mx*/
+F:	arch/arm/include/asm/imx-common/
 
-ARM HISILICON
-M:	Peter Griffin <peter.griffin@linaro.org>
-S:	Maintained
-F:	arch/arm/cpu/armv8/hisilicon
-F:	arch/arm/include/asm/arch-hi6220/
-
-ARM MARVELL KIRKWOOD ARMADA-XP ARMADA-38X ARMADA-37XX
+ARM MARVELL KIRKWOOD
 M:	Prafulla Wadaskar <prafulla@marvell.com>
 M:	Luka Perkov <luka.perkov@sartura.hr>
-M:	Stefan Roese <sr@denx.de>
 S:	Maintained
 T:	git git://git.denx.de/u-boot-marvell.git
-F:	arch/arm/mach-kirkwood/
-F:	arch/arm/mach-mvebu/
-F:	drivers/ata/ahci_mvebu.c
-F:	drivers/phy/marvell/
+F:	arch/arm/cpu/arm926ejs/kirkwood/
+F:	arch/arm/include/asm/arch-kirkwood/
 
 ARM MARVELL PXA
 M:	Marek Vasut <marex@denx.de>
@@ -160,116 +110,25 @@
 F:	arch/arm/cpu/pxa/
 F:	arch/arm/include/asm/arch-pxa/
 
-ARM MEDIATEK
-M:	Ryder Lee <ryder.lee@mediatek.com>
-M:	Weijie Gao <weijie.gao@mediatek.com>
-S:	Maintained
-F:	arch/arm/mach-mediatek/
-F:	arch/arm/include/asm/arch-mediatek/
-F:	board/mediatek/
-F:	doc/README.mediatek
-F:	drivers/clk/mediatek/
-F:	drivers/mmc/mtk-sd.c
-F:	drivers/pinctrl/mediatek/
-F:	drivers/power/domain/mtk-power-domain.c
-F:	drivers/ram/mediatek/
-F:	drivers/spi/mtk_qspi.c
-F:	drivers/timer/mtk_timer.c
-F:	drivers/watchdog/mtk_wdt.c
-F:	tools/mtk_image.c
-F:	tools/mtk_image.h
-N:	mediatek
-
-ARM OWL
-M:	Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
-S:	Maintained
-F:	arch/arm/include/asm/arch-owl/
-F:	arch/arm/mach-owl/
-F:	board/ucRobotics/
-F:	drivers/clk/owl/
-F:	drivers/serial/serial_owl.c
-
-ARM RENESAS RMOBILE/R-CAR
-M:	Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
-M:	Marek Vasut <marek.vasut+renesas@gmail.com>
-S:	Maintained
-T:	git git://git.denx.de/u-boot-sh.git
-F:	arch/arm/mach-rmobile/
-
-ARM ROCKCHIP
-M:	Simon Glass <sjg@chromium.org>
-M:	Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
-S:	Maintained
-T:	git git://git.denx.de/u-boot-rockchip.git
-F:	arch/arm/include/asm/arch-rockchip/
-F:	arch/arm/mach-rockchip/
-F:	board/rockchip/
-F:	drivers/clk/rockchip/
-F:	drivers/gpio/rk_gpio.c
-F:	drivers/misc/rockchip-efuse.c
-F:	drivers/mmc/rockchip_sdhci.c
-F:	drivers/mmc/rockchip_dw_mmc.c
-F:	drivers/pinctrl/rockchip/
-F:	drivers/ram/rockchip/
-F:	drivers/sysreset/sysreset_rockchip.c
-F:	drivers/video/rockchip/
-F:	tools/rkcommon.c
-F:	tools/rkcommon.h
-F:	tools/rkimage.c
-F:	tools/rksd.c
-F:	tools/rkspi.c
-
 ARM SAMSUNG
 M:	Minkyu Kang <mk7.kang@samsung.com>
 S:	Maintained
 T:	git git://git.denx.de/u-boot-samsung.git
-F:	arch/arm/mach-exynos/
-F:	arch/arm/mach-s5pc1xx/
+F:	arch/arm/cpu/arm920t/s3c24x0/
+F:	arch/arm/cpu/armv7/exynos/
+F:	arch/arm/cpu/armv7/s5pc1xx/
 F:	arch/arm/cpu/armv7/s5p-common/
-
-ARM SNAPDRAGON
-M:	Ramon Fried <ramon.fried@gmail.com>
-S:	Maintained
-F:	arch/arm/mach-snapdragon/
-F:	drivers/gpio/msm_gpio.c
-F:	drivers/mmc/msm_sdhci.c
-F:	drivers/phy/msm8916-usbh-phy.c
-F:	drivers/serial/serial_msm.c
-F:	drivers/smem/msm_smem.c
-F:	drivers/usb/host/ehci-msm.c
-
-ARM STI
-M:	Patrice Chotard <patrice.chotard@st.com>
-S:	Maintained
-F:	arch/arm/mach-sti/
-F:	arch/arm/include/asm/arch-sti*/
+F:	arch/arm/include/asm/arch-exynos/
+F:	arch/arm/include/asm/arch-s3c24x0/
+F:	arch/arm/include/asm/arch-s5pc1xx/
 
 ARM STM SPEAR
-#M:	Vipin Kumar <vipin.kumar@st.com>
-S:	Orphaned (Since 2016-02)
+M:	Vipin Kumar <vipin.kumar@st.com>
+S:	Maintained
 T:	git git://git.denx.de/u-boot-stm.git
 F:	arch/arm/cpu/arm926ejs/spear/
 F:	arch/arm/include/asm/arch-spear/
 
-ARM STM STM32MP
-M:	Patrick Delaunay <patrick.delaunay@st.com>
-M:	Christophe Kerello <christophe.kerello@st.com>
-M:	Patrice Chotard <patrice.chotard@st.com>
-L:	uboot-stm32@st-md-mailman.stormreply.com (moderated for non-subscribers)
-S:	Maintained
-F:	arch/arm/mach-stm32mp
-F:	drivers/clk/clk_stm32mp1.c
-F:	drivers/i2c/stm32f7_i2c.c
-F:	drivers/misc/stm32mp_fuse.c
-F:	drivers/mmc/stm32_sdmmc2.c
-F:	drivers/phy/phy-stm32-usbphyc.c
-F:	drivers/pinctrl/pinctrl_stm32.c
-F:	drivers/power/regulator/stm32-vrefbuf.c
-F:	drivers/ram/stm32mp1/
-F:	drivers/misc/stm32_rcc.c
-F:	drivers/reset/stm32-reset.c
-F:	drivers/spi/stm32_qspi.c
-
 ARM STM STV0991
 M:	Vikas Manocha <vikas.manocha@st.com>
 S:	Maintained
@@ -277,113 +136,59 @@
 F:	arch/arm/include/asm/arch-stv0991/
 
 ARM SUNXI
-M:	Jagan Teki <jagan@openedev.com>
-M:	Maxime Ripard <maxime.ripard@bootlin.com>
+M:	Ian Campbell <ijc@hellion.org.uk>
+M:	Hans De Goede <hdegoede@redhat.com>
 S:	Maintained
 T:	git git://git.denx.de/u-boot-sunxi.git
 F:	arch/arm/cpu/armv7/sunxi/
 F:	arch/arm/include/asm/arch-sunxi/
-F:	arch/arm/mach-sunxi/
-F:	board/sunxi/
 
 ARM TEGRA
 M:	Tom Warren <twarren@nvidia.com>
 S:	Maintained
 T:	git git://git.denx.de/u-boot-tegra.git
-F:	arch/arm/mach-tegra/
+F:	arch/arm/cpu/arm720t/tegra*/
+F:	arch/arm/cpu/armv7/tegra*/
+F:	arch/arm/cpu/tegra*/
 F:	arch/arm/include/asm/arch-tegra*/
 
 ARM TI
-M:	Tom Rini <trini@konsulko.com>
+M:	Tom Rini <trini@ti.com>
 S:	Maintained
 T:	git git://git.denx.de/u-boot-ti.git
-F:	arch/arm/mach-davinci/
-F:	arch/arm/mach-k3/
-F:	arch/arm/mach-keystone/
+F:	arch/arm/cpu/arm926ejs/davinci/
+F:	arch/arm/cpu/arm926ejs/omap/
+F:	arch/arm/cpu/armv7/omap*/
+F:	arch/arm/include/asm/arch-davinci/
 F:	arch/arm/include/asm/arch-omap*/
 F:	arch/arm/include/asm/ti-common/
 
 ARM UNIPHIER
-M:	Masahiro Yamada <yamada.masahiro@socionext.com>
+M:	Masahiro Yamada <yamada.m@jp.panasonic.com>
 S:	Maintained
 T:	git git://git.denx.de/u-boot-uniphier.git
-F:	arch/arm/mach-uniphier/
-F:	configs/uniphier_*_defconfig
-N:	uniphier
-
-ARM VERSAL
-M:	Michal Simek <michal.simek@xilinx.com>
-S:	Maintained
-T:	git git://git.denx.de/u-boot-microblaze.git
-F:	arch/arm/mach-versal/
-
-ARM VERSATILE EXPRESS DRIVERS
-M:	Liviu Dudau <liviu.dudau@foss.arm.com>
-S:	Maintained
-T:	git git://github.com/ARM-software/u-boot.git
-F:	drivers/misc/vexpress_config.c
-N:	vexpress
+F:	arch/arm/cpu/armv7/uniphier/
+F:	arch/arm/include/asm/arch-uniphier/
+F:	configs/ph1_*_defconfig
+F:	drivers/serial/serial_uniphier.c
 
 ARM ZYNQ
 M:	Michal Simek <monstr@monstr.eu>
 S:	Maintained
-T:	git git://git.denx.de/u-boot-microblaze.git
-F:	arch/arm/mach-zynq/
-F:	drivers/clk/clk_zynq.c
-F:	drivers/fpga/zynqpl.c
-F:	drivers/gpio/zynq_gpio.c
-F:	drivers/i2c/i2c-cdns.c
-F:	drivers/i2c/muxes/pca954x.c
-F:	drivers/i2c/zynq_i2c.c
-F:	drivers/mmc/zynq_sdhci.c
-F:	drivers/mtd/nand/raw/zynq_nand.c
-F:	drivers/net/phy/xilinx_phy.c
-F:	drivers/net/zynq_gem.c
-F:	drivers/serial/serial_zynq.c
-F:	drivers/spi/zynq_qspi.c
-F:	drivers/spi/zynq_spi.c
-F:	drivers/usb/host/ehci-zynq.c
-F:	drivers/watchdog/cdns_wdt.c
-F:	include/zynqpl.h
-F:	tools/zynqimage.c
-N:	zynq
+F:	arch/arm/cpu/armv7/zynq/
+F:	arch/arm/include/asm/arch-zynq/
 
-ARM ZYNQMP
-M:	Michal Simek <michal.simek@xilinx.com>
+AVR32
+M:	Andreas Bießmann <andreas.devel@googlemail.com>
 S:	Maintained
-T:	git git://git.denx.de/u-boot-microblaze.git
-F:	arch/arm/cpu/armv8/zynqmp/
-F:	drivers/clk/clk_zynqmp.c
-F:	drivers/fpga/zynqpl.c
-F:	drivers/gpio/zynq_gpio.c
-F:	drivers/i2c/i2c-cdns.c
-F:	drivers/i2c/muxes/pca954x.c
-F:	drivers/i2c/zynq_i2c.c
-F:	drivers/mmc/zynq_sdhci.c
-F:	drivers/mtd/nand/raw/zynq_nand.c
-F:	drivers/net/phy/xilinx_phy.c
-F:	drivers/net/zynq_gem.c
-F:	drivers/serial/serial_zynq.c
-F:	drivers/spi/zynq_qspi.c
-F:	drivers/spi/zynq_spi.c
-F:	drivers/timer/cadence-ttc.c
-F:	drivers/usb/host/ehci-zynq.c
-F:	drivers/watchdog/cdns_wdt.c
-F:	include/zynqmppl.h
-F:	tools/zynqmp*
-N:	ultra96
-N:	zynqmp
+T:	git git://git.denx.de/u-boot-avr32.git
+F:	arch/avr32/
 
-ARM ZYNQMP R5
-M:	Michal Simek <michal.simek@xilinx.com>
+BLACKFIN
+M:	Sonic Zhang <sonic.adi@gmail.com>
 S:	Maintained
-T:	git git://git.denx.de/u-boot-microblaze.git
-F:	arch/arm/mach-zynqmp-r5/
-
-BINMAN
-M:	Simon Glass <sjg@chromium.org>
-S:	Maintained
-F:	tools/binman/
+T:	git git://git.denx.de/u-boot-blackfin.git
+F:	arch/blackfin/
 
 BUILDMAN
 M:	Simon Glass <sjg@chromium.org>
@@ -398,56 +203,25 @@
 F:	drivers/mtd/jedec_flash.c
 
 COLDFIRE
-M:	Huan Wang <alison.wang@nxp.com>
+M:	Huan Wang <alison.wang@freescale.com>
 M:	Angelo Dureghello <angelo@sysam.it>
 S:	Maintained
 T:	git git://git.denx.de/u-boot-coldfire.git
 F:	arch/m68k/
 
 DFU
-M:	Lukasz Majewski <lukma@denx.de>
+M:	Lukasz Majewski <l.majewski@samsung.com>
 S:	Maintained
 T:	git git://git.denx.de/u-boot-dfu.git
 F:	drivers/dfu/
-F:	drivers/usb/gadget/
 
 DRIVER MODEL
 M:	Simon Glass <sjg@chromium.org>
 S:	Maintained
-T:	git git://git.denx.de/u-boot-dm.git
 F:	drivers/core/
 F:	include/dm/
 F:	test/dm/
 
-EFI PAYLOAD
-M:	Alexander Graf <agraf@suse.de>
-R:	Heinrich Schuchardt <xypron.glpk@gmx.de>
-S:	Maintained
-T:	git git://github.com/agraf/u-boot.git
-F:	doc/README.uefi
-F:	doc/README.iscsi
-F:	Documentation/efi.rst
-F:	include/capitalization.h
-F:	include/cp1250.h
-F:	include/cp437.h
-F:	include/efi*
-F:	include/pe.h
-F:	include/asm-generic/pe.h
-F:	lib/charset.c
-F:	lib/efi*/
-F:	test/py/tests/test_efi*
-F:	test/unicode_ut.c
-F:	cmd/bootefi.c
-F:	tools/file2include.c
-
-FPGA
-M:	Michal Simek <michal.simek@xilinx.com>
-S:	Maintained
-T:	git git://git.denx.de/u-boot-microblaze.git
-F:	drivers/fpga/
-F:	cmd/fpga.c
-F:	include/fpga.h
-
 FLATTENED DEVICE TREE
 M:	Simon Glass <sjg@chromium.org>
 S:	Maintained
@@ -455,8 +229,8 @@
 F:	lib/fdtdec*
 F:	lib/libfdt/
 F:	include/fdt*
-F:	include/linux/libfdt*
-F:	cmd/fdt.c
+F:	include/libfdt*
+F.	common/cmd_fdt.c
 F:	common/fdt_support.c
 
 FREEBSD
@@ -465,7 +239,7 @@
 T:	git git://git.denx.de/u-boot-freebsd.git
 
 FREESCALE QORIQ
-M:	York Sun <york.sun@nxp.com>
+M:	York Sun <yorksun@freescale.com>
 S:	Maintained
 T:	git git://git.denx.de/u-boot-fsl-qoriq.git
 
@@ -475,36 +249,11 @@
 T:	git git://git.denx.de/u-boot-i2c.git
 F:	drivers/i2c/
 
-LOGGING
-M:	Simon Glass <sjg@chromium.org>
-S:	Maintained
-T:	git git://git.denx.de/u-boot.git
-F:	common/log.c
-F:	cmd/log.c
-F:	test/log/log_test.c
-F:	test/py/tests/test_log.py
-
-MALI DISPLAY PROCESSORS
-M:	Liviu Dudau <liviu.dudau@foss.arm.com>
-S:	Supported
-T:	git git://github.com/ARM-software/u-boot.git
-F:	drivers/video/mali_dp.c
-F:	drivers/i2c/i2c-versatile.c
-
 MICROBLAZE
 M:	Michal Simek <monstr@monstr.eu>
 S:	Maintained
 T:	git git://git.denx.de/u-boot-microblaze.git
 F:	arch/microblaze/
-F:	cmd/mfsl.c
-F:	drivers/gpio/xilinx_gpio.c
-F:	drivers/net/xilinx_axi_emac.c
-F:	drivers/net/xilinx_emaclite.c
-F:	drivers/serial/serial_xuartlite.c
-F:	drivers/spi/xilinx_spi.c
-F:	drivers/sysreset/sysreset_gpio.c
-F:	drivers/watchdog/xilinx_tb_wdt.c
-N:	xilinx
 
 MIPS
 M:	Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
@@ -512,35 +261,87 @@
 T:	git git://git.denx.de/u-boot-mips.git
 F:	arch/mips/
 
-MIPS MSCC
-M:	Gregory CLEMENT <gregory.clement@bootlin.com>
-M:	Lars Povlsen <lars.povlsen@microchip.com>
-M:	Horatiu Vultur <horatiu.vultur@microchip.com>
-S:	Maintained
-F:	arch/mips/mach-mscc/
-F:	arch/mips/dts/luton*
-F:	arch/mips/dts/mscc*
-F:	arch/mips/dts/ocelot*
-F:	board/mscc/
-F:	configs/mscc*
-F:	include/configs/vcoreiii.h
-
-MIPS JZ4780
-M:	Ezequiel Garcia <ezequiel@collabora.com>
-S:	Maintained
-F:	arch/mips/mach-jz47xx/
-
 MMC
-M:	Jaehoon Chung <jh80.chung@samsung.com>
+M:	Pantelis Antoniou <panto@antoniou-consulting.com>
 S:	Maintained
 T:	git git://git.denx.de/u-boot-mmc.git
 F:	drivers/mmc/
 
+OPENRISC
+M:	Stefan Kristiansson <stefan.kristiansson@saunalahti.fi>
+S:	Maintained
+F:	arch/openrisc/
+
+PATMAN
+M:	Simon Glass <sjg@chromium.org>
+S:	Maintained
+F:	tools/patman/
+
+POWERPC
+M:	Wolfgang Denk <wd@denx.de>
+S:	Maintained
+F:	arch/powerpc/
+
+POWERPC MPC5XXX
+M:	Wolfgang Denk <wd@denx.de>
+S:	Maintained
+T:	git git://git.denx.de/u-boot-mpc5xxx.git
+F:	arch/powerpc/cpu/mpc5*/
+
+POWERPC MPC8XX
+M:	Wolfgang Denk <wd@denx.de>
+S:	Maintained
+T:	git git://git.denx.de/u-boot-mpc8xx.git
+F:	arch/powerpc/cpu/mpc8xx/
+
+POWERPC MPC82XX
+M:	Wolfgang Denk <wd@denx.de>
+S:	Maintained
+T:	git git://git.denx.de/u-boot-mpc82xx.git
+F:	arch/powerpc/cpu/mpc82*/
+
+POWERPC MPC83XX
+M:	Kim Phillips <kim.phillips@freescale.com>
+S:	Maintained
+T:	git git://git.denx.de/u-boot-mpc83xx.git
+F:	arch/powerpc/cpu/mpc83xx/
+F:	arch/powerpc/include/asm/arch-mpc83xx/
+
+POWERPC MPC85XX
+M:	York Sun <yorksun@freescale.com>
+S:	Maintained
+T:	git git://git.denx.de/u-boot-mpc85xx.git
+F:	arch/powerpc/cpu/mpc85xx/
+
+POWERPC MPC86XX
+M:	York Sun <yorksun@freescale.com>
+S:	Maintained
+T:	git git://git.denx.de/u-boot-mpc86xx.git
+F:	arch/powerpc/cpu/mpc86xx/
+
+POWERPC PPC74XX PPC7XX
+M:	Wolfgang Denk <wd@denx.de>
+S:	Maintained
+T:	git git://git.denx.de/u-boot-74xx-7xx.git
+F:	arch/powerpc/cpu/74xx_7xx/
+
+POWERPC PPC4XX
+M:	Stefan Roese <sr@denx.de>
+S:	Maintained
+T:	git git://git.denx.de/u-boot-ppc4xx.git
+F:	arch/powerpc/cpu/ppc4xx/
+
+NETWORK
+M:	Joe Hershberger <joe.hershberger@gmail.com>
+S:	Maintained
+T:	git git://git.denx.de/u-boot-net.git
+F:	drivers/net/
+
 NAND FLASH
-#M:	Scott Wood <oss@buserror.net>
-S:	Orphaned (Since 2018-07)
+M:	Scott Wood <scottwood@freescale.com>
+S:	Maintained
 T:	git git://git.denx.de/u-boot-nand-flash.git
-F:	drivers/mtd/nand/raw/
+F:	drivers/mtd/nand/
 
 NDS32
 M:	Macpaul Lin <macpaul@andestech.com>
@@ -548,13 +349,6 @@
 T:	git git://git.denx.de/u-boot-nds32.git
 F:	arch/nds32/
 
-NETWORK
-M:	Joe Hershberger <joe.hershberger@ni.com>
-S:	Maintained
-T:	git git://git.denx.de/u-boot-net.git
-F:	drivers/net/
-F:	net/
-
 NIOS
 M:	Thomas Chou <thomas@wytron.com.tw>
 S:	Maintained
@@ -562,77 +356,11 @@
 F:	arch/nios2/
 
 ONENAND
-#M:	Lukasz Majewski <l.majewski@majess.pl>
-S:	Orphaned (Since 2017-01)
+M:	Lukasz Majewski <l.majewski@samsung.com>
+S:	Maintained
 T:	git git://git.denx.de/u-boot-onenand.git
 F:	drivers/mtd/onenand/
 
-PATMAN
-M:	Simon Glass <sjg@chromium.org>
-S:	Maintained
-F:	tools/patman/
-
-POWER
-M:	Jaehoon Chung <jh80.chung@samsung.com>
-S:	Maintained
-T:	git git://git.denx.de/u-boot-pmic.git
-F:	drivers/power/
-
-POWERPC
-M:	Wolfgang Denk <wd@denx.de>
-S:	Maintained
-F:	arch/powerpc/
-
-POWERPC MPC8XX
-M:	Christophe Leroy <christophe.leroy@c-s.fr>
-S:	Maintained
-T:	git git://git.denx.de/u-boot-mpc8xx.git
-F:	arch/powerpc/cpu/mpc8xx/
-
-POWERPC MPC83XX
-M:	Mario Six <mario.six@gdsys.cc>
-S:	Maintained
-T:	git git://git.denx.de/u-boot-mpc83xx.git
-F:	drivers/ram/mpc83xx_sdram.c
-F:	include/dt-bindings/memory/mpc83xx-sdram.h
-F:	drivers/sysreset/sysreset_mpc83xx.c
-F:	drivers/sysreset/sysreset_mpc83xx.h
-F:	drivers/clk/mpc83xx_clk.c
-F:	drivers/clk/mpc83xx_clk.h
-F:	include/dt-bindings/clk/mpc83xx-clk.h
-F:	drivers/timer/mpc83xx_timer.c
-F:	drivers/cpu/mpc83xx_cpu.c
-F:	drivers/cpu/mpc83xx_cpu.h
-F:	drivers/misc/mpc83xx_serdes.c
-F:	arch/powerpc/cpu/mpc83xx/
-F:	arch/powerpc/include/asm/arch-mpc83xx/
-
-POWERPC MPC85XX
-M:	York Sun <york.sun@nxp.com>
-S:	Maintained
-T:	git git://git.denx.de/u-boot-mpc85xx.git
-F:	arch/powerpc/cpu/mpc85xx/
-
-POWERPC MPC86XX
-M:	York Sun <york.sun@nxp.com>
-S:	Maintained
-T:	git git://git.denx.de/u-boot-mpc86xx.git
-F:	arch/powerpc/cpu/mpc86xx/
-
-RISC-V
-M:	Rick Chen <rick@andestech.com>
-S:	Maintained
-T:	git git://git.denx.de/u-boot-riscv.git
-F:	arch/riscv/
-F:	tools/prelink-riscv.c
-
-ROCKUSB
-M:	Eddie Cai <eddie.cai.linux@gmail.com>
-S:	Maintained
-F:	drivers/usb/gadget/f_rockusb.c
-F:	cmd/rockusb.c
-F:	doc/README.rockusb
-
 SANDBOX
 M:	Simon Glass <sjg@chromium.org>
 S:	Maintained
@@ -644,52 +372,29 @@
 T:	git git://git.denx.de/u-boot-sh.git
 F:	arch/sh/
 
+SPARC
+M:	Daniel Hellstrom <daniel@gaisler.com>
+S:	Maintained
+T:	git git://git.denx.de/u-boot-sparc.git
+F:	arch/sparc/
+
 SPI
-M:	Jagan Teki <jagan@openedev.com>
+M:	Jagannadha Sutradharudu Teki <jagannadh.teki@gmail.com>
 S:	Maintained
 T:	git git://git.denx.de/u-boot-spi.git
 F:	drivers/mtd/spi/
 F:	drivers/spi/
 F:	include/spi*
 
-SPMI
-M:	Mateusz Kulikowski <mateusz.kulikowski@gmail.com>
+TESTING
+M:	Detlev Zundel <dzu@denx.de>
 S:	Maintained
-F:	drivers/spmi/
-F:	include/spmi/
-
-TDA19988 HDMI ENCODER
-M:	Liviu Dudau <liviu.dudau@foss.arm.com>
-S:	Maintained
-F:	drivers/video/tda19988.c
-
-TI SYSTEM SECURITY
-M:	Andrew F. Davis <afd@ti.com>
-S:	Supported
-F:	arch/arm/mach-omap2/omap5/sec_entry_cpu1.S
-F:	arch/arm/mach-omap2/sec-common.c
-F:	arch/arm/mach-omap2/config_secure.mk
-F:	configs/am335x_hs_evm_defconfig
-F:	configs/am335x_hs_evm_uart_defconfig
-F:	configs/am43xx_hs_evm_defconfig
-F:	configs/am57xx_hs_evm_defconfig
-F:	configs/dra7xx_hs_evm_defconfig
-F:	configs/k2hk_hs_evm_defconfig
-F:	configs/k2e_hs_evm_defconfig
-F:	configs/k2g_hs_evm_defconfig
-F:	configs/k2l_hs_evm_defconfig
+T:	git git://git.denx.de/u-boot-testing.git
 
 TQ GROUP
-#M:	Martin Krause <martin.krause@tq-systems.de>
-S:	Orphaned (Since 2016-02)
-T:	git git://git.denx.de/u-boot-tq-group.git
-
-TEE
-M:	Jens Wiklander <jens.wiklander@linaro.org>
+M:	Martin Krause <martin.krause@tq-systems.de>
 S:	Maintained
-F:	drivers/tee/
-F:	include/tee.h
-F:	include/tee/
+T:	git git://git.denx.de/u-boot-tq-group.git
 
 UBI
 M:	Kyungmin Park <kmpark@infradead.org>
@@ -704,39 +409,29 @@
 T:	git git://git.denx.de/u-boot-usb.git
 F:	drivers/usb/
 
-USB xHCI
-M:	Bin Meng <bmeng.cn@gmail.com>
-S:	Maintained
-T:	git git://git.denx.de/u-boot-usb.git topic-xhci
-F:	drivers/usb/host/xhci*
-
 VIDEO
 M:	Anatolij Gustschin <agust@denx.de>
 S:	Maintained
 T:	git git://git.denx.de/u-boot-video.git
 F:	drivers/video/
-F:	common/lcd*.c
-F:	include/lcd*.h
-F:	include/video*.h
 
 X86
 M:	Simon Glass <sjg@chromium.org>
-M:	Bin Meng <bmeng.cn@gmail.com>
 S:	Maintained
 T:	git git://git.denx.de/u-boot-x86.git
 F:	arch/x86/
 
-XTENSA
-M:	Max Filippov <jcmvbkbc@gmail.com>
-S:	Maintained
-F:	arch/xtensa/
-
 THE REST
-M:	Tom Rini <trini@konsulko.com>
+M:	Tom Rini <trini@ti.com>
 L:	u-boot@lists.denx.de
 Q:	http://patchwork.ozlabs.org/project/uboot/list/
 S:	Maintained
 T:	git git://git.denx.de/u-boot.git
-F:	configs/tools-only_defconfig
 F:	*
 F:	*/
+
+LCD
+M:	Shaochan Liu<shaochan.liu@amlogic.com>
+S:	Maintained
+T:	git /scgit.amlogic.com:29418/kernel/common.git
+F:	drivers/dispaly/lcd/lcd_extern/i2c_CS602.c
diff --git a/MAKEALL b/MAKEALL
new file mode 100644
index 0000000..4d643d1
--- /dev/null
+++ b/MAKEALL
@@ -0,0 +1,853 @@
+#!/bin/bash
+# Tool mainly for U-Boot Quality Assurance: build one or more board
+# configurations with minimal verbosity, showing only warnings and
+# errors.
+#
+# SPDX-License-Identifier:	GPL-2.0+
+
+usage()
+{
+	# if exiting with 0, write to stdout, else write to stderr
+	local ret=${1:-0}
+	[ "${ret}" -eq 1 ] && exec 1>&2
+	cat <<-EOF
+	Usage: MAKEALL [options] [--] [boards-to-build]
+
+	Options:
+	  -a ARCH,   --arch ARCH       Build all boards with arch ARCH
+	  -c CPU,    --cpu CPU         Build all boards with cpu CPU
+	  -v VENDOR, --vendor VENDOR   Build all boards with vendor VENDOR
+	  -s SOC,    --soc SOC         Build all boards with soc SOC
+	  -b BOARD,  --board BOARD     Build all boards with board name BOARD
+	  -l,        --list            List all targets to be built
+	  -m,        --maintainers     List all targets and maintainer email
+	  -M,        --mails           List all targets and all affilated emails
+	  -C,        --check           Enable build checking
+	  -n,        --continue        Continue (skip boards already built)
+	  -r,        --rebuild-errors  Rebuild any boards that errored
+	  -h,        --help            This help output
+
+	Selections by these options are logically ANDed; if the same option
+	is used repeatedly, such selections are ORed.  So "-v FOO -v BAR"
+	will select all configurations where the vendor is either FOO or
+	BAR.  Any additional arguments specified on the command line are
+	always build additionally.  See the boards.cfg file for more info.
+
+	If no boards are specified, then the default is "powerpc".
+
+	Environment variables:
+	  BUILD_NCPUS      number of parallel make jobs (default: auto)
+	  CROSS_COMPILE    cross-compiler toolchain prefix (default: "")
+	  CROSS_COMPILE_<ARCH> cross-compiler toolchain prefix for
+			   architecture "ARCH".  Substitute "ARCH" for any
+			   supported architecture (default: "")
+	  MAKEALL_LOGDIR   output all logs to here (default: ./LOG/)
+	  BUILD_DIR        output build directory (default: ./)
+	  BUILD_NBUILDS	   number of parallel targets (default: 1)
+
+	Examples:
+	  - build all Power Architecture boards:
+	      MAKEALL -a powerpc
+	      MAKEALL --arch powerpc
+	      MAKEALL powerpc
+	  - build all PowerPC boards manufactured by vendor "esd":
+	      MAKEALL -a powerpc -v esd
+	  - build all PowerPC boards manufactured either by "keymile" or "siemens":
+	      MAKEALL -a powerpc -v keymile -v siemens
+	  - build all Freescale boards with MPC83xx CPUs, plus all 4xx boards:
+	      MAKEALL -c mpc83xx -v freescale 4xx
+	EOF
+	exit ${ret}
+}
+
+SHORT_OPTS="ha:c:v:s:b:lmMCnr"
+LONG_OPTS="help,arch:,cpu:,vendor:,soc:,board:,list,maintainers,mails,check,continue,rebuild-errors"
+
+# Option processing based on util-linux-2.13/getopt-parse.bash
+
+# Note that we use `"$@"' to let each command-line parameter expand to a
+# separate word. The quotes around `$@' are essential!
+# We need TEMP as the `eval set --' would nuke the return value of
+# getopt.
+TEMP=`getopt -o ${SHORT_OPTS} --long ${LONG_OPTS} \
+     -n 'MAKEALL' -- "$@"`
+
+[ $? != 0 ] && usage 1
+
+# Note the quotes around `$TEMP': they are essential!
+eval set -- "$TEMP"
+
+SELECTED=''
+ONLY_LIST=''
+PRINT_MAINTS=''
+MAINTAINERS_ONLY=''
+CONTINUE=''
+REBUILD_ERRORS=''
+
+while true ; do
+	case "$1" in
+	-a|--arch)
+		# echo "Option ARCH: argument \`$2'"
+		if [ "$opt_a" ] ; then
+			opt_a="${opt_a%)} || \$2 == \"$2\")"
+		else
+			opt_a="(\$2 == \"$2\")"
+		fi
+		SELECTED='y'
+		shift 2 ;;
+	-c|--cpu)
+		# echo "Option CPU: argument \`$2'"
+		if [ "$opt_c" ] ; then
+			opt_c="${opt_c%)} || \$3 == \"$2\" || \$3 ~ /$2:/)"
+		else
+			opt_c="(\$3 == \"$2\" || \$3 ~ /$2:/)"
+		fi
+		SELECTED='y'
+		shift 2 ;;
+	-s|--soc)
+		# echo "Option SoC: argument \`$2'"
+		if [ "$opt_s" ] ; then
+			opt_s="${opt_s%)} || \$4 == \"$2\" || \$4 ~ /$2/)"
+		else
+			opt_s="(\$4 == \"$2\" || \$4 ~ /$2/)"
+		fi
+		SELECTED='y'
+		shift 2 ;;
+	-v|--vendor)
+		# echo "Option VENDOR: argument \`$2'"
+		if [ "$opt_v" ] ; then
+			opt_v="${opt_v%)} || \$5 == \"$2\")"
+		else
+			opt_v="(\$5 == \"$2\")"
+		fi
+		SELECTED='y'
+		shift 2 ;;
+	-b|--board)
+		# echo "Option BOARD: argument \`$2'"
+		if [ "$opt_b" ] ; then
+			opt_b="${opt_b%)} || \$6 == \"$2\" || \$7 == \"$2\")"
+		else
+			# We need to check the 7th field too
+			# for boards whose 6th field is "-"
+			opt_b="(\$6 == \"$2\" || \$7 == \"$2\")"
+		fi
+		SELECTED='y'
+		shift 2 ;;
+	-C|--check)
+		CHECK='C=1'
+		shift ;;
+	-n|--continue)
+		CONTINUE='y'
+		shift ;;
+	-r|--rebuild-errors)
+		REBUILD_ERRORS='y'
+		shift ;;
+	-l|--list)
+		ONLY_LIST='y'
+		shift ;;
+	-m|--maintainers)
+		ONLY_LIST='y'
+		PRINT_MAINTS='y'
+		MAINTAINERS_ONLY='y'
+		shift ;;
+	-M|--mails)
+		ONLY_LIST='y'
+		PRINT_MAINTS='y'
+		shift ;;
+	-h|--help)
+		usage ;;
+	--)
+		shift ; break ;;
+	*)
+		echo "Internal error!" >&2 ; exit 1 ;;
+	esac
+done
+
+GNU_MAKE=$(scripts/show-gnu-make) || {
+	echo "GNU Make not found" >&2
+	exit 1
+}
+
+# echo "Remaining arguments:"
+# for arg do echo '--> '"\`$arg'" ; done
+
+tools/genboardscfg.py || {
+	echo "Failed to generate boards.cfg" >&2
+	exit 1
+}
+
+FILTER="\$1 !~ /^#/"
+[ "$opt_a" ] && FILTER="${FILTER} && $opt_a"
+[ "$opt_c" ] && FILTER="${FILTER} && $opt_c"
+[ "$opt_s" ] && FILTER="${FILTER} && $opt_s"
+[ "$opt_v" ] && FILTER="${FILTER} && $opt_v"
+[ "$opt_b" ] && FILTER="${FILTER} && $opt_b"
+
+if [ "$SELECTED" ] ; then
+	SELECTED=$(awk '('"$FILTER"') { print $7 }' boards.cfg)
+
+	# Make sure some boards from boards.cfg are actually found
+	if [ -z "$SELECTED" ] ; then
+		echo "Error: No boards selected, invalid arguments"
+		exit 1
+	fi
+fi
+
+#########################################################################
+
+# Print statistics when we exit
+trap exit 1 2 3 15
+trap print_stats 0
+
+# Determine number of CPU cores if no default was set
+: ${BUILD_NCPUS:="`getconf _NPROCESSORS_ONLN`"}
+
+if [ "$BUILD_NCPUS" -gt 1 ]
+then
+	JOBS="-j $((BUILD_NCPUS + 1))"
+else
+	JOBS=""
+fi
+
+if [ "${MAKEALL_LOGDIR}" ] ; then
+	LOG_DIR=${MAKEALL_LOGDIR}
+else
+	LOG_DIR="LOG"
+fi
+
+: ${BUILD_NBUILDS:=1}
+BUILD_MANY=0
+
+if [ "${BUILD_NBUILDS}" -gt 1 ] ; then
+	BUILD_MANY=1
+	: ${BUILD_DIR:=./build}
+	mkdir -p "${BUILD_DIR}/ERR"
+	find "${BUILD_DIR}/ERR/" -type f -exec rm -f {} +
+fi
+
+: ${BUILD_DIR:=.}
+
+OUTPUT_PREFIX="${BUILD_DIR}"
+
+[ -d ${LOG_DIR} ] || mkdir "${LOG_DIR}" || exit 1
+if [ "$CONTINUE" != 'y' -a "$REBUILD_ERRORS" != 'y' ] ; then
+	find "${LOG_DIR}/" -type f -exec rm -f {} +
+fi
+
+LIST=""
+
+# Keep track of the number of builds and errors
+ERR_CNT=0
+ERR_LIST=""
+WRN_CNT=0
+WRN_LIST=""
+TOTAL_CNT=0
+SKIP_CNT=0
+CURRENT_CNT=0
+OLDEST_IDX=1
+RC=0
+
+# Helper funcs for parsing boards.cfg
+targets_by_field()
+{
+	field=$1
+	regexp=$2
+
+	awk '($1 !~ /^#/ && $'"$field"' ~ /^'"$regexp"'$/) { print $7 }' \
+								boards.cfg
+}
+
+targets_by_arch() { targets_by_field 2 "$@" ; }
+targets_by_cpu()  { targets_by_field 3 "$@" ; targets_by_field 3 "$@:.*" ; }
+targets_by_soc()  { targets_by_field 4 "$@" ; }
+
+#########################################################################
+## MPC5xx Systems
+#########################################################################
+
+LIST_5xx="$(targets_by_cpu mpc5xx)"
+
+#########################################################################
+## MPC5xxx Systems
+#########################################################################
+
+LIST_5xxx="$(targets_by_cpu mpc5xxx)"
+
+#########################################################################
+## MPC512x Systems
+#########################################################################
+
+LIST_512x="$(targets_by_cpu mpc512x)"
+
+#########################################################################
+## MPC8xx Systems
+#########################################################################
+
+LIST_8xx="$(targets_by_cpu mpc8xx)"
+
+#########################################################################
+## PPC4xx Systems
+#########################################################################
+
+LIST_4xx="$(targets_by_cpu ppc4xx)"
+
+#########################################################################
+## MPC8260 Systems (includes 8250, 8255 etc.)
+#########################################################################
+
+LIST_8260="$(targets_by_cpu mpc8260)"
+
+#########################################################################
+## MPC83xx Systems (includes 8349, etc.)
+#########################################################################
+
+LIST_83xx="$(targets_by_cpu mpc83xx)"
+
+#########################################################################
+## MPC85xx Systems (includes 8540, 8560 etc.)
+#########################################################################
+
+LIST_85xx="$(targets_by_cpu mpc85xx)"
+
+#########################################################################
+## MPC86xx Systems
+#########################################################################
+
+LIST_86xx="$(targets_by_cpu mpc86xx)"
+
+#########################################################################
+## 74xx/7xx Systems
+#########################################################################
+
+LIST_74xx_7xx="$(targets_by_cpu 74xx_7xx)"
+
+#########################################################################
+## PowerPC groups
+#########################################################################
+
+LIST_TSEC="		\
+	${LIST_83xx}	\
+	${LIST_85xx}	\
+	${LIST_86xx}	\
+"
+
+LIST_powerpc="		\
+	${LIST_5xx}	\
+	${LIST_512x}	\
+	${LIST_5xxx}	\
+	${LIST_8xx}	\
+	${LIST_824x}	\
+	${LIST_8260}	\
+	${LIST_83xx}	\
+	${LIST_85xx}	\
+	${LIST_86xx}	\
+	${LIST_4xx}	\
+	${LIST_74xx_7xx}\
+"
+
+# Alias "ppc" -> "powerpc" to not break compatibility with older scripts
+# still using "ppc" instead of "powerpc"
+LIST_ppc="		\
+	${LIST_powerpc}	\
+"
+
+#########################################################################
+## StrongARM Systems
+#########################################################################
+
+LIST_SA="$(targets_by_cpu sa1100)"
+
+#########################################################################
+## ARM7 Systems
+#########################################################################
+
+LIST_ARM7="$(targets_by_cpu arm720t)"
+
+#########################################################################
+## ARM9 Systems
+#########################################################################
+
+LIST_ARM9="$(targets_by_cpu arm920t)	\
+	$(targets_by_cpu arm926ejs)	\
+	$(targets_by_cpu arm946es)	\
+"
+
+#########################################################################
+## ARM11 Systems
+#########################################################################
+LIST_ARM11="$(targets_by_cpu arm1136)	\
+	$(targets_by_cpu arm1176)	\
+"
+
+#########################################################################
+## ARMV7 Systems
+#########################################################################
+
+LIST_ARMV7="$(targets_by_cpu armv7)"
+
+#########################################################################
+## ARMV8 Systems
+#########################################################################
+
+LIST_ARMV8="$(targets_by_cpu armv8)"
+
+#########################################################################
+## AT91 Systems
+#########################################################################
+
+LIST_at91="$(targets_by_soc at91)"
+
+#########################################################################
+## Xscale Systems
+#########################################################################
+
+LIST_pxa="$(targets_by_cpu pxa)"
+
+#########################################################################
+## SPEAr Systems
+#########################################################################
+
+LIST_spear="$(targets_by_soc spear)"
+
+#########################################################################
+## ARM groups
+#########################################################################
+
+LIST_arm="$(targets_by_arch arm |		\
+	for ARMV8_TARGET in $LIST_ARMV8;	\
+		do sed "/$ARMV8_TARGET/d";	\
+	done)					\
+"
+
+#########################################################################
+## MIPS Systems		(default = big endian)
+#########################################################################
+
+LIST_mips="$(targets_by_arch mips)"
+
+#########################################################################
+## OpenRISC Systems
+#########################################################################
+
+LIST_openrisc="$(targets_by_arch openrisc)"
+
+#########################################################################
+## x86 Systems
+#########################################################################
+
+LIST_x86="$(targets_by_arch x86)"
+
+#########################################################################
+## Nios-II Systems
+#########################################################################
+
+LIST_nios2="$(targets_by_arch nios2)"
+
+#########################################################################
+## MicroBlaze Systems
+#########################################################################
+
+LIST_microblaze="$(targets_by_arch microblaze)"
+
+#########################################################################
+## ColdFire Systems
+#########################################################################
+
+LIST_m68k="$(targets_by_arch m68k)"
+LIST_coldfire=${LIST_m68k}
+
+#########################################################################
+## AVR32 Systems
+#########################################################################
+
+LIST_avr32="$(targets_by_arch avr32)"
+
+#########################################################################
+## Blackfin Systems
+#########################################################################
+
+LIST_blackfin="$(targets_by_arch blackfin)"
+
+#########################################################################
+## SH Systems
+#########################################################################
+
+LIST_sh2="$(targets_by_cpu sh2)"
+LIST_sh3="$(targets_by_cpu sh3)"
+LIST_sh4="$(targets_by_cpu sh4)"
+
+LIST_sh="$(targets_by_arch sh)"
+
+#########################################################################
+## SPARC Systems
+#########################################################################
+
+LIST_sparc="$(targets_by_arch sparc)"
+
+#########################################################################
+## NDS32 Systems
+#########################################################################
+
+LIST_nds32="$(targets_by_arch nds32)"
+
+#########################################################################
+## ARC Systems
+#########################################################################
+
+LIST_arc="$(targets_by_arch arc)"
+
+#-----------------------------------------------------------------------
+
+get_target_location() {
+	local target=$1
+	local BOARD_NAME=""
+	local CONFIG_NAME=""
+	local board=""
+	local vendor=""
+
+	# Automatic mode
+	local line=`awk '\$7 == "'"$target"'" { print \$0 }' boards.cfg`
+	if [ -z "${line}" ] ; then echo "" ; return ; fi
+
+	set ${line}
+
+	CONFIG_NAME="${7%_defconfig}"
+
+	[ "${BOARD_NAME}" ] || BOARD_NAME="${7%_defconfig}"
+
+	if [ $# -gt 5 ]; then
+		if [ "$6" = "-" ] ; then
+			board=${BOARD_NAME}
+		else
+			board="$6"
+		fi
+	fi
+
+	[ $# -gt 4 ] && [ "$5" != "-" ] && vendor="$5"
+	[ $# -gt 6 ] && [ "$8" != "-" ] && {
+		tmp="${8%:*}"
+		if [ "$tmp" ] ; then
+			CONFIG_NAME="$tmp"
+		fi
+	}
+
+	# Assign board directory to BOARDIR variable
+	if [ "${vendor}" == "-" ] ; then
+	    BOARDDIR=${board}
+	else
+	    BOARDDIR=${vendor}/${board}
+	fi
+
+	echo "${CONFIG_NAME}:${BOARDDIR}:${BOARD_NAME}"
+}
+
+get_target_maintainers() {
+	local name=`echo $1 | cut -d : -f 3`
+
+	local line=`awk '\$7 == "'"$target"'" { print \$0 }' boards.cfg`
+	if [ -z "${line}" ]; then
+		echo ""
+		return ;
+	fi
+
+	local mails=`echo ${line} | cut -d ' ' -f 9- | sed -e 's/[^<]*<//' -e 's/>.*</ /' -e 's/>[^>]*$//'`
+	[ "$mails" == "-" ] && mails=""
+	echo "$mails"
+}
+
+get_target_arch() {
+	local target=$1
+
+	# Automatic mode
+	local line=`awk '\$7 == "'"$target"'" { print \$0 }' boards.cfg`
+
+	if [ -z "${line}" ] ; then echo "" ; return ; fi
+
+	set ${line}
+	echo "$2"
+}
+
+list_target() {
+	if [ "$PRINT_MAINTS" != 'y' ] ; then
+		echo "$1"
+		return
+	fi
+
+	echo -n "$1:"
+
+	local loc=`get_target_location $1`
+
+	if [ -z "${loc}" ] ; then echo "ERROR" ; return ; fi
+
+	local maintainers_result=`get_target_maintainers ${loc} | tr " " "\n"`
+
+	if [ "$MAINTAINERS_ONLY" != 'y' ] ; then
+
+		local dir=`echo ${loc} | cut -d ":" -f 2`
+		local cfg=`echo ${loc} | cut -d ":" -f 1`
+		local git_result=`git log --format=%aE board/${dir} \
+				include/configs/${cfg}.h | grep "@"`
+		local git_result_recent=`echo ${git_result} | tr " " "\n" | \
+						head -n 3`
+		local git_result_top=`echo ${git_result} | tr " " "\n" | \
+			sort | uniq -c | sort -nr | head -n 3 | \
+			sed "s/^ \+[0-9]\+ \+//"`
+
+		echo -e "$git_result_recent\n$git_result_top\n$maintainers_result" | \
+			sort -u | tr "\n" " " | sed "s/ $//" ;
+	else
+		echo -e "$maintainers_result" | sort -u | tr "\n" " " | \
+						sed "s/ $//" ;
+	fi
+
+	echo ""
+}
+
+# Each finished build will have a file called ${donep}${n},
+# where n is the index of the build. Each build
+# we've already noted as finished will have ${skipp}${n}.
+# The code managing the build process will use this information
+# to ensure that only BUILD_NBUILDS builds are in flight at once
+donep="${LOG_DIR}/._done_"
+skipp="${LOG_DIR}/._skip_"
+
+build_target_killed() {
+	echo "Aborted $target build."
+	# Remove the logs for this board since it was aborted
+	rm -f ${LOG_DIR}/$target.MAKELOG ${LOG_DIR}/$target.ERR
+	exit
+}
+
+build_target() {
+	target=$1
+	build_idx=$2
+
+	if [ "$ONLY_LIST" == 'y' ] ; then
+		list_target ${target}
+		return
+	fi
+
+	if [ $BUILD_MANY == 1 ] ; then
+		output_dir="${OUTPUT_PREFIX}/${target}"
+		mkdir -p "${output_dir}"
+		trap build_target_killed TERM
+	else
+		output_dir="${OUTPUT_PREFIX}"
+	fi
+
+	target_arch=$(get_target_arch ${target})
+	eval cross_toolchain=\$CROSS_COMPILE_`echo $target_arch | tr '[:lower:]' '[:upper:]'`
+	if [ "${cross_toolchain}" ] ; then
+	    MAKE="$GNU_MAKE CROSS_COMPILE=${cross_toolchain}"
+	elif [ "${CROSS_COMPILE}" ] ; then
+	    MAKE="$GNU_MAKE CROSS_COMPILE=${CROSS_COMPILE}"
+	else
+	    MAKE=$GNU_MAKE
+	fi
+
+	if [  "${output_dir}" != "." ] ; then
+		MAKE="${MAKE} O=${output_dir}"
+	fi
+
+	${MAKE} mrproper >/dev/null
+
+	echo "Building ${target} board..."
+	${MAKE} -s ${target}_defconfig >/dev/null
+
+	${MAKE} ${JOBS} ${CHECK} all \
+		>${LOG_DIR}/$target.MAKELOG 2> ${LOG_DIR}/$target.ERR
+
+	# Check for 'make' errors
+	if [ ${PIPESTATUS[0]} -ne 0 ] ; then
+		RC=1
+	fi
+
+	if [ $BUILD_MANY == 1 ] ; then
+		trap - TERM
+
+		${MAKE} -s clean
+
+		if [ -s ${LOG_DIR}/${target}.ERR ] ; then
+			cp ${LOG_DIR}/${target}.ERR ${OUTPUT_PREFIX}/ERR/${target}
+		else
+			rm ${LOG_DIR}/${target}.ERR
+		fi
+	else
+		if [ -s ${LOG_DIR}/${target}.ERR ] ; then
+			if grep -iw error ${LOG_DIR}/${target}.ERR ; then
+				: $(( ERR_CNT += 1 ))
+				ERR_LIST="${ERR_LIST} $target"
+			else
+				: $(( WRN_CNT += 1 ))
+				WRN_LIST="${WRN_LIST} $target"
+			fi
+		else
+			rm ${LOG_DIR}/${target}.ERR
+		fi
+	fi
+
+	OBJS=${output_dir}/u-boot
+	if [ -e ${output_dir}/spl/u-boot-spl ]; then
+		OBJS="${OBJS} ${output_dir}/spl/u-boot-spl"
+	fi
+
+	${CROSS_COMPILE}size ${OBJS} | tee -a ${LOG_DIR}/$target.MAKELOG
+
+	[ -e "${LOG_DIR}/${target}.ERR" ] && cat "${LOG_DIR}/${target}.ERR"
+
+	touch "${donep}${build_idx}"
+}
+
+manage_builds() {
+	search_idx=${OLDEST_IDX}
+	if [ "$ONLY_LIST" == 'y' ] ; then return ; fi
+
+	while true; do
+		if [ -e "${donep}${search_idx}" ] ; then
+			: $(( CURRENT_CNT-- ))
+			[ ${OLDEST_IDX} -eq ${search_idx} ] &&
+				: $(( OLDEST_IDX++ ))
+
+			# Only want to count it once
+			rm -f "${donep}${search_idx}"
+			touch "${skipp}${search_idx}"
+		elif [ -e "${skipp}${search_idx}" ] ; then
+			[ ${OLDEST_IDX} -eq ${search_idx} ] &&
+				: $(( OLDEST_IDX++ ))
+		fi
+		: $(( search_idx++ ))
+		if [ ${search_idx} -gt ${TOTAL_CNT} ] ; then
+			if [ ${CURRENT_CNT} -ge ${BUILD_NBUILDS} ] ; then
+				search_idx=${OLDEST_IDX}
+				sleep 1
+			else
+				break
+			fi
+		fi
+	done
+}
+
+build_targets() {
+	for t in "$@" ; do
+		# If a LIST_xxx var exists, use it.  But avoid variable
+		# expansion in the eval when a board name contains certain
+		# characters that the shell interprets.
+		case ${t} in
+			*[-+=]*) list= ;;
+			*)       list=$(eval echo '${LIST_'$t'}') ;;
+		esac
+		if [ -n "${list}" ] ; then
+			build_targets ${list}
+		else
+			: $((TOTAL_CNT += 1))
+			: $((CURRENT_CNT += 1))
+			rm -f "${donep}${TOTAL_CNT}"
+			rm -f "${skipp}${TOTAL_CNT}"
+			if [ "$CONTINUE" = 'y' -a -e ${LOG_DIR}/$t.MAKELOG ] ; then
+				: $((SKIP_CNT += 1))
+				touch "${donep}${TOTAL_CNT}"
+			elif [ "$REBUILD_ERRORS" = 'y' -a ! -e ${LOG_DIR}/$t.ERR ] ; then
+				: $((SKIP_CNT += 1))
+				touch "${donep}${TOTAL_CNT}"
+			else
+				if [ $BUILD_MANY == 1 ] ; then
+					build_target ${t} ${TOTAL_CNT} &
+				else
+					CUR_TGT="${t}"
+					build_target ${t} ${TOTAL_CNT}
+					CUR_TGT=''
+				fi
+			fi
+		fi
+
+		# We maintain a running count of all the builds we have done.
+		# Each finished build will have a file called ${donep}${n},
+		# where n is the index of the build. Each build
+		# we've already noted as finished will have ${skipp}${n}.
+		# We track the current index via TOTAL_CNT, and the oldest
+		# index. When we exceed the maximum number of parallel builds,
+		# We look from oldest to current for builds that have completed,
+		# and update the current count and oldest index as appropriate.
+		# If we've gone through the entire list, wait a second, and
+		# reprocess the entire list until we find a build that has
+		# completed
+		if [ ${CURRENT_CNT} -ge ${BUILD_NBUILDS} ] ; then
+			manage_builds
+		fi
+	done
+}
+
+#-----------------------------------------------------------------------
+
+kill_children() {
+	local OS=$(uname -s)
+	local children=""
+	case "${OS}" in
+		"Darwin")
+			# Mac OS X is known to have BSD style ps
+			local pgid=$(ps -p $$ -o pgid | sed -e "/PGID/d")
+			children=$(ps -g $pgid -o pid | sed -e "/PID\|$$\|$pgid/d")
+			;;
+		*)
+			# everything else tries the GNU style
+			local pgid=$(ps -p $$ --no-headers -o "%r" | tr -d ' ')
+			children=$(pgrep -g $pgid | sed -e "/$$\|$pgid/d")
+			;;
+	esac
+
+	kill $children 2> /dev/null
+	wait $children 2> /dev/null
+
+	exit
+}
+
+print_stats() {
+	if [ "$ONLY_LIST" == 'y' ] ; then return ; fi
+
+	# Only count boards that completed
+	: $((TOTAL_CNT = `find ${skipp}* 2> /dev/null | wc -l`))
+
+	rm -f ${donep}* ${skipp}*
+
+	if [ $BUILD_MANY == 1 ] && [ -e "${OUTPUT_PREFIX}/ERR" ] ; then
+		ERR_LIST=`grep -riwl error ${OUTPUT_PREFIX}/ERR/`
+		ERR_LIST=`for f in $ERR_LIST ; do echo -n " $(basename $f)" ; done`
+		ERR_CNT=`echo $ERR_LIST | wc -w | awk '{print $1}'`
+		WRN_LIST=`grep -riwL error ${OUTPUT_PREFIX}/ERR/`
+		WRN_LIST=`for f in $WRN_LIST ; do echo -n " $(basename $f)" ; done`
+		WRN_CNT=`echo $WRN_LIST | wc -w | awk '{print $1}'`
+	else
+		# Remove the logs for any board that was interrupted
+		rm -f ${LOG_DIR}/${CUR_TGT}.MAKELOG ${LOG_DIR}/${CUR_TGT}.ERR
+	fi
+
+	: $((TOTAL_CNT -= ${SKIP_CNT}))
+	echo ""
+	echo "--------------------- SUMMARY ----------------------------"
+	if [ "$CONTINUE" = 'y' -o "$REBUILD_ERRORS" = 'y' ] ; then
+		echo "Boards skipped: ${SKIP_CNT}"
+	fi
+	echo "Boards compiled: ${TOTAL_CNT}"
+	if [ ${ERR_CNT} -gt 0 ] ; then
+		echo "Boards with errors: ${ERR_CNT} (${ERR_LIST} )"
+	fi
+	if [ ${WRN_CNT} -gt 0 ] ; then
+		echo "Boards with warnings but no errors: ${WRN_CNT} (${WRN_LIST} )"
+	fi
+	echo "----------------------------------------------------------"
+
+	if [ $BUILD_MANY == 1 ] ; then
+		kill_children
+	fi
+
+	exit $RC
+}
+
+#-----------------------------------------------------------------------
+
+# Build target groups selected by options, plus any command line args
+set -- ${SELECTED} "$@"
+# run PowerPC by default
+[ $# = 0 ] && set -- powerpc
+build_targets "$@"
+wait
diff --git a/Makefile b/Makefile
index c126507..a6a43f9 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,4 @@
-# SPDX-License-Identifier: GPL-2.0+
-
-VERSION = 2019
+VERSION = 2015
 PATCHLEVEL = 01
 SUBLEVEL =
 EXTRAVERSION =
@@ -12,10 +10,9 @@
 # Comments in this file are targeted only to the developer, do not
 # expect to learn how to build the kernel reading this file.
 
-# o Do not use make's built-in rules and variables
-#   (this increases performance and avoids hard-to-debug behaviour);
-# o Look for make include files relative to root of kernel src
-MAKEFLAGS += -rR --include-dir=$(CURDIR)
+# Do not use make's built-in rules and variables
+# (this increases performance and avoids hard-to-debug behaviour);
+MAKEFLAGS += -rR --no-print-directory
 
 # Avoid funny character set dependencies
 unexport LC_ALL
@@ -42,16 +39,6 @@
 # descending is started. They are now explicitly listed as the
 # prepare rule.
 
-# We use U_BOOT_DATE and U_BOOT_TIME to record u-boot build timestamp.
-# make T=0 or by default to use local time (date) as build timestamp.
-# make T=1 to use latest git commit time as build timestamp.
-ifeq ("$(origin T)", "command line")
-	KBUILD_TIME_STAMP = $(T)
-endif
-ifndef KBUILD_TIME_STAMP
-	KBUILD_TIME_STAMP = 0
-endif
-
 # Beautify output
 # ---------------------------------------------------------------------------
 #
@@ -171,7 +158,7 @@
 # Do not print "Entering directory ...",
 # but we want to display it when entering to the output directory
 # so that IDEs/editors are able to understand relative filenames.
-MAKEFLAGS += --no-print-directory
+#MAKEFLAGS += --no-print-directory
 
 # Call a source code checker (by default, "sparse") as part of the
 # C compilation.
@@ -225,12 +212,12 @@
 src		:= $(srctree)
 obj		:= $(objtree)
 
-VPATH		:= $(srctree)$(if $(KBUILD_EXTMOD),:$(KBUILD_EXTMOD))
-
 buildsrc	:= $(abspath $(srctree))
 buildtree	:= $(abspath $(CURDIR)/$(KBUILD_OUTPUT))
 
-export srctree objtree VPATH buildsrc buildtree KBUILD_OUTPUT
+VPATH		:= $(srctree)$(if $(KBUILD_EXTMOD),:$(KBUILD_EXTMOD))
+
+export srctree objtree VPATH KBUILD_OUTPUT buildtree buildsrc
 
 # Make sure CDPATH settings don't interfere
 unexport CDPATH
@@ -259,8 +246,6 @@
 CROSS_COMPILE ?=
 endif
 
-#CROSS_COMPILE ?=/opt/gcc-linaro-7.3.1-2018.05-i686_aarch64-elf/bin/aarch64-elf-
-#export CROSS_COMPILE
 
 KCONFIG_CONFIG	?= .config
 export KCONFIG_CONFIG
@@ -272,20 +257,9 @@
 
 HOSTCC       = cc
 HOSTCXX      = c++
-HOSTCFLAGS   = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer \
-		$(if $(CONFIG_TOOLS_DEBUG),-g)
+HOSTCFLAGS   = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer
 HOSTCXXFLAGS = -O2
 
-# With the move to GCC 6, we have implicitly upgraded our language
-# standard to GNU11 (see https://gcc.gnu.org/gcc-5/porting_to.html).
-# Some Linux distributions (including RHEL7, SLES13, Debian 8) still
-# have older compilers as their default, so we make it explicit for
-# these that our host tools are GNU11 (i.e. C11 w/ GNU extensions).
-CSTD_FLAG := -std=gnu11
-ifeq ($(HOSTOS),linux)
-HOSTCFLAGS += $(CSTD_FLAG)
-endif
-
 ifeq ($(HOSTOS),cygwin)
 HOSTCFLAGS	+= -ansi
 endif
@@ -313,11 +287,6 @@
 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")
-
-# since Lion (10.7) ASLR is on by default, but we use linker generated lists
-# in some host tools which is a problem then ... so disable ASLR for these
-# tools
-HOSTLDFLAGS += $(call os_x_before, 10, 7, "", "-Xlinker -no_pie")
 endif
 
 # Decide whether to build built-in, modular, or both.
@@ -351,9 +320,12 @@
 export KBUILD_MODULES KBUILD_BUILTIN
 export KBUILD_CHECKSRC KBUILD_SRC KBUILD_EXTMOD
 
+# Look for make include files relative to root of kernel src
+MAKEFLAGS += --include-dir=$(srctree)
+
 # We need some generic definitions (do not try to remake the file).
-scripts/Kbuild.include: ;
-include scripts/Kbuild.include
+$(srctree)/scripts/Kbuild.include: ;
+include $(srctree)/scripts/Kbuild.include
 
 # Make variables (CC, etc...)
 
@@ -372,14 +344,10 @@
 STRIP		= $(CROSS_COMPILE)strip
 OBJCOPY		= $(CROSS_COMPILE)objcopy
 OBJDUMP		= $(CROSS_COMPILE)objdump
-LEX		= flex
-YACC		= bison
 AWK		= awk
 PERL		= perl
-PYTHON		?= python
-PYTHON2		= python2
-PYTHON3		= python3
-DTC		?= $(objtree)/scripts/dtc/dtc
+PYTHON		= python
+DTC		= dtc
 CHECK		= sparse
 
 CHECKFLAGS     := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \
@@ -389,29 +357,19 @@
 
 KBUILD_CFLAGS   := -Wall -Wstrict-prototypes \
 		   -Wno-format-security \
-		   -fno-builtin -ffreestanding $(CSTD_FLAG)
-KBUILD_CFLAGS	+= -fshort-wchar -fno-strict-aliasing
+		   -fno-builtin -ffreestanding
 KBUILD_AFLAGS   := -D__ASSEMBLY__
-ifeq ($(BL33_DEBUG), 1)
-	KBUILD_CFLAGS+=-DBL33_DEBUG_PRINT
-endif
-
-# Don't generate position independent code
-KBUILD_CFLAGS	+= $(call cc-option,-fno-PIE)
-KBUILD_AFLAGS	+= $(call cc-option,-fno-PIE)
 
 # Read UBOOTRELEASE from include/config/uboot.release (if it exists)
 UBOOTRELEASE = $(shell cat include/config/uboot.release 2> /dev/null)
 UBOOTVERSION = $(VERSION)$(if $(PATCHLEVEL),.$(PATCHLEVEL)$(if $(SUBLEVEL),.$(SUBLEVEL)))$(EXTRAVERSION)
 
-ACSRELEASE = $(shell cat include/config/acs.release 2> /dev/null)
-
-export VERSION PATCHLEVEL SUBLEVEL UBOOTRELEASE UBOOTVERSION ACSRELEASE
+export VERSION PATCHLEVEL SUBLEVEL UBOOTRELEASE UBOOTVERSION
 export ARCH CPU BOARD VENDOR SOC CPUDIR BOARDDIR
 export CONFIG_SHELL HOSTCC HOSTCFLAGS HOSTLDFLAGS CROSS_COMPILE AS LD CC
 export CPP AR NM LDR STRIP OBJCOPY OBJDUMP
-export MAKE LEX YACC AWK PERL PYTHON PYTHON2 PYTHON3
-export HOSTCXX HOSTCXXFLAGS CHECK CHECKFLAGS DTC DTC_FLAGS
+export MAKE AWK PERL PYTHON
+export HOSTCXX HOSTCXXFLAGS DTC CHECK CHECKFLAGS
 
 export KBUILD_CPPFLAGS NOSTDINC_FLAGS UBOOTINCLUDE OBJCOPYFLAGS LDFLAGS
 export KBUILD_CFLAGS KBUILD_AFLAGS
@@ -462,12 +420,10 @@
 
 version_h := include/generated/version_autogenerated.h
 timestamp_h := include/generated/timestamp_autogenerated.h
-defaultenv_h := include/generated/defaultenv_autogenerated.h
-timestamp_git_h := include/generated/timestamp_autogenerated.h
 
 no-dot-config-targets := clean clobber mrproper distclean \
 			 help %docs check% coccicheck \
-			 ubootversion backup tests check qcheck
+			 ubootversion backup
 
 config-targets := 0
 mixed-targets  := 0
@@ -482,7 +438,7 @@
 ifeq ($(KBUILD_EXTMOD),)
         ifneq ($(filter config %config,$(MAKECMDGOALS)),)
                 config-targets := 1
-                ifneq ($(words $(MAKECMDGOALS)),1)
+                ifneq ($(filter-out config %config,$(MAKECMDGOALS)),)
                         mixed-targets := 1
                 endif
         endif
@@ -518,23 +474,16 @@
 export KBUILD_DEFCONFIG KBUILD_KCONFIG
 
 config: scripts_basic outputmakefile FORCE
-	$(Q)$(MAKE) $(build)=scripts/kconfig $@
+	+$(Q)$(CONFIG_SHELL) $(srctree)/scripts/multiconfig.sh $@
 
 %config: scripts_basic outputmakefile FORCE
-	$(Q)$(MAKE) $(build)=scripts/kconfig $@
+	+$(Q)$(CONFIG_SHELL) $(srctree)/scripts/multiconfig.sh $@
 
 else
 # ===========================================================================
 # Build targets only - this includes vmlinux, arch specific targets, clean
 # targets and others. In general all targets except *config targets.
 
-# Additional helpers built in scripts/
-# Carefully list dependencies so we do not try to build scripts twice
-# in parallel
-PHONY += scripts
-scripts: scripts_basic include/config/auto.conf
-	$(Q)$(MAKE) $(build)=$(@)
-
 ifeq ($(dot-config),1)
 # Read in config
 -include include/config/auto.conf
@@ -551,19 +500,7 @@
 # if auto.conf.cmd is missing then we are probably in a cleaned tree so
 # we execute the config step to be sure to catch updated Kconfig files
 include/config/%.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd
-	$(Q)$(MAKE) -f $(srctree)/Makefile syncconfig
-	@# If the following part fails, include/config/auto.conf should be
-	@# deleted so "make silentoldconfig" will be re-run on the next build.
-	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.autoconf || \
-		{ rm -f include/config/auto.conf; false; }
-	@# include/config.h has been updated after "make silentoldconfig".
-	@# We need to touch include/config/auto.conf so it gets newer
-	@# than include/config.h.
-	@# Otherwise, 'make silentoldconfig' would be invoked twice.
-	$(Q)touch include/config/auto.conf
-
-u-boot.cfg spl/u-boot.cfg tpl/u-boot.cfg: include/config.h FORCE
-	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.autoconf $(@)
+	$(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig
 
 -include include/autoconf.mk
 -include include/autoconf.mk.dep
@@ -572,25 +509,12 @@
 # is up-to-date. When we switch to a different board configuration, old CONFIG
 # macros are still remaining in include/config/auto.conf. Without the following
 # gimmick, wrong config.mk would be included leading nasty warnings/errors.
-ifneq ($(wildcard $(KCONFIG_CONFIG)),)
-ifneq ($(wildcard include/config/auto.conf),)
-autoconf_is_old := $(shell find . -path ./$(KCONFIG_CONFIG) -newer \
-						include/config/auto.conf)
-ifeq ($(autoconf_is_old),)
-include config.mk
-include arch/$(ARCH)/Makefile
+autoconf_is_current := $(if $(wildcard $(KCONFIG_CONFIG)),$(shell find . \
+		-path ./include/config/auto.conf -newer $(KCONFIG_CONFIG)))
+ifneq ($(autoconf_is_current),)
+include $(srctree)/config.mk
+include $(srctree)/arch/$(ARCH)/Makefile
 endif
-endif
-endif
-
-# These are set by the arch-specific config.mk. Make sure they are exported
-# so they can be used when building an EFI application.
-export EFI_LDS		# Filename of EFI link script in arch/$(ARCH)/lib
-export EFI_CRT0		# Filename of EFI CRT0 in arch/$(ARCH)/lib
-export EFI_RELOC	# Filename of EFU relocation code in arch/$(ARCH)/lib
-export CFLAGS_EFI	# Compiler flags to add when building EFI app
-export CFLAGS_NON_EFI	# Compiler flags to remove when building EFI app
-export EFI_TARGET	# binutils target if EFI is natively supported
 
 # If board code explicitly specified LDSCRIPT or CONFIG_SYS_LDSCRIPT, use
 # that (or fail if absent).  Otherwise, search for a linker script in a
@@ -622,26 +546,17 @@
 include/config/auto.conf: ;
 endif # $(dot-config)
 
-#
-# Xtensa linker script cannot be preprocessed with -ansi because of
-# preprocessor operations on strings that don't make C identifiers.
-#
-ifeq ($(CONFIG_XTENSA),)
-LDPPFLAGS	+= -ansi
-endif
-
 ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
 KBUILD_CFLAGS	+= -Os
 else
 KBUILD_CFLAGS	+= -O2
 endif
 
-STACK_CFLAGS  := $(call cc-option,-fstack-protector-strong)
-KBUILD_CFLAGS += $(STACK_CFLAGS)
-KBUILD_CFLAGS += $(call cc-option,-fno-delete-null-pointer-checks)
+ifdef BUILD_TAG
+KBUILD_CFLAGS += -DBUILD_TAG='"$(BUILD_TAG)"'
+endif
 
-# change __FILE__ to the relative path from the srctree
-KBUILD_CFLAGS	+= $(call cc-option,-fmacro-prefix-map=$(srctree)/=)
+KBUILD_CFLAGS += $(call cc-option,-fno-stack-protector)
 
 KBUILD_CFLAGS	+= -g
 # $(KBUILD_AFLAGS) sets -g, which causes gcc to pass a suitable -g<format>
@@ -649,22 +564,11 @@
 KBUILD_AFLAGS	+= -g
 
 # Report stack usage if supported
-# ARC tools based on GCC 7.1 has an issue with stack usage
-# with naked functions, see commit message for more details
-ifndef CONFIG_ARC
 ifeq ($(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-stack-usage.sh $(CC)),y)
 	KBUILD_CFLAGS += -fstack-usage
 endif
-endif
 
 KBUILD_CFLAGS += $(call cc-option,-Wno-format-nonliteral)
-ifeq ($(cc-name),clang)
-KBUILD_CPPFLAGS += $(call cc-option,-Qunused-arguments,)
-KBUILD_CFLAGS += $(call cc-disable-warning, format-invalid-specifier)
-KBUILD_CFLAGS += $(call cc-disable-warning, gnu)
-KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)
-KBUILD_CFLAGS += $(call cc-option, -fcatch-undefined-behavior)
-endif
 
 # turn jbsr into jsr for m68k
 ifeq ($(ARCH),m68k)
@@ -676,25 +580,25 @@
 # Prohibit date/time macros, which would make the build non-deterministic
 KBUILD_CFLAGS   += $(call cc-option,-Werror=date-time)
 
-include scripts/Makefile.extrawarn
+ifneq ($(CONFIG_SYS_TEXT_BASE),)
+KBUILD_CPPFLAGS += -DCONFIG_SYS_TEXT_BASE=$(CONFIG_SYS_TEXT_BASE)
+endif
+
+export CONFIG_SYS_TEXT_BASE
+
+include $(srctree)/scripts/Makefile.extrawarn
 
 # Add user supplied CPPFLAGS, AFLAGS and CFLAGS as the last assignments
 KBUILD_CPPFLAGS += $(KCPPFLAGS)
 KBUILD_AFLAGS += $(KAFLAGS)
 KBUILD_CFLAGS += $(KCFLAGS)
-
-ifdef BOARD_NAME
-KBUILD_CFLAGS += -DBOARD_NAME='"$(BOARD_NAME)"'
-endif
+KBUILD_CFLAGS += -Werror
 
 # Use UBOOTINCLUDE when you must reference the include/ directory.
 # Needed to be compatible with the O= option
 UBOOTINCLUDE    := \
 		-Iinclude \
 		$(if $(KBUILD_SRC), -I$(srctree)/include) \
-		$(if $(CONFIG_$(SPL_)SYS_THUMB_BUILD), \
-			$(if $(CONFIG_HAS_THUMB2),, \
-				-I$(srctree)/arch/$(ARCH)/thumb1/include),) \
 		-I$(srctree)/arch/$(ARCH)/include \
 		-include $(srctree)/include/linux/kconfig.h
 
@@ -721,47 +625,41 @@
 libs-y += drivers/dma/
 libs-y += drivers/gpio/
 libs-y += drivers/i2c/
+libs-y += drivers/mmc/
 libs-y += drivers/mtd/
-libs-$(CONFIG_CMD_NAND) += drivers/mtd/nand/raw/
+libs-$(CONFIG_AML_NAND) += drivers/nand/
+libs-$(CONFIG_CMD_NAND) += drivers/mtd/nand/
+libs-$(CONFIG_CMD_NAND) += drivers/mtd/nand/amlogic_mtd/
 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/domain/ \
 	drivers/power/fuel_gauge/ \
 	drivers/power/mfd/ \
 	drivers/power/pmic/ \
-	drivers/power/battery/ \
-	drivers/power/regulator/
+	drivers/power/battery/
 libs-y += drivers/spi/
 libs-$(CONFIG_FMAN_ENET) += drivers/net/fm/
 libs-$(CONFIG_SYS_FSL_DDR) += drivers/ddr/fsl/
-libs-$(CONFIG_SYS_FSL_MMDC) += drivers/ddr/fsl/
-libs-$(CONFIG_ALTERA_SDRAM) += drivers/ddr/altera/
 libs-y += drivers/serial/
-libs-y += drivers/usb/dwc3/
-libs-y += drivers/usb/common/
-libs-y += drivers/usb/emul/
 libs-y += drivers/usb/eth/
-libs-$(CONFIG_USB_GADGET) += drivers/usb/gadget/
-libs-$(CONFIG_USB_GADGET) += drivers/usb/gadget/udc/
+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 += cmd/
 libs-y += common/
-libs-y += env/
 libs-$(CONFIG_API) += api/
 libs-$(CONFIG_HAS_POST) += post/
-libs-$(CONFIG_UNIT_TEST) += test/ test/dm/
-libs-$(CONFIG_UT_ENV) += test/env/
-libs-$(CONFIG_UT_OVERLAY) += test/overlay/
+libs-y += test/
+libs-y += test/dm/
 
-libs-y += $(if $(BOARDDIR),board/$(BOARDDIR)/)
+#libs-y += $(if $(BOARDDIR),board/$(BOARDDIR)/)
+libs-y += $(if $(BOARDDIR),$(BOARDDIR)/)
 
 libs-y := $(sort $(libs-y))
 
@@ -774,10 +672,6 @@
 u-boot-init := $(head-y)
 u-boot-main := $(libs-y)
 
-ifeq ($(CONFIG_AML_DOLBY), y)
-PLATFORM_CPPFLAGS += -I$(srctree)/drivers/amlogic/media/osd/dv/prebuild
-PLATFORM_LIBS += $(srctree)/drivers/amlogic/media/osd/dv/prebuild/dovi.a
-endif
 
 # Add GCC lib
 ifeq ($(CONFIG_USE_PRIVATE_LIBGCC),y)
@@ -786,12 +680,6 @@
 PLATFORM_LIBGCC := -L $(shell dirname `$(CC) $(c_flags) -print-libgcc-file-name`) -lgcc
 endif
 PLATFORM_LIBS += $(PLATFORM_LIBGCC)
-
-ifdef CONFIG_CC_COVERAGE
-KBUILD_CFLAGS += --coverage
-PLATFORM_LIBGCC += -lgcov
-endif
-
 export PLATFORM_LIBS
 export PLATFORM_LIBGCC
 
@@ -823,9 +711,6 @@
 endif
 
 # Statically apply RELA-style relocations (currently arm64 only)
-# 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).
 ifneq ($(CONFIG_STATIC_RELA),)
 # $(1) is u-boot ELF, $(2) is u-boot bin, $(3) is text base
 DO_STATIC_RELA = \
@@ -837,31 +722,21 @@
 endif
 
 # Always append ALL so that arch config.mk's can add custom ones
-ALL-y += u-boot.srec u-boot.bin u-boot.sym System.map binary_size_check
+ALL-y += u-boot.srec u-boot.bin System.map binary_size_check
+ALL-y += u-boot.hex
+ifeq ($(CONFIG_NEED_BL301), y)
 ALL-y += bl301.bin
-
+endif
 ALL-$(CONFIG_ONENAND_U_BOOT) += u-boot-onenand.bin
 ifeq ($(CONFIG_SPL_FSL_PBL),y)
 ALL-$(CONFIG_RAMBOOT_PBL) += u-boot-with-spl-pbl.bin
 else
-ifneq ($(CONFIG_SECURE_BOOT), y)
-# For Secure Boot The Image needs to be signed and Header must also
-# be included. So The image has to be built explicitly
 ALL-$(CONFIG_RAMBOOT_PBL) += u-boot.pbl
 endif
-endif
 ALL-$(CONFIG_SPL) += spl/u-boot-spl.bin
-ifeq ($(CONFIG_MX6)$(CONFIG_SECURE_BOOT), yy)
-ALL-$(CONFIG_SPL_FRAMEWORK) += u-boot-ivt.img
-else
-ifeq ($(CONFIG_MX7)$(CONFIG_SECURE_BOOT), yy)
-ALL-$(CONFIG_SPL_FRAMEWORK) += u-boot-ivt.img
-else
 ALL-$(CONFIG_SPL_FRAMEWORK) += u-boot.img
-endif
-endif
 ALL-$(CONFIG_TPL) += tpl/u-boot-tpl.bin
-ALL-$(CONFIG_OF_SEPARATE) += u-boot.dtb
+ALL-$(CONFIG_OF_SEPARATE) += u-boot.dtb u-boot-dtb.bin
 ifeq ($(CONFIG_SPL_FRAMEWORK),y)
 ALL-$(CONFIG_OF_SEPARATE) += u-boot-dtb.img
 endif
@@ -870,69 +745,37 @@
 ALL-$(CONFIG_SPL) += $(CONFIG_SPL_TARGET:"%"=%)
 endif
 ALL-$(CONFIG_REMAKE_ELF) += u-boot.elf
-ALL-$(CONFIG_EFI_APP) += u-boot-app.efi
-ALL-$(CONFIG_EFI_STUB) += u-boot-payload.efi
 
-ifneq ($(BUILD_ROM)$(CONFIG_BUILD_ROM),)
-ALL-$(CONFIG_X86_RESET_VECTOR) += u-boot.rom
-endif
-
-# Build a combined spl + u-boot image for sunxi
-ifeq ($(CONFIG_ARCH_SUNXI)$(CONFIG_SPL),yy)
-ALL-y += u-boot-sunxi-with-spl.bin
-endif
+# We can't do this yet due to the need for binary blobs
+# ALL-$(CONFIG_X86_RESET_VECTOR) += u-boot.rom
 
 # enable combined SPL/u-boot/dtb rules for tegra
-ifeq ($(CONFIG_TEGRA)$(CONFIG_SPL),yy)
-ALL-y += u-boot-tegra.bin u-boot-nodtb-tegra.bin
-ALL-$(CONFIG_OF_SEPARATE) += u-boot-dtb-tegra.bin
+ifneq ($(CONFIG_TEGRA),)
+ifeq ($(CONFIG_SPL),y)
+ifeq ($(CONFIG_OF_SEPARATE),y)
+ALL-y += u-boot-dtb-tegra.bin
+else
+ALL-y += u-boot-nodtb-tegra.bin
 endif
-
-ALL-$(CONFIG_ARCH_MEDIATEK) += u-boot-mtk.bin
+endif
+endif
 
 # Add optional build target if defined in board/cpu/soc headers
 ifneq ($(CONFIG_BUILD_TARGET),)
 ALL-y += $(CONFIG_BUILD_TARGET:"%"=%)
 endif
 
-ifneq ($(CONFIG_SYS_INIT_SP_BSS_OFFSET),)
-ALL-y += init_sp_bss_offset_check
-endif
-
-ifeq ($(CONFIG_MPC85xx)$(CONFIG_OF_SEPARATE),yy)
-ALL-y += u-boot-with-dtb.bin
-endif
-
 LDFLAGS_u-boot += $(LDFLAGS_FINAL)
-
-# Avoid 'Not enough room for program headers' error on binutils 2.28 onwards.
-LDFLAGS_u-boot += $(call ld-option, --no-dynamic-linker)
-
-ifeq ($(CONFIG_ARC)$(CONFIG_NIOS2)$(CONFIG_X86)$(CONFIG_XTENSA),)
+ifneq ($(CONFIG_SYS_TEXT_BASE),)
 LDFLAGS_u-boot += -Ttext $(CONFIG_SYS_TEXT_BASE)
 endif
 
-# Normally we fill empty space with 0xff
 quiet_cmd_objcopy = OBJCOPY $@
-cmd_objcopy = $(OBJCOPY) --gap-fill=0xff $(OBJCOPYFLAGS) \
-	$(OBJCOPYFLAGS_$(@F)) $< $@
-
-# Provide a version which does not do this, for use by EFI
-quiet_cmd_zobjcopy = OBJCOPY $@
-cmd_zobjcopy = $(OBJCOPY) $(OBJCOPYFLAGS) $(OBJCOPYFLAGS_$(@F)) $< $@
-
-quiet_cmd_efipayload = OBJCOPY $@
-cmd_efipayload = $(OBJCOPY) -I binary -O $(EFIPAYLOAD_BFDTARGET) -B $(EFIPAYLOAD_BFDARCH) $< $@
-
-MKIMAGEOUTPUT ?= /dev/null
+cmd_objcopy = $(OBJCOPY) $(OBJCOPYFLAGS) $(OBJCOPYFLAGS_$(@F)) $< $@
 
 quiet_cmd_mkimage = MKIMAGE $@
 cmd_mkimage = $(objtree)/tools/mkimage $(MKIMAGEFLAGS_$(@F)) -d $< $@ \
-	>$(MKIMAGEOUTPUT) $(if $(KBUILD_VERBOSE:0=), && cat $(MKIMAGEOUTPUT))
-
-quiet_cmd_mkfitimage = MKIMAGE $@
-cmd_mkfitimage = $(objtree)/tools/mkimage $(MKIMAGEFLAGS_$(@F)) -f $(U_BOOT_ITS) -E $@ -p $(CONFIG_FIT_EXTERNAL_OFFSET)\
-	>$(MKIMAGEOUTPUT) $(if $(KBUILD_VERBOSE:0=), && cat $(MKIMAGEOUTPUT))
+	$(if $(KBUILD_VERBOSE:1=), >/dev/null)
 
 quiet_cmd_cat = CAT     $@
 cmd_cat = cat $(filter-out $(PHONY), $^) > $@
@@ -942,155 +785,24 @@
 quiet_cmd_pad_cat = CAT     $@
 cmd_pad_cat = $(cmd_objcopy) && $(append) || rm -f $@
 
-cfg: u-boot.cfg
-
-quiet_cmd_cfgcheck = CFGCHK  $2
-cmd_cfgcheck = $(srctree)/scripts/check-config.sh $2 \
-		$(srctree)/scripts/config_whitelist.txt $(srctree)
-
-all:		$(ALL-y) cfg
-ifeq ($(CONFIG_DM_I2C_COMPAT)$(CONFIG_SANDBOX),y)
-	@echo >&2 "===================== WARNING ======================"
-	@echo >&2 "This board uses CONFIG_DM_I2C_COMPAT. Please remove"
-	@echo >&2 "(possibly in a subsequent patch in your series)"
-	@echo >&2 "before sending patches to the mailing list."
-	@echo >&2 "===================================================="
+all:		$(ALL-y)
+ifneq ($(CONFIG_SYS_GENERIC_BOARD),y)
+	@echo "===================== WARNING ======================"
+	@echo "Please convert this board to generic board."
+	@echo "Otherwise it will be removed by the end of 2014."
+	@echo "See doc/README.generic-board for further information"
+	@echo "===================================================="
 endif
-ifeq ($(CONFIG_MMC),y)
-ifneq ($(CONFIG_DM_MMC)$(CONFIG_OF_CONTROL)$(CONFIG_BLK),yyy)
-	@echo >&2 "===================== WARNING ======================"
-	@echo >&2 "This board does not use CONFIG_DM_MMC. Please update"
-	@echo >&2 "the board to use CONFIG_DM_MMC before the v2019.04 release."
-	@echo >&2 "Failure to update by the deadline may result in board removal."
-	@echo >&2 "See doc/driver-model/MIGRATION.txt for more info."
-	@echo >&2 "===================================================="
-endif
-endif
-ifeq ($(CONFIG_USB),y)
-ifneq ($(CONFIG_DM_USB)$(CONFIG_OF_CONTROL)$(CONFIG_BLK),yyy)
-	@echo >&2 "===================== WARNING ======================"
-	@echo >&2 "This board does not use CONFIG_DM_USB. Please update"
-	@echo >&2 "the board to use CONFIG_DM_USB before the v2019.07 release."
-	@echo >&2 "Failure to update by the deadline may result in board removal."
-	@echo >&2 "See doc/driver-model/MIGRATION.txt for more info."
-	@echo >&2 "===================================================="
-endif
-endif
-ifeq ($(CONFIG_LIBATA)$(CONFIG_MVSATA_IDE),y)
-ifneq ($(CONFIG_DM_SCSI),y)
-	@echo >&2 "===================== WARNING ======================"
-	@echo >&2 "This board does not use CONFIG_DM_SCSI. Please update"
-	@echo >&2 "the storage controller to use CONFIG_DM_SCSI before the v2019.07 release."
-	@echo >&2 "Failure to update by the deadline may result in board removal."
-	@echo >&2 "See doc/driver-model/MIGRATION.txt for more info."
-	@echo >&2 "===================================================="
-endif
-endif
-ifeq ($(CONFIG_PCI),y)
-ifneq ($(CONFIG_DM_PCI),y)
-	@echo >&2 "===================== WARNING ======================"
-	@echo >&2 "This board does not use CONFIG_DM_PCI Please update"
-	@echo >&2 "the board to use CONFIG_DM_PCI before the v2019.07 release."
-	@echo >&2 "Failure to update by the deadline may result in board removal."
-	@echo >&2 "See doc/driver-model/MIGRATION.txt for more info."
-	@echo >&2 "===================================================="
-endif
-endif
-ifneq ($(CONFIG_LCD)$(CONFIG_VIDEO),)
-ifneq ($(CONFIG_DM_VIDEO),y)
-	@echo >&2 "===================== WARNING ======================"
-	@echo >&2 "This board does not use CONFIG_DM_VIDEO Please update"
-	@echo >&2 "the board to use CONFIG_DM_VIDEO before the v2019.07 release."
-	@echo >&2 "Failure to update by the deadline may result in board removal."
-	@echo >&2 "See doc/driver-model/MIGRATION.txt for more info."
-	@echo >&2 "===================================================="
-endif
-endif
-ifeq ($(CONFIG_OF_EMBED),y)
-	@echo >&2 "===================== WARNING ======================"
-	@echo >&2 "CONFIG_OF_EMBED is enabled. This option should only"
-	@echo >&2 "be used for debugging purposes. Please use"
-	@echo >&2 "CONFIG_OF_SEPARATE for boards in mainline."
-	@echo >&2 "See doc/README.fdt-control for more info."
-	@echo >&2 "===================================================="
-endif
-ifeq ($(CONFIG_SPI),y)
-ifneq ($(CONFIG_DM_SPI)$(CONFIG_OF_CONTROL),yy)
-	@echo >&2 "===================== WARNING ======================"
-	@echo >&2 "This board does not use CONFIG_DM_SPI. Please update"
-	@echo >&2 "the board before v2019.04 for no dm conversion"
-	@echo >&2 "and v2019.07 for partially dm converted drivers."
-	@echo >&2 "Failure to update can lead to driver/board removal"
-	@echo >&2 "See doc/driver-model/MIGRATION.txt for more info."
-	@echo >&2 "===================================================="
-endif
-endif
-ifeq ($(CONFIG_SPI_FLASH),y)
-ifneq ($(CONFIG_DM_SPI_FLASH)$(CONFIG_OF_CONTROL),yy)
-	@echo >&2 "===================== WARNING ======================"
-	@echo >&2 "This board does not use CONFIG_DM_SPI_FLASH. Please update"
-	@echo >&2 "the board to use CONFIG_SPI_FLASH before the v2019.07 release."
-	@echo >&2 "Failure to update by the deadline may result in board removal."
-	@echo >&2 "See doc/driver-model/MIGRATION.txt for more info."
-	@echo >&2 "===================================================="
-endif
-endif
-	@# Check that this build does not use CONFIG options that we do not
-	@# know about unless they are in Kconfig. All the existing CONFIG
-	@# options are whitelisted, so new ones should not be added.
-	$(call cmd,cfgcheck,u-boot.cfg)
 
 PHONY += dtbs
-dtbs: dts/dt.dtb
-	@:
-dts/dt.dtb: u-boot
+dtbs dts/dt.dtb: checkdtc u-boot
 	$(Q)$(MAKE) $(build)=dts dtbs
 
-quiet_cmd_copy = COPY    $@
-      cmd_copy = cp $< $@
-
-ifeq ($(CONFIG_MULTI_DTB_FIT),y)
-
-fit-dtb.blob: dts/dt.dtb FORCE
-	$(call if_changed,mkimage)
-
-MKIMAGEFLAGS_fit-dtb.blob = -f auto -A $(ARCH) -T firmware -C none -O u-boot \
-	-a 0 -e 0 -E \
-	$(patsubst %,-b arch/$(ARCH)/dts/%.dtb,$(subst ",,$(CONFIG_OF_LIST))) -d /dev/null
-
-u-boot-fit-dtb.bin: u-boot-nodtb.bin fit-dtb.blob
+u-boot-dtb.bin: u-boot.bin dts/dt.dtb FORCE
 	$(call if_changed,cat)
 
-u-boot.bin: u-boot-fit-dtb.bin FORCE
-	$(call if_changed,copy)
-else ifeq ($(CONFIG_OF_SEPARATE),y)
-u-boot-dtb.bin: u-boot-nodtb.bin dts/dt.dtb FORCE
-	$(call if_changed,cat)
-
-u-boot.bin: u-boot-dtb.bin FORCE
-	$(call if_changed,copy)
-else
-u-boot.bin: u-boot-nodtb.bin FORCE
-	$(call if_changed,copy)
-endif
-
-.PHONY : bl301.bin
-bl301.bin: tools prepare acs.bin bl21.bin
-	$(Q)$(MAKE) -C $(srctree)/arch/arm/mach-meson/${SOC}/firmware/scp_task
-
-.PHONY : acs.bin
-acs.bin: tools prepare u-boot.bin
-	$(Q)$(MAKE) -C $(srctree)/arch/arm/mach-meson/${SOC}/firmware/acs all FIRMWARE=$@
-
-.PHONY : bl21.bin
-bl21.bin: tools prepare u-boot.bin acs.bin
-	$(Q)$(MAKE) -C $(srctree)/arch/arm/mach-meson/${SOC}/firmware/bl21 all FIRMWARE=$@
-
 %.imx: %.bin
-	$(Q)$(MAKE) $(build)=arch/arm/mach-imx $@
-
-%.vyb: %.imx
-	$(Q)$(MAKE) $(build)=arch/arm/cpu/armv7/vf610 $@
+	$(Q)$(MAKE) $(build)=arch/arm/imx-common $@
 
 quiet_cmd_copy = COPY    $@
       cmd_copy = cp $< $@
@@ -1105,27 +817,11 @@
 u-boot.hex u-boot.srec: u-boot FORCE
 	$(call if_changed,objcopy)
 
-OBJCOPYFLAGS_u-boot-elf.srec := $(OBJCOPYFLAGS_u-boot.srec)
+OBJCOPYFLAGS_u-boot.bin := -O binary \
+		$(if $(CONFIG_X86_RESET_VECTOR),-R .start16 -R .resetvec)
 
-u-boot-elf.srec: u-boot.elf FORCE
-	$(call if_changed,objcopy)
-
-OBJCOPYFLAGS_u-boot-spl.srec = $(OBJCOPYFLAGS_u-boot.srec)
-
-spl/u-boot-spl.srec: spl/u-boot-spl FORCE
-	$(call if_changed,objcopy)
-
-OBJCOPYFLAGS_u-boot-nodtb.bin := -O binary \
-		$(if $(CONFIG_X86_16BIT_INIT),-R .start16 -R .resetvec) \
-		$(if $(CONFIG_MPC85XX_HAVE_RESET_VECTOR),-R .bootpg -R .resetvec)
-
-OBJCOPYFLAGS_u-boot-spl.hex = $(OBJCOPYFLAGS_u-boot.hex)
-
-spl/u-boot-spl.hex: spl/u-boot-spl FORCE
-	$(call if_changed,objcopy)
-
-binary_size_check: u-boot-nodtb.bin FORCE
-	@file_size=$(shell wc -c u-boot-nodtb.bin | awk '{print $$1}') ; \
+binary_size_check: u-boot.bin FORCE
+	@file_size=$(shell wc -c u-boot.bin | awk '{print $$1}') ; \
 	map_size=$(shell cat u-boot.map | \
 		awk '/_image_copy_start/ {start = $$1} /_image_binary_end/ {end = $$1} END {if (start != "" && end != "") print "ibase=16; " toupper(end) " - " toupper(start)}' \
 		| sed 's/0X//g' \
@@ -1133,41 +829,14 @@
 	if [ "" != "$$map_size" ]; then \
 		if test $$map_size -ne $$file_size; then \
 			echo "u-boot.map shows a binary size of $$map_size" >&2 ; \
-			echo "  but u-boot-nodtb.bin shows $$file_size" >&2 ; \
+			echo "  but u-boot.bin shows $$file_size" >&2 ; \
 			exit 1; \
 		fi \
 	fi
 
-ifneq ($(CONFIG_SYS_INIT_SP_BSS_OFFSET),)
-ifneq ($(CONFIG_SYS_MALLOC_F_LEN),)
-subtract_sys_malloc_f_len = space=$$(($${space} - $(CONFIG_SYS_MALLOC_F_LEN)))
-else
-subtract_sys_malloc_f_len = true
-endif
-# The 1/4 margin below is somewhat arbitrary. The likely initial SP usage is
-# so low that the DTB could probably use 90%+ of the available space, for
-# current values of CONFIG_SYS_INIT_SP_BSS_OFFSET at least. However, let's be
-# safe for now and tweak this later if space becomes tight.
-# A rejected alternative would be to check that some absolute minimum stack
-# space was available. However, since CONFIG_SYS_INIT_SP_BSS_OFFSET is
-# deliberately build-specific, to take account of build-to-build stack usage
-# differences due to different feature sets, there is no common absolute value
-# to check against.
-init_sp_bss_offset_check: u-boot.dtb FORCE
-	@dtb_size=$(shell wc -c u-boot.dtb | awk '{print $$1}') ; \
-	space=$(CONFIG_SYS_INIT_SP_BSS_OFFSET) ; \
-	$(subtract_sys_malloc_f_len) ; \
-	quarter_space=$$(($${space} / 4)) ; \
-	if [ $${dtb_size} -gt $${quarter_space} ]; then \
-		echo "u-boot.dtb is larger than 1 quarter of " >&2 ; \
-		echo "(CONFIG_SYS_INIT_SP_BSS_OFFSET - CONFIG_SYS_MALLOC_F_LEN)" >&2 ; \
-		exit 1 ; \
-	fi
-endif
-
-u-boot-nodtb.bin: u-boot FORCE
+u-boot.bin: u-boot FORCE
 	$(call if_changed,objcopy)
-	$(call DO_STATIC_RELA,$<,$@,$(CONFIG_SYS_TEXT_BASE))
+	@$(call DO_STATIC_RELA,$<,$@,$(CONFIG_SYS_TEXT_BASE))
 	$(BOARD_SIZE_CHECK)
 
 u-boot.ldr:	u-boot
@@ -1175,14 +844,6 @@
 		$(LDR) -T $(CONFIG_CPU) -c $@ $< $(LDR_FLAGS)
 		$(BOARD_SIZE_CHECK)
 
-# binman
-# ---------------------------------------------------------------------------
-# Use 'make BINMAN_DEBUG=1' to enable debugging
-quiet_cmd_binman = BINMAN  $@
-cmd_binman = $(srctree)/tools/binman/binman -u -d u-boot.dtb -O . -m \
-		-I . -I $(srctree) -I $(srctree)/board/$(BOARDDIR) \
-		$(if $(BINMAN_DEBUG),-D) $(BINMAN_$(@F)) $<
-
 OBJCOPYFLAGS_u-boot.ldr.hex := -I binary -O ihex
 
 OBJCOPYFLAGS_u-boot.ldr.srec := -I binary -O srec
@@ -1190,6 +851,26 @@
 u-boot.ldr.hex u-boot.ldr.srec: u-boot.ldr FORCE
 	$(call if_changed,objcopy)
 
+.PHONY: u-boot-comp.bin
+u-boot-comp.bin:u-boot.bin
+	#tools/uclpack $< $@
+	cp $< $@
+#	$(objtree)/tools/uclpack $< $@
+
+ifeq ($(CONFIG_NEED_BL301), y)
+.PHONY : bl301.bin
+bl301.bin: tools prepare acs.bin bl21.bin
+	$(Q)$(MAKE) -C $(srctree)/$(CPUDIR)/${SOC}/firmware/scp_task
+endif
+
+.PHONY : acs.bin
+acs.bin: tools prepare u-boot.bin
+	$(Q)$(MAKE) -C $(srctree)/$(CPUDIR)/${SOC}/firmware/acs all FIRMWARE=$@
+
+.PHONY : bl21.bin
+bl21.bin: tools prepare u-boot.bin acs.bin
+	$(Q)$(MAKE) -C $(srctree)/$(CPUDIR)/${SOC}/firmware/bl21 all FIRMWARE=$@
+
 #
 # U-Boot entry point, needed for booting of full-blown U-Boot
 # from the SPL U-Boot version.
@@ -1198,62 +879,22 @@
 CONFIG_SYS_UBOOT_START := 0
 endif
 
-# Boards with more complex image requirments can provide an .its source file
-# or a generator script
-ifneq ($(CONFIG_SPL_FIT_SOURCE),"")
-U_BOOT_ITS = $(subst ",,$(CONFIG_SPL_FIT_SOURCE))
-else
-ifneq ($(CONFIG_SPL_FIT_GENERATOR),"")
-U_BOOT_ITS := u-boot.its
-ifeq ($(CONFIG_SPL_FIT_GENERATOR),"arch/arm/mach-imx/mkimage_fit_atf.sh")
-U_BOOT_ITS_DEPS += u-boot-nodtb.bin
-endif
-ifeq ($(CONFIG_SPL_FIT_GENERATOR),"arch/arm/mach-rockchip/make_fit_atf.py")
-U_BOOT_ITS_DEPS += u-boot
-endif
-$(U_BOOT_ITS): $(U_BOOT_ITS_DEPS) FORCE
-	$(srctree)/$(CONFIG_SPL_FIT_GENERATOR) \
-	$(patsubst %,arch/$(ARCH)/dts/%.dtb,$(subst ",,$(CONFIG_OF_LIST))) > $@
-endif
-endif
-
-ifdef CONFIG_SPL_LOAD_FIT
-MKIMAGEFLAGS_u-boot.img = -f auto -A $(ARCH) -T firmware -C none -O u-boot \
-	-a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_UBOOT_START) \
-	-n "U-Boot $(UBOOTRELEASE) for $(BOARD) board" -E \
-	$(patsubst %,-b arch/$(ARCH)/dts/%.dtb,$(subst ",,$(CONFIG_OF_LIST)))
-else
 MKIMAGEFLAGS_u-boot.img = -A $(ARCH) -T firmware -C none -O u-boot \
 	-a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_UBOOT_START) \
 	-n "U-Boot $(UBOOTRELEASE) for $(BOARD) board"
-MKIMAGEFLAGS_u-boot-ivt.img = -A $(ARCH) -T firmware_ivt -C none -O u-boot \
-	-a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_UBOOT_START) \
-	-n "U-Boot $(UBOOTRELEASE) for $(BOARD) board"
-u-boot-ivt.img: MKIMAGEOUTPUT = u-boot-ivt.img.log
-CLEAN_FILES += u-boot-ivt.img.log u-boot-dtb.imx.log SPL.log u-boot.imx.log
-endif
-
-MKIMAGEFLAGS_u-boot-dtb.img = $(MKIMAGEFLAGS_u-boot.img)
 
 MKIMAGEFLAGS_u-boot.kwb = -n $(srctree)/$(CONFIG_SYS_KWD_CONFIG:"%"=%) \
 	-T kwbimage -a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_TEXT_BASE)
 
-MKIMAGEFLAGS_u-boot-spl.kwb = -n $(srctree)/$(CONFIG_SYS_KWD_CONFIG:"%"=%) \
-	-T kwbimage -a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_TEXT_BASE) \
-	$(if $(KEYDIR),-k $(KEYDIR))
-
 MKIMAGEFLAGS_u-boot.pbl = -n $(srctree)/$(CONFIG_SYS_FSL_PBL_RCW:"%"=%) \
 		-R $(srctree)/$(CONFIG_SYS_FSL_PBL_PBI:"%"=%) -T pblimage
 
-u-boot-dtb.img u-boot.img u-boot.kwb u-boot.pbl u-boot-ivt.img: \
-		$(if $(CONFIG_SPL_LOAD_FIT),u-boot-nodtb.bin dts/dt.dtb,u-boot.bin) FORCE
+u-boot.img u-boot.kwb u-boot.pbl: u-boot.bin FORCE
 	$(call if_changed,mkimage)
 
-u-boot.itb: u-boot-nodtb.bin dts/dt.dtb $(U_BOOT_ITS) FORCE
-	$(call if_changed,mkfitimage)
-	$(BOARD_SIZE_CHECK)
+MKIMAGEFLAGS_u-boot-dtb.img = $(MKIMAGEFLAGS_u-boot.img)
 
-u-boot-spl.kwb: u-boot.img spl/u-boot-spl.bin FORCE
+u-boot-dtb.img: u-boot-dtb.bin FORCE
 	$(call if_changed,mkimage)
 
 u-boot.sha1:	u-boot.bin
@@ -1262,8 +903,8 @@
 u-boot.dis:	u-boot
 		$(OBJDUMP) -d $< > $@
 
-ifneq ($(CONFIG_SPL_PAYLOAD),)
-SPL_PAYLOAD := $(CONFIG_SPL_PAYLOAD:"%"=%)
+ifdef CONFIG_TPL
+SPL_PAYLOAD := tpl/u-boot-with-tpl.bin
 else
 SPL_PAYLOAD := u-boot.bin
 endif
@@ -1273,43 +914,16 @@
 u-boot-with-spl.bin: spl/u-boot-spl.bin $(SPL_PAYLOAD) FORCE
 	$(call if_changed,pad_cat)
 
-ifeq ($(CONFIG_ARCH_LPC32XX)$(CONFIG_SPL),yy)
-MKIMAGEFLAGS_lpc32xx-spl.img = -T lpc32xximage -a $(CONFIG_SPL_TEXT_BASE)
-
-lpc32xx-spl.img: spl/u-boot-spl.bin FORCE
-	$(call if_changed,mkimage)
-
-OBJCOPYFLAGS_lpc32xx-boot-0.bin = -I binary -O binary --pad-to=$(CONFIG_SPL_PAD_TO)
-
-lpc32xx-boot-0.bin: lpc32xx-spl.img FORCE
-	$(call if_changed,objcopy)
-
-OBJCOPYFLAGS_lpc32xx-boot-1.bin = -I binary -O binary --pad-to=$(CONFIG_SPL_PAD_TO)
-
-lpc32xx-boot-1.bin: lpc32xx-spl.img FORCE
-	$(call if_changed,objcopy)
-
-lpc32xx-full.bin: lpc32xx-boot-0.bin lpc32xx-boot-1.bin u-boot.img FORCE
-	$(call if_changed,cat)
-
-CLEAN_FILES += lpc32xx-*
-endif
-
 OBJCOPYFLAGS_u-boot-with-tpl.bin = -I binary -O binary \
 				   --pad-to=$(CONFIG_TPL_PAD_TO)
 tpl/u-boot-with-tpl.bin: tpl/u-boot-tpl.bin u-boot.bin FORCE
 	$(call if_changed,pad_cat)
 
 SPL: spl/u-boot-spl.bin FORCE
-	$(Q)$(MAKE) $(build)=arch/arm/mach-imx $@
-
-ifeq ($(CONFIG_ARCH_IMX8M), y)
-flash.bin: spl/u-boot-spl.bin u-boot.itb FORCE
-	$(Q)$(MAKE) $(build)=arch/arm/mach-imx $@
-endif
+	$(Q)$(MAKE) $(build)=arch/arm/imx-common $@
 
 u-boot-with-spl.imx u-boot-with-nand-spl.imx: SPL u-boot.bin FORCE
-	$(Q)$(MAKE) $(build)=arch/arm/mach-imx $@
+	$(Q)$(MAKE) $(build)=arch/arm/imx-common $@
 
 MKIMAGEFLAGS_u-boot.ubl = -n $(UBL_CONFIG) -T ublimage -e $(CONFIG_SYS_TEXT_BASE)
 
@@ -1347,104 +961,89 @@
 u-boot.spr: spl/u-boot-spl.img u-boot.img FORCE
 	$(call if_changed,pad_cat)
 
-ifneq ($(CONFIG_ARCH_SOCFPGA),)
-quiet_cmd_socboot = SOCBOOT $@
-cmd_socboot = cat	spl/u-boot-spl.sfp spl/u-boot-spl.sfp	\
-			spl/u-boot-spl.sfp spl/u-boot-spl.sfp	\
-			u-boot.img > $@ || rm -f $@
-u-boot-with-spl.sfp: spl/u-boot-spl.sfp u-boot.img FORCE
-	$(call if_changed,socboot)
-endif
+MKIMAGEFLAGS_u-boot-spl.gph = -A $(ARCH) -T gpimage -C none \
+	-a $(CONFIG_SPL_TEXT_BASE) -e $(CONFIG_SPL_TEXT_BASE) -n SPL
+spl/u-boot-spl.gph: spl/u-boot-spl.bin FORCE
+	$(call if_changed,mkimage)
 
-ifeq ($(CONFIG_MPC85xx)$(CONFIG_OF_SEPARATE),yy)
-u-boot-with-dtb.bin: u-boot.bin u-boot.dtb \
-	$(if $(CONFIG_MPC85XX_HAVE_RESET_VECTOR), u-boot-br.bin) FORCE
-	$(call if_changed,binman)
+OBJCOPYFLAGS_u-boot-spi.gph = -I binary -O binary --pad-to=$(CONFIG_SPL_PAD_TO) \
+			  --gap-fill=0
+u-boot-spi.gph: spl/u-boot-spl.gph u-boot.img FORCE
+	$(call if_changed,pad_cat)
 
-ifeq ($(CONFIG_MPC85XX_HAVE_RESET_VECTOR),y)
-OBJCOPYFLAGS_u-boot-br.bin := -O binary -j .bootpg -j .resetvec
-u-boot-br.bin: u-boot FORCE
-	$(call if_changed,objcopy)
-endif
-endif
+MKIMAGEFLAGS_u-boot-nand.gph = -A $(ARCH) -T gpimage -C none \
+	-a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_TEXT_BASE) -n U-Boot
+u-boot-nand.gph: u-boot.bin FORCE
+	$(call if_changed,mkimage)
+	@dd if=/dev/zero bs=8 count=1 2>/dev/null >> $@
 
 # x86 uses a large ROM. We fill it with 0xff, put the 16-bit stuff (including
 # reset vector) at the top, Intel ME descriptor at the bottom, and U-Boot in
-# the middle. This is handled by binman based on an image description in the
-# board's device tree.
+# the middle.
 ifneq ($(CONFIG_X86_RESET_VECTOR),)
 rom: u-boot.rom FORCE
 
-refcode.bin: $(srctree)/board/$(BOARDDIR)/refcode.bin FORCE
-	$(call if_changed,copy)
+IFDTOOL=$(objtree)/tools/ifdtool
+IFDTOOL_FLAGS  = -f 0:$(objtree)/u-boot.dtb
+IFDTOOL_FLAGS += -m 0x$(shell $(NM) u-boot |grep _dt_ucode_base_size |cut -d' ' -f1)
+IFDTOOL_FLAGS += -U $(CONFIG_SYS_TEXT_BASE):$(objtree)/u-boot.bin
+IFDTOOL_FLAGS += -w $(CONFIG_SYS_X86_START16):$(objtree)/u-boot-x86-16bit.bin
 
-quiet_cmd_ldr = LD      $@
-cmd_ldr = $(LD) $(LDFLAGS_$(@F)) \
-	       $(filter-out FORCE,$^) -o $@
+ifneq ($(CONFIG_HAVE_INTEL_ME),)
+IFDTOOL_ME_FLAGS  = -D $(srctree)/board/$(BOARDDIR)/descriptor.bin
+IFDTOOL_ME_FLAGS += -i ME:$(srctree)/board/$(BOARDDIR)/me.bin
+endif
 
-u-boot.rom: u-boot-x86-16bit.bin u-boot.bin \
-		$(if $(CONFIG_SPL_X86_16BIT_INIT),spl/u-boot-spl.bin) \
-		$(if $(CONFIG_HAVE_REFCODE),refcode.bin) FORCE
-	$(call if_changed,binman)
+ifneq ($(CONFIG_HAVE_MRC),)
+IFDTOOL_FLAGS += -w $(CONFIG_X86_MRC_ADDR):$(srctree)/board/$(BOARDDIR)/mrc.bin
+endif
+
+ifneq ($(CONFIG_HAVE_FSP),)
+IFDTOOL_FLAGS += -w $(CONFIG_FSP_ADDR):$(srctree)/board/$(BOARDDIR)/$(CONFIG_FSP_FILE)
+endif
+
+ifneq ($(CONFIG_HAVE_CMC),)
+IFDTOOL_FLAGS += -w $(CONFIG_CMC_ADDR):$(srctree)/board/$(BOARDDIR)/$(CONFIG_CMC_FILE)
+endif
+
+ifneq ($(CONFIG_X86_OPTION_ROM_ADDR),)
+IFDTOOL_FLAGS += -w $(CONFIG_X86_OPTION_ROM_ADDR):$(srctree)/board/$(BOARDDIR)/$(CONFIG_X86_OPTION_ROM_FILE)
+endif
+
+quiet_cmd_ifdtool = IFDTOOL $@
+cmd_ifdtool  = $(IFDTOOL) -c -r $(CONFIG_ROM_SIZE) u-boot.tmp;
+ifneq ($(CONFIG_HAVE_INTEL_ME),)
+cmd_ifdtool += $(IFDTOOL) $(IFDTOOL_ME_FLAGS) u-boot.tmp;
+endif
+cmd_ifdtool += $(IFDTOOL) $(IFDTOOL_FLAGS) u-boot.tmp;
+cmd_ifdtool += mv u-boot.tmp $@
+
+u-boot.rom: u-boot-x86-16bit.bin u-boot-dtb.bin
+	$(call if_changed,ifdtool)
 
 OBJCOPYFLAGS_u-boot-x86-16bit.bin := -O binary -j .start16 -j .resetvec
 u-boot-x86-16bit.bin: u-boot FORCE
 	$(call if_changed,objcopy)
 endif
 
-ifneq ($(CONFIG_ARCH_SUNXI),)
-ifeq ($(CONFIG_ARM64),)
-u-boot-sunxi-with-spl.bin: spl/sunxi-spl.bin u-boot.img u-boot.dtb FORCE
-	$(call if_changed,binman)
-else
-u-boot-sunxi-with-spl.bin: spl/sunxi-spl.bin u-boot.itb FORCE
-	$(call if_changed,cat)
-endif
+ifneq ($(CONFIG_SUNXI),)
+OBJCOPYFLAGS_u-boot-sunxi-with-spl.bin = -I binary -O binary \
+				   --pad-to=$(CONFIG_SPL_PAD_TO) --gap-fill=0xff
+u-boot-sunxi-with-spl.bin: spl/sunxi-spl.bin \
+			u-boot$(if $(CONFIG_OF_CONTROL),-dtb,).img FORCE
+	$(call if_changed,pad_cat)
 endif
 
 ifneq ($(CONFIG_TEGRA),)
-ifneq ($(CONFIG_BINMAN),)
-# Makes u-boot-dtb-tegra.bin u-boot-tegra.bin u-boot-nodtb-tegra.bin
-%-dtb-tegra.bin %-tegra.bin %-nodtb-tegra.bin: \
-		spl/%-spl %.bin FORCE
-	$(call if_changed,binman)
-else
 OBJCOPYFLAGS_u-boot-nodtb-tegra.bin = -O binary --pad-to=$(CONFIG_SYS_TEXT_BASE)
-u-boot-nodtb-tegra.bin: spl/u-boot-spl u-boot-nodtb.bin FORCE
+u-boot-nodtb-tegra.bin: spl/u-boot-spl u-boot.bin FORCE
 	$(call if_changed,pad_cat)
 
-OBJCOPYFLAGS_u-boot-tegra.bin = -O binary --pad-to=$(CONFIG_SYS_TEXT_BASE)
-u-boot-tegra.bin: spl/u-boot-spl u-boot.bin FORCE
-	$(call if_changed,pad_cat)
-
-u-boot-dtb-tegra.bin: u-boot-tegra.bin FORCE
-	$(call if_changed,copy)
-endif  # binman
+ifeq ($(CONFIG_OF_SEPARATE),y)
+u-boot-dtb-tegra.bin: u-boot-nodtb-tegra.bin dts/dt.dtb FORCE
+	$(call if_changed,cat)
 endif
-
-OBJCOPYFLAGS_u-boot-app.efi := $(OBJCOPYFLAGS_EFI)
-u-boot-app.efi: u-boot FORCE
-	$(call if_changed,zobjcopy)
-
-u-boot.bin.o: u-boot.bin FORCE
-	$(call if_changed,efipayload)
-
-u-boot-payload.lds: $(LDSCRIPT_EFI) FORCE
-	$(call if_changed_dep,cpp_lds)
-
-# Rule to link the EFI payload which contains a stub and a U-Boot binary
-quiet_cmd_u-boot_payload ?= LD      $@
-      cmd_u-boot_payload ?= $(LD) $(LDFLAGS_EFI_PAYLOAD) -o $@ \
-      -T u-boot-payload.lds arch/x86/cpu/call32.o \
-      lib/efi/efi.o lib/efi/efi_stub.o u-boot.bin.o \
-      $(addprefix arch/$(ARCH)/lib/,$(EFISTUB))
-
-u-boot-payload: u-boot.bin.o u-boot-payload.lds FORCE
-	$(call if_changed,u-boot_payload)
-
-OBJCOPYFLAGS_u-boot-payload.efi := $(OBJCOPYFLAGS_EFI)
-u-boot-payload.efi: u-boot-payload FORCE
-	$(call if_changed,zobjcopy)
+endif
 
 u-boot-img.bin: spl/u-boot-spl.bin u-boot.img FORCE
 	$(call if_changed,cat)
@@ -1462,12 +1061,8 @@
 ifeq ($(ARCH),arm)
 UBOOT_BINLOAD := u-boot.img
 else
-ifeq ($(CONFIG_MPC85xx)$(CONFIG_OF_SEPARATE),yy)
-UBOOT_BINLOAD := u-boot-with-dtb.bin
-else
 UBOOT_BINLOAD := u-boot.bin
 endif
-endif
 
 OBJCOPYFLAGS_u-boot-with-spl-pbl.bin = -I binary -O binary --pad-to=$(CONFIG_SPL_PAD_TO) \
 			  --gap-fill=0xff
@@ -1486,39 +1081,17 @@
 u-boot-img-spl-at-end.bin: u-boot.img spl/u-boot-spl.bin FORCE
 	$(call if_changed,pad_cat)
 
-# Create a new ELF from a raw binary file.
-ifndef PLATFORM_ELFENTRY
-  PLATFORM_ELFENTRY = "_start"
-endif
-quiet_cmd_u-boot-elf ?= LD      $@
-	cmd_u-boot-elf ?= $(LD) u-boot-elf.o -o $@ \
-	--defsym=$(PLATFORM_ELFENTRY)=$(CONFIG_SYS_TEXT_BASE) \
-	-Ttext=$(CONFIG_SYS_TEXT_BASE)
+# 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
 u-boot.elf: u-boot.bin
-	$(Q)$(OBJCOPY) -I binary $(PLATFORM_ELFFLAGS) $< u-boot-elf.o
-	$(call if_changed,u-boot-elf)
-
-# MediaTek's ARM-based u-boot needs a header to contains its load address
-# which is parsed by the BootROM.
-# If the SPL build is enabled, the header will be added to the spl binary,
-# and the spl binary and the u-boot.img will be combined into one file.
-# Otherwise the header will be added to the u-boot.bin directly.
-
-ifeq ($(CONFIG_SPL),y)
-spl/u-boot-spl-mtk.bin: spl/u-boot-spl
-
-u-boot-mtk.bin: u-boot.dtb u-boot.img spl/u-boot-spl-mtk.bin FORCE
-	$(call if_changed,binman)
-else
-MKIMAGEFLAGS_u-boot-mtk.bin = -T mtk_image \
-	-a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_TEXT_BASE) \
-	-n "$(patsubst "%",%,$(CONFIG_MTK_BROM_HEADER_INFO))"
-
-u-boot-mtk.bin: u-boot.bin FORCE
-	$(call if_changed,mkimage)
-endif
-
-ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(ARCH)/Makefile.postlink)
+	@$(OBJCOPY)  -B aarch64 -I binary -O elf64-littleaarch64 \
+		$< u-boot-elf.o
+	@$(LD) u-boot-elf.o -o $@ \
+		--defsym=_start=$(CONFIG_SYS_TEXT_BASE) \
+		-Ttext=$(CONFIG_SYS_TEXT_BASE)
 
 # Rule to link u-boot
 # May be overridden by arch/$(ARCH)/config.mk
@@ -1526,8 +1099,7 @@
       cmd_u-boot__ ?= $(LD) $(LDFLAGS) $(LDFLAGS_u-boot) -o $@ \
       -T u-boot.lds $(u-boot-init)                             \
       --start-group $(u-boot-main) --end-group                 \
-      $(PLATFORM_LIBS) -Map u-boot.map;                        \
-      $(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)
+      $(PLATFORM_LIBS) -Map u-boot.map
 
 quiet_cmd_smap = GEN     common/system_map.o
 cmd_smap = \
@@ -1536,22 +1108,13 @@
 	$(CC) $(c_flags) -DSYSTEM_MAP="\"$${smap}\"" \
 		-c $(srctree)/common/system_map.c -o common/system_map.o
 
-u-boot:	$(u-boot-init) $(u-boot-main) u-boot.lds FORCE
-	+$(call if_changed,u-boot__)
+u-boot:	$(u-boot-init) $(u-boot-main) u-boot.lds
+	$(call if_changed,u-boot__)
 ifeq ($(CONFIG_KALLSYMS),y)
 	$(call cmd,smap)
 	$(call cmd,u-boot__) common/system_map.o
 endif
 
-ifeq ($(CONFIG_RISCV),y)
-	@tools/prelink-riscv $@ 0
-endif
-
-quiet_cmd_sym ?= SYM     $@
-      cmd_sym ?= $(OBJDUMP) -t $< > $@
-u-boot.sym: u-boot FORCE
-	$(call if_changed,sym)
-
 # The actual objects are generated when descending,
 # make sure no implicit rule kicks in
 $(sort $(u-boot-init) $(u-boot-main)): $(u-boot-dirs) ;
@@ -1577,17 +1140,10 @@
 	echo "$(UBOOTVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"
 endef
 
-define filechk_acs.release
-	echo "$(BOARD)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"
-endef
-
 # Store (new) UBOOTRELEASE string in include/config/uboot.release
 include/config/uboot.release: include/config/auto.conf FORCE
 	$(call filechk,uboot.release)
 
-include/config/acs.release: include/config/auto.conf FORCE
-	$(call filechk,acs.release)
-
 
 # Things we need to do before we recursively start building the kernel
 # or the modules are listed in "prepare".
@@ -1601,7 +1157,7 @@
 # prepare3 is used to check if we are building in a separate output directory,
 # and if so do:
 # 1) Check that make has not been executed in the kernel src $(srctree)
-prepare3: include/config/uboot.release include/config/acs.release
+prepare3: include/config/uboot.release
 ifneq ($(KBUILD_SRC),)
 	@$(kecho) '  Using $(srctree) as source for U-Boot'
 	$(Q)if [ -f $(srctree)/.config -o -d $(srctree)/include/config ]; then \
@@ -1616,15 +1172,18 @@
 
 prepare1: prepare2 $(version_h) $(timestamp_h) \
                    include/config/auto.conf
+ifeq ($(__HAVE_ARCH_GENERIC_BOARD),)
+ifeq ($(CONFIG_SYS_GENERIC_BOARD),y)
+	@echo >&2 "  Your architecture does not support generic board."
+	@echo >&2 "  Please undefine CONFIG_SYS_GENERIC_BOARD in your board config file."
+	@/bin/false
+endif
+endif
 ifeq ($(wildcard $(LDSCRIPT)),)
 	@echo >&2 "  Could not find linker script."
 	@/bin/false
 endif
 
-ifeq ($(CONFIG_USE_DEFAULT_ENV_FILE),y)
-prepare1: $(defaultenv_h)
-endif
-
 archprepare: prepare1 scripts_basic
 
 prepare0: archprepare FORCE
@@ -1638,108 +1197,50 @@
 
 define filechk_version.h
 	(echo \#define PLAIN_VERSION \"$(UBOOTRELEASE)\"; \
-	echo \#define ACS_VERSION \"$(ACSRELEASE)\"; \
 	echo \#define U_BOOT_VERSION \"U-Boot \" PLAIN_VERSION; \
 	echo \#define CONFIG_SYSTEM_AS_ROOT \"${SYSTEMMODE}\"; \
+	echo \#define CONFIG_BUILD_TYPE \"${BUILD_TYPE}\"; \
+	echo \#define CONFIG_BOARD_NAME \"${BOARD_NAME}\"; \
 	echo \#define CONFIG_AVB2 \"${AVBMODE}\"; \
-	echo \#define CONFIG_CMD_BOOTCTOL_VAB \"${BOOTCTRLMODE}\"; \
-	echo \#define CC_VERSION_STRING \"$$(LC_ALL=C $(CC) --version | head -n 1)\"; \
-	echo \#define LD_VERSION_STRING \"$$(LC_ALL=C $(LD) --version | head -n 1)\"; )
+	echo \#define CC_VERSION_STRING \"$$($(CC) --version | head -n 1)\"; \
+	echo \#define LD_VERSION_STRING \"$$($(LD) --version | head -n 1)\"; )
 endef
 
-# The SOURCE_DATE_EPOCH mechanism requires a date that behaves like GNU date.
-# The BSD date on the other hand behaves different and would produce errors
-# with the misused '-d' switch.  Respect that and search a working date with
-# well known pre- and suffixes for the GNU variant of date.
 define filechk_timestamp.h
-	(if test -n "$${SOURCE_DATE_EPOCH}"; then \
-		SOURCE_DATE="@$${SOURCE_DATE_EPOCH}"; \
-		DATE=""; \
-		for date in gdate date.gnu date; do \
-			$${date} -u -d "$${SOURCE_DATE}" >/dev/null 2>&1 && DATE="$${date}"; \
-		done; \
-		if test -n "$${DATE}"; then \
-			LC_ALL=C $${DATE} -u -d "$${SOURCE_DATE}" +'#define U_BOOT_DATE "%b %d %C%y"'; \
-			LC_ALL=C $${DATE} -u -d "$${SOURCE_DATE}" +'#define U_BOOT_TIME "%T"'; \
-			LC_ALL=C $${DATE} -u -d "$${SOURCE_DATE}" +'#define U_BOOT_TZ "%z"'; \
-			LC_ALL=C $${DATE} -u -d "$${SOURCE_DATE}" +'#define U_BOOT_DMI_DATE "%m/%d/%Y"'; \
-			LC_ALL=C $${DATE} -u -d "$${SOURCE_DATE}" +'#define U_BOOT_BUILD_DATE 0x%Y%m%d'; \
-			LC_ALL=C $${DATE} -u -d "$${SOURCE_DATE}" +'#define U_BOOT_DATE_TIME "%y%m%d.%H%M%S"'; \
-		else \
-			return 42; \
-		fi; \
-	else \
-		LC_ALL=C date +'#define U_BOOT_DATE "%b %d %C%y"'; \
-		LC_ALL=C date +'#define U_BOOT_TIME "%T"'; \
-		LC_ALL=C date +'#define U_BOOT_TZ "%z"'; \
-		LC_ALL=C date +'#define U_BOOT_DMI_DATE "%m/%d/%Y"'; \
-		LC_ALL=C date +'#define U_BOOT_BUILD_DATE 0x%Y%m%d'; \
-		LC_ALL=C date +'#define U_BOOT_DATE_TIME "%y%m%d.%H%M%S"'; \
-	fi)
+	(LC_ALL=C date +'#define U_BOOT_DATE "%b %d %C%y"'; \
+	LC_ALL=C date +'#define U_BOOT_TIME "%T"'; \
+	LC_ALL=C date +'#define U_BOOT_DATE_TIME "%y%m%d.%H%M%S"';)
 endef
 
-define filechk_defaultenv.h
-	(grep -v '^#' | \
-	 grep -v '^$$' | \
-	 tr '\n' '\0' | \
-	 sed -e 's/\\\x0/\n/' | \
-	 xxd -i ; echo ", 0x00" ; )
-endef
-
-define filechk_timestamp_git.h
-	(echo \#define U_BOOT_DATE \"$(shell git log -1 --format=%cd --date=format:"%b %d %C%y")\"; \
-	echo \#define U_BOOT_TIME \"$(shell git log -1 --format=%cd --date=format:"%T")\"; \
-	echo \#define U_BOOT_TZ \"$(shell git log -1 --format=%cd --date=format:"%Z")\"; \
-	echo \#define U_BOOT_DMI_DATE \"$(shell git log -1 --format=%cd --date=format:"%m/%d/%Y")\"; \
-	echo \#define U_BOOT_BUILD_DATE \"$(shell git log -1 --format=%cd --date=format:"0x%Y%m%d")\";)
-endef
-
-export U_BOOT_TIME_GIT=$(shell git log -1 --format=%cd --date=format:"%T")
-export U_BOOT_DATE_GIT=$(shell git log -1 --format=%cd --date=format:"%b %d %C%y")
-
-$(version_h): include/config/uboot.release include/config/acs.release FORCE
+$(version_h): include/config/uboot.release FORCE
 	$(call filechk,version.h)
 
-ifeq ($(KBUILD_TIME_STAMP),0)
 $(timestamp_h): $(srctree)/Makefile FORCE
 	$(call filechk,timestamp.h)
-else
-$(timestamp_git_h): $(srctree)/Makefile FORCE
-	$(call filechk,timestamp_git.h)
-endif
 
-$(defaultenv_h): $(CONFIG_DEFAULT_ENV_FILE:"%"=%) FORCE
-	$(call filechk,defaultenv.h)
+# ---------------------------------------------------------------------------
+
+PHONY += depend dep
+depend dep:
+	@echo '*** Warning: make $@ is unnecessary now.'
 
 # ---------------------------------------------------------------------------
 quiet_cmd_cpp_lds = LDS     $@
-cmd_cpp_lds = $(CPP) -Wp,-MD,$(depfile) $(cpp_flags) $(LDPPFLAGS) \
-		-D__ASSEMBLY__ -x assembler-with-cpp -std=c99 -P -o $@ $<
+cmd_cpp_lds = $(CPP) -Wp,-MD,$(depfile) $(cpp_flags) $(LDPPFLAGS) -ansi \
+		-D__ASSEMBLY__ -x assembler-with-cpp -P -o $@ $<
 
 u-boot.lds: $(LDSCRIPT) prepare FORCE
 	$(call if_changed_dep,cpp_lds)
 
 spl/u-boot-spl.bin: spl/u-boot-spl
 	@:
-spl/u-boot-spl: tools prepare \
-		$(if $(CONFIG_OF_SEPARATE)$(CONFIG_OF_EMBED)$(CONFIG_SPL_OF_PLATDATA),dts/dt.dtb) \
-		$(if $(CONFIG_OF_SEPARATE)$(CONFIG_OF_EMBED)$(CONFIG_TPL_OF_PLATDATA),dts/dt.dtb)
+spl/u-boot-spl: tools prepare
 	$(Q)$(MAKE) obj=spl -f $(srctree)/scripts/Makefile.spl all
 
 spl/sunxi-spl.bin: spl/u-boot-spl
 	@:
 
-spl/sunxi-spl-with-ecc.bin: spl/sunxi-spl.bin
-	@:
-
-spl/u-boot-spl.sfp: spl/u-boot-spl
-	@:
-
-spl/boot.bin: spl/u-boot-spl
-	@:
-
-tpl/u-boot-tpl.bin: tools prepare \
-		$(if $(CONFIG_OF_SEPARATE)$(CONFIG_OF_EMBED)$(CONFIG_SPL_OF_PLATDATA),dts/dt.dtb)
+tpl/u-boot-tpl.bin: tools prepare
 	$(Q)$(MAKE) obj=tpl -f $(srctree)/scripts/Makefile.spl all
 
 TAG_SUBDIRS := $(patsubst %,$(srctree)/%,$(u-boot-dirs) include)
@@ -1750,7 +1251,6 @@
 tags ctags:
 		ctags -w -o ctags `$(FIND) $(FINDFLAGS) $(TAG_SUBDIRS) \
 						-name '*.[chS]' -print`
-		ln -s ctags tags
 
 etags:
 		etags -a -o etags `$(FIND) $(FINDFLAGS) $(TAG_SUBDIRS) \
@@ -1767,6 +1267,12 @@
 System.map:	u-boot
 		@$(call SYSTEM_MAP,$<) > $@
 
+checkdtc:
+	@if test $(call dtc-version) -lt 0104; then \
+		echo '*** Your dtc is too old, please upgrade to dtc 1.4 or newer'; \
+		false; \
+	fi
+
 #########################################################################
 
 # ARM relocations should all be R_ARM_RELATIVE (32-bit) or
@@ -1780,14 +1286,14 @@
 		false; \
 	fi
 
-envtools: scripts_basic $(version_h) $(timestamp_h)
-	$(Q)$(MAKE) $(build)=tools/env
+env: scripts_basic
+	$(Q)$(MAKE) $(build)=tools/$@
 
 tools-only: scripts_basic $(version_h) $(timestamp_h)
 	$(Q)$(MAKE) $(build)=tools
 
 tools-all: export HOST_TOOLS_ALL=y
-tools-all: envtools tools ;
+tools-all: env tools ;
 
 cross_tools: export CROSS_BUILD_TOOLS=y
 cross_tools: tools ;
@@ -1797,6 +1303,8 @@
 	git log --no-merges U-Boot-1_1_5.. | \
 	unexpand -a | sed -e 's/\s\s*$$//' > $@
 
+include/license.h: tools/bin2header COPYING
+	cat COPYING | gzip -9 -c | ./tools/bin2header license_gzip > include/license.h
 #########################################################################
 
 ###
@@ -1812,13 +1320,13 @@
 			$(filter-out include, $(shell ls -1 $d 2>/dev/null))))
 
 CLEAN_FILES += include/bmp_logo.h include/bmp_logo_data.h \
-	       boot* u-boot* MLO* SPL System.map fit-dtb.blob
+	       u-boot* MLO* SPL System.map
 
 # Directories & files removed with 'make mrproper'
 MRPROPER_DIRS  += include/config include/generated spl tpl \
 		  .tmp_objdiff
 MRPROPER_FILES += .config .config.old include/autoconf.mk* include/config.h \
-		  ctags etags tags TAGS cscope* GPATH GTAGS GRTAGS GSYMS
+		  ctags etags TAGS cscope* GPATH GTAGS GRTAGS GSYMS
 
 # clean - Delete most, but leave enough to build external modules
 #
@@ -1827,25 +1335,23 @@
 
 clean-dirs	:= $(foreach f,$(u-boot-alldirs),$(if $(wildcard $(srctree)/$f/Makefile),$f))
 
-clean-dirs      := $(addprefix _clean_, $(clean-dirs))
+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 '*.ko.*' -o -name '*.su' -o -name '*.cfgtmp' \
 		-o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \
-		-o -name '*.lex.c' -o -name '*.tab.[ch]' \
 		-o -name '*.symtypes' -o -name 'modules.order' \
 		-o -name modules.builtin -o -name '.tmp_*.o.*' \
-		-o -name 'dsdt.aml' -o -name 'dsdt.asl.tmp' -o -name 'dsdt.c' \
-		-o -name '*.efi' -o -name '*.gcno' -o -name '*.so' \) \
-		-type f -print | xargs rm -f
+		-o -name '*.gcno' \) -type f -print | xargs rm -f
 
 # mrproper - Delete all generated files, including .config
 #
@@ -1871,10 +1377,21 @@
 		\( -name '*.orig' -o -name '*.rej' -o -name '*~' \
 		-o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \
 		-o -name '.*.rej' -o -name '*%' -o -name 'core' \
-		-o -name '*.pyc' \) \
+		-o -name '*.o' \) \
 		-type f -print | xargs rm -f
 	@rm -f boards.cfg
-	@rm -rf $(srctree)/build
+	@rm -rf $(buildtree)/*
+	@rm -f $(FIP_FOLDER_SOC)/acs.bin
+	@rm -f $(FIP_FOLDER_SOC)/bl2_acs.bin
+	@rm -f $(FIP_FOLDER_SOC)/bl301.bin
+	@rm -f $(FIP_FOLDER_SOC)/bl33.bin
+	@rm -f $(FIP_FOLDER_SOC)/fip.bin
+	@rm -f $(FIP_FOLDER_SOC)/boot.bin
+	@rm -f $(FIP_FOLDER_SOC)/boot_sd.bin
+	@rm -f $(FIP_FOLDER_SOC)/u-boot.bin
+	@rm -f $(FIP_FOLDER_SOC)/u-boot.bin.* $(FIP_FOLDER_SOC)/*.encrypt
+	@rm -f $(FIP_FOLDER)/u-boot.bin.* $(FIP_FOLDER)/*.bin $(FIP_FOLDER)/*.encrypt
+	@rm -f $(srctree)/fip/aml_encrypt_gxb
 
 backup:
 	F=`basename $(srctree)` ; cd .. ; \
@@ -1889,14 +1406,8 @@
 	@echo  'Configuration targets:'
 	@$(MAKE) -f $(srctree)/scripts/kconfig/Makefile help
 	@echo  ''
-	@echo  'Test targets:'
-	@echo  ''
-	@echo  '  check           - Run all automated tests that use sandbox'
-	@echo  '  qcheck          - Run quick automated tests that use sandbox'
-	@echo  ''
 	@echo  'Other generic targets:'
 	@echo  '  all		  - Build all necessary images depending on configuration'
-	@echo  '  tests		  - Build U-Boot for sandbox and run tests'
 	@echo  '* u-boot	  - Build the bare u-boot'
 	@echo  '  dir/            - Build all files in dir and below'
 	@echo  '  dir/file.[oisS] - Build specified target only'
@@ -1907,15 +1418,12 @@
 	@echo  '  cscope	  - Generate cscope index'
 	@echo  '  ubootrelease	  - Output the release version string (use with make -s)'
 	@echo  '  ubootversion	  - Output the version stored in Makefile (use with make -s)'
-	@echo  "  cfg		  - Don't build, just create the .cfg files"
-	@echo  "  envtools	  - Build only the target-side environment tools"
 	@echo  ''
 	@echo  'Static analysers'
 	@echo  '  checkstack      - Generate a list of stack hogs'
-	@echo  '  coccicheck      - Execute static code analysis with Coccinelle'
 	@echo  ''
 	@echo  'Documentation targets:'
-	@$(MAKE) -f $(srctree)/Documentation/Makefile dochelp
+	@$(MAKE) -f $(srctree)/doc/DocBook/Makefile dochelp
 	@echo  ''
 	@echo  '  make V=0|1 [targets] 0 => quiet build (default), 1 => verbose build'
 	@echo  '  make V=2   [targets] 2 => give reason for rebuild of target'
@@ -1928,25 +1436,23 @@
 	@echo  '		2: warnings which occur quite often but may still be relevant'
 	@echo  '		3: more obscure warnings, can most likely be ignored'
 	@echo  '		Multiple levels can be combined with W=12 or W=123'
-	@echo  '  make T=0   [targets] 0 => use local time (date) as build timestamp'
-	@echo  '  make T=1   [targets] 1 => use latest git commit time as build timestamp'
 	@echo  ''
 	@echo  'Execute "make" or "make all" to build all targets marked with [*] '
 	@echo  'For further info see the ./README file'
+	@export srctree
+	@$(srctree)/amlogic_help.sh
 
-tests check:
-	$(srctree)/test/run
-
-qcheck:
-	$(srctree)/test/run quick
 
 # Documentation targets
 # ---------------------------------------------------------------------------
-DOC_TARGETS := xmldocs latexdocs pdfdocs htmldocs epubdocs cleandocs \
-	       linkcheckdocs dochelp refcheckdocs
-PHONY += $(DOC_TARGETS)
-$(DOC_TARGETS): scripts_basic FORCE
-	$(Q)$(MAKE) $(build)=Documentation $@
+%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)
@@ -2012,14 +1518,6 @@
 	$(build)=$(build-dir) $(@:.ko=.o)
 	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
 
-# Consistency checks
-# ---------------------------------------------------------------------------
-
-PHONY += coccicheck
-
-coccicheck:
-	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/$@
-
 # FIXME Should go into a make.lib or something
 # ===========================================================================
 
@@ -2039,6 +1537,11 @@
   include $(cmd_files)
 endif
 
+# Shorthand for $(Q)$(MAKE) -f scripts/Makefile.clean obj=dir
+# Usage:
+# $(Q)$(MAKE) $(clean)=dir
+clean := -f $(srctree)/scripts/Makefile.clean obj
+
 endif	# skip-makefile
 
 PHONY += FORCE
diff --git a/README b/README
index 17d56b8..7fe8afe 100644
--- a/README
+++ b/README
@@ -1,7 +1,9 @@
-# SPDX-License-Identifier: GPL-2.0+
 #
 # (C) Copyright 2000 - 2013
 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# SPDX-License-Identifier:	GPL-2.0+
+#
 
 Summary:
 ========
@@ -32,14 +34,12 @@
 Makefile have been tested to some extent and can be considered
 "working". In fact, many of them are used in production systems.
 
-In case of problems see the CHANGELOG file to find out who contributed
-the specific port. In addition, there are various MAINTAINERS files
-scattered throughout the U-Boot source identifying the people or
-companies responsible for various boards and subsystems.
+In case of problems see the CHANGELOG and CREDITS files to find out
+who contributed the specific port. The boards.cfg file lists board
+maintainers.
 
-Note: As of August, 2010, there is no longer a CHANGELOG file in the
-actual U-Boot source tree; however, it can be created dynamically
-from the Git log using:
+Note: There is no CHANGELOG file in the actual U-Boot source tree;
+it can be created dynamically from the Git log using:
 
 	make CHANGELOG
 
@@ -48,7 +48,7 @@
 ==================
 
 In case you have questions about, problems with or contributions for
-U-Boot, you should send a message to the U-Boot mailing list at
+U-Boot you should send a message to the U-Boot mailing list at
 <u-boot@lists.denx.de>. There is also an archive of previous traffic
 on the mailing list - please search the archive before asking FAQ's.
 Please see http://lists.denx.de/pipermail/u-boot and
@@ -58,7 +58,7 @@
 Where to get source code:
 =========================
 
-The U-Boot source code is maintained in the Git repository at
+The U-Boot source code is maintained in the git repository at
 git://www.denx.de/git/u-boot.git ; you can browse it online at
 http://www.denx.de/cgi-bin/gitweb.cgi?p=u-boot.git;a=summary
 
@@ -125,7 +125,7 @@
 Examples:
 	U-Boot v2009.11	    - Release November 2009
 	U-Boot v2009.11.1   - Release 1 in version November 2009 stable tree
-	U-Boot v2010.09-rc1 - Release candidate 1 for September 2010 release
+	U-Boot v2010.09-rc1 - Release candiate 1 for September 2010 release
 
 
 Directory Hierarchy:
@@ -133,23 +133,80 @@
 
 /arch			Architecture specific files
   /arc			Files generic to ARC architecture
+    /cpu		CPU specific files
+      /arc700		Files specific to ARC 700 CPUs
+    /lib		Architecture specific library files
   /arm			Files generic to ARM architecture
+    /cpu		CPU specific files
+      /arm720t		Files specific to ARM 720 CPUs
+      /arm920t		Files specific to ARM 920 CPUs
+	/at91		Files specific to Atmel AT91RM9200 CPU
+	/imx		Files specific to Freescale MC9328 i.MX CPUs
+	/s3c24x0	Files specific to Samsung S3C24X0 CPUs
+      /arm926ejs	Files specific to ARM 926 CPUs
+      /arm1136		Files specific to ARM 1136 CPUs
+      /pxa		Files specific to Intel XScale PXA CPUs
+      /sa1100		Files specific to Intel StrongARM SA1100 CPUs
+    /lib		Architecture specific library files
+  /avr32		Files generic to AVR32 architecture
+    /cpu		CPU specific files
+    /lib		Architecture specific library files
+  /blackfin		Files generic to Analog Devices Blackfin architecture
+    /cpu		CPU specific files
+    /lib		Architecture specific library files
   /m68k			Files generic to m68k architecture
+    /cpu		CPU specific files
+      /mcf52x2		Files specific to Freescale ColdFire MCF52x2 CPUs
+      /mcf5227x		Files specific to Freescale ColdFire MCF5227x CPUs
+      /mcf532x		Files specific to Freescale ColdFire MCF5329 CPUs
+      /mcf5445x		Files specific to Freescale ColdFire MCF5445x CPUs
+      /mcf547x_8x	Files specific to Freescale ColdFire MCF547x_8x CPUs
+    /lib		Architecture specific library files
   /microblaze		Files generic to microblaze architecture
+    /cpu		CPU specific files
+    /lib		Architecture specific library files
   /mips			Files generic to MIPS architecture
+    /cpu		CPU specific files
+      /mips32		Files specific to MIPS32 CPUs
+      /mips64		Files specific to MIPS64 CPUs
+    /lib		Architecture specific library files
   /nds32		Files generic to NDS32 architecture
+    /cpu		CPU specific files
+      /n1213		Files specific to Andes Technology N1213 CPUs
+    /lib		Architecture specific library files
   /nios2		Files generic to Altera NIOS2 architecture
+    /cpu		CPU specific files
+    /lib		Architecture specific library files
   /openrisc		Files generic to OpenRISC architecture
+    /cpu		CPU specific files
+    /lib		Architecture specific library files
   /powerpc		Files generic to PowerPC architecture
-  /riscv		Files generic to RISC-V architecture
-  /sandbox		Files generic to HW-independent "sandbox"
+    /cpu		CPU specific files
+      /74xx_7xx		Files specific to Freescale MPC74xx and 7xx CPUs
+      /mpc5xx		Files specific to Freescale MPC5xx CPUs
+      /mpc5xxx		Files specific to Freescale MPC5xxx CPUs
+      /mpc8xx		Files specific to Freescale MPC8xx CPUs
+      /mpc8260		Files specific to Freescale MPC8260 CPUs
+      /mpc85xx		Files specific to Freescale MPC85xx CPUs
+      /ppc4xx		Files specific to AMCC PowerPC 4xx CPUs
+    /lib		Architecture specific library files
   /sh			Files generic to SH architecture
+    /cpu		CPU specific files
+      /sh2		Files specific to sh2 CPUs
+      /sh3		Files specific to sh3 CPUs
+      /sh4		Files specific to sh4 CPUs
+    /lib		Architecture specific library files
+  /sparc		Files generic to SPARC architecture
+    /cpu		CPU specific files
+      /leon2		Files specific to Gaisler LEON2 SPARC CPU
+      /leon3		Files specific to Gaisler LEON3 SPARC CPU
+    /lib		Architecture specific library files
   /x86			Files generic to x86 architecture
+    /cpu		CPU specific files
+    /lib		Architecture specific library files
 /api			Machine/arch independent API for external apps
 /board			Board dependent files
-/cmd			U-Boot commands functions
 /common			Misc architecture independent functions
-/configs		Board default configuration files
 /disk			Code for disk drive partition handling
 /doc			Documentation (don't expect too much)
 /drivers		Commonly used device drivers
@@ -157,12 +214,13 @@
 /examples		Example code for standalone applications, etc.
 /fs			Filesystem code (cramfs, ext2, jffs2, etc.)
 /include		Header Files
-/lib			Library routines generic to all architectures
-/Licenses		Various license files
+/lib			Files generic to all architectures
+  /libfdt		Library files to support flattened device trees
+  /lzma			Library files to support LZMA decompression
+  /lzo			Library files to support LZO decompression
 /net			Networking code
 /post			Power On Self Test
-/scripts		Various build scripts and Makefiles
-/test			Various unit test files
+/spl			Secondary Program Loader framework
 /tools			Tools to build S-Record or U-Boot images, etc.
 
 Software Configuration:
@@ -182,11 +240,11 @@
   you don't know what you're doing; they have names beginning with
   "CONFIG_SYS_".
 
-Previously, all configuration was done by hand, which involved creating
-symbolic links and editing configuration files manually. More recently,
-U-Boot has added the Kbuild infrastructure used by the Linux kernel,
-allowing you to use the "make menuconfig" command to configure your
-build.
+Later we will add a configuration tool - probably similar to or even
+identical to what's used for the Linux kernel. Right now, we have to
+do the configuration by hand, which means creating some symbolic
+links and editing some configuration files. We use the TQM8xxL boards
+as an example here.
 
 
 Selection of Processor Architecture and Board Type:
@@ -200,9 +258,10 @@
 	cd u-boot
 	make TQM823L_defconfig
 
-Note: If you're looking for the default configuration file for a board
-you're sure used to be there but is now missing, check the file
-doc/README.scrapyard for a list of no longer supported boards.
+For the Cogent platform, you need to specify the CPU type as well;
+e.g. "make cogent_mpc8xx_defconfig". And also configure the cogent
+directory according to the instructions in cogent/README.
+
 
 Sandbox Environment:
 --------------------
@@ -215,87 +274,6 @@
 See board/sandbox/README.sandbox for more details.
 
 
-Board Initialisation Flow:
---------------------------
-
-This is the intended start-up flow for boards. This should apply for both
-SPL and U-Boot proper (i.e. they both follow the same rules).
-
-Note: "SPL" stands for "Secondary Program Loader," which is explained in
-more detail later in this file.
-
-At present, SPL mostly uses a separate code path, but the function names
-and roles of each function are the same. Some boards or architectures
-may not conform to this.  At least most ARM boards which use
-CONFIG_SPL_FRAMEWORK conform to this.
-
-Execution typically starts with an architecture-specific (and possibly
-CPU-specific) start.S file, such as:
-
-	- arch/arm/cpu/armv7/start.S
-	- arch/powerpc/cpu/mpc83xx/start.S
-	- arch/mips/cpu/start.S
-
-and so on. From there, three functions are called; the purpose and
-limitations of each of these functions are described below.
-
-lowlevel_init():
-	- purpose: essential init to permit execution to reach board_init_f()
-	- no global_data or BSS
-	- there is no stack (ARMv7 may have one but it will soon be removed)
-	- must not set up SDRAM or use console
-	- must only do the bare minimum to allow execution to continue to
-		board_init_f()
-	- this is almost never needed
-	- return normally from this function
-
-board_init_f():
-	- purpose: set up the machine ready for running board_init_r():
-		i.e. SDRAM and serial UART
-	- global_data is available
-	- stack is in SRAM
-	- BSS is not available, so you cannot use global/static variables,
-		only stack variables and global_data
-
-	Non-SPL-specific notes:
-	- dram_init() is called to set up DRAM. If already done in SPL this
-		can do nothing
-
-	SPL-specific notes:
-	- you can override the entire board_init_f() function with your own
-		version as needed.
-	- preloader_console_init() can be called here in extremis
-	- should set up SDRAM, and anything needed to make the UART work
-	- these is no need to clear BSS, it will be done by crt0.S
-	- must return normally from this function (don't call board_init_r()
-		directly)
-
-Here the BSS is cleared. For SPL, if CONFIG_SPL_STACK_R is defined, then at
-this point the stack and global_data are relocated to below
-CONFIG_SPL_STACK_R_ADDR. For non-SPL, U-Boot is relocated to run at the top of
-memory.
-
-board_init_r():
-	- purpose: main execution, common code
-	- global_data is available
-	- SDRAM is available
-	- BSS is available, all static/global variables can be used
-	- execution eventually continues to main_loop()
-
-	Non-SPL-specific notes:
-	- U-Boot is relocated to the top of memory and is now running from
-		there.
-
-	SPL-specific notes:
-	- stack is optionally in SDRAM, if CONFIG_SPL_STACK_R is defined and
-		CONFIG_SPL_STACK_R_ADDR points into SDRAM
-	- preloader_console_init() can be called here - typically this is
-		done by selecting CONFIG_SPL_BOARD_INIT and then supplying a
-		spl_board_init() function containing this call
-	- loads U-Boot or (in falcon mode) Linux
-
-
-
 Configuration Options:
 ----------------------
 
@@ -311,19 +289,6 @@
 kernel configuration options. The intention is to make it easier to
 build a config tool - later.
 
-- ARM Platform Bus Type(CCI):
-		CoreLink Cache Coherent Interconnect (CCI) is ARM BUS which
-		provides full cache coherency between two clusters of multi-core
-		CPUs and I/O coherency for devices and I/O masters
-
-		CONFIG_SYS_FSL_HAS_CCI400
-
-		Defined For SoC that has cache coherent interconnect
-		CCN-400
-
-		CONFIG_SYS_FSL_HAS_CCN504
-
-		Defined for SoC that has cache coherent interconnect CCN-504
 
 The following options need to be configured:
 
@@ -331,6 +296,63 @@
 
 - Board Type:	Define exactly one, e.g. CONFIG_MPC8540ADS.
 
+- CPU Daughterboard Type: (if CONFIG_ATSTK1000 is defined)
+		Define exactly one, e.g. CONFIG_ATSTK1002
+
+- CPU Module Type: (if CONFIG_COGENT is defined)
+		Define exactly one of
+		CONFIG_CMA286_60_OLD
+--- FIXME --- not tested yet:
+		CONFIG_CMA286_60, CONFIG_CMA286_21, CONFIG_CMA286_60P,
+		CONFIG_CMA287_23, CONFIG_CMA287_50
+
+- Motherboard Type: (if CONFIG_COGENT is defined)
+		Define exactly one of
+		CONFIG_CMA101, CONFIG_CMA102
+
+- Motherboard I/O Modules: (if CONFIG_COGENT is defined)
+		Define one or more of
+		CONFIG_CMA302
+
+- Motherboard Options: (if CONFIG_CMA101 or CONFIG_CMA102 are defined)
+		Define one or more of
+		CONFIG_LCD_HEARTBEAT	- update a character position on
+					  the LCD display every second with
+					  a "rotator" |\-/|\-/
+
+- Marvell Family Member
+		CONFIG_SYS_MVFS		- define it if you want to enable
+					  multiple fs option at one time
+					  for marvell soc family
+
+- 8xx CPU Options: (if using an MPC8xx CPU)
+		CONFIG_8xx_GCLK_FREQ	- deprecated: CPU clock if
+					  get_gclk_freq() cannot work
+					  e.g. if there is no 32KHz
+					  reference PIT/RTC clock
+		CONFIG_8xx_OSCLK	- PLL input clock (either EXTCLK
+					  or XTAL/EXTAL)
+
+- 859/866/885 CPU options: (if using a MPC859 or MPC866 or MPC885 CPU):
+		CONFIG_SYS_8xx_CPUCLK_MIN
+		CONFIG_SYS_8xx_CPUCLK_MAX
+		CONFIG_8xx_CPUCLK_DEFAULT
+			See doc/README.MPC866
+
+		CONFIG_SYS_MEASURE_CPUCLK
+
+		Define this to measure the actual CPU clock instead
+		of relying on the correctness of the configured
+		values. Mostly useful for board bringup to make sure
+		the PLL is locked at the intended frequency. Note
+		that this requires a (stable) reference clock (32 kHz
+		RTC clock or CONFIG_SYS_8XX_XIN)
+
+		CONFIG_SYS_DELAYED_ICACHE
+
+		Define this option if you want to enable the
+		ICache only when Code runs from RAM.
+
 - 85xx CPU Options:
 		CONFIG_SYS_PPC64
 
@@ -349,6 +371,15 @@
 		Defines the string to utilize when trying to match PCIe device
 		tree nodes for the given platform.
 
+		CONFIG_SYS_PPC_E500_DEBUG_TLB
+
+		Enables a temporary TLB entry to be used during boot to work
+		around limitations in e500v1 and e500v2 external debugger
+		support. This reduces the portions of the boot code where
+		breakpoints and single stepping do not work.  The value of this
+		symbol should be set to the TLB1 entry to be used for this
+		purpose.
+
 		CONFIG_SYS_FSL_ERRATUM_A004510
 
 		Enables a workaround for erratum A004510.  If set,
@@ -404,13 +435,19 @@
 
 		CONFIG_SYS_CPC_REINIT_F
 		This CONFIG is defined when the CPC is configured as SRAM at the
-		time of U-Boot entry and is required to be re-initialized.
+		time of U-boot entry and is required to be re-initialized.
 
 		CONFIG_DEEP_SLEEP
 		Indicates this SoC supports deep sleep feature. If deep sleep is
 		supported, core will start to execute uboot when wakes up.
 
 - Generic CPU options:
+		CONFIG_SYS_GENERIC_GLOBAL_DATA
+		Defines global data is initialized in generic board board_init_f().
+		If this macro is defined, global data is created and cleared in
+		generic board board_init_f(). Without this macro, architecture/board
+		should initialize global data before calling board_init_f().
+
 		CONFIG_SYS_BIG_ENDIAN, CONFIG_SYS_LITTLE_ENDIAN
 
 		Defines the endianess of the CPU. Implementation of those
@@ -449,7 +486,7 @@
 		implemetation.
 
 		CONFIG_SYS_FSL_DDR2
-		Board config to use DDR2. It can be enabled for SoCs with
+		Board config to use DDR2. It can be eanbeld for SoCs with
 		Freescale DDR2 or DDR3 controllers, depending on the board
 		implementation.
 
@@ -471,12 +508,6 @@
 		CONFIG_SYS_FSL_IFC_LE
 		Defines the IFC controller register space as Little Endian
 
-		CONFIG_SYS_FSL_IFC_CLK_DIV
-		Defines divider of platform clock(clock input to IFC controller).
-
-		CONFIG_SYS_FSL_LBC_CLK_DIV
-		Defines divider of platform clock(clock input to eLBC controller).
-
 		CONFIG_SYS_FSL_PBL_PBI
 		It enables addition of RCW (Power on reset configuration) in built image.
 		Please refer doc/README.pblimage for more details
@@ -512,15 +543,26 @@
 		CONFIG_SYS_FSL_OTHER_DDR_NUM_CTRLS
 		Number of controllers used for other than main memory.
 
-		CONFIG_SYS_FSL_HAS_DP_DDR
-		Defines the SoC has DP-DDR used for DPAA.
-
 		CONFIG_SYS_FSL_SEC_BE
 		Defines the SEC controller register space as Big Endian
 
 		CONFIG_SYS_FSL_SEC_LE
 		Defines the SEC controller register space as Little Endian
 
+- Intel Monahans options:
+		CONFIG_SYS_MONAHANS_RUN_MODE_OSC_RATIO
+
+		Defines the Monahans run mode to oscillator
+		ratio. Valid values are 8, 16, 24, 31. The core
+		frequency is this value multiplied by 13 MHz.
+
+		CONFIG_SYS_MONAHANS_TURBO_RUN_MODE_RATIO
+
+		Defines the Monahans turbo mode to oscillator
+		ratio. Valid values are 1 (default if undefined) and
+		2. The core frequency as calculated above is multiplied
+		by this value.
+
 - MIPS CPU options:
 		CONFIG_SYS_INIT_SP_OFFSET
 
@@ -528,6 +570,25 @@
 		pointer. This is needed for the temporary stack before
 		relocation.
 
+		CONFIG_SYS_MIPS_CACHE_MODE
+
+		Cache operation mode for the MIPS CPU.
+		See also arch/mips/include/asm/mipsregs.h.
+		Possible values are:
+			CONF_CM_CACHABLE_NO_WA
+			CONF_CM_CACHABLE_WA
+			CONF_CM_UNCACHED
+			CONF_CM_CACHABLE_NONCOHERENT
+			CONF_CM_CACHABLE_CE
+			CONF_CM_CACHABLE_COW
+			CONF_CM_CACHABLE_CUW
+			CONF_CM_CACHABLE_ACCELERATED
+
+		CONFIG_SYS_XWAY_EBU_BOOTCFG
+
+		Special option for Lantiq XWAY SoCs for booting from NOR flash.
+		See also arch/mips/cpu/mips32/start.S.
+
 		CONFIG_XWAY_SWAP_BYTES
 
 		Enable compilation of tools/xway-swap-bytes needed for Lantiq
@@ -540,20 +601,140 @@
 		Select high exception vectors of the ARM core, e.g., do not
 		clear the V bit of the c1 register of CP15.
 
-		COUNTER_FREQUENCY
-		Generic timer clock source frequency.
+		CONFIG_SYS_THUMB_BUILD
 
-		COUNTER_FREQUENCY_REAL
-		Generic timer clock source frequency if the real clock is
-		different from COUNTER_FREQUENCY, and can only be determined
-		at run time.
+		Use this flag to build U-Boot using the Thumb instruction
+		set for ARM architectures. Thumb instruction set provides
+		better code density. For ARM architectures that support
+		Thumb2 this flag will result in Thumb2 code generated by
+		GCC.
 
-- Tegra SoC options:
-		CONFIG_TEGRA_SUPPORT_NON_SECURE
+		CONFIG_ARM_ERRATA_716044
+		CONFIG_ARM_ERRATA_742230
+		CONFIG_ARM_ERRATA_743622
+		CONFIG_ARM_ERRATA_751472
+		CONFIG_ARM_ERRATA_794072
+		CONFIG_ARM_ERRATA_761320
 
-		Support executing U-Boot in non-secure (NS) mode. Certain
-		impossible actions will be skipped if the CPU is in NS mode,
-		such as ARM architectural timer initialization.
+		If set, the workarounds for these ARM errata are applied early
+		during U-Boot startup. Note that these options force the
+		workarounds to be applied; no CPU-type/version detection
+		exists, unlike the similar options in the Linux kernel. Do not
+		set these options unless they apply!
+
+- Driver Model
+		Driver model is a new framework for devices in U-Boot
+		introduced in early 2014. U-Boot is being progressively
+		moved over to this. It offers a consistent device structure,
+		supports grouping devices into classes and has built-in
+		handling of platform data and device tree.
+
+		To enable transition to driver model in a relatively
+		painful fashion, each subsystem can be independently
+		switched between the legacy/ad-hoc approach and the new
+		driver model using the options below. Also, many uclass
+		interfaces include compatibility features which may be
+		removed once the conversion of that subsystem is complete.
+		As a result, the API provided by the subsystem may in fact
+		not change with driver model.
+
+		See doc/driver-model/README.txt for more information.
+
+		CONFIG_DM
+
+		Enable driver model. This brings in the core support,
+		including scanning of platform data on start-up. If
+		CONFIG_OF_CONTROL is enabled, the device tree will be
+		scanned also when available.
+
+		CONFIG_CMD_DM
+
+		Enable driver model test commands. These allow you to print
+		out the driver model tree and the uclasses.
+
+		CONFIG_DM_DEMO
+
+		Enable some demo devices and the 'demo' command. These are
+		really only useful for playing around while trying to
+		understand driver model in sandbox.
+
+		CONFIG_SPL_DM
+
+		Enable driver model in SPL. You will need to provide a
+		suitable malloc() implementation. If you are not using the
+		full malloc() enabled by CONFIG_SYS_SPL_MALLOC_START,
+		consider using CONFIG_SYS_MALLOC_SIMPLE. In that case you
+		must provide CONFIG_SYS_MALLOC_F_LEN to set the size.
+		In most cases driver model will only allocate a few uclasses
+		and devices in SPL, so 1KB should be enable. See
+		CONFIG_SYS_MALLOC_F_LEN for more details on how to enable
+		it.
+
+		CONFIG_DM_SERIAL
+
+		Enable driver model for serial. This replaces
+		drivers/serial/serial.c with the serial uclass, which
+		implements serial_putc() etc. The uclass interface is
+		defined in include/serial.h.
+
+		CONFIG_DM_GPIO
+
+		Enable driver model for GPIO access. The standard GPIO
+		interface (gpio_get_value(), etc.) is then implemented by
+		the GPIO uclass. Drivers provide methods to query the
+		particular GPIOs that they provide. The uclass interface
+		is defined in include/asm-generic/gpio.h.
+
+		CONFIG_DM_SPI
+
+		Enable driver model for SPI. The SPI slave interface
+		(spi_setup_slave(), spi_xfer(), etc.) is then implemented by
+		the SPI uclass. Drivers provide methods to access the SPI
+		buses that they control. The uclass interface is defined in
+		include/spi.h. The existing spi_slave structure is attached
+		as 'parent data' to every slave on each bus. Slaves
+		typically use driver-private data instead of extending the
+		spi_slave structure.
+
+		CONFIG_DM_SPI_FLASH
+
+		Enable driver model for SPI flash. This SPI flash interface
+		(spi_flash_probe(), spi_flash_write(), etc.) is then
+		implemented by the SPI flash uclass. There is one standard
+		SPI flash driver which knows how to probe most chips
+		supported by U-Boot. The uclass interface is defined in
+		include/spi_flash.h, but is currently fully compatible
+		with the old interface to avoid confusion and duplication
+		during the transition parent. SPI and SPI flash must be
+		enabled together (it is not possible to use driver model
+		for one and not the other).
+
+		CONFIG_DM_CROS_EC
+
+		Enable driver model for the Chrome OS EC interface. This
+		allows the cros_ec SPI driver to operate with CONFIG_DM_SPI
+		but otherwise makes few changes. Since cros_ec also supports
+		I2C and LPC (which don't support driver model yet), a full
+		conversion is not yet possible.
+
+
+		** Code size options: The following options are enabled by
+		default except in SPL. Enable them explicitly to get these
+		features in SPL.
+
+		CONFIG_DM_WARN
+
+		Enable the dm_warn() function. This can use up quite a bit
+		of space for its strings.
+
+		CONFIG_DM_STDIO
+
+		Enable registering a serial device with the stdio library.
+
+		CONFIG_DM_DEVICE_REMOVE
+
+		Enable removing of devices.
+
 
 - Linux Kernel Interface:
 		CONFIG_CLOCKS_IN_MHZ
@@ -586,6 +767,10 @@
 		 * Adds the "fdt" command
 		 * The bootm command automatically updates the fdt
 
+		OF_CPU - The proper name of the cpus node (only required for
+			MPC512X and MPC5xxx based boards).
+		OF_SOC - The proper name of the soc node (only required for
+			MPC512X and MPC5xxx based boards).
 		OF_TBCLK - The timebase frequency.
 		OF_STDOUT_PATH - The path to the console device
 
@@ -604,6 +789,11 @@
 		This causes ft_system_setup() to be called before booting
 		the kernel.
 
+		CONFIG_OF_BOOT_CPU
+
+		This define fills in the correct boot CPU in the boot
+		param header, the default value is zero if undefined.
+
 		CONFIG_OF_IDE_FIXUP
 
 		U-Boot can detect if an IDE device is present or not.
@@ -626,10 +816,18 @@
 - vxWorks boot parameters:
 
 		bootvx constructs a valid bootline using the following
-		environments variables: bootdev, bootfile, ipaddr, netmask,
-		serverip, gatewayip, hostname, othbootargs.
+		environments variables: bootfile, ipaddr, serverip, hostname.
 		It loads the vxWorks image pointed bootfile.
 
+		CONFIG_SYS_VXWORKS_BOOT_DEVICE - The vxworks device name
+		CONFIG_SYS_VXWORKS_MAC_PTR - Ethernet 6 byte MA -address
+		CONFIG_SYS_VXWORKS_SERVERNAME - Name of the server
+		CONFIG_SYS_VXWORKS_BOOT_ADDR - Address of boot parameters
+
+		CONFIG_SYS_VXWORKS_ADD_PARAMS
+
+		Add it at the end of the bootline. E.g "u=username pw=secret"
+
 		Note: If a "bootargs" environment is defined, it will overwride
 		the defaults discussed just above.
 
@@ -664,15 +862,145 @@
 		define this to a list of base addresses for each (supported)
 		port. See e.g. include/configs/versatile.h
 
+		CONFIG_PL011_SERIAL_RLCR
+
+		Some vendor versions of PL011 serial ports (e.g. ST-Ericsson U8500)
+		have separate receive and transmit line control registers.  Set
+		this variable to initialize the extra register.
+
+		CONFIG_PL011_SERIAL_FLUSH_ON_INIT
+
+		On some platforms (e.g. U8500) U-Boot is loaded by a second stage
+		boot loader that has already initialized the UART.  Define this
+		variable to flush the UART at init time.
+
 		CONFIG_SERIAL_HW_FLOW_CONTROL
 
 		Define this variable to enable hw flow control in serial driver.
 		Current user of this option is drivers/serial/nsl16550.c driver
 
+- Console Interface:
+		Depending on board, define exactly one serial port
+		(like CONFIG_8xx_CONS_SMC1, CONFIG_8xx_CONS_SMC2,
+		CONFIG_8xx_CONS_SCC1, ...), or switch off the serial
+		console by defining CONFIG_8xx_CONS_NONE
+
+		Note: if CONFIG_8xx_CONS_NONE is defined, the serial
+		port routines must be defined elsewhere
+		(i.e. serial_init(), serial_getc(), ...)
+
+		CONFIG_CFB_CONSOLE
+		Enables console device for a color framebuffer. Needs following
+		defines (cf. smiLynxEM, i8042)
+			VIDEO_FB_LITTLE_ENDIAN	graphic memory organisation
+						(default big endian)
+			VIDEO_HW_RECTFILL	graphic chip supports
+						rectangle fill
+						(cf. smiLynxEM)
+			VIDEO_HW_BITBLT		graphic chip supports
+						bit-blit (cf. smiLynxEM)
+			VIDEO_VISIBLE_COLS	visible pixel columns
+						(cols=pitch)
+			VIDEO_VISIBLE_ROWS	visible pixel rows
+			VIDEO_PIXEL_SIZE	bytes per pixel
+			VIDEO_DATA_FORMAT	graphic data format
+						(0-5, cf. cfb_console.c)
+			VIDEO_FB_ADRS		framebuffer address
+			VIDEO_KBD_INIT_FCT	keyboard int fct
+						(i.e. i8042_kbd_init())
+			VIDEO_TSTC_FCT		test char fct
+						(i.e. i8042_tstc)
+			VIDEO_GETC_FCT		get char fct
+						(i.e. i8042_getc)
+			CONFIG_CONSOLE_CURSOR	cursor drawing on/off
+						(requires blink timer
+						cf. i8042.c)
+			CONFIG_SYS_CONSOLE_BLINK_COUNT blink interval (cf. i8042.c)
+			CONFIG_CONSOLE_TIME	display time/date info in
+						upper right corner
+						(requires CONFIG_CMD_DATE)
+			CONFIG_VIDEO_LOGO	display Linux logo in
+						upper left corner
+			CONFIG_VIDEO_BMP_LOGO	use bmp_logo.h instead of
+						linux_logo.h for logo.
+						Requires CONFIG_VIDEO_LOGO
+			CONFIG_CONSOLE_EXTRA_INFO
+						additional board info beside
+						the logo
+
+		When CONFIG_CFB_CONSOLE_ANSI is defined, console will support
+		a limited number of ANSI escape sequences (cursor control,
+		erase functions and limited graphics rendition control).
+
+		When CONFIG_CFB_CONSOLE is defined, video console is
+		default i/o. Serial console can be forced with
+		environment 'console=serial'.
+
+		When CONFIG_SILENT_CONSOLE is defined, all console
+		messages (by U-Boot and Linux!) can be silenced with
+		the "silent" environment variable. See
+		doc/README.silent for more information.
+
+		CONFIG_SYS_CONSOLE_BG_COL: define the backgroundcolor, default
+			is 0x00.
+		CONFIG_SYS_CONSOLE_FG_COL: define the foregroundcolor, default
+			is 0xa0.
+
 - Console Baudrate:
 		CONFIG_BAUDRATE - in bps
 		Select one of the baudrates listed in
 		CONFIG_SYS_BAUDRATE_TABLE, see below.
+		CONFIG_SYS_BRGCLK_PRESCALE, baudrate prescale
+
+- Console Rx buffer length
+		With CONFIG_SYS_SMC_RXBUFLEN it is possible to define
+		the maximum receive buffer length for the SMC.
+		This option is actual only for 82xx and 8xx possible.
+		If using CONFIG_SYS_SMC_RXBUFLEN also CONFIG_SYS_MAXIDLE
+		must be defined, to setup the maximum idle timeout for
+		the SMC.
+
+- Pre-Console Buffer:
+		Prior to the console being initialised (i.e. serial UART
+		initialised etc) all console output is silently discarded.
+		Defining CONFIG_PRE_CONSOLE_BUFFER will cause U-Boot to
+		buffer any console messages prior to the console being
+		initialised to a buffer of size CONFIG_PRE_CON_BUF_SZ
+		bytes located at CONFIG_PRE_CON_BUF_ADDR. The buffer is
+		a circular buffer, so if more than CONFIG_PRE_CON_BUF_SZ
+		bytes are output before the console is initialised, the
+		earlier bytes are discarded.
+
+		'Sane' compilers will generate smaller code if
+		CONFIG_PRE_CON_BUF_SZ is a power of 2
+
+- Safe printf() functions
+		Define CONFIG_SYS_VSNPRINTF to compile in safe versions of
+		the printf() functions. These are defined in
+		include/vsprintf.h and include snprintf(), vsnprintf() and
+		so on. Code size increase is approximately 300-500 bytes.
+		If this option is not given then these functions will
+		silently discard their buffer size argument - this means
+		you are not getting any overflow checking in this case.
+
+- Boot Delay:	CONFIG_BOOTDELAY - in seconds
+		Delay before automatically booting the default image;
+		set to -1 to disable autoboot.
+		set to -2 to autoboot with no delay and not check for abort
+		(even when CONFIG_ZERO_BOOTDELAY_CHECK is defined).
+
+		See doc/README.autoboot for these options that
+		work with CONFIG_BOOTDELAY. None are required.
+		CONFIG_BOOT_RETRY_TIME
+		CONFIG_BOOT_RETRY_MIN
+		CONFIG_AUTOBOOT_KEYED
+		CONFIG_AUTOBOOT_PROMPT
+		CONFIG_AUTOBOOT_DELAY_STR
+		CONFIG_AUTOBOOT_STOP_STR
+		CONFIG_AUTOBOOT_DELAY_STR2
+		CONFIG_AUTOBOOT_STOP_STR2
+		CONFIG_ZERO_BOOTDELAY_CHECK
+		CONFIG_RESET_TO_RETRY
 
 - Autoboot Command:
 		CONFIG_BOOTCOMMAND
@@ -681,12 +1009,33 @@
 		when no character is read on the console interface
 		within "Boot Delay" after reset.
 
+		CONFIG_BOOTARGS
+		This can be used to pass arguments to the bootm
+		command. The value of CONFIG_BOOTARGS goes into the
+		environment value "bootargs".
+
 		CONFIG_RAMBOOT and CONFIG_NFSBOOT
 		The value of these goes into the environment as
 		"ramboot" and "nfsboot" respectively, and can be used
 		as a convenience, when switching between booting from
 		RAM and NFS.
 
+- Bootcount:
+		CONFIG_BOOTCOUNT_LIMIT
+		Implements a mechanism for detecting a repeating reboot
+		cycle, see:
+		http://www.denx.de/wiki/view/DULG/UBootBootCountLimit
+
+		CONFIG_BOOTCOUNT_ENV
+		If no softreset save registers are found on the hardware
+		"bootcount" is stored in the environment. To prevent a
+		saveenv on all reboots, the environment variable
+		"upgrade_available" is used. If "upgrade_available" is
+		0, "bootcount" is always 0, if "upgrade_available" is
+		1 "bootcount" is incremented in the environment.
+		So the Userspace Applikation must set the "upgrade_available"
+		and "bootcount" variable to 0, if a boot was successfully.
+
 - Pre-Boot Commands:
 		CONFIG_PREBOOT
 
@@ -717,13 +1066,146 @@
 		Select one of the baudrates listed in
 		CONFIG_SYS_BAUDRATE_TABLE, see below.
 
-- Removal of commands
-		If no commands are needed to boot, you can disable
-		CONFIG_CMDLINE to remove them. In this case, the command line
-		will not be available, and when U-Boot wants to execute the
-		boot command (on start-up) it will call board_run_command()
-		instead. This can reduce image size significantly for very
-		simple boot procedures.
+- Monitor Functions:
+		Monitor commands can be included or excluded
+		from the build by using the #include files
+		<config_cmd_all.h> and #undef'ing unwanted
+		commands, or using <config_cmd_default.h>
+		and augmenting with additional #define's
+		for wanted commands.
+
+		The default command configuration includes all commands
+		except those marked below with a "*".
+
+		CONFIG_CMD_AES		  AES 128 CBC encrypt/decrypt
+		CONFIG_CMD_ASKENV	* ask for env variable
+		CONFIG_CMD_BDI		  bdinfo
+		CONFIG_CMD_BEDBUG	* Include BedBug Debugger
+		CONFIG_CMD_BMP		* BMP support
+		CONFIG_CMD_BSP		* Board specific commands
+		CONFIG_CMD_BOOTD	  bootd
+		CONFIG_CMD_BOOTI	* ARM64 Linux kernel Image support
+		CONFIG_CMD_CACHE	* icache, dcache
+		CONFIG_CMD_CLK   	* clock command support
+		CONFIG_CMD_CONSOLE	  coninfo
+		CONFIG_CMD_CRC32	* crc32
+		CONFIG_CMD_DATE		* support for RTC, date/time...
+		CONFIG_CMD_DHCP		* DHCP support
+		CONFIG_CMD_DIAG		* Diagnostics
+		CONFIG_CMD_DS4510	* ds4510 I2C gpio commands
+		CONFIG_CMD_DS4510_INFO	* ds4510 I2C info command
+		CONFIG_CMD_DS4510_MEM	* ds4510 I2C eeprom/sram commansd
+		CONFIG_CMD_DS4510_RST	* ds4510 I2C rst command
+		CONFIG_CMD_DTT		* Digital Therm and Thermostat
+		CONFIG_CMD_ECHO		  echo arguments
+		CONFIG_CMD_EDITENV	  edit env variable
+		CONFIG_CMD_EEPROM	* EEPROM read/write support
+		CONFIG_CMD_ELF		* bootelf, bootvx
+		CONFIG_CMD_ENV_CALLBACK	* display details about env callbacks
+		CONFIG_CMD_ENV_FLAGS	* display details about env flags
+		CONFIG_CMD_ENV_EXISTS	* check existence of env variable
+		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_FS_UUID	* Look up a filesystem UUID
+		CONFIG_CMD_SAVEENV	  saveenv
+		CONFIG_CMD_FDC		* Floppy Disk Support
+		CONFIG_CMD_FAT		* FAT command support
+		CONFIG_CMD_FLASH	  flinfo, erase, protect
+		CONFIG_CMD_FPGA		  FPGA device initialization support
+		CONFIG_CMD_FUSE		* Device fuse support
+		CONFIG_CMD_GETTIME	* Get time since boot
+		CONFIG_CMD_GO		* the 'go' command (exec code)
+		CONFIG_CMD_GREPENV	* search environment
+		CONFIG_CMD_HASH		* calculate hash / digest
+		CONFIG_CMD_HWFLOW	* RTS/CTS hw flow control
+		CONFIG_CMD_I2C		* I2C serial bus support
+		CONFIG_CMD_IDE		* IDE harddisk support
+		CONFIG_CMD_IMI		  iminfo
+		CONFIG_CMD_IMLS		  List all images found in NOR flash
+		CONFIG_CMD_IMLS_NAND	* List all images found in NAND flash
+		CONFIG_CMD_IMMAP	* IMMR dump support
+		CONFIG_CMD_IOTRACE	* I/O tracing for debugging
+		CONFIG_CMD_IMPORTENV	* import an environment
+		CONFIG_CMD_INI		* import data from an ini file into the env
+		CONFIG_CMD_IRQ		* irqinfo
+		CONFIG_CMD_ITEST	  Integer/string test of 2 values
+		CONFIG_CMD_JFFS2	* JFFS2 Support
+		CONFIG_CMD_KGDB		* kgdb
+		CONFIG_CMD_LDRINFO	* ldrinfo (display Blackfin loader)
+		CONFIG_CMD_LINK_LOCAL	* link-local IP address auto-configuration
+					  (169.254.*.*)
+		CONFIG_CMD_LOADB	  loadb
+		CONFIG_CMD_LOADS	  loads
+		CONFIG_CMD_MD5SUM	* print md5 message digest
+					  (requires CONFIG_CMD_MEMORY and CONFIG_MD5)
+		CONFIG_CMD_MEMINFO	* Display detailed memory information
+		CONFIG_CMD_MEMORY	  md, mm, nm, mw, cp, cmp, crc, base,
+					  loop, loopw
+		CONFIG_CMD_MEMTEST	* mtest
+		CONFIG_CMD_MISC		  Misc functions like sleep etc
+		CONFIG_CMD_MMC		* MMC memory mapped support
+                CONFIG_CMD_GPT          * GPT command
+		CONFIG_CMD_MII		* MII utility commands
+		CONFIG_CMD_MTDPARTS	* MTD partition support
+		CONFIG_CMD_NAND		* NAND support
+		CONFIG_CMD_NET		  bootp, tftpboot, rarpboot
+		CONFIG_CMD_NFS		  NFS support
+		CONFIG_CMD_PCA953X	* PCA953x I2C gpio commands
+		CONFIG_CMD_PCA953X_INFO * PCA953x I2C gpio info command
+		CONFIG_CMD_PCI		* pciinfo
+		CONFIG_CMD_PCMCIA		* PCMCIA support
+		CONFIG_CMD_PING		* send ICMP ECHO_REQUEST to network
+					  host
+		CONFIG_CMD_PORTIO	* Port I/O
+		CONFIG_CMD_READ		* Read raw data from partition
+		CONFIG_CMD_REGINFO	* Register dump
+		CONFIG_CMD_RUN		  run command in env variable
+		CONFIG_CMD_SANDBOX	* sb command to access sandbox features
+		CONFIG_CMD_SAVES	* save S record dump
+		CONFIG_CMD_SCSI		* SCSI Support
+		CONFIG_CMD_SDRAM	* print SDRAM configuration information
+					  (requires CONFIG_CMD_I2C)
+		CONFIG_CMD_SETGETDCR	  Support for DCR Register access
+					  (4xx only)
+		CONFIG_CMD_SF		* Read/write/erase SPI NOR flash
+		CONFIG_CMD_SHA1SUM	* print sha1 memory digest
+					  (requires CONFIG_CMD_MEMORY)
+		CONFIG_CMD_SOFTSWITCH	* Soft switch setting command for BF60x
+		CONFIG_CMD_SOURCE	  "source" command Support
+		CONFIG_CMD_SPI		* SPI serial bus support
+		CONFIG_CMD_TFTPSRV	* TFTP transfer in server mode
+		CONFIG_CMD_TFTPPUT	* TFTP put command (upload)
+		CONFIG_CMD_TIME		* run command and report execution time (ARM specific)
+		CONFIG_CMD_TIMER	* access to the system tick timer
+		CONFIG_CMD_USB		* USB support
+		CONFIG_CMD_CDP		* Cisco Discover Protocol support
+		CONFIG_CMD_MFSL		* Microblaze FSL support
+		CONFIG_CMD_XIMG		  Load part of Multi Image
+		CONFIG_CMD_UUID		* Generate random UUID or GUID string
+
+		EXAMPLE: If you want all functions except of network
+		support you can write:
+
+		#include "config_cmd_all.h"
+		#undef CONFIG_CMD_NET
+
+	Other Commands:
+		fdt (flattened device tree) command: CONFIG_OF_LIBFDT
+
+	Note:	Don't enable the "icache" and "dcache" commands
+		(configuration option CONFIG_CMD_CACHE) unless you know
+		what you (and your U-Boot users) are doing. Data
+		cache cannot be enabled on systems like the 8xx or
+		8260 (where accesses to the IMMR region must be
+		uncached), and it cannot be disabled on all other
+		systems where we (mis-) use the data cache to hold an
+		initial stack and some data.
+
+
+		XXX - this list needs to get updated!
 
 - Regular expression support:
 		CONFIG_REGEX
@@ -741,14 +1223,14 @@
 		tree is available in the global data as gd->fdt_blob.
 
 		U-Boot needs to get its device tree from somewhere. This can
-		be done using one of the three options below:
+		be done using one of the two options below:
 
 		CONFIG_OF_EMBED
 		If this variable is defined, U-Boot will embed a device tree
 		binary in its image. This device tree file should be in the
 		board directory and called <soc>-<board>.dts. The binary file
 		is then picked up in board_init_f() and made available through
-		the global data structure as gd->fdt_blob.
+		the global data structure as gd->blob.
 
 		CONFIG_OF_SEPARATE
 		If this variable is defined, U-Boot will build a device tree
@@ -762,17 +1244,11 @@
 		still use the individual files if you need something more
 		exotic.
 
-		CONFIG_OF_BOARD
-		If this variable is defined, U-Boot will use the device tree
-		provided by the board at runtime instead of embedding one with
-		the image. Only boards defining board_fdt_blob_setup() support
-		this option (see include/fdtdec.h file).
-
 - Watchdog:
 		CONFIG_WATCHDOG
 		If this variable is defined, it enables watchdog
 		support for the SoC. There must be support in the SoC
-		specific code for a watchdog. For the 8xx
+		specific code for a watchdog. For the 8xx and 8260
 		CPUs, the SIU Watchdog feature is enabled in the SYPCR
 		register.  When supported for a specific SoC is
 		available, then no further board specific code should
@@ -783,8 +1259,13 @@
 		SoC, then define this variable and provide board
 		specific code for the "hw_watchdog_reset" function.
 
-		CONFIG_AT91_HW_WDT_TIMEOUT
-		specify the timeout in seconds. default 2 seconds.
+- U-Boot Version:
+		CONFIG_VERSION_VARIABLE
+		If this variable is defined, an environment variable
+		named "ver" is created by U-Boot showing the U-Boot
+		version as printed by the "version" command.
+		Any change to this variable will be reverted at the
+		next reset.
 
 - Real-Time Clock:
 
@@ -792,6 +1273,7 @@
 		has to be selected, too. Define exactly one of the
 		following options:
 
+		CONFIG_RTC_MPC8xx	- use internal RTC of MPC8xx
 		CONFIG_RTC_PCF8563	- use Philips PCF8563 RTC
 		CONFIG_RTC_MC13XXX	- use MC13783 or MC13892 RTC
 		CONFIG_RTC_MC146818	- use MC146818 RTC
@@ -802,7 +1284,7 @@
 		CONFIG_RTC_DS164x	- use Dallas DS164x RTC
 		CONFIG_RTC_ISL1208	- use Intersil ISL1208 RTC
 		CONFIG_RTC_MAX6900	- use Maxim, Inc. MAX6900 RTC
-		CONFIG_RTC_DS1337_NOOSC	- Turn off the OSC output for DS1337
+		CONFIG_SYS_RTC_DS1337_NOOSC	- Turn off the OSC output for DS1337
 		CONFIG_SYS_RV3029_TCR	- enable trickle charger on
 					  RV3029 RTC.
 
@@ -851,11 +1333,16 @@
 - Partition Labels (disklabels) Supported:
 		Zero or more of the following:
 		CONFIG_MAC_PARTITION   Apple's MacOS partition table.
+		CONFIG_DOS_PARTITION   MS Dos partition table, traditional on the
+				       Intel architecture, USB sticks, etc.
 		CONFIG_ISO_PARTITION   ISO partition table, used on CDROM etc.
 		CONFIG_EFI_PARTITION   GPT partition table, common when EFI is the
 				       bootloader.  Note 2TB partition limit; see
 				       disk/part_efi.c
-		CONFIG_SCSI) you must configure support for at
+		CONFIG_MTD_PARTITIONS  Memory Technology Device partition table.
+
+		If IDE or SCSI support is enabled (CONFIG_CMD_IDE or
+		CONFIG_CMD_SCSI) you must configure support for at
 		least one non-MTD partition type as well.
 
 - IDE Reset method:
@@ -885,11 +1372,16 @@
 			Default is 32bit.
 
 - SCSI Support:
+		At the moment only there is only support for the
+		SYM53C8XX SCSI controller; define
+		CONFIG_SCSI_SYM53C8XX to enable it.
+
 		CONFIG_SYS_SCSI_MAX_LUN [8], CONFIG_SYS_SCSI_MAX_SCSI_ID [7] and
 		CONFIG_SYS_SCSI_MAX_DEVICE [CONFIG_SYS_SCSI_MAX_SCSI_ID *
 		CONFIG_SYS_SCSI_MAX_LUN] can be adjusted to define the
 		maximum numbers of LUNs, SCSI ID's and target
 		devices.
+		CONFIG_SYS_SCSI_SYM53C8XX_CCF to fix clock timing (80Mhz)
 
 		The environment variable 'scsidevs' is set to the number of
 		SCSI devices found during the last scan.
@@ -907,6 +1399,13 @@
 		Allow generic access to the SPI bus on the Intel 8257x, for
 		example with the "sspi" command.
 
+		CONFIG_CMD_E1000
+		Management command for E1000 devices.  When used on devices
+		with SPI support you can reprogram the EEPROM from U-Boot.
+
+		CONFIG_E1000_FALLBACK_MAC
+		default MAC for empty EEPROM after production.
+
 		CONFIG_EEPRO100
 		Support for Intel 82557/82559/82559ER chips.
 		Optional CONFIG_EEPRO100_SROM_WRITE enables EEPROM
@@ -941,6 +1440,10 @@
 		CONFIG_LAN91C96
 		Support for SMSC's LAN91C96 chips.
 
+			CONFIG_LAN91C96_BASE
+			Define this to hold the physical address
+			of the LAN91C96's I/O space
+
 			CONFIG_LAN91C96_USE_32_BIT
 			Define this to enable 32 bit addressing
 
@@ -958,6 +1461,9 @@
 			Define this to use i/o functions instead of macros
 			(some hardware wont work with macros)
 
+		CONFIG_DRIVER_TI_EMAC
+		Support for davinci emac
+
 			CONFIG_SYS_DAVINCI_EMAC_PHY_COUNT
 			Define this if you have more then 3 PHYs.
 
@@ -973,6 +1479,21 @@
 			control registers. This behavior won't affect the
 			correctnessof 10/100 link speed update.
 
+		CONFIG_SMC911X
+		Support for SMSC's LAN911x and LAN921x chips
+
+			CONFIG_SMC911X_BASE
+			Define this to hold the physical address
+			of the device (I/O space)
+
+			CONFIG_SMC911X_32_BIT
+			Define this if data bus is 32 bits
+
+			CONFIG_SMC911X_16_BIT
+			Define this if data bus is 16 bits. If your processor
+			automatically converts one 32 bit word to two 16 bit
+			words you may also try CONFIG_SMC911X_32_BIT.
+
 		CONFIG_SH_ETHER
 		Support for Renesas on-chip Ethernet controller
 
@@ -987,30 +1508,25 @@
 
 - PWM Support:
 		CONFIG_PWM_IMX
-		Support for PWM module on the imx6.
+		Support for PWM modul on the imx6.
 
 - TPM Support:
 		CONFIG_TPM
 		Support TPM devices.
 
-		CONFIG_TPM_TIS_INFINEON
-		Support for Infineon i2c bus TPM devices. Only one device
+		CONFIG_TPM_TIS_I2C
+		Support for i2c bus TPM devices. Only one device
 		per system is supported at this time.
 
+			CONFIG_TPM_TIS_I2C_BUS_NUMBER
+			Define the the i2c bus number for the TPM device
+
+			CONFIG_TPM_TIS_I2C_SLAVE_ADDRESS
+			Define the TPM's address on the i2c bus
+
 			CONFIG_TPM_TIS_I2C_BURST_LIMITATION
 			Define the burst count bytes upper limit
 
-		CONFIG_TPM_ST33ZP24
-		Support for STMicroelectronics TPM devices. Requires DM_TPM support.
-
-			CONFIG_TPM_ST33ZP24_I2C
-			Support for STMicroelectronics ST33ZP24 I2C devices.
-			Requires TPM_ST33ZP24 and I2C.
-
-			CONFIG_TPM_ST33ZP24_SPI
-			Support for STMicroelectronics ST33ZP24 SPI devices.
-			Requires TPM_ST33ZP24 and SPI.
-
 		CONFIG_TPM_ATMEL_TWI
 		Support for Atmel TWI TPM device. Requires I2C support.
 
@@ -1023,6 +1539,11 @@
 			to. Contemporary x86 systems usually map it at
 			0xfed40000.
 
+		CONFIG_CMD_TPM
+		Add tpm monitor functions.
+		Requires CONFIG_TPM. If CONFIG_TPM_AUTH_SESSIONS is set, also
+		provides monitor access to authorized functions.
+
 		CONFIG_TPM
 		Define this to enable the TPM support library which provides
 		functional interfaces to some TPM commands.
@@ -1034,7 +1555,7 @@
 
 - USB Support:
 		At the moment only the UHCI host controller is
-		supported (PIP405, MIP405); define
+		supported (PIP405, MIP405, MPC5200); define
 		CONFIG_USB_UHCI to enable it.
 		define CONFIG_USB_KEYBOARD to enable the USB Keyboard
 		and define CONFIG_USB_STORAGE to enable the USB
@@ -1042,6 +1563,19 @@
 		Note:
 		Supported are USB Keyboards and USB Floppy drives
 		(TEAC FD-05PUB).
+		MPC5200 USB requires additional defines:
+			CONFIG_USB_CLOCK
+				for 528 MHz Clock: 0x0001bbbb
+			CONFIG_PSC3_USB
+				for USB on PSC3
+			CONFIG_USB_CONFIG
+				for differential drivers: 0x00001000
+				for single ended drivers: 0x00005000
+				for differential drivers on PSC3: 0x00000100
+				for single ended drivers on PSC3: 0x00004100
+			CONFIG_SYS_USB_EVENT_POLL
+				May be defined to allow interrupt polling
+				instead of using asynchronous interrupts
 
 		CONFIG_USB_EHCI_TXFIFO_THRESH enables setting of the
 		txfilltuning field in the EHCI controller on reset.
@@ -1084,6 +1618,15 @@
 			Define this if you want stdin, stdout &/or stderr to
 			be set to usbtty.
 
+			mpc8xx:
+				CONFIG_SYS_USB_EXTC_CLK 0xBLAH
+				Derive USB clock from external clock "blah"
+				- CONFIG_SYS_USB_EXTC_CLK 0x02
+
+				CONFIG_SYS_USB_BRG_CLK 0xBLAH
+				Derive USB clock from brgclk
+				- CONFIG_SYS_USB_BRG_CLK 0x04
+
 		If you have a USB-IF assigned VendorID then you may wish to
 		define your own vendor specific values either in BoardName.h
 		or directly in usbd_vendor_info.h. If you don't define
@@ -1139,13 +1682,26 @@
 			CONFIG_SH_MMCIF_CLK
 			Define the clock frequency for MMCIF
 
+		CONFIG_GENERIC_MMC
+		Enable the generic MMC driver
+
 		CONFIG_SUPPORT_EMMC_BOOT
 		Enable some additional features of the eMMC boot partitions.
 
+		CONFIG_SUPPORT_EMMC_RPMB
+		Enable the commands for reading, writing and programming the
+		key for the Replay Protection Memory Block partition in eMMC.
+
 - USB Device Firmware Update (DFU) class support:
-		CONFIG_DFU_OVER_USB
+		CONFIG_DFU_FUNCTION
 		This enables the USB portion of the DFU USB class
 
+		CONFIG_CMD_DFU
+		This enables the command "dfu" which is used to have
+		U-Boot create a DFU class device via USB.  This command
+		requires that the "dfu_alt_info" environment variable be
+		set and define the alt settings to expose to the host.
+
 		CONFIG_DFU_MMC
 		This enables support for exposing (e)MMC devices via DFU.
 
@@ -1181,26 +1737,144 @@
 		entering dfuMANIFEST state. Host waits this timeout, before
 		sending again an USB request to the device.
 
+- USB Device Android Fastboot support:
+		CONFIG_CMD_FASTBOOT
+		This enables the command "fastboot" which enables the Android
+		fastboot mode for the platform's USB device. Fastboot is a USB
+		protocol for downloading images, flashing and device control
+		used on Android devices.
+		See doc/README.android-fastboot for more information.
+
+		CONFIG_ANDROID_BOOT_IMAGE
+		This enables support for booting images which use the Android
+		image format header.
+
+		CONFIG_USB_FASTBOOT_BUF_ADDR
+		The fastboot protocol requires a large memory buffer for
+		downloads. Define this to the starting RAM address to use for
+		downloaded images.
+
+		CONFIG_USB_FASTBOOT_BUF_SIZE
+		The fastboot protocol requires a large memory buffer for
+		downloads. This buffer should be as large as possible for a
+		platform. Define this to the size available RAM for fastboot.
+
+		CONFIG_FASTBOOT_FLASH
+		The fastboot protocol includes a "flash" command for writing
+		the downloaded image to a non-volatile storage device. Define
+		this to enable the "fastboot flash" command.
+
+		CONFIG_FASTBOOT_FLASH_MMC_DEV
+		The fastboot "flash" command requires additional information
+		regarding the non-volatile storage device. Define this to
+		the eMMC device that fastboot should use to store the image.
+
+		CONFIG_FASTBOOT_GPT_NAME
+		The fastboot "flash" command supports writing the downloaded
+		image to the Protective MBR and the Primary GUID Partition
+		Table. (Additionally, this downloaded image is post-processed
+		to generate and write the Backup GUID Partition Table.)
+		This occurs when the specified "partition name" on the
+		"fastboot flash" command line matches this value.
+		Default is GPT_ENTRY_NAME (currently "gpt") if undefined.
+
 - Journaling Flash filesystem support:
-		CONFIG_JFFS2_NAND
+		CONFIG_JFFS2_NAND, CONFIG_JFFS2_NAND_OFF, CONFIG_JFFS2_NAND_SIZE,
+		CONFIG_JFFS2_NAND_DEV
 		Define these for a default partition on a NAND device
 
 		CONFIG_SYS_JFFS2_FIRST_SECTOR,
 		CONFIG_SYS_JFFS2_FIRST_BANK, CONFIG_SYS_JFFS2_NUM_BANKS
 		Define these for a default partition on a NOR device
 
+		CONFIG_SYS_JFFS_CUSTOM_PART
+		Define this to create an own partition. You have to provide a
+		function struct part_info* jffs2_part_info(int part_num)
+
+		If you define only one JFFS2 partition you may also want to
+		#define CONFIG_SYS_JFFS_SINGLE_PART	1
+		to disable the command chpart. This is the default when you
+		have not defined a custom partition
+
+- FAT(File Allocation Table) filesystem write function support:
+		CONFIG_FAT_WRITE
+
+		Define this to enable support for saving memory data as a
+		file in FAT formatted partition.
+
+		This will also enable the command "fatwrite" enabling the
+		user to write files to FAT.
+
+CBFS (Coreboot Filesystem) support
+		CONFIG_CMD_CBFS
+
+		Define this to enable support for reading from a Coreboot
+		filesystem. Available commands are cbfsinit, cbfsinfo, cbfsls
+		and cbfsload.
+
+- FAT(File Allocation Table) filesystem cluster size:
+		CONFIG_FS_FAT_MAX_CLUSTSIZE
+
+		Define the max cluster size for fat operations else
+		a default value of 65536 will be defined.
+
 - Keyboard Support:
-		See Kconfig help for available keyboard drivers.
+		CONFIG_ISA_KEYBOARD
 
-		CONFIG_KEYBOARD
+		Define this to enable standard (PC-Style) keyboard
+		support
 
-		Define this to enable a custom keyboard support.
-		This simply calls drv_keyboard_init() which must be
-		defined in your board-specific files. This option is deprecated
-		and is only used by novena. For new boards, use driver model
-		instead.
+		CONFIG_I8042_KBD
+		Standard PC keyboard driver with US (is default) and
+		GERMAN key layout (switch via environment 'keymap=de') support.
+		Export function i8042_kbd_init, i8042_tstc and i8042_getc
+		for cfb_console. Supports cursor blinking.
+
+		CONFIG_CROS_EC_KEYB
+		Enables a Chrome OS keyboard using the CROS_EC interface.
+		This uses CROS_EC to communicate with a second microcontroller
+		which provides key scans on request.
 
 - Video support:
+		CONFIG_VIDEO
+
+		Define this to enable video support (for output to
+		video).
+
+		CONFIG_VIDEO_CT69000
+
+		Enable Chips & Technologies 69000 Video chip
+
+		CONFIG_VIDEO_SMI_LYNXEM
+		Enable Silicon Motion SMI 712/710/810 Video chip. The
+		video output is selected via environment 'videoout'
+		(1 = LCD and 2 = CRT). If videoout is undefined, CRT is
+		assumed.
+
+		For the CT69000 and SMI_LYNXEM drivers, videomode is
+		selected via environment 'videomode'. Two different ways
+		are possible:
+		- "videomode=num"   'num' is a standard LiLo mode numbers.
+		Following standard modes are supported	(* is default):
+
+		      Colors	640x480 800x600 1024x768 1152x864 1280x1024
+		-------------+---------------------------------------------
+		      8 bits |	0x301*	0x303	 0x305	  0x161	    0x307
+		     15 bits |	0x310	0x313	 0x316	  0x162	    0x319
+		     16 bits |	0x311	0x314	 0x317	  0x163	    0x31A
+		     24 bits |	0x312	0x315	 0x318	    ?	    0x31B
+		-------------+---------------------------------------------
+		(i.e. setenv videomode 317; saveenv; reset;)
+
+		- "videomode=bootargs" all the video parameters are parsed
+		from the bootargs. (See drivers/video/videomodes.c)
+
+
+		CONFIG_VIDEO_SED13806
+		Enable Epson SED13806 driver. This driver supports 8bpp
+		and 16bpp modes defined by CONFIG_VIDEO_SED13806_8BPP
+		or CONFIG_VIDEO_SED13806_16BPP
+
 		CONFIG_FSL_DIU_FB
 		Enable the Freescale DIU video driver.	Reference boards for
 		SOCs that have a DIU should define this macro to enable DIU
@@ -1208,6 +1882,7 @@
 
 			CONFIG_SYS_DIU_ADDR
 			CONFIG_VIDEO
+			CONFIG_CMD_BMP
 			CONFIG_CFB_CONSOLE
 			CONFIG_VIDEO_SW_CURSOR
 			CONFIG_VGA_AS_SINGLE_DEVICE
@@ -1216,9 +1891,24 @@
 
 		The DIU driver will look for the 'video-mode' environment
 		variable, and if defined, enable the DIU as a console during
-		boot.  See the documentation file doc/README.video for a
+		boot.  See the documentation file README.video for a
 		description of this variable.
 
+		CONFIG_VIDEO_VGA
+
+		Enable the VGA video / BIOS for x86. The alternative if you
+		are using coreboot is to use the coreboot frame buffer
+		driver.
+
+
+- Keyboard Support:
+		CONFIG_KEYBOARD
+
+		Define this to enable a custom keyboard support.
+		This simply calls drv_keyboard_init() which must be
+		defined in your board-specific files.
+		The only board using this so far is RBC823.
+
 - LCD Support:	CONFIG_LCD
 
 		Define this to enable LCD support (for output to LCD
@@ -1268,6 +1958,9 @@
 
 			320x240. Black & white.
 
+		Normally display is black on white background; define
+		CONFIG_SYS_WHITE_ON_BLACK to get it inverted.
+
 		CONFIG_LCD_ALIGNMENT
 
 		Normally the LCD is page-aligned (typically 4KB). If this is
@@ -1276,26 +1969,12 @@
 		here, since it is cheaper to change data cache settings on
 		a per-section basis.
 
+		CONFIG_CONSOLE_SCROLL_LINES
 
-		CONFIG_LCD_ROTATION
-
-		Sometimes, for example if the display is mounted in portrait
-		mode or even if it's mounted landscape but rotated by 180degree,
-		we need to rotate our content of the display relative to the
-		framebuffer, so that user can read the messages which are
-		printed out.
-		Once CONFIG_LCD_ROTATION is defined, the lcd_console will be
-		initialized with a given rotation from "vl_rot" out of
-		"vidinfo_t" which is provided by the board specific code.
-		The value for vl_rot is coded as following (matching to
-		fbcon=rotate:<n> linux-kernel commandline):
-		0 = no rotation respectively 0 degree
-		1 = 90 degree rotation
-		2 = 180 degree rotation
-		3 = 270 degree rotation
-
-		If CONFIG_LCD_ROTATION is not defined, the console will be
-		initialized with 0degree rotation.
+		When the console need to be scrolled, this is the number of
+		lines to scroll by. It defaults to 1. Increasing this makes
+		the console jump but can help speed up operation when scrolling
+		is slow.
 
 		CONFIG_LCD_BMP_RLE8
 
@@ -1321,7 +2000,7 @@
 
 		If this option is set, then U-Boot will prevent the environment
 		variable "splashimage" from being set to a problematic address
-		(see doc/README.displaying-bmps).
+		(see README.displaying-bmps).
 		This option is useful for targets where, due to alignment
 		restrictions, an improperly aligned BMP image will cause a data
 		abort. If you think you will not have problems with unaligned
@@ -1360,6 +2039,12 @@
 		can be displayed via the splashscreen support or the
 		bmp command.
 
+- Do compressing for memory range:
+		CONFIG_CMD_ZIP
+
+		If this option is set, it would use zlib deflate method
+		to compress the specified memory at its best effort.
+
 - Compression support:
 		CONFIG_GZIP
 
@@ -1375,11 +2060,48 @@
 		the malloc area (as defined by CONFIG_SYS_MALLOC_LEN) should
 		be at least 4MB.
 
+		CONFIG_LZMA
+
+		If this option is set, support for lzma compressed
+		images is included.
+
+		Note: The LZMA algorithm adds between 2 and 4KB of code and it
+		requires an amount of dynamic memory that is given by the
+		formula:
+
+			(1846 + 768 << (lc + lp)) * sizeof(uint16)
+
+		Where lc and lp stand for, respectively, Literal context bits
+		and Literal pos bits.
+
+		This value is upper-bounded by 14MB in the worst case. Anyway,
+		for a ~4MB large kernel image, we have lc=3 and lp=0 for a
+		total amount of (1846 + 768 << (3 + 0)) * 2 = ~41KB... that is
+		a very small buffer.
+
+		Use the lzmainfo tool to determinate the lc and lp values and
+		then calculate the amount of needed dynamic memory (ensuring
+		the appropriate CONFIG_SYS_MALLOC_LEN value).
+
+		CONFIG_LZO
+
+		If this option is set, support for LZO compressed images
+		is included.
+
 - MII/PHY support:
+		CONFIG_PHY_ADDR
+
+		The address of PHY on MII bus.
+
 		CONFIG_PHY_CLOCK_FREQ (ppc4xx)
 
 		The clock frequency of the MII bus
 
+		CONFIG_PHY_GIGE
+
+		If this option is set, support for speed/duplex
+		detection of gigabit PHY is included.
+
 		CONFIG_PHY_RESET_DELAY
 
 		Some PHY like Intel LXT971A need extra delay after
@@ -1392,6 +2114,18 @@
 		Some PHY like Intel LXT971A need extra delay after
 		command issued before MII status register can be read
 
+- Ethernet address:
+		CONFIG_ETHADDR
+		CONFIG_ETH1ADDR
+		CONFIG_ETH2ADDR
+		CONFIG_ETH3ADDR
+		CONFIG_ETH4ADDR
+		CONFIG_ETH5ADDR
+
+		Define a default value for Ethernet address to use
+		for the respective Ethernet interface, in case this
+		is not determined automatically.
+
 - IP address:
 		CONFIG_IPADDR
 
@@ -1479,8 +2213,14 @@
 		You can fine tune the DHCP functionality by defining
 		CONFIG_BOOTP_* symbols:
 
+		CONFIG_BOOTP_SUBNETMASK
+		CONFIG_BOOTP_GATEWAY
+		CONFIG_BOOTP_HOSTNAME
 		CONFIG_BOOTP_NISDOMAIN
+		CONFIG_BOOTP_BOOTPATH
 		CONFIG_BOOTP_BOOTFILESIZE
+		CONFIG_BOOTP_DNS
+		CONFIG_BOOTP_DNS2
 		CONFIG_BOOTP_SEND_HOSTNAME
 		CONFIG_BOOTP_NTPSERVER
 		CONFIG_BOOTP_TIMEOFFSET
@@ -1496,6 +2236,15 @@
 		to Link-local IP address configuration if the DHCP server
 		is not available.
 
+		CONFIG_BOOTP_DNS2 - If a DHCP client requests the DNS
+		serverip from a DHCP server, it is possible that more
+		than one DNS serverip is offered to the client.
+		If CONFIG_BOOTP_DNS2 is enabled, the secondary DNS
+		serverip will be stored in the additional environment
+		variable "dnsip2". The first DNS serverip is always
+		stored in the variable "dnsip", when CONFIG_BOOTP_DNS
+		is defined.
+
 		CONFIG_BOOTP_SEND_HOSTNAME - Some DHCP servers are capable
 		to do a dynamic update of a DNS server. To do this, they
 		need the hostname of the DHCP requester.
@@ -1525,15 +2274,6 @@
 
 		See doc/README.link-local for more information.
 
- - MAC address from environment variables
-
-		FDT_SEQ_MACADDR_FROM_ENV
-
-		Fix-up device tree with MAC addresses fetched sequentially from
-		environment variables. This config work on assumption that
-		non-usable ethernet node of device-tree are either not present
-		or their status has been marked as "disabled".
-
  - CDP Options:
 		CONFIG_CDP_DEVICE_ID
 
@@ -1576,7 +2316,7 @@
 
 		A byte containing the id of the VLAN.
 
-- Status LED:	CONFIG_LED_STATUS
+- Status LED:	CONFIG_STATUS_LED
 
 		Several configurations allow to display the current
 		status using a LED. For instance, the LED will blink
@@ -1584,15 +2324,15 @@
 		soon as a reply to a BOOTP request was received, and
 		start blinking slow once the Linux kernel is running
 		(supported by a status LED driver in the Linux
-		kernel). Defining CONFIG_LED_STATUS enables this
+		kernel). Defining CONFIG_STATUS_LED enables this
 		feature in U-Boot.
 
 		Additional options:
 
-		CONFIG_LED_STATUS_GPIO
+		CONFIG_GPIO_LED
 		The status LED can be connected to a GPIO pin.
 		In such cases, the gpio_led driver can be used as a
-		status LED backend implementation. Define CONFIG_LED_STATUS_GPIO
+		status LED backend implementation. Define CONFIG_GPIO_LED
 		to include the gpio_led driver in the U-Boot binary.
 
 		CONFIG_GPIO_LED_INVERTED_TABLE
@@ -1602,6 +2342,12 @@
 		In such cases CONFIG_GPIO_LED_INVERTED_TABLE may be defined
 		with a list of GPIO LEDs that have inverted polarity.
 
+- CAN Support:	CONFIG_CAN_DRIVER
+
+		Defining CONFIG_CAN_DRIVER enables CAN driver support
+		on those systems that support this (optional)
+		feature, like the TQM8xxL modules.
+
 - I2C Support:	CONFIG_SYS_I2C
 
 		This enable the NEW i2c subsystem, and will allow you to use
@@ -1650,18 +2396,12 @@
 
 		- drivers/i2c/i2c_mxc.c
 		  - activate this driver with CONFIG_SYS_I2C_MXC
-		  - enable bus 1 with CONFIG_SYS_I2C_MXC_I2C1
-		  - enable bus 2 with CONFIG_SYS_I2C_MXC_I2C2
-		  - enable bus 3 with CONFIG_SYS_I2C_MXC_I2C3
-		  - enable bus 4 with CONFIG_SYS_I2C_MXC_I2C4
 		  - define speed for bus 1 with CONFIG_SYS_MXC_I2C1_SPEED
 		  - define slave for bus 1 with CONFIG_SYS_MXC_I2C1_SLAVE
 		  - define speed for bus 2 with CONFIG_SYS_MXC_I2C2_SPEED
 		  - define slave for bus 2 with CONFIG_SYS_MXC_I2C2_SLAVE
 		  - define speed for bus 3 with CONFIG_SYS_MXC_I2C3_SPEED
 		  - define slave for bus 3 with CONFIG_SYS_MXC_I2C3_SLAVE
-		  - define speed for bus 4 with CONFIG_SYS_MXC_I2C4_SPEED
-		  - define slave for bus 4 with CONFIG_SYS_MXC_I2C4_SLAVE
 		If those defines are not set, default value is 100000
 		for speed, and 0 for slave.
 
@@ -1693,6 +2433,8 @@
 		  - CONFIG_SYS_I2C_SH_SPEED3 for for the speed channel 3
 		  - CONFIG_SYS_I2C_SH_BASE4 for setting the register channel 4
 		  - CONFIG_SYS_I2C_SH_SPEED4 for for the speed channel 4
+		  - CONFIG_SYS_I2C_SH_BASE5 for setting the register channel 5
+		  - CONFIG_SYS_I2C_SH_SPEED5 for for the speed channel 5
 		  - CONFIG_SYS_I2C_SH_NUM_CONTROLLERS for number of i2c buses
 
 		- drivers/i2c/omap24xx_i2c.c
@@ -1733,20 +2475,14 @@
 		  - CONFIG_SYS_I2C_IHS_CH3 activate hardware channel 3
 		  - CONFIG_SYS_I2C_IHS_SPEED_3 speed channel 3
 		  - CONFIG_SYS_I2C_IHS_SLAVE_3 slave addr channel 3
-		  - activate dual channel with CONFIG_SYS_I2C_IHS_DUAL
-		  - CONFIG_SYS_I2C_IHS_SPEED_0_1 speed channel 0_1
-		  - CONFIG_SYS_I2C_IHS_SLAVE_0_1 slave addr channel 0_1
-		  - CONFIG_SYS_I2C_IHS_SPEED_1_1 speed channel 1_1
-		  - CONFIG_SYS_I2C_IHS_SLAVE_1_1 slave addr channel 1_1
-		  - CONFIG_SYS_I2C_IHS_SPEED_2_1 speed channel 2_1
-		  - CONFIG_SYS_I2C_IHS_SLAVE_2_1 slave addr channel 2_1
-		  - CONFIG_SYS_I2C_IHS_SPEED_3_1 speed channel 3_1
-		  - CONFIG_SYS_I2C_IHS_SLAVE_3_1 slave addr channel 3_1
 
 		additional defines:
 
 		CONFIG_SYS_NUM_I2C_BUSES
-		Hold the number of i2c buses you want to use.
+		Hold the number of i2c buses you want to use. If you
+		don't use/have i2c muxes on your i2c bus, this
+		is equal to CONFIG_SYS_NUM_I2C_ADAPTERS, and you can
+		omit this define.
 
 		CONFIG_SYS_I2C_DIRECT_BUS
 		define this, if you don't use i2c muxes on your hardware.
@@ -1788,7 +2524,52 @@
 
 		If you do not have i2c muxes on your board, omit this define.
 
-- Legacy I2C Support:
+- Legacy I2C Support:	CONFIG_HARD_I2C
+
+		NOTE: It is intended to move drivers to CONFIG_SYS_I2C which
+		provides the following compelling advantages:
+
+		- more than one i2c adapter is usable
+		- approved multibus support
+		- better i2c mux support
+
+		** Please consider updating your I2C driver now. **
+
+		These enable legacy I2C serial bus commands. Defining
+		CONFIG_HARD_I2C will include the appropriate I2C driver
+		for the selected CPU.
+
+		This will allow you to use i2c commands at the u-boot
+		command line (as long as you set CONFIG_CMD_I2C in
+		CONFIG_COMMANDS) and communicate with i2c based realtime
+		clock chips. See common/cmd_i2c.c for a description of the
+		command line interface.
+
+		CONFIG_HARD_I2C selects a hardware I2C controller.
+
+		There are several other quantities that must also be
+		defined when you define CONFIG_HARD_I2C.
+
+		In both cases you will need to define CONFIG_SYS_I2C_SPEED
+		to be the frequency (in Hz) at which you wish your i2c bus
+		to run and CONFIG_SYS_I2C_SLAVE to be the address of this node (ie
+		the CPU's i2c node address).
+
+		Now, the u-boot i2c code for the mpc8xx
+		(arch/powerpc/cpu/mpc8xx/i2c.c) sets the CPU up as a master node
+		and so its address should therefore be cleared to 0 (See,
+		eg, MPC823e User's Manual p.16-473). So, set
+		CONFIG_SYS_I2C_SLAVE to 0.
+
+		CONFIG_SYS_I2C_INIT_MPC5XXX
+
+		When a board is reset during an i2c bus transfer
+		chips might think that the current transfer is still
+		in progress.  Reset the slave devices by sending start
+		commands until the slave device responds.
+
+		That's all that's required for CONFIG_HARD_I2C.
+
 		If you use the software i2c interface (CONFIG_SYS_I2C_SOFT)
 		then the following macros need to be defined (examples are
 		from include/configs/lwmon.h):
@@ -1800,6 +2581,12 @@
 
 		eg: #define I2C_INIT (immr->im_cpm.cp_pbdir |=	PB_SCL)
 
+		I2C_PORT
+
+		(Only for MPC8260 CPU). The I/O port to use (the code
+		assumes both bits are on the same port). Valid values
+		are 0..3 for ports A..D.
+
 		I2C_ACTIVE
 
 		The code necessary to make the I2C data line active
@@ -1871,6 +2658,23 @@
 		custom i2c_init_board() routine in boards/xxx/board.c
 		is run early in the boot sequence.
 
+		CONFIG_SYS_I2C_BOARD_LATE_INIT
+
+		An alternative to CONFIG_SYS_I2C_INIT_BOARD. If this option is
+		defined a custom i2c_board_late_init() routine in
+		boards/xxx/board.c is run AFTER the operations in i2c_init()
+		is completed. This callpoint can be used to unreset i2c bus
+		using CPU i2c controller register accesses for CPUs whose i2c
+		controller provide such a method. It is called at the end of
+		i2c_init() to allow i2c_init operations to setup the i2c bus
+		controller on the CPU (e.g. setting bus speed & slave address).
+
+		CONFIG_I2CFAST (PPC405GP|PPC405EP only)
+
+		This option enables configuration of bi_iic_fast[] flags
+		in u-boot bd_info structure based on u-boot environment
+		variable "i2cfast". (see also i2cfast)
+
 		CONFIG_I2C_MULTI_BUS
 
 		This option allows the use of multiple I2C buses, each of which
@@ -1892,7 +2696,7 @@
 		will skip addresses 0x50 and 0x68 on a board with one I2C bus
 
 			#define CONFIG_I2C_MULTI_BUS
-			#define CONFIG_SYS_I2C_NOPROBES	{{0,0x50},{0,0x68},{1,0x54}}
+			#define CONFIG_SYS_I2C_MULTI_NOPROBES	{{0,0x50},{0,0x68},{1,0x54}}
 
 		will skip addresses 0x50 and 0x68 on bus 0 and address 0x54 on bus 1
 
@@ -1906,6 +2710,17 @@
 		If defined, then this indicates the I2C bus number for the RTC.
 		If not defined, then U-Boot assumes that RTC is on I2C bus 0.
 
+		CONFIG_SYS_DTT_BUS_NUM
+
+		If defined, then this indicates the I2C bus number for the DTT.
+		If not defined, then U-Boot assumes that DTT is on I2C bus 0.
+
+		CONFIG_SYS_I2C_DTT_ADDR:
+
+		If defined, specifies the I2C address of the DTT device.
+		If not defined, then U-Boot uses predefined value for
+		specified DTT device.
+
 		CONFIG_SOFT_I2C_READ_REPEATED_START
 
 		defining this will force the i2c_read() function in
@@ -1922,6 +2737,16 @@
 		SPI EEPROM, also an instance works with Crystal A/D and
 		D/As on the SACSng board)
 
+		CONFIG_SH_SPI
+
+		Enables the driver for SPI controller on SuperH. Currently
+		only SH7757 is supported.
+
+		CONFIG_SPI_X
+
+		Enables extended (16-bit) SPI EEPROM addressing.
+		(symmetrical to CONFIG_I2C_X)
+
 		CONFIG_SOFT_SPI
 
 		Enables a software (bit-bang) SPI driver rather than
@@ -1932,6 +2757,19 @@
 		SPI configuration items (port pins to use, etc). For
 		an example, see include/configs/sacsng.h.
 
+		CONFIG_HARD_SPI
+
+		Enables a hardware SPI driver for general-purpose reads
+		and writes.  As with CONFIG_SOFT_SPI, the board configuration
+		must define a list of chip-select function pointers.
+		Currently supported on some MPC8xxx processors.	 For an
+		example, see include/configs/mpc8349emds.h.
+
+		CONFIG_MXC_SPI
+
+		Enables the driver for the SPI controllers on i.MX and MXC
+		SoCs. Currently i.MX31/35/51 are supported.
+
 		CONFIG_SYS_SPI_MXC_WAIT
 		Timeout for waiting until spi transfer completed.
 		default: (CONFIG_SYS_HZ/100)     /* 10 ms */
@@ -1954,6 +2792,19 @@
 
 		Specify the number of FPGA devices to support.
 
+		CONFIG_CMD_FPGA_LOADMK
+
+		Enable support for fpga loadmk command
+
+		CONFIG_CMD_FPGA_LOADP
+
+		Enable support for fpga loadp command - load partial bitstream
+
+		CONFIG_CMD_FPGA_LOADBP
+
+		Enable support for fpga loadbp command - load partial bitstream
+		(Xilinx only)
+
 		CONFIG_SYS_FPGA_PROG_FEEDBACK
 
 		Enable printing of hash marks during FPGA configuration.
@@ -2004,7 +2855,7 @@
 		with a special header) as build targets. By defining
 		CONFIG_BUILD_TARGET in the SoC / board header, this
 		special image will be automatically built upon calling
-		make / buildman.
+		make / MAKEALL.
 
 		CONFIG_IDENT_STRING
 
@@ -2027,8 +2878,8 @@
 		completely disabled. Anybody can change or delete
 		these parameters.
 
-		Alternatively, if you define _both_ an ethaddr in the
-		default env _and_ CONFIG_OVERWRITE_ETHADDR_ONCE, a default
+		Alternatively, if you #define _both_ CONFIG_ETHADDR
+		_and_ CONFIG_OVERWRITE_ETHADDR_ONCE, a default
 		Ethernet address is installed in the environment,
 		which can be changed exactly ONCE by the user. [The
 		serial# is unaffected by this, i. e. it remains
@@ -2068,9 +2919,9 @@
 		following board configurations are known to be
 		"pRAM-clean":
 
-			IVMS8, IVML24, SPD8xx,
+			IVMS8, IVML24, SPD8xx, TQM8xxL,
 			HERMES, IP860, RPXlite, LWMON,
-			FLAGADM
+			FLAGADM, TQM8260
 
 - Access to physical memory region (> 4GB)
 		Some basic support is provided for operations on memory not
@@ -2081,6 +2932,16 @@
 		currently only supports clearing the memory.
 
 - Error Recovery:
+		CONFIG_PANIC_HANG
+
+		Define this variable to stop the system in case of a
+		fatal error, so that you have to reset it manually.
+		This is probably NOT a good idea for an embedded
+		system where you want the system to reboot
+		automatically as fast as possible, but it may be
+		useful during development since you can try to debug
+		the conditions that lead to the situation.
+
 		CONFIG_NET_RETRY_COUNT
 
 		This variable defines the number of retries for
@@ -2100,6 +2961,10 @@
 		#define CONFIG_NFS_TIMEOUT 10000UL
 
 - Command Interpreter:
+		CONFIG_AUTO_COMPLETE
+
+		Enable auto completion of commands using TAB.
+
 		CONFIG_SYS_PROMPT_HUSH_PS2
 
 		This defines the secondary prompt string, which is
@@ -2128,12 +2993,10 @@
 		symbols.
 
 - Command Line Editing and History:
-		CONFIG_CMDLINE_PS_SUPPORT
+		CONFIG_CMDLINE_EDITING
 
-		Enable support for changing the command prompt string
-		at run-time. Only static string is supported so far.
-		The string is obtained from environment variables PS1
-		and PS2.
+		Enable editing and History functions for interactive
+		command line input operations
 
 - Default Environment:
 		CONFIG_EXTRA_ENV_SETTINGS
@@ -2161,6 +3024,26 @@
 		the environment like the "source" command or the
 		boot command first.
 
+		CONFIG_ENV_VARS_UBOOT_CONFIG
+
+		Define this in order to add variables describing the
+		U-Boot build configuration to the default environment.
+		These will be named arch, cpu, board, vendor, and soc.
+
+		Enabling this option will cause the following to be defined:
+
+		- CONFIG_SYS_ARCH
+		- CONFIG_SYS_CPU
+		- CONFIG_SYS_BOARD
+		- CONFIG_SYS_VENDOR
+		- CONFIG_SYS_SOC
+
+		CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
+
+		Define this in order to add variables describing certain
+		run-time determined information about the hardware to the
+		environment.  These will be named board_name, board_rev.
+
 		CONFIG_DELAY_ENVIRONMENT
 
 		Normally the environment is loaded when the board is
@@ -2170,8 +3053,20 @@
 		this is instead controlled by the value of
 		/config/load-environment.
 
+- DataFlash Support:
+		CONFIG_HAS_DATAFLASH
+
+		Defining this option enables DataFlash features and
+		allows to read/write in Dataflash via the standard
+		commands cp, md...
+
 - Serial Flash support
-		Usage requires an initial 'sf probe' to define the serial
+		CONFIG_CMD_SF
+
+		Defining this option enables SPI flash commands
+		'sf probe/read/write/erase/update'.
+
+		Usage requires an initial 'probe' to define the serial
 		flash parameters, followed by read/write/erase/update
 		commands.
 
@@ -2184,6 +3079,46 @@
 		CONFIG_SF_DEFAULT_MODE 		(see include/spi.h)
 		CONFIG_SF_DEFAULT_SPEED		in Hz
 
+		CONFIG_CMD_SF_TEST
+
+		Define this option to include a destructive SPI flash
+		test ('sf test').
+
+		CONFIG_SPI_FLASH_BAR		Ban/Extended Addr Reg
+
+		Define this option to use the Bank addr/Extended addr
+		support on SPI flashes which has size > 16Mbytes.
+
+		CONFIG_SF_DUAL_FLASH		Dual flash memories
+
+		Define this option to use dual flash support where two flash
+		memories can be connected with a given cs line.
+		Currently Xilinx Zynq qspi supports these type of connections.
+
+		CONFIG_SYS_SPI_ST_ENABLE_WP_PIN
+		enable the W#/Vpp signal to disable writing to the status
+		register on ST MICRON flashes like the N25Q128.
+		The status register write enable/disable bit, combined with
+		the W#/VPP signal provides hardware data protection for the
+		device as follows: When the enable/disable bit is set to 1,
+		and the W#/VPP signal is driven LOW, the status register
+		nonvolatile bits become read-only and the WRITE STATUS REGISTER
+		operation will not execute. The only way to exit this
+		hardware-protected mode is to drive W#/VPP HIGH.
+
+- SystemACE Support:
+		CONFIG_SYSTEMACE
+
+		Adding this option adds support for Xilinx SystemACE
+		chips attached via some sort of local bus. The address
+		of the chip must also be defined in the
+		CONFIG_SYS_SYSTEMACE_BASE macro. For example:
+
+		#define CONFIG_SYSTEMACE
+		#define CONFIG_SYS_SYSTEMACE_BASE 0xf0000000
+
+		When SystemACE support is added, the "ace" device type
+		becomes available to the fat commands, i.e. fatls.
 
 - TFTP Fixed UDP Port:
 		CONFIG_TFTP_PORT
@@ -2205,6 +3140,68 @@
 		A better solution is to properly configure the firewall,
 		but sometimes that is not allowed.
 
+- Hashing support:
+		CONFIG_CMD_HASH
+
+		This enables a generic 'hash' command which can produce
+		hashes / digests from a few algorithms (e.g. SHA1, SHA256).
+
+		CONFIG_HASH_VERIFY
+
+		Enable the hash verify command (hash -v). This adds to code
+		size a little.
+
+		CONFIG_SHA1 - support SHA1 hashing
+		CONFIG_SHA256 - support SHA256 hashing
+
+		Note: There is also a sha1sum command, which should perhaps
+		be deprecated in favour of 'hash sha1'.
+
+- Freescale i.MX specific commands:
+		CONFIG_CMD_HDMIDETECT
+		This enables 'hdmidet' command which returns true if an
+		HDMI monitor is detected.  This command is i.MX 6 specific.
+
+		CONFIG_CMD_BMODE
+		This enables the 'bmode' (bootmode) command for forcing
+		a boot from specific media.
+
+		This is useful for forcing the ROM's usb downloader to
+		activate upon a watchdog reset which is nice when iterating
+		on U-Boot.  Using the reset button or running bmode normal
+		will set it back to normal.  This command currently
+		supports i.MX53 and i.MX6.
+
+- Signing support:
+		CONFIG_RSA
+
+		This enables the RSA algorithm used for FIT image verification
+		in U-Boot. See doc/uImage.FIT/signature.txt for more information.
+
+		The signing part is build into mkimage regardless of this
+		option.
+
+- bootcount support:
+		CONFIG_BOOTCOUNT_LIMIT
+
+		This enables the bootcounter support, see:
+		http://www.denx.de/wiki/DULG/UBootBootCountLimit
+
+		CONFIG_AT91SAM9XE
+		enable special bootcounter support on at91sam9xe based boards.
+		CONFIG_BLACKFIN
+		enable special bootcounter support on blackfin based boards.
+		CONFIG_SOC_DA8XX
+		enable special bootcounter support on da850 based boards.
+		CONFIG_BOOTCOUNT_RAM
+		enable support for the bootcounter in RAM
+		CONFIG_BOOTCOUNT_I2C
+		enable support for the bootcounter on an i2c (like RTC) device.
+			CONFIG_SYS_I2C_RTC_ADDR = i2c chip address
+			CONFIG_SYS_BOOTCOUNT_ADDR = i2c addr which is used for
+						    the bootcounter.
+			CONFIG_BOOTCOUNT_ALEN = address len
+
 - Show boot progress:
 		CONFIG_SHOW_BOOT_PROGRESS
 
@@ -2215,6 +3212,55 @@
 		example, some LED's) on your board. At the moment,
 		the following checkpoints are implemented:
 
+- Detailed boot stage timing
+		CONFIG_BOOTSTAGE
+		Define this option to get detailed timing of each stage
+		of the boot process.
+
+		CONFIG_BOOTSTAGE_USER_COUNT
+		This is the number of available user bootstage records.
+		Each time you call bootstage_mark(BOOTSTAGE_ID_ALLOC, ...)
+		a new ID will be allocated from this stash. If you exceed
+		the limit, recording will stop.
+
+		CONFIG_BOOTSTAGE_REPORT
+		Define this to print a report before boot, similar to this:
+
+		Timer summary in microseconds:
+		       Mark    Elapsed  Stage
+			  0          0  reset
+		  3,575,678  3,575,678  board_init_f start
+		  3,575,695         17  arch_cpu_init A9
+		  3,575,777         82  arch_cpu_init done
+		  3,659,598     83,821  board_init_r start
+		  3,910,375    250,777  main_loop
+		 29,916,167 26,005,792  bootm_start
+		 30,361,327    445,160  start_kernel
+
+		CONFIG_CMD_BOOTSTAGE
+		Add a 'bootstage' command which supports printing a report
+		and un/stashing of bootstage data.
+
+		CONFIG_BOOTSTAGE_FDT
+		Stash the bootstage information in the FDT. A root 'bootstage'
+		node is created with each bootstage id as a child. Each child
+		has a 'name' property and either 'mark' containing the
+		mark time in microsecond, or 'accum' containing the
+		accumulated time for that bootstage id in microseconds.
+		For example:
+
+		bootstage {
+			154 {
+				name = "board_init_f";
+				mark = <3575678>;
+			};
+			170 {
+				name = "lcd";
+				accum = <33482>;
+			};
+		};
+
+		Code in the Linux kernel can find this in /proc/devicetree.
 
 Legacy uImage format:
 
@@ -2308,9 +3354,9 @@
    65	net/eth.c		Ethernet found.
 
   -80	common/cmd_net.c	usage wrong
-   80	common/cmd_net.c	before calling net_loop()
-  -81	common/cmd_net.c	some error in net_loop() occurred
-   81	common/cmd_net.c	net_loop() back without error
+   80	common/cmd_net.c	before calling NetLoop()
+  -81	common/cmd_net.c	some error in NetLoop() occurred
+   81	common/cmd_net.c	NetLoop() back without error
   -82	common/cmd_net.c	size == 0 (File with size 0 loaded)
    82	common/cmd_net.c	trying automatic boot
    83	common/cmd_net.c	running "source" command
@@ -2369,6 +3415,45 @@
  -150	common/cmd_nand.c	Incorrect FIT image format
   151	common/cmd_nand.c	FIT image format OK
 
+- legacy image format:
+		CONFIG_IMAGE_FORMAT_LEGACY
+		enables the legacy image format support in U-Boot.
+
+		Default:
+		enabled if CONFIG_FIT_SIGNATURE is not defined.
+
+		CONFIG_DISABLE_IMAGE_LEGACY
+		disable the legacy image format
+
+		This define is introduced, as the legacy image format is
+		enabled per default for backward compatibility.
+
+- FIT image support:
+		CONFIG_FIT
+		Enable support for the FIT uImage format.
+
+		CONFIG_FIT_BEST_MATCH
+		When no configuration is explicitly selected, default to the
+		one whose fdt's compatibility field best matches that of
+		U-Boot itself. A match is considered "best" if it matches the
+		most specific compatibility entry of U-Boot's fdt's root node.
+		The order of entries in the configuration's fdt is ignored.
+
+		CONFIG_FIT_SIGNATURE
+		This option enables signature verification of FIT uImages,
+		using a hash signed and verified using RSA. See
+		doc/uImage.FIT/signature.txt for more details.
+
+		WARNING: When relying on signed FIT images with required
+		signature check the legacy image format is default
+		disabled. If a board need legacy image format support
+		enable this through CONFIG_IMAGE_FORMAT_LEGACY
+
+		CONFIG_FIT_DISABLE_SHA256
+		Supporting SHA256 hashes has quite an impact on binary size.
+		For constrained systems sha256 hash support can be disabled
+		with this option.
+
 - Standalone program support:
 		CONFIG_STANDALONE_LOAD_ADDR
 
@@ -2400,6 +3485,33 @@
 		for a more detailed description refer to doc/README.update.
 
 - MTD Support (mtdparts command, UBI support)
+		CONFIG_MTD_DEVICE
+
+		Adds the MTD device infrastructure from the Linux kernel.
+		Needed for mtdparts command support.
+
+		CONFIG_MTD_PARTITIONS
+
+		Adds the MTD partitioning infrastructure from the Linux
+		kernel. Needed for UBI support.
+
+		CONFIG_MTD_NAND_VERIFY_WRITE
+		verify if the written data is correct reread.
+
+- UBI support
+		CONFIG_CMD_UBI
+
+		Adds commands for interacting with MTD partitions formatted
+		with the UBI flash translation layer
+
+		Requires also defining CONFIG_RBTREE
+
+		CONFIG_UBI_SILENCE_MSG
+
+		Make the verbose messages from UBI stop printing.  This leaves
+		warnings and errors enabled.
+
+
 		CONFIG_MTD_UBI_WL_THRESHOLD
 		This parameter defines the maximum difference between the highest
 		erase counter value and the lowest erase counter value of eraseblocks
@@ -2457,9 +3569,18 @@
 		without a fastmap.
 		default: 0
 
-		CONFIG_MTD_UBI_FM_DEBUG
-		Enable UBI fastmap debug
-		default: 0
+- UBIFS support
+		CONFIG_CMD_UBIFS
+
+		Adds commands for interacting with UBI volumes formatted as
+		UBIFS.  UBIFS is read-only in u-boot.
+
+		Requires UBI support as well as CONFIG_LZO
+
+		CONFIG_UBIFS_SILENCE_MSG
+
+		Make the verbose messages from UBIFS stop printing.  This leaves
+		warnings and errors enabled.
 
 - SPL framework
 		CONFIG_SPL
@@ -2501,16 +3622,6 @@
 		CONFIG_SPL_STACK
 		Adress of the start of the stack SPL will use
 
-		CONFIG_SPL_PANIC_ON_RAW_IMAGE
-		When defined, SPL will panic() if the image it has
-		loaded does not have a signature.
-		Defining this is useful when code which loads images
-		in SPL cannot guarantee that absolutely all read errors
-		will be caught.
-		An example is the LPC32XX MLC NAND driver, which will
-		consider that a completely unreadable NAND block is bad,
-		and thus should be skipped silently.
-
 		CONFIG_SPL_RELOC_STACK
 		Adress of the start of the stack SPL will use after
 		relocation.  If unspecified, this is equal to
@@ -2518,13 +3629,15 @@
 
 		CONFIG_SYS_SPL_MALLOC_START
 		Starting address of the malloc pool used in SPL.
-		When this option is set the full malloc is used in SPL and
-		it is set up by spl_init() and before that, the simple malloc()
-		can be used if CONFIG_SYS_MALLOC_F is defined.
 
 		CONFIG_SYS_SPL_MALLOC_SIZE
 		The size of the malloc pool used in SPL.
 
+		CONFIG_SPL_FRAMEWORK
+		Enable the SPL framework under common/.  This framework
+		supports MMC, NAND and YMODEM loading of U-Boot and NAND
+		NAND loading of the Linux Kernel.
+
 		CONFIG_SPL_OS_BOOT
 		Enable booting directly to an OS from SPL.
 		See also: doc/README.falcon
@@ -2536,6 +3649,26 @@
 		CONFIG_SPL_INIT_MINIMAL
 		Arch init code should be built for a very small image
 
+		CONFIG_SPL_LIBCOMMON_SUPPORT
+		Support for common/libcommon.o in SPL binary
+
+		CONFIG_SPL_LIBDISK_SUPPORT
+		Support for disk/libdisk.o in SPL binary
+
+		CONFIG_SPL_I2C_SUPPORT
+		Support for drivers/i2c/libi2c.o in SPL binary
+
+		CONFIG_SPL_GPIO_SUPPORT
+		Support for drivers/gpio/libgpio.o in SPL binary
+
+		CONFIG_SPL_MMC_SUPPORT
+		Support for drivers/mmc/libmmc.o in SPL binary
+
+		CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR,
+		CONFIG_SYS_U_BOOT_MAX_SIZE_SECTORS,
+		Address and partition on the MMC to load U-Boot from
+		when the MMC is being used in raw mode.
+
 		CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION
 		Partition on the MMC to load U-Boot from when the MMC is being
 		used in raw mode
@@ -2554,6 +3687,12 @@
 		Partition on the MMC to load U-Boot from when the MMC is being
 		used in fs mode
 
+		CONFIG_SPL_FAT_SUPPORT
+		Support for fs/fat/libfat.o in SPL binary
+
+		CONFIG_SPL_EXT_SUPPORT
+		Support for EXT filesystem in SPL binary
+
 		CONFIG_SPL_FS_LOAD_PAYLOAD_NAME
 		Filename to read to load U-Boot when reading from filesystem
 
@@ -2581,10 +3720,6 @@
 		CONFIG_SPL_NAND_DRIVERS
 		SPL uses normal NAND drivers, not minimal drivers.
 
-		CONFIG_SPL_NAND_IDENT
-		SPL uses the chip ID list to identify the NAND flash.
-		Requires CONFIG_SPL_NAND_BASE.
-
 		CONFIG_SPL_NAND_ECC
 		Include standard software ECC in the SPL
 
@@ -2592,14 +3727,18 @@
 		Support for NAND boot using simple NAND drivers that
 		expose the cmd_ctrl() interface.
 
-		CONFIG_SPL_UBI
-		Support for a lightweight UBI (fastmap) scanner and
-		loader
+		CONFIG_SPL_MTD_SUPPORT
+		Support for the MTD subsystem within SPL.  Useful for
+		environment on NAND support within SPL.
 
 		CONFIG_SPL_NAND_RAW_ONLY
 		Support to boot only raw u-boot.bin images. Use this only
 		if you need to save space.
 
+		CONFIG_SPL_MPC8XXX_INIT_DDR_SUPPORT
+		Set for the SPL on PPC mpc8xxx targets, support for
+		drivers/ddr/fsl/libddr.o in SPL binary.
+
 		CONFIG_SPL_COMMON_INIT_DDR
 		Set for common ddr init with serial presence detect in
 		SPL binary.
@@ -2631,9 +3770,33 @@
 		Define this if you need to first read the OOB and then the
 		data. This is used, for example, on davinci platforms.
 
+		CONFIG_SPL_OMAP3_ID_NAND
+		Support for an OMAP3-specific set of functions to return the
+		ID and MFR of the first attached NAND chip, if present.
+
+		CONFIG_SPL_SERIAL_SUPPORT
+		Support for drivers/serial/libserial.o in SPL binary
+
+		CONFIG_SPL_SPI_FLASH_SUPPORT
+		Support for drivers/mtd/spi/libspi_flash.o in SPL binary
+
+		CONFIG_SPL_SPI_SUPPORT
+		Support for drivers/spi/libspi.o in SPL binary
+
 		CONFIG_SPL_RAM_DEVICE
 		Support for running image already present in ram, in SPL binary
 
+		CONFIG_SPL_LIBGENERIC_SUPPORT
+		Support for lib/libgeneric.o in SPL binary
+
+		CONFIG_SPL_ENV_SUPPORT
+		Support for the environment operating in SPL binary
+
+		CONFIG_SPL_NET_SUPPORT
+		Support for the net/libnet.o in SPL binary.
+		It conflicts with SPL env from storage medium specified by
+		CONFIG_ENV_IS_xxx but CONFIG_ENV_IS_NOWHERE
+
 		CONFIG_SPL_PAD_TO
 		Image offset to which the SPL should be padded before appending
 		the SPL payload. By default, this is defined as
@@ -2646,7 +3809,7 @@
 		use an arch-specific makefile fragment instead, for
 		example if more than one image needs to be produced.
 
-		CONFIG_SPL_FIT_PRINT
+		CONFIG_FIT_SPL_PRINT
 		Printing information about a FIT image adds quite a bit of
 		code to SPL. So this is normally disabled in SPL. Use this
 		option to re-enable it. This will affect the output of the
@@ -2663,6 +3826,23 @@
 		CONFIG_SPL_PAD_TO must be either 0, meaning to append the SPL
 		payload without any padding, or >= CONFIG_SPL_MAX_SIZE.
 
+Modem Support:
+--------------
+
+[so far only for SMDK2400 boards]
+
+- Modem support enable:
+		CONFIG_MODEM_SUPPORT
+
+- RTS/CTS Flow control enable:
+		CONFIG_HWFLOW
+
+- Modem debug support:
+		CONFIG_MODEM_SUPPORT_DEBUG
+
+		Enables debugging stuff (char screen[1024], dbg())
+		for modem support. Useful only with BDI2000.
+
 - Interrupt support (PPC):
 
 		There are common interrupt_init() and timer_interrupt()
@@ -2676,6 +3856,22 @@
 		/ other_activity_monitor it works automatically from
 		general timer_interrupt().
 
+- General:
+
+		In the target system modem support is enabled when a
+		specific key (key combination) is pressed during
+		power-on. Otherwise U-Boot will boot normally
+		(autoboot). The key_pressed() function is called from
+		board_init(). Currently key_pressed() is a dummy
+		function, returning 1 and thus enabling modem
+		initialization.
+
+		If there are no modem init strings in the
+		environment, U-Boot proceed to autoboot; the
+		previous output (banner, info printfs) will be
+		suppressed, though.
+
+		See also: doc/README.Modem
 
 Board initialization settings:
 ------------------------------
@@ -2720,24 +3916,33 @@
 - CONFIG_SYS_BAUDRATE_TABLE:
 		List of legal baudrate settings for this board.
 
+- CONFIG_SYS_CONSOLE_INFO_QUIET
+		Suppress display of console information at boot.
+
+- CONFIG_SYS_CONSOLE_IS_IN_ENV
+		If the board specific function
+			extern int overwrite_console (void);
+		returns 1, the stdin, stderr and stdout are switched to the
+		serial port, else the settings in the environment are used.
+
+- CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE
+		Enable the call to overwrite_console().
+
+- CONFIG_SYS_CONSOLE_ENV_OVERWRITE
+		Enable overwrite of previous console environment settings.
+
 - CONFIG_SYS_MEMTEST_START, CONFIG_SYS_MEMTEST_END:
 		Begin and End addresses of the area used by the
 		simple memory test.
 
+- CONFIG_SYS_ALT_MEMTEST:
+		Enable an alternate, more extensive memory test.
+
 - CONFIG_SYS_MEMTEST_SCRATCH:
 		Scratch address used by the alternate memory test
 		You only need to set this if address zero isn't writeable
 
-- CONFIG_SYS_MEM_RESERVE_SECURE
-		Only implemented for ARMv8 for now.
-		If defined, the size of CONFIG_SYS_MEM_RESERVE_SECURE memory
-		is substracted from total RAM and won't be reported to OS.
-		This memory can be used as secure memory. A variable
-		gd->arch.secure_ram is used to track the location. In systems
-		the RAM base is not zero, or RAM is divided into banks,
-		this variable needs to be recalcuated to get the address.
-
-- CONFIG_SYS_MEM_TOP_HIDE:
+- CONFIG_SYS_MEM_TOP_HIDE (PPC only):
 		If CONFIG_SYS_MEM_TOP_HIDE is defined in the board config header,
 		this specified memory area will get subtracted from the top
 		(end) of RAM and won't get "touched" at all by U-Boot. By
@@ -2764,6 +3969,10 @@
 - CONFIG_SYS_SDRAM_BASE:
 		Physical start address of SDRAM. _Must_ be 0 here.
 
+- CONFIG_SYS_MBIO_BASE:
+		Physical start address of Motherboard I/O (if using a
+		Cogent motherboard)
+
 - CONFIG_SYS_FLASH_BASE:
 		Physical start address of Flash memory.
 
@@ -2795,6 +4004,9 @@
 		The memory will be freed (or in fact just forgotten) when
 		U-Boot relocates itself.
 
+		Pre-relocation malloc() is only supported on ARM and sandbox
+		at present but is fairly easy to enable for other archs.
+
 - CONFIG_SYS_MALLOC_SIMPLE
 		Provides a simple and small malloc() and calloc() for those
 		boards which do not use the full malloc in SPL (which is
@@ -2980,14 +4192,30 @@
 		list, simply add an entry for the same variable name to the
 		".flags" variable.
 
-	If CONFIG_REGEX is defined, the variable_name above is evaluated as a
-	regular expression. This allows multiple variables to define the same
-	flags without explicitly listing them for each variable.
-
 - CONFIG_ENV_ACCESS_IGNORE_FORCE
 	If defined, don't allow the -f switch to env set override variable
 	access flags.
 
+- CONFIG_SYS_GENERIC_BOARD
+	This selects the architecture-generic board system instead of the
+	architecture-specific board files. It is intended to move boards
+	to this new framework over time. Defining this will disable the
+	arch/foo/lib/board.c file and use common/board_f.c and
+	common/board_r.c instead. To use this option your architecture
+	must support it (i.e. must define __HAVE_ARCH_GENERIC_BOARD in
+	its config.mk file). If you find problems enabling this option on
+	your board please report the problem and send patches!
+
+- CONFIG_OMAP_PLATFORM_RESET_TIME_MAX_USEC (OMAP only)
+	This is set by OMAP boards for the max time that reset should
+	be asserted. See doc/README.omap-reset-time for details on how
+	the value can be calculated on a given board.
+
+- CONFIG_USE_STDINT
+	If stdint.h is available with your toolchain you can define this
+	option to enable it. You can provide option 'USE_STDINT=1' when
+	building U-Boot to enable this.
+
 The following definitions that deal with the placement and management
 of environment data (variable area); in general, we support the
 following configurations:
@@ -2997,6 +4225,90 @@
 	Builds up envcrc with the target environment so that external utils
 	may easily extract it and embed it in final U-Boot images.
 
+- CONFIG_ENV_IS_IN_FLASH:
+
+	Define this if the environment is in flash memory.
+
+	a) The environment occupies one whole flash sector, which is
+	   "embedded" in the text segment with the U-Boot code. This
+	   happens usually with "bottom boot sector" or "top boot
+	   sector" type flash chips, which have several smaller
+	   sectors at the start or the end. For instance, such a
+	   layout can have sector sizes of 8, 2x4, 16, Nx32 kB. In
+	   such a case you would place the environment in one of the
+	   4 kB sectors - with U-Boot code before and after it. With
+	   "top boot sector" type flash chips, you would put the
+	   environment in one of the last sectors, leaving a gap
+	   between U-Boot and the environment.
+
+	- CONFIG_ENV_OFFSET:
+
+	   Offset of environment data (variable area) to the
+	   beginning of flash memory; for instance, with bottom boot
+	   type flash chips the second sector can be used: the offset
+	   for this sector is given here.
+
+	   CONFIG_ENV_OFFSET is used relative to CONFIG_SYS_FLASH_BASE.
+
+	- CONFIG_ENV_ADDR:
+
+	   This is just another way to specify the start address of
+	   the flash sector containing the environment (instead of
+	   CONFIG_ENV_OFFSET).
+
+	- CONFIG_ENV_SECT_SIZE:
+
+	   Size of the sector containing the environment.
+
+
+	b) Sometimes flash chips have few, equal sized, BIG sectors.
+	   In such a case you don't want to spend a whole sector for
+	   the environment.
+
+	- CONFIG_ENV_SIZE:
+
+	   If you use this in combination with CONFIG_ENV_IS_IN_FLASH
+	   and CONFIG_ENV_SECT_SIZE, you can specify to use only a part
+	   of this flash sector for the environment. This saves
+	   memory for the RAM copy of the environment.
+
+	   It may also save flash memory if you decide to use this
+	   when your environment is "embedded" within U-Boot code,
+	   since then the remainder of the flash sector could be used
+	   for U-Boot code. It should be pointed out that this is
+	   STRONGLY DISCOURAGED from a robustness point of view:
+	   updating the environment in flash makes it always
+	   necessary to erase the WHOLE sector. If something goes
+	   wrong before the contents has been restored from a copy in
+	   RAM, your target system will be dead.
+
+	- CONFIG_ENV_ADDR_REDUND
+	  CONFIG_ENV_SIZE_REDUND
+
+	   These settings describe a second storage area used to hold
+	   a redundant copy of the environment data, so that there is
+	   a valid backup copy in case there is a power failure during
+	   a "saveenv" operation.
+
+BE CAREFUL! Any changes to the flash layout, and some changes to the
+source code will make it necessary to adapt <board>/u-boot.lds*
+accordingly!
+
+
+- CONFIG_ENV_IS_IN_NVRAM:
+
+	Define this if you have some non-volatile memory device
+	(NVRAM, battery buffered SRAM) which you want to use for the
+	environment.
+
+	- CONFIG_ENV_ADDR:
+	- CONFIG_ENV_SIZE:
+
+	  These two #defines are used to determine the memory area you
+	  want to use for environment. It is assumed that this memory
+	  can just be read and written to, without any special
+	  provision.
+
 BE CAREFUL! The first access to the environment happens quite early
 in U-Boot initialization (when we try to get the setting of for the
 console baudrate). You *MUST* have mapped your NVRAM area then, or
@@ -3007,20 +4319,295 @@
 keep settings there always unmodified except somebody uses "saveenv"
 to save the current settings.
 
+
+- CONFIG_ENV_IS_IN_EEPROM:
+
+	Use this if you have an EEPROM or similar serial access
+	device and a driver for it.
+
+	- CONFIG_ENV_OFFSET:
+	- CONFIG_ENV_SIZE:
+
+	  These two #defines specify the offset and size of the
+	  environment area within the total memory of your EEPROM.
+
+	- CONFIG_SYS_I2C_EEPROM_ADDR:
+	  If defined, specified the chip address of the EEPROM device.
+	  The default address is zero.
+
+	- CONFIG_SYS_EEPROM_PAGE_WRITE_BITS:
+	  If defined, the number of bits used to address bytes in a
+	  single page in the EEPROM device.  A 64 byte page, for example
+	  would require six bits.
+
+	- CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS:
+	  If defined, the number of milliseconds to delay between
+	  page writes.	The default is zero milliseconds.
+
+	- CONFIG_SYS_I2C_EEPROM_ADDR_LEN:
+	  The length in bytes of the EEPROM memory array address.  Note
+	  that this is NOT the chip address length!
+
+	- CONFIG_SYS_I2C_EEPROM_ADDR_OVERFLOW:
+	  EEPROM chips that implement "address overflow" are ones
+	  like Catalyst 24WC04/08/16 which has 9/10/11 bits of
+	  address and the extra bits end up in the "chip address" bit
+	  slots. This makes a 24WC08 (1Kbyte) chip look like four 256
+	  byte chips.
+
+	  Note that we consider the length of the address field to
+	  still be one byte because the extra address bits are hidden
+	  in the chip address.
+
+	- CONFIG_SYS_EEPROM_SIZE:
+	  The size in bytes of the EEPROM device.
+
+	- CONFIG_ENV_EEPROM_IS_ON_I2C
+	  define this, if you have I2C and SPI activated, and your
+	  EEPROM, which holds the environment, is on the I2C bus.
+
+	- CONFIG_I2C_ENV_EEPROM_BUS
+	  if you have an Environment on an EEPROM reached over
+	  I2C muxes, you can define here, how to reach this
+	  EEPROM. For example:
+
+	  #define CONFIG_I2C_ENV_EEPROM_BUS	  1
+
+	  EEPROM which holds the environment, is reached over
+	  a pca9547 i2c mux with address 0x70, channel 3.
+
+- CONFIG_ENV_IS_IN_DATAFLASH:
+
+	Define this if you have a DataFlash memory device which you
+	want to use for the environment.
+
+	- CONFIG_ENV_OFFSET:
+	- CONFIG_ENV_ADDR:
+	- CONFIG_ENV_SIZE:
+
+	  These three #defines specify the offset and size of the
+	  environment area within the total memory of your DataFlash placed
+	  at the specified address.
+
+- CONFIG_ENV_IS_IN_SPI_FLASH:
+
+	Define this if you have a SPI Flash memory device which you
+	want to use for the environment.
+
+	- CONFIG_ENV_OFFSET:
+	- CONFIG_ENV_SIZE:
+
+	  These two #defines specify the offset and size of the
+	  environment area within the SPI Flash. CONFIG_ENV_OFFSET must be
+	  aligned to an erase sector boundary.
+
+	- CONFIG_ENV_SECT_SIZE:
+
+	  Define the SPI flash's sector size.
+
+	- CONFIG_ENV_OFFSET_REDUND (optional):
+
+	  This setting describes a second storage area of CONFIG_ENV_SIZE
+	  size used to hold a redundant copy of the environment data, so
+	  that there is a valid backup copy in case there is a power failure
+	  during a "saveenv" operation. CONFIG_ENV_OFFSET_RENDUND must be
+	  aligned to an erase sector boundary.
+
+	- CONFIG_ENV_SPI_BUS (optional):
+	- CONFIG_ENV_SPI_CS (optional):
+
+	  Define the SPI bus and chip select. If not defined they will be 0.
+
+	- CONFIG_ENV_SPI_MAX_HZ (optional):
+
+	  Define the SPI max work clock. If not defined then use 1MHz.
+
+	- CONFIG_ENV_SPI_MODE (optional):
+
+	  Define the SPI work mode. If not defined then use SPI_MODE_3.
+
+- CONFIG_ENV_IS_IN_REMOTE:
+
+	Define this if you have a remote memory space which you
+	want to use for the local device's environment.
+
+	- CONFIG_ENV_ADDR:
+	- CONFIG_ENV_SIZE:
+
+	  These two #defines specify the address and size of the
+	  environment area within the remote memory space. The
+	  local device can get the environment from remote memory
+	  space by SRIO or PCIE links.
+
 BE CAREFUL! For some special cases, the local device can not use
 "saveenv" command. For example, the local device will get the
 environment stored in a remote NOR flash by SRIO or PCIE link,
 but it can not erase, write this NOR flash by SRIO or PCIE interface.
 
+- CONFIG_ENV_IS_IN_NAND:
+
+	Define this if you have a NAND device which you want to use
+	for the environment.
+
+	- CONFIG_ENV_OFFSET:
+	- CONFIG_ENV_SIZE:
+
+	  These two #defines specify the offset and size of the environment
+	  area within the first NAND device.  CONFIG_ENV_OFFSET must be
+	  aligned to an erase block boundary.
+
+	- CONFIG_ENV_OFFSET_REDUND (optional):
+
+	  This setting describes a second storage area of CONFIG_ENV_SIZE
+	  size used to hold a redundant copy of the environment data, so
+	  that there is a valid backup copy in case there is a power failure
+	  during a "saveenv" operation.	 CONFIG_ENV_OFFSET_RENDUND must be
+	  aligned to an erase block boundary.
+
+	- CONFIG_ENV_RANGE (optional):
+
+	  Specifies the length of the region in which the environment
+	  can be written.  This should be a multiple of the NAND device's
+	  block size.  Specifying a range with more erase blocks than
+	  are needed to hold CONFIG_ENV_SIZE allows bad blocks within
+	  the range to be avoided.
+
+	- CONFIG_ENV_OFFSET_OOB (optional):
+
+	  Enables support for dynamically retrieving the offset of the
+	  environment from block zero's out-of-band data.  The
+	  "nand env.oob" command can be used to record this offset.
+	  Currently, CONFIG_ENV_OFFSET_REDUND is not supported when
+	  using CONFIG_ENV_OFFSET_OOB.
+
 - CONFIG_NAND_ENV_DST
 
 	Defines address in RAM to which the nand_spl code should copy the
 	environment. If redundant environment is used, it will be copied to
 	CONFIG_NAND_ENV_DST + CONFIG_ENV_SIZE.
 
+- CONFIG_ENV_IS_IN_UBI:
+
+	Define this if you have an UBI volume that you want to use for the
+	environment.  This has the benefit of wear-leveling the environment
+	accesses, which is important on NAND.
+
+	- CONFIG_ENV_UBI_PART:
+
+	  Define this to a string that is the mtd partition containing the UBI.
+
+	- CONFIG_ENV_UBI_VOLUME:
+
+	  Define this to the name of the volume that you want to store the
+	  environment in.
+
+	- CONFIG_ENV_UBI_VOLUME_REDUND:
+
+	  Define this to the name of another volume to store a second copy of
+	  the environment in.  This will enable redundant environments in UBI.
+	  It is assumed that both volumes are in the same MTD partition.
+
+	- CONFIG_UBI_SILENCE_MSG
+	- CONFIG_UBIFS_SILENCE_MSG
+
+	  You will probably want to define these to avoid a really noisy system
+	  when storing the env in UBI.
+
+- CONFIG_ENV_IS_IN_FAT:
+       Define this if you want to use the FAT file system for the environment.
+
+       - FAT_ENV_INTERFACE:
+
+         Define this to a string that is the name of the block device.
+
+       - FAT_ENV_DEV_AND_PART:
+
+         Define this to a string to specify the partition of the device. It can
+         be as following:
+
+           "D:P", "D:0", "D", "D:" or "D:auto" (D, P are integers. And P >= 1)
+               - "D:P": device D partition P. Error occurs if device D has no
+                        partition table.
+               - "D:0": device D.
+               - "D" or "D:": device D partition 1 if device D has partition
+                              table, or the whole device D if has no partition
+                              table.
+               - "D:auto": first partition in device D with bootable flag set.
+                           If none, first valid partition in device D. If no
+                           partition table then means device D.
+
+       - FAT_ENV_FILE:
+
+         It's a string of the FAT file name. This file use to store the
+         environment.
+
+       - CONFIG_FAT_WRITE:
+         This should be defined. Otherwise it cannot save the environment file.
+
+- CONFIG_ENV_IS_IN_MMC:
+
+	Define this if you have an MMC device which you want to use for the
+	environment.
+
+	- CONFIG_SYS_MMC_ENV_DEV:
+
+	  Specifies which MMC device the environment is stored in.
+
+	- CONFIG_SYS_MMC_ENV_PART (optional):
+
+	  Specifies which MMC partition the environment is stored in. If not
+	  set, defaults to partition 0, the user area. Common values might be
+	  1 (first MMC boot partition), 2 (second MMC boot partition).
+
+	- CONFIG_ENV_OFFSET:
+	- CONFIG_ENV_SIZE:
+
+	  These two #defines specify the offset and size of the environment
+	  area within the specified MMC device.
+
+	  If offset is positive (the usual case), it is treated as relative to
+	  the start of the MMC partition. If offset is negative, it is treated
+	  as relative to the end of the MMC partition. This can be useful if
+	  your board may be fitted with different MMC devices, which have
+	  different sizes for the MMC partitions, and you always want the
+	  environment placed at the very end of the partition, to leave the
+	  maximum possible space before it, to store other data.
+
+	  These two values are in units of bytes, but must be aligned to an
+	  MMC sector boundary.
+
+	- CONFIG_ENV_OFFSET_REDUND (optional):
+
+	  Specifies a second storage area, of CONFIG_ENV_SIZE size, used to
+	  hold a redundant copy of the environment data. This provides a
+	  valid backup copy in case the other copy is corrupted, e.g. due
+	  to a power failure during a "saveenv" operation.
+
+	  This value may also be positive or negative; this is handled in the
+	  same way as CONFIG_ENV_OFFSET.
+
+	  This value is also in units of bytes, but must also be aligned to
+	  an MMC sector boundary.
+
+	- CONFIG_ENV_SIZE_REDUND (optional):
+
+	  This value need not be set, even when CONFIG_ENV_OFFSET_REDUND is
+	  set. If this value is set, it must be set to the same value as
+	  CONFIG_ENV_SIZE.
+
+- CONFIG_SYS_SPI_INIT_OFFSET
+
+	Defines offset to the initial SPI buffer area in DPRAM. The
+	area is used at an early stage (ROM part) if the environment
+	is configured to reside in the SPI EEPROM: We need a 520 byte
+	scratch DPRAM area. It is used between the two initialization
+	calls (spi_init_f() and spi_init_r()). A value of 0xB00 seems
+	to be a good choice since it makes it far enough from the
+	start of the data area as well as from the stack pointer.
+
 Please note that the environment is read-only until the monitor
 has been relocated to RAM and a RAM copy of the environment has been
-created; also, when using EEPROM you will have to use env_get_f()
+created; also, when using EEPROM you will have to use getenv_f()
 until then to read environment variables.
 
 The environment is protected by a CRC32 checksum. Before the monitor
@@ -3071,6 +4658,13 @@
 - CONFIG_SYS_CACHELINE_SIZE:
 		Cache Line Size of the CPU.
 
+- CONFIG_SYS_DEFAULT_IMMR:
+		Default address of the IMMR after system reset.
+
+		Needed on some 8260 systems (MPC8260ADS, PQ2FADS-ZU,
+		and RPXsuper) to be able to adjust the position of
+		the IMMR register after a reset.
+
 - CONFIG_SYS_CCSRBAR_DEFAULT:
 		Default (power-on reset) physical address of CCSR on Freescale
 		PowerPC SOCs.
@@ -3079,6 +4673,9 @@
 		Virtual address of CCSR.  On a 32-bit build, this is typically
 		the same value as CONFIG_SYS_CCSRBAR_DEFAULT.
 
+		CONFIG_SYS_DEFAULT_IMMR must also be set to this value,
+		for cross-platform code that uses that macro instead.
+
 - CONFIG_SYS_CCSRBAR_PHYS:
 		Physical address of CCSR.  CCSR can be relocated to a new
 		physical address, if desired.  In this case, this macro should
@@ -3141,7 +4738,7 @@
 
 - CONFIG_SYS_IMMR:	Physical address of the Internal Memory.
 		DO NOT CHANGE unless you know exactly what you're
-		doing! (11-4) [MPC8xx systems only]
+		doing! (11-4) [MPC8xx/82xx systems only]
 
 - CONFIG_SYS_INIT_RAM_ADDR:
 
@@ -3154,7 +4751,9 @@
 		sequences.
 
 		U-Boot uses the following memory types:
-		- MPC8xx: IMMR (internal memory of the CPU)
+		- MPC8xx and MPC8260: IMMR (internal memory of the CPU)
+		- MPC824X: data cache
+		- PPC4xx:  data cache
 
 - CONFIG_SYS_GBL_DATA_OFFSET:
 
@@ -3163,7 +4762,7 @@
 		CONFIG_SYS_GBL_DATA_OFFSET is chosen such that the initial
 		data is located at the end of the available space
 		(sometimes written as (CONFIG_SYS_INIT_RAM_SIZE -
-		GENERATED_GBL_DATA_SIZE), and the initial stack is just
+		CONFIG_SYS_INIT_DATA_SIZE), and the initial stack is just
 		below that area (growing from (CONFIG_SYS_INIT_RAM_ADDR +
 		CONFIG_SYS_GBL_DATA_OFFSET) downward.
 
@@ -3174,6 +4773,16 @@
 		point to an otherwise UNUSED address space between
 		the top of RAM and the start of the PCI space.
 
+- CONFIG_SYS_SIUMCR:	SIU Module Configuration (11-6)
+
+- CONFIG_SYS_SYPCR:	System Protection Control (11-9)
+
+- CONFIG_SYS_TBSCR:	Time Base Status and Control (11-26)
+
+- CONFIG_SYS_PISCR:	Periodic Interrupt Status and Control (11-31)
+
+- CONFIG_SYS_PLPRCR:	PLL, Low-Power, and Reset Control Register (15-30)
+
 - CONFIG_SYS_SCCR:	System Clock and reset Control Register (15-27)
 
 - CONFIG_SYS_OR_TIMING_SDRAM:
@@ -3182,6 +4791,8 @@
 - CONFIG_SYS_MAMR_PTA:
 		periodic timer for refresh
 
+- CONFIG_SYS_DER:	Debug Event Register (37-47)
+
 - FLASH_BASE0_PRELIM, FLASH_BASE1_PRELIM, CONFIG_SYS_REMAP_OR_AM,
   CONFIG_SYS_PRELIM_OR_AM, CONFIG_SYS_OR_TIMING_FLASH, CONFIG_SYS_OR0_REMAP,
   CONFIG_SYS_OR0_PRELIM, CONFIG_SYS_BR0_PRELIM, CONFIG_SYS_OR1_REMAP, CONFIG_SYS_OR1_PRELIM,
@@ -3193,6 +4804,48 @@
   CONFIG_SYS_OR3_PRELIM, CONFIG_SYS_BR3_PRELIM:
 		Memory Controller Definitions: BR2/3 and OR2/3 (SDRAM)
 
+- CONFIG_SYS_MAMR_PTA, CONFIG_SYS_MPTPR_2BK_4K, CONFIG_SYS_MPTPR_1BK_4K, CONFIG_SYS_MPTPR_2BK_8K,
+  CONFIG_SYS_MPTPR_1BK_8K, CONFIG_SYS_MAMR_8COL, CONFIG_SYS_MAMR_9COL:
+		Machine Mode Register and Memory Periodic Timer
+		Prescaler definitions (SDRAM timing)
+
+- CONFIG_SYS_I2C_UCODE_PATCH, CONFIG_SYS_I2C_DPMEM_OFFSET [0x1FC0]:
+		enable I2C microcode relocation patch (MPC8xx);
+		define relocation offset in DPRAM [DSP2]
+
+- CONFIG_SYS_SMC_UCODE_PATCH, CONFIG_SYS_SMC_DPMEM_OFFSET [0x1FC0]:
+		enable SMC microcode relocation patch (MPC8xx);
+		define relocation offset in DPRAM [SMC1]
+
+- CONFIG_SYS_SPI_UCODE_PATCH, CONFIG_SYS_SPI_DPMEM_OFFSET [0x1FC0]:
+		enable SPI microcode relocation patch (MPC8xx);
+		define relocation offset in DPRAM [SCC4]
+
+- CONFIG_SYS_USE_OSCCLK:
+		Use OSCM clock mode on MBX8xx board. Be careful,
+		wrong setting might damage your board. Read
+		doc/README.MBX before setting this variable!
+
+- CONFIG_SYS_CPM_POST_WORD_ADDR: (MPC8xx, MPC8260 only)
+		Offset of the bootmode word in DPRAM used by post
+		(Power On Self Tests). This definition overrides
+		#define'd default value in commproc.h resp.
+		cpm_8260.h.
+
+- CONFIG_SYS_PCI_SLV_MEM_LOCAL, CONFIG_SYS_PCI_SLV_MEM_BUS, CONFIG_SYS_PICMR0_MASK_ATTRIB,
+  CONFIG_SYS_PCI_MSTR0_LOCAL, CONFIG_SYS_PCIMSK0_MASK, CONFIG_SYS_PCI_MSTR1_LOCAL,
+  CONFIG_SYS_PCIMSK1_MASK, CONFIG_SYS_PCI_MSTR_MEM_LOCAL, CONFIG_SYS_PCI_MSTR_MEM_BUS,
+  CONFIG_SYS_CPU_PCI_MEM_START, CONFIG_SYS_PCI_MSTR_MEM_SIZE, CONFIG_SYS_POCMR0_MASK_ATTRIB,
+  CONFIG_SYS_PCI_MSTR_MEMIO_LOCAL, CONFIG_SYS_PCI_MSTR_MEMIO_BUS, CPU_PCI_MEMIO_START,
+  CONFIG_SYS_PCI_MSTR_MEMIO_SIZE, CONFIG_SYS_POCMR1_MASK_ATTRIB, CONFIG_SYS_PCI_MSTR_IO_LOCAL,
+  CONFIG_SYS_PCI_MSTR_IO_BUS, CONFIG_SYS_CPU_PCI_IO_START, CONFIG_SYS_PCI_MSTR_IO_SIZE,
+  CONFIG_SYS_POCMR2_MASK_ATTRIB: (MPC826x only)
+		Overrides the default PCI memory map in arch/powerpc/cpu/mpc8260/pci.c if set.
+
+- CONFIG_PCI_DISABLE_PCIE:
+		Disable PCI-Express on systems where it is supported but not
+		required.
+
 - CONFIG_PCI_ENUM_ONLY
 		Only scan through and get the devices on the buses.
 		Don't do any setup work, presumably because someone or
@@ -3229,8 +4882,8 @@
 		a 16 bit bus.
 		Not all NAND drivers use this symbol.
 		Example of drivers that use it:
-		- drivers/mtd/nand/raw/ndfc.c
-		- drivers/mtd/nand/raw/mxc_nand.c
+		- drivers/mtd/nand/ndfc.c
+		- drivers/mtd/nand/mxc_nand.c
 
 - CONFIG_SYS_NDFC_EBC0_CFG
 		Sets the EBC0_CFG register for the NDFC. If not defined
@@ -3257,16 +4910,25 @@
 - CONFIG_FSL_DDR_INTERACTIVE
 		Enable interactive DDR debugging. See doc/README.fsl-ddr.
 
-- CONFIG_FSL_DDR_SYNC_REFRESH
-		Enable sync of refresh for multiple controllers.
-
-- CONFIG_FSL_DDR_BIST
-		Enable built-in memory test for Freescale DDR controllers.
-
 - CONFIG_SYS_83XX_DDR_USES_CS0
 		Only for 83xx systems. If specified, then DDR should
 		be configured using CS0 and CS1 instead of CS2 and CS3.
 
+- CONFIG_ETHER_ON_FEC[12]
+		Define to enable FEC[12] on a 8xx series processor.
+
+- CONFIG_FEC[12]_PHY
+		Define to the hardcoded PHY address which corresponds
+		to the given FEC; i. e.
+			#define CONFIG_FEC1_PHY 4
+		means that the PHY with address 4 is connected to FEC1
+
+		When set to -1, means to probe for first available.
+
+- CONFIG_FEC[12]_PHY_NORXERR
+		The PHY does not have a RXERR line (RMII only).
+		(so program the FEC to ignore it).
+
 - CONFIG_RMII
 		Enable RMII mode for all FECs.
 		Note that this is a global option, we can't
@@ -3284,7 +4946,7 @@
 
 - CONFIG_LOOPW
 		Add the "loopw" memory command. This only takes effect if
-		the memory commands are activated globally (CONFIG_CMD_MEMORY).
+		the memory commands are activated globally (CONFIG_CMD_MEM).
 
 - CONFIG_MX_CYCLIC
 		Add the "mdc" and "mwc" memory commands. These are cyclic
@@ -3298,10 +4960,10 @@
 		This command will write 12345678 to address 100 all 10 ms.
 
 		This only takes effect if the memory commands are activated
-		globally (CONFIG_CMD_MEMORY).
+		globally (CONFIG_CMD_MEM).
 
 - CONFIG_SKIP_LOWLEVEL_INIT
-		[ARM, NDS32, MIPS, RISC-V only] If this variable is defined, then certain
+		[ARM, NDS32, MIPS only] If this variable is defined, then certain
 		low level initializations (like setting up the memory
 		controller) are omitted and/or U-Boot does not
 		relocate itself into RAM.
@@ -3311,11 +4973,6 @@
 		other boot loader or by a debugger which performs
 		these initializations itself.
 
-- CONFIG_SKIP_LOWLEVEL_INIT_ONLY
-		[ARM926EJ-S only] This allows just the call to lowlevel_init()
-		to be skipped. The normal CP15 init (such as enabling the
-		instruction cache) is still performed.
-
 - CONFIG_SPL_BUILD
 		Modifies the behaviour of start.S when compiling a loader
 		that is executed before the actual U-Boot. E.g. when
@@ -3340,14 +4997,28 @@
 		addressable memory. This option causes some memory accesses
 		to be mapped through map_sysmem() / unmap_sysmem().
 
+- CONFIG_USE_ARCH_MEMCPY
+  CONFIG_USE_ARCH_MEMSET
+		If these options are used a optimized version of memcpy/memset will
+		be used if available. These functions may be faster under some
+		conditions but may increase the binary size.
+
 - CONFIG_X86_RESET_VECTOR
 		If defined, the x86 reset vector code is included. This is not
 		needed when U-Boot is running from Coreboot.
 
+- CONFIG_SYS_MPUCLK
+		Defines the MPU clock speed (in MHz).
+
+		NOTE : currently only supported on AM335x platforms.
+
+- CONFIG_SPL_AM33XX_ENABLE_RTC32K_OSC:
+		Enables the RTC32K OSC on AM33xx based plattforms
+
 - CONFIG_SYS_NAND_NO_SUBPAGE_WRITE
 		Option to disable subpage write in NAND driver
 		driver that uses this:
-		drivers/mtd/nand/raw/davinci_nand.c
+		drivers/mtd/nand/davinci_nand.c
 
 Freescale QE/FMAN Firmware Support:
 -----------------------------------
@@ -3387,6 +5058,10 @@
 	Specifies that QE/FMAN firmware is located on the primary SD/MMC
 	device.  CONFIG_SYS_FMAN_FW_ADDR is the byte offset on that device.
 
+- CONFIG_SYS_QE_FMAN_FW_IN_SPIFLASH
+	Specifies that QE/FMAN firmware is located on the primary SPI
+	device.  CONFIG_SYS_FMAN_FW_ADDR is the byte offset on that device.
+
 - CONFIG_SYS_QE_FMAN_FW_IN_REMOTE
 	Specifies that QE/FMAN firmware is located in the remote (master)
 	memory space.	CONFIG_SYS_FMAN_FW_ADDR is a virtual address which
@@ -3405,26 +5080,21 @@
 - CONFIG_FSL_MC_ENET
 	Enable the MC driver for Layerscape SoCs.
 
-Freescale Layerscape Debug Server Support:
--------------------------------------------
-The Freescale Layerscape Debug Server Support supports the loading of
-"Debug Server firmware" and triggering SP boot-rom.
-This firmware often needs to be loaded during U-Boot booting.
+- CONFIG_SYS_LS_MC_FW_ADDR
+	The address in the storage device where the firmware is located.  The
+	meaning of this address depends on which CONFIG_SYS_LS_MC_FW_IN_xxx macro
+	is also specified.
 
-- CONFIG_SYS_MC_RSV_MEM_ALIGN
-	Define alignment of reserved memory MC requires
+- CONFIG_SYS_LS_MC_FW_LENGTH
+	The maximum possible size of the firmware.  The firmware binary format
+	has a field that specifies the actual size of the firmware, but it
+	might not be possible to read any part of the firmware unless some
+	local storage is allocated to hold the entire firmware first.
 
-Reproducible builds
--------------------
-
-In order to achieve reproducible builds, timestamps used in the U-Boot build
-process have to be set to a fixed value.
-
-This is done using the SOURCE_DATE_EPOCH environment variable.
-SOURCE_DATE_EPOCH is to be set on the build host's shell, not as a configuration
-option for U-Boot or an environment variable in U-Boot.
-
-SOURCE_DATE_EPOCH should be set to a number of seconds since the epoch, in UTC.
+- CONFIG_SYS_LS_MC_FW_IN_NOR
+	Specifies that MC firmware is located in NOR flash, mapped as
+	normal addressable memory via the LBC. CONFIG_SYS_LS_MC_FW_ADDR is the
+	virtual address in NOR flash.
 
 Building the Software:
 ======================
@@ -3506,11 +5176,6 @@
 Note that the command line "O=" setting overrides the KBUILD_OUTPUT environment
 variable.
 
-User specific CPPFLAGS, AFLAGS and CFLAGS can be passed to the compiler by
-setting the according environment variables KCPPFLAGS, KAFLAGS and KCFLAGS.
-For example to treat all compiler warnings as errors:
-
-	make KCFLAGS=-Werror
 
 Please be aware that the Makefiles assume you are using GNU make, so
 for instance on NetBSD you might need to use "gmake" instead of
@@ -3521,11 +5186,14 @@
 to port U-Boot to your hardware platform. To do this, follow these
 steps:
 
-1.  Create a new directory to hold your board specific code. Add any
+1.  Add a new configuration option for your board to the toplevel
+    "boards.cfg" file, using the existing entries as examples.
+    Follow the instructions there to keep the boards in order.
+2.  Create a new directory to hold your board specific code. Add any
     files you need. In your board directory, you will need at least
-    the "Makefile" and a "<board>.c".
-2.  Create a new configuration file "include/configs/<board>.h" for
-    your board.
+    the "Makefile", a "<board>.c", "flash.c" and "u-boot.lds".
+3.  Create a new configuration file "include/configs/<board>.h" for
+    your board
 3.  If you're porting U-Boot to a new CPU, then also create a new
     directory to hold your CPU specific code. Add any files you need.
 4.  Run "make <board>_defconfig" with your new name.
@@ -3547,10 +5215,33 @@
 But before you submit such a patch, please verify that your modifi-
 cation did not break existing code. At least make sure that *ALL* of
 the supported boards compile WITHOUT ANY compiler warnings. To do so,
-just run the buildman script (tools/buildman/buildman), which will
-configure and build U-Boot for ALL supported system. Be warned, this
-will take a while. Please see the buildman README, or run 'buildman -H'
-for documentation.
+just run the "MAKEALL" script, which will configure and build U-Boot
+for ALL supported system. Be warned, this will take a while. You can
+select which (cross) compiler to use by passing a `CROSS_COMPILE'
+environment variable to the script, i. e. to use the ELDK cross tools
+you can type
+
+	CROSS_COMPILE=ppc_8xx- MAKEALL
+
+or to build on a native PowerPC system you can type
+
+	CROSS_COMPILE=' ' MAKEALL
+
+When using the MAKEALL script, the default behaviour is to build
+U-Boot in the source directory. This location can be changed by
+setting the BUILD_DIR environment variable. Also, for each target
+built, the MAKEALL script saves two log files (<target>.ERR and
+<target>.MAKEALL) in the <source dir>/LOG directory. This default
+location can be changed by setting the MAKEALL_LOGDIR environment
+variable. For example:
+
+	export BUILD_DIR=/tmp/build
+	export MAKEALL_LOGDIR=/tmp/log
+	CROSS_COMPILE=ppc_8xx- MAKEALL
+
+With the above settings build objects are saved in the /tmp/build,
+log files are saved in the /tmp/log and the source tree remains clean
+during the whole build process.
 
 
 See also "U-Boot Porting Guide" below.
@@ -3784,10 +5475,10 @@
 		  unset, then it will be made silent if the U-Boot console
 		  is silent.
 
-  tftpsrcp	- If this is set, the value is used for TFTP's
+  tftpsrcport	- If this is set, the value is used for TFTP's
 		  UDP source port.
 
-  tftpdstp	- If this is set, the value is used for TFTP's UDP
+  tftpdstport	- If this is set, the value is used for TFTP's UDP
 		  destination port instead of the Well Know Port 69.
 
   tftpblocksize - Block size to use for TFTP transfers; if not set,
@@ -3801,24 +5492,10 @@
 		  faster in networks with high packet loss rates or
 		  with unreliable TFTP servers.
 
-  tftptimeoutcountmax	- maximum count of TFTP timeouts (no
-		  unit, minimum value = 0). Defines how many timeouts
-		  can happen during a single file transfer before that
-		  transfer is aborted. The default is 10, and 0 means
-		  'no timeouts allowed'. Increasing this value may help
-		  downloads succeed with high packet loss rates, or with
-		  unreliable TFTP servers or client hardware.
-
   vlan		- When set to a value < 4095 the traffic over
 		  Ethernet is encapsulated/received over 802.1q
 		  VLAN tagged frames.
 
-  bootpretryperiod	- Period during which BOOTP/DHCP sends retries.
-		  Unsigned value, in milliseconds. If not set, the period will
-		  be either the default (28000), or a value based on
-		  CONFIG_NET_RETRY_COUNT, if defined. This value has
-		  precedence over the valu based on CONFIG_NET_RETRY_COUNT.
-
 The following image location variables contain the location of images
 used in booting. The "Image" column gives the role of the image and is
 not an environment variable name. The other columns are environment
@@ -3828,7 +5505,7 @@
 flash or offset in NAND flash.
 
 *Note* - these variables don't have to be defined for all boards, some
-boards currently use other variables for these purposes, and some
+boards currenlty use other variables for these purposes, and some
 boards use these variables for other purposes.
 
 Image		    File Name	     RAM Address       Flash Location
@@ -3904,21 +5581,6 @@
 CONFIG_ENV_CALLBACK_LIST_DEFAULT to a list (string) to define the
 ".callbacks" environment variable in the default or embedded environment.
 
-If CONFIG_REGEX is defined, the variable_name above is evaluated as a
-regular expression. This allows multiple variables to be connected to
-the same callback without explicitly listing them all out.
-
-The signature of the callback functions is:
-
-    int callback(const char *name, const char *value, enum env_op op, int flags)
-
-* name - changed environment variable
-* value - new value of the environment variable
-* op - operation (create, overwrite, or delete)
-* flags - attributes of the environment variable change, see flags H_* in
-  include/search.h
-
-The return value is 0 if the variable change is accepted and 1 otherwise.
 
 Command Line Parsing:
 =====================
@@ -3993,8 +5655,7 @@
   warning is printed.
 
 o If neither SROM nor the environment contain a MAC address, an error
-  is raised. If CONFIG_NET_RANDOM_ETHADDR is defined, then in this case
-  a random, locally-assigned MAC is used.
+  is raised.
 
 If Ethernet drivers implement the 'write_hwaddr' function, valid MAC addresses
 will be programmed into hardware as part of the initialization process.	 This
@@ -4029,9 +5690,9 @@
   LynxOS, pSOS, QNX, RTEMS, INTEGRITY;
   Currently supported: Linux, NetBSD, VxWorks, QNX, RTEMS, LynxOS,
   INTEGRITY).
-* Target CPU Architecture (Provisions for Alpha, ARM, Intel x86,
+* Target CPU Architecture (Provisions for Alpha, ARM, AVR32, Intel x86,
   IA64, MIPS, NDS32, Nios II, PowerPC, IBM S390, SuperH, Sparc, Sparc 64 Bit;
-  Currently supported: ARM, Intel x86, MIPS, NDS32, Nios II, PowerPC).
+  Currently supported: ARM, AVR32, Intel x86, MIPS, NDS32, Nios II, PowerPC).
 * Compression Type (uncompressed, gzip, bzip2)
 * Load Address
 * Entry Point
@@ -4240,10 +5901,9 @@
 option). Given an image built by mkimage, the dumpimage extracts a "data file"
 from the image:
 
-	tools/dumpimage -i image -T type -p position data_file
-	  -i ==> extract from the 'image' a specific 'data_file'
-	  -T ==> set image type to 'type'
-	  -p ==> 'position' (starting at 0) of the 'data_file' inside the 'image'
+	tools/dumpimage -i image -p position data_file
+	  -i ==> extract from the 'image' a specific 'data_file', \
+	   indexed by 'position'
 
 
 Installing a Linux Image:
@@ -4727,6 +6387,11 @@
     average for all boards 752 bytes for the whole U-Boot image,
     624 text + 127 data).
 
+On Blackfin, the normal C ABI (except for P3) is followed as documented here:
+	http://docs.blackfin.uclinux.org/doku.php?id=application_binary_interface
+
+    ==> U-Boot will use P3 to hold a pointer to the global data
+
 On ARM, the following registers are used:
 
 	R0:	function argument word/integer result
@@ -4768,22 +6433,6 @@
 NOTE: DECLARE_GLOBAL_DATA_PTR must be used with file-global scope,
 or current versions of GCC may "optimize" the code too much.
 
-On RISC-V, the following registers are used:
-
-	x0: hard-wired zero (zero)
-	x1: return address (ra)
-	x2:	stack pointer (sp)
-	x3:	global pointer (gp)
-	x4:	thread pointer (tp)
-	x5:	link register (t0)
-	x8:	frame pointer (fp)
-	x10-x11:	arguments/return values (a0-1)
-	x12-x17:	arguments (a2-7)
-	x28-31:	 temporaries (t3-6)
-	pc:	program counter (pc)
-
-    ==> U-Boot will use gp to hold a pointer to the global data
-
 Memory Management:
 ------------------
 
@@ -4838,9 +6487,9 @@
 To be able to re-map memory U-Boot then jumps to its link address.
 To be able to implement the initialization code in C, a (small!)
 initial stack is set up in the internal Dual Ported RAM (in case CPUs
-which provide such a feature like), or in a locked part of the data
-cache. After that, U-Boot initializes the CPU core, the caches and
-the SIU.
+which provide such a feature like MPC8xx or MPC8260), or in a locked
+part of the data cache. After that, U-Boot initializes the CPU core,
+the caches and the SIU.
 
 Next, all (potentially) available memory banks are mapped using a
 preliminary mapping. For example, we put them on 512 MB boundaries
@@ -4945,9 +6594,8 @@
 -----------------
 
 All contributions to U-Boot should conform to the Linux kernel
-coding style; see the kernel coding style guide at
-https://www.kernel.org/doc/html/latest/process/coding-style.html, and the
-script "scripts/Lindent" in your Linux kernel source directory.
+coding style; see the file "Documentation/CodingStyle" and the script
+"scripts/Lindent" in your Linux kernel source directory.
 
 Source files originating from a different project (for example the
 MTD subsystem) are generally exempt from these guidelines and are not
@@ -4979,7 +6627,7 @@
 Please see http://www.denx.de/wiki/U-Boot/Patches for details.
 
 Patches shall be sent to the u-boot mailing list <u-boot@lists.denx.de>;
-see https://lists.denx.de/listinfo/u-boot
+see http://lists.denx.de/mailman/listinfo/u-boot
 
 When you send a patch, please include the following information with
 it:
@@ -4993,8 +6641,7 @@
 
 * A CHANGELOG entry as plaintext (separate from the patch)
 
-* For major contributions, add a MAINTAINERS file with your
-  information and associated file and directory references.
+* For major contributions, your entry to the CREDITS file
 
 * When you add support for a new board, don't forget to add a
   maintainer e-mail address to the boards.cfg file, too.
@@ -5029,7 +6676,7 @@
 
 Notes:
 
-* Before sending the patch, run the buildman script on your patched
+* Before sending the patch, run the MAKEALL script on your patched
   source tree and make sure that no errors or warnings are reported
   for any of the boards.
 
diff --git a/amlogic_help.sh b/amlogic_help.sh
new file mode 100755
index 0000000..d29218d
--- /dev/null
+++ b/amlogic_help.sh
@@ -0,0 +1,39 @@
+# print amlogic board config
+
+if [ -z ${srctree} ]; then
+	srctree=`pwd`
+fi
+
+folder_board=${srctree}"/board/amlogic"
+
+#echo $folder_board
+#ls -a ${folder_board}
+
+echo ""
+echo "**************Amlogic Configs**************"
+echo "*                                         *"
+echo "*          ./mk (config_name)             *"
+echo "*                                         *"
+echo "*******************************************"
+
+for file in ${folder_board}/*; do
+	temp_file=`basename $file`
+	#echo "$temp_file"
+	if [ -d ${folder_board}/${temp_file} ] && [ "$temp_file" != "defconfigs" ] && [ "$temp_file" != "configs" ];then
+		printf "\t$temp_file\n"
+	fi
+done
+
+echo "*******************************************"
+
+customer_folder=${srctree}"/customer/board"
+if [ -e ${customer_folder} ];then
+	echo "**************Customer Configs*************"
+	for file in ${customer_folder}/*; do
+		temp_file=`basename $file`
+		if [ -d ${customer_folder}/${temp_file} ] && [ "$temp_file" != "defconfigs" ] && [ "$temp_file" != "configs" ];then
+			printf "\t$temp_file\n"
+		fi
+	done
+	echo "*******************************************"
+fi
diff --git a/api/Kconfig b/api/Kconfig
deleted file mode 100644
index 16731d3..0000000
--- a/api/Kconfig
+++ /dev/null
@@ -1,9 +0,0 @@
-menu "API"
-
-config API
-	bool "Enable U-Boot API"
-	default n
-	help
-	  This option enables the U-Boot API. See api/README for more information.
-
-endmenu
diff --git a/api/Makefile b/api/Makefile
index bd2d035..3c095ee 100644
--- a/api/Makefile
+++ b/api/Makefile
@@ -1,8 +1,9 @@
-# SPDX-License-Identifier: GPL-2.0+
 #
 # (C) Copyright 2007 Semihalf
+#
+# SPDX-License-Identifier:	GPL-2.0+
+#
 
 obj-y += api.o api_display.o api_net.o api_storage.o
 obj-$(CONFIG_ARM) += api_platform-arm.o
 obj-$(CONFIG_PPC) += api_platform-powerpc.o
-obj-$(CONFIG_MIPS) += api_platform-mips.o
diff --git a/api/api.c b/api/api.c
index 9f03f1a..c5f6edb 100644
--- a/api/api.c
+++ b/api/api.c
@@ -1,8 +1,9 @@
-// SPDX-License-Identifier: GPL-2.0+
 /*
  * (C) Copyright 2007 Semihalf
  *
  * Written by: Rafal Jaworowski <raj@semihalf.com>
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
  */
 
 #include <config.h>
@@ -51,7 +52,7 @@
 {
 	int *c;
 
-	if ((c = (int *)va_arg(ap, uintptr_t)) == NULL)
+	if ((c = (int *)va_arg(ap, u_int32_t)) == NULL)
 		return API_EINVAL;
 
 	*c = getc();
@@ -67,7 +68,7 @@
 {
 	int *t;
 
-	if ((t = (int *)va_arg(ap, uintptr_t)) == NULL)
+	if ((t = (int *)va_arg(ap, u_int32_t)) == NULL)
 		return API_EINVAL;
 
 	*t = tstc();
@@ -83,7 +84,7 @@
 {
 	char *c;
 
-	if ((c = (char *)va_arg(ap, uintptr_t)) == NULL)
+	if ((c = (char *)va_arg(ap, u_int32_t)) == NULL)
 		return API_EINVAL;
 
 	putc(*c);
@@ -99,7 +100,7 @@
 {
 	char *s;
 
-	if ((s = (char *)va_arg(ap, uintptr_t)) == NULL)
+	if ((s = (char *)va_arg(ap, u_int32_t)) == NULL)
 		return API_EINVAL;
 
 	puts(s);
@@ -131,7 +132,7 @@
 {
 	struct sys_info *si;
 
-	si = (struct sys_info *)va_arg(ap, uintptr_t);
+	si = (struct sys_info *)va_arg(ap, u_int32_t);
 	if (si == NULL)
 		return API_ENOMEM;
 
@@ -147,7 +148,7 @@
 {
 	unsigned long *d;
 
-	if ((d = (unsigned long *)va_arg(ap, unsigned long)) == NULL)
+	if ((d = (unsigned long *)va_arg(ap, u_int32_t)) == NULL)
 		return API_EINVAL;
 
 	udelay(*d);
@@ -163,11 +164,11 @@
 {
 	unsigned long *base, *cur;
 
-	cur = (unsigned long *)va_arg(ap, unsigned long);
+	cur = (unsigned long *)va_arg(ap, u_int32_t);
 	if (cur == NULL)
 		return API_EINVAL;
 
-	base = (unsigned long *)va_arg(ap, unsigned long);
+	base = (unsigned long *)va_arg(ap, u_int32_t);
 	if (base == NULL)
 		return API_EINVAL;
 
@@ -188,7 +189,7 @@
  *
  *   - net: &eth_device struct address from list pointed to by eth_devices
  *
- *   - storage: struct blk_desc struct address from &ide_dev_desc[n],
+ *   - storage: block_dev_desc_t struct address from &ide_dev_desc[n],
  *     &scsi_dev_desc[n] and similar tables
  *
  ****************************************************************************/
@@ -198,7 +199,7 @@
 	struct device_info *di;
 
 	/* arg is ptr to the device_info struct we are going to fill out */
-	di = (struct device_info *)va_arg(ap, uintptr_t);
+	di = (struct device_info *)va_arg(ap, u_int32_t);
 	if (di == NULL)
 		return API_EINVAL;
 
@@ -232,7 +233,7 @@
 	int err = 0;
 
 	/* arg is ptr to the device_info struct */
-	di = (struct device_info *)va_arg(ap, uintptr_t);
+	di = (struct device_info *)va_arg(ap, u_int32_t);
 	if (di == NULL)
 		return API_EINVAL;
 
@@ -264,7 +265,7 @@
 	int err = 0;
 
 	/* arg is ptr to the device_info struct */
-	di = (struct device_info *)va_arg(ap, uintptr_t);
+	di = (struct device_info *)va_arg(ap, u_int32_t);
 	if (di == NULL)
 		return API_EINVAL;
 
@@ -318,7 +319,7 @@
 	int err = 0;
 
 	/* 1. arg is ptr to the device_info struct */
-	di = (struct device_info *)va_arg(ap, uintptr_t);
+	di = (struct device_info *)va_arg(ap, u_int32_t);
 	if (di == NULL)
 		return API_EINVAL;
 
@@ -328,12 +329,12 @@
 		return API_ENODEV;
 
 	/* 2. arg is ptr to buffer from where to get data to write */
-	buf = (void *)va_arg(ap, uintptr_t);
+	buf = (void *)va_arg(ap, u_int32_t);
 	if (buf == NULL)
 		return API_EINVAL;
 
 	/* 3. arg is length of buffer */
-	len = (int *)va_arg(ap, uintptr_t);
+	len = (int *)va_arg(ap, u_int32_t);
 	if (len == NULL)
 		return API_EINVAL;
 	if (*len <= 0)
@@ -386,7 +387,7 @@
 	int *len_net, *act_len_net;
 
 	/* 1. arg is ptr to the device_info struct */
-	di = (struct device_info *)va_arg(ap, uintptr_t);
+	di = (struct device_info *)va_arg(ap, u_int32_t);
 	if (di == NULL)
 		return API_EINVAL;
 
@@ -396,23 +397,23 @@
 		return API_ENODEV;
 
 	/* 2. arg is ptr to buffer from where to put the read data */
-	buf = (void *)va_arg(ap, uintptr_t);
+	buf = (void *)va_arg(ap, u_int32_t);
 	if (buf == NULL)
 		return API_EINVAL;
 
 	if (di->type & DEV_TYP_STOR) {
 		/* 3. arg - ptr to var with # of blocks to read */
-		len_stor = (lbasize_t *)va_arg(ap, uintptr_t);
+		len_stor = (lbasize_t *)va_arg(ap, u_int32_t);
 		if (!len_stor)
 			return API_EINVAL;
 		if (*len_stor <= 0)
 			return API_EINVAL;
 
 		/* 4. arg - ptr to var with start block */
-		start = (lbastart_t *)va_arg(ap, uintptr_t);
+		start = (lbastart_t *)va_arg(ap, u_int32_t);
 
 		/* 5. arg - ptr to var where to put the len actually read */
-		act_len_stor = (lbasize_t *)va_arg(ap, uintptr_t);
+		act_len_stor = (lbasize_t *)va_arg(ap, u_int32_t);
 		if (!act_len_stor)
 			return API_EINVAL;
 
@@ -421,14 +422,14 @@
 	} else if (di->type & DEV_TYP_NET) {
 
 		/* 3. arg points to the var with length of packet to read */
-		len_net = (int *)va_arg(ap, uintptr_t);
+		len_net = (int *)va_arg(ap, u_int32_t);
 		if (!len_net)
 			return API_EINVAL;
 		if (*len_net <= 0)
 			return API_EINVAL;
 
 		/* 4. - ptr to var where to put the len actually read */
-		act_len_net = (int *)va_arg(ap, uintptr_t);
+		act_len_net = (int *)va_arg(ap, u_int32_t);
 		if (!act_len_net)
 			return API_EINVAL;
 
@@ -452,12 +453,12 @@
 {
 	char *name, **value;
 
-	if ((name = (char *)va_arg(ap, uintptr_t)) == NULL)
+	if ((name = (char *)va_arg(ap, u_int32_t)) == NULL)
 		return API_EINVAL;
-	if ((value = (char **)va_arg(ap, uintptr_t)) == NULL)
+	if ((value = (char **)va_arg(ap, u_int32_t)) == NULL)
 		return API_EINVAL;
 
-	*value = env_get(name);
+	*value = getenv(name);
 
 	return 0;
 }
@@ -475,12 +476,12 @@
 {
 	char *name, *value;
 
-	if ((name = (char *)va_arg(ap, uintptr_t)) == NULL)
+	if ((name = (char *)va_arg(ap, u_int32_t)) == NULL)
 		return API_EINVAL;
-	if ((value = (char *)va_arg(ap, uintptr_t)) == NULL)
+	if ((value = (char *)va_arg(ap, u_int32_t)) == NULL)
 		return API_EINVAL;
 
-	env_set(name, value);
+	setenv(name, value);
 
 	return 0;
 }
@@ -494,47 +495,45 @@
  */
 static int API_env_enum(va_list ap)
 {
-	int i, buflen;
-	char *last, **next, *s;
-	ENTRY *match, search;
-	static char *var;
+	int i, n;
+	char *last, **next;
 
-	last = (char *)va_arg(ap, unsigned long);
+	last = (char *)va_arg(ap, u_int32_t);
 
-	if ((next = (char **)va_arg(ap, uintptr_t)) == NULL)
+	if ((next = (char **)va_arg(ap, u_int32_t)) == NULL)
 		return API_EINVAL;
 
-	if (last == NULL) {
-		var = NULL;
-		i = 0;
-	} else {
-		var = strdup(last);
-		s = strchr(var, '=');
-		if (s != NULL)
-			*s = 0;
-		search.key = var;
-		i = hsearch_r(search, FIND, &match, &env_htab, 0);
-		if (i == 0) {
-			i = API_EINVAL;
-			goto done;
+	if (last == NULL)
+		/* start over */
+		*next = ((char *)env_get_addr(0));
+	else {
+		*next = last;
+
+		for (i = 0; env_get_char(i) != '\0'; i = n + 1) {
+			for (n = i; env_get_char(n) != '\0'; ++n) {
+				if (n >= CONFIG_ENV_SIZE) {
+					/* XXX shouldn't we set *next = NULL?? */
+					return 0;
+				}
+			}
+
+			if (envmatch((uchar *)last, i) < 0)
+				continue;
+
+			/* try to get next name */
+			i = n + 1;
+			if (env_get_char(i) == '\0') {
+				/* no more left */
+				*next = NULL;
+				return 0;
+			}
+
+			*next = ((char *)env_get_addr(i));
+			return 0;
 		}
 	}
 
-	/* match the next entry after i */
-	i = hmatch_r("", i, &match, &env_htab);
-	if (i == 0)
-		goto done;
-	buflen = strlen(match->key) + strlen(match->data) + 2;
-	var = realloc(var, buflen);
-	snprintf(var, buflen, "%s=%s", match->key, match->data);
-	*next = var;
 	return 0;
-
-done:
-	free(var);
-	var = NULL;
-	*next = NULL;
-	return i;
 }
 
 /*
@@ -624,7 +623,7 @@
 
 void api_init(void)
 {
-	struct api_signature *sig;
+	struct api_signature *sig = NULL;
 
 	/* TODO put this into linker set one day... */
 	calls_table[API_RSVD] = NULL;
@@ -662,15 +661,14 @@
 		return;
 	}
 
-	env_set_hex("api_address", (unsigned long)sig);
-	debugf("API sig @ 0x%lX\n", (unsigned long)sig);
+	debugf("API sig @ 0x%08x\n", sig);
 	memcpy(sig->magic, API_SIG_MAGIC, 8);
 	sig->version = API_SIG_VERSION;
 	sig->syscall = &syscall;
 	sig->checksum = 0;
 	sig->checksum = crc32(0, (unsigned char *)sig,
 			      sizeof(struct api_signature));
-	debugf("syscall entry: 0x%lX\n", (unsigned long)sig->syscall);
+	debugf("syscall entry: 0x%08x\n", sig->syscall);
 }
 
 void platform_set_mr(struct sys_info *si, unsigned long start, unsigned long size,
diff --git a/api/api_display.c b/api/api_display.c
index 8ae358a..fe04d39 100644
--- a/api/api_display.c
+++ b/api/api_display.c
@@ -1,6 +1,6 @@
-// SPDX-License-Identifier: GPL-2.0+
 /*
  * Copyright (c) 2011 The Chromium OS Authors.
+ * SPDX-License-Identifier:	GPL-2.0+
  */
 
 #include <common.h>
diff --git a/api/api_net.c b/api/api_net.c
index 7515c26..7b3805e 100644
--- a/api/api_net.c
+++ b/api/api_net.c
@@ -1,8 +1,9 @@
-// SPDX-License-Identifier: GPL-2.0+
 /*
  * (C) Copyright 2007 Semihalf
  *
  * Written by: Rafal Jaworowski <raj@semihalf.com>
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
  */
 
 #include <config.h>
@@ -11,6 +12,8 @@
 #include <linux/types.h>
 #include <api_public.h>
 
+DECLARE_GLOBAL_DATA_PTR;
+
 #define DEBUG
 #undef DEBUG
 
@@ -22,7 +25,7 @@
 
 #define errf(fmt, args...) do { printf("ERROR @ %s(): ", __func__); printf(fmt, ##args); } while (0)
 
-#if defined(CONFIG_CMD_NET) && !defined(CONFIG_DM_ETH)
+#ifdef CONFIG_CMD_NET
 
 static int dev_valid_net(void *cookie)
 {
@@ -34,7 +37,7 @@
 	if (!dev_valid_net(cookie))
 		return API_ENODEV;
 
-	if (eth_init() < 0)
+	if (eth_init(gd->bd) < 0)
 		return API_EIO;
 
 	return 0;
diff --git a/api/api_platform-arm.c b/api/api_platform-arm.c
index 6cfd9e6..eb5338f 100644
--- a/api/api_platform-arm.c
+++ b/api/api_platform-arm.c
@@ -1,9 +1,10 @@
-// SPDX-License-Identifier: GPL-2.0+
 /*
  * (C) Copyright 2007 Semihalf
  *
  * Written by: Rafal Jaworowski <raj@semihalf.com>
  *
+ * SPDX-License-Identifier:	GPL-2.0+
+ *
  * This file contains routines that fetch data from ARM-dependent sources
  * (bd_info etc.)
  */
diff --git a/api/api_platform-mips.c b/api/api_platform-mips.c
deleted file mode 100644
index 51cd328..0000000
--- a/api/api_platform-mips.c
+++ /dev/null
@@ -1,31 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * (C) Copyright 2007 Stanislav Galabov <sgalabov@gmail.com>
- *
- * This file contains routines that fetch data from bd_info sources
- */
-
-#include <config.h>
-#include <linux/types.h>
-#include <api_public.h>
-
-#include <asm/u-boot.h>
-#include <asm/global_data.h>
-
-#include "api_private.h"
-
-DECLARE_GLOBAL_DATA_PTR;
-
-/*
- * Important notice: handling of individual fields MUST be kept in sync with
- * include/asm-generic/u-boot.h, so any changes
- * need to reflect their current state and layout of structures involved!
- */
-int platform_sys_info(struct sys_info *si)
-{
-
-	platform_set_mr(si, gd->bd->bi_memstart,
-			gd->bd->bi_memsize, MR_ATTR_DRAM);
-
-	return 1;
-}
diff --git a/api/api_platform-powerpc.c b/api/api_platform-powerpc.c
index 15930cf..f23f175 100644
--- a/api/api_platform-powerpc.c
+++ b/api/api_platform-powerpc.c
@@ -1,9 +1,10 @@
-// SPDX-License-Identifier: GPL-2.0+
 /*
  * (C) Copyright 2007 Semihalf
  *
  * Written by: Rafal Jaworowski <raj@semihalf.com>
  *
+ * SPDX-License-Identifier:	GPL-2.0+
+ *
  * This file contains routines that fetch data from PowerPC-dependent sources
  * (bd_info etc.)
  */
@@ -29,8 +30,11 @@
 	si->clk_bus = gd->bus_clk;
 	si->clk_cpu = gd->cpu_clk;
 
-#if defined(CONFIG_MPC8xx) || defined(CONFIG_E500) || defined(CONFIG_MPC86xx)
+#if defined(CONFIG_5xx) || defined(CONFIG_8xx) || defined(CONFIG_MPC8260) || \
+    defined(CONFIG_E500) || defined(CONFIG_MPC86xx)
 #define bi_bar	bi_immr_base
+#elif defined(CONFIG_MPC5xxx)
+#define bi_bar	bi_mbar_base
 #elif defined(CONFIG_MPC83xx)
 #define bi_bar	bi_immrbar
 #endif
diff --git a/api/api_private.h b/api/api_private.h
index 8d97ca9..a8866ef 100644
--- a/api/api_private.h
+++ b/api/api_private.h
@@ -1,8 +1,9 @@
-/* SPDX-License-Identifier: GPL-2.0+ */
 /*
  * (C) Copyright 2007 Semihalf
  *
  * Written by: Rafal Jaworowski <raj@semihalf.com>
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
  */
 
 #ifndef _API_PRIVATE_H_
diff --git a/api/api_storage.c b/api/api_storage.c
index 2b90c18..b76b07d 100644
--- a/api/api_storage.c
+++ b/api/api_storage.c
@@ -1,8 +1,9 @@
-// SPDX-License-Identifier: GPL-2.0+
 /*
  * (C) Copyright 2007-2008 Semihalf
  *
  * Written by: Rafal Jaworowski <raj@semihalf.com>
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
  */
 
 #include <config.h>
@@ -36,19 +37,16 @@
 	int		max_dev;
 	int		enum_started;
 	int		enum_ended;
-	int		type;	/* "external" type: DT_STOR_{IDE,USB,etc} */
+	int		type;		/* "external" type: DT_STOR_{IDE,USB,etc} */
 	char		*name;
 };
 
-static struct stor_spec specs[ENUM_MAX] = { { 0, 0, 0, 0, NULL }, };
+static struct stor_spec specs[ENUM_MAX] = { { 0, 0, 0, 0, "" }, };
 
-#ifndef CONFIG_SYS_MMC_MAX_DEVICE
-#define CONFIG_SYS_MMC_MAX_DEVICE	1
-#endif
 
 void dev_stor_init(void)
 {
-#if defined(CONFIG_IDE)
+#if defined(CONFIG_CMD_IDE)
 	specs[ENUM_IDE].max_dev = CONFIG_SYS_IDE_MAXDEVICE;
 	specs[ENUM_IDE].enum_started = 0;
 	specs[ENUM_IDE].enum_ended = 0;
@@ -62,14 +60,14 @@
 	specs[ENUM_MMC].type = DEV_TYP_STOR | DT_STOR_MMC;
 	specs[ENUM_MMC].name = "mmc";
 #endif
-#if defined(CONFIG_SATA)
+#if defined(CONFIG_CMD_SATA)
 	specs[ENUM_SATA].max_dev = CONFIG_SYS_SATA_MAX_DEVICE;
 	specs[ENUM_SATA].enum_started = 0;
 	specs[ENUM_SATA].enum_ended = 0;
 	specs[ENUM_SATA].type = DEV_TYP_STOR | DT_STOR_SATA;
 	specs[ENUM_SATA].name = "sata";
 #endif
-#if defined(CONFIG_SCSI)
+#if defined(CONFIG_CMD_SCSI)
 	specs[ENUM_SCSI].max_dev = CONFIG_SYS_SCSI_MAX_DEVICE;
 	specs[ENUM_SCSI].enum_started = 0;
 	specs[ENUM_SCSI].enum_ended = 0;
@@ -90,87 +88,97 @@
  *
  * type:	storage group type - ENUM_IDE, ENUM_SCSI etc.
  *
+ * first:	if 1 the first device in the storage group is returned (if
+ *              exists), if 0 the next available device is searched
+ *
  * more:	returns 0/1 depending if there are more devices in this group
  *		available (for future iterations)
  *
  * returns:	0/1 depending if device found in this iteration
  */
-static int dev_stor_get(int type, int *more, struct device_info *di)
+static int dev_stor_get(int type, int first, int *more, struct device_info *di)
 {
-	struct blk_desc *dd;
 	int found = 0;
-	int found_last = 0;
-	int i = 0;
+	*more = 0;
 
-	/* Wasn't configured for this type, return 0 directly */
-	if (specs[type].name == NULL)
-		return 0;
+	int i;
 
-	if (di->cookie != NULL) {
-		/* Find the last device we've returned  */
-		for (i = 0; i < specs[type].max_dev; i++) {
-			if (di->cookie ==
-			    (void *)blk_get_dev(specs[type].name, i)) {
-				i += 1;
-				found_last = 1;
+	block_dev_desc_t *dd;
+
+	if (first) {
+		di->cookie = (void *)get_dev(specs[type].name, 0);
+		if (di->cookie == NULL)
+			return 0;
+		else
+			found = 1;
+
+	} else {
+		for (i = 0; i < specs[type].max_dev; i++)
+			if (di->cookie == (void *)get_dev(specs[type].name, i)) {
+				/* previous cookie found -- advance to the
+				 * next device, if possible */
+
+				if (++i >= specs[type].max_dev) {
+					/* out of range, no more to enum */
+					di->cookie = NULL;
+					break;
+				}
+
+				di->cookie = (void *)get_dev(specs[type].name, i);
+				if (di->cookie == NULL)
+					return 0;
+				else
+					found = 1;
+
+				/* provide hint if there are more devices in
+				 * this group to enumerate */
+				if ((i + 1) < specs[type].max_dev)
+					*more = 1;
+
 				break;
 			}
-		}
-
-		if (!found_last)
-			i = 0;
 	}
 
-	for (; i < specs[type].max_dev; i++) {
-		di->cookie = (void *)blk_get_dev(specs[type].name, i);
-
-		if (di->cookie != NULL) {
-			found = 1;
-			break;
-		}
-	}
-
-	if (i == specs[type].max_dev)
-		*more = 0;
-	else
-		*more = 1;
-
 	if (found) {
 		di->type = specs[type].type;
 
-		dd = (struct blk_desc *)di->cookie;
-		if (dd->type == DEV_TYPE_UNKNOWN) {
-			debugf("device instance exists, but is not active..");
-			found = 0;
-		} else {
-			di->di_stor.block_count = dd->lba;
-			di->di_stor.block_size = dd->blksz;
+		if (di->cookie != NULL) {
+			dd = (block_dev_desc_t *)di->cookie;
+			if (dd->type == DEV_TYPE_UNKNOWN) {
+				debugf("device instance exists, but is not active..");
+				found = 0;
+			} else {
+				di->di_stor.block_count = dd->lba;
+				di->di_stor.block_size = dd->blksz;
+			}
 		}
-	} else {
+
+	} else
 		di->cookie = NULL;
-	}
 
 	return found;
 }
 
 
-/* returns: ENUM_IDE, ENUM_USB etc. based on struct blk_desc */
-
-static int dev_stor_type(struct blk_desc *dd)
+/*
+ * returns:	ENUM_IDE, ENUM_USB etc. based on block_dev_desc_t
+ */
+static int dev_stor_type(block_dev_desc_t *dd)
 {
 	int i, j;
 
 	for (i = ENUM_IDE; i < ENUM_MAX; i++)
 		for (j = 0; j < specs[i].max_dev; j++)
-			if (dd == blk_get_dev(specs[i].name, j))
+			if (dd == get_dev(specs[i].name, j))
 				return i;
 
 	return ENUM_MAX;
 }
 
 
-/* returns: 0/1 whether cookie points to some device in this group */
-
+/*
+ * returns:	0/1 whether cookie points to some device in this group
+ */
 static int dev_is_stor(int type, struct device_info *di)
 {
 	return (dev_stor_type(di->cookie) == type) ? 1 : 0;
@@ -201,16 +209,18 @@
 	 */
 
 	if (di->cookie == NULL) {
+
 		debugf("group%d - enum restart\n", type);
 
 		/*
 		 * 1. Enumeration (re-)started: take the first available
 		 * device, if exists
 		 */
-		found = dev_stor_get(type, &more, di);
+		found = dev_stor_get(type, 1, &more, di);
 		specs[type].enum_started = 1;
 
 	} else if (dev_is_stor(type, di)) {
+
 		debugf("group%d - enum continued for the next device\n", type);
 
 		if (specs[type].enum_ended) {
@@ -219,9 +229,10 @@
 		}
 
 		/* 2a. Attempt to take a next available device in the group */
-		found = dev_stor_get(type, &more, di);
+		found = dev_stor_get(type, 0, &more, di);
 
 	} else {
+
 		if (specs[type].enum_ended) {
 			debugf("group %d - already enumerated, skipping\n", type);
 			return 0;
@@ -233,7 +244,7 @@
 			/*
 			 * 2b.  If enumerating devices in this group did not
 			 * happen before, it means the cookie pointed to a
-			 * device from some other group (another storage
+			 * device frome some other group (another storage
 			 * group, or network); in this case try to take the
 			 * first available device from our group
 			 */
@@ -243,7 +254,7 @@
 			 * Attempt to take the first device in this group:
 			 *'first element' flag is set
 			 */
-			found = dev_stor_get(type, &more, di);
+			found = dev_stor_get(type, 1, &more, di);
 
 		} else {
 			errf("group%d - out of order iteration\n", type);
@@ -260,7 +271,7 @@
 
 	if (found)
 		debugf("device found, returning cookie 0x%08x\n",
-		       (u_int32_t)di->cookie);
+			(u_int32_t)di->cookie);
 	else
 		debugf("no device found\n");
 
@@ -281,7 +292,9 @@
 {
 	int i;
 
-	/* check: ide, usb, scsi, mmc */
+	/*
+	 * check: ide, usb, scsi, mmc
+	 */
 	for (i = ENUM_IDE; i < ENUM_MAX; i ++) {
 		if (dev_enum_stor(i, di))
 			return 1;
@@ -290,12 +303,12 @@
 	return 0;
 }
 
-static int dev_stor_is_valid(int type, struct blk_desc *dd)
+static int dev_stor_is_valid(int type, block_dev_desc_t *dd)
 {
 	int i;
 
 	for (i = 0; i < specs[type].max_dev; i++)
-		if (dd == blk_get_dev(specs[type].name, i))
+		if (dd == get_dev(specs[type].name, i))
 			if (dd->type != DEV_TYPE_UNKNOWN)
 				return 1;
 
@@ -310,7 +323,7 @@
 	if (type == ENUM_MAX)
 		return API_ENODEV;
 
-	if (dev_stor_is_valid(type, (struct blk_desc *)cookie))
+	if (dev_stor_is_valid(type, (block_dev_desc_t *)cookie))
 		return 0;
 
 	return API_ENODEV;
@@ -327,10 +340,23 @@
 }
 
 
+static int dev_stor_index(block_dev_desc_t *dd)
+{
+	int i, type;
+
+	type = dev_stor_type(dd);
+	for (i = 0; i < specs[type].max_dev; i++)
+		if (dd == get_dev(specs[type].name, i))
+			return i;
+
+	return (specs[type].max_dev);
+}
+
+
 lbasize_t dev_read_stor(void *cookie, void *buf, lbasize_t len, lbastart_t start)
 {
 	int type;
-	struct blk_desc *dd = (struct blk_desc *)cookie;
+	block_dev_desc_t *dd = (block_dev_desc_t *)cookie;
 
 	if ((type = dev_stor_type(dd)) == ENUM_MAX)
 		return 0;
@@ -338,14 +364,10 @@
 	if (!dev_stor_is_valid(type, dd))
 		return 0;
 
-#ifdef CONFIG_BLK
-	return blk_dread(dd, start, len, buf);
-#else
 	if ((dd->block_read) == NULL) {
 		debugf("no block_read() for device 0x%08x\n", cookie);
 		return 0;
 	}
 
-	return dd->block_read(dd, start, len, buf);
-#endif	/* defined(CONFIG_BLK) */
+	return (dd->block_read(dev_stor_index(dd), start, len, buf));
 }
diff --git a/arch/Kconfig b/arch/Kconfig
index 35e2712..f63cc5a 100644
--- a/arch/Kconfig
+++ b/arch/Kconfig
@@ -1,169 +1,59 @@
-config CREATE_ARCH_SYMLINK
-	bool
-
-config HAVE_ARCH_IOREMAP
-	bool
-
 choice
 	prompt "Architecture select"
 	default SANDBOX
 
 config ARC
 	bool "ARC architecture"
-	select ARCH_EARLY_INIT_R
-	select ARC_TIMER
-	select CLK
-	select HAVE_PRIVATE_LIBGCC
-	select SUPPORT_OF_CONTROL
-	select TIMER
 
 config ARM
 	bool "ARM architecture"
-	select CREATE_ARCH_SYMLINK
-	select HAVE_PRIVATE_LIBGCC if !ARM64
+	select HAVE_PRIVATE_LIBGCC
 	select SUPPORT_OF_CONTROL
 
+config AVR32
+	bool "AVR32 architecture"
+
+config BLACKFIN
+	bool "Blackfin architecture"
+
 config M68K
 	bool "M68000 architecture"
-	select HAVE_PRIVATE_LIBGCC
-	select SYS_BOOT_GET_CMDLINE
-	select SYS_BOOT_GET_KBD
 
 config MICROBLAZE
 	bool "MicroBlaze architecture"
 	select SUPPORT_OF_CONTROL
-	imply CMD_IRQ
 
 config MIPS
 	bool "MIPS architecture"
-	select HAVE_ARCH_IOREMAP
 	select HAVE_PRIVATE_LIBGCC
-	select SUPPORT_OF_CONTROL
 
 config NDS32
 	bool "NDS32 architecture"
-	select SUPPORT_OF_CONTROL
 
 config NIOS2
 	bool "Nios II architecture"
-	select CPU
-	select DM
-	select OF_CONTROL
-	select SUPPORT_OF_CONTROL
-	imply CMD_DM
+
+config OPENRISC
+	bool "OpenRISC architecture"
 
 config PPC
 	bool "PowerPC architecture"
 	select HAVE_PRIVATE_LIBGCC
-	select SUPPORT_OF_CONTROL
-	select SYS_BOOT_GET_CMDLINE
-	select SYS_BOOT_GET_KBD
-
-config RISCV
-	bool "RISC-V architecture"
-	select SUPPORT_OF_CONTROL
-	select OF_CONTROL
-	select DM
-	imply DM_SERIAL
-	imply DM_ETH
-	imply DM_MMC
-	imply DM_SPI
-	imply DM_SPI_FLASH
-	imply BLK
-	imply CLK
-	imply MTD
-	imply TIMER
-	imply CMD_DM
 
 config SANDBOX
 	bool "Sandbox"
-	select BOARD_LATE_INIT
-	select DM
-	select DM_GPIO
-	select DM_I2C
-	select DM_KEYBOARD
-	select DM_MMC
-	select DM_SERIAL
-	select DM_SPI
-	select DM_SPI_FLASH
-	select HAVE_BLOCK_DEVICE
-	select LZO
-	select SPI
 	select SUPPORT_OF_CONTROL
-	imply BITREVERSE
-	select BLOBLIST
-	imply CMD_DM
-	imply CMD_GETTIME
-	imply CMD_HASH
-	imply CMD_IO
-	imply CMD_IOTRACE
-	imply CMD_LZMADEC
-	imply CMD_SATA
-	imply CMD_SF_TEST
-	imply CRC32_VERIFY
-	imply FAT_WRITE
-	imply FIRMWARE
-	imply HASH_VERIFY
-	imply LZMA
-	imply SCSI
-	imply TEE
-	imply AVB_VERIFY
-	imply LIBAVB
-	imply CMD_AVB
-	imply UDP_FUNCTION_FASTBOOT
-	imply VIRTIO_MMIO
-	imply VIRTIO_PCI
-	imply VIRTIO_SANDBOX
-	imply VIRTIO_BLK
-	imply VIRTIO_NET
-	imply DM_SOUND
 
 config SH
 	bool "SuperH architecture"
 	select HAVE_PRIVATE_LIBGCC
 
+config SPARC
+	bool "SPARC architecture"
+
 config X86
 	bool "x86 architecture"
-	select CREATE_ARCH_SYMLINK
-	select DM
-	select DM_PCI
-	select HAVE_ARCH_IOMAP
 	select HAVE_PRIVATE_LIBGCC
-	select OF_CONTROL
-	select PCI
-	select SUPPORT_OF_CONTROL
-	select TIMER
-	select USE_PRIVATE_LIBGCC
-	select X86_TSC_TIMER
-	imply BLK
-	imply CMD_DM
-	imply CMD_FPGA_LOADMK
-	imply CMD_GETTIME
-	imply CMD_IO
-	imply CMD_IRQ
-	imply CMD_PCI
-	imply CMD_SF_TEST
-	imply CMD_ZBOOT
-	imply DM_ETH
-	imply DM_GPIO
-	imply DM_KEYBOARD
-	imply DM_MMC
-	imply DM_RTC
-	imply DM_SCSI
-	imply DM_SERIAL
-	imply DM_SPI
-	imply DM_SPI_FLASH
-	imply DM_USB
-	imply DM_VIDEO
-	imply SYSRESET
-	imply SYSRESET_X86
-	imply USB_ETHER_ASIX
-	imply USB_ETHER_SMSC95XX
-	imply USB_HOST_ETHER
-
-config XTENSA
-	bool "Xtensa architecture"
-	select CREATE_ARCH_SYMLINK
 	select SUPPORT_OF_CONTROL
 
 endchoice
@@ -226,14 +116,16 @@
 
 source "arch/arc/Kconfig"
 source "arch/arm/Kconfig"
+source "arch/avr32/Kconfig"
+source "arch/blackfin/Kconfig"
 source "arch/m68k/Kconfig"
 source "arch/microblaze/Kconfig"
 source "arch/mips/Kconfig"
 source "arch/nds32/Kconfig"
 source "arch/nios2/Kconfig"
+source "arch/openrisc/Kconfig"
 source "arch/powerpc/Kconfig"
 source "arch/sandbox/Kconfig"
 source "arch/sh/Kconfig"
+source "arch/sparc/Kconfig"
 source "arch/x86/Kconfig"
-source "arch/xtensa/Kconfig"
-source "arch/riscv/Kconfig"
diff --git a/arch/arc/Kconfig b/arch/arc/Kconfig
index fa6b344..d3ef58b 100644
--- a/arch/arc/Kconfig
+++ b/arch/arc/Kconfig
@@ -4,170 +4,25 @@
 config SYS_ARCH
 	default "arc"
 
-config SYS_CPU
-	default "arcv1" if ISA_ARCOMPACT
-	default "arcv2" if ISA_ARCV2
-
-choice
-	prompt "ARC Instruction Set"
-	default ISA_ARCOMPACT
-
-config ISA_ARCOMPACT
-	bool "ARCompact ISA"
-	help
-	  The original ARC ISA of ARC600/700 cores
-
-config ISA_ARCV2
-	bool "ARC ISA v2"
-	help
-	  ISA for the Next Generation ARC-HS cores
-
-endchoice
-
-choice
-	prompt "CPU selection"
-	default CPU_ARC770D if ISA_ARCOMPACT
-	default CPU_ARCHS38 if ISA_ARCV2
-
-config CPU_ARC750D
-	bool "ARC 750D"
-	depends on ISA_ARCOMPACT
-	select ARC_MMU_V2
-	help
-	  Choose this option to build an U-Boot for ARC750D CPU.
-
-config CPU_ARC770D
-	bool "ARC 770D"
-	depends on ISA_ARCOMPACT
-	select ARC_MMU_V3
-	help
-	  Choose this option to build an U-Boot for ARC770D CPU.
-
-config CPU_ARCEM6
-	bool "ARC EM6"
-	depends on ISA_ARCV2
-	select ARC_MMU_ABSENT
-	help
-	  Next Generation ARC Core based on ISA-v2 ISA without MMU.
-
-config CPU_ARCHS36
-	bool "ARC HS36"
-	depends on ISA_ARCV2
-	select ARC_MMU_ABSENT
-	help
-	  Next Generation ARC Core based on ISA-v2 ISA without MMU.
-
-config CPU_ARCHS38
-	bool "ARC HS38"
-	depends on ISA_ARCV2
-	select ARC_MMU_V4
-	help
-	  Next Generation ARC Core based on ISA-v2 ISA with MMU.
-
-endchoice
-
-choice
-	prompt "MMU Version"
-	default ARC_MMU_V3 if CPU_ARC770D
-	default ARC_MMU_V2 if CPU_ARC750D
-	default ARC_MMU_ABSENT if CPU_ARCEM6
-	default ARC_MMU_ABSENT if CPU_ARCHS36
-	default ARC_MMU_V4 if CPU_ARCHS38
-
-config ARC_MMU_ABSENT
-	bool "No MMU"
-	help
-	  No MMU
-
-config ARC_MMU_V2
-	bool "MMU v2"
-	depends on CPU_ARC750D
-	help
-	  Fixed the deficiency of v1 - possible thrashing in memcpy sceanrio
-	  when 2 D-TLB and 1 I-TLB entries index into same 2way set.
-
-config ARC_MMU_V3
-	bool "MMU v3"
-	depends on CPU_ARC770D
-	help
-	  Introduced with ARC700 4.10: New Features
-	  Variable Page size (1k-16k), var JTLB size 128 x (2 or 4)
-	  Shared Address Spaces (SASID)
-
-config ARC_MMU_V4
-	bool "MMU v4"
-	depends on CPU_ARCHS38
-	help
-	  Introduced as a part of ARC HS38 release.
-
-endchoice
-
-config CPU_BIG_ENDIAN
-	bool "Enable Big Endian Mode"
-	default n
-	help
-	  Build kernel for Big Endian Mode of ARC CPU
-
-config SYS_ICACHE_OFF
-	bool "Do not use Instruction Cache"
-	default n
-
-config SYS_DCACHE_OFF
-	bool "Do not use Data Cache"
-	default n
-
-menuconfig ARC_DBG
-	bool "ARC debugging"
-	default n
-
-if ARC_DBG
-
-config ARC_DBG_IOC_ENABLE
-	bool "Enable IO coherency unit"
-	depends on CPU_ARCHS38
-	default n
-	help
-	  Enable IO coherency unit to debug problems with caches and
-	  DMA peripherals.
-	  NOTE: as of today linux will not work properly if this option
-	  is enabled in u-boot!
-
-endif
-
 choice
 	prompt "Target select"
-	default TARGET_AXS103
 
 config TARGET_TB100
 	bool "Support tb100"
 
-config TARGET_NSIM
-	bool "Support standalone nSIM & Free nSIM"
+config TARGET_ARCANGEL4
+	bool "Support arcangel4"
+
+config TARGET_ARCANGEL4_BE
+	bool "Support arcangel4-be"
 
 config TARGET_AXS101
-	bool "Support Synopsys Designware SDP board AXS101"
-
-config TARGET_AXS103
-	bool "Support Synopsys Designware SDP board AXS103"
-
-config TARGET_EMSDP
-	bool "Synopsys EM Software Development Platform"
-	select CPU_ARCEM6
-
-config TARGET_HSDK
-	bool "Support Synpsys HS DevelopmentKit board"
-
-config TARGET_IOT_DEVKIT
-	bool "Synopsys Brite IoT Development kit"
-	select CPU_ARCEM6
+	bool "Support axs101"
 
 endchoice
 
 source "board/abilis/tb100/Kconfig"
 source "board/synopsys/Kconfig"
-source "board/synopsys/axs10x/Kconfig"
-source "board/synopsys/emsdp/Kconfig"
-source "board/synopsys/hsdk/Kconfig"
-source "board/synopsys/iot_devkit/Kconfig"
+source "board/synopsys/axs101/Kconfig"
 
 endmenu
diff --git a/arch/arc/Makefile b/arch/arc/Makefile
index 44568f8..03ea6db 100644
--- a/arch/arc/Makefile
+++ b/arch/arc/Makefile
@@ -1,4 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0+
+#
+# SPDX-License-Identifier:	GPL-2.0+
+#
+
+head-y := arch/arc/cpu/$(CPU)/start.o
 
 libs-y += arch/arc/cpu/$(CPU)/
 libs-y += arch/arc/lib/
diff --git a/arch/arc/config.mk b/arch/arc/config.mk
index 18005d9..e408800 100644
--- a/arch/arc/config.mk
+++ b/arch/arc/config.mk
@@ -1,52 +1,33 @@
-# SPDX-License-Identifier: GPL-2.0+
 #
 # Copyright (C) 2013-2014 Synopsys, Inc. All rights reserved.
+#
+# SPDX-License-Identifier:	GPL-2.0+
+#
 
-ifndef CONFIG_CPU_BIG_ENDIAN
+ifndef CONFIG_SYS_BIG_ENDIAN
 CONFIG_SYS_LITTLE_ENDIAN = 1
-else
-CONFIG_SYS_BIG_ENDIAN = 1
 endif
 
 ifdef CONFIG_SYS_LITTLE_ENDIAN
-PLATFORM_LDFLAGS += -EL
-PLATFORM_CPPFLAGS += -mlittle-endian
+ARC_CROSS_COMPILE := arc-buildroot-linux-uclibc-
 endif
 
 ifdef CONFIG_SYS_BIG_ENDIAN
+ARC_CROSS_COMPILE := arceb-buildroot-linux-uclibc-
 PLATFORM_LDFLAGS += -EB
-PLATFORM_CPPFLAGS += -mbig-endian
 endif
 
-ifdef CONFIG_ARC_MMU_VER
-CONFIG_MMU = 1
+ifeq ($(CROSS_COMPILE),)
+CROSS_COMPILE := $(ARC_CROSS_COMPILE)
 endif
 
-ifdef CONFIG_CPU_ARC750D
-PLATFORM_CPPFLAGS += -mcpu=arc700
-endif
-
-ifdef CONFIG_CPU_ARC770D
-PLATFORM_CPPFLAGS += -mcpu=arc700 -mlock -mswape
-endif
-
-ifdef CONFIG_CPU_ARCEM6
-PLATFORM_CPPFLAGS += -mcpu=arcem
-endif
-
-ifdef CONFIG_CPU_ARCHS34
-PLATFORM_CPPFLAGS += -mcpu=archs
-endif
-
-ifdef CONFIG_CPU_ARCHS38
-PLATFORM_CPPFLAGS += -mcpu=archs
-endif
-
-PLATFORM_CPPFLAGS += -ffixed-r25 -D__ARC__ -gdwarf-2 -mno-sdata
-PLATFORM_RELFLAGS += -ffunction-sections -fdata-sections -fno-common
+PLATFORM_CPPFLAGS += -ffixed-r25 -D__ARC__ -gdwarf-2
 
 # Needed for relocation
-LDFLAGS_FINAL += -pie --gc-sections
+LDFLAGS_FINAL += -pie
 
 # Load address for standalone apps
 CONFIG_STANDALONE_LOAD_ADDR ?= 0x82000000
+
+# Support generic board on ARC
+__HAVE_ARCH_GENERIC_BOARD := y
diff --git a/arch/arc/cpu/arc700/Makefile b/arch/arc/cpu/arc700/Makefile
new file mode 100644
index 0000000..cdc5002
--- /dev/null
+++ b/arch/arc/cpu/arc700/Makefile
@@ -0,0 +1,13 @@
+#
+# Copyright (C) 2013-2014 Synopsys, Inc. All rights reserved.
+#
+# SPDX-License-Identifier:	GPL-2.0+
+#
+
+extra-y	+= start.o
+
+obj-y	+= cache.o
+obj-y	+= cpu.o
+obj-y	+= interrupts.o
+obj-y	+= reset.o
+obj-y	+= timer.o
diff --git a/arch/arc/cpu/arc700/cache.c b/arch/arc/cpu/arc700/cache.c
new file mode 100644
index 0000000..39d522d
--- /dev/null
+++ b/arch/arc/cpu/arc700/cache.c
@@ -0,0 +1,138 @@
+/*
+ * Copyright (C) 2013-2014 Synopsys, Inc. All rights reserved.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#include <config.h>
+#include <asm/arcregs.h>
+
+/* Bit values in IC_CTRL */
+#define IC_CTRL_CACHE_DISABLE	(1 << 0)
+
+/* Bit values in DC_CTRL */
+#define DC_CTRL_CACHE_DISABLE	(1 << 0)
+#define DC_CTRL_INV_MODE_FLUSH	(1 << 6)
+#define DC_CTRL_FLUSH_STATUS	(1 << 8)
+
+int icache_status(void)
+{
+	return (read_aux_reg(ARC_AUX_IC_CTRL) & IC_CTRL_CACHE_DISABLE) !=
+	       IC_CTRL_CACHE_DISABLE;
+}
+
+void icache_enable(void)
+{
+	write_aux_reg(ARC_AUX_IC_CTRL, read_aux_reg(ARC_AUX_IC_CTRL) &
+		      ~IC_CTRL_CACHE_DISABLE);
+}
+
+void icache_disable(void)
+{
+	write_aux_reg(ARC_AUX_IC_CTRL, read_aux_reg(ARC_AUX_IC_CTRL) |
+		      IC_CTRL_CACHE_DISABLE);
+}
+
+void invalidate_icache_all(void)
+{
+#ifndef CONFIG_SYS_ICACHE_OFF
+	/* Any write to IC_IVIC register triggers invalidation of entire I$ */
+	write_aux_reg(ARC_AUX_IC_IVIC, 1);
+#endif /* CONFIG_SYS_ICACHE_OFF */
+}
+
+int dcache_status(void)
+{
+	return (read_aux_reg(ARC_AUX_DC_CTRL) & DC_CTRL_CACHE_DISABLE) !=
+		DC_CTRL_CACHE_DISABLE;
+}
+
+void dcache_enable(void)
+{
+	write_aux_reg(ARC_AUX_DC_CTRL, read_aux_reg(ARC_AUX_DC_CTRL) &
+		      ~(DC_CTRL_INV_MODE_FLUSH | DC_CTRL_CACHE_DISABLE));
+}
+
+void dcache_disable(void)
+{
+	write_aux_reg(ARC_AUX_DC_CTRL, read_aux_reg(ARC_AUX_DC_CTRL) |
+		      DC_CTRL_CACHE_DISABLE);
+}
+
+void flush_dcache_all(void)
+{
+	/* Do flush of entire cache */
+	write_aux_reg(ARC_AUX_DC_FLSH, 1);
+
+	/* Wait flush end */
+	while (read_aux_reg(ARC_AUX_DC_CTRL) & DC_CTRL_FLUSH_STATUS)
+		;
+}
+
+#ifndef CONFIG_SYS_DCACHE_OFF
+static void dcache_flush_line(unsigned addr)
+{
+#if (CONFIG_ARC_MMU_VER > 2)
+	write_aux_reg(ARC_AUX_DC_PTAG, addr);
+#endif
+	write_aux_reg(ARC_AUX_DC_FLDL, addr);
+
+	/* Wait flush end */
+	while (read_aux_reg(ARC_AUX_DC_CTRL) & DC_CTRL_FLUSH_STATUS)
+		;
+
+#ifndef CONFIG_SYS_ICACHE_OFF
+	/*
+	 * Invalidate I$ for addresses range just flushed from D$.
+	 * If we try to execute data flushed above it will be valid/correct
+	 */
+#if (CONFIG_ARC_MMU_VER > 2)
+	write_aux_reg(ARC_AUX_IC_PTAG, addr);
+#endif
+	write_aux_reg(ARC_AUX_IC_IVIL, addr);
+#endif /* CONFIG_SYS_ICACHE_OFF */
+}
+#endif /* CONFIG_SYS_DCACHE_OFF */
+
+void flush_dcache_range(unsigned long start, unsigned long end)
+{
+#ifndef CONFIG_SYS_DCACHE_OFF
+	unsigned int addr;
+
+	start = start & (~(CONFIG_SYS_CACHELINE_SIZE - 1));
+	end = end & (~(CONFIG_SYS_CACHELINE_SIZE - 1));
+
+	for (addr = start; addr <= end; addr += CONFIG_SYS_CACHELINE_SIZE)
+		dcache_flush_line(addr);
+#endif /* CONFIG_SYS_DCACHE_OFF */
+}
+
+void invalidate_dcache_range(unsigned long start, unsigned long end)
+{
+#ifndef CONFIG_SYS_DCACHE_OFF
+	unsigned int addr;
+
+	start = start & (~(CONFIG_SYS_CACHELINE_SIZE - 1));
+	end = end & (~(CONFIG_SYS_CACHELINE_SIZE - 1));
+
+	for (addr = start; addr <= end; addr += CONFIG_SYS_CACHELINE_SIZE) {
+#if (CONFIG_ARC_MMU_VER > 2)
+		write_aux_reg(ARC_AUX_DC_PTAG, addr);
+#endif
+		write_aux_reg(ARC_AUX_DC_IVDL, addr);
+	}
+#endif /* CONFIG_SYS_DCACHE_OFF */
+}
+
+void invalidate_dcache_all(void)
+{
+#ifndef CONFIG_SYS_DCACHE_OFF
+	/* Write 1 to DC_IVDC register triggers invalidation of entire D$ */
+	write_aux_reg(ARC_AUX_DC_IVDC, 1);
+#endif /* CONFIG_SYS_DCACHE_OFF */
+}
+
+void flush_cache(unsigned long start, unsigned long size)
+{
+	flush_dcache_range(start, start + size);
+}
diff --git a/arch/arc/cpu/arc700/config.mk b/arch/arc/cpu/arc700/config.mk
new file mode 100644
index 0000000..3206ff4
--- /dev/null
+++ b/arch/arc/cpu/arc700/config.mk
@@ -0,0 +1,7 @@
+#
+# Copyright (C) 2013-2014 Synopsys, Inc. All rights reserved.
+#
+# SPDX-License-Identifier:	GPL-2.0+
+#
+
+PLATFORM_CPPFLAGS += -mA7
diff --git a/arch/arc/cpu/arc700/cpu.c b/arch/arc/cpu/arc700/cpu.c
new file mode 100644
index 0000000..50634b8
--- /dev/null
+++ b/arch/arc/cpu/arc700/cpu.c
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2013-2014 Synopsys, Inc. All rights reserved.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#include <common.h>
+#include <asm/arcregs.h>
+#include <asm/cache.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+int arch_cpu_init(void)
+{
+#ifdef CONFIG_SYS_ICACHE_OFF
+	icache_disable();
+#else
+	icache_enable();
+	invalidate_icache_all();
+#endif
+
+	flush_dcache_all();
+#ifdef CONFIG_SYS_DCACHE_OFF
+	dcache_disable();
+#else
+	dcache_enable();
+#endif
+	timer_init();
+
+/* In simulation (ISS) "CHIPID" and "ARCNUM" are all "ff" */
+	if ((read_aux_reg(ARC_AUX_IDENTITY) & 0xffffff00) == 0xffffff00)
+		gd->arch.running_on_hw = 0;
+	else
+		gd->arch.running_on_hw = 1;
+
+	gd->cpu_clk = CONFIG_SYS_CLK_FREQ;
+	gd->ram_size = CONFIG_SYS_SDRAM_SIZE;
+
+	return 0;
+}
+
+int arch_early_init_r(void)
+{
+	gd->bd->bi_memstart = CONFIG_SYS_SDRAM_BASE;
+	gd->bd->bi_memsize = CONFIG_SYS_SDRAM_SIZE;
+	return 0;
+}
diff --git a/arch/arc/cpu/arc700/interrupts.c b/arch/arc/cpu/arc700/interrupts.c
new file mode 100644
index 0000000..d93a6eb
--- /dev/null
+++ b/arch/arc/cpu/arc700/interrupts.c
@@ -0,0 +1,142 @@
+/*
+ * Copyright (C) 2013-2014 Synopsys, Inc. All rights reserved.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#include <common.h>
+#include <asm/arcregs.h>
+#include <asm/ptrace.h>
+
+/* Bit values in STATUS32 */
+#define E1_MASK		(1 << 1)	/* Level 1 interrupts enable */
+#define E2_MASK		(1 << 2)	/* Level 2 interrupts enable */
+
+int interrupt_init(void)
+{
+	return 0;
+}
+
+/*
+ * returns true if interrupts had been enabled before we disabled them
+ */
+int disable_interrupts(void)
+{
+	int status = read_aux_reg(ARC_AUX_STATUS32);
+	int state = (status | E1_MASK | E2_MASK) ? 1 : 0;
+
+	status &= ~(E1_MASK | E2_MASK);
+	/* STATUS32 register is updated indirectly with "FLAG" instruction */
+	__asm__("flag %0" : : "r" (status));
+	return state;
+}
+
+void enable_interrupts(void)
+{
+	unsigned int status = read_aux_reg(ARC_AUX_STATUS32);
+
+	status |= E1_MASK | E2_MASK;
+	/* STATUS32 register is updated indirectly with "FLAG" instruction */
+	__asm__("flag %0" : : "r" (status));
+}
+
+static void print_reg_file(long *reg_rev, int start_num)
+{
+	unsigned int i;
+
+	/* Print 3 registers per line */
+	for (i = start_num; i < start_num + 25; i++) {
+		printf("r%02u: 0x%08lx\t", i, (unsigned long)*reg_rev);
+		if (((i + 1) % 3) == 0)
+			printf("\n");
+
+		/* Because pt_regs has registers reversed */
+		reg_rev--;
+	}
+
+	/* Add new-line if none was inserted in the end of loop above */
+	if (((i + 1) % 3) != 0)
+		printf("\n");
+}
+
+void show_regs(struct pt_regs *regs)
+{
+	printf("RET:\t0x%08lx\nBLINK:\t0x%08lx\nSTAT32:\t0x%08lx\n",
+	       regs->ret, regs->blink, regs->status32);
+	printf("GP: 0x%08lx\t r25: 0x%08lx\t\n", regs->r26, regs->r25);
+	printf("BTA: 0x%08lx\t SP: 0x%08lx\t FP: 0x%08lx\n", regs->bta,
+	       regs->sp, regs->fp);
+	printf("LPS: 0x%08lx\tLPE: 0x%08lx\tLPC: 0x%08lx\n", regs->lp_start,
+	       regs->lp_end, regs->lp_count);
+
+	print_reg_file(&(regs->r0), 0);
+}
+
+void bad_mode(struct pt_regs *regs)
+{
+	if (regs)
+		show_regs(regs);
+
+	panic("Resetting CPU ...\n");
+}
+
+void do_memory_error(unsigned long address, struct pt_regs *regs)
+{
+	printf("Memory error exception @ 0x%lx\n", address);
+	bad_mode(regs);
+}
+
+void do_instruction_error(unsigned long address, struct pt_regs *regs)
+{
+	printf("Instruction error exception @ 0x%lx\n", address);
+	bad_mode(regs);
+}
+
+void do_machine_check_fault(unsigned long address, struct pt_regs *regs)
+{
+	printf("Machine check exception @ 0x%lx\n", address);
+	bad_mode(regs);
+}
+
+void do_interrupt_handler(void)
+{
+	printf("Interrupt fired\n");
+	bad_mode(0);
+}
+
+void do_itlb_miss(struct pt_regs *regs)
+{
+	printf("I TLB miss exception\n");
+	bad_mode(regs);
+}
+
+void do_dtlb_miss(struct pt_regs *regs)
+{
+	printf("D TLB miss exception\n");
+	bad_mode(regs);
+}
+
+void do_tlb_prot_violation(unsigned long address, struct pt_regs *regs)
+{
+	printf("TLB protection violation or misaligned access @ 0x%lx\n",
+	       address);
+	bad_mode(regs);
+}
+
+void do_privilege_violation(struct pt_regs *regs)
+{
+	printf("Privilege violation exception\n");
+	bad_mode(regs);
+}
+
+void do_trap(struct pt_regs *regs)
+{
+	printf("Trap exception\n");
+	bad_mode(regs);
+}
+
+void do_extension(struct pt_regs *regs)
+{
+	printf("Extension instruction exception\n");
+	bad_mode(regs);
+}
diff --git a/arch/arc/cpu/arc700/reset.c b/arch/arc/cpu/arc700/reset.c
new file mode 100644
index 0000000..98ebf1d
--- /dev/null
+++ b/arch/arc/cpu/arc700/reset.c
@@ -0,0 +1,19 @@
+/*
+ * Copyright (C) 2013-2014 Synopsys, Inc. All rights reserved.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#include <command.h>
+#include <common.h>
+
+int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
+{
+	printf("Put your restart handler here\n");
+
+#ifdef DEBUG
+	/* Stop debug session here */
+	__asm__("brk");
+#endif
+	return 0;
+}
diff --git a/arch/arc/cpu/arc700/start.S b/arch/arc/cpu/arc700/start.S
new file mode 100644
index 0000000..563513b
--- /dev/null
+++ b/arch/arc/cpu/arc700/start.S
@@ -0,0 +1,241 @@
+/*
+ * Copyright (C) 2013-2014 Synopsys, Inc. All rights reserved.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#include <asm-offsets.h>
+#include <config.h>
+#include <asm/arcregs.h>
+
+/*
+ * Note on the LD/ST addressing modes with address register write-back
+ *
+ * LD.a same as LD.aw
+ *
+ * LD.a    reg1, [reg2, x]  => Pre Incr
+ *      Eff Addr for load = [reg2 + x]
+ *
+ * LD.ab   reg1, [reg2, x]  => Post Incr
+ *      Eff Addr for load = [reg2]
+ */
+
+.macro PUSH reg
+	st.a	\reg, [%sp, -4]
+.endm
+
+.macro PUSHAX aux
+	lr	%r9, [\aux]
+	PUSH	%r9
+.endm
+
+.macro  SAVE_R1_TO_R24
+	PUSH	%r1
+	PUSH	%r2
+	PUSH	%r3
+	PUSH	%r4
+	PUSH	%r5
+	PUSH	%r6
+	PUSH	%r7
+	PUSH	%r8
+	PUSH	%r9
+	PUSH	%r10
+	PUSH	%r11
+	PUSH	%r12
+	PUSH	%r13
+	PUSH	%r14
+	PUSH	%r15
+	PUSH	%r16
+	PUSH	%r17
+	PUSH	%r18
+	PUSH	%r19
+	PUSH	%r20
+	PUSH	%r21
+	PUSH	%r22
+	PUSH	%r23
+	PUSH	%r24
+.endm
+
+.macro SAVE_ALL_SYS
+
+	st	%r0, [%sp]
+	lr	%r0, [%ecr]
+	st	%r0, [%sp, 8]	/* ECR */
+	st	%sp, [%sp, 4]
+
+	SAVE_R1_TO_R24
+	PUSH	%r25
+	PUSH	%gp
+	PUSH	%fp
+	PUSH	%blink
+	PUSHAX	%eret
+	PUSHAX	%erstatus
+	PUSH	%lp_count
+	PUSHAX	%lp_end
+	PUSHAX	%lp_start
+	PUSHAX	%erbta
+.endm
+
+.align 4
+.globl _start
+_start:
+	/* Critical system events */
+	j	reset			/* 0 - 0x000 */
+	j	memory_error		/* 1 - 0x008 */
+	j	instruction_error	/* 2 - 0x010 */
+
+	/* Device interrupts */
+.rept	29
+	j	interrupt_handler	/* 3:31 - 0x018:0xF8 */
+.endr
+	/* Exceptions */
+	j	EV_MachineCheck		/* 0x100, Fatal Machine check  (0x20) */
+	j	EV_TLBMissI		/* 0x108, Intruction TLB miss  (0x21) */
+	j	EV_TLBMissD		/* 0x110, Data TLB miss        (0x22) */
+	j	EV_TLBProtV		/* 0x118, Protection Violation (0x23)
+							or Misaligned Access  */
+	j	EV_PrivilegeV		/* 0x120, Privilege Violation  (0x24) */
+	j	EV_Trap			/* 0x128, Trap exception       (0x25) */
+	j	EV_Extension		/* 0x130, Extn Intruction Excp (0x26) */
+
+memory_error:
+	SAVE_ALL_SYS
+	lr	%r0, [%efa]
+	mov	%r1, %sp
+	j	do_memory_error
+
+instruction_error:
+	SAVE_ALL_SYS
+	lr	%r0, [%efa]
+	mov	%r1, %sp
+	j	do_instruction_error
+
+interrupt_handler:
+	/* Todo - save and restore CPU context when interrupts will be in use */
+	bl	do_interrupt_handler
+	rtie
+
+EV_MachineCheck:
+	SAVE_ALL_SYS
+	lr	%r0, [%efa]
+	mov	%r1, %sp
+	j	do_machine_check_fault
+
+EV_TLBMissI:
+	SAVE_ALL_SYS
+	mov	%r0, %sp
+	j	do_itlb_miss
+
+EV_TLBMissD:
+	SAVE_ALL_SYS
+	mov	%r0, %sp
+	j	do_dtlb_miss
+
+EV_TLBProtV:
+	SAVE_ALL_SYS
+	lr	%r0, [%efa]
+	mov	%r1, %sp
+	j	do_tlb_prot_violation
+
+EV_PrivilegeV:
+	SAVE_ALL_SYS
+	mov	%r0, %sp
+	j	do_privilege_violation
+
+EV_Trap:
+	SAVE_ALL_SYS
+	mov	%r0, %sp
+	j	do_trap
+
+EV_Extension:
+	SAVE_ALL_SYS
+	mov	%r0, %sp
+	j	do_extension
+
+
+reset:
+	/* Setup interrupt vector base that matches "__text_start" */
+	sr	__text_start, [ARC_AUX_INTR_VEC_BASE]
+
+	/* Setup stack pointer */
+	mov	%sp, CONFIG_SYS_INIT_SP_ADDR
+	mov	%fp, %sp
+
+	/* Clear bss */
+	mov	%r0, __bss_start
+	mov	%r1, __bss_end
+
+clear_bss:
+	st.ab	0, [%r0, 4]
+	brlt	%r0, %r1, clear_bss
+
+	/* Zero the one and only argument of "board_init_f" */
+	mov_s	%r0, 0
+	j	board_init_f
+
+/*
+ * void relocate_code (addr_sp, gd, addr_moni)
+ *
+ * This "function" does not return, instead it continues in RAM
+ * after relocating the monitor code.
+ *
+ * r0 = start_addr_sp
+ * r1 = new__gd
+ * r2 = relocaddr
+ */
+.align 4
+.globl	relocate_code
+relocate_code:
+	/*
+	 * r0-r12 might be clobbered by C functions
+	 * so we use r13-r16 for storage here
+	 */
+	mov	%r13, %r0		/* save addr_sp */
+	mov	%r14, %r1		/* save addr of gd */
+	mov	%r15, %r2		/* save addr of destination */
+
+	mov	%r16, %r2		/* %r9 - relocation offset */
+	sub	%r16, %r16, __image_copy_start
+
+/* Set up the stack */
+stack_setup:
+	mov	%sp, %r13
+	mov	%fp, %sp
+
+/* Check if monitor is loaded right in place for relocation */
+	mov	%r0, __image_copy_start
+	cmp	%r0, %r15		/* skip relocation if code loaded */
+	bz	do_board_init_r		/* in target location already */
+
+/* Copy data (__image_copy_start - __image_copy_end) to new location */
+	mov	%r1, %r15
+	mov	%r2, __image_copy_end
+	sub	%r2, %r2, %r0		/* r3 <- amount of bytes to copy */
+	asr	%r2, %r2, 2		/* r3 <- amount of words to copy */
+	mov	%lp_count, %r2
+	lp	copy_end
+	ld.ab	%r2,[%r0,4]
+	st.ab	%r2,[%r1,4]
+copy_end:
+
+/* Fix relocations related issues */
+	bl	do_elf_reloc_fixups
+#ifndef CONFIG_SYS_ICACHE_OFF
+	bl	invalidate_icache_all
+#endif
+#ifndef CONFIG_SYS_DCACHE_OFF
+	bl	flush_dcache_all
+#endif
+
+/* Update position of intterupt vector table */
+	lr	%r0, [ARC_AUX_INTR_VEC_BASE]	/* Read current position */
+	add	%r0, %r0, %r16			/* Update address */
+	sr	%r0, [ARC_AUX_INTR_VEC_BASE]	/* Write new position */
+
+do_board_init_r:
+/* Prepare for exection of "board_init_r" in relocated monitor */
+	mov	%r2, board_init_r	/* old address of "board_init_r()" */
+	add	%r2, %r2, %r16		/* new address of "board_init_r()" */
+	mov	%r0, %r14		/* 1-st parameter: gd_t */
+	mov	%r1, %r15		/* 2-nd parameter: dest_addr */
+	j	[%r2]
diff --git a/arch/arc/cpu/arc700/timer.c b/arch/arc/cpu/arc700/timer.c
new file mode 100644
index 0000000..a0acbbc
--- /dev/null
+++ b/arch/arc/cpu/arc700/timer.c
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2013-2014 Synopsys, Inc. All rights reserved.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#include <asm/arcregs.h>
+
+#define NH_MODE	(1 << 1)	/* Disable timer if CPU is halted */
+
+int timer_init(void)
+{
+	write_aux_reg(ARC_AUX_TIMER0_CTRL, NH_MODE);
+	/* Set max value for counter/timer */
+	write_aux_reg(ARC_AUX_TIMER0_LIMIT, 0xffffffff);
+	/* Set initial count value and restart counter/timer */
+	write_aux_reg(ARC_AUX_TIMER0_CNT, 0);
+	return 0;
+}
+
+unsigned long timer_read_counter(void)
+{
+	return read_aux_reg(ARC_AUX_TIMER0_CNT);
+}
diff --git a/arch/arc/cpu/arc700/u-boot.lds b/arch/arc/cpu/arc700/u-boot.lds
new file mode 100644
index 0000000..2d01b21
--- /dev/null
+++ b/arch/arc/cpu/arc700/u-boot.lds
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2013-2014 Synopsys, Inc. All rights reserved.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+OUTPUT_FORMAT("elf32-littlearc", "elf32-littlearc", "elf32-littlearc")
+OUTPUT_ARCH(arc)
+ENTRY(_start)
+SECTIONS
+{
+	. = ALIGN(4);
+	.text :	{
+		*(.__text_start)
+		*(.__image_copy_start)
+		CPUDIR/start.o (.text*)
+		*(.text*)
+	}
+
+	. = ALIGN(4);
+	.text_end :
+	{
+		*(.__text_end)
+	}
+
+	. = ALIGN(4);
+	.rodata : {
+		*(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
+	}
+
+	. = ALIGN(4);
+	.data : {
+		*(.data*)
+	}
+
+	. = ALIGN(4);
+	.u_boot_list : {
+		KEEP(*(SORT(.u_boot_list*)));
+	}
+
+	. = ALIGN(4);
+	.rel_dyn_start : {
+		*(.__rel_dyn_start)
+	}
+
+	.rela.dyn : {
+		*(.rela.dyn)
+	}
+
+	.rel_dyn_end : {
+		*(.__rel_dyn_end)
+	}
+
+	. = ALIGN(4);
+	.bss_start : {
+		*(.__bss_start);
+	}
+
+	.bss : {
+		*(.bss*)
+	}
+
+	.bss_end : {
+		*(.__bss_end);
+	}
+
+	. = ALIGN(4);
+	.image_copy_end : {
+		*(.__image_copy_end)
+		*(.__init_end)
+	}
+}
diff --git a/arch/arc/cpu/arcv1/Makefile b/arch/arc/cpu/arcv1/Makefile
deleted file mode 100644
index 4d42ac6..0000000
--- a/arch/arc/cpu/arcv1/Makefile
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: GPL-2.0+
-#
-# Copyright (C) 2013-2014 Synopsys, Inc. All rights reserved.
-
-obj-y += ivt.o
diff --git a/arch/arc/cpu/arcv1/ivt.S b/arch/arc/cpu/arcv1/ivt.S
deleted file mode 100644
index 3d63430..0000000
--- a/arch/arc/cpu/arcv1/ivt.S
+++ /dev/null
@@ -1,26 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0+ */
-/*
- * Copyright (C) 2013-2014 Synopsys, Inc. All rights reserved.
- */
-
-.section .ivt, "ax",@progbits
-.align 4
-_ivt:
-	/* Critical system events */
-	j	_start			/* 0 - 0x000 */
-	j	memory_error		/* 1 - 0x008 */
-	j	instruction_error	/* 2 - 0x010 */
-
-	/* Device interrupts */
-.rept	29
-	j	interrupt_handler	/* 3:31 - 0x018:0xF8 */
-.endr
-	/* Exceptions */
-	j	EV_MachineCheck		/* 0x100, Fatal Machine check  (0x20) */
-	j	EV_TLBMissI		/* 0x108, Intruction TLB miss  (0x21) */
-	j	EV_TLBMissD		/* 0x110, Data TLB miss        (0x22) */
-	j	EV_TLBProtV		/* 0x118, Protection Violation (0x23)
-							or Misaligned Access  */
-	j	EV_PrivilegeV		/* 0x120, Privilege Violation  (0x24) */
-	j	EV_Trap			/* 0x128, Trap exception       (0x25) */
-	j	EV_Extension		/* 0x130, Extn Intruction Excp (0x26) */
diff --git a/arch/arc/cpu/arcv2/Makefile b/arch/arc/cpu/arcv2/Makefile
deleted file mode 100644
index ab74026..0000000
--- a/arch/arc/cpu/arcv2/Makefile
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: GPL-2.0+
-#
-# Copyright (C) 2013-2015 Synopsys, Inc. All rights reserved.
-
-obj-y += ivt.o
diff --git a/arch/arc/cpu/arcv2/ivt.S b/arch/arc/cpu/arcv2/ivt.S
deleted file mode 100644
index 3f5b409..0000000
--- a/arch/arc/cpu/arcv2/ivt.S
+++ /dev/null
@@ -1,31 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0+ */
-/*
- * Copyright (C) 2013-2015 Synopsys, Inc. All rights reserved.
- */
-
-.section .ivt, "a",@progbits
-.align 4
-	/* Critical system events */
-.word	_start			/* 0x00 - Reset */
-.word	memory_error		/* 0x01 - Memory Error */
-.word	instruction_error	/* 0x02 - Instruction Error */
-
-	/* Exceptions */
-.word	EV_MachineCheck		/* 0x03 - Fatal Machine check */
-.word	EV_TLBMissI		/* 0x04 - Intruction TLB miss */
-.word	EV_TLBMissD		/* 0x05 - Data TLB miss */
-.word	EV_TLBProtV		/* 0x06 - Protection Violation or Misaligned Access */
-.word	EV_PrivilegeV		/* 0x07 - Privilege Violation */
-.word	EV_SWI			/* 0x08 - Software Interrupt */
-.word	EV_Trap			/* 0x09 - Trap */
-.word	EV_Extension		/* 0x0A - Extension Intruction Exception */
-.word	EV_DivZero		/* 0x0B - Division by Zero */
-.word	EV_DCError		/* 0x0C - Data cache consistency error */
-.word	EV_Maligned		/* 0x0D - Misaligned data access */
-.word	0			/* 0x0E - Unused */
-.word	0			/* 0x0F - Unused */
-
-	/* Device interrupts */
-.rept	240
-.word	interrupt_handler	/* 0x10 - 0xFF */
-.endr
diff --git a/arch/arc/cpu/u-boot.lds b/arch/arc/cpu/u-boot.lds
deleted file mode 100644
index e12145c..0000000
--- a/arch/arc/cpu/u-boot.lds
+++ /dev/null
@@ -1,63 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0+ */
-/*
- * Copyright (C) 2013-2014 Synopsys, Inc. All rights reserved.
- */
-
-#include <config.h>
-
-OUTPUT_FORMAT("elf32-littlearc", "elf32-bigarc", "elf32-littlearc")
-OUTPUT_ARCH(arc)
-ENTRY(_start)
-SECTIONS
-{
-	. = CONFIG_SYS_TEXT_BASE;
-	__image_copy_start = .;
-	. = ALIGN(1024);
-	__ivt_start = .;
-	.ivt :
-	{
-		KEEP(*(.ivt))
-	}
-	__ivt_end = .;
-
-	. = ALIGN(1024);
-	__text_start = .;
-	.text :	{
-		arch/arc/lib/start.o (.text*)
-		*(.text*)
-	}
-	__text_end = .;
-
-	. = ALIGN(4);
-	.rodata : {
-		*(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
-	}
-
-	. = ALIGN(4);
-	.data : {
-		*(.data*)
-	}
-
-	. = ALIGN(4);
-	.u_boot_list : {
-		KEEP(*(SORT(.u_boot_list*)));
-	}
-
-	. = ALIGN(4);
-	__rel_dyn_start = .;
-	.rela.dyn : {
-		*(.rela.dyn)
-	}
-	__rel_dyn_end = .;
-
-	. = ALIGN(4);
-	__bss_start = .;
-	.bss : {
-		*(.bss*)
-	}
-	__bss_end = .;
-
-	. = ALIGN(4);
-	__image_copy_end = .;
-	__init_end = .;
-}
diff --git a/arch/arc/dts/Makefile b/arch/arc/dts/Makefile
deleted file mode 100644
index 4f1e463..0000000
--- a/arch/arc/dts/Makefile
+++ /dev/null
@@ -1,19 +0,0 @@
-# SPDX-License-Identifier: GPL-2.0+
-
-dtb-$(CONFIG_TARGET_AXS101) +=  axs101.dtb
-dtb-$(CONFIG_TARGET_AXS103) +=  axs103.dtb
-dtb-$(CONFIG_TARGET_NSIM) +=  nsim.dtb
-dtb-$(CONFIG_TARGET_TB100) +=  abilis_tb100.dtb
-dtb-$(CONFIG_TARGET_EMSDP) +=  emsdp.dtb
-dtb-$(CONFIG_TARGET_HSDK) +=  hsdk.dtb
-dtb-$(CONFIG_TARGET_IOT_DEVKIT) +=  iot_devkit.dtb
-
-targets += $(dtb-y)
-
-DTC_FLAGS += -R 4 -p 0x1000
-
-PHONY += dtbs
-dtbs: $(addprefix $(obj)/, $(dtb-y))
-	@:
-
-clean-files := *.dtb
diff --git a/arch/arc/dts/abilis_tb100.dts b/arch/arc/dts/abilis_tb100.dts
deleted file mode 100644
index 19e45b9..0000000
--- a/arch/arc/dts/abilis_tb100.dts
+++ /dev/null
@@ -1,31 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * Copyright (C) 2015 Synopsys, Inc. (www.synopsys.com)
- */
-/dts-v1/;
-
-#include "skeleton.dtsi"
-
-/ {
-	model = "abilis,tb100";
-
-	aliases {
-		console = &uart0;
-	};
-
-	cpu_card {
-		core_clk: core_clk {
-			#clock-cells = <0>;
-			compatible = "fixed-clock";
-			clock-frequency = <500000000>;
-			u-boot,dm-pre-reloc;
-		};
-	};
-
-	uart0: serial@ff100000 {
-			compatible = "snps,dw-apb-uart";
-			reg = <0xff100000 0x1000>;
-			reg-shift = <2>;
-			reg-io-width = <4>;
-	};
-};
diff --git a/arch/arc/dts/axc001.dtsi b/arch/arc/dts/axc001.dtsi
deleted file mode 100644
index 412580a..0000000
--- a/arch/arc/dts/axc001.dtsi
+++ /dev/null
@@ -1,18 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * Copyright (C) 2017 Synopsys, Inc. All rights reserved.
- */
-
-/include/ "skeleton.dtsi"
-
-/ {
-	cpu_card {
-		core_clk: core_clk {
-			#clock-cells = <0>;
-			compatible = "fixed-clock";
-			clock-frequency = <750000000>;
-			u-boot,dm-pre-reloc;
-		};
-	};
-};
-
diff --git a/arch/arc/dts/axc003.dtsi b/arch/arc/dts/axc003.dtsi
deleted file mode 100644
index 75a9de6..0000000
--- a/arch/arc/dts/axc003.dtsi
+++ /dev/null
@@ -1,18 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * Copyright (C) 2017 Synopsys, Inc. All rights reserved.
- */
-
-/include/ "skeleton.dtsi"
-
-/ {
-	cpu_card {
-		core_clk: core_clk {
-			#clock-cells = <0>;
-			compatible = "fixed-clock";
-			clock-frequency = <100000000>;
-			u-boot,dm-pre-reloc;
-		};
-	};
-};
-
diff --git a/arch/arc/dts/axs101.dts b/arch/arc/dts/axs101.dts
deleted file mode 100644
index fc9fa93..0000000
--- a/arch/arc/dts/axs101.dts
+++ /dev/null
@@ -1,18 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * Copyright (C) 2017 Synopsys, Inc. All rights reserved.
- */
-/dts-v1/;
-
-/include/ "axc001.dtsi"
-/include/ "axs10x_mb.dtsi"
-
-
-/ {
-	model = "snps,axs101";
-
-	chosen {
-		stdout-path = &uart0;
-	};
-};
-
diff --git a/arch/arc/dts/axs103.dts b/arch/arc/dts/axs103.dts
deleted file mode 100644
index 6e2dd00..0000000
--- a/arch/arc/dts/axs103.dts
+++ /dev/null
@@ -1,18 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * Copyright (C) 2017 Synopsys, Inc. All rights reserved.
- */
-/dts-v1/;
-
-/include/ "axc003.dtsi"
-/include/ "axs10x_mb.dtsi"
-
-
-/ {
-	model = "snps,axs103";
-
-	chosen {
-		stdout-path = &uart0;
-	};
-};
-
diff --git a/arch/arc/dts/axs10x_mb.dtsi b/arch/arc/dts/axs10x_mb.dtsi
deleted file mode 100644
index dfc0381..0000000
--- a/arch/arc/dts/axs10x_mb.dtsi
+++ /dev/null
@@ -1,94 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * Copyright (C) 2017 Synopsys, Inc. All rights reserved.
- */
-
-/ {
-	aliases {
-		spi0 = &spi0;
-	};
-
-	axs10x_mb@e0000000 {
-		compatible = "simple-bus";
-		#address-cells = <1>;
-		#size-cells = <1>;
-		ranges = <0x00000000 0xe0000000 0x10000000>;
-		u-boot,dm-pre-reloc;
-
-		clocks {
-			compatible = "simple-bus";
-			u-boot,dm-pre-reloc;
-
-			apbclk: apbclk {
-				compatible = "fixed-clock";
-				clock-frequency = <50000000>;
-				#clock-cells = <0>;
-			};
-
-			uartclk: uartclk {
-				compatible = "fixed-clock";
-				clock-frequency = <33333333>;
-				#clock-cells = <0>;
-				u-boot,dm-pre-reloc;
-			};
-		};
-
-		ethernet@18000 {
-			compatible = "altr,socfpga-stmmac";
-			reg = < 0x18000 0x2000 >;
-			phy-mode = "gmii";
-			snps,pbl = < 32 >;
-			clocks = <&apbclk>;
-			clock-names = "stmmaceth";
-			max-speed = <100>;
-		};
-
-		ehci@0x40000 {
-			compatible = "generic-ehci";
-			reg = < 0x40000 0x100 >;
-		};
-
-		ohci@0x60000 {
-			compatible = "generic-ohci";
-			reg = < 0x60000 0x100 >;
-		};
-
-		uart0: serial0@22000 {
-			compatible = "snps,dw-apb-uart";
-			reg = <0x22000 0x100>;
-			clocks = <&uartclk>;
-			reg-shift = <2>;
-			reg-io-width = <4>;
-		};
-
-		spi0: spi@0 {
-			compatible = "snps,dw-apb-ssi";
-			reg = <0x0 0x100>;
-			#address-cells = <1>;
-			#size-cells = <0>;
-			spi-max-frequency = <4000000>;
-			clocks = <&apbclk>;
-			clock-names = "spi_clk";
-			cs-gpio = <&cs_gpio 0>;
-			spi_flash@0 {
-				compatible = "spi-flash";
-				reg = <0>;
-				spi-max-frequency = <4000000>;
-			};
-		};
-
-		cs_gpio: gpio@11218 {
-			compatible = "snps,creg-gpio";
-			reg = <0x11218 0x4>;
-			gpio-controller;
-			#gpio-cells = <1>;
-			gpio-bank-name = "axs-spi-cs";
-			gpio-count = <1>;
-			gpio-first-shift = <0>;
-			gpio-bit-per-line = <2>;
-			gpio-activate-val = <1>;
-			gpio-deactivate-val = <3>;
-			gpio-default-val = <1>;
-		};
-	};
-};
diff --git a/arch/arc/dts/emsdp.dts b/arch/arc/dts/emsdp.dts
deleted file mode 100644
index d307b95..0000000
--- a/arch/arc/dts/emsdp.dts
+++ /dev/null
@@ -1,35 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * Copyright (C) 2018 Synopsys, Inc. All rights reserved.
- */
-/dts-v1/;
-
-#include "skeleton.dtsi"
-
-/ {
-	model = "snps,emsdp";
-
-	#address-cells = <1>;
-	#size-cells = <1>;
-
-	aliases {
-		console = &uart0;
-	};
-
-	cpu_card {
-		core_clk: core_clk {
-			#clock-cells = <0>;
-			compatible = "fixed-clock";
-			clock-frequency = <40000000>;
-			u-boot,dm-pre-reloc;
-		};
-	};
-
-	uart0: serial0@f0004000 {
-		compatible = "snps,dw-apb-uart";
-		clock-frequency = <100000000>;
-		reg = <0xf0004000 0x1000>;
-		reg-shift = <2>;
-		reg-io-width = <4>;
-	};
-};
diff --git a/arch/arc/dts/hsdk.dts b/arch/arc/dts/hsdk.dts
deleted file mode 100644
index f024b96..0000000
--- a/arch/arc/dts/hsdk.dts
+++ /dev/null
@@ -1,118 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * Copyright (C) 2017 Synopsys, Inc. All rights reserved.
- */
-/dts-v1/;
-
-#include "skeleton.dtsi"
-#include "dt-bindings/clock/snps,hsdk-cgu.h"
-
-/ {
-	model = "snps,hsdk";
-
-	#address-cells = <1>;
-	#size-cells = <1>;
-
-	aliases {
-		console = &uart0;
-		spi0 = &spi0;
-	};
-
-	cpu_card {
-		core_clk: core_clk {
-			#clock-cells = <0>;
-			compatible = "fixed-clock";
-			clock-frequency = <500000000>;
-			u-boot,dm-pre-reloc;
-		};
-	};
-
-	clk-fmeas {
-		clocks = <&cgu_clk CLK_ARC_PLL>, <&cgu_clk CLK_SYS_PLL>,
-			 <&cgu_clk CLK_TUN_PLL>, <&cgu_clk CLK_DDR_PLL>,
-			 <&cgu_clk CLK_ARC>, <&cgu_clk CLK_HDMI_PLL>,
-			 <&cgu_clk CLK_TUN_TUN>, <&cgu_clk CLK_HDMI>,
-			 <&cgu_clk CLK_SYS_APB>, <&cgu_clk CLK_SYS_AXI>,
-			 <&cgu_clk CLK_SYS_ETH>, <&cgu_clk CLK_SYS_USB>,
-			 <&cgu_clk CLK_SYS_SDIO>, <&cgu_clk CLK_SYS_HDMI>,
-			 <&cgu_clk CLK_SYS_GFX_CORE>, <&cgu_clk CLK_SYS_GFX_DMA>,
-			 <&cgu_clk CLK_SYS_GFX_CFG>, <&cgu_clk CLK_SYS_DMAC_CORE>,
-			 <&cgu_clk CLK_SYS_DMAC_CFG>, <&cgu_clk CLK_SYS_SDIO_REF>,
-			 <&cgu_clk CLK_SYS_SPI_REF>, <&cgu_clk CLK_SYS_I2C_REF>,
-			 <&cgu_clk CLK_SYS_UART_REF>, <&cgu_clk CLK_SYS_EBI_REF>,
-			 <&cgu_clk CLK_TUN_ROM>, <&cgu_clk CLK_TUN_PWM>;
-		clock-names = "cpu-pll", "sys-pll",
-			      "tun-pll", "ddr-clk",
-			      "cpu-clk", "hdmi-pll",
-			      "tun-clk", "hdmi-clk",
-			      "apb-clk", "axi-clk",
-			      "eth-clk", "usb-clk",
-			      "sdio-clk", "hdmi-sys-clk",
-			      "gfx-core-clk", "gfx-dma-clk",
-			      "gfx-cfg-clk", "dmac-core-clk",
-			      "dmac-cfg-clk", "sdio-ref-clk",
-			      "spi-clk", "i2c-clk",
-			      "uart-clk", "ebi-clk",
-			      "rom-clk", "pwm-clk";
-	};
-
-	cgu_clk: cgu-clk@f0000000 {
-		compatible = "snps,hsdk-cgu-clock";
-		reg = <0xf0000000 0x10>, <0xf00014B8 0x4>;
-		#clock-cells = <1>;
-	};
-
-	uart0: serial0@f0005000 {
-		compatible = "snps,dw-apb-uart";
-		reg = <0xf0005000 0x1000>;
-		reg-shift = <2>;
-		reg-io-width = <4>;
-	};
-
-	ethernet@f0008000 {
-		#interrupt-cells = <1>;
-		compatible = "altr,socfpga-stmmac";
-		reg = <0xf0008000 0x2000>;
-		phy-mode = "gmii";
-	};
-
-	ehci@0xf0040000 {
-		compatible = "generic-ehci";
-		reg = <0xf0040000 0x100>;
-	};
-
-	ohci@0xf0060000 {
-		compatible = "generic-ohci";
-		reg = <0xf0060000 0x100>;
-	};
-
-	spi0: spi@f0020000 {
-		compatible = "snps,dw-apb-ssi";
-		reg = <0xf0020000 0x1000>;
-		#address-cells = <1>;
-		#size-cells = <0>;
-		spi-max-frequency = <4000000>;
-		clocks = <&cgu_clk CLK_SYS_SPI_REF>;
-		clock-names = "spi_clk";
-		cs-gpio = <&cs_gpio 0>;
-		spi_flash@0 {
-			compatible = "spi-flash";
-			reg = <0>;
-			spi-max-frequency = <4000000>;
-		};
-	};
-
-	cs_gpio: gpio@f00014b0 {
-		compatible = "snps,creg-gpio";
-		reg = <0xf00014b0 0x4>;
-		gpio-controller;
-		#gpio-cells = <1>;
-		gpio-bank-name = "hsdk-spi-cs";
-		gpio-count = <1>;
-		gpio-first-shift = <0>;
-		gpio-bit-per-line = <2>;
-		gpio-activate-val = <2>;
-		gpio-deactivate-val = <3>;
-		gpio-default-val = <1>;
-	};
-};
diff --git a/arch/arc/dts/iot_devkit.dts b/arch/arc/dts/iot_devkit.dts
deleted file mode 100644
index ebf5a95..0000000
--- a/arch/arc/dts/iot_devkit.dts
+++ /dev/null
@@ -1,45 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * Copyright (C) 2018 Synopsys, Inc. All rights reserved.
- */
-/dts-v1/;
-
-#include "skeleton.dtsi"
-
-/ {
-	#address-cells = <1>;
-	#size-cells = <1>;
-
-	aliases {
-		console = &uart0;
-	};
-
-	cpu_card {
-		core_clk: core_clk {
-			#clock-cells = <0>;
-			compatible = "fixed-clock";
-			clock-frequency = <144000000>;
-			u-boot,dm-pre-reloc;
-		};
-	};
-
-	uart0: serial0@80014000 {
-		compatible = "snps,dw-apb-uart";
-		clock-frequency = <16000000>;
-		reg = <0x80014000 0x1000>;
-		reg-shift = <2>;
-		reg-io-width = <4>;
-	};
-
-	usb: usb@f0040000 {
-		compatible = "snps,dwc2";
-		reg = <0xf0040000 0x10000>;
-		phys = <&usbphy>;
-		phy-names = "usb2-phy";
-	};
-
-	usbphy: phy {
-		compatible = "nop-phy";
-		#phy-cells = <0>;
-	};
-};
diff --git a/arch/arc/dts/nsim.dts b/arch/arc/dts/nsim.dts
deleted file mode 100644
index 243ecb1..0000000
--- a/arch/arc/dts/nsim.dts
+++ /dev/null
@@ -1,31 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * Copyright (C) 2015-2016 Synopsys, Inc. (www.synopsys.com)
- */
-/dts-v1/;
-
-#include "skeleton.dtsi"
-
-/ {
-	model = "snps,nsim";
-
-	aliases {
-		console = &arcuart0;
-	};
-
-	cpu_card {
-		core_clk: core_clk {
-			#clock-cells = <0>;
-			compatible = "fixed-clock";
-			clock-frequency = <70000000>;
-			u-boot,dm-pre-reloc;
-		};
-	};
-
-	arcuart0: serial@0xc0fc1000 {
-		compatible = "snps,arc-uart";
-		reg = <0xc0fc1000 0x100>;
-		clock-frequency = <70000000>;
-	};
-
-};
diff --git a/arch/arc/dts/skeleton.dtsi b/arch/arc/dts/skeleton.dtsi
deleted file mode 100644
index 279fc6c..0000000
--- a/arch/arc/dts/skeleton.dtsi
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Skeleton device tree; the bare minimum needed to boot; just include and
- * add a compatible value.  The bootloader will typically populate the memory
- * node.
- */
-
-/ {
-	#address-cells = <1>;
-	#size-cells = <1>;
-	chosen { };
-	aliases { };
-
-	cpu_card {
-		compatible = "simple-bus";
-		#address-cells = <1>;
-		#size-cells = <1>;
-		u-boot,dm-pre-reloc;
-
-		timer@0 {
-			compatible = "snps,arc-timer";
-			clocks = <&core_clk>;
-			reg = <0 1>;
-		};
-	};
-
-	memory@80000000 {
-		device_type = "memory";
-		reg = <0x80000000 0x10000000>; /* 256M */
-	};
-};
diff --git a/arch/arc/include/asm/arc-bcr.h b/arch/arc/include/asm/arc-bcr.h
deleted file mode 100644
index 823906d..0000000
--- a/arch/arc/include/asm/arc-bcr.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * ARC Build Configuration Registers, with encoded hardware config
- *
- * Copyright (C) 2018 Synopsys
- * Author: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
- *
- * This file is licensed under the terms of the GNU General Public
- * License version 2. This program is licensed "as is" without any
- * warranty of any kind, whether express or implied.
- */
-
-#ifndef __ARC_BCR_H
-#define __ARC_BCR_H
-#ifndef __ASSEMBLY__
-
-#include <config.h>
-
-union bcr_di_cache {
-	struct {
-#ifdef CONFIG_CPU_BIG_ENDIAN
-		unsigned int pad:12, line_len:4, sz:4, config:4, ver:8;
-#else
-		unsigned int ver:8, config:4, sz:4, line_len:4, pad:12;
-#endif
-	} fields;
-	unsigned int word;
-};
-
-union bcr_slc_cfg {
-	struct {
-#ifdef CONFIG_CPU_BIG_ENDIAN
-		unsigned int pad:24, way:2, lsz:2, sz:4;
-#else
-		unsigned int sz:4, lsz:2, way:2, pad:24;
-#endif
-	} fields;
-	unsigned int word;
-};
-
-union bcr_generic {
-	struct {
-#ifdef CONFIG_CPU_BIG_ENDIAN
-		unsigned int pad:24, ver:8;
-#else
-		unsigned int ver:8, pad:24;
-#endif
-	} fields;
-	unsigned int word;
-};
-
-union bcr_clust_cfg {
-	struct {
-#ifdef CONFIG_CPU_BIG_ENDIAN
-		unsigned int pad:7, c:1, num_entries:8, num_cores:8, ver:8;
-#else
-		unsigned int ver:8, num_cores:8, num_entries:8, c:1, pad:7;
-#endif
-	} fields;
-	unsigned int word;
-};
-
-union bcr_mmu_4 {
-	struct {
-#ifdef CONFIG_CPU_BIG_ENDIAN
-	unsigned int ver:8, sasid:1, sz1:4, sz0:4, res:2, pae:1,
-		     n_ways:2, n_entry:2, n_super:2, u_itlb:3, u_dtlb:3;
-#else
-	/*           DTLB      ITLB      JES        JE         JA      */
-	unsigned int u_dtlb:3, u_itlb:3, n_super:2, n_entry:2, n_ways:2,
-		     pae:1, res:2, sz0:4, sz1:4, sasid:1, ver:8;
-#endif
-	} fields;
-	unsigned int word;
-};
-
-#endif /* __ASSEMBLY__ */
-#endif /* __ARC_BCR_H */
diff --git a/arch/arc/include/asm/arcregs.h b/arch/arc/include/asm/arcregs.h
index fff6591..5d48d11 100644
--- a/arch/arc/include/asm/arcregs.h
+++ b/arch/arc/include/asm/arcregs.h
@@ -1,14 +1,12 @@
-/* SPDX-License-Identifier: GPL-2.0+ */
 /*
  * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. All rights reserved.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
  */
 
 #ifndef _ASM_ARC_ARCREGS_H
 #define _ASM_ARC_ARCREGS_H
 
-#include <asm/cache.h>
-#include <config.h>
-
 /*
  * ARC architecture has additional address space - auxiliary registers.
  * These registers are mostly used for configuration purposes.
@@ -16,50 +14,22 @@
  * access: "lr"/"sr".
  */
 
-/*
- * Typically 8 least significant bits of Build Configuration Register (BCR)
- * describe version of the HW block in question. Moreover if decoded version
- * is 0 this means given HW block is absent - this is especially useful because
- * we may safely read BRC regardless HW block existence while an attempt to
- * access any other AUX regs associated with this HW block lead to imediate
- * "instruction error" exception.
- *
- * I.e. before using any cofigurable HW block it's required to make sure it
- * exists at all, and for that we introduce a special macro below.
- */
-#define ARC_BCR_VERSION_MASK	GENMASK(7, 0)
-#define ARC_FEATURE_EXISTS(bcr)	!!(__builtin_arc_lr(bcr) & ARC_BCR_VERSION_MASK)
-
 #define ARC_AUX_IDENTITY	0x04
 #define ARC_AUX_STATUS32	0x0a
 
-/* STATUS32 Bits Positions */
-#define STATUS_AD_BIT		19	/* Enable unaligned access */
-
 /* Instruction cache related auxiliary registers */
 #define ARC_AUX_IC_IVIC		0x10
 #define ARC_AUX_IC_CTRL		0x11
 #define ARC_AUX_IC_IVIL		0x19
-#if (CONFIG_ARC_MMU_VER == 3)
+#if (CONFIG_ARC_MMU_VER > 2)
 #define ARC_AUX_IC_PTAG		0x1E
 #endif
-#define ARC_BCR_IC_BUILD	0x77
-#define AUX_AUX_CACHE_LIMIT		0x5D
-#define ARC_AUX_NON_VOLATILE_LIMIT	0x5E
-
-/* ICCM and DCCM auxiliary registers */
-#define ARC_AUX_DCCM_BASE	0x18	/* DCCM Base Addr ARCv2 */
-#define ARC_AUX_ICCM_BASE	0x208	/* ICCM Base Addr ARCv2 */
 
 /* Timer related auxiliary registers */
 #define ARC_AUX_TIMER0_CNT	0x21	/* Timer 0 count */
 #define ARC_AUX_TIMER0_CTRL	0x22	/* Timer 0 control */
 #define ARC_AUX_TIMER0_LIMIT	0x23	/* Timer 0 limit */
 
-#define ARC_AUX_TIMER1_CNT	0x100	/* Timer 1 count */
-#define ARC_AUX_TIMER1_CTRL	0x101	/* Timer 1 control */
-#define ARC_AUX_TIMER1_LIMIT	0x102	/* Timer 1 limit */
-
 #define ARC_AUX_INTR_VEC_BASE	0x25
 
 /* Data cache related auxiliary registers */
@@ -69,40 +39,9 @@
 #define ARC_AUX_DC_IVDL		0x4A
 #define ARC_AUX_DC_FLSH		0x4B
 #define ARC_AUX_DC_FLDL		0x4C
-#if (CONFIG_ARC_MMU_VER == 3)
+#if (CONFIG_ARC_MMU_VER > 2)
 #define ARC_AUX_DC_PTAG		0x5C
 #endif
-#define ARC_BCR_DC_BUILD	0x72
-#define ARC_BCR_SLC		0xce
-#define ARC_AUX_SLC_CONFIG	0x901
-#define ARC_AUX_SLC_CTRL	0x903
-#define ARC_AUX_SLC_FLUSH	0x904
-#define ARC_AUX_SLC_INVALIDATE	0x905
-#define ARC_AUX_SLC_IVDL	0x910
-#define ARC_AUX_SLC_FLDL	0x912
-#define ARC_AUX_SLC_RGN_START	0x914
-#define ARC_AUX_SLC_RGN_START1	0x915
-#define ARC_AUX_SLC_RGN_END	0x916
-#define ARC_AUX_SLC_RGN_END1	0x917
-#define ARC_BCR_CLUSTER		0xcf
-
-/* MMU Management regs */
-#define ARC_AUX_MMU_BCR		0x6f
-
-/* IO coherency related auxiliary registers */
-#define ARC_AUX_IO_COH_ENABLE	0x500
-#define ARC_AUX_IO_COH_PARTIAL	0x501
-#define ARC_AUX_IO_COH_AP0_BASE	0x508
-#define ARC_AUX_IO_COH_AP0_SIZE	0x509
-
-/* XY-memory related */
-#define ARC_AUX_XY_BUILD	0x79
-
-/* DSP-extensions related auxiliary registers */
-#define ARC_AUX_DSP_BUILD	0x7A
-
-/* ARC Subsystems related auxiliary registers */
-#define ARC_AUX_SUBSYS_BUILD	0xF0
 
 #ifndef __ASSEMBLY__
 /* Accessors for auxiliary registers */
@@ -111,19 +50,6 @@
 /* gcc builtin sr needs reg param to be long immediate */
 #define write_aux_reg(reg_immed, val)		\
 		__builtin_arc_sr((unsigned int)val, reg_immed)
-
-/* ARCNUM [15:8] - field to identify each core in a multi-core system */
-#define CPU_ID_GET()	((read_aux_reg(ARC_AUX_IDENTITY) & 0xFF00) >> 8)
-
-static const inline int is_isa_arcv2(void)
-{
-	return IS_ENABLED(CONFIG_ISA_ARCV2);
-}
-
-static const inline int is_isa_arcompact(void)
-{
-	return IS_ENABLED(CONFIG_ISA_ARCOMPACT);
-}
 #endif /* __ASSEMBLY__ */
 
 #endif /* _ASM_ARC_ARCREGS_H */
diff --git a/arch/arc/include/asm/bitops.h b/arch/arc/include/asm/bitops.h
index c6dd28e..85721aa 100644
--- a/arch/arc/include/asm/bitops.h
+++ b/arch/arc/include/asm/bitops.h
@@ -1,6 +1,7 @@
-/* SPDX-License-Identifier: GPL-2.0+ */
 /*
  * Copyright (C) 2013-2014 Synopsys, Inc. All rights reserved.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
  */
 
 #ifndef __ASM_ARC_BITOPS_H
@@ -15,9 +16,4 @@
 #define hweight16(x) generic_hweight16(x)
 #define hweight8(x) generic_hweight8(x)
 
-#include <asm-generic/bitops/fls.h>
-#include <asm-generic/bitops/__fls.h>
-#include <asm-generic/bitops/fls64.h>
-#include <asm-generic/bitops/__ffs.h>
-
 #endif /* __ASM_ARC_BITOPS_H */
diff --git a/arch/arc/include/asm/byteorder.h b/arch/arc/include/asm/byteorder.h
index 8c171bb..2fa9776 100644
--- a/arch/arc/include/asm/byteorder.h
+++ b/arch/arc/include/asm/byteorder.h
@@ -1,6 +1,7 @@
-/* SPDX-License-Identifier: GPL-2.0+ */
 /*
  * Copyright (C) 2013-2014 Synopsys, Inc. All rights reserved.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
  */
 
 #ifndef __ASM_ARC_BYTEORDER_H
diff --git a/arch/arc/include/asm/cache.h b/arch/arc/include/asm/cache.h
index 1604cd0..16e7568 100644
--- a/arch/arc/include/asm/cache.h
+++ b/arch/arc/include/asm/cache.h
@@ -1,6 +1,7 @@
-/* SPDX-License-Identifier: GPL-2.0+ */
 /*
  * Copyright (C) 2013-2014 Synopsys, Inc. All rights reserved.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
  */
 
 #ifndef __ASM_ARC_CACHE_H
@@ -9,34 +10,14 @@
 #include <config.h>
 
 /*
- * As of today we may handle any L1 cache line length right in software.
- * For that essentially cache line length is a variable not constant.
- * And to satisfy users of ARCH_DMA_MINALIGN we just use largest line length
- * that may exist in either L1 or L2 (AKA SLC) caches on ARC.
+ * The current upper bound for ARC L1 data cache line sizes is 128 bytes.
+ * We use that value for aligning DMA buffers unless the board config has
+ * specified an alternate cache line size.
  */
+#ifdef CONFIG_SYS_CACHELINE_SIZE
+#define ARCH_DMA_MINALIGN	CONFIG_SYS_CACHELINE_SIZE
+#else
 #define ARCH_DMA_MINALIGN	128
-
-#if defined(ARC_MMU_ABSENT)
-#define CONFIG_ARC_MMU_VER 0
-#elif defined(CONFIG_ARC_MMU_V2)
-#define CONFIG_ARC_MMU_VER 2
-#elif defined(CONFIG_ARC_MMU_V3)
-#define CONFIG_ARC_MMU_VER 3
-#elif defined(CONFIG_ARC_MMU_V4)
-#define CONFIG_ARC_MMU_VER 4
 #endif
 
-#ifndef __ASSEMBLY__
-
-void cache_init(void);
-void flush_n_invalidate_dcache_all(void);
-void sync_n_cleanup_cache_all(void);
-
-static const inline int is_ioc_enabled(void)
-{
-	return IS_ENABLED(CONFIG_ARC_DBG_IOC_ENABLE);
-}
-
-#endif /* __ASSEMBLY__ */
-
 #endif /* __ASM_ARC_CACHE_H */
diff --git a/arch/arc/include/asm/config.h b/arch/arc/include/asm/config.h
index d88c361..e5be078 100644
--- a/arch/arc/include/asm/config.h
+++ b/arch/arc/include/asm/config.h
@@ -1,11 +1,13 @@
-/* SPDX-License-Identifier: GPL-2.0+ */
 /*
  * Copyright (C) 2013-2014 Synopsys, Inc. All rights reserved.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
  */
 
 #ifndef __ASM_ARC_CONFIG_H_
 #define __ASM_ARC_CONFIG_H_
 
+#define CONFIG_SYS_GENERIC_GLOBAL_DATA
 #define CONFIG_SYS_BOOT_RAMDISK_HIGH
 
 #define CONFIG_LMB
diff --git a/arch/arc/include/asm/errno.h b/arch/arc/include/asm/errno.h
new file mode 100644
index 0000000..4c82b50
--- /dev/null
+++ b/arch/arc/include/asm/errno.h
@@ -0,0 +1 @@
+#include <asm-generic/errno.h>
diff --git a/arch/arc/include/asm/global_data.h b/arch/arc/include/asm/global_data.h
index 8f9c83d..d644e80 100644
--- a/arch/arc/include/asm/global_data.h
+++ b/arch/arc/include/asm/global_data.h
@@ -1,22 +1,16 @@
-/* SPDX-License-Identifier: GPL-2.0+ */
 /*
  * Copyright (C) 2013-2014 Synopsys, Inc. All rights reserved.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
  */
 
 #ifndef	__ASM_ARC_GLOBAL_DATA_H
 #define __ASM_ARC_GLOBAL_DATA_H
 
-#include <config.h>
-
-#ifndef __ASSEMBLY__
 /* Architecture-specific global data */
 struct arch_global_data {
-	int l1_line_sz;
-#if defined(CONFIG_ISA_ARCV2)
-	int slc_line_sz;
-#endif
+	int running_on_hw;
 };
-#endif /* __ASSEMBLY__ */
 
 #include <asm-generic/global_data.h>
 
diff --git a/arch/arc/include/asm/gpio.h b/arch/arc/include/asm/gpio.h
deleted file mode 100644
index 306ab4c..0000000
--- a/arch/arc/include/asm/gpio.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-generic/gpio.h>
diff --git a/arch/arc/include/asm/io.h b/arch/arc/include/asm/io.h
index fa844b5..24b7337 100644
--- a/arch/arc/include/asm/io.h
+++ b/arch/arc/include/asm/io.h
@@ -1,6 +1,7 @@
-/* SPDX-License-Identifier: GPL-2.0+ */
 /*
  * Copyright (C) 2013-2014 Synopsys, Inc. All rights reserved.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
  */
 
 #ifndef __ASM_ARC_IO_H
@@ -9,46 +10,6 @@
 #include <linux/types.h>
 #include <asm/byteorder.h>
 
-#ifdef __ARCHS__
-
-/*
- * ARCv2 based HS38 cores are in-order issue, but still weakly ordered
- * due to micro-arch buffering/queuing of load/store, cache hit vs. miss ...
- *
- * Explicit barrier provided by DMB instruction
- *  - Operand supports fine grained load/store/load+store semantics
- *  - Ensures that selected memory operation issued before it will complete
- *    before any subsequent memory operation of same type
- *  - DMB guarantees SMP as well as local barrier semantics
- *    (asm-generic/barrier.h ensures sane smp_*mb if not defined here, i.e.
- *    UP: barrier(), SMP: smp_*mb == *mb)
- *  - DSYNC provides DMB+completion_of_cache_bpu_maintenance_ops hence not needed
- *    in the general case. Plus it only provides full barrier.
- */
-
-#define mb()	asm volatile("dmb 3\n" : : : "memory")
-#define rmb()	asm volatile("dmb 1\n" : : : "memory")
-#define wmb()	asm volatile("dmb 2\n" : : : "memory")
-
-#else
-
-/*
- * ARCompact based cores (ARC700) only have SYNC instruction which is super
- * heavy weight as it flushes the pipeline as well.
- * There are no real SMP implementations of such cores.
- */
-
-#define mb()	asm volatile("sync\n" : : : "memory")
-#endif
-
-#ifdef __ARCHS__
-#define __iormb()		rmb()
-#define __iowmb()		wmb()
-#else
-#define __iormb()		asm volatile("" : : : "memory")
-#define __iowmb()		asm volatile("" : : : "memory")
-#endif
-
 static inline void sync(void)
 {
 	/* Not yet implemented */
@@ -87,6 +48,18 @@
 	return w;
 }
 
+#define readb __raw_readb
+
+static inline u16 readw(const volatile void __iomem *addr)
+{
+	return __le16_to_cpu(__raw_readw(addr));
+}
+
+static inline u32 readl(const volatile void __iomem *addr)
+{
+	return __le32_to_cpu(__raw_readl(addr));
+}
+
 static inline void __raw_writeb(u8 b, volatile void __iomem *addr)
 {
 	__asm__ __volatile__("stb%U1	%0, %1\n"
@@ -111,6 +84,10 @@
 			     : "memory");
 }
 
+#define writeb __raw_writeb
+#define writew(b, addr) __raw_writew(__cpu_to_le16(b), addr)
+#define writel(b, addr) __raw_writel(__cpu_to_le32(b), addr)
+
 static inline int __raw_readsb(unsigned int addr, void *data, int bytelen)
 {
 	__asm__ __volatile__ ("1:ld.di	r8, [r0]\n"
@@ -183,45 +160,6 @@
 	return longlen;
 }
 
-/*
- * MMIO can also get buffered/optimized in micro-arch, so barriers needed
- * Based on ARM model for the typical use case
- *
- *	<ST [DMA buffer]>
- *	<writel MMIO "go" reg>
- *  or:
- *	<readl MMIO "status" reg>
- *	<LD [DMA buffer]>
- *
- * http://lkml.kernel.org/r/20150622133656.GG1583@arm.com
- */
-#define readb(c)		({ u8  __v = readb_relaxed(c); __iormb(); __v; })
-#define readw(c)		({ u16 __v = readw_relaxed(c); __iormb(); __v; })
-#define readl(c)		({ u32 __v = readl_relaxed(c); __iormb(); __v; })
-
-#define writeb(v,c)		({ __iowmb(); writeb_relaxed(v,c); })
-#define writew(v,c)		({ __iowmb(); writew_relaxed(v,c); })
-#define writel(v,c)		({ __iowmb(); writel_relaxed(v,c); })
-
-/*
- * Relaxed API for drivers which can handle barrier ordering themselves
- *
- * Also these are defined to perform little endian accesses.
- * To provide the typical device register semantics of fixed endian,
- * swap the byte order for Big Endian
- *
- * http://lkml.kernel.org/r/201603100845.30602.arnd@arndb.de
- */
-#define readb_relaxed(c)	__raw_readb(c)
-#define readw_relaxed(c) ({ u16 __r = le16_to_cpu((__force __le16) \
-					__raw_readw(c)); __r; })
-#define readl_relaxed(c) ({ u32 __r = le32_to_cpu((__force __le32) \
-					__raw_readl(c)); __r; })
-
-#define writeb_relaxed(v,c)	__raw_writeb(v,c)
-#define writew_relaxed(v,c)	__raw_writew((__force u16) cpu_to_le16(v),c)
-#define writel_relaxed(v,c)	__raw_writel((__force u32) cpu_to_le32(v),c)
-
 #define out_arch(type, endian, a, v)	__raw_write##type(cpu_to_##endian(v), a)
 #define in_arch(type, endian, a)	endian##_to_cpu(__raw_read##type(a))
 
@@ -277,6 +215,4 @@
 #define setbits_8(addr, set) setbits(8, addr, set)
 #define clrsetbits_8(addr, clear, set) clrsetbits(8, addr, clear, set)
 
-#include <asm-generic/io.h>
-
 #endif	/* __ASM_ARC_IO_H */
diff --git a/arch/arc/include/asm/linkage.h b/arch/arc/include/asm/linkage.h
deleted file mode 100644
index 2d42ed4..0000000
--- a/arch/arc/include/asm/linkage.h
+++ /dev/null
@@ -1,11 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0+ */
-/*
- * Copyright (C) 2004, 2007-2010, 2011-2015 Synopsys, Inc. All rights reserved.
- */
-
-#ifndef __ASM_ARC_LINKAGE_H
-#define __ASM_ARC_LINKAGE_H
-
-#define ASM_NL		 `	/* use '`' to mark new line in macro */
-
-#endif /* __ASM_ARC_LINKAGE_H */
diff --git a/arch/arc/include/asm/posix_types.h b/arch/arc/include/asm/posix_types.h
index 13838cb..51347a4 100644
--- a/arch/arc/include/asm/posix_types.h
+++ b/arch/arc/include/asm/posix_types.h
@@ -1,6 +1,7 @@
-/* SPDX-License-Identifier: GPL-2.0+ */
 /*
  * Copyright (C) 2013-2014 Synopsys, Inc. All rights reserved.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
  */
 
 #ifndef __ASM_ARC_POSIX_TYPES_H
diff --git a/arch/arc/include/asm/processor.h b/arch/arc/include/asm/processor.h
deleted file mode 100644
index 03e31fb..0000000
--- a/arch/arc/include/asm/processor.h
+++ /dev/null
@@ -1,11 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0+ */
-/*
- * Copyright (C) 2015 Synopsys, Inc. All rights reserved.
- */
-
-#ifndef _ASM_ARC_PROCESSOR_H
-#define _ASM_ARC_PROCESSOR_H
-
-/* This file is required by some generic code like USB etc */
-
-#endif /* _ASM_ARC_PROCESSOR_H */
diff --git a/arch/arc/include/asm/ptrace.h b/arch/arc/include/asm/ptrace.h
index 6965e89..8f73b31 100644
--- a/arch/arc/include/asm/ptrace.h
+++ b/arch/arc/include/asm/ptrace.h
@@ -1,6 +1,7 @@
-/* SPDX-License-Identifier: GPL-2.0+ */
 /*
  * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. All rights reserved.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
  */
 
 #ifndef __ASM_ARC_PTRACE_H
diff --git a/arch/arc/include/asm/sections.h b/arch/arc/include/asm/sections.h
index 1c9c9db..18484a1 100644
--- a/arch/arc/include/asm/sections.h
+++ b/arch/arc/include/asm/sections.h
@@ -1,6 +1,7 @@
-/* SPDX-License-Identifier: GPL-2.0+ */
 /*
  * Copyright (C) 2013-2014 Synopsys, Inc. All rights reserved.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
  */
 
 #ifndef __ASM_ARC_SECTIONS_H
@@ -8,7 +9,6 @@
 
 #include <asm-generic/sections.h>
 
-extern ulong __ivt_start;
-extern ulong __ivt_end;
+extern ulong __text_end;
 
 #endif /* __ASM_ARC_SECTIONS_H */
diff --git a/arch/arc/include/asm/string.h b/arch/arc/include/asm/string.h
index 8b13789..909129c 100644
--- a/arch/arc/include/asm/string.h
+++ b/arch/arc/include/asm/string.h
@@ -1 +1,27 @@
+/*
+ * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. All rights reserved.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
 
+#ifndef __ASM_ARC_STRING_H
+#define __ASM_ARC_STRING_H
+
+#define __HAVE_ARCH_MEMSET
+#define __HAVE_ARCH_MEMCPY
+#define __HAVE_ARCH_MEMCMP
+#define __HAVE_ARCH_STRCHR
+#define __HAVE_ARCH_STRCPY
+#define __HAVE_ARCH_STRCMP
+#define __HAVE_ARCH_STRLEN
+
+extern void *memset(void *ptr, int, __kernel_size_t);
+extern void *memcpy(void *, const void *, __kernel_size_t);
+extern void memzero(void *ptr, __kernel_size_t n);
+extern int memcmp(const void *, const void *, __kernel_size_t);
+extern char *strchr(const char *s, int c);
+extern char *strcpy(char *dest, const char *src);
+extern int strcmp(const char *cs, const char *ct);
+extern __kernel_size_t strlen(const char *);
+
+#endif /* __ASM_ARC_STRING_H */
diff --git a/arch/arc/include/asm/types.h b/arch/arc/include/asm/types.h
index f31dcdf..24eeb76 100644
--- a/arch/arc/include/asm/types.h
+++ b/arch/arc/include/asm/types.h
@@ -1,15 +1,48 @@
-/* SPDX-License-Identifier: GPL-2.0+ */
 /*
  * Copyright (C) 2013-2014 Synopsys, Inc. All rights reserved.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
  */
 
 #ifndef __ASM_ARC_TYPES_H
 #define __ASM_ARC_TYPES_H
 
-#include <asm-generic/int-ll64.h>
-
 typedef unsigned short umode_t;
 
+/*
+ * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the
+ * header files exported to user space
+ */
+
+typedef __signed__ char __s8;
+typedef unsigned char __u8;
+
+typedef __signed__ short __s16;
+typedef unsigned short __u16;
+
+typedef __signed__ int __s32;
+typedef unsigned int __u32;
+
+#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
+typedef __signed__ long long __s64;
+typedef unsigned long long __u64;
+#endif
+
+/*
+ * These aren't exported outside the kernel to avoid name space clashes
+ */
+typedef signed char s8;
+typedef unsigned char u8;
+
+typedef signed short s16;
+typedef unsigned short u16;
+
+typedef signed int s32;
+typedef unsigned int u32;
+
+typedef signed long long s64;
+typedef unsigned long long u64;
+
 #define BITS_PER_LONG 32
 
 /* Dma addresses are 32-bits wide. */
diff --git a/arch/arc/include/asm/u-boot-arc.h b/arch/arc/include/asm/u-boot-arc.h
index dd2c094..0c0e8e6 100644
--- a/arch/arc/include/asm/u-boot-arc.h
+++ b/arch/arc/include/asm/u-boot-arc.h
@@ -1,6 +1,7 @@
-/* SPDX-License-Identifier: GPL-2.0+ */
 /*
  * Copyright (C) 2014 Synopsys, Inc. All rights reserved.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
  */
 
 #ifndef __ASM_ARC_U_BOOT_ARC_H__
@@ -8,7 +9,4 @@
 
 int arch_early_init_r(void);
 
-void	board_init_f_r_trampoline(ulong) __attribute__ ((noreturn));
-void	board_init_f_r(void) __attribute__ ((noreturn));
-
 #endif	/* __ASM_ARC_U_BOOT_ARC_H__ */
diff --git a/arch/arc/include/asm/u-boot.h b/arch/arc/include/asm/u-boot.h
index 36c2207..e354edf 100644
--- a/arch/arc/include/asm/u-boot.h
+++ b/arch/arc/include/asm/u-boot.h
@@ -1,13 +1,13 @@
-/* SPDX-License-Identifier: GPL-2.0+ */
 /*
  * Copyright (C) 2013-2014 Synopsys, Inc. All rights reserved.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
  */
 
 #ifndef __ASM_ARC_U_BOOT_H__
 #define __ASM_ARC_U_BOOT_H__
 
 #include <asm-generic/u-boot.h>
-#include <asm/u-boot-arc.h>
 
 /* For image.h:image_check_target_arch() */
 #define IH_ARCH_DEFAULT IH_ARCH_ARC
diff --git a/arch/arc/lib/Makefile b/arch/arc/lib/Makefile
index 0eb44bc..7675f85 100644
--- a/arch/arc/lib/Makefile
+++ b/arch/arc/lib/Makefile
@@ -1,17 +1,16 @@
-# SPDX-License-Identifier: GPL-2.0+
 #
 # Copyright (C) 2013-2014 Synopsys, Inc. All rights reserved.
+#
+# SPDX-License-Identifier:	GPL-2.0+
+#
 
-extra-y	= start.o
-head-y := start.o
-obj-y += cache.o
-obj-y += cpu.o
-obj-y += interrupts.o
+obj-y += sections.o
 obj-y += relocate.o
-obj-y += reset.o
-obj-y += ints_low.o
-obj-y += init_helpers.o
-
+obj-y += strchr-700.o
+obj-y += strcmp.o
+obj-y += strcpy-700.o
+obj-y += strlen.o
+obj-y += memcmp.o
+obj-y += memcpy-700.o
+obj-y += memset.o
 obj-$(CONFIG_CMD_BOOTM) += bootm.o
-
-lib-$(CONFIG_USE_PRIVATE_LIBGCC) += _millicodethunk.o libgcc2.o
diff --git a/arch/arc/lib/_millicodethunk.S b/arch/arc/lib/_millicodethunk.S
deleted file mode 100644
index 4ad16ae..0000000
--- a/arch/arc/lib/_millicodethunk.S
+++ /dev/null
@@ -1,225 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0+ */
-/*
- * Copyright (C) 1995, 1997, 2007-2013 Free Software Foundation, Inc.
- */
-
- /* ANSI concatenation macros.  */
-
- #define CONCAT1(a, b) CONCAT2(a, b)
- #define CONCAT2(a, b) a ## b
-
- /* Use the right prefix for global labels.  */
-
- #define SYM(x) CONCAT1 (__USER_LABEL_PREFIX__, x)
-
-#ifndef WORKING_ASSEMBLER
-#define abs_l abs
-#define asl_l asl
-#define mov_l mov
-#endif
-
-#define FUNC(X)         .type SYM(X),@function
-#define HIDDEN_FUNC(X)	FUNC(X)` .hidden X
-#define ENDFUNC0(X)     .Lfe_##X: .size X,.Lfe_##X-X
-#define ENDFUNC(X)      ENDFUNC0(X)
-
-	.section .text
-	.align 4
-	.global SYM(__st_r13_to_r15)
-	.global SYM(__st_r13_to_r16)
-	.global SYM(__st_r13_to_r17)
-	.global SYM(__st_r13_to_r18)
-	.global SYM(__st_r13_to_r19)
-	.global SYM(__st_r13_to_r20)
-	.global SYM(__st_r13_to_r21)
-	.global SYM(__st_r13_to_r22)
-	.global SYM(__st_r13_to_r23)
-	.global SYM(__st_r13_to_r24)
-	.global SYM(__st_r13_to_r25)
-	HIDDEN_FUNC(__st_r13_to_r15)
-	HIDDEN_FUNC(__st_r13_to_r16)
-	HIDDEN_FUNC(__st_r13_to_r17)
-	HIDDEN_FUNC(__st_r13_to_r18)
-	HIDDEN_FUNC(__st_r13_to_r19)
-	HIDDEN_FUNC(__st_r13_to_r20)
-	HIDDEN_FUNC(__st_r13_to_r21)
-	HIDDEN_FUNC(__st_r13_to_r22)
-	HIDDEN_FUNC(__st_r13_to_r23)
-	HIDDEN_FUNC(__st_r13_to_r24)
-	HIDDEN_FUNC(__st_r13_to_r25)
-	.align 4
-SYM(__st_r13_to_r25):
-	st r25, [sp,48]
-SYM(__st_r13_to_r24):
-	st r24, [sp,44]
-SYM(__st_r13_to_r23):
-	st r23, [sp,40]
-SYM(__st_r13_to_r22):
-	st r22, [sp,36]
-SYM(__st_r13_to_r21):
-	st r21, [sp,32]
-SYM(__st_r13_to_r20):
-	st r20, [sp,28]
-SYM(__st_r13_to_r19):
-	st r19, [sp,24]
-SYM(__st_r13_to_r18):
-	st r18, [sp,20]
-SYM(__st_r13_to_r17):
-	st r17, [sp,16]
-SYM(__st_r13_to_r16):
-	st r16, [sp,12]
-SYM(__st_r13_to_r15):
-#ifdef __ARC700__
-	st r15, [sp,8] ; minimum function size to avoid stall: 6 bytes.
-#else
-	st_s r15, [sp,8]
-#endif
-	st_s r14, [sp,4]
-	j_s.d [%blink]
-	st_s r13, [sp,0]
-	ENDFUNC(__st_r13_to_r15)
-	ENDFUNC(__st_r13_to_r16)
-	ENDFUNC(__st_r13_to_r17)
-	ENDFUNC(__st_r13_to_r18)
-	ENDFUNC(__st_r13_to_r19)
-	ENDFUNC(__st_r13_to_r20)
-	ENDFUNC(__st_r13_to_r21)
-	ENDFUNC(__st_r13_to_r22)
-	ENDFUNC(__st_r13_to_r23)
-	ENDFUNC(__st_r13_to_r24)
-	ENDFUNC(__st_r13_to_r25)
-
-	.section .text
-	.align 4
-;	==================================
-;	the loads
-
-	.global SYM(__ld_r13_to_r15)
-	.global SYM(__ld_r13_to_r16)
-	.global SYM(__ld_r13_to_r17)
-	.global SYM(__ld_r13_to_r18)