ZYNQ-PS端使用PL端网口-uboot配置
ZYNQ-PS端使用PL端网口-uboot配置
本文记述了在zynq7000通过emio扩展ps端网口,在vitis上通过lwIP可以连通网络,但在uboot环境下网络却不通的问题。主要报错及解决方式如下:
-
Reference to non-existent node or label "phy1":设备树添加phy1节点 -
zynq_gem ethernet@e000b000: failed to set tx clock rate 125000000:修改驱动 -
arp retry count:设置环境变量ipaddr、netmask、gatewayip
由于PL端添加了GMII2RGMII的IP核,所有uboot里也需要添加GMII2RGMII的驱动
我的BOOT.BIN里只有fsbl和u-boot,并且uboot也是由源码自行编译
单独加载比特流文件的tips:
fsbl包含PS端的硬件信息,并且承担着加载PL端比特流的任务。PS端使用PL端的网口,通过EMIO扩展需要使用PL端的逻辑电路,因此当未加载比特流文件的时候,PS端无法使用PL端的网口。
初始化函数更新
cp ${petalinux项目根目录}/project-spec/hw-description/ps7_init.c ${uboot根目录}/board/xilinx/zynq/
cp ${petalinux项目根目录}/project-spec/hw-description/ps7_init.h ${uboot根目录}/board/xilinx/zynq/
这部分操作是更新postconfig,由于我的system.bit并未打包到BOOT.BIN里,因此需要手动加载比特流文件并post config,而xilinx的uboot源码并没有这个函数,所以需要从petalinux项目里移植过来。关于postconfig的配置请见文末参考链接[1]。
驱动修改:gem0的 EMIO 时钟使用检测
参考了一篇被rejected的patch,修复了EMIO时钟设置失败的问题,详情见文末参考链接[2]。
diff --git a/drivers/clk/clk_zynq.c b/drivers/clk/clk_zynq.c
index e3cefe2e0c72..78e6886a000c 100644
--- a/drivers/clk/clk_zynq.c
+++ b/drivers/clk/clk_zynq.c
@@ -42,6 +42,8 @@
#define CLK_CTRL_DIV3X_SHIFT 20
#define CLK_CTRL_DIV3X_MASK (ZYNQ_CLK_MAXDIV << CLK_CTRL_DIV3X_SHIFT)
+#define CLK_CTRL_GEM_EMIO (1u << 6)
+
DECLARE_GLOBAL_DATA_PTR;
#ifndef CONFIG_SPL_BUILD
@@ -161,7 +163,7 @@ static enum zynq_clk_rclk zynq_clk_get_gem_rclk(enum zynq_clk id)
else
clk_ctrl = readl(&slcr_base->gem1_rclk_ctrl);
- srcsel = (clk_ctrl & CLK_CTRL_SRCSEL_MASK) >> CLK_CTRL_SRCSEL_SHIFT;
+ srcsel = (clk_ctrl & CLK_CTRL_GEM_EMIO);
if (srcsel)
return emio_clk;
else
设备树补充:在gem0的mdio节点里补充phy1节点
reg的值是phy的物理地址
&gem0 {
phy-handle = <&phy1>;
phy-mode = "gmii";
status = "okay";
xlnx,ptp-enet-clock = <0x69f6bcb>;
ps7_ethernet_0_mdio: mdio {
#address-cells = <1>;
#size-cells = <0>;
phy1: phy1@4 {
reg = <0x4>;
device_type = "ethernet-phy";
};
gmii_to_rgmii_0: gmii_to_rgmii_0@8 {
compatible = "xlnx,gmii-to-rgmii-1.0";
phy-handle = <&phy1>;
reg = <8>;
};
};
};
如果你使用的是petalinux的uboot,在project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi里补充phy1节点即可。
GMII2RGMII驱动添加
由于PL使用了gmii2rgmii的IP核,所以uboot也要添加相应驱动,可以在make menuconfig里直接搜索路径添加,也可以直接添加到自己的config里,这里我就配置到config里。
CONFIG_PHY_XILINX_GMII2RGMII=y

浙公网安备 33010602011771号