xref: /openbmc/u-boot/board/Barix/ipam390/README.ipam390 (revision 6de80f2196cb7b7a2c550a636404c54cf532fc17)
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