JL2101 是一颗和Realtek Rtl8211F pin to pin 的国产1000M PHY IC
由于他和RTL8211F 管脚和供电电压一致,所以我们一开始按照RK的建议直接用RK RTL8211F 的配置进行编译:
RK3566 和RK3568 等IC 需要注意domain 工作电压配置,按照实际硬件配置,软件上做相应的电压配置,如果配置错误可能有该组电压域VDDIO 失效的可能性:
PMUIO2 Supply Power Voltage1:3300000
VCCIO1 Supply Power Voltage1:3300000
VCCIO3 Supply Power Voltage1:3300000
VCCIO4 Supply Power Voltage1:1800000
VCCIO5 Supply Power Voltage1:3300000
VCCIO6 Supply Power Voltage1:1800000
VCCIO7 Supply Power Voltage1:3300000

kernel$ vi drivers/net/ethernet/stmicro/stmmac/stmmac_main.c

1.走Linux通用驱动,初始化阶段硬复位或软复位都会有DMA报错,使PHY 进入Power down。
使用RC上电复位跳过初始化阶段的设置,可正常启动。
解决方案为:在初始化DMA前加2s延时,等待PHY的RX clock ready后再初始化DMA
修改代码kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.cstatic int stmmac_open(struct net_device *dev)
{struct stmmac_priv *priv = netdev_priv(dev);u32 chan;int ret;if (priv->hw->pcs != STMMAC_PCS_RGMII &&priv->hw->pcs != STMMAC_PCS_TBI &&priv->hw->pcs != STMMAC_PCS_RTBI) {ret = stmmac_init_phy(dev);if (ret) {netdev_err(priv->dev,"%s: Cannot attach to PHY (error: %d)\n",__func__, ret);return ret;}}/* Extra statistics */memset(&priv->xstats, 0, sizeof(struct stmmac_extra_stats));priv->xstats.threshold = tc;priv->dma_buf_sz = STMMAC_ALIGN(buf_sz);priv->rx_copybreak = STMMAC_RX_COPYBREAK;ret = alloc_dma_desc_resources(priv);if (ret < 0) {netdev_err(priv->dev, "%s: DMA descriptors allocation failed\n",__func__);goto dma_desc_error;}ret = init_dma_desc_rings(dev, GFP_KERNEL);if (ret < 0) {netdev_err(priv->dev, "%s: DMA descriptors initialization failed\n",__func__);goto init_error;}
+#if 1
+//#ifdef CONFIG_JLSEMI_PHY
+        printk("sam -------bootup add 2s delay time.\n");
+//sam jiang loged
+       mdelay(2500);
+#endifret = stmmac_hw_setup(dev, true);if (ret < 0) {netdev_err(priv->dev, "%s: Hw setup failed\n", __func__);goto init_error;}stmmac_init_tx_coalesce(priv);int stmmac_resume(struct device *dev)
{struct net_device *ndev = dev_get_drvdata(dev);struct stmmac_priv *priv = netdev_priv(ndev);if (!netif_running(ndev))return 0;/* Power Down bit, into the PM register, is cleared* automatically as soon as a magic packet or a Wake-up frame* is received. Anyway, it's better to manually clear* this bit because it can generate problems while resuming* from another devices (e.g. serial console).*/if (device_may_wakeup(priv->device)) {mutex_lock(&priv->lock);stmmac_pmt(priv, priv->hw, 0);mutex_unlock(&priv->lock);priv->irq_wake = 0;} else {pinctrl_pm_select_default_state(priv->device);/* enable the clk previously disabled */clk_prepare_enable(priv->plat->stmmac_clk);clk_prepare_enable(priv->plat->pclk);if (priv->plat->clk_ptp_ref && IS_ENABLED(CONFIG_STMMAC_PTP))clk_prepare_enable(priv->plat->clk_ptp_ref);/* reset the phy so that it's ready */if (priv->mii)stmmac_mdio_reset(priv->mii);}mutex_lock(&priv->lock);stmmac_reset_queues_param(priv);stmmac_free_tx_skbufs(priv);stmmac_clear_descriptors(priv);
+        #if 1
+//      #ifdef CONFIG_JLSEMI_PHY
+        printk("sam -------resume add 2s delay time.\n");
+        //sam jiang loged
+        mdelay(2000);
+        #endifstmmac_hw_setup(ndev, false);stmmac_init_tx_coalesce(priv);stmmac_set_rx_mode(ndev);stmmac_enable_all_queues(priv);netif_device_attach(ndev);-------------------------------------------------------------------------------------GMAC1配置为 RGMII Crystal 25M for PHY, PLL output 125M for TX_CLK&gmac1 {
phy-mode = "rgmii";
clock_in_out = "output";
snps,reset-gpio = <&gpio2 RK_PD1 GPIO_ACTIVE_LOW>;
snps,reset-active-low;
/* Reset time is 20ms, 100ms for rtl8211f */
snps,reset-delays-us = <0 20000 100000>;
assigned-clocks = <&cru SCLK_GMAC1_RX_TX>, <&cru SCLK_GMAC1>;
assigned-clock-parents = <&cru SCLK_GMAC1_RGMII_SPEED>;
assigned-clock-rates = <0>, <125000000>;
pinctrl-names = "default";
pinctrl-0 = <&gmac1m0_miim
&gmac1m0_tx_bus2
&gmac1m0_rx_bus2
&gmac1m0_rgmii_clk
&gmac1m0_rgmii_bus>;
tx_delay = <0x4f>;
rx_delay = <0x26>;
phy-handle = <&rgmii_phy1>;
status = "okay";
};
&mdio1 {
rgmii_phy1: phy@0 {
compatible = "ethernet-phy-ieee802.3-c22";
reg = <0x0>;
};
};修改kernel/arch/arm64/boot/dts/rockchip/rk3566-box-demo-v10.dtsi+/*
-&gmac1 {
-   phy-mode = "rgmii";
-   clock_in_out = "input";
-
-   snps,reset-gpio = <&gpio4 RK_PC2 GPIO_ACTIVE_LOW>;
-   snps,reset-active-low;
-   //Reset time is 20ms, 100ms for rtl8211f
-   snps,reset-delays-us = <0 20000 100000>;-    assigned-clocks = <&cru SCLK_GMAC1_RX_TX>, <&cru SCLK_GMAC1>;
-   assigned-clock-parents =  <&cru SCLK_GMAC1_RGMII_SPEED>, <&gmac1_clkin>;
-
-   assigned-clock-rates = <0>, <125000000>;
-   pinctrl-names = "default";
-   pinctrl-0 = <&gmac1m1_miim
-            &gmac1m1_tx_bus2
-            &gmac1m1_rx_bus2
-            &gmac1m1_rgmii_clk
-            &gmac1m1_rgmii_bus
-            &gmac1m1_clkinout>;
-
-   tx_delay = <0x4b>;
-   rx_delay = <0x2b>;
-
-   phy-handle = <&rgmii_phy1>;
-   status = "okay";
-};
+*/+&gmac1 {
+        phy-mode = "rgmii";
+        clock_in_out = "output";
+  snps,reset-gpio = <&gpio4 RK_PC2 GPIO_ACTIVE_LOW>;
+        snps,reset-active-low;
+        /* Reset time is 20ms, 100ms for rtl8211f */
+        snps,reset-delays-us = <0 100000 200000>;
+        assigned-clocks = <&cru SCLK_GMAC1_RX_TX>, <&cru SCLK_GMAC1>;
+        assigned-clock-parents = <&cru SCLK_GMAC1_RGMII_SPEED>;
+        assigned-clock-rates = <0>, <125000000>;
+        pinctrl-names = "default";
+        pinctrl-0 = <&gmac1m1_miim
+                     &gmac1m1_tx_bus2
+                     &gmac1m1_rx_bus2
+                     &gmac1m1_rgmii_clk
+                     &gmac1m1_rgmii_bus>;
+        tx_delay = <0x4b>;
+        rx_delay = <0x26>;
+        phy-handle = <&rgmii_phy1>;
+        status = "okay";
+};修改后发现有时候初始化的时候 phy reset 失败,我们将Phy reset 的时间加长
snps,reset-delays-us = <0 100000 200000>;
如上图所填参数

RK3566上调试JL2101 1000M PHY相关推荐

  1. 自协商SGMII_板上调试篇

    自协商SGMII_板上调试篇 前言 环境搭建 千兆分析 Q0 Q1 千兆转百兆全双工 Q0 Q1 百兆全转百兆半 Q0 Q1 PING包 PCping Q0 Q1 BoardPing Q0 Q1 总结 ...

  2. 发条js调试工具_小工具大帮手,利用 @open-node/antman 实现 node.js 进程线上调试,无须重启...

    @open-node/antman 窥探进程内部,让 Node.js 生产环境线上调试成为可能 解决了什么问题? 日常在开发服务端代码,很多是服务类型的,比如基于http的api,或者一些任务脚本,需 ...

  3. android调试更换模拟器,在模拟器上调试 Android 磨损

    在模拟器上调试 Android 磨损Debug Android Wear on an Emulator 06/21/2018 本文内容 这些文章介绍了如何在模拟器上调试 Xamarin 应用程序应用程 ...

  4. arm linux内核调试,kgdb在ARM开发板上调试kernel成功

    大概几个注意点: 1.公版的Linux需要打kgdb补丁的,kgdb官方那边可能不支持新版本的内核(我的是2.6.18),可以在下面的网址找到,但是ARM上调试需要打哪些补丁,不是很清楚,网上的几篇中 ...

  5. android 网络时区 错误,React native 安卓机器上调试代码报错:网络请求出错TypeError: Network request failed...

    React native 安卓机器上调试代码报错:网络请求出错TypeError: Network request failed 安卓机器 usb连接调试 报错信息 TypeError: Networ ...

  6. Android 借助Stetho在Chrome上调试Android网络、数据库、Sharedpreferences

    Android 借助Stetho在Chrome上调试Android网络.数据库.Sharedpreferences 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/a ...

  7. 禅道 bug状态 open_小工具大帮手,利用 @open-node/antman 实现 node.js 进程线上调试,无须重启...

    @open-node/antman 窥探进程内部,让 Node.js 生产环境线上调试成为可能 解决了什么问题? 日常在开发服务端代码,很多是服务类型的,比如基于http的api,或者一些任务脚本,需 ...

  8. Leetcode怎么调试java代码,在Clion上调试LeetCode代码

    在Clion上调试LeetCode代码 在leetcode上做题调试起来总有些不方便,所以查阅了一些资料后,按以下配置,自我感觉效率还行,分享给大家.祝大家刷题愉快.并附上自己整理的leetcode4 ...

  9. 在龙芯上调试CoreCLR

    dotnet for mips64 的 ea 版本已经发布 https://github.com/gsvm/loongson-dotnet/releases 在龙芯上调试CoreCLR 由于lldb在 ...

  10. vs生成linux服务器程序,从Visual Studio到Linux上调试C++代码

    从Visual Studio到Linux上调试C++代码 04/30/2015 5 分钟可看完 本文内容 [原文发表时间] 2015/4/29 10:00 PM 正如您可能已经听说的那样,Visual ...

最新文章

  1. 在CentOS 6.3 64bit上安装MySQL for python模块
  2. window7 telnet localhost 5554
  3. Node项目实战开发-博客系统
  4. 五、顺序访问性能测试
  5. pku1363 Rails
  6. scala 访问修饰符_Scala访问修饰符–私有,受保护的和公共的
  7. bootstrap dialog
  8. 【软件工程师学硬件】之 单片机
  9. java 怎么使用 设计模式对业务进行解耦(一)
  10. 计算机管理丢失computer文件,Win7弹框提示找不到Computer Management.lnk文件怎么办?...
  11. 2022江苏省职业院校技能大赛(中职)网络搭建与应用赛项
  12. IMAC 2011 MID免光驱安装WIN10
  13. API接口:公司信息查询在线工具应用
  14. 问题1053:素数回文
  15. 图片的合成(个人练习,不喜勿喷!)
  16. MIMICIV2.0版本Concepts自动生成
  17. 计算机管理不小心删除了e盘,【J.C.X】计算机的D盘和E盘突然消失. 小编帮你找回来...
  18. PhotoShop使用 之 图层文字编辑
  19. 如何将本地代码文件上传到阿里云的git上面
  20. linux读写nvram,openwrt - NVRAM集合

热门文章

  1. Velodyne 16线三维激光雷达
  2. PS 将图片渐变透明
  3. java中bitconverter_BitConverter.GetBytes 方法以什么顺序返回字节数组
  4. android js回调函数,JavaScript回调函数的几种用法
  5. 1223 Dice Roll Simulation
  6. 虚拟机文件无法复制到主计算机,VMware 物理机可以复制文件到虚拟机,却无法从虚拟机复制文件到物理机(已解决)...
  7. 网络安全七大赛道:全面梳理(重磅深度)
  8. 新玺配资:板块轮动加快 多看少动均衡配置为主
  9. Hbase的过滤器分类
  10. 乱了夏末蓝了海,伤了初冬白了城。