1---------------------------------------- 2SOCFPGA Documentation for U-Boot and SPL 3---------------------------------------- 4 5This README is about U-Boot and SPL support for Altera's ARM Cortex-A9MPCore 6based SOCFPGA. To know more about the hardware itself, please refer to 7www.altera.com. 8 9 10socfpga_dw_mmc 11-------------- 12 13Here are macro and detailed configuration required to enable DesignWare SDMMC 14controller support within SOCFPGA 15 16#define CONFIG_SYS_MMC_MAX_BLK_COUNT 256 17-> Using smaller max blk cnt to avoid flooding the limited stack in OCRAM 18 19--------------------------------------------------------------------- 20Cyclone 5 / Arria 5 generating the handoff header files for U-Boot SPL 21--------------------------------------------------------------------- 22 23This text is assuming quartus 16.1, but newer versions will probably work just fine too; 24verified with DE1_SOC_Linux_FB demo project (https://github.com/VCTLabs/DE1_SOC_Linux_FB). 25Updated/working projects should build using either process below. 26 27Note: it *should* work from Quartus 14.0.200 onwards, however, the current vendor demo 28projects must have the IP cores updated as shown below. 29 30Rebuilding your Quartus project 31------------------------------- 32 33Choose one of the follwing methods, either command line or GUI. 34 35Using the command line 36~~~~~~~~~~~~~~~~~~~~~~ 37 38First run the embedded command shell, using your path to the Quartus install: 39 40 $ /path/to/intelFPGA/16.1/embedded/embedded_command_shell.sh 41 42Then (if necessary) update the IP cores in the project, generate HDL code, and 43build the project: 44 45 $ cd path/to/project/dir 46 $ qsys-generate soc_system.qsys --upgrade-ip-cores 47 $ qsys-generate soc_system.qsys --synthesis=[VERILOG|VHDL] 48 $ quartus_sh --flow compile <project name> 49 50Convert the resulting .sof file (SRAM object file) to .rbf file (Raw bit file): 51 52 $ quartus_cpf -c <project_name>.sof soc_system.rbf 53 54 55Generate BSP handoff files 56~~~~~~~~~~~~~~~~~~~~~~~~~~ 57 58You can run the bsp editor GUI below, or run the following command from the 59project directory: 60 61 $ /path/to/bsb/tools/bsp-create-settings --type spl --bsp-dir build \ 62 --preloader-settings-dir hps_isw_handoff/soc_system_hps_0/ \ 63 --settings build/settings.bsp 64 65You should use the bsp "build" directory above (ie, where the settings.bsp file is) 66in the following u-boot command to update the board headers. Once these headers 67are updated for a given project build, u-boot should be configured for the 68project board (eg, de0-nano-sockit) and then build the normal spl build. 69 70Now you can skip the GUI section. 71 72 73Using the Qsys GUI 74~~~~~~~~~~~~~~~~~~ 75 761. Navigate to your project directory 772. Run Quartus II 783. Open Project (Ctrl+J), select <project_name>.qpf 794. Run QSys [Tools->QSys] 80 4.1 In the Open dialog, select '<project_name>.qsys' 81 4.2 In the Open System dialog, wait until completion and press 'Close' 82 4.3 In the Qsys window, click on 'Generate HDL...' in bottom right corner 83 4.3.1 In the 'Generation' window, click 'Generate' 84 4.3.2 In the 'Generate' dialog, wait until completion and click 'Close' 85 4.4 In the QSys window, click 'Finish' 86 4.4.1 In the 'Quartus II' pop up window, click 'OK' 875. Back in Quartus II main window, do the following 88 5.1 Use Processing -> Start -> Start Analysis & Synthesis (Ctrl+K) 89 5.2 Use Processing -> Start Compilation (Ctrl+L) 90 91 ... this may take some time, have patience ... 92 936. Start the embedded command shell as shown in the previous section 94 6.1 Change directory to 'software/spl_bsp' 95 6.2 Prepare BSP by launching the BSP editor from ECS 96 => bsp-editor 97 6.3 In BSP editor 98 6.3.1 Use File -> Open 99 6.3.2 Select 'settings.bsp' file 100 6.3.3 Click Generate 101 6.3.4 Click Exit 102 103 104Post handoff generation 105~~~~~~~~~~~~~~~~~~~~~~~ 106 107Now that the handoff files are generated, U-Boot can be used to process 108the handoff files generated by the bsp-editor. For this, please use the 109following script from the u-boot source tree: 110 111 $ ./arch/arm/mach-socfpga/qts-filter.sh \ 112 <soc_type> \ 113 <input_qts_dir> \ 114 <input_bsp_dir> \ 115 <output_dir> 116 117Process QTS-generated files into U-Boot compatible ones. 118 119 soc_type - Type of SoC, either 'cyclone5' or 'arria5'. 120 input_qts_dir - Directory with compiled Quartus project 121 and containing the Quartus project file (QPF). 122 input_bsp_dir - Directory with generated bsp containing 123 the settings.bsp file. 124 output_dir - Directory to store the U-Boot compatible 125 headers. 126 127This will generate (or update) the following 4 files: 128 129 iocsr_config.h 130 pinmux_config.h 131 pll_config.h 132 sdram_config.h 133 134These files should be copied into "qts" directory in the board directory 135(see output argument of qts-filter.sh command above). 136 137Here is an example for the DE-0 Nano SoC after the above rebuild process: 138 139 $ ll board/terasic/de0-nano-soc/qts/ 140 total 36 141 -rw-r--r-- 1 sarnold sarnold 8826 Mar 21 18:11 iocsr_config.h 142 -rw-r--r-- 1 sarnold sarnold 4398 Mar 21 18:11 pinmux_config.h 143 -rw-r--r-- 1 sarnold sarnold 3190 Mar 21 18:11 pll_config.h 144 -rw-r--r-- 1 sarnold sarnold 9022 Mar 21 18:11 sdram_config.h 145 146Note: file sizes will differ slightly depending on the selected board. 147 148Now your board is ready for full mainline support including U-Boot SPL. 149The Preloader will not be needed any more. 150 151---------------------------------------------------------- 152Arria 10 generating the handoff header files for U-Boot SPL 153---------------------------------------------------------- 154 155A header file for inclusion in a devicetree for Arria10 can be generated 156by the qts-filter-a10.sh script directly from the hps_isw_handoff/hps.xml 157file generated during the FPGA project compilation. The header contains 158all PLL, clock, pinmux, and bridge configurations required. 159 160Please look at the socfpga_arria10_socdk_sdmmc-u-boot.dtsi for an example 161that includes use of the generated handoff header. 162 163Devicetree header generation 164~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 165 166The qts-filter-a10.sh script can process the compile time genetated hps.xml 167to create the appropriate devicetree header. 168 169 170 $ ./arch/arm/mach-socfpga/qts-filter-a10.sh \ 171 <hps_xml> \ 172 <output_file> 173 174 hps_xml - hps_isw_handoff/hps.xml from Quartus project 175 output_file - Output filename and location for header file 176 177The script generates a single header file names <output_file> that should 178be placed in arch/arm/dts. 179