Ubuntu Concept ♥️ Snapdragon X Elite

Installed 26.04 on Thinkpad T14s Gen 6 Snapdragon X Elite, really amazed by the progress and work done . 95% of systems are functional, I’m going to daily drive it. Even tried Steam and titles like Half-Life 2 and Skyrim - all worked!

Some bits that I have questions about:

  1. Suspend seems to work, the LED is breathing. But the laptop still uses fair bit of power, around 3-4 % an hour? Any way to make it consume less? I remember reading that blacklisting some driver helps, but I lost that message…

  2. Camera - coming soon?

  3. Small QoL things: fingerprint sensor support and NN accelerator. The NN accelerator I plan to look at myself, if the kernel level driver is there, may be possible to use llama.cpp/docs/backend/snapdragon/README.md at master · ggml-org/llama.cpp · GitHub .

Got the LV2 plugin working from the Fedora RPM. Not an audiophile, just wanted to share my results.

Setup

  • Lenovo Yoga Slim 7x, kernel 7.0.0-32-qcom-x1e
  • Dolby config v1.6.5
  • Recording: EV RE20 + minifuse 1, positioned at listening position
  • Track: Fred again.. - Cloud Tee 45:40–45:50

Amplitude before normalization

  • Yoga stock: 32.342 dB
  • Yoga Dolby: 31.826 dB
  • Pixel Fold: 18.319 dB

FFT Plots
Clips normalized to -1 dB before FFT
https://imgur.com/a/Jhx6MxE

Listening Notes

Dolby:

  • Hi-hats are in your face, scratchy, overpower everything
  • More separation between highs and lows, bass line is more distinct
  • Overall sounds worse. I can’t hear the piano (melody)

Stock:

  • Piano sounds good, hi-hats sit naturally in the mix
  • Overall sounds better to me

Phone (small speaker baseline):

  • ~14 dB louder than Yoga. Sounds way better than both yoga presets just because of volume. Seems to clip a bit.

Conclusion

The 400 Hz crossover seems to be creating that midrange dip in the FFT, which explains why it sounds thin/hollow. Like the core of the mix is gone. I’d definitely try the updated minimal config!

Thanks for the feedback. Firstly I checked your youtube track in Windows with Dolby Music Balanced active - it sounds similar to Linux with my pipewire config. Do you agree?

The Linkwitz-Riley crossover is designed to avoid exactly the problem you describe using phase. This is actually handled on Windows by Qualcomm DSP so I don’t know their freq setting, but 400 Hz seems reasonable. You could try changing it.

I had previously set the multiband compressor to slightly boost the bass and highs, it is now flat (which should stop those hi-hats dominating). You could try adjusting the values further.

The post-convolver gain was wrong which was causing clipping. Changed it.

The new files are in 1.7.1 on my github https://github.com/taprobane99/Lenovo-Yoga-Slim-7x-Dolby-Linux-Audio

You can adjust values by editing the .conf file and then systemctl --user restart pipewire wireplumber pipewire-pulse, or testing values LIVE in Carla (load my Carla layout, play audio, connect the box that appears only to Bankstown, make sure when Carla is running my profile is not selected). This is the multiband compressor while playing your track:

1 Like

I would want to run Ubuntu on my Surface Pro 11, specifically the model with 5G mobile broadband, but I don’t see any indications of a Surface Pro 11 device tree on the mailing list.

I tried the image, but I couldn’t remove “quiet splash” initially since Grub locks up if you don’t hit Enter right away. On an experimental image, why would you have those set?

When I attempt to boot the kernel, Grub completes and the computer reboots a moment later. When I manually try another DTB (empty string is the default), it boots up until the backlight goes out, at which point I have no idea what happens.

Hmm the ppa kernel doesn’t have the EL2 awareness patches. Currently on my way to get this one over to the 7.x side. There are trees that work, like Sebastian Reichel’s . But that’s not Ubuntu config (although you can compile with it).

1 Like

