Xilinx两块开发版PCIe link up时间相差很大,Virtex-6开发版PCIe link up时间超过60ms,而Virtex-7 PCIe link up时间只有~25ms.
 
分析过程:
1. 对比Virtex-6和Virtex-7两块开发板上电过程的LTSSM状态机。
首先看一下,Virtex-6开发版的LTSSM状态机,发现在多了一次Polling->Dectect的转换过程。
 
再来看Virtex-7开发版的LTSSM状态机,不同状态之间的转换符合PCIe Spec标准。
 
发现LTSSM状态机的异常点之后,然后结合详细的PCIe trace找到root cause.
 
2. 从Trace中看到,Upstream(Virtex-6)在Detect状态检查到RX存在之后,进入了Polling.Active状态,但是,之后由于一直未收到从Downstream下发的TS1序列,于是,就进入了Polling.Compliance状态. 此时,Upstream Lanes处于Electrical Idle。
 
3. 经过一段时间之后,Upstream Lanes看到EIOS之后,开始退出Polling.Compliance状态, 进入Polling.Active状态.
 
4. 接着,Downstream lanes进入Polling.Active状态,然后开始发送TS1序列。
 
5. 经过一段时间后,Upstream也进入了Polling.Active状态,然后开始发送TS1序列。
 
6. Upstream在Polling.Active状态实现了Bit Lock和Symbol Lock, 就转换进入到Polling.Configuration状态,并开始发送TS2序列。
 
7. 但是,问题来了,Downstream在Polling.Active状态未能成功实现了Bit Lock和Symbol Lock,在24ms
 timeout之后回到了Detect状态。
 
8. 此时,Upstream处于Polling.Configuration状态,在等待Downstream的TS2序列。由于Downstream已经回到Dectect状态了,Upstream在48ms内没有收到Downstream下发的TS2序列,也跟着返回Detect状态。
 
9. Downstream回到Dectect状态之后,就开始重新进行链路训练,在重新链路训练中,这次在Polling.Active状态成功实现了Bit Lock和Symbol Lock, 然后进入Polling.Configuration状态。最终成功实现PCIe链路训练。
 
从上面的分析过程中,我们看到,第7/8步中有两个timeout时间,分别是24ms和48ms,正是因为这两个timeout的存在,造成了Virtex-6开发版link up时间超过60ms。
 
Root Cause:
最后发现root cause是由于英特尔处理器中的一个bug造成的。如Intel Errata中的描述,由于Rx端过载保护电路的存在,可能会导致某些Device异常进入Polling.Compliance, 最后导致Downstream和Upstream之间状态出现偏差,引起Bit Lock/Symbol Lock错误。

PCIe link up bug 分析的更多相关文章

  1. Bug预防体系(上千bug分析后总结的最佳实践)

    Bug预防体系(上千bug分析后总结的最佳实践) 原创 2017-08-16俞美玲 光荣之路 吴老的<selenium webdriver 实战宝典>出版了!  web常见产品问题及预防 ...

  2. 关于bug分析与异常处理的一些思考

    前言:工作三年了,工作内容主要是嵌入式软件开发和维护,用的语言是C,毕业后先在一家工业自动化控制公司工作两年半,目前在一家医疗仪器公司担任嵌入式软件开发工作.软件开发中,难免不产生bug:产品交付客户 ...

  3. 文《左右c++与java中国的垃圾问题的分析与解决》一bug分析

    文<左右c++与java中国的垃圾问题的分析与解决>一bug分析 DionysosLai(906391500@qq.com) 2014/10/21 在前几篇一博客<关于c++与jav ...

  4. 线上bug分析

    昨天下午大神把组内几十号人召集在一起开Online bug分析大会,主要是针对近期线上事故从事故原因和解决方案两个维度来分析. 对金融软件来说,每一次的线上事故都有可能给公司带来重大的损失,少扣了用户 ...

  5. 【转】ProGuard的作用、使用及bug分析

    原文地址:http://blog.csdn.net/forlong401/article/details/23539123. http://www.trinea.cn/android/proguard ...

  6. 协议解析Bug分析

    协议解析Bug分析 源自邮件协议RPC(远程过程调用)处理的Request请求数据包的bug.        一.Bug描写叙述 腾讯收购的Foxmailclient能够作为outlookclient ...

  7. Oracle字符乱码、数据越界訪问典型Bug分析

    Oracle字符乱码.数据越界訪问典型Bug分析 前言:           作为乙方,在甲方客户那里验收阶段发现两个诡异Bug. 下面就问题来源.问题根因.解决方式.怎样避免做具体描写叙述. .且两 ...

  8. ProGuard的作用、使用及bug分析(转载)

    ProGuard的作用.使用及bug分析 本文主要ProGuard的作用.使用及bug分析.1.ProGuard作用ProGuard通过删除无用代码,将代码中类名.方法名.属性名用晦涩难懂的名称重命名 ...

  9. 软件测试之BUG分析定位概述(QA如何分析定位BUG)

    你是否遇到这样的场景? QA发现问题后找到DEV说: 不好了,你的程序出问题了! DEV(追查半小时之后): 唉,是你们测试环境配置的问题 唉,是你们数据不一致 唉,是你们**程序版本不对 唉,是** ...

随机推荐

  1. [UE4]Spline Mesh Actor

    作用: 1.按照Spline设置的轨迹,进行显示网格物体. 曲线模型 一.赋值Static Mesh,任意的Static Mesh都可以. 二.调整方向 三.Spline Mesh Actor有2个端 ...

  2. 【转】Python 之 元类

    原文链接: https://stackoverflow.com/questions/100003/what-is-a-metaclass-in-python      http://python.jo ...

  3. CSS3 之 Media(媒体查询器)

    1.响应式Media(媒体查询器) (1)<link rel=“stylesheet” media=“screen and (max-width: 600px)” href=“small.css ...

  4. jupyter依赖tornado版本

    使用jupyter莫名奇妙出现500错误,发现是更新tornado出了问题,我的jupyter版本是5.7.4不支持6.x版本的tornado,回退到5.x版本的tornado就好了. pip ins ...

  5. xshell完美开源替代方案(Kitty+MTPuTTY并设置全局字体)

    xshell是收费的,过了30天就不能用了.我们应该找一个开源的替代品.说实话windows平台没有什么可选的,就是putty.但是原生的putty不好用,记不住密码,又不支持多标签. Kitty是基 ...

  6. python使用itchat发送微信消息提醒

    最近在学习一点python,先找了找有趣的应用,实际修改跑了一下提高兴趣程度. 找到itchat,它的简介是这样的: “itchat是一个开源的微信个人号接口,使用python调用微信从未如此简单. ...

  7. VS2015创建类库项目后添加不了WPF资源字典,窗口,用户控件处理办法

    打开项目工程文件在PropertyGroup标签最后加上下面3行: <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FA ...

  8. 使用Java创建指定大小的空文件夹

    /** 方法一 * 创建固定大小的文件 * @param file * @param length * @throws IOException */ public static void create ...

  9. html页面嵌套两个iframe页面导致第二个iframe页面高度失效的问题

    1:这是因为最里面嵌套的iframe页面html和body高度无法设置问题,我的解决办法是js去控制iframe高度 2:js获取最子页面(content内容区域)的高度 var ifremHeigh ...

  10. 《深入理解java虚拟机》读书笔记——垃圾收集与内存分配策略

    可回收判定两种算法 引用计数法(Reference Counting):引用为0时可回收. 可达性分析法(Reachability Analysis): 从GCRoots对象到这个对象不可达. GCR ...