Article ID: 000090551 Content Type: Product Information & Documentation Last Reviewed: 12/22/2022

How can I customize the Intel® Arria® 10 FPGA u-boot-socfpga and Linux-socfpga GHRD recipes for my custom board?

Environment

linux-socfpga

BUILT IN - ARTICLE INTRO SECOND COMPONENT
Description

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.

Resolution

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).

Related Products

This article applies to 3 products

Arria® V FPGAs and SoC FPGAs
Intel® Arria® 10 FPGAs and SoC FPGAs
Cyclone® V FPGAs and SoC FPGAs

1