diff --git a/src/kernel/linux/v4.19/drivers/net/phy/marvell-88q.c b/src/kernel/linux/v4.19/drivers/net/phy/marvell-88q.c
old mode 100644
new mode 100755
index 297a56b..d37df67
--- a/src/kernel/linux/v4.19/drivers/net/phy/marvell-88q.c
+++ b/src/kernel/linux/v4.19/drivers/net/phy/marvell-88q.c
@@ -6,7 +6,7 @@
 #include <linux/phy.h>
 #include <linux/of.h>
 
-#define PHY_ID_88Q2110			0x002b0980
+#define PHY_ID_88Q2220			0x002b0b21
 
 #define Q2110_PMA_PMD_CTRL		(MII_ADDR_C45 | 0x10000)
 /* 1 = PMA/PMD reset, 0 = Normal */
@@ -29,7 +29,7 @@
 /* 1 = Link Up, 0 = Link Down */
 #define Q2110_T1_LINK_STATUS		BIT(2)
 
-#define Q2110_COM_PORT_CTRL		(MII_ADDR_C45 | 0x1f8001)
+#define Q2110_COM_PORT_CTRL		(MII_ADDR_C45 | 0x4A001)
 /* Add delay on TX_CLK */
 #define Q2110_RGMII_TX_TIMING_CTRL	BIT(15)
 /* Add delay on RX_CLK */
@@ -52,13 +52,14 @@
 		return 0;
 
 	paddr = of_get_property(phydev->mdio.dev.of_node,
-				"marvell,88q2110", &len);
+				"marvell,88q2220", &len);
 	if (!paddr)
 		return 0;
 
 	speed = be32_to_cpup(paddr);
 	master = be32_to_cpup(paddr + 1);
-
+printk("speed = %d\n",speed);
+printk("master = %d\n",master);
 	val = phy_read(phydev, Q2110_T1_PMA_PMD_CTRL);
 	if (val < 0)
 		return val;
@@ -70,8 +71,11 @@
 	val = phy_write(phydev, Q2110_T1_PMA_PMD_CTRL, val);
 	if (val < 0)
 		return val;
-
+        
 	/* Software Reset PHY */
+	//phy_write(phydev, (MII_ADDR_C45 | 0x030900), 0x8000);
+	//phy_write(phydev, (MII_ADDR_C45 | 0x03FFE4), 0x000C);
+	
 	val = phy_read(phydev, Q2110_PMA_PMD_CTRL);
 	if (val < 0)
 		return val;
@@ -85,6 +89,8 @@
 		if (val < 0)
 			return val;
 	} while (val & Q2110_PMA_PMD_RST);
+	
+	printk("q2110 dts init ok!!\n");
 
 	return 0;
 }
@@ -114,7 +120,7 @@
 			return val;
 	}
 
-	/* Software Reset of T-unit */
+
 	val = phy_read(phydev, Q2110_RST_CTRL);
 	if (val < 0)
 		return val;
@@ -123,7 +129,6 @@
 	if (val < 0)
 		return val;
 
-	/* not self-clearing */
 	val = phy_read(phydev, Q2110_RST_CTRL);
 	if (val < 0)
 		return val;
@@ -143,7 +148,8 @@
 		SUPPORTED_1000baseT_Full | SUPPORTED_100baseT_Full;
 	phydev->state = PHY_NOLINK;
 	phydev->autoneg = AUTONEG_DISABLE;
-
+	
+printk("q2110_config_init \n");
 	q2110_dts_init(phydev);
 	q2110_timing_init(phydev);
 
@@ -169,6 +175,7 @@
 	return 0;
 }
 
+
 static int q2110_read_status(struct phy_device *phydev)
 {
 	int val;
@@ -176,19 +183,10 @@
 	phydev->duplex = 1;
 	phydev->pause = 0;
 
-	if (!phy_polling_mode(phydev) || !phydev->link) {
-		val = phy_read(phydev, Q2110_T1_AN_STATUS);
-		if (val < 0)
-			return val;
-		else if (val & Q2110_T1_LINK_STATUS)
-			goto done;
-	}
-
 	val = phy_read(phydev, Q2110_T1_AN_STATUS);
 	if (val < 0)
 		return val;
 
-done:
 	if (val & Q2110_T1_LINK_STATUS)
 		phydev->link = 1;
 	else
@@ -208,14 +206,14 @@
 
 static int q2110_match_phy_device(struct phy_device *phydev)
 {
-	return (phydev->c45_ids.device_ids[1] & 0xfffffff0) == PHY_ID_88Q2110;
+	return (phydev->c45_ids.device_ids[1] & 0xffffffff) == PHY_ID_88Q2220;
 }
 
 static struct phy_driver marvell_88q_driver[] = {
 	{
-		.phy_id		= PHY_ID_88Q2110,
+		.phy_id		= PHY_ID_88Q2220,
 		.phy_id_mask	= 0xfffffff0,
-		.name		= "Marvell 88Q2110",
+		.name		= "Marvell 88Q2220",
 		.config_init	= q2110_config_init,
 		.match_phy_device = q2110_match_phy_device,
 		.set_loopback   = &q2110_loopback,
