Showing results for 
Show  only  | Search instead for 
Did you mean: 
Registered: ‎10-31-2018

Xen does not support more than one PL to PS interrupt for axi device?

Board I am using: zcu104

Operating system: Petalinux Linux

Hypervisor: Xen

I was trying to add axi_dma_0 and axi_timer_0 to my processor block, and I followed Using the AXI DMA in Vivado to set up the AXI DMA and UG1209 for AXI TIMER. It worked flawlessly when I tested it in bare-metal.

Now, I just need to do a Xen-passthrough so the program will work in a domU bare-metal guest (with a dom0 Linux host). But I ran into a strange issue, when I merge 3 signals into xlconcat block, only one is available in Xen, the rest will encounter a "Device or Resource Busy" error, claiming they are used dom0.

In the figure below, I connected 3 interrupt signals to xlconcat block, and the xlconcat port is connected to pl_ps_irq1. The first signal is for axi_timer_0, the rest two are for axi_dma_0, one for mm2s_introut, the other one fr s2mm_introut. (don't mind the "1:0" for the pl_ps_irq1, it was "2:0" when I generated the hardware, this picture is for illustration purpose only)


When I read into PG201, it seems that I would occupy 137, 138, and 139 interrupt ID. As shown below.


However, for some reason, only irq 138 could be pass-through, when I try to connect to the other two it says "Device or Resource Busy". If I try to connect to ports other than 137, 138, and 139, it then says "Operation not permitted".

Is this a technical limitation for Xen, or I should route all 3 signals to 138, and Linux will route the 3 signals to proper axi devices? 

It could very well be some mistakes I made on my end, any advice is appreciated.


0 Kudos
1 Reply
Registered: ‎05-30-2018

The Xen kernel looks at the device tree to determine what IRQs are enabled for pass-through.  There must be a device tree node marked with status = "disabled" and xen,passthrough = <1> for Xen to allow the IRQ pass-through to a guest domain.

The following node is simple enough for Xen to allow the IRQ pass-through.

mydev@a0000000 {
	status = "disabled";
	interrupt-parent = <&gic>;
	interrupts = <0 137 4>;
	xen,passthrough = <1>;




Jeff Kubascik
Embedded Systems Engineer - DornerWorks

Run FreeRTOS on Xen
0 Kudos