Здравствуйте.
Взяв за основу кит sp605 (Spartan-6) сделано собственное железо. Отлажена работа под Linux на большом компьютере с PCIex1 разъемом.
Сделал переходник на разъем mini-PCIe и столкнулся с тем, что с моей платы драйвер не получает запросы на прерывания.
Устройство регистрируется, BAR читаются пишутся, а IRQ не проходят.
На PCIe работает, а на mini-PCIe нет... куда смотреть? Подключил к разъему на ноутбуке, тоже не работает.
Спасибо!
Для того что бы однозначно убедиться в том, что проблема где-то в железной реализации mini-PCIe и быть уверенным в настройках софта просто переставил винчестер с большого компьютера с PCIe на котором все работает
на маленький компьютер (Intel NUC D34010WYK) с mini-PCIe ну и переткнул туда свою железку. В итоге проблема с прерываниями не ушла все работает кроме прерываний.
Прерывания ни с какими больше устройствами не шарятся.
Для проверки в драйвере жестко задал свободное прерывание ret = request_irq (14, mydevice_isr, "mydevice", dev);
В выводе cat /proc/interupts вижу назначенное прерывание
CPU0 CPU1 CPU2 CPU3
14: 0 0 0 0 IO-APIC-edge mydevice
Создаю воздействие на мою железку - жму кнопку, что бы возникло прерывание.
Но ни одной сработки прерываний не происходит...
Функция static irqreturn_t mydevice_isr(int irq, void * devdata ) вообще не вызывается ни разу даже при инициализации драйвера.
Обмен данными через BAR продолжает нормально работать...
Переставляю винчестер и мой девайс на плату с большим PCIe - там все продолжает работать наряду с прерываниями...
Как хоть отследить где это прерывание теряется?
vilkin
Feb 11 2015, 09:26
Вроде разобрался, теперь работает и на PCIe и на mini-PCIe. Спасибо, вопрос снят!
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.