PCIE BDF介绍
在PCIe地址中,0001:01:00.0 表示设备在PCIe总线上的位置。这个地址由四个部分组成:
- 域(Domain):
0001表示设备所在的PCIe域。域用于区分不同的PCIe根复合体(Root Complex)。 - 总线(Bus):
01表示设备所在的总线号。 - 设备(Device):
00表示设备号。 - 功能(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>;


浙公网安备 33010602011771号