From def2367077573b56f9fc4f824e5c0377a3a4175a Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Mon, 16 Oct 2023 02:45:46 +0000
Subject: [PATCH] 修改DO2-DO4初始为低
---
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