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

如上图所示,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)。

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

88e1512驱动配置步骤:

  • 配置工作模式为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驱动配置相关推荐

  1. linux网卡驱动离线安装_新装Linux系统没有网卡驱动的解决办法和步骤

    刚安装的linux系统没有网卡驱动,下面给出我的解决方法: (机器系统是RHEL5.3) 首先说明几个命令: #lsmod --显示已载入系统的模块. 执行lsmod指令,会列出所有已载入系统的模块. ...

  2. 赛灵思运行linux,Zynq下linux系统搭建

    文章来源:AI加速微信公众号(微信号:AIspeedup) Zynq器件将arm和FPGA结合,利用了两者各自的优势,arm可以实现灵活的控制,而FPGA部分可以实现算法加速,这大大扩展了zynq的应 ...

  3. 低配置系统安装 linux,Linux系统的安装和配置

    Linux系统的安装和配置 更新时间:2006年10月24日 00:00:00   作者: Linux,在今天的广大电脑玩家耳中已经不再是那个曾经陌生又遥远的名字,大家提起Linux时,不再是把它当做 ...

  4. zynq linux环境移植,ZYNQ 7030 Linux 系统移植

    ZYNQ 7030 Linux系统移植 手上有一块 ZYNQ-7030的演示板,是仿照Xilinx Zedboard设计的,但是与Zedboard又有所不同,因此花时间移植一下Linux系统.记录下这 ...

  5. Linux系统下adb驱动安装步骤 及 问题总结

    Linux系统下adb驱动安装步骤 及 问题总结 一.安装ADB工具 sudo apt-get update sudo apt-get install android-tools-adb 二.adb驱 ...

  6. linux 键盘驱动下载,嵌入式Linux系统的键盘驱动实现

    嵌入式Linux系统的键盘驱动实现1引言 Linux由于其具有内核强大且稳定,易于扩展和裁减,丰富的硬件支持等诸多优点,在嵌入式系统中得到了广泛的应用.很多嵌入式Linux系统,特别是一些具有与用户强 ...

  7. 嵌入式Linux系统中打印机驱动的移植

    一.开发环境 硬件环境:DM365 打印机型号:HP P1007 虚拟机系统:Red Hat Enterprise Linux 5 交叉编译环境:Ti交叉编译环境安装包 二.详细步骤 1.下载Ghos ...

  8. Linux系统中FTP的配置(图文详解-全)

    Linux系统中FTP的配置 二.    把安全级别调低           #vi /etc/selinux/config           注意:在RHEL4三.FTP软件包 #mount /d ...

  9. Linux系统的目录绑定配置

    Linux系统的目录绑定配置 一.源目录与目标目录情况 1.源目录文件及inode 2.目标目录的文件及inode 二.将两个目录进行绑定 1.moun --bind进行绑定 2.检查绑定后的两个目录 ...

最新文章

  1. HDLBits 系列(35)Lemmings Game
  2. 太原益学领军2021年高考成绩查询,益学领军 | 2020寒假高三拼命班火爆进行中
  3. Java instanceof 关键字【复习】
  4. android rfid 数据解析_手持机是什么?RFID手持机是什么?
  5. Python机器学习笔记:XgBoost算法(亲测)
  6. 使用JAXB将XML Schema绑定到Java类
  7. [Java基础]模块化概述
  8. get和post的联系与区别
  9. 【python】面向对象类的继承
  10. 3.4.1 - Numeric Types
  11. Unix环境下的编程,所涉及的主要c语言知识
  12. hdu 1007 Quoit Design(最近点对)
  13. XML参考 :XmlReader 详解、实例(3)-- 读取XML节点和属性名称
  14. SpringBoot 中 get/post 请求处理方式,以及requestboy为Json时的处理
  15. 如何改计算机二级照片大小,怎么修改照片大小内存,尺寸
  16. 极坐标格式下的二维傅里叶变换与逆变换推导
  17. webpack4打包js
  18. BZOJ1750: [Usaco2005 qua]Apple Catching
  19. java groovy集成_java与Groovy的整合
  20. ArcGIS 制图搭配:文字、比例尺等大小

热门文章

  1. HDMI是什么?HDMI接口有什么用?
  2. Head First 设计模式笔记 5.命令模式
  3. 实时准确高效动态检测确保铁路运行安全——TFDS、TVDS、TEDS检测系统
  4. 2022-2028全球与中国自愿碳抵消交易市场现状及未来发展趋势
  5. C语言基础入门 - 第一章 - 从入门到入土
  6. 环境变量Path误删除
  7. java笔记整理(超详细)
  8. Spyder 打不开的一种解决办法
  9. c# winform登录窗口按enter自动登录设置
  10. 概括专线接入类型,互联网专线接入方式有哪些?