南向适配网迅网卡经验分享

南向适配网迅网卡经验分享

一、网迅1GE网卡适配:

网迅1GE系列网卡目前有6款,如上表所示。网卡对外名称SFX00HT中X表示网卡LAN口数量,H表示高质量高性能版本。以下分享内容以网迅SF400HT网卡适配为例。

1、csr准备

​ 代码版本:2509版本,conan 2.0。

​ 测试环境:基于米尔开发板,选用i2c_8与网卡smbus直连。

​ 具体操作:首先根据网卡四元组新增sr文件14140130_80880107_80880402.sr,其中Compatible属性决定后测试中是否发送ncsi cmd,需要添加;sr文件中添加MctpBinding和Endpoint对象,用于自发现时创建smbus通信所需的endpoint对象;在profile.txt中添加文件路径。

2、构建出包

​ 修改root.sr:配置I2c_8拓扑,新增Connector对象挂载在I2c_8总线下,Connector对象配置中选择非天池模式加载,通过拼接Bom、Id、AuxId适配sr文件寻找下一级板卡。修改完成后参考devmon组件下临时出包流程文档构建出包。

3、ncsi测试

注:以下流程描述基于库上main分支代码进行,所有不带devmon自动加载服务,如果有需要可以手动拉取合入PR_235的提交,重新构建出包升级后就会自动加载devmon服务,这种情况下开发板启动后不需要其他操作,可以直接追踪查看smbus报文。

​ 开发板上电后跳转到/opt/bmc/apps/devmon/路径下手动挂载devmon服务,通过mdbctl中lsobj Connector命令查看root.sr新增Connector对象操作是否成功,lsprop Connector命令查看Connector对象的Id和AuxId是否和网卡四元组匹配。如果不匹配那么通过setprop命令根据网卡四元组信息修改Id和AuxId。

​ 然后setprop命令修改Connector对象的Presence属性,先清零再置一,触发重新自发现。自发现成功后bmc会向网卡发送ncsi cmd,通过attach mctpd和tracemctp start可以追踪打印smbus通信的完整报文内容。

​ 如果mctpd资源树发现endpoint上树失败,但devmon组件chip上树成功,那么可以向devmon组件资源树上Chip发送BlockIORead请求验证iic连接是否异常。

4、添加一条ncsi cmd

​ 如果目前库上已经支持的ncsi over mctp cmds无法满足实际需求,那么可以自己添加ncsi cmd。

这个表格是驱动代码结构目录,我们只需要在协议库中添加预期的cmd接口定义和声明即可,接下来以添加标准协议命令get_parameters cmd为例。

​ 首先在协议库下ncsi_over_mctp_standard.cpp中添加cmd接口get_parameters(),其中通过get_ncsi_command_ctx创建并返回一个简单配置了req header的req_context。然后通过request()接口发送req packet,如果新增的ncsi cmd有payload data需要传输,那么可以通过传参data数组将payload_data传入request()接口进行拼接。request()接收rsp_packet后会保存到rsp_str返回,对其进行类型强转后可以进一步处理,例如:保存某些指定字段信息到全局。

​ 在添加了ncsi cmd定义接口后,如果有需要,那么可以network_port.cpp中添加相关调用测试函数get_parameter_by_ncsi(),然后在start_ncsi_update_task_wx()接口中调用。

二、服务器VDM测试

【测试环境】鲲鹏920服务器和网迅25GE网卡联调

【bmc固件】基于2509版本编译出包

【测试步骤】修改component_drivers组件下start_ncsi_protocol()接口,修改mctp_object的操作代码:传参中的phy_addr通过网卡四元组换算得到;因为是使用PCIe协议进行测试,所以mctp()接口传参中的position不需要。完成以上修改后,component_drivers组件会创建vdm通信所需的endpoint对象。服务器升级完成后可以通过attach mctpd和tracemctp start命令追踪查看服务器收发的Mctp over PCIe报文完整内容。

【备注】如果在服务器启动后查看mctpd资源树上还是没有endpoint对象,那么还可以使用另一种方法:通过network_adapter组件创建endpoint对象。

​ 新增14140130_80885025_80881000.sr文件,其中SupportedMctp配置为true,model配置为FF5025(参考E810.lua新增),用于触发network_adapter组件中init_protocol()接口执行进入mctp_test分支,通过create_mctp_endpoint()接口创建endpoint对象。修改component_drivers组件mctp()接口中m_mctp_name变量内容,指定后续devmon组件请求的endpoint对象为network_adapter组件创建的endpoint对象。

三、遇到的问题

以下问题中备注”已修复“的表示该问题在库上main分支已经被修复,可以直接同步库上对应提交。

【1】构建出包时提示manifest/build/product/BMC/openUBMC/rootfs/include下缺少profile.txt。

解决办法:参考manifest组件适配南向设备树 PR_235提交,新增profile.txt。

【2】ncsi_over_mctp_wx中的ncsi cmd发包内容异常。(已修复)

解决办法:排查后确认是代码中cmd接口的传参错误,package_id和channel_id顺序反了。修改cmd接口定义和声明时的传参顺序即可,或者修改调用时的实际传参顺序。

【3】ncsi_over_mctp_over_smbus cmds测试过程中提示段错误,同时devmon服务被卸载。(已修复)

解决办法:网卡在link_down时响应get_link_status cmd的rsp中speed_and_duplex字段会为0,这导致openubmc代码中数组索引越界从而出现段错误,devmon内存越界从而被卸载。在convert_speed_mbps()接口中补充一个spped_mbps是否为零的判断即可,如果为零则提前返回0。

【4】开发板上测试ncsi_over_mctp_over_smbus时endpoint上树mctpd失败。(已修复)

解决办法:这个问题出现在使用2506版本代码时,可以通过inject手动注入endpoint。更新到2509版本后不会遇到这个问题。

【5】devmon服务未加载导致网卡自发现失败。

解决办法:拉取同步manifest组件PR_235的更新,即可增加启动过程中demon服务自动加载的操作。需要注意的是multi-user.target.wants文件夹下的devmon.service并不是一个文本文件,而是multi-user.target.wants同级目录下devmon.service文件的软链接。如果同步更新后还是加载失败,那么可以在开发板(服务器)启动后跳转到/opt/bmc/apps/devmon/路径手动加载devmon服务,然后通过setprop命令修改Connector对象的Presence属性,通过清零置一触发重新自发现。

南向适配网迅网卡经验分享.pdf (698.4 KB)

5 个赞

请问“服务器VDM测试”里“鲲鹏920服务器”上PCIe VDM报文,是BMC和网卡之间对发、还是依赖CPU的什么配置? 比如是否需要在BIOS下设置哪些?

谢谢

bmc和网卡之间对发。不需要bios设置什么