PCIe设备Link Training调试心得----之PERST是否使用

 

 

   由于PCIe spec未严格限定PHY层Link方式,使得不同的厂家有自己的做法,比如Loongson、X86、PPC都有自己的做法,这给我们调试PCIe设备兼容性带来了诸多不便。

   从目前的两家主流的PCIe IP供应商 Synopsys、Cadence的IP来说,要兼容各家主板并非易事。

   PCIe spec有讲,有建议使用PERST,但未强制。

  主流PCIe主板厂商:

        X86阵营: Intel 、AMD、兆芯

       MIPS阵营:Loongson

      PPC阵营:NXP

     ARM阵营:飞腾、鲲鹏

   从不同CPU测试结果来看:

              X86阵营大部分是支持PERST,且对于不支持PERST device也有很好的支持,即PERST电平信号会从CPU引出,同时发出主动发起TS1码流。

             ARM阵营测试类似于X86,但有遇到不支持PERST主板。

             PPC目前测试有一款芯片,对PERST和NO-PERST都支持。

             MIPS:有PERST电平信号,但CPU不会主动发起TS1码流。

 主流PCIe Device处理Link Trainning 方法:

           1. 依赖于上电host PERST信号进行内部reset. 

           2. Polling electrical signal,check到对端TS1码流进行内部的reset. 

           3. Polling electrical signal,reset内部后直接发起TS1码流. 

       目前都有针对 Synopsys、Cadence 调过三种方案或它们的结合,不幸的是都有发现一些弊端,还没有找到一个完美的解决方案。

根据日志信息,PCIe链路突然出现`link down`的原因可能是以下几点: 1. **电源管理事件**:在8.344秒到8.450秒之间,系统尝试将PCIe链路从活动状态(active)切换到低功耗状态(suspend),然后又恢复到活动状态(resume)。这期间的操作可能触发了链路的重新初始化或复位,导致链路暂时断开。 ```plaintext [8.344889973] msm_pcie_pm_control: PCIe: RC0: pm_opt:1;busnr:1;options:0 [8.344891379] msm_pcie_pm_control: User of RC0 requests to suspend the link [8.344893098] msm_pcie_pm_suspend: RC0: entry ... [8.450225806] msm_pcie_pm_resume: RC0: entry [8.450241431] msm_pcie_enable: RC0: entry ... [8.450629296] msm_pcie_pm_resume: RC0: exit ``` 2. **链路训练失败**:在8.450秒到8.509秒之间,系统进行了链路训练(link training),最终成功建立了Gen2X1的链路。如果在这期间有任何错误或异常,可能会导致链路暂时断开。 ```plaintext [8.450922369] msm_pcie_link_train: check if link is up ... [8.509407838] msm_pcie_link_train: PCIe: RC0: Link is up at Gen2X1 ``` 3. **外部中断**:在8.482秒和8.509秒之间,系统处理了两次WAKE中断,这可能是因为外部设备或端点(endpoint)发起了唤醒请求,导致链路重新初始化。 ```plaintext [8.482107317] handle_wake_irq: PCIe: No. 2 wake IRQ for RC0 [8.482108567] DBG2:handle_wake_irq: PCIe WAKE is asserted by Endpoint of RC0 [8.482109400] DBG2:handle_wake_irq: Wake up RC0 ``` 4. **链路故障**:在11.350秒,系统检测到了一个链路断开事件(linkdown event),并触发了相应的处理函数。 ```plaintext [11.350864565] handle_global_irq: PCIe: RC0: handle linkdown event. [11.350867117] handle_linkdown_irq: PCIe: No. 1 linkdown IRQ for RC0. [11.353474826] msm_pcie_config_perst: PCIe: RC0: assert PERST [11.353505919] msm_pcie_handle_linkdown: PCIe link is down for RC0 [11.354706544] msm_pcie_notify_client: PCIe: Client of RC0 will recover the link later. ``` ### 综合分析 - **电源管理**:系统在进行电源管理操作时,链路可能会被暂时关闭以节省功耗。如果恢复过程中出现问题,可能会导致链路无法正常重新建立。 - **外部唤醒**:外部设备或端点发起的唤醒请求可能导致链路重新初始化,从而引起短暂的链路断开。 - **链路故障**:链路断开事件可能是由于硬件故障或其他外部因素引起的,系统会尝试恢复链路。 ### 建议 1. **检查电源管理配置**:确保电源管理配置正确,不会导致链路频繁断开和重新初始化。 2. **检查外部设备**:确认连接到PCIe链路的外部设备或端点没有异常行为,如频繁发送唤醒请求。 3. **查看硬件状态**:检查硬件是否有任何故障或不稳定的情况,例如供电不足、信号干扰等。 4. **日志分析**:进一步分析日志中与链路训练和电源管理相关的详细信息,以确定具体原因。 希望这些信息能帮助你找到问题的根源。如果有更多具体的日志或配置信息,可以进一步分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值