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