IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux ARM平台开发系列讲解(PCIE) 2.13.5 PCIE的配置过程 -> 正文阅读

[系统运维]Linux ARM平台开发系列讲解(PCIE) 2.13.5 PCIE的配置过程

1. 概述

前两节介绍了PCI访问桥设备和非桥设备的方法,本节就讲述PCIE的配置过程

2. TLP事务层格式

2.1 Posted和Non-Posted

PCI总线规定了两类数据传送方式,分别是PostedNon-Posted数据传送方式。其中使用Posted数据传送方式的总线事务也被称为Posted总线事务;而使用Non-Posted数据传送方式的总线事务也被称为Non-Posted总线事务。

其中Posted总线事务指PCI主设备向PCI目标设备进行数据传递时,当数据到达PCI桥后,即由PCI桥接管来自上游总线的总线事务,并将其转发到下游总线。采用这种数据传送方式,在数据还没有到达最终的目的地之前,PCI总线就可以结束当前总线事务,从而在一定程度上解决了PCI总线的拥塞。

Non-Posted总线事务是指PCI主设备向PCI目标设备进行数据传递时,数据必须到达最终目的地之后,才能结束当前总线事务的一种数据传递方式。

由以上可以发现,Posted数据请求在通过PCI总线之后,将逐级释放总线资源,因此PCI总线的利用率较高。而使用Non-Posted方式进行数据传送的处理过程与此不同,Non-Posted数据请求在通过PCI总线时,并不会及时释放总线资源,从而在某种程度上影响PCI总线的使用效率和传送带宽。

2.2 TLP通用格式

  • 下图为TLP格式组成:
    在这里插入图片描述
    在这里插入图片描述
  • TLP Header 组成及其包内的FmtType解释如下:
    在这里插入图片描述
  • 类型(Type):读写内存、读写IO、读写配置 ,存放于Header里;
  • 地址:对于内存读写、IO读写,地址保存在Header
  • Bus/Dev/Function/Regiser:对于配置读写,这些信息保存在Header
  • 数据:对于内存读、IO读、配置读,先发出请求,再得到数据
    • 分为2个阶段:读请求报文、完成报文
    • 读请求报文:不含数据
    • 完成报文:含数据

在这里插入图片描述

3. PCIe配置过程

3.1 PCIe设备的访问的访问方法

  • 通常如下图,在CPU通过addr_cpu地址访问到PCIE控制器,PCIE控制器再通过addr_pcie地址去访问PCIE桥设备,PCIE桥设备再通过各自端口分配的地址去访问外挂的PCIE设备,但是,这是在PCIE配置初始化后的访问方式,在没有初始化的时候,是如何访问的呢?接下来会展开讲解。
    在这里插入图片描述

3.2 配置与RC直连的设备

在这里插入图片描述

  • RCRoot Complex)本身就是一个桥,要去访问跟桥直接相连的设备,用CfgRd0类型的TLP
  • FmtType取值为0b00, 0b00100,表示:Configuration Read Type 0
  • TLP中设置有"Bus/Device/Funciton/Register"
  • 提问:上图红圈中是设备,怎么知道它自己的Bus号是0Device分别是0、1、2
    • 红圈中的设备都是在RC内部,它们的Device号是硬件里写死的(hard-coded)
    • 当这些设备监测到Bus0上的TLPCfgRd0后,忽略TLP中的Bus,比对TLP中的Device
    • 如果Device吻合,就回应TLP

4. PCIe配置示例

4.1 PCIe设备的配置寄存器

  • PCI/PCIe设备、桥,它们的配置寄存器前面若干字节格式是一样的,可以从里面的"Header Type"分辨:
    • 它是普通设备,还是桥
    • 它是单功能设备,还是多功能设备:所谓功能,就是Function,一个物理设备可以有多个功能,也就有多个逻辑设备

在这里插入图片描述

  • 一般的PCI/PCIe设备,它的配置寄存器格式如上上图的"Type 0 Header",在PCIe系统中这类设备被称为EndpointPCI/PCIe桥,它的配置寄存器格式如上上图的"Type 1 Header",对于PCI/PCIe桥,里面的由三项重要的总线号:
    在这里插入图片描述

    • Pirmary Bus Number:上游总线号
    • Secondary Bus Number:自己的总线号
    • Subordinate Bus Number:下游总线号的最大数值

这些总线号示例如下:
在这里插入图片描述

  • Type Header里面有个Type参数,他就是设置PCI的访问方式,前几章节也提到过,这里针对PCIE再展开分析。

  • Type 0 Configuration Request
    如果要配置的设备,就在当前总线上,即目标设备的Bus号等于当前桥的Secondary Bus Number,那么在当前总线(即Secondary Bus Number)上传输的就是"Type 0 Configuration Request": TLP格式如下图所示, Type0 不会穿过桥,直接访问设备。

在这里插入图片描述

  • Type 1 Configuration Request
    如果要配置的设备,不在当前总线上,但是在它下面的总线上,即:
    ①目标设备的Bus号大于当前桥的Secondary Bus Number,②目标设备的Bus号小于或等于当前桥的Subordinate Bus Number,那么在当前总线(即Secondary Bus Number)上传输的就是"Type 1 Configuration Request":TLP格式如下图所示,Type1设备会穿过桥,到达设备时,跟设备直接连接的桥会把它转换为"Type 0 Configuration Request"

