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?
