PCIe PIC_INTERRUPT_PIN(0x3c)为0

问题描述 投票:0回答:2

我为自定义板写了我的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寄存器?

embedded-linux interrupt pci-e
2个回答
1
投票

你不需要设置它。它对设备没有影响。 BIOS让驱动程序知道如何配置中断是一种旧方法。


0
投票

问题出在dtb上。我的处理器的pci接口的中断映射具有不正确的映射值。我在文档中更正了它。它现在有效。

© www.soinside.com 2019 - 2024. All rights reserved.