Tsi721和SRIO交换芯片调试文档下载路径:
https://download.csdn.net/download/luky_zhou123/20087695
Tsi721驱动和包含复位功能测试程序下载路径:
https://download.csdn.net/download/luky_zhou123/20087673
下载后欢迎留言讨论
1 SRIO连接框图
2 调试步骤
确认Tsi721和NRS1800连接的端口速率是否比配,Tsi721端口速率通过外接电阻设置,设置方式如下:
- NRS1800端口速率可以通过SPD引脚电阻设置默认速率,如果不同端口需要设置不同速率需要通过修改寄存器设置。修改方式如下:
Tsi721和NRS1800端口速率匹配之后安装Tsi721驱动,驱动安装步骤如下:
- insmod rapidio.ko hdid=0x1a通过hdid设置Tsi721设备destid
- insmod tsi721_mport.ko
-
insmod rio_cm.ko
-
insmod rio_mport_cdev.ko
-
insmod rio-scan.ko scan=1
安装该驱动Tsi721会扫描所有外接设备,如果外接设备是NRS1800会设置交换芯片的路由,如果不需要对NRS1800设置路由需要对驱动中rio-scan.c文件中rio_enum_mport函数进行修改,修改后的代码下载路径:
https://download.csdn.net/download/luky_zhou123/20087673
测试方法
Tsi721扫描完设备后就可以通过libmport目录下的测试程序对SRIO接口进行测试:
3.1 链接状态查看
rio_test_misc测试程序,通过./rio_test_misc –h可以查看帮助信息,主要测试功能如下:
a、查看Tsi721端口link状态:
./rio_test_misc -M 0 -q
参数说明:
-M: Tsi721端口号,如果只有一个Tsi21主端口号默认为0
-q:查询端口状态
端口必须link后才能进行后面测试。
3.2 寄存器读写
a、读设备寄存器值
./rio_test_misc -M 0 -H hopcount -D destid -O offset
参数说明:
-M: Tsi721端口号,如果只有一个Tsi21主端口号默认为0
-H:设备跳数,如果读取Tsi721寄存器无需使用该参数
-D:待读取设备的id号,如果读取Tsi721寄存器无需使用该参数
-O:寄存器偏移地址
例如读取与Tsi721相连的switch设备id命令为:
./rio_test_misc -M 0 -H 0 -D 0xff -O 0
b、写设备寄存器值
./rio_test_misc -M 0 -H hopcount -D destid -O offset -V data -w
参数说明:
-M: Tsi721端口号,如果只有一个Tsi21主端口号默认为0
-H:设备跳数,如果写Tsi721寄存器无需使用该参数
-D:待写入设备id号,如果写Tsi721寄存器无需使用该参数
-O:寄存器偏移地址
例如向Tsi721寄存器0x60写入0x1a:
./rio_test_misc -M 0 -O 0x1a -V 0x1a -w
-V: 要写入的数据值
-w:表示写入数据
3.3 门铃消息收发
rio_test_db测试程序功能:通过./rio_test_db –h可以查看帮助信息,通过改测试程序能够收发送门铃信息。
3.3.1 发送门铃消息
./rio_test_db -M 0 -D destid -I data
参数说明:
-M: Tsi721端口号,如果只有一个Tsi21主端口号默认为0
-D:待发送门铃信息的设备id
-I:(大写i)16位门铃数据
例如向设备id为0x1b的设备发送门铃消息0x5a5a命令如下:
./rio_test_db -M 0 -D 0x1b -I 0x01
3.3.2 接收门铃消息
./rio_test_db -M 0 -D destid -S start -E end -r
参数说明:
-M: Tsi721端口号,如果只有一个Tsi21主端口号默认为0
-D:待发送门铃信息的设备id
-S: 接收门铃消息的起始值
-E: 接收门铃消息的结束值
-r: 表示接收门铃消息
例如:读取设备id为0x1b发送的门铃消息为0x1a1a到0x5a5a的命令如下:
./rio_test_db -M 0 -D 0x1b -S 0x1a1a -E 0x5a5a -r
3.4 dma数据收发
3.4.1 dma数据发送
./rio_test_dma -M 0 -D destid -A targetAdress -O offset -S size -d -v -k -T times
-M:Tsi721端口号,如果只有一个Tsi21主端口号默认为0
-D: 发送目的设备ID
-A: 发送数据目的设备地址
-S: 发送数据长度
-d: 打印调试信息,如果输入该参数将打印调试信息,默认不打印调试信息
-v: 不做数据校验,默认发送后将读取对端设备数据进行比较,输入该参数不做校验
-k: 使用内核模式,如果输入该参数将在内核空间申请缓存区发送数据,否则在用户空间申请缓存区发送数据,默认用户模式。
-T:发送次数,如果不输入该参数则默认发送1次
例如:通过dma方式向设备id为0x1b,目的基地址为 0xa0000000,偏移为0x0的位置发送长度为0x100的数据命令为:
./rio_test_dma -M 0 -D 0x1b -A 0xa0000000 -O 0 -S 0x100 -d -v
3.4.2 dma数据接收
./rio_test_dma -M 0 -D destid -I size -v -d -R riobase
-M:Tsi721端口号,如果只有一个Tsi21主端口号默认为0
-D:发送目的设备ID
-R:对端设备发送到接收设备的目的地址,即接收设备接收数据的目的地址,地址需要4K对齐。
-I:接收数据缓冲区长度,如果参数-i 默认接收数据长度为2*1024*1024(2M)
-d:打印调试信息,如果输入该参数将打印调试信息,默认不打印调试信息
-v:数据校验,默认发送后将读取对端设备数据进行比较,输入该参数不做校验
例如:接收目的ID为0x1b,地址为0x0,数据长度为0x200000的命令为:
./rio_test_dma -M 0 -D 0x1b -i -v -d -R 0x0,当对端设备数据发送完后按回车键可以查看对端发送的数据类容。
3 Tsi721复位设置
SRIO链接设备复位后导致链路未link on。
导致问题原因:当Tsi721连接的对端设备复位后由于链路再次建立时ackID不一致导致链路无法链接正常。
解决方式:当SRIO接口两端的某一个设备复位后,对端设备也需要复位,复位后能够从新建立链接。
参考资料:《IDT_Tsi721_MAN_20130718.pdf》以下章节(874-875页)
B. Disabling the S-RIO Port
Topics discussed include the following:
* Methods of Disabling the S-RIO Port
* What Happens When the S-RIO Port is Disabled?
* How to Re-enable the S-RIO Port?
初始化流程:
1、关闭端口,将RapidIO Port Control CSR PORT_LOCKOUT和PORT_DIS寄存器置1
RapidIO Port Control CSR.PORT_LOCKOUT
RapidIO Port Control CSR.PORT_DIS
2、设置复位模式,将Device Control Register SR_RST_MODE位置1
Set Device Control Register.SR_RST_MODE to the desired reset mode.
模式种类有以下两种,我们将模式设置成0001,配置寄存器值不复位。
0b0000 = Perform a device-wide hot reset.
0b0001 = Perform a S-RIO MAC core logic reset. All
device registers (including those from S-RIO MAC)
retain their values without being reset.
3、保持端口复位,设置RapidIO PLM Port Implementation Specific Control Register SOFT_RST_PORT位置1
Hold the port in reset by setting RapidIO PLM Port Implementation Specific Control Register.SOFT_RST_PORT.
4、清除端口关闭状态位,将RapidIO Port Control CSR PORT_LOCKOUT和PORT_DIS寄存器置0
Clear the control or status bit that disabled the port (see Methods of Disabling the S-RIO Port)
5、清除错误状态位,清除PLM Port Event Status Register和RapidIO Port Error and Status CSR寄存器错误状态
RapidIO PLM Port Event Status Register.DLT
RapidIO Port Error and Status CSR.OUTPUT_FAIL
6、清除端口复位,将RapidIO PLM Port Implementation Specific Control Register的SOFT_RST_PORT位请0
Remove the port reset by clearing RapidIO PLM Port Implementation Specific Control Register.SOFT_RST_PORT.