我为自定义板写了我的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 / interrupts
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.在ORELLY chapter 12中
当Linux启动时,计算机的固件已经为设备分配了一个唯一的中断号,驱动程序只需要使用它。中断号存储在配置寄存器60(PCI_INTERRUPT_LINE)中,该寄存器为一个字节宽。
但我没有任何BIOS,只有u-boot和dts。如何在启动时设置PCI_INTERRUPT_LINE寄存器?
你不需要设置它。它对设备没有影响。 BIOS让驱动程序知道如何配置中断是一种旧方法。
问题出在dtb上。我的处理器的pci接口的中断映射具有不正确的映射值。我在文档中更正了它。它现在有效。