首页 > 其他分享 >飞腾E2000板载以太网适配

飞腾E2000板载以太网适配

时间:2023-11-29 13:55:58浏览次数:27  
标签:... clk 适配 CAPS macb phytium E2000 以太网 MACB

飞腾E2000板载以太网适配

e20005.4.18macbyt8521


飞腾E2000嵌入式板卡的MAC芯片对应linux通用macb驱动,外接YT8521 PHY芯片。飞腾在5.10内核上进行过适配,现将其移植到麒麟5.4内核。

本文参考资料:
飞腾5.10内核源码
飞腾E2000以太网驱动注册和使用简介
飞腾腾珑E2000软件编程手册V0.6.pdf
YT8521S初始化配置相关ver2.1.pdf
YT8521SH-CA_YT8521SC-CA_Datasheet_v1.02.pdf

1. 设备树移植

phy-mode为MAC芯片与PHY芯片物理层的连接方式,这涉及到真实的物理连接方式,本文所用的硬件采用rgmii模式。

注:rgmii模式下,tx clk由mac提供,rx clK由phy提供。

macb0: ethernet@3200c000 {
		compatible = "cdns,phytium-gem-1.0";
		reg = <0x0 0x3200c000 0x0 0x2000>;
		interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>,
						<GIC_SPI 56 IRQ_TYPE_LEVEL_HIGH>,
						...
						<GIC_SPI 30 IRQ_TYPE_LEVEL_HIGH>,
						<GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>;
		clock-names = "pclk", "hclk", "tx_clk", "tsu_clk";
		clocks = <&sysclk_250mhz>, <&sysclk_48mhz>, <&sysclk_48mhz>, <&sysclk_250mhz>;
		magic-packet;
		status = "okay";
		phy-mode = "rgmii";
        use-mii;
        };

2. MACB驱动移植

飞腾5.10 macb驱动无法直接替换麒麟5.4 macb驱动,因此需要进行手动移植。
根据设备树知道硬件通过cdns,phytium-gem-1.0进行匹配,因此需要在macb_dt_ids中新增cdns,phytium-gem-1.0条目,并将phytium_gem1p0_config移植到麒麟5.4内核中。

drivers/net/ethernet/cadence/macb_main.c:

static const struct macb_config phytium_gem1p0_config = {
	.caps = MACB_CAPS_GIGABIT_MODE_AVAILABLE |
			MACB_CAPS_JUMBO |
			MACB_CAPS_GEM_HAS_PTP |
			MACB_CAPS_BD_RD_PREFETCH |
			MACB_CAPS_SEL_CLK,
	.dma_burst_length = 16,
	.clk_init = phytium_clk_init,
	.init = phytium_init,
	.jumbo_max_len = 16360,
	.sel_clk_hw = phytium_gem1p0_sel_clk,
};

static const struct of_device_id macb_dt_ids[] = {
	...
	{ .compatible = "cdns,phytium-gem-1.0", .data = &phytium_gem1p0_config },
	...
}

由于麒麟5.4 macb驱动与飞腾5.10 macb驱动有所差别,仅移植以上部分还不够。
根据phytium_gem1p0_config的定义,其中包含了.sel_clk_hw = phytium_gem1p0_sel_clk,但在麒麟5.4 macb驱动中并未定义和使用phytium_gem1p0_sel_clk函数。
查看飞腾5.10内核phytium_gem1p0_sel_clk函数实现及调用,发现当caps & MACB_CAPS_SEL_CLK成立时该函数才会被调用,并且在麒麟5.4内核中存在功能等价的替代函数phytium_gem_sel_clk,该替代函数只有caps & MACB_CAPS_SEL_CLK_HW成立时才被调用。

飞腾5.10

drivers/net/ethernet/cadence/macb_main.c:
static void macb_mac_link_up(struct phylink_config *config,
			     struct phy_device *phy,
			     unsigned int mode, phy_interface_t interface,
			     int speed, int duplex,
			     bool tx_pause, bool rx_pause)
{
... ...
			if (bp->caps & MACB_CAPS_SEL_CLK)
					bp->sel_clk_hw(bp, speed);
... ...
}

麒麟5.4

static void macb_handle_link_change(struct net_device *dev)
{
... ...
                        if (bp->caps & MACB_CAPS_SEL_CLK_HW)
                                phytium_gem_sel_clk(bp);
... ...
}

综上,最终驱动的移植方案是使用phytium_gem_sel_clk + MACB_CAPS_SEL_CLK_HW替代phytium_gem1p0_sel_clk + MACB_CAPS_SEL_CLK如下:

drivers/net/ethernet/cadence/macb_main.c:

static const struct macb_config phytium_gem1p0_config = {
	.caps = MACB_CAPS_GIGABIT_MODE_AVAILABLE |
			MACB_CAPS_JUMBO |
			MACB_CAPS_GEM_HAS_PTP |
			MACB_CAPS_BD_RD_PREFETCH |
			MACB_CAPS_SEL_CLK_HW,
	.dma_burst_length = 16,
	.clk_init = phytium_clk_init,
	.init = phytium_init,
	.jumbo_max_len = 16360,
	//.sel_clk_hw = phytium_gem1p0_sel_clk,
};

