Ubuntu Concept ♥️ Snapdragon X Elite

GPU acceleration needs the firmware files and a new enough Mesa (as on the 25.10 ISO). The files required are:

/lib/firmware/qcom/gen71500_gmu.bin.zst
/lib/firmware/qcom/gen71500_sqe.fw.zst

and the individually signed firmware qcdxkmsucpurwa.mbn from qcom-firmware-extract (should be already in the right place). In that case, GPU acceleration should enable itself.
I just checked on the T14s: The gen71500 files are already part of the linux-firmware package shipped in 25.10.

Mesa is version 25.2.3-1ubuntu1 from the 25.10 ISO. The gen71500 files are in place and qcdxkmsucpurwa.mbn is in /lib/firmware/updates/qcom/x1p42100/ASUSTeK/zenbook-a14/.

If i do dmesg | grep -i gpu
I get:

[    0.000000] OF: reserved mem: 0x0000000081f00000..0x0000000081f0ffff (64 KiB) nomap non-reusable gpu-prr@81f00000
[    0.000000] OF: reserved mem: 0x000000008d9fe000..0x000000008d9fffff (8 KiB) nomap non-reusable gpu-microcode@8d9fe000
[    0.936968] simple-pm-bus soc@0: Failed to create device link (0x180) with supplier interconnect-1 for /soc@0/gpu@3d00000
[    1.510091] msm_dpu ae01000.display-controller: no GPU device was found
[   18.693124] gpucc-x1p42100 3d90000.clock-controller: sync_state() pending due to 3d6a000.gmu

So it doesn’t seem to be finding the GPU.

Your fetch_x1p42100-asus-vivobook-s15_fw.sh would fetch an additional 3 files that the qcom-firmware-extract utility doesn’t - qcav1e8380.mbn, qcvss8380.mbn and qcvss8380_pa.mbn. Are these significant?

1 Like

Hmm I’m on the T14s now, no x1p device in reach. But… I took a look into the dtb in the ubuntu-qcom-x1e tree, and I guess there is the culprit - no gpu node configured. This can be fixed by using a different dtb and should work. My (slightly different) dtb is contained in the 6.17.0-jg-0 package. I have also placed only the dtbs on Google Drive.

For debug reasons I add this in the kernel command line:


"dyndbg=file drivers/base/firmware_loader/main.c +p"

The quotes are required. This adds debug output for firmware actions in dmesg and can be queried well with sudo dmesg|grep "Loaded FW".

1 Like

Those other files don’t matter.

I note that @glathe’s 6.17.0-jg-0 6 kernel now boots in both EL1 ane EL2 mode just depending on whether your /boot/grub/grub.cfg menuentry specifies

devicetree /x1p42100-asus-vivobook-s15.dtb

or

devicetree /x1p42100-asus-vivobook-s15-el2.dtb

respectively, no need for separate kernels. Very nice!

For EL2 you still need to load the slbounce.efi driver. I haven’t found a way to boot into Shell.efi (or Shellaa64.efi) to run startup.nsh via an efibootmgr option,so have to drop into a grub command to run

chainloader (hd0,gpt1)/EFI/slbounce/Shellaa64.efi
boot

I have this set up on the T14s, works well enough.

sudo efibootmgr --create --disk /dev/nvme0 --part 13 --loader "\EFI\slbounce\Shellaa64.efi" --label "Load slbounce (EFI shell)" --verbose

Changed the boot order to boot this first.

sudo efibootmgr -v
look which entry is the new shell one
sudo efibootmgr --bootorder YYYY,0000

