Я пишу свой драйвер pcie для нестандартной платы. Я собираюсь использовать прерывание.
if(request_irq(dev->irq, pci_dma_irq, IRQF_SHARED | IRQF_TRIGGER_HIGH,
"PCIe sol_dma", dev)){
unit_err("request irq %d\n", dev->irq);
ret = 1;
}
# cat / proc / interrutps
CPU0 CPU1
16: 0 0 OpenPIC 16 Level [EDAC] L2 err
19: 2 0 OpenPIC 19 Level fsl-lbc
20: 0 0 OpenPIC 20 Level fsldma-chan
21: 0 0 OpenPIC 21 Level fsldma-chan
22: 0 0 OpenPIC 22 Level fsldma-chan
23: 0 0 OpenPIC 23 Level fsldma-chan
24: 0 0 OpenPIC 24 Level [PCI] PME, PCIe PME, [EDAC] PCI err
25: 0 0 OpenPIC 8 Level PCIe sol_dma
26: 4174986 0 OpenPIC 3 Level phy_interrupt
29: 0 0 OpenPIC 29 Level eth0_g0_tx
30: 0 32 OpenPIC 30 Level eth0_g0_rx
34: 0 0 OpenPIC 34 Level eth0_g0_er
Обработчик прерываний не вызывается. Регистр PCI_INTERRUPT_LINE (0x3c) равен 0.
В ОРЕЛЛИ главе 12
Ко времени загрузки Linux,
микропрограмма компьютера уже присвоила уникальный номер прерывания
устройство, и драйвер просто должен использовать его. Номер прерывания сохраняется в конфигурации
регистр рациона 60 (
PCI_INTERRUPT_LINE
), ширина которого составляет один байт.
Но у меня нет BIOS, только u-boot и dts. Как настроить регистр PCI_INTERRUPT_LINE во время загрузки?