欢迎来到亿配芯城! | 免费注册
你的位置:STC宏晶半导体全系列-亿配芯城 > 芯片资讯 > Linux内核PCIE基础知识整理
Linux内核PCIE基础知识整理
发布日期:2024-01-16 07:39     点击次数:91

作者:小田BSP

一、PCI总线

在PC时代,为了解决CPU主频和外部设备访问速度的问题,发展了几代I/O总线:

1、第一代总线:ISA、EISA等

2、第二代总线:PCI、PCI-X等

3、第三代总线:PCIE、mPCIE、m.2等

PCI(Peripheral Component Interconnect),外部设备互联,Intel公司提出,主要功能是连接外部设备。PCI引脚如下:

9f829210-b0fe-11ee-8b88-92fbcf53809c.jpg

PCI引脚

PCI总线特点如下:

1、PCI总线是并行总线,有32/64根地址线,地址和数据都是通过这32/64根地址线进行传输,分时复用

2、PCI总线上可同时挂载多个设备,设备分为主设备和从设备。主设备一般是主控芯片PCI控制器,需要负责PCI总线上的仲裁

3、PCI设备共享总线,通过片选引脚、地址范围、总线号、设备号、功能号等机制来确定当前和哪个设备通信。

4、PCI总线通信大致分为:配置阶段和地址访问阶段。

5、配置阶段:PCI总线控制器依次扫描连接在PCI总线上的所有设备,访问设备的配置空间,知道设备的类型、要申请的资源,然后给设备分配总线号、设备号、功能号、地址空间,并写进设备的配置空间。

6、地址访问阶段:在配置阶段,给每个PCI设备分配PCI地址范围,并写进设备寄存器,以后设备会监听地址线,当监听到地址线上传输的地址是自己的地址范围,就会处理。

7、PCI采用同步时序协议,信号线里有clk时钟线。

8、PCI有三个相互独立的物理地址空间:内存地址空间、I/O地址空间和配置空间。配置空间是PCI特有的一个物理空间,PCI设备支持即插即用。

9、PCI总线规范定义的配置空间总长度为256字节,前64字节的配置空间称为配置头,对于所有的设备都一样。配置头的主要功能是用来识别设备、定义主机访问PCI卡的访问方式(I/O访问或者存储器访问,还有中断信息),其余192字节称为本地配置空间(设备有关区),主要定义卡上局部总线的特性、本地空间基地址和范围等。

9f9874f4-b0fe-11ee-8b88-92fbcf53809c.png

其中:

1)Vendor ID:厂商ID,FFFFh是一个非法厂商ID,根据它判断PCI设备是否存在。

2)Device ID:设备ID,某厂商生产设备的ID,驱动根据Vendor ID和Device ID找对应驱动程序。

3)Base Address0 ~ 5:简称BAR寄存器,保存PCI设备使用的PCI总线域的基地址。PCI设备复位后,BAR寄存器存放的是设备需要使用的地址空间大小、类型(I/O或MEM),如果是MEM则是否可预取(Prefectchable是否为1)

9f9c39ea-b0fe-11ee-8b88-92fbcf53809c.png

4)IRQ Line:IRQ 编号,支持管理24个中断。

5)IRQ Pin:中断引脚,PCI有4个中断引脚,该寄存器表示该设备连接的是哪个引脚。

PCI枚举过程:尝试所有的BUS/DEV/FUNC组合,判断厂商ID是否为FFFFh。

访问配置空间方法:

通过访问0xCF8h/0xCFCh端口实现。

1)0xCF8h:CONFIG_ADDRESS,PCI配置空间地址端口。CONFIG_ADDRESS寄存器格式:

31: Enable位

23~16:总线号

15~11:设备号

10~8:功能号

7~2:配置空间寄存器编号

1~0:0

9f9ff1fc-b0fe-11ee-8b88-92fbcf53809c.jpg

2)0xCFCh:CONFIG_DATA,PCI配置空间数据端口。

二、PCIE介绍

PCIE(PCI Express)是在PCI的基础上发展而来,是目前PC和嵌入式系统中最常用的高速总线,PCIE与PCI是软件向后兼容,PCI的系统软件可以用在PCIe系统中。

PCIE采用的是树形拓扑结构,体系架构包括:root complex,switch、bridge和endpoint等类型的PCIE设备组成。PCIE总线拓扑结构如下:

9fb00722-b0fe-11ee-8b88-92fbcf53809c.png

Root Complex:根复合体,简称RC,CPU和PCIE之间的接口。RC位于PCIE倒立拓扑的根,并代表CPU与系统的其余部分进行通信。PCIE端口在配置空间中被标记为根端口。

Bridge:桥提供了与其他总线(如:PCI或PCI-X)的接口,允许旧的PCI或PCI-X卡插入新系统。反向桥接允许一个新的PCIE卡插入一个旧的PCI系统。

Switch:提供扩展或聚合能力, 亿配芯城 允许更多的设备连接到一个PCIE端口。充当包路由器,根据地址或其他路由信息识别给定包需要走哪条路径。是一种PCIE转PCIE的桥。

Endpoint:PCIE总线系统拓扑结构中的最末端,一般作为总线操作的发起者(initiator)或终结者(Completes)。Endpoint只能接受来自上级拓扑的数据包或向上级拓扑发送数据包。

PCIe插槽集中在PCIex1/x4/x8/x16四种上。

1)PCIex1插槽的长度是最短的,数据针脚14个。主要用途:独立网卡、独立声卡和USB3.0/3.1扩展卡。

