.. _galileo:

Galileo Gen1/Gen2
#################

Overview
********

Developers can use the galileo board configuration
to build a Zephyr Kernel that runs on a Galileo Development Board (Gen 1 or Gen 2).

This board configuration enables kernel support for the board's Quark SoC,
along with the following devices:

* High Precision Event Timer (HPET)

* Peripheral Component Interconnect (PCI) bus query

* Serial Ports in Polling and Interrupt Driven Modes

.. note::
   This board configuration may work with similar boards that are not officially
   supported.

Supported Boards
****************

This section provides information about the physical characteristics of boards
that the galileo board configuration supports.
Subsections contain detailed information on pin names, jumper settings, memory mappings,
and board component layout.

Pin Names
=========

For a component layout diagram showing pin names, see page 46 of the
`Intel® Quark SoC X1000 Datasheet`_.

See also the `Intel® Galileo Datasheet`_.

For the Galileo Board Connection Diagram see page 9 of the `Intel® Galileo Board User Guide`_.


Jumpers & Switches
==================

The kernel uses the Galileo default jumper settings except for the IOREF jumper,
which must be set to match the external operating voltage of either 3.3 V or 5 V.

The Galileo default switch settings are:

+--------+--------------+
| Jumper | Setting      |
+========+==============+
| IOREF  | 3.3V or 5V   |
+--------+--------------+
| VIN    | 5V  Jumpered |
+--------+--------------+

For more information, see page 14 of the
`Intel® Galileo Board User Guide`_.


Memory Mappings
===============

The galileo board configuration uses default hardware memory map
addresses and sizes.

For a list of memory mapped registers, see page 868 of the
`Intel® Quark SoC X1000 Datasheet`_.


Component Layout
================

See page 3 of the Intel® Galileo Datasheet for a component layout
diagram. Click the link to open the `Intel® Galileo Datasheet`_.


For a block diagram, see page 38 of the `Intel® Quark SoC X1000 Datasheet`_.


Supported Features
******************

The galileo board configuration supports the following hardware features:

* HPET

* PCI bus

* Advanced Programmed Interrupt Controller (APIC)

* Serial Ports in Polling and Interrupt Driven Modes

* Ethernet in Interrupt Driven Mode

+-----------+------------+-----------------------+
| Interface | Controller | Driver/Component      |
+===========+============+=======================+
| HPET      | on-chip    | system clock          |
+-----------+------------+-----------------------+
| PCI       | on-chip    | PCI library           |
+-----------+------------+-----------------------+
| APIC      | on-chip    | interrupt controller  |
+-----------+------------+-----------------------+
| UART      | on-chip    | serial port-polling;  |
|           |            | serial port-interrupt |
+-----------+------------+-----------------------+
| Ethernet  | on-chip    | Ethernet              |
+-----------+------------+-----------------------+

The kernel currently does not support other hardware features.
See the `Intel® Quark Core Hardware Reference Manual`_ for a
complete list of Galileo board hardware features, and the
`Intel® Quark Software Developer Manual for Linux`_


PCI
===

PCI drivers assume that IO regions and IRQs for devices are
preconfigured identically by the firmware on all supported devices.
This configuration is specified in the Kconfig file for the Intel
Quark X1000 SoC.  The PCI library supports dynamically enumerating PCI
devices, but that support is disabled by default.

.. note::
   The PCI library does not support 64-bit devices.
   Memory address and size storage only require 32-bit integers.

Serial Port Polling Mode Support
================================

The polling mode serial port allows debug output to be printed.

For more information, see `Intel® Quark SoC X1000 Datasheet`_,
section 18.3.3 FIFO Polled-Mode Operation


Serial Port Interrupt Mode Support
==================================

The interrupt mode serial port provides general serial communication
and external communication.

For more information, see `Intel® Quark SoC X1000 Datasheet`_, section 21.12.1.4.5 Poll Mode


Interrupt Controller
====================

The galileo board configuration uses the kernel's static
Interrupt Descriptor Table (IDT) to program the
Advanced Programmable Interrupt Controller (APIC)
interrupt redirection table.

Interrupts
----------

+-----+-------+---------+--------------------------+
| IRQ | Name  | Remarks | Used by Zephyr Kernel    |
+=====+=======+=========+==========================+
| 17  | INTB  | UART    | serial port when used in |
|     |       |         | interrupt mode           |
+-----+-------+---------+--------------------------+
| 20  | timer | HPET    | timer driver             |
+-----+-------+---------+--------------------------+

HPET System Clock Support
=========================

Galileo uses HPET timing with legacy-free timer support. The galileo platform
configuration uses HPET as a system clock timer.

Ethernet Support
================

The Ethernet driver allocates a Direct Memory Access (DMA)-accessible
pair of receive and transmit buffers and descriptors.  The driver
operates the network interface in store-and-forward mode and enables
the receive interrupt.

For more information, see `Intel® Quark SoC X1000 Datasheet`_,
section 15.0 10/100 Mbps Ethernet

Procedures
**********

Use the following procedures for booting an image on a Galileo board.

* `Creating a GRUB2 Boot Loader Image from a Linux Host`_

* `Preparing the Boot Device`_

* `Booting the Galileo Board`_


Creating a GRUB2 Boot Loader Image from a Linux Host
====================================================

