1*8baa1783SStephen Arnold---------------------------------------- 2c5c1af21SChin Liang SeeSOCFPGA Documentation for U-Boot and SPL 3*8baa1783SStephen Arnold---------------------------------------- 4c5c1af21SChin Liang See 5c5c1af21SChin Liang SeeThis README is about U-Boot and SPL support for Altera's ARM Cortex-A9MPCore 6c5c1af21SChin Liang Seebased SOCFPGA. To know more about the hardware itself, please refer to 7c5c1af21SChin Liang Seewww.altera.com. 8c5c1af21SChin Liang See 9c5c1af21SChin Liang See 10c5c1af21SChin Liang Seesocfpga_dw_mmc 11*8baa1783SStephen Arnold-------------- 12*8baa1783SStephen Arnold 13c5c1af21SChin Liang SeeHere are macro and detailed configuration required to enable DesignWare SDMMC 14c5c1af21SChin Liang Seecontroller support within SOCFPGA 15c5c1af21SChin Liang See 16c5c1af21SChin Liang See#define CONFIG_SYS_MMC_MAX_BLK_COUNT 256 17c5c1af21SChin Liang See-> Using smaller max blk cnt to avoid flooding the limited stack in OCRAM 18*8baa1783SStephen Arnold 19*8baa1783SStephen Arnold-------------------------------------------------- 20*8baa1783SStephen ArnoldGenerating the handoff header files for U-Boot SPL 21*8baa1783SStephen Arnold-------------------------------------------------- 22*8baa1783SStephen Arnold 23*8baa1783SStephen ArnoldThis text is assuming quartus 16.1, but newer versions will probably work just fine too; 24*8baa1783SStephen Arnoldverified with DE1_SOC_Linux_FB demo project (https://github.com/VCTLabs/DE1_SOC_Linux_FB). 25*8baa1783SStephen ArnoldUpdated/working projects should build using either process below. 26*8baa1783SStephen Arnold 27*8baa1783SStephen ArnoldNote: it *should* work from Quartus 14.0.200 onwards, however, the current vendor demo 28*8baa1783SStephen Arnoldprojects must have the IP cores updated as shown below. 29*8baa1783SStephen Arnold 30*8baa1783SStephen ArnoldRebuilding your Quartus project 31*8baa1783SStephen Arnold------------------------------- 32*8baa1783SStephen Arnold 33*8baa1783SStephen ArnoldChoose one of the follwing methods, either command line or GUI. 34*8baa1783SStephen Arnold 35*8baa1783SStephen ArnoldUsing the comaand line 36*8baa1783SStephen Arnold~~~~~~~~~~~~~~~~~~~~~~ 37*8baa1783SStephen Arnold 38*8baa1783SStephen ArnoldFirst run the embedded command shell, using your path to the Quartus install: 39*8baa1783SStephen Arnold 40*8baa1783SStephen Arnold $ /path/to/intelFPGA/16.1/embedded/embedded_command_shell.sh 41*8baa1783SStephen Arnold 42*8baa1783SStephen ArnoldThen (if necessary) update the IP cores in the project, generate HDL code, and 43*8baa1783SStephen Arnoldbuild the project: 44*8baa1783SStephen Arnold 45*8baa1783SStephen Arnold $ cd path/to/project/dir 46*8baa1783SStephen Arnold $ qsys-generate soc_system.qsys --upgrade-ip-cores 47*8baa1783SStephen Arnold $ qsys-generate soc_system.qsys --synthesis=[VERILOG|VHDL] 48*8baa1783SStephen Arnold $ quartus_sh --flow compile <project name> 49*8baa1783SStephen Arnold 50*8baa1783SStephen ArnoldConvert the resulting .sof file (SRAM object file) to .rbf file (Raw bit file): 51*8baa1783SStephen Arnold 52*8baa1783SStephen Arnold $ quartus_cpf -c <project_name>.sof soc_system.rbf 53*8baa1783SStephen Arnold 54*8baa1783SStephen Arnold 55*8baa1783SStephen ArnoldGenerate BSP handoff files 56*8baa1783SStephen Arnold~~~~~~~~~~~~~~~~~~~~~~~~~~ 57*8baa1783SStephen Arnold 58*8baa1783SStephen ArnoldYou can run the bsp editor GUI below, or run the following command from the 59*8baa1783SStephen Arnoldproject directory: 60*8baa1783SStephen Arnold 61*8baa1783SStephen Arnold $ /path/to/bsb/tools/bsp-create-settings --type spl --bsp-dir build \ 62*8baa1783SStephen Arnold --preloader-settings-dir hps_isw_handoff/soc_system_hps_0/ \ 63*8baa1783SStephen Arnold --settings build/settings.bsp 64*8baa1783SStephen Arnold 65*8baa1783SStephen ArnoldYou should use the bsp "build" directory above (ie, where the settings.bsp file is) 66*8baa1783SStephen Arnoldin the following u-boot command to update the board headers. Once these headers 67*8baa1783SStephen Arnoldare updated for a given project build, u-boot should be configured for the 68*8baa1783SStephen Arnoldproject board (eg, de0-nano-sockit) and then build the normal spl build. 69*8baa1783SStephen Arnold 70*8baa1783SStephen ArnoldNow you can skip the GUI section. 71*8baa1783SStephen Arnold 72*8baa1783SStephen Arnold 73*8baa1783SStephen ArnoldUsing the Qsys GUI 74*8baa1783SStephen Arnold~~~~~~~~~~~~~~~~~~ 75*8baa1783SStephen Arnold 76*8baa1783SStephen Arnold1. Navigate to your project directory 77*8baa1783SStephen Arnold2. Run Quartus II 78*8baa1783SStephen Arnold3. Open Project (Ctrl+J), select <project_name>.qpf 79*8baa1783SStephen Arnold4. Run QSys [Tools->QSys] 80*8baa1783SStephen Arnold 4.1 In the Open dialog, select '<project_name>.qsys' 81*8baa1783SStephen Arnold 4.2 In the Open System dialog, wait until completion and press 'Close' 82*8baa1783SStephen Arnold 4.3 In the Qsys window, click on 'Generate HDL...' in bottom right corner 83*8baa1783SStephen Arnold 4.3.1 In the 'Generation' window, click 'Generate' 84*8baa1783SStephen Arnold 4.3.2 In the 'Generate' dialog, wait until completion and click 'Close' 85*8baa1783SStephen Arnold 4.4 In the QSys window, click 'Finish' 86*8baa1783SStephen Arnold 4.4.1 In the 'Quartus II' pop up window, click 'OK' 87*8baa1783SStephen Arnold5. Back in Quartus II main window, do the following 88*8baa1783SStephen Arnold 5.1 Use Processing -> Start -> Start Analysis & Synthesis (Ctrl+K) 89*8baa1783SStephen Arnold 5.2 Use Processing -> Start Compilation (Ctrl+L) 90*8baa1783SStephen Arnold 91*8baa1783SStephen Arnold ... this may take some time, have patience ... 92*8baa1783SStephen Arnold 93*8baa1783SStephen Arnold6. Start the embedded command shell as shown in the previous section 94*8baa1783SStephen Arnold 6.1 Change directory to 'software/spl_bsp' 95*8baa1783SStephen Arnold 6.2 Prepare BSP by launching the BSP editor from ECS 96*8baa1783SStephen Arnold => bsp-editor 97*8baa1783SStephen Arnold 6.3 In BSP editor 98*8baa1783SStephen Arnold 6.3.1 Use File -> Open 99*8baa1783SStephen Arnold 6.3.2 Select 'settings.bsp' file 100*8baa1783SStephen Arnold 6.3.3 Click Generate 101*8baa1783SStephen Arnold 6.3.4 Click Exit 102*8baa1783SStephen Arnold 103*8baa1783SStephen Arnold 104*8baa1783SStephen ArnoldPost handoff generation 105*8baa1783SStephen Arnold~~~~~~~~~~~~~~~~~~~~~~~ 106*8baa1783SStephen Arnold 107*8baa1783SStephen ArnoldNow that the handoff files are generated, U-Boot can be used to process 108*8baa1783SStephen Arnoldthe handoff files generated by the bsp-editor. For this, please use the 109*8baa1783SStephen Arnoldfollowing script from the u-boot source tree: 110*8baa1783SStephen Arnold 111*8baa1783SStephen Arnold $ ./arch/arm/mach-socfpga/qts-filter.sh \ 112*8baa1783SStephen Arnold <soc_type> \ 113*8baa1783SStephen Arnold <input_qts_dir> \ 114*8baa1783SStephen Arnold <input_bsp_dir> \ 115*8baa1783SStephen Arnold <output_dir> 116*8baa1783SStephen Arnold 117*8baa1783SStephen ArnoldProcess QTS-generated files into U-Boot compatible ones. 118*8baa1783SStephen Arnold 119*8baa1783SStephen Arnold soc_type - Type of SoC, either 'cyclone5' or 'arria5'. 120*8baa1783SStephen Arnold input_qts_dir - Directory with compiled Quartus project 121*8baa1783SStephen Arnold and containing the Quartus project file (QPF). 122*8baa1783SStephen Arnold input_bsp_dir - Directory with generated bsp containing 123*8baa1783SStephen Arnold the settings.bsp file. 124*8baa1783SStephen Arnold output_dir - Directory to store the U-Boot compatible 125*8baa1783SStephen Arnold headers. 126*8baa1783SStephen Arnold 127*8baa1783SStephen ArnoldThis will generate (or update) the following 4 files: 128*8baa1783SStephen Arnold 129*8baa1783SStephen Arnold iocsr_config.h 130*8baa1783SStephen Arnold pinmux_config.h 131*8baa1783SStephen Arnold pll_config.h 132*8baa1783SStephen Arnold sdram_config.h 133*8baa1783SStephen Arnold 134*8baa1783SStephen ArnoldThese files should be copied into "qts" directory in the board directory 135*8baa1783SStephen Arnold(see output argument of qts-filter.sh command above). 136*8baa1783SStephen Arnold 137*8baa1783SStephen ArnoldHere is an example for the DE-0 Nano SoC after the above rebuild process: 138*8baa1783SStephen Arnold 139*8baa1783SStephen Arnold $ ll board/terasic/de0-nano-soc/qts/ 140*8baa1783SStephen Arnold total 36 141*8baa1783SStephen Arnold -rw-r--r-- 1 sarnold sarnold 8826 Mar 21 18:11 iocsr_config.h 142*8baa1783SStephen Arnold -rw-r--r-- 1 sarnold sarnold 4398 Mar 21 18:11 pinmux_config.h 143*8baa1783SStephen Arnold -rw-r--r-- 1 sarnold sarnold 3190 Mar 21 18:11 pll_config.h 144*8baa1783SStephen Arnold -rw-r--r-- 1 sarnold sarnold 9022 Mar 21 18:11 sdram_config.h 145*8baa1783SStephen Arnold 146*8baa1783SStephen ArnoldNote: file sizes will differ slightly depending on the selected board. 147*8baa1783SStephen Arnold 148*8baa1783SStephen ArnoldNow your board is ready for full mainline support including U-Boot SPL. 149*8baa1783SStephen ArnoldThe Preloader will not be needed any more. 150