我可以检测出是从哪种模式(EL1,EL0等)引起的SError中断吗?

时间:2018-11-26 16:42:31

标签: interrupt arm64

据我所知,有单独的向量可以处理由EL0和EL1引起的SError。

我的任务如下:

由于SError是异步的,我是否可以依靠以下事实:如果cpu输入 serror_el1_vector 来处理SError,则SError正是在EL1中引起的(不是在EL0,EL2,EL3中引起的),并且CPU输入 serror_el0_vector ,那么SError正是在EL0中引起的吗?换句话说,是否可能出现以下情况:

  1. EL0:

1.1。对某些设备寄存器的不正确访问(例如,对RO寄存器的写操作)会导致SError中断。这种访问不会立即产生访问错误,但是稍后在AXI事务实际发生时,内存系统将返回错误,该错误被报告为异步中止。

1.2。仍未生成SError,用户有时间使 svc 进入EL1

  1. 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状态。

提前谢谢!

1 个答案:

答案 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源的方法。

底线:定义了所有实现,因此请参阅您特定硬件的手册。