遇到的问题
PCIE link不稳定
配置空间读写正常,Memory mapping空间读写异常
缘由
之前对PCIE的认识一直停留在概念的阶段,只知道是一个高速通讯协议,主要用于板内、板间的高速BUS。正好公司近在调试一个PowerPC平台的PCIEBUS的BSP。需要一些PCIE的硬件、软件知识。下面通过解决实际问题过程的方法来理解PCIE总线协议。但也仅于工程应用(实际产品中调试、应用)层面。
具体解决过程
PCIE 物理层link 不稳定
启动u-boot后,可以看到PCIE link status信息log
从log上分析:系统启动了3个PCIE controller,PCIE 号为:0.0.0 2.0.0 4.0.0。
三个数字的具体含义为:0.0.0 :Bus Number Device Number Function Number。
这三个Host Bridge 下面分别挂了一个EP设备,PCIE 号为:1.0.0 、3.0.0 、5.0.0。
正常看到这些PCIE bridge 和EP说明PCIE 读PCIE的配置空间是正确的,PCIE在physical的link状态是OK的。
可以使用pci header + PCIE号的方式查看Bridge和EP的Config 信息。
若出现读取配置信息不稳定的情况,则说明PCIE link 不稳定。需要排查硬件,软件辅助查看linkstatus的方法是查看PCIE Host Bridge的link status的寄存器值。PCIE 规范里有一个LTSSM(LinkTraining and Status State Machine),各种status的code规范里都有定义。
这个LTSSM在PCIE Extend Config Space里面。在P3041中的offset为0x404。
可以使用命令:pci display.b 0.0.0 404查看LTSSM状态。
正常情况下的输出:
PCIE 初始化完成后会进入L0状态。异常状态见PCIE link 异常log。
物理层link 不稳定,怀疑以下原因:
- 高速串行信号质量问题
- Serdes电源问题
- 时钟问题