static const struct of_device_id macb_dt_ids[] = {
	...
	{ .compatible = "cdns,phytium-gem-1.0", .data = &phytium_gem1p0_config },
	...
}

3. 网络连通性调试

macb驱动移植成功之后,网络顺利UP,但无法ping通.
netstat -i可以看到存在RX-OK、TX-OK计数,并且计数正常累加。这里基本可以说明MAC层收发是正常的。
利用tcpdump抓包发现,虽然TX-OK正常累加,但对端陪测机无法抓到被测机所发的任何数据包,被测机能抓到陪测机发的数据包,基本确定网络只能收不能发。

3-1. MACB驱动环回测试

飞腾腾珑E2000软件编程手册V0.6.pdf中,以太网基地址如下:

mac基址
mac基址

在0x00 network_control寄存器中bit1为本地环回寄存器,将该bit位置1。

0x00 network_control
0x00 network_control

devmem2  $((0x32010000+0x00)) h #读0x00寄存器的值
0x1c
devmem2  $((0x32010000+0x00)) h 0x1e #写0x00寄存器,将bit1置1.

进行ping环回抓包测试,测试通过,排除MAC层异常

3-2. YT8521 PHY工作模式及电压确认

硬件工作模式
硬件工作模式

电压
电压

phy的工作模式和电压与硬件强相关,可以通过读取0xa001扩展配置寄存器,确认phy工作模式与实际物理连接是否一致。

0xa001 扩展配置寄存器
0xa001 扩展配置寄存器

root@kylin:/opt/phytool# ./phytool write eth1/0x0/0x1e  0xa001 && ./phytool eth1/0x0/0x1f
ieee-phy: reg:0x1f val:0x8140

0xa001寄存器的值为0x8140,因此phy的工作模式配置为UTP_TO_RGMII,电压为3.3v。

3-3. YT8521 PHY环回测试

在YT8521SH-CA_YT8521SC-CA_Datasheet_v1.02.pdf中PHY环回寄存器中,0x00基本控制寄存器bit14位是环回使能位。

0x00 Basic Control Register
0x00 Basic Control Register

需要说明的是在进行环回测试时,需要将PHY Autonet_En关闭,否则网口无法UP。

./phytool write eth1/0x0/0x00 0x4140
./phytool eth1/0x0/0x00

这里phy 环回测试未通过,可以确定PHY未将数据发送出去,问题在PHY层发送方向

3-4. YT8521 PHY tx delay调整

RGMII模式下,MAC负责提供TX时钟,PHY提供RX时钟。通过macb驱动确认1000M带宽下tx时钟频率为125MHz,确认时钟频率正常。

drivers/net/ethernet/cadence/macb_main.c:
static void macb_set_tx_clk(struct clk *clk, int speed, struct net_device *dev)
{
... ...
        switch (speed) {
... ...
        case SPEED_1000:
                rate = 125000000;
                break;
        default:
                return;
        }

        rate_rounded = clk_round_rate(clk, rate);
        if (rate_rounded < 0)
                return;

        /* RGMII allows 50 ppm frequency error. Test and warn if this limit
         * is not satisfied.
         */
        ferr = abs(rate_rounded - rate);
        ferr = DIV_ROUND_UP(ferr, rate / 100000);
		
        if (ferr > 5)
                netdev_warn(dev, "unable to generate target frequency: %ld Hz\n",
                            rate);
        if (clk_set_rate(clk, rate_rounded))
                netdev_err(dev, "adjusting tx_clk failed.\n");
}

查看tx clk delay,读取0xa003寄存器,千兆带宽tx clk delay时延由bit3:0提供。

0xa003
0xa003

root@kylin:/opt/phytool# ./phytool write eth1/0x0/0x1e  0xa003 && ./phytool eth1/0x0/0x1f
ieee-phy: reg:0x1f val:0x00f1

0xa003 bit3:0 默认为1,时延150ps,根据YT8521S初始化配置相关ver2.1.pdf资料,业内默认rgmii模式下tx clk delay默认为750ps。

phy delay
phy delay

修改0xa003寄存器为750ps,千兆依然不通,从150ps增加到450ps时,可以ping通,但存在丢包的情况,继续增加时延到1200ps(8*150ps)时,可以ping通,ping未看到丢包,千兆带宽测试正常。

./phytool write eth1/0x0/0x1e  0xa003
./phytool write eth1/0x0/0x1f 0x00f8  

附:

时钟精度(Frequency Tolerance):时钟精度一般是25℃下测量额时钟相对于标准频率的偏差,单位ppm(百万分之一),例如测得精度为±15ppm,时钟频率为25MHz,周期为1/25MHz=40ns,精度偏差为40ns×(±15/1000000)=0.6ps
时钟温漂(Frequency versus Temperature Characteristics):由于晶振材料和工艺限制,致使时钟在不同的温度下精度会有较大偏差,单位也为ppm。例如温漂为±100ppm,时钟频率为25MHz,周期为1/25MHz=40ns,精度偏差为40ns×(±100/1000000)=4ps
时钟抖动(Jitter):晶振源固有的噪声和干扰通常会带来时钟信号的周期性偏差。单位一般为ps

