Forum Discussion

Altera_Forum's avatar
Altera_Forum
Icon for Honored Contributor rankHonored Contributor
8 years ago

Interrupt handling problem using linux with DE1_SoC cyclone V

Hi

We are using cyclon V on DE1_SoC board to write a interrupt handling module. We used the demo from Cornell's web site (http://people.ece.cornell.edu/land/courses/ece5760/de1_soc/hps_peripherials/index.html), where they provide a SD card image named DE1-SoC-UP-Linux.img. The demo works well but we met problems as follows:

(1)We compiled this demo with Altera's latest linux kernel, and the resulted interrupt module can be inserted into linux kernel, but it can NOT receive any interrupt. The result is shown as:


    root@socfpga:~/interrupt# cat /proc/interrupts 
               CPU0       CPU1       
     16:          0          0     GIC-0 199 Level     timer
     17:       5221       5137     GIC-0  29 Level     twd
     22:          0          0     GIC-0 136 Level     ffe01000.dma
     23:          0          0     GIC-0 207 Level     ff706000.fpgamgr
     24:        208          0     GIC-0 194 Level     serial
     32:          0          0     GIC-0 190 Level     ffc04000.i2c
     33:          0          0     GIC-0 191 Level     ffc05000.i2c
     36:       5777          0     GIC-0 171 Level     dw-mci
     37:         45          0     GIC-0 160 Level     ffb40000.usb, ffb40000.usb, dwc2_hsotg:usb1
     38:         11          0     GIC-0 152 Level     eth0
     73:          0          0  gpio-dwapb   3 Edge      pb_handler
    IPI0:         0          0   CPU wakeup interrupts
    IPI1:         0          0   Timer broadcast interrupts
    IPI2:        572       1145  Rescheduling interrupts
    IPI3:          2         1   Function call interrupts
    IPI4:          0         0   CPU stop interrupts
    IPI5:          0         0   IRQ work interrupts
    IPI6:          0         0   completion interrupts
    Err:           0

And with the demo SD card, the result is


               CPU0       CPU1       
     16:          0          0     GIC-0 199 Level     timer
     17:      53664      52132     GIC-0  29 Level     twd
     22:          0          0     GIC-0 136 Level     ffe01000.dma
     23:          0          0     GIC-0 207 Level     ff706000.fpgamgr
     24:       1022          0     GIC-0 194 Level     serial
     32:          0          0     GIC-0 190 Level     ffc04000.i2c
     33:          0          0     GIC-0 191 Level     ffc05000.i2c
     36:      25382          0     GIC-0 171 Level     dw-mci
     37:         45          0     GIC-0 160 Level     ffb40000.usb, ffb40000.usb, dwc2_hsotg:usb1
     38:        302          0     GIC-0 152 Level     eth0
     73:          0          0  gpio-dwapb   3 Edge      pb_handler
    IPI0:          0          0  CPU wakeup interrupts
    IPI1:          0          0  Timer broadcast interrupts
    IPI2:        395      27078  Rescheduling interrupts
    IPI3:          1          3  Function call interrupts
    IPI4:          0          0  CPU stop interrupts
    IPI5:          0          0  IRQ work interrupts
    IPI6:          0          0  completion interrupts

It can be found that the interrupt controller is different, and a controller named "gpio-dwapb" is used in my project.

Is it the reason it not work? And how to fix this problem? How to assign the correct interrupt controller, for example the GIC.

(2)I have repalced the .dtb and .rbf files in the demo SD card with mine, it still works well.

The kernel file in this demo SD card is uImage, I transform my zImage to uImage with command

mkimage -A arm -O Linux -T kernel -C none -a 0x00008000 -e 0x00008000 -n "Linux kernel Image by embedclub" -d zImage uImage

After replacing with my uImage, the system can' not boot up, why?

Thanks.

1 Reply

  • SimoneBo's avatar
    SimoneBo
    Icon for New Contributor rankNew Contributor

    Hello,

    I'm having the same issue with 4.14 kernel.

    I'm using an IP block on FPGA registered on interrupt n°73 and a Userspace driver as interface.

    If I type "cat /proc/interrupts" it returns

    .. ... ... ..... .... .....

    73: xxx 0 gpio-dwapb 3 Edge "my_uio_driver "

    .. ... ... ..... .... .....

    with xxx different from 0, but blocked.

    I also try to make an IP which rise an interrupt (on 73) periodically but the number of interrupt is still blocked to initial value different from 0.

    Have you find a solution?

    Thanks in advance,

    Simone