Webcam on Dell xps 13 plus (9320) Intel ipu6

Hello!
The dell xps 13 plus 9320 ships with a webcam that has driver that is not upstreamed to mainline Linux kernel. Resulting in users with webcams that doesn’t work out of the box.
(Well explained here: Greg KH Recommends Avoiding Alder Lake Laptops - Intel Webcam Linux Driver Long Ways Out - Phoronix)

Intel have made a repo that hosts the driver, but it is a pain to install on Fedora. A lot of manuel steps, and hard for users to follow.

Someone packaged some of the packages in RPM Fusion Nonfree:

ipu6-camera-bins.x86_64 : Binary library for Intel IPU6
ipu6-camera-bins-devel.x86_64 : IPU6 header files for development.
ipu6-camera-bins-firmware.x86_64 : IPU6 firmware

But the rest of the repoes still needs to be packaged and install manually:

I was wondering why some of the packages is packaged in epel nonfree, and the rest is not. Have anyone made a good guide on fedora on how to install this? My search-foo can’t find it.

3 Likes

hansdegoede made a fix for this now:

sudo dnf update \
  --enablerepo=updates-testing \
  --enablerepo=rpmfusion-free-updates-testing \
  --enablerepo=rpmfusion-nonfree-updates-testing \
  'kernel*' '*v4l2loopback'

And now things are ready to install the IPU6 driver stack:

sudo dnf install \
  --enablerepo=updates-testing \
  --enablerepo=rpmfusion-free-updates-testing \
  --enablerepo=rpmfusion-nonfree-updates-testing \
  akmod-intel-ipu6

After this command reboot and you should be able to test your camera with gUM Test Page under firefox now.

First of all, thank you so much for sharing these information ! :tada:

I have install everything on my Dell XPS 9320 that run under fedora and it’s seem to work, I have a new device /dev/video0. But when I execute sudo gst-launch-1.0 v4l2src device=/dev/video0 ! videoconvert ! autovideosink I only have black frames (same with gUM Test Page).

I have check that kmod is loaded. I saw that I have a process call irq/16-intel-ipu6 that is running. I checked the kernel logs related to ipu6:
dmesg | grep ipu6
[ 8.062895] intel-ipu6 0000:00:05.0: enabling device (0000 → 0002)
[ 8.063275] intel-ipu6 0000:00:05.0: Device 0x465d (rev: 0x2)
[ 8.063312] intel-ipu6 0000:00:05.0: physical base address 0x603e000000
[ 8.063315] intel-ipu6 0000:00:05.0: mapped as: 0x000000000a7cf44d
[ 8.063404] intel-ipu6 0000:00:05.0: Unable to set secure mode
[ 8.063406] intel-ipu6 0000:00:05.0: IPU in non-secure mode
[ 8.063408] intel-ipu6 0000:00:05.0: IPU secure touch = 0x0
[ 8.063410] intel-ipu6 0000:00:05.0: IPU camera mask = 0xff
[ 8.064447] intel-ipu6 0000:00:05.0: Skip ipc reset for non-secure mode
[ 8.064451] intel-ipu6 0000:00:05.0: IPC reset done
[ 8.064452] intel-ipu6 0000:00:05.0: cpd file name: intel/ipu6ep_fw.bin
[ 8.068957] intel-ipu6 0000:00:05.0: FW version: 20220510
[ 8.078089] intel-ipu6 0000:00:05.0: IPU6-v3 driver version 1.0
[ 8.117888] intel-ipu6-psys intel-ipu6-psys0: pkg_dir entry count:8
[ 8.118114] intel-ipu6-psys intel-ipu6-psys0: psys probe minor: 0

I’m quite new on this subject and I d’ont rely know where to look for debugging this. Do you have any suggestion ?

Thanks in advance :pray:

I think the package akmod-intel-ipu6 now available from the rpmfusion-nonfree repo will handle that driver for you. If you have secure boot enabled then the module will need to be signed before the kernel will load it.

As mention on my message above, the package akmod-intel-ipu6 signed is not working with the latest kernel uname -r 6.3.5-100.fc37.x86_64. You will get back frames

This is not the package that gets signed. The akmod package triggers building the kmod-intel-ipu6-(uname -r)… package which is actually the kernel modules built specifically for the running (or newly installed) kernel.
If one were to use dnf list installed kmod-intel-ipu6-* it would return the actual package name that is created. The modules that are built and put into that package are the ones that get signed as they are compiled.

I do not have that device so cannot test it, but I did test the installation of the akmod-intel-ipu6 package and verified that it created and installed the kmod package named above.

Thanks to clarify everything @computersavvy :pray: .

I don’t know if you were suggesting that my kernel module install with kmod-intel-ipu6-6.3.5-100.fc37.x86_64.x86_64 where not sign properly but I juste verify that intel_ipu6 where sign with my key generate trough /usr/sbin/kmodgenca and it is. To verify it, I did an hello world kernel module that I sign and I checked that intel_ipu6 and my hello_world module have the same sig_key.

How can I know what kmod-intel-ipu6-6.3.5-100.fc37.x86_64.x86_64 package does when installing it ? For example, I guessed that it has install intel_ipu6 kernel module but It may have install other things that I’m not aware of :thinking:

That package is built and installed as a result of the akmod-intel-ipu6 package install which uses akmods to build the kernel modules and install them for use by the system. Once the akmod package has been installed then with every kernel update the modules will be automatically recompiled for use with the newer kernel.