据我所知,有单独的向量可以处理由EL0和EL1引起的SError。
我的任务如下:
由于SError是异步的,我是否可以依靠以下事实:如果cpu输入 serror_el1_vector 来处理SError,则SError正是在EL1中引起的(不是在EL0,EL2,EL3中引起的),并且CPU输入 serror_el0_vector ,那么SError正是在EL0中引起的吗?换句话说,是否可能出现以下情况:
1.1。对某些设备寄存器的不正确访问(例如,对RO寄存器的写操作)会导致SError中断。这种访问不会立即产生访问错误,但是稍后在AXI事务实际发生时,内存系统将返回错误,该错误被报告为异步中止。
1.2。仍未生成SError,用户有时间使 svc 进入EL1
2.1。现在,通过步骤1.2设置的EL1模式下的CPU
2.2。由步骤1.1引起的SError最终生成了,但是现在在EL1中而不是在EL0中生成了CPU,因此将在哪个向量CPU中输入以处理SError: serror_el1_vector 或 serror_el0_vector ?因为最初在EL0中导致了错误的访问,但现在在CPU中则处于EL1状态。
提前谢谢!
答案 0 :(得分:2)
我可以检测到是从哪个模式(EL1,EL0等)引起的SError中断吗?
否,除非您的担保比ARM Architecture Reference Manual中的担保更强。
问题在于几乎所有内容都是实现定义的。
首先,似乎无法保证PE甚至会导致SError。页面D1-2198:
可以使用SError中断异步获取内存系统生成的外部异常终止。这些SError中断始终充当边沿触发的中断。一个实现可能包括SError中断的其他来源。
因此,SError的源极有可能是片外的。
另外,在多核系统中,似乎没有什么可以阻止核1发出导致SError并随后发送到核2的写操作的可能性。
接下来,让我们看看SError包含哪些信息。页面D1-2170:
如果异常是同步异常或SError中断,则表示异常原因的信息将以目标异常级别保存在ESR_ELx中。
看D12-2798页上的ESR_EL1
:
IDS,[24]位
实施定义的综合症。该位的可能值为:
- 0b0
ISS字段的位[23:0]保存此编码中描述的字段。
----------注意----------
如果未实现RAS扩展,则意味着ISS字段的位[23:0]为RES0。
--------------------------- 0b1
ISS字段的[23:0]位保留了IMPLEMENTATION DEFINED校正子信息,可用于提供有关SError中断的其他信息。
因此,PE可以实现自定义的寄存器配置,该配置提供所需的信息,但又一次:这是实现的定义。
这也不在PE规范的范围之内,但是内存系统有可能提供一种恢复SError源的方法。
底线:定义了所有实现,因此请参阅您特定硬件的手册。