说明:
本文不考虑el2,默认ns-el2、s-el2都是disabled的
本文以armv9-aarch64、armv8-aarch64为基准,不讨论aarch32的情况
中断控制器以gicv3/gicv4为例,不讨论其它中断控制器和gicv2。
前置条件我们先补充几个概念:
(1)cpu有三种执行环境(runtime):
cpu执行在atfcpu执行在reecpu执行在tee
(2)而对于中断,有3种分类:
ns-group 1 :想给ree处理的中断s-group 1 :想给tee处理的中断group 0:想给atf处理的中断所以呢,就出现9种情况:
(1)cpu执行在ree时,来了一个ns-group 1中断,想给ree处理的中断(2)cpu执行在atf时,来了一个ns-group 1中断,想给ree处理的中断(3)cpu执行在tee时,来了一个ns-group 1中断,想给ree处理的中断(4)cpu执行在tee时,来了一个s-group 1中断,想给tee处理的中断(5)cpu执行在atf时,来了一个s-group 1中断,想给tee处理的中断(6)cpu执行在ree时,来了一个s-group 1中断,想给tee处理的中断(7)cpu执行在atf时,来了一个group 0中断,想给atf处理的中断(8)cpu执行在tee时,来了一个group 0中断,想给atf处理的中断(9)cpu执行在ree时,来了一个group 0中断,想给atf处理的中断那么接下来,我们就开始分析,这9种情况,在整个多系统的软硬件架构中,是如何设计、如何处理的。
1、cpu执行在ree时,来了一个ns-group 1中断cpu执行在ree时,来了一个ns-group 1中断,想给ree处理的中断。
在ree执行过程中,当发生一个来自ns-group 1的中断时,旨在传递给ree处理。鉴于当前cpu处于非安全状态且中断类型为ns-group 1,因此该中断被标记为irq。此时,由于scr_el3.irq的值为0,所以此irq将会被路由至el1。这一路由机制十分简洁明了,直接将irq传递,使得cpu会进入linux kernel的异常向量表中的irq向量,从而进行处理。
2、cpu执行在atf时,来了一个ns-group 1中断cpu执行在atf时,来了一个ns-group 1中断,想给ree处理的中断。
透过事物看本质,我们可以理解这是一种想给ree处理的中断,因此最终目标是将cpu重新路由回ree,使其能够正确处理此中断。
接下来,我们将探讨软硬件设计问题。当cpu处于atf执行状态时,pstate.i和pstate.f都被屏蔽(mask),因此,此时cpu不会响应任何中断,所有产生的中断都将保持在待处理状态。只有在cpu从el3切换回el3以下状态时,且pstate.f/i解除屏蔽(unmasked)时,待处理的中断才会被taken。
考虑到cpu从el3切换到el3以下状态有两种路径,因此,我们需要对此进行分组讨论:
当cpu从el3返回到ree端时,情况等同于“cpu处于ree执行状态,此时发生一个ns-group 1中断”,这会直接触发将中断传递到linux内核中的irq,使linux内核能够继续处理此中断。当cpu从el3返回到tee端时,情况等同于“cpu处于tee执行状态,此时发生一个ns-group 1中断”,这时将会重复执行第3小节所述的中断路由步骤。
3、cpu执行在tee时,来了一个ns-group 1中断cpu执行在tee时,来了一个ns-group 1中断,想给ree处理的中断。
透过事物看本质,我们可以理解这是一种想给ree处理的中断。因此,你的软硬件协同设计的最终目标是将cpu拉回到ree,让ree处理这个中断。
我们接着关注软硬件的设计。由于当前cpu运行在安全状态,中断类型为ns-group 1,因此中断被标记为fiq。然而,考虑到此刻的scr_el3.irq=0,所以这个fiq将会被路由至el1。cpu进入tee os的异常向量的fiq向量,在fiq_handler的实现中,未读取中断iar就调用了smc。这采用了一种主动的软件调用方式,将cpu切回了atf。atf察觉到这是一个中断转换过来的情况,因此继续将cpu切换回ree。在此过程中,该中断一直保持为挂起状态。
当cpu被重新引导回ree后,由于此时cpu运行在非安全状态,中断类型仍为ns-group 1,所以该中断被重新标记为irq。随之而来的是重新触发中断,该中断被target至el1,与下图中的步骤4对应。在中断处理完成后,依次将cpu拉回tee,使其回到被打断的位置。
4、cpu执行在tee时,来了一个s-group 1中断cpu执行在tee时,来了一个s-group 1中断,想给tee处理的中断。
由于当前cpu运行在secure security state、中断类型为s-group 1中断,所以该中断被标记为irq,由于此时scr_el3.irq=0,所以该中断被标记为irq,并被target到el1。所以这种路由很干脆直接,将直接产生irq,让cpu进入tee os的异常向量表的irq向量去处理。
5、cpu执行在atf时,来了一个s-group 1中断cpu执行在atf时,来了一个s-group 1中断,想给tee处理的中断。
我们透过事物看本质,这是想给tee处理的中断,所以最终的结果,一定是要把cpu拉回到tee,让tee去处理这个中断。
接下来我们讨论软硬件设计,cpu执行在atf的时候,此时pstate.i和pstate.f都是mask的,所以此时不会taken任何中断,一切产生的中断将处于pending状态。当cpu从el3切回el3以下的时候,pstate.f/i unmasked的时候,此时pending的中断才会被taken。由于cpu从el3切换el3以下有两条路径,所以我们需要分组讨论一下:
当cpu从el3往ree侧返回后,此时条件等同于“cpu执行在ree时,来了一个s-group 1中断”,此时会将第6小节的中断路由步骤全部再走一遍。当cpu从el3往tee侧返回后,此时条件等同于“cpu执行在tee时,来了一个s-group 1中断”,也就是将直接产生target到tee o中的irq,让tee继续处理这个中断。
6、cpu执行在ree时,来了一个s-group 1中断cpu执行在ree时,来了一个s-group 1中断,想给tee处理的中断.
我们透过事物看本质,这是想给tee处理的中断,所以最终的结果,你的软硬件协同的设计,一定是要把cpu拉回到tee,让tee去处理这个中断。
我们再来看软硬件的设计,由于当前cpu运行在non secure security state、中断类型为s-group 1中断,所以该中断被标记为fiq,由于此时scr_el3.irq=1,所以该fiq将被target到el3。cpu 进入 atf的异常向量的fiq向量,在atf的fiq_handler实现中,它会继续进行中断转发,转发到tee os中特定的入口(这里与tee os厂商的设计相关,不同厂商有不同的实现),进入tee os后,真正处理这个中断,处理完毕后,再依次返回。
7、cpu执行在atf时,来了一个group 0中断cpu执行在atf时,来了一个group 0中断,想给atf处理的中断。
cpu执行在atf的时候,此时pstate.i和pstate.f都是mask的,所以此时不会taken任何中断,一切产生的中断将处于pending状态。当cpu从el3切回el3以下的时候,pstate.f/i unmasked的时候,此时pending的中断才会被take。由于cpu从el3切换el3以下有两条路径,所以我们需要分组讨论一下:
当cpu从el3往ree侧返回后,此时条件等同于“cpu执行在ree时,来了一个group 0中断”,此时会将第9小节的中断路由步骤全部再走一遍。当cpu从el3往tee侧返回后,此时条件等同于“cpu执行在tee时,来了一个group 0中断”,此时会将第8小节的中断路由步骤全部再走一遍。
8、cpu执行在tee时,来了一个group 0中断cpu执行在tee时,来了一个group 0中断,想给atf处理的中断.
此时根据中断类型为group 0,该中断将被标记为fiq,根据scr_el3.fiq=0,该fiq将直接被target到el1,在tee中的fiq_handler中,将采取软件主动方式将cpu切回atf,进入atf后,该中断仍不会被taken,因为此时pstate.i/r都是masked的。直至cpu再返回ree端的时候,将重新产生target到el3的fiq,那时中断才会被处理。
9、cpu执行在ree时,来了一个group 0中断cpu执行在ree时,来了一个group 0中断,想给atf处理的中断。
由于是group0中断,中断将被标记为fiq,又由于scr_el3.fiq=1,fiq将被直接target到el3,进入atf的异常向量表的fiq向量进行处理。
音视频物联网:智能分析摄像头助力污水乱排乱放
小创意:散发迷人气味的节能灯
华为Mate20系列共销售1600万台 P30系列半年超过1700万台
我国新型储能发展取得显著成效,已投运装机超3000万千瓦
读懂功分器和耦合器的区别不要再搞混了
多系统中断路由的9种示例
粤水电与易华录合作共同推进“城市数据湖产业园+新能源投资建设”
小米MIX2和魅族PRO7哪个好?颜值与全面屏的对比
福州最大物联网综合体物联网产业创新发展中心二期
OpenHarmony在千行百业的落地成果
应用案例 | 海伯森3D线光谱共焦传感器检测声学组件上的线圈高度
服务机器人迎来发展新时期,在未来将会扮演一个什么样的角色呢?
智能新风系统是如何工作的?
采用ATL技术与数据结构转换模块实现原理图解析器的设计
远端模块固件升级失败的解决方法
阿里云盘1.0.2更新 最高支持上传大小 20GB 的单个文件
导热硅胶片与导热矽胶片两者的区别介绍
客户体验和零售成为物联网支持原因是什么
PCB上的光电元器件为什么总失效?
MobPush Android SDK 厂商推送限制