91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

armv8/armv9中斷系列詳解-中斷示例展示

Linux閱碼場 ? 來源:Linux閱碼場 ? 作者:Linux閱碼場 ? 2022-04-29 10:48 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、中斷示例展示(不含虛擬化部分)

環(huán)境配置:linux/optee雙系統(tǒng)環(huán)境下, linux系統(tǒng)的SCR.IRQ=0、SCR.FIQ=1, optee系統(tǒng)的SCR.IRQ=0、SCR.FIQ=0

說明:group1是非安全中斷、secure group1是安全中斷

1、當(dāng)cpu處于REE,來了一個(gè)非安全中斷

當(dāng)cpu處于normal側(cè)時(shí),來了一個(gè)非安全中斷,根據(jù)SCR.NS=1/中斷在group1組,cpu interface將會給cpu一個(gè)IRQ,(由于SCR.IRQ=0,IRQ將被routing到EL1),cpu跳轉(zhuǎn)至linux的irq中斷異常向量表, 處理完畢后再返回到normal(linux)側(cè).

2、當(dāng)cpu處于TEE,來了一個(gè)安全中斷

當(dāng)cpu處于secure側(cè)時(shí),來了一個(gè)安全中斷,根據(jù)SCR.NS=0/中斷在secure group1組,cpu interface將會給cpu一個(gè)IRQ,(由于SCR.IRQ=0,IRQ將被routing到EL1),cpu跳轉(zhuǎn)至optee的irq中斷異常向量表, 處理完畢后再返回到secure(optee)側(cè).

f22f1298-c750-11ec-bce3-dac502259ad0.png

3、當(dāng)cpu處于TEE,來了一個(gè)非安全中斷

當(dāng)cpu處于secure側(cè)時(shí),來了一個(gè)非安全中斷,根據(jù)SCR.NS=0/中斷在group1組,cpu interface將會給cpu一個(gè)FIQ,(由于SCR.FIQ=0,F(xiàn)IQ將被routing到EL1),跳轉(zhuǎn)至optee的fiq中斷異常向量表,再optee的fiq處理函數(shù)中,直接調(diào)用了smc跳轉(zhuǎn)到ATF, ATF再切換至normal EL1(linux), 此時(shí)SCR.NS的狀態(tài)發(fā)生變化,根據(jù)SCR.NS=1/中斷在group1組,cpu interface會再給cpu發(fā)送一個(gè)IRQ異常,cpu跳轉(zhuǎn)至linux的irq中斷異常向量表,處理完畢后,再依次返回到ATF---返回到optee

f24bdf40-c750-11ec-bce3-dac502259ad0.png

4、當(dāng)cpu處于REE,來了一個(gè)安全中斷

當(dāng)cpu處于normal側(cè)時(shí),來了一個(gè)安全中斷,根據(jù)SCR.NS=0/中斷在group1組,cpu interface將會給cpu一個(gè)FIQ,(由于SCR.FIQ=1,F(xiàn)IQ將被routing到EL3),在EL3(ATF)中,判斷該中斷是需要optee來處理的,會切換到optee。此時(shí)SCR.NS的狀態(tài)發(fā)生變化,根據(jù)SCR.NS=0/中斷在secure group1組,cpu interface會再給cpu發(fā)送一個(gè)IRQ異常,cpu跳轉(zhuǎn)至optee的irq中斷異常向量表, 處理完畢后再依次返回到ATF---返回到linux

f26ca284-c750-11ec-bce3-dac502259ad0.png

5、當(dāng)cpu處于ATF時(shí),來了一個(gè)安全中斷或非安全中斷(G1NS、G1S)

當(dāng)cpu處于EL3時(shí),來得任何target到EL3的中斷,都將被標(biāo)記位FIQ

f289c062-c750-11ec-bce3-dac502259ad0.png

