![是否有可能自行获取 PCIe 端点设备上的 PCIe 总线/设备/功能编号?](https://linux22.com/image/1615957/%E6%98%AF%E5%90%A6%E6%9C%89%E5%8F%AF%E8%83%BD%E8%87%AA%E8%A1%8C%E8%8E%B7%E5%8F%96%20PCIe%20%E7%AB%AF%E7%82%B9%E8%AE%BE%E5%A4%87%E4%B8%8A%E7%9A%84%20PCIe%20%E6%80%BB%E7%BA%BF%2F%E8%AE%BE%E5%A4%87%2F%E5%8A%9F%E8%83%BD%E7%BC%96%E5%8F%B7%EF%BC%9F.png)
我正在使用基于 Synopsys PCIe EP IP 的 PCIe EP 设备,并在其上运行 Linux。连接到 Linux 主机时,在主机上我可以从 lspci 和 Linux 驱动程序获取总线/设备/功能编号以定位设备。
我的问题是,有没有办法从 EP 端获取总线/设备/功能编号?我能想到的一种可能性是,由于总线/设备编号是在 BIOS 枚举时确定的,PCIe 规范是否要求将总线/设备信息写回到设备配置空间的某个地方?我正在阅读规范,但它很长,还没有找到任何东西。
一种方法是让主机 PCIe 驱动程序将数字传递给 EP,以便 EP 上的端点功能驱动程序可以读取它。这当然有效,但我想知道有没有办法在不涉及驱动程序传递的情况下获取信息。
谢谢!
答案1
搜索并询问后,这个问题得到了解决:在 PCIe 规范中没有找到任何可以通过标准方式获取此信息的东西,但是 Synopsys PCIe 端点 IP 确实在 APB 从属寄存器中提供了总线/设备号的字段。
它对于 SW 来说是只读的,可以读取正确的总线号。也许它用 RTL 中主机 BIOS 的真实数字填充,尽管我无法验证这个猜测。
谢谢。