[Feature][T108] [task-view-1618] config phy startup timing and gpio in sleep mode

Only Configure: No
Affected branch: GSW_V1453
Affected module: phy
Self-test: yes
Doc Update: no

Change-Id: Ib327bfa0c2fb3dceb66f55292c78477e3c63166d
diff --git a/marvell/linux/drivers/net/ethernet/asr/emac_eth.c b/marvell/linux/drivers/net/ethernet/asr/emac_eth.c
index b392f6e..ec57709 100755
--- a/marvell/linux/drivers/net/ethernet/asr/emac_eth.c
+++ b/marvell/linux/drivers/net/ethernet/asr/emac_eth.c
@@ -1918,6 +1918,9 @@
 int emac_down(struct emac_priv *priv)
 {
 	struct net_device *ndev = priv->ndev;
+	//#LYNQ_MODFIY modify for task-1618 2025/6/24 start
+	struct pinctrl_state *sleep_pins = pinctrl_lookup_state(priv->pinctrl, "sleep");
+	//#LYNQ_MODFIY modify for task-1618 2025/6/24 end
 #ifdef WAN_LAN_AUTO_ADAPT
 	u32 phy_id;
 
@@ -1940,6 +1943,11 @@
 	if (ndev->phydev) {
 		phy_stop(ndev->phydev);
 		phy_disconnect(ndev->phydev);
+		//#LYNQ_MODFIY modify for task-1618 2025/6/24 start
+		if (IS_ERR(priv->rgmii_pins))
+			printk("could not get rgmii-pins pinstate\n");
+		pinctrl_select_state(priv->pinctrl, sleep_pins);
+		//#LYNQ_MODFIY modify for task-1618 2025/6/24 end
 	}
 
 	if (!priv->fix_link) {
@@ -4010,10 +4018,11 @@
 	struct device_node *mii_np;
 	struct device *dev = &priv->pdev->dev;
 	int ret;
-	//#LYNQ_MODFIY modify for task-1618 2025/6/19 start
+	//#LYNQ_MODFIY modify for task-1618 2025/6/24 start
 	struct device_node *phy_np;
 	int phy_power_en_gpio;
-	//#LYNQ_MODFIY modify for task-1618 2025/6/19 end
+	int phy_rst_gpio;
+	//#LYNQ_MODFIY modify for task-1618 2025/6/24 end
 
 	mii_np = of_get_child_by_name(dev->of_node, "mdio-bus");
 	if (!mii_np) {
@@ -4055,10 +4064,25 @@
 	}
 	gpio_request(phy_power_en_gpio, "phy_power_en");
 	gpio_direction_output(phy_power_en_gpio, 1);
-	msleep(30);
+	msleep(10);
 	gpio_free(phy_power_en_gpio);
 	//#LYNQ_MODFIY modify for task-1618 2025/6/19 end
 
+	//#LYNQ_MODFIY modify for task-1618 2025/6/24 start
+ 	phy_rst_gpio = of_get_named_gpio(phy_np, "rst-gpio", 0);
+	if (phy_rst_gpio < 0) {
+		dev_err(dev, "Failed to get phy_rst gpio: %d\n", phy_rst_gpio);
+		return phy_rst_gpio;
+	}
+	
+	gpio_request(phy_rst_gpio, "phy_reset");
+	gpio_direction_output(phy_rst_gpio, 0);
+	msleep(10);
+	gpio_set_value(phy_rst_gpio, 1);
+	gpio_free(phy_rst_gpio);
+	//#LYNQ_MODFIY modify for task-1618 2025/6/24 end
+
+
 	ret = of_mdiobus_register(priv->mii, mii_np);
 
 err_put_node: