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


I have a custom board.
In my overlay I have IP blocks that have interrupts. I am connecting them through AXI interrupt controller to Zynq pl_ps_irq[0]. I am using Zynq MPSoC FPGA.
As soon as i access a block such as CSI2 IP which has a interrupt, I am getting following message

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

Any hint on what might be wrong.

When the PYNQ sdbuild flow generates the boot files it adds a UIO device to the devicetree that is bound to pl_ps_irq[0] - it’s one of the fragments we add. for some reason it looks like that in the case of your board that hasn’t happened. This is likely due to one of the following reasons

  • The UIO device isn’t in the device tree
  • There’s an existing device in your device tree for the board that binds to that interrupt first
  • The UIO device drivers aren’t compiled into the kernel

How did you create the SD card image for your board?


Hi Peter,
Thank you so much for your reply and useful pointers.
I was experimenting last week and i have some success.

I have a Trenz 820 board
I was able to build pynq image with this board and it seems to not crash when i access IPs which have interrupts in my PL logic. I can see fabric interrupt mapped when i
do cat /proc/interrupts

Few questions from my side.

  1. For one of the VDMAs i am using only S2MM channel. I am not using mm2s_introut
    I get following error
    AttributeError : 'AXIVDMA object has not attribute ‘mm2s_introut’

Is it a requirement in pynq that i need to use both channels for it to be working

  1. How can i change default IP address of the board when i build Pynq image
    The default hostname is pynq and the default static IP address is

Hi Peter,

I have now configured the VDMA to use both s2mm and mm2s channels and the error is gone. Please let me know if there is any example code for using VDMA with interrupts

Best Regards

The readframe and writeframe functions of the VDMA will use interrupts under the hood to avoid polling. If you want to interleave the reading and writing with other code then the way we support is to use the asyncio library along with the readframe_async and writeframe_async coroutines. The closest we have to an example for this I think is cell three in one of my ZCU104 video notebooks which is a bit cluttered and only uses the HDMI input functions.

To change the hostname and IP I would create a new sdbuild package which modifies /etc/hostname and /etc/network/interfaces.d/eth0. We don’t have a hook for configuring this as part of the normal flow.