This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] C6678 PCIe 问题- LINK_RST_REQ -链路请求复位中断原始状态。

Guru**** 2979400 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/674525/c6678-pcie-problem---link_rst_req---link-request-reset-interrupt-raw-status

是的

我想报告在使用 PCIe 接口将电路板连接到 PC 时遇到的问题。 具体而言、我使用的是 TI DSP C6678。 当我为 PC 加电时,链路 PCIe 会启动(LTSSAM 状态:L0),但它会立即关闭(LTSSAM 状态:DETITY_SALETE)。

在 DSP 上,我可以看到“LINK_RST_REQ - 链路请求复位中断原始状态”位。 寄存器"电源管理和复位中断状态寄存器(PMRST_IRQ_STATUS_RAW)"的说明打开。

我多次尝试恢复连接、但没有结果。 您是否遇到过此类错误? 我的行为是怎样的?

 

谢谢你。

Stefano

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    团队将收到通知。 他们将直接在此处发布反馈。

    BR
    Tsvetolin Shulev
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    Keystone II 器件勘误表: www.ti.com/.../sprz402e.pdf。 KeyStoneII.BTS_errata_advised.38启动期间不处理 PCI-Express 热复位
    这也适用于 Keystone I (C6678) PCIe 接口。

    此致、Eric
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回答。

    如何对 PCIe 进行本地复位?

    很抱歉、但 我想确保我对该程序的理解很好。

    谢谢你。

    STE

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    您可以关闭 PCIe PSC 域电源、然后按照 Processor SDK RTOS PCIe 示例代码执行 PCIe 初始化(PSC 开机、串行器/解串器设置、PCIe EP 模式、条形码、入站、 出站,...)。 processors.wiki.ti.com/.../Processor_SDK_RTOS_PCIe

    此致、Eric
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、遗憾的是错误仍然存在。 
    我看到、在 PCIESS 模块复位和重新配置(PSC 上电、串行器/解串器设置、PCIe EP 模式、bar…)后、 位 LINK_RST_REQ 打开。
    我在一次 PC 重新启动期间也多次执行此操作、但结果是相同的。 我‘S‘配置函数“etupPCIe”和“PCIeHotResetReInitialize”。
    您能告诉我外设配置是否良好吗? 您是否有另一个想法超出链路请求复位中断?


    #define DEVICE_PCIe_inition_bar_32位(x)((x)< 3? (0x10800000 +((x)* 0x01000000):0x8000000000)

    void SetupPCIe()

    {KICKUNLOCK ();//解锁寄存器

    prPSC_PDCTL[3]= 1;//电源域3 (PCIe)
    prPSC_MDCTL[10]=(1 << 8)| 3;//模块控制寄存器10 (PCIe)
    rPSC_PTCMD =(1 << 3);//电源域 n3 (PCIe)

    while (rPSC_PTSTAT &(1<<3)){;}
    rPCIE_SERDES_CFGPLL = 0x181 << 0;

    INT PLL_Lockup = 0;
    while ((PLL_Lockup!= 0x1))
    {
    PLL_Lockup = rPCIE_SERDES_STS 和0x1;
    }

    RDEV_STAT = 1 << 16
    | 0 < 14;// PCIe 处于端点模式。


    RPL_LINK_CTRL =(1 << 16)//链接模式启用1 = x1 | 3 = x2
    |(1 << 8)//链接速率2.5GT/s [请勿更改]
    |(1 << 5);//启用 DLL 链接。 启用链路初始化

    RPL_Gen2 =(PCIe_GEN << 17)//初始化 PLL 的速度从 PCIe_Gen1变为 PCIe_Gen2
    |(1 << 8)//设置启用2个通道[1个用于1个通道、2个用于2个通道]
    |(0xF << 0);//快速训练序列的数量

    rCMD_STATUS =(1 << 5)//解锁写入条屏蔽寄存器
    |(0 < 0);//禁用链接训练

    rBAR_T0 (0)= 0x0000FFFF;//定义 BAR0掩码
    rBAR_T0 (1)= 0x0000FFFF;//定义 BAR1掩码
    rBAR_T0 (2)= 0x0000FFFF;//定义 Bar2掩码
    rBAR_T0 (3)= 0x0000FFFF;//定义 Bar3掩码
    rBAR_T0 (4)= 0x0000FFFF;//定义 BAR4掩码
    rBAR_T0 (5)= 0x0000FFFF;//定义 Bar5掩码

    rCMD_STATUS =(0 < 5)//锁定写入条屏蔽寄存器
    |(0 < 0);//禁用链接训练

    rSTATUS_COMMAND =(1 << 20)//对于 PCIe,此字段必须设置为1。
    |(1 << 8)//启用 PCI Express 错误消息生成
    |(1 << 6)//检测中毒 TLP
    |(1 << 2)//总线的经销商
    |(1 << 1);//启用存储器访问

    RDEV_STAT_CTRL =(2 << 12)//最大读取请求大小
    |(1 << 11)//启用无监听
    |(1 << 4)//启用宽松排序
    |(1 << 3)//启用不支持的请求报告
    |(1 << 2)//启用致命错误报告
    |(1 << 1)//启用非致命错误报告
    |(1 << 0);//启用可纠正的错误报告

    rPCIE_ACCR =(1 << 8)// ERC 检查使能
    |(1 << 7)//支持 ECRC 检查
    |(1 << 6)//启用 ECRC 生成
    |(1 << 5);// ERC 生成功能

    rVENDOR_DEVICE_ID =(0xB005 << 16)//器件 ID [esemphio]
    |(0x104C << 0);//供应商 ID

    rBAR_T0 (0)= 0x0;
    rBAR_T0 (1)= 0x8;
    rBAR_T0 (2)= 0x8;
    rBAR_T0 (3)= 0x8;
    rBAR_T0 (4)= 0x8;
    rBAR_T0 (5)= 0x8;


    RIB_BAR (0)= 1;//在第一个区域关联 BAR1
    RIB_START_LO (0)= DEVICE_PCIe_INPLET_BAR_32位(0);//入站起始地址低
    RIB_START_HI (0)= 0x0;//高入站起始地址
    RIB_OFFSET (0)= 0;//偏移

    RIB_BAR (1)= 2;
    RIB_START_LO (1)= DEVICE_PCIe_INinitial_bar_32位(1);//低入站起始地址
    RIB_START_HI (1)= 0x0;//高入站起始地址
    RIB_OFFSET (1)= 0;//偏移

    RIB_BAR (2)= 3;
    RIB_START_LO (2)= DEVICE_PCIe_INPLET_BAR_32位(2);//入站起始地址低
    RIB_START_HI (2)= 0x0;//高入站起始地址
    RIB_OFFSET (2)= 0;//偏移

    RIB_BAR (3)= 4;
    RIB_START_LO (3)= DEVICE_PCIe_INPLET_BAR_32位(3);//入站起始地址低
    RIB_START_HI (3)= 0x0;//高入站起始地址
    RIB_OFFSET (3)= 0;//偏移

    /*启用 MSI0 IRQ 向量0 */
    rMSI_IRQ_ENABLE_SET (0)= 1;

    /*启用所有传统中断*/
    rLEGACY_A_IRQ_ENABLE_SET = 1;
    rLEGACY_B_IRQ_ENABLE_SET = 1;
    rLEGACY_C_IRQ_ENABLE_SET = 1;
    rLEGACY_D_IRQ_ENABLE_SET = 1;


    rCMD_STATUS =(0 < 5)//解锁对条屏蔽寄存器的写入
    |(0 << 4)//应用程序请求重试启用。 [验证]
    |(1 << 2)//启用入站地址转换。
    |(1 << 0);//启用链接训练

    int ltssmState3=0;
    while (((ltssmState3!= 0x11))
    {
    HardWait(1);

    rtssmState3 = rDEBUG0 & 0x1F;
    }
    }


    空 PCIeHotResetReInitialize()

    {

    int linkrstreq = 0;

    while ((linkrstreq!= 0x8))
    {
    linkrstreq = rPMRST_IRQ_STATUS_RAW 和0x8;
    }

    HardWait (100000);// HardWait (等待时间[微秒])

    prPSC_PDCTL[3]= 0;//电源域3 (PCIe)
    prPSC_MDCTL[10]= 0;//模块控制寄存器10 (PCIe)复位
    rPSC_PTCMD =(1 << 3);//电源域 n3 (PCIe)
    while (rPSC_PTSTAT &(1<<3)){;}//等待状态转换过程完成

    HardWait (10);// HardWait (等待时间[微秒])

    prPSC_PDCTL[3]= 1;//电源域3 (PCIe)
    prPSC_MDCTL[10]=(1 << 8)| 3;//模块控制寄存器10 (PCIe)
    rPSC_PTCMD =(1 << 3);//电源域 n3 (PCIe)
    while (rPSC_PTSTAT &(1<<3)){;}//等待状态转换过程完成

    HardWait(10);

    }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、遗憾的是错误仍然存在。
    我看到、在 PCIESS 模块复位和重新配置(PSC 上电、串行器/解串器设置、PCIe EP 模式、bar…)后、 位 LINK_RST_REQ 打开。
    我在一次 PC 重新启动期间也多次执行此操作、但结果是相同的。 我‘S‘配置函数“etupPCIe”和“PCIeHotResetReInitialize”。
    您能告诉我外设配置是否良好吗? 您是否有另一个想法超出链路请求复位中断?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    当您将 C6678 PCIe 连接到 PC 并将其通电时、PC 的 BIOS 会扫描 PCIe 总线并枚举连接到该总线的器件。 此时、枚举了6678 PCIe 卡并进入 L0状态。 之后不久、一些 PC 会发出热复位信号、PCIe 链路丢失、C6678侧的 LINK_RST_REQ 置1。

    预计 PC 不会发送多个热复位。 在首次热重置后,您会检测到链路丢失,快速运行 PCIeHotResetReInitialize()关闭它,然后运行 SetupPCIe()重新初始化,这应该起作用。 就像您从一开始就为 C6678 PCIe 加电一样、对其进行配置(但错过了 PC 的热复位)。

    其他一些选择、例如 EVM、从 EEPROM 引导的 PCIe、它通过 I2C 总线连接、代码加载需要一段时间、因此我们错过了 PC 的热复位、但仍在 BIOS 枚举时间窗口内。 我们仍然可以进行枚举。

    此致、Eric
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢你
    但所有尝试都进展得不好。 您是否知道同一错误是否可能由另一个原因产生?
    可能取决于我与 PC 主板之间的长连接?
    我不知道它是否会产生影响、但在 PCIe_CERR 寄存器中、我读取0x81
    在 PCIe_UNCERR 中、我找不到任何内容(0x0)。

    很抱歉、但很遗憾、我没有 EVB 来测试我的代码。
    STE
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    您可以查看 PCIe 接口的一些硬件设计指南、以查看您的电路板是否设计良好:

    www.ti.com/.../sprabc1.pdf
    www.ti.com/.../sprabi2c.pdf

    此致、Eric