Home | History | Annotate | only in /external/u-boot
Up to higher level directory
NameDateSize
.checkpatch.conf22-Oct-2020684
.mailmap22-Oct-20201.4K
.travis.yml22-Oct-202012.5K
api/22-Oct-2020
arch/22-Oct-2020
board/22-Oct-2020
cmd/22-Oct-2020
common/22-Oct-2020
config.mk22-Oct-20202.2K
configs/22-Oct-2020
disk/22-Oct-2020
doc/22-Oct-2020
Documentation/22-Oct-2020
drivers/22-Oct-2020
dts/22-Oct-2020
env/22-Oct-2020
examples/22-Oct-2020
fs/22-Oct-2020
include/22-Oct-2020
Kbuild22-Oct-20201.8K
Kconfig22-Oct-202016.3K
lib/22-Oct-2020
LICENSE22-Oct-20206.9K
Licenses/22-Oct-2020
MAINTAINERS22-Oct-202014.7K
Makefile22-Oct-202059K
METADATA22-Oct-2020307
MODULE_LICENSE_GPL22-Oct-20200
net/22-Oct-2020
NOTICE22-Oct-20206.9K
post/22-Oct-2020
PREUPLOAD.cfg22-Oct-202034
README22-Oct-2020178.3K
scripts/22-Oct-2020
test/22-Oct-2020
tools/22-Oct-2020

README

      1 # SPDX-License-Identifier: GPL-2.0+
      2 #
      3 # (C) Copyright 2000 - 2013
      4 # Wolfgang Denk, DENX Software Engineering, wd (a] denx.de.
      5 
      6 Summary:
      7 ========
      8 
      9 This directory contains the source code for U-Boot, a boot loader for
     10 Embedded boards based on PowerPC, ARM, MIPS and several other
     11 processors, which can be installed in a boot ROM and used to
     12 initialize and test the hardware or to download and run application
     13 code.
     14 
     15 The development of U-Boot is closely related to Linux: some parts of
     16 the source code originate in the Linux source tree, we have some
     17 header files in common, and special provision has been made to
     18 support booting of Linux images.
     19 
     20 Some attention has been paid to make this software easily
     21 configurable and extendable. For instance, all monitor commands are
     22 implemented with the same call interface, so that it's very easy to
     23 add new commands. Also, instead of permanently adding rarely used
     24 code (for instance hardware test utilities) to the monitor, you can
     25 load and run it dynamically.
     26 
     27 
     28 Status:
     29 =======
     30 
     31 In general, all boards for which a configuration option exists in the
     32 Makefile have been tested to some extent and can be considered
     33 "working". In fact, many of them are used in production systems.
     34 
     35 In case of problems see the CHANGELOG file to find out who contributed
     36 the specific port. In addition, there are various MAINTAINERS files
     37 scattered throughout the U-Boot source identifying the people or
     38 companies responsible for various boards and subsystems.
     39 
     40 Note: As of August, 2010, there is no longer a CHANGELOG file in the
     41 actual U-Boot source tree; however, it can be created dynamically
     42 from the Git log using:
     43 
     44 	make CHANGELOG
     45 
     46 
     47 Where to get help:
     48 ==================
     49 
     50 In case you have questions about, problems with or contributions for
     51 U-Boot, you should send a message to the U-Boot mailing list at
     52 <u-boot (a] lists.denx.de>. There is also an archive of previous traffic
     53 on the mailing list - please search the archive before asking FAQ's.
     54 Please see http://lists.denx.de/pipermail/u-boot and
     55 http://dir.gmane.org/gmane.comp.boot-loaders.u-boot
     56 
     57 
     58 Where to get source code:
     59 =========================
     60 
     61 The U-Boot source code is maintained in the Git repository at
     62 git://www.denx.de/git/u-boot.git ; you can browse it online at
     63 http://www.denx.de/cgi-bin/gitweb.cgi?p=u-boot.git;a=summary
     64 
     65 The "snapshot" links on this page allow you to download tarballs of
     66 any version you might be interested in. Official releases are also
     67 available for FTP download from the ftp://ftp.denx.de/pub/u-boot/
     68 directory.
     69 
     70 Pre-built (and tested) images are available from
     71 ftp://ftp.denx.de/pub/u-boot/images/
     72 
     73 
     74 Where we come from:
     75 ===================
     76 
     77 - start from 8xxrom sources
     78 - create PPCBoot project (http://sourceforge.net/projects/ppcboot)
     79 - clean up code
     80 - make it easier to add custom boards
     81 - make it possible to add other [PowerPC] CPUs
     82 - extend functions, especially:
     83   * Provide extended interface to Linux boot loader
     84   * S-Record download
     85   * network boot
     86   * PCMCIA / CompactFlash / ATA disk / SCSI ... boot
     87 - create ARMBoot project (http://sourceforge.net/projects/armboot)
     88 - add other CPU families (starting with ARM)
     89 - create U-Boot project (http://sourceforge.net/projects/u-boot)
     90 - current project page: see http://www.denx.de/wiki/U-Boot
     91 
     92 
     93 Names and Spelling:
     94 ===================
     95 
     96 The "official" name of this project is "Das U-Boot". The spelling
     97 "U-Boot" shall be used in all written text (documentation, comments
     98 in source files etc.). Example:
     99 
    100 	This is the README file for the U-Boot project.
    101 
    102 File names etc. shall be based on the string "u-boot". Examples:
    103 
    104 	include/asm-ppc/u-boot.h
    105 
    106 	#include <asm/u-boot.h>
    107 
    108 Variable names, preprocessor constants etc. shall be either based on
    109 the string "u_boot" or on "U_BOOT". Example:
    110 
    111 	U_BOOT_VERSION		u_boot_logo
    112 	IH_OS_U_BOOT		u_boot_hush_start
    113 
    114 
    115 Versioning:
    116 ===========
    117 
    118 Starting with the release in October 2008, the names of the releases
    119 were changed from numerical release numbers without deeper meaning
    120 into a time stamp based numbering. Regular releases are identified by
    121 names consisting of the calendar year and month of the release date.
    122 Additional fields (if present) indicate release candidates or bug fix
    123 releases in "stable" maintenance trees.
    124 
    125 Examples:
    126 	U-Boot v2009.11	    - Release November 2009
    127 	U-Boot v2009.11.1   - Release 1 in version November 2009 stable tree
    128 	U-Boot v2010.09-rc1 - Release candidate 1 for September 2010 release
    129 
    130 
    131 Directory Hierarchy:
    132 ====================
    133 
    134 /arch			Architecture specific files
    135   /arc			Files generic to ARC architecture
    136   /arm			Files generic to ARM architecture
    137   /m68k			Files generic to m68k architecture
    138   /microblaze		Files generic to microblaze architecture
    139   /mips			Files generic to MIPS architecture
    140   /nds32		Files generic to NDS32 architecture
    141   /nios2		Files generic to Altera NIOS2 architecture
    142   /openrisc		Files generic to OpenRISC architecture
    143   /powerpc		Files generic to PowerPC architecture
    144   /riscv		Files generic to RISC-V architecture
    145   /sandbox		Files generic to HW-independent "sandbox"
    146   /sh			Files generic to SH architecture
    147   /x86			Files generic to x86 architecture
    148 /api			Machine/arch independent API for external apps
    149 /board			Board dependent files
    150 /cmd			U-Boot commands functions
    151 /common			Misc architecture independent functions
    152 /configs		Board default configuration files
    153 /disk			Code for disk drive partition handling
    154 /doc			Documentation (don't expect too much)
    155 /drivers		Commonly used device drivers
    156 /dts			Contains Makefile for building internal U-Boot fdt.
    157 /examples		Example code for standalone applications, etc.
    158 /fs			Filesystem code (cramfs, ext2, jffs2, etc.)
    159 /include		Header Files
    160 /lib			Library routines generic to all architectures
    161 /Licenses		Various license files
    162 /net			Networking code
    163 /post			Power On Self Test
    164 /scripts		Various build scripts and Makefiles
    165 /test			Various unit test files
    166 /tools			Tools to build S-Record or U-Boot images, etc.
    167 
    168 Software Configuration:
    169 =======================
    170 
    171 Configuration is usually done using C preprocessor defines; the
    172 rationale behind that is to avoid dead code whenever possible.
    173 
    174 There are two classes of configuration variables:
    175 
    176 * Configuration _OPTIONS_:
    177   These are selectable by the user and have names beginning with
    178   "CONFIG_".
    179 
    180 * Configuration _SETTINGS_:
    181   These depend on the hardware etc. and should not be meddled with if
    182   you don't know what you're doing; they have names beginning with
    183   "CONFIG_SYS_".
    184 
    185 Previously, all configuration was done by hand, which involved creating
    186 symbolic links and editing configuration files manually. More recently,
    187 U-Boot has added the Kbuild infrastructure used by the Linux kernel,
    188 allowing you to use the "make menuconfig" command to configure your
    189 build.
    190 
    191 
    192 Selection of Processor Architecture and Board Type:
    193 ---------------------------------------------------
    194 
    195 For all supported boards there are ready-to-use default
    196 configurations available; just type "make <board_name>_defconfig".
    197 
    198 Example: For a TQM823L module type:
    199 
    200 	cd u-boot
    201 	make TQM823L_defconfig
    202 
    203 Note: If you're looking for the default configuration file for a board
    204 you're sure used to be there but is now missing, check the file
    205 doc/README.scrapyard for a list of no longer supported boards.
    206 
    207 Sandbox Environment:
    208 --------------------
    209 
    210 U-Boot can be built natively to run on a Linux host using the 'sandbox'
    211 board. This allows feature development which is not board- or architecture-
    212 specific to be undertaken on a native platform. The sandbox is also used to
    213 run some of U-Boot's tests.
    214 
    215 See board/sandbox/README.sandbox for more details.
    216 
    217 
    218 Board Initialisation Flow:
    219 --------------------------
    220 
    221 This is the intended start-up flow for boards. This should apply for both
    222 SPL and U-Boot proper (i.e. they both follow the same rules).
    223 
    224 Note: "SPL" stands for "Secondary Program Loader," which is explained in
    225 more detail later in this file.
    226 
    227 At present, SPL mostly uses a separate code path, but the function names
    228 and roles of each function are the same. Some boards or architectures
    229 may not conform to this.  At least most ARM boards which use
    230 CONFIG_SPL_FRAMEWORK conform to this.
    231 
    232 Execution typically starts with an architecture-specific (and possibly
    233 CPU-specific) start.S file, such as:
    234 
    235 	- arch/arm/cpu/armv7/start.S
    236 	- arch/powerpc/cpu/mpc83xx/start.S
    237 	- arch/mips/cpu/start.S
    238 
    239 and so on. From there, three functions are called; the purpose and
    240 limitations of each of these functions are described below.
    241 
    242 lowlevel_init():
    243 	- purpose: essential init to permit execution to reach board_init_f()
    244 	- no global_data or BSS
    245 	- there is no stack (ARMv7 may have one but it will soon be removed)
    246 	- must not set up SDRAM or use console
    247 	- must only do the bare minimum to allow execution to continue to
    248 		board_init_f()
    249 	- this is almost never needed
    250 	- return normally from this function
    251 
    252 board_init_f():
    253 	- purpose: set up the machine ready for running board_init_r():
    254 		i.e. SDRAM and serial UART
    255 	- global_data is available
    256 	- stack is in SRAM
    257 	- BSS is not available, so you cannot use global/static variables,
    258 		only stack variables and global_data
    259 
    260 	Non-SPL-specific notes:
    261 	- dram_init() is called to set up DRAM. If already done in SPL this
    262 		can do nothing
    263 
    264 	SPL-specific notes:
    265 	- you can override the entire board_init_f() function with your own
    266 		version as needed.
    267 	- preloader_console_init() can be called here in extremis
    268 	- should set up SDRAM, and anything needed to make the UART work
    269 	- these is no need to clear BSS, it will be done by crt0.S
    270 	- must return normally from this function (don't call board_init_r()
    271 		directly)
    272 
    273 Here the BSS is cleared. For SPL, if CONFIG_SPL_STACK_R is defined, then at
    274 this point the stack and global_data are relocated to below
    275 CONFIG_SPL_STACK_R_ADDR. For non-SPL, U-Boot is relocated to run at the top of
    276 memory.
    277 
    278 board_init_r():
    279 	- purpose: main execution, common code
    280 	- global_data is available
    281 	- SDRAM is available
    282 	- BSS is available, all static/global variables can be used
    283 	- execution eventually continues to main_loop()
    284 
    285 	Non-SPL-specific notes:
    286 	- U-Boot is relocated to the top of memory and is now running from
    287 		there.
    288 
    289 	SPL-specific notes:
    290 	- stack is optionally in SDRAM, if CONFIG_SPL_STACK_R is defined and
    291 		CONFIG_SPL_STACK_R_ADDR points into SDRAM
    292 	- preloader_console_init() can be called here - typically this is
    293 		done by selecting CONFIG_SPL_BOARD_INIT and then supplying a
    294 		spl_board_init() function containing this call
    295 	- loads U-Boot or (in falcon mode) Linux
    296 
    297 
    298 
    299 Configuration Options:
    300 ----------------------
    301 
    302 Configuration depends on the combination of board and CPU type; all
    303 such information is kept in a configuration file
    304 "include/configs/<board_name>.h".
    305 
    306 Example: For a TQM823L module, all configuration settings are in
    307 "include/configs/TQM823L.h".
    308 
    309 
    310 Many of the options are named exactly as the corresponding Linux
    311 kernel configuration options. The intention is to make it easier to
    312 build a config tool - later.
    313 
    314 - ARM Platform Bus Type(CCI):
    315 		CoreLink Cache Coherent Interconnect (CCI) is ARM BUS which
    316 		provides full cache coherency between two clusters of multi-core
    317 		CPUs and I/O coherency for devices and I/O masters
    318 
    319 		CONFIG_SYS_FSL_HAS_CCI400
    320 
    321 		Defined For SoC that has cache coherent interconnect
    322 		CCN-400
    323 
    324 		CONFIG_SYS_FSL_HAS_CCN504
    325 
    326 		Defined for SoC that has cache coherent interconnect CCN-504
    327 
    328 The following options need to be configured:
    329 
    330 - CPU Type:	Define exactly one, e.g. CONFIG_MPC85XX.
    331 
    332 - Board Type:	Define exactly one, e.g. CONFIG_MPC8540ADS.
    333 
    334 - 85xx CPU Options:
    335 		CONFIG_SYS_PPC64
    336 
    337 		Specifies that the core is a 64-bit PowerPC implementation (implements
    338 		the "64" category of the Power ISA). This is necessary for ePAPR
    339 		compliance, among other possible reasons.
    340 
    341 		CONFIG_SYS_FSL_TBCLK_DIV
    342 
    343 		Defines the core time base clock divider ratio compared to the
    344 		system clock.  On most PQ3 devices this is 8, on newer QorIQ
    345 		devices it can be 16 or 32.  The ratio varies from SoC to Soc.
    346 
    347 		CONFIG_SYS_FSL_PCIE_COMPAT
    348 
    349 		Defines the string to utilize when trying to match PCIe device
    350 		tree nodes for the given platform.
    351 
    352 		CONFIG_SYS_FSL_ERRATUM_A004510
    353 
    354 		Enables a workaround for erratum A004510.  If set,
    355 		then CONFIG_SYS_FSL_ERRATUM_A004510_SVR_REV and
    356 		CONFIG_SYS_FSL_CORENET_SNOOPVEC_COREONLY must be set.
    357 
    358 		CONFIG_SYS_FSL_ERRATUM_A004510_SVR_REV
    359 		CONFIG_SYS_FSL_ERRATUM_A004510_SVR_REV2 (optional)
    360 
    361 		Defines one or two SoC revisions (low 8 bits of SVR)
    362 		for which the A004510 workaround should be applied.
    363 
    364 		The rest of SVR is either not relevant to the decision
    365 		of whether the erratum is present (e.g. p2040 versus
    366 		p2041) or is implied by the build target, which controls
    367 		whether CONFIG_SYS_FSL_ERRATUM_A004510 is set.
    368 
    369 		See Freescale App Note 4493 for more information about
    370 		this erratum.
    371 
    372 		CONFIG_A003399_NOR_WORKAROUND
    373 		Enables a workaround for IFC erratum A003399. It is only
    374 		required during NOR boot.
    375 
    376 		CONFIG_A008044_WORKAROUND
    377 		Enables a workaround for T1040/T1042 erratum A008044. It is only
    378 		required during NAND boot and valid for Rev 1.0 SoC revision
    379 
    380 		CONFIG_SYS_FSL_CORENET_SNOOPVEC_COREONLY
    381 
    382 		This is the value to write into CCSR offset 0x18600
    383 		according to the A004510 workaround.
    384 
    385 		CONFIG_SYS_FSL_DSP_DDR_ADDR
    386 		This value denotes start offset of DDR memory which is
    387 		connected exclusively to the DSP cores.
    388 
    389 		CONFIG_SYS_FSL_DSP_M2_RAM_ADDR
    390 		This value denotes start offset of M2 memory
    391 		which is directly connected to the DSP core.
    392 
    393 		CONFIG_SYS_FSL_DSP_M3_RAM_ADDR
    394 		This value denotes start offset of M3 memory which is directly
    395 		connected to the DSP core.
    396 
    397 		CONFIG_SYS_FSL_DSP_CCSRBAR_DEFAULT
    398 		This value denotes start offset of DSP CCSR space.
    399 
    400 		CONFIG_SYS_FSL_SINGLE_SOURCE_CLK
    401 		Single Source Clock is clocking mode present in some of FSL SoC's.
    402 		In this mode, a single differential clock is used to supply
    403 		clocks to the sysclock, ddrclock and usbclock.
    404 
    405 		CONFIG_SYS_CPC_REINIT_F
    406 		This CONFIG is defined when the CPC is configured as SRAM at the
    407 		time of U-Boot entry and is required to be re-initialized.
    408 
    409 		CONFIG_DEEP_SLEEP
    410 		Indicates this SoC supports deep sleep feature. If deep sleep is
    411 		supported, core will start to execute uboot when wakes up.
    412 
    413 - Generic CPU options:
    414 		CONFIG_SYS_BIG_ENDIAN, CONFIG_SYS_LITTLE_ENDIAN
    415 
    416 		Defines the endianess of the CPU. Implementation of those
    417 		values is arch specific.
    418 
    419 		CONFIG_SYS_FSL_DDR
    420 		Freescale DDR driver in use. This type of DDR controller is
    421 		found in mpc83xx, mpc85xx, mpc86xx as well as some ARM core
    422 		SoCs.
    423 
    424 		CONFIG_SYS_FSL_DDR_ADDR
    425 		Freescale DDR memory-mapped register base.
    426 
    427 		CONFIG_SYS_FSL_DDR_EMU
    428 		Specify emulator support for DDR. Some DDR features such as
    429 		deskew training are not available.
    430 
    431 		CONFIG_SYS_FSL_DDRC_GEN1
    432 		Freescale DDR1 controller.
    433 
    434 		CONFIG_SYS_FSL_DDRC_GEN2
    435 		Freescale DDR2 controller.
    436 
    437 		CONFIG_SYS_FSL_DDRC_GEN3
    438 		Freescale DDR3 controller.
    439 
    440 		CONFIG_SYS_FSL_DDRC_GEN4
    441 		Freescale DDR4 controller.
    442 
    443 		CONFIG_SYS_FSL_DDRC_ARM_GEN3
    444 		Freescale DDR3 controller for ARM-based SoCs.
    445 
    446 		CONFIG_SYS_FSL_DDR1
    447 		Board config to use DDR1. It can be enabled for SoCs with
    448 		Freescale DDR1 or DDR2 controllers, depending on the board
    449 		implemetation.
    450 
    451 		CONFIG_SYS_FSL_DDR2
    452 		Board config to use DDR2. It can be enabled for SoCs with
    453 		Freescale DDR2 or DDR3 controllers, depending on the board
    454 		implementation.
    455 
    456 		CONFIG_SYS_FSL_DDR3
    457 		Board config to use DDR3. It can be enabled for SoCs with
    458 		Freescale DDR3 or DDR3L controllers.
    459 
    460 		CONFIG_SYS_FSL_DDR3L
    461 		Board config to use DDR3L. It can be enabled for SoCs with
    462 		DDR3L controllers.
    463 
    464 		CONFIG_SYS_FSL_DDR4
    465 		Board config to use DDR4. It can be enabled for SoCs with
    466 		DDR4 controllers.
    467 
    468 		CONFIG_SYS_FSL_IFC_BE
    469 		Defines the IFC controller register space as Big Endian
    470 
    471 		CONFIG_SYS_FSL_IFC_LE
    472 		Defines the IFC controller register space as Little Endian
    473 
    474 		CONFIG_SYS_FSL_IFC_CLK_DIV
    475 		Defines divider of platform clock(clock input to IFC controller).
    476 
    477 		CONFIG_SYS_FSL_LBC_CLK_DIV
    478 		Defines divider of platform clock(clock input to eLBC controller).
    479 
    480 		CONFIG_SYS_FSL_PBL_PBI
    481 		It enables addition of RCW (Power on reset configuration) in built image.
    482 		Please refer doc/README.pblimage for more details
    483 
    484 		CONFIG_SYS_FSL_PBL_RCW
    485 		It adds PBI(pre-boot instructions) commands in u-boot build image.
    486 		PBI commands can be used to configure SoC before it starts the execution.
    487 		Please refer doc/README.pblimage for more details
    488 
    489 		CONFIG_SPL_FSL_PBL
    490 		It adds a target to create boot binary having SPL binary in PBI format
    491 		concatenated with u-boot binary.
    492 
    493 		CONFIG_SYS_FSL_DDR_BE
    494 		Defines the DDR controller register space as Big Endian
    495 
    496 		CONFIG_SYS_FSL_DDR_LE
    497 		Defines the DDR controller register space as Little Endian
    498 
    499 		CONFIG_SYS_FSL_DDR_SDRAM_BASE_PHY
    500 		Physical address from the view of DDR controllers. It is the
    501 		same as CONFIG_SYS_DDR_SDRAM_BASE for  all Power SoCs. But
    502 		it could be different for ARM SoCs.
    503 
    504 		CONFIG_SYS_FSL_DDR_INTLV_256B
    505 		DDR controller interleaving on 256-byte. This is a special
    506 		interleaving mode, handled by Dickens for Freescale layerscape
    507 		SoCs with ARM core.
    508 
    509 		CONFIG_SYS_FSL_DDR_MAIN_NUM_CTRLS
    510 		Number of controllers used as main memory.
    511 
    512 		CONFIG_SYS_FSL_OTHER_DDR_NUM_CTRLS
    513 		Number of controllers used for other than main memory.
    514 
    515 		CONFIG_SYS_FSL_HAS_DP_DDR
    516 		Defines the SoC has DP-DDR used for DPAA.
    517 
    518 		CONFIG_SYS_FSL_SEC_BE
    519 		Defines the SEC controller register space as Big Endian
    520 
    521 		CONFIG_SYS_FSL_SEC_LE
    522 		Defines the SEC controller register space as Little Endian
    523 
    524 - MIPS CPU options:
    525 		CONFIG_SYS_INIT_SP_OFFSET
    526 
    527 		Offset relative to CONFIG_SYS_SDRAM_BASE for initial stack
    528 		pointer. This is needed for the temporary stack before
    529 		relocation.
    530 
    531 		CONFIG_SYS_MIPS_CACHE_MODE
    532 
    533 		Cache operation mode for the MIPS CPU.
    534 		See also arch/mips/include/asm/mipsregs.h.
    535 		Possible values are:
    536 			CONF_CM_CACHABLE_NO_WA
    537 			CONF_CM_CACHABLE_WA
    538 			CONF_CM_UNCACHED
    539 			CONF_CM_CACHABLE_NONCOHERENT
    540 			CONF_CM_CACHABLE_CE
    541 			CONF_CM_CACHABLE_COW
    542 			CONF_CM_CACHABLE_CUW
    543 			CONF_CM_CACHABLE_ACCELERATED
    544 
    545 		CONFIG_SYS_XWAY_EBU_BOOTCFG
    546 
    547 		Special option for Lantiq XWAY SoCs for booting from NOR flash.
    548 		See also arch/mips/cpu/mips32/start.S.
    549 
    550 		CONFIG_XWAY_SWAP_BYTES
    551 
    552 		Enable compilation of tools/xway-swap-bytes needed for Lantiq
    553 		XWAY SoCs for booting from NOR flash. The U-Boot image needs to
    554 		be swapped if a flash programmer is used.
    555 
    556 - ARM options:
    557 		CONFIG_SYS_EXCEPTION_VECTORS_HIGH
    558 
    559 		Select high exception vectors of the ARM core, e.g., do not
    560 		clear the V bit of the c1 register of CP15.
    561 
    562 		COUNTER_FREQUENCY
    563 		Generic timer clock source frequency.
    564 
    565 		COUNTER_FREQUENCY_REAL
    566 		Generic timer clock source frequency if the real clock is
    567 		different from COUNTER_FREQUENCY, and can only be determined
    568 		at run time.
    569 
    570 - Tegra SoC options:
    571 		CONFIG_TEGRA_SUPPORT_NON_SECURE
    572 
    573 		Support executing U-Boot in non-secure (NS) mode. Certain
    574 		impossible actions will be skipped if the CPU is in NS mode,
    575 		such as ARM architectural timer initialization.
    576 
    577 - Linux Kernel Interface:
    578 		CONFIG_CLOCKS_IN_MHZ
    579 
    580 		U-Boot stores all clock information in Hz
    581 		internally. For binary compatibility with older Linux
    582 		kernels (which expect the clocks passed in the
    583 		bd_info data to be in MHz) the environment variable
    584 		"clocks_in_mhz" can be defined so that U-Boot
    585 		converts clock data to MHZ before passing it to the
    586 		Linux kernel.
    587 		When CONFIG_CLOCKS_IN_MHZ is defined, a definition of
    588 		"clocks_in_mhz=1" is automatically included in the
    589 		default environment.
    590 
    591 		CONFIG_MEMSIZE_IN_BYTES		[relevant for MIPS only]
    592 
    593 		When transferring memsize parameter to Linux, some versions
    594 		expect it to be in bytes, others in MB.
    595 		Define CONFIG_MEMSIZE_IN_BYTES to make it in bytes.
    596 
    597 		CONFIG_OF_LIBFDT
    598 
    599 		New kernel versions are expecting firmware settings to be
    600 		passed using flattened device trees (based on open firmware
    601 		concepts).
    602 
    603 		CONFIG_OF_LIBFDT
    604 		 * New libfdt-based support
    605 		 * Adds the "fdt" command
    606 		 * The bootm command automatically updates the fdt
    607 
    608 		OF_TBCLK - The timebase frequency.
    609 		OF_STDOUT_PATH - The path to the console device
    610 
    611 		boards with QUICC Engines require OF_QE to set UCC MAC
    612 		addresses
    613 
    614 		CONFIG_OF_BOARD_SETUP
    615 
    616 		Board code has addition modification that it wants to make
    617 		to the flat device tree before handing it off to the kernel
    618 
    619 		CONFIG_OF_SYSTEM_SETUP
    620 
    621 		Other code has addition modification that it wants to make
    622 		to the flat device tree before handing it off to the kernel.
    623 		This causes ft_system_setup() to be called before booting
    624 		the kernel.
    625 
    626 		CONFIG_OF_IDE_FIXUP
    627 
    628 		U-Boot can detect if an IDE device is present or not.
    629 		If not, and this new config option is activated, U-Boot
    630 		removes the ATA node from the DTS before booting Linux,
    631 		so the Linux IDE driver does not probe the device and
    632 		crash. This is needed for buggy hardware (uc101) where
    633 		no pull down resistor is connected to the signal IDE5V_DD7.
    634 
    635 		CONFIG_MACH_TYPE	[relevant for ARM only][mandatory]
    636 
    637 		This setting is mandatory for all boards that have only one
    638 		machine type and must be used to specify the machine type
    639 		number as it appears in the ARM machine registry
    640 		(see http://www.arm.linux.org.uk/developer/machines/).
    641 		Only boards that have multiple machine types supported
    642 		in a single configuration file and the machine type is
    643 		runtime discoverable, do not have to use this setting.
    644 
    645 - vxWorks boot parameters:
    646 
    647 		bootvx constructs a valid bootline using the following
    648 		environments variables: bootdev, bootfile, ipaddr, netmask,
    649 		serverip, gatewayip, hostname, othbootargs.
    650 		It loads the vxWorks image pointed bootfile.
    651 
    652 		Note: If a "bootargs" environment is defined, it will overwride
    653 		the defaults discussed just above.
    654 
    655 - Cache Configuration:
    656 		CONFIG_SYS_ICACHE_OFF - Do not enable instruction cache in U-Boot
    657 		CONFIG_SYS_DCACHE_OFF - Do not enable data cache in U-Boot
    658 		CONFIG_SYS_L2CACHE_OFF- Do not enable L2 cache in U-Boot
    659 
    660 - Cache Configuration for ARM:
    661 		CONFIG_SYS_L2_PL310 - Enable support for ARM PL310 L2 cache
    662 				      controller
    663 		CONFIG_SYS_PL310_BASE - Physical base address of PL310
    664 					controller register space
    665 
    666 - Serial Ports:
    667 		CONFIG_PL010_SERIAL
    668 
    669 		Define this if you want support for Amba PrimeCell PL010 UARTs.
    670 
    671 		CONFIG_PL011_SERIAL
    672 
    673 		Define this if you want support for Amba PrimeCell PL011 UARTs.
    674 
    675 		CONFIG_PL011_CLOCK
    676 
    677 		If you have Amba PrimeCell PL011 UARTs, set this variable to
    678 		the clock speed of the UARTs.
    679 
    680 		CONFIG_PL01x_PORTS
    681 
    682 		If you have Amba PrimeCell PL010 or PL011 UARTs on your board,
    683 		define this to a list of base addresses for each (supported)
    684 		port. See e.g. include/configs/versatile.h
    685 
    686 		CONFIG_SERIAL_HW_FLOW_CONTROL
    687 
    688 		Define this variable to enable hw flow control in serial driver.
    689 		Current user of this option is drivers/serial/nsl16550.c driver
    690 
    691 - Console Baudrate:
    692 		CONFIG_BAUDRATE - in bps
    693 		Select one of the baudrates listed in
    694 		CONFIG_SYS_BAUDRATE_TABLE, see below.
    695 
    696 - Autoboot Command:
    697 		CONFIG_BOOTCOMMAND
    698 		Only needed when CONFIG_BOOTDELAY is enabled;
    699 		define a command string that is automatically executed
    700 		when no character is read on the console interface
    701 		within "Boot Delay" after reset.
    702 
    703 		CONFIG_RAMBOOT and CONFIG_NFSBOOT
    704 		The value of these goes into the environment as
    705 		"ramboot" and "nfsboot" respectively, and can be used
    706 		as a convenience, when switching between booting from
    707 		RAM and NFS.
    708 
    709 - Pre-Boot Commands:
    710 		CONFIG_PREBOOT
    711 
    712 		When this option is #defined, the existence of the
    713 		environment variable "preboot" will be checked
    714 		immediately before starting the CONFIG_BOOTDELAY
    715 		countdown and/or running the auto-boot command resp.
    716 		entering interactive mode.
    717 
    718 		This feature is especially useful when "preboot" is
    719 		automatically generated or modified. For an example
    720 		see the LWMON board specific code: here "preboot" is
    721 		modified when the user holds down a certain
    722 		combination of keys on the (special) keyboard when
    723 		booting the systems
    724 
    725 - Serial Download Echo Mode:
    726 		CONFIG_LOADS_ECHO
    727 		If defined to 1, all characters received during a
    728 		serial download (using the "loads" command) are
    729 		echoed back. This might be needed by some terminal
    730 		emulations (like "cu"), but may as well just take
    731 		time on others. This setting #define's the initial
    732 		value of the "loads_echo" environment variable.
    733 
    734 - Kgdb Serial Baudrate: (if CONFIG_CMD_KGDB is defined)
    735 		CONFIG_KGDB_BAUDRATE
    736 		Select one of the baudrates listed in
    737 		CONFIG_SYS_BAUDRATE_TABLE, see below.
    738 
    739 - Removal of commands
    740 		If no commands are needed to boot, you can disable
    741 		CONFIG_CMDLINE to remove them. In this case, the command line
    742 		will not be available, and when U-Boot wants to execute the
    743 		boot command (on start-up) it will call board_run_command()
    744 		instead. This can reduce image size significantly for very
    745 		simple boot procedures.
    746 
    747 - Regular expression support:
    748 		CONFIG_REGEX
    749 		If this variable is defined, U-Boot is linked against
    750 		the SLRE (Super Light Regular Expression) library,
    751 		which adds regex support to some commands, as for
    752 		example "env grep" and "setexpr".
    753 
    754 - Device tree:
    755 		CONFIG_OF_CONTROL
    756 		If this variable is defined, U-Boot will use a device tree
    757 		to configure its devices, instead of relying on statically
    758 		compiled #defines in the board file. This option is
    759 		experimental and only available on a few boards. The device
    760 		tree is available in the global data as gd->fdt_blob.
    761 
    762 		U-Boot needs to get its device tree from somewhere. This can
    763 		be done using one of the three options below:
    764 
    765 		CONFIG_OF_EMBED
    766 		If this variable is defined, U-Boot will embed a device tree
    767 		binary in its image. This device tree file should be in the
    768 		board directory and called <soc>-<board>.dts. The binary file
    769 		is then picked up in board_init_f() and made available through
    770 		the global data structure as gd->fdt_blob.
    771 
    772 		CONFIG_OF_SEPARATE
    773 		If this variable is defined, U-Boot will build a device tree
    774 		binary. It will be called u-boot.dtb. Architecture-specific
    775 		code will locate it at run-time. Generally this works by:
    776 
    777 			cat u-boot.bin u-boot.dtb >image.bin
    778 
    779 		and in fact, U-Boot does this for you, creating a file called
    780 		u-boot-dtb.bin which is useful in the common case. You can
    781 		still use the individual files if you need something more
    782 		exotic.
    783 
    784 		CONFIG_OF_BOARD
    785 		If this variable is defined, U-Boot will use the device tree
    786 		provided by the board at runtime instead of embedding one with
    787 		the image. Only boards defining board_fdt_blob_setup() support
    788 		this option (see include/fdtdec.h file).
    789 
    790 - Watchdog:
    791 		CONFIG_WATCHDOG
    792 		If this variable is defined, it enables watchdog
    793 		support for the SoC. There must be support in the SoC
    794 		specific code for a watchdog. For the 8xx
    795 		CPUs, the SIU Watchdog feature is enabled in the SYPCR
    796 		register.  When supported for a specific SoC is
    797 		available, then no further board specific code should
    798 		be needed to use it.
    799 
    800 		CONFIG_HW_WATCHDOG
    801 		When using a watchdog circuitry external to the used
    802 		SoC, then define this variable and provide board
    803 		specific code for the "hw_watchdog_reset" function.
    804 
    805 		CONFIG_AT91_HW_WDT_TIMEOUT
    806 		specify the timeout in seconds. default 2 seconds.
    807 
    808 - Real-Time Clock:
    809 
    810 		When CONFIG_CMD_DATE is selected, the type of the RTC
    811 		has to be selected, too. Define exactly one of the
    812 		following options:
    813 
    814 		CONFIG_RTC_PCF8563	- use Philips PCF8563 RTC
    815 		CONFIG_RTC_MC13XXX	- use MC13783 or MC13892 RTC
    816 		CONFIG_RTC_MC146818	- use MC146818 RTC
    817 		CONFIG_RTC_DS1307	- use Maxim, Inc. DS1307 RTC
    818 		CONFIG_RTC_DS1337	- use Maxim, Inc. DS1337 RTC
    819 		CONFIG_RTC_DS1338	- use Maxim, Inc. DS1338 RTC
    820 		CONFIG_RTC_DS1339	- use Maxim, Inc. DS1339 RTC
    821 		CONFIG_RTC_DS164x	- use Dallas DS164x RTC
    822 		CONFIG_RTC_ISL1208	- use Intersil ISL1208 RTC
    823 		CONFIG_RTC_MAX6900	- use Maxim, Inc. MAX6900 RTC
    824 		CONFIG_RTC_DS1337_NOOSC	- Turn off the OSC output for DS1337
    825 		CONFIG_SYS_RV3029_TCR	- enable trickle charger on
    826 					  RV3029 RTC.
    827 
    828 		Note that if the RTC uses I2C, then the I2C interface
    829 		must also be configured. See I2C Support, below.
    830 
    831 - GPIO Support:
    832 		CONFIG_PCA953X		- use NXP's PCA953X series I2C GPIO
    833 
    834 		The CONFIG_SYS_I2C_PCA953X_WIDTH option specifies a list of
    835 		chip-ngpio pairs that tell the PCA953X driver the number of
    836 		pins supported by a particular chip.
    837 
    838 		Note that if the GPIO device uses I2C, then the I2C interface
    839 		must also be configured. See I2C Support, below.
    840 
    841 - I/O tracing:
    842 		When CONFIG_IO_TRACE is selected, U-Boot intercepts all I/O
    843 		accesses and can checksum them or write a list of them out
    844 		to memory. See the 'iotrace' command for details. This is
    845 		useful for testing device drivers since it can confirm that
    846 		the driver behaves the same way before and after a code
    847 		change. Currently this is supported on sandbox and arm. To
    848 		add support for your architecture, add '#include <iotrace.h>'
    849 		to the bottom of arch/<arch>/include/asm/io.h and test.
    850 
    851 		Example output from the 'iotrace stats' command is below.
    852 		Note that if the trace buffer is exhausted, the checksum will
    853 		still continue to operate.
    854 
    855 			iotrace is enabled
    856 			Start:  10000000	(buffer start address)
    857 			Size:   00010000	(buffer size)
    858 			Offset: 00000120	(current buffer offset)
    859 			Output: 10000120	(start + offset)
    860 			Count:  00000018	(number of trace records)
    861 			CRC32:  9526fb66	(CRC32 of all trace records)
    862 
    863 - Timestamp Support:
    864 
    865 		When CONFIG_TIMESTAMP is selected, the timestamp
    866 		(date and time) of an image is printed by image
    867 		commands like bootm or iminfo. This option is
    868 		automatically enabled when you select CONFIG_CMD_DATE .
    869 
    870 - Partition Labels (disklabels) Supported:
    871 		Zero or more of the following:
    872 		CONFIG_MAC_PARTITION   Apple's MacOS partition table.
    873 		CONFIG_ISO_PARTITION   ISO partition table, used on CDROM etc.
    874 		CONFIG_EFI_PARTITION   GPT partition table, common when EFI is the
    875 				       bootloader.  Note 2TB partition limit; see
    876 				       disk/part_efi.c
    877 		CONFIG_MTD_PARTITIONS  Memory Technology Device partition table.
    878 
    879 		If IDE or SCSI support is enabled (CONFIG_IDE or
    880 		CONFIG_SCSI) you must configure support for at
    881 		least one non-MTD partition type as well.
    882 
    883 - IDE Reset method:
    884 		CONFIG_IDE_RESET_ROUTINE - this is defined in several
    885 		board configurations files but used nowhere!
    886 
    887 		CONFIG_IDE_RESET - is this is defined, IDE Reset will
    888 		be performed by calling the function
    889 			ide_set_reset(int reset)
    890 		which has to be defined in a board specific file
    891 
    892 - ATAPI Support:
    893 		CONFIG_ATAPI
    894 
    895 		Set this to enable ATAPI support.
    896 
    897 - LBA48 Support
    898 		CONFIG_LBA48
    899 
    900 		Set this to enable support for disks larger than 137GB
    901 		Also look at CONFIG_SYS_64BIT_LBA.
    902 		Whithout these , LBA48 support uses 32bit variables and will 'only'
    903 		support disks up to 2.1TB.
    904 
    905 		CONFIG_SYS_64BIT_LBA:
    906 			When enabled, makes the IDE subsystem use 64bit sector addresses.
    907 			Default is 32bit.
    908 
    909 - SCSI Support:
    910 		CONFIG_SYS_SCSI_MAX_LUN [8], CONFIG_SYS_SCSI_MAX_SCSI_ID [7] and
    911 		CONFIG_SYS_SCSI_MAX_DEVICE [CONFIG_SYS_SCSI_MAX_SCSI_ID *
    912 		CONFIG_SYS_SCSI_MAX_LUN] can be adjusted to define the
    913 		maximum numbers of LUNs, SCSI ID's and target
    914 		devices.
    915 
    916 		The environment variable 'scsidevs' is set to the number of
    917 		SCSI devices found during the last scan.
    918 
    919 - NETWORK Support (PCI):
    920 		CONFIG_E1000
    921 		Support for Intel 8254x/8257x gigabit chips.
    922 
    923 		CONFIG_E1000_SPI
    924 		Utility code for direct access to the SPI bus on Intel 8257x.
    925 		This does not do anything useful unless you set at least one
    926 		of CONFIG_CMD_E1000 or CONFIG_E1000_SPI_GENERIC.
    927 
    928 		CONFIG_E1000_SPI_GENERIC
    929 		Allow generic access to the SPI bus on the Intel 8257x, for
    930 		example with the "sspi" command.
    931 
    932 		CONFIG_EEPRO100
    933 		Support for Intel 82557/82559/82559ER chips.
    934 		Optional CONFIG_EEPRO100_SROM_WRITE enables EEPROM
    935 		write routine for first time initialisation.
    936 
    937 		CONFIG_TULIP
    938 		Support for Digital 2114x chips.
    939 		Optional CONFIG_TULIP_SELECT_MEDIA for board specific
    940 		modem chip initialisation (KS8761/QS6611).
    941 
    942 		CONFIG_NATSEMI
    943 		Support for National dp83815 chips.
    944 
    945 		CONFIG_NS8382X
    946 		Support for National dp8382[01] gigabit chips.
    947 
    948 - NETWORK Support (other):
    949 
    950 		CONFIG_DRIVER_AT91EMAC
    951 		Support for AT91RM9200 EMAC.
    952 
    953 			CONFIG_RMII
    954 			Define this to use reduced MII inteface
    955 
    956 			CONFIG_DRIVER_AT91EMAC_QUIET
    957 			If this defined, the driver is quiet.
    958 			The driver doen't show link status messages.
    959 
    960 		CONFIG_CALXEDA_XGMAC
    961 		Support for the Calxeda XGMAC device
    962 
    963 		CONFIG_LAN91C96
    964 		Support for SMSC's LAN91C96 chips.
    965 
    966 			CONFIG_LAN91C96_USE_32_BIT
    967 			Define this to enable 32 bit addressing
    968 
    969 		CONFIG_SMC91111
    970 		Support for SMSC's LAN91C111 chip
    971 
    972 			CONFIG_SMC91111_BASE
    973 			Define this to hold the physical address
    974 			of the device (I/O space)
    975 
    976 			CONFIG_SMC_USE_32_BIT
    977 			Define this if data bus is 32 bits
    978 
    979 			CONFIG_SMC_USE_IOFUNCS
    980 			Define this to use i/o functions instead of macros
    981 			(some hardware wont work with macros)
    982 
    983 		CONFIG_DRIVER_TI_EMAC
    984 		Support for davinci emac
    985 
    986 			CONFIG_SYS_DAVINCI_EMAC_PHY_COUNT
    987 			Define this if you have more then 3 PHYs.
    988 
    989 		CONFIG_FTGMAC100
    990 		Support for Faraday's FTGMAC100 Gigabit SoC Ethernet
    991 
    992 			CONFIG_FTGMAC100_EGIGA
    993 			Define this to use GE link update with gigabit PHY.
    994 			Define this if FTGMAC100 is connected to gigabit PHY.
    995 			If your system has 10/100 PHY only, it might not occur
    996 			wrong behavior. Because PHY usually return timeout or
    997 			useless data when polling gigabit status and gigabit
    998 			control registers. This behavior won't affect the
    999 			correctnessof 10/100 link speed update.
   1000 
   1001 		CONFIG_SH_ETHER
   1002 		Support for Renesas on-chip Ethernet controller
   1003 
   1004 			CONFIG_SH_ETHER_USE_PORT
   1005 			Define the number of ports to be used
   1006 
   1007 			CONFIG_SH_ETHER_PHY_ADDR
   1008 			Define the ETH PHY's address
   1009 
   1010 			CONFIG_SH_ETHER_CACHE_WRITEBACK
   1011 			If this option is set, the driver enables cache flush.
   1012 
   1013 - PWM Support:
   1014 		CONFIG_PWM_IMX
   1015 		Support for PWM module on the imx6.
   1016 
   1017 - TPM Support:
   1018 		CONFIG_TPM
   1019 		Support TPM devices.
   1020 
   1021 		CONFIG_TPM_TIS_INFINEON
   1022 		Support for Infineon i2c bus TPM devices. Only one device
   1023 		per system is supported at this time.
   1024 
   1025 			CONFIG_TPM_TIS_I2C_BURST_LIMITATION
   1026 			Define the burst count bytes upper limit
   1027 
   1028 		CONFIG_TPM_ST33ZP24
   1029 		Support for STMicroelectronics TPM devices. Requires DM_TPM support.
   1030 
   1031 			CONFIG_TPM_ST33ZP24_I2C
   1032 			Support for STMicroelectronics ST33ZP24 I2C devices.
   1033 			Requires TPM_ST33ZP24 and I2C.
   1034 
   1035 			CONFIG_TPM_ST33ZP24_SPI
   1036 			Support for STMicroelectronics ST33ZP24 SPI devices.
   1037 			Requires TPM_ST33ZP24 and SPI.
   1038 
   1039 		CONFIG_TPM_ATMEL_TWI
   1040 		Support for Atmel TWI TPM device. Requires I2C support.
   1041 
   1042 		CONFIG_TPM_TIS_LPC
   1043 		Support for generic parallel port TPM devices. Only one device
   1044 		per system is supported at this time.
   1045 
   1046 			CONFIG_TPM_TIS_BASE_ADDRESS
   1047 			Base address where the generic TPM device is mapped
   1048 			to. Contemporary x86 systems usually map it at
   1049 			0xfed40000.
   1050 
   1051 		CONFIG_TPM
   1052 		Define this to enable the TPM support library which provides
   1053 		functional interfaces to some TPM commands.
   1054 		Requires support for a TPM device.
   1055 
   1056 		CONFIG_TPM_AUTH_SESSIONS
   1057 		Define this to enable authorized functions in the TPM library.
   1058 		Requires CONFIG_TPM and CONFIG_SHA1.
   1059 
   1060 - USB Support:
   1061 		At the moment only the UHCI host controller is
   1062 		supported (PIP405, MIP405); define
   1063 		CONFIG_USB_UHCI to enable it.
   1064 		define CONFIG_USB_KEYBOARD to enable the USB Keyboard
   1065 		and define CONFIG_USB_STORAGE to enable the USB
   1066 		storage devices.
   1067 		Note:
   1068 		Supported are USB Keyboards and USB Floppy drives
   1069 		(TEAC FD-05PUB).
   1070 
   1071 		CONFIG_USB_EHCI_TXFIFO_THRESH enables setting of the
   1072 		txfilltuning field in the EHCI controller on reset.
   1073 
   1074 		CONFIG_USB_DWC2_REG_ADDR the physical CPU address of the DWC2
   1075 		HW module registers.
   1076 
   1077 - USB Device:
   1078 		Define the below if you wish to use the USB console.
   1079 		Once firmware is rebuilt from a serial console issue the
   1080 		command "setenv stdin usbtty; setenv stdout usbtty" and
   1081 		attach your USB cable. The Unix command "dmesg" should print
   1082 		it has found a new device. The environment variable usbtty
   1083 		can be set to gserial or cdc_acm to enable your device to
   1084 		appear to a USB host as a Linux gserial device or a
   1085 		Common Device Class Abstract Control Model serial device.
   1086 		If you select usbtty = gserial you should be able to enumerate
   1087 		a Linux host by
   1088 		# modprobe usbserial vendor=0xVendorID product=0xProductID
   1089 		else if using cdc_acm, simply setting the environment
   1090 		variable usbtty to be cdc_acm should suffice. The following
   1091 		might be defined in YourBoardName.h
   1092 
   1093 			CONFIG_USB_DEVICE
   1094 			Define this to build a UDC device
   1095 
   1096 			CONFIG_USB_TTY
   1097 			Define this to have a tty type of device available to
   1098 			talk to the UDC device
   1099 
   1100 			CONFIG_USBD_HS
   1101 			Define this to enable the high speed support for usb
   1102 			device and usbtty. If this feature is enabled, a routine
   1103 			int is_usbd_high_speed(void)
   1104 			also needs to be defined by the driver to dynamically poll
   1105 			whether the enumeration has succeded at high speed or full
   1106 			speed.
   1107 
   1108 			CONFIG_SYS_CONSOLE_IS_IN_ENV
   1109 			Define this if you want stdin, stdout &/or stderr to
   1110 			be set to usbtty.
   1111 
   1112 		If you have a USB-IF assigned VendorID then you may wish to
   1113 		define your own vendor specific values either in BoardName.h
   1114 		or directly in usbd_vendor_info.h. If you don't define
   1115 		CONFIG_USBD_MANUFACTURER, CONFIG_USBD_PRODUCT_NAME,
   1116 		CONFIG_USBD_VENDORID and CONFIG_USBD_PRODUCTID, then U-Boot
   1117 		should pretend to be a Linux device to it's target host.
   1118 
   1119 			CONFIG_USBD_MANUFACTURER
   1120 			Define this string as the name of your company for
   1121 			- CONFIG_USBD_MANUFACTURER "my company"
   1122 
   1123 			CONFIG_USBD_PRODUCT_NAME
   1124 			Define this string as the name of your product
   1125 			- CONFIG_USBD_PRODUCT_NAME "acme usb device"
   1126 
   1127 			CONFIG_USBD_VENDORID
   1128 			Define this as your assigned Vendor ID from the USB
   1129 			Implementors Forum. This *must* be a genuine Vendor ID
   1130 			to avoid polluting the USB namespace.
   1131 			- CONFIG_USBD_VENDORID 0xFFFF
   1132 
   1133 			CONFIG_USBD_PRODUCTID
   1134 			Define this as the unique Product ID
   1135 			for your device
   1136 			- CONFIG_USBD_PRODUCTID 0xFFFF
   1137 
   1138 - ULPI Layer Support:
   1139 		The ULPI (UTMI Low Pin (count) Interface) PHYs are supported via
   1140 		the generic ULPI layer. The generic layer accesses the ULPI PHY
   1141 		via the platform viewport, so you need both the genric layer and
   1142 		the viewport enabled. Currently only Chipidea/ARC based
   1143 		viewport is supported.
   1144 		To enable the ULPI layer support, define CONFIG_USB_ULPI and
   1145 		CONFIG_USB_ULPI_VIEWPORT in your board configuration file.
   1146 		If your ULPI phy needs a different reference clock than the
   1147 		standard 24 MHz then you have to define CONFIG_ULPI_REF_CLK to
   1148 		the appropriate value in Hz.
   1149 
   1150 - MMC Support:
   1151 		The MMC controller on the Intel PXA is supported. To
   1152 		enable this define CONFIG_MMC. The MMC can be
   1153 		accessed from the boot prompt by mapping the device
   1154 		to physical memory similar to flash. Command line is
   1155 		enabled with CONFIG_CMD_MMC. The MMC driver also works with
   1156 		the FAT fs. This is enabled with CONFIG_CMD_FAT.
   1157 
   1158 		CONFIG_SH_MMCIF
   1159 		Support for Renesas on-chip MMCIF controller
   1160 
   1161 			CONFIG_SH_MMCIF_ADDR
   1162 			Define the base address of MMCIF registers
   1163 
   1164 			CONFIG_SH_MMCIF_CLK
   1165 			Define the clock frequency for MMCIF
   1166 
   1167 		CONFIG_SUPPORT_EMMC_BOOT
   1168 		Enable some additional features of the eMMC boot partitions.
   1169 
   1170 - USB Device Firmware Update (DFU) class support:
   1171 		CONFIG_DFU_OVER_USB
   1172 		This enables the USB portion of the DFU USB class
   1173 
   1174 		CONFIG_DFU_MMC
   1175 		This enables support for exposing (e)MMC devices via DFU.
   1176 
   1177 		CONFIG_DFU_NAND
   1178 		This enables support for exposing NAND devices via DFU.
   1179 
   1180 		CONFIG_DFU_RAM
   1181 		This enables support for exposing RAM via DFU.
   1182 		Note: DFU spec refer to non-volatile memory usage, but
   1183 		allow usages beyond the scope of spec - here RAM usage,
   1184 		one that would help mostly the developer.
   1185 
   1186 		CONFIG_SYS_DFU_DATA_BUF_SIZE
   1187 		Dfu transfer uses a buffer before writing data to the
   1188 		raw storage device. Make the size (in bytes) of this buffer
   1189 		configurable. The size of this buffer is also configurable
   1190 		through the "dfu_bufsiz" environment variable.
   1191 
   1192 		CONFIG_SYS_DFU_MAX_FILE_SIZE
   1193 		When updating files rather than the raw storage device,
   1194 		we use a static buffer to copy the file into and then write
   1195 		the buffer once we've been given the whole file.  Define
   1196 		this to the maximum filesize (in bytes) for the buffer.
   1197 		Default is 4 MiB if undefined.
   1198 
   1199 		DFU_DEFAULT_POLL_TIMEOUT
   1200 		Poll timeout [ms], is the timeout a device can send to the
   1201 		host. The host must wait for this timeout before sending
   1202 		a subsequent DFU_GET_STATUS request to the device.
   1203 
   1204 		DFU_MANIFEST_POLL_TIMEOUT
   1205 		Poll timeout [ms], which the device sends to the host when
   1206 		entering dfuMANIFEST state. Host waits this timeout, before
   1207 		sending again an USB request to the device.
   1208 
   1209 - Android Bootloader support:
   1210 		CONFIG_CMD_BOOT_ANDROID
   1211 		This enables the command "boot_android" which executes the
   1212 		Android Bootloader flow. Enabling CONFIG_CMD_FASTBOOT is
   1213 		recommended to support the Android Fastboot protocol as part
   1214 		of the bootloader.
   1215 
   1216 		CONFIG_ANDROID_BOOTLOADER
   1217 		This enables support for the Android bootloader flow. Android
   1218 		devices can boot in normal mode, recovery mode or bootloader
   1219 		mode. The normal mode is the most common boot mode, but
   1220 		recovery mode is often used to perform factory reset and OTA
   1221 		(over-the-air) updates in the legacy updater. Also it is
   1222 		possible for an Android system to request a reboot to the
   1223 		"bootloader", which often means reboot to fastboot but may also
   1224 		include a UI with a menu.
   1225 
   1226 - Journaling Flash filesystem support:
   1227 		CONFIG_JFFS2_NAND
   1228 		Define these for a default partition on a NAND device
   1229 
   1230 		CONFIG_SYS_JFFS2_FIRST_SECTOR,
   1231 		CONFIG_SYS_JFFS2_FIRST_BANK, CONFIG_SYS_JFFS2_NUM_BANKS
   1232 		Define these for a default partition on a NOR device
   1233 
   1234 - Keyboard Support:
   1235 		See Kconfig help for available keyboard drivers.
   1236 
   1237 		CONFIG_KEYBOARD
   1238 
   1239 		Define this to enable a custom keyboard support.
   1240 		This simply calls drv_keyboard_init() which must be
   1241 		defined in your board-specific files. This option is deprecated
   1242 		and is only used by novena. For new boards, use driver model
   1243 		instead.
   1244 
   1245 - Video support:
   1246 		CONFIG_FSL_DIU_FB
   1247 		Enable the Freescale DIU video driver.	Reference boards for
   1248 		SOCs that have a DIU should define this macro to enable DIU
   1249 		support, and should also define these other macros:
   1250 
   1251 			CONFIG_SYS_DIU_ADDR
   1252 			CONFIG_VIDEO
   1253 			CONFIG_CFB_CONSOLE
   1254 			CONFIG_VIDEO_SW_CURSOR
   1255 			CONFIG_VGA_AS_SINGLE_DEVICE
   1256 			CONFIG_VIDEO_LOGO
   1257 			CONFIG_VIDEO_BMP_LOGO
   1258 
   1259 		The DIU driver will look for the 'video-mode' environment
   1260 		variable, and if defined, enable the DIU as a console during
   1261 		boot.  See the documentation file doc/README.video for a
   1262 		description of this variable.
   1263 
   1264 - LCD Support:	CONFIG_LCD
   1265 
   1266 		Define this to enable LCD support (for output to LCD
   1267 		display); also select one of the supported displays
   1268 		by defining one of these:
   1269 
   1270 		CONFIG_ATMEL_LCD:
   1271 
   1272 			HITACHI TX09D70VM1CCA, 3.5", 240x320.
   1273 
   1274 		CONFIG_NEC_NL6448AC33:
   1275 
   1276 			NEC NL6448AC33-18. Active, color, single scan.
   1277 
   1278 		CONFIG_NEC_NL6448BC20
   1279 
   1280 			NEC NL6448BC20-08. 6.5", 640x480.
   1281 			Active, color, single scan.
   1282 
   1283 		CONFIG_NEC_NL6448BC33_54
   1284 
   1285 			NEC NL6448BC33-54. 10.4", 640x480.
   1286 			Active, color, single scan.
   1287 
   1288 		CONFIG_SHARP_16x9
   1289 
   1290 			Sharp 320x240. Active, color, single scan.
   1291 			It isn't 16x9, and I am not sure what it is.
   1292 
   1293 		CONFIG_SHARP_LQ64D341
   1294 
   1295 			Sharp LQ64D341 display, 640x480.
   1296 			Active, color, single scan.
   1297 
   1298 		CONFIG_HLD1045
   1299 
   1300 			HLD1045 display, 640x480.
   1301 			Active, color, single scan.
   1302 
   1303 		CONFIG_OPTREX_BW
   1304 
   1305 			Optrex	 CBL50840-2 NF-FW 99 22 M5
   1306 			or
   1307 			Hitachi	 LMG6912RPFC-00T
   1308 			or
   1309 			Hitachi	 SP14Q002
   1310 
   1311 			320x240. Black & white.
   1312 
   1313 		CONFIG_LCD_ALIGNMENT
   1314 
   1315 		Normally the LCD is page-aligned (typically 4KB). If this is
   1316 		defined then the LCD will be aligned to this value instead.
   1317 		For ARM it is sometimes useful to use MMU_SECTION_SIZE
   1318 		here, since it is cheaper to change data cache settings on
   1319 		a per-section basis.
   1320 
   1321 
   1322 		CONFIG_LCD_ROTATION
   1323 
   1324 		Sometimes, for example if the display is mounted in portrait
   1325 		mode or even if it's mounted landscape but rotated by 180degree,
   1326 		we need to rotate our content of the display relative to the
   1327 		framebuffer, so that user can read the messages which are
   1328 		printed out.
   1329 		Once CONFIG_LCD_ROTATION is defined, the lcd_console will be
   1330 		initialized with a given rotation from "vl_rot" out of
   1331 		"vidinfo_t" which is provided by the board specific code.
   1332 		The value for vl_rot is coded as following (matching to
   1333 		fbcon=rotate:<n> linux-kernel commandline):
   1334 		0 = no rotation respectively 0 degree
   1335 		1 = 90 degree rotation
   1336 		2 = 180 degree rotation
   1337 		3 = 270 degree rotation
   1338 
   1339 		If CONFIG_LCD_ROTATION is not defined, the console will be
   1340 		initialized with 0degree rotation.
   1341 
   1342 		CONFIG_LCD_BMP_RLE8
   1343 
   1344 		Support drawing of RLE8-compressed bitmaps on the LCD.
   1345 
   1346 		CONFIG_I2C_EDID
   1347 
   1348 		Enables an 'i2c edid' command which can read EDID
   1349 		information over I2C from an attached LCD display.
   1350 
   1351 - Splash Screen Support: CONFIG_SPLASH_SCREEN
   1352 
   1353 		If this option is set, the environment is checked for
   1354 		a variable "splashimage". If found, the usual display
   1355 		of logo, copyright and system information on the LCD
   1356 		is suppressed and the BMP image at the address
   1357 		specified in "splashimage" is loaded instead. The
   1358 		console is redirected to the "nulldev", too. This
   1359 		allows for a "silent" boot where a splash screen is
   1360 		loaded very quickly after power-on.
   1361 
   1362 		CONFIG_SPLASHIMAGE_GUARD
   1363 
   1364 		If this option is set, then U-Boot will prevent the environment
   1365 		variable "splashimage" from being set to a problematic address
   1366 		(see doc/README.displaying-bmps).
   1367 		This option is useful for targets where, due to alignment
   1368 		restrictions, an improperly aligned BMP image will cause a data
   1369 		abort. If you think you will not have problems with unaligned
   1370 		accesses (for example because your toolchain prevents them)
   1371 		there is no need to set this option.
   1372 
   1373 		CONFIG_SPLASH_SCREEN_ALIGN
   1374 
   1375 		If this option is set the splash image can be freely positioned
   1376 		on the screen. Environment variable "splashpos" specifies the
   1377 		position as "x,y". If a positive number is given it is used as
   1378 		number of pixel from left/top. If a negative number is given it
   1379 		is used as number of pixel from right/bottom. You can also
   1380 		specify 'm' for centering the image.
   1381 
   1382 		Example:
   1383 		setenv splashpos m,m
   1384 			=> image at center of screen
   1385 
   1386 		setenv splashpos 30,20
   1387 			=> image at x = 30 and y = 20
   1388 
   1389 		setenv splashpos -10,m
   1390 			=> vertically centered image
   1391 			   at x = dspWidth - bmpWidth - 9
   1392 
   1393 - Gzip compressed BMP image support: CONFIG_VIDEO_BMP_GZIP
   1394 
   1395 		If this option is set, additionally to standard BMP
   1396 		images, gzipped BMP images can be displayed via the
   1397 		splashscreen support or the bmp command.
   1398 
   1399 - Run length encoded BMP image (RLE8) support: CONFIG_VIDEO_BMP_RLE8
   1400 
   1401 		If this option is set, 8-bit RLE compressed BMP images
   1402 		can be displayed via the splashscreen support or the
   1403 		bmp command.
   1404 
   1405 - Compression support:
   1406 		CONFIG_GZIP
   1407 
   1408 		Enabled by default to support gzip compressed images.
   1409 
   1410 		CONFIG_BZIP2
   1411 
   1412 		If this option is set, support for bzip2 compressed
   1413 		images is included. If not, only uncompressed and gzip
   1414 		compressed images are supported.
   1415 
   1416 		NOTE: the bzip2 algorithm requires a lot of RAM, so
   1417 		the malloc area (as defined by CONFIG_SYS_MALLOC_LEN) should
   1418 		be at least 4MB.
   1419 
   1420 - MII/PHY support:
   1421 		CONFIG_PHY_CLOCK_FREQ (ppc4xx)
   1422 
   1423 		The clock frequency of the MII bus
   1424 
   1425 		CONFIG_PHY_RESET_DELAY
   1426 
   1427 		Some PHY like Intel LXT971A need extra delay after
   1428 		reset before any MII register access is possible.
   1429 		For such PHY, set this option to the usec delay
   1430 		required. (minimum 300usec for LXT971A)
   1431 
   1432 		CONFIG_PHY_CMD_DELAY (ppc4xx)
   1433 
   1434 		Some PHY like Intel LXT971A need extra delay after
   1435 		command issued before MII status register can be read
   1436 
   1437 - IP address:
   1438 		CONFIG_IPADDR
   1439 
   1440 		Define a default value for the IP address to use for
   1441 		the default Ethernet interface, in case this is not
   1442 		determined through e.g. bootp.
   1443 		(Environment variable "ipaddr")
   1444 
   1445 - Server IP address:
   1446 		CONFIG_SERVERIP
   1447 
   1448 		Defines a default value for the IP address of a TFTP
   1449 		server to contact when using the "tftboot" command.
   1450 		(Environment variable "serverip")
   1451 
   1452 		CONFIG_KEEP_SERVERADDR
   1453 
   1454 		Keeps the server's MAC address, in the env 'serveraddr'
   1455 		for passing to bootargs (like Linux's netconsole option)
   1456 
   1457 - Gateway IP address:
   1458 		CONFIG_GATEWAYIP
   1459 
   1460 		Defines a default value for the IP address of the
   1461 		default router where packets to other networks are
   1462 		sent to.
   1463 		(Environment variable "gatewayip")
   1464 
   1465 - Subnet mask:
   1466 		CONFIG_NETMASK
   1467 
   1468 		Defines a default value for the subnet mask (or
   1469 		routing prefix) which is used to determine if an IP
   1470 		address belongs to the local subnet or needs to be
   1471 		forwarded through a router.
   1472 		(Environment variable "netmask")
   1473 
   1474 - Multicast TFTP Mode:
   1475 		CONFIG_MCAST_TFTP
   1476 
   1477 		Defines whether you want to support multicast TFTP as per
   1478 		rfc-2090; for example to work with atftp.  Lets lots of targets
   1479 		tftp down the same boot image concurrently.  Note: the Ethernet
   1480 		driver in use must provide a function: mcast() to join/leave a
   1481 		multicast group.
   1482 
   1483 - BOOTP Recovery Mode:
   1484 		CONFIG_BOOTP_RANDOM_DELAY
   1485 
   1486 		If you have many targets in a network that try to
   1487 		boot using BOOTP, you may want to avoid that all
   1488 		systems send out BOOTP requests at precisely the same
   1489 		moment (which would happen for instance at recovery
   1490 		from a power failure, when all systems will try to
   1491 		boot, thus flooding the BOOTP server. Defining
   1492 		CONFIG_BOOTP_RANDOM_DELAY causes a random delay to be
   1493 		inserted before sending out BOOTP requests. The
   1494 		following delays are inserted then:
   1495 
   1496 		1st BOOTP request:	delay 0 ... 1 sec
   1497 		2nd BOOTP request:	delay 0 ... 2 sec
   1498 		3rd BOOTP request:	delay 0 ... 4 sec
   1499 		4th and following
   1500 		BOOTP requests:		delay 0 ... 8 sec
   1501 
   1502 		CONFIG_BOOTP_ID_CACHE_SIZE
   1503 
   1504 		BOOTP packets are uniquely identified using a 32-bit ID. The
   1505 		server will copy the ID from client requests to responses and
   1506 		U-Boot will use this to determine if it is the destination of
   1507 		an incoming response. Some servers will check that addresses
   1508 		aren't in use before handing them out (usually using an ARP
   1509 		ping) and therefore take up to a few hundred milliseconds to
   1510 		respond. Network congestion may also influence the time it
   1511 		takes for a response to make it back to the client. If that
   1512 		time is too long, U-Boot will retransmit requests. In order
   1513 		to allow earlier responses to still be accepted after these
   1514 		retransmissions, U-Boot's BOOTP client keeps a small cache of
   1515 		IDs. The CONFIG_BOOTP_ID_CACHE_SIZE controls the size of this
   1516 		cache. The default is to keep IDs for up to four outstanding
   1517 		requests. Increasing this will allow U-Boot to accept offers
   1518 		from a BOOTP client in networks with unusually high latency.
   1519 
   1520 - DHCP Advanced Options:
   1521 		You can fine tune the DHCP functionality by defining
   1522 		CONFIG_BOOTP_* symbols:
   1523 
   1524 		CONFIG_BOOTP_NISDOMAIN
   1525 		CONFIG_BOOTP_BOOTFILESIZE
   1526 		CONFIG_BOOTP_SEND_HOSTNAME
   1527 		CONFIG_BOOTP_NTPSERVER
   1528 		CONFIG_BOOTP_TIMEOFFSET
   1529 		CONFIG_BOOTP_VENDOREX
   1530 		CONFIG_BOOTP_MAY_FAIL
   1531 
   1532 		CONFIG_BOOTP_SERVERIP - TFTP server will be the serverip
   1533 		environment variable, not the BOOTP server.
   1534 
   1535 		CONFIG_BOOTP_MAY_FAIL - If the DHCP server is not found
   1536 		after the configured retry count, the call will fail
   1537 		instead of starting over.  This can be used to fail over
   1538 		to Link-local IP address configuration if the DHCP server
   1539 		is not available.
   1540 
   1541 		CONFIG_BOOTP_SEND_HOSTNAME - Some DHCP servers are capable
   1542 		to do a dynamic update of a DNS server. To do this, they
   1543 		need the hostname of the DHCP requester.
   1544 		If CONFIG_BOOTP_SEND_HOSTNAME is defined, the content
   1545 		of the "hostname" environment variable is passed as
   1546 		option 12 to the DHCP server.
   1547 
   1548 		CONFIG_BOOTP_DHCP_REQUEST_DELAY
   1549 
   1550 		A 32bit value in microseconds for a delay between
   1551 		receiving a "DHCP Offer" and sending the "DHCP Request".
   1552 		This fixes a problem with certain DHCP servers that don't
   1553 		respond 100% of the time to a "DHCP request". E.g. On an
   1554 		AT91RM9200 processor running at 180MHz, this delay needed
   1555 		to be *at least* 15,000 usec before a Windows Server 2003
   1556 		DHCP server would reply 100% of the time. I recommend at
   1557 		least 50,000 usec to be safe. The alternative is to hope
   1558 		that one of the retries will be successful but note that
   1559 		the DHCP timeout and retry process takes a longer than
   1560 		this delay.
   1561 
   1562  - Link-local IP address negotiation:
   1563 		Negotiate with other link-local clients on the local network
   1564 		for an address that doesn't require explicit configuration.
   1565 		This is especially useful if a DHCP server cannot be guaranteed
   1566 		to exist in all environments that the device must operate.
   1567 
   1568 		See doc/README.link-local for more information.
   1569 
   1570  - MAC address from environment variables
   1571 
   1572 		FDT_SEQ_MACADDR_FROM_ENV
   1573 
   1574 		Fix-up device tree with MAC addresses fetched sequentially from
   1575 		environment variables. This config work on assumption that
   1576 		non-usable ethernet node of device-tree are either not present
   1577 		or their status has been marked as "disabled".
   1578 
   1579  - CDP Options:
   1580 		CONFIG_CDP_DEVICE_ID
   1581 
   1582 		The device id used in CDP trigger frames.
   1583 
   1584 		CONFIG_CDP_DEVICE_ID_PREFIX
   1585 
   1586 		A two character string which is prefixed to the MAC address
   1587 		of the device.
   1588 
   1589 		CONFIG_CDP_PORT_ID
   1590 
   1591 		A printf format string which contains the ascii name of
   1592 		the port. Normally is set to "eth%d" which sets
   1593 		eth0 for the first Ethernet, eth1 for the second etc.
   1594 
   1595 		CONFIG_CDP_CAPABILITIES
   1596 
   1597 		A 32bit integer which indicates the device capabilities;
   1598 		0x00000010 for a normal host which does not forwards.
   1599 
   1600 		CONFIG_CDP_VERSION
   1601 
   1602 		An ascii string containing the version of the software.
   1603 
   1604 		CONFIG_CDP_PLATFORM
   1605 
   1606 		An ascii string containing the name of the platform.
   1607 
   1608 		CONFIG_CDP_TRIGGER
   1609 
   1610 		A 32bit integer sent on the trigger.
   1611 
   1612 		CONFIG_CDP_POWER_CONSUMPTION
   1613 
   1614 		A 16bit integer containing the power consumption of the
   1615 		device in .1 of milliwatts.
   1616 
   1617 		CONFIG_CDP_APPLIANCE_VLAN_TYPE
   1618 
   1619 		A byte containing the id of the VLAN.
   1620 
   1621 - Status LED:	CONFIG_LED_STATUS
   1622 
   1623 		Several configurations allow to display the current
   1624 		status using a LED. For instance, the LED will blink
   1625 		fast while running U-Boot code, stop blinking as
   1626 		soon as a reply to a BOOTP request was received, and
   1627 		start blinking slow once the Linux kernel is running
   1628 		(supported by a status LED driver in the Linux
   1629 		kernel). Defining CONFIG_LED_STATUS enables this
   1630 		feature in U-Boot.
   1631 
   1632 		Additional options:
   1633 
   1634 		CONFIG_LED_STATUS_GPIO
   1635 		The status LED can be connected to a GPIO pin.
   1636 		In such cases, the gpio_led driver can be used as a
   1637 		status LED backend implementation. Define CONFIG_LED_STATUS_GPIO
   1638 		to include the gpio_led driver in the U-Boot binary.
   1639 
   1640 		CONFIG_GPIO_LED_INVERTED_TABLE
   1641 		Some GPIO connected LEDs may have inverted polarity in which
   1642 		case the GPIO high value corresponds to LED off state and
   1643 		GPIO low value corresponds to LED on state.
   1644 		In such cases CONFIG_GPIO_LED_INVERTED_TABLE may be defined
   1645 		with a list of GPIO LEDs that have inverted polarity.
   1646 
   1647 - I2C Support:	CONFIG_SYS_I2C
   1648 
   1649 		This enable the NEW i2c subsystem, and will allow you to use
   1650 		i2c commands at the u-boot command line (as long as you set
   1651 		CONFIG_CMD_I2C in CONFIG_COMMANDS) and communicate with i2c
   1652 		based realtime clock chips or other i2c devices. See
   1653 		common/cmd_i2c.c for a description of the command line
   1654 		interface.
   1655 
   1656 		ported i2c driver to the new framework:
   1657 		- drivers/i2c/soft_i2c.c:
   1658 		  - activate first bus with CONFIG_SYS_I2C_SOFT define
   1659 		    CONFIG_SYS_I2C_SOFT_SPEED and CONFIG_SYS_I2C_SOFT_SLAVE
   1660 		    for defining speed and slave address
   1661 		  - activate second bus with I2C_SOFT_DECLARATIONS2 define
   1662 		    CONFIG_SYS_I2C_SOFT_SPEED_2 and CONFIG_SYS_I2C_SOFT_SLAVE_2
   1663 		    for defining speed and slave address
   1664 		  - activate third bus with I2C_SOFT_DECLARATIONS3 define
   1665 		    CONFIG_SYS_I2C_SOFT_SPEED_3 and CONFIG_SYS_I2C_SOFT_SLAVE_3
   1666 		    for defining speed and slave address
   1667 		  - activate fourth bus with I2C_SOFT_DECLARATIONS4 define
   1668 		    CONFIG_SYS_I2C_SOFT_SPEED_4 and CONFIG_SYS_I2C_SOFT_SLAVE_4
   1669 		    for defining speed and slave address
   1670 
   1671 		- drivers/i2c/fsl_i2c.c:
   1672 		  - activate i2c driver with CONFIG_SYS_I2C_FSL
   1673 		    define CONFIG_SYS_FSL_I2C_OFFSET for setting the register
   1674 		    offset CONFIG_SYS_FSL_I2C_SPEED for the i2c speed and
   1675 		    CONFIG_SYS_FSL_I2C_SLAVE for the slave addr of the first
   1676 		    bus.
   1677 		  - If your board supports a second fsl i2c bus, define
   1678 		    CONFIG_SYS_FSL_I2C2_OFFSET for the register offset
   1679 		    CONFIG_SYS_FSL_I2C2_SPEED for the speed and
   1680 		    CONFIG_SYS_FSL_I2C2_SLAVE for the slave address of the
   1681 		    second bus.
   1682 
   1683 		- drivers/i2c/tegra_i2c.c:
   1684 		  - activate this driver with CONFIG_SYS_I2C_TEGRA
   1685 		  - This driver adds 4 i2c buses with a fix speed from
   1686 		    100000 and the slave addr 0!
   1687 
   1688 		- drivers/i2c/ppc4xx_i2c.c
   1689 		  - activate this driver with CONFIG_SYS_I2C_PPC4XX
   1690 		  - CONFIG_SYS_I2C_PPC4XX_CH0 activate hardware channel 0
   1691 		  - CONFIG_SYS_I2C_PPC4XX_CH1 activate hardware channel 1
   1692 
   1693 		- drivers/i2c/i2c_mxc.c
   1694 		  - activate this driver with CONFIG_SYS_I2C_MXC
   1695 		  - enable bus 1 with CONFIG_SYS_I2C_MXC_I2C1
   1696 		  - enable bus 2 with CONFIG_SYS_I2C_MXC_I2C2
   1697 		  - enable bus 3 with CONFIG_SYS_I2C_MXC_I2C3
   1698 		  - enable bus 4 with CONFIG_SYS_I2C_MXC_I2C4
   1699 		  - define speed for bus 1 with CONFIG_SYS_MXC_I2C1_SPEED
   1700 		  - define slave for bus 1 with CONFIG_SYS_MXC_I2C1_SLAVE
   1701 		  - define speed for bus 2 with CONFIG_SYS_MXC_I2C2_SPEED
   1702 		  - define slave for bus 2 with CONFIG_SYS_MXC_I2C2_SLAVE
   1703 		  - define speed for bus 3 with CONFIG_SYS_MXC_I2C3_SPEED
   1704 		  - define slave for bus 3 with CONFIG_SYS_MXC_I2C3_SLAVE
   1705 		  - define speed for bus 4 with CONFIG_SYS_MXC_I2C4_SPEED
   1706 		  - define slave for bus 4 with CONFIG_SYS_MXC_I2C4_SLAVE
   1707 		If those defines are not set, default value is 100000
   1708 		for speed, and 0 for slave.
   1709 
   1710 		- drivers/i2c/rcar_i2c.c:
   1711 		  - activate this driver with CONFIG_SYS_I2C_RCAR
   1712 		  - This driver adds 4 i2c buses
   1713 
   1714 		  - CONFIG_SYS_RCAR_I2C0_BASE for setting the register channel 0
   1715 		  - CONFIG_SYS_RCAR_I2C0_SPEED for for the speed channel 0
   1716 		  - CONFIG_SYS_RCAR_I2C1_BASE for setting the register channel 1
   1717 		  - CONFIG_SYS_RCAR_I2C1_SPEED for for the speed channel 1
   1718 		  - CONFIG_SYS_RCAR_I2C2_BASE for setting the register channel 2
   1719 		  - CONFIG_SYS_RCAR_I2C2_SPEED for for the speed channel 2
   1720 		  - CONFIG_SYS_RCAR_I2C3_BASE for setting the register channel 3
   1721 		  - CONFIG_SYS_RCAR_I2C3_SPEED for for the speed channel 3
   1722 		  - CONFIF_SYS_RCAR_I2C_NUM_CONTROLLERS for number of i2c buses
   1723 
   1724 		- drivers/i2c/sh_i2c.c:
   1725 		  - activate this driver with CONFIG_SYS_I2C_SH
   1726 		  - This driver adds from 2 to 5 i2c buses
   1727 
   1728 		  - CONFIG_SYS_I2C_SH_BASE0 for setting the register channel 0
   1729 		  - CONFIG_SYS_I2C_SH_SPEED0 for for the speed channel 0
   1730 		  - CONFIG_SYS_I2C_SH_BASE1 for setting the register channel 1
   1731 		  - CONFIG_SYS_I2C_SH_SPEED1 for for the speed channel 1
   1732 		  - CONFIG_SYS_I2C_SH_BASE2 for setting the register channel 2
   1733 		  - CONFIG_SYS_I2C_SH_SPEED2 for for the speed channel 2
   1734 		  - CONFIG_SYS_I2C_SH_BASE3 for setting the register channel 3
   1735 		  - CONFIG_SYS_I2C_SH_SPEED3 for for the speed channel 3
   1736 		  - CONFIG_SYS_I2C_SH_BASE4 for setting the register channel 4
   1737 		  - CONFIG_SYS_I2C_SH_SPEED4 for for the speed channel 4
   1738 		  - CONFIG_SYS_I2C_SH_NUM_CONTROLLERS for number of i2c buses
   1739 
   1740 		- drivers/i2c/omap24xx_i2c.c
   1741 		  - activate this driver with CONFIG_SYS_I2C_OMAP24XX
   1742 		  - CONFIG_SYS_OMAP24_I2C_SPEED speed channel 0
   1743 		  - CONFIG_SYS_OMAP24_I2C_SLAVE slave addr channel 0
   1744 		  - CONFIG_SYS_OMAP24_I2C_SPEED1 speed channel 1
   1745 		  - CONFIG_SYS_OMAP24_I2C_SLAVE1 slave addr channel 1
   1746 		  - CONFIG_SYS_OMAP24_I2C_SPEED2 speed channel 2
   1747 		  - CONFIG_SYS_OMAP24_I2C_SLAVE2 slave addr channel 2
   1748 		  - CONFIG_SYS_OMAP24_I2C_SPEED3 speed channel 3
   1749 		  - CONFIG_SYS_OMAP24_I2C_SLAVE3 slave addr channel 3
   1750 		  - CONFIG_SYS_OMAP24_I2C_SPEED4 speed channel 4
   1751 		  - CONFIG_SYS_OMAP24_I2C_SLAVE4 slave addr channel 4
   1752 
   1753 		- drivers/i2c/zynq_i2c.c
   1754 		  - activate this driver with CONFIG_SYS_I2C_ZYNQ
   1755 		  - set CONFIG_SYS_I2C_ZYNQ_SPEED for speed setting
   1756 		  - set CONFIG_SYS_I2C_ZYNQ_SLAVE for slave addr
   1757 
   1758 		- drivers/i2c/s3c24x0_i2c.c:
   1759 		  - activate this driver with CONFIG_SYS_I2C_S3C24X0
   1760 		  - This driver adds i2c buses (11 for Exynos5250, Exynos5420
   1761 		    9 i2c buses for Exynos4 and 1 for S3C24X0 SoCs from Samsung)
   1762 		    with a fix speed from 100000 and the slave addr 0!
   1763 
   1764 		- drivers/i2c/ihs_i2c.c
   1765 		  - activate this driver with CONFIG_SYS_I2C_IHS
   1766 		  - CONFIG_SYS_I2C_IHS_CH0 activate hardware channel 0
   1767 		  - CONFIG_SYS_I2C_IHS_SPEED_0 speed channel 0
   1768 		  - CONFIG_SYS_I2C_IHS_SLAVE_0 slave addr channel 0
   1769 		  - CONFIG_SYS_I2C_IHS_CH1 activate hardware channel 1
   1770 		  - CONFIG_SYS_I2C_IHS_SPEED_1 speed channel 1
   1771 		  - CONFIG_SYS_I2C_IHS_SLAVE_1 slave addr channel 1
   1772 		  - CONFIG_SYS_I2C_IHS_CH2 activate hardware channel 2
   1773 		  - CONFIG_SYS_I2C_IHS_SPEED_2 speed channel 2
   1774 		  - CONFIG_SYS_I2C_IHS_SLAVE_2 slave addr channel 2
   1775 		  - CONFIG_SYS_I2C_IHS_CH3 activate hardware channel 3
   1776 		  - CONFIG_SYS_I2C_IHS_SPEED_3 speed channel 3
   1777 		  - CONFIG_SYS_I2C_IHS_SLAVE_3 slave addr channel 3
   1778 		  - activate dual channel with CONFIG_SYS_I2C_IHS_DUAL
   1779 		  - CONFIG_SYS_I2C_IHS_SPEED_0_1 speed channel 0_1
   1780 		  - CONFIG_SYS_I2C_IHS_SLAVE_0_1 slave addr channel 0_1
   1781 		  - CONFIG_SYS_I2C_IHS_SPEED_1_1 speed channel 1_1
   1782 		  - CONFIG_SYS_I2C_IHS_SLAVE_1_1 slave addr channel 1_1
   1783 		  - CONFIG_SYS_I2C_IHS_SPEED_2_1 speed channel 2_1
   1784 		  - CONFIG_SYS_I2C_IHS_SLAVE_2_1 slave addr channel 2_1
   1785 		  - CONFIG_SYS_I2C_IHS_SPEED_3_1 speed channel 3_1
   1786 		  - CONFIG_SYS_I2C_IHS_SLAVE_3_1 slave addr channel 3_1
   1787 
   1788 		additional defines:
   1789 
   1790 		CONFIG_SYS_NUM_I2C_BUSES
   1791 		Hold the number of i2c buses you want to use.
   1792 
   1793 		CONFIG_SYS_I2C_DIRECT_BUS
   1794 		define this, if you don't use i2c muxes on your hardware.
   1795 		if CONFIG_SYS_I2C_MAX_HOPS is not defined or == 0 you can
   1796 		omit this define.
   1797 
   1798 		CONFIG_SYS_I2C_MAX_HOPS
   1799 		define how many muxes are maximal consecutively connected
   1800 		on one i2c bus. If you not use i2c muxes, omit this
   1801 		define.
   1802 
   1803 		CONFIG_SYS_I2C_BUSES
   1804 		hold a list of buses you want to use, only used if
   1805 		CONFIG_SYS_I2C_DIRECT_BUS is not defined, for example
   1806 		a board with CONFIG_SYS_I2C_MAX_HOPS = 1 and
   1807 		CONFIG_SYS_NUM_I2C_BUSES = 9:
   1808 
   1809 		 CONFIG_SYS_I2C_BUSES	{{0, {I2C_NULL_HOP}}, \
   1810 					{0, {{I2C_MUX_PCA9547, 0x70, 1}}}, \
   1811 					{0, {{I2C_MUX_PCA9547, 0x70, 2}}}, \
   1812 					{0, {{I2C_MUX_PCA9547, 0x70, 3}}}, \
   1813 					{0, {{I2C_MUX_PCA9547, 0x70, 4}}}, \
   1814 					{0, {{I2C_MUX_PCA9547, 0x70, 5}}}, \
   1815 					{1, {I2C_NULL_HOP}}, \
   1816 					{1, {{I2C_MUX_PCA9544, 0x72, 1}}}, \
   1817 					{1, {{I2C_MUX_PCA9544, 0x72, 2}}}, \
   1818 					}
   1819 
   1820 		which defines
   1821 			bus 0 on adapter 0 without a mux
   1822 			bus 1 on adapter 0 with a PCA9547 on address 0x70 port 1
   1823 			bus 2 on adapter 0 with a PCA9547 on address 0x70 port 2
   1824 			bus 3 on adapter 0 with a PCA9547 on address 0x70 port 3
   1825 			bus 4 on adapter 0 with a PCA9547 on address 0x70 port 4
   1826 			bus 5 on adapter 0 with a PCA9547 on address 0x70 port 5
   1827 			bus 6 on adapter 1 without a mux
   1828 			bus 7 on adapter 1 with a PCA9544 on address 0x72 port 1
   1829 			bus 8 on adapter 1 with a PCA9544 on address 0x72 port 2
   1830 
   1831 		If you do not have i2c muxes on your board, omit this define.
   1832 
   1833 - Legacy I2C Support:
   1834 		If you use the software i2c interface (CONFIG_SYS_I2C_SOFT)
   1835 		then the following macros need to be defined (examples are
   1836 		from include/configs/lwmon.h):
   1837 
   1838 		I2C_INIT
   1839 
   1840 		(Optional). Any commands necessary to enable the I2C
   1841 		controller or configure ports.
   1842 
   1843 		eg: #define I2C_INIT (immr->im_cpm.cp_pbdir |=	PB_SCL)
   1844 
   1845 		I2C_ACTIVE
   1846 
   1847 		The code necessary to make the I2C data line active
   1848 		(driven).  If the data line is open collector, this
   1849 		define can be null.
   1850 
   1851 		eg: #define I2C_ACTIVE (immr->im_cpm.cp_pbdir |=  PB_SDA)
   1852 
   1853 		I2C_TRISTATE
   1854 
   1855 		The code necessary to make the I2C data line tri-stated
   1856 		(inactive).  If the data line is open collector, this
   1857 		define can be null.
   1858 
   1859 		eg: #define I2C_TRISTATE (immr->im_cpm.cp_pbdir &= ~PB_SDA)
   1860 
   1861 		I2C_READ
   1862 
   1863 		Code that returns true if the I2C data line is high,
   1864 		false if it is low.
   1865 
   1866 		eg: #define I2C_READ ((immr->im_cpm.cp_pbdat & PB_SDA) != 0)
   1867 
   1868 		I2C_SDA(bit)
   1869 
   1870 		If <bit> is true, sets the I2C data line high. If it
   1871 		is false, it clears it (low).
   1872 
   1873 		eg: #define I2C_SDA(bit) \
   1874 			if(bit) immr->im_cpm.cp_pbdat |=  PB_SDA; \
   1875 			else	immr->im_cpm.cp_pbdat &= ~PB_SDA
   1876 
   1877 		I2C_SCL(bit)
   1878 
   1879 		If <bit> is true, sets the I2C clock line high. If it
   1880 		is false, it clears it (low).
   1881 
   1882 		eg: #define I2C_SCL(bit) \
   1883 			if(bit) immr->im_cpm.cp_pbdat |=  PB_SCL; \
   1884 			else	immr->im_cpm.cp_pbdat &= ~PB_SCL
   1885 
   1886 		I2C_DELAY
   1887 
   1888 		This delay is invoked four times per clock cycle so this
   1889 		controls the rate of data transfer.  The data rate thus
   1890 		is 1 / (I2C_DELAY * 4). Often defined to be something
   1891 		like:
   1892 
   1893 		#define I2C_DELAY  udelay(2)
   1894 
   1895 		CONFIG_SOFT_I2C_GPIO_SCL / CONFIG_SOFT_I2C_GPIO_SDA
   1896 
   1897 		If your arch supports the generic GPIO framework (asm/gpio.h),
   1898 		then you may alternatively define the two GPIOs that are to be
   1899 		used as SCL / SDA.  Any of the previous I2C_xxx macros will
   1900 		have GPIO-based defaults assigned to them as appropriate.
   1901 
   1902 		You should define these to the GPIO value as given directly to
   1903 		the generic GPIO functions.
   1904 
   1905 		CONFIG_SYS_I2C_INIT_BOARD
   1906 
   1907 		When a board is reset during an i2c bus transfer
   1908 		chips might think that the current transfer is still
   1909 		in progress. On some boards it is possible to access
   1910 		the i2c SCLK line directly, either by using the
   1911 		processor pin as a GPIO or by having a second pin
   1912 		connected to the bus. If this option is defined a
   1913 		custom i2c_init_board() routine in boards/xxx/board.c
   1914 		is run early in the boot sequence.
   1915 
   1916 		CONFIG_I2C_MULTI_BUS
   1917 
   1918 		This option allows the use of multiple I2C buses, each of which
   1919 		must have a controller.	 At any point in time, only one bus is
   1920 		active.	 To switch to a different bus, use the 'i2c dev' command.
   1921 		Note that bus numbering is zero-based.
   1922 
   1923 		CONFIG_SYS_I2C_NOPROBES
   1924 
   1925 		This option specifies a list of I2C devices that will be skipped
   1926 		when the 'i2c probe' command is issued.	 If CONFIG_I2C_MULTI_BUS
   1927 		is set, specify a list of bus-device pairs.  Otherwise, specify
   1928 		a 1D array of device addresses
   1929 
   1930 		e.g.
   1931 			#undef	CONFIG_I2C_MULTI_BUS
   1932 			#define CONFIG_SYS_I2C_NOPROBES {0x50,0x68}
   1933 
   1934 		will skip addresses 0x50 and 0x68 on a board with one I2C bus
   1935 
   1936 			#define CONFIG_I2C_MULTI_BUS
   1937 			#define CONFIG_SYS_I2C_NOPROBES	{{0,0x50},{0,0x68},{1,0x54}}
   1938 
   1939 		will skip addresses 0x50 and 0x68 on bus 0 and address 0x54 on bus 1
   1940 
   1941 		CONFIG_SYS_SPD_BUS_NUM
   1942 
   1943 		If defined, then this indicates the I2C bus number for DDR SPD.
   1944 		If not defined, then U-Boot assumes that SPD is on I2C bus 0.
   1945 
   1946 		CONFIG_SYS_RTC_BUS_NUM
   1947 
   1948 		If defined, then this indicates the I2C bus number for the RTC.
   1949 		If not defined, then U-Boot assumes that RTC is on I2C bus 0.
   1950 
   1951 		CONFIG_SOFT_I2C_READ_REPEATED_START
   1952 
   1953 		defining this will force the i2c_read() function in
   1954 		the soft_i2c driver to perform an I2C repeated start
   1955 		between writing the address pointer and reading the
   1956 		data.  If this define is omitted the default behaviour
   1957 		of doing a stop-start sequence will be used.  Most I2C
   1958 		devices can use either method, but some require one or
   1959 		the other.
   1960 
   1961 - SPI Support:	CONFIG_SPI
   1962 
   1963 		Enables SPI driver (so far only tested with
   1964 		SPI EEPROM, also an instance works with Crystal A/D and
   1965 		D/As on the SACSng board)
   1966 
   1967 		CONFIG_SOFT_SPI
   1968 
   1969 		Enables a software (bit-bang) SPI driver rather than
   1970 		using hardware support. This is a general purpose
   1971 		driver that only requires three general I/O port pins
   1972 		(two outputs, one input) to function. If this is
   1973 		defined, the board configuration must define several
   1974 		SPI configuration items (port pins to use, etc). For
   1975 		an example, see include/configs/sacsng.h.
   1976 
   1977 		CONFIG_HARD_SPI
   1978 
   1979 		Enables a hardware SPI driver for general-purpose reads
   1980 		and writes.  As with CONFIG_SOFT_SPI, the board configuration
   1981 		must define a list of chip-select function pointers.
   1982 		Currently supported on some MPC8xxx processors.	 For an
   1983 		example, see include/configs/mpc8349emds.h.
   1984 
   1985 		CONFIG_SYS_SPI_MXC_WAIT
   1986 		Timeout for waiting until spi transfer completed.
   1987 		default: (CONFIG_SYS_HZ/100)     /* 10 ms */
   1988 
   1989 - FPGA Support: CONFIG_FPGA
   1990 
   1991 		Enables FPGA subsystem.
   1992 
   1993 		CONFIG_FPGA_<vendor>
   1994 
   1995 		Enables support for specific chip vendors.
   1996 		(ALTERA, XILINX)
   1997 
   1998 		CONFIG_FPGA_<family>
   1999 
   2000 		Enables support for FPGA family.
   2001 		(SPARTAN2, SPARTAN3, VIRTEX2, CYCLONE2, ACEX1K, ACEX)
   2002 
   2003 		CONFIG_FPGA_COUNT
   2004 
   2005 		Specify the number of FPGA devices to support.
   2006 
   2007 		CONFIG_SYS_FPGA_PROG_FEEDBACK
   2008 
   2009 		Enable printing of hash marks during FPGA configuration.
   2010 
   2011 		CONFIG_SYS_FPGA_CHECK_BUSY
   2012 
   2013 		Enable checks on FPGA configuration interface busy
   2014 		status by the configuration function. This option
   2015 		will require a board or device specific function to
   2016 		be written.
   2017 
   2018 		CONFIG_FPGA_DELAY
   2019 
   2020 		If defined, a function that provides delays in the FPGA
   2021 		configuration driver.
   2022 
   2023 		CONFIG_SYS_FPGA_CHECK_CTRLC
   2024 		Allow Control-C to interrupt FPGA configuration
   2025 
   2026 		CONFIG_SYS_FPGA_CHECK_ERROR
   2027 
   2028 		Check for configuration errors during FPGA bitfile
   2029 		loading. For example, abort during Virtex II
   2030 		configuration if the INIT_B line goes low (which
   2031 		indicated a CRC error).
   2032 
   2033 		CONFIG_SYS_FPGA_WAIT_INIT
   2034 
   2035 		Maximum time to wait for the INIT_B line to de-assert
   2036 		after PROB_B has been de-asserted during a Virtex II
   2037 		FPGA configuration sequence. The default time is 500
   2038 		ms.
   2039 
   2040 		CONFIG_SYS_FPGA_WAIT_BUSY
   2041 
   2042 		Maximum time to wait for BUSY to de-assert during
   2043 		Virtex II FPGA configuration. The default is 5 ms.
   2044 
   2045 		CONFIG_SYS_FPGA_WAIT_CONFIG
   2046 
   2047 		Time to wait after FPGA configuration. The default is
   2048 		200 ms.
   2049 
   2050 - Configuration Management:
   2051 		CONFIG_BUILD_TARGET
   2052 
   2053 		Some SoCs need special image types (e.g. U-Boot binary
   2054 		with a special header) as build targets. By defining
   2055 		CONFIG_BUILD_TARGET in the SoC / board header, this
   2056 		special image will be automatically built upon calling
   2057 		make / buildman.
   2058 
   2059 		CONFIG_IDENT_STRING
   2060 
   2061 		If defined, this string will be added to the U-Boot
   2062 		version information (U_BOOT_VERSION)
   2063 
   2064 - Vendor Parameter Protection:
   2065 
   2066 		U-Boot considers the values of the environment
   2067 		variables "serial#" (Board Serial Number) and
   2068 		"ethaddr" (Ethernet Address) to be parameters that
   2069 		are set once by the board vendor / manufacturer, and
   2070 		protects these variables from casual modification by
   2071 		the user. Once set, these variables are read-only,
   2072 		and write or delete attempts are rejected. You can
   2073 		change this behaviour:
   2074 
   2075 		If CONFIG_ENV_OVERWRITE is #defined in your config
   2076 		file, the write protection for vendor parameters is
   2077 		completely disabled. Anybody can change or delete
   2078 		these parameters.
   2079 
   2080 		Alternatively, if you define _both_ an ethaddr in the
   2081 		default env _and_ CONFIG_OVERWRITE_ETHADDR_ONCE, a default
   2082 		Ethernet address is installed in the environment,
   2083 		which can be changed exactly ONCE by the user. [The
   2084 		serial# is unaffected by this, i. e. it remains
   2085 		read-only.]
   2086 
   2087 		The same can be accomplished in a more flexible way
   2088 		for any variable by configuring the type of access
   2089 		to allow for those variables in the ".flags" variable
   2090 		or define CONFIG_ENV_FLAGS_LIST_STATIC.
   2091 
   2092 - Protected RAM:
   2093 		CONFIG_PRAM
   2094 
   2095 		Define this variable to enable the reservation of
   2096 		"protected RAM", i. e. RAM which is not overwritten
   2097 		by U-Boot. Define CONFIG_PRAM to hold the number of
   2098 		kB you want to reserve for pRAM. You can overwrite
   2099 		this default value by defining an environment
   2100 		variable "pram" to the number of kB you want to
   2101 		reserve. Note that the board info structure will
   2102 		still show the full amount of RAM. If pRAM is
   2103 		reserved, a new environment variable "mem" will
   2104 		automatically be defined to hold the amount of
   2105 		remaining RAM in a form that can be passed as boot
   2106 		argument to Linux, for instance like that:
   2107 
   2108 			setenv bootargs ... mem=\${mem}
   2109 			saveenv
   2110 
   2111 		This way you can tell Linux not to use this memory,
   2112 		either, which results in a memory region that will
   2113 		not be affected by reboots.
   2114 
   2115 		*WARNING* If your board configuration uses automatic
   2116 		detection of the RAM size, you must make sure that
   2117 		this memory test is non-destructive. So far, the
   2118 		following board configurations are known to be
   2119 		"pRAM-clean":
   2120 
   2121 			IVMS8, IVML24, SPD8xx,
   2122 			HERMES, IP860, RPXlite, LWMON,
   2123 			FLAGADM
   2124 
   2125 - Access to physical memory region (> 4GB)
   2126 		Some basic support is provided for operations on memory not
   2127 		normally accessible to U-Boot - e.g. some architectures
   2128 		support access to more than 4GB of memory on 32-bit
   2129 		machines using physical address extension or similar.
   2130 		Define CONFIG_PHYSMEM to access this basic support, which
   2131 		currently only supports clearing the memory.
   2132 
   2133 - Error Recovery:
   2134 		CONFIG_NET_RETRY_COUNT
   2135 
   2136 		This variable defines the number of retries for
   2137 		network operations like ARP, RARP, TFTP, or BOOTP
   2138 		before giving up the operation. If not defined, a
   2139 		default value of 5 is used.
   2140 
   2141 		CONFIG_ARP_TIMEOUT
   2142 
   2143 		Timeout waiting for an ARP reply in milliseconds.
   2144 
   2145 		CONFIG_NFS_TIMEOUT
   2146 
   2147 		Timeout in milliseconds used in NFS protocol.
   2148 		If you encounter "ERROR: Cannot umount" in nfs command,
   2149 		try longer timeout such as
   2150 		#define CONFIG_NFS_TIMEOUT 10000UL
   2151 
   2152 - Command Interpreter:
   2153 		CONFIG_SYS_PROMPT_HUSH_PS2
   2154 
   2155 		This defines the secondary prompt string, which is
   2156 		printed when the command interpreter needs more input
   2157 		to complete a command. Usually "> ".
   2158 
   2159 	Note:
   2160 
   2161 		In the current implementation, the local variables
   2162 		space and global environment variables space are
   2163 		separated. Local variables are those you define by
   2164 		simply typing `name=value'. To access a local
   2165 		variable later on, you have write `$name' or
   2166 		`${name}'; to execute the contents of a variable
   2167 		directly type `$name' at the command prompt.
   2168 
   2169 		Global environment variables are those you use
   2170 		setenv/printenv to work with. To run a command stored
   2171 		in such a variable, you need to use the run command,
   2172 		and you must not use the '$' sign to access them.
   2173 
   2174 		To store commands and special characters in a
   2175 		variable, please use double quotation marks
   2176 		surrounding the whole text of the variable, instead
   2177 		of the backslashes before semicolons and special
   2178 		symbols.
   2179 
   2180 - Command Line Editing and History:
   2181 		CONFIG_CMDLINE_PS_SUPPORT
   2182 
   2183 		Enable support for changing the command prompt string
   2184 		at run-time. Only static string is supported so far.
   2185 		The string is obtained from environment variables PS1
   2186 		and PS2.
   2187 
   2188 - Default Environment:
   2189 		CONFIG_EXTRA_ENV_SETTINGS
   2190 
   2191 		Define this to contain any number of null terminated
   2192 		strings (variable = value pairs) that will be part of
   2193 		the default environment compiled into the boot image.
   2194 
   2195 		For example, place something like this in your
   2196 		board's config file:
   2197 
   2198 		#define CONFIG_EXTRA_ENV_SETTINGS \
   2199 			"myvar1=value1\0" \
   2200 			"myvar2=value2\0"
   2201 
   2202 		Warning: This method is based on knowledge about the
   2203 		internal format how the environment is stored by the
   2204 		U-Boot code. This is NOT an official, exported
   2205 		interface! Although it is unlikely that this format
   2206 		will change soon, there is no guarantee either.
   2207 		You better know what you are doing here.
   2208 
   2209 		Note: overly (ab)use of the default environment is
   2210 		discouraged. Make sure to check other ways to preset
   2211 		the environment like the "source" command or the
   2212 		boot command first.
   2213 
   2214 		CONFIG_DELAY_ENVIRONMENT
   2215 
   2216 		Normally the environment is loaded when the board is
   2217 		initialised so that it is available to U-Boot. This inhibits
   2218 		that so that the environment is not available until
   2219 		explicitly loaded later by U-Boot code. With CONFIG_OF_CONTROL
   2220 		this is instead controlled by the value of
   2221 		/config/load-environment.
   2222 
   2223 - Serial Flash support
   2224 		Usage requires an initial 'sf probe' to define the serial
   2225 		flash parameters, followed by read/write/erase/update
   2226 		commands.
   2227 
   2228 		The following defaults may be provided by the platform
   2229 		to handle the common case when only a single serial
   2230 		flash is present on the system.
   2231 
   2232 		CONFIG_SF_DEFAULT_BUS		Bus identifier
   2233 		CONFIG_SF_DEFAULT_CS		Chip-select
   2234 		CONFIG_SF_DEFAULT_MODE 		(see include/spi.h)
   2235 		CONFIG_SF_DEFAULT_SPEED		in Hz
   2236 
   2237 
   2238 - TFTP Fixed UDP Port:
   2239 		CONFIG_TFTP_PORT
   2240 
   2241 		If this is defined, the environment variable tftpsrcp
   2242 		is used to supply the TFTP UDP source port value.
   2243 		If tftpsrcp isn't defined, the normal pseudo-random port
   2244 		number generator is used.
   2245 
   2246 		Also, the environment variable tftpdstp is used to supply
   2247 		the TFTP UDP destination port value.  If tftpdstp isn't
   2248 		defined, the normal port 69 is used.
   2249 
   2250 		The purpose for tftpsrcp is to allow a TFTP server to
   2251 		blindly start the TFTP transfer using the pre-configured
   2252 		target IP address and UDP port. This has the effect of
   2253 		"punching through" the (Windows XP) firewall, allowing
   2254 		the remainder of the TFTP transfer to proceed normally.
   2255 		A better solution is to properly configure the firewall,
   2256 		but sometimes that is not allowed.
   2257 
   2258 - Show boot progress:
   2259 		CONFIG_SHOW_BOOT_PROGRESS
   2260 
   2261 		Defining this option allows to add some board-
   2262 		specific code (calling a user-provided function
   2263 		"show_boot_progress(int)") that enables you to show
   2264 		the system's boot progress on some display (for
   2265 		example, some LED's) on your board. At the moment,
   2266 		the following checkpoints are implemented:
   2267 
   2268 
   2269 Legacy uImage format:
   2270 
   2271   Arg	Where			When
   2272     1	common/cmd_bootm.c	before attempting to boot an image
   2273    -1	common/cmd_bootm.c	Image header has bad	 magic number
   2274     2	common/cmd_bootm.c	Image header has correct magic number
   2275    -2	common/cmd_bootm.c	Image header has bad	 checksum
   2276     3	common/cmd_bootm.c	Image header has correct checksum
   2277    -3	common/cmd_bootm.c	Image data   has bad	 checksum
   2278     4	common/cmd_bootm.c	Image data   has correct checksum
   2279    -4	common/cmd_bootm.c	Image is for unsupported architecture
   2280     5	common/cmd_bootm.c	Architecture check OK
   2281    -5	common/cmd_bootm.c	Wrong Image Type (not kernel, multi)
   2282     6	common/cmd_bootm.c	Image Type check OK
   2283    -6	common/cmd_bootm.c	gunzip uncompression error
   2284    -7	common/cmd_bootm.c	Unimplemented compression type
   2285     7	common/cmd_bootm.c	Uncompression OK
   2286     8	common/cmd_bootm.c	No uncompress/copy overwrite error
   2287    -9	common/cmd_bootm.c	Unsupported OS (not Linux, BSD, VxWorks, QNX)
   2288 
   2289     9	common/image.c		Start initial ramdisk verification
   2290   -10	common/image.c		Ramdisk header has bad	   magic number
   2291   -11	common/image.c		Ramdisk header has bad	   checksum
   2292    10	common/image.c		Ramdisk header is OK
   2293   -12	common/image.c		Ramdisk data   has bad	   checksum
   2294    11	common/image.c		Ramdisk data   has correct checksum
   2295    12	common/image.c		Ramdisk verification complete, start loading
   2296   -13	common/image.c		Wrong Image Type (not PPC Linux ramdisk)
   2297    13	common/image.c		Start multifile image verification
   2298    14	common/image.c		No initial ramdisk, no multifile, continue.
   2299 
   2300    15	arch/<arch>/lib/bootm.c All preparation done, transferring control to OS
   2301 
   2302   -30	arch/powerpc/lib/board.c	Fatal error, hang the system
   2303   -31	post/post.c		POST test failed, detected by post_output_backlog()
   2304   -32	post/post.c		POST test failed, detected by post_run_single()
   2305 
   2306    34	common/cmd_doc.c	before loading a Image from a DOC device
   2307   -35	common/cmd_doc.c	Bad usage of "doc" command
   2308    35	common/cmd_doc.c	correct usage of "doc" command
   2309   -36	common/cmd_doc.c	No boot device
   2310    36	common/cmd_doc.c	correct boot device
   2311   -37	common/cmd_doc.c	Unknown Chip ID on boot device
   2312    37	common/cmd_doc.c	correct chip ID found, device available
   2313   -38	common/cmd_doc.c	Read Error on boot device
   2314    38	common/cmd_doc.c	reading Image header from DOC device OK
   2315   -39	common/cmd_doc.c	Image header has bad magic number
   2316    39	common/cmd_doc.c	Image header has correct magic number
   2317   -40	common/cmd_doc.c	Error reading Image from DOC device
   2318    40	common/cmd_doc.c	Image header has correct magic number
   2319    41	common/cmd_ide.c	before loading a Image from a IDE device
   2320   -42	common/cmd_ide.c	Bad usage of "ide" command
   2321    42	common/cmd_ide.c	correct usage of "ide" command
   2322   -43	common/cmd_ide.c	No boot device
   2323    43	common/cmd_ide.c	boot device found
   2324   -44	common/cmd_ide.c	Device not available
   2325    44	common/cmd_ide.c	Device available
   2326   -45	common/cmd_ide.c	wrong partition selected
   2327    45	common/cmd_ide.c	partition selected
   2328   -46	common/cmd_ide.c	Unknown partition table
   2329    46	common/cmd_ide.c	valid partition table found
   2330   -47	common/cmd_ide.c	Invalid partition type
   2331    47	common/cmd_ide.c	correct partition type
   2332   -48	common/cmd_ide.c	Error reading Image Header on boot device
   2333    48	common/cmd_ide.c	reading Image Header from IDE device OK
   2334   -49	common/cmd_ide.c	Image header has bad magic number
   2335    49	common/cmd_ide.c	Image header has correct magic number
   2336   -50	common/cmd_ide.c	Image header has bad	 checksum
   2337    50	common/cmd_ide.c	Image header has correct checksum
   2338   -51	common/cmd_ide.c	Error reading Image from IDE device
   2339    51	common/cmd_ide.c	reading Image from IDE device OK
   2340    52	common/cmd_nand.c	before loading a Image from a NAND device
   2341   -53	common/cmd_nand.c	Bad usage of "nand" command
   2342    53	common/cmd_nand.c	correct usage of "nand" command
   2343   -54	common/cmd_nand.c	No boot device
   2344    54	common/cmd_nand.c	boot device found
   2345   -55	common/cmd_nand.c	Unknown Chip ID on boot device
   2346    55	common/cmd_nand.c	correct chip ID found, device available
   2347   -56	common/cmd_nand.c	Error reading Image Header on boot device
   2348    56	common/cmd_nand.c	reading Image Header from NAND device OK
   2349   -57	common/cmd_nand.c	Image header has bad magic number
   2350    57	common/cmd_nand.c	Image header has correct magic number
   2351   -58	common/cmd_nand.c	Error reading Image from NAND device
   2352    58	common/cmd_nand.c	reading Image from NAND device OK
   2353 
   2354   -60	common/env_common.c	Environment has a bad CRC, using default
   2355 
   2356    64	net/eth.c		starting with Ethernet configuration.
   2357   -64	net/eth.c		no Ethernet found.
   2358    65	net/eth.c		Ethernet found.
   2359 
   2360   -80	common/cmd_net.c	usage wrong
   2361    80	common/cmd_net.c	before calling net_loop()
   2362   -81	common/cmd_net.c	some error in net_loop() occurred
   2363    81	common/cmd_net.c	net_loop() back without error
   2364   -82	common/cmd_net.c	size == 0 (File with size 0 loaded)
   2365    82	common/cmd_net.c	trying automatic boot
   2366    83	common/cmd_net.c	running "source" command
   2367   -83	common/cmd_net.c	some error in automatic boot or "source" command
   2368    84	common/cmd_net.c	end without errors
   2369 
   2370 FIT uImage format:
   2371 
   2372   Arg	Where			When
   2373   100	common/cmd_bootm.c	Kernel FIT Image has correct format
   2374  -100	common/cmd_bootm.c	Kernel FIT Image has incorrect format
   2375   101	common/cmd_bootm.c	No Kernel subimage unit name, using configuration
   2376  -101	common/cmd_bootm.c	Can't get configuration for kernel subimage
   2377   102	common/cmd_bootm.c	Kernel unit name specified
   2378  -103	common/cmd_bootm.c	Can't get kernel subimage node offset
   2379   103	common/cmd_bootm.c	Found configuration node
   2380   104	common/cmd_bootm.c	Got kernel subimage node offset
   2381  -104	common/cmd_bootm.c	Kernel subimage hash verification failed
   2382   105	common/cmd_bootm.c	Kernel subimage hash verification OK
   2383  -105	common/cmd_bootm.c	Kernel subimage is for unsupported architecture
   2384   106	common/cmd_bootm.c	Architecture check OK
   2385  -106	common/cmd_bootm.c	Kernel subimage has wrong type
   2386   107	common/cmd_bootm.c	Kernel subimage type OK
   2387  -107	common/cmd_bootm.c	Can't get kernel subimage data/size
   2388   108	common/cmd_bootm.c	Got kernel subimage data/size
   2389  -108	common/cmd_bootm.c	Wrong image type (not legacy, FIT)
   2390  -109	common/cmd_bootm.c	Can't get kernel subimage type
   2391  -110	common/cmd_bootm.c	Can't get kernel subimage comp
   2392  -111	common/cmd_bootm.c	Can't get kernel subimage os
   2393  -112	common/cmd_bootm.c	Can't get kernel subimage load address
   2394  -113	common/cmd_bootm.c	Image uncompress/copy overwrite error
   2395 
   2396   120	common/image.c		Start initial ramdisk verification
   2397  -120	common/image.c		Ramdisk FIT image has incorrect format
   2398   121	common/image.c		Ramdisk FIT image has correct format
   2399   122	common/image.c		No ramdisk subimage unit name, using configuration
   2400  -122	common/image.c		Can't get configuration for ramdisk subimage
   2401   123	common/image.c		Ramdisk unit name specified
   2402  -124	common/image.c		Can't get ramdisk subimage node offset
   2403   125	common/image.c		Got ramdisk subimage node offset
   2404  -125	common/image.c		Ramdisk subimage hash verification failed
   2405   126	common/image.c		Ramdisk subimage hash verification OK
   2406  -126	common/image.c		Ramdisk subimage for unsupported architecture
   2407   127	common/image.c		Architecture check OK
   2408  -127	common/image.c		Can't get ramdisk subimage data/size
   2409   128	common/image.c		Got ramdisk subimage data/size
   2410   129	common/image.c		Can't get ramdisk load address
   2411  -129	common/image.c		Got ramdisk load address
   2412 
   2413  -130	common/cmd_doc.c	Incorrect FIT image format
   2414   131	common/cmd_doc.c	FIT image format OK
   2415 
   2416  -140	common/cmd_ide.c	Incorrect FIT image format
   2417   141	common/cmd_ide.c	FIT image format OK
   2418 
   2419  -150	common/cmd_nand.c	Incorrect FIT image format
   2420   151	common/cmd_nand.c	FIT image format OK
   2421 
   2422 - Standalone program support:
   2423 		CONFIG_STANDALONE_LOAD_ADDR
   2424 
   2425 		This option defines a board specific value for the
   2426 		address where standalone program gets loaded, thus
   2427 		overwriting the architecture dependent default
   2428 		settings.
   2429 
   2430 - Frame Buffer Address:
   2431 		CONFIG_FB_ADDR
   2432 
   2433 		Define CONFIG_FB_ADDR if you want to use specific
   2434 		address for frame buffer.  This is typically the case
   2435 		when using a graphics controller has separate video
   2436 		memory.  U-Boot will then place the frame buffer at
   2437 		the given address instead of dynamically reserving it
   2438 		in system RAM by calling lcd_setmem(), which grabs
   2439 		the memory for the frame buffer depending on the
   2440 		configured panel size.
   2441 
   2442 		Please see board_init_f function.
   2443 
   2444 - Automatic software updates via TFTP server
   2445 		CONFIG_UPDATE_TFTP
   2446 		CONFIG_UPDATE_TFTP_CNT_MAX
   2447 		CONFIG_UPDATE_TFTP_MSEC_MAX
   2448 
   2449 		These options enable and control the auto-update feature;
   2450 		for a more detailed description refer to doc/README.update.
   2451 
   2452 - MTD Support (mtdparts command, UBI support)
   2453 		CONFIG_MTD_DEVICE
   2454 
   2455 		Adds the MTD device infrastructure from the Linux kernel.
   2456 		Needed for mtdparts command support.
   2457 
   2458 		CONFIG_MTD_PARTITIONS
   2459 
   2460 		Adds the MTD partitioning infrastructure from the Linux
   2461 		kernel. Needed for UBI support.
   2462 
   2463 - UBI support
   2464 		CONFIG_MTD_UBI_WL_THRESHOLD
   2465 		This parameter defines the maximum difference between the highest
   2466 		erase counter value and the lowest erase counter value of eraseblocks
   2467 		of UBI devices. When this threshold is exceeded, UBI starts performing
   2468 		wear leveling by means of moving data from eraseblock with low erase
   2469 		counter to eraseblocks with high erase counter.
   2470 
   2471 		The default value should be OK for SLC NAND flashes, NOR flashes and
   2472 		other flashes which have eraseblock life-cycle 100000 or more.
   2473 		However, in case of MLC NAND flashes which typically have eraseblock
   2474 		life-cycle less than 10000, the threshold should be lessened (e.g.,
   2475 		to 128 or 256, although it does not have to be power of 2).
   2476 
   2477 		default: 4096
   2478 
   2479 		CONFIG_MTD_UBI_BEB_LIMIT
   2480 		This option specifies the maximum bad physical eraseblocks UBI
   2481 		expects on the MTD device (per 1024 eraseblocks). If the
   2482 		underlying flash does not admit of bad eraseblocks (e.g. NOR
   2483 		flash), this value is ignored.
   2484 
   2485 		NAND datasheets often specify the minimum and maximum NVM
   2486 		(Number of Valid Blocks) for the flashes' endurance lifetime.
   2487 		The maximum expected bad eraseblocks per 1024 eraseblocks
   2488 		then can be calculated as "1024 * (1 - MinNVB / MaxNVB)",
   2489 		which gives 20 for most NANDs (MaxNVB is basically the total
   2490 		count of eraseblocks on the chip).
   2491 
   2492 		To put it differently, if this value is 20, UBI will try to
   2493 		reserve about 1.9% of physical eraseblocks for bad blocks
   2494 		handling. And that will be 1.9% of eraseblocks on the entire
   2495 		NAND chip, not just the MTD partition UBI attaches. This means
   2496 		that if you have, say, a NAND flash chip admits maximum 40 bad
   2497 		eraseblocks, and it is split on two MTD partitions of the same
   2498 		size, UBI will reserve 40 eraseblocks when attaching a
   2499 		partition.
   2500 
   2501 		default: 20
   2502 
   2503 		CONFIG_MTD_UBI_FASTMAP
   2504 		Fastmap is a mechanism which allows attaching an UBI device
   2505 		in nearly constant time. Instead of scanning the whole MTD device it
   2506 		only has to locate a checkpoint (called fastmap) on the device.
   2507 		The on-flash fastmap contains all information needed to attach
   2508 		the device. Using fastmap makes only sense on large devices where
   2509 		attaching by scanning takes long. UBI will not automatically install
   2510 		a fastmap on old images, but you can set the UBI parameter
   2511 		CONFIG_MTD_UBI_FASTMAP_AUTOCONVERT to 1 if you want so. Please note
   2512 		that fastmap-enabled images are still usable with UBI implementations
   2513 		without	fastmap support. On typical flash devices the whole fastmap
   2514 		fits into one PEB. UBI will reserve PEBs to hold two fastmaps.
   2515 
   2516 		CONFIG_MTD_UBI_FASTMAP_AUTOCONVERT
   2517 		Set this parameter to enable fastmap automatically on images
   2518 		without a fastmap.
   2519 		default: 0
   2520 
   2521 		CONFIG_MTD_UBI_FM_DEBUG
   2522 		Enable UBI fastmap debug
   2523 		default: 0
   2524 
   2525 - SPL framework
   2526 		CONFIG_SPL
   2527 		Enable building of SPL globally.
   2528 
   2529 		CONFIG_SPL_LDSCRIPT
   2530 		LDSCRIPT for linking the SPL binary.
   2531 
   2532 		CONFIG_SPL_MAX_FOOTPRINT
   2533 		Maximum size in memory allocated to the SPL, BSS included.
   2534 		When defined, the linker checks that the actual memory
   2535 		used by SPL from _start to __bss_end does not exceed it.
   2536 		CONFIG_SPL_MAX_FOOTPRINT and CONFIG_SPL_BSS_MAX_SIZE
   2537 		must not be both defined at the same time.
   2538 
   2539 		CONFIG_SPL_MAX_SIZE
   2540 		Maximum size of the SPL image (text, data, rodata, and
   2541 		linker lists sections), BSS excluded.
   2542 		When defined, the linker checks that the actual size does
   2543 		not exceed it.
   2544 
   2545 		CONFIG_SPL_TEXT_BASE
   2546 		TEXT_BASE for linking the SPL binary.
   2547 
   2548 		CONFIG_SPL_RELOC_TEXT_BASE
   2549 		Address to relocate to.  If unspecified, this is equal to
   2550 		CONFIG_SPL_TEXT_BASE (i.e. no relocation is done).
   2551 
   2552 		CONFIG_SPL_BSS_START_ADDR
   2553 		Link address for the BSS within the SPL binary.
   2554 
   2555 		CONFIG_SPL_BSS_MAX_SIZE
   2556 		Maximum size in memory allocated to the SPL BSS.
   2557 		When defined, the linker checks that the actual memory used
   2558 		by SPL from __bss_start to __bss_end does not exceed it.
   2559 		CONFIG_SPL_MAX_FOOTPRINT and CONFIG_SPL_BSS_MAX_SIZE
   2560 		must not be both defined at the same time.
   2561 
   2562 		CONFIG_SPL_STACK
   2563 		Adress of the start of the stack SPL will use
   2564 
   2565 		CONFIG_SPL_PANIC_ON_RAW_IMAGE
   2566 		When defined, SPL will panic() if the image it has
   2567 		loaded does not have a signature.
   2568 		Defining this is useful when code which loads images
   2569 		in SPL cannot guarantee that absolutely all read errors
   2570 		will be caught.
   2571 		An example is the LPC32XX MLC NAND driver, which will
   2572 		consider that a completely unreadable NAND block is bad,
   2573 		and thus should be skipped silently.
   2574 
   2575 		CONFIG_SPL_RELOC_STACK
   2576 		Adress of the start of the stack SPL will use after
   2577 		relocation.  If unspecified, this is equal to
   2578 		CONFIG_SPL_STACK.
   2579 
   2580 		CONFIG_SYS_SPL_MALLOC_START
   2581 		Starting address of the malloc pool used in SPL.
   2582 		When this option is set the full malloc is used in SPL and
   2583 		it is set up by spl_init() and before that, the simple malloc()
   2584 		can be used if CONFIG_SYS_MALLOC_F is defined.
   2585 
   2586 		CONFIG_SYS_SPL_MALLOC_SIZE
   2587 		The size of the malloc pool used in SPL.
   2588 
   2589 		CONFIG_SPL_OS_BOOT
   2590 		Enable booting directly to an OS from SPL.
   2591 		See also: doc/README.falcon
   2592 
   2593 		CONFIG_SPL_DISPLAY_PRINT
   2594 		For ARM, enable an optional function to print more information
   2595 		about the running system.
   2596 
   2597 		CONFIG_SPL_INIT_MINIMAL
   2598 		Arch init code should be built for a very small image
   2599 
   2600 		CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION
   2601 		Partition on the MMC to load U-Boot from when the MMC is being
   2602 		used in raw mode
   2603 
   2604 		CONFIG_SYS_MMCSD_RAW_MODE_KERNEL_SECTOR
   2605 		Sector to load kernel uImage from when MMC is being
   2606 		used in raw mode (for Falcon mode)
   2607 
   2608 		CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTOR,
   2609 		CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTORS
   2610 		Sector and number of sectors to load kernel argument
   2611 		parameters from when MMC is being used in raw mode
   2612 		(for falcon mode)
   2613 
   2614 		CONFIG_SYS_MMCSD_FS_BOOT_PARTITION
   2615 		Partition on the MMC to load U-Boot from when the MMC is being
   2616 		used in fs mode
   2617 
   2618 		CONFIG_SPL_FS_LOAD_PAYLOAD_NAME
   2619 		Filename to read to load U-Boot when reading from filesystem
   2620 
   2621 		CONFIG_SPL_FS_LOAD_KERNEL_NAME
   2622 		Filename to read to load kernel uImage when reading
   2623 		from filesystem (for Falcon mode)
   2624 
   2625 		CONFIG_SPL_FS_LOAD_ARGS_NAME
   2626 		Filename to read to load kernel argument parameters
   2627 		when reading from filesystem (for Falcon mode)
   2628 
   2629 		CONFIG_SPL_MPC83XX_WAIT_FOR_NAND
   2630 		Set this for NAND SPL on PPC mpc83xx targets, so that
   2631 		start.S waits for the rest of the SPL to load before
   2632 		continuing (the hardware starts execution after just
   2633 		loading the first page rather than the full 4K).
   2634 
   2635 		CONFIG_SPL_SKIP_RELOCATE
   2636 		Avoid SPL relocation
   2637 
   2638 		CONFIG_SPL_NAND_BASE
   2639 		Include nand_base.c in the SPL.  Requires
   2640 		CONFIG_SPL_NAND_DRIVERS.
   2641 
   2642 		CONFIG_SPL_NAND_DRIVERS
   2643 		SPL uses normal NAND drivers, not minimal drivers.
   2644 
   2645 		CONFIG_SPL_NAND_IDENT
   2646 		SPL uses the chip ID list to identify the NAND flash.
   2647 		Requires CONFIG_SPL_NAND_BASE.
   2648 
   2649 		CONFIG_SPL_NAND_ECC
   2650 		Include standard software ECC in the SPL
   2651 
   2652 		CONFIG_SPL_NAND_SIMPLE
   2653 		Support for NAND boot using simple NAND drivers that
   2654 		expose the cmd_ctrl() interface.
   2655 
   2656 		CONFIG_SPL_UBI
   2657 		Support for a lightweight UBI (fastmap) scanner and
   2658 		loader
   2659 
   2660 		CONFIG_SPL_NAND_RAW_ONLY
   2661 		Support to boot only raw u-boot.bin images. Use this only
   2662 		if you need to save space.
   2663 
   2664 		CONFIG_SPL_COMMON_INIT_DDR
   2665 		Set for common ddr init with serial presence detect in
   2666 		SPL binary.
   2667 
   2668 		CONFIG_SYS_NAND_5_ADDR_CYCLE, CONFIG_SYS_NAND_PAGE_COUNT,
   2669 		CONFIG_SYS_NAND_PAGE_SIZE, CONFIG_SYS_NAND_OOBSIZE,
   2670 		CONFIG_SYS_NAND_BLOCK_SIZE, CONFIG_SYS_NAND_BAD_BLOCK_POS,
   2671 		CONFIG_SYS_NAND_ECCPOS, CONFIG_SYS_NAND_ECCSIZE,
   2672 		CONFIG_SYS_NAND_ECCBYTES
   2673 		Defines the size and behavior of the NAND that SPL uses
   2674 		to read U-Boot
   2675 
   2676 		CONFIG_SPL_NAND_BOOT
   2677 		Add support NAND boot
   2678 
   2679 		CONFIG_SYS_NAND_U_BOOT_OFFS
   2680 		Location in NAND to read U-Boot from
   2681 
   2682 		CONFIG_SYS_NAND_U_BOOT_DST
   2683 		Location in memory to load U-Boot to
   2684 
   2685 		CONFIG_SYS_NAND_U_BOOT_SIZE
   2686 		Size of image to load
   2687 
   2688 		CONFIG_SYS_NAND_U_BOOT_START
   2689 		Entry point in loaded image to jump to
   2690 
   2691 		CONFIG_SYS_NAND_HW_ECC_OOBFIRST
   2692 		Define this if you need to first read the OOB and then the
   2693 		data. This is used, for example, on davinci platforms.
   2694 
   2695 		CONFIG_SPL_RAM_DEVICE
   2696 		Support for running image already present in ram, in SPL binary
   2697 
   2698 		CONFIG_SPL_PAD_TO
   2699 		Image offset to which the SPL should be padded before appending
   2700 		the SPL payload. By default, this is defined as
   2701 		CONFIG_SPL_MAX_SIZE, or 0 if CONFIG_SPL_MAX_SIZE is undefined.
   2702 		CONFIG_SPL_PAD_TO must be either 0, meaning to append the SPL
   2703 		payload without any padding, or >= CONFIG_SPL_MAX_SIZE.
   2704 
   2705 		CONFIG_SPL_TARGET
   2706 		Final target image containing SPL and payload.  Some SPLs
   2707 		use an arch-specific makefile fragment instead, for
   2708 		example if more than one image needs to be produced.
   2709 
   2710 		CONFIG_SPL_FIT_PRINT
   2711 		Printing information about a FIT image adds quite a bit of
   2712 		code to SPL. So this is normally disabled in SPL. Use this
   2713 		option to re-enable it. This will affect the output of the
   2714 		bootm command when booting a FIT image.
   2715 
   2716 - TPL framework
   2717 		CONFIG_TPL
   2718 		Enable building of TPL globally.
   2719 
   2720 		CONFIG_TPL_PAD_TO
   2721 		Image offset to which the TPL should be padded before appending
   2722 		the TPL payload. By default, this is defined as
   2723 		CONFIG_SPL_MAX_SIZE, or 0 if CONFIG_SPL_MAX_SIZE is undefined.
   2724 		CONFIG_SPL_PAD_TO must be either 0, meaning to append the SPL
   2725 		payload without any padding, or >= CONFIG_SPL_MAX_SIZE.
   2726 
   2727 - Interrupt support (PPC):
   2728 
   2729 		There are common interrupt_init() and timer_interrupt()
   2730 		for all PPC archs. interrupt_init() calls interrupt_init_cpu()
   2731 		for CPU specific initialization. interrupt_init_cpu()
   2732 		should set decrementer_count to appropriate value. If
   2733 		CPU resets decrementer automatically after interrupt
   2734 		(ppc4xx) it should set decrementer_count to zero.
   2735 		timer_interrupt() calls timer_interrupt_cpu() for CPU
   2736 		specific handling. If board has watchdog / status_led
   2737 		/ other_activity_monitor it works automatically from
   2738 		general timer_interrupt().
   2739 
   2740 
   2741 Board initialization settings:
   2742 ------------------------------
   2743 
   2744 During Initialization u-boot calls a number of board specific functions
   2745 to allow the preparation of board specific prerequisites, e.g. pin setup
   2746 before drivers are initialized. To enable these callbacks the
   2747 following configuration macros have to be defined. Currently this is
   2748 architecture specific, so please check arch/your_architecture/lib/board.c
   2749 typically in board_init_f() and board_init_r().
   2750 
   2751 - CONFIG_BOARD_EARLY_INIT_F: Call board_early_init_f()
   2752 - CONFIG_BOARD_EARLY_INIT_R: Call board_early_init_r()
   2753 - CONFIG_BOARD_LATE_INIT: Call board_late_init()
   2754 - CONFIG_BOARD_POSTCLK_INIT: Call board_postclk_init()
   2755 
   2756 Configuration Settings:
   2757 -----------------------
   2758 
   2759 - CONFIG_SYS_SUPPORT_64BIT_DATA: Defined automatically if compiled as 64-bit.
   2760 		Optionally it can be defined to support 64-bit memory commands.
   2761 
   2762 - CONFIG_SYS_LONGHELP: Defined when you want long help messages included;
   2763 		undefine this when you're short of memory.
   2764 
   2765 - CONFIG_SYS_HELP_CMD_WIDTH: Defined when you want to override the default
   2766 		width of the commands listed in the 'help' command output.
   2767 
   2768 - CONFIG_SYS_PROMPT:	This is what U-Boot prints on the console to
   2769 		prompt for user input.
   2770 
   2771 - CONFIG_SYS_CBSIZE:	Buffer size for input from the Console
   2772 
   2773 - CONFIG_SYS_PBSIZE:	Buffer size for Console output
   2774 
   2775 - CONFIG_SYS_MAXARGS:	max. Number of arguments accepted for monitor commands
   2776 
   2777 - CONFIG_SYS_BARGSIZE: Buffer size for Boot Arguments which are passed to
   2778 		the application (usually a Linux kernel) when it is
   2779 		booted
   2780 
   2781 - CONFIG_SYS_BAUDRATE_TABLE:
   2782 		List of legal baudrate settings for this board.
   2783 
   2784 - CONFIG_SYS_MEMTEST_START, CONFIG_SYS_MEMTEST_END:
   2785 		Begin and End addresses of the area used by the
   2786 		simple memory test.
   2787 
   2788 - CONFIG_SYS_MEMTEST_SCRATCH:
   2789 		Scratch address used by the alternate memory test
   2790 		You only need to set this if address zero isn't writeable
   2791 
   2792 - CONFIG_SYS_MEM_RESERVE_SECURE
   2793 		Only implemented for ARMv8 for now.
   2794 		If defined, the size of CONFIG_SYS_MEM_RESERVE_SECURE memory
   2795 		is substracted from total RAM and won't be reported to OS.
   2796 		This memory can be used as secure memory. A variable
   2797 		gd->arch.secure_ram is used to track the location. In systems
   2798 		the RAM base is not zero, or RAM is divided into banks,
   2799 		this variable needs to be recalcuated to get the address.
   2800 
   2801 - CONFIG_SYS_MEM_TOP_HIDE:
   2802 		If CONFIG_SYS_MEM_TOP_HIDE is defined in the board config header,
   2803 		this specified memory area will get subtracted from the top
   2804 		(end) of RAM and won't get "touched" at all by U-Boot. By
   2805 		fixing up gd->ram_size the Linux kernel should gets passed
   2806 		the now "corrected" memory size and won't touch it either.
   2807 		This should work for arch/ppc and arch/powerpc. Only Linux
   2808 		board ports in arch/powerpc with bootwrapper support that
   2809 		recalculate the memory size from the SDRAM controller setup
   2810 		will have to get fixed in Linux additionally.
   2811 
   2812 		This option can be used as a workaround for the 440EPx/GRx
   2813 		CHIP 11 errata where the last 256 bytes in SDRAM shouldn't
   2814 		be touched.
   2815 
   2816 		WARNING: Please make sure that this value is a multiple of
   2817 		the Linux page size (normally 4k). If this is not the case,
   2818 		then the end address of the Linux memory will be located at a
   2819 		non page size aligned address and this could cause major
   2820 		problems.
   2821 
   2822 - CONFIG_SYS_LOADS_BAUD_CHANGE:
   2823 		Enable temporary baudrate change while serial download
   2824 
   2825 - CONFIG_SYS_SDRAM_BASE:
   2826 		Physical start address of SDRAM. _Must_ be 0 here.
   2827 
   2828 - CONFIG_SYS_FLASH_BASE:
   2829 		Physical start address of Flash memory.
   2830 
   2831 - CONFIG_SYS_MONITOR_BASE:
   2832 		Physical start address of boot monitor code (set by
   2833 		make config files to be same as the text base address
   2834 		(CONFIG_SYS_TEXT_BASE) used when linking) - same as
   2835 		CONFIG_SYS_FLASH_BASE when booting from flash.
   2836 
   2837 - CONFIG_SYS_MONITOR_LEN:
   2838 		Size of memory reserved for monitor code, used to
   2839 		determine _at_compile_time_ (!) if the environment is
   2840 		embedded within the U-Boot image, or in a separate
   2841 		flash sector.
   2842 
   2843 - CONFIG_SYS_MALLOC_LEN:
   2844 		Size of DRAM reserved for malloc() use.
   2845 
   2846 - CONFIG_SYS_MALLOC_F_LEN
   2847 		Size of the malloc() pool for use before relocation. If
   2848 		this is defined, then a very simple malloc() implementation
   2849 		will become available before relocation. The address is just
   2850 		below the global data, and the stack is moved down to make
   2851 		space.
   2852 
   2853 		This feature allocates regions with increasing addresses
   2854 		within the region. calloc() is supported, but realloc()
   2855 		is not available. free() is supported but does nothing.
   2856 		The memory will be freed (or in fact just forgotten) when
   2857 		U-Boot relocates itself.
   2858 
   2859 - CONFIG_SYS_MALLOC_SIMPLE
   2860 		Provides a simple and small malloc() and calloc() for those
   2861 		boards which do not use the full malloc in SPL (which is
   2862 		enabled with CONFIG_SYS_SPL_MALLOC_START).
   2863 
   2864 - CONFIG_SYS_NONCACHED_MEMORY:
   2865 		Size of non-cached memory area. This area of memory will be
   2866 		typically located right below the malloc() area and mapped
   2867 		uncached in the MMU. This is useful for drivers that would
   2868 		otherwise require a lot of explicit cache maintenance. For
   2869 		some drivers it's also impossible to properly maintain the
   2870 		cache. For example if the regions that need to be flushed
   2871 		are not a multiple of the cache-line size, *and* padding
   2872 		cannot be allocated between the regions to align them (i.e.
   2873 		if the HW requires a contiguous array of regions, and the
   2874 		size of each region is not cache-aligned), then a flush of
   2875 		one region may result in overwriting data that hardware has
   2876 		written to another region in the same cache-line. This can
   2877 		happen for example in network drivers where descriptors for
   2878 		buffers are typically smaller than the CPU cache-line (e.g.
   2879 		16 bytes vs. 32 or 64 bytes).
   2880 
   2881 		Non-cached memory is only supported on 32-bit ARM at present.
   2882 
   2883 - CONFIG_SYS_BOOTM_LEN:
   2884 		Normally compressed uImages are limited to an
   2885 		uncompressed size of 8 MBytes. If this is not enough,
   2886 		you can define CONFIG_SYS_BOOTM_LEN in your board config file
   2887 		to adjust this setting to your needs.
   2888 
   2889 - CONFIG_SYS_BOOTMAPSZ:
   2890 		Maximum size of memory mapped by the startup code of
   2891 		the Linux kernel; all data that must be processed by
   2892 		the Linux kernel (bd_info, boot arguments, FDT blob if
   2893 		used) must be put below this limit, unless "bootm_low"
   2894 		environment variable is defined and non-zero. In such case
   2895 		all data for the Linux kernel must be between "bootm_low"
   2896 		and "bootm_low" + CONFIG_SYS_BOOTMAPSZ.	 The environment
   2897 		variable "bootm_mapsize" will override the value of
   2898 		CONFIG_SYS_BOOTMAPSZ.  If CONFIG_SYS_BOOTMAPSZ is undefined,
   2899 		then the value in "bootm_size" will be used instead.
   2900 
   2901 - CONFIG_SYS_BOOT_RAMDISK_HIGH:
   2902 		Enable initrd_high functionality.  If defined then the
   2903 		initrd_high feature is enabled and the bootm ramdisk subcommand
   2904 		is enabled.
   2905 
   2906 - CONFIG_SYS_BOOT_GET_CMDLINE:
   2907 		Enables allocating and saving kernel cmdline in space between
   2908 		"bootm_low" and "bootm_low" + BOOTMAPSZ.
   2909 
   2910 - CONFIG_SYS_BOOT_GET_KBD:
   2911 		Enables allocating and saving a kernel copy of the bd_info in
   2912 		space between "bootm_low" and "bootm_low" + BOOTMAPSZ.
   2913 
   2914 - CONFIG_SYS_MAX_FLASH_BANKS:
   2915 		Max number of Flash memory banks
   2916 
   2917 - CONFIG_SYS_MAX_FLASH_SECT:
   2918 		Max number of sectors on a Flash chip
   2919 
   2920 - CONFIG_SYS_FLASH_ERASE_TOUT:
   2921 		Timeout for Flash erase operations (in ms)
   2922 
   2923 - CONFIG_SYS_FLASH_WRITE_TOUT:
   2924 		Timeout for Flash write operations (in ms)
   2925 
   2926 - CONFIG_SYS_FLASH_LOCK_TOUT
   2927 		Timeout for Flash set sector lock bit operation (in ms)
   2928 
   2929 - CONFIG_SYS_FLASH_UNLOCK_TOUT
   2930 		Timeout for Flash clear lock bits operation (in ms)
   2931 
   2932 - CONFIG_SYS_FLASH_PROTECTION
   2933 		If defined, hardware flash sectors protection is used
   2934 		instead of U-Boot software protection.
   2935 
   2936 - CONFIG_SYS_DIRECT_FLASH_TFTP:
   2937 
   2938 		Enable TFTP transfers directly to flash memory;
   2939 		without this option such a download has to be
   2940 		performed in two steps: (1) download to RAM, and (2)
   2941 		copy from RAM to flash.
   2942 
   2943 		The two-step approach is usually more reliable, since
   2944 		you can check if the download worked before you erase
   2945 		the flash, but in some situations (when system RAM is
   2946 		too limited to allow for a temporary copy of the
   2947 		downloaded image) this option may be very useful.
   2948 
   2949 - CONFIG_SYS_FLASH_CFI:
   2950 		Define if the flash driver uses extra elements in the
   2951 		common flash structure for storing flash geometry.
   2952 
   2953 - CONFIG_FLASH_CFI_DRIVER
   2954 		This option also enables the building of the cfi_flash driver
   2955 		in the drivers directory
   2956 
   2957 - CONFIG_FLASH_CFI_MTD
   2958 		This option enables the building of the cfi_mtd driver
   2959 		in the drivers directory. The driver exports CFI flash
   2960 		to the MTD layer.
   2961 
   2962 - CONFIG_SYS_FLASH_USE_BUFFER_WRITE
   2963 		Use buffered writes to flash.
   2964 
   2965 - CONFIG_FLASH_SPANSION_S29WS_N
   2966 		s29ws-n MirrorBit flash has non-standard addresses for buffered
   2967 		write commands.
   2968 
   2969 - CONFIG_SYS_FLASH_QUIET_TEST
   2970 		If this option is defined, the common CFI flash doesn't
   2971 		print it's warning upon not recognized FLASH banks. This
   2972 		is useful, if some of the configured banks are only
   2973 		optionally available.
   2974 
   2975 - CONFIG_FLASH_SHOW_PROGRESS
   2976 		If defined (must be an integer), print out countdown
   2977 		digits and dots.  Recommended value: 45 (9..1) for 80
   2978 		column displays, 15 (3..1) for 40 column displays.
   2979 
   2980 - CONFIG_FLASH_VERIFY
   2981 		If defined, the content of the flash (destination) is compared
   2982 		against the source after the write operation. An error message
   2983 		will be printed when the contents are not identical.
   2984 		Please note that this option is useless in nearly all cases,
   2985 		since such flash programming errors usually are detected earlier
   2986 		while unprotecting/erasing/programming. Please only enable
   2987 		this option if you really know what you are doing.
   2988 
   2989 - CONFIG_SYS_RX_ETH_BUFFER:
   2990 		Defines the number of Ethernet receive buffers. On some
   2991 		Ethernet controllers it is recommended to set this value
   2992 		to 8 or even higher (EEPRO100 or 405 EMAC), since all
   2993 		buffers can be full shortly after enabling the interface
   2994 		on high Ethernet traffic.
   2995 		Defaults to 4 if not defined.
   2996 
   2997 - CONFIG_ENV_MAX_ENTRIES
   2998 
   2999 	Maximum number of entries in the hash table that is used
   3000 	internally to store the environment settings. The default
   3001 	setting is supposed to be generous and should work in most
   3002 	cases. This setting can be used to tune behaviour; see
   3003 	lib/hashtable.c for details.
   3004 
   3005 - CONFIG_ENV_FLAGS_LIST_DEFAULT
   3006 - CONFIG_ENV_FLAGS_LIST_STATIC
   3007 	Enable validation of the values given to environment variables when
   3008 	calling env set.  Variables can be restricted to only decimal,
   3009 	hexadecimal, or boolean.  If CONFIG_CMD_NET is also defined,
   3010 	the variables can also be restricted to IP address or MAC address.
   3011 
   3012 	The format of the list is:
   3013 		type_attribute = [s|d|x|b|i|m]
   3014 		access_attribute = [a|r|o|c]
   3015 		attributes = type_attribute[access_attribute]
   3016 		entry = variable_name[:attributes]
   3017 		list = entry[,list]
   3018 
   3019 	The type attributes are:
   3020 		s - String (default)
   3021 		d - Decimal
   3022 		x - Hexadecimal
   3023 		b - Boolean ([1yYtT|0nNfF])
   3024 		i - IP address
   3025 		m - MAC address
   3026 
   3027 	The access attributes are:
   3028 		a - Any (default)
   3029 		r - Read-only
   3030 		o - Write-once
   3031 		c - Change-default
   3032 
   3033 	- CONFIG_ENV_FLAGS_LIST_DEFAULT
   3034 		Define this to a list (string) to define the ".flags"
   3035 		environment variable in the default or embedded environment.
   3036 
   3037 	- CONFIG_ENV_FLAGS_LIST_STATIC
   3038 		Define this to a list (string) to define validation that
   3039 		should be done if an entry is not found in the ".flags"
   3040 		environment variable.  To override a setting in the static
   3041 		list, simply add an entry for the same variable name to the
   3042 		".flags" variable.
   3043 
   3044 	If CONFIG_REGEX is defined, the variable_name above is evaluated as a
   3045 	regular expression. This allows multiple variables to define the same
   3046 	flags without explicitly listing them for each variable.
   3047 
   3048 - CONFIG_ENV_ACCESS_IGNORE_FORCE
   3049 	If defined, don't allow the -f switch to env set override variable
   3050 	access flags.
   3051 
   3052 - CONFIG_USE_STDINT
   3053 	If stdint.h is available with your toolchain you can define this
   3054 	option to enable it. You can provide option 'USE_STDINT=1' when
   3055 	building U-Boot to enable this.
   3056 
   3057 The following definitions that deal with the placement and management
   3058 of environment data (variable area); in general, we support the
   3059 following configurations:
   3060 
   3061 - CONFIG_BUILD_ENVCRC:
   3062 
   3063 	Builds up envcrc with the target environment so that external utils
   3064 	may easily extract it and embed it in final U-Boot images.
   3065 
   3066 BE CAREFUL! The first access to the environment happens quite early
   3067 in U-Boot initialization (when we try to get the setting of for the
   3068 console baudrate). You *MUST* have mapped your NVRAM area then, or
   3069 U-Boot will hang.
   3070 
   3071 Please note that even with NVRAM we still use a copy of the
   3072 environment in RAM: we could work on NVRAM directly, but we want to
   3073 keep settings there always unmodified except somebody uses "saveenv"
   3074 to save the current settings.
   3075 
   3076 BE CAREFUL! For some special cases, the local device can not use
   3077 "saveenv" command. For example, the local device will get the
   3078 environment stored in a remote NOR flash by SRIO or PCIE link,
   3079 but it can not erase, write this NOR flash by SRIO or PCIE interface.
   3080 
   3081 - CONFIG_NAND_ENV_DST
   3082 
   3083 	Defines address in RAM to which the nand_spl code should copy the
   3084 	environment. If redundant environment is used, it will be copied to
   3085 	CONFIG_NAND_ENV_DST + CONFIG_ENV_SIZE.
   3086 
   3087 Please note that the environment is read-only until the monitor
   3088 has been relocated to RAM and a RAM copy of the environment has been
   3089 created; also, when using EEPROM you will have to use env_get_f()
   3090 until then to read environment variables.
   3091 
   3092 The environment is protected by a CRC32 checksum. Before the monitor
   3093 is relocated into RAM, as a result of a bad CRC you will be working
   3094 with the compiled-in default environment - *silently*!!! [This is
   3095 necessary, because the first environment variable we need is the
   3096 "baudrate" setting for the console - if we have a bad CRC, we don't
   3097 have any device yet where we could complain.]
   3098 
   3099 Note: once the monitor has been relocated, then it will complain if
   3100 the default environment is used; a new CRC is computed as soon as you
   3101 use the "saveenv" command to store a valid environment.
   3102 
   3103 - CONFIG_SYS_FAULT_ECHO_LINK_DOWN:
   3104 		Echo the inverted Ethernet link state to the fault LED.
   3105 
   3106 		Note: If this option is active, then CONFIG_SYS_FAULT_MII_ADDR
   3107 		      also needs to be defined.
   3108 
   3109 - CONFIG_SYS_FAULT_MII_ADDR:
   3110 		MII address of the PHY to check for the Ethernet link state.
   3111 
   3112 - CONFIG_NS16550_MIN_FUNCTIONS:
   3113 		Define this if you desire to only have use of the NS16550_init
   3114 		and NS16550_putc functions for the serial driver located at
   3115 		drivers/serial/ns16550.c.  This option is useful for saving
   3116 		space for already greatly restricted images, including but not
   3117 		limited to NAND_SPL configurations.
   3118 
   3119 - CONFIG_DISPLAY_BOARDINFO
   3120 		Display information about the board that U-Boot is running on
   3121 		when U-Boot starts up. The board function checkboard() is called
   3122 		to do this.
   3123 
   3124 - CONFIG_DISPLAY_BOARDINFO_LATE
   3125 		Similar to the previous option, but display this information
   3126 		later, once stdio is running and output goes to the LCD, if
   3127 		present.
   3128 
   3129 - CONFIG_BOARD_SIZE_LIMIT:
   3130 		Maximum size of the U-Boot image. When defined, the
   3131 		build system checks that the actual size does not
   3132 		exceed it.
   3133 
   3134 Low Level (hardware related) configuration options:
   3135 ---------------------------------------------------
   3136 
   3137 - CONFIG_SYS_CACHELINE_SIZE:
   3138 		Cache Line Size of the CPU.
   3139 
   3140 - CONFIG_SYS_CCSRBAR_DEFAULT:
   3141 		Default (power-on reset) physical address of CCSR on Freescale
   3142 		PowerPC SOCs.
   3143 
   3144 - CONFIG_SYS_CCSRBAR:
   3145 		Virtual address of CCSR.  On a 32-bit build, this is typically
   3146 		the same value as CONFIG_SYS_CCSRBAR_DEFAULT.
   3147 
   3148 - CONFIG_SYS_CCSRBAR_PHYS:
   3149 		Physical address of CCSR.  CCSR can be relocated to a new
   3150 		physical address, if desired.  In this case, this macro should
   3151 		be set to that address.	 Otherwise, it should be set to the
   3152 		same value as CONFIG_SYS_CCSRBAR_DEFAULT.  For example, CCSR
   3153 		is typically relocated on 36-bit builds.  It is recommended
   3154 		that this macro be defined via the _HIGH and _LOW macros:
   3155 
   3156 		#define CONFIG_SYS_CCSRBAR_PHYS ((CONFIG_SYS_CCSRBAR_PHYS_HIGH
   3157 			* 1ull) << 32 | CONFIG_SYS_CCSRBAR_PHYS_LOW)
   3158 
   3159 - CONFIG_SYS_CCSRBAR_PHYS_HIGH:
   3160 		Bits 33-36 of CONFIG_SYS_CCSRBAR_PHYS.	This value is typically
   3161 		either 0 (32-bit build) or 0xF (36-bit build).	This macro is
   3162 		used in assembly code, so it must not contain typecasts or
   3163 		integer size suffixes (e.g. "ULL").
   3164 
   3165 - CONFIG_SYS_CCSRBAR_PHYS_LOW:
   3166 		Lower 32-bits of CONFIG_SYS_CCSRBAR_PHYS.  This macro is
   3167 		used in assembly code, so it must not contain typecasts or
   3168 		integer size suffixes (e.g. "ULL").
   3169 
   3170 - CONFIG_SYS_CCSR_DO_NOT_RELOCATE:
   3171 		If this macro is defined, then CONFIG_SYS_CCSRBAR_PHYS will be
   3172 		forced to a value that ensures that CCSR is not relocated.
   3173 
   3174 - Floppy Disk Support:
   3175 		CONFIG_SYS_FDC_DRIVE_NUMBER
   3176 
   3177 		the default drive number (default value 0)
   3178 
   3179 		CONFIG_SYS_ISA_IO_STRIDE
   3180 
   3181 		defines the spacing between FDC chipset registers
   3182 		(default value 1)
   3183 
   3184 		CONFIG_SYS_ISA_IO_OFFSET
   3185 
   3186 		defines the offset of register from address. It
   3187 		depends on which part of the data bus is connected to
   3188 		the FDC chipset. (default value 0)
   3189 
   3190 		If CONFIG_SYS_ISA_IO_STRIDE CONFIG_SYS_ISA_IO_OFFSET and
   3191 		CONFIG_SYS_FDC_DRIVE_NUMBER are undefined, they take their
   3192 		default value.
   3193 
   3194 		if CONFIG_SYS_FDC_HW_INIT is defined, then the function
   3195 		fdc_hw_init() is called at the beginning of the FDC
   3196 		setup. fdc_hw_init() must be provided by the board
   3197 		source code. It is used to make hardware-dependent
   3198 		initializations.
   3199 
   3200 - CONFIG_IDE_AHB:
   3201 		Most IDE controllers were designed to be connected with PCI
   3202 		interface. Only few of them were designed for AHB interface.
   3203 		When software is doing ATA command and data transfer to
   3204 		IDE devices through IDE-AHB controller, some additional
   3205 		registers accessing to these kind of IDE-AHB controller
   3206 		is required.
   3207 
   3208 - CONFIG_SYS_IMMR:	Physical address of the Internal Memory.
   3209 		DO NOT CHANGE unless you know exactly what you're
   3210 		doing! (11-4) [MPC8xx systems only]
   3211 
   3212 - CONFIG_SYS_INIT_RAM_ADDR:
   3213 
   3214 		Start address of memory area that can be used for
   3215 		initial data and stack; please note that this must be
   3216 		writable memory that is working WITHOUT special
   3217 		initialization, i. e. you CANNOT use normal RAM which
   3218 		will become available only after programming the
   3219 		memory controller and running certain initialization
   3220 		sequences.
   3221 
   3222 		U-Boot uses the following memory types:
   3223 		- MPC8xx: IMMR (internal memory of the CPU)
   3224 
   3225 - CONFIG_SYS_GBL_DATA_OFFSET:
   3226 
   3227 		Offset of the initial data structure in the memory
   3228 		area defined by CONFIG_SYS_INIT_RAM_ADDR. Usually
   3229 		CONFIG_SYS_GBL_DATA_OFFSET is chosen such that the initial
   3230 		data is located at the end of the available space
   3231 		(sometimes written as (CONFIG_SYS_INIT_RAM_SIZE -
   3232 		GENERATED_GBL_DATA_SIZE), and the initial stack is just
   3233 		below that area (growing from (CONFIG_SYS_INIT_RAM_ADDR +
   3234 		CONFIG_SYS_GBL_DATA_OFFSET) downward.
   3235 
   3236 	Note:
   3237 		On the MPC824X (or other systems that use the data
   3238 		cache for initial memory) the address chosen for
   3239 		CONFIG_SYS_INIT_RAM_ADDR is basically arbitrary - it must
   3240 		point to an otherwise UNUSED address space between
   3241 		the top of RAM and the start of the PCI space.
   3242 
   3243 - CONFIG_SYS_SCCR:	System Clock and reset Control Register (15-27)
   3244 
   3245 - CONFIG_SYS_OR_TIMING_SDRAM:
   3246 		SDRAM timing
   3247 
   3248 - CONFIG_SYS_MAMR_PTA:
   3249 		periodic timer for refresh
   3250 
   3251 - FLASH_BASE0_PRELIM, FLASH_BASE1_PRELIM, CONFIG_SYS_REMAP_OR_AM,
   3252   CONFIG_SYS_PRELIM_OR_AM, CONFIG_SYS_OR_TIMING_FLASH, CONFIG_SYS_OR0_REMAP,
   3253   CONFIG_SYS_OR0_PRELIM, CONFIG_SYS_BR0_PRELIM, CONFIG_SYS_OR1_REMAP, CONFIG_SYS_OR1_PRELIM,
   3254   CONFIG_SYS_BR1_PRELIM:
   3255 		Memory Controller Definitions: BR0/1 and OR0/1 (FLASH)
   3256 
   3257 - SDRAM_BASE2_PRELIM, SDRAM_BASE3_PRELIM, SDRAM_MAX_SIZE,
   3258   CONFIG_SYS_OR_TIMING_SDRAM, CONFIG_SYS_OR2_PRELIM, CONFIG_SYS_BR2_PRELIM,
   3259   CONFIG_SYS_OR3_PRELIM, CONFIG_SYS_BR3_PRELIM:
   3260 		Memory Controller Definitions: BR2/3 and OR2/3 (SDRAM)
   3261 
   3262 - CONFIG_PCI_ENUM_ONLY
   3263 		Only scan through and get the devices on the buses.
   3264 		Don't do any setup work, presumably because someone or
   3265 		something has already done it, and we don't need to do it
   3266 		a second time.	Useful for platforms that are pre-booted
   3267 		by coreboot or similar.
   3268 
   3269 - CONFIG_PCI_INDIRECT_BRIDGE:
   3270 		Enable support for indirect PCI bridges.
   3271 
   3272 - CONFIG_SYS_SRIO:
   3273 		Chip has SRIO or not
   3274 
   3275 - CONFIG_SRIO1:
   3276 		Board has SRIO 1 port available
   3277 
   3278 - CONFIG_SRIO2:
   3279 		Board has SRIO 2 port available
   3280 
   3281 - CONFIG_SRIO_PCIE_BOOT_MASTER
   3282 		Board can support master function for Boot from SRIO and PCIE
   3283 
   3284 - CONFIG_SYS_SRIOn_MEM_VIRT:
   3285 		Virtual Address of SRIO port 'n' memory region
   3286 
   3287 - CONFIG_SYS_SRIOn_MEM_PHYS:
   3288 		Physical Address of SRIO port 'n' memory region
   3289 
   3290 - CONFIG_SYS_SRIOn_MEM_SIZE:
   3291 		Size of SRIO port 'n' memory region
   3292 
   3293 - CONFIG_SYS_NAND_BUSWIDTH_16BIT
   3294 		Defined to tell the NAND controller that the NAND chip is using
   3295 		a 16 bit bus.
   3296 		Not all NAND drivers use this symbol.
   3297 		Example of drivers that use it:
   3298 		- drivers/mtd/nand/ndfc.c
   3299 		- drivers/mtd/nand/mxc_nand.c
   3300 
   3301 - CONFIG_SYS_NDFC_EBC0_CFG
   3302 		Sets the EBC0_CFG register for the NDFC. If not defined
   3303 		a default value will be used.
   3304 
   3305 - CONFIG_SPD_EEPROM
   3306 		Get DDR timing information from an I2C EEPROM. Common
   3307 		with pluggable memory modules such as SODIMMs
   3308 
   3309   SPD_EEPROM_ADDRESS
   3310 		I2C address of the SPD EEPROM
   3311 
   3312 - CONFIG_SYS_SPD_BUS_NUM
   3313 		If SPD EEPROM is on an I2C bus other than the first
   3314 		one, specify here. Note that the value must resolve
   3315 		to something your driver can deal with.
   3316 
   3317 - CONFIG_SYS_DDR_RAW_TIMING
   3318 		Get DDR timing information from other than SPD. Common with
   3319 		soldered DDR chips onboard without SPD. DDR raw timing
   3320 		parameters are extracted from datasheet and hard-coded into
   3321 		header files or board specific files.
   3322 
   3323 - CONFIG_FSL_DDR_INTERACTIVE
   3324 		Enable interactive DDR debugging. See doc/README.fsl-ddr.
   3325 
   3326 - CONFIG_FSL_DDR_SYNC_REFRESH
   3327 		Enable sync of refresh for multiple controllers.
   3328 
   3329 - CONFIG_FSL_DDR_BIST
   3330 		Enable built-in memory test for Freescale DDR controllers.
   3331 
   3332 - CONFIG_SYS_83XX_DDR_USES_CS0
   3333 		Only for 83xx systems. If specified, then DDR should
   3334 		be configured using CS0 and CS1 instead of CS2 and CS3.
   3335 
   3336 - CONFIG_RMII
   3337 		Enable RMII mode for all FECs.
   3338 		Note that this is a global option, we can't
   3339 		have one FEC in standard MII mode and another in RMII mode.
   3340 
   3341 - CONFIG_CRC32_VERIFY
   3342 		Add a verify option to the crc32 command.
   3343 		The syntax is:
   3344 
   3345 		=> crc32 -v <address> <count> <crc32>
   3346 
   3347 		Where address/count indicate a memory area
   3348 		and crc32 is the correct crc32 which the
   3349 		area should have.
   3350 
   3351 - CONFIG_LOOPW
   3352 		Add the "loopw" memory command. This only takes effect if
   3353 		the memory commands are activated globally (CONFIG_CMD_MEMORY).
   3354 
   3355 - CONFIG_MX_CYCLIC
   3356 		Add the "mdc" and "mwc" memory commands. These are cyclic
   3357 		"md/mw" commands.
   3358 		Examples:
   3359 
   3360 		=> mdc.b 10 4 500
   3361 		This command will print 4 bytes (10,11,12,13) each 500 ms.
   3362 
   3363 		=> mwc.l 100 12345678 10
   3364 		This command will write 12345678 to address 100 all 10 ms.
   3365 
   3366 		This only takes effect if the memory commands are activated
   3367 		globally (CONFIG_CMD_MEMORY).
   3368 
   3369 - CONFIG_SKIP_LOWLEVEL_INIT
   3370 		[ARM, NDS32, MIPS, RISC-V only] If this variable is defined, then certain
   3371 		low level initializations (like setting up the memory
   3372 		controller) are omitted and/or U-Boot does not
   3373 		relocate itself into RAM.
   3374 
   3375 		Normally this variable MUST NOT be defined. The only
   3376 		exception is when U-Boot is loaded (to RAM) by some
   3377 		other boot loader or by a debugger which performs
   3378 		these initializations itself.
   3379 
   3380 - CONFIG_SKIP_LOWLEVEL_INIT_ONLY
   3381 		[ARM926EJ-S only] This allows just the call to lowlevel_init()
   3382 		to be skipped. The normal CP15 init (such as enabling the
   3383 		instruction cache) is still performed.
   3384 
   3385 - CONFIG_SPL_BUILD
   3386 		Modifies the behaviour of start.S when compiling a loader
   3387 		that is executed before the actual U-Boot. E.g. when
   3388 		compiling a NAND SPL.
   3389 
   3390 - CONFIG_TPL_BUILD
   3391 		Modifies the behaviour of start.S  when compiling a loader
   3392 		that is executed after the SPL and before the actual U-Boot.
   3393 		It is loaded by the SPL.
   3394 
   3395 - CONFIG_SYS_MPC85XX_NO_RESETVEC
   3396 		Only for 85xx systems. If this variable is specified, the section
   3397 		.resetvec is not kept and the section .bootpg is placed in the
   3398 		previous 4k of the .text section.
   3399 
   3400 - CONFIG_ARCH_MAP_SYSMEM
   3401 		Generally U-Boot (and in particular the md command) uses
   3402 		effective address. It is therefore not necessary to regard
   3403 		U-Boot address as virtual addresses that need to be translated
   3404 		to physical addresses. However, sandbox requires this, since
   3405 		it maintains its own little RAM buffer which contains all
   3406 		addressable memory. This option causes some memory accesses
   3407 		to be mapped through map_sysmem() / unmap_sysmem().
   3408 
   3409 - CONFIG_X86_RESET_VECTOR
   3410 		If defined, the x86 reset vector code is included. This is not
   3411 		needed when U-Boot is running from Coreboot.
   3412 
   3413 - CONFIG_SYS_NAND_NO_SUBPAGE_WRITE
   3414 		Option to disable subpage write in NAND driver
   3415 		driver that uses this:
   3416 		drivers/mtd/nand/davinci_nand.c
   3417 
   3418 Freescale QE/FMAN Firmware Support:
   3419 -----------------------------------
   3420 
   3421 The Freescale QUICCEngine (QE) and Frame Manager (FMAN) both support the
   3422 loading of "firmware", which is encoded in the QE firmware binary format.
   3423 This firmware often needs to be loaded during U-Boot booting, so macros
   3424 are used to identify the storage device (NOR flash, SPI, etc) and the address
   3425 within that device.
   3426 
   3427 - CONFIG_SYS_FMAN_FW_ADDR
   3428 	The address in the storage device where the FMAN microcode is located.  The
   3429 	meaning of this address depends on which CONFIG_SYS_QE_FW_IN_xxx macro
   3430 	is also specified.
   3431 
   3432 - CONFIG_SYS_QE_FW_ADDR
   3433 	The address in the storage device where the QE microcode is located.  The
   3434 	meaning of this address depends on which CONFIG_SYS_QE_FW_IN_xxx macro
   3435 	is also specified.
   3436 
   3437 - CONFIG_SYS_QE_FMAN_FW_LENGTH
   3438 	The maximum possible size of the firmware.  The firmware binary format
   3439 	has a field that specifies the actual size of the firmware, but it
   3440 	might not be possible to read any part of the firmware unless some
   3441 	local storage is allocated to hold the entire firmware first.
   3442 
   3443 - CONFIG_SYS_QE_FMAN_FW_IN_NOR
   3444 	Specifies that QE/FMAN firmware is located in NOR flash, mapped as
   3445 	normal addressable memory via the LBC.  CONFIG_SYS_FMAN_FW_ADDR is the
   3446 	virtual address in NOR flash.
   3447 
   3448 - CONFIG_SYS_QE_FMAN_FW_IN_NAND
   3449 	Specifies that QE/FMAN firmware is located in NAND flash.
   3450 	CONFIG_SYS_FMAN_FW_ADDR is the offset within NAND flash.
   3451 
   3452 - CONFIG_SYS_QE_FMAN_FW_IN_MMC
   3453 	Specifies that QE/FMAN firmware is located on the primary SD/MMC
   3454 	device.  CONFIG_SYS_FMAN_FW_ADDR is the byte offset on that device.
   3455 
   3456 - CONFIG_SYS_QE_FMAN_FW_IN_REMOTE
   3457 	Specifies that QE/FMAN firmware is located in the remote (master)
   3458 	memory space.	CONFIG_SYS_FMAN_FW_ADDR is a virtual address which
   3459 	can be mapped from slave TLB->slave LAW->slave SRIO or PCIE outbound
   3460 	window->master inbound window->master LAW->the ucode address in
   3461 	master's memory space.
   3462 
   3463 Freescale Layerscape Management Complex Firmware Support:
   3464 ---------------------------------------------------------
   3465 The Freescale Layerscape Management Complex (MC) supports the loading of
   3466 "firmware".
   3467 This firmware often needs to be loaded during U-Boot booting, so macros
   3468 are used to identify the storage device (NOR flash, SPI, etc) and the address
   3469 within that device.
   3470 
   3471 - CONFIG_FSL_MC_ENET
   3472 	Enable the MC driver for Layerscape SoCs.
   3473 
   3474 Freescale Layerscape Debug Server Support:
   3475 -------------------------------------------
   3476 The Freescale Layerscape Debug Server Support supports the loading of
   3477 "Debug Server firmware" and triggering SP boot-rom.
   3478 This firmware often needs to be loaded during U-Boot booting.
   3479 
   3480 - CONFIG_SYS_MC_RSV_MEM_ALIGN
   3481 	Define alignment of reserved memory MC requires
   3482 
   3483 Reproducible builds
   3484 -------------------
   3485 
   3486 In order to achieve reproducible builds, timestamps used in the U-Boot build
   3487 process have to be set to a fixed value.
   3488 
   3489 This is done using the SOURCE_DATE_EPOCH environment variable.
   3490 SOURCE_DATE_EPOCH is to be set on the build host's shell, not as a configuration
   3491 option for U-Boot or an environment variable in U-Boot.
   3492 
   3493 SOURCE_DATE_EPOCH should be set to a number of seconds since the epoch, in UTC.
   3494 
   3495 Building the Software:
   3496 ======================
   3497 
   3498 Building U-Boot has been tested in several native build environments
   3499 and in many different cross environments. Of course we cannot support
   3500 all possibly existing versions of cross development tools in all
   3501 (potentially obsolete) versions. In case of tool chain problems we
   3502 recommend to use the ELDK (see http://www.denx.de/wiki/DULG/ELDK)
   3503 which is extensively used to build and test U-Boot.
   3504 
   3505 If you are not using a native environment, it is assumed that you
   3506 have GNU cross compiling tools available in your path. In this case,
   3507 you must set the environment variable CROSS_COMPILE in your shell.
   3508 Note that no changes to the Makefile or any other source files are
   3509 necessary. For example using the ELDK on a 4xx CPU, please enter:
   3510 
   3511 	$ CROSS_COMPILE=ppc_4xx-
   3512 	$ export CROSS_COMPILE
   3513 
   3514 Note: If you wish to generate Windows versions of the utilities in
   3515       the tools directory you can use the MinGW toolchain
   3516       (http://www.mingw.org).  Set your HOST tools to the MinGW
   3517       toolchain and execute 'make tools'.  For example:
   3518 
   3519        $ make HOSTCC=i586-mingw32msvc-gcc HOSTSTRIP=i586-mingw32msvc-strip tools
   3520 
   3521       Binaries such as tools/mkimage.exe will be created which can
   3522       be executed on computers running Windows.
   3523 
   3524 U-Boot is intended to be simple to build. After installing the
   3525 sources you must configure U-Boot for one specific board type. This
   3526 is done by typing:
   3527 
   3528 	make NAME_defconfig
   3529 
   3530 where "NAME_defconfig" is the name of one of the existing configu-
   3531 rations; see boards.cfg for supported names.
   3532 
   3533 Note: for some board special configuration names may exist; check if
   3534       additional information is available from the board vendor; for
   3535       instance, the TQM823L systems are available without (standard)
   3536       or with LCD support. You can select such additional "features"
   3537       when choosing the configuration, i. e.
   3538 
   3539       make TQM823L_defconfig
   3540 	- will configure for a plain TQM823L, i. e. no LCD support
   3541 
   3542       make TQM823L_LCD_defconfig
   3543 	- will configure for a TQM823L with U-Boot console on LCD
   3544 
   3545       etc.
   3546 
   3547 
   3548 Finally, type "make all", and you should get some working U-Boot
   3549 images ready for download to / installation on your system:
   3550 
   3551 - "u-boot.bin" is a raw binary image
   3552 - "u-boot" is an image in ELF binary format
   3553 - "u-boot.srec" is in Motorola S-Record format
   3554 
   3555 By default the build is performed locally and the objects are saved
   3556 in the source directory. One of the two methods can be used to change
   3557 this behavior and build U-Boot to some external directory:
   3558 
   3559 1. Add O= to the make command line invocations:
   3560 
   3561 	make O=/tmp/build distclean
   3562 	make O=/tmp/build NAME_defconfig
   3563 	make O=/tmp/build all
   3564 
   3565 2. Set environment variable KBUILD_OUTPUT to point to the desired location:
   3566 
   3567 	export KBUILD_OUTPUT=/tmp/build
   3568 	make distclean
   3569 	make NAME_defconfig
   3570 	make all
   3571 
   3572 Note that the command line "O=" setting overrides the KBUILD_OUTPUT environment
   3573 variable.
   3574 
   3575 User specific CPPFLAGS, AFLAGS and CFLAGS can be passed to the compiler by
   3576 setting the according environment variables KCPPFLAGS, KAFLAGS and KCFLAGS.
   3577 For example to treat all compiler warnings as errors:
   3578 
   3579 	make KCFLAGS=-Werror
   3580 
   3581 Please be aware that the Makefiles assume you are using GNU make, so
   3582 for instance on NetBSD you might need to use "gmake" instead of
   3583 native "make".
   3584 
   3585 
   3586 If the system board that you have is not listed, then you will need
   3587 to port U-Boot to your hardware platform. To do this, follow these
   3588 steps:
   3589 
   3590 1.  Create a new directory to hold your board specific code. Add any
   3591     files you need. In your board directory, you will need at least
   3592     the "Makefile" and a "<board>.c".
   3593 2.  Create a new configuration file "include/configs/<board>.h" for
   3594     your board.
   3595 3.  If you're porting U-Boot to a new CPU, then also create a new
   3596     directory to hold your CPU specific code. Add any files you need.
   3597 4.  Run "make <board>_defconfig" with your new name.
   3598 5.  Type "make", and you should get a working "u-boot.srec" file
   3599     to be installed on your target system.
   3600 6.  Debug and solve any problems that might arise.
   3601     [Of course, this last step is much harder than it sounds.]
   3602 
   3603 
   3604 Testing of U-Boot Modifications, Ports to New Hardware, etc.:
   3605 ==============================================================
   3606 
   3607 If you have modified U-Boot sources (for instance added a new board
   3608 or support for new devices, a new CPU, etc.) you are expected to
   3609 provide feedback to the other developers. The feedback normally takes
   3610 the form of a "patch", i. e. a context diff against a certain (latest
   3611 official or latest in the git repository) version of U-Boot sources.
   3612 
   3613 But before you submit such a patch, please verify that your modifi-
   3614 cation did not break existing code. At least make sure that *ALL* of
   3615 the supported boards compile WITHOUT ANY compiler warnings. To do so,
   3616 just run the buildman script (tools/buildman/buildman), which will
   3617 configure and build U-Boot for ALL supported system. Be warned, this
   3618 will take a while. Please see the buildman README, or run 'buildman -H'
   3619 for documentation.
   3620 
   3621 
   3622 See also "U-Boot Porting Guide" below.
   3623 
   3624 
   3625 Monitor Commands - Overview:
   3626 ============================
   3627 
   3628 go	- start application at address 'addr'
   3629 run	- run commands in an environment variable
   3630 bootm	- boot application image from memory
   3631 bootp	- boot image via network using BootP/TFTP protocol
   3632 bootz   - boot zImage from memory
   3633 tftpboot- boot image via network using TFTP protocol
   3634 	       and env variables "ipaddr" and "serverip"
   3635 	       (and eventually "gatewayip")
   3636 tftpput - upload a file via network using TFTP protocol
   3637 rarpboot- boot image via network using RARP/TFTP protocol
   3638 diskboot- boot from IDE devicebootd   - boot default, i.e., run 'bootcmd'
   3639 loads	- load S-Record file over serial line
   3640 loadb	- load binary file over serial line (kermit mode)
   3641 md	- memory display
   3642 mm	- memory modify (auto-incrementing)
   3643 nm	- memory modify (constant address)
   3644 mw	- memory write (fill)
   3645 cp	- memory copy
   3646 cmp	- memory compare
   3647 crc32	- checksum calculation
   3648 i2c	- I2C sub-system
   3649 sspi	- SPI utility commands
   3650 base	- print or set address offset
   3651 printenv- print environment variables
   3652 setenv	- set environment variables
   3653 saveenv - save environment variables to persistent storage
   3654 protect - enable or disable FLASH write protection
   3655 erase	- erase FLASH memory
   3656 flinfo	- print FLASH memory information
   3657 nand	- NAND memory operations (see doc/README.nand)
   3658 bdinfo	- print Board Info structure
   3659 iminfo	- print header information for application image
   3660 coninfo - print console devices and informations
   3661 ide	- IDE sub-system
   3662 loop	- infinite loop on address range
   3663 loopw	- infinite write loop on address range
   3664 mtest	- simple RAM test
   3665 icache	- enable or disable instruction cache
   3666 dcache	- enable or disable data cache
   3667 reset	- Perform RESET of the CPU
   3668 echo	- echo args to console
   3669 version - print monitor version
   3670 help	- print online help
   3671 ?	- alias for 'help'
   3672 
   3673 
   3674 Monitor Commands - Detailed Description:
   3675 ========================================
   3676 
   3677 TODO.
   3678 
   3679 For now: just type "help <command>".
   3680 
   3681 
   3682 Environment Variables:
   3683 ======================
   3684 
   3685 U-Boot supports user configuration using Environment Variables which
   3686 can be made persistent by saving to Flash memory.
   3687 
   3688 Environment Variables are set using "setenv", printed using
   3689 "printenv", and saved to Flash using "saveenv". Using "setenv"
   3690 without a value can be used to delete a variable from the
   3691 environment. As long as you don't save the environment you are
   3692 working with an in-memory copy. In case the Flash area containing the
   3693 environment is erased by accident, a default environment is provided.
   3694 
   3695 Some configuration options can be set using Environment Variables.
   3696 
   3697 List of environment variables (most likely not complete):
   3698 
   3699   baudrate	- see CONFIG_BAUDRATE
   3700 
   3701   bootdelay	- see CONFIG_BOOTDELAY
   3702 
   3703   bootcmd	- see CONFIG_BOOTCOMMAND
   3704 
   3705   bootargs	- Boot arguments when booting an RTOS image
   3706 
   3707   bootfile	- Name of the image to load with TFTP
   3708 
   3709   bootm_low	- Memory range available for image processing in the bootm
   3710 		  command can be restricted. This variable is given as
   3711 		  a hexadecimal number and defines lowest address allowed
   3712 		  for use by the bootm command. See also "bootm_size"
   3713 		  environment variable. Address defined by "bootm_low" is
   3714 		  also the base of the initial memory mapping for the Linux
   3715 		  kernel -- see the description of CONFIG_SYS_BOOTMAPSZ and
   3716 		  bootm_mapsize.
   3717 
   3718   bootm_mapsize - Size of the initial memory mapping for the Linux kernel.
   3719 		  This variable is given as a hexadecimal number and it
   3720 		  defines the size of the memory region starting at base
   3721 		  address bootm_low that is accessible by the Linux kernel
   3722 		  during early boot.  If unset, CONFIG_SYS_BOOTMAPSZ is used
   3723 		  as the default value if it is defined, and bootm_size is
   3724 		  used otherwise.
   3725 
   3726   bootm_size	- Memory range available for image processing in the bootm
   3727 		  command can be restricted. This variable is given as
   3728 		  a hexadecimal number and defines the size of the region
   3729 		  allowed for use by the bootm command. See also "bootm_low"
   3730 		  environment variable.
   3731 
   3732   updatefile	- Location of the software update file on a TFTP server, used
   3733 		  by the automatic software update feature. Please refer to
   3734 		  documentation in doc/README.update for more details.
   3735 
   3736   autoload	- if set to "no" (any string beginning with 'n'),
   3737 		  "bootp" will just load perform a lookup of the
   3738 		  configuration from the BOOTP server, but not try to
   3739 		  load any image using TFTP
   3740 
   3741   autostart	- if set to "yes", an image loaded using the "bootp",
   3742 		  "rarpboot", "tftpboot" or "diskboot" commands will
   3743 		  be automatically started (by internally calling
   3744 		  "bootm")
   3745 
   3746 		  If set to "no", a standalone image passed to the
   3747 		  "bootm" command will be copied to the load address
   3748 		  (and eventually uncompressed), but NOT be started.
   3749 		  This can be used to load and uncompress arbitrary
   3750 		  data.
   3751 
   3752   fdt_high	- if set this restricts the maximum address that the
   3753 		  flattened device tree will be copied into upon boot.
   3754 		  For example, if you have a system with 1 GB memory
   3755 		  at physical address 0x10000000, while Linux kernel
   3756 		  only recognizes the first 704 MB as low memory, you
   3757 		  may need to set fdt_high as 0x3C000000 to have the
   3758 		  device tree blob be copied to the maximum address
   3759 		  of the 704 MB low memory, so that Linux kernel can
   3760 		  access it during the boot procedure.
   3761 
   3762 		  If this is set to the special value 0xFFFFFFFF then
   3763 		  the fdt will not be copied at all on boot.  For this
   3764 		  to work it must reside in writable memory, have
   3765 		  sufficient padding on the end of it for u-boot to
   3766 		  add the information it needs into it, and the memory
   3767 		  must be accessible by the kernel.
   3768 
   3769   fdtcontroladdr- if set this is the address of the control flattened
   3770 		  device tree used by U-Boot when CONFIG_OF_CONTROL is
   3771 		  defined.
   3772 
   3773   i2cfast	- (PPC405GP|PPC405EP only)
   3774 		  if set to 'y' configures Linux I2C driver for fast
   3775 		  mode (400kHZ). This environment variable is used in
   3776 		  initialization code. So, for changes to be effective
   3777 		  it must be saved and board must be reset.
   3778 
   3779   initrd_high	- restrict positioning of initrd images:
   3780 		  If this variable is not set, initrd images will be
   3781 		  copied to the highest possible address in RAM; this
   3782 		  is usually what you want since it allows for
   3783 		  maximum initrd size. If for some reason you want to
   3784 		  make sure that the initrd image is loaded below the
   3785 		  CONFIG_SYS_BOOTMAPSZ limit, you can set this environment
   3786 		  variable to a value of "no" or "off" or "0".
   3787 		  Alternatively, you can set it to a maximum upper
   3788 		  address to use (U-Boot will still check that it
   3789 		  does not overwrite the U-Boot stack and data).
   3790 
   3791 		  For instance, when you have a system with 16 MB
   3792 		  RAM, and want to reserve 4 MB from use by Linux,
   3793 		  you can do this by adding "mem=12M" to the value of
   3794 		  the "bootargs" variable. However, now you must make
   3795 		  sure that the initrd image is placed in the first
   3796 		  12 MB as well - this can be done with
   3797 
   3798 		  setenv initrd_high 00c00000
   3799 
   3800 		  If you set initrd_high to 0xFFFFFFFF, this is an
   3801 		  indication to U-Boot that all addresses are legal
   3802 		  for the Linux kernel, including addresses in flash
   3803 		  memory. In this case U-Boot will NOT COPY the
   3804 		  ramdisk at all. This may be useful to reduce the
   3805 		  boot time on your system, but requires that this
   3806 		  feature is supported by your Linux kernel.
   3807 
   3808   ipaddr	- IP address; needed for tftpboot command
   3809 
   3810   loadaddr	- Default load address for commands like "bootp",
   3811 		  "rarpboot", "tftpboot", "loadb" or "diskboot"
   3812 
   3813   loads_echo	- see CONFIG_LOADS_ECHO
   3814 
   3815   serverip	- TFTP server IP address; needed for tftpboot command
   3816 
   3817   bootretry	- see CONFIG_BOOT_RETRY_TIME
   3818 
   3819   bootdelaykey	- see CONFIG_AUTOBOOT_DELAY_STR
   3820 
   3821   bootstopkey	- see CONFIG_AUTOBOOT_STOP_STR
   3822 
   3823   ethprime	- controls which interface is used first.
   3824 
   3825   ethact	- controls which interface is currently active.
   3826 		  For example you can do the following
   3827 
   3828 		  => setenv ethact FEC
   3829 		  => ping 192.168.0.1 # traffic sent on FEC
   3830 		  => setenv ethact SCC
   3831 		  => ping 10.0.0.1 # traffic sent on SCC
   3832 
   3833   ethrotate	- When set to "no" U-Boot does not go through all
   3834 		  available network interfaces.
   3835 		  It just stays at the currently selected interface.
   3836 
   3837   netretry	- When set to "no" each network operation will
   3838 		  either succeed or fail without retrying.
   3839 		  When set to "once" the network operation will
   3840 		  fail when all the available network interfaces
   3841 		  are tried once without success.
   3842 		  Useful on scripts which control the retry operation
   3843 		  themselves.
   3844 
   3845   npe_ucode	- set load address for the NPE microcode
   3846 
   3847   silent_linux  - If set then Linux will be told to boot silently, by
   3848 		  changing the console to be empty. If "yes" it will be
   3849 		  made silent. If "no" it will not be made silent. If
   3850 		  unset, then it will be made silent if the U-Boot console
   3851 		  is silent.
   3852 
   3853   tftpsrcp	- If this is set, the value is used for TFTP's
   3854 		  UDP source port.
   3855 
   3856   tftpdstp	- If this is set, the value is used for TFTP's UDP
   3857 		  destination port instead of the Well Know Port 69.
   3858 
   3859   tftpblocksize - Block size to use for TFTP transfers; if not set,
   3860 		  we use the TFTP server's default block size
   3861 
   3862   tftptimeout	- Retransmission timeout for TFTP packets (in milli-
   3863 		  seconds, minimum value is 1000 = 1 second). Defines
   3864 		  when a packet is considered to be lost so it has to
   3865 		  be retransmitted. The default is 5000 = 5 seconds.
   3866 		  Lowering this value may make downloads succeed
   3867 		  faster in networks with high packet loss rates or
   3868 		  with unreliable TFTP servers.
   3869 
   3870   tftptimeoutcountmax	- maximum count of TFTP timeouts (no
   3871 		  unit, minimum value = 0). Defines how many timeouts
   3872 		  can happen during a single file transfer before that
   3873 		  transfer is aborted. The default is 10, and 0 means
   3874 		  'no timeouts allowed'. Increasing this value may help
   3875 		  downloads succeed with high packet loss rates, or with
   3876 		  unreliable TFTP servers or client hardware.
   3877 
   3878   vlan		- When set to a value < 4095 the traffic over
   3879 		  Ethernet is encapsulated/received over 802.1q
   3880 		  VLAN tagged frames.
   3881 
   3882   bootpretryperiod	- Period during which BOOTP/DHCP sends retries.
   3883 		  Unsigned value, in milliseconds. If not set, the period will
   3884 		  be either the default (28000), or a value based on
   3885 		  CONFIG_NET_RETRY_COUNT, if defined. This value has
   3886 		  precedence over the valu based on CONFIG_NET_RETRY_COUNT.
   3887 
   3888 The following image location variables contain the location of images
   3889 used in booting. The "Image" column gives the role of the image and is
   3890 not an environment variable name. The other columns are environment
   3891 variable names. "File Name" gives the name of the file on a TFTP
   3892 server, "RAM Address" gives the location in RAM the image will be
   3893 loaded to, and "Flash Location" gives the image's address in NOR
   3894 flash or offset in NAND flash.
   3895 
   3896 *Note* - these variables don't have to be defined for all boards, some
   3897 boards currently use other variables for these purposes, and some
   3898 boards use these variables for other purposes.
   3899 
   3900 Image		    File Name	     RAM Address       Flash Location
   3901 -----		    ---------	     -----------       --------------
   3902 u-boot		    u-boot	     u-boot_addr_r     u-boot_addr
   3903 Linux kernel	    bootfile	     kernel_addr_r     kernel_addr
   3904 device tree blob    fdtfile	     fdt_addr_r	       fdt_addr
   3905 ramdisk		    ramdiskfile	     ramdisk_addr_r    ramdisk_addr
   3906 
   3907 The following environment variables may be used and automatically
   3908 updated by the network boot commands ("bootp" and "rarpboot"),
   3909 depending the information provided by your boot server:
   3910 
   3911   bootfile	- see above
   3912   dnsip		- IP address of your Domain Name Server
   3913   dnsip2	- IP address of your secondary Domain Name Server
   3914   gatewayip	- IP address of the Gateway (Router) to use
   3915   hostname	- Target hostname
   3916   ipaddr	- see above
   3917   netmask	- Subnet Mask
   3918   rootpath	- Pathname of the root filesystem on the NFS server
   3919   serverip	- see above
   3920 
   3921 
   3922 There are two special Environment Variables:
   3923 
   3924   serial#	- contains hardware identification information such
   3925 		  as type string and/or serial number
   3926   ethaddr	- Ethernet address
   3927 
   3928 These variables can be set only once (usually during manufacturing of
   3929 the board). U-Boot refuses to delete or overwrite these variables
   3930 once they have been set once.
   3931 
   3932 
   3933 Further special Environment Variables:
   3934 
   3935   ver		- Contains the U-Boot version string as printed
   3936 		  with the "version" command. This variable is
   3937 		  readonly (see CONFIG_VERSION_VARIABLE).
   3938 
   3939 
   3940 Please note that changes to some configuration parameters may take
   3941 only effect after the next boot (yes, that's just like Windoze :-).
   3942 
   3943 
   3944 Callback functions for environment variables:
   3945 ---------------------------------------------
   3946 
   3947 For some environment variables, the behavior of u-boot needs to change
   3948 when their values are changed.  This functionality allows functions to
   3949 be associated with arbitrary variables.  On creation, overwrite, or
   3950 deletion, the callback will provide the opportunity for some side
   3951 effect to happen or for the change to be rejected.
   3952 
   3953 The callbacks are named and associated with a function using the
   3954 U_BOOT_ENV_CALLBACK macro in your board or driver code.
   3955 
   3956 These callbacks are associated with variables in one of two ways.  The
   3957 static list can be added to by defining CONFIG_ENV_CALLBACK_LIST_STATIC
   3958 in the board configuration to a string that defines a list of
   3959 associations.  The list must be in the following format:
   3960 
   3961 	entry = variable_name[:callback_name]
   3962 	list = entry[,list]
   3963 
   3964 If the callback name is not specified, then the callback is deleted.
   3965 Spaces are also allowed anywhere in the list.
   3966 
   3967 Callbacks can also be associated by defining the ".callbacks" variable
   3968 with the same list format above.  Any association in ".callbacks" will
   3969 override any association in the static list. You can define
   3970 CONFIG_ENV_CALLBACK_LIST_DEFAULT to a list (string) to define the
   3971 ".callbacks" environment variable in the default or embedded environment.
   3972 
   3973 If CONFIG_REGEX is defined, the variable_name above is evaluated as a
   3974 regular expression. This allows multiple variables to be connected to
   3975 the same callback without explicitly listing them all out.
   3976 
   3977 
   3978 Command Line Parsing:
   3979 =====================
   3980 
   3981 There are two different command line parsers available with U-Boot:
   3982 the old "simple" one, and the much more powerful "hush" shell:
   3983 
   3984 Old, simple command line parser:
   3985 --------------------------------
   3986 
   3987 - supports environment variables (through setenv / saveenv commands)
   3988 - several commands on one line, separated by ';'
   3989 - variable substitution using "... ${name} ..." syntax
   3990 - special characters ('$', ';') can be escaped by prefixing with '\',
   3991   for example:
   3992 	setenv bootcmd bootm \${address}
   3993 - You can also escape text by enclosing in single apostrophes, for example:
   3994 	setenv addip 'setenv bootargs $bootargs ip=$ipaddr:$serverip:$gatewayip:$netmask:$hostname::off'
   3995 
   3996 Hush shell:
   3997 -----------
   3998 
   3999 - similar to Bourne shell, with control structures like
   4000   if...then...else...fi, for...do...done; while...do...done,
   4001   until...do...done, ...
   4002 - supports environment ("global") variables (through setenv / saveenv
   4003   commands) and local shell variables (through standard shell syntax
   4004   "name=value"); only environment variables can be used with "run"
   4005   command
   4006 
   4007 General rules:
   4008 --------------
   4009 
   4010 (1) If a command line (or an environment variable executed by a "run"
   4011     command) contains several commands separated by semicolon, and
   4012     one of these commands fails, then the remaining commands will be
   4013     executed anyway.
   4014 
   4015 (2) If you execute several variables with one call to run (i. e.
   4016     calling run with a list of variables as arguments), any failing
   4017     command will cause "run" to terminate, i. e. the remaining
   4018     variables are not executed.
   4019 
   4020 Note for Redundant Ethernet Interfaces:
   4021 =======================================
   4022 
   4023 Some boards come with redundant Ethernet interfaces; U-Boot supports
   4024 such configurations and is capable of automatic selection of a
   4025 "working" interface when needed. MAC assignment works as follows:
   4026 
   4027 Network interfaces are numbered eth0, eth1, eth2, ... Corresponding
   4028 MAC addresses can be stored in the environment as "ethaddr" (=>eth0),
   4029 "eth1addr" (=>eth1), "eth2addr", ...
   4030 
   4031 If the network interface stores some valid MAC address (for instance
   4032 in SROM), this is used as default address if there is NO correspon-
   4033 ding setting in the environment; if the corresponding environment
   4034 variable is set, this overrides the settings in the card; that means:
   4035 
   4036 o If the SROM has a valid MAC address, and there is no address in the
   4037   environment, the SROM's address is used.
   4038 
   4039 o If there is no valid address in the SROM, and a definition in the
   4040   environment exists, then the value from the environment variable is
   4041   used.
   4042 
   4043 o If both the SROM and the environment contain a MAC address, and
   4044   both addresses are the same, this MAC address is used.
   4045 
   4046 o If both the SROM and the environment contain a MAC address, and the
   4047   addresses differ, the value from the environment is used and a
   4048   warning is printed.
   4049 
   4050 o If neither SROM nor the environment contain a MAC address, an error
   4051   is raised. If CONFIG_NET_RANDOM_ETHADDR is defined, then in this case
   4052   a random, locally-assigned MAC is used.
   4053 
   4054 If Ethernet drivers implement the 'write_hwaddr' function, valid MAC addresses
   4055 will be programmed into hardware as part of the initialization process.	 This
   4056 may be skipped by setting the appropriate 'ethmacskip' environment variable.
   4057 The naming convention is as follows:
   4058 "ethmacskip" (=>eth0), "eth1macskip" (=>eth1) etc.
   4059 
   4060 Image Formats:
   4061 ==============
   4062 
   4063 U-Boot is capable of booting (and performing other auxiliary operations on)
   4064 images in two formats:
   4065 
   4066 New uImage format (FIT)
   4067 -----------------------
   4068 
   4069 Flexible and powerful format based on Flattened Image Tree -- FIT (similar
   4070 to Flattened Device Tree). It allows the use of images with multiple
   4071 components (several kernels, ramdisks, etc.), with contents protected by
   4072 SHA1, MD5 or CRC32. More details are found in the doc/uImage.FIT directory.
   4073 
   4074 
   4075 Old uImage format
   4076 -----------------
   4077 
   4078 Old image format is based on binary files which can be basically anything,
   4079 preceded by a special header; see the definitions in include/image.h for
   4080 details; basically, the header defines the following image properties:
   4081 
   4082 * Target Operating System (Provisions for OpenBSD, NetBSD, FreeBSD,
   4083   4.4BSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks,
   4084   LynxOS, pSOS, QNX, RTEMS, INTEGRITY;
   4085   Currently supported: Linux, NetBSD, VxWorks, QNX, RTEMS, LynxOS,
   4086   INTEGRITY).
   4087 * Target CPU Architecture (Provisions for Alpha, ARM, Intel x86,
   4088   IA64, MIPS, NDS32, Nios II, PowerPC, IBM S390, SuperH, Sparc, Sparc 64 Bit;
   4089   Currently supported: ARM, Intel x86, MIPS, NDS32, Nios II, PowerPC).
   4090 * Compression Type (uncompressed, gzip, bzip2)
   4091 * Load Address
   4092 * Entry Point
   4093 * Image Name
   4094 * Image Timestamp
   4095 
   4096 The header is marked by a special Magic Number, and both the header
   4097 and the data portions of the image are secured against corruption by
   4098 CRC32 checksums.
   4099 
   4100 
   4101 Linux Support:
   4102 ==============
   4103 
   4104 Although U-Boot should support any OS or standalone application
   4105 easily, the main focus has always been on Linux during the design of
   4106 U-Boot.
   4107 
   4108 U-Boot includes many features that so far have been part of some
   4109 special "boot loader" code within the Linux kernel. Also, any
   4110 "initrd" images to be used are no longer part of one big Linux image;
   4111 instead, kernel and "initrd" are separate images. This implementation
   4112 serves several purposes:
   4113 
   4114 - the same features can be used for other OS or standalone
   4115   applications (for instance: using compressed images to reduce the
   4116   Flash memory footprint)
   4117 
   4118 - it becomes much easier to port new Linux kernel versions because
   4119   lots of low-level, hardware dependent stuff are done by U-Boot
   4120 
   4121 - the same Linux kernel image can now be used with different "initrd"
   4122   images; of course this also means that different kernel images can
   4123   be run with the same "initrd". This makes testing easier (you don't
   4124   have to build a new "zImage.initrd" Linux image when you just
   4125   change a file in your "initrd"). Also, a field-upgrade of the
   4126   software is easier now.
   4127 
   4128 
   4129 Linux HOWTO:
   4130 ============
   4131 
   4132 Porting Linux to U-Boot based systems:
   4133 ---------------------------------------
   4134 
   4135 U-Boot cannot save you from doing all the necessary modifications to
   4136 configure the Linux device drivers for use with your target hardware
   4137 (no, we don't intend to provide a full virtual machine interface to
   4138 Linux :-).
   4139 
   4140 But now you can ignore ALL boot loader code (in arch/powerpc/mbxboot).
   4141 
   4142 Just make sure your machine specific header file (for instance
   4143 include/asm-ppc/tqm8xx.h) includes the same definition of the Board
   4144 Information structure as we define in include/asm-<arch>/u-boot.h,
   4145 and make sure that your definition of IMAP_ADDR uses the same value
   4146 as your U-Boot configuration in CONFIG_SYS_IMMR.
   4147 
   4148 Note that U-Boot now has a driver model, a unified model for drivers.
   4149 If you are adding a new driver, plumb it into driver model. If there
   4150 is no uclass available, you are encouraged to create one. See
   4151 doc/driver-model.
   4152 
   4153 
   4154 Configuring the Linux kernel:
   4155 -----------------------------
   4156 
   4157 No specific requirements for U-Boot. Make sure you have some root
   4158 device (initial ramdisk, NFS) for your target system.
   4159 
   4160 
   4161 Building a Linux Image:
   4162 -----------------------
   4163 
   4164 With U-Boot, "normal" build targets like "zImage" or "bzImage" are
   4165 not used. If you use recent kernel source, a new build target
   4166 "uImage" will exist which automatically builds an image usable by
   4167 U-Boot. Most older kernels also have support for a "pImage" target,
   4168 which was introduced for our predecessor project PPCBoot and uses a
   4169 100% compatible format.
   4170 
   4171 Example:
   4172 
   4173 	make TQM850L_defconfig
   4174 	make oldconfig
   4175 	make dep
   4176 	make uImage
   4177 
   4178 The "uImage" build target uses a special tool (in 'tools/mkimage') to
   4179 encapsulate a compressed Linux kernel image with header	 information,
   4180 CRC32 checksum etc. for use with U-Boot. This is what we are doing:
   4181 
   4182 * build a standard "vmlinux" kernel image (in ELF binary format):
   4183 
   4184 * convert the kernel into a raw binary image:
   4185 
   4186 	${CROSS_COMPILE}-objcopy -O binary \
   4187 				 -R .note -R .comment \
   4188 				 -S vmlinux linux.bin
   4189 
   4190 * compress the binary image:
   4191 
   4192 	gzip -9 linux.bin
   4193 
   4194 * package compressed binary image for U-Boot:
   4195 
   4196 	mkimage -A ppc -O linux -T kernel -C gzip \
   4197 		-a 0 -e 0 -n "Linux Kernel Image" \
   4198 		-d linux.bin.gz uImage
   4199 
   4200 
   4201 The "mkimage" tool can also be used to create ramdisk images for use
   4202 with U-Boot, either separated from the Linux kernel image, or
   4203 combined into one file. "mkimage" encapsulates the images with a 64
   4204 byte header containing information about target architecture,
   4205 operating system, image type, compression method, entry points, time
   4206 stamp, CRC32 checksums, etc.
   4207 
   4208 "mkimage" can be called in two ways: to verify existing images and
   4209 print the header information, or to build new images.
   4210 
   4211 In the first form (with "-l" option) mkimage lists the information
   4212 contained in the header of an existing U-Boot image; this includes
   4213 checksum verification:
   4214 
   4215 	tools/mkimage -l image
   4216 	  -l ==> list image header information
   4217 
   4218 The second form (with "-d" option) is used to build a U-Boot image
   4219 from a "data file" which is used as image payload:
   4220 
   4221 	tools/mkimage -A arch -O os -T type -C comp -a addr -e ep \
   4222 		      -n name -d data_file image
   4223 	  -A ==> set architecture to 'arch'
   4224 	  -O ==> set operating system to 'os'
   4225 	  -T ==> set image type to 'type'
   4226 	  -C ==> set compression type 'comp'
   4227 	  -a ==> set load address to 'addr' (hex)
   4228 	  -e ==> set entry point to 'ep' (hex)
   4229 	  -n ==> set image name to 'name'
   4230 	  -d ==> use image data from 'datafile'
   4231 
   4232 Right now, all Linux kernels for PowerPC systems use the same load
   4233 address (0x00000000), but the entry point address depends on the
   4234 kernel version:
   4235 
   4236 - 2.2.x kernels have the entry point at 0x0000000C,
   4237 - 2.3.x and later kernels have the entry point at 0x00000000.
   4238 
   4239 So a typical call to build a U-Boot image would read:
   4240 
   4241 	-> tools/mkimage -n '2.4.4 kernel for TQM850L' \
   4242 	> -A ppc -O linux -T kernel -C gzip -a 0 -e 0 \
   4243 	> -d /opt/elsk/ppc_8xx/usr/src/linux-2.4.4/arch/powerpc/coffboot/vmlinux.gz \
   4244 	> examples/uImage.TQM850L
   4245 	Image Name:   2.4.4 kernel for TQM850L
   4246 	Created:      Wed Jul 19 02:34:59 2000
   4247 	Image Type:   PowerPC Linux Kernel Image (gzip compressed)
   4248 	Data Size:    335725 Bytes = 327.86 kB = 0.32 MB
   4249 	Load Address: 0x00000000
   4250 	Entry Point:  0x00000000
   4251 
   4252 To verify the contents of the image (or check for corruption):
   4253 
   4254 	-> tools/mkimage -l examples/uImage.TQM850L
   4255 	Image Name:   2.4.4 kernel for TQM850L
   4256 	Created:      Wed Jul 19 02:34:59 2000
   4257 	Image Type:   PowerPC Linux Kernel Image (gzip compressed)
   4258 	Data Size:    335725 Bytes = 327.86 kB = 0.32 MB
   4259 	Load Address: 0x00000000
   4260 	Entry Point:  0x00000000
   4261 
   4262 NOTE: for embedded systems where boot time is critical you can trade
   4263 speed for memory and install an UNCOMPRESSED image instead: this
   4264 needs more space in Flash, but boots much faster since it does not
   4265 need to be uncompressed:
   4266 
   4267 	-> gunzip /opt/elsk/ppc_8xx/usr/src/linux-2.4.4/arch/powerpc/coffboot/vmlinux.gz
   4268 	-> tools/mkimage -n '2.4.4 kernel for TQM850L' \
   4269 	> -A ppc -O linux -T kernel -C none -a 0 -e 0 \
   4270 	> -d /opt/elsk/ppc_8xx/usr/src/linux-2.4.4/arch/powerpc/coffboot/vmlinux \
   4271 	> examples/uImage.TQM850L-uncompressed
   4272 	Image Name:   2.4.4 kernel for TQM850L
   4273 	Created:      Wed Jul 19 02:34:59 2000
   4274 	Image Type:   PowerPC Linux Kernel Image (uncompressed)
   4275 	Data Size:    792160 Bytes = 773.59 kB = 0.76 MB
   4276 	Load Address: 0x00000000
   4277 	Entry Point:  0x00000000
   4278 
   4279 
   4280 Similar you can build U-Boot images from a 'ramdisk.image.gz' file
   4281 when your kernel is intended to use an initial ramdisk:
   4282 
   4283 	-> tools/mkimage -n 'Simple Ramdisk Image' \
   4284 	> -A ppc -O linux -T ramdisk -C gzip \
   4285 	> -d /LinuxPPC/images/SIMPLE-ramdisk.image.gz examples/simple-initrd
   4286 	Image Name:   Simple Ramdisk Image
   4287 	Created:      Wed Jan 12 14:01:50 2000
   4288 	Image Type:   PowerPC Linux RAMDisk Image (gzip compressed)
   4289 	Data Size:    566530 Bytes = 553.25 kB = 0.54 MB
   4290 	Load Address: 0x00000000
   4291 	Entry Point:  0x00000000
   4292 
   4293 The "dumpimage" is a tool to disassemble images built by mkimage. Its "-i"
   4294 option performs the converse operation of the mkimage's second form (the "-d"
   4295 option). Given an image built by mkimage, the dumpimage extracts a "data file"
   4296 from the image:
   4297 
   4298 	tools/dumpimage -i image -T type -p position data_file
   4299 	  -i ==> extract from the 'image' a specific 'data_file'
   4300 	  -T ==> set image type to 'type'
   4301 	  -p ==> 'position' (starting at 0) of the 'data_file' inside the 'image'
   4302 
   4303 
   4304 Installing a Linux Image:
   4305 -------------------------
   4306 
   4307 To downloading a U-Boot image over the serial (console) interface,
   4308 you must convert the image to S-Record format:
   4309 
   4310 	objcopy -I binary -O srec examples/image examples/image.srec
   4311 
   4312 The 'objcopy' does not understand the information in the U-Boot
   4313 image header, so the resulting S-Record file will be relative to
   4314 address 0x00000000. To load it to a given address, you need to
   4315 specify the target address as 'offset' parameter with the 'loads'
   4316 command.
   4317 
   4318 Example: install the image to address 0x40100000 (which on the
   4319 TQM8xxL is in the first Flash bank):
   4320 
   4321 	=> erase 40100000 401FFFFF
   4322 
   4323 	.......... done
   4324 	Erased 8 sectors
   4325 
   4326 	=> loads 40100000
   4327 	## Ready for S-Record download ...
   4328 	~>examples/image.srec
   4329 	1 2 3 4 5 6 7 8 9 10 11 12 13 ...
   4330 	...
   4331 	15989 15990 15991 15992
   4332 	[file transfer complete]
   4333 	[connected]
   4334 	## Start Addr = 0x00000000
   4335 
   4336 
   4337 You can check the success of the download using the 'iminfo' command;
   4338 this includes a checksum verification so you can be sure no data
   4339 corruption happened:
   4340 
   4341 	=> imi 40100000
   4342 
   4343 	## Checking Image at 40100000 ...
   4344 	   Image Name:	 2.2.13 for initrd on TQM850L
   4345 	   Image Type:	 PowerPC Linux Kernel Image (gzip compressed)
   4346 	   Data Size:	 335725 Bytes = 327 kB = 0 MB
   4347 	   Load Address: 00000000
   4348 	   Entry Point:	 0000000c
   4349 	   Verifying Checksum ... OK
   4350 
   4351 
   4352 Boot Linux:
   4353 -----------
   4354 
   4355 The "bootm" command is used to boot an application that is stored in
   4356 memory (RAM or Flash). In case of a Linux kernel image, the contents
   4357 of the "bootargs" environment variable is passed to the kernel as
   4358 parameters. You can check and modify this variable using the
   4359 "printenv" and "setenv" commands:
   4360 
   4361 
   4362 	=> printenv bootargs
   4363 	bootargs=root=/dev/ram
   4364 
   4365 	=> setenv bootargs root=/dev/nfs rw nfsroot=10.0.0.2:/LinuxPPC nfsaddrs=10.0.0.99:10.0.0.2
   4366 
   4367 	=> printenv bootargs
   4368 	bootargs=root=/dev/nfs rw nfsroot=10.0.0.2:/LinuxPPC nfsaddrs=10.0.0.99:10.0.0.2
   4369 
   4370 	=> bootm 40020000
   4371 	## Booting Linux kernel at 40020000 ...
   4372 	   Image Name:	 2.2.13 for NFS on TQM850L
   4373 	   Image Type:	 PowerPC Linux Kernel Image (gzip compressed)
   4374 	   Data Size:	 381681 Bytes = 372 kB = 0 MB
   4375 	   Load Address: 00000000
   4376 	   Entry Point:	 0000000c
   4377 	   Verifying Checksum ... OK
   4378 	   Uncompressing Kernel Image ... OK
   4379 	Linux version 2.2.13 (wd (a] denx.local.net) (gcc version 2.95.2 19991024 (release)) #1 Wed Jul 19 02:35:17 MEST 2000
   4380 	Boot arguments: root=/dev/nfs rw nfsroot=10.0.0.2:/LinuxPPC nfsaddrs=10.0.0.99:10.0.0.2
   4381 	time_init: decrementer frequency = 187500000/60
   4382 	Calibrating delay loop... 49.77 BogoMIPS
   4383 	Memory: 15208k available (700k kernel code, 444k data, 32k init) [c0000000,c1000000]
   4384 	...
   4385 
   4386 If you want to boot a Linux kernel with initial RAM disk, you pass
   4387 the memory addresses of both the kernel and the initrd image (PPBCOOT
   4388 format!) to the "bootm" command:
   4389 
   4390 	=> imi 40100000 40200000
   4391 
   4392 	## Checking Image at 40100000 ...
   4393 	   Image Name:	 2.2.13 for initrd on TQM850L
   4394 	   Image Type:	 PowerPC Linux Kernel Image (gzip compressed)
   4395 	   Data Size:	 335725 Bytes = 327 kB = 0 MB
   4396 	   Load Address: 00000000
   4397 	   Entry Point:	 0000000c
   4398 	   Verifying Checksum ... OK
   4399 
   4400 	## Checking Image at 40200000 ...
   4401 	   Image Name:	 Simple Ramdisk Image
   4402 	   Image Type:	 PowerPC Linux RAMDisk Image (gzip compressed)
   4403 	   Data Size:	 566530 Bytes = 553 kB = 0 MB
   4404 	   Load Address: 00000000
   4405 	   Entry Point:	 00000000
   4406 	   Verifying Checksum ... OK
   4407 
   4408 	=> bootm 40100000 40200000
   4409 	## Booting Linux kernel at 40100000 ...
   4410 	   Image Name:	 2.2.13 for initrd on TQM850L
   4411 	   Image Type:	 PowerPC Linux Kernel Image (gzip compressed)
   4412 	   Data Size:	 335725 Bytes = 327 kB = 0 MB
   4413 	   Load Address: 00000000
   4414 	   Entry Point:	 0000000c
   4415 	   Verifying Checksum ... OK
   4416 	   Uncompressing Kernel Image ... OK
   4417 	## Loading RAMDisk Image at 40200000 ...
   4418 	   Image Name:	 Simple Ramdisk Image
   4419 	   Image Type:	 PowerPC Linux RAMDisk Image (gzip compressed)
   4420 	   Data Size:	 566530 Bytes = 553 kB = 0 MB
   4421 	   Load Address: 00000000
   4422 	   Entry Point:	 00000000
   4423 	   Verifying Checksum ... OK
   4424 	   Loading Ramdisk ... OK
   4425 	Linux version 2.2.13 (wd (a] denx.local.net) (gcc version 2.95.2 19991024 (release)) #1 Wed Jul 19 02:32:08 MEST 2000
   4426 	Boot arguments: root=/dev/ram
   4427 	time_init: decrementer frequency = 187500000/60
   4428 	Calibrating delay loop... 49.77 BogoMIPS
   4429 	...
   4430 	RAMDISK: Compressed image found at block 0
   4431 	VFS: Mounted root (ext2 filesystem).
   4432 
   4433 	bash#
   4434 
   4435 Boot Linux and pass a flat device tree:
   4436 -----------
   4437 
   4438 First, U-Boot must be compiled with the appropriate defines. See the section
   4439 titled "Linux Kernel Interface" above for a more in depth explanation. The
   4440 following is an example of how to start a kernel and pass an updated
   4441 flat device tree:
   4442 
   4443 => print oftaddr
   4444 oftaddr=0x300000
   4445 => print oft
   4446 oft=oftrees/mpc8540ads.dtb
   4447 => tftp $oftaddr $oft
   4448 Speed: 1000, full duplex
   4449 Using TSEC0 device
   4450 TFTP from server 192.168.1.1; our IP address is 192.168.1.101
   4451 Filename 'oftrees/mpc8540ads.dtb'.
   4452 Load address: 0x300000
   4453 Loading: #
   4454 done
   4455 Bytes transferred = 4106 (100a hex)
   4456 => tftp $loadaddr $bootfile
   4457 Speed: 1000, full duplex
   4458 Using TSEC0 device
   4459 TFTP from server 192.168.1.1; our IP address is 192.168.1.2
   4460 Filename 'uImage'.
   4461 Load address: 0x200000
   4462 Loading:############
   4463 done
   4464 Bytes transferred = 1029407 (fb51f hex)
   4465 => print loadaddr
   4466 loadaddr=200000
   4467 => print oftaddr
   4468 oftaddr=0x300000
   4469 => bootm $loadaddr - $oftaddr
   4470 ## Booting image at 00200000 ...
   4471    Image Name:	 Linux-2.6.17-dirty
   4472    Image Type:	 PowerPC Linux Kernel Image (gzip compressed)
   4473    Data Size:	 1029343 Bytes = 1005.2 kB
   4474    Load Address: 00000000
   4475    Entry Point:	 00000000
   4476    Verifying Checksum ... OK
   4477    Uncompressing Kernel Image ... OK
   4478 Booting using flat device tree at 0x300000
   4479 Using MPC85xx ADS machine description
   4480 Memory CAM mapping: CAM0=256Mb, CAM1=256Mb, CAM2=0Mb residual: 0Mb
   4481 [snip]
   4482 
   4483 
   4484 More About U-Boot Image Types:
   4485 ------------------------------
   4486 
   4487 U-Boot supports the following image types:
   4488 
   4489    "Standalone Programs" are directly runnable in the environment
   4490 	provided by U-Boot; it is expected that (if they behave
   4491 	well) you can continue to work in U-Boot after return from
   4492 	the Standalone Program.
   4493    "OS Kernel Images" are usually images of some Embedded OS which
   4494 	will take over control completely. Usually these programs
   4495 	will install their own set of exception handlers, device
   4496 	drivers, set up the MMU, etc. - this means, that you cannot
   4497 	expect to re-enter U-Boot except by resetting the CPU.
   4498    "RAMDisk Images" are more or less just data blocks, and their
   4499 	parameters (address, size) are passed to an OS kernel that is
   4500 	being started.
   4501    "Multi-File Images" contain several images, typically an OS
   4502 	(Linux) kernel image and one or more data images like
   4503 	RAMDisks. This construct is useful for instance when you want
   4504 	to boot over the network using BOOTP etc., where the boot
   4505 	server provides just a single image file, but you want to get
   4506 	for instance an OS kernel and a RAMDisk image.
   4507 
   4508 	"Multi-File Images" start with a list of image sizes, each
   4509 	image size (in bytes) specified by an "uint32_t" in network
   4510 	byte order. This list is terminated by an "(uint32_t)0".
   4511 	Immediately after the terminating 0 follow the images, one by
   4512 	one, all aligned on "uint32_t" boundaries (size rounded up to
   4513 	a multiple of 4 bytes).
   4514 
   4515    "Firmware Images" are binary images containing firmware (like
   4516 	U-Boot or FPGA images) which usually will be programmed to
   4517 	flash memory.
   4518 
   4519    "Script files" are command sequences that will be executed by
   4520 	U-Boot's command interpreter; this feature is especially
   4521 	useful when you configure U-Boot to use a real shell (hush)
   4522 	as command interpreter.
   4523 
   4524 Booting the Linux zImage:
   4525 -------------------------
   4526 
   4527 On some platforms, it's possible to boot Linux zImage. This is done
   4528 using the "bootz" command. The syntax of "bootz" command is the same
   4529 as the syntax of "bootm" command.
   4530 
   4531 Note, defining the CONFIG_SUPPORT_RAW_INITRD allows user to supply
   4532 kernel with raw initrd images. The syntax is slightly different, the
   4533 address of the initrd must be augmented by it's size, in the following
   4534 format: "<initrd addres>:<initrd size>".
   4535 
   4536 
   4537 Standalone HOWTO:
   4538 =================
   4539 
   4540 One of the features of U-Boot is that you can dynamically load and
   4541 run "standalone" applications, which can use some resources of
   4542 U-Boot like console I/O functions or interrupt services.
   4543 
   4544 Two simple examples are included with the sources:
   4545 
   4546 "Hello World" Demo:
   4547 -------------------
   4548 
   4549 'examples/hello_world.c' contains a small "Hello World" Demo
   4550 application; it is automatically compiled when you build U-Boot.
   4551 It's configured to run at address 0x00040004, so you can play with it
   4552 like that:
   4553 
   4554 	=> loads
   4555 	## Ready for S-Record download ...
   4556 	~>examples/hello_world.srec
   4557 	1 2 3 4 5 6 7 8 9 10 11 ...
   4558 	[file transfer complete]
   4559 	[connected]
   4560 	## Start Addr = 0x00040004
   4561 
   4562 	=> go 40004 Hello World! This is a test.
   4563 	## Starting application at 0x00040004 ...
   4564 	Hello World
   4565 	argc = 7
   4566 	argv[0] = "40004"
   4567 	argv[1] = "Hello"
   4568 	argv[2] = "World!"
   4569 	argv[3] = "This"
   4570 	argv[4] = "is"
   4571 	argv[5] = "a"
   4572 	argv[6] = "test."
   4573 	argv[7] = "<NULL>"
   4574 	Hit any key to exit ...
   4575 
   4576 	## Application terminated, rc = 0x0
   4577 
   4578 Another example, which demonstrates how to register a CPM interrupt
   4579 handler with the U-Boot code, can be found in 'examples/timer.c'.
   4580 Here, a CPM timer is set up to generate an interrupt every second.
   4581 The interrupt service routine is trivial, just printing a '.'
   4582 character, but this is just a demo program. The application can be
   4583 controlled by the following keys:
   4584 
   4585 	? - print current values og the CPM Timer registers
   4586 	b - enable interrupts and start timer
   4587 	e - stop timer and disable interrupts
   4588 	q - quit application
   4589 
   4590 	=> loads
   4591 	## Ready for S-Record download ...
   4592 	~>examples/timer.srec
   4593 	1 2 3 4 5 6 7 8 9 10 11 ...
   4594 	[file transfer complete]
   4595 	[connected]
   4596 	## Start Addr = 0x00040004
   4597 
   4598 	=> go 40004
   4599 	## Starting application at 0x00040004 ...
   4600 	TIMERS=0xfff00980
   4601 	Using timer 1
   4602 	  tgcr @ 0xfff00980, tmr @ 0xfff00990, trr @ 0xfff00994, tcr @ 0xfff00998, tcn @ 0xfff0099c, ter @ 0xfff009b0
   4603 
   4604 Hit 'b':
   4605 	[q, b, e, ?] Set interval 1000000 us
   4606 	Enabling timer
   4607 Hit '?':
   4608 	[q, b, e, ?] ........
   4609 	tgcr=0x1, tmr=0xff1c, trr=0x3d09, tcr=0x0, tcn=0xef6, ter=0x0
   4610 Hit '?':
   4611 	[q, b, e, ?] .
   4612 	tgcr=0x1, tmr=0xff1c, trr=0x3d09, tcr=0x0, tcn=0x2ad4, ter=0x0
   4613 Hit '?':
   4614 	[q, b, e, ?] .
   4615 	tgcr=0x1, tmr=0xff1c, trr=0x3d09, tcr=0x0, tcn=0x1efc, ter=0x0
   4616 Hit '?':
   4617 	[q, b, e, ?] .
   4618 	tgcr=0x1, tmr=0xff1c, trr=0x3d09, tcr=0x0, tcn=0x169d, ter=0x0
   4619 Hit 'e':
   4620 	[q, b, e, ?] ...Stopping timer
   4621 Hit 'q':
   4622 	[q, b, e, ?] ## Application terminated, rc = 0x0
   4623 
   4624 
   4625 Minicom warning:
   4626 ================
   4627 
   4628 Over time, many people have reported problems when trying to use the
   4629 "minicom" terminal emulation program for serial download. I (wd)
   4630 consider minicom to be broken, and recommend not to use it. Under
   4631 Unix, I recommend to use C-Kermit for general purpose use (and
   4632 especially for kermit binary protocol download ("loadb" command), and
   4633 use "cu" for S-Record download ("loads" command).  See
   4634 http://www.denx.de/wiki/view/DULG/SystemSetup#Section_4.3.
   4635 for help with kermit.
   4636 
   4637 
   4638 Nevertheless, if you absolutely want to use it try adding this
   4639 configuration to your "File transfer protocols" section:
   4640 
   4641 	   Name	   Program			Name U/D FullScr IO-Red. Multi
   4642 	X  kermit  /usr/bin/kermit -i -l %l -s	 Y    U	   Y	   N	  N
   4643 	Y  kermit  /usr/bin/kermit -i -l %l -r	 N    D	   Y	   N	  N
   4644 
   4645 
   4646 NetBSD Notes:
   4647 =============
   4648 
   4649 Starting at version 0.9.2, U-Boot supports NetBSD both as host
   4650 (build U-Boot) and target system (boots NetBSD/mpc8xx).
   4651 
   4652 Building requires a cross environment; it is known to work on
   4653 NetBSD/i386 with the cross-powerpc-netbsd-1.3 package (you will also
   4654 need gmake since the Makefiles are not compatible with BSD make).
   4655 Note that the cross-powerpc package does not install include files;
   4656 attempting to build U-Boot will fail because <machine/ansi.h> is
   4657 missing.  This file has to be installed and patched manually:
   4658 
   4659 	# cd /usr/pkg/cross/powerpc-netbsd/include
   4660 	# mkdir powerpc
   4661 	# ln -s powerpc machine
   4662 	# cp /usr/src/sys/arch/powerpc/include/ansi.h powerpc/ansi.h
   4663 	# ${EDIT} powerpc/ansi.h	## must remove __va_list, _BSD_VA_LIST
   4664 
   4665 Native builds *don't* work due to incompatibilities between native
   4666 and U-Boot include files.
   4667 
   4668 Booting assumes that (the first part of) the image booted is a
   4669 stage-2 loader which in turn loads and then invokes the kernel
   4670 proper. Loader sources will eventually appear in the NetBSD source
   4671 tree (probably in sys/arc/mpc8xx/stand/u-boot_stage2/); in the
   4672 meantime, see ftp://ftp.denx.de/pub/u-boot/ppcboot_stage2.tar.gz
   4673 
   4674 
   4675 Implementation Internals:
   4676 =========================
   4677 
   4678 The following is not intended to be a complete description of every
   4679 implementation detail. However, it should help to understand the
   4680 inner workings of U-Boot and make it easier to port it to custom
   4681 hardware.
   4682 
   4683 
   4684 Initial Stack, Global Data:
   4685 ---------------------------
   4686 
   4687 The implementation of U-Boot is complicated by the fact that U-Boot
   4688 starts running out of ROM (flash memory), usually without access to
   4689 system RAM (because the memory controller is not initialized yet).
   4690 This means that we don't have writable Data or BSS segments, and BSS
   4691 is not initialized as zero. To be able to get a C environment working
   4692 at all, we have to allocate at least a minimal stack. Implementation
   4693 options for this are defined and restricted by the CPU used: Some CPU
   4694 models provide on-chip memory (like the IMMR area on MPC8xx and
   4695 MPC826x processors), on others (parts of) the data cache can be
   4696 locked as (mis-) used as memory, etc.
   4697 
   4698 	Chris Hallinan posted a good summary of these issues to the
   4699 	U-Boot mailing list:
   4700 
   4701 	Subject: RE: [U-Boot-Users] RE: More On Memory Bank x (nothingness)?
   4702 	From: "Chris Hallinan" <clh (a] net1plus.com>
   4703 	Date: Mon, 10 Feb 2003 16:43:46 -0500 (22:43 MET)
   4704 	...
   4705 
   4706 	Correct me if I'm wrong, folks, but the way I understand it
   4707 	is this: Using DCACHE as initial RAM for Stack, etc, does not
   4708 	require any physical RAM backing up the cache. The cleverness
   4709 	is that the cache is being used as a temporary supply of
   4710 	necessary storage before the SDRAM controller is setup. It's
   4711 	beyond the scope of this list to explain the details, but you
   4712 	can see how this works by studying the cache architecture and
   4713 	operation in the architecture and processor-specific manuals.
   4714 
   4715 	OCM is On Chip Memory, which I believe the 405GP has 4K. It
   4716 	is another option for the system designer to use as an
   4717 	initial stack/RAM area prior to SDRAM being available. Either
   4718 	option should work for you. Using CS 4 should be fine if your
   4719 	board designers haven't used it for something that would
   4720 	cause you grief during the initial boot! It is frequently not
   4721 	used.
   4722 
   4723 	CONFIG_SYS_INIT_RAM_ADDR should be somewhere that won't interfere
   4724 	with your processor/board/system design. The default value
   4725 	you will find in any recent u-boot distribution in
   4726 	walnut.h should work for you. I'd set it to a value larger
   4727 	than your SDRAM module. If you have a 64MB SDRAM module, set
   4728 	it above 400_0000. Just make sure your board has no resources
   4729 	that are supposed to respond to that address! That code in
   4730 	start.S has been around a while and should work as is when
   4731 	you get the config right.
   4732 
   4733 	-Chris Hallinan
   4734 	DS4.COM, Inc.
   4735 
   4736 It is essential to remember this, since it has some impact on the C
   4737 code for the initialization procedures:
   4738 
   4739 * Initialized global data (data segment) is read-only. Do not attempt
   4740   to write it.
   4741 
   4742 * Do not use any uninitialized global data (or implicitly initialized
   4743   as zero data - BSS segment) at all - this is undefined, initiali-
   4744   zation is performed later (when relocating to RAM).
   4745 
   4746 * Stack space is very limited. Avoid big data buffers or things like
   4747   that.
   4748 
   4749 Having only the stack as writable memory limits means we cannot use
   4750 normal global data to share information between the code. But it
   4751 turned out that the implementation of U-Boot can be greatly
   4752 simplified by making a global data structure (gd_t) available to all
   4753 functions. We could pass a pointer to this data as argument to _all_
   4754 functions, but this would bloat the code. Instead we use a feature of
   4755 the GCC compiler (Global Register Variables) to share the data: we
   4756 place a pointer (gd) to the global data into a register which we
   4757 reserve for this purpose.
   4758 
   4759 When choosing a register for such a purpose we are restricted by the
   4760 relevant  (E)ABI  specifications for the current architecture, and by
   4761 GCC's implementation.
   4762 
   4763 For PowerPC, the following registers have specific use:
   4764 	R1:	stack pointer
   4765 	R2:	reserved for system use
   4766 	R3-R4:	parameter passing and return values
   4767 	R5-R10: parameter passing
   4768 	R13:	small data area pointer
   4769 	R30:	GOT pointer
   4770 	R31:	frame pointer
   4771 
   4772 	(U-Boot also uses R12 as internal GOT pointer. r12
   4773 	is a volatile register so r12 needs to be reset when
   4774 	going back and forth between asm and C)
   4775 
   4776     ==> U-Boot will use R2 to hold a pointer to the global data
   4777 
   4778     Note: on PPC, we could use a static initializer (since the
   4779     address of the global data structure is known at compile time),
   4780     but it turned out that reserving a register results in somewhat
   4781     smaller code - although the code savings are not that big (on
   4782     average for all boards 752 bytes for the whole U-Boot image,
   4783     624 text + 127 data).
   4784 
   4785 On ARM, the following registers are used:
   4786 
   4787 	R0:	function argument word/integer result
   4788 	R1-R3:	function argument word
   4789 	R9:	platform specific
   4790 	R10:	stack limit (used only if stack checking is enabled)
   4791 	R11:	argument (frame) pointer
   4792 	R12:	temporary workspace
   4793 	R13:	stack pointer
   4794 	R14:	link register
   4795 	R15:	program counter
   4796 
   4797     ==> U-Boot will use R9 to hold a pointer to the global data
   4798 
   4799     Note: on ARM, only R_ARM_RELATIVE relocations are supported.
   4800 
   4801 On Nios II, the ABI is documented here:
   4802 	http://www.altera.com/literature/hb/nios2/n2cpu_nii51016.pdf
   4803 
   4804     ==> U-Boot will use gp to hold a pointer to the global data
   4805 
   4806     Note: on Nios II, we give "-G0" option to gcc and don't use gp
   4807     to access small data sections, so gp is free.
   4808 
   4809 On NDS32, the following registers are used:
   4810 
   4811 	R0-R1:	argument/return
   4812 	R2-R5:	argument
   4813 	R15:	temporary register for assembler
   4814 	R16:	trampoline register
   4815 	R28:	frame pointer (FP)
   4816 	R29:	global pointer (GP)
   4817 	R30:	link register (LP)
   4818 	R31:	stack pointer (SP)
   4819 	PC:	program counter (PC)
   4820 
   4821     ==> U-Boot will use R10 to hold a pointer to the global data
   4822 
   4823 NOTE: DECLARE_GLOBAL_DATA_PTR must be used with file-global scope,
   4824 or current versions of GCC may "optimize" the code too much.
   4825 
   4826 On RISC-V, the following registers are used:
   4827 
   4828 	x0: hard-wired zero (zero)
   4829 	x1: return address (ra)
   4830 	x2:	stack pointer (sp)
   4831 	x3:	global pointer (gp)
   4832 	x4:	thread pointer (tp)
   4833 	x5:	link register (t0)
   4834 	x8:	frame pointer (fp)
   4835 	x10-x11:	arguments/return values (a0-1)
   4836 	x12-x17:	arguments (a2-7)
   4837 	x28-31:	 temporaries (t3-6)
   4838 	pc:	program counter (pc)
   4839 
   4840     ==> U-Boot will use gp to hold a pointer to the global data
   4841 
   4842 Memory Management:
   4843 ------------------
   4844 
   4845 U-Boot runs in system state and uses physical addresses, i.e. the
   4846 MMU is not used either for address mapping nor for memory protection.
   4847 
   4848 The available memory is mapped to fixed addresses using the memory
   4849 controller. In this process, a contiguous block is formed for each
   4850 memory type (Flash, SDRAM, SRAM), even when it consists of several
   4851 physical memory banks.
   4852 
   4853 U-Boot is installed in the first 128 kB of the first Flash bank (on
   4854 TQM8xxL modules this is the range 0x40000000 ... 0x4001FFFF). After
   4855 booting and sizing and initializing DRAM, the code relocates itself
   4856 to the upper end of DRAM. Immediately below the U-Boot code some
   4857 memory is reserved for use by malloc() [see CONFIG_SYS_MALLOC_LEN
   4858 configuration setting]. Below that, a structure with global Board
   4859 Info data is placed, followed by the stack (growing downward).
   4860 
   4861 Additionally, some exception handler code is copied to the low 8 kB
   4862 of DRAM (0x00000000 ... 0x00001FFF).
   4863 
   4864 So a typical memory configuration with 16 MB of DRAM could look like
   4865 this:
   4866 
   4867 	0x0000 0000	Exception Vector code
   4868 	      :
   4869 	0x0000 1FFF
   4870 	0x0000 2000	Free for Application Use
   4871 	      :
   4872 	      :
   4873 
   4874 	      :
   4875 	      :
   4876 	0x00FB FF20	Monitor Stack (Growing downward)
   4877 	0x00FB FFAC	Board Info Data and permanent copy of global data
   4878 	0x00FC 0000	Malloc Arena
   4879 	      :
   4880 	0x00FD FFFF
   4881 	0x00FE 0000	RAM Copy of Monitor Code
   4882 	...		eventually: LCD or video framebuffer
   4883 	...		eventually: pRAM (Protected RAM - unchanged by reset)
   4884 	0x00FF FFFF	[End of RAM]
   4885 
   4886 
   4887 System Initialization:
   4888 ----------------------
   4889 
   4890 In the reset configuration, U-Boot starts at the reset entry point
   4891 (on most PowerPC systems at address 0x00000100). Because of the reset
   4892 configuration for CS0# this is a mirror of the on board Flash memory.
   4893 To be able to re-map memory U-Boot then jumps to its link address.
   4894 To be able to implement the initialization code in C, a (small!)
   4895 initial stack is set up in the internal Dual Ported RAM (in case CPUs
   4896 which provide such a feature like), or in a locked part of the data
   4897 cache. After that, U-Boot initializes the CPU core, the caches and
   4898 the SIU.
   4899 
   4900 Next, all (potentially) available memory banks are mapped using a
   4901 preliminary mapping. For example, we put them on 512 MB boundaries
   4902 (multiples of 0x20000000: SDRAM on 0x00000000 and 0x20000000, Flash
   4903 on 0x40000000 and 0x60000000, SRAM on 0x80000000). Then UPM A is
   4904 programmed for SDRAM access. Using the temporary configuration, a
   4905 simple memory test is run that determines the size of the SDRAM
   4906 banks.
   4907 
   4908 When there is more than one SDRAM bank, and the banks are of
   4909 different size, the largest is mapped first. For equal size, the first
   4910 bank (CS2#) is mapped first. The first mapping is always for address
   4911 0x00000000, with any additional banks following immediately to create
   4912 contiguous memory starting from 0.
   4913 
   4914 Then, the monitor installs itself at the upper end of the SDRAM area
   4915 and allocates memory for use by malloc() and for the global Board
   4916 Info data; also, the exception vector code is copied to the low RAM
   4917 pages, and the final stack is set up.
   4918 
   4919 Only after this relocation will you have a "normal" C environment;
   4920 until that you are restricted in several ways, mostly because you are
   4921 running from ROM, and because the code will have to be relocated to a
   4922 new address in RAM.
   4923 
   4924 
   4925 U-Boot Porting Guide:
   4926 ----------------------
   4927 
   4928 [Based on messages by Jerry Van Baren in the U-Boot-Users mailing
   4929 list, October 2002]
   4930 
   4931 
   4932 int main(int argc, char *argv[])
   4933 {
   4934 	sighandler_t no_more_time;
   4935 
   4936 	signal(SIGALRM, no_more_time);
   4937 	alarm(PROJECT_DEADLINE - toSec (3 * WEEK));
   4938 
   4939 	if (available_money > available_manpower) {
   4940 		Pay consultant to port U-Boot;
   4941 		return 0;
   4942 	}
   4943 
   4944 	Download latest U-Boot source;
   4945 
   4946 	Subscribe to u-boot mailing list;
   4947 
   4948 	if (clueless)
   4949 		email("Hi, I am new to U-Boot, how do I get started?");
   4950 
   4951 	while (learning) {
   4952 		Read the README file in the top level directory;
   4953 		Read http://www.denx.de/twiki/bin/view/DULG/Manual;
   4954 		Read applicable doc/*.README;
   4955 		Read the source, Luke;
   4956 		/* find . -name "*.[chS]" | xargs grep -i <keyword> */
   4957 	}
   4958 
   4959 	if (available_money > toLocalCurrency ($2500))
   4960 		Buy a BDI3000;
   4961 	else
   4962 		Add a lot of aggravation and time;
   4963 
   4964 	if (a similar board exists) {	/* hopefully... */
   4965 		cp -a board/<similar> board/<myboard>
   4966 		cp include/configs/<similar>.h include/configs/<myboard>.h
   4967 	} else {
   4968 		Create your own board support subdirectory;
   4969 		Create your own board include/configs/<myboard>.h file;
   4970 	}
   4971 	Edit new board/<myboard> files
   4972 	Edit new include/configs/<myboard>.h
   4973 
   4974 	while (!accepted) {
   4975 		while (!running) {
   4976 			do {
   4977 				Add / modify source code;
   4978 			} until (compiles);
   4979 			Debug;
   4980 			if (clueless)
   4981 				email("Hi, I am having problems...");
   4982 		}
   4983 		Send patch file to the U-Boot email list;
   4984 		if (reasonable critiques)
   4985 			Incorporate improvements from email list code review;
   4986 		else
   4987 			Defend code as written;
   4988 	}
   4989 
   4990 	return 0;
   4991 }
   4992 
   4993 void no_more_time (int sig)
   4994 {
   4995       hire_a_guru();
   4996 }
   4997 
   4998 
   4999 Coding Standards:
   5000 -----------------
   5001 
   5002 All contributions to U-Boot should conform to the Linux kernel
   5003 coding style; see the kernel coding style guide at
   5004 https://www.kernel.org/doc/html/latest/process/coding-style.html, and the
   5005 script "scripts/Lindent" in your Linux kernel source directory.
   5006 
   5007 Source files originating from a different project (for example the
   5008 MTD subsystem) are generally exempt from these guidelines and are not
   5009 reformatted to ease subsequent migration to newer versions of those
   5010 sources.
   5011 
   5012 Please note that U-Boot is implemented in C (and to some small parts in
   5013 Assembler); no C++ is used, so please do not use C++ style comments (//)
   5014 in your code.
   5015 
   5016 Please also stick to the following formatting rules:
   5017 - remove any trailing white space
   5018 - use TAB characters for indentation and vertical alignment, not spaces
   5019 - make sure NOT to use DOS '\r\n' line feeds
   5020 - do not add more than 2 consecutive empty lines to source files
   5021 - do not add trailing empty lines to source files
   5022 
   5023 Submissions which do not conform to the standards may be returned
   5024 with a request to reformat the changes.
   5025 
   5026 
   5027 Submitting Patches:
   5028 -------------------
   5029 
   5030 Since the number of patches for U-Boot is growing, we need to
   5031 establish some rules. Submissions which do not conform to these rules
   5032 may be rejected, even when they contain important and valuable stuff.
   5033 
   5034 Please see http://www.denx.de/wiki/U-Boot/Patches for details.
   5035 
   5036 Patches shall be sent to the u-boot mailing list <u-boot (a] lists.denx.de>;
   5037 see https://lists.denx.de/listinfo/u-boot
   5038 
   5039 When you send a patch, please include the following information with
   5040 it:
   5041 
   5042 * For bug fixes: a description of the bug and how your patch fixes
   5043   this bug. Please try to include a way of demonstrating that the
   5044   patch actually fixes something.
   5045 
   5046 * For new features: a description of the feature and your
   5047   implementation.
   5048 
   5049 * A CHANGELOG entry as plaintext (separate from the patch)
   5050 
   5051 * For major contributions, add a MAINTAINERS file with your
   5052   information and associated file and directory references.
   5053 
   5054 * When you add support for a new board, don't forget to add a
   5055   maintainer e-mail address to the boards.cfg file, too.
   5056 
   5057 * If your patch adds new configuration options, don't forget to
   5058   document these in the README file.
   5059 
   5060 * The patch itself. If you are using git (which is *strongly*
   5061   recommended) you can easily generate the patch using the
   5062   "git format-patch". If you then use "git send-email" to send it to
   5063   the U-Boot mailing list, you will avoid most of the common problems
   5064   with some other mail clients.
   5065 
   5066   If you cannot use git, use "diff -purN OLD NEW". If your version of
   5067   diff does not support these options, then get the latest version of
   5068   GNU diff.
   5069 
   5070   The current directory when running this command shall be the parent
   5071   directory of the U-Boot source tree (i. e. please make sure that
   5072   your patch includes sufficient directory information for the
   5073   affected files).
   5074 
   5075   We prefer patches as plain text. MIME attachments are discouraged,
   5076   and compressed attachments must not be used.
   5077 
   5078 * If one logical set of modifications affects or creates several
   5079   files, all these changes shall be submitted in a SINGLE patch file.
   5080 
   5081 * Changesets that contain different, unrelated modifications shall be
   5082   submitted as SEPARATE patches, one patch per changeset.
   5083 
   5084 
   5085 Notes:
   5086 
   5087 * Before sending the patch, run the buildman script on your patched
   5088   source tree and make sure that no errors or warnings are reported
   5089   for any of the boards.
   5090 
   5091 * Keep your modifications to the necessary minimum: A patch
   5092   containing several unrelated changes or arbitrary reformats will be
   5093   returned with a request to re-formatting / split it.
   5094 
   5095 * If you modify existing code, make sure that your new code does not
   5096   add to the memory footprint of the code ;-) Small is beautiful!
   5097   When adding new features, these should compile conditionally only
   5098   (using #ifdef), and the resulting code with the new feature
   5099   disabled must not need more memory than the old code without your
   5100   modification.
   5101 
   5102 * Remember that there is a size limit of 100 kB per message on the
   5103   u-boot mailing list. Bigger patches will be moderated. If they are
   5104   reasonable and not too big, they will be acknowledged. But patches
   5105   bigger than the size limit should be avoided.
   5106