RK3566 Android 11平台上适配YT8512C 100M PHY
RK3566代码之前适配的1000M IC RTL8211F ,
现在需要在之前的基础上修改PHY IC 为裕泰的YT8512C
----------------------------------------------------------------------+//将1000M 的配置关掉,改为100M 配置,查看RK3566 资料关于以太网的配置即可知道如何修改
#if 0
&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";
};
#else
//gmac1m0
&gmac1_clkin {clock-frequency = <50000000>;
};
&gmac1 {phy-mode = "rmii";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_RMII_SPEED>, <&gmac1_clkin>;//assigned-clock-rates = <0>, <50000000>;pinctrl-names = "default";pinctrl-0 = <&gmac1m0_miim&gmac1m0_clkinout&gmac1m0_tx_bus2&gmac1m0_rx_bus2>;//tx_delay = <0x4f>;//rx_delay = <0x26>;phy-handle = <&rmii_phy1>;status = "okay";
};#endif+//rgmii 1000M 改为100M
-&mdio1 {
- rgmii_phy1: phy@0 {
- compatible = "ethernet-phy-ieee802.3-c22";
- reg = <0x0>;
- };
-};+&mdio1 {
+ rmii_phy1: phy@0 {
+ compatible = "ethernet-phy-ieee802.3-c22";
+ reg = <0x0>;
+ };
+};//修改1000M 为100M ETH 的VDDIO 需要从1.8V 改为3.3V
&pmu_io_domains {status = "okay";pmuio2-supply = <&vcc_3v3>;vccio1-supply = <&vcc_3v3>;vccio3-supply = <&vcc_3v3>;vccio4-supply = <&vcc_1v8>;vccio5-supply = <&vcc_3v3>;-vccio6-supply = <&vcc_1v8>;+vccio6-supply = <&vcc_3v3>;vccio7-supply = <&vcc_3v3>;
};-----------------------------
[ 23.957084] rk_gmac-dwmac fe010000.ethernet eth0: No Safety Features support found
[ 23.957124] rk_gmac-dwmac fe010000.ethernet eth0: IEEE 1588-2008 Advanced Timestamp supported
[ 23.958316] rk_gmac-dwmac fe010000.ethernet eth0: registered PTP clock
[ 23.960237] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready[ 1609.817567] rk_gmac-dwmac fe010000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx
[ 1609.817709] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
-----------------------------
参照文档修改,发现以太网初始化正常,节点eth0 正常生成,也能够ping通数据2.接下来需要修改 以太网的网络接口状态灯:根据数据规格书:LED0 0x40c0寄存器写0x30 LED1 0x40c3寄存器写0x1300commit bd71fd55f47f18acb35f8974ebaf6dd696ba7738
Author: amediatech <jiangsai@amediatech.cn>
Date: Wed Dec 27 17:53:17 2023 +0800modify led controldiff --git a/kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index e75d44b987..f1f304e6f2 100644
--- a/kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -26,6 +26,7 @@#include <linux/clk.h>#include <linux/kernel.h>
+#include <linux/version.h>#include <linux/interrupt.h>#include <linux/ip.h>#include <linux/tcp.h>
@@ -57,7 +58,21 @@#define STMMAC_ALIGN(x) ALIGN(ALIGN(x, SMP_CACHE_BYTES), 16)#define TSO_MAX_BUFF_SIZE (SZ_16K - 1)
-
+#define REG_DEBUG_ADDR_OFFSET 0x1e
+#define REG_DEBUG_DATA 0x1f
+#define YT8512_LED0_ACT_BLK_IND 0x1000
+#define YT8512_LED0_DIS_LED_AN_TRY 0x0001
+#define YT8512_LED0_BT_BLK_EN 0x0002
+#define YT8512_LED0_HT_BLK_EN 0x0004
+#define YT8512_LED0_COL_BLK_EN 0x0008
+#define YT8512_LED0_BT_ON_EN 0x0010
+#define YT8512_LED1_BT_ON_EN 0x0010
+#define YT8512_LED1_TXACT_BLK_EN 0x0100
+#define YT8512_LED1_RXACT_BLK_EN 0x0200
+#define YT8512_EXTREG_LED0 0x40c0
+#define YT8512_EXTREG_LED1 0x40c3
+//#define RTL_8211F_PHY_ID 0x001cc916
+#define YT8512C_PHY_ID 0x00000128/* Module parameters */#define TX_TIMEO 5000static int watchdog = TX_TIMEO;
@@ -4270,6 +4285,122 @@ static int stmmac_hw_init(struct stmmac_priv *priv)return 0;}
+#if (KERNEL_VERSION(5, 5, 0) > LINUX_VERSION_CODE)
+static inline void phy_lock_mdio_bus(struct phy_device *phydev)
+{
+#if (KERNEL_VERSION(4, 5, 0) > LINUX_VERSION_CODE)
+ mutex_lock(&phydev->bus->mdio_lock);
+#else
+ mutex_lock(&phydev->mdio.bus->mdio_lock);
+#endif
+}
+
+static inline void phy_unlock_mdio_bus(struct phy_device *phydev)
+{
+#if (KERNEL_VERSION(4, 5, 0) > LINUX_VERSION_CODE)
+ mutex_unlock(&phydev->bus->mdio_lock);
+#else
+ mutex_unlock(&phydev->mdio.bus->mdio_lock);
+#endif
+}
+#endif
+
+#if (KERNEL_VERSION(4, 16, 0) > LINUX_VERSION_CODE)
+static inline int __phy_read(struct phy_device *phydev, u32 regnum)
+{
+#if (KERNEL_VERSION(4, 5, 0) > LINUX_VERSION_CODE)
+ struct mii_bus *bus = phydev->bus;
+ int addr = phydev->addr;
+ return bus->read(bus, phydev->addr, regnum);
+#else
+ struct mii_bus *bus = phydev->mdio.bus;
+ int addr = phydev->mdio.addr;
+#endif
+ return bus->read(bus, addr, regnum);
+}
+
+static inline int __phy_write(struct phy_device *phydev, u32 regnum, u16 val)
+{
+#if (KERNEL_VERSION(4, 5, 0) > LINUX_VERSION_CODE)
+ struct mii_bus *bus = phydev->bus;
+ int addr = phydev->addr;
+#else
+ struct mii_bus *bus = phydev->mdio.bus;
+ int addr = phydev->mdio.addr;
+#endif
+ return bus->write(bus, addr, regnum, val);
+}
+#endif
+
+static int ytphy_read_ext(struct phy_device *phydev, u32 regnum)
+{
+ int ret;
+
+ phy_lock_mdio_bus(phydev);
+ ret = __phy_write(phydev, REG_DEBUG_ADDR_OFFSET, regnum);
+ if (ret < 0)
+ goto err_handle;
+
+ ret = __phy_read(phydev, REG_DEBUG_DATA);
+ if (ret < 0)
+ goto err_handle;
+
+err_handle:
+ phy_unlock_mdio_bus(phydev);
+ return ret;
+}
+
+static int ytphy_write_ext(struct phy_device *phydev, u32 regnum, u16 val)
+{
+ int ret;
+
+ phy_lock_mdio_bus(phydev);
+ ret = __phy_write(phydev, REG_DEBUG_ADDR_OFFSET, regnum);
+ if (ret < 0)
+ goto err_handle;
+
+ ret = __phy_write(phydev, REG_DEBUG_DATA, val);
+ if (ret < 0)
+ goto err_handle;
+
+err_handle:
+ phy_unlock_mdio_bus(phydev);
+ return ret;
+}
+
+
+static int phy_yt8512c_led_fixup(struct phy_device *phydev)
+{
+ int ret;
+ int val;
+ int mask;
+ printk("-------------------------%s in.\n", __func__);
+ val = ytphy_read_ext(phydev, YT8512_EXTREG_LED0); //GREEN
+ printk("--------------------YT8512_EXTREG_LED0 read val is %d.\n",val); //785 = 0x311;
+ if (val < 0)
+ return val;
+ //need set 0x30
+ val |= YT8512_LED0_ACT_BLK_IND;
+ mask = YT8512_LED0_DIS_LED_AN_TRY | YT8512_LED0_BT_BLK_EN |
+ YT8512_LED0_HT_BLK_EN | YT8512_LED0_COL_BLK_EN |
+ YT8512_LED0_BT_ON_EN;
+ val &= ~mask;
+ printk("--------------------YT8512_EXTREG_LED0 write val is %d.\n",val); //800 = 0x320
+ ret = ytphy_write_ext(phydev, YT8512_EXTREG_LED0, 0x30);
+ if (ret < 0)
+ return ret;
+ val = ytphy_read_ext(phydev, YT8512_EXTREG_LED1); //YELLOW
+ printk("--------------------YT8512_EXTREG_LED1 read val is %d.\n",val);
+ if (val < 0)
+ return val;
+ //need set LED1 0x1300
+ val |= YT8512_LED1_BT_ON_EN;
+ mask = YT8512_LED1_TXACT_BLK_EN | YT8512_LED1_RXACT_BLK_EN;
+ val &= ~mask;
+ printk("--------------------YT8512_EXTREG_LED1 write val is %d.\n",val);
+ ret = ytphy_write_ext(phydev, YT8512_EXTREG_LED1, 0x1300);
+ return ret;
+}/*** stmmac_dvr_probe
@@ -4463,7 +4594,10 @@ int stmmac_dvr_probe(struct device *device,netdev_warn(priv->dev, "%s: failed debugFS registration\n",__func__);#endif
-
+ret = phy_register_fixup_for_uid(YT8512C_PHY_ID, 0xffffffff, phy_yt8512c_led_fixup);
+if (ret){
+ printk("Cannot register PHY board fixup.\n");
+ }return ret;error_netdev_register:
相关文章:
RK3566 Android 11平台上适配YT8512C 100M PHY
RK3566代码之前适配的1000M IC RTL8211F , 现在需要在之前的基础上修改PHY IC 为裕泰的YT8512C ----------------------------------------------------------------------//将1000M 的配置关掉,改为100M 配置,查看RK3566 资料关于以太网的配置即可知道如何修改 #if…...
docker 部署haproxy cpu占用特别高
在部署mysql 主主高可用时,使用haproxy进行负载,在服务部使用的情况下发现服务器cpu占比高,负载也高,因此急需解决这个问题。 1.解决前现状 1.1 部署配置文件 cat > haproxy.cfg << EOF globalmaxconn 4000nbthrea…...
Oracle导出CSV文件
利用spool spool基本格式: spool 路径文件名 select col1||,||col2||,||col3||,||col4 from tablename; spool off spool常用的设置: set colsep ; //域输出分隔符 set echo off; //显示start启动的脚本中的每个sql命令,缺…...
图像分割实战-系列教程12:deeplab系列算法概述
🍁🍁🍁图像分割实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 1、deeplab概述 图像分割中的传统做法:为了增大感受野,通常都会选择pooling…...
数据库02-07 存储
计算机存储系统: 02.磁道存储...
WPF 入门教程DispatcherTimer计时器
https://www.zhihu.com/tardis/bd/art/430630047?source_id1001 在 WinForms 中,有一个名为 Timer 的控件,它可以在给定的时间间隔内重复执行一个操作。WPF 也有这种可能性,但我们有DispatcherTimer控件,而不是不可见的控件。它几…...
【教学类-43-04】20231229 N宫格数独4.0(n=2,4,6,8) (ChatGPT AI对话大师生成 回溯算法)
作品展示: 背景需求: 幼儿表示自己适合做5宫格 第一次AI生成九宫格数独python代码 【教学类-43-03】20231229 N宫格数独3.0(n1、2、3、4、6、8、9) (ChatGPT AI对话大师生成)-CSDN博客文章浏览阅读162次&…...
WPF美化ItemsControl1:不同颜色间隔
首先我们有的是一个绑定好数据的ItemsControl <ItemsControl ItemsSource"{Binding Starts}"> </ItemsControl> 运行后呢是朴素的将数据竖着排列 如果想要数据之间有间距,可以使用数据模板,将数据放到TextBlock中显示࿰…...
查看进程对应的路径查看端口号对应的进程ubuntu 安装ssh共享WiFi设置MyBatis 使用map类型作为参数,复杂查询(导出数据)
Linux 查询当前进程所在的路径 top 命令查询相应的进程号pid ps -ef |grep 进程名 lsof -I:端口号 netstat -anp|grep 端口号 cd /proc/进程id cwd 进程运行目录 exe 执行程序的绝对路径 cmdline 程序运行时输入的命令行命令 environ 记录了进程运行时的环境变量 fd 目录下是进…...
医院信息系统集成平台—安全保障体系
隐私保护措施 隐私保护及信息安全是医院信息平台所要重点解决的问题,应从患者同意,匿名化服务,依据病种、角色等多维度授权,关键信息(字段级、记录级、文件级)加密存储等方面展开。电子病历等医疗数据进行调阅时,包括强身份认证需求、角色授权需求、责任认…...
【信息论与编码】习题-填空题
目录 填空题1.克劳夫特不等式是判断( )的充要条件。2.无失真信源编码的中心任务是编码后的信息率压缩接近到()限失真压缩中心任务是在给定的失真度条件下,信息率压缩接近到( )。3.常用的检纠错方…...
二叉树的层序遍历经典问题(算法村第六关白银挑战)
基本的层序遍历与变换 二叉树的层序遍历 102. 二叉树的层序遍历 - 力扣(LeetCode) 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例 1: 输入…...
信息学奥赛一本通:装箱问题
题目链接:http://ybt.ssoier.cn:8088/problem_show.php?pid1917 题目 1917:【01NOIP普及组】装箱问题 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 4117 通过数: 2443 【题目描述】 有一个箱子容量为V�(正整数,…...
ReactNative 常见问题及处理办法(加固混淆)
ReactNative 常见问题及处理办法(加固混淆) 文章目录 摘要引言正文ScrollView内无法滑动RN热更新中的文件引用问题RN中获取高度的技巧RN强制横屏UI适配问题低版本RN(0.63以下)适配iOS14图片无法显示问题RN清理缓存RN navigation参…...
算法基础之合并果子
合并果子 核心思想: 贪心 Huffman树(算法): 每次将两个最小的堆合并 然后不断向上合并 #include<iostream>#include<algorithm>#include<queue> //用小根堆实现找最小堆using namespace std;int main(){int n;cin>>n;priority_queue&l…...
CSS 使用技巧
CSS 使用技巧 引入苹方字体 苹方提供了六个字重,font-family 定义如下:苹方-简 常规体font-family: PingFangSC-Regular, sans-serif;苹方-简 极细体font-family: PingFangSC-Ultralight, sans-serif;苹方-简 细体font-family: PingFangSC-Light, sans…...
typescript,eslint,prettier的引入
typescript 首先用npm安装typescript,cnpm i typescript 然后再tsc --init生成tsconfig.json配置文件,这个文件在package.json同级目录下 最后在tsconfig.json添加includes配置项,在该配置项中的目录下,所有的d.ts中的类型可以在…...
web前端javaScript笔记——(7)Math和Date方法
Math -Math和其他的对象不同,它不是一个构造函数, 它属于一个工具类不用创建对象,它里边封装了数学运算相关的属性和方法 比如 Math.PI 表示的圆周率 使用方法Math.方法(); Math.abs()可以用来计算一个数的绝对值 Math.ceil()可以对一…...
深入理解Java中资源加载的方法及Spring的ResourceLoader应用
在Java开发中,资源加载是一个基础而重要的操作。本文将深入探讨Java中两种常见的资源加载方式:ClassLoader的getResource方法和Class的getResource方法,并介绍Spring框架中的ResourceLoader的应用。 1. 资源加载的两种方式 1.1 ClassLoader…...
实时记录和查看Apache 日志
Apache 是一个开源的、广泛使用的、跨平台的 Web 服务器,保护 Apache Web 服务器平台在很大程度上取决于监控其上发生的活动和事件,监视 Apache Web 服务器的最佳方法之一是收集和分析其访问日志文件。 Apache 访问日志提供了有关用户如何与您的网站交互…...
Java实战项目五:文本冒险游戏
文章目录 一、实战概述二、知识点概览(一)条件分支与循环结构(二)面向对象设计(三)用户交互与事件处理 三、思路分析(一)系统架构设计(二)功能模块划分详解 四…...
docker_ROS的usb_cam使用与标定
目录 准备 准备标定板 新建容器 新建usb_cam话题的ROS功能包 编写代码 编译 运行功能包 标定 安装camera_calibration标定功能包 启动发布usb_cam话题的功能包 启动camera_calibration标定功能包 准备 usb相机 标定板 一个带有ROS的docker镜像。 准备标定板 图…...
记一次RabbitMQ服务器异常断电之后,服务重启异常的处理过程
转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 问题描述: 机房突然停电,rabbitmq的主机异常断电,集群服务全部需要重启。但是在执行service…...
rime中州韵小狼毫 help lua Translator 帮助消息翻译器
lua 是 Rime中州韵/小狼毫输入法强大的武器,掌握如何在Rime中州韵/小狼毫中使用lua,你将体验到什么叫 随心所欲。 先看效果 在 rime中州韵 输入效果一览 中的 👇 help效果 一节中, 我们看到了在Rime中州韵/小狼毫输入法中输入 h…...
C++完成使用map Update数据 二进制数据
1、在LXMysql.h和LXMysql.cpp分别定义和编写关于pin语句的代码 //获取更新数据的sql语句 where语句中用户要包含where 更新std::string GetUpdatesql(XDATA kv, std::string table, std::string where); std::string LXMysql::GetUpdatesql(XDATA kv, std::string table, std…...
ARCGIS PRO SDK 访问Geometry对象
一、Geometry常用对象 二、主要类 1、ReadOnlyPartCollection:Polyline 和 Polygon 使用的 ReadOnlySegmentCollection 部件的只读集合,属性成员: 名字描述Count获取 ICollection 中包含的元素数。TIEM获取位于指定索引处的元素。Spatial…...
数据结构之各大排序(C语言版)
我们这里话不多说,排序重要性大家都很清楚,所以我们直接开始。 我们就按照这张图来一一实现吧! 一.直接插入排序与希尔排序. 这个是我之前写过的内容了,大家可以通过链接去看看详细内容。 算法之插入排序及希尔排序(…...
c++ 中多线程的使用
如果你的其他逻辑必须在线程 t1 和 t2 之后执行,但你又希望这些线程能够同时运行,你可以在主线程中使用 std::thread::detach 将线程分离,让它们在后台运行。这样,主线程不会等待这些线程的完成,而可以继续执行其他逻辑…...
理解二叉树的遍历(算法村第七关白银挑战)
二叉树的前序遍历 144. 二叉树的前序遍历 - 力扣(LeetCode) 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例 1: 输入:root [1,null,2,3] 输出:[1,2,3]解 LeetCode以及面试中提供的方法可能…...
所有单片机使用的汇编语言是统一的吗?
所有单片机使用的汇编语言是统一的吗? 在开始前我有一些资料,是我根据网友给的问题精心整理了一份「单片机的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!&…...
广州 企业网站建设/互联网营销方案策划
在给定的网格中,每个单元格可以有以下三个值之一: 值 0 代表空单元格; 值 1 代表新鲜橘子; 值 2 代表腐烂的橘子。 每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂。 返回直…...
重庆地产网站建设/百度app下载官方免费下载最新版
最近DBA 乙在更新Oracle ERP10.7 TEST DB时,在更改apps这一步骤出现问题,导致无法登陆ERP10.7 Form。按照更改ERP10.7 apps schema密码的方法中troubleshooting部分仍然无法解决问题:UPDATE apps.fnd_oracle_useridSET encrypted_oracle_pass…...
发布网站需要备案/网络营销个人感悟小结
8.24 8.25 8.26 前言 我只是讨厌被人使唤——所谓“任性”有钱人是规则的制定者女人总是做的傻事——与钱有关的傻事: “我们低估了自己”男人迷路了,又不问路,我们却还跟着他如果得到某件东西的代价是丢掉我们的自尊、自信和自我价值&…...
职教集团网站建设方案/一键优化清理
这些都是css控制的,然后我们看下样式:分别选择为:奇数行、偶数列、第五行: table tr:nth-child(odd){background:#F4F4F4;}table td:nth-child(even){color:#C00;}table tr:nth-child(5){background:#73B1E0;color:#FFF;}转载于:h…...
广东网站设计的公司/推广引流方法有哪些推广方法
今天为大家带来的内容比较实用,主要还是针对零基础的小伙伴,话不多说,直接开始码(本文内容用的是第一人称) 平常我都是直接执行 pip install 安装的第三方库,很多教程也是这么介绍的,一直以来我…...
中国电子商务官网首页/宁波seo公司
#浙江#今天将为大家介绍浙江三所优质高职院校,这三所大学分别坐落于浙江杭州市、温州市。快来看看有没有你想去的,或者正在就读的。浙江交通职业技术学院创办于1958年的浙江省公路学校和浙江省航务学校的前身之一,1999年由多校合并升格为浙江…...