xref: /openbmc/u-boot/doc/README.ublimage (revision 04e5ae793153e74d682f2d0e297e58fd75366c8f)
1*7816f2cfSHeiko Schocher---------------------------------------------
2*7816f2cfSHeiko SchocherUBL image Boot Image generation using mkimage
3*7816f2cfSHeiko Schocher---------------------------------------------
4*7816f2cfSHeiko Schocher
5*7816f2cfSHeiko SchocherThis document describes how to set up an U-Boot image that can be directly
6*7816f2cfSHeiko Schocherbooted by a DaVinci processor via NAND boot mode, using an UBL header,
7*7816f2cfSHeiko Schocherbut without need for UBL.
8*7816f2cfSHeiko Schocher
9*7816f2cfSHeiko SchocherFor more details see section 11.2 "ARM ROM Boot Modes" of
10*7816f2cfSHeiko Schocherhttp://focus.ti.com/lit/ug/sprufg5a/sprufg5a.pdf
11*7816f2cfSHeiko Schocher
12*7816f2cfSHeiko SchocherCommand syntax:
13*7816f2cfSHeiko Schocher--------------
14*7816f2cfSHeiko Schocher./tools/mkimage -l <u-boot_file>
15*7816f2cfSHeiko Schocher		to list the UBL image file details
16*7816f2cfSHeiko Schocher
17*7816f2cfSHeiko Schocher./tools/mkimage -T ublimage \
18*7816f2cfSHeiko Schocher		-n <board specific configuration file> \
19*7816f2cfSHeiko Schocher		-d <u-boot binary>  <output image file>
20*7816f2cfSHeiko Schocher
21*7816f2cfSHeiko SchocherFor example, for the davinci dm365evm board:
22*7816f2cfSHeiko Schocher./tools/mkimage -n ./board/davinci/dm365evm/ublimage.cfg \
23*7816f2cfSHeiko Schocher		-T ublimage \
24*7816f2cfSHeiko Schocher		-d u-boot-nand.bin u-boot.ubl
25*7816f2cfSHeiko Schocher
26*7816f2cfSHeiko SchocherYou can generate the image directly when you compile u-boot with:
27*7816f2cfSHeiko Schocher
28*7816f2cfSHeiko Schocher$ make u-boot.ubl
29*7816f2cfSHeiko Schocher
30*7816f2cfSHeiko SchocherThe output image can be flashed into the NAND.
31*7816f2cfSHeiko Schocher
32*7816f2cfSHeiko SchocherPlease check the DaVinci documentation for further details.
33*7816f2cfSHeiko Schocher
34*7816f2cfSHeiko SchocherBoard specific configuration file specifications:
35*7816f2cfSHeiko Schocher-------------------------------------------------
36*7816f2cfSHeiko Schocher1. This file must present in the $(BOARDDIR) and the name should be
37*7816f2cfSHeiko Schocher	ublimage.cfg (since this is used in Makefile).
38*7816f2cfSHeiko Schocher2. This file can have empty lines and lines starting with "#" as first
39*7816f2cfSHeiko Schocher	character to put comments.
40*7816f2cfSHeiko Schocher3. This file can have configuration command lines as mentioned below,
41*7816f2cfSHeiko Schocher	any other information in this file is treated as invalid.
42*7816f2cfSHeiko Schocher
43*7816f2cfSHeiko SchocherConfiguration command line syntax:
44*7816f2cfSHeiko Schocher---------------------------------
45*7816f2cfSHeiko Schocher1. Each command line must have two strings, first one command or address
46*7816f2cfSHeiko Schocher	and second one data string
47*7816f2cfSHeiko Schocher2. Following are the valid command strings and associated data strings:-
48*7816f2cfSHeiko Schocher	Command string		data string
49*7816f2cfSHeiko Schocher	--------------		-----------
50*7816f2cfSHeiko Schocher	MODE			UBL special mode, on of:
51*7816f2cfSHeiko Schocher				safe
52*7816f2cfSHeiko Schocher				Example:
53*7816f2cfSHeiko Schocher				MODE	safe
54*7816f2cfSHeiko Schocher
55*7816f2cfSHeiko Schocher	ENTRY			Entry point address for the user
56*7816f2cfSHeiko Schocher				bootloader (absolute address) = TEXT_BASE
57*7816f2cfSHeiko Schocher				nand_spl loader.
58*7816f2cfSHeiko Schocher				Example:
59*7816f2cfSHeiko Schocher				ENTRY	0x00000020
60*7816f2cfSHeiko Schocher
61*7816f2cfSHeiko Schocher	PAGES			Number of pages (size of user bootloader
62*7816f2cfSHeiko Schocher				in number of pages)
63*7816f2cfSHeiko Schocher				Example:
64*7816f2cfSHeiko Schocher				PAGES	27
65*7816f2cfSHeiko Schocher
66*7816f2cfSHeiko Schocher	START_BLOCK		Block number where user bootloader is present
67*7816f2cfSHeiko Schocher				Example:
68*7816f2cfSHeiko Schocher				START_BLOCK	5
69*7816f2cfSHeiko Schocher
70*7816f2cfSHeiko Schocher	START_PAGE		Page number where user bootloader is present
71*7816f2cfSHeiko Schocher				(for RBL always 0)
72*7816f2cfSHeiko Schocher				Example:
73*7816f2cfSHeiko Schocher				START_PAGE	0
74*7816f2cfSHeiko Schocher
75*7816f2cfSHeiko Schocher------------------------------------------------
76*7816f2cfSHeiko Schocher
77*7816f2cfSHeiko SchocherStructure of the u-boot.ubl binary:
78*7816f2cfSHeiko Schocher
79*7816f2cfSHeiko Schochercompile steps:
80*7816f2cfSHeiko Schocher
81*7816f2cfSHeiko Schocher1) nand_spl code compile, with pad_to = (TEXT_BASE +
82*7816f2cfSHeiko Schocher   (CONFIG_SYS_NROF_PAGES_NAND_SPL * pagesize))
83*7816f2cfSHeiko Schocher   Example: cam_enc_4xx pad_to = 0x20 + (6 * 0x800) = 0x3020 = 12320
84*7816f2cfSHeiko Schocher   -> u-boot-spl-16k.bin
85*7816f2cfSHeiko Schocher
86*7816f2cfSHeiko Schocher   !! TEXT_BASE = 0x20, as the RBL starts at 0x20
87*7816f2cfSHeiko Schocher
88*7816f2cfSHeiko Schocher2) compile u-boot.bin ("normal" u-boot)
89*7816f2cfSHeiko Schocher   -> u-boot.bin
90*7816f2cfSHeiko Schocher
91*7816f2cfSHeiko Schocher3) create u-boot-nand.bin = u-boot-spl-16k.bin + u-boot.bin
92*7816f2cfSHeiko Schocher
93*7816f2cfSHeiko Schocher4) create u-boot.ubl, size = 1 page size NAND
94*7816f2cfSHeiko Schocher   create UBL header and paste it before u-boot.bin
95*7816f2cfSHeiko Schocher
96*7816f2cfSHeiko SchocherThis steps are done automagically if you do a "make all"
97*7816f2cfSHeiko Schocher
98*7816f2cfSHeiko Schocher-> You get an u-boot.ubl binary, which you can flash
99*7816f2cfSHeiko Schocher   into your NAND.
100*7816f2cfSHeiko Schocher
101*7816f2cfSHeiko SchocherStructure of this binary (Example for the cam_enc_4xx board with a NAND
102*7816f2cfSHeiko Schocherpage size = 0x800):
103*7816f2cfSHeiko Schocher
104*7816f2cfSHeiko Schocheroffset :    0x00000 | 0x800	  | 0x3800
105*7816f2cfSHeiko Schochercontent:    UBL     | nand_spl	  | u-boot code
106*7816f2cfSHeiko Schocher	    Header  | code	  |
107*7816f2cfSHeiko Schocher
108*7816f2cfSHeiko SchocherThe NAND layout looks for example like this:
109*7816f2cfSHeiko Schocher
110*7816f2cfSHeiko Schocher(Example for the cam_enc_4xx board with a NAND page size = 0x800, block
111*7816f2cfSHeiko Schochersize = 0x20000 and CONFIG_SYS_NROF_UBL_HEADER 5):
112*7816f2cfSHeiko Schocher
113*7816f2cfSHeiko Schocheroffset :    0x80000 | 0xa0000	  | 0xa3000
114*7816f2cfSHeiko Schochercontent:    UBL     | nand_spl	  | u-boot code
115*7816f2cfSHeiko Schocher	    Header  | code	  |
116*7816f2cfSHeiko Schocher	    ^	      ^
117*7816f2cfSHeiko Schocher	    ^	      0xa0000 = CONFIG_SYS_NROF_UBL_HEADER * 0x20000
118*7816f2cfSHeiko Schocher	    ^
119*7816f2cfSHeiko Schocher	    0x80000 = Block 4 * 0x20000
120*7816f2cfSHeiko Schocher
121*7816f2cfSHeiko SchocherIf the cpu starts in NAND boot mode, it checks the UBL descriptor
122*7816f2cfSHeiko Schocherstarting with block 1 (page 0).  When a valid UBL signature is found,
123*7816f2cfSHeiko Schocherthe corresponding block number (from 1 to 24) is written to the last 32
124*7816f2cfSHeiko Schocherbits of ARM internal memory (0x7ffc-0x8000).  This feature is provided
125*7816f2cfSHeiko Schocheras a basic debug mechanism.  If not found, it continues with block 2
126*7816f2cfSHeiko Schocher... last possible block is 24
127*7816f2cfSHeiko Schocher
128*7816f2cfSHeiko SchocherIf a valid UBL descriptor is found, the UBL descriptor is read and
129*7816f2cfSHeiko Schocherprocessed.  The descriptor gives the information required for loading
130*7816f2cfSHeiko Schocherand control transfer to the nand_spl code.  The nand_spl code is then
131*7816f2cfSHeiko Schocherread and processed.
132*7816f2cfSHeiko Schocher
133*7816f2cfSHeiko SchocherOnce the user-specified start-up conditions are set, the RBL copies the
134*7816f2cfSHeiko Schochernand_spl into ARM internal RAM, starting at address 0x0000: 0020.
135*7816f2cfSHeiko Schocher							    ^^^^
136*7816f2cfSHeiko Schocher
137*7816f2cfSHeiko SchocherThe nand_spl code itself now does necessary intializations, and at least,
138*7816f2cfSHeiko Schochercopies the u-boot code from NAND into RAM, and jumps to it ...
139*7816f2cfSHeiko Schocher
140*7816f2cfSHeiko Schocher------------------------------------------------
141*7816f2cfSHeiko SchocherAuthor: Heiko Schocher <hs@denx.de>
142