Fork me on GitHub
侧边栏

PCIE BDF介绍

在PCIe地址中,0001:01:00.0 表示设备在PCIe总线上的位置。这个地址由四个部分组成:

  1. 域(Domain)0001 表示设备所在的PCIe域。域用于区分不同的PCIe根复合体(Root Complex)。
  2. 总线(Bus)01 表示设备所在的总线号。
  3. 设备(Device)00 表示设备号。
  4. 功能(Function)0 表示设备的功能号

一般默认配置iommu domain的时候为:

<0x100 &apps_smmu 0x1481 0x1>,

in the example above, 0x200, means Bus 2, device 0 and fun0. 0x301 means bus 3, device 0, func 1.

PCIe 请求者 ID(BDF)是通过总线号、设备号和功能号计算得出的:BDF = 总线号 << 8 + 设备号 << 3 + 功能号。如果我们想支持一个 PCIe switch,其拓扑结构如下:

# lspci -k
00:00.0 Class 0604: 17cb:010b
01:00.0 Class 0604: 1b21:1806
02:00.0 Class 0604: 1b21:1806
02:02.0 Class 0604: 1b21:1806
02:06.0 Class 0604: 1b21:1806
02:0e.0 Class 0604: 1b21:1806
03:00.0 Class 0200: 10ec:8125
05:00.0 Class 0200: 10ec:8168

我们需要计算所有 PCI 设备的 BDF(Bus-Device-Function)。例如,设备 02:0e.0 的 BDF 是:

0x2<<8+0xe<<3+0x0=0x270

对应的 iommu-map 的最终修改如下所示:

iommu-map = <0x0 &apps_smmu 0x1c80 0x1>,
<0x100 &apps_smmu 0x1c81 0x1>,
<0x200 &apps_smmu 0x1c82 0x1>,
<0x210 &apps_smmu 0x1c83 0x1>,
<0x230 &apps_smmu 0x1c84 0x1>,
<0x270 &apps_smmu 0x1c85 0x1>,
<0x300 &apps_smmu 0x1c86 0x1>,
<0x500 &apps_smmu 0x1c87 0x1>;
posted @ 2025-06-10 17:04  yooooooo  阅读(439)  评论(0)    收藏  举报