+++ /dev/null
-From 0805d67bc0ef95411228e802f31975cfb7555056 Mon Sep 17 00:00:00 2001
-From: Daniel Golle <daniel@makrotopia.org>
-Date: Tue, 23 Apr 2024 11:00:25 +0200
-Subject: [PATCH] net: sfp: add quirk for ATS SFP-GE-T 1000Base-TX module
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Add quirk for ATS SFP-GE-T 1000Base-TX module.
-
-This copper module comes with broken TX_FAULT indicator which must be
-ignored for it to work.
-
-Co-authored-by: Josef Schlehofer <pepe.schlehofer@gmail.com>
-Signed-off-by: Daniel Golle <daniel@makrotopia.org>
-[ rebased on top of net-next ]
-Signed-off-by: Marek BehĂșn <kabel@kernel.org>
-Link: https://lore.kernel.org/r/20240423090025.29231-1-kabel@kernel.org
-Signed-off-by: Jakub Kicinski <kuba@kernel.org>
----
- drivers/net/phy/sfp.c | 3 +++
- 1 file changed, 3 insertions(+)
-
---- a/drivers/net/phy/sfp.c
-+++ b/drivers/net/phy/sfp.c
-@@ -486,6 +486,9 @@ static const struct sfp_quirk sfp_quirks
- // OEM SFP-GE-T is a 1000Base-T module with broken TX_FAULT indicator
- SFP_QUIRK_F("OEM", "SFP-GE-T", sfp_fixup_ignore_tx_fault),
-
-+ // OEM SFP-GE-T is a 1000Base-T module with broken TX_FAULT indicator
-+ SFP_QUIRK_F("OEM", "SFP-GE-T", sfp_fixup_ignore_tx_fault),
-+
- SFP_QUIRK_F("OEM", "SFP-10G-T", sfp_fixup_rollball_cc),
- SFP_QUIRK_M("OEM", "SFP-2.5G-T", sfp_quirk_oem_2_5g),
- SFP_QUIRK_F("OEM", "RTSFP-10", sfp_fixup_rollball_cc),
static void sfp_fixup_rollball_cc(struct sfp *sfp)
{
sfp_fixup_rollball(sfp);
-@@ -2323,7 +2321,7 @@ static int sfp_sm_mod_probe(struct sfp *
+@@ -2320,7 +2318,7 @@ static int sfp_sm_mod_probe(struct sfp *
mask |= SFP_F_RS1;
sfp->module_t_start_up = T_START_UP;
sfp->state_ignore_mask = 0;
-@@ -2559,10 +2557,9 @@ static void sfp_sm_main(struct sfp *sfp,
+@@ -2556,10 +2554,9 @@ static void sfp_sm_main(struct sfp *sfp,
/* We need to check the TX_FAULT state, which is not defined
* while TX_DISABLE is asserted. The earliest we want to do
break;
case SFP_S_WAIT:
-@@ -2576,8 +2573,8 @@ static void sfp_sm_main(struct sfp *sfp,
+@@ -2573,8 +2570,8 @@ static void sfp_sm_main(struct sfp *sfp,
* deasserting.
*/
timeout = sfp->module_t_start_up;
else
timeout = 1;
-@@ -2620,7 +2617,11 @@ static void sfp_sm_main(struct sfp *sfp,
+@@ -2617,7 +2614,11 @@ static void sfp_sm_main(struct sfp *sfp,
ret = sfp_sm_probe_for_phy(sfp);
if (ret == -ENODEV) {
if (--sfp->sm_phy_retries) {
}
static void sfp_fixup_halny_gsfp(struct sfp *sfp)
-@@ -2321,6 +2328,7 @@ static int sfp_sm_mod_probe(struct sfp *
+@@ -2318,6 +2325,7 @@ static int sfp_sm_mod_probe(struct sfp *
mask |= SFP_F_RS1;
sfp->module_t_start_up = T_START_UP;
sfp->phy_t_retry = T_PHY_RETRY;
sfp->state_ignore_mask = 0;
-@@ -2557,9 +2565,10 @@ static void sfp_sm_main(struct sfp *sfp,
+@@ -2554,9 +2562,10 @@ static void sfp_sm_main(struct sfp *sfp,
/* We need to check the TX_FAULT state, which is not defined
* while TX_DISABLE is asserted. The earliest we want to do
break;
case SFP_S_WAIT:
-@@ -2573,8 +2582,8 @@ static void sfp_sm_main(struct sfp *sfp,
+@@ -2570,8 +2579,8 @@ static void sfp_sm_main(struct sfp *sfp,
* deasserting.
*/
timeout = sfp->module_t_start_up;
--- a/drivers/net/phy/sfp.c
+++ b/drivers/net/phy/sfp.c
-@@ -1571,6 +1571,10 @@ static void sfp_hwmon_probe(struct work_
+@@ -1568,6 +1568,10 @@ static void sfp_hwmon_probe(struct work_
struct sfp *sfp = container_of(work, struct sfp, hwmon_probe.work);
int err;
/* hwmon interface needs to access 16bit registers in atomic way to
* guarantee coherency of the diagnostic monitoring data. If it is not
* possible to guarantee coherency because EEPROM is broken in such way
-@@ -2433,6 +2437,13 @@ static void sfp_sm_module(struct sfp *sf
+@@ -2430,6 +2434,13 @@ static void sfp_sm_module(struct sfp *sf
return;
}
--- a/drivers/net/phy/sfp.c
+++ b/drivers/net/phy/sfp.c
-@@ -676,10 +676,64 @@ static int sfp_i2c_write(struct sfp *sfp
+@@ -673,10 +673,64 @@ static int sfp_i2c_write(struct sfp *sfp
return ret == ARRAY_SIZE(msgs) ? len : 0;
}
sfp->i2c = i2c;
sfp->read = sfp_i2c_read;
-@@ -711,6 +765,29 @@ static int sfp_i2c_mdiobus_create(struct
+@@ -708,6 +762,29 @@ static int sfp_i2c_mdiobus_create(struct
return 0;
}
static void sfp_i2c_mdiobus_destroy(struct sfp *sfp)
{
mdiobus_unregister(sfp->i2c_mii);
-@@ -1889,9 +1966,15 @@ static void sfp_sm_fault(struct sfp *sfp
+@@ -1886,9 +1963,15 @@ static void sfp_sm_fault(struct sfp *sfp
static int sfp_sm_add_mdio_bus(struct sfp *sfp)
{