From 9999e48639b3cecb08ffb37358bcba3b48161b29 Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Fri, 10 May 2024 08:50:17 +0000 Subject: [PATCH] add ax88772_rst --- kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 91 ++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 89 insertions(+), 2 deletions(-) diff --git a/kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c index e14a682..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,62 @@ } } +#if 0 +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"); +} +#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 * @dev: net device structure @@ -1115,28 +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); + + //printk("ben:stmmac_init_phy..3 \n"); ret = phylink_connect_phy(priv->phylink, phydev); + //rtl8211F_led_control(phydev); } if (!priv->plat->pmt) { @@ -1145,7 +1216,6 @@ phylink_ethtool_get_wol(priv->phylink, &wol); device_set_wakeup_capable(priv->device, !!wol.supported); } - return ret; } @@ -2345,7 +2415,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, @@ -2866,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); @@ -2939,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) { @@ -5228,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: @@ -5439,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