------------------------------------------------------------------
Freescale PBL(pre-boot loader) Boot Image generation using mkimage
------------------------------------------------------------------

The CoreNet SoC's can boot directly from eSPI FLASH, SD/MMC and
NAND, etc. These SoCs use PBL to load RCW and/or pre-initialization
instructions. For more details refer section 5 Pre-boot loader
specifications of reference manual P3041RM/P4080RM/P5020RM at link:
http://www.freescale.com/webapp/search/Serp.jsp?Reference+Manuals

Building PBL Boot Image and boot steps
--------------------------------------

1. Building PBL Boot Image.
   The default Image is u-boot.pbl.

   For eSPI boot(available on P2041/P3041/P4080/P5020/P5040/T4240):
	To build the eSPI boot image:
	make <board_name>_SPIFLASH

   For SD boot(available on P2041/P3041/P4080/P5020/P5040/T4240):
	To build the SD boot image:
	make <board_name>_SDCARD

   For Nand boot(available on P2041/P3041/P5020/P5040):
	To build the NAND boot image:
	make <board_name>_NAND


2. pblimage support available with mkimage utility will generate Freescale PBL
boot image that can be flashed on the board eSPI flash, SD/MMC and NAND.
Following steps describe it in detail.

	1). Boot from eSPI flash
	Write u-boot.pbl to eSPI flash from offset 0x0.
	for ex in u-boot:
	=>tftp 100000 u-boot.pbl
	=>sf probe 0
	=>sf erase 0 100000
	=>sf write 100000 0 $filesize
	Change SW1[1:5] = off off on off on.

	2). Boot from SD/MMC
	Write u-boot.pbl to SD/MMC from offset 0x1000.
	for ex in u-boot:
	=>tftp 100000 u-boot.pbl
	=>mmcinfo
	=>mmc write 100000 8 441
	Change SW1[1:5] = off off on on off.

	3). Boot from Nand
	Write u-boot.pbl to Nand from offset 0x0.
	for ex in u-boot:
	=>tftp 100000 u-boot.pbl
	=>nand info
	=>nand erase 0 100000
	=>nand write 100000 0 $filesize
	Change SW1[1:5] = off on off off on
	Change SW7[1:4] = on off off on

Board specific configuration file specifications:
------------------------------------------------
1. Configuration files rcw.cfg and pbi.cfg must present in the
board/freescale/<BOARD>/ directory, rcw.cfg is for RCW, pbi.cfg is for
PBI instructions. File name must not be changed since they are used
in Makefile.
2. These files can have empty lines and lines starting with "#" as first
character to put comments

Typical example of rcw.cfg file:
-----------------------------------

#PBL preamble and RCW header
aa55aa55 010e0100
#64 bytes RCW data
4c580000 00000000 18185218 0000cccc
40464000 3c3c2000 58000000 61000000
00000000 00000000 00000000 008b6000
00000000 00000000 00000000 00000000

Typical example of pbi.cfg file:
-----------------------------------

#PBI commands
#Initialize CPC1
09010000 00200400
09138000 00000000
091380c0 00000100
09010100 00000000
09010104 fff0000b
09010f00 08000000
09010000 80000000
#Configure LAW for CPC1
09000d00 00000000
09000d04 fff00000
09000d08 81000013
09000010 00000000
09000014 ff000000
09000018 81000000
#Initialize eSPI controller
09110000 80000403
09110020 2d170008
09110024 00100008
09110028 00100008
0911002c 00100008
#Flush PBL data
09138000 00000000
091380c0 00000000

------------------------------------------------
Author: Shaohui Xie<Shaohui.Xie@freescale.com>
