Что такое устаревшие прерывания?

Я работаю над проектом, в котором пытаюсь выяснить, как прерывание обрабатывается в глобальном контроллере прерываний для архитектуры ARM. Я работаю с контроллером прерываний pl390. Я вижу, что есть строка, которая упоминается как устаревшие прерывания, которые обходят логику распределителя. При условии, что 2 прерывания могут быть запрограммированы как устаревшие прерывания. Может ли кто-нибудь помочь с некоторым объяснением того, что такое устаревшее прерывание? Я пытаюсь искать в Интернете без везения.


person Nuetrino    schedule 27.11.2013    source источник
comment
См.: обход прерываний GIC   -  person artless noise    schedule 28.11.2013
comment
@artlessnoise Спасибо за указатель. К сожалению, у меня недостаточно кредитов, чтобы предложить синоним.   -  person Nuetrino    schedule 29.11.2013


Ответы (1)


Устаревшие прерывания — это два прерывания, которые были в ARM до появления GIC: nIRQ — обычный запрос прерывания и fIRQ — быстрый запрос прерывания.

Поскольку устаревшие прерывания были созданы для одноядерных процессоров, а внутри они не поддерживают многоядерные процессоры, причина, по которой они обходят логику распределителя, должна быть достаточно ясна — устаревшие прерывания жестко зашиты в одно из ядер.

Короче говоря, это позволяет процессору работать в режиме обратной совместимости со старой спецификацией ARM. Например, четырехъядерный процессор ARM будет иметь 4 nIRQ и 4 fIRQ, отдельные для каждого из ядер. Если у вас есть старое ARM-совместимое оборудование (которое не поддерживает GIC), вы подключаете его к одному из nIRQ/fIRQ ядра так же, как если бы вы подключали его к старому одноядерному процессору, и он всегда будет выполняться. на этом одном ядре.

Дополнительную информацию можно найти здесь — http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0407e/CCHDBEBE.html

person Luaan    schedule 27.11.2013
comment
Спасибо. это совершенно ясно. Я надеюсь, что смогу реализовать эту логику в своем дизайне, чтобы получить представление о том, сколько тактовых циклов потребляется логикой интерфейса распределителя и процессора. Я прав? - person Nuetrino; 27.11.2013
comment
Это звучит возможно, да. Должен признаться, я как бы предполагал, что распределитель циклически синхронизируется с самими ядрами, поэтому это всегда будет занимать одно и то же время, но это всего лишь предположение, которое вполне может быть неверным... Однако в целом принцип , я бы не стал использовать устаревшие прерывания, если только вы не нацелены на устаревшие процессоры. Я считаю, что устаревшие прерывания могут быть удалены в будущем (в некоторых или во всех будущих процессорах). - person Luaan; 27.11.2013
comment
Да, это моя цель. Из документации ясно, что потребуется много тактов, но я хотел бы это проверить. Поэтому я думаю, что внедрение устаревших прерываний натолкнет меня на эту идею. Спасибо за твой ответ. - person Nuetrino; 27.11.2013
comment
Также стоит отметить, что nIRQ и nFIQ по-прежнему маршрутизируются через GIC в большинстве реализаций — как частные периферийные прерывания, направляемые только на одно ядро. GIC, как правило, работает на более низкой частоте, чем ЦП - я не знаю ни одной реализации, в которой GIC работает быстрее, чем 1/2 частоты ядра - я думаю, что 1/3-1/4 являются общими. Согласен, что устаревшие прерывания не должны использоваться ни для чего, кроме экспериментов. - person unixsmurf; 27.11.2013
comment
Но я вижу, что устаревшие прерывания (которые понимают как nIRQ и nFIQ) просто напрямую отправляются на мультиплексор (в GIC) без синхронизации с часами GIC (glck), поэтому я могу предположить, что gclk не влияет на устаревшие прерывания. ? Я прав? - person Nuetrino; 27.11.2013
comment
Да, но я не могу найти это конкретное поведение в спецификации, поэтому это может быть связано с реализацией - могут быть процессоры, которые внутренне используют GIC для отправки устаревших прерываний (как сказал @unixsmurf). Не полагайтесь на неопределенное поведение, если вы не готовы приложить огромные усилия для тестирования на всех устройствах, которые вы хотите поддерживать. - person Luaan; 27.11.2013
comment
@unixsmurf Хорошо, спасибо за комментарий. Он действительно рассматривается как PPI, как вы сказали, но в устаревшем режиме он обходит его. Из документации ARM cortex — PPI [0] В устаревшем режиме FIQ устаревший вывод nFIQ для каждого процессора Cortex-A9 обходит логику распределителя прерываний и напрямую направляет запросы на прерывание в процессор Cortex-A9. Когда процессор Cortex-A9 использует контроллер прерываний, а не устаревший вывод в устаревшем режиме, за счет включения собственного интерфейса процессора Cortex-A9, устаревший вывод nFIQ обрабатывается как другие линии прерывания и использует ID28- - person Nuetrino; 29.11.2013
comment
продолжение Так что я не могу использовать устаревшее прерывание, так как у меня есть контроллер прерываний, или есть способ обойти его? - person Nuetrino; 29.11.2013
comment
@Nuetrino Насколько я понимаю, вы можете использовать GIC и в устаревшем режиме, вы просто потеряете устаревшие прерывания с отображением выводов через GIC, вместо этого они будут идти напрямую. - person Luaan; 29.11.2013
comment
@Luaan Я думаю, что понял это. GIC можно установить в унаследованном режиме, установив некоторые биты в регистре ICCICR. Я это попробую. спасибо всем за комментарии. - person Nuetrino; 29.11.2013