分享

pcie基础知识(二)

 charlie_linux 2022-10-01 发布于广东

本文主要讲述PCIE的相关缩写、术语;不同模式、配置;枚举等基础知识。

一、designware pcie产品:

Dual Mode core

RC core

EP core

Switch core

二、架构:

Common Xpress Port Logic (CXPL)

实现大部分的传输层逻辑,所有的数据链路层逻辑,物理层的MAC部分(包括LTSSM)。这个module就是所说的core。

XADM和RADM都是针对传输应用添加的模块。比如说添加传输队列,仲裁TLP transmmision。

Transmit Application-Dependent Module (XADM)

Receive Application-Dependent Module (RADM)

Configuration-Dependent Module (CDM)

Power Management Controller (PMC)

Local Bus Controller (LBC)

Message Generation (MSG_GEN)

Hot Plug Control (hotplug_ctrl)

三、核心(CXPL)操作

3.1 DM/RC/EP 模式下的初始化

在reset之后,通过检测device_type输入进入到RC或者EP模式,CDM内部配置寄存器为复位值。

LTSSM前配置:keep the app_ltssm_enable signal deasserted after reset until the application is ready to establish a Link and start receiving and transmitting TLPs,在这个阶段通过DBI配置好配置寄存器。

开始LTSSM:assert app_ltssm_enable to allow the LTSSM to begin Link establishment

3.2 Link Establishment

PIPE口,和usb3.0一样。建立链路后,Data Link module发起flow control initialization,完成后通知transaction layer module可以发送接收TLP。

3.3 TLP processing

3.4 Interrupt

支持传统中断intr和MSI

3.5 Flow Control

分为两个phase:初始化和更新。VC0的初始化跟着Link初始化,在发起正常传输之前完成。

3.6 Address Translation

完成AMBA memory space到PCI memory space的转换,包括transmit地址转换和receive地址转换

3.7 Peer-to-Peer Support(P2P)

针对switch或者多个port的RC,PCIe支持port到port传输,而不用endpoint-to-root或者root-to-endpoint(这里有个问题,port和endpoint以及root的hierachy是怎样的)

3.8 PCIe 2.0 features

支持PCI Express 2.0 specification中所有非optional feature。

3.9 Power Management

3.10 Single Root I/O Virtualization(SR-IOV)

支持多个系统镜像共享PCIe硬件资源,通过CX_SRIOV_ENABLE开启。包括Function Level Reset(FLR)和Alternate Routing ID Interpretation(ARI)

四、时钟和复位信号

4.1 core_clk

62.5MHz/125MHz/250MHz/500MHz,所有core的输入信号(除了reset信号)和这个clock同步。

4.2 pipe_clk

pipe上的信号由这个时钟同步,为125MHz或者250MHz,影响freq_step module

4.3 core_rst_n

复位core,除了PMC模块

4.4 aux_clk

用于PMC域

4.5 pwr_rst_n

复位PMC模块,用于上电时的冷复位,会复位aux_clk域的所有寄存器。

4.6 sticky_rst_n

复位所有configuration register space中的sticky bit registers。

4.7 non_sticky_rst_n

复位configuration register space中所有non-sticky bit registers。

4.8 app_init_rst

给下游设备发送一个Hot Reset。

4.9 app_req_retry_en

延迟配置请求直到初始化完成,EP有效。

4.10 training_rst_n

Hot Reset from upstream component

五、PCIe寄存器

5.1 EP模式

每个function有4096 bytes配置空间,分为:

256字节PCI配置空间

64字节的PCI 3.0兼容配置空间header,PCI标准功能结构链表(在偏移0x40之后任意位置开始)。

3840字节的PCIe扩展配置空间(0x100开始)

包括PCIe扩展功能结构链表(0x100开始),端口逻辑寄存器(0x700开始)

包括PF(Physical Function) register map和VF(Virtual Function) register map。

应用通过DBI访问配置寄存器,Bits[11:0]选择target function,Bits[18:16]选择target physical function(在没有使能SR-IOV的情况下)。否则通过dbi_func_num和dbi_vfunc_num表征是哪一个PF或者VF。

配置空间映射:分为PF和VF

PF PCI-Compatible Configuration Header Register

PF PCI Standard Capability Structures Register

PF PCI Express Extended Capability Register

VF PCI-Compatible Configuration Header Register

VF PCI Standard Capability Structures Register

5.2 RC模式

每个function有4K Bytes配置空间,分为:

256字节的PCI 3.0 兼容Configuration Space Header

PCI 功能结构体,从偏移0x40开始

PCIe扩展配置空间,从偏移0x100开始

端口逻辑寄存器(vendor-specific registers),从0x700开始

六、软件工作(与usb3.0比较)

PCIe有三个独立的地址空间:mem空间、I/O空间和配置空间,对每个设备都有其配置空间,通过ID寻址(USB通过协议通信,实际上在文件系统中,都统一为ID寻址,通过总线/设备/接口进行标识,PCIe的function对应usb的interface)。

designware的PCIe driver在内核中位于drivers/pci/host/pcie-designware.c,像samsung exynos的PCIe host驱动为同目录下pci-exynos.c。

这里的pcie-designware.c只是作为一个接口库供驱动调用,并不向kernel注册设备(usb dwc3自己是一个platform device,然后再去probe厂商定义的usb device)。

6.1 准备工作

时钟和mem地址映射

6.2 PCIe操作流程

6.2.1 Establish Link流程

参考自drivers/host/pci-exynos.c

6.2.2 PCIe设备枚举

在pcie-designware.c中通过调用pci_scan_root_bus_msi(使能了MSI)或者pci_scan_root_bus,然后进到pci/probe.c。

7、PCIe设备枚举流程

PCIe在调试过程中,经常会出现扫描不到对端EP设备的问题,在问题定位过程中,了解内核中pcie枚举流程至关重要。

PCIe枚举过程一般分为三步:

1.创建根节点

2.扫描根节点下设备

3.为根节点下设备分配资源

那么如何发现设备?

从总线扫描pcie设备的函数pci_scan_child_bus开始分析

该函数的核心代码为

for (devfn = 0; devfn < 0x100; devfn += 8)

pci_scan_slot(bus, devfn);

这里的bus变量来源于pci_create_root_bus,也就是创建的根总线的总线号

devfn : 设备和功能号。

这里使用的是穷举法,把所有的dev和function都尝试一次。

pci_scan_slot函数:

核心函数为pci_scan_device:

while循环里每隔一段时间就会进行一次venderid的配置读写,从上述代码中可以看出,退出循环的原因会有两个

config配置读写失败了 (说明链路不通)

超时没有得到响应(预留时间为60s,已经非常长了,第一点失败的可能性更大)

所以扫描不到对端设备时:

1.确认建链是否成功,建链失败,肯定扫描不到对端

2.确认对端的配置空间是否可写(对端的pcie模块是否处于解复位状态)

3.确认type0,type1,iatu等参数配置是否正确,如果正确了,确认配置访问的地址空间大小是否足够。

附录: Acknowledge

DLLP是由Data Link Layer管理的数据包,包括NAK,High Priority ACK, Flow Control, Vendor Control, Power Management。

未完待续

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多