PYNQ: PYTHON PRODUCTIVITY

PYNQ VDMA fails

I’m building a VDMA pipeline as shown on the image below on PYNQ 2.5. It fails.

Any idea what is wrong with the VDMA driver?

Failure occurs when
cam_vdma = ol.axi_vdma_0

is loaded even though the overlay is loaded successfully.

The error on the notebook is related to uoi:
ValueError " Could not find UOI device for interrupt pin for IRQ number 0

but the driver shows under ls/dev/uio0- uio3.

The configuration for the VDMA is shown below:


Looks like an interrupt parsing problem - can you try add a concat block between the AXI intc and the PS block?

I did try and I’m getting the same message.
This is just a TPG to VDMA on an ZYNQ UL+ , so I’m wondering why it does not work.
Can the driver work without the interrupt?

I did some further troubleshooting. On Ultra96 the design initializes correctly the VDMA. On another board I ported PYNQ (Ultrazed) the VDMA fails with exactly the same pipeline. TPG->pixelPack-VDMA.

When querying with overlay? the output is pretty much identical.

Is there any specific setting on the PYNQ kernel that configures the interrupts? U96 has 5 instances under /dev : uio0-4 whereas Ultrazed has uio0-uio3.

Error occurs at this line immediately after overlay successfully loads:
cam_vdma = overlay.axi_vdma_0

Why would the TPG pipeline work under one UZ+ and fail on the other board?

TPGdesign.tcl (56.8 KB)

The only hint I see right now is the warning from the Vivado design:

WARNING: [BD 41-1731] Type mismatch between connected pins: /axi_intc_0/irq(undef) and /zynq_ultra_ps_e_0/pl_ps_irq0(intr)

The same warning occurs on U96 though.

For the design that works, does it use petalinux or PYNQ?

You mentioned “ls /dev/uio0- uio3”. Did you see any uio name with fabric? You can check that by cat /sys/class/uio/uio0/name and things like that.

The warning message you mentioned is irrelevant so you can safely ignore.

Ultra96 uses the common stock PYNQ image v2.5.

Ultrazed uses the PYNQ image from Ultra96 , I replaced the kernel with a custom Petalinux kernel. Xlnk works fine. This is the only case where it fails.
Now, I tried to add the UIO functionality by copying following under system-user.dtsi.

   /include/ "system-conf.dtsi"
/ {

chosen {
		bootargs = "root=/dev/mmcblk1p2 rw earlyprintk rootfstype=ext4 rootwait devtmpfs.mount=1 uio_pdrv_genirq.of_id=\"generic-uio\" clk_ignore_unused";
		pynq_board = "Unknown";
	};
amba {
		fabric@A0000000 {
			compatible = "generic-uio";
			reg = <0x0 0xA0000000 0x0 0x10000>;
			interrupt-parent = <&gic>;
			interrupts = <0x0 0x59 0x4>;
		};
	};};

under /dev there are 4 uio entries (uio0-uio3).
Issuing cat /sys/class/uio/uio3/name for uio0-3 gives axi-pmon for all 4.
There is no fabric.
Issuing cat /proc/interrupts
gives

So I’m stuck at the moment as I don’t understand why the uio does not work on this device.

I have attached the .dtsi file below.system-userdtsi.txt (2.7 KB)

Connect your AXI intc to M_AXI_HPM_LPD port of PS. And make sure the address assigned to AXI interrupt controller is 0xA0000000 in the address editor of Vivado IPI.

That won’t work. It’s outside the address range.


I revised the design and made sure that the AXI INTC was assigned the correct address but it still gives the same message.

I also changed PYNQ dma.py to remove the intc connections to mm2s and s2mm , set to 0. That also did not work.

If you want to try debug this, you can disable the interrupt and try first. To do that, you can remove the lines coming out from dma IP block and disable the interrupt in dma IP block. Then try to see if that still hangs the system.

I worked around this by removing all interrupt references on the DMA.py file. It works with the TPG.