The Rocketboards.org documentation should be used as reference, but does not cover the internals of boot flows where the board-specific customization is contained.
This document is designed to be a high-level guide to show you where to look, and what files you may want to copy and adapt.
For Rocketboards.org references on how to build the boot loader for Intel® Arria® 10 FPGA SoC projects, view the Arria 10 SoC - Boot from SD Card section of the Building Bootloader for Cyclone® V and Arria 10 web page.
Items in BOLD refer to sections of the guidelines on the Building Bootloader for Cyclone V and Arria 10 web page.
Customizing U-boot and U-boot-SPL for your board
The HPS settings from your Platform Designer project are taken into u-boot via the hand off files using a script, which is shipped as part of u-boot-socfpga:
See: Convert hps.xml handoff file to include file to be used by the device tree
cd u-boot-socfpga
./arch/arm/mach-socfpga/qts-filter-a10.sh \
<Quartus project location>/hps_isw_handoff/hps.xml
arch/arm/dts/socfpga_arria10_socdk_sdmmc_handoff.h
This creates the socfpga_arria10_socdk_sdmmc_handoff.h file, which is then pulled in during compilation.
Other board-specific configuration items (Ethernet, Uart, memory size etc)
- u-boot config file: u-boot-socfpga/configs/ socfpga_arria10_defconfig
Most items are now defined in the u-boot device tree, however we would recommend creating custom version of the u-boot defconfig file for your board:
The config file specifies:
- Whats enabled in the u-boot build
- Default boot command
- Default Device Tree
- Some environment defaults
- Config include file: include/configs/socfpga_arria10.h
- Memory sizes
- Pre-set addresses and config items
- Device tree files names
- Default u-boot run time environment
- UART defaults
- Some setup is shared, also see #include <configs/socfpga_common.h>
- u-boot device trees : arch/arm/dts/<board name>_<boot_device>.dts
There are multiple hierarchical file sets for each boot target (NAND, SDMMC, QSPI). There is a top level file, and this includes generic information, and board specific overrides. Some files have items for u-boot, and some for u-boot spl
Arria 10 SoC DK SDMMC example:
socfpga_<device>_<board>_<boot device>.dts: Top level file for a board and boot flash target
Which flash to enable etc
socfpga_<device>_<board>.dtsi : board specific files: Override or extend the generic files
Exact IP Setup: UART, EMAC , MEMORY
socfpga_<device>.dtsi: Generic files for the device
Note:
- socfpga_arria10_socdk_sdmmc-u-boot.dtsi
- Contains the name of the .itb files to use for FPGA configuration and uboot proper loading.
- See the relevant .its file
- board/altera/arria10socdk/*.its
&fpga_mgr {
u-boot,dm-pre-reloc;
altr,bitstream = "fit_spl_fpga.itb";
};
- .its files: for creating the .itb files u-boot will try to load : board/altera/arria10-socdk
board/altera/arria10-socdk/fit_uboot.its
u-boot SPL control file : Which U-boot Proper to load
board/altera/arria10-socdk/fit_spl_fpga.its
FPGA configuration from SPL : Paths to .rbf files for FPGA configuration
board/altera/arria10-socdk/fit_kernel_qspi.its
Linux Kernel load from QSPI
board/altera/arria10-socdk/fit_kernel_nand.its
Linux Kernel load from NAND
Note: With newer versions of u-boot distro boot, for SDMMC boot an .itb file is not loaded to the sdmmc. The relevant files are loaded to the FAT partition, and loaded directly.
For more information, see the C. Build SD Card Image section of the Building Bootloader for Cyclone® V and Arria 10 web page.
For Linux
- The kernel configuration used is now default, and can be added to in the normal fashion
- Load default : make defconfig
- Edit using : make manuconfig
- Save new config file as defconfig : make savedefconfig
- Copy to the configs directory, to be used later :
- cp defconfig arch/arm/configs/socfpga_myName
- Custom Device Trees for a custom board should be created, by copying and editing the development kit versions. The naming and structure is similar to uboot, with board specific files (.dts) which override generic settings (.dtsi).