kconfig: add board Kconfig and defconfig files

This commit adds:
 - arch/${ARCH}/Kconfig
    provide a menu to select target boards
 - board/${VENDOR}/${BOARD}/Kconfig or board/${BOARD}/Kconfig
    set CONFIG macros to the appropriate values for each board
 - configs/${TARGET_BOARD}_defconfig
    default setting of each board

(This commit was automatically generated by a conversion script
based on boards.cfg)

In Linux Kernel, defconfig files are located under
arch/${ARCH}/configs/ directory.
It works in Linux Kernel since ARCH is always given from the
command line for cross compile.

But in U-Boot, ARCH is not given from the command line.
Which means we cannot know ARCH until the board configuration is done.
That is why all the "*_defconfig" files should be gathered into a
single directory ./configs/.

Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Acked-by: Simon Glass <sjg@chromium.org>
Series-changes: 7
  - Re-generate base on commit 302e609f

Series-changes: 5
  - Add CPU select menu for PowerPC

Series-changes: 4
  - Re-generate based on the latest boards.cfg
  - Have only one defconfig per board

Series-changes: 3
  - Re-generate based on the latest boards.cfg
  - Change the location of SPL/TPL defconfig files
    SPL: configs/spl/<board>_defconfig -> configs/<board>_spl_defconfig
    TPL: configs/tpl/<board>_defconfig -> configs/<board>_tpl_defconfig

Series-changes: 2
  - Re-generate based on the latest boards.cfg
kconfig: add basic Kconfig files

This commit adds more Kconfig files, which were written by hand.

Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Acked-by: Simon Glass <sjg@chromium.org>
Series-changes: 4
  - Abolish CONFIG_SUBIMAGES
  - Add CONFIG_DEFCONFIG_LIST

Series-changes: 3
  - Add CONFIG_SUBIMAGES for generic sub-image framework.
  - Move CONFIG_SYS_EXTRA_OPTIONS to the top Kconfig.
  - Add more help messages to each config.

Series-changes: 2
  - Do not include "board/Kconfig"
  - Drop CONFIG_BUILD_MODE
include: define CONFIG_SPL and CONFIG_TPL as 1

We are about to switch to Kconfig in the next commit.
But there are something to get done beforehand.

In Kconfig, include/generated/autoconf.h defines boolean
CONFIG macros as 1.

CONFIG_SPL and CONFIG_TPL, if defined, must be set to 1.
Otherwise, when switching to Kconfig, the build log
would be sprinkled with warning messages like this:
  warning: "CONFIG_SPL" redefined [enabled by default]

Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Series-changes: 3
  - Rebase on the current u-boot/master

Series-changes: 2
  - Rebase on the current u-boot/master
kconfig: switch to Kconfig

This commit enables Kconfig.
Going forward, we use Kconfig for the board configuration.
mkconfig will never be used. Nor will include/config.mk be generated.

Kconfig must be adjusted for U-Boot because our situation is
a little more complicated than Linux Kernel.
We have to generate multiple boot images (Normal, SPL, TPL)
from one source tree.
Each image needs its own configuration input.

Usage:

Run "make <board>_defconfig" to do the board configuration.

It will create the .config file and additionally spl/.config, tpl/.config
if SPL, TPL is enabled, respectively.

You can use "make config", "make menuconfig" etc. to create
a new .config or modify the existing one.

Use "make spl/config", "make spl/menuconfig" etc. for spl/.config
and do likewise for tpl/.config file.

The generic syntax of configuration targets for SPL, TPL is:

  <target_image>/<config_command>

Here, <target_image> is either 'spl' or 'tpl'
      <config_command> is 'config', 'menuconfig', 'xconfig', etc.

When the configuration is done, run "make".
(Or "make <board>_defconfig all" will do the configuration and build
in one time.)

For futher information of how Kconfig works in U-Boot,
please read the comment block of scripts/multiconfig.py.

By the way, there is another item worth remarking here:
coexistence of Kconfig and board herder files.

Prior to Kconfig, we used C headers to define a set of configs.

We expect a very long term to migrate from C headers to Kconfig.
Two different infractructure must coexist in the interim.

In our former configuration scheme, include/autoconf.mk was generated
for use in makefiles.
It is still generated under include/, spl/include/, tpl/include/ directory
for the Normal, SPL, TPL image, respectively.

Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Acked-by: Simon Glass <sjg@chromium.org>
Series-changes: 7
  - Follow PEP8 codiyg style:
      Use """blah blah""" rather than '''blah blah''' for docstring.
      Fix some indents
      Add a period of the end of the first line of docstring
  - Remove temporary directories '$(objtree)/arch' and '$(objtree)/configs'

Series-changes: 6
  Various fixes reported by Simon.
  - Bug fix
    "make spl:config" does not work for out-of-tree build.
    So, the syntax has been changed to "make spl/config".
  - Rename autoconf_is_update  -> autoconf_is_current
  - Fix comments in scripts/multiconfig.py
  - Use
      foo: blah blah
    instead of
      foo - blah blah
    for Python comment style.
  - Sort Python imports alphabetically

Series-changes: 5
  - Rebase on commit fbe79a17fd

Series-changes: 4
  - Have one defconfig file for each board by supporting conditional
    definition in defconfig
  - Put adjustment code into scripts/multiconfig.py

Series-changes: 3
  - Invoke SPL/TPL configuration only for defconfig and silentoldconfig

