Redian新闻
>
Linux内核PCIE

Linux内核PCIE

公众号新闻

作者:小田BSP

本文主要是整理PCIE的基础知识。

一、PCI总线

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

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

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

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

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

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字节称为本地配置空间(设备有关区),主要定义卡上局部总线的特性、本地空间基地址和范围等。


其中:

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)


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


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

二、PCIE介绍

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

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


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映射


四、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驱动为例。


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

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

2)bus-range = <0x10 0x1f>

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

3)interrupts


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


4)interrupt-map-mask 和 interrupt-map

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

5)num-lanes = <1>

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

6)max-link-speed = <3>

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

7)reset-gpios = <&gpio2 RK_PD6 GPIO_ACTIVE_HIGH>

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

8)msi-map = <0x1000 &its 0x1000 0x1000>

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


9)phys = <&pcie30phy>

使用的PCIE PHY。

10)power-domains = <&power RK3568_PD_PIPE>

PCIE电源域

11)reg 和 reg-names

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

12)rangs


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

格式:

<映射类型(第1个字段) PCIe基地址(第2~3字段)CPU域基地址(第4~5字段)映射区域大小(第6~7字段)>

0x81000000:表示IO空间

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

13)vpcie3v3-supply = <&pcie30_3v3>

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

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

lspci -t:显示树状结构

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

lspci -s:指定PCI设备


推荐阅读  点击标题可跳转

1、图解 IPSec

2、为什么魂斗罗只有128KB却可以实现那么长的剧情?

3、eMMC之分区管理、总线协议和工作模式(太硬了)

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
6047 血壮山河 卢沟桥之变 16在 Linux 中玩乐:Cmatrix 之旅 | Linux 中国2023 年崭露头角的 7 款不为人知的 Linux 发行版 | Linux 中国这些剪贴板管理器使得 Linux 下的复制粘贴更上一层楼 | Linux 中国C++ 用于 Linux 内核开发,曾被 Linus 强烈反对,现在时机终成熟?在 Fedora Linux 上值得尝试的酷炫 Flatpak 应用(11 月) | Linux 中国2023 年开源和 Linux 世界的 8 个决定性时刻 | Linux 中国一款外观时尚的用于管理个人财务的 Linux 应用 | Linux 中国使用 dialog 和 jq 在 Linux 上编写高效终端 TUI | Linux 中国Linux 爱好者线下沙龙:LLUG 2023·杭州八方城见 | Linux 中国适用于 Linux 的 LibreOffice 替代品 | Linux 中国闲扯Vojtux:针对视力障碍用户改造 Linux | Linux 中国Linux 用户也将被蓝屏死机的恐怖所支配! | Linux 中国Wave:即使你讨厌命令行,也会喜欢的现代新 Linux 终端 | Linux 中国Linux 爱好者线下沙龙:LLUG 2023·西子湖畔相见 | Linux 中国修复 Arch Linux 中的 “target not found” 错误 | Linux 中国Linux 爱好者线下沙龙:LLUG 2023·北京,相聚在这个冬日 | Linux 中国Zorin OS 17 正在重新定义 Linux 发行版的视觉体验 | Linux 中国故障排除:在 Arch Linux 上启用蓝牙 | Linux 中国Fractal 5:Linux Matrix 消息应用迎来 GTK 4 和 Rust SDK 的升级 | Linux 中国Linux 黑话解释:Linux 中的 Super 键是什么? | Linux 中国Archcraft:定制的轻量级 Linux 发行版 | Linux 中国月不一定是故乡的明在 Fedora Linux 上值得尝试的酷炫 Flatpak 应用(12 月) | Linux 中国访沪美领馆 - 四年后回国观感 (9)全新的 Linux 电子书阅读器 Foliate 3.0 发布 | Linux 中国首款 Linux 游戏本?!Tuxedo 推出 Linux 游戏本 Sirius 16第一次入围澳洲肖像画奖SHNPALinux内核被冬季风暴 “封印”Gentoo Linux 现在提供用于快速软件安装的二进制包 | Linux 中国C++用于Linux内核开发,曾被Linus强烈反对,现在时机终成熟?Linus Torvalds 罕见发布警告:Linux 6.8 内核编译出现性能退步问题终端基础:在 Linux 中重命名文件和目录 | Linux 中国Linus Torvalds:Linux 内核中的 Rust、AI 和疲劳的维护者 | Linux 中国
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。