zynq平台 Linux系统 phy 88e1512驱动配置

这篇具有很好参考价值的文章主要介绍了zynq平台 Linux系统 phy 88e1512驱动配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

88e1512和88e1510是一个系列的phy,采用marvell的通用phy驱动,驱动源码路径:\u-boot\drivers\net\phy\marvell.c

zynq平台 Linux系统 phy 88e1512驱动配置

如上图所示,ETH2的工作模式为RGMII TO SGMII,SGMII与交换芯片bcm5396相连。设备树配置为RGMII模式,如下:

&gem0 {
	status = "okay";
	phy-mode = "rgmii-id";
	phy-handle = <&ethernet_phy0>;

	ethernet_phy0: ethernet-phy@0 {
		reg = <0>;
		device_type = "ethernet-phy";
	};
};

查看芯片手册Page 18 – Register 20,配置工作模式为RGMII (System mode) to SGMII (Media mode)。

zynq平台 Linux系统 phy 88e1512驱动配置

   读写88e1512寄存器,先将要操作的Page number写入Register 22,再配置相应的寄存器。

   88e1512驱动配置步骤:文章来源地址https://www.toymoban.com/news/detail-460436.html

  • 配置工作模式为100,RGMII (System mode) to SGMII (Media mode)。
  • 所有寄存器配置完成后,将Page Address配置为1,PHY切换至Fiber Page,否则MAC获取的是PHY的Copper Page的link状态,无法获取到Fiber Page的link状态。
  • 关闭自协商,强制link为千兆全双工
    static int m88e1518_config(struct phy_device *phydev)
    {
    	u16 reg;
    	int temp_addr;
    
    	/*
    	 * As per Marvell Release Notes - Alaska 88E1510/88E1518/88E1512
    	 * /88E1514 Rev A0, Errata Section 3.1
    	 */
    
    	/* EEE initialization */
    	phy_write(phydev, MDIO_DEVAD_NONE, MIIM_88E1118_PHY_PAGE, 0x00ff);
    	phy_write(phydev, MDIO_DEVAD_NONE, 17, 0x214B);
    	phy_write(phydev, MDIO_DEVAD_NONE, 16, 0x2144);
    	phy_write(phydev, MDIO_DEVAD_NONE, 17, 0x0C28);
    	phy_write(phydev, MDIO_DEVAD_NONE, 16, 0x2146);
    	phy_write(phydev, MDIO_DEVAD_NONE, 17, 0xB233);
    	phy_write(phydev, MDIO_DEVAD_NONE, 16, 0x214D);
    	phy_write(phydev, MDIO_DEVAD_NONE, 17, 0xCC0C);
    	phy_write(phydev, MDIO_DEVAD_NONE, 16, 0x2159);
    	phy_write(phydev, MDIO_DEVAD_NONE, MIIM_88E1118_PHY_PAGE, 0x0000);
    
    	/* SGMII-to-Copper mode initialization */
    	if (phydev->interface == PHY_INTERFACE_MODE_SGMII ||
    		phydev->interface == PHY_INTERFACE_MODE_RGMII_ID) {
    		/* Select page 18 */
    		phy_write(phydev, MDIO_DEVAD_NONE, MIIM_88E1118_PHY_PAGE, 18);
    		
    		/* In reg 20, write MODE[2:0] = 0x1 (SGMII to Copper) */
    		if (phydev->interface == PHY_INTERFACE_MODE_SGMII) {
    			m88e1518_phy_writebits(phydev, MIIM_88E151x_GENERAL_CTRL,
    				       0, 3, MIIM_88E151x_MODE_SGMII);
    		} 
    else if (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID) {
    		/* In reg 20, write MODE[2:0] = 0x4 (RGMII to SGMII) */
    			m88e1518_phy_writebits(phydev, MIIM_88E151x_GENERAL_CTRL,
    				       0, 3, MII_88E151x_MODE_RGMII_TO_SGMII);
    		}
    
    		/* PHY reset is necessary after changing MODE[2:0] */
    		m88e1518_phy_writebits(phydev, MIIM_88E151x_GENERAL_CTRL,
    				       MIIM_88E151x_RESET_OFFS, 1, 1);
    
    		/* Reset page selection */
    		phy_write(phydev, MDIO_DEVAD_NONE, MIIM_88E1118_PHY_PAGE, 0);
    
    		udelay(100);
    	}
    
    	if (phydev->interface == PHY_INTERFACE_MODE_SGMII) {
    		reg = phy_read(phydev, MDIO_DEVAD_NONE,
    			       MIIM_88E1111_PHY_EXT_SR);
    
    		reg &= ~(MIIM_88E1111_HWCFG_MODE_MASK);
    		reg |= MIIM_88E1111_HWCFG_MODE_SGMII_NO_CLK;
    		reg |= MIIM_88E1111_HWCFG_FIBER_COPPER_AUTO;
    
    		phy_write(phydev, MDIO_DEVAD_NONE,
    			  MIIM_88E1111_PHY_EXT_SR, reg);
    	}
    
    	if (phy_interface_is_rgmii(phydev)) {
    		phy_write(phydev, MDIO_DEVAD_NONE, MII_MARVELL_PHY_PAGE, 2);
    
    		reg = phy_read(phydev, MDIO_DEVAD_NONE, MIIM_88E151x_PHY_MSCR);
    		reg &= ~MIIM_88E151x_RGMII_RXTX_DELAY;
    		if (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID)
    			reg |= MIIM_88E151x_RGMII_RXTX_DELAY;
    		else if (phydev->interface == PHY_INTERFACE_MODE_RGMII_RXID)
    			reg |= MIIM_88E151x_RGMII_RX_DELAY;
    		else if (phydev->interface == PHY_INTERFACE_MODE_RGMII_TXID)
    			reg |= MIIM_88E151x_RGMII_TX_DELAY;
    		phy_write(phydev, MDIO_DEVAD_NONE, MIIM_88E151x_PHY_MSCR, reg);
    
    		phy_write(phydev, MDIO_DEVAD_NONE, MII_MARVELL_PHY_PAGE, 0);
    	}
    
    		phy_write(phydev, MDIO_DEVAD_NONE, MII_MARVELL_PHY_PAGE, MII_MARVELL_FIBER_PAGE);
    		
    		phydev->autoneg = AUTONEG_DISABLE;
    		phydev->speed = SPEED_1000;
    		phydev->duplex = DUPLEX_FULL;
    
    		puts("phy_interface_is_rgmii out!!!!!!!!\n");
    
    	/* soft reset */
    	phy_reset(phydev);
    
    	genphy_config_aneg(phydev);
    	//genphy_restart_aneg(phydev);
    
    	return 0;
    }

