Board: Nokia RX-51 aka N900

This board definition results in a u-boot.bin which can be chainloaded
from NOLO in qemu or on a real N900. It does very little hardware config
because NOLO has already configured the board. Only needed is enabling
internal eMMC memory via twl4030 regulator which is not enabled by NOLO.

NOLO is expecting a kernel image and will treat any image it finds in
onenand as such. This u-boot is intended to be flashed to the N900 like
a kernel. In order to transparently boot the original kernel, it will be
appended to u-boot.bin at 0x40000. NOLO will load the entire image into
(random) memory and execute u-boot, which saves hw revision, boot reason
and boot mode ATAGs set by NOLO. Then the bootscripts will attempt to load
uImage, zImage or boot.scr from a fat or ext2/3/4 filesystem on external
SD card or internal eMMC memory. If this fails or keyboard is closed then
the appended kernel image will be booted using some generated and some
stored ATAGs (see boot order).

For generating combined image of u-boot and kernel (either in uImage or zImage
format) there is a simple script called u-boot-gen-combined. It is available in
following repository:

  https://github.com/pali/u-boot-maemo

There is support for hardware watchdog. Hardware watchdog is started by
NOLO so u-boot must kick watchdog to prevent reboot device (but not very
often, max every 2 seconds). There is also support for framebuffer display
output with ANSI escape codes and the N900 HW keyboard input.

When U-Boot is starting it enable IBE bit in Auxiliary Control Register,
which is needed for Thumb-2 ISA support. It is workaround for errata 430973.

Default boot order:

 * 0. if keyboard is closed boot automatically attached kernel image
 * 1. try boot from external SD card
 * 2. try boot from internal eMMC memory
 * 3. try boot from attached kernel image

Boot from SD or eMMC in this order:

 * 1.
   * 1.1 find boot.scr on first fat partition
   * 1.2 find uImage on first fat partition
   * 1.3 find zImage on first fat partition
   * 1.4 same order for 2. - 4. fat partition
 * 2. same as 1. but for ext2/3 partition
 * 3. same as 1. but for ext4 partition


Available additional commands/variables:

 * run sdboot - Boot from external SD card (see boot order)
 * run emmcboot - Boot from internal eMMC memory (see boot order)
 * run attachboot - Boot attached kernel image (attached to U-Boot binary)

 * run scriptload - Load boot script ${mmcscriptfile}
 * run scriptboot - Run loaded boot script
 * run kernload - Load kernel image ${mmckernfile}
 * run initrdload - Load initrd image ${mmcinitrdfile}
 * run kernboot - Boot loaded kernel image
 * run kerninitrdboot - Boot loaded kernel image with loaded initrd image

 * run trymmcscriptboot - Try to load and boot script ${mmcscriptfile}
 * run trymmckernboot - Try to load and boot kernel image ${mmckernfile}
 * run trymmckerninitrdboot - Try to load and boot kernel image ${mmckernfile}
                              with initrd image ${mmcinitrdfile}

Additional variables for loading files from mmc:

 * mmc ${mmcnum} (0 - external, 1 - internal)
 * partition number ${mmcpart} (1 - 4)
 * parition type ${mmctype} (fat, ext2, ext4)

Additional variables for booting kernel:

 * setup_omap_atag - Add OMAP table into atags structure (needs maemo kernel)
 * setup_console_atag - Enable serial console in OMAP table
 * setup_boot_reason_atag - Change boot reason in OMAP table
 * setup_boot_mode_atag - Change boot mode in OMAP table

 Variable setup_omap_atag is automatically set when booting attached kernel.
 When variable setup_omap_atag is set, variable setup_console_atag is unset
 and u-boot standard output is set to serial then setup_console_atag is
 automatically set to 1. So output from Maemo kernel would go to serial port.

UBIFS support:

 UBIFS support is disabled, because U-Boot image is too big and cannot be
 flashed with attached zImage to RX-51 kernel nand area. For enabling UBIFS
 support add following lines into file configs/nokia_rx51_defconfig

 CONFIG_CMD_UBI=y
 CONFIG_CMD_UBIFS=y
 CONFIG_MTD_UBI_FASTMAP=y
 CONFIG_MTD_UBI_FASTMAP_AUTOCONVERT=1
