Kconfig in U-Boot
=================

This document describes the configuration infrastructure of U-Boot.

The conventional configuration was replaced by Kconfig at v2014.10-rc1 release.


Language Specification
----------------------

Kconfig originates in Linux Kernel.
See the file "Documentation/kbuild/kconfig*.txt" in your Linux Kernel
source directory for a basic specification of Kconfig.


Difference from Linux's Kconfig
-------------------------------

Here are some worth-mentioning configuration targets.

- silentoldconfig

  This target updates .config, include/generated/autoconf.h and
  include/configs/* as in Linux.  In U-Boot, it also does the following
  for the compatibility with the old configuration system:

   * create a symbolic link "arch/${ARCH}/include/asm/arch" pointing to
     the SoC/CPU specific header directory
   * create include/config.h
   * create include/autoconf.mk
   * create spl/include/autoconf.mk (SPL and TPL only)
   * create tpl/include/autoconf.mk (TPL only)

   If we could completely switch to Kconfig in a long run
   (i.e. remove all the include/configs/*.h), those additional processings
   above would be removed.

- defconfig

  In U-Boot, "make defconfig" is a shorthand of "make sandbox_defconfig"

- <board>_defconfig

  Now it works as in Linux.
  The prefixes such as "+S:" in *_defconfig are deprecated.
  You can simply remove the prefixes.  Do not add them for new boards.

- <board>_config

  This does not exist in Linux's Kconfig.
  "make <board>_config" works the same as "make <board>_defconfig".
  Prior to Kconfig, in U-Boot, "make <board>_config" was used for the
  configuration.  It is still supported for backward compatibility, so
  we do not need to update the distro recipes.


The other configuration targets work as in Linux Kernel.


Migration steps to Kconfig
--------------------------

Prior to Kconfig, the C preprocessor based board configuration had been used
in U-Boot.

Although Kconfig was introduced and some configs have been moved to Kconfig,
many of configs are still defined in C header files.  It will take a very
long term to move all of them to Kconfig.  In the interim, the two different
configuration infrastructures should coexist.
The configuration files are generated by both Kconfig and the old preprocessor
based configuration as follows:

Configuration files for use in C sources
  - include/generated/autoconf.h     (generated by Kconfig for Normal)
  - include/configs/<board>.h        (exists for all boards)

Configuration file for use in makefiles
  - include/config/auto.conf         (generated by Kconfig)
  - include/autoconf.mk              (generated by the old config for Normal)
  - spl/include/autoconfig.mk        (generated by the old config for SPL)
  - tpl/include/autoconfig.mk        (generated by the old config for TPL)

When adding a new CONFIG macro, it is highly recommended to add it to Kconfig
rather than to a header file.


Conversion from boards.cfg to Kconfig
-------------------------------------

Prior to Kconfig, boards.cfg was a primary database that contained Arch, CPU,
SoC, etc. of all the supported boards.  It was deleted when switching to
Kconfig.  Each field of boards.cfg was converted as follows:

 Status      ->  "S:" entry of MAINTAINERS
 Arch        ->  CONFIG_SYS_ARCH defined by Kconfig
 CPU         ->  CONFIG_SYS_CPU defined by Kconfig
 SoC         ->  CONFIG_SYS_SOC defined by Kconfig
 Vendor      ->  CONFIG_SYS_VENDOR defined by Kconfig
 Board       ->  CONFIG_SYS_BOARD defined by Kconfig
 Target      ->  File name of defconfig (configs/<target>_defconfig)
 Options     ->  CONFIG_SYS_EXTRA_OPTIONS defined by Kconfig
 Maintainers ->  "M:" entry of MAINTAINERS


Tips to add/remove boards
-------------------------

When adding a new board, the following steps are generally needed:

 [1] Add a header file include/configs/<target>.h
 [2] Make sure to define necessary CONFIG_SYS_* in Kconfig:
       Define CONFIG_SYS_CPU="cpu" to compile arch/<arch>/cpu/<cpu>
       Define CONFIG_SYS_SOC="soc" to compile arch/<arch>/cpu/<cpu>/<soc>
       Define CONFIG_SYS_VENDOR="vendor" to compile board/<vendor>/common/*
         and board/<vendor>/<board>/*
       Define CONFIG_SYS_BOARD="board" to compile board/<board>/*
         (or board/<vendor>/<board>/* if CONFIG_SYS_VENDOR is defined)
       Define CONFIG_SYS_CONFIG_NAME="target" to include
         include/configs/<target>.h
 [3] Add a new entry to the board select menu in Kconfig.
     The board select menu is located in arch/<arch>/Kconfig or
     arch/<arch>/*/Kconfig.
 [4] Add a MAINTAINERS file
     It is generally placed at board/<board>/MAINTAINERS or
     board/<vendor>/<board>/MAINTAINERS
 [5] Add configs/<target>_defconfig

When removing an obsolete board, the following steps are generally needed:

 [1] Remove configs/<target>_defconfig
 [2] Remove include/configs/<target>.h if it is not used by any other boards
 [3] Remove board/<vendor>/<board>/* or board/<board>/* if it is not used
     by any other boards
 [4] Update MAINTAINERS if necessary
 [5] Remove the unused entry from the board select menu in Kconfig
 [6] Add an entry to doc/README.scrapyard


TODO
----

- The option field of boards.cfg, which was used for the pre-Kconfig
  configuration, moved to CONFIG_SYS_EXTRA_OPTIONS verbatim now.
  Board maintainers are expected to implement proper Kconfig options
  and switch over to them.  Eventually CONFIG_SYS_EXTRA_OPTIONS will go away.
  CONFIG_SYS_EXTRA_OPTIONS should not be used for new boards.

- In the pre-Kconfig, a single board had multiple entries in the boards.cfg
  file with differences in the option fields.  The corresponding defconfig
  files were auto-generated when switching to Kconfig.  Now we have too many
  defconfig files compared with the number of the supported boards.  It is
  recommended to have only one defconfig per board and allow users to select
  the config options.

- Move the config macros in header files to Kconfig.  When we move at least
  macros used in makefiles, we can drop include/autoconfig.mk, which makes
  the build scripts much simpler.
