pcie枚举过程

在 PCIe 枚举过程中,ECAM(Enhanced Configuration Access Mechanism) 是一种用于访问设备的 PCI 配置空间 的机制。在每个设备的配置空间中,系统通过 ECAM 访问设备的配置信息,并完成设备枚举与资源分配。对于你的例子(RC 有两个 Root Port,每个 Root Port 各挂载一个 Endpoint),ECAM 基址的分配是操作系统或固件的一部分,在系统启动时由固件(如 BIOS 或 UEFI)来设定和管理。

ECAM(配置空间)简介:

  • ECAM 提供了一种线性映射机制,用于访问 PCIe 设备的 配置空间。ECAM 允许访问设备的标准配置空间(前 256 字节)和扩展配置空间(最高可达 4KB)。
  • ECAM 机制通过内存映射的方式将配置空间映射到物理内存地址空间中,系统通过这些物理地址来访问每个设备的配置空间。

ECAM 基址分配的流程

  1. Root Complex 提供 ECAM 基址范围

    • 在系统启动时,Root Complex(RC) 或固件(BIOS/UEFI)会为 PCIe 配置空间预留一段物理内存地址空间,这段地址空间专门用于 ECAM 映射。
    • RC 负责为整个 PCIe 拓扑提供 ECAM 空间,包括挂载在 RC 上的所有设备和桥的配置空间。
    • 这段 ECAM 地址空间一般是由硬件提供的,是固定的物理内存区域。在一些系统中,固件会提供一个全局的 ECAM 基地址,而不同设备的配置空间通过偏移和总线号、设备号、功能号来访问。
  2. 地址空间分配和结构

    • ECAM 基址空间是以 总线号设备号 和 功能号 的方式组织的。ECAM 提供了一种直接访问设备配置空间的方法,通过如下格式来计算配置空间地址:

      mathematica

      ECAM_BASE + (Bus Number << 20) + (Device Number << 15) + (Function Number << 12) + Register Offset

      • Bus Number:标识 PCIe 总线号(例如 Bus 0, Bus 1, Bus 2 等)。
      • Device Number:标识每个总线上的设备号(0 到 31)。
      • Function Number:标识每个设备上的功能号(0 到 7)。
      • Register Offset:标识配置空间中的寄存器地址(每个功能的配置空间最多 4KB)。
  3. 固件分配 ECAM 基址

    • 固件(如 BIOS 或 UEFI)在系统启动时会为 PCIe ECAM 地址空间分配一个全局的 ECAM 基地址
    • 该地址空间的大小通常取决于系统中支持的总线数目、设备数目以及每个设备的功能数。
    • 例如,假设系统支持 256 个总线,每个总线上有 32 个设备,每个设备最多有 8 个功能,且每个功能的配置空间为 4KB,则所需的 ECAM 地址空间为:


      256 个总线 × 32 个设备 × 8 个功能 × 4KB = 256MB

  4. 为不同设备分配 ECAM 地址:(假设rc有2个rp,每个rp下挂1个ep为例子)

    • 假设 ECAM 基址被设置为 0x80000000。系统可以通过如下方式计算每个设备的 ECAM 地址:
      • 对于总线 0 上的设备(Root Ports):
        • RP1 的 ECAM 地址为:0x80000000 + (0 << 20) + (0 << 15) + (0 << 12),即 0x80000000
        • RP2 的 ECAM 地址为:0x80000000 + (0 << 20) + (1 << 15) + (0 << 12),即 0x80008000
      • 对于 RP1 下的 Endpoint(EP1):
        • EP1 被分配在总线 1,其 ECAM 地址为:0x80000000 + (1 << 20) + (0 << 15) + (0 << 12),即 0x80100000
      • 对于 RP2 下的 Endpoint(EP2):
        • EP2 被分配在总线 2,其 ECAM 地址为:0x80000000 + (2 << 20) + (0 << 15) + (0 << 12),即 0x80200000
  5. 操作系统通过 ECAM 访问配置空间

    • 当操作系统或固件需要访问一个设备的配置空间时,它会根据总线号、设备号、功能号计算出该设备的物理地址,并直接通过内存访问设备的配置寄存器。
    • 例如,操作系统可以通过计算出的 ECAM 地址 0x80100000 来访问总线 1 上 EP1 的配置空间,并读取其 Vendor IDDevice ID 以及其他信息。
  6. 枚举过程从设备号 0 开始,逐个扫描设备号,直到遇到一个没有设备存在的设备号为止,从而得知总线 0 上挂载的设备数量。在你的例子中,系统扫描到设备号 2 时没有设备存在,因此得知总线 0 上只有 2 个 Root Port。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值