From 37f49e37ab4cb5d0bc4c60eb5c6d4dd57db767bb Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Fri, 10 May 2024 07:44:59 +0000
Subject: [PATCH] gmac get mac form eeprom

---
 kernel/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c    |   40 ++++++++++++-------
 kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c |   71 +++++++++++++++++++++++++++++++++++
 2 files changed, 95 insertions(+), 16 deletions(-)

diff --git a/kernel/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c b/kernel/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
index 8e1b354..47bb2b3 100644
--- a/kernel/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
+++ b/kernel/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
@@ -2718,9 +2718,10 @@
 	struct rk_priv_data *bsp_priv = priv;
 	struct device *dev = &bsp_priv->pdev->dev;
 	//unsigned char ethaddr[ETH_ALEN * MAX_ETH] = {0};
-	//int ret, id = bsp_priv->bus_id;
-	int i;
+	int ret, id = bsp_priv->bus_id;
+	//int i;
 
+	printk("hw-debug:enter rk_get_eth_addr.. \n");
 #if 0
 	if (is_valid_ether_addr(addr))
 		goto out;
@@ -2753,21 +2754,30 @@
 	}
 #endif
 	
-	#if 1
-        if (at24_mac_read(macaddr) > 0) {
-                printk("ben %s: at24_mac_read Success!! \n", __func__);
-                memcpy(addr, macaddr, 6);
 
-                printk("Read the Ethernet MAC address from :");
-                for (i = 0; i < 5; i++)
-                        printk("%2.2x:", addr[i]);
+	//eeprom
+        	ret = at24_mac_read(macaddr);
+        	if (ret > 0)
+        	{
+                	printk("ben %s: at24_mac_read Success!! \n", __func__);
+                	memcpy(addr, macaddr, 6);
 
-                printk("%2.2x\n", addr[i]);
-        } else {
-                printk("ben %s: at24_mac_read Failed!! \n", __func__);
-                goto out;
-        }
-        #endif
+                	if ((addr[0] == 0x68) && (addr[1] == 0xed))
+                	{
+                        	printk("at24_eeprom mac is valid \n", __func__);
+                        	goto out;
+        		}
+                	else
+                	{
+                        	printk("at24_eeprom mac is invalid \n", __func__);
+                        	addr[0] = 0x68;
+                        	addr[1] = 0xed;
+                        	addr[2] = 0x01;
+                        	addr[3] = 0x02;
+                        	addr[4] = 0x03;
+                        	addr[5] = 0x04;
+                	}
+    		}
 out:
 	dev_err(dev, "%s: mac address: %pM\n", __func__, addr);
 }
diff --git a/kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index f10330b..852e2d3 100644
--- a/kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -1101,6 +1101,7 @@
 	}
 }
 
+#if 0
 static void rtl8211F_led_control(struct phy_device *phydev)
 {
 	printk("ben debug:rtl8211F_led_control...1 \n");
@@ -1117,6 +1118,44 @@
 //     	phy_write(phydev, 16, 0x6C0A); 
 	printk("ben debug:rtl8211F_led_control...2 \n");
 }
