v0.2.1 - 2026-10-22

  • New features

    • Hardware watchdog through the TPS65911 PMIC (linux/0014), petted by nerves_heart. If the system hangs, the PMIC power-cycles the Surface 100-200 seconds after the last pet, and Nerves.Runtime reports the boot as a watchdog reset. The Tegra watchdog is turned off: its reset left the screen black instead of restarting. The kernel now has CONFIG_WATCHDOG_NOWAYOUT, like the official Nerves systems.
  • Changes

    • Removed the clk_ignore_unused and pd_ignore_unused kernel arguments. They kept the screen on while the Tegra display driver wasn't used during bring-up. The display driver now claims the clocks and power domains it needs. Tested on the device: the screen, Type Cover, touchscreen, audio, battery and Wi-Fi all still work.

v0.2.0 - 2026-10-21

The first version that runs on the Surface RT. Nerves installs to the internal eMMC, boots through GRUB, and updates over Wi-Fi with mix upload.

  • New features

    • Boot through GRUB (arm-efi) from the eMMC, with A/B updates. New firmware boots once as a trial, and GRUB falls back to the previous firmware if Nerves.Runtime's StartupGuard doesn't validate it.
    • Kernel arguments are in each root filesystem (/boot/kernel-args.grubenv), so they ship with firmware updates and are covered by the fallback.
    • All four CPU cores, started through the UEFI firmware's ACPI multiprocessor parking protocol (linux/0005).
    • 1 MB L2 cache, enabled through the Surface RT's secure monitor (linux/0004, linux/0006).
    • Software reboot, through the PMIC (linux/0003).
    • Wi-Fi (Marvell 88W8797, mwifiex) as wlan0 (linux/0002).
    • Touch/Type Cover with hotplug (linux/0011, linux/0012).
    • Touchscreen, battery and charger status (linux/0009, linux/0010), speakers (linux/0008, linux/0013), and USB flash drives (linux/0007).
    • alsa-utils (amixer, aplay, speaker-test).
    • UTF-8 locale, so the Erlang VM no longer falls back to latin1.
  • Fixes

    • The PMC probe no longer fails when booting through UEFI. Without it the SD card, USB, Wi-Fi and backlight didn't work.
    • clk_ignore_unused and pd_ignore_unused keep the screen on.
    • Only kernel errors are printed on the IEx console (loglevel=4).
    • Nerves.Runtime's StartupGuard no longer reboots the device after 15 minutes.
  • Mainline bugs fixed here

    • linux/0007: ChipIdea's Tegra DMA bounce buffer corrupted transfers that came with their own DMA mapping, so USB flash drives never showed up.
    • linux/0013: the WM8962 codec driver turned off SYSCLK while it was in use, so the speakers were silent.
  • Known limitations

    • The CPU runs at a fixed 1.3 GHz, with no DVFS or deep CPU idle.
    • The first install needs a temporary boot setup (see the README).
    • mix upload doesn't update grub.cfg on the boot partition.
  • Package updates

    • nerves_system_br 1.35.2 (Erlang/OTP 29.1.2). OTP 29.1's SSH daemon rejected mix upload from macOS.
    • Linux 6.18.36 with the Surface RT device tree and the patches above.

v0.1.0 (unreleased)

  • Initial skeleton, based on nerves_system_x86_64 (GRUB A/B updates) and nerves_system_bbb (ARMv7 toolchain), using nerves_system_br 1.35.0. Not built or booted yet.