主题中讨论的其他器件:OMAP-L138、 AM5726、 BeagleBoard-X15、 TPD12S015
工具/软件:Linux
很抱歉耽误你的时间、我现在只能再次讨论这个问题。
我在中添加了一些调试打印件
__pci_restore_msi_state
的功能
drivers/pci/msi.c
在唤醒期间调用的函数:
静态空__pci_restore_msi_state (struct pci_dev *dev)
{
U16控制;
struct msi_desc *条目;
printk (Kern_ERR "__pci_restore_msi_state dev bus: 0x%02x %s 供应商:0x%02x 设备:0x%02x 资源:0x%08x\n",dev->bus->number,dev->bus->name,dev->vendor,dev->device, (Int)(dev->bus->resources[0]);
+/- 4行:如果(!dev->msi_enabled){-----------------------------------------------------------
printk (Kern_ERR "IRQ_GET_msi_desc、dev:%p、dev->IRQ:%p\n"、dev、dev->IRQ);
条目= IRQ_GET_msi_desc (dev->IRQ);
printk (Kern_ERR "int:%i\n",dev->IRQ);
printk (Kern_ERR "PCI_INTx_for_msi\n");
PCI_INTx_for_msi (dev、0);
PCI_msi_set_enable (dev、0);
arch_restore_msi_IRQ (dev);
printk (Kern_ERR "pci_read_config_worm\n");
PCI_READ_CONFIG_WORD (dev、dev->msi_cap + PCI_MSI_FLAGS、&CONTROL);
printk (Kern_ERR "msi_mask_IRQ:%p\n"、entry);
MSI_MASK_IRQ (条目、msi_MASK (条目->msi_attrib.multi_cap)、
entry->masked);
CONTROL &=~PCI_MSI_FLAGS_QSIZE;
control |=(entry->msi_attrib.multiple <<4)| PCI_MSI_FLAGS_ENABLE;
printk (Kern_ERR "pci_write_config_worm\n");
这将产生以下输出:
[1641.716315] SD 0:0:0:0:[SDA]正在同步 SCSI 高速缓存
[1641.721663] SD 0:0:0:0:[SDA]正在停止磁盘
[1641.750497] PM:35.630ms 后设备挂起完成
[1641.759764] PM:3.366毫秒后器件延迟挂起完成
[1641.766284]__PCI_msi_desc_mask_IRQ
[1641.769787] desc->已屏蔽
[1641.772329] PCI_msi_ignore_mask
[1641.775527]__PCI_msi_desc_mask_IRQ
[1641.779027] desc->已屏蔽
[1641.781569] PCI_msi_ignore_mask
[1641.787718] PM:21.706毫秒后设备挂起完成
[1645.033410]__PCI_RESTORE_msi_state dev 总线:0x00 供应商:0x104c 设备:0x8888资源:0x00000000
[1645.042889]__PCI_RESTORE_msi_state dev 总线:0x00 供应商:0x104c 设备:0x8888资源:0x00000000
[1645.042892] IRQ_GET_msi_desc
[1645.042895] int:407
[1645.042897] PCI_INTx_for_msi
[1645.042906] PCI_READ_CONFIG_WORD
[1645.042909] msi_mask_IRQ:ee13b740 '中断 nr 407的一切正常'
[1645.042911]__PCI_msi_desc_MASK_IRQ
[1645.042913] desc->已屏蔽
[1645.042914] PCI_msi_ignore_mask
[1645.042916] PCI_WRITE_CONFIG_WORD
[1645.080124] IRQ_GET_msi_desc
[1645.083015] int:406
[1645.085395] PCI_INTx_for_msi
[1645.088292] PCI_READ_CONFIG_WORD
[1645.091535] msi_mask_IRQ: (空) 'null-pointer for IRQ 406
[1645.094954]无法在虚拟地址00000028处处理内核 NULL 指针解除引用
[1645.103092] PgD = c0003000
[1645.105822][00000028]* PgD=80000080004003、* PMD=00000000
[1645.111266]内部错误:Oops:207 [#1]抢占 SMP ARM
简而言之、就是功能
条目= IRQ_GET_msi_desc (dev->IRQ);
返回 IRQ 406的空指针
以下是一些进一步的信息:
Cat /proc/interrupts 退货:
。
374: 0 0 PCI-MSI 0 Edge PCIe PME、aerdrv
407: 0 0 PCI-MSI 0 Edge PCIe PME、aerdrv
root@tqma574x-mba57xx:/sys/devices/platform/44000000.ocp/44000000.ocp:axi@0/51000000.PCIe/pci0000:00/0000:00:00.0# cat IRQ
406.
root@tqma574x-mba57xx:/sys/devices/platform/44000000.ocp/44000000.ocp:axi@0/51000000.PCIe/pci0000:00/0000:00:00.0/msi_ir QS# ls
374.
root@tqma574x-mba57xx:/sys/devices/platform/44000000.ocp/44000000.ocp:axi@1/518000.PCIe/pci0001:00/0001:00:00.0# cat IRQ
407.
root@tqma574x-mba57xx:/sys/devices/platform/44000000.ocp/44000000.ocp:axi@1/518000.PCIe/pci0001:00/0001:00:00.0/msi_IRQs# ls
407.
PCIe 和 msi IRQ 号似乎存在相互不对应的问题。
不确定这是怎么发生的。
在我们的器件树中、我们仅启用状态为"正常"的相关器件节点、而不会在此处接触到任何 IRQ 释放的内容。
/* PCIe 通道0 PCIe x4连接器*/
pcie1_rc{(&P)
状态="正常";
};
/* PCIe 通道1 mPCIe 连接器*/
&PCIe2_RC{
状态="正常";
/*未放置 PCIe 重置 R532 */
};
PCIe2_phy{
状态="正常";
};
AXI@1{
状态="正常";
请参阅附加到初始线程的 DTS 文件。
PCIe 通道2之前是否在 TI 或自定义电路板上进行过测试? 我在公共存储库中找不到任何东西。
如果是、在这种情况下、器件树的外观如何?