rtl网卡驱动-解决网卡灯(link/act)异常

rtl网卡驱动-解决网卡灯(link/act)异常 阿帅 2023-11-23 14:07:38 534

概述

一般网卡灯有一个绿灯、一个黄灯,分别代表连接指示灯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个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
阿帅
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区