Congratulations! I assume its a box with X1P-64-100, that’s working. Still waiting eagerly for X1P-42-100 support. Although the first patches appeared on linux-msm, it’s not enough yet (just tested). For the 7441 we need a dedicated device tree. I just looked at aarch64-laptops/build, could you please upload the ACPI tables and hwinfo64 log? This makes analysis somewhat easier. Also it helps enabling remaining components.
Could be that you removed flash-kernel at some point. you SHOULD have dtb files in
/boot
indeed, those are copied by a flash-kernel hook when updating your kernel.
# ls -al /boot
total 192108
drwxr-xr-x 6 root root 4096 Dec 25 13:54 .
drwxr-xr-x 20 root root 4096 Dec 4 17:43 ..
-rw------- 1 root root 7348301 Dec 19 15:03 System.map-6.12.0-21-qcom-x1e
-rw-r--r-- 1 root root 348237 Dec 19 15:03 config-6.12.0-21-qcom-x1e
lrwxrwxrwx 1 root root 62 Dec 4 17:45 dtb -> dtbs/6.12.0-17-qcom-x1e/qcom/x1e78100-lenovo-thinkpad-t14s.dtb
drwxr-xr-x 3 root root 4096 Dec 4 17:43 dtbs
drwxr-xr-x 2 root root 4096 Dec 4 17:33 efi
drwxr-xr-x 5 root root 4096 Dec 25 13:54 grub
lrwxrwxrwx 1 root root 29 Dec 20 14:05 initrd.img -> initrd.img-6.12.0-21-qcom-x1e
-rw-r--r-- 1 root root 70490141 Nov 27 22:30 initrd.img-6.12.0-14-qcom-x1e
-rw-r--r-- 1 root root 99627002 Dec 25 13:54 initrd.img-6.12.0-21-qcom-x1e
lrwxrwxrwx 1 root root 29 Dec 20 14:34 initrd.img.old -> initrd.img-6.12.0-21-qcom-x1e
drwx------ 2 root root 16384 Dec 4 17:33 lost+found
lrwxrwxrwx 1 root root 26 Dec 20 14:05 vmlinuz -> vmlinuz-6.12.0-21-qcom-x1e
-rw------- 1 root root 18847241 Dec 19 15:03 vmlinuz-6.12.0-21-qcom-x1e
lrwxrwxrwx 1 root root 26 Dec 20 14:34 vmlinuz.old -> vmlinuz-6.12.0-21-qcom-x1e
There is no dtb for my kernel. Note that the old dtb file linked to also does not exist anymore. However, the file with a .bak
extension does exist. Something went wrong somewhere here.
The flash-kernel package is installed. I have tried running flash-kernel
without arguments and with flash-kernel 6.12.0-21-qcom-x1e
but neither seems to have any effect.
What else might I be missing? I just upgraded again which regenerated the initrd, but again not dtb files are generated…
Thank you for your help and merry christmas if you celebrate
edit: I have been doing a lot of googling, but the posts always refer to embedded devices/raspi or crosscompiling, so they are not really helpful. Also, everything seems to assume that I have dts and want dtb. But I don’t even have dts
I have tried a bit more. Also installed older kernels, but to no avail. It really is quite frustrating, because it did work before. I spent hours setting up the system, configuring stuff and copying files from the old laptop; now I can’t get back in
I have double-checked that the flash-kernel kernel postins is run after installing a kernel. It just doesn’t seem to do anything; just like when I run it manually. There is not output, and there no useful options…
I have also verified that initrd briefly prints “Generating empty DTB” or something like that, before the screen goes blank. I really don’t understand how these things are connected. Obviously the live USB manages to boot the system without DTB, or not?
Any hints to make this bootable? I read that the dts files are in the kernel sources, but the kernel-source
package in the repo is an older generic one, I don’t think that would have the correct files?
If FDE is really the problem here, can I somehow decrypt from grub so that the initrd doesn’t have to query for the password? Or is it possible to temporarily setup LUKS without password (but without reformatting)?
Does anybody else experience instabilities with the recent 6.12.0-20 or 6.12.0-21 updates? I get random reboots on my t14s oled since about a week.
flash-kernel can be a major PITA I’m afraid. “generating empty DTB” means it doesn’t find one.
As for righting this, I would probably take these steps:
- mount your borked system in /mnt/ and do a chroot. With FDE this may be a bit more complicated, never had this yet. As reference on how to handle mount/umount in a manner that allows fun things like installing grub and update-initramfs, please refer to these snippets which mount/umount a partitioned image file like the ones I use for preinstalled systems:
--------------------------------------------------------------------
#mount script
loopf="$(sudo losetup -f)"
sudo losetup "$loopf" ./Ubuntu_Desktop_24.04_x1e_6.11rc.img
sudo partprobe "$loopf"
sudo mount "$loopf"p2 /mnt/
sudo mount "$loopf"p1 /mnt/boot/efi/
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt/$i; done
--------------------------------------------------------------------
#umount script
for i in /mnt/run /mnt/sys /mnt/proc /mnt/dev/pts /mnt/dev; do sudo umount -l $i; done
sudo umount "$loopf"p1
sudo umount "$loopf"p2
sudo losetup -d "$loopf"
- take the
x1e78100-lenovo-thinkpad-t14s.dtb
from the install image you’re booting from and put it into/etc/flash-kernel/dtbs/
. With this set it will find a valid dtb to install from when none is found in the kernel package for whatever reason. - remove all kernels you don’t want, usually with
sudo apt-get purge linux*<unique kernel version part>*
. It is sort of important to do this since flash-kernel tries to set up a default dtb from the newest kernel version it considers installed. - clean out
/boot
and/boot/dtbs
from all the debris, non-existent links and*.old
stuff. - Make sure the dtb has a symlink matching the kernel version. Can be linked to /etc/flash-kernel/dtbs, even. A clean one should look like this:
jglathe@sdbox2:/boot$ ll
total 409496
drwxr-xr-x 6 root root 4096 Dec 26 10:17 ./
drwxr-xr-x 1 root root 176 Sep 22 09:40 ../
-rw------- 1 root root 6271171 Jul 27 20:14 System.map-6.10.2-061002-el2-generic
-rw------- 1 root root 4722361 Oct 1 09:06 System.map-6.11.0-061100-el2-x1e-generic
-rw------- 1 root root 6105479 Nov 22 09:35 System.map-6.12.0-061200-el2-x1e-generic
-rw------- 1 root root 6191884 Dec 25 22:14 System.map-6.13-rc4-el2-1-qcom-x1e
-rw------- 1 root root 6229414 Jun 24 2024 System.map-6.9.6-060906-el2-generic
-rw-r--r-- 1 root root 275701 Jul 27 20:14 config-6.10.2-061002-el2-generic
-rw-r--r-- 1 root root 274902 Oct 1 09:06 config-6.11.0-061100-el2-x1e-generic
-rw-r--r-- 1 root root 301832 Nov 22 09:35 config-6.12.0-061200-el2-x1e-generic
-rw-r--r-- 1 root root 305352 Dec 25 22:14 config-6.13-rc4-el2-1-qcom-x1e
-rw-r--r-- 1 root root 274731 Jun 24 2024 config-6.9.6-060906-el2-generic
lrwxrwxrwx 1 root root 66 Dec 26 09:37 dtb -> dtbs/6.13-rc4-el2-1-qcom-x1e/qcom/sc8280xp-microsoft-blackrock.dtb
lrwxrwxrwx 1 root root 68 Oct 1 22:03 dtb-6.10.2-061002-el2-generic -> dtbs/6.10.2-061002-el2-generic/qcom/sc8280xp-microsoft-blackrock.dtb
lrwxrwxrwx 1 root root 72 Oct 4 12:50 dtb-6.11.0-061100-el2-x1e-generic -> dtbs/6.11.0-061100-el2-x1e-generic/qcom/sc8280xp-microsoft-blackrock.dtb
lrwxrwxrwx 1 root root 72 Dec 17 18:52 dtb-6.12.0-061200-el2-x1e-generic -> dtbs/6.12.0-061200-el2-x1e-generic/qcom/sc8280xp-microsoft-blackrock.dtb
lrwxrwxrwx 1 root root 66 Dec 26 09:37 dtb-6.13-rc4-el2-1-qcom-x1e -> dtbs/6.13-rc4-el2-1-qcom-x1e/qcom/sc8280xp-microsoft-blackrock.dtb
lrwxrwxrwx 1 root root 67 Oct 1 22:03 dtb-6.9.6-060906-el2-generic -> dtbs/6.9.6-060906-el2-generic/qcom/sc8280xp-microsoft-blackrock.dtb*
drwxr-xr-x 33 root root 4096 Dec 26 09:37 dtbs/
drwxr-xr-x 4 root root 4096 Jan 1 1970 efi/
drwxr-xr-x 5 root root 4096 Dec 26 09:37 grub/
lrwxrwxrwx 1 root root 34 Dec 26 09:37 initrd.img -> initrd.img-6.13-rc4-el2-1-qcom-x1e
-rw-r--r-- 1 root root 42140921 Oct 1 22:03 initrd.img-6.10.2-061002-el2-generic
-rw-r--r-- 1 root root 60589190 Oct 4 12:50 initrd.img-6.11.0-061100-el2-x1e-generic
-rw-r--r-- 1 root root 80708590 Dec 17 18:52 initrd.img-6.12.0-061200-el2-x1e-generic
-rw-r--r-- 1 root root 88510777 Dec 26 09:37 initrd.img-6.13-rc4-el2-1-qcom-x1e
-rw-r--r-- 1 root root 41980477 Oct 1 22:03 initrd.img-6.9.6-060906-el2-generic
drwx------ 2 root root 16384 Mar 20 2024 lost+found/
lrwxrwxrwx 1 root root 31 Dec 26 09:37 vmlinuz -> vmlinuz-6.13-rc4-el2-1-qcom-x1e
-rw------- 1 root root 14988794 Jul 27 20:14 vmlinuz-6.10.2-061002-el2-generic
-rw------- 1 root root 10946766 Oct 1 09:06 vmlinuz-6.11.0-061100-el2-x1e-generic
-rw------- 1 root root 16665901 Nov 22 09:35 vmlinuz-6.12.0-061200-el2-x1e-generic
-rw------- 1 root root 16884249 Dec 25 22:14 vmlinuz-6.13-rc4-el2-1-qcom-x1e
-rw------- 1 root root 14849474 Jun 24 2024 vmlinuz-6.9.6-060906-el2-generic
jglathe@sdbox2:/boot$
I’m using a ASUS Vivobook S15 (S5507) 32gb and my experience since installing in early december has been really good. I still have some missing hardware like everyone else but its been a great experience thus far.
I recently installed hyprland with this install script and the installation went smooth. And I have no issues after the installation either. Thank you for making snapdragon great on linux!
Yoga slim operator here, hardware acceleration is also coming thru in Chrome after disabling the supported list like a previous user mentioned. Everything but onboard sound, HDMI and the encryption password menu at boot time seems to be working. I tried adding the three lines to modules file like someone mentioned above and it didn’t do anything. Also tried upgrade/update/update-grub/update-initramfs and none of it helped. But that’s not bad! Oh and power profiles don’t seem to work in KDE. Otherwise you guys have killed it. Oh and no kvm for VM support. I couldn’t get qemu to use it’s emulation to boot Whonix for me, but that’s probably my lack of knowledge.
P.S. On my x86 laptop, I have to run chrome/chromium with the following command-line arguments:
--enable-features=AcceleratedVideoEncoder,AcceleratedVideoDecodeLinuxGL
Thereafter, when you go to chrome://gpu
, you’ll see all the video codecs listed under the “video acceleration information” section. Of course, this depends if vaapi is working altogether.
Are you sure that video decode acceleration is actually working? I see the same thing as you in Chromium, but at the bottom of the page “Video Acceleration Information” is empty, so no codecs are actually supported.
Icecream95, bummer, yeah you’re right, there’s no codecs listed under Video Acceleration Information. I was hoping chrome was lying to me. I think I saw an option to show fps somewhere, running some 4k footage with realtime fps displaying might help us know if it’s actually working or not. I don’t know if th first line under Log Messages has any relevancy to the acceleration or not.
Edit; I woke up this am and on the all black screen for the encryption menu password prompt, the system will no longer boot. The screen just stays black like it’s not taking my password now. No idea why, to include in recovery mode.
Does anyone know a way to boot via pressing C for the command line at the grub loader, and pass a password for encryption?
You can still type in the password when the screen is blank and even though the video codec information is blank, I am 100% sure video playback on Chrome is accelerated. Try playing a AV1 test file, then play it in VLC and see the difference.
Great knowing that Chrome’s video acceleration is indeed working! However, no, my system will no longer boot, I know you can type the password in at the blank screen as I was doing that. I tried again twice this morning, inputting my pass 3x ea time, and the system will not boot. It will still reset with CTRL+ALT+DEL. Very strange. Last I used it, it was just watching some YouTube videos then had shut it down normally.
I hit a state where the LCD backlight turns off and entering my encryption password won’t progress things. A hard power reset once or twice usual gets things moving. No idea why, no idea if this will apply to your situation (XPS 13) Hopefully you find a path forward
It is not using the video decoding engine from the chip - doing the computation on the GPU, which uses significantly more energy
I am confused and may be missing something. I am unaware of a video decode implementation that uses the GPU compute units, only the hardware video decoders. I am aware of CPU video decoding. 4K AV1 on the X1 has a playback rate of around 1 frame every 5 seconds at 100% CPU load. I am using Chromium from the Debian repositories with the various flags enabled to force hardware accelerated video playback, as a result I can playback 4K AV1 smoothly alongside 4K H.265 with minimal CPU usage. My understanding is that the Adreno GPU in the X1 uses V4L2 on Linux instead of the more commonly found VAAPI, and Chromium has support for V4L2 as it is found on various single board computers and smart phones. In theory FFMPEG also supports V4L2 but it is not enabled in the Debian or Ubuntu builds and I have no need right now to compile it to find out. If it is using the GPU compute units, then enabling it is still a massive win over the default CPU decoding and I will have some reading to do. Also note that the Ubuntu install of Chromium is packaged using Snap and that was causing some trouble for me to get everything working. Still no accelerated video encoding though
Both Chromium and VLC use dav1d on the CPU.
Indeed the Venus driver in Linux uses V4L2, but it does not appear to support the video decoder in X1E yet. Note that the real reason for Chromium supporting V4L2 is Chromebooks.
The reason that VLC has such bad performance is that it decodes directly to an OpenGL pixel buffer object, but Freedreno currently maps the buffer as write-combine, so it is not cached by the CPU and reads from it are very slow. The problem with “1 frame every 5 seconds” is likely a bug somewhere, even with write-combine it should be faster.
Using MESA_EXTENSION_OVERRIDE=-GL_EXT_pixel_buffer_object vlc
makes VLC decode to a CPU staging buffer and significantly reduces CPU usage.
Thanks for working on the concept image for Snapdragon!
Does anybody know if the Hexagon NPU is working and the SDK can be used? https://www.qualcomm.com/developer/software/hexagon-npu-sdk
Furthermore, does using the NPU require signing app?
So far, the Hexagon SDK documentation is based on cross-compilation mostly with Android devices and I wonder if the Hexagon SDK now works on the directly on the laptop.
Thank you for you detailled answer!
I have no problems doing the chroot from the live-system. It’s a bit annoying, because you need to change to device alias to dm_crypt-0, but it works reliably, i.e. I can run stuff and even do dist-upgrade.
What do you mean with “it will find”? I have copied the file and re-run update-grub, but no dtb file is copied to /boot.
I have now copied the dtb file to /boot manually and created respective symlinks within the directory, because symlinking to /etc doesn’t work (not yet available at boot time).
After a reboot, it now successfully selects the DTB, but the behaviour is exactly the same: the screen goes black, the device resets after a few seconds.
I have also tried setting up a key file instead of a passphrase, but it also doesn’t work.
Does no one else use FDE? I can play around with almost anything but using FDE is a hard requirement in my company. I really don’t understand why this is broken or how my issues are even related to the CPU/device architecture.
Slightly off topic and of no help with the hard requirement for your device.
I use fscrypt
to encrypt only my home directory. With this my servers can reboot autonomously. For my laptops/desktops console login automatically unlocks, and with key-based ssh login a passphrase is required to unlock.
Regarding x1p42100 laptops, has anyone built an iso with these patches?