Bl31中断处理流程概述

中断处理需要软件和硬件配合完成,gicv3根据中断分组情况以及系统当前运行的异常等级确定中断是以irq还是fiq触发。
cpu通过设置scr_el3.irq和scr_el3.fiq确定irq和fiq中断分别是被路由到当前异常等级还是被路由到el3。
若中断被路由到el3,根据异常发生时系统所处的异常等级,使用的栈指针是sp_el0还是sp_elx(x》
0),以及使用的aarch32还是aarch64架构,在每个异常等级下都包含了四张异常等级表。
bl31的异常向量表定义在runtime_exceptions.s中,其与下图的定义一致。
但在atf中只实现了后面两种情形下的中断处理函数,即若当前系统运行在el3下,则不允许异常发生。为简化讨论,我们只关注aarch64的情形,则实际上bl31只实现了下图中的第三种异常发生时中断的处理。
这是因为除了系统启动时以外,其它情况下系统运行在bl31则表示其本身是由低异常等级以smc指令进入的,此时系统本身就运行在异常上下文。
而系统返回所需要的elr_el3和spsr_el3都被保存在了sp_el3栈中。在bl31中sp_el3只用于保存寄存器等系统状态信息,且所有的参数的存储位置都是预定义好的。此时,若发生了irq或fiq中断则中断处理函数也会将它的elr_el3和spsr_el3保存到sp_el3中,从而导致smc调用的返回信息被覆盖掉,从而使其无法返回。
因此bl31中的异常处理函数是非重入的,bl31运行时当前pe处于关中断状态。当然,对于smp系统,由于每个pe的sp_el3是独立的,因此其它pe还是可以响应中断的。
当系统运行在低异常等级时产生group 0中断,则可以通过以上第三张异常向量表跳转到bl31的aarch64异常处理函数,下面以fiq为例说明其中断处理流程。

FPGA 深度开发课程
华为畅享7Plus闪存速度媲美华为P10?
OPPO全新研发的驱动 IC能配合大尺寸传感器和精进影像?
触发器与存储过程的区别
服务器芯片背后的故事:如何将想法转化为芯片
Bl31中断处理流程概述
“手机失窃”后续引发的人脸信息安全担忧,谁来破解困局?
工业物联网如何解决潜在挑战和安全问题
伦敦大学创下世界上最快的数据传输速度!
华曦达北交所IPO上市丨为印尼零售商提供IoT智慧家庭解决方案
5g与5g手机的龙争虎斗
信息通信技术驱动的概念为企业带来的益处
有刷电机的优点与缺点
海关部门已经连续查获了 18 宗电子产品的走私案件
基于LM386的325mW小型放大器电路
扬尘在线监测系统联网助力工地扬尘监测
到底用电动牙刷好不好
Flex电源模块的最新微型DCDC转换器系列讲解
忆联UH711a获红帽生态系统认证,成功入选红帽生态名录
存储器群雄割据的时代再度来临