您的位置:首页 > 运维架构

PCIE协议解析 synopsys IP loopback 读书笔记(1)

2015-08-27 15:41 477 查看

1 Overview

Core支持单个Pcie内核的Loopback功能,该功能主要为了做芯片验证,以及在没有远程接收器件的情况下完成自己的回环。同时,Core也支持有远程接收器件的loopback,在该中情况下,远程接收器件称为loopback slave。该种模式可以用来完成板级的debug,BER测试,系统调试。

在做Loopback的时候需要注意将“Link up”强制写成1(根据specification该位应该是0),造成系统处于L0状态的假象,以便系统完成link的initialize。

1.1 Local Digital Loopback (PIPE/RMMI)

本地的Loopback分为3个阶段:Entering Local Loopback、In PIPE Loopback、Exiting Local Loopback



1.1.1 Entering Local Loopback

Loopback将PIPE/RMMI RX 与自身的PIPE/RMMI TX相连,在该种Loopback模式下,只能运行LTSSM(link training and statues statemachine),而且在该状态下无法进行自身的training和进入到L0状态。进入local loopback的流程如下:

Ø 先要disable“Gen3 Control Register GEN3_RELATED_OFF.

Ø Set the PIPE_LOOPBACK bit in the PIPE_LOOPBACK_CONTROL_OFFregister.

Ø Set the LOOPBACK_ENABLE bit in the PORT_LINK_CTRL_OFF register.



1.1.2 In PIPE Loopback

在该Loopback 模式下,通过虚拟系统进入L0状态,可以进行link initialize。在进入了Loopback mode以后,Core会为VC0(??)的flow control进行初始化。当该初始化完成后,application就可以通过XALI0/1/2接口发送TLP。当TLP包 loopback回来后,application 需要发送complete以响应自身发的TLP包。当TLP和DLLP被发出同时被收回时,接口将对自身启动flow control。在L0阶段,当TLP因为link 错误而没有被接收到时,TLP包将会被重新发送。TLP的发送将会像正常的link一样进行credit
检测,而接收,也会在L0阶段进行正常的error check和filter check。

MessageConsiderations

当接口是一个上行接口(USP),你必须保证没有使能生成的error message。当有错误发生在PCIelink时,同时你使能了error message的生成,那么USP将会生成一个 Error Message。有接口生成的数据包将会loopback到他自身,而USP不期望接收message,他将会生成一个附加的message。(是说系统会被阻塞么??)

在进入L0阶段时,DSP接口必须自动的发送Set_Slot_Power_Limitmessage,而该message将会被自身发送并且接收回来。但是DSP接口是不期望接收到Set_Slot_Power_Limit message的,所有该message将会被作为无效的message,同时Device Status 中的unsupported requestdetected bit将会被置位。

在DSP接口中,Core内部生成的message 将会与application通过XALI0/1/2生成的TLP混合在一起发送。

Enumeration and BAR Setup

你必须配置BARS(USP),memory/IO rangs(DSP),将memoryspace 和 bus master 置位,以便可以接收filter accepts TLP。或者,可以将filter rules关掉,以便一些本该被滤掉的TLP能够被接收。

在Loopback 模式下,可以通过DBI 初始化BAR。

Gen3 Operation

Youmust set the Gen3 Equalization Disable bit in the “Gen3 Control Register” GEN3_RELATED_OFF, as the PHY has no role in local loopback.

1.1.3 Exiting Local Loopback

Toexit loopback mode:
■ Clear the PIPE_LOOPBACK bit in the PIPE_LOOPBACK_CONTROL_OFF register.
■ Clear the LOOPBACK_ENABLE bit in the PORT_LINK_CTRL_OFF register.

1.2 配置流程

在loopback模式下,好像没有提到角色为RC或EP,而称为Loopback master 和salve,所以我认为loopback的时候不区分RC和EP的,但是有USP和DSP的区别,不知道怎么设置???

这个流程是我自己根据手册推敲的,不知道对不对:

1、 SII app_ltssm_enable = 0 disablelink training;

2、 DBI 配置系统基本信息

3、 SII app_ltssm_enable = 1 enable link training(这里应该配置不会成功);

4、 DBI “Link up”强制写成1(具体是哪个寄存器需要找一下),让系统认为link training 已经完成,并且进入了LTSSM L0阶段

5、 DBI 进入loopback

Ø 先要disable“Gen3 Control Register GEN3_RELATED_OFF.

Ø Set the PIPE_LOOPBACK bit in the PIPE_LOOPBACK_CONTROL_OFFregister.

Ø Set the LOOPBACK_ENABLE bit in the PORT_LINK_CTRL_OFF register.

6、设置BAR(USP),而如果是DSP,设置memory/IO ranges,在前期可以turn off the filter rules。

7、 开始传输TLP。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: