Repository navigation
Microsoft Surface Laptop Ultra (NVIDIA N1X) — hardware support, open issues and testing #15885
Replies: 5 comments
|
Update: DAILY DRIVER STATUS Here's the live state from the running machine, Omarchy 4 aarch64 on I've tested the speakers, aux I/O, and internal mic on real workflows and capture. Touch palm rejection is working as well. Next: I'm testing a Surface Laptop Ultra ISO built on top of the official N1x nightly, in QEMU first and then on hardware. It packages these fixes as DKMS modules plus a support package, and boots without Limine (see Limine-Bootloader/Limine#694). I'll post it here once a fresh install has been verified on the laptop. Reports filed so far: Limine-Bootloader/Limine#694, NVIDIA/open-gpu-kernel-modules#1458, linux-surface/linux-surface#2307, omacom/omarchy-pkgs#1275, draft PR #15888. A few corrections to my first post:
(Every output above is from this machine.) |
|
hey, super helpful. still waiting for delivery of mine. please keep this discussion going. |
|
@zeroknots will do, hope yours arrives soon! Here's what has changed since the last update (still New since last time
A kernel update broke the battery, so the fix no longer patches in-tree drivers The UART clock turned up a real Corrections to my first post
Still open: the webcam (no driver for the camera block), suspend with the dock attached, and Limine on this firmware (a fix is in testing in Limine-Bootloader/Limine#694). The gist still has the 2026-10-18 files. I'll update it and link it here once the new versions are cleaned up. |
|
@zeroknots will do, hope yours arrives soon! Here's what has changed since the last update (still New since last time
A kernel update broke the battery, so the fix no longer patches in-tree drivers The UART clock turned up a real Corrections to my first post
Still open: the webcam (no driver for the camera block), suspend with the dock attached, and Limine on this firmware (a fix is in testing in Limine-Bootloader/Limine#694). The gist still has the 2026-10-18 files. I'll update it and link it here once the new versions are cleaned up. |
|
Thank you for your hard work. I received one as well, and it works great with your setup. I’m now working on the camera with Claude, and it’s starting to give data. I think it will take a few more days to get the full set of drivers ready. |
Uh oh!
There was an error while loading. Please reload this page.
I've got Omarchy 4 (aarch64,
linux-omarchy7.2.8) running as a daily driver on the Microsoft Surface Laptop Ultra (SKUSurface_Laptop_Ultra_2115, UEFI 7.1.0, NVIDIA N1X, GPU10de:2e03), dual-booting Windows. As far as I can tell it's the first N1X laptop outside the validated ASUS ProArt P14 / Dell XPS 16, so here's everything it took, in case it helps get this machine supported (cc #15702).omarchy-hw-platformalready reportsaarch64-n1x(the Surface exposesNVDA0200), son1x.shruns. On top of that, the Surface needs the following.Status
acpi_osi=!modprobe.blacklist=gpio_keysMSHW0733registry entryusb4_release=0Findings (details + patches available)
_OSI("Windows 2022")hides SSPM/USB. The DSDT returns_STA=0for SVP0, SSPM, HFRP, NH1X and NMAP when Windows 2022_OSIis true, somtk_pwrapfails (scmi ret = -19) and xHCI/I2C/SPI fail with -22.acpi_osi=!fixes it; those are the only_OSIuses in the tables.MSHW0040→soc_button_array→gpio-keys) reports itself held forever.modprobe.blacklist=gpio_keysfor now.quiet: no,graphics: no,verbose: yes. It boots fine in QEMU/edk2 with a copy of the ESP. GRUB (the ISO's) works, so I chainload the same UKIs from GRUB on the ESP. Likely suspects: Limine'sinit_memmap()leaving only 64 MiB below 4 GiB (this machine has ~1.8 GiB there), ordisk_create_index()'s recursiveConnectController. I'll report this to Limine separately.reservedand hasstruct pages; on the Surface (efi=debug) the map jumps0x1fcffffff → 0x300000000, and the IORT RMR gives0x200000000+4Gand0xa1600000+386Mto the GPU. nvidia-drm then hitsWARNING … vmap_small_pages_range_noflush/failed to map pages!/Unable to allocate LUT memoryand the machine resets. Fix: a tiny module that doesmemremap_pages(MEMORY_DEVICE_PRIVATE)over those ranges (struct pages, no linear map, same state as the Dell), loaded beforenvidia. With it, the stockvmap()path works: 0 warnings, glmark2 5119, vkmark 4282 at 2560x1600, 24 GiB of GPU buffers resident with exact read-back.8250_mtk's ACPI path assumes a 26 MHz UART clock forNVDA0240, but it's ~52 MHz, so the SAM link runs at 8 Mbaud and the EC ignores it. Halving the requested baud fixes it (EC fw 6.68.102). Plussurface_aggregator_registryneeds an ACPI entry forMSHW0733(battery + AC only for now).soundwire-mtkmachine table also needs an entry for this layout (2x RT1320, with the mic array on the first amp, plus RT721 for the jack). UCM profile included; RT1320 gain capped at -9 dB because there's no speaker-protection data.04F3:3358): it advertises pressure 0-2048 but fingers read ~1-40, so libinput rejects every touch (AttrEventCode=-ABS_MT_PRESSURE;-ABS_PRESSURE;, orAttrInputProp=+INPUT_PROP_PRESSUREPAD). Its PTPHQA blob is 4 bytes, so hid-multitouch picks the generic class and drops the Confidence/palm bit; rebinding asMT_CLS_WIN_8fixes palm rejection./sys/class/backlight. NVIDIA's firmware brightness query fails and the panel takes nits over eDP DPCD, so I drive it through the RM ioctl interface. The keyboard backlight is a HID feature with no kernel driver.What I'd like to upstream
install/hardware/microsoft/fix-surface-laptop-ultra-*.shset gated byomarchy-hw-aarch64-n1x && omarchy-hw-match "Surface Laptop Ultra": cmdline, libinput quirk, touchpad class, key repeat, UCM.linux-omarchy-aarch64:MSHW0733registry,8250_mtk52 MHz, SoundWire pad drive + machine entry, and the carveout memmap. I'm happy to send these to omarchy-pkgs if that's the right place.10de:2e03alongside2e06where the N1X scripts check the GPU ID.Full write-up with every file and revert step: https://gist.github.com/teo-casares/8b64949638e1952602a7f435bb34d5b8
All reactions