Hmm with the sp11 you might want to try the extended Resolute image. It should boot the sp11 fine enough. The fun starts post-install (if it boots and installs) as you might need extra steps to get an installed and low-maintenance system. Not everything in that Wiki works (the flash-kernel part needs some rework). There’s also a discussion thread on my repo, and a Matrix room mentioned in the thread).

I appreciate your assistance, however the Vivobook doesn’t seem to be working yet. A few changes that have been committed to our repositories but haven’t yet been incorporated into our image are missing. By Monday, I hope to have a fresh picture available. When that’s uploaded, I can ping you!

1 Like

hi @tobhe Is there any update for Samsung Galaxy book ? thanks

[ASUS Zenbook A14 UX3407QA X1-26-100]

Say, what happened to qcom-firmware-updater? Is that no longer needed? I performed a reinstall and don’t see it, even thought linux-qcom-x1e-tools-7.0.0-32 is installed.

Before I was able to track battery level, now I can’t: my script now always reports 0.00.

Also, when I reinstalled from the distribution arm64 26.04 ISO, I could not get wifi working.
I retried with the resolute-desktop-arm64+x1e-20260326.iso and then I was able to get the wifi going with alex’s howto.

here is my script to get battery level:

#!/usr/bin/env python3
import dbus
bus = dbus.SystemBus()
dev = '/org/freedesktop/UPower/devices/battery_qcom_battmgr_bat'
proxy = bus.get_object('org.freedesktop.UPower', dev)
iface = dbus.Interface(proxy, dbus.PROPERTIES_IFACE)
value = iface.Get('org.freedesktop.UPower.Device', 'Percentage')
print("  %.02f%%" % value)
# --- last line ---

I have a Yoga 7x Slim (32GB), and have been running concept on it for over a year now. I recently upgraded to 26.04.

One thing I have been having a lot of trouble with is the display since upgrading to linux kernel 7.

Sometimes the highlights are pink, and the colour space seems 8bit, along with the right half of the display not initialising. Interesting it happens with external USB-C displays too. Closing the lid will often yield a solid blue screen and then something initialises and it works again. Sometimes just closing the lid to about a centimeter open and lifting it will fix the issue.

I have updated windows and did the qcom firmware extract, but it didn’t fix it…

I do see a few things in the dmesg output.

0.827548] printk: legacy console [ttyMSM0] enabled
[ 0.831114] qcom_pmic_glink pmic-glink: Failed to create device link (0x180) with supplier 4-0008 for /pmic-glink/connector@2
[ 0.831121] /soc@0/phy@fdf000: Fixed dependency cycle(s) with /soc@0/geniqup@bc0000/i2c@b84000/typec-mux@8
[ 0.831153] /soc@0/geniqup@bc0000/i2c@b84000/typec-mux@8: Fixed dependency cycle(s) with /soc@0/phy@fdf000
[ 0.835375] a98000.serial: ttyHS1 at MMIO 0xa98000 (irq = 161, base_baud = 0) is a MSM
[ 0.835759] qcom_pmic_glink pmic-glink: Failed to create device link (0x180) with supplier 5-0008 for /pmic-glink/connector@0
[ 0.836518] serial serial0: tty port ttyHS1 registered
[ 0.837581] qcom_pmic_glink pmic-glink: Failed to create device link (0x180) with supplier 6-0008 for /pmic-glink/connector@1
[ 0.837585] /soc@0/phy@fda000: Fixed dependency cycle(s) with /soc@0/geniqup@bc0000/i2c@b9c000/typec-mux@8
[ 0.837641] /soc@0/geniqup@bc0000/i2c@b9c000/typec-mux@8: Fixed dependency cycle(s) with /soc@0/phy@fda000

