SoCkit, SoC Development Kit

Intro
=====

This is the buildroot board support for the Arrow SoCkit Evaluation Board
and the Altera Cyclone 5 Development Board.

A good source of information for Arrow SoCkit:
http://www.rocketboards.org/foswiki/Documentation/ArrowSoCKitEvaluationBoard

More information about SoC DK:
https://www.altera.com/products/boards_and_kits/dev-kits/altera/kit-cyclone-v-soc.html

How it works
============

Boot process:
-------------

In summary, the bootloader has multiple stages, an hardcoded boot routine is
loaded from an on-chip ROM.

  - That first stage is scanning the SD card's partition table to find
    partition having the 0xA2 type.
  - This partition is expected to contain a boot image on its first 60 Kb,
    because u-boot is bigger, we must fill it with a preloader (u-boot-spl)
    which will load the u-boot image.
  - Then the u-boot image will load the Linux kernel.

A good source of information for the boot process is:
http://xillybus.com/tutorials/u-boot-image-altera-soc

Note for the SPL:
The SPL generated by the u-boot from Rocketboards doesn't seems to work,
therefore we provide a patch for {uboot-PKG}/board/altera/socfpga_cyclone5/*
based on the files generated with the Altera example design.

For more information about this files please look at:
http://www.rocketboards.org/foswiki/Documentation/PreloaderUbootCustomization#Common_Source_Code

How to build it
===============

Configure Buildroot
-------------------

The altera_sockit_defconfig configuration is a minimal configuration with
all that is required to bring the SoCkit:

  $ make altera_sockit_defconfig

and for the SoC Development Board:

  $ make altera_sockdk_defconfig

Build everything
----------------

Note: you will need to have access to the network, since Buildroot will
download the packages' sources.

  $ make

Result of the build
-------------------

After building, you should obtain this tree:

    output/images/
    ├── rootfs.ext2
    ├── rootfs.ext3 -> rootfs.ext2
    ├── rootfs.tar
    ├── socfpga_cyclone5_sockit.dtb or socfpga_cyclone5_socdk.dtb
    ├── socfpga.dtb
    ├── u-boot.img
    ├── u-boot-spl.bin
    └── uImage


Signing the Preloader
---------------------

*** BEWARE ****
The u-boot-spl.bin must be signed using the Altera's tool "mkpimage".
This tool comes as a part of the Altera development environnment (SoC EDS).
A fork of this tool have been done by Maxime Hadjinlian and can be found here:
https://github.com/maximeh/mkpimage

Remember that without signing the u-boot-spl.bin, the board will not boot !!!

  $ mkpimage u-boot-spl.bin -o u-boot-spl-signed.bin

Prepare your SDcard
===================

A good source of information for the partitioning process is:
http://www.rocketboards.org/foswiki/view/Projects/SoCKitLinaroLinuxDesktop#Partition_the_SD_Card

Create the SDcard partition table
----------------------------------

Determine the device associated to the SD card:

  $ cat /proc/partitions

let's assume it is /dev/mmcblk0:

  $ sudo fdisk /dev/mmcblk0

Delete all previous partitions with 'd' then create the new partition table,
using these options, pressing enter after each one:

  * n p 1 9000000 +20480K t 1 b
  * n p 2 4096 +4496384K t 83
  * n p 3 2048 +1024K t 3 a2

Using the 'p' option, the SD card's partition must look like this:

Device         Boot     Start       End  Blocks  Id System
/dev/mmcblk0p1        9000000   9041919   20960   b W95 FAT32
/dev/mmcblk0p2           4096   8996863 4496384  83 Linux
/dev/mmcblk0p3           2048      4095    1024  a2 Unknown

Then write the partition table using 'w' and exit.

Make partition one a DOS partition:

  $ sudo mkdosfs /dev/mmcblk0p1

Install the binaries to the SDcard
----------------------------------

Remember your binaries are located in output/images/, go inside that directory:

  $ cd output/images

The partition with type a2 is the partition scan by the first bootloader stage
in the SoCkit ROM to find the next bootloader stage so we must write the signed
preloader and the u-boot binaries in that partition:

  $ sudo dd if=u-boot-spl-signed.bin of=/dev/mmcblk0p3 bs=64k seek=0
  $ sudo dd if=u-boot.img of=/dev/mmcblk0p3 bs=64k seek=4

Copy the Linux kernel and its Device tree:

  $ sudo mkdir /mnt/sdcard
  $ sudo mount /dev/mmcblk0p1 /mnt/sdcard
  $ sudo cp socfpga.dtb uImage /mnt/sdcard
  $ sudo umount /mnt/sdcard

Copy the rootfs:

  $ sudo dd if=rootfs.ext2 of=/dev/mmcblk0p2 bs=64k
  $ sudo sync

It's Done!

Finish
======

Eject your SDcard, insert it in your SoCkit, and power it up.

if you want a serial console, you can plug a micro B USB cable on the USB-UART
port, the serial port config to used is 57600/8-N-1.
