Freescale i.MX233/i.MX28 SB image generator via mkimage
=======================================================

This tool allows user to produce SB BootStream encrypted with a zero key.
Such a BootStream is then bootable on i.MX23/i.MX28.

Usage -- producing image:
=========================
The mxsimage tool is targeted to be a simple replacement for the elftosb2 .
To generate an image, write an image configuration file and run:

 mkimage -A arm -O u-boot -T mxsimage -n <path to configuration file> \
	 <output bootstream file>

The output bootstream file is usually using the .sb file extension. Note
that the example configuration files for producing bootable BootStream with
the U-Boot bootloader can be found under arch/arm/boot/cpu/arm926ejs/mxs/
directory. See the following files:

 mxsimage.mx23.cfg -- This is an example configuration for i.MX23
 mxsimage.mx28.cfg -- This is an example configuration for i.MX28

Each configuration file uses very simple instruction semantics and a few
additional rules have to be followed so that a useful image can be produced.
These semantics and rules will be outlined now.

- Each line of the configuration file contains exactly one instruction.
- Every numeric value must be encoded in hexadecimal and in format 0xabcdef12 .
- The configuration file is a concatenation of blocks called "sections" and
  optionally "DCD blocks" (see below).
  - Each "section" is started by the "SECTION" instruction.
  - The "SECTION" instruction has the following semantics:

      SECTION u32_section_number [BOOTABLE]
      - u32_section_number :: User-selected ID of the section
      - BOOTABLE           :: Sets the section as bootable

  - A bootable section is one from which the BootROM starts executing
    subsequent instructions or code. Exactly one section must be selected
    as bootable, usually the one containing the instructions and data to
    load the bootloader.

  - A "SECTION" must be immediatelly followed by a "TAG" instruction.
  - The "TAG" instruction has the following semantics:

      TAG [LAST]
      - LAST               :: Flag denoting the last section in the file

  - After a "TAG" unstruction, any of the following instructions may follow
    in any order and any quantity:

      NOOP
      - This instruction does nothing

      LOAD     u32_address string_filename
      - Instructs the BootROM to load file pointed by "string_filename" onto
	address "u32_address".

      LOAD IVT u32_address u32_IVT_entry_point
      - Crafts and loads IVT onto address "u32_address" with the entry point
	of u32_IVT_entry_point.
      - i.MX28-specific instruction!

      LOAD DCD u32_address u32_DCD_block_ID
      - Loads the DCD block with ID "u32_DCD_block_ID" onto address
	"u32_address" and executes the contents of this DCD block
      - i.MX28-specific instruction!

      FILL u32_address u32_pattern u32_length
      - Starts to write memory from addres "u32_address" with a pattern
	specified by "u32_pattern". Writes exactly "u32_length" bytes of the
	pattern.

      JUMP [HAB] u32_address [u32_r0_arg]
      - Jumps onto memory address specified by "u32_address" by setting this
	address in PT. The BootROM will pass the "u32_r0_arg" value in ARM
	register "r0" to the executed code if this option is specified.
	Otherwise, ARM register "r0" will default to value 0x00000000. The
	optional "HAB" flag is i.MX28-specific flag turning on the HAB boot.

      CALL [HAB] u32_address [u32_r0_arg]
      - See JUMP instruction above, as the operation is exactly the same with
	one difference. The CALL instruction does allow returning into the
	BootROM from the executed code. U-Boot makes use of this in it's SPL
	code.

      MODE string_mode
      - Restart the CPU and start booting from device specified by the
	"string_mode" argument. The "string_mode" differs for each CPU
	and can be:
	 i.MX23, string_mode = USB/I2C/SPI1_FLASH/SPI2_FLASH/NAND_BCH
			       JTAG/SPI3_EEPROM/SD_SSP0/SD_SSP1
	 i.MX28, string_mode = USB/I2C/SPI2_FLASH/SPI3_FLASH/NAND_BCH
			       JTAG/SPI2_EEPROM/SD_SSP0/SD_SSP1

  - An optional "DCD" blocks can be added at the begining of the configuration
    file. Note that the DCD is only supported on i.MX28.
    - The DCD blocks must be inserted before the first "section" in the
      configuration file.
    - The DCD block has the following semantics:

	DCD u32_DCD_block_ID
	- u32_DCD_block_ID	:: The ID number of the DCD block, must match
				   the ID number used by "LOAD DCD" instruction.

    - The DCD block must be followed by one of the following instructions. All
      of the instructions operate either on 1, 2 or 4 bytes. This is selected by
      the 'n' suffix of the instruction:

	WRITE.n u32_address u32_value
	- Write the "u32_value" to the "u32_address" address.

	ORR.n u32_address u32_value
	- Read the "u32_address", perform a bitwise-OR with the "u32_value" and
	  write the result back to "u32_address".

	ANDC.n u32_address u32_value
	- Read the "u32_address", perform a bitwise-AND with the complement of
	  "u32_value" and write the result back to "u32_address".

	EQZ.n u32_address u32_count
	- Read the "u32_address" at most "u32_count" times and test if the value
	  read is zero. If it is, break the loop earlier.

	NEZ.n u32_address u32_count
	- Read the "u32_address" at most "u32_count" times and test if the value
	  read is non-zero. If it is, break the loop earlier.

	EQ.n u32_address u32_mask
	- Read the "u32_address" in a loop and test if the result masked with
	  "u32_mask" equals the "u32_mask". If the values are equal, break the
	  reading loop.

	NEQ.n u32_address u32_mask
	- Read the "u32_address" in a loop and test if the result masked with
	  "u32_mask" does not equal the "u32_mask". If the values are not equal,
	  break the reading loop.

	NOOP
	- This instruction does nothing.

- If the verbose output from the BootROM is enabled, the BootROM will produce a
  letter on the Debug UART for each instruction it started processing. Here is a
  mapping between the above instructions and the BootROM verbose output:

   H -- SB Image header loaded
   T -- TAG instruction
   N -- NOOP instruction
   L -- LOAD instruction
   F -- FILL instruction
   J -- JUMP instruction
   C -- CALL instruction
   M -- MODE instruction

Usage -- verifying image:
=========================

The mxsimage can also verify and dump contents of an image. Use the following
syntax to verify and dump contents of an image:

 mkimage -l <input bootstream file>

This will output all the information from the SB image header and all the
instructions contained in the SB image. It will also check if the various
checksums in the SB image are correct.
