[Feature]merge ethernet from gsw

Change-Id: I42d03c57173a2b64c8ea12a141b1d5cb33499a36
diff --git a/src/kernel/linux/v4.19/arch/arm64/configs/auto2735evb_gsw_defconfig b/src/kernel/linux/v4.19/arch/arm64/configs/auto2735evb_gsw_defconfig
index 414dd33..b862b32 100644
--- a/src/kernel/linux/v4.19/arch/arm64/configs/auto2735evb_gsw_defconfig
+++ b/src/kernel/linux/v4.19/arch/arm64/configs/auto2735evb_gsw_defconfig
@@ -1,4 +1,3 @@
-CONFIG_PHY_DRIVER_GSW=y
 #chencheng2022/3/11 modify for open SGMII for netsys mac
 CONFIG_REGMAP=y
 CONFIG_MTK_SGMII_NETSYS=y 
@@ -813,3 +812,7 @@
 #you.chen@2022-07-16 for emmc health 
 CONFIG_MMC_HEALTH=y
 
+#xf.li@2022.12.13 modify for phy-merge start
+CONFIG_PHY_DRIVER_GSW=y
+CONFIG_AHEAD_PHY_RESUME=y
+#xf.li@2022.12.13 modify for phy-merge end
diff --git a/src/kernel/linux/v4.19/drivers/net/ethernet/stmicro/stmmac/Kconfig b/src/kernel/linux/v4.19/drivers/net/ethernet/stmicro/stmmac/Kconfig
index 9db3a39..c5bf864 100644
--- a/src/kernel/linux/v4.19/drivers/net/ethernet/stmicro/stmmac/Kconfig
+++ b/src/kernel/linux/v4.19/drivers/net/ethernet/stmicro/stmmac/Kconfig
@@ -11,6 +11,8 @@
 	  Synopsys IP Core.
 
 if STMMAC_ETH
+config AHEAD_PHY_RESUME
+	tristate "advance phy resume in front of mac"
 
 config STMMAC_PLATFORM
 	tristate "STMMAC Platform bus support"
diff --git a/src/kernel/linux/v4.19/drivers/net/ethernet/stmicro/stmmac/Makefile b/src/kernel/linux/v4.19/drivers/net/ethernet/stmicro/stmmac/Makefile
index 0cf334c..b8d5240 100644
--- a/src/kernel/linux/v4.19/drivers/net/ethernet/stmicro/stmmac/Makefile
+++ b/src/kernel/linux/v4.19/drivers/net/ethernet/stmicro/stmmac/Makefile
@@ -1,3 +1,8 @@
+#xf.li@2022-12-13 merge ethernet begin
+ifdef CONFIG_AHEAD_PHY_RESUME
+EXTRA_CFLAGS += -DAHEAD_PHY_RESUME
+endif
+#xf.li@2022-12-13 merge ethernet end
 # SPDX-License-Identifier: GPL-2.0
 obj-$(CONFIG_STMMAC_ETH) += stmmac.o
 stmmac-objs:= stmmac_main.o mediatek_sgmii.o stmmac_ethtool.o stmmac_mdio.o \
diff --git a/src/kernel/linux/v4.19/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/src/kernel/linux/v4.19/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index b34725d..4f7d3f4 100644
--- a/src/kernel/linux/v4.19/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/src/kernel/linux/v4.19/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -4764,12 +4764,13 @@
 			if(err < 0)
 				dev_err(priv->device, "clk_ptp_ref enable failed");
 		}
+#ifndef AHEAD_PHY_RESUME
 		/* reset the phy so that it's ready */
 		if (priv->mii) {
 			stmmac_mdio_reset(priv->mii);
 			phy_init_hw(priv->dev->phydev);
 		}
-
+#endif
 		if (priv->plat->phy_intr_irq > 0 && priv->phy_wolopts) {
 			disable_irq_wake(priv->plat->phy_intr_irq);
 			err = phy_ethtool_set_wol(priv->dev->phydev, &wol);
@@ -4779,7 +4780,10 @@
 							 !!wol.wolopts);
 		}
 	}
-
+#ifdef AHEAD_PHY_RESUME
+	if (ndev->phydev)
+		phy_start(ndev->phydev);
+#endif
 	mutex_lock(&priv->lock);
 
 	stmmac_reset_queues_param(priv);
@@ -4794,10 +4798,10 @@
 	stmmac_enable_all_queues(priv);
 
 	mutex_unlock(&priv->lock);
-
+#ifndef AHEAD_PHY_RESUME
 	if (ndev->phydev)
 		phy_start(ndev->phydev);
-
+#endif
 	netif_device_attach(ndev);
 	return 0;
 }
diff --git a/src/kernel/linux/v4.19/drivers/net/phy/Kconfig b/src/kernel/linux/v4.19/drivers/net/phy/Kconfig
index 5d6eb39..4fd8903 100644
--- a/src/kernel/linux/v4.19/drivers/net/phy/Kconfig
+++ b/src/kernel/linux/v4.19/drivers/net/phy/Kconfig
@@ -545,3 +545,6 @@
 config MICREL_KS8995MA
 	tristate "Micrel KS8995MA 5-ports 10/100 managed Ethernet switch"
 	depends on SPI
+
+config PHY_DRIVER_GSW
+	tristate "modify phy driver for gsw"
diff --git a/src/kernel/linux/v4.19/drivers/net/phy/Makefile b/src/kernel/linux/v4.19/drivers/net/phy/Makefile
index 7a14022..6ed99b2 100644
--- a/src/kernel/linux/v4.19/drivers/net/phy/Makefile
+++ b/src/kernel/linux/v4.19/drivers/net/phy/Makefile
@@ -3,11 +3,11 @@
 
 libphy-y			:= phy.o phy-c45.o phy-core.o phy_device.o
 mdio-bus-y			+= mdio_bus.o mdio_device.o
-
+#xf.li@2022-12-13 merge ethernet begin
 ifdef CONFIG_PHY_DRIVER_GSW
-EXTRA_CFLAGS += -DCONFIG_PHY_DRIVER_GSW
+EXTRA_CFLAGS += -DPHY_DRIVER_GSW
 endif
-
+#xf.li@2022-12-13 merge ethernet end
 ifdef CONFIG_MDIO_DEVICE
 obj-y				+= mdio-boardinfo.o
 endif
diff --git a/src/kernel/linux/v4.19/drivers/net/phy/phy_device.c b/src/kernel/linux/v4.19/drivers/net/phy/phy_device.c
index 10f6637..c788c0f 100755
--- a/src/kernel/linux/v4.19/drivers/net/phy/phy_device.c
+++ b/src/kernel/linux/v4.19/drivers/net/phy/phy_device.c
@@ -476,7 +476,7 @@
 				   u32 *devices_in_package)
 {
 	int phy_reg, reg_addr;
-#ifdef CONFIG_PHY_DRIVER_GSW
+#ifdef PHY_DRIVER_GSW
 	mdiobus_write(bus, addr, 0xd, 0x0001);
 	mdiobus_write(bus, addr, 0xe, 0x0002);
 	mdiobus_write(bus, addr, 0xd, 0x4001);
@@ -531,7 +531,7 @@
 			   struct phy_c45_device_ids *c45_ids) {
 	int phy_reg;
 	int i;
-#ifndef CONFIG_PHY_DRIVER_GSW
+#ifndef PHY_DRIVER_GSW
 	int reg_addr;
 #endif
 	const int num_ids = ARRAY_SIZE(c45_ids->device_ids);
@@ -566,7 +566,7 @@
 
 	/* Now probe Device Identifiers for each device present. */
 	for (i = 1; i < num_ids; i++) {
-#ifdef CONFIG_PHY_DRIVER_GSW
+#ifdef PHY_DRIVER_GSW
 			mdiobus_write(bus, addr, 0xd, 0x0001);
 			mdiobus_write(bus, addr, 0xe, 0x0002);
 			mdiobus_write(bus, addr, 0xd, 0x4001);
@@ -673,7 +673,7 @@
 	memset(c45_ids.device_ids, 0xff, sizeof(c45_ids.device_ids));
 
 	r = get_phy_id(bus, addr, &phy_id, is_c45, &c45_ids);
-#ifdef CONFIG_PHY_DRIVER_GSW
+#ifdef PHY_DRIVER_GSW
 	printk("phy_id = %x\n",c45_ids.device_ids[1]);
 #else
 	printk("phy id = %x\n",phy_id);