Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

"Das U-Boot" Source Tree

NotificationsYou must be signed in to change notification settings

u-boot/u-boot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

# SPDX-License-Identifier: GPL-2.0+## (C) Copyright 2000 - 2013# Wolfgang Denk, DENX Software Engineering, wd@denx.de.Summary:========This directory contains the source code for U-Boot, a boot loader forEmbedded boards based on PowerPC, ARM, MIPS and several otherprocessors, which can be installed in a boot ROM and used toinitialize and test the hardware or to download and run applicationcode.The development of U-Boot is closely related to Linux: some parts ofthe source code originate in the Linux source tree, we have someheader files in common, and special provision has been made tosupport booting of Linux images.Some attention has been paid to make this software easilyconfigurable and extendable. For instance, all monitor commands areimplemented with the same call interface, so that it's very easy toadd new commands. Also, instead of permanently adding rarely usedcode (for instance hardware test utilities) to the monitor, you canload and run it dynamically.Status:=======In general, all boards for which a default configuration file exists in theconfigs/ directory have been tested to some extent and can be considered"working". In fact, many of them are used in production systems.In case of problems you can use     scripts/get_maintainer.pl <path>to identify the people or companies responsible for various boards andsubsystems. Or have a look at the git log.Where to get help:==================In case you have questions about, problems with or contributions forU-Boot, you should send a message to the U-Boot mailing list at<u-boot@lists.denx.de>. There is also an archive of previous trafficon the mailing list - please search the archive before asking FAQ's.Please seehttps://lists.denx.de/pipermail/u-boot andhttps://marc.info/?l=u-bootWhere to get source code:=========================The U-Boot source code is maintained in the Git repository athttps://source.denx.de/u-boot/u-boot.git ; you can browse it online athttps://source.denx.de/u-boot/u-bootThe "Tags" links on this page allow you to download tarballs ofany version you might be interested in. Official releases are alsoavailable from the DENX file server through HTTPS or FTP.https://ftp.denx.de/pub/u-boot/ftp://ftp.denx.de/pub/u-boot/Where we come from:===================- start from 8xxrom sources- create PPCBoot project (https://sourceforge.net/projects/ppcboot)- clean up code- make it easier to add custom boards- make it possible to add other [PowerPC] CPUs- extend functions, especially:  * Provide extended interface to Linux boot loader  * S-Record download  * network boot  * ATA disk / SCSI ... boot- create ARMBoot project (https://sourceforge.net/projects/armboot)- add other CPU families (starting with ARM)- create U-Boot project (https://sourceforge.net/projects/u-boot)- current project page: seehttps://www.denx.de/wiki/U-BootNames and Spelling:===================The "official" name of this project is "Das U-Boot". The spelling"U-Boot" shall be used in all written text (documentation, commentsin source files etc.). Example:This is the README file for the U-Boot project.File names etc. shall be based on the string "u-boot". Examples:include/asm-ppc/u-boot.h#include <asm/u-boot.h>Variable names, preprocessor constants etc. shall be either based onthe string "u_boot" or on "U_BOOT". Example:U_BOOT_VERSIONu_boot_logoIH_OS_U_BOOTu_boot_hush_startSoftware Configuration:=======================Selection of Processor Architecture and Board Type:---------------------------------------------------For all supported boards there are ready-to-use defaultconfigurations available; just type "make <board_name>_defconfig".Example: For a TQM823L module type:cd u-bootmake TQM823L_defconfigNote: If you're looking for the default configuration file for a boardyou're sure used to be there but is now missing, check the filedoc/README.scrapyard for a list of no longer supported boards.Sandbox Environment:--------------------U-Boot can be built natively to run on a Linux host using the 'sandbox'board. This allows feature development which is not board- or architecture-specific to be undertaken on a native platform. The sandbox is also used torun some of U-Boot's tests.See doc/arch/sandbox/sandbox.rst for more details.The following options need to be configured:- CPU Type:Define exactly one, e.g. CONFIG_MPC85XX.- Board Type:Define exactly one, e.g. CONFIG_MPC8540ADS.- 85xx CPU Options:CONFIG_SYS_PPC64Specifies that the core is a 64-bit PowerPC implementation (implementsthe "64" category of the Power ISA). This is necessary for ePAPRcompliance, among other possible reasons.CONFIG_SYS_FSL_ERRATUM_A004510Enables a workaround for erratum A004510.  If set,then CONFIG_SYS_FSL_ERRATUM_A004510_SVR_REV andCFG_SYS_FSL_CORENET_SNOOPVEC_COREONLY must be set.CONFIG_SYS_FSL_ERRATUM_A004510_SVR_REVCONFIG_SYS_FSL_ERRATUM_A004510_SVR_REV2 (optional)Defines one or two SoC revisions (low 8 bits of SVR)for which the A004510 workaround should be applied.The rest of SVR is either not relevant to the decisionof whether the erratum is present (e.g. p2040 versusp2041) or is implied by the build target, which controlswhether CONFIG_SYS_FSL_ERRATUM_A004510 is set.See Freescale App Note 4493 for more information aboutthis erratum.CFG_SYS_FSL_CORENET_SNOOPVEC_COREONLYThis is the value to write into CCSR offset 0x18600according to the A004510 workaround.CONFIG_SYS_FSL_SINGLE_SOURCE_CLKSingle Source Clock is clocking mode present in some of FSL SoC's.In this mode, a single differential clock is used to supplyclocks to the sysclock, ddrclock and usbclock.- Generic CPU options:CONFIG_SYS_FSL_DDRFreescale DDR driver in use. This type of DDR controller isfound in mpc83xx, mpc85xx as well as some ARM core SoCs.CFG_SYS_FSL_DDR_ADDRFreescale DDR memory-mapped register base.CONFIG_SYS_FSL_IFC_CLK_DIVDefines divider of platform clock(clock input to IFC controller).CONFIG_SYS_FSL_LBC_CLK_DIVDefines divider of platform clock(clock input to eLBC controller).CFG_SYS_FSL_DDR_SDRAM_BASE_PHYPhysical address from the view of DDR controllers. It is thesame as CFG_SYS_DDR_SDRAM_BASE for  all Power SoCs. Butit could be different for ARM SoCs.- ARM options:CFG_SYS_EXCEPTION_VECTORS_HIGHSelect high exception vectors of the ARM core, e.g., do notclear the V bit of the c1 register of CP15.COUNTER_FREQUENCYGeneric timer clock source frequency.COUNTER_FREQUENCY_REALGeneric timer clock source frequency if the real clock isdifferent from COUNTER_FREQUENCY, and can only be determinedat run time.- Linux Kernel Interface:CONFIG_OF_LIBFDTNew kernel versions are expecting firmware settings to bepassed using flattened device trees (based on open firmwareconcepts).CONFIG_OF_LIBFDT * New libfdt-based support * Adds the "fdt" command * The bootm command automatically updates the fdtOF_TBCLK - The timebase frequency.boards with QUICC Engines require OF_QE to set UCC MACaddressesCONFIG_OF_IDE_FIXUPU-Boot can detect if an IDE device is present or not.If not, and this new config option is activated, U-Bootremoves the ATA node from the DTS before booting Linux,so the Linux IDE driver does not probe the device andcrash. This is needed for buggy hardware (uc101) whereno pull down resistor is connected to the signal IDE5V_DD7.- vxWorks boot parameters:bootvx constructs a valid bootline using the followingenvironments variables: bootdev, bootfile, ipaddr, netmask,serverip, gatewayip, hostname, othbootargs.It loads the vxWorks image pointed bootfile.Note: If a "bootargs" environment is defined, it will overridethe defaults discussed just above.- Cache Configuration for ARM:CFG_SYS_PL310_BASE - Physical base address of PL310controller register space- Serial Ports:CFG_PL011_CLOCKIf you have Amba PrimeCell PL011 UARTs, set this variable tothe clock speed of the UARTs.CFG_PL01x_PORTSIf you have Amba PrimeCell PL010 or PL011 UARTs on your board,define this to a list of base addresses for each (supported)port. See e.g. include/configs/versatile.hCONFIG_SERIAL_HW_FLOW_CONTROLDefine this variable to enable hw flow control in serial driver.Current user of this option is drivers/serial/nsl16550.c driver- Removal of commandsIf no commands are needed to boot, you can disableCONFIG_CMDLINE to remove them. In this case, the command linewill not be available, and when U-Boot wants to execute theboot command (on start-up) it will call board_run_command()instead. This can reduce image size significantly for verysimple boot procedures.- Regular expression support:CONFIG_REGEXIf this variable is defined, U-Boot is linked againstthe SLRE (Super Light Regular Expression) library,which adds regex support to some commands, as forexample "env grep" and "setexpr".- Watchdog:CFG_SYS_WATCHDOG_FREQSome platforms automatically call WATCHDOG_RESET()from the timer interrupt handler everyCFG_SYS_WATCHDOG_FREQ interrupts. If not set by theboard configuration file, a default of CONFIG_SYS_HZ/2(i.e. 500) is used. Setting CFG_SYS_WATCHDOG_FREQto 0 disables calling WATCHDOG_RESET() from the timerinterrupt.- GPIO Support:The CFG_SYS_I2C_PCA953X_WIDTH option specifies a list ofchip-ngpio pairs that tell the PCA953X driver the number ofpins supported by a particular chip.Note that if the GPIO device uses I2C, then the I2C interfacemust also be configured. See I2C Support, below.- I/O tracing:When CONFIG_IO_TRACE is selected, U-Boot intercepts all I/Oaccesses and can checksum them or write a list of them outto memory. See the 'iotrace' command for details. This isuseful for testing device drivers since it can confirm thatthe driver behaves the same way before and after a codechange. Currently this is supported on sandbox and arm. Toadd support for your architecture, add '#include <iotrace.h>'to the bottom of arch/<arch>/include/asm/io.h and test.Example output from the 'iotrace stats' command is below.Note that if the trace buffer is exhausted, the checksum willstill continue to operate.iotrace is enabledStart:  10000000(buffer start address)Size:   00010000(buffer size)Offset: 00000120(current buffer offset)Output: 10000120(start + offset)Count:  00000018(number of trace records)CRC32:  9526fb66(CRC32 of all trace records)- Timestamp Support:When CONFIG_TIMESTAMP is selected, the timestamp(date and time) of an image is printed by imagecommands like bootm or iminfo. This option isautomatically enabled when you select CONFIG_CMD_DATE .- Partition Labels (disklabels) Supported:Zero or more of the following:CONFIG_MAC_PARTITION   Apple's MacOS partition table.CONFIG_ISO_PARTITION   ISO partition table, used on CDROM etc.CONFIG_EFI_PARTITION   GPT partition table, common when EFI is the       bootloader.  Note 2TB partition limit; see       disk/part_efi.cCONFIG_SCSI) you must configure support for atleast one non-MTD partition type as well.- NETWORK Support (PCI):CONFIG_E1000_SPIUtility code for direct access to the SPI bus on Intel 8257x.This does not do anything useful unless you set at least oneof CONFIG_CMD_E1000 or CONFIG_E1000_SPI_GENERIC.CONFIG_NATSEMISupport for National dp83815 chips.CONFIG_NS8382XSupport for National dp8382[01] gigabit chips.- NETWORK Support (other):CONFIG_CALXEDA_XGMACSupport for the Calxeda XGMAC deviceCONFIG_LAN91C96Support for SMSC's LAN91C96 chips.CONFIG_LAN91C96_USE_32_BITDefine this to enable 32 bit addressingCFG_SYS_DAVINCI_EMAC_PHY_COUNTDefine this if you have more then 3 PHYs.CONFIG_FTGMAC100Support for Faraday's FTGMAC100 Gigabit SoC EthernetCONFIG_FTGMAC100_EGIGADefine this to use GE link update with gigabit PHY.Define this if FTGMAC100 is connected to gigabit PHY.If your system has 10/100 PHY only, it might not occurwrong behavior. Because PHY usually return timeout oruseless data when polling gigabit status and gigabitcontrol registers. This behavior won't affect thecorrectnessof 10/100 link speed update.CONFIG_SH_ETHERSupport for Renesas on-chip Ethernet controllerCFG_SH_ETHER_USE_PORTDefine the number of ports to be usedCFG_SH_ETHER_PHY_ADDRDefine the ETH PHY's addressCFG_SH_ETHER_CACHE_WRITEBACKIf this option is set, the driver enables cache flush.- TPM Support:CONFIG_TPMSupport TPM devices.CONFIG_TPM_TIS_INFINEONSupport for Infineon i2c bus TPM devices. Only one deviceper system is supported at this time.CONFIG_TPM_TIS_I2C_BURST_LIMITATIONDefine the burst count bytes upper limitCONFIG_TPM_ST33ZP24Support for STMicroelectronics TPM devices. Requires DM_TPM support.CONFIG_TPM_ST33ZP24_I2CSupport for STMicroelectronics ST33ZP24 I2C devices.Requires TPM_ST33ZP24 and I2C.CONFIG_TPM_ST33ZP24_SPISupport for STMicroelectronics ST33ZP24 SPI devices.Requires TPM_ST33ZP24 and SPI.CONFIG_TPM_ATMEL_TWISupport for Atmel TWI TPM device. Requires I2C support.CONFIG_TPM_TIS_LPCSupport for generic parallel port TPM devices. Only one deviceper system is supported at this time.CONFIG_TPMDefine this to enable the TPM support library which providesfunctional interfaces to some TPM commands.Requires support for a TPM device.CONFIG_TPM_AUTH_SESSIONSDefine this to enable authorized functions in the TPM library.Requires CONFIG_TPM and CONFIG_SHA1.- USB Support:At the moment only the UHCI host controller issupported (PIP405, MIP405); defineCONFIG_USB_UHCI to enable it.define CONFIG_USB_KEYBOARD to enable the USB Keyboardand define CONFIG_USB_STORAGE to enable the USBstorage devices.Note:Supported are USB Keyboards and USB Floppy drives(TEAC FD-05PUB).CONFIG_USB_DWC2_REG_ADDR the physical CPU address of the DWC2HW module registers.- USB Device:Define the below if you wish to use the USB console.Once firmware is rebuilt from a serial console issue thecommand "setenv stdin usbtty; setenv stdout usbtty" andattach your USB cable. The Unix command "dmesg" should printit has found a new device. The environment variable usbttycan be set to gserial or cdc_acm to enable your device toappear to a USB host as a Linux gserial device or aCommon Device Class Abstract Control Model serial device.If you select usbtty = gserial you should be able to enumeratea Linux host by# modprobe usbserial vendor=0xVendorID product=0xProductIDelse if using cdc_acm, simply setting the environmentvariable usbtty to be cdc_acm should suffice. The followingmight be defined in YourBoardName.hIf you have a USB-IF assigned VendorID then you may wish todefine your own vendor specific values either in BoardName.hor directly in usbd_vendor_info.h. If you don't defineCONFIG_USBD_MANUFACTURER, CONFIG_USBD_PRODUCT_NAME,CONFIG_USBD_VENDORID and CONFIG_USBD_PRODUCTID, then U-Bootshould pretend to be a Linux device to it's target host.CONFIG_USBD_MANUFACTURERDefine this string as the name of your company for- CONFIG_USBD_MANUFACTURER "my company"CONFIG_USBD_PRODUCT_NAMEDefine this string as the name of your product- CONFIG_USBD_PRODUCT_NAME "acme usb device"CONFIG_USBD_VENDORIDDefine this as your assigned Vendor ID from the USBImplementors Forum. This *must* be a genuine Vendor IDto avoid polluting the USB namespace.- CONFIG_USBD_VENDORID 0xFFFFCONFIG_USBD_PRODUCTIDDefine this as the unique Product IDfor your device- CONFIG_USBD_PRODUCTID 0xFFFF- ULPI Layer Support:The ULPI (UTMI Low Pin (count) Interface) PHYs are supported viathe generic ULPI layer. The generic layer accesses the ULPI PHYvia the platform viewport, so you need both the genric layer andthe viewport enabled. Currently only Chipidea/ARC basedviewport is supported.To enable the ULPI layer support, define CONFIG_USB_ULPI andCONFIG_USB_ULPI_VIEWPORT in your board configuration file.If your ULPI phy needs a different reference clock than thestandard 24 MHz then you have to define CFG_ULPI_REF_CLK tothe appropriate value in Hz.- MMC Support:CONFIG_SH_MMCIFSupport for Renesas on-chip MMCIF controllerCONFIG_SH_MMCIF_ADDRDefine the base address of MMCIF registersCONFIG_SH_MMCIF_CLKDefine the clock frequency for MMCIF- USB Device Firmware Update (DFU) class support:CONFIG_DFU_OVER_USBThis enables the USB portion of the DFU USB classCONFIG_DFU_NANDThis enables support for exposing NAND devices via DFU.CONFIG_DFU_RAMThis enables support for exposing RAM via DFU.Note: DFU spec refer to non-volatile memory usage, butallow usages beyond the scope of spec - here RAM usage,one that would help mostly the developer.CONFIG_SYS_DFU_DATA_BUF_SIZEDfu transfer uses a buffer before writing data to theraw storage device. Make the size (in bytes) of this bufferconfigurable. The size of this buffer is also configurablethrough the "dfu_bufsiz" environment variable.CONFIG_SYS_DFU_MAX_FILE_SIZEWhen updating files rather than the raw storage device,we use a static buffer to copy the file into and then writethe buffer once we've been given the whole file.  Definethis to the maximum filesize (in bytes) for the buffer.Default is 4 MiB if undefined.DFU_DEFAULT_POLL_TIMEOUTPoll timeout [ms], is the timeout a device can send to thehost. The host must wait for this timeout before sendinga subsequent DFU_GET_STATUS request to the device.DFU_MANIFEST_POLL_TIMEOUTPoll timeout [ms], which the device sends to the host whenentering dfuMANIFEST state. Host waits this timeout, beforesending again an USB request to the device.- Keyboard Support:See Kconfig help for available keyboard drivers.- MII/PHY support:CONFIG_PHY_CLOCK_FREQ (ppc4xx)The clock frequency of the MII busCONFIG_PHY_CMD_DELAY (ppc4xx)Some PHY like Intel LXT971A need extra delay aftercommand issued before MII status register can be read- BOOTP Recovery Mode:CONFIG_BOOTP_RANDOM_DELAYIf you have many targets in a network that try toboot using BOOTP, you may want to avoid that allsystems send out BOOTP requests at precisely the samemoment (which would happen for instance at recoveryfrom a power failure, when all systems will try toboot, thus flooding the BOOTP server. DefiningCONFIG_BOOTP_RANDOM_DELAY causes a random delay to beinserted before sending out BOOTP requests. Thefollowing delays are inserted then:1st BOOTP request:delay 0 ... 1 sec2nd BOOTP request:delay 0 ... 2 sec3rd BOOTP request:delay 0 ... 4 sec4th and followingBOOTP requests:delay 0 ... 8 secCFG_BOOTP_ID_CACHE_SIZEBOOTP packets are uniquely identified using a 32-bit ID. Theserver will copy the ID from client requests to responses andU-Boot will use this to determine if it is the destination ofan incoming response. Some servers will check that addressesaren't in use before handing them out (usually using an ARPping) and therefore take up to a few hundred milliseconds torespond. Network congestion may also influence the time ittakes for a response to make it back to the client. If thattime is too long, U-Boot will retransmit requests. In orderto allow earlier responses to still be accepted after theseretransmissions, U-Boot's BOOTP client keeps a small cache ofIDs. The CFG_BOOTP_ID_CACHE_SIZE controls the size of thiscache. The default is to keep IDs for up to four outstandingrequests. Increasing this will allow U-Boot to accept offersfrom a BOOTP client in networks with unusually high latency.- DHCP Advanced Options: - Link-local IP address negotiation:Negotiate with other link-local clients on the local networkfor an address that doesn't require explicit configuration.This is especially useful if a DHCP server cannot be guaranteedto exist in all environments that the device must operate.See doc/README.link-local for more information. - MAC address from environment variablesFDT_SEQ_MACADDR_FROM_ENVFix-up device tree with MAC addresses fetched sequentially fromenvironment variables. This config work on assumption thatnon-usable ethernet node of device-tree are either not presentor their status has been marked as "disabled". - CDP Options:CONFIG_CDP_DEVICE_IDThe device id used in CDP trigger frames.CONFIG_CDP_DEVICE_ID_PREFIXA two character string which is prefixed to the MAC addressof the device.CONFIG_CDP_PORT_IDA printf format string which contains the ascii name ofthe port. Normally is set to "eth%d" which setseth0 for the first Ethernet, eth1 for the second etc.CONFIG_CDP_CAPABILITIESA 32bit integer which indicates the device capabilities;0x00000010 for a normal host which does not forwards.CONFIG_CDP_VERSIONAn ascii string containing the version of the software.CONFIG_CDP_PLATFORMAn ascii string containing the name of the platform.CONFIG_CDP_TRIGGERA 32bit integer sent on the trigger.CONFIG_CDP_POWER_CONSUMPTIONA 16bit integer containing the power consumption of thedevice in .1 of milliwatts.CONFIG_CDP_APPLIANCE_VLAN_TYPEA byte containing the id of the VLAN.- Status LED:CONFIG_LED_STATUSSeveral configurations allow to display the currentstatus using a LED. For instance, the LED will blinkfast while running U-Boot code, stop blinking assoon as a reply to a BOOTP request was received, andstart blinking slow once the Linux kernel is running(supported by a status LED driver in the Linuxkernel). Defining CONFIG_LED_STATUS enables thisfeature in U-Boot.Additional options:CONFIG_LED_STATUS_GPIOThe status LED can be connected to a GPIO pin.In such cases, the gpio_led driver can be used as astatus LED backend implementation. Define CONFIG_LED_STATUS_GPIOto include the gpio_led driver in the U-Boot binary.CFG_GPIO_LED_INVERTED_TABLESome GPIO connected LEDs may have inverted polarity in whichcase the GPIO high value corresponds to LED off state andGPIO low value corresponds to LED on state.In such cases CFG_GPIO_LED_INVERTED_TABLE may be definedwith a list of GPIO LEDs that have inverted polarity.- I2C Support:CFG_SYS_NUM_I2C_BUSESHold the number of i2c buses you want to use.CFG_SYS_I2C_BUSEShold a list of buses you want to use CFG_SYS_I2C_BUSES{{0, {I2C_NULL_HOP}}, \{0, {{I2C_MUX_PCA9547, 0x70, 1}}}, \{0, {{I2C_MUX_PCA9547, 0x70, 2}}}, \{0, {{I2C_MUX_PCA9547, 0x70, 3}}}, \{0, {{I2C_MUX_PCA9547, 0x70, 4}}}, \{0, {{I2C_MUX_PCA9547, 0x70, 5}}}, \{1, {I2C_NULL_HOP}}, \{1, {{I2C_MUX_PCA9544, 0x72, 1}}}, \{1, {{I2C_MUX_PCA9544, 0x72, 2}}}, \}which definesbus 0 on adapter 0 without a muxbus 1 on adapter 0 with a PCA9547 on address 0x70 port 1bus 2 on adapter 0 with a PCA9547 on address 0x70 port 2bus 3 on adapter 0 with a PCA9547 on address 0x70 port 3bus 4 on adapter 0 with a PCA9547 on address 0x70 port 4bus 5 on adapter 0 with a PCA9547 on address 0x70 port 5bus 6 on adapter 1 without a muxbus 7 on adapter 1 with a PCA9544 on address 0x72 port 1bus 8 on adapter 1 with a PCA9544 on address 0x72 port 2If you do not have i2c muxes on your board, omit this define.- Legacy I2C Support:If you use the software i2c interface (CONFIG_SYS_I2C_SOFT)then the following macros need to be defined (examples arefrom include/configs/lwmon.h):I2C_INIT(Optional). Any commands necessary to enable the I2Ccontroller or configure ports.eg: #define I2C_INIT (immr->im_cpm.cp_pbdir |=PB_SCL)I2C_ACTIVEThe code necessary to make the I2C data line active(driven).  If the data line is open collector, thisdefine can be null.eg: #define I2C_ACTIVE (immr->im_cpm.cp_pbdir |=  PB_SDA)I2C_TRISTATEThe code necessary to make the I2C data line tri-stated(inactive).  If the data line is open collector, thisdefine can be null.eg: #define I2C_TRISTATE (immr->im_cpm.cp_pbdir &= ~PB_SDA)I2C_READCode that returns true if the I2C data line is high,false if it is low.eg: #define I2C_READ ((immr->im_cpm.cp_pbdat & PB_SDA) != 0)I2C_SDA(bit)If <bit> is true, sets the I2C data line high. If itis false, it clears it (low).eg: #define I2C_SDA(bit) \if(bit) immr->im_cpm.cp_pbdat |=  PB_SDA; \elseimmr->im_cpm.cp_pbdat &= ~PB_SDAI2C_SCL(bit)If <bit> is true, sets the I2C clock line high. If itis false, it clears it (low).eg: #define I2C_SCL(bit) \if(bit) immr->im_cpm.cp_pbdat |=  PB_SCL; \elseimmr->im_cpm.cp_pbdat &= ~PB_SCLI2C_DELAYThis delay is invoked four times per clock cycle so thiscontrols the rate of data transfer.  The data rate thusis 1 / (I2C_DELAY * 4). Often defined to be somethinglike:#define I2C_DELAY  udelay(2)CONFIG_SOFT_I2C_GPIO_SCL / CONFIG_SOFT_I2C_GPIO_SDAIf your arch supports the generic GPIO framework (asm/gpio.h),then you may alternatively define the two GPIOs that are to beused as SCL / SDA.  Any of the previous I2C_xxx macros willhave GPIO-based defaults assigned to them as appropriate.You should define these to the GPIO value as given directly tothe generic GPIO functions.CFG_SYS_I2C_NOPROBESThis option specifies a list of I2C devices that will be skippedwhen the 'i2c probe' command is issued.e.g.#define CFG_SYS_I2C_NOPROBES {0x50,0x68}will skip addresses 0x50 and 0x68 on a board with one I2C busCONFIG_SOFT_I2C_READ_REPEATED_STARTdefining this will force the i2c_read() function inthe soft_i2c driver to perform an I2C repeated startbetween writing the address pointer and reading thedata.  If this define is omitted the default behaviourof doing a stop-start sequence will be used.  Most I2Cdevices can use either method, but some require one orthe other.- SPI Support:CONFIG_SPIEnables SPI driver (so far only tested withSPI EEPROM, also an instance works with Crystal A/D andD/As on the SACSng board)CFG_SYS_SPI_MXC_WAITTimeout for waiting until spi transfer completed.default: (CONFIG_SYS_HZ/100)     /* 10 ms */- FPGA Support: CONFIG_FPGAEnables FPGA subsystem.CONFIG_FPGA_<vendor>Enables support for specific chip vendors.(ALTERA, XILINX)CONFIG_FPGA_<family>Enables support for FPGA family.(SPARTAN2, SPARTAN3, VIRTEX2, CYCLONE2, ACEX1K, ACEX)CONFIG_SYS_FPGA_CHECK_BUSYEnable checks on FPGA configuration interface busystatus by the configuration function. This optionwill require a board or device specific function tobe written.CFG_FPGA_DELAYIf defined, a function that provides delays in the FPGAconfiguration driver.CFG_SYS_FPGA_CHECK_ERRORCheck for configuration errors during FPGA bitfileloading. For example, abort during Virtex IIconfiguration if the INIT_B line goes low (whichindicated a CRC error).CFG_SYS_FPGA_WAIT_INITMaximum time to wait for the INIT_B line to de-assertafter PROB_B has been de-asserted during a Virtex IIFPGA configuration sequence. The default time is 500ms.CFG_SYS_FPGA_WAIT_BUSYMaximum time to wait for BUSY to de-assert duringVirtex II FPGA configuration. The default is 5 ms.CFG_SYS_FPGA_WAIT_CONFIGTime to wait after FPGA configuration. The default is200 ms.- Vendor Parameter Protection:U-Boot considers the values of the environmentvariables "serial#" (Board Serial Number) and"ethaddr" (Ethernet Address) to be parameters thatare set once by the board vendor / manufacturer, andprotects these variables from casual modification bythe user. Once set, these variables are read-only,and write or delete attempts are rejected. You canchange this behaviour:If CONFIG_ENV_OVERWRITE is #defined in your configfile, the write protection for vendor parameters iscompletely disabled. Anybody can change or deletethese parameters.The same can be accomplished in a more flexible wayfor any variable by configuring the type of accessto allow for those variables in the ".flags" variableor define CFG_ENV_FLAGS_LIST_STATIC.- Protected RAM:CFG_PRAMDefine this variable to enable the reservation of"protected RAM", i. e. RAM which is not overwrittenby U-Boot. Define CFG_PRAM to hold the number ofkB you want to reserve for pRAM. You can overwritethis default value by defining an environmentvariable "pram" to the number of kB you want toreserve. Note that the board info structure willstill show the full amount of RAM. If pRAM isreserved, a new environment variable "mem" willautomatically be defined to hold the amount ofremaining RAM in a form that can be passed as bootargument to Linux, for instance like that:setenv bootargs ... mem=\${mem}saveenvThis way you can tell Linux not to use this memory,either, which results in a memory region that willnot be affected by reboots.*WARNING* If your board configuration uses automaticdetection of the RAM size, you must make sure thatthis memory test is non-destructive. So far, thefollowing board configurations are known to be"pRAM-clean":IVMS8, IVML24, SPD8xx,HERMES, IP860, RPXlite, LWMON,FLAGADM- Error Recovery:Note:In the current implementation, the local variablesspace and global environment variables space areseparated. Local variables are those you define bysimply typing `name=value'. To access a localvariable later on, you have write `$name' or`${name}'; to execute the contents of a variabledirectly type `$name' at the command prompt.Global environment variables are those you usesetenv/printenv to work with. To run a command storedin such a variable, you need to use the run command,and you must not use the '$' sign to access them.To store commands and special characters in avariable, please use double quotation markssurrounding the whole text of the variable, insteadof the backslashes before semicolons and specialsymbols.- Default Environment:CFG_EXTRA_ENV_SETTINGSDefine this to contain any number of null terminatedstrings (variable = value pairs) that will be part ofthe default environment compiled into the boot image.For example, place something like this in yourboard's config file:#define CFG_EXTRA_ENV_SETTINGS \"myvar1=value1\0" \"myvar2=value2\0"Warning: This method is based on knowledge about theinternal format how the environment is stored by theU-Boot code. This is NOT an official, exportedinterface! Although it is unlikely that this formatwill change soon, there is no guarantee either.You better know what you are doing here.Note: overly (ab)use of the default environment isdiscouraged. Make sure to check other ways to presetthe environment like the "source" command or theboot command first.CONFIG_DELAY_ENVIRONMENTNormally the environment is loaded when the board isinitialised so that it is available to U-Boot. This inhibitsthat so that the environment is not available untilexplicitly loaded later by U-Boot code. With CONFIG_OF_CONTROLthis is instead controlled by the value of/config/load-environment.- Automatic software updates via TFTP serverCONFIG_UPDATE_TFTPCONFIG_UPDATE_TFTP_CNT_MAXCONFIG_UPDATE_TFTP_MSEC_MAXThese options enable and control the auto-update feature;for a more detailed description refer to doc/README.update.- MTD Support (mtdparts command, UBI support)CONFIG_MTD_UBI_WL_THRESHOLDThis parameter defines the maximum difference between the highesterase counter value and the lowest erase counter value of eraseblocksof UBI devices. When this threshold is exceeded, UBI starts performingwear leveling by means of moving data from eraseblock with low erasecounter to eraseblocks with high erase counter.The default value should be OK for SLC NAND flashes, NOR flashes andother flashes which have eraseblock life-cycle 100000 or more.However, in case of MLC NAND flashes which typically have eraseblocklife-cycle less than 10000, the threshold should be lessened (e.g.,to 128 or 256, although it does not have to be power of 2).default: 4096CONFIG_MTD_UBI_BEB_LIMITThis option specifies the maximum bad physical eraseblocks UBIexpects on the MTD device (per 1024 eraseblocks). If theunderlying flash does not admit of bad eraseblocks (e.g. NORflash), this value is ignored.NAND datasheets often specify the minimum and maximum NVM(Number of Valid Blocks) for the flashes' endurance lifetime.The maximum expected bad eraseblocks per 1024 eraseblocksthen can be calculated as "1024 * (1 - MinNVB / MaxNVB)",which gives 20 for most NANDs (MaxNVB is basically the totalcount of eraseblocks on the chip).To put it differently, if this value is 20, UBI will try toreserve about 1.9% of physical eraseblocks for bad blockshandling. And that will be 1.9% of eraseblocks on the entireNAND chip, not just the MTD partition UBI attaches. This meansthat if you have, say, a NAND flash chip admits maximum 40 baderaseblocks, and it is split on two MTD partitions of the samesize, UBI will reserve 40 eraseblocks when attaching apartition.default: 20CONFIG_MTD_UBI_FASTMAPFastmap is a mechanism which allows attaching an UBI devicein nearly constant time. Instead of scanning the whole MTD device itonly has to locate a checkpoint (called fastmap) on the device.The on-flash fastmap contains all information needed to attachthe device. Using fastmap makes only sense on large devices whereattaching by scanning takes long. UBI will not automatically installa fastmap on old images, but you can set the UBI parameterCONFIG_MTD_UBI_FASTMAP_AUTOCONVERT to 1 if you want so. Please notethat fastmap-enabled images are still usable with UBI implementationswithoutfastmap support. On typical flash devices the whole fastmapfits into one PEB. UBI will reserve PEBs to hold two fastmaps.CONFIG_MTD_UBI_FASTMAP_AUTOCONVERTSet this parameter to enable fastmap automatically on imageswithout a fastmap.default: 0CONFIG_MTD_UBI_FM_DEBUGEnable UBI fastmap debugdefault: 0- SPL frameworkCONFIG_SPLEnable building of SPL globally.CONFIG_SPL_PANIC_ON_RAW_IMAGEWhen defined, SPL will panic() if the image it hasloaded does not have a signature.Defining this is useful when code which loads imagesin SPL cannot guarantee that absolutely all read errorswill be caught.An example is the LPC32XX MLC NAND driver, which willconsider that a completely unreadable NAND block is bad,and thus should be skipped silently.CONFIG_SPL_DISPLAY_PRINTFor ARM, enable an optional function to print more informationabout the running system.CONFIG_SPL_MPC83XX_WAIT_FOR_NANDSet this for NAND SPL on PPC mpc83xx targets, so thatstart.S waits for the rest of the SPL to load beforecontinuing (the hardware starts execution after justloading the first page rather than the full 4K).CONFIG_SPL_UBISupport for a lightweight UBI (fastmap) scanner andloaderCONFIG_SYS_NAND_5_ADDR_CYCLE, CONFIG_SYS_NAND_PAGE_SIZE,CONFIG_SYS_NAND_OOBSIZE, CONFIG_SYS_NAND_BLOCK_SIZE,CONFIG_SYS_NAND_BAD_BLOCK_POS, CFG_SYS_NAND_ECCPOS,CFG_SYS_NAND_ECCSIZE, CFG_SYS_NAND_ECCBYTESDefines the size and behavior of the NAND that SPL usesto read U-BootCFG_SYS_NAND_U_BOOT_DSTLocation in memory to load U-Boot toCFG_SYS_NAND_U_BOOT_SIZESize of image to loadCFG_SYS_NAND_U_BOOT_STARTEntry point in loaded image to jump toCONFIG_SPL_RAM_DEVICESupport for running image already present in ram, in SPL binaryCONFIG_SPL_FIT_PRINTPrinting information about a FIT image adds quite a bit ofcode to SPL. So this is normally disabled in SPL. Use thisoption to re-enable it. This will affect the output of thebootm command when booting a FIT image.- Interrupt support (PPC):There are common interrupt_init() and timer_interrupt()for all PPC archs. interrupt_init() calls interrupt_init_cpu()for CPU specific initialization. interrupt_init_cpu()should set decrementer_count to appropriate value. IfCPU resets decrementer automatically after interrupt(ppc4xx) it should set decrementer_count to zero.timer_interrupt() calls timer_interrupt_cpu() for CPUspecific handling. If board has watchdog / status_led/ other_activity_monitor it works automatically fromgeneral timer_interrupt().Board initialization settings:------------------------------During Initialization u-boot calls a number of board specific functionsto allow the preparation of board specific prerequisites, e.g. pin setupbefore drivers are initialized. To enable these callbacks thefollowing configuration macros have to be defined. Currently this isarchitecture specific, so please check arch/your_architecture/lib/board.ctypically in board_init_f() and board_init_r().- CONFIG_BOARD_EARLY_INIT_F: Call board_early_init_f()- CONFIG_BOARD_EARLY_INIT_R: Call board_early_init_r()- CONFIG_BOARD_LATE_INIT: Call board_late_init()Configuration Settings:------------------------ CONFIG_SYS_LONGHELP: Defined when you want long help messages included;undefine this when you're short of memory.- CFG_SYS_HELP_CMD_WIDTH: Defined when you want to override the defaultwidth of the commands listed in the 'help' command output.- CONFIG_SYS_PROMPT:This is what U-Boot prints on the console toprompt for user input.- CFG_SYS_BAUDRATE_TABLE:List of legal baudrate settings for this board.- CFG_SYS_MEM_RESERVE_SECUREOnly implemented for ARMv8 for now.If defined, the size of CFG_SYS_MEM_RESERVE_SECURE memoryis substracted from total RAM and won't be reported to OS.This memory can be used as secure memory. A variablegd->arch.secure_ram is used to track the location. In systemsthe RAM base is not zero, or RAM is divided into banks,this variable needs to be recalcuated to get the address.- CFG_SYS_SDRAM_BASE:Physical start address of SDRAM. _Must_ be 0 here.- CFG_SYS_FLASH_BASE:Physical start address of Flash memory.- CONFIG_SYS_MALLOC_LEN:Size of DRAM reserved for malloc() use.- CFG_SYS_BOOTMAPSZ:Maximum size of memory mapped by the startup code ofthe Linux kernel; all data that must be processed bythe Linux kernel (bd_info, boot arguments, FDT blob ifused) must be put below this limit, unless "bootm_low"environment variable is defined and non-zero. In such caseall data for the Linux kernel must be between "bootm_low"and "bootm_low" + CFG_SYS_BOOTMAPSZ. The environmentvariable "bootm_mapsize" will override the value ofCFG_SYS_BOOTMAPSZ.  If CFG_SYS_BOOTMAPSZ is undefined,then the value in "bootm_size" will be used instead.- CONFIG_SYS_BOOT_GET_CMDLINE:Enables allocating and saving kernel cmdline in space between"bootm_low" and "bootm_low" + BOOTMAPSZ.- CONFIG_SYS_BOOT_GET_KBD:Enables allocating and saving a kernel copy of the bd_info inspace between "bootm_low" and "bootm_low" + BOOTMAPSZ.- CONFIG_SYS_FLASH_PROTECTIONIf defined, hardware flash sectors protection is usedinstead of U-Boot software protection.- CONFIG_SYS_FLASH_CFI:Define if the flash driver uses extra elements in thecommon flash structure for storing flash geometry.- CONFIG_FLASH_CFI_DRIVERThis option also enables the building of the cfi_flash driverin the drivers directory- CONFIG_FLASH_CFI_MTDThis option enables the building of the cfi_mtd driverin the drivers directory. The driver exports CFI flashto the MTD layer.- CONFIG_SYS_FLASH_USE_BUFFER_WRITEUse buffered writes to flash.- CONFIG_ENV_FLAGS_LIST_DEFAULT- CFG_ENV_FLAGS_LIST_STATICEnable validation of the values given to environment variables whencalling env set.  Variables can be restricted to only decimal,hexadecimal, or boolean.  If CONFIG_CMD_NET is also defined,the variables can also be restricted to IP address or MAC address.The format of the list is:type_attribute = [s|d|x|b|i|m]access_attribute = [a|r|o|c]attributes = type_attribute[access_attribute]entry = variable_name[:attributes]list = entry[,list]The type attributes are:s - String (default)d - Decimalx - Hexadecimalb - Boolean ([1yYtT|0nNfF])i - IP addressm - MAC addressThe access attributes are:a - Any (default)r - Read-onlyo - Write-oncec - Change-default- CONFIG_ENV_FLAGS_LIST_DEFAULTDefine this to a list (string) to define the ".flags"environment variable in the default or embedded environment.- CFG_ENV_FLAGS_LIST_STATICDefine this to a list (string) to define validation thatshould be done if an entry is not found in the ".flags"environment variable.  To override a setting in the staticlist, simply add an entry for the same variable name to the".flags" variable.If CONFIG_REGEX is defined, the variable_name above is evaluated as aregular expression. This allows multiple variables to define the sameflags without explicitly listing them for each variable.The following definitions that deal with the placement and managementof environment data (variable area); in general, we support thefollowing configurations:BE CAREFUL! The first access to the environment happens quite earlyin U-Boot initialization (when we try to get the setting of for theconsole baudrate). You *MUST* have mapped your NVRAM area then, orU-Boot will hang.Please note that even with NVRAM we still use a copy of theenvironment in RAM: we could work on NVRAM directly, but we want tokeep settings there always unmodified except somebody uses "saveenv"to save the current settings.BE CAREFUL! For some special cases, the local device can not use"saveenv" command. For example, the local device will get theenvironment stored in a remote NOR flash by SRIO or PCIE link,but it can not erase, write this NOR flash by SRIO or PCIE interface.- CONFIG_NAND_ENV_DSTDefines address in RAM to which the nand_spl code should copy theenvironment. If redundant environment is used, it will be copied toCONFIG_NAND_ENV_DST + CONFIG_ENV_SIZE.Please note that the environment is read-only until the monitorhas been relocated to RAM and a RAM copy of the environment has beencreated; also, when using EEPROM you will have to use env_get_f()until then to read environment variables.The environment is protected by a CRC32 checksum. Before the monitoris relocated into RAM, as a result of a bad CRC you will be workingwith the compiled-in default environment - *silently*!!! [This isnecessary, because the first environment variable we need is the"baudrate" setting for the console - if we have a bad CRC, we don'thave any device yet where we could complain.]Note: once the monitor has been relocated, then it will complain ifthe default environment is used; a new CRC is computed as soon as youuse the "saveenv" command to store a valid environment.- CONFIG_SYS_FAULT_MII_ADDR:MII address of the PHY to check for the Ethernet link state.- CONFIG_DISPLAY_BOARDINFODisplay information about the board that U-Boot is running onwhen U-Boot starts up. The board function checkboard() is calledto do this.- CONFIG_DISPLAY_BOARDINFO_LATESimilar to the previous option, but display this informationlater, once stdio is running and output goes to the LCD, ifpresent.Low Level (hardware related) configuration options:---------------------------------------------------- CONFIG_SYS_CACHELINE_SIZE:Cache Line Size of the CPU.- CONFIG_SYS_CCSRBAR_DEFAULT:Default (power-on reset) physical address of CCSR on FreescalePowerPC SOCs.- CFG_SYS_CCSRBAR:Virtual address of CCSR.  On a 32-bit build, this is typicallythe same value as CONFIG_SYS_CCSRBAR_DEFAULT.- CFG_SYS_CCSRBAR_PHYS:Physical address of CCSR.  CCSR can be relocated to a newphysical address, if desired.  In this case, this macro shouldbe set to that address. Otherwise, it should be set to thesame value as CONFIG_SYS_CCSRBAR_DEFAULT.  For example, CCSRis typically relocated on 36-bit builds.  It is recommendedthat this macro be defined via the _HIGH and _LOW macros:#define CFG_SYS_CCSRBAR_PHYS ((CFG_SYS_CCSRBAR_PHYS_HIGH* 1ull) << 32 | CFG_SYS_CCSRBAR_PHYS_LOW)- CFG_SYS_CCSRBAR_PHYS_HIGH:Bits 33-36 of CFG_SYS_CCSRBAR_PHYS.This value is typicallyeither 0 (32-bit build) or 0xF (36-bit build).This macro isused in assembly code, so it must not contain typecasts orinteger size suffixes (e.g. "ULL").- CFG_SYS_CCSRBAR_PHYS_LOW:Lower 32-bits of CFG_SYS_CCSRBAR_PHYS.  This macro isused in assembly code, so it must not contain typecasts orinteger size suffixes (e.g. "ULL").- CONFIG_SYS_IMMR:Physical address of the Internal Memory.DO NOT CHANGE unless you know exactly what you'redoing! (11-4) [MPC8xx systems only]- CFG_SYS_INIT_RAM_ADDR:Start address of memory area that can be used forinitial data and stack; please note that this must bewritable memory that is working WITHOUT specialinitialization, i. e. you CANNOT use normal RAM whichwill become available only after programming thememory controller and running certain initializationsequences.U-Boot uses the following memory types:- MPC8xx: IMMR (internal memory of the CPU)- CONFIG_SYS_SCCR:System Clock and reset Control Register (15-27)- CONFIG_SYS_OR_TIMING_SDRAM:SDRAM timing- CONFIG_SYS_SRIOn_MEM_VIRT:Virtual Address of SRIO port 'n' memory region- CONFIG_SYS_SRIOn_MEM_PHYxS:Physical Address of SRIO port 'n' memory region- CONFIG_SYS_SRIOn_MEM_SIZE:Size of SRIO port 'n' memory region- CONFIG_SYS_NAND_BUSWIDTH_16BITDefined to tell the NAND controller that the NAND chip is usinga 16 bit bus.Not all NAND drivers use this symbol.Example of drivers that use it:- drivers/mtd/nand/raw/ndfc.c- drivers/mtd/nand/raw/mxc_nand.c- CONFIG_SYS_NDFC_EBC0_CFGSets the EBC0_CFG register for the NDFC. If not defineda default value will be used.- CONFIG_SYS_SPD_BUS_NUMIf SPD EEPROM is on an I2C bus other than the firstone, specify here. Note that the value must resolveto something your driver can deal with.- CONFIG_FSL_DDR_INTERACTIVEEnable interactive DDR debugging. See doc/README.fsl-ddr.- CONFIG_FSL_DDR_SYNC_REFRESHEnable sync of refresh for multiple controllers.- CONFIG_FSL_DDR_BISTEnable built-in memory test for Freescale DDR controllers.- CONFIG_RMIIEnable RMII mode for all FECs.Note that this is a global option, we can'thave one FEC in standard MII mode and another in RMII mode.- CONFIG_CRC32_VERIFYAdd a verify option to the crc32 command.The syntax is:=> crc32 -v <address> <count> <crc32>Where address/count indicate a memory areaand crc32 is the correct crc32 which thearea should have.- CONFIG_LOOPWAdd the "loopw" memory command. This only takes effect ifthe memory commands are activated globally (CONFIG_CMD_MEMORY).- CONFIG_CMD_MX_CYCLICAdd the "mdc" and "mwc" memory commands. These are cyclic"md/mw" commands.Examples:=> mdc.b 10 4 500This command will print 4 bytes (10,11,12,13) each 500 ms.=> mwc.l 100 12345678 10This command will write 12345678 to address 100 all 10 ms.This only takes effect if the memory commands are activatedglobally (CONFIG_CMD_MEMORY).- CONFIG_XPL_BUILDSet when the currently running compilation is for an artifactthat will end up in one of the 'xPL' builds, i.e. SPL, TPL orVPL. Code that needs phase-specific behaviour can check this,or (where possible) use xpl_phase() instead.Note that CONFIG_XPL_BUILD *is* always defined when eitherof CONFIG_TPL_BUILD / CONFIG_VPL_BUILD is defined. This can becounter-intuitive and should perhaps be changed.- CONFIG_TPL_BUILDSet when the currently running compilation is for an artifactthat will end up in the TPL build (as opposed to SPL, VPL orU-Boot proper). Code that needs phase-specific behaviour cancheck this, or (where possible) use xpl_phase() instead.- CONFIG_VPL_BUILDSet when the currently running compilation is for an artifactthat will end up in the VPL build (as opposed to the SPL, TPLor U-Boot proper). Code that needs phase-specific behaviour cancheck this, or (where possible) use xpl_phase() instead.- CONFIG_ARCH_MAP_SYSMEMGenerally U-Boot (and in particular the md command) useseffective address. It is therefore not necessary to regardU-Boot address as virtual addresses that need to be translatedto physical addresses. However, sandbox requires this, sinceit maintains its own little RAM buffer which contains alladdressable memory. This option causes some memory accessesto be mapped through map_sysmem() / unmap_sysmem().- CONFIG_X86_RESET_VECTORIf defined, the x86 reset vector code is included. This is notneeded when U-Boot is running from Coreboot.Freescale QE/FMAN Firmware Support:-----------------------------------The Freescale QUICCEngine (QE) and Frame Manager (FMAN) both support theloading of "firmware", which is encoded in the QE firmware binary format.This firmware often needs to be loaded during U-Boot booting, so macrosare used to identify the storage device (NOR flash, SPI, etc) and the addresswithin that device.- CONFIG_SYS_FMAN_FW_ADDRThe address in the storage device where the FMAN microcode is located.  Themeaning of this address depends on which CONFIG_SYS_QE_FMAN_FW_IN_xxx macrois also specified.- CONFIG_SYS_QE_FW_ADDRThe address in the storage device where the QE microcode is located.  Themeaning of this address depends on which CONFIG_SYS_QE_FMAN_FW_IN_xxx macrois also specified.- CONFIG_SYS_QE_FMAN_FW_LENGTHThe maximum possible size of the firmware.  The firmware binary formathas a field that specifies the actual size of the firmware, but itmight not be possible to read any part of the firmware unless somelocal storage is allocated to hold the entire firmware first.- CONFIG_SYS_QE_FMAN_FW_IN_NORSpecifies that QE/FMAN firmware is located in NOR flash, mapped asnormal addressable memory via the LBC.  CONFIG_SYS_FMAN_FW_ADDR is thevirtual address in NOR flash.- CONFIG_SYS_QE_FMAN_FW_IN_NANDSpecifies that QE/FMAN firmware is located in NAND flash.CONFIG_SYS_FMAN_FW_ADDR is the offset within NAND flash.- CONFIG_SYS_QE_FMAN_FW_IN_MMCSpecifies that QE/FMAN firmware is located on the primary SD/MMCdevice.  CONFIG_SYS_FMAN_FW_ADDR is the byte offset on that device.- CONFIG_SYS_QE_FMAN_FW_IN_REMOTESpecifies that QE/FMAN firmware is located in the remote (master)memory space.CONFIG_SYS_FMAN_FW_ADDR is a virtual address whichcan be mapped from slave TLB->slave LAW->slave SRIO or PCIE outboundwindow->master inbound window->master LAW->the ucode address inmaster's memory space.Freescale Layerscape Management Complex Firmware Support:---------------------------------------------------------The Freescale Layerscape Management Complex (MC) supports the loading of"firmware".This firmware often needs to be loaded during U-Boot booting, so macrosare used to identify the storage device (NOR flash, SPI, etc) and the addresswithin that device.- CONFIG_FSL_MC_ENETEnable the MC driver for Layerscape SoCs.Freescale Layerscape Debug Server Support:-------------------------------------------The Freescale Layerscape Debug Server Support supports the loading of"Debug Server firmware" and triggering SP boot-rom.This firmware often needs to be loaded during U-Boot booting.- CONFIG_SYS_MC_RSV_MEM_ALIGNDefine alignment of reserved memory MC requiresBuilding the Software:======================Building U-Boot has been tested in several native build environmentsand in many different cross environments. Of course we cannot supportall possibly existing versions of cross development tools in all(potentially obsolete) versions. In case of tool chain problems werecommend to use the ELDK (seehttps://www.denx.de/wiki/DULG/ELDK)which is extensively used to build and test U-Boot.If you are not using a native environment, it is assumed that youhave GNU cross compiling tools available in your path. In this case,you must set the environment variable CROSS_COMPILE in your shell.Note that no changes to the Makefile or any other source files arenecessary. For example using the ELDK on a 4xx CPU, please enter:$ CROSS_COMPILE=ppc_4xx-$ export CROSS_COMPILEU-Boot is intended to be simple to build. After installing thesources you must configure U-Boot for one specific board type. Thisis done by typing:make NAME_defconfigwhere "NAME_defconfig" is the name of one of the existing configu-rations; see configs/*_defconfig for supported names.Note: for some boards special configuration names may exist; check if      additional information is available from the board vendor; for      instance, the TQM823L systems are available without (standard)      or with LCD support. You can select such additional "features"      when choosing the configuration, i. e.      make TQM823L_defconfig- will configure for a plain TQM823L, i. e. no LCD support      make TQM823L_LCD_defconfig- will configure for a TQM823L with U-Boot console on LCD      etc.Finally, type "make all", and you should get some working U-Bootimages ready for download to / installation on your system:- "u-boot.bin" is a raw binary image- "u-boot" is an image in ELF binary format- "u-boot.srec" is in Motorola S-Record formatUser specific CPPFLAGS, AFLAGS and CFLAGS can be passed to the compiler bysetting the according environment variables KCPPFLAGS, KAFLAGS and KCFLAGS.For example to treat all compiler warnings as errors:make KCFLAGS=-WerrorPlease be aware that the Makefiles assume you are using GNU make, sofor instance on NetBSD you might need to use "gmake" instead ofnative "make".If the system board that you have is not listed, then you will needto port U-Boot to your hardware platform. To do this, follow thesesteps:1.  Create a new directory to hold your board specific code. Add any    files you need. In your board directory, you will need at least    the "Makefile" and a "<board>.c".2.  Create a new configuration file "include/configs/<board>.h" for    your board.3.  If you're porting U-Boot to a new CPU, then also create a new    directory to hold your CPU specific code. Add any files you need.4.  Run "make <board>_defconfig" with your new name.5.  Type "make", and you should get a working "u-boot.srec" file    to be installed on your target system.6.  Debug and solve any problems that might arise.    [Of course, this last step is much harder than it sounds.]Testing of U-Boot Modifications, Ports to New Hardware, etc.:==============================================================If you have modified U-Boot sources (for instance added a new boardor support for new devices, a new CPU, etc.) you are expected toprovide feedback to the other developers. The feedback normally takesthe form of a "patch", i.e. a context diff against a certain (latestofficial or latest in the git repository) version of U-Boot sources.But before you submit such a patch, please verify that your modifi-cation did not break existing code. At least make sure that *ALL* ofthe supported boards compile WITHOUT ANY compiler warnings. To do so,just run the buildman script (tools/buildman/buildman), which willconfigure and build U-Boot for ALL supported system. Be warned, thiswill take a while. Please see the buildman README, or run 'buildman -H'for documentation.See also "U-Boot Porting Guide" below.Monitor Commands - Overview:============================go- start application at address 'addr'run- run commands in an environment variablebootm- boot application image from memorybootp- boot image via network using BootP/TFTP protocolbootz   - boot zImage from memorytftpboot- boot image via network using TFTP protocol       and env variables "ipaddr" and "serverip"       (and eventually "gatewayip")tftpput - upload a file via network using TFTP protocolrarpboot- boot image via network using RARP/TFTP protocoldiskboot- boot from IDE devicebootd   - boot default, i.e., run 'bootcmd'loads- load S-Record file over serial lineloadb- load binary file over serial line (kermit mode)loadm   - load binary blob from source address to destination addressmd- memory displaymm- memory modify (auto-incrementing)nm- memory modify (constant address)mw- memory write (fill)ms- memory searchcp- memory copycmp- memory comparecrc32- checksum calculationi2c- I2C sub-systemsspi- SPI utility commandsbase- print or set address offsetprintenv- print environment variablespwm- control pwm channelsseama   - load SEAMA NAND imagesetenv- set environment variablessaveenv - save environment variables to persistent storageprotect - enable or disable FLASH write protectionerase- erase FLASH memoryflinfo- print FLASH memory informationnand- NAND memory operations (see doc/README.nand)bdinfo- print Board Info structureiminfo- print header information for application imageconinfo - print console devices and informationside- IDE sub-systemloop- infinite loop on address rangeloopw- infinite write loop on address rangemtest- simple RAM testicache- enable or disable instruction cachedcache- enable or disable data cachereset- Perform RESET of the CPUecho- echo args to consoleversion - print monitor versionhelp- print online help?- alias for 'help'Monitor Commands - Detailed Description:========================================TODO.For now: just type "help <command>".Note for Redundant Ethernet Interfaces:=======================================Some boards come with redundant Ethernet interfaces; U-Boot supportssuch configurations and is capable of automatic selection of a"working" interface when needed. MAC assignment works as follows:Network interfaces are numbered eth0, eth1, eth2, ... CorrespondingMAC addresses can be stored in the environment as "ethaddr" (=>eth0),"eth1addr" (=>eth1), "eth2addr", ...If the network interface stores some valid MAC address (for instancein SROM), this is used as default address if there is NO correspon-ding setting in the environment; if the corresponding environmentvariable is set, this overrides the settings in the card; that means:o If the SROM has a valid MAC address, and there is no address in the  environment, the SROM's address is used.o If there is no valid address in the SROM, and a definition in the  environment exists, then the value from the environment variable is  used.o If both the SROM and the environment contain a MAC address, and  both addresses are the same, this MAC address is used.o If both the SROM and the environment contain a MAC address, and the  addresses differ, the value from the environment is used and a  warning is printed.o If neither SROM nor the environment contain a MAC address, an error  is raised. If CONFIG_NET_RANDOM_ETHADDR is defined, then in this case  a random, locally-assigned MAC is used.If Ethernet drivers implement the 'write_hwaddr' function, valid MAC addresseswill be programmed into hardware as part of the initialization process. Thismay be skipped by setting the appropriate 'ethmacskip' environment variable.The naming convention is as follows:"ethmacskip" (=>eth0), "eth1macskip" (=>eth1) etc.Image Formats:==============U-Boot is capable of booting (and performing other auxiliary operations on)images in two formats:New uImage format (FIT)-----------------------Flexible and powerful format based on Flattened Image Tree -- FIT (similarto Flattened Device Tree). It allows the use of images with multiplecomponents (several kernels, ramdisks, etc.), with contents protected bySHA1, MD5 or CRC32. More details are found in the doc/uImage.FIT directory.Old uImage format-----------------Old image format is based on binary files which can be basically anything,preceded by a special header; see the definitions in include/image.h fordetails; basically, the header defines the following image properties:* Target Operating System (Provisions for OpenBSD, NetBSD, FreeBSD,  4.4BSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks,  LynxOS, pSOS, QNX, RTEMS, INTEGRITY;  Currently supported: Linux, NetBSD, VxWorks, QNX, RTEMS, INTEGRITY).* Target CPU Architecture (Provisions for Alpha, ARM, Intel x86,  IA64, MIPS, Nios II, PowerPC, IBM S390, SuperH, Sparc, Sparc 64 Bit;  Currently supported: ARM, Intel x86, MIPS, Nios II, PowerPC).* Compression Type (uncompressed, gzip, bzip2)* Load Address* Entry Point* Image Name* Image TimestampThe header is marked by a special Magic Number, and both the headerand the data portions of the image are secured against corruption byCRC32 checksums.Linux Support:==============Although U-Boot should support any OS or standalone applicationeasily, the main focus has always been on Linux during the design ofU-Boot.U-Boot includes many features that so far have been part of somespecial "boot loader" code within the Linux kernel. Also, any"initrd" images to be used are no longer part of one big Linux image;instead, kernel and "initrd" are separate images. This implementationserves several purposes:- the same features can be used for other OS or standalone  applications (for instance: using compressed images to reduce the  Flash memory footprint)- it becomes much easier to port new Linux kernel versions because  lots of low-level, hardware dependent stuff are done by U-Boot- the same Linux kernel image can now be used with different "initrd"  images; of course this also means that different kernel images can  be run with the same "initrd". This makes testing easier (you don't  have to build a new "zImage.initrd" Linux image when you just  change a file in your "initrd"). Also, a field-upgrade of the  software is easier now.Linux HOWTO:============Porting Linux to U-Boot based systems:---------------------------------------U-Boot cannot save you from doing all the necessary modifications toconfigure the Linux device drivers for use with your target hardware(no, we don't intend to provide a full virtual machine interface toLinux :-).But now you can ignore ALL boot loader code (in arch/powerpc/mbxboot).Just make sure your machine specific header file (for instanceinclude/asm-ppc/tqm8xx.h) includes the same definition of the BoardInformation structure as we define in include/asm-<arch>/u-boot.h,and make sure that your definition of IMAP_ADDR uses the same valueas your U-Boot configuration in CONFIG_SYS_IMMR.Note that U-Boot now has a driver model, a unified model for drivers.If you are adding a new driver, plumb it into driver model. If thereis no uclass available, you are encouraged to create one. Seedoc/driver-model.Configuring the Linux kernel:-----------------------------No specific requirements for U-Boot. Make sure you have some rootdevice (initial ramdisk, NFS) for your target system.Building a Linux Image:-----------------------With U-Boot, "normal" build targets like "zImage" or "bzImage" arenot used. If you use recent kernel source, a new build target"uImage" will exist which automatically builds an image usable byU-Boot. Most older kernels also have support for a "pImage" target,which was introduced for our predecessor project PPCBoot and uses a100% compatible format.Example:make TQM850L_defconfigmake oldconfigmake depmake uImageThe "uImage" build target uses a special tool (in 'tools/mkimage') toencapsulate a compressed Linux kernel image with header information,CRC32 checksum etc. for use with U-Boot. This is what we are doing:* build a standard "vmlinux" kernel image (in ELF binary format):* convert the kernel into a raw binary image:${CROSS_COMPILE}-objcopy -O binary \ -R .note -R .comment \ -S vmlinux linux.bin* compress the binary image:gzip -9 linux.bin* package compressed binary image for U-Boot:mkimage -A ppc -O linux -T kernel -C gzip \-a 0 -e 0 -n "Linux Kernel Image" \-d linux.bin.gz uImageThe "mkimage" tool can also be used to create ramdisk images for usewith U-Boot, either separated from the Linux kernel image, orcombined into one file. "mkimage" encapsulates the images with a 64byte header containing information about target architecture,operating system, image type, compression method, entry points, timestamp, CRC32 checksums, etc."mkimage" can be called in two ways: to verify existing images andprint the header information, or to build new images.In the first form (with "-l" option) mkimage lists the informationcontained in the header of an existing U-Boot image; this includeschecksum verification:tools/mkimage -l image  -l ==> list image header informationThe second form (with "-d" option) is used to build a U-Boot imagefrom a "data file" which is used as image payload:tools/mkimage -A arch -O os -T type -C comp -a addr -e ep \      -n name -d data_file image  -A ==> set architecture to 'arch'  -O ==> set operating system to 'os'  -T ==> set image type to 'type'  -C ==> set compression type 'comp'  -a ==> set load address to 'addr' (hex)  -e ==> set entry point to 'ep' (hex)  -n ==> set image name to 'name'  -d ==> use image data from 'datafile'Right now, all Linux kernels for PowerPC systems use the same loadaddress (0x00000000), but the entry point address depends on thekernel version:- 2.2.x kernels have the entry point at 0x0000000C,- 2.3.x and later kernels have the entry point at 0x00000000.So a typical call to build a U-Boot image would read:-> tools/mkimage -n '2.4.4 kernel for TQM850L' \> -A ppc -O linux -T kernel -C gzip -a 0 -e 0 \> -d /opt/elsk/ppc_8xx/usr/src/linux-2.4.4/arch/powerpc/coffboot/vmlinux.gz \> examples/uImage.TQM850LImage Name:   2.4.4 kernel for TQM850LCreated:      Wed Jul 19 02:34:59 2000Image Type:   PowerPC Linux Kernel Image (gzip compressed)Data Size:    335725 Bytes = 327.86 kB = 0.32 MBLoad Address: 0x00000000Entry Point:  0x00000000To verify the contents of the image (or check for corruption):-> tools/mkimage -l examples/uImage.TQM850LImage Name:   2.4.4 kernel for TQM850LCreated:      Wed Jul 19 02:34:59 2000Image Type:   PowerPC Linux Kernel Image (gzip compressed)Data Size:    335725 Bytes = 327.86 kB = 0.32 MBLoad Address: 0x00000000Entry Point:  0x00000000NOTE: for embedded systems where boot time is critical you can tradespeed for memory and install an UNCOMPRESSED image instead: thisneeds more space in Flash, but boots much faster since it does notneed to be uncompressed:-> gunzip /opt/elsk/ppc_8xx/usr/src/linux-2.4.4/arch/powerpc/coffboot/vmlinux.gz-> tools/mkimage -n '2.4.4 kernel for TQM850L' \> -A ppc -O linux -T kernel -C none -a 0 -e 0 \> -d /opt/elsk/ppc_8xx/usr/src/linux-2.4.4/arch/powerpc/coffboot/vmlinux \> examples/uImage.TQM850L-uncompressedImage Name:   2.4.4 kernel for TQM850LCreated:      Wed Jul 19 02:34:59 2000Image Type:   PowerPC Linux Kernel Image (uncompressed)Data Size:    792160 Bytes = 773.59 kB = 0.76 MBLoad Address: 0x00000000Entry Point:  0x00000000Similar you can build U-Boot images from a 'ramdisk.image.gz' filewhen your kernel is intended to use an initial ramdisk:-> tools/mkimage -n 'Simple Ramdisk Image' \> -A ppc -O linux -T ramdisk -C gzip \> -d /LinuxPPC/images/SIMPLE-ramdisk.image.gz examples/simple-initrdImage Name:   Simple Ramdisk ImageCreated:      Wed Jan 12 14:01:50 2000Image Type:   PowerPC Linux RAMDisk Image (gzip compressed)Data Size:    566530 Bytes = 553.25 kB = 0.54 MBLoad Address: 0x00000000Entry Point:  0x00000000The "dumpimage" tool can be used to disassemble or list the contents of imagesbuilt by mkimage. See dumpimage's help output (-h) for details.Installing a Linux Image:-------------------------To downloading a U-Boot image over the serial (console) interface,you must convert the image to S-Record format:objcopy -I binary -O srec examples/image examples/image.srecThe 'objcopy' does not understand the information in the U-Bootimage header, so the resulting S-Record file will be relative toaddress 0x00000000. To load it to a given address, you need tospecify the target address as 'offset' parameter with the 'loads'command.Example: install the image to address 0x40100000 (which on theTQM8xxL is in the first Flash bank):=> erase 40100000 401FFFFF.......... doneErased 8 sectors=> loads 40100000## Ready for S-Record download ...~>examples/image.srec1 2 3 4 5 6 7 8 9 10 11 12 13 ......15989 15990 15991 15992[file transfer complete][connected]## Start Addr = 0x00000000You can check the success of the download using the 'iminfo' command;this includes a checksum verification so you can be sure no datacorruption happened:=> imi 40100000## Checking Image at 40100000 ...   Image Name: 2.2.13 for initrd on TQM850L   Image Type: PowerPC Linux Kernel Image (gzip compressed)   Data Size: 335725 Bytes = 327 kB = 0 MB   Load Address: 00000000   Entry Point: 0000000c   Verifying Checksum ... OKBoot Linux:-----------The "bootm" command is used to boot an application that is stored inmemory (RAM or Flash). In case of a Linux kernel image, the contentsof the "bootargs" environment variable is passed to the kernel asparameters. You can check and modify this variable using the"printenv" and "setenv" commands:=> printenv bootargsbootargs=root=/dev/ram=> setenv bootargs root=/dev/nfs rw nfsroot=10.0.0.2:/LinuxPPC nfsaddrs=10.0.0.99:10.0.0.2=> printenv bootargsbootargs=root=/dev/nfs rw nfsroot=10.0.0.2:/LinuxPPC nfsaddrs=10.0.0.99:10.0.0.2=> bootm 40020000## Booting Linux kernel at 40020000 ...   Image Name: 2.2.13 for NFS on TQM850L   Image Type: PowerPC Linux Kernel Image (gzip compressed)   Data Size: 381681 Bytes = 372 kB = 0 MB   Load Address: 00000000   Entry Point: 0000000c   Verifying Checksum ... OK   Uncompressing Kernel Image ... OKLinux version 2.2.13 (wd@denx.local.net) (gcc version 2.95.2 19991024 (release)) #1 Wed Jul 19 02:35:17 MEST 2000Boot arguments: root=/dev/nfs rw nfsroot=10.0.0.2:/LinuxPPC nfsaddrs=10.0.0.99:10.0.0.2time_init: decrementer frequency = 187500000/60Calibrating delay loop... 49.77 BogoMIPSMemory: 15208k available (700k kernel code, 444k data, 32k init) [c0000000,c1000000]...If you want to boot a Linux kernel with initial RAM disk, you passthe memory addresses of both the kernel and the initrd image (PPBCOOTformat!) to the "bootm" command:=> imi 40100000 40200000## Checking Image at 40100000 ...   Image Name: 2.2.13 for initrd on TQM850L   Image Type: PowerPC Linux Kernel Image (gzip compressed)   Data Size: 335725 Bytes = 327 kB = 0 MB   Load Address: 00000000   Entry Point: 0000000c   Verifying Checksum ... OK## Checking Image at 40200000 ...   Image Name: Simple Ramdisk Image   Image Type: PowerPC Linux RAMDisk Image (gzip compressed)   Data Size: 566530 Bytes = 553 kB = 0 MB   Load Address: 00000000   Entry Point: 00000000   Verifying Checksum ... OK=> bootm 40100000 40200000## Booting Linux kernel at 40100000 ...   Image Name: 2.2.13 for initrd on TQM850L   Image Type: PowerPC Linux Kernel Image (gzip compressed)   Data Size: 335725 Bytes = 327 kB = 0 MB   Load Address: 00000000   Entry Point: 0000000c   Verifying Checksum ... OK   Uncompressing Kernel Image ... OK## Loading RAMDisk Image at 40200000 ...   Image Name: Simple Ramdisk Image   Image Type: PowerPC Linux RAMDisk Image (gzip compressed)   Data Size: 566530 Bytes = 553 kB = 0 MB   Load Address: 00000000   Entry Point: 00000000   Verifying Checksum ... OK   Loading Ramdisk ... OKLinux version 2.2.13 (wd@denx.local.net) (gcc version 2.95.2 19991024 (release)) #1 Wed Jul 19 02:32:08 MEST 2000Boot arguments: root=/dev/ramtime_init: decrementer frequency = 187500000/60Calibrating delay loop... 49.77 BogoMIPS...RAMDISK: Compressed image found at block 0VFS: Mounted root (ext2 filesystem).bash#Boot Linux and pass a flat device tree:-----------First, U-Boot must be compiled with the appropriate defines. See the sectiontitled "Linux Kernel Interface" above for a more in depth explanation. Thefollowing is an example of how to start a kernel and pass an updatedflat device tree:=> print oftaddroftaddr=0x300000=> print oftoft=oftrees/mpc8540ads.dtb=> tftp $oftaddr $oftSpeed: 1000, full duplexUsing TSEC0 deviceTFTP from server 192.168.1.1; our IP address is 192.168.1.101Filename 'oftrees/mpc8540ads.dtb'.Load address: 0x300000Loading: #doneBytes transferred = 4106 (100a hex)=> tftp $loadaddr $bootfileSpeed: 1000, full duplexUsing TSEC0 deviceTFTP from server 192.168.1.1; our IP address is 192.168.1.2Filename 'uImage'.Load address: 0x200000Loading:############doneBytes transferred = 1029407 (fb51f hex)=> print loadaddrloadaddr=200000=> print oftaddroftaddr=0x300000=> bootm $loadaddr - $oftaddr## Booting image at 00200000 ...   Image Name: Linux-2.6.17-dirty   Image Type: PowerPC Linux Kernel Image (gzip compressed)   Data Size: 1029343 Bytes = 1005.2 kB   Load Address: 00000000   Entry Point: 00000000   Verifying Checksum ... OK   Uncompressing Kernel Image ... OKBooting using flat device tree at 0x300000Using MPC85xx ADS machine descriptionMemory CAM mapping: CAM0=256Mb, CAM1=256Mb, CAM2=0Mb residual: 0Mb[snip]More About U-Boot Image Types:------------------------------U-Boot supports the following image types:   "Standalone Programs" are directly runnable in the environmentprovided by U-Boot; it is expected that (if they behavewell) you can continue to work in U-Boot after return fromthe Standalone Program.   "OS Kernel Images" are usually images of some Embedded OS whichwill take over control completely. Usually these programswill install their own set of exception handlers, devicedrivers, set up the MMU, etc. - this means, that you cannotexpect to re-enter U-Boot except by resetting the CPU.   "RAMDisk Images" are more or less just data blocks, and theirparameters (address, size) are passed to an OS kernel that isbeing started.   "Multi-File Images" contain several images, typically an OS(Linux) kernel image and one or more data images likeRAMDisks. This construct is useful for instance when you wantto boot over the network using BOOTP etc., where the bootserver provides just a single image file, but you want to getfor instance an OS kernel and a RAMDisk image."Multi-File Images" start with a list of image sizes, eachimage size (in bytes) specified by an "uint32_t" in networkbyte order. This list is terminated by an "(uint32_t)0".Immediately after the terminating 0 follow the images, one byone, all aligned on "uint32_t" boundaries (size rounded up toa multiple of 4 bytes).   "Firmware Images" are binary images containing firmware (likeU-Boot or FPGA images) which usually will be programmed toflash memory.   "Script files" are command sequences that will be executed byU-Boot's command interpreter; this feature is especiallyuseful when you configure U-Boot to use a real shell (hush)as command interpreter.Booting the Linux zImage:-------------------------On some platforms, it's possible to boot Linux zImage. This is doneusing the "bootz" command. The syntax of "bootz" command is the sameas the syntax of "bootm" command.Note, defining the CONFIG_SUPPORT_RAW_INITRD allows user to supplykernel with raw initrd images. The syntax is slightly different, theaddress of the initrd must be augmented by it's size, in the followingformat: "<initrd addres>:<initrd size>".Standalone HOWTO:=================One of the features of U-Boot is that you can dynamically load andrun "standalone" applications, which can use some resources ofU-Boot like console I/O functions or interrupt services.Two simple examples are included with the sources:"Hello World" Demo:-------------------'examples/hello_world.c' contains a small "Hello World" Demoapplication; it is automatically compiled when you build U-Boot.It's configured to run at address 0x00040004, so you can play with itlike that:=> loads## Ready for S-Record download ...~>examples/hello_world.srec1 2 3 4 5 6 7 8 9 10 11 ...[file transfer complete][connected]## Start Addr = 0x00040004=> go 40004 Hello World! This is a test.## Starting application at 0x00040004 ...Hello Worldargc = 7argv[0] = "40004"argv[1] = "Hello"argv[2] = "World!"argv[3] = "This"argv[4] = "is"argv[5] = "a"argv[6] = "test."argv[7] = "<NULL>"Hit any key to exit ...## Application terminated, rc = 0x0Another example, which demonstrates how to register a CPM interrupthandler with the U-Boot code, can be found in 'examples/timer.c'.Here, a CPM timer is set up to generate an interrupt every second.The interrupt service routine is trivial, just printing a '.'character, but this is just a demo program. The application can becontrolled by the following keys:? - print current values og the CPM Timer registersb - enable interrupts and start timere - stop timer and disable interruptsq - quit application=> loads## Ready for S-Record download ...~>examples/timer.srec1 2 3 4 5 6 7 8 9 10 11 ...[file transfer complete][connected]## Start Addr = 0x00040004=> go 40004## Starting application at 0x00040004 ...TIMERS=0xfff00980Using timer 1  tgcr @ 0xfff00980, tmr @ 0xfff00990, trr @ 0xfff00994, tcr @ 0xfff00998, tcn @ 0xfff0099c, ter @ 0xfff009b0Hit 'b':[q, b, e, ?] Set interval 1000000 usEnabling timerHit '?':[q, b, e, ?] ........tgcr=0x1, tmr=0xff1c, trr=0x3d09, tcr=0x0, tcn=0xef6, ter=0x0Hit '?':[q, b, e, ?] .tgcr=0x1, tmr=0xff1c, trr=0x3d09, tcr=0x0, tcn=0x2ad4, ter=0x0Hit '?':[q, b, e, ?] .tgcr=0x1, tmr=0xff1c, trr=0x3d09, tcr=0x0, tcn=0x1efc, ter=0x0Hit '?':[q, b, e, ?] .tgcr=0x1, tmr=0xff1c, trr=0x3d09, tcr=0x0, tcn=0x169d, ter=0x0Hit 'e':[q, b, e, ?] ...Stopping timerHit 'q':[q, b, e, ?] ## Application terminated, rc = 0x0Implementation Internals:=========================The following is not intended to be a complete description of everyimplementation detail. However, it should help to understand theinner workings of U-Boot and make it easier to port it to customhardware.Initial Stack, Global Data:---------------------------The implementation of U-Boot is complicated by the fact that U-Bootstarts running out of ROM (flash memory), usually without access tosystem RAM (because the memory controller is not initialized yet).This means that we don't have writable Data or BSS segments, and BSSis not initialized as zero. To be able to get a C environment workingat all, we have to allocate at least a minimal stack. Implementationoptions for this are defined and restricted by the CPU used: Some CPUmodels provide on-chip memory (like the IMMR area on MPC8xx andMPC826x processors), on others (parts of) the data cache can belocked as (mis-) used as memory, etc.Chris Hallinan posted a good summary of these issues to theU-Boot mailing list:Subject: RE: [U-Boot-Users] RE: More On Memory Bank x (nothingness)?From: "Chris Hallinan" <clh@net1plus.com>Date: Mon, 10 Feb 2003 16:43:46 -0500 (22:43 MET)...Correct me if I'm wrong, folks, but the way I understand itis this: Using DCACHE as initial RAM for Stack, etc, does notrequire any physical RAM backing up the cache. The clevernessis that the cache is being used as a temporary supply ofnecessary storage before the SDRAM controller is setup. It'sbeyond the scope of this list to explain the details, but youcan see how this works by studying the cache architecture andoperation in the architecture and processor-specific manuals.OCM is On Chip Memory, which I believe the 405GP has 4K. Itis another option for the system designer to use as aninitial stack/RAM area prior to SDRAM being available. Eitheroption should work for you. Using CS 4 should be fine if yourboard designers haven't used it for something that wouldcause you grief during the initial boot! It is frequently notused.CFG_SYS_INIT_RAM_ADDR should be somewhere that won't interferewith your processor/board/system design. The default valueyou will find in any recent u-boot distribution inwalnut.h should work for you. I'd set it to a value largerthan your SDRAM module. If you have a 64MB SDRAM module, setit above 400_0000. Just make sure your board has no resourcesthat are supposed to respond to that address! That code instart.S has been around a while and should work as is whenyou get the config right.-Chris HallinanDS4.COM, Inc.It is essential to remember this, since it has some impact on the Ccode for the initialization procedures:* Initialized global data (data segment) is read-only. Do not attempt  to write it.* Do not use any uninitialized global data (or implicitly initialized  as zero data - BSS segment) at all - this is undefined, initiali-  zation is performed later (when relocating to RAM).* Stack space is very limited. Avoid big data buffers or things like  that.Having only the stack as writable memory limits means we cannot usenormal global data to share information between the code. But itturned out that the implementation of U-Boot can be greatlysimplified by making a global data structure (gd_t) available to allfunctions. We could pass a pointer to this data as argument to _all_functions, but this would bloat the code. Instead we use a feature ofthe GCC compiler (Global Register Variables) to share the data: weplace a pointer (gd) to the global data into a register which wereserve for this purpose.When choosing a register for such a purpose we are restricted by therelevant  (E)ABI  specifications for the current architecture, and byGCC's implementation.For PowerPC, the following registers have specific use:R1:stack pointerR2:reserved for system useR3-R4:parameter passing and return valuesR5-R10: parameter passingR13:small data area pointerR30:GOT pointerR31:frame pointer(U-Boot also uses R12 as internal GOT pointer. r12is a volatile register so r12 needs to be reset whengoing back and forth between asm and C)    ==> U-Boot will use R2 to hold a pointer to the global data    Note: on PPC, we could use a static initializer (since the    address of the global data structure is known at compile time),    but it turned out that reserving a register results in somewhat    smaller code - although the code savings are not that big (on    average for all boards 752 bytes for the whole U-Boot image,    624 text + 127 data).On ARM, the following registers are used:R0:function argument word/integer resultR1-R3:function argument wordR9:platform specificR10:stack limit (used only if stack checking is enabled)R11:argument (frame) pointerR12:temporary workspaceR13:stack pointerR14:link registerR15:program counter    ==> U-Boot will use R9 to hold a pointer to the global data    Note: on ARM, only R_ARM_RELATIVE relocations are supported.On Nios II, the ABI is documented here:https://www.altera.com/literature/hb/nios2/n2cpu_nii51016.pdf    ==> U-Boot will use gp to hold a pointer to the global data    Note: on Nios II, we give "-G0" option to gcc and don't use gp    to access small data sections, so gp is free.On RISC-V, the following registers are used:x0: hard-wired zero (zero)x1: return address (ra)x2:stack pointer (sp)x3:global pointer (gp)x4:thread pointer (tp)x5:link register (t0)x8:frame pointer (fp)x10-x11:arguments/return values (a0-1)x12-x17:arguments (a2-7)x28-31: temporaries (t3-6)pc:program counter (pc)    ==> U-Boot will use gp to hold a pointer to the global dataSystem Initialization:----------------------In the reset configuration, U-Boot starts at the reset entry point(on most PowerPC systems at address 0x00000100). Because of the resetconfiguration for CS0# this is a mirror of the on board Flash memory.To be able to re-map memory U-Boot then jumps to its link address.To be able to implement the initialization code in C, a (small!)initial stack is set up in the internal Dual Ported RAM (in case CPUswhich provide such a feature like), or in a locked part of the datacache. After that, U-Boot initializes the CPU core, the caches andthe SIU.Next, all (potentially) available memory banks are mapped using apreliminary mapping. For example, we put them on 512 MB boundaries(multiples of 0x20000000: SDRAM on 0x00000000 and 0x20000000, Flashon 0x40000000 and 0x60000000, SRAM on 0x80000000). Then UPM A isprogrammed for SDRAM access. Using the temporary configuration, asimple memory test is run that determines the size of the SDRAMbanks.When there is more than one SDRAM bank, and the banks are ofdifferent size, the largest is mapped first. For equal size, the firstbank (CS2#) is mapped first. The first mapping is always for address0x00000000, with any additional banks following immediately to createcontiguous memory starting from 0.Then, the monitor installs itself at the upper end of the SDRAM areaand allocates memory for use by malloc() and for the global BoardInfo data; also, the exception vector code is copied to the low RAMpages, and the final stack is set up.Only after this relocation will you have a "normal" C environment;until that you are restricted in several ways, mostly because you arerunning from ROM, and because the code will have to be relocated to anew address in RAM.Contributing============The U-Boot projects depends on contributions from the user community.If you want to participate, please, have a look at the 'General'section ofhttps://docs.u-boot.org/en/latest/develop/index.htmlwhere we describe coding standards and the patch submission process.

[8]ページ先頭

©2009-2025 Movatter.jp