Elkhart Lake CRB

Overview

Elkhart Lake Reference Board (EHL CRB) is an example implementation of a compact single board computer with high performance for IoT edge devices.

This board configuration enables kernel support for the EHL board.

Note

This board configuration works on the variant of EHL boards containing Intel® Atom™ SoC.

Hardware

General information about the board can be found at the EHL website.

Supported Features

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

  • I2C

  • SMBus

UART Serial Port Support

The Elkhart Lake UARTs are NS16550-compatible. Baud rate of 115.2kbps is supported.

The intel_ehl_crb board supports the hardware features listed below.

on-chip / on-board
Feature integrated in the SoC / present on the board.
2 / 2
Number of instances that are enabled / disabled.
Click on the label to see the first instance of this feature in the board/SoC DTS files.
vnd,foo
Compatible string for the Devicetree binding matching the feature.
Click on the link to view the binding documentation.
intel_ehl_crb/elkhart_lake target

Type

Location

Description

Compatible

CPU

on-chip

Intel Elkhart Lake CPU2

intel,elkhart-lake

EDAC

on-chip

EDAC In-Band Error Correcting Code (IBECC)1

intel,ibecc

GPIO & Headers

on-chip

Intel GPIO15

intel,gpio

I2C

on-chip

Synopsys DesignWare I2C15

snps,designware-i2c

Interrupt controller

on-chip

Intel I/O Advanced Programmable Interrupt Controller (APIC)1

intel,ioapic

on-chip

Local Advanced Programmable Interrupt Controller (APIC)1

intel,loapic

on-chip

Intel VT-D Interrupt Remapping Controller1

intel,vt-d

Memory controller

on-chip

Motorola MC146818 compatible Real Timer Clock Battery Backed RAM1

motorola,mc146818-bbram

Multi-Function Device

on-chip

Motorola MC146818 MFD1

motorola,mc146818-mfd

PCIe

on-chip

Generic PCIe host controller1

pcie-controller

RTC

on-chip

Motorola MC146818 compatible Real Timer Clock1

motorola,mc146818

Serial controller

on-chip

ns16550 UART38

ns16550

SMbus

on-chip

Intel Platform Controller Hub SMBus1

intel,pch-smbus

Timer

on-chip

HPET (High-Precision Event Timer)1

intel,hpet

Watchdog

on-chip

Intel TCO Watchdog1

intel,tco-wdt

intel_ehl_crb/elkhart_lake/sbl target

Type

Location

Description

Compatible

CPU

on-chip

Intel Elkhart Lake CPU2

intel,elkhart-lake

EDAC

on-chip

EDAC In-Band Error Correcting Code (IBECC)1

intel,ibecc

GPIO & Headers

on-chip

Intel GPIO15

intel,gpio

I2C

on-chip

Synopsys DesignWare I2C15

snps,designware-i2c

Interrupt controller

on-chip

Intel I/O Advanced Programmable Interrupt Controller (APIC)1

intel,ioapic

on-chip

Local Advanced Programmable Interrupt Controller (APIC)1

intel,loapic

on-chip

Intel VT-D Interrupt Remapping Controller1

intel,vt-d

Memory controller

on-chip

Motorola MC146818 compatible Real Timer Clock Battery Backed RAM1

motorola,mc146818-bbram

Multi-Function Device

on-chip

Motorola MC146818 MFD1

motorola,mc146818-mfd

PCIe

on-chip

Generic PCIe host controller1

pcie-controller

RTC

on-chip

Motorola MC146818 compatible Real Timer Clock1

motorola,mc146818

Serial controller

on-chip

ns16550 UART38

ns16550

SMbus

on-chip

Intel Platform Controller Hub SMBus1

intel,pch-smbus

Timer

on-chip

HPET (High-Precision Event Timer)1

intel,hpet

Watchdog

on-chip

Intel TCO Watchdog1

intel,tco-wdt

Connections and IOs

Refer to the EHL website for more information.

Programming and Debugging

The intel_ehl_crb board supports the runners and associated west commands listed below.

flash debug
misc-flasher ✅ (default)

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

Build Zephyr application

  1. Build a Zephyr application; for instance, to build the hello_world application on Elkhart Lake CRB:

    # From the root of the zephyr repository
    west build -b intel_ehl_crb samples/hello_world
    

    Note

    A Zephyr EFI image file named zephyr.efi is automatically created in the build directory after the application is built.

Booting the Elkhart Lake CRB Board using UEFI

Preparing the Boot Device

Prepare a USB flash drive to boot the Zephyr application image on a board.

  1. Format the USB flash drive as FAT32.

    On Windows, open File Explorer, and right-click on the USB flash drive. Select Format.... Make sure in File System, FAT32 is selected. Click on the Format button and wait for it to finish.

    On Linux, graphical utilities such as gparted can be used to format the USB flash drive as FAT32. Alternatively, under terminal, find out the corresponding device node for the USB flash drive (for example, /dev/sdd). Execute the following command:

    $ mkfs.vfat -F 32 <device-node>
    

    Important

    Make sure the device node is the actual device node for the USB flash drive. Or else you may erase other storage devices on your system, and will render the system unusable afterwards.

  2. Copy the Zephyr EFI image file zephyr/zephyr.efi to the USB drive.

Booting Zephyr on a board

Boot the board to the EFI shell with USB flash drive connected.

  1. Insert the prepared boot device (USB flash drive) into the board.

  2. Connect the board to the host system using the serial cable and configure your host system to watch for serial data. See board’s website for more information.

    Note

    Use a baud rate of 115200.

  3. Power on the board.

  4. When the following output appears, press F7:

    Press <DEL> or <ESC> to enter setup.
    
  5. From the menu that appears, select the menu entry that describes that particular EFI shell.

  6. From the EFI shell select Zephyr EFI image to boot.

    Shell> fs0:zephyr.efi
    
  7. When the boot process completes, you have finished booting the Zephyr application image.

Booting the Elkhart Lake CRB Board over network

Prepare Linux host

  1. Install DHCP, TFTP servers. For example dnsmasq

    $ sudo apt-get install dnsmasq
    
  2. Configure DHCP server. Configuration for dnsmasq is below:

    # Only listen to this interface
    interface=eno2
    dhcp-range=10.1.1.20,10.1.1.30,12h
    
  3. Configure TFTP server.

    # tftp
    enable-tftp
    tftp-root=/srv/tftp
    dhcp-boot=zephyr.efi
    

    zephyr.efi is a Zephyr EFI binary created above.

  4. Copy the Zephyr EFI image zephyr/zephyr.efi to the /srv/tftp folder.

    $ cp zephyr/zephyr.efi /srv/tftp
    
  5. TFTP root should be looking like:

    $ tree /srv/tftp
    /srv/tftp
    └── zephyr.efi
    
  6. Restart dnsmasq service:

    $ sudo systemctl restart dnsmasq.service
    

Prepare the board for network boot

  1. Enable PXE network from BIOS settings.

  2. Make network boot as the first boot option.

Booting the board

  1. Connect the board to the host system using the serial cable and configure your host system to watch for serial data. See board’s website for more information.

    Note

    Use a baud rate of 115200.

  2. Power on the board.

  3. Verify that the board got an IP address. Run from the Linux host:

    $ journalctl -f -u dnsmasq
    dnsmasq-dhcp[5386]: DHCPDISCOVER(eno2) 00:07:32:52:25:88
    dnsmasq-dhcp[5386]: DHCPOFFER(eno2) 10.1.1.28 00:07:32:52:25:88
    dnsmasq-dhcp[5386]: DHCPREQUEST(eno2) 10.1.1.28 00:07:32:52:25:88
    dnsmasq-dhcp[5386]: DHCPACK(eno2) 10.1.1.28 00:07:32:52:25:88
    
  4. Verify that network booting is started:

    $ journalctl -f -u dnsmasq
    dnsmasq-tftp[5386]: sent /srv/tftp/zephyr.efi to 10.1.1.28
    
  5. When the boot process completes, you have finished booting the Zephyr application image.

Note

To enable PXE boot for Elkhart Lake CRB board do the following:

  1. Enable boot from PXE. Go to EFI shell and make sure that the first boot option is UEFI PXEv4.

    Shell> bcfg boot dump
    Option: 00. Variable: Boot0007
      Desc    - UEFI PXEv4 (MAC:6805CABC1997)
      DevPath - PciRoot(0x0)/Pci(0x1C,0x0)/Pci(0x0,0x0)/MAC(6805CABC1997,0x0)/IPv4(0.0.0.0)
      Optional- Y
    ...
    
  2. If UEFI PXEv4 is not the first boot option use bcfg boot mv command to change boot order

    Shell> bcfg boot mv 7 0