08-20-2020 07:16 AM - edited 08-20-2020 07:21 AM
We are using vdma with v4l2 stack to capture images.
When the vdma capture is done after that we are seeing multiple number of the interrupts in the /proc/interrupts from vdma.
when the frame size is 2048*1024 at that time i am seeing the 46 interrupt are occurring.we are expecting 1 interrupts per frame.
with frame size changes number of interrupts are also changes.
Can any one explain this meaning of this interrupts numbers.
in the dtb node vdma interrupt is level trigger and petalinux version used is 18.3.
09-02-2020 07:40 AM
There are multiple possible reason for the AXI VDMA to trigger the interrupt. You need to read into S2MM_VDMASR register (0x34) to find out the reason of the interrupt when it is happening. Refer to PG020
It might be that there is an error detected by the AXI VDMA which is causing this.
09-08-2020 09:11 AM
Do you have any update? Were you able to make progress?
09-19-2020 09:46 AM
Issue is not resolved. We tried modifying interrupt to edge triggered (instead of level triggered) in DTB.
In that case we are getting driver probe error indicating conflicting interrupt types.
There is no error in frame/framing. We are suspecting that interrupt is getting so much time to get serviced in 7 series zynq, since the interrupt type is level triggered we are getting too many interrupts. We are looking at a way to resolve this issue.
09-20-2020 12:53 AM
As Kamalesh mentioned, We are not seeing any issue in Framing, but we are observing hang after running our multiple times. Below I have mentioned few things to resolve this issue and its observations, but still we are not successful.
In Zynq 7000, after boot, Our application is completing successfully, but when we try to rerun the application we are observing hang. Sometime we are observing hang at 2nd run, sometime after multiple re-runs we are observing the hang. We suspect that Interrupt is Level triggered which is causing the hang due to more interrupt occurrence. Because for single frame, we are observing many interrupt happening (approx 60 interrupts per frame) in cat /proc/interrupts. We also tried to handle the interrupt in driver code, but hang is still there.
So, we tried changing the interrupt type from LEVEL_HIGH to RISING_EDGE. For this we changed the Interrupt type of framebuffer in DTB and we manullay changed the interrupt type of ZYNQ (for interrupt 61 which is interrupt number for framebuffer) by writing the values in Interrupt configuration registers. But are getting error saying interrupt mismatch, while probing the framebuffer driver. Below is the error, we are getting.
irq: no irq domain found for /amba_pl/interrupt-controller@41800000 !
xilinx-frmbuf 43c00000.v_frmbuf_wr: unable to request IRQ 0
In the vivado design, the Inerrupt type is fixed as LEVEL_HIGH which is auot-generated. We are not able to change this value to RISING_EDGE.
And as a experiment, we have also tried our application in ZCU106 board, here we are not observing any hang issues, even though interrupt type is LEVEL_HIGH.Also in cat /proc/interrupts we observed that interrupt is happening approx 7 times per frame.
I have attached the vivado design interrupt settings in framebuffer and ps, and DTB changes. Please look into it.
Thanks and Regards,
09-21-2020 02:48 AM
I am not sure what you want me to take a look at. I guess you have done the analysis. I am not exactly sure how I can help you further.
The only think I am thinking about is if you use an AXI interrupt controller instead of the interrupt input of the Zynq. This might change slightly the behaviour and avoid the hang
09-21-2020 06:01 AM
Actually, we need to convert the interrupt type from LEVEL_HIGH to RISE_EDGE. We have also tried by adding the interrupt controller between the frame buffer and zynq. To convert the frame buffer interrupt from level to edge.
In this case we configured axi interrupt controller as edge.But, we are not able to make interrupt of zynq from level high to edge.
So because of this we are seeing the axi interrupt controller and frame buffer driver probing failure.
Could you please advice is there anything we missed? or anyother solution to convert the interrupt from Level_HIGH to RISE_EDGE?from
09-21-2020 06:54 AM
I have a way to set the property for the Zynq IP however I am not sure what will be the impact on the rest of the flow.
However keep in mind the property of the interrupt port for the Video frame buffer is set to LEVEL_HIGH. So first, if you connect the Video frame buffer directly to the input of the zynq, the setting will revet back to LEVEL_HIGH.
Then, as this is the setting for the Video frame buffer, I am not sure if this will work