大家新年好!请教个主机重启后的PCIe重新建链问题。
我想实现主机重启后,dsp 6670自动恢复PCIe连接,解决方法有以下2个:
1、在主循环while(1)里,循环检测DEBUG0寄存器的LSSM_STATE位,如果不为0x11,则触发Hard Reset,重新启动EEPROM中的IBL代码,在该代码中进行PCIe的初始化。这种方法能实现自动建链。但我感觉这样效率有点低。
2、另一种方法是开启PCIe的PCIEXpress_PM_INT中断,主机重启时,会触发该中断,然后在中断服务程序里进行PCIe的初始化(包括pcie powerDown)或触发Hard Reset。该方法有个问题,即主机重启后,不能完成建链,需要主机再重启一次才能完成链路的建立。
我发现PCIEXpress_PM_INT中断触发的时间有点晚,即错过了主机枚举PCIE设备的时间。通过测试,LSSM_STATE!=0x11的时间要比PCIEXpress_PM_INT中断早,差不多早200us左右。
为什么会出现上述情况呢?硬件情况如下:2个dsp 6670通过PCIE switch与主机相连。