[ 1.032325] hub 6-0:1.0: 1 port detected
[ 1.032634] qcom_pmic_glink pmic-glink: Failed to create device link (0x180) with supplier a800000.usb for /pmic-glink/connector@1
[ 1.033364] qcom-pcie 1c08000.pci: supply vdda not found, using dummy regulator
[ 1.033425] qcom-pcie 1c08000.pci: supply vddpe-3v3 not found, using dummy regulator
[ 1.033551] qcom-pcie 1c08000.pci: host bridge /soc@0/pci@1c08000 ranges:
[ 1.033564] qcom-pcie 1c08000.pci: IO 0x007c200000..0x007c2fffff → 0x0000000000
[ 1.033571] qcom-pcie 1c08000.pci: MEM 0x007c300000..0x007dffffff → 0x007c300000
[ 1.040390] /soc@0/display-subsystem@ae00000/displayport-controller@aea0000: Fixed dependency cycle(s) with /soc@0/display-subsystem@ae00000/displayport-controller@aea0000/aux-bus/panel
[ 1.040448] /soc@0/display-subsystem@ae00000/displayport-controller@aea0000/aux-bus/panel: Fixed dependency cycle(s) with /soc@0/display-subsystem@ae00000/displayport-controller@aea0000
[ 1.046222] qcom-pcie 1bf8000.pci: iATU: unroll T, 8 ob, 8 ib, align 4K, limit 1024G
[ 1.186363] remoteproc remoteproc0: remote processor adsp is now up
[ 1.187185] qcom_pmic_glink pmic-glink: Failed to create device link (0x180) with supplier 4-0008 for /pmic-glink/connector@2
[ 1.198087] qcom_pmic_glink pmic-glink: Failed to create device link (0x180) with supplier 5-0008 for /pmic-glink/connector@0
[ 1.208979] qcom_pmic_glink pmic-glink: Failed to create device link (0x180) with supplier 6-0008 for /pmic-glink/connector@1
[ 1.209457] PDR: Indication received from msm/adsp/charger_pd, state: 0x1fffffff, trans-id: 1
[ 1.211052] qcom-pcie 1c08000.pci: supply vdda not found, using dummy regulator
[ 1.211116] qcom-pcie 1c08000.pci: supply vddpe-3v3 not found, using dummy regulator

[ 1.274712] [drm] Initialized msm 1.13.0 for ae01000.display-controller on minor 1
[ 1.274842] msm_dpu ae01000.display-controller: Direct firmware load for qcom/gen70500_sqe.fw failed with error -2
[ 1.274846] msm_dpu ae01000.display-controller: [drm:adreno_request_fw [msm]] ERROR failed to load gen70500_sqe.fw
[ 1.277529] nvme nvme0: pci function 0006:01:00.0

I also notice the font rendering in chrome was really bad before upgrading 26.04, where generally the first character of a word, or random characters are corrupted and flicker while moving the mouse around and other areas of the display are updated (basically GPU corruption or something).

I’m keen to help troubleshoot this too, and if others have seen something similar.

I have the Same experience in my T14s OLED.

Pink Pixels (also in external Screen), Solid blue Screen, only half Screen (left or right Side, dont remember) after wakeup from standby.

Pink Pixels got better after changing to 60hz.

For me on T14s this problem goes away if I unlock/lock/unlock the screen again after suspend. It does not even have to be suspend, just the screen needs to turn off by itself and then I get the corruption on half of the screen. Sometimes whole screen too, not sure. I’m not using the laptop much.

I’m not on 26.04, it’s just the kernel 7.0 I think.

It’s the Gamma LUT driver that is mainline since 7.0. I have this issue only on the T14s. A VT refresh fixes this reliably.

1 Like

yep, it was pre 26.04 (and arrived with kernel 7.0).

How are Ubuntu live ISO images (for arm) made? I wanted to make a live installer for Surface Laptop 7 users since the kernel requires some patches to get basic features like trackpad and networking working properly.

1 Like

I believe the Surface Pro 11 is called “denali” and there should be a tree for it. Not sure about the 5G edition though

