Hi,
I'am new here, i hope you can help me/ give hint to be able to use a PCIe sound card inside a windows VM.
Host machine:
HP Proliant 380 Gen 9
CPU(s) 48 x Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz (2 Sockets)
Kernel Version Linux 5.11.22-3-pve #1 SMP PVE 5.11.22-5 (Wed, 21 Jul 2021 18:25:44 +0200)
PVE Manager Version pve-manager/7.0-10/d2f465d3
Guest:
Windows 10 Ent 2019
UEFI mode
The sound card i want to passthrough:
https://www.esi-audio.com/products/maya44ex/
the sound chip is PCI and it is behind a Texas instrument pcie to pci bridge.
As of today i can only passtrhough the sound chip and not pcie bridge. In the windows guest i have the driver for the board well installed, but when i want to play sound, nothing output. It is like the audio buffer is not fil, DMA not working, etc..
On the proxmox i found that the pcie bridge is in the same IOMMU group.
I put the device ID in the list to use the vfio-pci kernel driver, but on lspci, no driver at all show for this bridge.
If i force the PCIe bridge adress in the VM file, it crash.
The PCIe bridge is not showing in the list of pci device i can pass in the VM when using the proxmox web interface.
[fixed]04:00.0 Ethernet controller: Intel Corporation Ethernet Controller 10-Gigabit X540-AT2 (rev 01)
04:00.1 Ethernet controller: Intel Corporation Ethernet Controller 10-Gigabit X540-AT2 (rev 01)
05:00.0 PCI bridge: Texas Instruments XIO2001 PCI Express-to-PCI Bridge
06:00.0 Multimedia audio controller: Device 19fe:7000 (rev 03)
08:00.0 USB controller: Renesas Technology Corp. uPD720201 USB 3.0 Host Controller (rev 03)[/fixed]
Some data:
To forcce the vfio driver i got IDs with this:
I put the 3 ids in the file:
But as we can see on the first lspci -vv it seems the pcie bridge don't use this. How i can be sure that the host is not using it or have reserved some memory/locks ?
The config file of the VM:
if i try to start the VM, quemu yell at me:
But the PCIe bridge is in the IOMMU group 38 if we look at the lscpi outputs, but i can't get to bound it to vfio drivers.
Any hint ?
The idea to use this board instead of more "classical" PC/gamer board is to use the ASIO driver which allow low latency.
I'am new here, i hope you can help me/ give hint to be able to use a PCIe sound card inside a windows VM.
Host machine:
HP Proliant 380 Gen 9
CPU(s) 48 x Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz (2 Sockets)
Kernel Version Linux 5.11.22-3-pve #1 SMP PVE 5.11.22-5 (Wed, 21 Jul 2021 18:25:44 +0200)
PVE Manager Version pve-manager/7.0-10/d2f465d3
Guest:
Windows 10 Ent 2019
UEFI mode
The sound card i want to passthrough:
https://www.esi-audio.com/products/maya44ex/
the sound chip is PCI and it is behind a Texas instrument pcie to pci bridge.
As of today i can only passtrhough the sound chip and not pcie bridge. In the windows guest i have the driver for the board well installed, but when i want to play sound, nothing output. It is like the audio buffer is not fil, DMA not working, etc..
On the proxmox i found that the pcie bridge is in the same IOMMU group.
I put the device ID in the list to use the vfio-pci kernel driver, but on lspci, no driver at all show for this bridge.
If i force the PCIe bridge adress in the VM file, it crash.
The PCIe bridge is not showing in the list of pci device i can pass in the VM when using the proxmox web interface.
[fixed]04:00.0 Ethernet controller: Intel Corporation Ethernet Controller 10-Gigabit X540-AT2 (rev 01)
04:00.1 Ethernet controller: Intel Corporation Ethernet Controller 10-Gigabit X540-AT2 (rev 01)
05:00.0 PCI bridge: Texas Instruments XIO2001 PCI Express-to-PCI Bridge
06:00.0 Multimedia audio controller: Device 19fe:7000 (rev 03)
08:00.0 USB controller: Renesas Technology Corp. uPD720201 USB 3.0 Host Controller (rev 03)[/fixed]
Some data:
Code:
root@proxmox:~# lspci -vv
05:00.0 PCI bridge: Texas Instruments XIO2001 PCI Express-to-PCI Bridge (prog-if 00 [Normal decode])
Physical Slot: 1
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV+ VGASnoop- ParErr+ Stepping- SERR+ FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort+ >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 64 bytes
NUMA node: 0
IOMMU group: 38
Bus: primary=05, secondary=06, subordinate=06, sec-latency=64
I/O behind bridge: [disabled]
Memory behind bridge: 93700000-937fffff [size=1M]
Prefetchable memory behind bridge: [disabled]
Secondary status: 66MHz+ FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort+ <SERR- <PERR-
BridgeCtl: Parity+ SERR+ NoISA- VGA- VGA16- MAbort- >Reset- FastB2B-
PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
Capabilities: [40] Subsystem: Device 0000:0000
Capabilities: [48] Power Management version 3
Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
Bridge: PM- B3+
Capabilities: [50] MSI: Enable- Count=1/16 Maskable- 64bit+
Address: 0000000000000000 Data: 0000
Capabilities: [70] Express (v2) PCI-Express to PCI/PCI-X Bridge, MSI 00
DevCap: MaxPayload 512 bytes, PhantFunc 0
ExtTag- AttnBtn- AttnInd- PwrInd- RBE+ SlotPowerLimit 0.000W
DevCtl: CorrErr- NonFatalErr+ FatalErr+ UnsupReq-
RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop- BrConfRtry-
MaxPayload 256 bytes, MaxReadReq 4096 bytes
DevSta: CorrErr+ NonFatalErr- FatalErr- UnsupReq+ AuxPwr+ TransPend-
LnkCap: Port #0, Speed 2.5GT/s, Width x1, ASPM L0s L1, Exit Latency L0s <512ns, L1 <16us
ClockPM+ Surprise- LLActRep- BwNot- ASPMOptComp-
LnkCtl: ASPM Disabled; RCB 64 bytes, Disabled- CommClk+
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s (ok), Width x1 (ok)
TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
DevCap2: Completion Timeout: Not Supported, TimeoutDis- NROPrPrP- LTR-
10BitTagComp- 10BitTagReq- OBFF Not Supported, ExtFmt- EETLPPrefix-
EmergencyPowerReduction Not Supported, EmergencyPowerReductionInit-
FRS-
DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis- LTR- OBFF Disabled,
LnkCtl2: Target Link Speed: 2.5GT/s, EnterCompliance- SpeedDis-
Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
Compliance De-emphasis: -6dB
LnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete- EqualizationPhase1-
EqualizationPhase2- EqualizationPhase3- LinkEqualizationRequest-
Retimer- 2Retimers- CrosslinkRes: unsupported
Capabilities: [100 v1] Advanced Error Reporting
UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UESvrt: DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr+
CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr+
AERCap: First Error Pointer: 00, ECRCGenCap+ ECRCGenEn- ECRCChkCap+ ECRCChkEn-
MultHdrRecCap- MultHdrRecEn- TLPPfxPres- HdrLogCap-
HeaderLog: 00000000 00000000 00000000 00000000
[ICODE][/ICODE]
06:00.0 Multimedia audio controller: Device 19fe:7000 (rev 03)
Subsystem: Device 0e51:0003
Control: I/O- Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Interrupt: pin A routed to IRQ 16
NUMA node: 0
IOMMU group: 38
Region 0: Memory at 93700000 (32-bit, non-prefetchable) [size=16K]
Capabilities: [50] Power Management version 2
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
Status: D3 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Kernel driver in use: vfio-pci
To forcce the vfio driver i got IDs with this:
Code:
root@proxmox:~# lspci -nnk
05:00.0 PCI bridge [0604]: Texas Instruments XIO2001 PCI Express-to-PCI Bridge [104c:8240]
06:00.0 Multimedia audio controller [0401]: Device [19fe:7000] (rev 03)
Subsystem: Device [0e51:0003]
Kernel driver in use: vfio-pci
I put the 3 ids in the file:
Code:
root@proxmox:~# cat /etc/modprobe.d/vfio.conf
options vfio-pci ids=104c:8240,19fe:7000,0e51:0003
The config file of the VM:
Code:
agent: 1
balloon: 8192
bios: ovmf
boot: order=sata0;ide2;net0
cores: 8
cpu: host
efidisk0: data2:vm-101-disk-1,size=4M
hostpci0: 0000:05:00,pcie=1
ide2: local:iso/virtio-win-0.1.190.iso,media=cdrom,size=489986K
machine: q35
memory: 16384
name: VM-SRV-RADIO
net0: e1000=3A:B5:97:6A:FE:D5,bridge=vmbr0,firewall=1
numa: 0
onboot: 1
ostype: win10
parent: FreshInstall
sata0: data2:vm-101-disk-0,size=120G,ssd=1
scsihw: virtio-scsi-pci
smbios1: uuid=c98fac8d-913a-4d56-88c2-5eb9c72c037b
sockets: 1
startup: order=2,up=120
vga: vmware,memory=512
vmgenid: 390e27cd-9ebb-4606-894d-c800058d60c5
[FreshInstall]
agent: 1
balloon: 8192
bios: ovmf
boot: order=sata0;ide2;net0
cores: 6
efidisk0: data2:vm-101-disk-1,size=4M
ide2: local:iso/virtio-win-0.1.190.iso,media=cdrom,size=489986K
memory: 16384
name: VM-SRV-RADIO
net0: e1000=3A:B5:97:6A:FE:D5,bridge=vmbr0,firewall=1
numa: 1
onboot: 1
ostype: win10
runningcpu: kvm64,enforce,hv_ipi,hv_relaxed,hv_reset,hv_runtime,hv_spinlocks=0x1fff,hv_stimer,hv_synic,hv_time,hv_vapic,hv_vpindex,+kvm_pv_eoi,+kvm_pv_unhalt,+lahf_lm,+sep
runningmachine: pc-i440fx-5.1+pve0
sata0: data2:vm-101-disk-0,size=120G,ssd=1
scsihw: virtio-scsi-pci
smbios1: uuid=c98fac8d-913a-4d56-88c2-5eb9c72c037b
snaptime: 1622994090
sockets: 1
vga: vmware,memory=512
vmgenid: 390e27cd-9ebb-4606-894d-c800058d60c5
vmstate: data2:vm-101-state-FreshInstall
if i try to start the VM, quemu yell at me:
Code:
root@proxmox:~# qm start 101
kvm: -device vfio-pci,host=0000:05:00.0,id=hostpci0,bus=ich9-pcie-port-1,addr=0x0: vfio 0000:05:00.0: error getting device from group 38: No such device
Verify all devices in group 38 are bound to vfio-<bus> or pci-stub and not already in use
start failed: QEMU exited with code 1
Any hint ?
The idea to use this board instead of more "classical" PC/gamer board is to use the ASIO driver which allow low latency.
Last edited: