本文主要讲述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。 未完待续 |
|
来自: charlie_linux > 《pcie》