iBoot Upgrade Mode
==================

The iBoot application normally insists on booting from the first
partition on the storage device, using a kernelcache located in
/System/Library/Caches/com.apple.kernelcaches/kernelcache, with a
devicetree located in ROM and with the first partition as the root
device.

Upgrade mode provides an alternative boot path suitable for booting a
standalone restore/recovery system.  It chains to a new bootloader,
and the new bootloader then loads kernelcache, devicetree, ramdisk and
optionally a display image before booting the kernelcache.

To invoke upgrade mode, the boot-command variable must be set to
'upgrade', and the upgrade partition must contain the following files:

 /iBEC
 /kernelcache
 /devicetree 
 /ramdisk
 /apticket.der

being the appropriate iBoot iBEC component, kernelcache, device tree,
ramdisk and personalised AP ticket for the system.  In addition if the
file /logo is present, it will be displayed by the iBEC before the other
components are loaded.

When the kernelcache is booted, the RELEASE-configured iBEC will force
the boot-args variable to:

  'rd=md0 nand-enable-reformat=1 -progress'

Non-RELEASE configurations will add 'rd=md0' to boot-args but
otherwise preserve its contents.  In neither case is the value saved
to NVRAM.

All of the files listed above are expected to be in their usual
(image3) format, and must be signed and/or personalised as normal.

Both iBoot and the upgrade iBEC will identify the upgrade partition by
its LwVM partition name, which must be 'Update'.

If any of the following occurs, the unit will end up in the ROM
iBoot in recovery mode:

 - the upgrade partition does not exist or cannot be mounted
 - the file /iBEC does not exist in the upgrade partition
 - the contents of the iBEC file are not an Image3 file or fail
   authentication

If any of the following occurs, the unit will end up in the upgrade
iBEC in recovery mode:

 - the upgrade partition cannot be mounted (e.g. due to NAND
   format incompatibility)
 - the files /kernelcache, /devicetree and /ramdisk do not exist
   in the upgrade partition
 - the contents of any of these files are not valid Image3, or
   fail authentication
 - the kernelcache file does not contain a compressed mach-o 
   kernelcache
 - the devicetree file does not contain a valid devicetree

The iBEC component will set the auto-boot variable to false when
loaded in upgrade mode, to avoid the risk of locking the unit up due
to a hang while booting the upgrade kernel.
