U-Boot for Apple Silicon Macs
Allows Apple Silicon Macs to boot U-Boot via the m1n1 bootloader developed by the Asahi Linux project. At this point the machines with the following SoCs work:
Apple M1 SoC (t8103)
Apple M2 SoC (t8112)
Apple M1 Pro SoC (t6000)
Apple M1 Max SoC (t6001)
Apple M1 Ultra SoC (t6002)
Apple M2 Pro SoC (t6020)
Apple M2 Max SoC (t6021)
Apple M2 Ultra SoC (t6022)
On these SoCs the following hardware is supported:
S5L serial port
SPI keyboard (on M1 laptops)
Framebuffer
NVMe storage
USB 3.1 Type-C ports
Device trees are provided in dts/upstream/src/arm64/apple/ and available for all M1 and M2 (t8103, t8112, t600x and t602x) devices.
Building U-Boot
$ export CROSS_COMPILE=aarch64-none-elf-
$ make apple_m1_defconfig
$ make
This will build u-boot-nodtb.bin as well as devices trees for some
of the supported machines. These device trees can be found in the
arch/arm/dts subdirectory of your build.
Image creation
In order to run U-Boot on an Apple Silicon Mac, U-Boot has to be used as a payload for the m1n1 bootloader. Instructions for building m1n1 can be found here:
$ cat m1n1.macho t8103-j274.dtb u-boot-nodtb.bin > u-boot.macho
This uses u-boot-nodtb.bin as the device tree is passed to U-Boot
by m1n1 after making some adjustments.
Image installation
Instructions on how to install U-Boot on your Mac can be found at:
Just replace m1n1.macho with u-boot.macho in the instructions.
Debug UART
Since the base address of the UART is SoC-dependent, the debug UART is not enabled by default. To enable the debug UART the base address needs to be adjusted and the CONFIG_DEBUG_UART option needs to be enabled. The table below gives the correct base address for the supported SoCs.
SoC |
Base Address |
|---|---|
M1 (t8103) and M2 (t8112) |
0x235200000 |
M1 Pro/Max/Ultra (t6000/t6001/t6002) and M2 Pro/Max/Ultra (t6020/t6021/t6022) |
0x39b200000 |