U-Boot for the Gateworks Ventana Product Family boards

This file contains information for the port of U-Boot to the Gateworks
Ventana Product family boards.

The entire Ventana product family (http://www.gateworks.com/product#ventana)
is supported by a single bootloader build by using a common SPL and U-Boot
that dynamically determines the characterstics of the board at runtime via
information from an EEPROM on the board programmed at the factory and supports
all of the various boot mediums available.

1. Secondary Program Loader (SPL)
---------------------------------

The i.MX6 has a BOOT ROM PPL (Primary Program Loader) which supports loading
an executable image from various boot devices.

The Gateworks Ventana board config uses an SPL build configuration. This
will build the following artifacts from U-Boot source:
 - SPL - Secondary Program Loader that the i.MX6 BOOT ROM (Primary Program
         Loader) boots.  This detects CPU/DRAM configuration, configures
         The DRAM controller, loads u-boot.img from the detected boot device,
         and jumps to it.  As this is booted from the PPL, it has an IVT/DCD
         table.
 - u-boot.img - The main U-Boot core which is u-boot.bin with a image header.


2. Build
--------

To build U-Boot for the Gateworks Ventana product family:

For NAND FLASH based boards:
 make gwventana_nand_config
 make

For EMMC FLASH based boards:
 make gwventana_emmc_config
 make


3. Boot source:
---------------

The Gateworks Ventana boards support booting from NAND or micro-SD depending
on the board model. The IMX6 BOOT ROM will choose a boot media based on eFUSE
settings programmed at the factory.

Boards with NAND flash will always boot from NAND, and NAND-less boards will
always boot from micro-SD. However, it is possible to use the U-Boot bmode
command (or the technique it uses) to essentially bootstrap to another boot
media at runtime.

3.1. boot from NAND
-------------------

The i.MX6 BOOT ROM expects some structures that provide details of NAND layout
and bad block information (referred to as 'bootstreams') which are replicated
multiple times in NAND. The number of replications and their spacing (referred
to as search stride) is configurable through board strapping options and/or
eFUSE settings (BOOT_SEARCH_COUNT / Pages in block from BOOT_CFG2). In
addition, the i.MX6 BOOT ROM Flash Configuration Block (FCB) supports two
copies of a bootloader in flash in the case that a bad block has corrupted one.
The Freescale 'kobs-ng' application from the Freescale LTIB BSP, which runs
under Linux and operates on an MTD partition, must be used to program the
bootstream in order to setup this flash structure correctly.

The Gateworks Ventana boards with NAND flash have been factory programmed
such that their eFUSE settings expect 2 copies of the boostream (this is
specified by providing kobs-ng with the --search_exponent=1 argument). Once in
Linux with MTD support for the NAND on /dev/mtd0 you can program the SPL
with:

kobs-ng init -v -x --search_exponent=1 SPL

The kobs-ng application uses an imximage which contains the Image Vector Table
(IVT) and Device Configuration Data (DCD) structures that the i.MX6 BOOT ROM
requires to boot.  The kobs-ng adds the Firmware Configuration Block (FCB) and
Discovered Bad Block Table (DBBT).  The SPL build artifact from U-Boot is
an imximage.

The u-boot.img, which is the non SPL U-Boot binary appended to a U-Boot image
header must be programmed in the NAND flash boot device at an offset hard
coded in the SPL. For the Ventana boards, this has been chosen to be 14MB.
The image can be programmed from either U-Boot or Linux:

U-Boot:
Ventana > setenv mtdparts mtdparts=nand:14m(spl),2m(uboot),1m(env),-(rootfs)
Ventana > tftp ${loadaddr} u-boot.img && nand erase.part uboot && \
          nand write ${loadaddr} uboot ${filesize}

Linux:
nandwrite /dev/mtd1 u-boot.img

The above assumes the default Ventana partitioning scheme which is configured
via the mtdparts env var:
 - spl: 14MB
 - uboot: 2M
 - env: 1M
 - rootfs: the rest

This information is taken from:
  http://trac.gateworks.com/wiki/ventana/bootloader#nand

More details about the i.MX6 BOOT ROM can be found in the IMX6 reference manual.

3.1. boot from MMC (eMMC/microSD)
---------------------------------

When the IMX6 eFUSE settings have been factory programmed to boot from
MMC the SPL will be loaded from offset 0x400 (1KB). Once the SPL is
booted, it will load and execute U-Boot (u-boot.img) from offset 69KB
on the micro-SD (defined by CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR).

While it is technically possible to enable the SPL to be able to load
U-Boot from a file on a FAT/EXT filesystem on the micro-SD, we chose to
use raw micro-SD access to keep the code-size and boot time of the SPL down.

For these reasons an MMC device that will be used as an IMX6 primary boot
device must be carefully partitioned and prepared.

The following shell commands are executed on a Linux host (adjust DEV to the
block storage device of your MMC, ie /dev/mmcblk0):

 DEV=/dev/sdc
 # zero out 1MB of device
 sudo dd if=/dev/zero of=$DEV count=1 bs=1M oflag=sync status=none && sync
 # copy SPL to 1KB offset
 sudo dd if=SPL of=$DEV bs=1K seek=1 oflag=sync status=none && sync
 # copy U-Boot to 69KB offset
 sudo dd if=u-boot.img of=$DEV bs=1K seek=69 oflag=sync status=none && sync
 # create a partition table with a single rootfs partition starting at 1MB
 printf "1,,L\n" | sudo sfdisk --in-order --no-reread -L -uM $DEV && sync
 # format partition
 sudo mkfs.ext4 -L root ${DEV}1
 # mount the partition
 sudo udisks --mount ${DEV}1
 # extract filesystem
 sudo tar xvf rootfs.tar.gz -C /media/root
 # flush and unmount
 sync && sudo umount /media/root

The above assumes the default Ventana micro-SD partitioning scheme
 - spl    :   1KB-69KB  (68KB)  required by IMX6 BOOT ROM
 - uboot  :  69KB-709KB (640KB) defined by
                                CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR
 - env    : 709KB-965KB (256KB) defined by
                                CONFIG_ENV_MMC_SIZE
                                CONFIG_ENV_MMC_OFFSET_REDUND
 - rootfs :   1MB-

This information is taken from:
  http://trac.gateworks.com/wiki/ventana/bootloader#microsd

More details about the i.MX6 BOOT ROM can be found in the IMX6 reference manual.

4. Falcon Mode
------------------------------

The Gateworks Ventana board config enables Falcon mode (CONFIG_SPL_OS_BOOT)
which allows the SPL to boot directly to an OS instead of to U-Boot
(u-boot.img) thus acheiving a faster overall boot time. The time savings
depends on your boot medium (ie NAND Flash vs micro-SD) and size/storage
of the OS. The time savings can be anywhere from 2 seconds (256MB NAND Flash
with ~1MB kernel) to 6 seconds or more (2GB NAND Flash with ~6 kernel)

The Gateworks Ventana board supports Falcon mode for the following boot
medium:
 - NAND flash
 - micro-SD

For all boot mediums, raw mode is used. While support of more complex storage
such as files on top of FAT/EXT filesystem is possible but not practical
as the size of the SPL is fairly limitted (to 64KB based on the smallest
size of available IMX6 iRAM) as well as the fact that this would increase
OS load time which defeats the purpose of Falcon mode in the first place.

The SPL decides to boot either U-Boot (u-boot.img) or the OS (args + kernel)
based on the return value of the spl_start_uboot() function. While often
this can simply be the state of a GPIO based pushbutton or DIP switch, for
Gateworks Ventana, we use an EEPROM register on i2c-0 at 0x50:0x00:
set to '0' will choose to boot to U-Boot and otherwise it will boot to OS.

To use Falcon mode it is required that you first 'prepare' the 'args' data
that is stored on your boot medium along with the kernel (which can be any
OS or bare-metal application). In the case of the Linux kernel the 'args'
is the flatenned device-tree which normally gets altered prior to booting linux
by U-Boot's 'bootm' command. To achieve this for SPL we use the
'spl export fdt' command in U-Boot after loading the kernel and dtb which
will go through the same process of modifying the device-tree for the board
being executed on but not jump to the kernel. This allows you to save the
args data to the location the SPL expects it and then enable Falcon mode.

It is important to realize that there are certain values in the dtb that
are board model specific (IMX6Q vs IMX6DL for example) and board specific
(board serial number, MAC addrs) so you do not want to use the 'args'
data prepared from one board on another board.

4.1. Falcon Mode on NAND flash
------------------------------
To prepare a Gateworks Ventana board that boots from NAND flash for Falcon
mode you must program your flash such that the 'args' and 'kernel' are
located where defined at compile time by the following:
   CONFIG_CMD_SPL_NAND_OFS         17MB - offset of 'args'
   CONFIG_SYS_NAND_SPL_KERNEL_OFFS 18MB - offset of 'kernel'

The location offsets defined above are defaults chosen by Gateworks and are
flexible if you want to re-define them.

The following steps executed in U-Boot will configure Falcon mode for NAND
using rootfs (ubi), kernel (uImage), and dtb from the network:

 # change mtd partitions to the above mapping
 Ventana > setenv mtdparts 'mtdparts=nand:14m(spl),2m(uboot),1m(env),1m(args),10m(kernel),-(rootfs)'

 # flash rootfs (at 28MB)
 Ventana > tftp ${loadaddr} rootfs_${flash_layout}.ubi && \
   nand erase.part rootfs && nand write ${loadaddr} rootfs ${filesize}

 # load the device-tree
 Ventana > tftp ${fdt_addr} ventana/${fdt_file2}

 # load the kernel
 Ventana > tftp ${loadaddr} ventana/uImage

 # flash kernel (at 18MB)
 Ventana > nand erase.part kernel && nand write ${loadaddr} kernel ${filesize}

 # set kernel args for the console and rootfs (used by spl export)
 Ventana > setenv bootargs 'console=ttymxc1,115200 root=ubi0:rootfs ubi.mtd=5 rootfstype=ubifs quiet'

 # create args based on env, board, EEPROM, and dtb
 Ventana > spl export fdt ${loadaddr} - ${fdt_addr}

 # flash args (at 17MB)
 Ventana > nand erase.part args && nand write 18000000 args 100000

 # set i2c register 0x50:0x00=0 to boot to Linux
 Ventana > i2c dev 0 && i2c mw 0x50 0x00.0 0 1

Be sure to adjust 'bootargs' above to your OS needs (this will be different
for various distros such as OpenWrt, Yocto, Android, etc). You can use the
value obtained from 'cat /proc/cmdline' when booted to Linux.

This information is taken from:
  http://trac.gateworks.com/wiki/ventana/bootloader/falcon-mode#nand


4.2. Falcon Mode on micro-SD card
---------------------------------

To prepare a Gateworks Ventana board with a primary boot device of micro-SD
you first need to make sure you build U-Boot with CONFIG_ENV_IS_IN_MMC
instead of CONFIG_ENV_IS_IN_NAND.

For micro-SD based Falcon mode you must program your micro-SD such that
the 'args' and 'kernel' are located where defined at compile time
by the following:
   CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTOR 0x800 (1MB) - offset of 'args'
   CONFIG_SYS_MMCSD_RAW_MODE_KERNEL_SECTOR 0x1000 (2MB) - offset of 'kernel'

The location offsets defined above are defaults chosen by Gateworks and are
flexible if you want to re-define them.

First you must prepare a micro-SD such that the SPL can be loaded by the
IMX6 BOOT ROM (fixed offset of 1KB), and U-Boot can be loaded by the SPL
(fixed offset of 69KB defined by CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR).

The following shell commands are executed on a Linux host (adjust DEV to the
block storage device of your micro-SD):

 DEV=/dev/sdc
 # zero out 1MB of device
 sudo dd if=/dev/zero of=$DEV count=1 bs=1M oflag=sync status=none && sync
 # copy SPL to 1KB offset
 sudo dd if=SPL of=$DEV bs=1K seek=1 oflag=sync status=none && sync
 # copy U-Boot to 69KB offset
 sudo dd if=u-boot.img of=$DEV bs=1K seek=69 oflag=sync status=none && sync
 # create a partition table with a single rootfs partition starting at 10MB
 printf "10,,L\n" | sudo sfdisk --in-order --no-reread -L -uM $DEV && sync
 # format partition
 sudo mkfs.ext4 -L root ${DEV}1
 # mount the partition
 sudo udisks --mount ${DEV}1
 # extract filesystem
 sudo tar xvf rootfs.tar.gz -C /media/root
 # flush and unmount
 sync && sudo umount /media/root

Now that your micro-SD partitioning has been adjusted to leave room for the
raw 'args' and 'kernel' data boot the board with the prepared micro-SD, break
out in U-Boot and use the following to enable Falcon mode:

 # load device-tree from rootfs
 Ventana > ext2load mmc 0:1 ${fdt_addr} boot/${fdt_file2}

 # load kernel from rootfs
 Ventana > ext2load mmc 0:1 ${loadaddr} boot/uImage

 # write kernel at 2MB offset
 Ventana > mmc write ${loadaddr} 0x1000 0x4000

 # setup kernel bootargs
 Ventana > setenv bootargs 'console=ttymxc1,115200 root=/dev/mmcblk0p1 rootfstype=ext4 rootwait rw'

 # prepare args
 Ventana > spl export fdt ${loadaddr} - ${fdt_addr}

 # write args 1MB data (0x800 sectors) to 1MB offset (0x800 sectors)
 Ventana > mmc write 18000000 0x800 0x800

 # set i2c register 0x50:0x00=0 to boot to Linux
 Ventana > i2c dev 0 && i2c mw 0x50 0x00.0 0 1

Be sure to adjust 'bootargs' above to your OS needs (this will be different
for various distros such as OpenWrt, Yocto, Android, etc). You can use the
value obtained from 'cat /proc/cmdline' when booted to Linux.

This information is taken from:
  http://trac.gateworks.com/wiki/ventana/bootloader/falcon-mode#microsd