标签:...,clk,适配,CAPS,macb,phytium,E2000,以太网,MACB
From: https://www.cnblogs.com/forwards/p/17864696.html

相关文章

  • 多平台小程序编译适配,超级App的基建利器?
    随着科技的飞速发展,我们正迅速进入一个以数字化为主导的时代。 在这个时代中,通信、小程序、快应用、云服务器等平台连接类软件如火如荼的发展,手机、手表、AR/VR眼镜等智能移动穿戴设备迅速的升级迭代,5G、芯片、算力等基础设施也以月的速度在全球竞相发布捷报。 与用户生......
  • 实验8:适配器模式
    实验8:适配器模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解适配器模式的动机,掌握该模式的结构;2、能够利用适配器模式解决实际问题。 [实验任务一]:双向适配器实现一个双向适配器,使得猫可以学狗叫,狗可以学猫抓老鼠。实验要求:1. 对应的类图如下;  ......
  • PC5080双节锂电池USB适配器充电芯片具有0V充电功能600KHZ频率
    概要:PC5080是一款5VUSB适配器输入,高精度双节锂离子电池充电管理芯片。具有0V充电功能,涓流充电、恒流充电、恒压充电和自动截止、自动再充等一套完整充电循环的充电管理芯片。芯片内部特设9V抗浪涌,芯片应用更安全可靠。PC5080标准浮充电压为8.40V,其底部带有散热片接地的ESO......
  • casbin快速入门:grom适配器管理策略
    一、概述上一讲我们已经讲了基础的策略管理。用配置文件来管理,在大型项目里肯定是不够的。所以这一讲我们讲一下用数据库来进行策略管理,我们选择Mysql。官方网站也给我们推荐了对应的适配器:我们选择Grom这个适配器来进行管理,主要是我们后期使用gin框架,这个比较习惯:二、添加适配器代......
  • RS808-ASEMI通用60瓦以内适配器桥堆RS808
    编辑:llRS808-ASEMI通用60瓦以内适配器桥堆RS808型号:RS808品牌:ASEMI封装:RS-4正向电流:8A反向电压:800V引线数量:4芯片个数:4芯片尺寸:95MIL漏电流:<5ua恢复时间:>500ns浪涌电流:250A芯片材质:正向电压:1.10V封装尺寸:如图特性:插件、薄体扁桥工作结温:-55℃~150℃包装方式:500/......
  • RS307-ASEMI通用60瓦以内适配器桥堆RS307
    编辑:llRS307-ASEMI通用60瓦以内适配器桥堆RS307型号:RS307品牌:ASEMI封装:RS-4正向电流:3A反向电压:1000V引线数量:4芯片个数:4芯片尺寸:60MIL漏电流:<5ua恢复时间:>500ns浪涌电流:80A芯片材质:正向电压:1.10V封装尺寸:如图特性:插件、薄体扁桥工作结温:-50℃~150℃包装方式:500/......
  • 适配器模式
    [实验任务一]:双向适配器实现一个双向适配器,使得猫可以学狗叫,狗可以学猫抓老鼠。实验要求:画出对应的类图;提交源代码;Adapter.javapackagerobot;publicclassAdapterimplementsCat,Dog{privateCatcat=newRealcat();privateDogdog=newRealdog();publicv......
  • 如何将力控与PLC之间有线以太网通讯改无线?
    在实际系统中,车间里分布多台PLC,需要用上位机软件集中控制。通常所有设备距离在几十米到上百米不等。用户会选择以太网方式是因为传输速度有保障,而选择无线以太网方案是因为不想开挖电缆沟,或者布线不方便,不但施工麻烦也会徒增成本。这里所介绍的无线以太网方案通信距离从几米到1公里......
  • 汉源高科6个万兆光口+24个千兆光口+24个千兆以太网电口机架式三层网管工业以太网交换
    HY5700-856XG24GX24GT是汉源高科为严格的工业通信系统需求设计的一款机架式三层网管工业以太网交换机,设备采用模块化设计,端口配置具有很高的灵活性,端口配置方式:(1)6个万兆光口+48个千兆以太网电口;(2)6个万兆光口+8个千兆光口+40个千兆以太网电口;(3)6个万兆光口+16个千兆光口+32个千兆以太......
  • TSN流量记录器:验证汽车网络中的以太网聚合,经济高效的解决方案
     在未来几年,汽车线束将从不同协议的异质网络转变为分层的同质以太网网络。在这种新情况下,模拟真实车辆网络的实验室测试台需要分析工具,以支持它们在车内通信过程中进行验证。汽车向以太网聚合原因随着汽车内部技术变得越来越复杂,相互间的联系变得越来越紧密,最新的应用程序和......