![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ARM中断
文章平均质量分 83
TrustZone_Hcoco
一个搞技术的读书人,妄图分享最干货的技术知识与世界运转的底层逻辑。公ZH:TrustZone
展开
-
一文读懂多架构的中断控制器
最近整了【万字长文玩转中断系列文章】,恰好看到有一篇前辈的文章,专门来对比了之前涉及到的中断,这篇文章来作为这个系列的总结可真是太合适了,内容精彩,我就不重复造轮子了,下面一起来通过这篇文章回顾一下这次的中断之旅吧。在计算机中,(Interrupt Request,以下简称IRQ)这些中断请求可能同时发生,中断控制器有助于确定 IRQ 的优先级,以便CPU在得到 IRQ 的相对优先级评估结果后,切换到最合适的中断处理程序 (Interrupt Service Routine,以下简称ISR)。转载 2023-07-17 00:31:58 · 376 阅读 · 2 评论 -
GIC Implementation and Architecture Specification
做了一个GIC架构规格说明的资料整理。原创 2023-06-23 21:02:06 · 221 阅读 · 0 评论 -
来看看linux中断分析
与ATF相比,linux内核中断子系统为了适配不同的cpu架构与中断处理器。将与体系结构和硬件无关的部分抽象出来,作为通用的中断处理框架,而与硬件相关的部分作为驱动层,以实现对中断资源的管理和中断事件的处理。(硬件驱动-HAL-内核驱动)由于linux支持中断控制器的级联,因此多个中断控制器就可能包含相同的硬件中断号。试想如果不做进一步的转换,则通用中断处理框架代码中引用一个中断,则必须要首先要获取该中断对应的中断控制器,然后再获取其在中断控制器上的硬件中断号。转载 2023-03-12 23:19:48 · 486 阅读 · 1 评论 -
ATF:givc3的中断路由机制
(1)若将FIQ位配置为0,且当前执行状态低于EL3时,则FIQ不会被路由到EL3,而路由到第一个可以处理该中断的异常等级FEL(2)若将FIQ配置为1,则运行于任何执行状态时,FIQ都会被路由到EL3而irq的配置方式与fiq类似。原创 2023-03-12 18:24:13 · 556 阅读 · 0 评论 -
ATF:givc3的中断处理流程
中断处理,GICv3根据确定中断是以IRQ还是FIQ触发。。若中断被路由到EL3,根据异常发生时系统所处的异常等级,使用的栈指针是SP_EL0还是SP_ELx(x> 0),以及使用的aarch32还是aarch64架构,在每个异常等级下都包含了四张异常等级表。bl31的异常向量表定义在runtime_exceptions.S中,其与下图的定义一致。但在ATF中只实现了后面两种情形下的中断处理函数,。原创 2023-03-12 17:58:07 · 391 阅读 · 0 评论 -
ATF:givc3的中断处理流程
1。原创 2023-03-12 17:32:28 · 190 阅读 · 0 评论 -
ATF:givc3的中断初始化配置流程
前段时间不是在整gicv2吗?这个确实太老了。资料很少,但是gicv3的蛮多的,这里找到了一篇关于gicv3的中断的blog,我们一起来学习一下,相信通过前辈的文章一定有所收获,核心内存的内容链接我放在了文末。ATF在bl31中提供了以及GICv3相关的电源管理功能,由于电源管理功能与中断处理流程关联不大,在本文中不做详细分析。下图为bl31中,其中平台相关部分代码都以arm common plat为例,如主要实现了distributor、redistributor和cpu interface。原创 2023-03-12 17:31:01 · 432 阅读 · 0 评论 -
ATF:Gicv源码解读系列-gicv2_secure_ppi_sgi_setup_props
配置安全G0 SGI和PPI的属性。原创 2023-03-10 22:53:48 · 134 阅读 · 0 评论 -
ATF:Gicv源码解读系列-gicv2_secure_spis_configure_props
前面的函数一是对于gicv2的spi中断的默认配置,这里是设置对于spi g0组的属性配置。原创 2023-03-10 20:43:49 · 186 阅读 · 0 评论 -
ATF:Gicv源码解读系列-gicv2_spis_configure_defaults
用来配置SPI的一些默认的属性,SPI中断在gic的文档里面有写这样一句话,来说明这个中断。SPIs从源通过分发器路由到目标再分发器和相关的CPU接口,这里有个关键词目标。因此这个目标可以是一个或者多个。原创 2023-03-10 01:00:55 · 198 阅读 · 0 评论 -
ATF:Gicv源码文件系列-gicv2.mk
这个文件包含了gicv2的源码文件!原创 2023-03-08 22:45:42 · 127 阅读 · 0 评论 -
ATF:Gicv源码文件系列-gicv2_main.c
#include #include #include #include #include #include #include #include #include原创 2023-03-08 22:41:37 · 149 阅读 · 0 评论 -
ATF:Gicv源码文件系列-gicdv2_helpers.c
*原创 2023-03-08 22:37:44 · 130 阅读 · 0 评论 -
ATF:Gicv源码文件系列-gicv2_private.h
#ifndef GICV2_PRIVATE_H#define GICV2_PRIVATE_H原创 2023-03-08 22:01:51 · 162 阅读 · 0 评论 -
ATF:Gicv源码文件系列-gicv2.h
/*#ifndef GICV2_H#define GICV2_H#include #include /*******************************************************************************/* Interrupt group definitions */#define GICV2_INTR_GROUP0 U(0)#define GICV2_INT原创 2023-03-08 21:58:25 · 170 阅读 · 0 评论 -
ATF:Gicv源码文件系列-gic_common.h
/*#ifndef GIC_COMMON_H#define GIC_COMMON_H#include /*******************************************************************************#define TOTAL_SPI_INTR_NUM (MAX_SPI_ID - MIN_SPI_ID + U(1))#define TOTAL_PCPU_INTR_NUM (MIN_SPI_ID - MIN_S原创 2023-03-08 21:16:52 · 88 阅读 · 0 评论 -
GIC:Platform Interrupt Controller API
可以看一下这些接口的含义以及gicv2和gicv3的差异点。原创 2023-03-07 00:16:18 · 98 阅读 · 0 评论 -
构建一个atf必须读点gic的原生文档
为GICv2和GICv3引入新的API,提供指定中断特性的功能,而不仅仅是中断编号列表。移植Arm平台和其他上游平台以使用中断特性。添加了帮助程序以保存/恢复GICv3上下文,特别是分发器和再分发器上下文以及ITS电源管理的体系结构部分。分发器和再分发器助手还支持GIC-500和GIC-600的实现定义部分。更新了Arm FVP平台,以在系统挂起/恢复时保存/恢复GICv3上下文,作为如何使用助手的示例。原创 2023-03-07 00:04:47 · 205 阅读 · 0 评论 -
来看看ARM gicv2/gicv3的详解
最近在做实验室的版本兼容,很我一直以为这个gicv2和gicv3版本更新的年代不是很久。最后看了一下gicv2的文章发现在2016年都有了,为什么现在还有gicv2,吐槽一下。不过活还是得干,之前做过关于gicv3的东西,但是现在还得整个gicv2,在基于这个gicv3上进行修改,那么必须对比一下这两个之间的差别。原创 2023-03-06 22:08:37 · 1174 阅读 · 0 评论 -
ARM中断来瞅瞅
最近看到了一个前辈的公众号,讲关于中断的。原创 2023-02-23 20:47:15 · 1121 阅读 · 0 评论 -
关于S3学习所涉及到的知识(五):GICv3 中断安全态、分组及编程模型
每一个中断都需要配置安全态和分组。从上面的配置过程看,关闭或者不响应某个中断可以从各个层面去控制。在 distributor 处可以关闭某个 group 的中断,注意这里是全局关某个 group,GICD_CTLR。在 cpu interface 处也可以关闭该 interface 某个 group 的中断,ICC_IGRPEN0_EL1 & ICC_IGRPEN1_EL1 or ICC_IGRPEN1_EL3。对于每个中断,同样有单独的使能寄存器。当然 PE 层面也可以实现屏蔽,这是全局屏蔽。转载 2023-02-22 23:25:50 · 574 阅读 · 0 评论 -
关于S3学习所涉及到的知识(四):GIC_V3寄存器介绍
从这里看到,GIC分为3个主要的部分,要完成其作用,而且给用户进行预先配置的方法,GIC就提供了一组寄存器,这些寄存器的设计就是围绕着这些主要的功能来实现的。转载 2023-02-22 23:04:50 · 739 阅读 · 0 评论 -
关于S3学习所涉及到的知识(三):Generic PM之Suspend功能&&Gicv3电源/功耗管理
下面图片对Linux suspend&resume过程做了一个概述,读者可以顺着这个流程阅读内核源代码。具体的说明,可以参考后面的代码分析。(只介绍和suspend功能有关的,struct dev_pm_ops简称D,struct platform_suspend_ops简称P)前辈关于这个系列的文章太过精彩,后续慢慢详细学习一下,这里先暂时熟悉了解一下大概的流程!!!从gic3开始,cpu interface放到了PE中,因此cpu interface和PE是同一个power domain。原创 2023-02-22 22:50:34 · 366 阅读 · 0 评论 -
GIC源码系列(三):GICv3驱动初始化
这里我们介绍GICv3驱动的基础框架,后续再介绍GICv4的支持。中。同时仅介绍ACPI方式下GICv3驱动。该驱动由宏对不同中断控制器版本进行不同的初始化,这里对GICv3驱动通过函数**acpi_avalidate_gic_table()gic_acpi_init()**进行初始化。转载 2023-02-17 00:12:43 · 579 阅读 · 0 评论 -
GIC源码系列(二):MADT表
支持中断模型包括PC-AT兼容的双8259中断控制器,对于ARM处理器系统,GIC控制器。MADT格式如下所示:中断控制器结构体支持的类型很多,这里仅介绍GIC相关的中断控制器结构体类型。转载 2023-02-17 00:02:34 · 293 阅读 · 0 评论 -
GIC源码系列(一):GIC/ITS框架介绍
对于GICv3,支持LPI中断,可以通过ITS产生LPI中断。GICD,用于SPI中断的分发,它会将外设产生的SPI中断路由给对应的GICRITS,用于LPI中断的产生,它的功能与GICD类似,只不过是针对LPI中断,可以将LPI中断路由给对应的GICRGICR,将收到的中断发往GICC,与GICC一一对应,PPI中断直接发送到GICRGICC,它为CPU接口,在CPU侧,与GICR一一对应,SGI中断由GICC产生。转载 2023-02-16 23:50:19 · 1121 阅读 · 0 评论 -
GIC规格学习(一)
注意:(1)Arm GIC架构保证1:N中断在目标PE组的其中一个PE;(2)1:N中断可以没最高优先级的中断上,或被ICC_PMR_EL1屏蔽的中断。原创 2023-02-16 23:09:24 · 392 阅读 · 0 评论 -
中断系列第四篇:中断爱养狗?
Watchdog,又称watchdog timer,是计算机可靠性(dependability)领域中一个极为简单同时非常有效的检测(detection)工具。其基本思想是针对被监视的目标设置一个计数器和一个阈值,watchdog会自己增加计数值,并等待被监视的目标周期性地重置计数值。一旦目标发生错误,没来得及重置计数值,watchdog会检测到计数值溢出,并采取恢复措施(通常情况下是重启)。总结一下就是计数——溢出——触发。原创 2023-01-02 14:07:17 · 1115 阅读 · 0 评论 -
中断系列第三篇:中断实操一下?
这篇文章,就是来学习一些中断具体是怎么玩的,不用刻意去背中断的寄存器、表之类的东西,这次看了就把他忘了吧,咱们下次再看。NMI 是不可屏蔽中断,它通常用于电源掉电和物理存储器奇偶校验;INTR是可屏蔽中断,可以通过设置中断屏蔽位来进行中断屏蔽,它主要用于接受外部硬件的中断信号,这些信号由中断控制器传递给 CPU。常见的中断控制器有两种:用中断?那来看看中断控制器,怎么玩中断的。(NMI需要中断控制器吗?)原文链接:https://mp.weixin.qq.com/s/sUfPYDe_4Dpz6cWskyZu原创 2023-01-01 19:51:02 · 417 阅读 · 0 评论 -
中断系列第二篇:中断的使用场景?
外部硬件的中断是通过两根信号线通知CPU的,这两根信号线就是INTR(INTeRrupt)和NMI(Non Maskable Interrupt)。NMI中断,不可屏蔽中断,产生这个中断的时候,表示系统发生了致命的错误。INTR可屏蔽中断。那么要讨论这个应用得场景,就需要分不同的中断进行讨论。原创 2023-01-01 17:10:58 · 996 阅读 · 0 评论 -
中断系列第一篇:假装入个门之啥子是中断?
我想用我的语言去描述,写了删除了,写的是个狗屁,于是我去查,一个微信公众号写的不错:中断是为了解决外部设备完成某些工作后通知CPU的一种机制(譬如硬盘完成读写操作后通过中断告知CPU已经完成)。早期没有中断机制的计算机就不得不通过轮询来查询外部设备的状态,由于轮询是试探查询的(也就是说设备不一定是就绪状态),所以往往要做很多无用的查询,从而导致效率非常低下。由于中断是由外部设备主动通知CPU的,所以不需要CPU进行轮询去查询,效率大大提升。(中断的意义)原创 2023-01-01 16:58:48 · 195 阅读 · 0 评论 -
NMI中断概要
我推荐学习这个过程的两个关键点:联想、对比、问问题在学习NMI的这个过程中,我们要联想着我们之前学习的FIQ、IRQ,也要与其进行对比,并在这个过程中不断的对比这些之间的区别。外部硬件的中断是通过两根信号线通知CPU的,这两根信号线就是INTR(INTeRrupt)和NMI(Non Maskable Interrupt)。NMI中断,不可屏蔽中断,产生这个中断的时候,表示系统发生了致命的错误。INTR可屏蔽中断。后者的INTR其中就包含了我们的FIQ、IRQ。原创 2023-01-01 15:48:06 · 7240 阅读 · 0 评论 -
看看FIQ和IRQ
前两天我这个逼崽子不是拉着你们一起学习了Gic的一系列,不出所料,这些东西没有实战真的是边学边忘,于是这里有开始边忘边学。来一起跟着前辈学习一下什么事FIQ和IRQ。原创 2022-12-23 21:05:40 · 619 阅读 · 0 评论 -
【转】ARM GIC中断系列(八):gicv3架构-波形为例、系列总结
GIC,是arm为了实现复杂的中断控制,而定义的一套架构。版本也历经了多个变化,从最初的GICv1到现在最新的GICv4。每一个新的版本,都增加了一些新的功能。目前最新的GIC-600 IP,支持GICv4。不过从GICv3开始,架构就和之前的架构,变化就比较大了。gicv3/v4,架构,比gicv2架构,增加了很多的特性,从而支持更复杂的中断管理,支持更多的cpu。自此,本系列博文到此就要结束了,基本上,除了虚拟中断的相关内容,我将GIC的内容都进行了介绍。转载 2022-12-18 21:39:53 · 513 阅读 · 0 评论 -
【转】ARM GIC中断系列(七):gicv3架构-two secure state、中断bypass
gicv3中,引入了支持2种安全状态(secure state),也就是对于中断,根据secure状态,分为安全中断和非安全中断。当然也可以只支持一种安全状态。。这里的2种安全状态和1种安全状态,主要是影响中断分组,所使用IRQ和FIQ管脚的映射,以及gic中的寄存器访问。转载 2022-12-18 21:13:52 · 670 阅读 · 0 评论 -
【转】ARM GIC中断系列(六):gicv3架构-power控制、中断分组、GICv3软中断
从gic3开始,cpu interface放到了PE中,因此cpu interface和PE是同一个power domain。而属于gic的其他组件,如redistributor,distributor,是另外一个power domain。因此就有如下一种情况,PE和cpu interface的电源给断掉了,而gic的电源并没有断掉。此时gic给cpu interface发送数据,cpu interface是不会响应的。在这种情况下,转载 2022-12-18 20:23:22 · 970 阅读 · 2 评论 -
【转】ARM GIC中断系列(五):gicv3架构-LPL
LPI是一种基于消息的边沿中断。也就是,中断信息,不在通过中断线,进行传递,而是通过memory。gic内部,提供一个寄存器,当外设往这个地址,写入数据时,就往gic发送了一个中断。在soc系统中,**外设想要发送中断给gic,是需要一根中断线的。**如果现在一个外设,需要增加一个中断,那么就要增加一根中断线,然后连接到gic。这样,就需要修改设计。而引入了LPI之后,当外设需要增加中断,只需要使用LPI方式,传输中断即可,不需要修改soc设计。引入了LPI之后,gicv3中,还加入了。转载 2022-12-18 20:02:52 · 805 阅读 · 0 评论 -
【转】ARM GIC中断系列(四):gicv3架构-gic stream协议
gicv3中,IRI与cpu interface之间,是通过包,来传输信息。传输的接口协议,使用AXI-stream。通过包的各种组合,来实现gic的中断操作与中断管理。之后,会介绍gicv3中,引入的一种新的中断类型,消息中断。(distributor,redistributor和ITS,统称为IRI组件)原文链接:http://www.lujun.org.cn/?p=3896。转载 2022-12-18 19:35:58 · 382 阅读 · 0 评论 -
【转】ARM GIC中断系列(三):gicv3架构基础
GICv3架构是GICv2架构的升级版,增加了很多东西。变化在于以下:+ 使用属性层次(affinity hierarchies),来对core进行标识,使gic支持更多的core+ 将cpu interface独立出来,用户可以将其设计在core内部+ 增加redistributor组件,用来连接distributor和cpu interface+ 增加了LPI,使用ITS来解析+ 对于cpu interface的寄存器,增加系统寄存器访问方式转载 2022-12-18 18:56:31 · 1660 阅读 · 0 评论 -
【转】ARM GIC中断系列(二):gicv2架构基础
以上就是GICv2的介绍,更多的内容,需要查看gicv2的文档。gicv2比较简单,最多只能支持8个core,超过了8个core,那么就不能使用gicv2了。不过这也不是大问题,对于手机的arm处理器来说,最多也就8个core。但是对于服务器,桌面级的arm处理器,那么就可能会超过8个core,此时gicv2就不适用了,所以ARM后面又加入GICv3,v4架构。GICv2的寄存器,都是通过memory-mapped的方式访问。转载 2022-12-18 17:10:42 · 1158 阅读 · 0 评论