技术专栏
rtl网卡驱动-解决网卡灯(link/act)异常
概述
一般网卡灯有一个绿灯、一个黄灯,分别代表连接指示灯LINK、信号传输指示灯ACT,连接指示灯亮表示网卡与网络连接状况良好(有些板载网卡只有工作在100M时,此灯才亮)。信号传输指示灯闪烁表示网卡正在进行数据传输。
本项目需要将网卡配置成link灯常亮、ACT灯闪烁
以下以rtl8211f网卡为例,进行讲述
看网卡芯片手册和硬件原理图
看网卡芯片手册,确定LCR寄存器说明:
看硬件原理图,确定网卡link灯和ACT LED连接方式:
设置 led1(green) Link 10/100/1000M
设置 led2(yellow) Link 10/100/1000M+Active
相关代码如下
解决rtl8211f-cg驱动:网卡灯异常
diff --git a/kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/kernel/drivers/net/etherne
index 34f216cf5..886f9f586 100755
--- a/kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -61,6 +61,11 @@
#define STMMAC_ALIGN(x) ALIGN(ALIGN(x, SMP_CACHE_BYTES), 16)
#define TSO_MAX_BUFF_SIZE (SZ_16K - 1)
+#define RTL_8211F_PHY_ID 0x001cc916
+#define RTL_8211F_PHY_ID_MASK 0x001fffff
+#define RTL_8211F_PAGE_SELECT 0x1f
+#define RTL_8211F_LCR_ADDR 0x10
+#define RTL_8211F_EEELCR_ADDR 0x11
/* Module parameters */
#define TX_TIMEO 5000
@@ -125,6 +130,34 @@ static void stmmac_exit_fs(struct net_device *dev);
#define STMMAC_COAL_TIMER(x) (jiffies + usecs_to_jiffies(x))
+static int phy_rtl8211f_led_fixup(struct phy_device *phydev)
+{
+ u32 val, val2;
+
+ pr_info("terry in : %s\n", __func__);
+
+ /*switch to page0xd04*/
+ phy_write(phydev, RTL_8211F_PAGE_SELECT, 0xd04);
+
+ /*set led1(green) Link 10/100/1000M, and set led2(yellow) Link 10/100/1000M+Active*/
+ val = phy_read(phydev, RTL_8211F_LCR_ADDR);
+ val |= (1<<5);
+ val |= (1<<8);
+ val &= (~(1<<9));
+ val |= (1<<10);
+ val |= (1<<11);
+ phy_write(phydev, RTL_8211F_LCR_ADDR, val);
+
+ /*set led1(green) EEE LED function disabled so it can keep on when linked*/
+ val2 = phy_read(phydev, RTL_8211F_EEELCR_ADDR);
+ val2 &= (~(1<<2));
+ phy_write(phydev, RTL_8211F_EEELCR_ADDR, val2);
+
+ /*switch back to page0*/
+ phy_write(phydev,RTL_8211F_PAGE_SELECT, 0xa42);
+ return 0;
+}
+
/**
* stmmac_verify_args - verify the driver parameters.
* Description: it checks the driver parameters and set a default in case of
@@ -4465,6 +4498,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(RTL_8211F_PHY_ID, RTL_8211F_PHY_ID_MASK, phy_rtl8211f_led_fi
+ if (ret) {
+ dev_warn(priv->device, "Cannot register PHY board fixup, terry in :%s.\n", __func__);
+ }
return ret;
声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包
1
1
评论
打赏
- 分享
- 举报
评论
0个
手气红包
暂无数据
相关专栏
-
浏览量:726次2023-12-27 15:36:57
-
2021-01-16 14:38:27
-
浏览量:1303次2023-11-24 16:36:44
-
浏览量:1902次2019-06-21 13:51:01
-
浏览量:8730次2021-01-15 16:31:31
-
浏览量:1335次2023-11-15 11:12:53
-
浏览量:1122次2022-05-28 10:31:03
-
浏览量:1114次2024-02-29 16:04:02
-
浏览量:1282次2022-09-14 17:13:02
-
浏览量:2002次2020-03-25 19:37:35
-
浏览量:1804次2022-09-26 15:03:03
-
浏览量:3053次2019-01-03 17:21:58
-
浏览量:3340次2020-08-18 20:13:52
-
浏览量:1511次2023-11-06 11:04:59
-
浏览量:1915次2019-07-25 15:32:35
-
浏览量:1265次2023-06-12 14:35:43
-
浏览量:1197次2023-07-27 10:33:06
-
浏览量:3423次2017-10-21 22:23:16
-
浏览量:2250次2018-08-06 09:15:01
置顶时间设置
结束时间
删除原因
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
打赏作者
阿帅
您的支持将鼓励我继续创作!
打赏金额:
¥1
¥5
¥10
¥50
¥100
支付方式:
微信支付
打赏成功!
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
审核成功
发布时间设置
发布时间:
请选择发布时间设置
是否关联周任务-专栏模块
审核失败
失败原因
请选择失败原因
备注
请输入备注