[答疑]-中断流程举例:在TEE侧时产生了FIQ,回到REE后为啥又产生了IRQ
快速鏈接:
.
👉👉👉 個人博客筆記導讀目錄(全部) 👈👈👈
在中斷流程舉例的章節中,有小伙伴仔細讀了該篇文章,并產生一些列問題。其中一個問題,一下子把我問到了:“在TEE側時產生了FIQ,回到REE后為啥又產生了IRQ?”
我們是知道,流程肯定是這么滴的,但具體的硬件原理呢?
在深入研讀GICV3文檔后,終于找到了答案。
首先我們了解下中斷優先級,在CPU interfaces (ICC_*_ELn)寄存器的描述中:
? Provide general control and configuration to enable interrupt handling
? Acknowledge an interrupt
? Perform a priority drop and deactivation of interrupts
? Set an interrupt priority mask for the PE
? Define the preemption policy for the PE
? Determine the highest priority pending interrupt for the PE
也就是cpu interface掌管著中斷優先級和將IRQ/FIQ發送給ARM Core.
我們以Level sensitive interrupts的中斷為例,先不考慮active and pending的情況:CPU interface發送給Core后,中斷狀態變為pending,當Core acknowledge中斷后(PE跳轉到中斷向量表), 中斷狀態變為active,當中斷退出后,Cpu interface會再次將優先級最高的中斷發送給Core,Core處理下一個中斷。
我們再看下中斷的退出流程( End of interrupt), 中斷的退出有兩種方式:
? Priority drop 將中斷優先級降到中斷產生之前的值
? Deactivation 將中斷從active變成inactive – ( 多數情況下,使用這個場景)
重點來了,在中斷退出的時候,軟件中一般會有Priority drop和Deactivation,既要么將中斷優先級降低,要么將中斷變為inactive,那么中斷退出之后,cpu interface感知到的優先級最高的中斷,就可能不會是此中斷了,一切運行正常,符合業務…
那么我們再看下上述的中斷流程舉例,在TEE中,cpu interface發了一個FIQ給Core,跳轉到optee的FIQ向量表,在FIQ的處理流程中,軟件幾乎什么都沒干,沒有Priority drop和Deactivation, 那么當SMC切換到了EL3之后,又退回REE后,Cpu interface感知到上一個中斷處理完成,會再次發送下一個優先級最高的中斷,由于之前的中斷號的優先級沒變,此時基本上依然是最高的優先級。此時CPU interface會再次發送該中斷給Core,由于SCR.NS發生了變化,此時Cpu interface發送給Core的就變成了IRQ…
總結
以上是生活随笔為你收集整理的[答疑]-中断流程举例:在TEE侧时产生了FIQ,回到REE后为啥又产生了IRQ的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux kernel中的wait_f
- 下一篇: [gic]-ARM gicv3/gicv