飞腾E2000板载以太网适配

这篇具有很好参考价值的文章主要介绍了飞腾E2000板载以太网适配。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

飞腾E2000板载以太网适配

e20005.4.18macbyt8521

 

    • 1. 设备树移植
    • 2. MACB驱动移植
    • 3. 网络连通性调试
      • 3-1. MACB驱动环回测试
      • 3-2. YT8521 PHY工作模式及电压确认
      • 3-3. YT8521 PHY环回测试
      • 3-4. YT8521 PHY tx delay调整

飞腾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 = macb_clk_init,
	.init = macb_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中,以太网基地址如下:

 

飞腾E2000板载以太网适配
mac基址

 

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

 

飞腾E2000板载以太网适配
0x00 network_control

 

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

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

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

 

飞腾E2000板载以太网适配
硬件工作模式

 

 

飞腾E2000板载以太网适配
电压

 

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

 

飞腾E2000板载以太网适配
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位是环回使能位。

 

飞腾E2000板载以太网适配
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提供。

 

飞腾E2000板载以太网适配
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。

 

飞腾E2000板载以太网适配
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文章来源地址https://www.toymoban.com/news/detail-747459.html

到了这里,关于飞腾E2000板载以太网适配的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【以太网通信】RS232 串口转以太网

    最近和 RK 研发同事在调试通信接口,排查与定位 RK3399 接收数据出错的问题。FPGA 与 RK3399 之间使用一路 RS232 串口进行通信,由于串口数据没有分包,不方便排查问题,想到可以开发一个 RS232 串口转以太网的工具,将串口接收到的数据封装为 UDP 数据报文,并通过网线传输到

    2024年02月11日
    浏览(57)
  • STM32的以太网外设+PHY(LAN8720)使用详解(6):以太网数据接收及发送

    1.1.1 检查是否接收到一帧完整报文 使用轮询的方式接收以太网数据是一种简单但是效率低下的方法,为了保证及时处理以太网数据我们需要在主循环内高频轮询是否接收到了以太网数据。轮询的函数为ETH_CheckFrameReceived,内容如下: 当以太网帧大于我们设置的DMA描述符buffer大

    2024年01月23日
    浏览(48)
  • 【车载以太网测试从入门到精通】——以太网TCP/IP协议自动化测试(含CAPL源码)

    【车载以太网测试从入门到精通】系列文章目录汇总 TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇

    2024年02月05日
    浏览(136)
  • 以太网协议学习笔记

    以太网接口电路主要由MAC(Media Access Control)控制器和物理层接口PHY两大部分构成。 PHY在发送数据时,接收MAC发过来的数据,把并行的数据转化为串行流数据,按照物理层的编码规则把数据编码转化为模拟信号发送出去,接收数据时的流程反之。 MAC和PHY芯片有一个配置接口,

    2024年02月14日
    浏览(45)
  • 以太网数据帧

    最近由于项目需求,需要开发UDP/TCP 协议栈,在此学习记录下以太网报的包格式,后续会把PMA/PCS,64B/66B,serdes 接口配置,时序设计等补充完整。 以太网链路传输的数据包称做 以太帧 ,或者以太网数据帧。在以太网中,网络访问层的软件必须把数据转换成能够通过网络适配

    2023年04月14日
    浏览(47)
  • 实验一 以太网组建

    实验 一    以太网组建 一、实验目的和要求 1、认识交换机和路由器的结构与连接方法 2、区分直通线和交叉 3、掌握简单的局域网配置方法以及组网方法 4、了解ip地址的组成 5、了解子网掩码、MAC、默认网关、数据链路地址的概念 6、了解配置路由器所使用的命令 相关知识

    2024年02月07日
    浏览(57)
  • 以太网协议详解

      假设有这样一张网络拓扑图:   在拓扑图中有A、B、C三台计算机,并且它们三个是通过中间的 路由器 连接的。这时候计算机A要向计算机C发送一条数据,那么数据是怎么样到达计算机C呢?也就是说路由器是怎么知道A要发送数据给谁呢?   这就是接下来要讲的 以太

    2024年02月06日
    浏览(47)
  • 汽车以太网协议栈

    《大师说》栏目上线啦# 《大师说》栏目是怿星科技2023年推出的深度思考栏目,通过邀请内部专家,针对智能汽车行业发展、技术趋势等输出个性化的观点。每期一位大师,每位一个话题,本期由我们怿星的CTO虞胜伟,进行分享。👏👏 随着车载领域智能化,网联化的发展,

    2024年02月10日
    浏览(45)
  • 以太网知识

    / 【读书笔记】C3 The Ethernet System 以太网知识01 Media Independent Interface (MII) 媒体独立接口 CHAPTER 2 IEEE Ethernet Standards 以太网标准- 以太网的历史背景 基础知识——以太网(Ethernet ) 以太网数据帧格式(结构)图解 OSI七层参考模型及其协议和各层设备 一文带你读懂,这三个交换

    2024年02月05日
    浏览(58)
  • 【AUTOSAR】【以太网】TCPIP

    目录 一、概述 二、约束和假设 三、依赖模块 3.1 EthIf 3.2 EthSM 3.3 SoAd 3.4 Ke

    2024年02月05日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包