1Overview 2-------------- 3 4mx35pdk (known als as mx35_3stack) is a development board by Freescale. 5It consists of three pluggable board: 6 - CPU module, with CPU, RAM, flash 7 - Personality board, with most interfaces (USB, Network,..) 8 - Debug board with JTAG header. 9 10The board is usually delivered with redboot. This howto explains how to boot 11a linux kernel and how to replace the original bootloader with U-Boot. 12 13The board is delivered with Redboot on the NAND flash. It is possible to 14switch the boot device with the switches SW1-SW2 on the Personality board, 15and with SW5-SW10 on the Debug board. 16 17Delivered Redboot script to start the kernel 18--------------------------------------------------- 19 20In redboot the following script is stored: 21 22fis load kernel 23exec -c "noinitrd console=ttymxc0,115200 root=/dev/mtdblock8 rw rootfstype=jffs2 ip=dhcp fec_mac=00:04:9F:00:E7:76" 24 25Kernel is taken from flash. The image is in zImage format. 26 27Booting from NET, rootfs on NFS: 28----------------------------------- 29 30To change the script in redboot: 31 32load -r -b 0x100000 <path_to_zImage> 33exec -c "noinitrd console=ttymxc0,115200 root=/dev/nfsroot rootfstype=nfsroot nfsroot=192.168.1.1:/opt/eldk-4.2-arm/armVFP rw ip=dhcp" 34 35If the ip address is not set, you can set it with : 36 37ip_address -l <board_ip/netmask> -h <server_ip> 38 39Linux partitions: 40--------------------------- 41 42As default, the board is shipped with these partition tables for NAND 43and for NOR: 44 45Creating 5 MTD partitions on "NAND 2GiB 3,3V 8-bit": 460x00000000-0x00100000 : "nand.bootloader" 470x00100000-0x00600000 : "nand.kernel" 480x00600000-0x06600000 : "nand.rootfs" 490x06600000-0x06e00000 : "nand.configure" 500x06e00000-0x80000000 : "nand.userfs" 51 52Creating 6 MTD partitions on "mxc_nor_flash.0": 530x00000000-0x00080000 : "Bootloader" 540x00080000-0x00480000 : "nor.Kernel" 550x00480000-0x02280000 : "nor.userfs" 560x02280000-0x03e80000 : "nor.rootfs" 570x01fe0000-0x01fe3000 : "FIS directory" 580x01fff000-0x04000000 : "Redboot config" 59 60NAND partitions can be recognized enabling in kernel CONFIG_MTD_REDBOOT_PARTS. 61For this board, CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK should be set to 2. 62 63However, the setup in redboot is not correct and does not use the whole flash. 64 65Better solution is to use the kernel parameter mtdparts. 66Here the resulting script to be defined in RedBoot with fconfig: 67 68load -r -b 0x100000 sbabic/mx35pdk/zImage.2.6.37 69exec -c "noinitrd console=ttymxc0,115200 root=/dev/nfsroot rootfstype=nfsroot nfsroot=192.168.1.1:/opt/eldk-4.2-arm/arm rw ip=dhcp mtdparts=mxc_nand:1m(boot),5m(linux),96m(root),8m(cfg),1938m(user);physmap-flash.0:512k(b),4m(k),30m(u),28m(r)" 70 71Flashing U-Boot 72-------------------------------- 73 74There are two options: the original bootloader in NAND can be replaced with 75u-boot, or u-boot can be stored on the NOR flash without erasing 76the delivered bootloader. 77The boot storage can be select using the switches on the personality board 78(SW1-SW2) and on the DEBUG board (SW4-SW10). 79 80The second option is to be preferred if you have not a JTAG debugger. 81If something goes wrong flashing the bootloader, it is always possible to 82recover the board booting from the other device. 83 84Replacing the bootloader on the NAND 85-------------------------------------- 86To replace RedBoot with U-Boot, the easy way is to do this in linux. 87Start the kernel with the suggested options. Make sure to have set the 88mtdparts exactly as described, because this matches the layout on the 89mx35pdk. 90 91You should see in your boot log the following entries for the NAND 92flash: 93 945 cmdlinepart partitions found on MTD device mxc_nand 95Creating 5 MTD partitions on "mxc_nand": 960x000000000000-0x000000100000 : "boot" 970x000000100000-0x000000600000 : "linux" 980x000000600000-0x000006600000 : "root" 990x000006600000-0x000006e00000 : "cfg" 1000x000006e00000-0x000080000000 : "user" 101 102You can use the utilities flash_eraseall and nandwrite to put 103u-boot on the NAND. The bootloader is marked as "boot", and 1MB is 104reserved. If everything is correct, this partition is accessed as 105/dev/mtd4. However, check if it is correct with "cat /proc/mtd" and 106get the device node from the partition name: 107 108$ cat /proc/mtd | grep boot 109 110I suggest you try the utilities on a different partition to be sure 111if everything works correctly. If not, and you remove RedBoot, you have to 112reinstall it using the ATK tool as suggested by Freescale, or using a 113JTAG debugger. 114 115I report the versions of the utilities I used (they are provided with ELDK): 116 117-bash-3.2# nandwrite --version 118nandwrite $Revision: 1.32 $ 119 120flash_eraseall --version 121flash_eraseall $Revision: 1.22 $ 122 123nandwrite reports a warning if the file to be saved is not sector aligned. 124This should have no consequences, but I preferred to pad u-boot.bin 125to get no problem at all. 126$ dd if=/dev/zero of=zeros bs=1 count=74800 127$ cat u-boot.bin zeros > u-boot-padded.bin 128 129To erase the partition: 130$ flash_eraseall /dev/mtd4 131 132Writing u-boot: 133 134$ nandwrite /dev/mtd4 u-boot-padded.bin 135 136Now U-Boot is stored on the booting partition. 137 138To boot from NAND, you have to select the switches as follows: 139 140Personality board 141 SW2 1, 4, 5 on 142 2, 3, 6, 7, 8 off 143 SW1 all off 144 145Debug Board: 146 SW5 0 147 SW6 0 148 SW7 0 149 SW8 1 150 SW9 1 151 SW10 0 152 153 154Saving U-Boot in the NOR flash 155--------------------------------- 156 157The procedure to save in the NOR flash is quite the same as to write into the NAND. 158 159Check the partition for boot in the NOR flash. Setting the mtdparts as reported, 160the boot partition should be /dev/mtd0. 161 162Creating 6 MTD partitions on "mxc_nor_flash.0": 1630x00000000-0x00080000 : "Bootloader" 1640x00080000-0x00480000 : "nor.Kernel" 1650x00480000-0x02280000 : "nor.userfs" 1660x02280000-0x03e80000 : "nor.rootfs" 1670x01fe0000-0x01fe3000 : "FIS directory" 1680x01fff000-0x04000000 : "Redboot config" 169 170To erase the whole partition: 171$ flash_eraseall /dev/mtd0 172 173Writing u-boot: 174dd if=u-boot.bin of=/dev/mtd0 175 176To boot from NOR, you have to select the switches as follows: 177 178Personality board 179 SW2 all off 180 SW1 all off 181 182Debug Board: 183 SW5 0 184 SW6 0 185 SW7 0 186 SW8 1 187 SW9 1 188 SW10 0 189