This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

xdma event interrupts

Other Parts Discussed in Thread: TPS65217

Hi,


I'm using BBB connected to a FPGA with GPMC interface. And using two xdma events for send and receive data between BBB to FPGA.
And also using EDMA for transferring data by syncing with xdma_events.

Running Linux Kernel : uname -a
Linux arm 3.8.13-bone53 #2 SMP Tue Aug 26 09:34:45 EDT 2014 armv7l armv7l armv7l GNU/Linux


Device overlay settings for XDMA events interrupts :
&edma {
    ti,edma-xbar-event-map = <29 21>,    /* xdma_event_intr1 -> 21 */
                 <30 20>;    /* xdma_event_intr2 -> 20 */


At the very first time of transferring(after a reboot), I issued small number of transfers. I verified the amount of pulses at xdma_event_int2 signal has the same amount. And I am getting a Transfer callback with DMA_COMPLETE. And immediately  a tons of kernel messages coming as follows
    irq 14: nobody cared (try booting with the "irqpoll" option)
    .....................
    [<c00b995d>] (sys_read+0x29/0x48) from [<c000c601>] (ret_fast_syscall+0x1/0x46)
    handlers:
    [<c001755d>] dma_ccerr_handler
    Disabling IRQ #14


DMA register values : (dma_channel: 14)
        dma param: opt  = 0x80314000
        dma param: src  = 0x9E560000
        dma param: dst  = 0x01000020
        dma param: acnt = 12
        dma param: bcnt = 10
        dma param: ccnt = 100
        dma param: brld = 0
        dma param: link (SMD)= 0xffff
        lc_transfer_callback ch_status: 1 chan: 20

After the first time error happened, later transfers are happening with out any problem with DMA_COMPLETE.

And the content of the /proc/interrupts as follows

           CPU0
  7:          0      INTC  tps65217
 12:       2657      INTC  edma
 14:     100000      INTC  edma_error
 18:      19226      INTC  musb-hdrc.0.auto
 19:          1      INTC  musb-hdrc.1.auto
 30:         96      INTC  4819c000.i2c
 40:          0      INTC  4a100000.ethernet
 41:          0      INTC  4a100000.ethernet
 42:          0      INTC  4a100000.ethernet
 43:          0      INTC  4a100000.ethernet
 64:       8395      INTC  mmc0
 67:      12442      INTC  gp_timer
 70:       1730      INTC  44e0b000.i2c
 72:        813      INTC  OMAP UART0
 75:          0      INTC  rtc0
 76:          1      INTC  rtc0
109:          0      INTC  53100000.sham
134:          0      GPIO  mmc0
 
    How to avoid this problem?

Thanks
    Vishwa Shanika

  • Hi,

    This forum supports only the TI distributed Linux SDK. Linux v3.8 is a community project and is supported at: http://beagleboard.org/Community/Forums Please ask there.

  • Hi Biser,

    I put the my question in beagleboard.org/.../Forums. But still no reply. And I think I could found the root cause for the issue. I need to make it verified it.

    I simply enabled the dev_dbg kernel messages in the /KERNEL/arch/arm/common/edma.c
    Then after running the driver, I could find more details regarding to the error.

    [ 223.708967] edma 49000000.edma: dma_ccerr_handler
    [ 223.709032] edma 49000000.edma: EMR0 00100000
    [ 223.709079] lc_transfer_callback ch_status: 2 chan: 20 sem.count: 0

    I am using DMA channel number 20 and the 20th bit of EMR0 register also set after the error happened. Reference Manual says EMR0 register bit indicates "event missing" for the particular channel. So it seems the kernel it self can't handle the speed of "xdma_event" interrupts. Am I correct?

    Thanks,

    Best Regards,
    Vishwa
  • Hi Vishwa,

    I suppose you havent changed the edma node in am33xx.dtsi:
    edma: edma@49000000 {
                   compatible = "ti,edma3";
                   ti,hwmods = "tpcc", "tptc0", "tptc1", "tptc2";
                   reg = <0x49000000 0x10000>,
                            <0x44e10f90 0x40>;
                   interrupts = <12 13 14>;
                   #dma-cells = <1>;
    };
    Right?

    Also can you post your GPMC device tree node?

    Best Regards,
    Yordan