[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