作者howard6066 (秘密)
看板LinuxDev
标题[问题] Multiple interrupt handling 问题
时间Mon Nov 20 21:56:07 2023
各位版友好
描述一下我的问题
我在driver透过CPU GPIO注册一个IRQ, 当有中断来 会在handling处理
架构是CPU GPIO pin接到CPLD在接到Dev A,B,C的中断
流程是 当CPU收到中断後 再透过CPLD I2C Register去看是哪个Device发的中断
现在我只要收Dev A的中断 Dev B,C设定不发中断 有先Mask掉B,C的中断
但是很奇怪 我在IRQ都没看到有中断发生
手动测试GPIO都会收到中断 但挂上driver就收不到了
我理解为只要CPU收到中断, 应该会就近到handing
然後我在handing判断CPLD哪个Device就好
会跟Multiple device 中断有关系吗? single device 就会收到?
我code大概这样写
gpio_request(gpio_pin)
gpio_to_irq(gpio_pin)
request_irq(IRQF_TRIGGER_FALLING | IRQF_SHARED) or
request_threaded_irq(IRQF_TRIGGER_FALLING | IRQF_SHARED)
系统架构 如下
GPIO_Pin I2C
CPU ---- CPLD ---- Dev A
---- Dev B
---- Dev C
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 211.76.66.208 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/LinuxDev/M.1700488569.A.C60.html
1F:推 dces4212: 你说的「手动测试会收到」可以再说详细点吗?没注册irq 11/20 22:58
2F:→ dces4212: 也收得到? 11/20 22:58
3F:→ howard6066: 就是在/sys/class 把gpio开起来 设成input 11/20 23:22
4F:→ howard6066: Dev A发中断 就会变成pull low状态这样 11/20 23:24
5F:→ leolarrel: gpio driver 有在dts 中宣告 #interrupt-controller 吗 11/21 09:37
6F:→ leolarrel: 你可能要先好好研究kernel的irq domain,gpio subsystem 11/21 09:38
7F:→ howard6066: CPU intel的 没有dts, call intel gpio driver 11/21 10:55
8F:→ leolarrel: 那只能往ACPI & 你说的那个intel gpio 的code , 对照 11/21 11:31
9F:→ leolarrel: kernel 的irq doman 的观念下去debug.我手上没code没得 11/21 11:31
10F:→ leolarrel: debug 11/21 11:32
11F:→ leolarrel: 另外,手边没电路图不知道你的设计,也不知道你的intel 11/21 11:34
12F:→ leolarrel: cpu 是哪一颗.一般消费型intel cpu 有自己的中断控制硬 11/21 11:35
13F:→ leolarrel: 体,gpio 我猜那个gpio是不是要接到cpu 的硬体中断控制 11/21 11:35
14F:→ leolarrel: 器那边? 11/21 11:36
15F:→ howard6066: 这位大大谢谢 好不想debug driver… 11/21 12:20
16F:→ howard6066: Cpu是atom c3538, cpu 同一根gpio pin去接其他硬体 11/21 12:23
17F:→ howard6066: call pinctrl-intel.c, 奇怪的是我irq都长出来了 但 11/21 12:25
18F:→ howard6066: 没收到中断 中间init过程 也没有error 11/21 12:25
19F:→ leolarrel: 查了这个cpu , 他应该没错也是走APIC 概念的中断控制器 11/22 09:39
20F:→ leolarrel: 那麽你就要去确定这根GPIO 是否可以设定成"中断触发"模 11/22 09:40
21F:→ leolarrel: 式,或这跟GPIO 是否有纳入APIC 控制器的管辖,因如果连 11/22 09:41
22F:→ leolarrel: APIC 都无法知道某跟硬体pin有发出中断的话,你软体再怎 11/22 09:41
23F:→ leolarrel: 麽神通都没用. 11/22 09:42
24F:→ howard6066: 更新一下 问题解了 bios那边要设定gpio irq 11/22 12:17
25F:→ howard6066: 不过bios不是我负责的 细节不太清楚 11/22 12:18
26F:→ howard6066: 之前都是用arm base的平台 我忘记了uboot dev tree要 11/22 12:19
27F:→ howard6066: 先设定gpio irq相关吗? 不然driver挂起来 会没中断 11/22 12:21
28F:→ leolarrel: uboot 不用,进 kernel 用dts 控管及可 11/22 14:33
29F:→ howard6066: 我看之前用的Nxp ls1046a 在uboot dts有GIC IRQ, gpi 11/22 19:44
30F:→ howard6066: Gpio irq相关定义 11/22 19:44
31F:→ howard6066: 这个是用在uboot而已吗 跟kernel分开来看? 11/22 19:46
32F:→ howard6066: 应该是不会影响到driver? 再次感谢大大 11/22 19:46
33F:→ leolarrel: 这个是用在uboot而已吗 跟kernel分开来看? <-是的 11/23 12:30