mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-21 06:33:41 +00:00
c2c741ccce
Initial backport of at803x PHY driver cleanup. This is in preparation for split and addition of new PHY Family based on at803x needed for ipq807x and other IPQ Series SoC. Other affected patch are automatically refreshed with make target/linux/refresh Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
99 lines
3.0 KiB
Diff
99 lines
3.0 KiB
Diff
From df9401ff3e6eeaa42bfb06761967f1b71f5afce7 Mon Sep 17 00:00:00 2001
|
|
From: Luo Jie <quic_luoj@quicinc.com>
|
|
Date: Sun, 16 Jul 2023 16:49:23 +0800
|
|
Subject: [PATCH 5/6] net: phy: at803x: remove qca8081 1G fast retrain and
|
|
slave seed config
|
|
|
|
The fast retrain and slave seed configs are only applicable when the 2.5G
|
|
ability is supported.
|
|
|
|
Signed-off-by: Luo Jie <quic_luoj@quicinc.com>
|
|
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
|
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
---
|
|
drivers/net/phy/at803x.c | 50 +++++++++++++++++++++++++---------------
|
|
1 file changed, 32 insertions(+), 18 deletions(-)
|
|
|
|
--- a/drivers/net/phy/at803x.c
|
|
+++ b/drivers/net/phy/at803x.c
|
|
@@ -1755,6 +1755,11 @@ static bool qca808x_is_prefer_master(str
|
|
(phydev->master_slave_get == MASTER_SLAVE_CFG_MASTER_PREFERRED);
|
|
}
|
|
|
|
+static bool qca808x_has_fast_retrain_or_slave_seed(struct phy_device *phydev)
|
|
+{
|
|
+ return linkmode_test_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT, phydev->supported);
|
|
+}
|
|
+
|
|
static int qca808x_config_init(struct phy_device *phydev)
|
|
{
|
|
int ret;
|
|
@@ -1771,20 +1776,24 @@ static int qca808x_config_init(struct ph
|
|
if (ret)
|
|
return ret;
|
|
|
|
- /* Config the fast retrain for the link 2500M */
|
|
- ret = qca808x_phy_fast_retrain_config(phydev);
|
|
- if (ret)
|
|
- return ret;
|
|
-
|
|
- ret = genphy_read_master_slave(phydev);
|
|
- if (ret < 0)
|
|
- return ret;
|
|
-
|
|
- if (!qca808x_is_prefer_master(phydev)) {
|
|
- /* Enable seed and configure lower ramdom seed to make phy linked as slave mode */
|
|
- ret = qca808x_phy_ms_seed_enable(phydev, true);
|
|
+ if (qca808x_has_fast_retrain_or_slave_seed(phydev)) {
|
|
+ /* Config the fast retrain for the link 2500M */
|
|
+ ret = qca808x_phy_fast_retrain_config(phydev);
|
|
if (ret)
|
|
return ret;
|
|
+
|
|
+ ret = genphy_read_master_slave(phydev);
|
|
+ if (ret < 0)
|
|
+ return ret;
|
|
+
|
|
+ if (!qca808x_is_prefer_master(phydev)) {
|
|
+ /* Enable seed and configure lower ramdom seed to make phy
|
|
+ * linked as slave mode.
|
|
+ */
|
|
+ ret = qca808x_phy_ms_seed_enable(phydev, true);
|
|
+ if (ret)
|
|
+ return ret;
|
|
+ }
|
|
}
|
|
|
|
/* Configure adc threshold as 100mv for the link 10M */
|
|
@@ -1826,11 +1835,13 @@ static int qca808x_read_status(struct ph
|
|
* value is configured as the same value, the link can't be up and no link change
|
|
* occurs.
|
|
*/
|
|
- if (phydev->master_slave_state == MASTER_SLAVE_STATE_ERR ||
|
|
- qca808x_is_prefer_master(phydev)) {
|
|
- qca808x_phy_ms_seed_enable(phydev, false);
|
|
- } else {
|
|
- qca808x_phy_ms_seed_enable(phydev, true);
|
|
+ if (qca808x_has_fast_retrain_or_slave_seed(phydev)) {
|
|
+ if (phydev->master_slave_state == MASTER_SLAVE_STATE_ERR ||
|
|
+ qca808x_is_prefer_master(phydev)) {
|
|
+ qca808x_phy_ms_seed_enable(phydev, false);
|
|
+ } else {
|
|
+ qca808x_phy_ms_seed_enable(phydev, true);
|
|
+ }
|
|
}
|
|
}
|
|
|
|
@@ -1845,7 +1856,10 @@ static int qca808x_soft_reset(struct phy
|
|
if (ret < 0)
|
|
return ret;
|
|
|
|
- return qca808x_phy_ms_seed_enable(phydev, true);
|
|
+ if (qca808x_has_fast_retrain_or_slave_seed(phydev))
|
|
+ ret = qca808x_phy_ms_seed_enable(phydev, true);
|
|
+
|
|
+ return ret;
|
|
}
|
|
|
|
static bool qca808x_cdt_fault_length_valid(int cdt_code)
|