Tom Rini | ccde1ee | 2012-08-20 09:31:52 -0700 | [diff] [blame] | 1 | Summary |
| 2 | ======= |
| 3 | The README is for the boot procedure used for various DA850 (or compatible |
| 4 | parts such as the AM1808) based boards. |
| 5 | |
| 6 | In the context of U-Boot, the board is booted in three stages. The initial |
| 7 | bootloader which executes upon reset is the ROM Boot Loader (RBL) and sits |
| 8 | in the internal ROM. The RBL initializes the internal memory and then |
| 9 | depending on the exact board and pin configurations will initialize another |
| 10 | controller (such as SPI or NAND) to continue the boot process by loading |
| 11 | the secondary program loader (SPL). The SPL will initialize the system |
| 12 | further (some clocks, SDRAM) and then load the full u-boot from a |
| 13 | predefined location in persistent storage to DDR and jumps to the u-boot |
| 14 | entry point. |
| 15 | |
| 16 | AIS is an image format defined by TI for the images that are to be loaded |
| 17 | to memory by the RBL. The image is divided into a series of sections and |
| 18 | the image's entry point is specified. Each section comes with meta data |
| 19 | like the target address the section is to be copied to and the size of the |
| 20 | section, which is used by the RBL to load the image. At the end of the |
| 21 | image the RBL jumps to the image entry point. The AIS format allows for |
| 22 | other things such as programming the clocks and SDRAM if the header is |
| 23 | programmed for it. We do not take advantage of this and instead use SPL as |
| 24 | it allows for additional flexibility (run-time detect of board revision, |
| 25 | loading the next image from a different media, etc). |
| 26 | |
| 27 | |
| 28 | Compilation |
| 29 | =========== |
| 30 | The exact build target you need will depend on the board you have. For |
| 31 | Logic PD boards, or other boards which store the ethernet MAC address at |
| 32 | the end of SPI flash, run 'make da850evm'. For boards which store the |
| 33 | ethernet MAC address in the i2c EEPROM located at 0x50, run |
| 34 | 'make da850_am18xxevm'. Once this build completes you will have a |
| 35 | u-boot.ais file that needs to be written to the correct persistent |
| 36 | storage. |
| 37 | |
| 38 | |
| 39 | Flashing the images to SPI |
| 40 | ========================== |
| 41 | The AIS image can be written to SPI flash using the following commands. |
| 42 | Assuming that the network is configured and enabled and the u-boot.ais file |
| 43 | is tftp'able. |
| 44 | |
| 45 | U-Boot > sf probe 0 |
| 46 | U-Boot > sf erase 0 +320000 |
| 47 | U-Boot > tftp u-boot.ais |
| 48 | U-Boot > sf write c0700000 0 $filesize |
| 49 | |
ahaslam@baylibre.com | a49b7b3 | 2017-03-17 16:55:23 +0100 | [diff] [blame] | 50 | Flashing the images to NAND |
| 51 | =========================== |
| 52 | The AIS image can be written to NAND using the u-boot "nand" commands. |
| 53 | |
| 54 | Example: |
| 55 | |
| 56 | OMAPL138_LCDK requires the AIS image to be written to the second block of |
| 57 | the NAND flash. |
| 58 | |
| 59 | From the "nand info" command we see that the second block would start at |
| 60 | offset 0x20000: |
| 61 | |
| 62 | U-Boot > nand info |
| 63 | sector size 128 KiB (0x20000) |
| 64 | Page size 2048 b |
| 65 | |
| 66 | From the tftp command we see that we need to copy 0x74908 bytes from |
| 67 | memory address 0xc0700000 (0x75000 if we align a page of 2048): |
| 68 | |
| 69 | U-Boot > tftp u-boot.ais |
| 70 | Load address: 0xc0700000 |
| 71 | Bytes transferred = 477448 (74908 hex) |
| 72 | |
| 73 | The commands to write the image from memory to NAND would be: |
| 74 | |
| 75 | U-Boot > nand erase 0x20000 0x75000 |
| 76 | U-Boot > nand write 0xc0700000 0x20000 0x75000 |
| 77 | |
| 78 | Alternatively, MTD partitions may be defined. Using "mtdparts" to |
| 79 | conveniently have a bootloader partition starting at the second block |
| 80 | (offset 0x20000): |
| 81 | |
| 82 | setenv mtdids nand0=davinci_nand.0 |
| 83 | setenv mtdparts mtdparts=davinci_nand.0:128k(bootenv),2m(bootloader) |
| 84 | |
| 85 | In this case the commands would be simplified to: |
| 86 | |
| 87 | U-Boot > tftp u-boot.ais |
| 88 | U-Boot > nand erase.part bootloader |
| 89 | U-Boot > nand write 0xc0700000 bootloader |
| 90 | |
ahaslam@baylibre.com | 69e6b2b | 2017-02-13 18:49:40 +0100 | [diff] [blame] | 91 | Flashing the images to MMC |
| 92 | ========================== |
| 93 | If the boot pins are set to boot from mmc, the RBL will try to load the |
| 94 | next boot stage form the first couple of sectors of an external mmc card. |
| 95 | As sector 0 is usually used for storing the partition information, the |
| 96 | AIS image should be written at least after the first sector, but before the |
| 97 | first partition begins. (e.g: make sure to leave at least 500KB of unallocated |
| 98 | space at the start of the mmc when creating the partitions) |
| 99 | |
| 100 | CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR is used by SPL, and should |
| 101 | point to the sector were the u-boot image is located. (eg. After SPL) |
| 102 | |
| 103 | There are 2 ways to copy the AIS image to the mmc card: |
| 104 | |
| 105 | 1 - Using the TI tool "uflash" |
| 106 | $ uflash -d /dev/mmcblk0 -b ./u-boot.ais -p OMAPL138 -vv |
| 107 | |
| 108 | 2 - using the "dd" command |
| 109 | $ dd if=u-boot.ais of=/dev/mmcblk0 seek=117 bs=512 conv=fsync |
| 110 | |
| 111 | uflash writes the AIS image at offset 117. For compatibility with uflash, |
| 112 | CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR is set to take into account this |
| 113 | offset, and the dd command is adjusted accordingly. |
Tom Rini | ccde1ee | 2012-08-20 09:31:52 -0700 | [diff] [blame] | 114 | |
Adam Ford | 1b13f68 | 2018-08-11 07:34:55 -0500 | [diff] [blame] | 115 | Flashing the images to NOR |
| 116 | ========================== |
| 117 | NOR Flash is XIP (execute-in-place), so no AIS (or SPL) is needed. The |
| 118 | u-boot.bin is directy flashed, but CONFIT_DA850_LOWLEVEL must be set |
| 119 | to initialize hardware that's normally done by SPL. |
| 120 | |
| 121 | For this case, CONFIG_SYS_TEXT_BASE=0x60000000 which is the address to |
| 122 | which the bootloader jumps when powered on. |
| 123 | |
| 124 | Example: |
| 125 | For the da850evm, there is a defconfig setup to use the NOR flash on |
| 126 | the UI expander board called da850evm_direct_nor_defconfig. |
| 127 | |
| 128 | Flash to NOR directly using |
| 129 | sudo mono ./sfh_OMAP-L138.exe -p /dev/ttyUSB0 -flash_noubl |
| 130 | -flashType NOR u-boot.bin |
| 131 | |
| 132 | SW7:5 through SW7:7 should be switched on and all others off. |
| 133 | |
Tom Rini | ccde1ee | 2012-08-20 09:31:52 -0700 | [diff] [blame] | 134 | Recovery |
| 135 | ======== |
| 136 | |
| 137 | In the case of a "bricked" board, you need to use the TI tools found |
| 138 | here[1] to write the u-boot.ais file. An example of recovering to the SPI |
| 139 | flash of an AM1808 would be: |
| 140 | |
| 141 | $ mono sfh_OMAP-L138.exe -targetType AM1808 -p /dev/ttyUSB0 \ |
| 142 | -flash_noubl /path/to/u-boot.ais |
| 143 | |
| 144 | For other target types and flash locations: |
| 145 | |
| 146 | $ mono sfh_OMAP-L138.exe -h |
| 147 | |
| 148 | Links |
| 149 | ===== |
| 150 | [1] |
| 151 | http://processors.wiki.ti.com/index.php/Serial_Boot_and_Flash_Loading_Utility_for_OMAP-L138 |