Skip to content

Tried SR-IOV on XE driver in 265H, problems in Windows 11 and ubuntu 24.04 guests. #4

@xbomber

Description

@xbomber

I tried to enable SR-IOV patching https://github.com/intel/mainline-tracking/blob/linux/v6.15/drivers/gpu/drm/xe/xe_pci.c

I created a new

static const struct xe_device_desc arl_desc = {
	/* .graphics and .media determined via GMD_ID */
	.require_force_probe = true,
	PLATFORM(METEORLAKE),
	.dma_mask_size = 46,
	.has_display = true,
        .has_sriov = true,
	.has_pxp = true,
};

Modified

INTEL_ARL_IDS(INTEL_VGA_DEVICE, &arl_desc),

Due intel in https://www.intel.com/content/www/us/en/support/articles/000093216/graphics/processor-graphics.html Meteor Lake (similar to Arrow Lake) is not supported, but Arrow Lake yes.

 [    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-6.15.0-adv-intel+ root=UUID=5380ae05-b99d-475b-9258-17d1f32e9f77 ro quiet splash intel_iommu=on iommu=pt i915.force_probe=!7d51 xe.force_probe=7d51 xe.guc_log_level=5 xe.max_vfs=3 pci=realloc pcie_acs_override=downstream,multifunction vt.handoff=7
[marco@marcoHPLaptop][~]$ sudo dmesg |grep drm
[    0.781923] ACPI: bus type drm_connector registered
[    0.818007] [drm] Initialized simpledrm 1.0.0 for simple-framebuffer.0 on minor 0
[    0.819370] simple-framebuffer simple-framebuffer.0: [drm] fb0: simpledrmdrmfb frame buffer device
[    5.407397] systemd[1]: Starting [email protected] - Load Kernel Module drm...
[    5.412436] systemd[1]: [email protected]: Deactivated successfully.
[    5.412486] systemd[1]: Finished [email protected] - Load Kernel Module drm.
[    5.709763] intel_vpu 0000:00:0b.0: [drm] Firmware: intel/vpu/vpu_37xx_v0.0.bin, version: 20230726*MTL_CLIENT_SILICON-release*2101*ci_tag_mtl_pv_vpu_rc_20230726_2101*648a666b8b9
[    5.709767] intel_vpu 0000:00:0b.0: [drm] Scheduler mode: OS
[    5.839876] [drm] Initialized intel_vpu 1.0.0 for 0000:00:0b.0 on minor 0
[    7.389751] xe 0000:00:02.0: [drm] Running in SR-IOV PF mode
[    7.389807] xe 0000:00:02.0: [drm] Found meteorlake (device ID 7d51) integrated display version 14.00 stepping D0
[    7.391340] xe 0000:00:02.0: [drm] Using GuC firmware from i915/mtl_guc_70.bin version 70.44.1
[    7.403558] xe 0000:00:02.0: [drm] Using GuC firmware from i915/mtl_guc_70.bin version 70.44.1
[    7.408351] xe 0000:00:02.0: [drm] Using HuC firmware from i915/mtl_huc_gsc.bin version 8.5.4
[    7.410149] xe 0000:00:02.0: [drm] Using GSC firmware from i915/mtl_gsc_1.bin version 102.1.15.1926
[    7.445298] xe 0000:00:02.0: [drm] Finished loading DMC firmware i915/mtl_dmc.bin (v2.23)
[    7.669365] xe 0000:00:02.0: [drm] vcs1 fused off
[    7.669370] xe 0000:00:02.0: [drm] vcs3 fused off
[    7.669372] xe 0000:00:02.0: [drm] vcs4 fused off
[    7.669373] xe 0000:00:02.0: [drm] vcs5 fused off
[    7.669374] xe 0000:00:02.0: [drm] vcs6 fused off
[    7.669375] xe 0000:00:02.0: [drm] vcs7 fused off
[    7.669376] xe 0000:00:02.0: [drm] vecs1 fused off
[    7.669377] xe 0000:00:02.0: [drm] vecs2 fused off
[    7.669378] xe 0000:00:02.0: [drm] vecs3 fused off
[    7.739138] [drm] Initialized xe 1.1.0 for 0000:00:02.0 on minor 0
[    7.778979] xe 0000:00:02.0: [drm] Allocated fbdev into stolen
[    7.780384] fbcon: xedrmfb (fb0) is primary device
[    7.780389] xe 0000:00:02.0: [drm] fb0: xedrmfb frame buffer device
[    7.864086] xe 0000:00:02.0: [drm] GT1: found GSC cv102.1.0
[    8.206509] xe 0000:00:02.0: [drm] GT0: PF: VF1..VF3 provisioned with 1389010944 (1.29 GiB) GGTT
[    8.206716] xe 0000:00:02.0: [drm] GT0: PF: VF1..VF3 provisioned with 21759 GuC context IDs
[    8.207270] xe 0000:00:02.0: [drm] GT0: PF: VF1..VF3 provisioned with 85 GuC doorbell IDs
[    8.207489] xe 0000:00:02.0: [drm] GT1: PF: VF1..VF3 provisioned with 21758 GuC context IDs
[    8.207831] xe 0000:00:02.0: [drm] GT1: PF: VF1..VF3 provisioned with 85 GuC doorbell IDs
[    8.315939] xe 0000:00:02.0: [drm] PF: Enabled 3 of 3 VFs

It is accepted by qemu, but I cannot remove ErrorCode 43 from Windows11. Also spooffing all host IDs!

<domain xmlns:qemu="http://libvirt.org/schemas/domain/qemu/1.0" type="kvm">
  <name>Win11Codesys</name>
  <uuid>4bf3d3f4-55b0-11f0-8d6b-37770ad72080</uuid>
  <metadata>
    <libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
      <libosinfo:os id="http://microsoft.com/win/10"/>
    </libosinfo:libosinfo>
  </metadata>
  <memory unit="KiB">8388608</memory>
  <currentMemory unit="KiB">8388608</currentMemory>
  <memoryBacking>
    <source type="memfd"/>
    <access mode="shared"/>
  </memoryBacking>
  <vcpu placement="static">8</vcpu>
  <iothreads>1</iothreads>
  <cputune>
    <vcpupin vcpu="0" cpuset="0"/>
    <vcpupin vcpu="1" cpuset="1"/>
    <vcpupin vcpu="2" cpuset="2"/>
    <vcpupin vcpu="3" cpuset="3"/>
    <vcpupin vcpu="4" cpuset="4"/>
    <vcpupin vcpu="5" cpuset="5"/>
    <vcpupin vcpu="6" cpuset="6"/>
    <vcpupin vcpu="7" cpuset="7"/>
    <emulatorpin cpuset="8-15"/>
    <iothreadpin iothread="1" cpuset="8-15"/>
  </cputune>
  <sysinfo type="smbios">
    <bios>
      <entry name="vendor">Dell Inc.</entry>
      <entry name="version">1.2.0</entry>
      <entry name="date">03/21/2025</entry>
    </bios>
    <system>
      <entry name="manufacturer">Dell Inc.</entry>
      <entry name="product">Dell Pro Max 16 MC16250</entry>
      <entry name="version">Not Specified</entry>
      <entry name="serial">FB9JW94</entry>
      <entry name="uuid">4bf3d3f4-55b0-11f0-8d6b-37770ad72080</entry>
      <entry name="sku">0CF1</entry>
      <entry name="family">Dell Pro Max Laptops</entry>
    </system>
    <baseBoard>
      <entry name="manufacturer">Dell Inc.</entry>
      <entry name="product">0YHD6M</entry>
      <entry name="version">A00</entry>
      <entry name="serial">/FB9JW94/CNWSC0055200YF/</entry>
    </baseBoard>
    <chassis>
      <entry name="manufacturer">Dell Inc.</entry>
      <entry name="serial">FB9JW94</entry>
      <entry name="sku">Notebook</entry>
    </chassis>
  </sysinfo>
  <os firmware="efi">
    <type arch="x86_64" machine="pc-q35-8.2">hvm</type>
    <firmware>
      <feature enabled="no" name="enrolled-keys"/>
      <feature enabled="yes" name="secure-boot"/>
    </firmware>
    <loader readonly="yes" secure="yes" type="pflash">/usr/share/OVMF/OVMF_CODE_4M.secboot.fd</loader>
    <nvram template="/usr/share/OVMF/OVMF_VARS_4M.fd">/var/lib/libvirt/qemu/nvram/Windows11Codesys.fd</nvram>
    <boot dev="hd"/>
    <bootmenu enable="yes"/>
    <smbios mode="sysinfo"/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <hyperv mode="custom">
      <relaxed state="on"/>
      <vapic state="on"/>
      <spinlocks state="on" retries="8191"/>
      <vpindex state="on"/>
      <runtime state="on"/>
      <synic state="on"/>
      <stimer state="on"/>
      <vendor_id state="on" value="GenuineIntel"/>
    </hyperv>
    <vmport state="off"/>
    <smm state="on"/>
  </features>
  <cpu mode="host-passthrough" check="none" migratable="on">
    <topology sockets="1" dies="1" cores="8" threads="1"/>
    <maxphysaddr mode="passthrough" limit="40"/>
  </cpu>
  <clock offset="localtime">
    <timer name="rtc" tickpolicy="catchup"/>
    <timer name="pit" tickpolicy="delay"/>
    <timer name="hpet" present="no"/>
    <timer name="hypervclock" present="yes"/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <pm>
    <suspend-to-mem enabled="no"/>
    <suspend-to-disk enabled="no"/>
  </pm>
  <devices>
    <emulator>/usr/bin/qemu-system-x86_64</emulator>
    <disk type="file" device="disk">
      <driver name="qemu" type="qcow2"/>
      <source file="/media/storage/VMs/KVM/Win10Codesys/Win10Codesys.qcow2"/>
      <target dev="sdb" bus="sata"/>
      <address type="drive" controller="0" bus="0" target="0" unit="1"/>
    </disk>
    <disk type="file" device="cdrom">
      <driver name="qemu" type="raw"/>
      <target dev="sdc" bus="sata"/>
      <readonly/>
      <address type="drive" controller="0" bus="0" target="0" unit="2"/>
    </disk>
    <controller type="usb" index="0" model="nec-xhci" ports="15">
      <address type="pci" domain="0x0000" bus="0x03" slot="0x00" function="0x0"/>
    </controller>
    <controller type="sata" index="0">
      <address type="pci" domain="0x0000" bus="0x00" slot="0x1f" function="0x2"/>
    </controller>
    <controller type="pci" index="0" model="pcie-root"/>
    <controller type="pci" index="1" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="1" port="0x10"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x04" function="0x0" multifunction="on"/>
    </controller>
    <controller type="pci" index="2" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="2" port="0x11"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x04" function="0x1"/>
    </controller>
    <controller type="pci" index="3" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="3" port="0x12"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x04" function="0x2"/>
    </controller>
    <controller type="pci" index="4" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="4" port="0x13"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x04" function="0x3"/>
    </controller>
    <controller type="pci" index="5" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="5" port="0x14"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x04" function="0x4"/>
    </controller>
    <controller type="pci" index="6" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="6" port="0x15"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x04" function="0x5"/>
    </controller>
    <controller type="pci" index="7" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="7" port="0x16"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x04" function="0x6"/>
    </controller>
    <controller type="pci" index="8" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="8" port="0x17"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x04" function="0x7"/>
    </controller>
    <controller type="pci" index="9" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="9" port="0x10"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x03" function="0x0" multifunction="on"/>
    </controller>
    <controller type="pci" index="10" model="pcie-to-pci-bridge">
      <model name="pcie-pci-bridge"/>
      <address type="pci" domain="0x0000" bus="0x06" slot="0x00" function="0x0"/>
    </controller>
    <controller type="pci" index="11" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="11" port="0x8"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x0" multifunction="on"/>
    </controller>
    <controller type="pci" index="12" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="12" port="0x9"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x1"/>
    </controller>
    <controller type="pci" index="13" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="13" port="0xa"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x2"/>
    </controller>
    <controller type="pci" index="14" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="14" port="0xb"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x3"/>
    </controller>
    <controller type="pci" index="15" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="15" port="0xc"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x4"/>
    </controller>
    <controller type="pci" index="16" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="16" port="0xd"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x5"/>
    </controller>
    <controller type="pci" index="17" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="17" port="0xe"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x6"/>
    </controller>
    <controller type="pci" index="18" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="18" port="0xf"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x7"/>
    </controller>
    <controller type="virtio-serial" index="0">
      <address type="pci" domain="0x0000" bus="0x05" slot="0x00" function="0x0"/>
    </controller>
    <interface type="bridge">
      <mac address="00:0c:29:5e:f6:dd"/>
      <source bridge="BrService"/>
      <model type="e1000e"/>
      <address type="pci" domain="0x0000" bus="0x01" slot="0x00" function="0x0"/>
    </interface>
    <serial type="pty">
      <target type="isa-serial" port="0">
        <model name="isa-serial"/>
      </target>
    </serial>
    <console type="pty">
      <target type="serial" port="0"/>
    </console>
    <channel type="unix">
      <target type="virtio" name="org.qemu.guest_agent.0"/>
      <address type="virtio-serial" controller="0" bus="0" port="1"/>
    </channel>
    <channel type="spicevmc">
      <target type="virtio" name="com.redhat.spice.0"/>
      <address type="virtio-serial" controller="0" bus="0" port="2"/>
    </channel>
    <input type="tablet" bus="usb">
      <address type="usb" bus="0" port="1"/>
    </input>
    <input type="mouse" bus="ps2"/>
    <input type="keyboard" bus="ps2"/>
    <tpm model="tpm-tis">
      <backend type="emulator" version="1.2"/>
    </tpm>
    <graphics type="spice" port="-1" autoport="no" listen="0.0.0.0">
      <listen type="address" address="0.0.0.0"/>
      <image compression="off"/>
      <gl enable="no"/>
    </graphics>
    <audio id="1" type="spice"/>
    <video>
      <model type="ramfb" vram="131072" heads="1" primary="yes"/>
    </video>
    <hostdev mode="subsystem" type="pci" managed="yes">
      <driver name="vfio"/>
      <source>
        <address domain="0x0000" bus="0x00" slot="0x02" function="0x1"/>
      </source>
      <rom bar="on" file="/var/lib/libvirt/roms/IntelGopDriver.efi"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x0"/>
    </hostdev>
    <redirdev bus="usb" type="spicevmc">
      <address type="usb" bus="0" port="2"/>
    </redirdev>
    <redirdev bus="usb" type="spicevmc">
      <address type="usb" bus="0" port="3"/>
    </redirdev>
    <watchdog model="itco" action="reset"/>
    <memballoon model="virtio">
      <address type="pci" domain="0x0000" bus="0x04" slot="0x00" function="0x0"/>
    </memballoon>
  </devices>
  <qemu:override>
    <qemu:device alias="hostdev0">
      <qemu:frontend>
        <qemu:property name="x-vga" type="bool" value="true"/>
        <qemu:property name="x-igd-opregion" type="bool" value="true"/>
        <qemu:property name="x-igd-legacy-mode" type="string" value="off"/>
        <qemu:property name="x-igd-gms" type="unsigned" value="384"/>
      </qemu:frontend>
    </qemu:device>
  </qemu:override>
</domain>

i915 in VM Linux crash.
xe in VM Linux reports:

xe 0000:00:02.0: [drm] ERROR Hardware reports unknown graphics version 0.0

I extracted IntelGOPDriver.efi from my BIOS Update.
Every Windows driver tested bring me to Error 43.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions