cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Highlighted
Observer
Observer
463 Views
Registered: ‎06-25-2019

vdma interrupts

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.

 

0 Kudos
Reply
7 Replies
Highlighted
Moderator
Moderator
355 Views
Registered: ‎11-09-2015

Hi @savan_sanghavi 

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.


Florent
Product Application Engineer - Xilinx Technical Support EMEA
**~ Don't forget to reply, give kudos, and accept as solution.~**
0 Kudos
Reply
Highlighted
Moderator
Moderator
309 Views
Registered: ‎11-09-2015

HI @savan_sanghavi 

Do you have any update? Were you able to make progress?

Thanks


Florent
Product Application Engineer - Xilinx Technical Support EMEA
**~ Don't forget to reply, give kudos, and accept as solution.~**
0 Kudos
Reply
Highlighted
Contributor
Contributor
262 Views
Registered: ‎05-25-2018

Hi Florent,

 

   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. 

In Service,
Kamalesh Vikramasimhan
www.yantravision.com
Highlighted
Observer
Observer
227 Views
Registered: ‎06-25-2019

Hi Florent,

           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,

Savan Sanghavi

 

fb_design_zynq.png
DTB_changes.png
fb_design.png
fb_design_connection.png
Highlighted
Moderator
Moderator
191 Views
Registered: ‎11-09-2015

HI @savan_sanghavi 

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


Florent
Product Application Engineer - Xilinx Technical Support EMEA
**~ Don't forget to reply, give kudos, and accept as solution.~**
0 Kudos
Reply
Highlighted
Observer
Observer
176 Views
Registered: ‎06-25-2019

Hi Florentw,

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

 

0 Kudos
Reply
Highlighted
Moderator
Moderator
168 Views
Registered: ‎11-09-2015

Hi @savan_sanghavi 

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.

  1. Create a new port for the BD of type interrupt. Set it to EDGE
    intr.PNG

     

  2. Connect the new port to the Zynq and click validate to propagate the setting
    intr1.PNG

  3. Then the interrupt input of the Zynq will have the property set to edge
    intr2.PNG

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


Florent
Product Application Engineer - Xilinx Technical Support EMEA
**~ Don't forget to reply, give kudos, and accept as solution.~**
0 Kudos
Reply