PCIE体系结构基础

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/maxwell2ic/article/details/89743803

PCIe体系结构的基本概念:

  1. 了解PCIE的体系结构首先要了解PCI总线的结构,PCI总线中的HOST主桥用于连接隔离转换存储器域地址和PCI总线域地址;PCI总线中的主从设备统称为Agent设备;PCI桥作为一种特殊的PCI设备,每个HOST主桥管理一个PCI总线树,每个PCI桥扩展一个PCI总线,与HOST主桥直接相连的为总线0.
  2. PCIE体系结构中虽然没有物理存在的PCI桥,但是其概念对于理解PCIE的结构具有重要意义。
  3. RC中首先是一个虚拟PCI桥用于分离存储器域和PCI总线域,同时该虚拟桥在RC中拓展出总线0;
  4. 因为PCIE是穿行端到端传输,所以必须有switch才能扩展PCIE总线,switch内部具有一个上游端口和多个下游端口,switch内部有多个PCI-to-PCI桥连接在一条虚拟PCI总线上组成,每个端口都对应一个虚拟PCI桥;
  5. 因为PCIE总线中每个端口就是一个虚拟PCI桥,都会产生一条新的PCI总线,又因为PCIE的穿行端到端传输方式导致该总线上只会有一个EP,所以在PCIE体系结构中设备号的概念不再那么有用,对于ARI设备(最大支持256个function)的路由ID就只由总线号和function号确定;
  6. function是指一个设备中由一个单独分配了function number号的配置空间所代表的一组逻辑功能,在PCIE总线拓扑中,一个设备可以认为是一个或几个function,ARI设备最大支持256个function,non-ARI设备最大支持8个function,每个function最大配置空间为4K(PCI设备基本配置空间为64bytes,PCIE设备用扩展的空间存放PCIE设备独有的capability结构)

PCIe上电初始化做枚举的过程

  1. 分配总线号
    Acpi_pci_link_init()
    Pci_acpi_scan_root() 创建总线树
    Pci_scan_child_bus() DFS算法递归调用该函数对总线做枚举
    Pci_add_new_bus() 分配总线号:从上向下遍历时,分配桥设备配置空间中的primary bus号(桥的上游总线号)和secondary bus号(下游总线),在某一条分支上遍历到最深的总线并且没有其他PCI桥之后,在返回上一级总线遍历时,再配置该桥设备的subordinate bus号(该总线子树种数值最大的总线号)
    Pci_add_devices() 枚举完桥设备之后再枚举EP
  2. 检查BAR空间,并初始化配置空间
    系统上电时,PCIE设备会将ROM中的信息读取并存到配置空间的BAR寄存器中,作为初始值,该值为PCIE设备需要使用的BAR空间的大小
    Pci_subsys_init()
    Pcibios_allocate_bus_resources() 首先DFS算法检查分配PCI总线树种所有PCI桥使用的系统资源
    Pci_find_parent_resource() 获取上游PCI桥所管理的空间资源范围
    Request_resources() 为当前PCI设备分配地址空间
    Pci_assign_resources() 设置EP配置空间中的BAR寄存器,填入的值为该function在PCI总线域中使用的地址空间的基地址
    Pci_setup_bridge() 某个总线下所有设备BAR空间分配之后,将初始化该总线桥的配置空间中的memory base寄存器(该总线子树下所有设备使用的PCI总线域地址空间的基地址)和memory limit寄存器(总线子树使用的总地址空间的大小)
    Pci_enable_bridge() pci_enable_device() DFS枚举之后使能所有设备
    至此完成PCIe总线的上电初始化枚举过程。

PCIe的三种中断方式

  1. 在PCIe总线中,MSI/MSI-X中断机制使用存储器写请求TLP(基于地址路由)向处理器提交中断请求。INTx中断机制使用Message报文提交中断(implicit路由)
  2. PCIe设备提交MSI/MSI-X中断请求时,都是向MSI/MSI-X capability结构中的message address地址写message data数据,从而组成一个存储器写TLP,向中断控制器写中断请求,然后中断控制器向CPU提交中断后,再由CPU进行处理。
  3. MSI-X中断机制和MSI中断机制类似,主要是用于扩展PCIe设备使用中断向量的个数(MSI中断最初能使用32个中断向量),同时解决MSI中断机制中要求中断控制器分配给该设备的中断向量号连续的问题
  4. PCIe设备还支持传统的INTx中断机制用于兼容老旧的PCI设备,但PCIe桥收到PCI设备的INTx信号后,并不能将其直接转换为MSI/MSI-X中断报文,因为INTx中断请求机制是电瓶触发,而MSI/MSI-X中断机制是边沿触发,这种边沿触发机制可以避免某个优先级别较高的设备一直占据中断源。
  5. Switch或者RC的downstream端口随时监测INTABCD4个虚拟中断连接线的状态,只要有变化upstream就要更新

猜你喜欢

转载自blog.csdn.net/maxwell2ic/article/details/89743803
今日推荐