Series-changes: 2
  - Put dirty build rule into scripts/multiple_config.sh and
    scripts/Makefile.autoconf
  - Fix dependency tracking.
    In v1, any change to Kconfig triggered re-complile of all objects.
    In this version, re-compile is kept at a minimum.
  - Fix a clean-source check
    In v1, clean source tree check did not work correctly for
    out-of-tree build.
Don't send: do not clean scripts/kconfig/* by make mrproper
Do not apply: tools: add gen_maintainers.py

 ========================================
 Do not apply this patch to the main line
 ========================================

This tool generates MAINTAINERS files based on boards.cfg file.

Because it is used only once, it should not be applied.

Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Series-changes: 4
  - Newly added
Add board MAINTAINERS files

We have switched to Kconfig and the boards.cfg file is going to
be removed. We have to retrieve the board status and maintainers
information from it.

The MAINTAINERS format as in Linux Kernel would be nice
because we can crib the scripts/get_maintainer.pl script.

After some discussion, we chose to put a MAINTAINERS file under each
board directory, not the top-level one because we want to collect
relevant information for a board into a single place.

TODO:
Modify get_maintainer.pl to scan multiple MAINTAINERS files.

Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Acked-by: Simon Glass <sjg@chromium.org>
Series-changes: 7
  - Regenerate based on commit 302e609f +
     http://patchwork.ozlabs.org/patch/373391/

Series-changes: 4
  - Newly added
tools: add genboardscfg.py

Now the primary data for each board is in Kconfig, defconfig and
MAINTAINERS.

It is true boards.cfg is needed for MAKEALL and buildman and might be
useful to brouse all the supported boards in a single database.
But it would be painful to maintain the boards.cfg in sync.

So, this is the solution.
Add a tool to generate the equivalent boards.cfg file based on
the latest Kconfig, defconfig and MAINTAINERS.

We can keep all the functions of MAKEALL and buildman with it.

The best thing would be to change MAKEALL and buildman for not
depending on boards.cfg in the future, but it would take some time.

Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Acked-by: Simon Glass <sjg@chromium.org>
Series-changes: 7
  - Delete the incomplete boards.cfg file when the script is terminated
    by user with keyboard interrupt.
  - Follow PEP8 codiyg style:
      Use """blah blah""" rather than '''blah blah''' for docstring.
      Fix some indents
      Add a period of the end of the first line of docstring
  - Do not hard-code 'make' command name. Use scripts/show-gnu-make
  - Add specific exception class
  - Add a blank line to some places for readability

Series-changes: 6
  - Fix comment format of arguments
      foo: blah blah
    rather than
      foo - blah blah
  - Use tag, rest instead of line[:2], line[2:] for clarification
  - Sort imports alphabetically
  - Insert a blank before each function
  - Fix some comments
  - Use tempfile.mkdtemp() to create working directories

Series-changes: 5
  - Support wildcard pattern like 'F:  configs/foo_*_defconfig'
  - Rename genboardscfg to genboardscfg.py
  - Use assert statement for sanity check
  - Do not run if imported from another script
    if __name__ == '__main__':
         main()
  - Check if we are at the top of source directory

Series-changes: 4
  - Newly added
kconfig: remove mkconfig and boards.cfg

The old configuration script is no longer necessary.
Nor is boards.cfg a primary database.
We can generate it with the genboardscfg.py tool
based on the latest Kconfig, defconfig and MAINTAINERS.

Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Acked-by: Simon Glass <sjg@chromium.org>
Series-changes: 4
  - Remove boards.cfg
  - Update .gitignore
MAKEALL: adjust for Kconfig

Use "make <board>_defconfig" instead of "make <board>_config".

Invoke tools/genboardscfg.py to generate boards.cfg when it is missing.

Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Acked-by: Simon Glass <sjg@chromium.org>
Series-changes: 4
  - Generate boards.cfg automatically if it is missing
buildman: adjust for Kconfig

Use "make <board>_defconfig" instead of "make <board>_config".

Invoke tools/genboardscfg.py to generate boards.cfg when it is missing.

Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Acked-by: Simon Glass <sjg@chromium.org>
Series-changes: 4
  - Generate boards.cfg automatically if it is missing
MAKEALL: Show configuration
kconfig: delete redundant CONFIG_${ARCH} definition

CONFIG_${ARCH} is defined by Kconfig.

Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Series-changes: 4
  - Rebase on the current u-boot/master
powerpc: remove redundant CPU definition

CONFIG_${CPU} is defined by Kconfig.

Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Acked-by: Simon Glass <sjg@chromium.org>
Series-changes: 4
  - Newly added
include: remove CONFIG_SPL/CONFIG_TPL definition in config headers

Now CONFIG_SPL and CONFIG_TPL are defined in Kconfig.

Remove the redundant definition in config headers.

Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Series-changes: 4
  - Rebase on the current u-boot/master

Series-changes: 3
  - Rebase on the current u-boot/master

Series-changes: 2
  - Rebase on the current u-boot/master
kconfig: add CONFIG_CROSS_COMPILE

Copy from Linux Kernel (with a few adjustments in comments).
kconfig: add CONFIG_CC_OPTIMIZE_FOR_SIZE
kconfig: zynq: refactor Zynq Kconfig and defconfig

Move Zynq board select menu to arch/arm/cpu/armv7/Kconfig.

Move common setting (CONFIG_SYS_SOC="zynq" etc.)
to arch/arm/cpu/armv7/Kconfig.

Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
tegra:
tools: move_config