[Buffix][T108][bug-view-2112] close auto-polarity and init phy early

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

Change-Id: I86dd8cfae7cde223998ca5a6cd13b67e11154bc7
diff --git a/marvell/linux/drivers/net/phy/realtek.c b/marvell/linux/drivers/net/phy/realtek.c
index 339bb78..79350f9 100755
--- a/marvell/linux/drivers/net/phy/realtek.c
+++ b/marvell/linux/drivers/net/phy/realtek.c
@@ -33,6 +33,7 @@
 	uint32_t 	val;
 };
 static struct rtl9000bf_mdio_dev *s_rtl9000bf_mdio_dev;
+static u16 s_rtl9000bf_init_flag = 0;
 static u16 param_check[27] = {0, 0x8017, 0xFB03, 0, 0x8092, 0x6000, 0, 0x80AF,  0x6000, \
 							  0, 0x807D, 0x4443, 0, 0x809A, 0x4443,  \
 							  0, 0x81A3, 0x0F00, 0x0A81, 0x12, 0x0004, 0,  \
@@ -884,8 +885,14 @@
 		}
 	} while (reg_data != 0x0000);
 		
-	phy_write(phydev, 0, 0x2100); //power on
-    phy_write(phydev, 9, 0x0);    //set slave mode
+    phy_write(phydev, 9, 0x0);    			//set slave mode
+
+	phy_write(phydev, 31, 0xA58); 			//change page
+	reg_data = (u16)phy_read(phydev, 0x15);
+	reg_data |= 0xa;
+	phy_write(phydev, 0x15, reg_data); 		//close auto-polarity
+	phy_write(phydev, 0, 0x2100); 			//power on
+
 	return 0;
 }
 
@@ -1053,7 +1060,7 @@
 	//#LYNQ_MODFIY modify for task-1618 2025/6/24 end
 }
 
-static int rtl9000Bf_config_init(struct phy_device *phydev)
+static int rtl9000Bf_config_probe(struct phy_device *phydev)
 {
 	u32 mdio_data = 0;
 	u32 ret;
@@ -1066,6 +1073,10 @@
 		return -ENODEV;
 	}
 	
+	if(s_rtl9000bf_init_flag == 1) 
+		return 0;
+	
+	s_rtl9000bf_init_flag = 1;
     if (!s_rtl9000bf_mdio_dev) {
         s_rtl9000bf_mdio_dev = kzalloc(sizeof(*s_rtl9000bf_mdio_dev), GFP_KERNEL);
         if (!s_rtl9000bf_mdio_dev)
@@ -1097,6 +1108,9 @@
 	rtl9000Bf_power_set(s_rtl9000bf_mdio_dev->power_gpio, 1);
 	rtl9000Bf_reset(s_rtl9000bf_mdio_dev->rst_gpio);
 
+	phy_write(phydev, 0, 0x800);   //power down
+	mdelay(10);
+
 	//check PHY accessible
  	while(times <= RTL9000BF_ACCESS_TIMES_OUT) {
 		mdio_data = phy_read(phydev, 0x10);
@@ -1188,8 +1202,8 @@
 		//#LYNQ_MODFIY modify for task-1618 2025/6/19 end
         kfree(s_rtl9000bf_mdio_dev);
         s_rtl9000bf_mdio_dev = NULL;
-    }
-
+		s_rtl9000bf_init_flag = 0;
+	}
 }
 
 static int rtl9000Bf_read_status(struct phy_device *phydev)
@@ -1219,6 +1233,7 @@
 		return ret;
 	}
 	mdelay(10);
+	s_rtl9000bf_init_flag = 0;
 	return gpio_direction_output(s_rtl9000bf_mdio_dev->power_gpio, 0);
 	
 }
@@ -1367,8 +1382,9 @@
 //#LYNQ_MODFIY modify for task-1618 2025/6/10 start
 		{
 		PHY_ID_MATCH_EXACT(0x001ccb00),
-		.name		= "RTL90000Bf PHY",
-		.config_init	= &rtl9000Bf_config_init,
+		.name			= "RTL90000Bf PHY",
+		.config_init 	= &rtl9000Bf_config_probe,
+		.probe			= &rtl9000Bf_config_probe,
 		.remove  		= &rtl9000Bf_remove,		
 		.read_status	= rtl9000Bf_read_status,
 		//#LYNQ_MODFIY modify for task-1618 2025/6/19 start