首页 > 解决方案 > 我可以检测从哪个模式(EL1,EL0,...)SError 中断引起的吗?

问题描述

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

我的问题如下:

由于 SError 是异步的,我是否可以相信如果 cpu 输入serror_el1_vector来处理 SError,那么 SError 完全是在 EL1 中引起的(而不是在 EL0、EL2、EL3 中),如果 cpu 输入serror_el0_vector那么 SError 完全是在 EL0 中引起的? 换句话说,是否可能出现以下情况:

  1. EL0:

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

1.2. SError 仍未产生,用户有时间让svc进入 EL1

  1. EL1:

2.1。现在 EL1 模式下的 cpu 通过步骤 1.2 进入

2.2. 由步骤 1.1 导致的 SError 最终生成但现在 cpu 在 EL1 中,而不是在 EL0 中,那么 cpu 将进入哪个向量来处理 SError: serror_el1_vectorserror_el0_vector?因为最初不正确的访问是在 EL0 中引起的,但现在 cpu 处于 EL1 状态。

先感谢您!

标签: interruptarm64

解决方案


我可以检测从哪个模式(EL1,EL0,...)SError 中断引起的吗?

不,除非您有比ARM 体系结构参考手册中提供的更强大的保证。
问题是几乎所有东西都是实现定义的。

首先,似乎无法保证 SError 甚至是由 PE 引起的。第 D1-2198 页:

内存系统生成的外部中止可能会使用 SError 中断异步执行。这些 SError 中断始终表现为边沿触发中断。一个实现可能包括其他 SError 中断源。

所以 SError 的来源完全有可能在芯片外。
此外,在多核系统中,似乎没有什么能阻止核心 1 发出导致 SError 的写入的可能性,该 SError 随后被发送到核心 2。

接下来,我们来看看一个 SError 携带了哪些信息。第 D1-2170 页:

如果异常是同步异常或 SError 中断,则表征异常原因的信息将保存在目标异常级别的 ESR_ELx 中。

查看ESR_EL1第 D12-2798 页:

IDS,位 [24]
实现定义综合症。该位的可能值为:

  • ISS 字段的0b0
    位 [23:0] 保存此编码中描述的字段。
    ---------- 注意 ----------
    如果没有实现 RAS 扩展,这意味着 ISS 字段的 bits[23:0] 是 RES0。
    --------------------------
  • ISS 字段的0b1
    位 [23:0] 保存实现定义的综合症信息,可用于提供有关 SError 中断的附加信息。

因此,PE 可以实现自定义寄存器配置,提供您正在寻找的信息,但同样:这是定义的实现。

这也超出了 PE 规范的范围,但内存系统可能提供了一种恢复 SError 源的方法。

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


推荐阅读