當(dāng)cpu處于EL3時(shí),配置SCR.XXX(XXX=EA或IRQ或FIQ)為0的中斷不會被taken,配置SCR.XXX為1的中斷將會直接target到EL3。

f2a8c64c-c750-11ec-bce3-dac502259ad0.png

所以在 linux系統(tǒng)的SCR.IRQ=0、SCR.FIQ=1, optee系統(tǒng)的SCR.IRQ=0、SCR.FIQ=0的場景下,總結(jié)如下,當(dāng)cpu運(yùn)行在EL3時(shí):

  • SCR_EL3為optee的cpu context時(shí),來了一個(gè)G1S,中斷將不會被taken

  • SCR_EL3為optee的cpu context時(shí),來了一個(gè)G1NS,中斷將不會被taken

  • SCR_EL3為linux的cpu context時(shí),來了一個(gè)G1S,中斷將會直接target到EL3

  • SCR_EL3為linux的cpu context時(shí),來了一個(gè)G1NS,中斷將不會被taken

6、當(dāng)cpu處于EL3/EL2/EL1/EL0時(shí),來了一個(gè)ATF(group0)中斷(G0)

當(dāng)cpu處于EL3/EL2/EL1/EL0時(shí),來了一個(gè)G0中斷,中斷將被標(biāo)記位FIQ

f2c92b12-c750-11ec-bce3-dac502259ad0.png

在 linux系統(tǒng)的SCR.IRQ=0、SCR.FIQ=1, optee系統(tǒng)的SCR.IRQ=0、SCR.FIQ=0的場景下,總結(jié)如下:

  • 當(dāng)cpu正在Non-secure EL0/1/2運(yùn)行時(shí),來了G0中斷,中斷被標(biāo)記為FIQ,直接target到EL3

  • 當(dāng)cpu正在secure EL0/1/2運(yùn)行時(shí),來了G0中斷,中斷被標(biāo)記為FIQ,中斷target到了EL0/1/2,在該程序的fiq_offset會調(diào)用smc將cpu切回到EL3,到了EL3之后,中斷不會被taken, 會繼續(xù)返回到Non-secure EL0/1/2,然后cpu interface重新給core發(fā)送FIQ,接著又是直接target到EL3,EL3處理該中斷。

  • 當(dāng)cpu正在EL3時(shí),來了一個(gè)G0中斷,中斷會被標(biāo)記為FIQ,中斷target到EL3。

7、思考-中斷流程舉例:在TEE側(cè)時(shí)產(chǎn)生了FIQ,回到REE后為啥又產(chǎn)生了IRQ

在深入研讀GICV3文檔后,終于找到了答案。

首先我們了解下中斷優(yōu)先級,在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掌管著中斷優(yōu)先級和將IRQ/FIQ發(fā)送給ARM Core.

我們以Level sensitive interrupts的中斷為例,先不考慮active and pending的情況:CPU interface發(fā)送給Core后,中斷狀態(tài)變?yōu)閜ending,當(dāng)Core acknowledge中斷后(PE跳轉(zhuǎn)到中斷向量表), 中斷狀態(tài)變?yōu)閍ctive,當(dāng)中斷退出后,Cpu interface會再次將優(yōu)先級最高的中斷發(fā)送給Core,Core處理下一個(gè)中斷。

f2e2182a-c750-11ec-bce3-dac502259ad0.png

我們再看下中斷的退出流程( End of interrupt), 中斷的退出有兩種方式:? Priority drop 將中斷優(yōu)先級降到中斷產(chǎn)生之前的值? Deactivation 將中斷從active變成inactive -- ( 多數(shù)情況下,使用這個(gè)場景)

重點(diǎn)來了,在中斷退出的時(shí)候,軟件中一般會有Priority drop和Deactivation,既要么將中斷優(yōu)先級降低,要么將中斷變?yōu)閕nactive,那么中斷退出之后,cpu interface感知到的優(yōu)先級最高的中斷,就可能不會是此中斷了,一切運(yùn)行正常,符合業(yè)務(wù).....

