[feature] ethernet of 88Q2220 phy ok

Change-Id: I232fa154b28158e7adfd3c2db20b3e297fb1a967
diff --git a/src/kernel/linux/v4.19/arch/arm64/boot/dts/mediatek/auto2735evb.dts b/src/kernel/linux/v4.19/arch/arm64/boot/dts/mediatek/auto2735evb.dts
index ecb8e49..e544fbc 100755
--- a/src/kernel/linux/v4.19/arch/arm64/boot/dts/mediatek/auto2735evb.dts
+++ b/src/kernel/linux/v4.19/arch/arm64/boot/dts/mediatek/auto2735evb.dts
@@ -103,13 +103,13 @@
 
 &snps_mac {
 	phy-mode ="rgmii-rxid";
-	phy-handle = <&eth_phy0>;
+	phy-handle = <&eth_phy2>;
 	pinctrl-names = "default", "sleep";
 	pinctrl-0 = <&eth_default>;
 	pinctrl-1 = <&eth_sleep>;
 	mediatek,tx-delay-ps = <560>;
 	mediatek,rx-delay-ps = <1440>;
-	snps,reset-gpio = <&pio 25 GPIO_ACTIVE_LOW>;
+	snps,reset-gpio = <&pio 26 GPIO_ACTIVE_LOW>;
 	snps,reset-active-low;
 	snps,reset-delays-us = <0 1000 0>;
 	status = "okay";
@@ -119,11 +119,18 @@
 		#address-cells = <1>;
 		#size-cells = <0>;
 		eth_phy0: eth_phy0@1 {
-
 			compatible = "ethernet-phy-ieee802.3-c22";
 			reg = <0x1>;
 
 		};
+		eth_phy2: eth_phy2@0 {
+			compatible = "ethernet-phy-ieee802.3-c45";
+			phy-intr-gpio=<&pio 25 0>;
+			marvell,88q2220=<100 0>;
+			//reg = <0x0>;
+
+		};
+		
 	};
 };
 
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
old mode 100644
new mode 100755
index 2560bbb..bd80158
--- 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,9 +476,29 @@
 				   u32 *devices_in_package)
 {
 	int phy_reg, reg_addr;
+	mdiobus_write(bus, addr, 0xd, 0x0001);
+	mdiobus_write(bus, addr, 0xe, 0x0002);
+	mdiobus_write(bus, addr, 0xd, 0x4001);
+	phy_reg = mdiobus_read(bus, addr, 0xe);
+	printk("PHY_REG = %x\n",phy_reg);
+	if (phy_reg < 0)
+		return -EIO;
+	*devices_in_package = (phy_reg & 0xffff) << 16;
+	mdiobus_write(bus, addr, 0xd, 0x0001);
+	mdiobus_write(bus, addr, 0xe, 0x0003);
+	mdiobus_write(bus, addr, 0xd, 0x4001);
+	phy_reg = mdiobus_read(bus, addr, 0xe);
+	if (phy_reg < 0)
+		return -EIO;
+	*devices_in_package |= (phy_reg & 0xffff);
+	printk("phy IDDDD = %x\n",*devices_in_package);
+
+	return 0;
 
 	reg_addr = MII_ADDR_C45 | dev_addr << 16 | MDIO_DEVS2;
+	printk("reg addr = %x\n",reg_addr);
 	phy_reg = mdiobus_read(bus, addr, reg_addr);
+	printk("phy reg = %x\n",phy_reg);
 	if (phy_reg < 0)
 		return -EIO;
 	*devices_in_package = (phy_reg & 0xffff) << 16;
@@ -508,7 +528,7 @@
 static int get_phy_c45_ids(struct mii_bus *bus, int addr, u32 *phy_id,
 			   struct phy_c45_device_ids *c45_ids) {
 	int phy_reg;
-	int i, reg_addr;
+	int i ;/*reg_addr*/
 	const int num_ids = ARRAY_SIZE(c45_ids->device_ids);
 	u32 *devs = &c45_ids->devices_in_package;
 
@@ -541,8 +561,24 @@
 
 	/* Now probe Device Identifiers for each device present. */
 	for (i = 1; i < num_ids; i++) {
-		if (!(c45_ids->devices_in_package & (1 << i)))
-			continue;
+		//if (!(c45_ids->devices_in_package & (1 << i)))
+			//continue;
+			mdiobus_write(bus, addr, 0xd, 0x0001);
+			mdiobus_write(bus, addr, 0xe, 0x0002);
+			mdiobus_write(bus, addr, 0xd, 0x4001);
+			phy_reg = mdiobus_read(bus, addr, 0xe);
+			if (phy_reg < 0)
+				return -EIO;
+		    c45_ids->device_ids[i] = (phy_reg & 0xffff) << 16;
+			
+			mdiobus_write(bus, addr, 0xd, 0x0001);
+			mdiobus_write(bus, addr, 0xe, 0x0003);
+			mdiobus_write(bus, addr, 0xd, 0x4001);
+			phy_reg = mdiobus_read(bus, addr, 0xe);
+			if (phy_reg < 0)
+			    return -EIO;
+			c45_ids->device_ids[i] |= (phy_reg & 0xffff);
+		/*
 
 		reg_addr = MII_ADDR_C45 | i << 16 | MII_PHYSID1;
 		phy_reg = mdiobus_read(bus, addr, reg_addr);
@@ -555,6 +591,7 @@
 		if (phy_reg < 0)
 			return -EIO;
 		c45_ids->device_ids[i] |= (phy_reg & 0xffff);
+		*/
 	}
 	*phy_id = 0;
 	return 0;
@@ -630,9 +667,10 @@
 	memset(c45_ids.device_ids, 0xff, sizeof(c45_ids.device_ids));
 
 	r = get_phy_id(bus, addr, &phy_id, is_c45, &c45_ids);
-	printk("phy id = %x\n",phy_id);
+	printk("phy_id = %x\n",c45_ids.device_ids[1]);
 	if (r)
 		return ERR_PTR(r);
+
 	/* If the phy_id is mostly Fs, there is no device there */
 	if ((phy_id & 0x1fffffff) == 0x1fffffff)
 		return ERR_PTR(-ENODEV);
@@ -2067,8 +2105,8 @@
 
 		return retval;
 	}
-	
 	printk("%s: Registered new driver\n", new_driver->name);
+
 	pr_debug("%s: Registered new driver\n", new_driver->name);
 
 	return 0;
@@ -2127,7 +2165,7 @@
 	int rc;
 
 	rc = mdio_bus_init();
-    if (rc)
+	if (rc)
 		return rc;
 
 	rc = phy_driver_register(&genphy_10g_driver, THIS_MODULE);
@@ -2137,7 +2175,6 @@
 	rc = phy_driver_register(&genphy_driver, THIS_MODULE);
 	if (rc) {
 		phy_driver_unregister(&genphy_10g_driver);
-	
 err_10g:
 		mdio_bus_exit();
 	}