From 15ade055295d13f95d49e3d99b09f3bbfb4a43e7 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Mon, 06 Nov 2023 07:25:24 +0000
Subject: [PATCH] add at24 driver
---
kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 74 +++++++++++++++----------------------
1 files changed, 30 insertions(+), 44 deletions(-)
diff --git a/kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index 29bffa7..0511062 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,6 +508,7 @@
}
}
+#ifdef CONFIG_STMMAC_PTP
/**
* stmmac_hwtstamp_set - control hardware timestamping.
* @dev: device pointer.
@@ -760,6 +761,7 @@
return copy_to_user(ifr->ifr_data, config,
sizeof(*config)) ? -EFAULT : 0;
}
+#endif /* CONFIG_STMMAC_PTP */
/**
* stmmac_init_ptp - init PTP
@@ -800,7 +802,7 @@
static void stmmac_release_ptp(struct stmmac_priv *priv)
{
- if (priv->plat->clk_ptp_ref)
+ if (priv->plat->clk_ptp_ref && IS_ENABLED(CONFIG_STMMAC_PTP))
clk_disable_unprepare(priv->plat->clk_ptp_ref);
stmmac_ptp_unregister(priv);
}
@@ -934,23 +936,6 @@
}
}
-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
@@ -971,6 +956,9 @@
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,
@@ -1032,9 +1020,6 @@
phydev->irq = PHY_POLL;
phy_attached_info(phydev);
-
- //add ben
- rtl8211F_led_control(phydev);
return 0;
}
@@ -2174,8 +2159,7 @@
*/
static void stmmac_check_ether_addr(struct stmmac_priv *priv)
{
- //if (!is_valid_ether_addr(priv->dev->dev_addr)) {
- if (1) {
+ if (!is_valid_ether_addr(priv->dev->dev_addr)) {
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,
@@ -2568,7 +2552,7 @@
stmmac_mmc_setup(priv);
- if (init_ptp) {
+ if (IS_ENABLED(CONFIG_STMMAC_PTP) && 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);
@@ -2610,7 +2594,8 @@
{
struct stmmac_priv *priv = netdev_priv(dev);
- clk_disable_unprepare(priv->plat->clk_ptp_ref);
+ if (IS_ENABLED(CONFIG_STMMAC_PTP))
+ clk_disable_unprepare(priv->plat->clk_ptp_ref);
}
/**
@@ -2748,6 +2733,9 @@
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);
@@ -2778,7 +2766,8 @@
netif_carrier_off(dev);
- stmmac_release_ptp(priv);
+ if (IS_ENABLED(CONFIG_STMMAC_PTP))
+ stmmac_release_ptp(priv);
return 0;
}
@@ -3757,7 +3746,6 @@
/* 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 */
@@ -3768,17 +3756,8 @@
}
for (queue = 0; queue < queues_count; 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);
+ status = stmmac_host_mtl_irq_status(priv, priv->hw,
+ queue);
}
/* PCS link status */
@@ -3832,12 +3811,14 @@
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;
}
@@ -4584,10 +4565,13 @@
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)
+ if (priv->plat->clk_ptp_ref && IS_ENABLED(CONFIG_STMMAC_PTP))
clk_disable_unprepare(priv->plat->clk_ptp_ref);
clk_disable_unprepare(priv->plat->pclk);
clk_disable_unprepare(priv->plat->stmmac_clk);
@@ -4624,6 +4608,8 @@
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));
}
}
@@ -4641,7 +4627,6 @@
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
@@ -4658,11 +4643,14 @@
/* enable the clk previously disabled */
clk_prepare_enable(priv->plat->stmmac_clk);
clk_prepare_enable(priv->plat->pclk);
- if (priv->plat->clk_ptp_ref)
+ if (priv->plat->clk_ptp_ref && IS_ENABLED(CONFIG_STMMAC_PTP))
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);
@@ -4684,8 +4672,6 @@
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