Thomas Chou | 485e2d8 | 2015-10-21 22:37:04 +0800 | [diff] [blame] | 1 | Nios II is a 32-bit embedded-processor architecture designed |
| 2 | specifically for the Altera family of FPGAs. |
| 3 | |
| 4 | Please refer to the link for more information on Nios II, |
| 5 | https://www.altera.com/products/processors/overview.html |
| 6 | |
| 7 | Please refer to the link for Linux port and toolchains, |
| 8 | http://rocketboards.org/foswiki/view/Documentation/NiosIILinuxUserManual |
| 9 | |
| 10 | The Nios II port of u-boot is controlled by device tree. Please check |
| 11 | out doc/README.fdt-control. |
| 12 | |
| 13 | To add a new board/configuration (eg, mysystem) to u-boot, you will need |
| 14 | three files. |
| 15 | |
| 16 | 1. The device tree source which describes the hardware, dts file. |
| 17 | arch/nios2/dts/mysystem.dts |
| 18 | |
| 19 | 2. Default configuration of Kconfig, defconfig file. |
| 20 | configs/mysystem_defconfig |
| 21 | |
| 22 | 3. The legacy board header file. |
| 23 | include/configs/mysystem.h |
| 24 | |
| 25 | The device tree source must be generated from your qsys/sopc design |
| 26 | using the sopc2dts tool. Then modified to fit your configuration. Please |
| 27 | find the sopc2dts download and usage at the wiki, |
| 28 | http://www.alterawiki.com/wiki/Sopc2dts |
| 29 | |
| 30 | $ java -jar sopc2dts.jar --force-altr -i mysystem.sopcinfo -o mysystem.dts |
| 31 | |
| 32 | You will need to add additional properties to the dts. Please find an |
| 33 | example at, arch/nios2/dts/3c120_devboard.dts. |
| 34 | |
| 35 | 1. Add "stdout-path=..." property with your serial path to the chosen |
| 36 | node, like this, |
| 37 | chosen { |
| 38 | stdout-path = &jtag_uart; |
| 39 | }; |
| 40 | |
| 41 | 2. If you use SPI/EPCS or I2C, you will need to add aliases to number |
| 42 | the sequence of these devices, like this, |
| 43 | aliases { |
| 44 | spi0 = &epcs_controller; |
| 45 | }; |
| 46 | |
| 47 | Next, you will need a default config file. You may start with |
| 48 | nios2-generic_defconfig, modify the options and save it. |
| 49 | |
| 50 | $ make nios2-generic_defconfig |
| 51 | $ make menuconfig |
| 52 | $ make savedefconfig |
| 53 | $ cp defconfig configs/mysystem_defconfig |
| 54 | |
| 55 | You will need to change the names of board header file and device tree, |
| 56 | and select the drivers with menuconfig. |
| 57 | |
| 58 | Nios II architecture ---> |
| 59 | (mysystem) Board header file |
| 60 | Device Tree Control ---> |
| 61 | (mysystem) Default Device Tree for DT control |
| 62 | |
| 63 | There is a selection of "Provider of DTB for DT control" in the Device |
| 64 | Tree Control menu. |
| 65 | |
| 66 | ( ) Separate DTB for DT control, will cat the dtb to end of u-boot |
| 67 | binary, output u-boot-dtb.bin. This should be used for production. |
| 68 | If you use boot copier, like EPCS boot copier, make sure the copier |
| 69 | copies all the u-boot-dtb.bin, not just u-boot.bin. |
| 70 | |
| 71 | ( ) Embedded DTB for DT control, will include the dtb inside the u-boot |
| 72 | binary. This is handy for development, eg, using gdb or nios2-download. |
| 73 | |
| 74 | The last thing, legacy board header file describes those config options |
| 75 | not covered in Kconfig yet. You may copy it from nios2-generic.h. |
| 76 | |
| 77 | $ cp include/configs/nios2-generic.h include/configs/mysystem.h |
| 78 | |
| 79 | Please change the SDRAM base and size to match your board. The base |
| 80 | should be cached virtual address, for Nios II with MMU it is 0xCxxx_xxxx |
| 81 | to 0xDxxx_xxxx. |
| 82 | |
| 83 | #define CONFIG_SYS_SDRAM_BASE 0xD0000000 |
| 84 | #define CONFIG_SYS_SDRAM_SIZE 0x08000000 |
| 85 | |
| 86 | You will need to change the environment variables location and setting, |
| 87 | too. You may change other configs to fit your board. |
| 88 | |
| 89 | After all these changes, you may build and test. |
| 90 | |
| 91 | $ export CROSS_COMPILE=nios2-elf- (or nios2-linux-gnu-) |
| 92 | $ make mysystem_defconfig |
| 93 | $ make |
| 94 | |
| 95 | Enjoy! |