3.3 举个例子说说PCI如何知道手下的桥和设备的?


这是刨析PCIE协议的第14篇文章

内容简介

2024-01-01

    全文共862字,阅读大约需要4分钟,本文主要从原理上介绍PCI便利自己的拓扑结构的一个方法

 

01

HOST如何知道手下的桥和设备?

    根据上面的描述,大致也清楚了PCI结构,host是首领,PCI桥是传达室,PCI设备是干活的。这就类似于PCIE的RC、switch和EP这一套。

    如下图是一个关于PCI结构的范例,来自《PCIE体系结构导读》。首先思考一个问题,host主桥是如何知道有多少个PCI桥有多少个PCI设备的,也就是自身的拓扑结构?

    答案是CPU处理器会在系统 BIOS启动时引导完成,也可以由操作系统内核来完成,这个就看具体场景了。但整体的实现思路是一致的,就是通过DFS(Depth First Search)算法来遍历PCI总线树,这个遍历主要是对PCI桥的遍历,对所遍历的桥按序进行编号,这样就可以建立正确的总线拓扑结构。这个算法特点是深度优先,就是一条路走到黑再折回来。在具体实现中PCI桥会保存如下图这个三个信息:

1、Primary Bus Number :当前PCI桥的上游总线号

2、Secondary Bus Number :当前桥的总线号

3、Subordinate Bus Number:存放当前PCI子树中,编号最大的PCI总线号,也就是一个分支里面最深最靠下的总线号,但不一定是整个拓扑里面最大的。


02

具体的实现方法

    对于PCI来说,DFS算法是用来遍历所有PCI桥的,PCI设备会有其它方法来实现,具体操作上如下:

第一步

    HOST主桥扫描PCI总线0上的设备,比如上图由两个桥,首先发现PCI桥1,会将桥1的Secondary设为1,Primary设为0,

第二步

    HOST主桥接着扫描PCI桥1下面的总线,发现了PCI桥2,会将PCI桥1的Secondary设为2,Primary设为1。


第三步

HOST主桥接着扫描PCI桥2下面的总线,发现了PCI桥3,会将桥3的Secondary设为3,Primary设为2。

第四步

    HOST主桥接着扫描PCI桥3下面的总线,发现没有新总线了,就把PCI桥3的Subordinate设为3,并回退上一级,也就是PCI桥2继续扫描。


第五步

     HOST主桥接扫描PCI桥2发现只有已知的PCI桥3一个桥,那么将PCI桥2的Subordinate设为3,并回退扫描PCI桥1

image.png

欢迎关注公众号点击【资料下载】领取相关资料











快来扫描下方二维码关注公众号,领取站内所有相关资料,所有哦~

有建议、有需求、有疑问、联系我

<