看板 LinuxDev 關於我們 聯絡資訊
各位版友好 描述一下我的問題 我在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
dces4212: 你說的「手動測試會收到」可以再說詳細點嗎?沒註冊irq 11/20 22:58
dces4212: 也收得到? 11/20 22:58
howard6066: 就是在/sys/class 把gpio開起來 設成input 11/20 23:22
howard6066: Dev A發中斷 就會變成pull low狀態這樣 11/20 23:24
leolarrel: gpio driver 有在dts 中宣告 #interrupt-controller 嗎 11/21 09:37
leolarrel: 你可能要先好好研究kernel的irq domain,gpio subsystem 11/21 09:38
howard6066: CPU intel的 沒有dts, call intel gpio driver 11/21 10:55
leolarrel: 那只能往ACPI & 你說的那個intel gpio 的code , 對照 11/21 11:31
leolarrel: kernel 的irq doman 的觀念下去debug.我手上沒code沒得 11/21 11:31
leolarrel: debug 11/21 11:32
leolarrel: 另外,手邊沒電路圖不知道你的設計,也不知道你的intel 11/21 11:34
leolarrel: cpu 是哪一顆.一般消費型intel cpu 有自己的中斷控制硬 11/21 11:35
leolarrel: 體,gpio 我猜那個gpio是不是要接到cpu 的硬體中斷控制 11/21 11:35
leolarrel: 器那邊? 11/21 11:36
howard6066: 這位大大謝謝 好不想debug driver… 11/21 12:20
howard6066: Cpu是atom c3538, cpu 同一根gpio pin去接其他硬體 11/21 12:23
howard6066: call pinctrl-intel.c, 奇怪的是我irq都長出來了 但 11/21 12:25
howard6066: 沒收到中斷 中間init過程 也沒有error 11/21 12:25
leolarrel: 查了這個cpu , 他應該沒錯也是走APIC 概念的中斷控制器 11/22 09:39
leolarrel: 那麼你就要去確定這根GPIO 是否可以設定成"中斷觸發"模 11/22 09:40
leolarrel: 式,或這跟GPIO 是否有納入APIC 控制器的管轄,因如果連 11/22 09:41
leolarrel: APIC 都無法知道某跟硬體pin有發出中斷的話,你軟體再怎 11/22 09:41
leolarrel: 麼神通都沒用. 11/22 09:42
howard6066: 更新一下 問題解了 bios那邊要設定gpio irq 11/22 12:17
howard6066: 不過bios不是我負責的 細節不太清楚 11/22 12:18
howard6066: 之前都是用arm base的平台 我忘記了uboot dev tree要 11/22 12:19
howard6066: 先設定gpio irq相關嗎? 不然driver掛起來 會沒中斷 11/22 12:21
leolarrel: uboot 不用,進 kernel 用dts 控管及可 11/22 14:33
howard6066: 我看之前用的Nxp ls1046a 在uboot dts有GIC IRQ, gpi 11/22 19:44
howard6066: Gpio irq相關定義 11/22 19:44
howard6066: 這個是用在uboot而已嗎 跟kernel分開來看? 11/22 19:46
howard6066: 應該是不會影響到driver? 再次感謝大大 11/22 19:46
leolarrel: 這個是用在uboot而已嗎 跟kernel分開來看? <-是的 11/23 12:30