In the root directory of the EFI partition (should be#13 on the Asus Vivobook) you need the startup.nsh:

FS13:
load \EFI\BOOT\slbounce.efi
\EFI\BOOT\grubaa64.efi
exit

You need to check which FS your EFI partition actually is, on the T14s it is FS13. It is ok to always load slbounce.efi, the newer versions decide based on the dtb loaded if they switch to EL2 or not.

1 Like

All attempts use efibootmgr to boot straight into Shellaa64.efi on my ASUS Vivobook S15 X1p42100 have sadly failed, so I have to point efibootmgr at regular Ubuntu entry instead.

However, Le Chat has suggested a minimally painful workaround!

For future grub.cfg re-creations, edit /etc/grub.d/40_custom to append

menuentry “EFI Shell - slbounce EL2” {
search --file --no-floppy --set=root /EFI/slbounce/Shellaa64.efi
chainloader (${root})/EFI/slbounce/Shellaa64.efi
}

For the current grub.cfg, edit the /boot/grub/grub.cfg to append these same 4 lines down below the comments of

### BEGIN /etc/grub.d/40_custom ###

and also go back to the first (primary) menu entry ‘Ubuntu’ in grub.cfg and append after the initrd line

devicetree /x1p42100-asus-vivobook-s15-el2.dtb

Since I’m booting off a USB drive, my /boot/efi/startup.nsh looks like:

FS3:
load \EFI\slbounce\slbounce.efi
\EFI\ubuntu\shimaa64.efi
exit

Finally I have a copy of tcblaunch.exe at /boot/efi

Then when I reboot I have to
-1- use the grub menu to arrow down to the “EFI Shell - slbounce EL2” submenu entry and hit enter,
-2- when the EFI shell asks whether to skip startup.nsh hit enter again to decline and then
-3- when the grub menu reappears, hit enter a third time to take the primary Ubuntu option.

And up you come in EL2 with /dev/kvm ready to drive your VMs.

Now, the last showstopper to my using the Vivobook as my primary laptop is to get an external monitor working - ideally via HDMI or failing that USB-C to Dsiplayport but even with the Adreno X1-45 driver working, I can’t get either of these to work.

Also nice to have would be booting off a USB-C port as these support UAS (USB Attached SCSI ) for external SSDs whereas the USB-A ports only support UMS (USB Mass Storage) slower USB drives.

Hmm using external drives a lot, usually everything is uas. Even the dreaded JMicron type-a to SATA adapter.

/:  Bus 004.Port 001: Dev 001, Class=root_hub, Driver=xhci-hcd/2p, 10000M
    ID 1d6b:0003 Linux Foundation 3.0 root hub
    |__ Port 002: Dev 002, If 0, Class=Hub, Driver=hub/4p, 5000M
        ID 2109:8110 VIA Labs, Inc. Hub
        |__ Port 003: Dev 003, If 0, Class=Hub, Driver=hub/4p, 5000M
            ID 2109:8110 VIA Labs, Inc. Hub
            |__ Port 002: Dev 004, If 0, Class=Hub, Driver=hub/1p, 5000M
                ID 0bda:0411 Realtek Semiconductor Corp. Hub
            |__ Port 004: Dev 005, If 0, Class=Mass Storage, Driver=uas, 5000M
                ID 152d:0578 JMicron Technology Corp. / JMicron USA Technology Corp. JMS578 SATA 6Gb/s

There are some odd quirks in the UEFI boot settings on some models. Glad that you found a way. Regarding dp over type-c, that should work. HDMI should also be possible, not sure if it was tried already, though. Do you have a current dtb?

Hola, yo pude arrancar gentoo copiando el último kernel de Ubuntu concept y también usando el kernel de distribución de Gentoo.

USANDO EL KERNEL DE UBUNTU

Copia la imagen del kernel
cp /boot/vmlinuz-6.17.0-8-qcom-x1e initrd.img-6.17.0-8-qcom-x1e dtb-6.17.0-8-qcom-x1e config-6.17.0-8-qcom-x1e a /boot partición gentoo

Copia los módulos del kernel
cp -R /lib/modules/6.17.0.-8-qcom-x1e a /lib/modules/ partición gentoo

Después desde su entorno chroot Gentoo haga un grub-mkconfig -o /boot/grub/grub.cfg

fuera de chroot desde Ubuntu recarga grub
update-grub o grub-mkconfig -o /boot/grub/grub.cfg

Reinicia

USANDO EL KERNEL GENTOO

Para usar el kernel proporcionado por Gentoo deberá usar el Distribution Kernel sys-kernel/gentoo-kernel o sys-kernel/gentoo-kernel-bin
https://wiki.gentoo.org/wiki/Project:Distribution_Kernel

emerge -av =gentoo-kernel-bin-6.17.4

Copia el archivo dtb desde la ubicacion /lib/modules/6.17.4-gentoo-dist/dtb/qcom/x1e80100-microsoft-romulus15.dtb en /boot particion gentoo
cp /lib/modules/6.17.4-gentoo-dist/dtb/qcom/x1e80100-microsoft-romulus15.dtb /boot/

Después deberá agregar la linea devicetree /boot/x1e80100-microsoft-romulus15.dtb en /boot/grub/grub.cfg

nano /boot/grub/grub.cfg

menuentry ‘Gentoo GNU/Linux’ --class gentoo --class gnu-linux --class gnu --class os $menuentry_id_option ‘gnulinux-simple-00d71b8e-26a5-405b-9b22-2f3095131028’ {
load_video
if [ “x$grub_platform” = xefi ]; then
set gfxpayload=keep
fi
insmod gzio
insmod part_gpt
insmod ext2
search --no-floppy --fs-uuid --set=root 00d71b8e-26a5-405b-9b22-2f3095131028
echo ‘Cargando Linux 6.17.4-gentoo-arm64…’
linux /boot/vmlinuz-6.17.4-gentoo-arm64 root=UUID=00d71b8e-26a5-405b-9b22-2f3095131028 ro
echo ‘Cargando imagen de memoria inicial…’
initrd /boot/initramfs-6.17.4-gentoo-arm64.img
devicetree /boot/x1e80100-microsoft-romulus15.dtb
}

No olvide agregar la linea en el cargador de arranque grub tambien en ubuntu!!

Reinicia

Hi, I was able to boot Gentoo by copying the latest Ubuntu Concept kernel and also using the Gentoo distribution kernel.

USING THE UBUNTU KERNEL

Copy the kernel image
cp /boot/vmlinuz-6.17.0-8-qcom-x1e initrd.img-6.17.0-8-qcom-x1e dtb-6.17.0-8-qcom-x1e config-6.17.0-8-qcom-x1e to /boot gentoo partition.

Copy kernel modules
cp -R /lib/modules/6.17.0.-8-qcom-x1e a /lib/modules/ partición gentoo

Then from your Gentoo chroot, run grub-mkconfig -o /boot/grub/grub.cfg

Outside the chroot, from the Ubuntu shell, reload grub with
update-grub or grub-mkconfig -o /boot/grub/grub.cfg

Reboot

USING THE GENTOO KERNEL

To use the kernel provided by Gentoo you will need to use the Distribution Kernel sys-kernel/gentoo-kernel o sys-kernel/gentoo-kernel-bin
https://wiki.gentoo.org/wiki/Project:Distribution_Kernel

emerge -av =gentoo-kernel-bin-6.17.4

Copy the dtb file from the location /lib/modules/6.17.4-gentoo-dist/dtb/qcom/x1e80100-microsoft-romulus15.dtb en /boot Gentoo partition
cp /lib/modules/6.17.4-gentoo-dist/dtb/qcom/x1e80100-microsoft-romulus15.dtb /boot/

Then you will need to add the line devicetree /boot/x1e80100-microsoft-romulus15.dtb to /boot/grub/grub.cfg

nano /boot/grub/grub.cfg

menuentry ‘Gentoo GNU/Linux’ --class gentoo --class gnu-linux --class gnu --class os $menuentry_id_option ‘gnulinux-simple-00d71b8e-26a5-405b-9b22-2f3095131028’ {
load_video
if [ “x$grub_platform” = xefi ]; then
set gfxpayload=keep
fi
insmod gzio
insmod part_gpt
insmod ext2
search --no-floppy --fs-uuid --set=root 00d71b8e-26a5-405b-9b22-2f3095131028
echo ‘Cargando Linux 6.17.4-gentoo-arm64…’
linux /boot/vmlinuz-6.17.4-gentoo-arm64 root=UUID=00d71b8e-26a5-405b-9b22-2f3095131028 ro
echo ‘Cargando imagen de memoria inicial…’
initrd /boot/initramfs-6.17.4-gentoo-arm64.img
devicetree /boot/x1e80100-microsoft-romulus15.dtb
}

Don’t forget to add the line in the grub bootloader also in Ubuntu!!

Reboot

1 Like

Thanks, I’ve got Gentoo now running on my Dell XPS 9345 too. Wifi, bluetooth, keyboard, touchpad are working out of the box. Speakers not working yet but I think there are patches for it.

What kernel are you using? Do you need to add the devicetree line to grub?

Hello,

I have tried to install it on Asus VivoBook 14 X1407QA-LY051W, and I get this error after choosing “Try and install ubuntu” :

mount: mounting efivarfs on /sys/firmware/efi/efivars failed: Operation not supported

Then it reboots. It is the same with 25.04 and 25.10.
And with ubuntu concept (plucky-desktop-arm64+x1e.iso), I get the blinking “_” and then it reboots without showing any error message.

I don’t know what I can try now…
Maybe the extended iso posted by @glathe ? or wait for 26.04 ?

I don’t think there’s a device tree for your laptop so it will be a case of waiting until one is written (or have a go at writing one depending on your skills).

The good news is, your laptop seems very similar to the Zenbook UX3407Q, a different screen being the main difference, so hopefully a device tree for it will be created soon.

1 Like

I’m using kernel 6.17.0-8-qcom-x1e. I’m assuming the device tree is being loaded since the kernel won’t boot without it? My grub boot entries don’t pass a device tree so I assume it’s builtin to the kernel or loaded some other way. I’m going to try the latest kernel from git-sources.

BTW has anyone measured what the power consumption is while their laptop is suspended? I wrote a suspend script that tells me my Dell XPS 9345 drains roughly 3% of the battery per hour which is roughly ten times higher than Windows.

I sucessfully installed ubuntu-concept plucky on ASUS Zenbook A14 (UX3407RA). After running qcom-firmware-extract, almost everything works beside speaker + camera, but I don’t care about those.

One issue I have, the fans seem to be running nearly all the time at quite high speed, even when the laptop is completely idle. Is it a known issue? I didn’t see people talking about it, so I wonder.

I still haven’t got the X1-45 GPU working on my Zenbook A14 UX3407QA.

I’ve been doing some digging around and some seemingly odd things that might explain what’s happening.

You can look at the device tree loaded by the kernel by looking at /proc/device-tree with most of the devices being under the soc@0 directory.

Most of the devices have a compatible file that contains the entries defined in the device tree source files. The device tree source files contain compatible entries for both the GPU and the GMU. Decompiling the .dtb files shows everything you’d expect too (at least as far as my understanding of device trees goes).

The GPU configuration is in gpu@3d00000. On my machine, there is no compatible file.

The GMU configuration is in gmu@3d6a000. On my machine, there is a compatible file for the GMU but it contains the entry for the X1 Elite chipset rather than the X1 Plus.

For the GPU, this may be a problem because when probing for the GPU in msm_drv.c:add_gpu_components(), the system checks if the “compatible” entry in the device tree node matches one the driver understands. Obviously, if there isn’t a compatible entry, it won’t find a match and so will conclude there isn’t a GPU.

The GMU having the wrong device may cause problems but I don’t know what they might be.

Does @glathe or anyone else with more experience than me of this have an idea if this might be significant and what might be going on?

For others, whether the GPU works on your system or not, can you post which chipset (x1e, x1p and even just x1) your system has and the entries in /proc/device-tree/soc@0/gpu3d00000/compatible and /proc/device-tree/soc@0/gmu3d6a000/compatible - whether the files exist and what the contents are if they do. This may help identify what’s going on.

Thanks.

Hi @david8271 , I’m afraid this distills down to “have a new enough Mesa”. On the 25.10 ISO is a new enough Mesa, and the required gen71500* files are already in linux-firmware for questing. With the already installed system (25.04, plucky) the “easiest” step to ensure this would be upgradeing to 25.10 via sudo do-release-upgrade -d. Since the Zenbook A14 should be supported ootb, this should be it.
I had a strange issue when building 6.17, though. The Zenbook comes with at least three OLED and LCD variants, and it looked a bit like the latest Concept kernel (6.17.0-8) had a missing &gpu node in at least one of the resulting files. You could try using the 6.17.0-jg-0 kernel instead which has the same config, but I had to re-add the Zenbook A14 stuff to make sure it is correct. Source tag is GitHub - jglathe/linux_ms_dev_kit at jg/ubuntu-qcom-x1e-6.17.0-jg-0 .

As @david8271 said: No device tree yet. As it is, Asus is going wild with notebook variants, also adding even lower binnings (TIL that there is an x1-23-00 variant) to the mix. Impossible to keep up. With The ProArt 13 we were lucky by using the IdeaPad Slim5x device tree and gotten most of it to work, maybe its worth a try with this one, too. The image to try is on Google Drive.

2 Likes

Thank you for this! On T14s, and this image works pretty well. I originally used plucky-desktop-arm64+x1e and got a lot of weird crashes mostly due to WiFi. I wrote a bunch of scripts to grab Wifi drivers from matching firmware, it stabled out somewhat, but still had a ton of issues. Anyhow just want to say thanks for this image.

There’s a few additional tweaks I need to do, like getting sound to work. I did notice the GRUB on this image has options for various hardware. I didn’t see T14s, so I used the first option. Was that correct? Any chance T14s could be added into the GRUB? I’ve seen a few folks here working with that hardware. Or is it not needed as the base option is all that’s needed?

Thank you again! I’ll be following these threads, and contributing where I can if I figure out working tweaks!

1 Like