PYNQ: PYTHON PRODUCTIVITY

ZCU104 - Pynq overlay failed with DMA

Hello all !

Information

  • Board Zcu104
  • Yocto branch Zeus
  • Pynq 2.5
  • Python 3.7.7

We have implemented VDMA with TPG and we would like to use Pynq in order to make some tests.
I’m trying to run a custom Pynq Image ( with Yocto Zeus ) for ZCU104 board but i’m getting following message

ValueError: Could not find UIO device for interrupt pin for IRQ number 0

According to this thread i have added the following node:

But the IRQ “fabric” is missing …

/ {
amba {

	fabric@A0000000 {
		compatible = "generic-uio";
		reg = <0x0 0xA0000000 0x0 0x10000>;
		interrupt-parent = <&gic>;
		interrupts = <0x0 0x59 0x4>;
	};
  };
};


Note that VDMA address is 0xA0000000 (default from Vivado)

Stupid question : How can I update fabric node in order to fix that ? I have to add some block inside the design ?

Hello all,

Little update, i’m still stuck on this issue… any help ?

image

I’m not able to add basic VDMA/TPG IP and get control from Pynq :frowning:

Cheers,

Hmm… if you are trying to use runtime PL reconfiguration with gic it is not possible at this moment (I had a similar question some time ago it is some kernel bug).

Hi @bartokon and thank you for the hint !

Do you have more info about that ? Maybe a worakoud is available ?

Looks strange because it a kind of basic Pynq feature isn’t it ?

Cheers,

Maybe @rock can elaborate on this matter…

Even without gic you could still use pooling method for detecting interrupts.

Yeah, you need to add the same system_interrupts block as what the base overlay has. Make sure the system interrupts are connected similarly as the base overlay.

Hi @rock

Could you please be so kind and be more specific, because i’m not sure to understand what you mean…

There is no simple example on that ? Or maybe a doc ?

Hi @Nicolas_Salmin , first of all, if you are using pynq image and want to use AXI interrupt controller, it is best to have AXI interrupt controller the same way as what is shown in the base overlay.

Second, for a lot of blocks including DMA, or Vitis IP, even if you don’t use interrupt, the pooling mode can still work. In that way you just refrain from adding the AXI interrupt controller into your block design.

So if no AXI interrupt controller, all good. If with AXI interrupt controller, it has to be the same as the ZCU104 base overlay block design. You can find the design on pynq repo.

For the fabric device to apper, in addition to the device-tree fragment you also need to ensure that uio_pdrv_genirq.of_id=“generic-uio” is in your kernel boot args and that CONFIG_UIO_PDRV_GENIRQ=y is in your kernel configuration.

Peter