那么我們再看下上述的中斷流程舉例,在TEE中,cpu interface發(fā)了一個(gè)FIQ給Core,跳轉(zhuǎn)到optee的FIQ向量表,在FIQ的處理流程中,軟件幾乎什么都沒干,沒有Priority drop和Deactivation, 那么當(dāng)SMC切換到了EL3之后,又退回REE后,Cpu interface感知到上一個(gè)中斷處理完成,會再次發(fā)送下一個(gè)優(yōu)先級最高的中斷,由于之前的中斷號的優(yōu)先級沒變,此時(shí)基本上依然是最高的優(yōu)先級。此時(shí)CPU interface會再次發(fā)送該中斷給Core,由于SCR.NS發(fā)生了變化,此時(shí)Cpu interface發(fā)送給Core的就變成了IRQ...

8、思考-G1NS G1S G0都有可能產(chǎn)生target到EL3的FIQ,如何區(qū)分?

其實(shí)在我們的linux系統(tǒng)的SCR.IRQ=0、SCR.FIQ=1, optee系統(tǒng)的SCR.IRQ=0、SCR.FIQ=0的場景下,不考慮aarch32的情況,有兩種情況會產(chǎn)生target到EL3的FIQ:

  • (1)cpu在EL0/1/2運(yùn)行時(shí),來了一個(gè)G0中斷,最終CPU將會進(jìn)入到EL3的向量表中的第三組向量表。

f30a3076-c750-11ec-bce3-dac502259ad0.png

  • (2)ccpu在EL3運(yùn)行時(shí),來了一個(gè)G0中斷,最終CPU將會進(jìn)入到EL3的向量表中的第二組向量表 不過很遺憾,ATF中的向量表中未實(shí)現(xiàn)第二組向量表。那么為什么不需要實(shí)現(xiàn)呢?在ATF/docs/firmware-design.md中找到了答案, 原來是在進(jìn)入ATF之前,disable了所有的exception,ATF又沒有修改PSTATE.DAIF,所有在ATF Runtime時(shí) irq/fiq/serror/svnc都是disabled。所以異常向量表的第二行,也就用不著了。

Required CPU state when calling bl31_entrypoint() during cold boot
This function must only be called by the primary CPU.
On entry to this function the calling primary CPU must be executing in AArch64EL3, little-endian data access, and all interrupt sources masked:

  • PSTATE.EL = 3

  • PSTATE.RW = 1

  • PSTATE.DAIF = 0xf

  • SCTLR_EL3.EE = 0

  • (3)cpu在normal EL0/1/2/3運(yùn)行時(shí)(Linux側(cè)的SCR_EL3.FIQ=1的情況下),來了一個(gè)G1S中斷,CPU將會target到EL3的向量表中的第三組向量表。

那么在ATF中第三組向量表中的fiqoffset中,是如何區(qū)分上述(1)(3)中的場景呢,即如何區(qū)分該中斷是給EL3 handler處理的,還是給optee的handler處理的?此時(shí)1020-1023號中斷發(fā)生了作用。

f32a2728-c750-11ec-bce3-dac502259ad0.png

我們應(yīng)該會用到1020,那么用在哪里的呢?請看上述匯編代碼bl platicgetpendinginterrupttype的具體實(shí)現(xiàn):


	
  1. uint32_t plat_ic_get_pending_interrupt_type(void)

  2. {

  3. unsignedint irqnr;

  4. assert(IS_IN_EL3());

  5. irqnr = gicv3_get_pending_interrupt_type();

  6. switch(irqnr) {

  7. case PENDING_G1S_INTID:

  8. return INTR_TYPE_S_EL1;

  9. case PENDING_G1NS_INTID:

  10. return INTR_TYPE_NS;

  11. case GIC_SPURIOUS_INTERRUPT:

  12. return INTR_TYPE_INVAL;

  13. default:

  14. return INTR_TYPE_EL3;

  15. }

  16. }

