xref: /openbmc/u-boot/doc/README.socfpga (revision c1a16c3ab541c014b029b42cc27cae496107e170)
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