not sure if you ever got this working but QSPI patches are available at x1e-nixos/kernel/modules/qcom-qspi at main · scuggo/x1e-nixos and I have them applied to my kernel (fork of Ubuntu Concept kernel ) at GitHub - ProgrammerIn-wonderland/ELLX-Kernel: A fork of the Ubuntu Concept kernel for QCOM-X1 and scuggo's SL7 changes · GitHub which has SPI HID and QSPI geni support since the trackpad on the Surface Laptop 7 uses them. You might be able to use pieces from this?

Thanks, I am trying with those, the GPI and spi_geni_qcom are working in QSPI mode but the SPI_HID is reporting header error when starting the touchscreen. I am looking into it.

Short, but honest answer: Not worth the hassle. I did fight out a script to open up, change and re-seal the squashfs and actually boot with a different kernel. IMO as long as the thing boots (SL7 is Romulus IMO) and you can install the OS somehow, it’s successful.

Internal keyboard, trackpad, WiFi: can be replaced by usb-connected variants for the setup. You can install a patched-up kernel afterwards. My extended images only add menu entries and dtbs for non-upstreamed/quirky/interesting hardware, but don’t change the squashfs or the boot kernel because of the pain and sanity it costs.

1 Like

On the surface pro 11, I am debugging the spi_hid communication with the touchscreen device.

The init start but the device reply with the wrong sync constant (0x12) instead of (0x5a). If I try to continue anyway, the device replay with a reset request

