[rk3399 android11]解决机器烧录的新MAC地址却不能使用该MAC地址远程唤醒的问题

本文主要介绍了STMICROMCU驱动程序中与EthernetMAC地址配置相关的函数,包括设置物理地址、PHY状态管理和中断处理。代码展示了如何通过I2C通信设置MAC地址以及处理PHY电源控制相关操作。
摘要由CSDN通过智能技术生成
--- a/kernel/drivers/jwio/mcu/jw_mcu.c
+++ b/kernel/drivers/jwio/mcu/jw_mcu.c
@@ -45,6 +45,7 @@ unsigned int mcu_watchdog_gpio;
 struct delayed_work        watchdog_delay_work;
 #define        WATCHDOG_FEED_COUNT              2000

+int mac_write_flag;
 extern int hpd_flag;
 extern void mcu_inter(void);
 extern void dp_get_typec_status(void);
@@ -787,19 +788,14 @@ int jw_mcu_get_typec_status(u8 *role, u8 *direction, u8 *hpd_status){



-
+char *addr_l;

 void MCU_Set_EthPhyAddr(char *addr){
-       int ret = 0,i;
-       //u8 tmp =0;
-       char *addr_l = addr;
+       int i;
+       addr_l = addr;
        for(i = 0;i < 6;i++){
-               printk("MCU_Set_EthPhyAddr  %d------------ison\n",addr_l[i]);
-               ret = Mcu_i2c_writeregister(gClient, CORE_ETH_PHY_ADDR0 + i, 1, addr_l[i]);
-               if (ret < 0) {
-                       printk("Mcu_i2c_writeregister fail\n");
-                       return;
-               }
+            printk("MCU_Set_EthPhyAddr put %d------------malei\n",addr_l[i]);
+             mac_write_flag=1;
        }
 }
 ///andy add
@@ -809,6 +805,7 @@ static int rtl8211_phy_power_off(struct notifier_block *this,
 {
        u8 ethwol_power=0,tmp;
        int ret = 0;
+        mac_write_flag=0;

     if (code == SYS_POWER_OFF){
                ret=Mcu_i2c_readregister(gClient, CORE_FUNC_CFG1, 1,&ethwol_power);
@@ -835,7 +832,7 @@ static struct notifier_block rtl8211_phy_notifier = {
 static int  jw_mcu_probe(struct i2c_client *client, const struct i2c_device_id *id)

 {
-    int ret = 0, err;
+    int ret = 0, err,i;
        u8 read_mcu_id=0,ethwol_power=0,tmp;
        //char tmp1[2];
        //enum of_gpio_flags flags;
@@ -900,6 +897,15 @@ static int  jw_mcu_probe(struct i2c_client *client, const struct i2c_device_id *
                printk("Mcu_i2c_writeregister fail\n");
                return -1;
        }
+       if(mac_write_flag==1){
+               for(i = 0;i < 6;i++){
+               printk("MCU_Set_EthPhyAddr  %d------------malei\n",addr_l[i]);
+               ret = Mcu_i2c_writeregister(gClient, CORE_ETH_PHY_ADDR0 + i, 1, addr_l[i]);
+               if (ret < 0) {
+                       printk("Mcu_i2c_writeregister fail\n");
+                       return -1;
+               }
+       }}

 /andy end
        printk("%s: probe ok!!\n", __FUNCTION__);
diff --git a/kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index 7ff658739c..c53888ac0a 100644
--- a/kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -57,7 +57,7 @@

 #define        STMMAC_ALIGN(x)         ALIGN(ALIGN(x, SMP_CACHE_BYTES), 16)
 #define        TSO_MAX_BUFF_SIZE       (SZ_16K - 1)
-
+extern void MCU_Set_EthPhyAddr(char *addr);
 /* Module parameters */
 #define TX_TIMEO       5000
 static int watchdog = TX_TIMEO;
@@ -2163,9 +2163,13 @@ static void stmmac_check_ether_addr(struct stmmac_priv *priv)
                                priv->dev->dev_addr);
                if (!is_valid_ether_addr(priv->dev->dev_addr))
                        eth_hw_addr_random(priv->dev);
-               dev_info(priv->device, "device MAC address %pM\n",
-                        priv->dev->dev_addr);
+
+               printk("device MAC address %pM\n",priv->dev->dev_addr);
+                MCU_Set_EthPhyAddr(priv->dev->dev_addr);
        }
+       printk("stmmac_check_ether_addr 2222222222222222222222222\n");
+       printk("device MAC address %pM\n",priv->dev->dev_addr);
+       MCU_Set_EthPhyAddr(priv->dev->dev_addr);
 }

 /**
@@ -4284,6 +4288,8 @@ int stmmac_dvr_probe(struct device *device,
        struct stmmac_priv *priv;
        u32 queue, maxq;
        int ret = 0;
+
+        printk("stmmac_dvr_probe stmmac_dvr_probe stmmac_dvr_probestmmac_dvr_probe\n");

        ndev = alloc_etherdev_mqs(sizeof(struct stmmac_priv),
                                  MTL_MAX_TX_QUEUES,
diff --git a/kernel/drivers/net/phy/phy.c b/kernel/drivers/net/phy/phy.c
index dd4bf4265a..b7ba25e458 100644
--- a/kernel/drivers/net/phy/phy.c
+++ b/kernel/drivers/net/phy/phy.c
@@ -71,7 +71,7 @@ void phy_print_status(struct phy_device *phydev)
 {
        if (phydev->link) {
                netdev_info(phydev->attached_dev,
-                       "Link is Up - %s/%s - flow control %s\n",
+                       "andy 1 Link is Up - %s/%s - flow control %s\n",
                        phy_speed_to_str(phydev->speed),
                        phy_duplex_to_str(phydev->duplex),
                        phydev->pause ? "rx/tx" : "off");

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值