如何在zcu102板卡上实现GEM的fixed-link配置

作者:Davis Zhang,AMD工程师;来源:AMD开发者社区

在一些以太网场景下,节点之间的连接不需要PHY器件,直接实现mac-mac的直连,这种情况输入fixed-link模式的应用。本文介绍了一种在两块zcu102开发板上实现GEM-GEM直连的一种方法。

这个样例里使用GEM通过GTR的方式实现两块zcu102板卡互联,zcu102板卡上GTR的4个lane分配给了PCIe、DisPlayport、USB和SATA接插件,我们这里借用SATA接口实现GEM的GTR传输。这个板卡上SATA接插件连接到了GTR lane3,所以我们在vivado工程里使用使用GEM3,并把它配置为连接到lane3. 我们新创建一个zcu102的vivado工程,然后可以在block design里看到SATA是使能的,我们需要取消SATA,并把GEM3配置为lane3.

01.png

GTR的ref clock配置里选择GEM3的GTR ref clk为“Ref Clk1”。

02.png

然后就可以保存vivado工程并编译导出XSA。附件里有修改好的2023.1版本的block design tcl script,也可以用它来生成block design。

Zcu102板卡上SATA接插件是通过一个MUX器件(U128)连接到了MPSoC器件的GTR管脚,而这个MUX可以通过它的SEL管脚的电平来选择GTR lane3连接到PCIe接插件或者SATA接插件。而这个SEL的电平是由一个器件(U97)通过I2C总线来控制的,这部分控制代码在fsbl里,所以我们后面介绍如何修改fsbl的部分代码来实现我们的目的。

03.png

04.png

05.png

我们可以使用vivado工程导出的xsa在vitis里生成platform和fsbl application。打开fsbl的源码文件“xfsbl_board.c”,然后在这个文件里搜索“XFSBL_ERROR_GT_LANE_SELECTION”可以看到下面这段代码

06.png


这段代码会检查vivado工程里GTR lane3是否配置为PCIe、SATA或者power down,因为我们把lane3配置为GEM3了,所以这段代码会执行“goto END”来结束当前函数并返回error。我们不希望继续正常执行代码,所以需要把“goto END”去掉。

然后紧接着可以看到下面这段代码,当它检测到lane3配置为SATA之后,会在给I2C总线传输的控制数据里设置“MUX选择SATA”。因为lane3配置为了GEM3,我们需要强制设置这个数据,所以需要增加图片里高亮的那两行代码。然后保存就可以重新编译生成fsbl的elf文件了,我们会在最终的“BOOT.BIN”里替换为这个fsbl elf文件。

            WriteBuffer[1U] |= DATA_GT_L3_SATA_CFG;

            XFsbl_Printf(DEBUG_GENERAL,"GTR3 muxed to SATA connector\r\n");

07.png


基于以上准备工作,我们这里介绍如何在petalinux里实现fixed-link。首先创建基于MPSoC的petalinux工程,然后导入我们生成的xsa文件,这个时候petalinux工程已经在kernel config里设置了必须的以太网配置,我们只需要在设备树里的GEM3节点里增加fixed-link子节点就可以了。附件里有修改好的“system-user.dtsi”文件,只需要将它替换到petalinux工程里就可以执行petalinux-build命令生成最后的image了。需要注意的是两块zcu102板上的MAC address不能相同,所以会在设备树GEM3节点里设置不同的MAC address。

         fixed-link {

            speed = <1000>;

            full-duplex;

         };

前面提到需要在“BOOT.BIN”里替换我们修改过的fsbl,所以在用petalinux-package命令生成“BOOT.BIN”的时候可以--fsbl参数指向我们的fsbl elf文件。

在做两块板卡互联测试之前需要使用一根SATA线把两块板卡连接起来,需要注意SATA线需要是交织(twisted)连接的,一般的SATA硬盘线是直连的,不能自这里使用。最后在板卡上加载linux之后就可以设置IP地址做ping测试了。