Gordon Peak MRB


The Intel Gordon Peak Module Reference Board (GP MRB) is used in the automotive industry for the development of in-vehicle applications such as heads-up displays and entertainment systems.

Gordon Peak MRB

Gordon Peak MRB


Supported Features

In addition to the standard architecture devices (HPET, local and I/O APICs, etc.), Zephyr supports the following Apollo Lake-specific SoC devices:

  • GPIO
  • I2C

HSUART High-Speed Serial Port Support

The Apollo Lake UARTs are NS16550-compatible, with “high-speed” capability.

Baud rates beyond 115.2kbps (up to 3.6864Mbps) are supported, with additional configuration. The UARTs are fed a master clock which is fed into a PLL which in turn outputs the baud master clock. The PLL is controlled by a per-UART 32-bit register called PRV_CLOCK_PARAMS (aka the PCP), the format of which is:

[31] [30:16] [15:1] [0]
enable m n toggle

The resulting baud master clock frequency is (n/m) * master.

Typically, the master clock is 100MHz, and the firmware by default sets the PCP to 0x3d090240, i.e., n = 288, m =  15625, which results in the de-facto standard 1.8432MHz master clock and a max baud rate of 115.2k. Higher baud rates are enabled by changing the PCP and telling Zephyr what the resulting master clock is.

Use devicetree to set the value of the PRV_CLOCK_PARAMS register in the UART block of interest. Typically an overlay up_squared.overlay would be present in the application directory, and would look something like this:

/ {
    soc {
        uart@0 {
            pcp = <0x3d090900>;
            clock-frequency = <7372800>;
            current-speed = <230400>;

The relevant variables are pcp (the value to use for PRV_CLOCK_PARAMS), and clock-frequency (the resulting baud master clock). The meaning of current-speed is unchanged, and as usual indicates the initial baud rate.

Building and Running Zephyr

Use the following procedure to boot a Zephyr application on the Gordon Peak MRB.

Build Zephyr Application

Build a Zephyr application; for instance, to build the hello_world application for the GP MRB:

Using west:

west build -b gpmrb samples/hello_world

Using CMake and ninja:

# On Linux/macOS
cd $ZEPHYR_BASE/samples/hello_world
mkdir build && cd build

# On Windows
cd %ZEPHYR_BASE%\samples\hello_world
mkdir build & cd build

# Use cmake to configure a Ninja-based build system:
cmake -GNinja -DBOARD=gpmrb ..

# Now run ninja on the generated build system:

This will create a standard ELF binary application file named zephyr.elf, and the same binary with debugging information removed named zephyr.strip. Because of the limited firmware flash area on board, we’ll use the smaller, stripped version.

Move the stripped application to your home directory for use in the next steps:

$ cp zephyr/zephyr.strip ~

Get the Leaf Hill Firmware Files

The Slim Bootloader (see the next step) requires binary firmware images specific to the GP MRB: in this instance, the “Leaf Hill” firmware. This can be downloaded from Intel:

$ cd
$ wget https://firmware.intel.com/sites/default/files/leafhill-0.70-firmwareimages.zip
$ unzip leafhill-0.70-firmwareimages.zip

There will now be two files named LEAFHILD.X64.0070.D01.1805070344.bin and LEAFHILD.X64.0070.R01.1805070352.bin or similar in your home directory, which are the debug (D) and release (R) versions of the binary packages, respectively. Make note of the release (*R01*) file name for the next step.

Build Slim Bootloader

Zephyr runs as a direct payload of the Slim Bootloader (SBL). For more complete information on SBL, including comprehensive build instructions, see the Slim Bootloader site.

$ cd
$ git clone https://github.com/slimbootloader/slimbootloader.git
$ cd slimbootloader
$ python BuildLoader.py clean
$ python BuildLoader.py build apl -p ~/zephyr.strip

Now that the SBL has been built with the Zephyr application as the direct payload, we need to “stitch” together SBL with the board firmware package. Be sure to replace the release filename with the one noted in the previous step:

$ python Platform/ApollolakeBoardPkg/Script/StitchLoader.py \
      -i ~/LEAFHILD.X64.0070.R01.1805070352.bin \
      -s Outputs/apl/Stitch_Components.zip \
      -o ~/sbl.bin

Now the file sbl.bin in your home directory contains a firmware image with SBL and the Zephyr application, ready to flash to the GP MRB.

Flash the Image

Connect the IOC to the GP MRB and connect the USB cable to your development machine. Then, using the Intel Platform Flash tools supplied with your board, flash the firmware:

$ sudo /opt/intel/platformflashtool/bin/ias-spi-programmer --write ~/sbl.bin


Refer to the instructions with the IOC and/or GP MRB for further information on flashing the firmware.

Launch Zephyr

Connect to UART 2 on the GP MRB and press the “ignition” button. After initialization messages, you will see the Zephyr banner:

***** Booting Zephyr OS v1.14.0-rc3-1254-g2a086e4c13ef *****
Hello World! gpmrb

You are running a Zephyr application on your Gordon Peak MRB.