If you are having problems running an application using the default GRUB
of the hardware, follow these steps to test on Galileo2 boards using a custom
GRUB.

#. Install the requirements to build GRUB on your host machine.

   On Ubuntu, type:

   .. code-block:: console

      $ sudo apt-get install bison autoconf libopts25-dev flex automake

   On Fedora, type:

   .. code-block:: console

     $ sudo dnf install gnu-efi bison m4 autoconf help2man flex \
        automake texinfo

#. Clone and build the GRUB repository using the script in Zephyr tree, type:

   .. code-block:: console

     $ cd $ZEPHYR_BASE
     $ ./scripts/build_grub.sh

#. Find the binary at :file:`$ZEPHYR_BASE/scripts/grub/bin/grub.efi`.



Preparing the Boot Device
=========================

Prepare either an SD-micro card or USB flash drive to boot the Zephyr
application image on a Galileo board. The following instructions apply to both
devices.


#. Set the board configuration to Galileo by changing the
   :command:`make` command that is executed in the app directory
   (e.g. :file:`$ZEPHYR_BASE/samples/hello_world/nanokernel`) to:

   .. code-block:: console

      $ make BOARD=galileo

   .. note::
      A stripped project image file named :file:`zephyr.strip` is
      automatically created when the project is built. This image has
      removed debug information from the :file:`zephyr.elf` file.

#. Use one of these cables for serial output:

   `<http://www.ftdichip.com/Products/Cables/USBTTLSerial.htm>`_

#. Format a microSD as FAT

#. Create the following directories

   :file:`efi`

   :file:`efi/boot`

   :file:`kernel`

#. Copy the kernel file :file:`outdir/zephyr.strip` to the :file:`$SDCARD/kernel` folder.

#. Copy your built version of GRUB to :file:`$SDCARD/efi/boot/bootia32.efi`

#. Create :file:`$SDCARD/efi/boot/grub.cfg` containing the following:

   .. code-block:: console

      set default=0
      set timeout=10

      menuentry "Zephyr Kernel" {
         multiboot /kernel/zephyr.strip
      }

Booting the Galileo Board
=========================

Boot the Galileo board from the boot device using GRUB2
with the firmware present in the on-board flash.


Steps
-----

1. Insert the prepared boot device (micro-SD card or USB flash
   drive) into the Galileo board.

2. Connect the board to the host system using the serial cable and
   configure your host system to watch for serial data.  See
   `<https://software.intel.com/en-us/articles/intel-galileo-gen-2-board-assembly-using-eclipse-and-intel-xdk-iot-edition>`_
   for the gen. 2 board,
   `<https://software.intel.com/en-us/articles/intel-galileo-gen-1-board-assembly-using-eclipse-and-intel-xdk-iot-edition>`_
   for the gen. 1 board, or the Getting Started guide that you
   received with the board.

   .. note::
      On Windows, PuTTY has an option to set up configuration for
      serial data.  Use a baud rate of 115200 and the SCO keyboard
      mode.  The keyboard mode option is in a submenu of the Terminal
      menu on the left side of the screen.

3. Power on the Galileo board.

4. When the following output appears, press :kbd:`F7`:

   .. code-block:: console

     Press [Enter] to directly boot.
     Press [F7]    to show boot menu options.

5. From the menu that appears, select :guilabel:`UEFI Misc Device` to
   boot from a micro-SD card.  To boot from a USB flash drive, select
   the menu entry that desribes that particular type of USB flash
   drive.

   GRUB2 starts and a menu shows entries for the items you added
   to the file :file:`grub.cfg`.

6. Select the image you want to boot and press :guilabel:`Enter`.

   When the boot process completes, you have finished booting the
   Zephyr application image.

   .. note::
      If the following messages appear during boot, they can be safely
      ignored.
      .. code-block:: console
         WARNING: no console will be available to OS
         error: no suitable video mode found.

Known Problems and Limitations
******************************

At this time, the kernel does not support the following:

* Isolated Memory Regions
* Serial port in Direct Memory Access (DMA) mode
* Supervisor Mode Execution Protection (SMEP)

Bibliography
************

1. `Intel® Galileo Datasheet`_, Order Number: 329681-001US

.. _Intel® Galileo Datasheet:
   http://www.intel.com/newsroom/kits/quark/galileo/pdfs/Intel_Galileo_Datasheet.pdf

2. `Intel® Galileo Board User Guide`_.

.. _Intel® Galileo Board User Guide:
   http://download.intel.com/support/galileo/sb/galileo_boarduserguide_330237_001.pdf

3. `Intel® Quark SoC X1000 Datasheet`_, Order Number: 329676-001US

.. _Intel® Quark SoC X1000 Datasheet:
   https://communities.intel.com/servlet/JiveServlet/previewBody/
   21828-102-2-25120/329676_QuarkDatasheet.pdf

4. `Intel® Quark Core Hardware Reference Manual`_.

.. _Intel® Quark Core Hardware Reference Manual:
   http://caxapa.ru/thumbs/497461/Intel_Quark_Core_HWRefMan_001.pdf

5. `Intel® Quark Software Developer Manual for Linux`_.

.. _Intel® Quark Software Developer Manual for Linux:
   http://www.intel.com/content/dam/www/public/us/en/documents/manuals/quark-x1000-linux-sw-developers-manual.pdf