+#endif
+#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 GREEN_LED 0 // �̵���LED0
+#define YELLOW0_LED 1 // �Ƶ���LED1
+#define YELLOW1_LED 2 // �Ƶ���LED2
+			      
+static int rtl8211F_led_control(struct phy_device *phydev)
+{
+	unsigned int temp;
+
+        printk("<<<<<<ben test led ctrl start... %s\n",__FUNCTION__);
+        if(!phydev) return 0;
+        if(phydev->phy_id!=0x001cc916) return 0; /* only for 8211E*/
+
+	// ��������LED��
+	phy_write(phydev, 31, 0xd04);
+	temp = 0x02 << (5 * GREEN_LED); // �̵Ʊ�ʾ����״̬
+	temp |= 0x08 << (5 * YELLOW0_LED); // �ƵƱ�ʾ����״̬
+
+	temp |= 0x1b << (5 * YELLOW1_LED); // �ƵƱ�ʾ���ݰ��շ�״̬
+	phy_write(phydev, 0x10, temp);
+
+	temp = 1 << (YELLOW1_LED + 1); // �̵Ʋ�ָʾEEE����״̬, �������ߺ��Ҫ����
+                            // ���Ƶ�ҪָʾEEE����״̬, û�����ݰ�ʱ��ҪϨ��
+	phy_write(phydev, 0x11, 0x00);
+	phy_write(phydev, 31, 0);
+
+	// �������ߺ�, �̵Ƴ���; �ε����ߺ�, �̵�Ϩ��
+	// ��·֧��EEE����: �����ݴ���, �Ƶ���˸, ����Ϩ��
+	// ��·��֧��EEE����: �����ݴ���, �Ƶ���˸, ������	
+
+	printk("<<<<<<<ben test led ctrl end %s\n",__FUNCTION__);
+	return 0;
+}
 
 /**
  * stmmac_init_phy - PHY initialization
@@ -1132,29 +1171,43 @@
 	struct device_node *node;
 	int ret;
 
+
+	printk("ben stmmac_init_phy  .. \n");
+	mdelay(2000);
+	printk("ben stmmac_init_phy delay .. \n");
 	if (priv->plat->integrated_phy_power)
 		ret = priv->plat->integrated_phy_power(priv->plat->bsp_priv, true);
 
 	node = priv->plat->phylink_node;
 
 	if (node)
+	{
+		//printk("ben ttt.. \n");	
 		ret = phylink_of_phy_connect(priv->phylink, node, 0);
+		//printk("ben ttt:%d \n", ret);
+	}	
 
 	/* Some DT bindings do not set-up the PHY handle. Let's try to
 	 * manually parse it
 	 */
+	//printk("ben:stmmac_init_phy..1 \n");
 	if (!node || ret) {
+	//if (1) {
 		int addr = priv->plat->phy_addr;
 		struct phy_device *phydev;
 
+		//printk("ben:stmmac_init_phy..2 \n");
 		phydev = mdiobus_get_phy(priv->mii, addr);
 		if (!phydev) {
 			netdev_err(priv->dev, "no phy at addr %d\n", addr);
 			return -ENODEV;
 		}
 
-		rtl8211F_led_control(phydev);
+		//rtl8211F_led_control(phydev);
+		
+		//printk("ben:stmmac_init_phy..3 \n");
 		ret = phylink_connect_phy(priv->phylink, phydev);
+		//rtl8211F_led_control(phydev);
 	}
 
 	if (!priv->plat->pmt) {
@@ -2884,6 +2937,7 @@
 	u32 chan;
 	int ret;
 
+	//printk("ben:stmmac_open.. \n");
 	ret = pm_runtime_get_sync(priv->device);
 	if (ret < 0) {
 		pm_runtime_put_noidle(priv->device);
@@ -2957,6 +3011,12 @@
 			goto init_error;
 		}
 	}
+
+
+	#if 1
+	printk("ben -------bootup add 2s delay time.\n");
+	mdelay(2500);
+	#endif
 
 	ret = stmmac_hw_setup(dev, true);
 	if (ret < 0) {
@@ -5246,6 +5306,9 @@
 	 */
 	pm_runtime_put(device);
 
+	//add
+	phy_register_fixup_for_uid(RTL_8211F_PHY_ID, RTL_8211F_PHY_ID_MASK, rtl8211F_led_control);
+
 	return ret;
 
 error_netdev_register:
@@ -5457,6 +5520,12 @@
 	stmmac_free_tx_skbufs(priv);
 	stmmac_clear_descriptors(priv);
 
+#if 1
+	printk("ben -------resume add 2s delay time.\n");	
+	mdelay(2000);
+
+#endif
+
 	stmmac_hw_setup(ndev, false);
 	stmmac_init_coalesce(priv);
 	stmmac_set_rx_mode(ndev);

--
Gitblit v1.6.2