[][kernel][mt7988][eth][phy: mediatek-2p5ge: Fix duplex detection]

[Description]
Fix duplex detection

[Release-log]
N/A

Change-Id: Icfe1246bc65baeebc282cbbefe10f97fed1dd97e
Reviewed-on: https://gerrit.mediatek.inc/c/openwrt/feeds/mtk_openwrt_feeds/+/7361226
diff --git a/target/linux/mediatek/files-5.4/drivers/net/phy/mediatek-2p5ge.c b/target/linux/mediatek/files-5.4/drivers/net/phy/mediatek-2p5ge.c
index f5964c3..32ae8ea 100644
--- a/target/linux/mediatek/files-5.4/drivers/net/phy/mediatek-2p5ge.c
+++ b/target/linux/mediatek/files-5.4/drivers/net/phy/mediatek-2p5ge.c
@@ -22,6 +22,10 @@
 #define   PHY_AUX_DPX_MASK		GENMASK(5, 5)
 #define   PHY_AUX_SPEED_MASK		GENMASK(4, 2)
 
+/* Registers on MDIO_MMD_VEND1 */
+#define MTK_PHY_LINK_STATUS_MISC               (0xa2)
+#define   MTK_PHY_FDX_ENABLE                   BIT(5)
+
 /* Registers on MDIO_MMD_VEND2 */
 #define MTK_PHY_LED0_ON_CTRL			(0x24)
 #define   MTK_PHY_LED0_POLARITY			BIT(14)
@@ -190,8 +194,6 @@
 	if (ret < 0)
 		return ret;
 
-	/* Actually this phy supports only FDX */
-	phydev->duplex = (ret & PHY_AUX_DPX_MASK) ? DUPLEX_FULL : DUPLEX_HALF;
 	switch (FIELD_GET(PHY_AUX_SPEED_MASK, ret)) {
 	case PHY_AUX_SPD_10:
 		phydev->speed = SPEED_10;
@@ -204,10 +206,14 @@
 		break;
 	case PHY_AUX_SPD_2500:
 		phydev->speed = SPEED_2500;
-		phydev->duplex = DUPLEX_FULL; /* 2.5G must be FDX */
 		break;
 	}
 
+	ret = phy_read_mmd(phydev, MDIO_MMD_VEND1, MTK_PHY_LINK_STATUS_MISC);
+	if (ret < 0)
+		return ret;
+	phydev->duplex = (ret & MTK_PHY_FDX_ENABLE) ? DUPLEX_FULL : DUPLEX_HALF;
+
 	return 0;
 }