X13s - jhovold/linux GitHub Wiki
Lenovo ThinkPad X13s
This page aims to provide an overview of the current status of Linux support for the X13s laptop.
For some background on this project and further details, see my presentations at Kernel Recipes 2023 and Linaro Connect 2024:
https://archives.kernel-recipes.org/document/the-arm-laptop-project/
https://resources.linaro.org/en/resource/1dCZq5rYdNHR6WviFLaPMB
Work-in-progress branches
Important fixes and support for new features (once stable enough) can be found in my X13s (sc8280xp) wip branches, for example:
https://github.com/jhovold/linux/tree/wip/sc8280xp-6.15-rc2
These branches also include a minimal (but functional) johan_defconfig that serves as documentation for the configuration options that need to be enabled for the X13s.
Mainline feature support
Feature | Status |
---|---|
Audio | 6.5 |
Backlight | 6.0 |
Battery | 6.3 |
Bluetooth | 6.4 |
Camera | 6.12 |
CPUfreq | 6.0 |
Display | 6.3 |
EFI variables | 6.7 |
Fingerprint reader | 6.10 |
GPU | 6.5 |
Hibernation | - |
Keyboard | 6.0 |
Keyboard special keys | - |
Modem | 6.2 |
NVMe SSD | 6.2 |
PCIe x4 | 6.2 |
Remoteproc | 6.0 |
RTC | 6.4 |
Suspend | 6.1 |
Thermal sensors | 6.2 |
Touchpad (alternate) | 6.0 (6.4) |
Touchscreen | 6.0 |
TPM | - |
USB | 6.0 |
USB-C DisplayPort Alt Mode | 6.3 |
USB-PD | wip branch |
Video acceleration | wip branch |
Virtualisation | - |
Watchdog | 6.0 |
Wi-Fi | 6.4 |
Kernel command line
To boot Linux the following kernel parameters need to be provided:
clk_ignore_unused pd_ignore_unused arm64.nopauth efi=noruntime
due to a generic resource handover issue and a couple of firmware bugs, respectively.
With recent UEFI firmware efi=noruntime
can be left out when the Linux Boot
option is enabled.
Userspace dependencies
- alsa-ucm-conf 1.2.11
- libcamera 0.3.0
- linux-firmware-20241210
- Or linux-firmware-20230919 + Bluetooth firmware and NVM config (hpbtfw21.tlv, hpnv21.b8c and hpnv21g.b8c) from latest linux-firmware
- Video acceleration firmware (qcvss8280.mbn) with wip branch
- Mesa 23.1.4
- ModemManager 1.20 + fcc-unlock symlink
Qualcomm protection-domain mapper daemon (pd-mapper)(not needed since 6.11)
Known issues
Audio
- Active speaker protection not enabled, volume limited for now
- DisplayPort output not enabled
Pipewire playback and capture issues(switch to Pulseaudio as workaround) (fixed in 6.15-rc1, 6.14.3, 6.13.12, 6.12.24)- Pops and clicks
Bluetooth
Connectivity issues due to missing board-specific firmware(e.g. very limited range) (fixed in 6.14-rc1, 6.13.5, 6.12.17, 6.6.80 and linux-firmware-20241210)- Device address needs to be set manually for now
btmgmt --index 0 public-addr 00:11:22:33:44:55
Camera
- libcamera needs acccess to
/dev/udmabuf
(e.g. user must be in thekvm
group) - Registration race can break boot (fixed in wip branch)
Display
- Link training fails during resume (very infrequent)
Keyboard special keys
- Support for some functions like mic mute is missing
Remoteproc
- aDSP fails to register its services (e.g. sound, battery, USB-C orientation) (very infrequent)
Suspend
- All displays fail to resume if suspending after disconnecting external display in X
- Crash on resume if disconnecting external display while suspended
- Not yet hitting deepest low-power state during suspend
- USB disconnect triggers wakeup (disconnect before suspending as workaround)
USB
- Display driver does not yet support 4-lane DisplayPort Alt Mode
- USB-C coldplug orientation detection not working (flip cable as workaround)
Wi-Fi
- MAC address not static, can be worked around using udev (e.g. in /etc/udev/rules.d/90-net-address.rules)
ACTION=="add", SUBSYSTEM=="net", KERNELS=="0006:01:00.0", RUN+="/usr/bin/ip link set dev $name address xx:xx:xx:xx:xx:xx"
- Wi-Fi breaks due to ring-buffer corruption (infrequent) (fixed in wip branch)