This patch adds the steps to manually (re)build a Quartus FPGA project, generate the required BSP glue, and update u-boot handoff files for mainline SPL support. Requires Quartus toolchain and current U-Boot. Signed-off-by: Steve Arnold <stephen.arnold42@gmail.com> Cc: Dinh Nguyen <dinguyen@kernel.org> Cc: Stefan Roese <sr@denx.de> Cc: Marek Vasut <marex@denx.de>master
parent
40a808f173
commit
8baa17832f
@ -1,18 +1,149 @@ |
|||||||
|
---------------------------------------- |
||||||
-------------------------------------------- |
|
||||||
SOCFPGA Documentation for U-Boot and SPL |
SOCFPGA Documentation for U-Boot and SPL |
||||||
-------------------------------------------- |
---------------------------------------- |
||||||
|
|
||||||
This README is about U-Boot and SPL support for Altera's ARM Cortex-A9MPCore |
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 |
based SOCFPGA. To know more about the hardware itself, please refer to |
||||||
www.altera.com. |
www.altera.com. |
||||||
|
|
||||||
|
|
||||||
-------------------------------------------- |
|
||||||
socfpga_dw_mmc |
socfpga_dw_mmc |
||||||
-------------------------------------------- |
-------------- |
||||||
|
|
||||||
Here are macro and detailed configuration required to enable DesignWare SDMMC |
Here are macro and detailed configuration required to enable DesignWare SDMMC |
||||||
controller support within SOCFPGA |
controller support within SOCFPGA |
||||||
|
|
||||||
#define CONFIG_SYS_MMC_MAX_BLK_COUNT 256 |
#define CONFIG_SYS_MMC_MAX_BLK_COUNT 256 |
||||||
-> Using smaller max blk cnt to avoid flooding the limited stack in OCRAM |
-> 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. |
||||||
|
Loading…
Reference in new issue