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.

GPIO IRQ status

Other Parts Discussed in Thread: DM385, TSC2007

hello everyone

we have customized board, use DM385 CPU

I try to use GP3[17]  interrupt connect to TI touch panel controller IC TSC2007.

when interrupt occur, I want clean the irq flag but get oops.

--------------------------------------------------------------------------------------------------------------------------------------------------------

[ 44.430000] Unable to handle kernel paging request at virtual address 881af030
[ 44.430000] pgd = c0004000
[ 44.430000] [881af030] *pgd=00000000
[ 44.430000] Internal error: Oops: 805 [#1]
[ 44.430000] last sysfs file: /sys/devices/virtual/gpio/gpio118/value
[ 44.430000] Modules linked in: tsc2007(+) ti81xxfb vpss osa_kermod syslink cmemk g_ether
[ 44.430000] CPU: 0 Not tainted (2.6.37 #49)
[ 44.430000] PC is at clear_ts_penirq+0x8/0x10
[ 44.430000] LR is at tsc2007_irq+0x28/0x2c [tsc2007]
[ 44.430000] pc : [<c029cd4c>] lr : [<bf919029>] psr: 000001b3
[ 44.430000] sp : c0583f00 ip : 00000008 fp : fa1ae02c
[ 44.430000] r10: 0000003e r9 : 00000100 r8 : 00000011
[ 44.430000] r7 : 00000111 r6 : 00000000 r5 : 00000000 r4 : c2af0800
[ 44.430000] r3 : 881af030 r2 : 00000001 r1 : c2af0834 r0 : 00000001
[ 44.430000] Flags: nzcv IRQs off FIQs on Mode SVC_32 ISA Thumb Segment kernel
[ 44.430000] Control: 50c5387d Table: 82ad0019 DAC: 00000017
[ 44.430000] Process swapper (pid: 0, stack limit = 0xc05822e8)
[ 44.430000] Stack: (0xc0583f00 to 0xc0584000)
[ 44.430000] 3f00: c2975200 c02c327b 00020101 c05a369c 00000111 c05e0118 c2975200 c02c44b1
[ 44.430000] 3f20: c02c4415 c3c1c5b0 00000001 00000001 c059f160 c029dd61 0000003e 00000111
[ 44.430000] 3f40: 00000054 0000003e 00000000 c05bbe48 c0586024 80000000 413fc082 0000001f
[ 44.430000] 3f60: 00000000 c028b03f 00000033 ffffffff fa200000 c028e971 fe500000 fe600000
[ 44.430000] 3f80: 00969c40 c05bc170 00000814 c058602c c05bbe48 c0586024 80000000 413fc082
[ 44.430000] 3fa0: 0000001f 00000000 00000000 c0583fc0 c0299311 c0299318 00000033 ffffffff
[ 44.430000] 3fc0: c0582000 c028ff05 c05e0174 c0287920 c0692500 c000888f c00084e9 00000f3e
[ 44.430000] 3fe0: 80000100 c0287920 50c53c7d c05bbf34 c028791c 8000804f 00000000 00000000
[ 44.430000] [<c029cd4c>] (clear_ts_penirq+0x8/0x10) from [<bf919029>] (tsc2007_irq+0x28/0x2c [tsc2007])
[ 44.430000] [<bf919029>] (tsc2007_irq+0x28/0x2c [tsc2007]) from [<c02c327b>] (handle_IRQ_event+0x13/0x80)
[ 44.430000] [<c02c327b>] (handle_IRQ_event+0x13/0x80) from [<c02c44b1>] (handle_edge_irq+0x9d/0xc8)
[ 44.430000] [<c02c44b1>] (handle_edge_irq+0x9d/0xc8) from [<c029dd61>] (gpio_irq_handler+0xc9/0xe4)
[ 44.430000] [<c029dd61>] (gpio_irq_handler+0xc9/0xe4) from [<c028b03f>] (asm_do_IRQ+0x3f/0x5c)
[ 44.430000] [<c028b03f>] (asm_do_IRQ+0x3f/0x5c) from [<c028e971>] (__irq_svc+0x31/0xa0)
[ 44.430000] Exception stack(0xc0583f78 to 0xc0583fc0) [ 44.430000] 3f60: fe500000 fe600000
[ 44.430000] 3f80: 00969c40 c05bc170 00000814 c058602c c05bbe48 c0586024 80000000 413fc082
[ 44.430000] 3fa0: 0000001f 00000000 00000000 c0583fc0 c0299311 c0299318 00000033 ffffffff
[ 44.430000] [<c028e971>] (__irq_svc+0x31/0xa0) from [<c0299318>] (ti81xx_idle+0x44/0x58)
[ 44.430000] [<c0299318>] (ti81xx_idle+0x44/0x58) from [<c028ff05>] (cpu_idle+0x29/0x58)
[ 44.430000] [<c028ff05>] (cpu_idle+0x29/0x58) from [<c000888f>] (start_kernel+0x1af/0x1fc)
[ 44.430000] [<c000888f>] (start_kernel+0x1af/0x1fc) from [<8000804f>] (0x8000804f)
[ 44.430000] Code: 4b02 2201 f1a3 4340 (601a) [ 44.730000] ---[ end trace e8d405d0978e22e7 ]---
[ 44.730000] Kernel panic - not syncing: Fatal exception in interrupt
[ 44.740000] [<c0292d5d>] (unwind_backtrace+0x1/0x8c) from [<c045ca45>] (panic+0x35/0xfc)
[ 44.750000] [<c045ca45>] (panic+0x35/0xfc) from [<c0291b59>] (die+0x1c5/0x20c)
[ 44.760000] [<c0291b59>] (die+0x1c5/0x20c) from [<c045c943>] (__do_kernel_fault.part.4+0x37/0x54)
[ 44.770000] [<c045c943>] (__do_kernel_fault.part.4+0x37/0x54) from [<c0293a97>] (do_page_fault+0x12b/0x13c)
[ 44.780000] [<c0293a97>] (do_page_fault+0x12b/0x13c) from [<c028b131>] (do_DataAbort+0x25/0x60)
[ 44.790000] [<c028b131>] (do_DataAbort+0x25/0x60) from [<c028e90b>] (__dabt_svc+0x4b/0x80)
[ 44.790000] Exception stack(0xc0583eb8 to 0xc0583f00)
[ 44.800000] 3ea0: 00000001 c2af0834
[ 44.810000] 3ec0: 00000001 881af030 c2af0800 00000000 00000000 00000111 00000011 00000100
[ 44.820000] 3ee0: 0000003e fa1ae02c 00000008 c0583f00 bf919029 c029cd4c 000001b3 ffffffff
[ 44.830000] [<c028e90b>] (__dabt_svc+0x4b/0x80) from [<c029cd4c>] (clear_ts_penirq+0x8/0x10)
[ 44.830000] [<c029cd4c>] (clear_ts_penirq+0x8/0x10) from [<bf919029>] (tsc2007_irq+0x28/0x2c [tsc2007])
[ 44.840000] [<bf919029>] (tsc2007_irq+0x28/0x2c [tsc2007]) from [<c02c327b>] (handle_IRQ_event+0x13/0x80)
[ 44.850000] [<c02c327b>] (handle_IRQ_event+0x13/0x80) from [<c02c44b1>] (handle_edge_irq+0x9d/0xc8)
[ 44.860000] [<c02c44b1>] (handle_edge_irq+0x9d/0xc8) from [<c029dd61>] (gpio_irq_handler+0xc9/0xe4)
[ 44.870000] [<c029dd61>] (gpio_irq_handler+0xc9/0xe4) from [<c028b03f>] (asm_do_IRQ+0x3f/0x5c)
[ 44.880000] [<c028b03f>] (asm_do_IRQ+0x3f/0x5c) from [<c028e971>] (__irq_svc+0x31/0xa0)
[ 44.890000] Exception stack(0xc0583f78 to 0xc0583fc0)
[ 44.900000] 3f60: fe500000 fe600000
[ 44.900000] 3f80: 00969c40 c05bc170 00000814 c058602c c05bbe48 c0586024 80000000 413fc082
[ 44.910000] 3fa0: 0000001f 00000000 00000000 c0583fc0 c0299311 c0299318 00000033 ffffffff
[ 44.920000] [<c028e971>] (__irq_svc+0x31/0xa0) from [<c0299318>] (ti81xx_idle+0x44/0x58)
[ 44.930000] [<c0299318>] (ti81xx_idle+0x44/0x58) from [<c028ff05>] (cpu_idle+0x29/0x58)
[ 44.940000] [<c028ff05>] (cpu_idle+0x29/0x58) from [<c000888f>] (start_kernel+0x1af/0x1fc)
[ 44.950000] [<c000888f>] (start_kernel+0x1af/0x1fc) from [<8000804f>] (0x8000804f)

------------------------------------------------------------------------------------------------------------------------------------------------------

access address:

GPIO3_REGISTER_BASE (0x481AE000)  + INTERCONNECT_OFSET (0x1000) + IRQSTATUS_0_OFSET (0x2c)

__raw_writel(1, phys_to_virt(0x481AF02C));  // Write a 1 to clear to 0 

1. I not sure set which one register: GPIO_IRQSTATUS_0_OFSET (0x2c) or GPIO_IRQSTATUS_1_OFSET (0x30)

2. the GP3[17] address 0x481AF0xx is correct ?

please expert help.

  • Hi Vic Lin,

    vic lin said:

    when interrupt occur, I want clean the irq flag but get oops.

    --------------------------------------------------------------------------------------------------------------------------------------------------------

    [ 44.430000] Unable to handle kernel paging request at virtual address 881af030
    [ 44.430000] pgd = c0004000
    [ 44.430000] [881af030] *pgd=00000000

    This is usually indication that yo are trying to access the physical address from the linux kernel. While in linux kernel we should always access the virtual address.

    vic lin said:
    __raw_writel(1, phys_to_virt(0x481AF02C));

    I suspect that this line is causing the problem. Can you check if this phys_to_virt() function is really working fine and provide you the virtual address.

    vic lin said:

    access address:

    GPIO3_REGISTER_BASE (0x481AE000)  + INTERCONNECT_OFSET (0x1000) + IRQSTATUS_0_OFSET (0x2c)

    In DM814x we have:

    GPIO3 Peripheral registers base address is 0x481AE02C

    GPIO_IRQSTATUS_0 offset is 0x2C

    Thus the full register address is 0x481AE02C

    I suspect should be same for DM385/DM813x device.

    Regards,
    Pavel

  • Vic Lin,

    vic lin said:
    1. I not sure set which one register: GPIO_IRQSTATUS_0_OFSET (0x2c) or GPIO_IRQSTATUS_1_OFSET (0x30)

    You have GPIO3 interrupt 0 (GPIO3INT0) mapped at #62 at the Cortex-A8 ARM Interrupt Controller. For GPIO3INT0 is used IRQSTATUS_0.

    You also have GPIO interrupt 1 (GPIO3INT1) mapped at #63 at the Cortex-A8 ARM Interrupt Controller. For GPIO3INT1 is used IRQSTATUS_1.

    Check the TRM, chapter GPIO and the below e2e thread:

    http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/717/t/268531.aspx

    vic lin said:
    2. the GP3[17] address 0x481AF0xx is correct ?

    No I do not think so. From where you get this INTERCONNECT_OFSET (0x1000) ?

    BR
    Pavel