PCI pass-through IOMMU on Celeron N3350

NickyDoes

Member
May 16, 2022
14
2
8
Raleigh, North Carolina, USA
I'm working to enable PCI pass through on a fanless PC running an Intel Celeron N3350 CPU.

Intel says VT-d is supported on this processor.
I've enabled all virtualization in the UEFI firmware settings.
I've enabled IOMMU at boot (see below /proc/cmdline)

Still, only one IOMMU group.

I've read through this relevant thread. The thread ends because the OP's CPU does not support VT-d. The N3350 does.

Code:
root@appserver:~# dmesg | grep -e DMAR -e IOMMU
[    0.037102] DMAR: IOMMU enabled

root@appserver:~# cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-6.5.11-8-pve root=/dev/mapper/pve-root ro quiet intel_iommu=on

root@appserver:~# lsmod | grep vfio
vfio_pci               16384  0
vfio_pci_core          86016  1 vfio_pci
irqbypass              12288  2 vfio_pci_core,kvm
vfio_iommu_type1       49152  0
vfio                   57344  3 vfio_pci_core,vfio_iommu_type1,vfio_pci
iommufd                77824  1 vfio

root@appserver:~# for d in /sys/kernel/iommu_groups/*/devices/*; do n=${d#*/iommu_groups/*}; n=${n%%/*}; printf 'IOMMU group %s ' "$n"; lspci -nnks "${d##*/}"; done
IOMMU group * 00:00.0 Host bridge [0600]: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series Host Bridge [8086:5af0] (rev 0b)
        Subsystem: Elitegroup Computer Systems Celeron N3350/Pentium N4200/Atom E3900 Series Host Bridge [1019:9cc7]
00:02.0 VGA compatible controller [0300]: Intel Corporation HD Graphics 500 [8086:5a85] (rev 0b)
        Subsystem: Elitegroup Computer Systems HD Graphics 500 [1019:9cc7]
        Kernel driver in use: i915
        Kernel modules: i915
00:0f.0 Communication controller [0780]: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series Trusted Execution Engine [8086:5a9a] (rev 0b)
        Subsystem: Elitegroup Computer Systems Celeron N3350/Pentium N4200/Atom E3900 Series Trusted Execution Engine [1019:9cc7]
        Kernel driver in use: mei_me
        Kernel modules: mei_me
00:12.0 SATA controller [0106]: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series SATA AHCI Controller [8086:5ae3] (rev 0b)
        Subsystem: Elitegroup Computer Systems Celeron N3350/Pentium N4200/Atom E3900 Series SATA AHCI Controller [1019:9cc7]
        Kernel driver in use: ahci
        Kernel modules: ahci
00:13.0 PCI bridge [0604]: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series PCI Express Port A #1 [8086:5ad8] (rev fb)
        Subsystem: Elitegroup Computer Systems Celeron N3350/Pentium N4200/Atom E3900 Series PCI Express Port A [1019:9cc7]
        Kernel driver in use: pcieport
00:13.1 PCI bridge [0604]: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series PCI Express Port A #2 [8086:5ad9] (rev fb)
        Subsystem: Elitegroup Computer Systems Celeron N3350/Pentium N4200/Atom E3900 Series PCI Express Port A [1019:9cc7]
        Kernel driver in use: pcieport
00:13.2 PCI bridge [0604]: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series PCI Express Port A #3 [8086:5ada] (rev fb)
        Subsystem: Elitegroup Computer Systems Celeron N3350/Pentium N4200/Atom E3900 Series PCI Express Port A [1019:9cc7]
        Kernel driver in use: pcieport
00:15.0 USB controller [0c03]: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series USB xHCI [8086:5aa8] (rev 0b)
        Subsystem: Elitegroup Computer Systems Celeron N3350/Pentium N4200/Atom E3900 Series USB xHCI [1019:9cc7]
        Kernel driver in use: xhci_hcd
        Kernel modules: xhci_pci
00:1c.0 SD Host controller [0805]: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series eMMC Controller [8086:5acc] (rev 0b)
        Subsystem: Elitegroup Computer Systems Celeron N3350/Pentium N4200/Atom E3900 Series eMMC Controller [1019:9cc7]
        Kernel driver in use: sdhci-pci
        Kernel modules: sdhci_pci
00:1f.0 ISA bridge [0601]: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series Low Pin Count Interface [8086:5ae8] (rev 0b)
        Subsystem: Elitegroup Computer Systems Celeron N3350/Pentium N4200/Atom E3900 Series Low Pin Count Interface [1019:9cc7]
        Kernel driver in use: lpc_ich
        Kernel modules: lpc_ich
00:1f.1 SMBus [0c05]: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series SMBus Controller [8086:5ad4] (rev 0b)
        Subsystem: Elitegroup Computer Systems Celeron N3350/Pentium N4200/Atom E3900 Series SMBus Controller [1019:9cc7]
        Kernel driver in use: i801_smbus
        Kernel modules: i2c_i801
01:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 15)
        Subsystem: Elitegroup Computer Systems RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [1019:9cc7]
        Kernel driver in use: r8169
        Kernel modules: r8169
02:00.0 Network controller [0280]: Intel Corporation Wireless 3165 [8086:3165] (rev 81)
        Subsystem: Intel Corporation Dual Band Wireless AC 3165 [Stone Peak 1x1] [8086:4010]
        Kernel driver in use: iwlwifi
        Kernel modules: iwlwifi
03:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 15)
        Subsystem: Elitegroup Computer Systems RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [1019:9cc7]
        Kernel driver in use: r8169
        Kernel modules: r8169
root@appserver:~#
 
Intel says VT-d is supported on this processor.
That's good, otherwise it will not work.
BOOT_IMAGE=/boot/vmlinuz-6.5.11-8-pve root=/dev/mapper/pve-root ro quiet intel_iommu=on
intel_iommu=on is present, which is also necessary.

The question now is: is VT-d supported by the motherboard (chipset) and enabled in the motherboard BIOS?
Maybe you can tell what the (Intel) chipset is and the make and model of the motherboard or maybe even a link to the motherboard manual?
 
Now I have to show how much capability I am trying to extract out of a thing

It's a fanless PC from ECS. Here's the product page. Note that the manual download link is broken.

The Intel Celeron N3350 belongs to the Apollo Lake family, which integrates the CPU and chipset functionalities into a single System on Chip (SoC). There's no separate Intel chipset for the N3350; all necessary controllers and interfaces are built into the SoC itself.
 
You could try unsafe interrupt mapping, as shown in the Wiki you mentioned. Are there any clues in journalctl -b 0 | grep -i iommumaybe?
Maybe contact ECS about enabling VT-d in the BIOS/UEFI for this system?
 

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!