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