1*4dd83490SHeiko SchocherWith this approach, we don't need the UBL any more on DaVinci boards. 2*4dd83490SHeiko SchocherA "make boardname" will compile a u-boot.ubl, with UBL Header, which is 3*4dd83490SHeiko Schocherneeded for the RBL to find the "UBL", which actually is a UBL-compatible 4*4dd83490SHeiko Schocherheader, nand spl code and u-boot code. 5*4dd83490SHeiko Schocher 6*4dd83490SHeiko Schocher 7*4dd83490SHeiko SchocherAs the RBL uses another read function as the "standard" u-boot, 8*4dd83490SHeiko Schocherwe need a command, which switches between this two read/write 9*4dd83490SHeiko Schocherfunctions, so we can write the UBL header and the spl 10*4dd83490SHeiko Schochercode in a format, which the RBL can read. This is realize 11*4dd83490SHeiko Schocher(at the moment in board specific code) in the u-boot command 12*4dd83490SHeiko Schochernandrbl 13*4dd83490SHeiko Schocher 14*4dd83490SHeiko Schochernandrbl without arguments returns actual mode (rbl or uboot). 15*4dd83490SHeiko Schocherwith nandrbl mode (mode = "rbl" or "uboot") you can switch 16*4dd83490SHeiko Schocherbetween the two NAND read/write modes. 17*4dd83490SHeiko Schocher 18*4dd83490SHeiko Schocher 19*4dd83490SHeiko SchocherTo set up mkimage you need a config file for mkimage, example: 20*4dd83490SHeiko Schocherboard/ait/cam_enc_4xx/ublimage.cfg 21*4dd83490SHeiko Schocher 22*4dd83490SHeiko SchocherFor information about the configuration please see: 23*4dd83490SHeiko Schocherdoc/README.ublimage 24*4dd83490SHeiko Schocher 25*4dd83490SHeiko SchocherExample for the cam_enc_4xx board: 26*4dd83490SHeiko SchocherOn the cam_enc_4xx board we have a NAND flash with blocksize = 0x20000 and 27*4dd83490SHeiko Schocherpagesize = 0x800, so the u-boot.ubl image (which you get with: 28*4dd83490SHeiko Schocher"make cam_enc_4xx") looks like this: 29*4dd83490SHeiko Schocher 30*4dd83490SHeiko Schocher00000000 00 ed ac a1 20 00 00 00 06 00 00 00 05 00 00 00 |.... ...........| 31*4dd83490SHeiko Schocher00000010 00 00 00 00 20 00 00 00 ff ff ff ff ff ff ff ff |.... ...........| 32*4dd83490SHeiko Schocher00000020 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| 33*4dd83490SHeiko Schocher* 34*4dd83490SHeiko Schocher00000800 14 00 00 ea 14 f0 9f e5 10 f0 9f e5 0c f0 9f e5 |................| 35*4dd83490SHeiko Schocher00000810 08 f0 9f e5 04 f0 9f e5 00 f0 9f e5 04 f0 1f e5 |................| 36*4dd83490SHeiko Schocher00000820 00 01 00 00 78 56 34 12 78 56 34 12 78 56 34 12 |....xV4.xV4.xV4.| 37*4dd83490SHeiko Schocher[...] 38*4dd83490SHeiko Schocher* 39*4dd83490SHeiko Schocher00001fe0 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff |................| 40*4dd83490SHeiko Schocher00001ff0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| 41*4dd83490SHeiko Schocher* 42*4dd83490SHeiko Schocher00003800 14 00 00 ea 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 |................| 43*4dd83490SHeiko Schocher00003810 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 |................| 44*4dd83490SHeiko Schocher00003820 80 01 08 81 e0 01 08 81 40 02 08 81 a0 02 08 81 |........@.......| 45*4dd83490SHeiko Schocher 46*4dd83490SHeiko SchocherIn the first "page" of the image, we have the UBL Header, needed for 47*4dd83490SHeiko Schocherthe RBL to find the spl code. 48*4dd83490SHeiko Schocher 49*4dd83490SHeiko SchocherThe spl code starts in the second "page" of the image, with a size 50*4dd83490SHeiko Schocherdefined by: 51*4dd83490SHeiko Schocher 52*4dd83490SHeiko Schocher#define CONFIG_SYS_NROF_PAGES_NAND_SPL 6 53*4dd83490SHeiko Schocher 54*4dd83490SHeiko SchocherAfter the spl code, there comes the "real" u-boot code 55*4dd83490SHeiko Schocher@ (6 + 1) * pagesize = 0x3800 56*4dd83490SHeiko Schocher 57*4dd83490SHeiko Schocher------------------------------------------------------------------------ 58*4dd83490SHeiko SchocherSetting up spl code: 59*4dd83490SHeiko Schocher 60*4dd83490SHeiko Schocher/* 61*4dd83490SHeiko Schocher * RBL searches from Block n (n = 1..24) 62*4dd83490SHeiko Schocher * so we can define, how many UBL Headers 63*4dd83490SHeiko Schocher * we write before the real spl code 64*4dd83490SHeiko Schocher */ 65*4dd83490SHeiko Schocher#define CONFIG_SYS_NROF_UBL_HEADER 5 66*4dd83490SHeiko Schocher#define CONFIG_SYS_NROF_PAGES_NAND_SPL 6 67*4dd83490SHeiko Schocher 68*4dd83490SHeiko Schocher#define CONFIG_SYS_NAND_U_BOOT_OFFS ((CONFIG_SYS_NROF_UBL_HEADER * \ 69*4dd83490SHeiko Schocher CONFIG_SYS_NAND_BLOCK_SIZE) + \ 70*4dd83490SHeiko Schocher (CONFIG_SYS_NROF_PAGES_NAND_SPL) * \ 71*4dd83490SHeiko Schocher CONFIG_SYS_NAND_PAGE_SIZE) 72*4dd83490SHeiko Schocher------------------------------------------------------------------------ 73*4dd83490SHeiko Schocher 74*4dd83490SHeiko SchocherBurning into NAND: 75*4dd83490SHeiko Schocher 76*4dd83490SHeiko Schocherstep 1: 77*4dd83490SHeiko SchocherThe RBL searches from Block n ( n = 1..24) on page 0 for valid UBL 78*4dd83490SHeiko SchocherHeaders, so you have to burn the UBL header page from the u-boot.ubl 79*4dd83490SHeiko Schocherimage to the blocks, you want to have the UBL header. 80*4dd83490SHeiko Schocher!! Don;t forget to switch to rbl nand read/write functions with 81*4dd83490SHeiko Schocher "nandrbl rbl" 82*4dd83490SHeiko Schocher 83*4dd83490SHeiko Schocherstep 2: 84*4dd83490SHeiko SchocherYou need to setup in the ublimage.cfg, where the RBL can find the spl 85*4dd83490SHeiko Schochercode, and how big it is. 86*4dd83490SHeiko Schocher 87*4dd83490SHeiko Schocher!! RBL always starts reading from page 0 !! 88*4dd83490SHeiko Schocher 89*4dd83490SHeiko SchocherFor the AIT board, we have: 90*4dd83490SHeiko SchocherPAGES 6 91*4dd83490SHeiko SchocherSTART_BLOCK 5 92*4dd83490SHeiko Schocher 93*4dd83490SHeiko SchocherSo we need to copy the spl code to block 5 page 0 94*4dd83490SHeiko Schocher!! Don;t forget to switch to rbl nand read/write functions with 95*4dd83490SHeiko Schocher "nandrbl rbl" 96*4dd83490SHeiko Schocher 97*4dd83490SHeiko Schocherstep 3: 98*4dd83490SHeiko SchocherYou need to copy the u-boot image to the block/page 99*4dd83490SHeiko Schocherwhere the spl code reads it (CONFIG_SYS_NAND_U_BOOT_OFFS) 100*4dd83490SHeiko Schocher!! Don;t forget to switch to rbl nand read/write functions with 101*4dd83490SHeiko Schocher "nandrbl uboot", which is default. 102*4dd83490SHeiko Schocher 103*4dd83490SHeiko SchocherOn the cam_enc_4xx board it is: 104*4dd83490SHeiko Schocher#define CONFIG_SYS_NAND_U_BOOT_OFFS (0xc0000) 105*4dd83490SHeiko Schocher 106*4dd83490SHeiko Schocher-> this results in following NAND usage on the cam_enc_4xx board: 107*4dd83490SHeiko Schocher 108*4dd83490SHeiko Schocheraddr 109*4dd83490SHeiko Schocher 110*4dd83490SHeiko Schocher20000 possible UBL Header 111*4dd83490SHeiko Schocher40000 possible UBL Header 112*4dd83490SHeiko Schocher60000 possible UBL Header 113*4dd83490SHeiko Schocher80000 possilbe UBL Header 114*4dd83490SHeiko Schochera0000 spl code 115*4dd83490SHeiko Schocherc0000 u-boot code 116*4dd83490SHeiko Schocher 117*4dd83490SHeiko SchocherThe above steps are executeed through the following environment vars: 118*4dd83490SHeiko Schocher(using 80000 as address for the UBL header) 119*4dd83490SHeiko Schocher 120*4dd83490SHeiko Schocherpagesz=800 121*4dd83490SHeiko Schocheruboot=/tftpboot/cam_enc_4xx/u-boot.ubl 122*4dd83490SHeiko Schocherload=tftp 80000000 ${uboot} 123*4dd83490SHeiko Schocherwriteheader nandrbl rbl;nand erase 80000 ${pagesz};nand write 80000000 80000 ${pagesz};nandrbl uboot 124*4dd83490SHeiko Schocherwritenand_spl nandrbl rbl;nand erase a0000 3000;nand write 80000800 a0000 3000;nandrbl uboot 125*4dd83490SHeiko Schocherwriteuboot nandrbl uboot;nand erase c0000 5d000;nand write 80003800 c0000 5d000 126*4dd83490SHeiko Schocherupdate=run load writeheader writenand_spl writeuboot 127*4dd83490SHeiko Schocher 128*4dd83490SHeiko SchocherIf you do a "run load update" u-boot, spl + ubl header 129*4dd83490SHeiko Schocherare magically updated ;-) 130*4dd83490SHeiko Schocher 131*4dd83490SHeiko SchocherNote: 132*4dd83490SHeiko Schocher- There seem to be a bug in the RBL code (at least on my HW), 133*4dd83490SHeiko Schocher In the UBL block, I can set the page to values != 0, so it 134*4dd83490SHeiko Schocher is possible to burn step 1 and step 2 in one step into the 135*4dd83490SHeiko Schocher flash, but the RBL ignores the page settings, so I have to 136*4dd83490SHeiko Schocher burn the UBL Header to a page 0 and the spl code to 137*4dd83490SHeiko Schocher a page 0 ... :-( 138*4dd83490SHeiko Schocher- If we make the nand read/write functions in the RBL equal to 139*4dd83490SHeiko Schocher the functions in u-boot (as I have no RBL code, it is only 140*4dd83490SHeiko Schocher possible in u-boot), we could burn the complete image in 141*4dd83490SHeiko Schocher one step ... that would be nice ... 142