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