2)PCIex4和x8插槽一样,现在多数做成PCIex16插槽,或扩展为M.2接口,用于安装M.2 SSD、M.2无线网卡。

3)PCIex8,为了兼容性PCIex8插槽通常做成PCIex16插槽的形式,但数据针脚只有一半是有效的。

4)PCIex16插槽主要用于显卡以及RAID阵列卡,向下兼容x1/x4/x8级别的设备。

在PCI总线中,所有需要提交中断请求的设备,必须能通过INTx引脚提交中断请求,MSI机制是一个可选机制。而PCIE总线中,PCIE设备必须支持MSI或MSI-X中断请求机制,而可以不支持INTx中断消息。

在PCIE总线中,MSI和MSI-X中断机制使用存储器写请求TLP向处理器提交中断请求。

三、PCIE地址空间

PCIE有三种主要的地址空间:memory-space,IO space和configuration space。

1)Memory space:数据存储内存空间(refetchable 和 Non-Prefetchable Memory Space)

2)IO Space:用于访问IO设备的内部寄存器/存储,已被MMIO机制代替,访问方式和Memory相同,且也分(refetchable 和 Non- Prefetchable Memory range)

3)Configuration Space:配置空间,通过bar寄存器控制Memory space映射

9fb45ebc-b0fe-11ee-8b88-92fbcf53809c.jpg

四、PCI和PCIE差异

1) 颜色

PCI接口通常是白色,PCIE接口一般用其他颜色。

2) 长度

PCIE接口要比PCI接口长。

3) 兼容性

PCIE在软件层面上兼容目前的PCI技术和设备。

4) 速度

PCI的工作频率:33MHZ和66MHZ,最大吞吐率264MB/s(66MHZ*32BIT/8)。

PCI-X的工作频率:66MHZ/100MHZ和133MHZ,最大吞吐率1064MB/s(133MHZ*64BIT/8)。

5) 传输方式

PCI是并行数据传输,一次传输4/8字节,半双工。

PCIE是串行数据传输,全双工。

6) 硬件

PCI信号是普通电平。

PCIE信号是差分电平。

7) 链路

PCI是总线的连接方式。

PCIE是点对点的连接方式。

8) 编码方式

PCIE gen1和gen2采用8bit/10bit编码方式,gen3以后采用128b/130b的编码方式。

9) Inbound和outbound

PCIE设备和系统内存相互访问时,outbound是指CPU到设备方向;inbound是指device到RC(CPU端)方向。CPU读写RC端的寄存器时,属于偏上系统的范围,不属于inbound或outbound。

10)PCI配置空间

PCI设备拥有256B的配置空间,PCIE还提供了另外4KB的扩展。256B的配置空间中前64B是规范的,其他是各厂商自己定义的。

PCI设备地址:

10.1)总线号:厂家ID

10.2)设备号:设备ID

10.3)功能号:设备类

11) PCIE配置空间

PCIE一共支持256条bus,32个dev和8个fun,和PCI相同。

PCIE设备发展向前兼容PCI,每个设备的配置空间前256B是PCI空间,后(4K-256)B的空间是PCIE控制空间。

Linux用同一套驱动代码处理PCI和PCIE驱动,只需要在配置、传输等底层操作去区分两种总线协议。

五、PCIE驱动

以RK3568 PCIE RC驱动为例。

9fb8c308-b0fe-11ee-8b88-92fbcf53809c.png

1)compatible = "rockchip,rk3568-pcie", "snps,dw-pcie"

PCIE接口使用的是RC模式;EP模式

2)bus-range =

PCI bus地址范围从0x10到0x1f。

3)interrupts

9fd60ca6-b0fe-11ee-8b88-92fbcf53809c.png

中断号和中断名称。对应RK3568 中断号如下(-32):

9fda2656-b0fe-11ee-8b88-92fbcf53809c.jpg

4)interrupt-map-mask 和 interrupt-map

interrupt-map-mask 和 interrupt-map:标准PCI属性值,对应INTA ~ INTD(legacy 中断)

5)num-lanes =

PCIE设备所使用的lane数量,默认不需要调整,软件自动探测并关闭不需要的lane以节省功耗。

6)max-link-speed =

PCIE带宽版本,1表示Gen1;2表示Gen2;3表示Gen3,无需配置。

7)reset-gpios =

PCIE接口的perst#复位信号,插槽和焊贴设备,都需要。必须配置。

8)msi-map =

PCIE设备映射到MSI控制器,格式和介绍如下:

9fe429ee-b0fe-11ee-8b88-92fbcf53809c.png

9)phys =

使用的PCIE PHY。

10)power-domains =

PCIE电源域

11)reg 和 reg-names

PCIE-dbi(映射总线上设备的配置空间地址)和PCIE-apb(PCIE控制器地址)寄存器地址和范围

12)rangs

9ff9be8a-b0fe-11ee-8b88-92fbcf53809c.png

功能:设备将CPU域地址映射到PCIE域地址

格式:

0x81000000:表示IO空间

0x82000000:表示MEM空间 (non-prefetchable)

13)vpcie3v3-supply =

PCIE外设的3V3供电。PCIE phy使用1.8V或0.9V供电。

Linux系统查看PCI设备的命令:lspci,PCI逻辑地址:XXZ分别表示总线号:设备号:功能号。一个PCI域能容纳256个总线,每个总线可支持32个PCI设备,每个PCI设备可容纳8个PCI功能。

lspci -t:显示树状结构

lspci -x:显示配置空间前64字节的内容

lspci -s:指定PCI设备

审核编辑:黄飞

 



相关资讯