Какие шаги необходимы для обнаружения прерывания GPU на Raspberry Pi3?

#raspberry-pi3 #raspberry-pi2 #bare-metal

#raspberry-pi3 #raspberry-pi2 #голый металл

Вопрос:

Я пишу ядро с открытым исходным кодом, но прерывание, похоже, не запускается, когда регистр ПРЕРЫВАНИЙ EMMC становится ненулевым.

У меня два ядра работают на холостом ходу, а одно на EL3 без включенных кэшей данных, постоянно отображающих страницу памяти, чтобы увидеть, на что способен код, который я тестирую. (Тестовый код регулярно очищает свой кеш при рабочем миллисекундном прерывании QA7.)

Тестируемый код выполняется в защищенном EL0 на ядре 0 с включенными прерываниями. Прерывания перенаправляются на ядро 0:

 QA7.GPU_interrupts_routing = 0; // IRQ and FIQ to Core 0
  

Интерфейс EMMC инициализируется, и на карту отправляется команда сброса, после чего регистр ПРЕРЫВАНИЙ становится равным 1 (установлен бит 0: команда завершена), но прерывание GPU, похоже, не передается на аппаратное обеспечение QA7 (бит 8 в регистре источника прерываний Core 0 остается нулевым).).

Для регистров EMMC IRPT_MASK и IRPT_EN установлено значение 0x017f7137, которое, я думаю, должно включать все известные прерывания с этого периферийного устройства и, конечно же, бит 0.

Регистры прерываний BCM8235 были записаны так:

   Enable_IRQs_1 = 0x20000000; // (1 << 29);
  Enable_IRQs_2 = 0x02ff6800; // 0b00000010111111110110100000000000;
  Enable_Basic_IRQs = 0x303;
  

Но они считываются как:

   Enable_IRQs_1: 0x20000200 // (1 << 9) also set
  Enable_IRQs_2: 0x02ff6800 // unchanged
  Enable_Basic_IRQs: 0x3    // No interrupts from IRQs 1 or 2.
  

Что я пропустил?

(Помеченный raspberry-pi2, поскольку он также имеет компонент QA7.)

Ответ №1:

Простой ответ — не более того. Прерывание интерфейса Arasan SD имеет номер 62, бит 20 в IRQ basic pending регистре. Включите бит 30 IRQ pending 2 , и прерывание завершится.

 Enable_IRQs_2 = 0x42ff6800;
  

Мне просто пришлось проигнорировать совет: «В таблице выше много пустых записей. Их не следует включать, поскольку они будут мешать работе GPU «. в документации.