关闭

大话PCIe:总线结构与配置空间

标签: PCIe
2254人阅读 评论(0) 收藏 举报
分类:

把有限的精力花在真正有价值的事情上。

每个PCIe设备都位于一个总线架构中(RC、SW和EP共同组成了一个PCIe网络),如何组织这些设备,以及如何访问这些设备呢?

一、网络拓扑与设备端口

上一篇已经讲到构成PCIe网络的三个角色:RC、SW和EP。其实这整个网络给人感觉就像乐高积木,上一级设备的下游端口接下级设备的上游端口,然后端口不但能看出链接状态,还提供包传输的链路。

这里有两个常见的概念:DSP(Down Stream Port)和USP(Upper Stream Port)。对每个功能设备来讲,用来连接上下游设备的端口统称为DSP或者USP。

整个网络的拓扑如图[1]所示

屏幕快照 2017-06-29 23.05.43.png

上面有这么多的设备,自然而然想到的第一个问题是:怎么来标记各个设备呢?答案是通过总线号和设备号。

举例如下:第一级RC所在的层级,定义为Bus 0,这个没有什么问题。那么下一级bus怎么定义的呢?通过bridge或者switch设备来定义,每个bridge或者switch代表一级bus。对于同样连接在RC上的bridge和switch,根据深度优先搜索来定义bus,譬如上图中,如果最下面的switch是RC上的第一个device,那么这个switch就代表了Bus 1。连在这个switch DSP上的设备都属于Bus 1。

关于总线,设备和功能:PCIe规范规定,一个PCIe设备网络中,最多支持256级Bus,每条Bus下面可以挂32个device,每个device最多拥有8个function。如果一个device存在,那么必须存在function 0。这样的话,通过Bus、Device和Function就能唯一匹配到特定的功能设备。

二、配置空间

上一节说到定义Bus的问题,根据深度优先搜索,我们知道了应该给每一级bridge分配的总线号,具体到操作上讲,其实就是往对应设备(一定是bridge或者switch)的配置空间的0x18位置写总线号。配置空间是针对function而言的,每个function都有其配置空间(说白了其实就是一堆配置寄存器)。

如果一个device是bridge或者switch,那么其function的配置空间[2]是这个样子的。

屏幕快照 2017-06-30 00.12.32.png

每个PCIe设备下的function都要实现4KB的配置空间,从设备内部地址0开始,注意这里是在设备内部的。因此访问PCIe配置空间不能通过直接读写系统总线实现,因为系统总线上看到的是CPU地址。在PCIe标准中,访问PCIe配置空间的是cfg tlp(configuration transaction layer packet)。cfg tlp又分为type 0和type 1,type 1用来访问PCIe桥,type 0访问端点设备。综上所述,要访问SW的配置空间,就要发起cfg type1 tlp;要访问EP配置空间,就要发起cfg type0 tlp。每种cfg tlp又分read(rd)和write(wr),排列组合一下,cfg tlp就有四种形式:type 0 rd、type 0 wr、type 1 rd、type 1 wr。

综合地址编码和配置空间的介绍,这里给出每个function在PCI域的配置基址:cfg_base[27:20] = Bus Number,cfg_base[19:15] = Device Number,cfg_base[14:12] = Function Number。

这里遗留了两个问题:

  1. 既然PCIe设备配置空间是内部的,和外部总线地址有什么关系呢?每个function在PCI域的配置地址是怎么被应用的?
  2. 如何发起cfg type0 tlp或者cfg tpe1 tlp?

这两个问题留待下篇文章解决吧。

下篇预告:PCIe地址空间与tlp

[1] PCI_Express_Base_Specification_Revision_4.0.Ver.0.3
[2] DWC_pcie_reference

2
0
查看评论

PCI/PCIe基础——配置空间

PCI/PCIe设备有自己的独立地址空间,这部分空间会映射到整个系统的地址空间。 映射地址在BIOS/UEFI下指定(如果有的话,对于使用非BIOS启动的OS,不清楚),它有两种类型,一种是MMIO,一种是IO。对于MMIO的访问,跟访问内存的方式一样,它从称为PCIEXBAR的基地址开始,有很大...
  • jiangwei0512
  • jiangwei0512
  • 2016-06-07 15:11
  • 14274

PCI/PCIe 的那些事(2)- 配置空间(Configuration Space)

PCI/PCIe配置空间(Configuration Space)PCI/PCIe的配置空间Configuration Space是一个与Memory空间和IO空间并列的独立的空间。 对Legacy PCI来讲,Configuration Space有256 Bytes 对于PCIe, Config...
  • huangkangying
  • huangkangying
  • 2016-01-23 17:38
  • 5614

PCIe学习笔记(8)--- 配置地址空间

1. PCI的配置空间,其实是一种标准 避免了以前使用跳线,而产生的中断,IO,MEMORY等资源的分配冲突 从而体现了Plug & Play的设计思想 2. 每一个FUNCTION对应一个CONFIGURATION ADDRESS SPACE 3. PCI-Compatible c...
  • u013140088
  • u013140088
  • 2017-03-12 12:52
  • 907

PCI/PCIE 配置空间导读(1)

PCI/PCIE配置空间按照寄存器的范围可以划分为两大部分。 1、PCI ConfigurationSpace 在PCI规范中,这部分的寄存器范围是从偏移量[0-255],共256字节。 PCI Configuration Space的寄存器,又可细分为以下两种类型, 1、PCI Configura...
  • yijingjijng
  • yijingjijng
  • 2015-08-29 09:46
  • 3033

Linux PCI/PCI-E设备配置空间读取与修改

Linux PCI/PCI-E设备配置空间读取与修改 1 前言  PCI和PCI Express,是计算机常使用的一种高速总线。操作系统中的PCI/PCI-E设备驱动以及操作系统内核,都需要访问PCI及PCI-E配置空间。PCI/PCI-E设备的正常运行,离不开PC...
  • gx19862005
  • gx19862005
  • 2015-03-31 16:50
  • 4060

PCIe 基础(一)操作配置空间

PCI配置空间PCI有三种地址空间:I/O空间,内存地址空间,PCI配置空间。在启动时bootloader 或者内核会遍历PCI总线并分配资源,如中断和内存,设备驱动程序通过PCI配置空间 找到资源分配。大小为256字节。 配置空间图:
  • KjfureOne
  • KjfureOne
  • 2016-07-17 10:25
  • 4312

PCI配置空间简介

一、PCI配置空间简介 PCI有三个相互独立的物理地址空间:设备存储器地址空间、I/O地址空间和配置空间。配置空间是PCI所特有的一个物理空间。由于PCI支持设备即插即用,所以PCI设备不占用固定的内存地址空间或I/O地址空间,而是由操作系统决定其映射的基址。 系统加电时,BIOS检测PCI总线...
  • zsf8701
  • zsf8701
  • 2012-08-01 12:29
  • 15656

PCIe配置空间和PCI设备中的寄存器

1、访问PCI配置空间,PCI基本配置空间的读写使用下列函数: 原型定义在 int pci_read_config_byte(struct pci_dev *pdev, int where, u8 *val); int pci_read_config_word(struct pci_dev ...
  • chengch512
  • chengch512
  • 2016-09-23 15:24
  • 3635

大话PCIe:BAR空间和TLP

上一篇文章中写到每个PCIe的function都有自己的configuration space,其实就是配置寄存器了(这个当然是要有的了,不然软件要怎么玩?只不过PCIe的配置寄存器要通过tlp才能去访问)。其实PCIe设备是有自己独立的一套内部空间,不仅仅是配置空间,包括每个设备提供哪些I/O地址...
  • abcamus
  • abcamus
  • 2017-07-02 20:28
  • 2615

PCIe学习笔记(11)--- 配置空间的读写请求

1. 有两种类型的读写请求 分别是TYPE 0与1 2 TYPE 0的REQUEST HEADER中 TYPE FIELD = 00100 TYPE 1的REQUEST HEADER中 TYPE FIELD = 00101 3. 读与写的区别在于: REQUEST HEADER的 FM...
  • u013140088
  • u013140088
  • 2017-03-13 11:20
  • 425
    个人资料
    • 访问:342413次
    • 积分:3524
    • 等级:
    • 排名:第11159名
    • 原创:127篇
    • 转载:5篇
    • 译文:3篇
    • 评论:29条
    博客专栏
    联系方式