Hi all, I am attempting to run DPDK 25.03 on a Raspberry Pi 4 Compute Module (IO Board) using an Intel I210 PCIe NIC.
The Problem: I am observing 100% TX packet loss. rte_eth_tx_burst() returns values > 0, indicating successful enqueueing to the driver ring, but the packets are never transmitted, and the NIC stats show no completed TX packets. RX works, and link status is detected as UP. I suspect this may be related to DMA coherency or IOMMU configuration on the BCM2711 PCIe bus, but I have not been able to isolate the root cause. Environment: - Hardware: Raspberry Pi 4 Compute Module (IO Board) - NIC: Intel I210 (IGB driver) attached via PCIe - OS/Kernel: Linux (custom real-time config) - DPDK Version: 25.03 (built from source with Meson) - Driver: uio_pci_generic (VFIO is not standard on this kernel, iommu.passthrough=1 is set) - Hugepages: 64 x 2MB Configuration Details: I have isolated CPUs and enabled hugepages. The device is bound using uio_pci_generic: # cmdline.txt isolcpus=2,3 irqaffinity=0,1 iommu.passthrough=1 # Binding sudo python3 dpdk-devbind.py -b uio_pci_generic 0000:01:00.0 Steps to Reproduce: I am using testpmd in "txonly" mode to isolate the issue. 1. Start testpmd: sudo ./build/app/dpdk-testpmd -l 0-1 -n 4 -a 0000:01:00.0 -- -i \ --nb-cores=1 --port-topology=loop --total-num-mbufs=32768 --rxd=256 --txd=2048 2. Configure forwarding: testpmd> set fwd txonly testpmd> start 3. Wait a few seconds, then stop and check stats: testpmd> stop testpmd> show port xstats all Observed Behavior: - Virtual Ring: When running with --vdev=net_ring0, TX works perfectly. - Physical I210: testpmd reports all packets as "dropped" in the summary. - Code Level: In my own C application, rte_eth_tx_burst returns the correct number of packets (e.g., 32), meaning the PMD accepted the mbufs. However, the NIC apparently fails to fetch or process the descriptors. Question: Has anyone successfully validated the I210 on Pi 4 with uio_pci_generic? Are there known coherence or cache flushing flags required for the igb PMD on non-IOMMU ARM64 setups? Any advice on debugging the ring state or DMA mapping for this specific SoC would be appreciated.