其實(shí)就是在讀取pending的中斷號,看看有沒有1020或1021,從而獲得此次的中斷是從secure或non-secure過來的,還是在EL3產(chǎn)生的。然后走相應(yīng)的邏輯。

二、中斷示例展示(虛擬化部分)

影響中斷routing的相關(guān)控制位主要是 HCR_EL2.IMO/FMO/AMO(本文只探討irq/virq,所以我們只看 IMO比特位),除此之外還有 HCR_EL2.TGE比特位影響Application是做為Host還是Guest.

以下是這些比特位的路由規(guī)則的總結(jié):

f3520928-c750-11ec-bce3-dac502259ad0.png

我們學(xué)習(xí)了其原理之后,我們再看4個(gè)示例:(1)、HCREL2.IMO=1 , HCREL2.TGE=1 --routing到EL2,Application做為Guest

f36d82ac-c750-11ec-bce3-dac502259ad0.png

(2)、HCREL2.IMO=1 , HCREL2.TGE=0 --routing到EL2,Application做為Host

f3900ec6-c750-11ec-bce3-dac502259ad0.png

(3)、HCREL2.IMO=0 , HCREL2.TGE=1 --routing到EL1,Application做為Guest

f3b0904c-c750-11ec-bce3-dac502259ad0.png

(4)、HCREL2.IMO=0 , HCREL2.TGE=0 --routing到EL1,Application做為host

f3d1da90-c750-11ec-bce3-dac502259ad0.png

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    11277

    瀏覽量

    224955
  • Linux
    +關(guān)注

    關(guān)注

    88

    文章

    11758

    瀏覽量

    219009
  • 中斷
    +關(guān)注

    關(guān)注

    5

    文章

    917

    瀏覽量

    43754

原文標(biāo)題:armv8/armv9中斷系列詳解-中斷示例展示

