当前位置:首页 > > 处芯积律

在进行PCIe调试过程中我们时常需要执行retrain操作。retrain命令是让PCIe 链路先退出Link状态(ltssm==L0),ltssm会进入recovery状态,然后再次进入L0状态。

retrain操作使用的setpci命令,操作对象是downstream port而非endpoint。

1.retrain操作步骤    

1.将Secondary PCI Express Extended Capability中的Link Control 3 Register中Perform Equalization字段写1,此操作是为了保证重新建链过程中执行Equalization操作,Perform Equalization字段默认值为0,且每次重新建链后此字段会被清零。

    

2.设置目标速率:将PCI Express Capability Structure中的Link Control 2 Register的target Link Speed设置成目标速率,字段表示设备支持的最大速率

    

3.将PCI Express Capability Structure中的Link Control Register的Retrain Link字段写1,pcie链路将进行retrain操作。

    

2.案例说明    

案例中14:02.0表示downstream port的bus number、device number和function number,在不同设备中数值不同。如下案例中“.B”表示按访问数据位宽是1字节。

(1)setpci -s 14:02.0 204.B=0x01

本案例中Secondary PCI Express Extended Capability的偏移地址是0x200,Link Control 3 Register的地址是0x204,将Perform Equalization设置成1

(2)setpci -s 14:02.0  cap_exp+0x30.B=0x44 

将PCI Express Capability Structure地址采用缩写cap_exp来表示,Link Control 2 Register在PCI Express Capability Structure内部的地址偏移是0x30,因此Link Control Register的地址就是cap_exp+0x30,写数据0x44中的[3:0]为0x4对应target link speed,即16G速率。

(3)setpci -s 14:02.0 cap_exp+0x10.B=0x60

将PCI Express Capability Structure地址采用缩写cap_exp来表示,Link Control Register在PCI Express Capability Structure内部的地址偏移是0x10,因此Link Control Register的地址就是cap_exp+0x10,写数据0x60表示将Retrain Link置1。

NOTE:在改写字段时,首先需要先读字段地址的字节数据,然后改写对应字段,最终将改写后的数据使用setpci写入。    

               

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