From 37f49e37ab4cb5d0bc4c60eb5c6d4dd57db767bb Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Fri, 10 May 2024 07:44:59 +0000 Subject: [PATCH] gmac get mac form eeprom --- kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 71 +++++++++++++++++++++++++++++++++++ 1 files changed, 70 insertions(+), 1 deletions(-) diff --git a/kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/kernel/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c index f10330b..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,7 @@ } } +#if 0 static void rtl8211F_led_control(struct phy_device *phydev) { printk("ben debug:rtl8211F_led_control...1 \n"); @@ -1117,6 +1118,44 @@ // 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 @@ -1132,29 +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); + //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) { @@ -2884,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); @@ -2957,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) { @@ -5246,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: @@ -5457,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