Merge tag 'fixes-for-v2020.07-rc4' of https://gitlab.denx.de/u-boot/custodians/u...
[oweals/u-boot.git] / doc / arch / nios2.rst
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
99    #define CONFIG_SYS_SDRAM_BASE                0xc8000000
100    #define CONFIG_SYS_SDRAM_SIZE                0x08000000
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!