Enable Intel XE drivers for multiple cards

Hey guys,

just a quick question. I have 3 Intel GPUs in my host machine. 2 dGPUs and 1 Intel iGPU. I’m trying to enable experimental XE drivers for the 2 dGPUs and adjusted the kernel parameters as follows:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash i915.force_probe=!56a0 xe.force_probe=56a0 i915.force_probe=!56a5 xe.force_probe=56a5"

However, I’m not sure if it worked for both cards, as sudo lspci -k | grep -EA3 'VGA|3D|Display'

Is showing that only the A380 is utilizing the xe drivers:

        DeviceName: Onboard IGD
        Subsystem: ASUSTeK Computer Inc. Device 8882
        Kernel driver in use: i915
--
0000:04:00.0 VGA compatible controller: Intel Corporation DG2 [Arc A770] (rev 08)
        Subsystem: Device 172f:3937
        Kernel driver in use: i915
        Kernel modules: i915, xe
--
0000:0b:00.0 VGA compatible controller: Intel Corporation DG2 [Arc A380] (rev 05)
        Subsystem: ASRock Incorporation Device 6004
        Kernel driver in use: xe
        Kernel modules: i915, xe

Is there another way I can determine if both cards are using the drivers I want? Is the command maybe just reading wrong information? Or is really only 1 of those 2 cards utilizing the xe driver?

Both cards should indeed be capable of using them, especially the newer card (a770) and as documentation says “Tiger lake and onwards”.

Am I maybe just passing the wrong kernel params to Grub?

Any help would be greatly appreciated guys :heart:

https://wiki.archlinux.org/title/Intel_graphics#Testing_the_new_experimental_Xe_driver

ARC770

i915.force_probe=!3937 xe.force_probe=3937
1 Like

Thanks for chiming in @weingeist!

How did you figure out the ID? If I do lspci -nn | grep VGA as per Arch documentation I get an entirely different ID?

Going to try that, thanks. Just curious how you figured this out

Oh my…I’m just seeing it in my own screenshot :sweat_smile: Didn’t even notice the subsystem device. Thanks! Will report later if both cards are utilizing xe then

0000:00:02.0 VGA compatible controller: Intel Corporation Raptor Lake-S GT1 [UHD Graphics 770] (rev 04)
        DeviceName: Onboard IGD
        Subsystem: ASUSTeK Computer Inc. Device 8882
        Kernel driver in use: i915
--
0000:04:00.0 VGA compatible controller: Intel Corporation DG2 [Arc A770] (rev 08)
        Subsystem: Device 172f:3937
        Kernel driver in use: i915
        Kernel modules: i915, xe
--
0000:0b:00.0 VGA compatible controller: Intel Corporation DG2 [Arc A380] (rev 05)
        Subsystem: ASRock Incorporation Device 6004
        Kernel driver in use: i915
        Kernel modules: i915, xe

Sadly didn’t do the trick. Now neither card is utilizing xe. Tried it another time with the previous PCIe ID.

My GRUB entry:

i915.force_probe=!56a5 xe.force_probe=56a5 i915.force_probe=!56a0 xe.force_probe=56a0

Now the a770 is utilizing xe, but not the a380 :sweat_smile: Is it not possible for both cards at the same time?

Is there a way to somehow list the kernel params?

Something like:

i915.force_probe=!56a5.!56a0 xe.force_probe=56a5.56a0?

I think the only issue is that the Grub entries are somehow just in the wrong format.

What is the output of

lspci -nn | grep VGA
0000:00:02.0 VGA compatible controller [0300]: Intel Corporation Raptor Lake-S GT1 [UHD Graphics 770] [8086:a780] (rev 04)
0000:04:00.0 VGA compatible controller [0300]: Intel Corporation DG2 [Arc A770] [8086:56a0] (rev 08)
0000:0b:00.0 VGA compatible controller [0300]: Intel Corporation DG2 [Arc A380] [8086:56a5] (rev 05)

And those 2 IDs were what I’ve used at the first try, but then only the a380 was utilizing xe, the a770 was using i915.

When I tried it like this

i915.force_probe=!56a5 xe.force_probe=56a5 i915.force_probe=!56a0 xe.force_probe=56a0

it was exactly the other way round: The a770 was using xe, but the a380 wasn’t. Seems like it only gets applied to the card that’s first in the GRUB params. Hence, I thought if there was a way to place both IDs into i915.force_probe= and xe.force_probe= it might work. Not sure if that is possible tho

sudo update-grub ?

Yeah, did that after every change. Sadly that’s not the issue

I know this is a bit of an offtopic, but how does the Xe driver behave with you ? I also have an Arc integrated card, however from time to time the system froze completely. The performance on the Xe is much better, but there are still these crashes.

I didn’t get any time with the xe driver yet, as I want either both cards to utilize it or none. So far I had no luck with that, so I really can’t tell how they perform in comparison yet.

But: How did you get it working for your iGPU? Was it just adding the Grub kernel parameters?

Yes, I edited file in /etc/default/grub, added parameters and then update-grub.

1 Like

Mhhh. Yeah that’s how it should be for me as well, but I somehow can’t get 2 (or even 3) cards to utilize the xe drivers. Always just one at a time :woozy_face: It’s grinding my gears that there seems to be no information about how to utilize this for more than one Intel card :sweat_smile: Damn!

Perhaps try creating a file in /etc/modprobe.d/i915.conf and enter these parameters there. I read about this somewhere when I was interested in Xe drivers, but I don’t remember where anymore and I won’t cite a link. However, I am not sure if this will work.

1 Like

Worth a try! Thank you so much for the hint :heart: Will report any minute

Sadly, this didn’t work. I wish it did tho :sweat_smile: It’s giving me the following error:

lspci -k | grep -EA3 'VGA|3D|Display' 
libkmod: ERROR ../libkmod/libkmod-config.c:873 kmod_config_parse: /etc/modprobe.d/i915.conf line 1: ignoring bad line starting with 'i915.force_probe=!56a5'

This is the entry in the i915.conf file:

i915.force_probe=!56a5 xe.force_probe=56a5 i915.force_probe=!56a0 xe.force_probe=56a0 i915.force_probe=!a780 xe.force_probe=a780

Try adding the phrase ‘options ’ before each line. Something like this:

options i915.force_probe=!56a5 xe.force_probe=56a5
options i915.force_probe=!56a0 xe.force_probe=56a0
options i915.force_probe=!a780 xe.force_probe=a780

Use this

i915.force_probe=a780,!56a5,56a0 xe.force_probe=56a5,56a0,!a780

update-grub

Edit: update the commandline, a780 with i915 and the arc’s with xe

1 Like

i915.force_probe=a780,!56a5,56a0 xe.force_probe=56a5,56a0,!a780

So this is what I’m going to paste as kernel parameters? I first thought it worked, but I’ve read the output of the command wrong. Was happy for a second :smiley:
Again it’s only utilizing it for the A380. But I might have forgotten to update-grub.

On a sidenote: Is there a ! missing for the 56a0?