到了这里,关于zynq平台 Linux系统 phy 88e1512驱动配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • FPGA纯verilog实现UDP协议栈,GMII接口驱动88E1111,提供工程源码和技术支持

    目前网上的fpga实现udp基本生态如下: 1:verilog编写的udp收发器,但中间的FIFO或者RAM等调用了IP,或者不带ping功能,这样的代码功能正常也能用,但不带ping功能基本就是废物,在实际项目中不会用这样的代码,试想,多机互联,出现了问题,你的网卡都不带ping功能,连基本的

    2024年02月13日
    浏览(39)
  • FPGA UDP协议栈:基于88E1111,支持RGMII、GMII、SGMII三种模式,提供3套工程源码和技术支持

    FPGA UDP协议栈:基于88E1111,支持RGMII、GMII、SGMII三种模式,提供3套工程源码和技术支持 目前网上的fpga实现udp基本生态如下: 1:verilog编写的udp收发器,但中间的FIFO或者RAM等调用了IP,或者不带ping功能,这样的代码功能正常也能用,但不带ping功能基本就是废物,在实际项目中

    2024年02月02日
    浏览(127)
  • 【以太网PHY】88Q2220MB0-NYA2A0G1、88Q2221MB0-NYA2A0G1具有MACsec安全功能

    Marvell Brightlane™ 88Q222 设备是一种单对以太网物理层收发器(PHY),支持通过非屏蔽双绞线(UTP)运行。该收发器实现了IEEE 802.3bp标准所定义的1000BASE-T1的以太网物理层部分。 88Q222xM集成了MACsec,可防止第二层车载网络的安全威胁。MACsec在逐跳的基础上确保数据交换的安全,

    2024年01月17日
    浏览(35)
  • 软件工程毕业设计课题(88)微信小程序毕业设计PHP电子书小说平台小程序系统设计与实现

    目的 :本课题主要目标是设计并能够实现一个基于微信小程序的在线免费小说平台,前台用户使用小程序,后台管理使用基PHP+MySql的B/S架构;管理员通过后台录入作者信息,发布资讯,管理会员等;作者通过后台发布的账号登录、发布小说、录入小说章节内容;用户通过小程

    2023年04月09日
    浏览(40)
  • petalinux定制ZYNQ的Linux操作系统

    在进行Zynq-7000的Linux系统开发时,Xilinx官方提供了一个名为petalinux的工具。该工具运行在pc端的linux环境下,使用这个工具可以为目标板有量身定制kernel、rootfs等。该工具可与vivado设计工具一起配合使用,旨在简化 Zynq-7000 的Linux系统开发过程,提高设计生产力。本文将介绍pe

    2024年02月16日
    浏览(41)
  • 0基础学习VR全景平台篇 第88篇:智慧眼-成员管理

    一、功能说明 成员管理,是指管理智慧眼项目的成员,拥有相关权限的人可以进行添加成员、分配成员角色、设置成员分类、修改成员以及删除成员五项操作。但是仅限于管理自己的下级成员,上级成员无权管理。 二、前台操作页面 登录智慧眼后台操作的账号通常称为超级

    2024年02月12日
    浏览(36)
  • 微软等开源评估ChatGPT、Phi、Llma等,统一测试平台

    微软亚洲研究院、中国科学院自动化研究所、中国科学技术大学和卡内基梅隆大学联合开源了,用于评估、分析大语言模型的统一测试平台——PromptBench。 Prompt Bench支持目前主流的开源、闭源大语言模型,例如,ChatGPT、GPT-4、Phi、Llma1/2、Gemini、Baichuan、Yi 等。 PromptBench内置了

    2024年01月21日
    浏览(32)
  • FPGA平台以太网学习:MAC与PHY间通信

    1、PHY(物理层):   MII/GMI/RMII/RGMII/SGMIII(介质独立接口子层),PLS/PCS(物理编码子层),PMA(物理介质连接子层),PMD(物理介质相关子层),AN(自动协商),MDI(媒介相关接口)。 2、PLS/PCS(物理编码子层):   (PLS)对 MAC 给的信息进行传递,只在IMb/s、10Mb/s 的应

    2024年02月04日
    浏览(50)
  • 开源ZYNQ AD9361软件无线电平台

    (1) XC7Z020-CLG400 (2) AD9363 (3) 单发单收,工作频率400MHz-2.7GHz (4) 发射带PA,最大输出功率约20dbm (5) 接收带LNA,低噪声系统 (6) 支持USB供电 (7) 1路千兆以太网RJ-45接口 (8) 板载UART/JTAG二合一接口 (9) 标准信用卡尺寸85mm*56mm 框图如下: 实物图如下: 原理图

    2024年02月14日
    浏览(48)
  • PHY芯片的使用(三)在linux下网络PHY的移植

    1 前言 配置设备树请参考上一章。此次说明还是以裕太的YT8511芯片为例。 2 需要配置的文件及路径 a. 在 .. /drivers/net/phy 目录下添加 yt_phy.c 文件(一般来说该驱动文件由厂家提供); b. 修改.. /drivers/net/phy 目录下的 Kconfig 文件,如下图所示。 c. 修改.. /drivers/net/phy 目录下的

    2024年02月16日
    浏览(34)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包