Interrupt issue on the RFSoC4x2 Board

Hello,

In my HW design, I have multiple interrupts that are concatenated and fed to the AXI Interrupt Controller IP, which is connected to the first interrupt pin (pl_ps_irq[0:0]) of the PS subsystem.
I made sure that the Interrupt type is set to Edge instead of Level.

The HW design is for the RFSoC4x2 board. I am using PYNQ -RFSoC v3.0.1, and when I check in the terminal the interrupts, I see that the fabric indicates zero, which means no interrupt has been detected by the PS

root@pynq:/# cat /proc/interrupts 
           CPU0       CPU1       CPU2       CPU3       
 11:      85037     105550     137895      89497     GICv2  30 Level     arch_timer
 14:          0          0          0          0     GICv2  67 Level     zynqmp_ipi
 15:          0          0          0          0     GICv2 175 Level     arm-pmu
 16:          0          0          0          0     GICv2 176 Level     arm-pmu
 17:          0          0          0          0     GICv2 177 Level     arm-pmu
 18:          0          0          0          0     GICv2 178 Level     arm-pmu
 19:          0          0          0          0     GICv2 155 Level     axi-pmon, axi-pmon
 20:          0          0          0          0     GICv2 156 Level     zynqmp-dma
 21:          0          0          0          0     GICv2 157 Level     zynqmp-dma
 22:          0          0          0          0     GICv2 158 Level     zynqmp-dma
 23:          0          0          0          0     GICv2 159 Level     zynqmp-dma
 24:          0          0          0          0     GICv2 160 Level     zynqmp-dma
 25:          0          0          0          0     GICv2 161 Level     zynqmp-dma
 26:          0          0          0          0     GICv2 162 Level     zynqmp-dma
 27:          0          0          0          0     GICv2 163 Level     zynqmp-dma
 28:          0          0          0          0     GICv2 109 Level     zynqmp-dma
 29:          0          0          0          0     GICv2 110 Level     zynqmp-dma
 30:          0          0          0          0     GICv2 111 Level     zynqmp-dma
 31:          0          0          0          0     GICv2 112 Level     zynqmp-dma
 32:          0          0          0          0     GICv2 113 Level     zynqmp-dma
 33:          0          0          0          0     GICv2 114 Level     zynqmp-dma
 34:          0          0          0          0     GICv2 115 Level     zynqmp-dma
 35:          0          0          0          0     GICv2 116 Level     zynqmp-dma
 37:      31703          0          0          0     GICv2  91 Level     eth0, eth0
 39:         36          0          0          0     GICv2  49 Level     cdns-i2c
 40:          0          0          0          0     GICv2  50 Level     cdns-i2c
 41:          0          0          0          0     GICv2  42 Level     ff960000.memory-controller
 42:          0          0          0          0     GICv2  57 Level     axi-pmon, axi-pmon
 43:          0          0          0          0     GICv2  58 Level     ffa60000.rtc
 44:          0          0          0          0     GICv2  59 Level     ffa60000.rtc
 45:      50120          0          0          0     GICv2  80 Level     mmc0
 46:        736          0          0          0     GICv2  51 Level     ff040000.spi
 47:         85          0          0          0     GICv2  52 Level     ff050000.spi
 48:        356          0          0          0     GICv2  54 Level     xuartps
 49:          0          0          0          0     GICv2  88 Level     ams-irq
 50:          0          0          0          0     GICv2 154 Level     fd4c0000.dma-controller
 51:          0          0          0          0     GICv2 151 Level     fd4a0000.display
 52:          0          0          0          0     GICv2 121 Level     fabric
 53:          0          0          0          0     GICv2  97 Level     dwc3
 55:          0          0          0          0     GICv2 107 Level     usb-wakeup, usb-wakeup
 56:       4193          0          0          0     GICv2 102 Level     xhci-hcd:usb1
IPI0:       409        454        586        626       Rescheduling interrupts
IPI1:     20656      27702      31570      24420       Function call interrupts
IPI2:         0          0          0          0       CPU stop interrupts
IPI3:         0          0          0          0       CPU stop (for crash dump) interrupts
IPI4:         0          0          0          0       Timer broadcast interrupts
IPI5:         0          0          0          0       IRQ work interrupts
IPI6:         0          0          0          0       CPU wake-up interrupts
Err:          0

The interrupt controller is detected correctly in my Jyputer notebook

print("Discovered interrupt pins:")
for pin, info in ol.interrupt_pins.items():
    print(f"  {pin:40s} → controller: {info['controller']}, index: {info['index']}")
​
print("\nDiscovered interrupt controllers:")
print(ol.interrupt_controllers)
Discovered interrupt pins:
  intr_block_0/irq                         → controller: axi_intc_0, index: 0
  xlconcat_0/In0                           → controller: axi_intc_0, index: 0
  usp_rf_data_converter_1/irq              → controller: axi_intc_0, index: 1
  xlconcat_0/In1                           → controller: axi_intc_0, index: 1
  clocktreeMTS/MTSclkwiz/interrupt         → controller: axi_intc_0, index: 2
  xlconcat_0/In2                           → controller: axi_intc_0, index: 2
  system_management_wiz_0/ip2intc_irpt     → controller: axi_intc_0, index: 3
  xlconcat_0/In3                           → controller: axi_intc_0, index: 3

Discovered interrupt controllers:
{'axi_intc_0': {'parent': '', 'index': 0, 'raw_irq': 121}}

But when I print the content of the registers of the axi_int_c, all of them are zero

ol.axi_intc_0.register_map
RegisterMap {
  ISR = Register(INT=0),
  IPR = Register(INT=0),
  IER = Register(INT=0),
  IAR = Register(INT=write-only),
  SIE = Register(INT=0),
  CIE = Register(INT=0),
  IVR = Register(IVN=0),
  MER = Register(ME=0, HIE=0),
  IMR = Register(INT=0),
  ILR = Register(ILN=0),

What am I missing in my setup? Is there a configuration that I need to apply to the Interrupt controller from Jyputer?

Any support on this issue? Did anyone encounter this issue?

Hi @hany

Are you able to try out the example design given in the PYNQ documentation: Interrupt — Python productivity for Zynq (Pynq)

If you can try out that simple design, then maybe we can diagnose the issue from there.