文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    RK806中斷處理流程深度解析:從架構(gòu)到調(diào)試實(shí)戰(zhàn)

    RK806 作為瑞芯微主流 PMIC(電源管理芯片),其中斷機(jī)制是實(shí)現(xiàn)“電源鍵響應(yīng)、電壓異常保護(hù)、休眠喚醒、 watchdog 超時(shí)處理” 等核心功能的基礎(chǔ)。Linux 驅(qū)動基于regmap_irq框架設(shè)計(jì),屏蔽了底層寄存器操作細(xì)節(jié),但調(diào)試時(shí)若不理解中斷流程,往往會陷入“
    的頭像 發(fā)表于 02-05 13:46 ?927次閱讀
    RK806<b class='flag-5'>中斷</b>處理流程深度解析:從架構(gòu)到調(diào)試實(shí)戰(zhàn)

    從“能用”到“懂原理”:ARMv8寄存器架構(gòu)深度拆解

    、ELR這些寄存器,只知道是保存狀態(tài)的,卻搞不清背后的設(shè)計(jì)邏輯; 其實(shí)ARMv8的寄存器架構(gòu),不是“零散知識點(diǎn)的堆砌”,而是圍繞“高效運(yùn)算”“安全隔離”“狀態(tài)可控”三個(gè)核心目標(biāo)設(shè)計(jì)的完整體系。 今天這篇文章,我不做枯燥的知識點(diǎn)羅列,而是從“為
    的頭像 發(fā)表于 01-10 07:10 ?137次閱讀
    從“能用”到“懂原理”:<b class='flag-5'>ARMv8</b>寄存器架構(gòu)深度拆解

    ARMv8體系結(jié)構(gòu)入門(附流程圖+腦圖)

    ARMv8是 手機(jī)、平板、甚至部分服務(wù)器里處理器的“底層設(shè)計(jì)藍(lán)圖” ——它是ARM公司推出的第一代支持64位計(jì)算的架構(gòu),能讓設(shè)備同時(shí)用大內(nèi)存、跑新程序和舊程序。下面用“大白話+圖”拆解它的核心邏輯
    的頭像 發(fā)表于 01-06 07:03 ?674次閱讀
    <b class='flag-5'>ARMv8</b>體系結(jié)構(gòu)入門(附流程圖+腦圖)

    Arm Flexible Access方案引入Armv9邊緣AI計(jì)算平臺

    全球首個(gè) Armv9 邊緣 AI 計(jì)算平臺(專為物聯(lián)網(wǎng)及邊緣 AI 工作負(fù)載優(yōu)化)將納入 Arm Flexible Access 方案,助力創(chuàng)新者以低成本、便捷的方式,在邊緣側(cè)獲得先進(jìn)的 AI 性能與安全保障
    的頭像 發(fā)表于 10-29 15:27 ?1044次閱讀

    SysTick初始化函數(shù)和中斷服務(wù)函數(shù)詳解

    SysTick定時(shí)器的計(jì)數(shù)器是向下遞減計(jì)數(shù)的,計(jì)數(shù)一次的時(shí)間TDEC=1/CLKICLK,當(dāng)重裝載寄存器的值VALUELOAD減到0的時(shí)候,產(chǎn)生中斷,可知中斷一次的時(shí)間TINT=VALUELOAD*TDEC=VALUE LOA
    的頭像 發(fā)表于 09-23 09:57 ?785次閱讀
    SysTick初始化函數(shù)和<b class='flag-5'>中斷</b>服務(wù)函數(shù)<b class='flag-5'>詳解</b>

    瑞薩RA系列MCU的中斷過程介紹

    當(dāng)中斷來臨的時(shí)候會最先經(jīng)過IRQ寄存器,IRQ寄存器檢測到中斷的時(shí)候,會向中央處理嵌套向量中斷控制器NVIC發(fā)送中斷信號,當(dāng)NVIC檢測到中斷
    的頭像 發(fā)表于 09-23 09:45 ?1268次閱讀
    瑞薩RA<b class='flag-5'>系列</b>MCU的<b class='flag-5'>中斷</b>過程介紹

    瑞薩RA系列MCU的外部引腳中斷詳解

    上一章節(jié)我們已經(jīng)詳細(xì)介紹了NVIC、ICU、ELC、NMI并對RA系列MCU的中斷管理系統(tǒng)有個(gè)全局的了解,我們這一章節(jié)的內(nèi)容是如何控制外部中斷,也是內(nèi)核里的NVIC的實(shí)例應(yīng)用,這也是RA系列
    的頭像 發(fā)表于 09-23 09:38 ?1681次閱讀
    瑞薩RA<b class='flag-5'>系列</b>MCU的外部引腳<b class='flag-5'>中斷</b><b class='flag-5'>詳解</b>

    脈沖編碼器TIM3中斷不生效是怎么回事?

    的encoderdemo后獲取的圈數(shù)一直為0 配置TIM3定時(shí)器來讀取編碼器圈數(shù)值,通過debug pluse encoder已經(jīng)初始化成功,TIM3中斷也設(shè)置成功,但運(yùn)行后debug查看TIM3定時(shí)器的中斷一直沒有
    發(fā)表于 09-22 06:23

    優(yōu)比施UPS電源:為關(guān)鍵設(shè)備構(gòu)筑電力“零中斷”防線

    1KVA-3KVA在線式UPS電源,以“在線雙轉(zhuǎn)換+超寬輸入+智能監(jiān)控”三大核心技術(shù),重新定義了中小機(jī)房的電力保護(hù)標(biāo)準(zhǔn)。零中斷的“電力心臟”:在線雙轉(zhuǎn)換技術(shù)傳統(tǒng)UP
    的頭像 發(fā)表于 09-18 08:35 ?523次閱讀
    優(yōu)比施UPS電源:為關(guān)鍵設(shè)備構(gòu)筑電力“零<b class='flag-5'>中斷</b>”防線

    STM32G474進(jìn)入Fault3中斷沒辦法設(shè)置成周期性觸發(fā)嗎?

    手動操作硬件觸發(fā)了Fault3故障,進(jìn)入了Fault3中斷,此時(shí)若故障一直存在程序就在中斷里無法出來,F(xiàn)reeRTOS停止運(yùn)行,把故障解除后FreeRTOS正常運(yùn)行,即使把Fault3中斷優(yōu)先級設(shè)置
    發(fā)表于 08-01 07:23

    AS32X601驅(qū)動系列教程 PLIC_中斷應(yīng)用詳解

    平臺中斷控制器(Platform Level Interrupt Controller,PLIC)是國科安芯AS32系列MCU芯片的中斷控制器,主要對中斷源進(jìn)行采樣,優(yōu)先級仲裁和分發(fā)。
    的頭像 發(fā)表于 05-23 17:10 ?709次閱讀
    AS32X601驅(qū)動<b class='flag-5'>系列</b>教程 PLIC_<b class='flag-5'>中斷</b>應(yīng)用<b class='flag-5'>詳解</b>

    第十章 W55MH32中斷應(yīng)用概覽

    本章講述了W55MH32中斷應(yīng)用,涵蓋異常類型、NVIC介紹、優(yōu)先級定義與分組,闡述中斷編程三要點(diǎn)(使能中斷、配置 NVIC、編寫服務(wù)函數(shù)),并強(qiáng)調(diào)優(yōu)先級分組設(shè)置注意事項(xiàng)。
    的頭像 發(fā)表于 05-22 17:07 ?1889次閱讀
    第十章 W55MH32<b class='flag-5'>中斷</b>應(yīng)用概覽

    STM32中斷如此簡單(可下載)

    下面我們先來了解一些基本概念:中斷中斷是什么?舉個(gè)例子來說,當(dāng)我們正在工作時(shí),突然電話響了,這時(shí)你會把手里的工作先停下來,然后去接電話,當(dāng)接完電話后,電話里的人安排你馬上做一件事,這時(shí)你需要立刻去
    發(fā)表于 03-24 14:27 ?1次下載

    Arm 推出 Armv9 邊緣 AI 計(jì)算平臺,以超高能效與先進(jìn) AI 能力賦能物聯(lián)網(wǎng)革新

    電子發(fā)燒友網(wǎng)報(bào)道(文/黃晶晶)當(dāng)下,快速發(fā)展的 AI 正不斷賦予邊緣設(shè)備越來越先進(jìn)的智能性,使邊緣設(shè)備勝任越來越重要的任務(wù)。為應(yīng)對邊緣側(cè)持續(xù)增長的 AI 需求,Arm 近日發(fā)布以全新基于 Armv9
    的頭像 發(fā)表于 03-06 11:43 ?2053次閱讀
    Arm 推出 <b class='flag-5'>Armv9</b> 邊緣 AI 計(jì)算平臺,以超高能效與先進(jìn) AI 能力賦能物聯(lián)網(wǎng)革新

    搶先試用此芯Armv9 AI PC開發(fā)套件瑞莎“星睿O6”

    、邊緣、機(jī)器人等不同場景的“星睿O6”開發(fā)套件 。 該套件于2024年12月發(fā)布,異構(gòu)集成Armv9 CPU核心、Arm Immortalis GPU及安謀科技“周易”NPU等自研業(yè)務(wù)產(chǎn)品,具備強(qiáng)大的多媒體處理能力,并支持靈活的接口與擴(kuò)展。其中搭載的“周易”NPU算力可達(dá)30TOPS,目前已成功適配多款
    的頭像 發(fā)表于 03-06 08:09 ?1394次閱讀
    搶先試用此芯<b class='flag-5'>Armv9</b> AI PC開發(fā)套件瑞莎“星睿O6”