Serial RapidIO相关调试总结

       最近在p2020平台上进行系统(这里系统指的是某实时操作系统)关于Serial Rapidio的适配,这也是笔者第一次调试srio(Serial RapidIO)对某些相关知识有了新的认知,在这与大家进行分享,如若分享有误,望大家勘误指正。

       首先问大家一个问题srio是什么呀,不知道大家是什么反应,反正笔者当时扪心自问的时候,一脸懵逼。笔者在经过调试,将其适配完成之后,才有了点感性的认识。srio也无非就是一种通信方式(比如以太网、串口、USB等),只不过在硬件上和软件协议有它自己的“道道”罢了。这里关于硬件构造以及软件协议相关的细节我就不深入了(因为太复杂,笔者也不太懂),大家如果想深入了解其中的“道道”,可以在网上搜索RapidIO协议,会有一个全英文的技术手册,里面讲了RapidIO的各个层,以及相关报文构造。

       既然srio只是一种通信方式,那么我们去熟悉它无非一个思路,将其初始化成功,然后去调用它的收发接口进行信息交互罢了。srio该部分代码已经在平台的其他系统上验证通过了,所以移植时,该部分代码基本上不用做什么改动。接下来进行初始化,本来满心欢喜以为移移就可以用了,可是系统在调用其初始化接口时挂掉了。由于该代码已经验证过了,这部分跟硬件相关的操作代码基本没问题,问题应该出现别处,这里可以给大家看看系统抛出的相关异常现象。如下图:

Serial RapidIO相关调试总结_第1张图片

        反正此图,看了可能也没什么太大的意义,因为问题定位并非出现在图中所指的地方。这个问题困扰了笔者好几天,一句话表达心情:不知所措,无可奈何。后来还是得请教大神,大神给出的判断是系统的mmu配置可能存在一定问题。关于mmu,如果有朋友不太清楚的,笔者也只能在这用一句话表达自己的意思,这哥们儿干的事就是将虚拟地址和物理地址进行相应的转化,而该实时系统下物理地址与虚拟地址之间是一一映射的。mmu就此打住,这里谈谈为什么要配置mmu,一切在p2020编程手册中早已注定(所以大家在这里应该明白标题意思是srio“相关”总结)。

有关于mmu配置在p2020编程手册的第二章,在第二章的第二小节开头有一句说得很重要,给大家截图看看

意思为在这块设备中所有关于内存排布的配置、控制以及状态寄存器全部包含在这1Mbyte的地址区域内。大家接着再看看一下几幅截图就会越来越明白。

Serial RapidIO相关调试总结_第2张图片

CCSR中所影响的区域。

Serial RapidIO相关调试总结_第3张图片

General Utilities区域中所涵盖的寄存器。

Serial RapidIO相关调试总结_第4张图片

中断相关寄存器分布。

Serial RapidIO相关调试总结_第5张图片

srio相关寄存器分布。

Serial RapidIO相关调试总结_第6张图片

相关特殊寄存器分布。

       看了这几幅截图之后,想必心里应该有些感觉了,也就是说在这里关于srio的mmu这一块如果没有配置或者说是属性配置不正确都将会影响到srio。

       而笔者所使用的系统中关于mmu配置这一块的接口为

       根据各个参数所取的名字,大家应该也猜的八九不离十,值得大家注意的是最后一个参数,这个参数必须配对,哪怕你只有其中一位配置错误,都会造成严重的影响。当然大家会好奇,怎么验证自己配得正不正确。关于ppce500核的手册中提到了,你可以观测MAS0-MAS4,MAS6-MAS7寄存器中的值来进行判断。系统中也提供了相应的接口供大家读取相应寄存器的值,如下图

       在mmu配置完成之后,去进行初始化,心想终于可以结束了,可是你会发现在其中一块cpu上跑的系统还是挂掉了,系统也没有报错,挂得很安详。在说原因之前,先跟大家介绍一下,两片cpu的场景:在rapidio的通信中,也有我们所谓的主从,一般过程是从站先将自己初始化完成之后,就等着主站来进行扫描了。

        而此时两块cpu在初始化的过程中都进行了设备扫描或者所谓的枚举,这就非常不符合逻辑,所以从端cpu挂掉也是情理之中,这里我们可以通过查相关寄存值来判断当前cpu所处的主从状态,现在两个cpu都处于主状态,后来排查硬件有问题,此块板卡上设置主从还与硬件相关,后来硬件排查完毕之后,srio的初始化就顺利完成了。后面相关的内容就是srio的三种通信方式:doorbell、message、DMA。这三块内容下章介绍。

你可能感兴趣的:(底层驱动)