Squared

Overview

Top

Bottom

  • Legend
    • BLUE: UART0 / USB connector
    • GREEN: UART1 / GPIO header
    • RED: SPI header
    • YELLOW: Indicates pin 1

Mainboard components

Platform

+------------------+----------------------------------+
| CPU              | Intel Atom, Celeron, Pentium     |
+------------------+----------------------------------+
| PCH              | Intel Apollo Lake                |
+------------------+----------------------------------+
| EC / Super IO    | N/A                              |
+------------------+----------------------------------+
| Coprocessor      | Intel TXE 3.0                    |
+------------------+----------------------------------+

Flash chip

+---------------------+------------+
| Type                | Value      |
+=====================+============+
| Socketed flash      | no         |
+---------------------+------------+
| Vendor              | Winbond    |
+---------------------+------------+
| Model               | W25Q128FW  |
+---------------------+------------+
| Voltage             | 1.8V       |
+---------------------+------------+
| Size                | 16 MiB     |
+---------------------+------------+
| Package             | SOIC-8     |
+---------------------+------------+
| Write protection    | No         |
+---------------------+------------+
| Internal flashing   | No         |
+---------------------+------------+
| In circuit flashing | Yes        |
+---------------------+------------+

Debugging

UART0 (CN16)

This connector is located on the bottom side (see here).

UART1 (GPIO header)

The GPIO header is located on the bottom side (see here).

Building and flashing coreboot

Using the SPI header

The SPI header is located on the bottom side (see here).

Preparations

In order to build coreboot, it's necessary to extract some files from the vendor firmware. Make sure that you have a fully working dump.

[upsquared]$ ls
firmware_vendor.rom
[upsquared]$ mkdir extracted && cd extracted
[extracted]$ ifdtool -x ../firmware_vendor.rom
File ../firmware_vendor.rom is 16777216 bytes
Peculiar firmware descriptor, assuming Ibex Peak compatibility.
  Flash Region 0 (Flash Descriptor): 00000000 - 00000fff
  Flash Region 1 (BIOS): 00001000 - 00efefff
  Flash Region 2 (Intel ME): 07fff000 - 00000fff (unused)
  Flash Region 3 (GbE): 07fff000 - 00000fff (unused)
  Flash Region 4 (Platform Data): 07fff000 - 00000fff (unused)
  Flash Region 5 (Reserved): 00eff000 - 00ffefff
  Flash Region 6 (Reserved): 07fff000 - 00000fff (unused)
  Flash Region 7 (Reserved): 07fff000 - 00000fff (unused)
  Flash Region 8 (EC): 07fff000 - 00000fff (unused)
flashregion_0_flashdescriptor.bin
flashregion_1_bios.bin
flashregion_5_reserved.bin

Clean up

[coreboot]$ make distclean

Configuring

[coreboot]$ touch .config
[coreboot]$ ./util/scripts/config --enable VENDOR_UP
[coreboot]$ ./util/scripts/config --enable BOARD_UP_SQUARED
[coreboot]$ ./util/scripts/config --enable NEED_IFWI
[coreboot]$ ./util/scripts/config --enable HAVE_IFD_BIN
[coreboot]$ ./util/scripts/config --set-str IFWI_FILE_NAME "<flashregion_1_bios.bin>"
[coreboot]$ ./util/scripts/config --set-str IFD_BIN_PATH "<flashregion_0_flashdescriptor.bin>"
[coreboot]$ make olddefconfig

Building

[coreboot]$ make

Now you should have a working and ready to use coreboot build at build/coreboot.rom.

Flashing

[coreboot]$ flashrom -p <your_programmer> -w build/coreboot.rom

Board status

Working

  • bootblock, romstage, ramstage
  • Serial console UART0, UART1
  • SPI flash console
  • iGPU init with libgfxinit
  • LAN1, LAN2
  • USB2, USB3
  • HDMI, DisplayPort
  • eMMC
  • flashing with flashrom externally

Work in progress

  • Documentation
  • ACPI

Not working / Known issues

  • Generally SeaBIOS works, but it can‘t find the CBFS region and therefore it can’t load seavgabios. This is because of changes at the Apollolake platform.

Untested

  • GPIO pin header
  • 60 pin EXHAT
  • Camera interface
    • MIPI-CSI2 2-lane (2MP)
    • MIPI-CSI2 4-lane (8MP)
  • SATA3
  • USB3 OTG
  • embedded DisplayPort
  • M.2 slot
  • mini PCIe
  • flashing with flashrom internally using Linux