GIC600中斷未寫到裝置樹中斷註冊失敗問題

2021-10-18 04:03:42 字數 1106 閱讀 1524

除錯

檢視核心**發現

irqdomain.c --if(

irq_domain_is_hierarchy

(domain)

)else

gicv3走的是上面流程,通過irq_domain_alloc_irq去完成對映,目前還不知道判斷為irq_domain_is_hierarchy是什麼意思。除錯發現寫入裝置樹的中斷都是通過上面這個alloc函式完成虛中斷和硬體中斷的對映,跟以前用下面這個流程不一樣。

所以想直接調irq_domain_alloc_irq去做乙個對映但是發現這個函式是static型別,只能通過裝置樹相關介面完成對映,最後做法如下:

struct device_node *device_node =

null

;struct irq_fwspec fwspec;

struct of_phandle_args args;

pfisr =

(irq_handler_t) gic_isr;

device_node =

of_find_compatible_node

(null

,null

,"arm,gic-v3");

args.args_count =3;

args.args[0]

=0; args.args[1]

= hwirq;

//-32

args.args[2]

=1; args.np = device_node;

virq =

(&args)

;

ret =

request_irq

(virq, pfisr, irqf_shared| irqf_trigger_rising /*| irqf_trigger_high */

/*|0x80*/

,"gictest"

,&test);if

(ret)

這樣可以在沒有寫入裝置樹的情況下,完成中斷的對映和註冊,可以註冊成功

裝置樹使用 3 中斷

中斷說明符是乙個或多個資料單元 由 interrupt cells指定 用於指定裝置所連線的中斷輸入。大多數器件只有乙個中斷輸出,如下例所示,可以在器件上有多個中斷輸出。中斷說明符的含義完全取決於中斷控制器裝置的繫結。每個中斷控制器可以決定唯一定義中斷輸入所需的單元數。以下 為我們coyote s ...

Linux裝置樹 四 中斷

中斷一般包括中斷產生裝置和中斷處理裝置。中斷控制器負責處理中斷,每乙個中斷都有對應的中斷號及觸發條件。中斷產生裝置可能有多個中斷源,有時多個中斷源對應中斷控制器中的乙個中斷,這種情況中斷產生裝置的中斷源稱之為中斷控制器中對應中斷的子中斷。一般情況中斷產生裝置數量要多於中斷控制器,多個中斷產生裝置的中...

裝置樹中獲取中斷號

裝置樹中有一部分與中斷有關的節點描述 eint 看如下的 片斷 node of find compatible node null,null,mediatek,eint 獲取中斷對應的compatible的節點 of property read u32 array node,debounce int...