Могу ли я определить, из какого режима (EL1, EL0,…) было вызвано прерывание SError?
Нет, если у вас нет более строгих гарантий, чем те, которые указаны в архитектуре ARMСправочное руководство .
Проблема в том, что почти все определяется реализацией.
Для начала, похоже, нет гарантии, что SError даже вызван PE.Страница D1-2198:
Внешнее прерывание, генерируемое системой памяти, может быть выполнено асинхронно с использованием прерывания SError.Эти прерывания SError всегда ведут себя как прерывания, инициируемые фронтом.Реализация может включать другие источники прерывания SError.
Таким образом, вполне возможно, что источник SError может быть вне кристалла.
Кроме того, в многоядерной системе, кажется, ничто не мешаетвозможность ядра 1 выдавать запись, которая приводит к SError, которая впоследствии отправляется ядру 2.
Далее, давайте посмотрим, какую информацию несет SError.Страница D1-2170:
Если исключение является синхронным исключением или прерыванием SError, информация, характеризующая причину исключения, сохраняется в ESR_ELx на целевом уровне исключения.
Глядя на ESR_EL1
на стр. D12-2798:
IDS, бит [24]
Синдром РЕАЛИЗАЦИЯ ОПРЕДЕЛЕН.Возможные значения этого бита:
- 0b0
Биты [23: 0] поля ISS содержат поля, описанные в этой кодировке.
---------- Примечание ----------
Если расширение RAS не реализовано, это означает, что биты [23: 0] поля ISS равны RES0.
-------------------------- - 0b1
Биты [23: 0] поля ISS содержат информацию о синдроме IMPLEMENTATION DEFINED, которую можно использовать для предоставления дополнительныхинформация о прерывании SError.
Таким образом, PE может реализовать настраиваемую конфигурацию регистра, которая предоставляет информацию, которую вы ищете, но опять же: это определено реализацией.
Также это выходит за рамки спецификации PE, но возможно, что система памяти предоставляет способ восстановить источник ошибки SError.
Итог: реализация всего определена, поэтому обратитесь кРуководство по вашему конкретному оборудованию.