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

---------------------------------------------------------------------
Cyclone 5 / Arria 5 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 command 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.

----------------------------------------------------------
Arria 10 generating the handoff header files for U-Boot SPL
----------------------------------------------------------

A header file for inclusion in a devicetree for Arria10 can be generated
by the qts-filter-a10.sh script directly from the hps_isw_handoff/hps.xml
file generated during the FPGA project compilation.  The header contains
all PLL, clock, pinmux, and bridge configurations required.

Please look at the socfpga_arria10_socdk_sdmmc-u-boot.dtsi for an example
that includes use of the generated handoff header.

Devicetree header generation
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The qts-filter-a10.sh script can process the compile time genetated hps.xml
to create the appropriate devicetree header.


  $ ./arch/arm/mach-socfpga/qts-filter-a10.sh \
        <hps_xml> \
        <output_file>

    hps_xml      - hps_isw_handoff/hps.xml from Quartus project
    output_file  - Output filename and location for header file

The script generates a single header file names <output_file> that should
be placed in arch/arm/dts.
