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 or boot.scr from a fat, ext2/ext3 or ext4 filesystem in 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).

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. USB tty works
but is disabled because it prevents the current Maemo kernel from booting.

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 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 sercon - Use serial port for control
 * run usbcon - Use usbtty for control
 * run vgacon - Use framebuffer and HW keyboard for control (default)

 * 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.

USB TTY:

 Maemo kernel 2.6.28 will crash if u-boot enable usb tty. So USB TTY is disabled.
 For enabling USB TTY just add this line to file include/configs/nokia_rx51.h

 #define CONFIG_USB_TTY


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
