Debugging PCIe transfers on IVB iGPU
Hi,
I'm trying to pull data from an FPGA card into the iGPU on an older IVB system. This machine has an 8086:0150 Host Controller as 0:00.0, and an 8086:0162 iGPU as 0:02.0; the FPGA is connected as 1:00.0.
I have created a p2p dma_buf in Linux, exported that from my driver as a file descriptor, imported it on Vulkan, and am now trying to vkCopyImage data from the imported image to a texture, converting to Y0 layout in the process. I get no complaints from the validation layer, and adding a bunch of printk()s allowed me to validate that the GPP PTEs for the BAR are created, but no TLPs arrive.
Checking the opposite direction with a read request to the 256M prefetchable range of the iGPU device
00000002
0100aaff
e0000048
gives me back UR
0a000000
00002008
0100aa48
while for arbitrary memory addresses, e.g.
00000002
0100aaff
50000048
I get successful completion with some garbage data
4a000002
00000008
0100aa48
xxxxxxxx
xxxxxxxx
The UR seems to be generated by the root complex, which would suggest that I can't use address-routed TLPs between devices, which would also explain why I'm not seeing a TLP from the iGPU in my FPGA. Is that correct, or have I forgotten something?
Simon