[問題] Multiple interrupt handling 問題

看板LinuxDev作者 (秘密)時間3月前 (2023/11/20 21:56), 編輯推噓1(1032)
留言33則, 3人參與, 3月前最新討論串1/1
各位版友好 描述一下我的問題 我在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://www.ptt.cc/bbs/LinuxDev/M.1700488569.A.C60.html

11/20 22:58, 3月前 , 1F
你說的「手動測試會收到」可以再說詳細點嗎?沒註冊irq
11/20 22:58, 1F

11/20 22:58, 3月前 , 2F
也收得到?
11/20 22:58, 2F

11/20 23:22, 3月前 , 3F
就是在/sys/class 把gpio開起來 設成input
11/20 23:22, 3F

11/20 23:24, 3月前 , 4F
Dev A發中斷 就會變成pull low狀態這樣
11/20 23:24, 4F

11/21 09:37, 3月前 , 5F
gpio driver 有在dts 中宣告 #interrupt-controller 嗎
11/21 09:37, 5F

11/21 09:38, 3月前 , 6F
你可能要先好好研究kernel的irq domain,gpio subsystem
11/21 09:38, 6F

11/21 10:55, 3月前 , 7F
CPU intel的 沒有dts, call intel gpio driver
11/21 10:55, 7F

11/21 11:31, 3月前 , 8F
那只能往ACPI & 你說的那個intel gpio 的code , 對照
11/21 11:31, 8F

11/21 11:31, 3月前 , 9F
kernel 的irq doman 的觀念下去debug.我手上沒code沒得
11/21 11:31, 9F

11/21 11:32, 3月前 , 10F
debug
11/21 11:32, 10F

11/21 11:34, 3月前 , 11F
另外,手邊沒電路圖不知道你的設計,也不知道你的intel
11/21 11:34, 11F

11/21 11:35, 3月前 , 12F
cpu 是哪一顆.一般消費型intel cpu 有自己的中斷控制硬
11/21 11:35, 12F

11/21 11:35, 3月前 , 13F
體,gpio 我猜那個gpio是不是要接到cpu 的硬體中斷控制
11/21 11:35, 13F

11/21 11:36, 3月前 , 14F
器那邊?
11/21 11:36, 14F

11/21 12:20, 3月前 , 15F
這位大大謝謝 好不想debug driver…
11/21 12:20, 15F

11/21 12:23, 3月前 , 16F
Cpu是atom c3538, cpu 同一根gpio pin去接其他硬體
11/21 12:23, 16F

11/21 12:25, 3月前 , 17F
call pinctrl-intel.c, 奇怪的是我irq都長出來了 但
11/21 12:25, 17F

11/21 12:25, 3月前 , 18F
沒收到中斷 中間init過程 也沒有error
11/21 12:25, 18F

11/22 09:39, 3月前 , 19F
查了這個cpu , 他應該沒錯也是走APIC 概念的中斷控制器
11/22 09:39, 19F

11/22 09:40, 3月前 , 20F
那麼你就要去確定這根GPIO 是否可以設定成"中斷觸發"模
11/22 09:40, 20F

11/22 09:41, 3月前 , 21F
式,或這跟GPIO 是否有納入APIC 控制器的管轄,因如果連
11/22 09:41, 21F

11/22 09:41, 3月前 , 22F
APIC 都無法知道某跟硬體pin有發出中斷的話,你軟體再怎
11/22 09:41, 22F

11/22 09:42, 3月前 , 23F
麼神通都沒用.
11/22 09:42, 23F

11/22 12:17, 3月前 , 24F
更新一下 問題解了 bios那邊要設定gpio irq
11/22 12:17, 24F

11/22 12:18, 3月前 , 25F
不過bios不是我負責的 細節不太清楚
11/22 12:18, 25F

11/22 12:19, 3月前 , 26F
之前都是用arm base的平台 我忘記了uboot dev tree要
11/22 12:19, 26F

11/22 12:21, 3月前 , 27F
先設定gpio irq相關嗎? 不然driver掛起來 會沒中斷
11/22 12:21, 27F

11/22 14:33, 3月前 , 28F
uboot 不用,進 kernel 用dts 控管及可
11/22 14:33, 28F

11/22 19:44, 3月前 , 29F
我看之前用的Nxp ls1046a 在uboot dts有GIC IRQ, gpi
11/22 19:44, 29F

11/22 19:44, 3月前 , 30F
Gpio irq相關定義
11/22 19:44, 30F

11/22 19:46, 3月前 , 31F
這個是用在uboot而已嗎 跟kernel分開來看?
11/22 19:46, 31F

11/22 19:46, 3月前 , 32F
應該是不會影響到driver? 再次感謝大大
11/22 19:46, 32F

11/23 12:30, 3月前 , 33F
這個是用在uboot而已嗎 跟kernel分開來看? <-是的
11/23 12:30, 33F
文章代碼(AID): #1bMsLvnW (LinuxDev)
文章代碼(AID): #1bMsLvnW (LinuxDev)