[ 3547.718979] initcall_start: func=spi_hid_driver_init+0x0/0xfd0 [spi_hid]
[ 3547.719060] [230952] spi:__spi_setup:4174: spi_hid spi0.0: setup mode 0, 8 bits/w, 20000000 Hz max → 0
[ 3550.071656] initcall_finish: func=spi_hid_driver_init+0x0/0xfd0 [spi_hid] ret=0
[ 3550.071685] [230953] spi_geni_qcom:get_spi_clk_cfg:244: geni_spi a88000.spi: req 20000000=>19200000 sclk 19200000, idx 0, div 1
[ 3550.071709] gpi a00000.dma-controller: QSPI TRE:0 fff1a000:0:4:100200
[ 3550.071713] gpi a00000.dma-controller: QSPI TRE:0 3020004:0:1:220001
[ 3550.071714] gpi a00000.dma-controller: QSPI TRE:1 20000007:0:4:200801
[ 3550.071716] gpi a00000.dma-controller: QSPI TRE:2 1000eb:0:4:110200
[ 3550.071787] gpi a00000.dma-controller: Event: CHID:0, type:22 fffff020 00000000 02000004 00220003
[ 3550.071797] gpi a00000.dma-controller: Transaction Success
[ 3550.071800] gpi a00000.dma-controller: Residue 0
[ 3550.071804] gpi a00000.dma-controller: Event: CHID:1, type:22 ffffe000 00000000 02000004 01220003
[ 3550.071807] gpi a00000.dma-controller: Transaction Success
[ 3550.071809] gpi a00000.dma-controller: Residue 0
[ 3550.071812] spi_geni_qcom:spi_gsi_callback_result:492: spi_master spi0: DMA txn completed
[ 3550.071838] [230953] spi_hid:spi_hid_dbg_dump_xfer:54: spi_hid spi0.0: IRQ HDR XFER: addr=0x00001000 ret=0 txlen=4 rxlen=4 (dump 4/4)
[ 3550.071841] spi-hid TX: 00000000: eb 00 10 00
[ 3550.071843] spi-hid RX: 00000000: 03 01 00 12
[ 3550.071844] [230953] spi_hid:spi_hid_irq_thread:497: spi_hid spi0.0: RAW HDR RX: 03 01 00 12 00 00 00 00 fb c1 ae 52 d2 4e bb 05
[ 3550.071847] [230953] spi_hid:spi_hid_irq_thread:498: spi_hid spi0.0: RAW HDR TX: eb 00 10 00 00 00 00 00 e3 c6 27 73 f3 c7 b7 9d
[ 3550.071848] [230953] spi_hid:spi_hid_validate_header:172: spi_hid spi0.0: Bad sync: 0x12
[ 3550.071869] [230953] spi_geni_qcom:get_spi_clk_cfg:244: geni_spi a88000.spi: req 20000000=>19200000 sclk 19200000, idx 0, div 1
[ 3550.071872] gpi a00000.dma-controller: QSPI TRE:0 fff1a000:0:4:100200
[ 3550.071874] gpi a00000.dma-controller: QSPI TRE:0 3020004:0:1:220001
[ 3550.071875] gpi a00000.dma-controller: QSPI TRE:1 20000007:0:4:200801
[ 3550.071876] gpi a00000.dma-controller: QSPI TRE:2 41000eb:0:4:110200
[ 3550.071904] gpi a00000.dma-controller: Event: CHID:0, type:22 fffff050 00000000 02000004 00220003
[ 3550.071906] gpi a00000.dma-controller: Transaction Success
[ 3550.071907] gpi a00000.dma-controller: Residue 0
[ 3550.071909] gpi a00000.dma-controller: Event: CHID:1, type:22 ffffe010 00000000 02000004 01220003
[ 3550.071911] gpi a00000.dma-controller: Transaction Success
[ 3550.071913] gpi a00000.dma-controller: Residue 0
[ 3550.071914] spi_geni_qcom:spi_gsi_callback_result:492: spi_master spi0: DMA txn completed
[ 3550.071928] [230953] spi_hid:spi_hid_dbg_dump_xfer:54: spi_hid spi0.0: IRQ BDY XFER: addr=0x00001004 ret=0 txlen=4 rxlen=4 (dump 4/4)
[ 3550.071929] spi-hid TX: 00000000: eb 00 10 04
[ 3550.071930] spi-hid RX: 00000000: 03 00 00 00
[ 3550.071932] [230953] spi_hid:spi_hid_irq_thread:553: spi_hid spi0.0: RAW BDY RX: 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[ 3550.071933] [230953] spi_hid:spi_hid_irq_thread:554: spi_hid spi0.0: RAW BDY TX: eb 00 10 04 00 00 00 00 00 00 00 00 00 00 00 00
[ 3550.071935] [230953] spi_hid:spi_hid_process_input_report:411: spi_hid spi0.0: spi_hid_process_input_report 3
[ 3550.071960] [31] spi_hid:spi_hid_sync_request_ms:244: spi_hid spi0.0: spi_hid_sync_request_ms 1
[ 3550.071962] [31] spi_hid:spi_hid_send_output:228: spi_hid spi0.0: SEND_OUT: type=0x01 id=0x00 len=0
[ 3550.071982] [31] spi_geni_qcom:get_spi_clk_cfg:244: geni_spi a88000.spi: req 20000000=>19200000 sclk 19200000, idx 0, div 1
[ 3550.071985] gpi a00000.dma-controller: QSPI TRE:0 3000004:0:1:220001
[ 3550.071987] gpi a00000.dma-controller: QSPI TRE:1 20000001:0:0:200001
[ 3550.071988] gpi a00000.dma-controller: QSPI TRE:2 fff1b990:0:c:100200
[ 3550.072014] gpi a00000.dma-controller: Event: CHID:0, type:22 fffff080 00000000 0200000c 00220003
[ 3550.072016] gpi a00000.dma-controller: Transaction Success
[ 3550.072018] gpi a00000.dma-controller: Residue 0
[ 3550.072019] spi_geni_qcom:spi_gsi_callback_result:492: spi_master spi0: DMA txn completed
[ 3550.072031] [31] spi_hid:spi_hid_dbg_dump_xfer:54: spi_hid spi0.0: QSPI WRITE: addr=0x00002000 ret=0 txlen=12 rxlen=0 (dump 12/0)
[ 3550.072033] spi-hid TX: 00000000: e2 00 20 00 00 00 00 00 01 00 00 00