---------------------------------------- 
 | 
SOCFPGA Documentation for U-Boot and SPL 
 | 
---------------------------------------- 
 | 
  
 | 
This README is about U-Boot and SPL support for Altera's ARM Cortex-A9MPCore 
 | 
based SOCFPGA. To know more about the hardware itself, please refer to 
 | 
www.altera.com. 
 | 
  
 | 
  
 | 
socfpga_dw_mmc 
 | 
-------------- 
 | 
  
 | 
Here are macro and detailed configuration required to enable DesignWare SDMMC 
 | 
controller support within SOCFPGA 
 | 
  
 | 
#define CONFIG_SYS_MMC_MAX_BLK_COUNT    256 
 | 
-> Using smaller max blk cnt to avoid flooding the limited stack in OCRAM 
 | 
  
 | 
-------------------------------------------------- 
 | 
Generating the handoff header files for U-Boot SPL 
 | 
-------------------------------------------------- 
 | 
  
 | 
This text is assuming quartus 16.1, but newer versions will probably work just fine too; 
 | 
verified with DE1_SOC_Linux_FB demo project (https://github.com/VCTLabs/DE1_SOC_Linux_FB). 
 | 
Updated/working projects should build using either process below. 
 | 
  
 | 
Note: it *should* work from Quartus 14.0.200 onwards, however, the current vendor demo 
 | 
projects must have the IP cores updated as shown below. 
 | 
  
 | 
Rebuilding your Quartus project 
 | 
------------------------------- 
 | 
  
 | 
Choose one of the follwing methods, either command line or GUI. 
 | 
  
 | 
Using the comaand line 
 | 
~~~~~~~~~~~~~~~~~~~~~~ 
 | 
  
 | 
First run the embedded command shell, using your path to the Quartus install: 
 | 
  
 | 
  $ /path/to/intelFPGA/16.1/embedded/embedded_command_shell.sh 
 | 
  
 | 
Then (if necessary) update the IP cores in the project, generate HDL code, and 
 | 
build the project: 
 | 
  
 | 
  $ cd path/to/project/dir 
 | 
  $ qsys-generate soc_system.qsys --upgrade-ip-cores 
 | 
  $ qsys-generate soc_system.qsys --synthesis=[VERILOG|VHDL] 
 | 
  $ quartus_sh --flow compile <project name> 
 | 
  
 | 
Convert the resulting .sof file (SRAM object file) to .rbf file (Raw bit file): 
 | 
  
 | 
  $ quartus_cpf -c <project_name>.sof soc_system.rbf 
 | 
  
 | 
  
 | 
Generate BSP handoff files 
 | 
~~~~~~~~~~~~~~~~~~~~~~~~~~ 
 | 
  
 | 
You can run the bsp editor GUI below, or run the following command from the 
 | 
project directory: 
 | 
  
 | 
  $ /path/to/bsb/tools/bsp-create-settings --type spl --bsp-dir build \ 
 | 
      --preloader-settings-dir hps_isw_handoff/soc_system_hps_0/ \ 
 | 
      --settings build/settings.bsp 
 | 
  
 | 
You should use the bsp "build" directory above (ie, where the settings.bsp file is) 
 | 
in the following u-boot command to update the board headers.  Once these headers 
 | 
are updated for a given project build, u-boot should be configured for the 
 | 
project board (eg, de0-nano-sockit) and then build the normal spl build. 
 | 
  
 | 
Now you can skip the GUI section. 
 | 
  
 | 
  
 | 
Using the Qsys GUI 
 | 
~~~~~~~~~~~~~~~~~~ 
 | 
  
 | 
1. Navigate to your project directory 
 | 
2. Run Quartus II 
 | 
3. Open Project (Ctrl+J), select <project_name>.qpf 
 | 
4. Run QSys [Tools->QSys] 
 | 
  4.1 In the Open dialog, select '<project_name>.qsys' 
 | 
  4.2 In the Open System dialog, wait until completion and press 'Close' 
 | 
  4.3 In the Qsys window, click on 'Generate HDL...' in bottom right corner 
 | 
     4.3.1 In the 'Generation' window, click 'Generate' 
 | 
     4.3.2 In the 'Generate' dialog, wait until completion and click 'Close' 
 | 
  4.4 In the QSys window, click 'Finish' 
 | 
     4.4.1 In the 'Quartus II' pop up window, click 'OK' 
 | 
5. Back in Quartus II main window, do the following 
 | 
  5.1 Use Processing -> Start -> Start Analysis & Synthesis (Ctrl+K) 
 | 
  5.2 Use Processing -> Start Compilation (Ctrl+L) 
 | 
  
 | 
    ... this may take some time, have patience ... 
 | 
  
 | 
6. Start the embedded command shell as shown in the previous section 
 | 
  6.1 Change directory to 'software/spl_bsp' 
 | 
  6.2 Prepare BSP by launching the BSP editor from ECS 
 | 
       => bsp-editor 
 | 
  6.3 In BSP editor 
 | 
      6.3.1 Use File -> Open 
 | 
      6.3.2 Select 'settings.bsp' file 
 | 
      6.3.3 Click Generate 
 | 
      6.3.4 Click Exit 
 | 
  
 | 
  
 | 
Post handoff generation 
 | 
~~~~~~~~~~~~~~~~~~~~~~~ 
 | 
  
 | 
Now that the handoff files are generated, U-Boot can be used to process 
 | 
the handoff files generated by the bsp-editor. For this, please use the 
 | 
following script from the u-boot source tree: 
 | 
  
 | 
  $ ./arch/arm/mach-socfpga/qts-filter.sh \ 
 | 
        <soc_type> \ 
 | 
        <input_qts_dir> \ 
 | 
        <input_bsp_dir> \ 
 | 
        <output_dir> 
 | 
  
 | 
Process QTS-generated files into U-Boot compatible ones. 
 | 
  
 | 
    soc_type      - Type of SoC, either 'cyclone5' or 'arria5'. 
 | 
    input_qts_dir - Directory with compiled Quartus project 
 | 
                    and containing the Quartus project file (QPF). 
 | 
    input_bsp_dir - Directory with generated bsp containing 
 | 
                    the settings.bsp file. 
 | 
    output_dir    - Directory to store the U-Boot compatible 
 | 
                    headers. 
 | 
  
 | 
This will generate (or update) the following 4 files: 
 | 
  
 | 
  iocsr_config.h 
 | 
  pinmux_config.h 
 | 
  pll_config.h 
 | 
  sdram_config.h 
 | 
  
 | 
These files should be copied into "qts" directory in the board directory 
 | 
(see output argument of qts-filter.sh command above). 
 | 
  
 | 
Here is an example for the DE-0 Nano SoC after the above rebuild process: 
 | 
  
 | 
  $ ll board/terasic/de0-nano-soc/qts/ 
 | 
  total 36 
 | 
  -rw-r--r-- 1 sarnold sarnold 8826 Mar 21 18:11 iocsr_config.h 
 | 
  -rw-r--r-- 1 sarnold sarnold 4398 Mar 21 18:11 pinmux_config.h 
 | 
  -rw-r--r-- 1 sarnold sarnold 3190 Mar 21 18:11 pll_config.h 
 | 
  -rw-r--r-- 1 sarnold sarnold 9022 Mar 21 18:11 sdram_config.h 
 | 
  
 | 
Note: file sizes will differ slightly depending on the selected board. 
 | 
  
 | 
Now your board is ready for full mainline support including U-Boot SPL. 
 | 
The Preloader will not be needed any more. 
 |