forked from Openwrt/openwrt
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>
63 lines
2.0 KiB
Diff
63 lines
2.0 KiB
Diff
From 22eb276098da820d9440fad22901f9b74ed4d659 Mon Sep 17 00:00:00 2001
|
|
From: Christian Marangi <ansuelsmth@gmail.com>
|
|
Date: Thu, 4 Jan 2024 22:30:38 +0100
|
|
Subject: [PATCH 1/4] net: phy: at803x: generalize cdt fault length function
|
|
|
|
Generalize cable test fault length function since they all base on the
|
|
same magic values (already reverse engineered to understand the meaning
|
|
of it) to have consistenct values on every PHY.
|
|
|
|
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
|
Reviewed-by: Simon Horman <horms@kernel.org>
|
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
---
|
|
drivers/net/phy/at803x.c | 13 ++++++-------
|
|
1 file changed, 6 insertions(+), 7 deletions(-)
|
|
|
|
--- a/drivers/net/phy/at803x.c
|
|
+++ b/drivers/net/phy/at803x.c
|
|
@@ -1192,10 +1192,8 @@ static bool at803x_cdt_fault_length_vali
|
|
return false;
|
|
}
|
|
|
|
-static int at803x_cdt_fault_length(u16 status)
|
|
+static int at803x_cdt_fault_length(int dt)
|
|
{
|
|
- int dt;
|
|
-
|
|
/* According to the datasheet the distance to the fault is
|
|
* DELTA_TIME * 0.824 meters.
|
|
*
|
|
@@ -1211,8 +1209,6 @@ static int at803x_cdt_fault_length(u16 s
|
|
* With a VF of 0.69 we get the factor 0.824 mentioned in the
|
|
* datasheet.
|
|
*/
|
|
- dt = FIELD_GET(AT803X_CDT_STATUS_DELTA_TIME_MASK, status);
|
|
-
|
|
return (dt * 824) / 10;
|
|
}
|
|
|
|
@@ -1265,9 +1261,11 @@ static int at803x_cable_test_one_pair(st
|
|
ethnl_cable_test_result(phydev, ethtool_pair[pair],
|
|
at803x_cable_test_result_trans(val));
|
|
|
|
- if (at803x_cdt_fault_length_valid(val))
|
|
+ if (at803x_cdt_fault_length_valid(val)) {
|
|
+ val = FIELD_GET(AT803X_CDT_STATUS_DELTA_TIME_MASK, val);
|
|
ethnl_cable_test_fault_length(phydev, ethtool_pair[pair],
|
|
at803x_cdt_fault_length(val));
|
|
+ }
|
|
|
|
return 1;
|
|
}
|
|
@@ -1992,7 +1990,8 @@ static int qca808x_cdt_fault_length(stru
|
|
if (val < 0)
|
|
return val;
|
|
|
|
- return (FIELD_GET(QCA808X_CDT_DIAG_LENGTH, val) * 824) / 10;
|
|
+ val = FIELD_GET(QCA808X_CDT_DIAG_LENGTH, val);
|
|
+ return at803x_cdt_fault_length(val);
|
|
}
|
|
|
|
static int qca808x_cable_test_start(struct phy_device *phydev)
|