在这里插入图片描述

4.1 配置过程示例

4.1.1 硬件拓扑结构

以下图中的设备的配置过程为例,给大家做示范。
在这里插入图片描述

4.1.2 配置过程演示

下文中BDF表示Bus,Device,Function,用这三个数值来表示设备。

  1. 软件设置Host/PCI Bridge的Secondary Bus Number0Subordinate Bus Number255(先设置为最大,后面再改)。
  2. 从Bus 0开始扫描:先尝试读到BDF(0,0,0)设备的Vendor ID,如果不成功表示没有这个设备,就尝试下一个设备BDF(0,1,0)。一个桥下最多可以直接连接32个设备,所以会尝试32次:Device号从031注意:在Host/PCI Bridge中,这些设备的Device号是硬件写死的。
  3. 步骤2读取BDF(0,0,0)设备(即使图中的A)时,发现它的Header Type01h,表示它是一个桥、单功能设备
  4. 发现了设备A是一个桥,配置它:
    • Primary Bus Number Register = 0:它的上游总线是Bus0
    • Secondary Bus Number Register = 1:从它发出的总线是Bus1
    • Subordinate Bus Number Register = 255:先设置为最大,后面再改
  5. 因为发现了桥A,执行"深度优先"的配置过程:先去枚举A下面的设备,再回来枚举跟A同级的B
  6. 软件读取BDF(1,0,0)设备(就是设备C)的Vendor ID,成功得到Vendor ID,表示这个设备存在。
  7. 它的Header Type01h,表示这是一个桥、单功能设备。
  8. 配置桥C
    • Primary Bus Number Register = 1:它的上游总线是Bus 1
    • Secondary Bus Number Register = 2:从它发出的总线是Bus 2
    • Subordinate Bus Number Register = 255:先设置为最大,后面再改
  9. 继续从桥C执行"深度优先"的配置过程,枚举Bus 2下的设备,从BDF(2,0,0)开始
  10. 读取BDF(2,0,0)设备(就是设备D)的Vendor ID,成功得到Vendor ID,表示这个设备存在。
  11. 它的Header Type01h,表示这是一个桥、单功能设备。
  12. 配置桥D:
    • Primary Bus Number Register = 2:它的上游总线是Bus 2
    • Secondary Bus Number Register = 3:从它发出的总线是Bus 3
    • Subordinate Bus Number Register = 255:先设置为最大,后面再改
  13. 继续从桥D执行"深度优先"的配置过程,枚举Bus 2下的设备,从BDF(3,0,0)开始
  14. 读取BDF(3,0,0)设备的Vendor ID,成功得到Vendor ID,表示这个设备存在。
  15. 它的Header Type80h,表示这是一个Endpoing、多功能设备。
  16. 软件枚举这个设备的所有8个功能,发现它有Function01
  17. 软件继续枚举Bus 3上其他设备(Device1~31),没发现更多设备
  18. 现在已经扫描完桥DBus 3下的所有设备,它下面没有桥,所以桥DSubordinate Bus Number等于3。扫描完Bus 3后,回退到上一级Bus 2,继续扫描其他设备,从BDF(2,1,0)开始,就是开始扫描设备E
  19. 读取BDF(2,1,0)设备(就是设备E)的Vendor ID,成功得到Vendor ID,表示这个设备存在。
  20. 它的Header Type01h,表示这是一个桥、单功能设备。
  21. 配置桥E
    • Primary Bus Number Register = 2:它的上游总线是Bus 2
    • Secondary Bus Number Register = 4:从它发出的总线是Bus 4
    • Subordinate Bus Number Register = 255:先设置为最大,后面再改
  22. 继续从桥D执行"深度优先"的配置过程,枚举Bus 4下的设备,从BDF(4,0,0)开始
  23. 读取BDF(4,0,0)设备的Vendor ID,成功得到Vendor ID,表示这个设备存在。
  24. 它的Header Type00h,表示这是一个Endpoing、单功能设备。
  25. 软件继续枚举Bus 4上其他设备(Device1~31),没发现更多设备
  26. 已经枚举完设备EBus 4下的所有设备了,更新设备ESubordinate Bus Number4。然后继续扫描设备E的同级设备:Bus=2Device231,发现Bus 2上没有这些设备。
  27. 软件更新设备CBus 2的桥,把它的Subordinate Bus Number设置为4。然后继续扫描设备C的同级设备:Bus=1Device131,发现Bus 1上没有这些设备。
  28. 软件更新设备ABus 1的桥,把它的Subordinate Bus Number设置为4。然后继续扫描设备A的同级设备:Bus=0Device131,发现Bus 0上的设备B
  29. 配置桥B
    • Primary Bus Number Register = 0:它的上游总线是Bus 0
    • Secondary Bus Number Register = 5:从它发出的总线是Bus 5
    • Subordinate Bus Number Register = 255:先设置为最大,后面再改
  30. 再从桥B开始,执行"深度优先"的配置过程。

返回总目录

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-08-06 11:16:52  更:2022-08-06 11:18:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 0:08:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码