103efcb05SHeiko SchocherSummary 203efcb05SHeiko Schocher======= 303efcb05SHeiko SchocherThe README is for the boot procedure on the ipam390 board 403efcb05SHeiko Schocher 503efcb05SHeiko SchocherIn the context of U-Boot, the board is booted in three stages. The initial 603efcb05SHeiko Schocherbootloader which executes upon reset is the ROM Boot Loader (RBL) and sits 703efcb05SHeiko Schocherin the internal ROM. The RBL initializes the internal memory and then 803efcb05SHeiko Schocherdepending on the exact board and pin configurations will initialize another 903efcb05SHeiko Schochercontroller (such as NAND) to continue the boot process by loading 1003efcb05SHeiko Schocherthe secondary program loader (SPL). The SPL will initialize the system 1103efcb05SHeiko Schocherfurther (some clocks, SDRAM). As on this board is used the falcon boot 1203efcb05SHeiko Schochermode, now 2 ways are possible depending on the GPIO 7_14 input pin, 1303efcb05SHeiko Schocherconnected with the "soft reset switch" 1403efcb05SHeiko Schocher 1503efcb05SHeiko SchocherIf this pin is logical 1 (high level): 1603efcb05SHeiko Schocherspl code starts the kernel image without delay 1703efcb05SHeiko Schocher 1803efcb05SHeiko SchocherIf this pin is logical 0 (low level): 1903efcb05SHeiko Schocherspl code starts the u-boot image 2003efcb05SHeiko Schocher 2103efcb05SHeiko SchocherAIS is an image format defined by TI for the images that are to be loaded 2203efcb05SHeiko Schocherto memory by the RBL. The image is divided into a series of sections and 2303efcb05SHeiko Schocherthe image's entry point is specified. Each section comes with meta data 2403efcb05SHeiko Schocherlike the target address the section is to be copied to and the size of the 2503efcb05SHeiko Schochersection, which is used by the RBL to load the image. At the end of the 2603efcb05SHeiko Schocherimage the RBL jumps to the image entry point. The AIS format allows for 2703efcb05SHeiko Schocherother things such as programming the clocks and SDRAM if the header is 2803efcb05SHeiko Schocherprogrammed for it. We do not take advantage of this and instead use SPL as 2903efcb05SHeiko Schocherit allows for additional flexibility (run-time detect of board revision, 3003efcb05SHeiko Schocherloading the next image from a different media, etc). 3103efcb05SHeiko Schocher 3203efcb05SHeiko SchocherCompilation 3303efcb05SHeiko Schocher=========== 34*6de80f21SSimon Glassrun "tools/buildman/buildman -k ipam390" in the u-boot source tree. 35*6de80f21SSimon GlassOnce this build completes you will have a ../current/ipam390/u-boot.ais file 36*6de80f21SSimon Glassthat needs to be written to the nand flash. 3703efcb05SHeiko Schocher 3803efcb05SHeiko SchocherFlashing the images to NAND 3903efcb05SHeiko Schocher========================== 4003efcb05SHeiko SchocherThe AIS image can be written to NAND flash using the following commands. 4103efcb05SHeiko SchocherAssuming that the network is configured and enabled and the u-boot.ais file 4203efcb05SHeiko Schocheris tftp'able. 4303efcb05SHeiko Schocher 4403efcb05SHeiko SchocherU-Boot > print upd_uboot 4503efcb05SHeiko Schocherupd_uboot=tftp c0000000 ${u-boot};nand erase.part u-boot;nand write c0000000 20000 ${filesize} 4603efcb05SHeiko SchocherU-Boot > 4703efcb05SHeiko SchocherU-Boot > run upd_uboot 4803efcb05SHeiko SchocherUsing DaVinci-EMAC device 4903efcb05SHeiko SchocherTFTP from server 192.168.1.1; our IP address is 192.168.20.71 5003efcb05SHeiko SchocherFilename '/tftpboot/ipam390/u-boot.ais'. 5103efcb05SHeiko SchocherLoad address: 0xc0000000 5203efcb05SHeiko SchocherLoading: ################################## 5303efcb05SHeiko Schocher 1.5 MiB/s 5403efcb05SHeiko Schocherdone 5503efcb05SHeiko SchocherBytes transferred = 493716 (78894 hex) 5603efcb05SHeiko Schocher 5703efcb05SHeiko SchocherNAND erase.part: device 0 offset 0x20000, size 0x160000 5803efcb05SHeiko SchocherErasing at 0x160000 -- 100% complete. 5903efcb05SHeiko SchocherOK 6003efcb05SHeiko Schocher 6103efcb05SHeiko SchocherNAND write: device 0 offset 0x20000, size 0x78894 6203efcb05SHeiko Schocher 493716 bytes written: OK 6303efcb05SHeiko SchocherU-Boot > 6403efcb05SHeiko Schocher 6503efcb05SHeiko SchocherRecovery 6603efcb05SHeiko Schocher======== 6703efcb05SHeiko Schocher 6803efcb05SHeiko SchocherIn the case of a "bricked" board, you need to use the TI tools found 6903efcb05SHeiko Schocherhere[1] to create an uboot-uart-ais.bin file 7003efcb05SHeiko Schocher 7103efcb05SHeiko Schocher- cd to the u-boot source tree 7203efcb05SHeiko Schocher 7303efcb05SHeiko Schocher- compile the u-boot for the ipam390 board: 74*6de80f21SSimon Glass$ tools/buildman/buildman -k ipam390 7503efcb05SHeiko Schocher 7603efcb05SHeiko Schocher -> Now we shall have u-boot.bin 7703efcb05SHeiko Schocher 7803efcb05SHeiko Schocher- Create u-boot-uart-ais.bin 79*6de80f21SSimon Glass$ mono HexAIS_OMAP-L138.exe -entrypoint 0xC1080000 -ini ipam390-ais-uart.cfg \ 80*6de80f21SSimon Glass -o ../current/ipam390/uboot-uart-ais.bin ./u-boot.bin@0xC1080000; 8103efcb05SHeiko Schocher 8203efcb05SHeiko SchocherNote: The ipam390-ais-uart.cfg is found in the board directory 8303efcb05SHeiko Schocherfor the ipam390 board, u-boot:/board/Barix/ipam390/ipam390-ais-uart.cfg 8403efcb05SHeiko Schocher 8503efcb05SHeiko Schocher- We can now run bootloader on IPAM390 via UART using the command below: 8603efcb05SHeiko Schocher 8703efcb05SHeiko Schocher$ mono ./slh_OMAP-L138.exe -waitForDevice -v -p /dev/tty.UC-232AC uboot-uart-ais.bin 8803efcb05SHeiko SchocherNOTE: Do not cancel the command execution! The command takes 20+ seconds 8903efcb05SHeiko Schocherto upload u-boot over serial and run it! 9003efcb05SHeiko SchocherOutcome: 9103efcb05SHeiko SchocherWaiting for the OMAP-L138... 9203efcb05SHeiko Schocher(AIS Parse): Read magic word 0x41504954. 9303efcb05SHeiko Schocher(AIS Parse): Waiting for BOOTME... (power on or reset target now) 9403efcb05SHeiko Schocher(AIS Parse): BOOTME received! 9503efcb05SHeiko Schocher(AIS Parse): Performing Start-Word Sync... 9603efcb05SHeiko Schocher(AIS Parse): Performing Ping Opcode Sync... 9703efcb05SHeiko Schocher(AIS Parse): Processing command 0: 0x5853590D. 9803efcb05SHeiko Schocher(AIS Parse): Performing Opcode Sync... 9903efcb05SHeiko Schocher(AIS Parse): Executing function... 10003efcb05SHeiko Schocher(AIS Parse): Processing command 1: 0x5853590D. 10103efcb05SHeiko Schocher(AIS Parse): Performing Opcode Sync... 10203efcb05SHeiko Schocher(AIS Parse): Executing function... 10303efcb05SHeiko Schocher(AIS Parse): Processing command 2: 0x5853590D. 10403efcb05SHeiko Schocher(AIS Parse): Performing Opcode Sync... 10503efcb05SHeiko Schocher(AIS Parse): Executing function... 10603efcb05SHeiko Schocher(AIS Parse): Processing command 3: 0x5853590D. 10703efcb05SHeiko Schocher(AIS Parse): Performing Opcode Sync... 10803efcb05SHeiko Schocher(AIS Parse): Executing function... 10903efcb05SHeiko Schocher(AIS Parse): Processing command 4: 0x5853590D. 11003efcb05SHeiko Schocher(AIS Parse): Performing Opcode Sync... 11103efcb05SHeiko Schocher(AIS Parse): Executing function... 11203efcb05SHeiko Schocher(AIS Parse): Processing command 5: 0x58535901. 11303efcb05SHeiko Schocher(AIS Parse): Performing Opcode Sync... 11403efcb05SHeiko Schocher(AIS Parse): Loading section... 11503efcb05SHeiko Schocher(AIS Parse): Loaded 326516-Byte section to address 0xC1080000. 11603efcb05SHeiko Schocher(AIS Parse): Processing command 6: 0x58535906. 11703efcb05SHeiko Schocher(AIS Parse): Performing Opcode Sync... 11803efcb05SHeiko Schocher(AIS Parse): Performing jump and close... 11903efcb05SHeiko Schocher(AIS Parse): AIS complete. Jump to address 0xC1080000. 12003efcb05SHeiko Schocher(AIS Parse): Waiting for DONE... 12103efcb05SHeiko Schocher(AIS Parse): Boot completed successfully. 12203efcb05SHeiko Schocher 12303efcb05SHeiko SchocherOperation completed successfully. 12403efcb05SHeiko Schocher 12503efcb05SHeiko SchocherFalcon Bootmode (boot linux without booting U-Boot) 12603efcb05SHeiko Schocher=================================================== 12703efcb05SHeiko Schocher 12803efcb05SHeiko SchocherThe Falcon Mode extends this way allowing to start the Linux kernel directly 12903efcb05SHeiko Schocherfrom SPL. A new command is added to U-Boot to prepare the parameters that SPL 13003efcb05SHeiko Schochermust pass to the kernel, using ATAGS or Device Tree. 13103efcb05SHeiko Schocher 13203efcb05SHeiko SchocherIn normal mode, these parameters are generated each time before 13303efcb05SHeiko Schocherloading the kernel, passing to Linux the address in memory where 13403efcb05SHeiko Schocherthe parameters can be read. 13503efcb05SHeiko SchocherWith Falcon Mode, this snapshot can be saved into persistent storage and SPL is 13603efcb05SHeiko Schocherinformed to load it before running the kernel. 13703efcb05SHeiko Schocher 13803efcb05SHeiko SchocherTo boot the kernel, these steps under a Falcon-aware U-Boot are required: 13903efcb05SHeiko Schocher 14003efcb05SHeiko Schocher1. Boot the board into U-Boot. 14103efcb05SHeiko SchocherUse the "spl export" command to generate the kernel parameters area or the DT. 14203efcb05SHeiko SchocherU-Boot runs as when it boots the kernel, but stops before passing the control 14303efcb05SHeiko Schocherto the kernel. 14403efcb05SHeiko Schocher 14503efcb05SHeiko SchocherHere the command sequence for the ipam390 board: 14603efcb05SHeiko Schocher- load the linux kernel image into ram: 14703efcb05SHeiko Schocher 14803efcb05SHeiko SchocherU-Boot > nand read c0100000 2 200000 400000 14903efcb05SHeiko Schocher 15003efcb05SHeiko SchocherNAND read: device 0 offset 0x200000, size 0x400000 15103efcb05SHeiko Schocher 4194304 bytes read: OK 15203efcb05SHeiko Schocher 15303efcb05SHeiko Schocher- generate the bootparms image: 15403efcb05SHeiko Schocher 15503efcb05SHeiko SchocherU-Boot > spl export atags c0100000 15603efcb05SHeiko Schocher## Booting kernel from Legacy Image at c0100000 ... 15703efcb05SHeiko Schocher Image Name: Linux-3.5.1 15803efcb05SHeiko Schocher Image Type: ARM Linux Kernel Image (uncompressed) 15903efcb05SHeiko Schocher Data Size: 2504280 Bytes = 2.4 MiB 16003efcb05SHeiko Schocher Load Address: c0008000 16103efcb05SHeiko Schocher Entry Point: c0008000 16203efcb05SHeiko Schocher Verifying Checksum ... OK 16303efcb05SHeiko Schocher Loading Kernel Image ... OK 16403efcb05SHeiko Schochersubcommand not supported 16503efcb05SHeiko Schochersubcommand not supported 16603efcb05SHeiko SchocherArgument image is now in RAM at: 0xc0000100 16703efcb05SHeiko Schocher 16803efcb05SHeiko Schocher- copy the bootparms image into nand: 16903efcb05SHeiko Schocher 17003efcb05SHeiko SchocherU-Boot > mtdparts 17103efcb05SHeiko Schocher 17203efcb05SHeiko Schocherdevice nand0 <davinci_nand.0>, # parts = 6 17303efcb05SHeiko Schocher #: name size offset mask_flags 17403efcb05SHeiko Schocher 0: u-boot-env 0x00020000 0x00000000 0 17503efcb05SHeiko Schocher 1: u-boot 0x00160000 0x00020000 0 17603efcb05SHeiko Schocher 2: bootparms 0x00020000 0x00180000 0 17703efcb05SHeiko Schocher 3: factory-info 0x00060000 0x001a0000 0 17803efcb05SHeiko Schocher 4: kernel 0x00400000 0x00200000 0 17903efcb05SHeiko Schocher 5: rootfs 0x07a00000 0x00600000 0 18003efcb05SHeiko Schocher 18103efcb05SHeiko Schocheractive partition: nand0,0 - (u-boot-env) 0x00020000 @ 0x00000000 18203efcb05SHeiko Schocher 18303efcb05SHeiko Schocherdefaults: 18403efcb05SHeiko Schochermtdids : nand0=davinci_nand.0 18503efcb05SHeiko Schochermtdparts: mtdparts=davinci_nand.0:128k(u-boot-env),1408k(u-boot),128k(bootparms),384k(factory-info),4M(kernel),-(rootfs) 18603efcb05SHeiko SchocherU-Boot > nand erase.part bootparms 18703efcb05SHeiko Schocher 18803efcb05SHeiko SchocherNAND erase.part: device 0 offset 0x180000, size 0x20000 18903efcb05SHeiko SchocherErasing at 0x180000 -- 100% complete. 19003efcb05SHeiko SchocherOK 19103efcb05SHeiko SchocherU-Boot > nand write c0000100 180000 20000 19203efcb05SHeiko Schocher 19303efcb05SHeiko SchocherNAND write: device 0 offset 0x180000, size 0x20000 19403efcb05SHeiko Schocher 131072 bytes written: OK 19503efcb05SHeiko SchocherU-Boot > 19603efcb05SHeiko Schocher 19703efcb05SHeiko SchocherYou can use also the predefined U-Boot Environment variable "setbootparms", 19803efcb05SHeiko Schocherwhich will do all the above steps in one command: 19903efcb05SHeiko Schocher 20003efcb05SHeiko SchocherU-Boot > print setbootparms 20103efcb05SHeiko Schochersetbootparms=nand read c0100000 200000 400000;spl export atags c0100000;nand erase.part bootparms;nand write c0000100 180000 20000 20203efcb05SHeiko SchocherU-Boot > run setbootparms 20303efcb05SHeiko Schocher 20403efcb05SHeiko SchocherNAND read: device 0 offset 0x200000, size 0x400000 20503efcb05SHeiko Schocher 4194304 bytes read: OK 20603efcb05SHeiko Schocher## Booting kernel from Legacy Image at c0100000 ... 20703efcb05SHeiko Schocher Image Name: Linux-3.5.1 20803efcb05SHeiko Schocher Image Type: ARM Linux Kernel Image (uncompressed) 20903efcb05SHeiko Schocher Data Size: 2504280 Bytes = 2.4 MiB 21003efcb05SHeiko Schocher Load Address: c0008000 21103efcb05SHeiko Schocher Entry Point: c0008000 21203efcb05SHeiko Schocher Verifying Checksum ... OK 21303efcb05SHeiko Schocher Loading Kernel Image ... OK 21403efcb05SHeiko Schochersubcommand not supported 21503efcb05SHeiko Schochersubcommand not supported 21603efcb05SHeiko SchocherArgument image is now in RAM at: 0xc0000100 21703efcb05SHeiko Schocher 21803efcb05SHeiko SchocherNAND erase.part: device 0 offset 0x180000, size 0x20000 21903efcb05SHeiko SchocherErasing at 0x180000 -- 100% complete. 22003efcb05SHeiko SchocherOK 22103efcb05SHeiko Schocher 22203efcb05SHeiko SchocherNAND write: device 0 offset 0x180000, size 0x20000 22303efcb05SHeiko Schocher 131072 bytes written: OK 22403efcb05SHeiko SchocherU-Boot > 22503efcb05SHeiko Schocher 22603efcb05SHeiko SchocherLinks 22703efcb05SHeiko Schocher===== 22803efcb05SHeiko Schocher[1] 22903efcb05SHeiko Schocher http://sourceforge.net/projects/dvflashutils/files/OMAP-L138/ 230