
PCIe
文章平均质量分 92
分享和记录PCIe总线知识。
业余程序员plus
分享知识,传播开源精神,致敬郝斌老师!
展开
-
PCIe总线-Linux内核PCIe设备枚举流程分析(十三)
当系统启动时或者有新的PCIe设备接入时,PCIe主机会扫描PCIe总线上的PCIe设备,读取设备配置空间信息,建立设备的拓扑关系,然后为设备分配资源(如内存空间、I/O空间、中断、总线编号等),最后根据设备的类型匹配驱动。下面以Linux内核为例,介绍PCIe主机枚举PCIe设备的流程。原创 2024-09-08 19:39:21 · 2827 阅读 · 0 评论 -
PCIe Linux MRRS和MPS参数设置策略
MPS(Max Payload Size)和MRRS(Max Read Request Size)共同影响PCIe总线的传输效率。如果MPS和MRRS设置的过小,传输相同长度的数据,需要更多的TLP报文,导致PCIe总线传输效率降低,如果MPS和MRRS设置的过大,超出系统中某些设备的允许值,导致这些设备无法处理TLP报文,然后上报Malformed TLP错误。因此合理的设置MPS和MRRS非常重要,内核提供了5种策略,可以根据不同的场景进行选择。原创 2024-08-18 21:36:29 · 1720 阅读 · 0 评论 -
PCIe板卡辅助信号解析
PCIe Add-in卡借助PCIe插槽上的辅助信号,实现了很多系统级的功能,比如唤醒、复位、调试、热插拔等功能。REFCLK-/REFCLK+: 是一组低压差分信号,PCIe主板提供的REFCLK信号必须满足PCIe规范中的要求。PERST#: 信号用于复位PCIe设备,同时也指示了系统主电源的稳定时间。WAKE#: 信号用于给PCIe主机提供复位信号,由PCIe设备驱动,当PCIe主机接收到该信号后,需要向PCIe设备提供主电源和参考时钟,以激活PCIe链路。原创 2024-08-15 20:57:31 · 5730 阅读 · 0 评论 -
PCIe总线-RK3588 PCIe RC初始化流程分析(十二)
RK3588 PCIe RC的初始化涉及PCIe设备枚举、中断(INTx、MSI、MSI-X)配置、BAR配置、ATU配置、链路训练等,下面一一介绍。原创 2024-08-04 19:41:47 · 2557 阅读 · 0 评论 -
PCIe总线-Linux内核PCIe软件框架分析(十一)
Linux内核PCIe软件框架如下图所示,按照PCIe的模式,可分为RC和EP软件框架。RC的软件框架分为五层,第一层为RC Controller Driver,和RC Controller硬件直接交互,不同的RC Controller,其驱动实现也不相同;第二层为Core层,该层将Controller进行了抽象,提供了统一的接口和数据结构,将所有的Controller管理起来,同时提供通用PCIe设备驱动注册和匹配接口,完成驱动和设备的绑定,管理所有PCIe设备;原创 2024-07-27 23:49:23 · 2101 阅读 · 0 评论 -
PCIe总线-RK3588 PCIe平台驱动分析(十)
RK3588 PCIe RC和EP使用同一个平台驱动,其主要的作用是解析设备树中的资源、初始化中断、使能电源、初始化PHY、使能时钟和释放复位,然后根据compatible属性初始化RC或者EP驱动。原创 2024-07-21 20:01:40 · 1986 阅读 · 0 评论 -
PCIe总线-RK3588 PCIe驱动设备树介绍(九)
在Linux内核中设备树中,定义了一系列属性,用来描述PCIe总线。比如"bus-range"属性,描述PCIe某个domain的总线编号范围,比如"ranges"属性,描述PCIe地址转换。下面将分别介绍这些属性。原创 2024-07-21 00:52:35 · 3679 阅读 · 0 评论 -
PCIe总线-事物层之TLP请求和完成报文格式介绍(六)
TLP报文按照类型,可以大致分为4中类型,分别是IO请求报文、存储器请求报文、配置请求报文、完成报文和消息请求报文。IO请求报文可分为IO读请求(不携带数据)和IO写请求(携带数据)。存储器请求报文可分为存储器读请求(不携带数据)、带锁的存储器读请求(不携带数据)和存储器写请求(携带数据)。配置请求报文可分为配置0读请求(不携带数据)、配置0写请求(携带数据)、配置1读请求(不携带数据)和配置1写请求(携带数据)。完成报文可分为携带数据(带锁和不带锁)、不携带数据(带锁和不带锁)。原创 2024-05-26 18:44:36 · 4203 阅读 · 0 评论 -
PCIe总线-RK3588 PCIe子系统简介(八)
ITS port 1连接PCIe30X4(4L)和PCIe30X2(2L)控制器,PCIe30X4(4L)和PCIe30X2(2L)控制器使用PCIe3.0 PIPE PHY。ITS port 0连接PCIe30X1_0(1L0)、PCIe30X1_1(1L1)和PCIe30X1_2(1L2)控制器,PCIe30X1_0(1L0)和PCIe30X1_1(1L1)控制器可复用PCIe3.0 PIPE PHY和Combo PIPE PHY,PCIe30X1_2(1L2)只能使用Combo PIPE PHY。原创 2024-06-15 23:21:13 · 3480 阅读 · 0 评论 -
PCIe总线-事物层之TLP路由介绍(七)
下图是一个PCIe总线系统示意图。此时RC发出一个TLP,经过Switch访问EP,TLP的路径为红色箭头所示。首先TLP从RC的下行OUT端口发出,Switch的上行IN端口接收到该TLP后,根据其路由信息,将其转发到Switch的下行OUT端口,随后TLP达到EP的IN端口,最后TLP到达EP设备。TLP从RC到EP的转发过程被称为TLP的路由过程。PCIe总线总共定义了三种路由方式,分别是基于地址(Address)路由、基于ID(BDF)路由和隐式(Implicit)路由。原创 2024-06-02 22:16:31 · 2174 阅读 · 0 评论 -
PCIe总线-事物层之TLP通用格式介绍(五)
PCIe总线事务层位于应用层和数据链路层之间。发送时将应用层的数据请求转换成PCIe总线事务,然后发送到数据链路层。接收时,从来自数据链路层报文中提取PCIe总线事务,并将数据提交到应用层。事务层使用TLP表示PCIe总线事务,其由头、数据(若有)和尾(可选)组成。下图展示了TLP的发送过程和接收过程。原创 2024-05-05 12:36:51 · 3531 阅读 · 0 评论 -
PCIe总线-MPS MRRS RCB参数介绍(四)
PCIe总线的存储器写请求、存储器读完成等TLP中含有数据负载,即Data Payload。Data Payload的长度和MPS(Max Payload Size)、MRRS(Max Read Request Size)和RCB(Read Completion Boundary)相关。原创 2024-04-27 20:45:34 · 3244 阅读 · 0 评论 -
PCIe总线-配置空间介绍(三)
配置空间是PCIe设备/桥的标识符,其保存了设备/桥的信息。主机在枚举设备/桥的时候需要先访问配置空间,获取设备厂家、型号、类型、所需资源等信息,然后再分配资源,最后才能访问PCIe设备的存储或IO地址空间。PCIe总线规定了三种类型的配置空间,分别是PCIe Agent设备使用的配置空间、PCIe桥使用的配置空间和Cardbus桥片使用的配置空间,本节只介绍前两种。原创 2024-04-21 00:35:32 · 7456 阅读 · 0 评论 -
PCIe总线-存储器域和PCIe总线域访问流程分析(二)
PCIe总线的最大特点是像CPU访问DDR一样,可以直接使用地址访问PCIe设备(桥),但不同的是DDR和CPU同属于存储器域,而CPU和PCIe设备属于两个不同的域,PCIe设备(桥)的地址空间属于PCIe总线域。存储器域访问PCIe总线域或者PCIe总线域访问存储器域,需要经过一系列的转换才可以完成。原创 2024-04-12 22:53:53 · 3529 阅读 · 1 评论 -
PCIe总线-简介(一)
早期的计算机使用PCI(Peripheral Component Interconnect)总线与外围设备相连,PCI总线使用单端并行信号进行数据传输,由于单端信号很容易被外部系统干扰,其总线频率很难进一步提高。目前,为了提高总线频率以获得更高的总线带宽,高速串行总线逐步替代了并行总线,PCI Express总线已逐渐替代了PCI总线。PCI Express总线使用高速差分总线和端到端的连接方式,每个PCIe设备都有一个或多个独立的传输通道(称为"lanes"),这些通道直接连接到主板的芯片组或CPU。原创 2024-03-25 00:32:42 · 11379 阅读 · 0 评论