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