Project Wallace is bringing Linux to the 14-inch M4 Pro MacBook Pro: Apple Mac16,8 / J614s, built around the T6040 “Brava Chop” SoC. The project tracks the board description, kernel and m1n1 changes, build tooling, experiments, and evidence needed to turn first-boot support into a reliable upstream-quality Linux system.
This is experimental bring-up work, not a ready-to-install distribution. There is no public installer image yet, and the machine is not ready to replace macOS as a dependable daily driver.
Linux boots both tethered and untethered. The current useful baseline is a persistent Alpine system on the SD card with a graphical desktop: Xorg and i3 on the internal panel at 2x HiDPI scaling, the internal keyboard with the Norwegian layout, WiFi associating and routing traffic, Bluetooth, SMC telemetry, cpufreq, and verified read/write persistence across reboots. A five-core RAM-root desktop has run successfully; the persistent SD-root system currently uses one core because a reproducible multi-core kernel memory race remains the largest reliability blocker.
That race is now characterised as fail-stop: it kills processes rather than returning wrong data. With a fault firing and killing a concurrent process, twelve consecutive copy-and-compare verifications came back byte-identical. So running above one core is a stability limit, not a data-integrity risk, and storage written by earlier multi-core sessions is not suspect.
The project has therefore moved beyond “can Linux boot?” The work now is making the existing hardware support stable, maintainable, and suitable for upstream review.
| Component | What works | What remains |
|---|---|---|
| Boot | A self-contained, enrolled m1n1 object cold-boots Linux without a host-supplied payload | The current raw-object path is project-specific; a conventional stage-2 or EFI-style flow is optional future work |
| CPU and cpufreq | All 14 cores enter the kernel; a five-core RAM-root desktop and frequency scaling are proven. The multi-core fault is confirmed fail-stop, so it costs availability but not data integrity | Multi-core page-copy workloads can fault in the kernel. A minimal reproducer exists; the simple missing-barrier theory has been refuted, leaving page lifetime/refcount or TLB invalidation as leading areas to investigate |
| Display | simpledrm/fbcon and Xorg with i3 or dwm work on the internal panel | No GPU acceleration or panel-backlight control |
| Input | The internal keyboard works in X (Norwegian layout, ⌘ as the i3 modifier) and the keyboard backlight works. Both HID interfaces register evdev nodes | The trackpad emits zero events. Measured directly from /dev/input/event0 while the surface was touched: 0 bytes, against 9 456 bytes from the keyboard in the same window. Enumeration is complete and correct (full multitouch contract), so the entire userspace stack is exonerated and the fault is firmware-side |
| SMC and power | Battery, AC, charger, and temperature telemetry work | cpuidle, suspend, lid/power integration, and production power policy remain incomplete |
| PCIe | The T6040 root complex, link training, and approved endpoint-power paths work | Upstream cleanup and broader regression coverage |
| WiFi and Bluetooth | BCM4388 WiFi associates, receives DHCP, and routes traffic (verified 2026-08-04 on an open 5 GHz network, with ping and curl working); Bluetooth exposes a working hci0 |
Only one wpa_supplicant may run or the radio is starved; regulatory.db is missing so the domain stays country 00 |
| SD storage | Signed off. The GL9755 reader enumerates as mmc0, a dirty exFAT volume is repaired in place by a bundled static fsck.exfat, and the ext4 loop root mounts read-write. A 64 KiB random file hashed identically across four reboots |
Clean-shutdown validation, and repeated cold boots without the tether |
| Persistent root | At maxcpus=1, an ext4 loop image on the SD card boots unattended to Xorg and i3, associates with WiFi, and retains writes across reboots. /init self-heals the card's helper scripts, keymap, timezone, cursor theme and WiFi config from the image, so the card can no longer drift behind the repo |
Clean shutdown and repeated cold-boot validation |
| Internal NVMe | Raw m1n1 reads survive several completion-queue wraps; Linux enumerates namespaces and briefly mounts exFAT | Linux triggers a firmware assert at the first I/O completion-queue wrap; Linux writes are not verified |
| USB | The DFU controller works in Linux device mode | USB host mode, Type-C role handling, and VBUS remain unproven |
| GPU | The internal framebuffer provides an unaccelerated desktop | T6040/G16 needs matching kernel, firmware-ABI, m1n1, and Mesa support; G14 tables are not a valid substitute |
| Audio, camera, suspend | Hardware topology and dependencies have been mapped in several areas | No usable audio or camera path; suspend is unsafe without a valid CPU-retention model |
This table is the milestone view; stage-level boundaries and per-stage detail live in docs/ROADMAP.md.
| Milestone | State | Result so far | Next boundary |
|---|---|---|---|
| Boot and recovery foundation | Complete | Stable m1n1 handoff, tethered development, and enrolled untethered Linux boot | Keep the boot artifacts reproducible and prepare upstream-shaped changes |
| Kernel and board foundation | Functional | CPU topology, interrupt controller, PMGR, watchdog, framebuffer, DockChannel, SMC, PCIe, SDHCI, WiFi, Bluetooth, and cpufreq are integrated | Resolve the multi-core memory race, add cpuidle, and upstream the proven pieces |
| Local unaccelerated desktop | Functional | Internal panel, keyboard, keyboard backlight, and Xorg/i3 work, with 2x HiDPI scaling, the Norwegian layout and a usable cursor | Trackpad motion (firmware-side), panel backlight, accelerated graphics |
| Connectivity | Functional | WiFi and Bluetooth work over the internal PCIe endpoint | Upstreaming and, separately, a safe USB-host/Type-C implementation |
| Persistent Linux system | Functional | SD storage is persistent and verified across four reboots; a one-core Alpine root boots to a graphical desktop with WiFi | Prove clean shutdown, then validate across repeated cold boots |
| Stable multi-core userspace | Active blocker | Five-core RAM-root use is proven, the two-core kernel fault has a small repeatable reproducer, and the failure mode is confirmed fail-stop rather than silently corrupting | Report and isolate the page lifetime/TLB failure; do not treat timing perturbations as a fix |
| Internal NVMe root | Experimental | Both m1n1 and Linux reach real media; m1n1 reads are stable across wraps | Explain and fix the Linux first-CQ-wrap firmware assert before any write or root migration |
| Power and multimedia | Early | SMC telemetry and cpufreq work; audio/camera topology is documented | cpuidle, suspend, panel backlight, audio, camera, lid handling, and thermal policy |
| Practical daily driver | Not yet | Most of the basic platform is visible and several major devices work | Clean persistent boot, stable multi-core execution, trackpad, backlight, and dependable service integration |
The current objective is a practical daily driver (CJ, 2026-08-03): SD, USB, NVMe, WiFi, Bluetooth and the trackpad all working unambiguously. Upstream reporting is explicitly deferred until that is reached.
- Trackpad. It emits zero events despite a complete, correct multitouch enumeration, so the whole userspace stack is already exonerated; the work is the post-firmware-upload interface-reset contract (ticket 212).
- NVMe. Two independent faults: the first-CQ-wrap firmware assert (206), and
a teardown use-after-free where
blk_mq_timeout_workruns against a freed queue and killskblockd, taking all block I/O — including SD — down with it (227). The daily driver runs with ANS disabled until both are fixed. - USB host mode and VBUS, still unproven.
- Clean shutdown for the SD root, then repeated cold-boot validation.
- The two-core page-copy fault (205) remains the ceiling on multi-core use. It is fail-stop, so it costs availability rather than data.
- Continue upstream-oriented work on USB host, GPU, power management, audio, and camera support as credible hardware-specific implementations become available.
This repository is the project's coordination and evidence hub; the code lives in sibling trees:
| Repository | Content |
|---|---|
damsleth/linux, branch wallace/t6040-bringup |
Kernel tree with the T6040 device tree and driver work, based on the Asahi Linux asahi-wip tree |
| damsleth/m1n1 | m1n1 bootloader fork used for bring-up experiments and the enrolled boot objects |
In this repository:
patches/— kernel patches the build tooling applies on top of the committed treedts/— T6040/J614s device-tree sources and their validation checklistscripts/— host-side build, boot, verification, and rig-coordination toolingevidence/— dated experiment write-ups: transcripts, hashes, results, and retractionstickets/— the working queue (active, done, archived) as JSON recordsdocs/— operational documentation for the (largely AI-agent) crew running the rig: coordination protocol, runbook, safety policies, and roadmap. It is deliberately terse and imperative; this README is the human-facing summary.
The project builds directly on the Asahi Linux project's kernel, bootloader, and reverse-engineering work, and several Asahi developers are independently bringing up the same SoC generation.
The repository keeps experiment results, exact artifacts, corrections, and failed hypotheses alongside successful milestones. Useful starting points:
| Area | Evidence |
|---|---|
| Untethered boot | First enrolled self-contained Linux milestone |
| CPU | Five-core desktop and SMP boundary · Current minimal reproducer and MM/SMP investigation |
| WiFi and Bluetooth | Working BCM4388 WiFi and Bluetooth |
| SD storage | Read/write persistence · Persistent-root status and integrity work |
| Internal NVMe | Linux first-CQ-wrap firmware assert · Completion-order audit |
| Trackpad | Firmware upload and rejected reset result |
The status above intentionally distinguishes proven behavior from plausible next steps. A successful one-off boot is not treated as finished hardware support, and hypotheses that later evidence disproves remain recorded rather than being rewritten as successes.
The scripts, documentation, and other original content in this repository are
MIT licensed (see LICENSE). Patches under patches/ and
device-tree sources under dts/ are derived from and destined for the trees
they modify, and carry those trees' licenses: GPL-2.0 for Linux, MIT for
m1n1.