System details
MacBook8,1 MacBook (Retina, 12-inch, Early 2015), Omarchy 3.0
What's wrong?
Let me preface by saying that I'm really glad to see this issue getting a fresh set of eyes. I’ve struggled to get Arch running on this MacBook for years, and support has gradually regressed over time. It's great that you’re taking the time to support these older MacBooks as it helps breathe new life into them and keep them useful.
On a MacBook8,1 (Retina 12", Early 2015) running Omarchy 3.0 with Arch kernel 6.16.8-arch3-1, the built-in keyboard and trackpad fail to function with applespi despite macbook12-spi-driver-dkms being successfully built and installed (rebuilt with limine). The SPI controller initialises correctly and the ACPI child device (APP000D) appears, but the applespi probe consistently times out with -110 errors and never creates an input device node. Crucially, the controller’s assigned IRQ (21) never increments during operation.
Full report & logs
Full report & logs
System details
Mac model and year:
MacBook (Retina, 12-inch, Early 2015)
Identifier:
MacBook8,1
Graphics:
Intel HD Graphics 5300
Omarchy version:
Omarchy 3.0 on Arch Linux kernel 6.16.8-arch3-1
The issue
Built-in keyboard and trackpad do not work.
spi-APP000D:00 exists and applespi does try to bind.
Probe dies with -110 timeouts.
IRQ 21 never increments (stays 0 0 0 0).
Kernel logs show repeated SPI timeouts. Device enumerates as Apple SPI Keyboard, but all transfers fail.
What works / baseline
PCI GSPI controller is present and bound:
00:15.4 Serial IO GSPI Controller #1 (rev 03)
Kernel driver in use: pxa2xx_spi_pci
Interrupt: pin C routed to IRQ 21
Power: D0 (runtime_status=active)
ACPI child device exists and is probed:
/sys/bus/spi/devices/spi-APP000D:00
modalias: acpi:APP000D:APPLE-SPI-TOPCASE:
What fails
- applespi logs repeated timeouts and aborts probe:
applespi spi-APP000D:00: SPI transfer timed out
applespi spi-APP000D:00: Error reading from device: -110
...
applespi spi-APP000D:00: Timed out waiting for device info
applespi spi-APP000D:00: probe with driver applespi failed with error -110
- No event node appears for the built-ins, so evtest never lists an Apple SPI device.
- While the above errors spam the log, IRQ 21 stays at zero:
$ grep -i '00:15\.4' /proc/interrupts
21: 0 0 0 0 IR-IO-APIC 21-fasteoi 0000:00:15.4
Fixes tried
- Located the community applespi patch for MacBook8,1 and applied it manually.
- Installed the matching kernel headers and set up a DKMS build.
- Module builds succeed cleanly and load without error.
- Despite this, the driver fails at runtime with -110 timeouts; no input device node is created, and IRQ 21 remains at zero.
Additionally:
- Verified
intel_lpss, intel_lpss_pci, spi_pxa2xx_pci, spi_pxa2xx_platform, applespi all present.
- Forced into initramfs (/etc/mkinitcpio.conf.d/macbook_spi_modules.conf):
MODULES=(intel_lpss intel_lpss_pci spi_pxa2xx_pci spi_pxa2xx_platform applespi)
- Ensured early keyboard hooks (/etc/mkinitcpio.conf.d/omarchy_hooks.conf):
HOOKS=(base udev keyboard keymap autodetect microcode modconf kms block encrypt filesystems fsck)
- Forced GSPI controller power on:
ACTION=="add", SUBSYSTEM=="pci", KERNELS=="0000:00:15.4", ATTR{power/control}="on"
-
Confirmed driver binds (/proc/bus/input/devices shows Apple SPI Keyboard).
-
Booted with irqpoll and irqfixup with no change.
-
Also tried booting with pcie_aspm=off, acpi_osi=!Darwin and pci=nomsi
-
Tested older kernels:
- 6.6.10: Non-UKI boots, still timeouts. UKI fails build (“section would write outside of memory”).
- 5.15.x LTS: Same UKI error; non-UKI boots, still timeouts.
More diagnostics
- Confirm applespi is loaded and bound
~ ✗ lsmod | grep -E 'applespi|spi_pxa2'
spi_pxa2xx_platform 12288 0
applespi 61440 0
spi_pxa2xx_pci 16384 0
spi_pxa2xx_core 36864 2 spi_pxa2xx_pci,spi_pxa2xx_platform
~ ✗ modinfo applespi
filename: /lib/modules/6.16.8-arch3-1/updates/dkms/applespi.ko.zst
author: Ronald Tschalär
author: Federico Lorenzi
description: MacBook(Pro) SPI Keyboard/Touchpad driver
license: GPL v2
srcversion: EFF703274319E0B6D074ACA
alias: acpi*:APP000D:*
depends:
name: applespi
retpoline: Y
vermagic: 6.16.8-arch3-1 SMP preempt mod_unload
sig_id: PKCS#7
signer: DKMS module signing key
sig_key: 12:E0:6F:B5:20:DD:38:55:0B:A3:15:B4:C8:46:68:80:14:9C:EE:60
sig_hashalgo: sha512
signature: 27:42:02:FF:B4:97:4B:F2:BD:5A:DC:7C:2E:CF:B3:66:58:D7:C0:8F:
EC:18:B0:2C:D7:62:2E:5F:F9:35:D8:19:07:14:0F:2D:4F:55:F9:1B:
C5:7D:69:60:59:50:9A:12:7E:AA:D0:87:54:C1:5D:70:58:42:17:6F:
7B:43:7F:3F:9A:E6:BA:82:DF:77:63:83:B4:BF:F4:D9:31:79:89:06:
E8:92:73:29:AA:D4:DF:EA:A0:8E:7D:EE:C6:49:BC:0C:FE:8B:50:BA:
4E:77:26:F2:1B:5E:9F:1F:1F:34:0A:18:77:9F:0F:1F:56:62:55:3C:
F7:3F:05:A9:C8:D8:C6:9B:F9:C6:77:13:F5:B7:70:56:B4:E1:8B:79:
98:B8:2A:8B:EA:E8:11:4F:23:E9:E4:6D:83:D9:5A:42:D8:6E:B3:E2:
86:92:8E:79:88:5B:A2:A6:46:B4:8A:FB:5C:6E:0B:0E:A0:BB:6F:7C:
CC:DC:CB:63:5D:2D:39:70:23:DD:B7:96:E8:78:9D:69:76:D8:16:5B:
A0:DC:FC:D0:A7:91:3B:19:F1:B9:D7:D9:ED:4B:20:4B:83:5A:DB:03:
91:46:32:76:69:F1:3C:A7:7B:A2:CE:78:56:85:02:D0:4E:6B:37:98:
0A:E1:2E:44:2E:B6:9C:03:95:FB:64:D9:B3:DB:3E:BF
parm: fnmode:Mode of Fn key on Apple keyboards (0 = disabled, [1] = fkeyslast, 2 = fkeysfirst) (uint)
parm: fnremap:Remap Fn key ([0] = no-remap; 1 = left-ctrl, 2 = left-shift, 3 = left-alt, 4 = left-meta, 6 = right-shift, 7 = right-alt, 8 = right-meta) (uint)
parm: iso_layout:Enable/Disable hardcoded ISO-layout of the keyboard. ([0] = disabled, 1 = enabled) (bool)
parm: touchpad_dimensions:The pixel dimensions of the touchpad, as XxY+W+H . (string)
parm: trace_event:Enable early event tracing. It takes the form of a comma-separated list of events to enable. (charp)
- Device tree / PCI details
~ ✗ lspci -nnk | grep -A3 -i spi
00:15.4 Serial bus controller [0c80]: Intel Corporation Wildcat Point-LP Serial IO GSPI Controller #1 [8086:9ce6] (rev 03)
Subsystem: Intel Corporation Wildcat Point-LP Serial IO GSPI Controller #1 [8086:9ce6]
Kernel driver in use: pxa2xx_spi_pci
Kernel modules: spi_pxa2xx_pci
00:15.5 Serial controller [0700]: Intel Corporation Wildcat Point-LP Serial IO UART Controller #0 [8086:9ce3] (rev 03)
Subsystem: Intel Corporation Wildcat Point-LP Serial IO UART Controller #0 [8086:9ce3]
Kernel driver in use: 8250_lpss
~ ❯
~ ✗ sudo dmesg | grep -i -E 'spi|applespi|apple-ib'
[ 1.163073] applespi: loading out-of-tree module taints kernel.
[ 1.163082] applespi: module verification failed: signature and/or required key missing - tainting kernel
[ 1.219180] input: Apple SPI Keyboard as /devices/pci0000:00/0000:00:15.4/spi_master/spi1/spi-APP000D:00/input/input4
[ 1.435051] applespi spi-APP000D:00: SPI transfer timed out
[ 1.435257] applespi spi-APP000D:00: Error writing to device: -110
[ 1.435272] spi_master spi1: failed to transfer one message from queue
[ 1.643045] applespi spi-APP000D:00: SPI transfer timed out
[ 1.643159] applespi spi-APP000D:00: Error reading from device: -110
[ 1.643177] spi_master spi1: failed to transfer one message from queue
[ 1.851056] applespi spi-APP000D:00: SPI transfer timed out
[ 1.851254] applespi spi-APP000D:00: Error writing to device: -110
[ 1.851263] spi_master spi1: failed to transfer one message from queue
[ 2.058967] applespi spi-APP000D:00: SPI transfer timed out
[ 2.059063] applespi spi-APP000D:00: Error reading from device: -110
[ 2.059079] spi_master spi1: failed to transfer one message from queue
[ 2.267045] applespi spi-APP000D:00: SPI transfer timed out
[ 2.267141] applespi spi-APP000D:00: Error reading from device: -110
[ 2.267159] spi_master spi1: failed to transfer one message from queue
[ 2.474951] applespi spi-APP000D:00: SPI transfer timed out
[ 2.475044] applespi spi-APP000D:00: Error reading from device: -110
[ 2.475060] spi_master spi1: failed to transfer one message from queue
[ 2.683010] applespi spi-APP000D:00: SPI transfer timed out
[ 2.683106] applespi spi-APP000D:00: Error reading from device: -110
[ 2.683123] spi_master spi1: failed to transfer one message from queue
[ 2.891030] applespi spi-APP000D:00: SPI transfer timed out
[ 2.891129] applespi spi-APP000D:00: Error reading from device: -110
[ 2.891147] spi_master spi1: failed to transfer one message from queue
[ 3.099033] applespi spi-APP000D:00: SPI transfer timed out
[ 3.099148] applespi spi-APP000D:00: Error reading from device: -110
[ 3.099164] spi_master spi1: failed to transfer one message from queue
[ 3.307032] applespi spi-APP000D:00: SPI transfer timed out
[ 3.307145] applespi spi-APP000D:00: Error reading from device: -110
[ 3.307163] spi_master spi1: failed to transfer one message from queue
[ 3.515008] applespi spi-APP000D:00: SPI transfer timed out
[ 3.515106] applespi spi-APP000D:00: Error reading from device: -110
[ 3.515122] spi_master spi1: failed to transfer one message from queue
[ 3.723008] applespi spi-APP000D:00: SPI transfer timed out
[ 3.723102] applespi spi-APP000D:00: Error reading from device: -110
[ 3.723119] spi_master spi1: failed to transfer one message from queue
[ 3.931006] applespi spi-APP000D:00: SPI transfer timed out
[ 3.931099] applespi spi-APP000D:00: Error reading from device: -110
[ 3.931115] spi_master spi1: failed to transfer one message from queue
[ 4.138935] applespi spi-APP000D:00: SPI transfer timed out
[ 4.139028] applespi spi-APP000D:00: Error reading from device: -110
[ 4.139044] spi_master spi1: failed to transfer one message from queue
[ 4.243015] applespi spi-APP000D:00: Timed out waiting for device info
[ 4.347019] applespi spi-APP000D:00: SPI transfer timed out
[ 4.347118] applespi spi-APP000D:00: Error reading from device: -110
[ 4.347137] spi_master spi1: failed to transfer one message from queue
[ 4.347455] applespi spi-APP000D:00: probe with driver applespi failed with error -110
[ 16.595572] spi-nor spi0.0: supply vcc not found, using dummy regulator
[ 16.603920] Creating 1 MTD partitions on "intel-spi":
- Udev attributes for the GSPI device
~ ✗ udevadm info -a -p /sys/bus/pci/devices/0000:00:15.4
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
looking at device '/devices/pci0000:00/0000:00:15.4':
KERNEL=="0000:00:15.4"
SUBSYSTEM=="pci"
DRIVER=="pxa2xx_spi_pci"
ATTR{ari_enabled}=="0"
ATTR{broken_parity_status}=="0"
ATTR{class}=="0x0c8000"
ATTR{consistent_dma_mask_bits}=="32"
ATTR{d3cold_allowed}=="1"
ATTR{device}=="0x9ce6"
ATTR{dma_mask_bits}=="32"
ATTR{driver_override}=="(null)"
ATTR{enable}=="1"
ATTR{irq}=="21"
ATTR{local_cpulist}=="0-3"
ATTR{local_cpus}=="f"
ATTR{msi_bus}=="1"
ATTR{numa_node}=="-1"
ATTR{power/autosuspend_delay_ms}=="50"
ATTR{power/control}=="on"
ATTR{power/runtime_active_time}=="1864721"
ATTR{power/runtime_status}=="active"
ATTR{power/runtime_suspended_time}=="0"
ATTR{power_state}=="D0"
ATTR{remove}=="(not readable)"
ATTR{rescan}=="(not readable)"
ATTR{resource0}=="(not readable)"
ATTR{revision}=="0x03"
ATTR{subsystem_device}=="0x9ce6"
ATTR{subsystem_vendor}=="0x8086"
ATTR{vendor}=="0x8086"
looking at parent device '/devices/pci0000:00':
KERNELS=="pci0000:00"
SUBSYSTEMS==""
DRIVERS==""
ATTRS{power/control}=="auto"
ATTRS{power/runtime_active_time}=="0"
ATTRS{power/runtime_status}=="unsupported"
ATTRS{power/runtime_suspended_time}=="0"
ATTRS{waiting_for_supplier}=="0"
- IRQ mapping
~ ✗ cat /proc/interrupts | grep -i spi
sudo dmesg | grep -i irq
[ 0.000000] Command line: quiet splash cryptdevice=PARTUUID=914e32d6-2f9c-4360-9de6-b6ee2d9cb1ec:root root=/dev/mapper/root zswap.enabled=0 rootflags=subvol=@ rw rootfstype=btrfs irqpoll
[ 0.073851] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl)
[ 0.073857] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)
[ 0.098745] Kernel command line: quiet splash cryptdevice=PARTUUID=914e32d6-2f9c-4360-9de6-b6ee2d9cb1ec:root root=/dev/mapper/root zswap.enabled=0 rootflags=subvol=@ rw rootfstype=btrfs irqpoll
[ 0.099051] Misrouted IRQ fixup and polling support enabled
[ 0.240050] NR_IRQS: 524544, nr_irqs: 728, preallocated irqs: 16
[ 0.242617] DMAR-IR: Enabled IRQ remapping in xapic mode
[ 0.242622] x2apic: IRQ remapping doesn't support X2APIC mode
[ 0.379132] ACPI: PCI: Interrupt link LNKA configured for IRQ 0
[ 0.379284] ACPI: PCI: Interrupt link LNKB configured for IRQ 0
[ 0.379437] ACPI: PCI: Interrupt link LNKC configured for IRQ 0
[ 0.379578] ACPI: PCI: Interrupt link LNKD configured for IRQ 0
[ 0.379718] ACPI: PCI: Interrupt link LNKE configured for IRQ 0
[ 0.379858] ACPI: PCI: Interrupt link LNKF configured for IRQ 0
[ 0.379998] ACPI: PCI: Interrupt link LNKG configured for IRQ 0
[ 0.380138] ACPI: PCI: Interrupt link LNKH configured for IRQ 0
[ 0.387013] PCI: Using ACPI for IRQ routing
[ 0.594205] Serial: 8250/16550 driver, 32 ports, IRQ sharing enabled
[ 0.600907] hpet_acpi_add: no address or irqs in _CRS
[ 16.072586] 0000:00:15.5: ttyS4 at MMIO 0xc1819000 (irq = 21, base_baud = 2764800) is a 16550A
~ ❯
System details
MacBook8,1 MacBook (Retina, 12-inch, Early 2015), Omarchy 3.0
What's wrong?
Let me preface by saying that I'm really glad to see this issue getting a fresh set of eyes. I’ve struggled to get Arch running on this MacBook for years, and support has gradually regressed over time. It's great that you’re taking the time to support these older MacBooks as it helps breathe new life into them and keep them useful.
On a MacBook8,1 (Retina 12", Early 2015) running Omarchy 3.0 with Arch kernel 6.16.8-arch3-1, the built-in keyboard and trackpad fail to function with
applespidespitemacbook12-spi-driver-dkmsbeing successfully built and installed (rebuilt with limine). The SPI controller initialises correctly and the ACPI child device (APP000D) appears, but theapplespiprobe consistently times out with -110 errors and never creates an input device node. Crucially, the controller’s assigned IRQ (21) never increments during operation.Full report & logs
Full report & logs
System details
Mac model and year:
MacBook (Retina, 12-inch, Early 2015)
Identifier:
MacBook8,1
Graphics:
Intel HD Graphics 5300
Omarchy version:
Omarchy 3.0 on Arch Linux kernel 6.16.8-arch3-1
The issue
Built-in keyboard and trackpad do not work.
spi-APP000D:00 exists and applespi does try to bind.
Probe dies with -110 timeouts.
IRQ 21 never increments (stays 0 0 0 0).
Kernel logs show repeated SPI timeouts. Device enumerates as Apple SPI Keyboard, but all transfers fail.
What works / baseline
PCI GSPI controller is present and bound:
ACPI child device exists and is probed:
What fails
Fixes tried
Additionally:
intel_lpss,intel_lpss_pci,spi_pxa2xx_pci,spi_pxa2xx_platform,applespiall present.Confirmed driver binds (/proc/bus/input/devices shows Apple SPI Keyboard).
Booted with
irqpollandirqfixupwith no change.Also tried booting with
pcie_aspm=off,acpi_osi=!Darwinandpci=nomsiTested older kernels:
More diagnostics