mirror of
https://github.com/hanwckf/immortalwrt-mt798x.git
synced 2025-01-10 03:09:08 +08:00
cec6012a69
Fix Intel X550 IOT issue. Due to X550 doesn't advertise 2.5G/5G link capability, phlylink cannot resolve link speed/duplex in the phy_resolve_aneg_linkmode(). Therefore, we handle the link speed from vendor registers. If without this patch, phylink will show unknown speed messages when link with NBASE-T link partner. [Release-log] N/A Change-Id: Iaef49fe8ea6ef7c6dc022e50456903b7feb4eef6 Reviewed-on: https://gerrit.mediatek.inc/c/openwrt/feeds/mtk_openwrt_feeds/+/6852800
60 lines
1.8 KiB
Diff
60 lines
1.8 KiB
Diff
diff --git a/drivers/net/phy/aquantia_main.c b/drivers/net/phy/aquantia_main.c
|
|
index 75d8351..ac8dd8e 100644
|
|
--- a/drivers/net/phy/aquantia_main.c
|
|
+++ b/drivers/net/phy/aquantia_main.c
|
|
@@ -22,6 +22,7 @@
|
|
#define PHY_ID_AQR107 0x03a1b4e0
|
|
#define PHY_ID_AQCS109 0x03a1b5c2
|
|
#define PHY_ID_AQR405 0x03a1b4b0
|
|
+#define PHY_ID_AQR113C 0x31c31c12
|
|
|
|
#define MDIO_PHYXS_VEND_IF_STATUS 0xe812
|
|
#define MDIO_PHYXS_VEND_IF_STATUS_TYPE_MASK GENMASK(7, 3)
|
|
@@ -352,6 +352,13 @@ static int aqr107_read_status(struct phy_device *phydev)
|
|
break;
|
|
}
|
|
|
|
+ /* Handle the case when the link speed is unknown */
|
|
+ if (phydev->speed == SPEED_UNKNOWN) {
|
|
+ val = aqr107_read_rate(phydev);
|
|
+ if (val < 0)
|
|
+ return val;
|
|
+ }
|
|
+
|
|
val = aqr107_read_downshift_event(phydev);
|
|
if (val <= 0)
|
|
return val;
|
|
@@ -695,6 +696,24 @@ static struct phy_driver aqr_driver[] = {
|
|
.ack_interrupt = aqr_ack_interrupt,
|
|
.read_status = aqr_read_status,
|
|
},
|
|
+{
|
|
+ PHY_ID_MATCH_MODEL(PHY_ID_AQR113C),
|
|
+ .name = "Aquantia AQR113C",
|
|
+ .probe = aqr107_probe,
|
|
+ .config_init = aqr107_config_init,
|
|
+ .config_aneg = aqr_config_aneg,
|
|
+ .config_intr = aqr_config_intr,
|
|
+ .ack_interrupt = aqr_ack_interrupt,
|
|
+ .read_status = aqr107_read_status,
|
|
+ .get_tunable = aqr107_get_tunable,
|
|
+ .set_tunable = aqr107_set_tunable,
|
|
+ .suspend = aqr107_suspend,
|
|
+ .resume = aqr107_resume,
|
|
+ .get_sset_count = aqr107_get_sset_count,
|
|
+ .get_strings = aqr107_get_strings,
|
|
+ .get_stats = aqr107_get_stats,
|
|
+ .link_change_notify = aqr107_link_change_notify,
|
|
+},
|
|
};
|
|
|
|
module_phy_driver(aqr_driver);
|
|
@@ -707,6 +726,7 @@ static struct mdio_device_id __maybe_unused aqr_tbl[] = {
|
|
{ PHY_ID_MATCH_MODEL(PHY_ID_AQR107) },
|
|
{ PHY_ID_MATCH_MODEL(PHY_ID_AQCS109) },
|
|
{ PHY_ID_MATCH_MODEL(PHY_ID_AQR405) },
|
|
+ { PHY_ID_MATCH_MODEL(PHY_ID_AQR113C) },
|
|
{ }
|
|
};
|
|
|