[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: