From b625cdcd68479b3d540a915785b6d9809b52a2f8 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Tue, 14 Feb 2023 06:37:54 +0000
Subject: [PATCH] stmmac read mac form eeprom

---
 kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c |   74 ++++++++++++++++++++++---------------
 1 files changed, 44 insertions(+), 30 deletions(-)

diff --git a/kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index 0511062..29bffa7 100644
--- a/kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -228,7 +228,7 @@
 			priv->clk_csr = STMMAC_CSR_100_150M;
 		else if ((clk_rate >= CSR_F_150M) && (clk_rate < CSR_F_250M))
 			priv->clk_csr = STMMAC_CSR_150_250M;
-		else if ((clk_rate >= CSR_F_250M) && (clk_rate <= CSR_F_300M))
+		else if ((clk_rate >= CSR_F_250M) && (clk_rate < CSR_F_300M))
 			priv->clk_csr = STMMAC_CSR_250_300M;
 	}
 
@@ -508,7 +508,6 @@
 	}
 }
 
-#ifdef CONFIG_STMMAC_PTP
 /**
  *  stmmac_hwtstamp_set - control hardware timestamping.
  *  @dev: device pointer.
@@ -761,7 +760,6 @@
 	return copy_to_user(ifr->ifr_data, config,
 			    sizeof(*config)) ? -EFAULT : 0;
 }
-#endif /* CONFIG_STMMAC_PTP */
 
 /**
  * stmmac_init_ptp - init PTP
@@ -802,7 +800,7 @@
 
 static void stmmac_release_ptp(struct stmmac_priv *priv)
 {
-	if (priv->plat->clk_ptp_ref && IS_ENABLED(CONFIG_STMMAC_PTP))
+	if (priv->plat->clk_ptp_ref)
 		clk_disable_unprepare(priv->plat->clk_ptp_ref);
 	stmmac_ptp_unregister(priv);
 }
@@ -936,6 +934,23 @@
 	}
 }
 
+static void rtl8211F_led_control(struct phy_device *phydev)
+{
+	printk("ben debug:rtl8211F_led_control...1 \n");
+
+       	if(!phydev) return;
+       	if(phydev->phy_id!=0x001cc916) return; /* only for 8211E*/
+
+       	/*switch to extension page44*/
+	phy_write(phydev, 31, 0x0d04);
+//add hc 1000M --> orange   
+//	 100M  --> green
+	phy_write(phydev, 16, 0x6D02);  
+//add hc 1000M&100M  --> green
+//     	phy_write(phydev, 16, 0x6C0A); 
+	printk("ben debug:rtl8211F_led_control...2 \n");
+}
+
 /**
  * stmmac_init_phy - PHY initialization
  * @dev: net device structure
@@ -956,9 +971,6 @@
 	priv->oldlink = false;
 	priv->speed = SPEED_UNKNOWN;
 	priv->oldduplex = DUPLEX_UNKNOWN;
-
-	if (priv->plat->integrated_phy_power)
-		priv->plat->integrated_phy_power(priv->plat->bsp_priv, true);
 
 	if (priv->plat->phy_node) {
 		phydev = of_phy_connect(dev, priv->plat->phy_node,
@@ -1020,6 +1032,9 @@
 		phydev->irq = PHY_POLL;
 
 	phy_attached_info(phydev);
+
+	//add ben
+	rtl8211F_led_control(phydev);
 	return 0;
 }
 
@@ -2159,7 +2174,8 @@
  */
 static void stmmac_check_ether_addr(struct stmmac_priv *priv)
 {
-	if (!is_valid_ether_addr(priv->dev->dev_addr)) {
+	//if (!is_valid_ether_addr(priv->dev->dev_addr)) {
+	if (1) {
 		stmmac_get_umac_addr(priv, priv->hw, priv->dev->dev_addr, 0);
 		if (likely(priv->plat->get_eth_addr))
 			priv->plat->get_eth_addr(priv->plat->bsp_priv,
@@ -2552,7 +2568,7 @@
 
 	stmmac_mmc_setup(priv);
 
-	if (IS_ENABLED(CONFIG_STMMAC_PTP) && init_ptp) {
+	if (init_ptp) {
 		ret = clk_prepare_enable(priv->plat->clk_ptp_ref);
 		if (ret < 0)
 			netdev_warn(priv->dev, "failed to enable PTP reference clock: %d\n", ret);
@@ -2594,8 +2610,7 @@
 {
 	struct stmmac_priv *priv = netdev_priv(dev);
 
-	if (IS_ENABLED(CONFIG_STMMAC_PTP))
-		clk_disable_unprepare(priv->plat->clk_ptp_ref);
+	clk_disable_unprepare(priv->plat->clk_ptp_ref);
 }
 
 /**
@@ -2733,9 +2748,6 @@
 	if (dev->phydev) {
 		phy_stop(dev->phydev);
 		phy_disconnect(dev->phydev);
-		if (priv->plat->integrated_phy_power)
-			priv->plat->integrated_phy_power(priv->plat->bsp_priv,
-							 false);
 	}
 
 	stmmac_disable_all_queues(priv);
@@ -2766,8 +2778,7 @@
 
 	netif_carrier_off(dev);
 
-	if (IS_ENABLED(CONFIG_STMMAC_PTP))
-		stmmac_release_ptp(priv);
+	stmmac_release_ptp(priv);
 
 	return 0;
 }
@@ -3746,6 +3757,7 @@
 	/* To handle GMAC own interrupts */
 	if ((priv->plat->has_gmac) || xmac) {
 		int status = stmmac_host_irq_status(priv, priv->hw, &priv->xstats);
+		int mtl_status;
 
 		if (unlikely(status)) {
 			/* For LPI we need to save the tx status */
@@ -3756,8 +3768,17 @@
 		}
 
 		for (queue = 0; queue < queues_count; queue++) {
-			status = stmmac_host_mtl_irq_status(priv, priv->hw,
-							    queue);
+			struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
+
+			mtl_status = stmmac_host_mtl_irq_status(priv, priv->hw,
+								queue);
+			if (mtl_status != -EINVAL)
+				status |= mtl_status;
+
+			if (status & CORE_IRQ_MTL_RX_OVERFLOW)
+				stmmac_set_rx_tail_ptr(priv, priv->ioaddr,
+						       rx_q->rx_tail_addr,
+						       queue);
 		}
 
 		/* PCS link status */
@@ -3811,14 +3832,12 @@
 			return -EINVAL;
 		ret = phy_mii_ioctl(dev->phydev, rq, cmd);
 		break;
-#ifdef CONFIG_STMMAC_PTP
 	case SIOCSHWTSTAMP:
 		ret = stmmac_hwtstamp_set(dev, rq);
 		break;
 	case SIOCGHWTSTAMP:
 		ret = stmmac_hwtstamp_get(dev, rq);
 		break;
-#endif
 	default:
 		break;
 	}
@@ -4565,13 +4584,10 @@
 		stmmac_pmt(priv, priv->hw, priv->wolopts);
 		priv->irq_wake = 1;
 	} else {
-		if (priv->plat->integrated_phy_power)
-			priv->plat->integrated_phy_power(priv->plat->bsp_priv,
-							 false);
 		stmmac_mac_set(priv, priv->ioaddr, false);
 		pinctrl_pm_select_sleep_state(priv->device);
 		/* Disable clock in case of PWM is off */
-		if (priv->plat->clk_ptp_ref && IS_ENABLED(CONFIG_STMMAC_PTP))
+		if (priv->plat->clk_ptp_ref)
 			clk_disable_unprepare(priv->plat->clk_ptp_ref);
 		clk_disable_unprepare(priv->plat->pclk);
 		clk_disable_unprepare(priv->plat->stmmac_clk);
@@ -4608,8 +4624,6 @@
 		tx_q->cur_tx = 0;
 		tx_q->dirty_tx = 0;
 		tx_q->mss = 0;
-
-		netdev_tx_reset_queue(netdev_get_tx_queue(priv->dev, queue));
 	}
 }
 
@@ -4627,6 +4641,7 @@
 	if (!netif_running(ndev))
 		return 0;
 
+	printk("troy test %s start .... \n",__func__);
 	/* Power Down bit, into the PM register, is cleared
 	 * automatically as soon as a magic packet or a Wake-up frame
 	 * is received. Anyway, it's better to manually clear
@@ -4643,14 +4658,11 @@
 		/* enable the clk previously disabled */
 		clk_prepare_enable(priv->plat->stmmac_clk);
 		clk_prepare_enable(priv->plat->pclk);
-		if (priv->plat->clk_ptp_ref && IS_ENABLED(CONFIG_STMMAC_PTP))
+		if (priv->plat->clk_ptp_ref)
 			clk_prepare_enable(priv->plat->clk_ptp_ref);
 		/* reset the phy so that it's ready */
 		if (priv->mii)
 			stmmac_mdio_reset(priv->mii);
-		if (priv->plat->integrated_phy_power)
-			priv->plat->integrated_phy_power(priv->plat->bsp_priv,
-							 true);
 	}
 
 	mutex_lock(&priv->lock);
@@ -4672,6 +4684,8 @@
 
 	if (ndev->phydev)
 		phy_start(ndev->phydev);
+	printk("troy test %s end .... \n",__func__);
+	rtl8211F_led_control(ndev->phydev);
 
 	return 0;
 }

--
Gitblit v1.6.2