mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-21 06:33:41 +00:00
7e94a02cbe
It was reported on Turris forum [1] that HALNy HL-GSFP module does not work as it should with kernel 5.15. Russell King prepared this patch series, which fixes broken SFP module to work. Compile and run tested with Turris Omnia. [1] https://forum.turris.cz/t/hbl-turrisos-6-0-alpha2-halny-hl-gsfp-sfp-gpon-stick-problems/17547 Signed-off-by: Josef Schlehofer <pepe.schlehofer@gmail.com>
69 lines
2.1 KiB
Diff
69 lines
2.1 KiB
Diff
From 21fdd8281de3022aee35dd5bfccc892bd46529a3 Mon Sep 17 00:00:00 2001
|
|
From: "Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>
|
|
Date: Fri, 26 Aug 2022 08:43:35 +0100
|
|
Subject: [PATCH 2/6] net: sfp: move Alcatel Lucent 3FE46541AA fixup
|
|
|
|
Add a new fixup mechanism to the SFP quirks, and use it for this
|
|
module.
|
|
|
|
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
|
|
---
|
|
drivers/net/phy/sfp.c | 14 +++++++++-----
|
|
drivers/net/phy/sfp.h | 1 +
|
|
2 files changed, 10 insertions(+), 5 deletions(-)
|
|
|
|
--- a/drivers/net/phy/sfp.c
|
|
+++ b/drivers/net/phy/sfp.c
|
|
@@ -310,6 +310,11 @@ static const struct of_device_id sfp_of_
|
|
};
|
|
MODULE_DEVICE_TABLE(of, sfp_of_match);
|
|
|
|
+static void sfp_fixup_long_startup(struct sfp *sfp)
|
|
+{
|
|
+ sfp->module_t_start_up = T_START_UP_BAD_GPON;
|
|
+}
|
|
+
|
|
static void sfp_quirk_2500basex(const struct sfp_eeprom_id *id,
|
|
unsigned long *modes)
|
|
{
|
|
@@ -340,6 +345,7 @@ static const struct sfp_quirk sfp_quirks
|
|
.vendor = "ALCATELLUCENT",
|
|
.part = "3FE46541AA",
|
|
.modes = sfp_quirk_2500basex,
|
|
+ .fixup = sfp_fixup_long_startup,
|
|
}, {
|
|
// Huawei MA5671A can operate at 2500base-X, but report 1.2GBd
|
|
// NRZ in their EEPROM
|
|
@@ -2029,11 +2035,7 @@ static int sfp_sm_mod_probe(struct sfp *
|
|
if (ret < 0)
|
|
return ret;
|
|
|
|
- if (!memcmp(id.base.vendor_name, "ALCATELLUCENT ", 16) &&
|
|
- !memcmp(id.base.vendor_pn, "3FE46541AA ", 16))
|
|
- sfp->module_t_start_up = T_START_UP_BAD_GPON;
|
|
- else
|
|
- sfp->module_t_start_up = T_START_UP;
|
|
+ sfp->module_t_start_up = T_START_UP;
|
|
|
|
if (!memcmp(id.base.vendor_name, "HUAWEI ", 16) &&
|
|
!memcmp(id.base.vendor_pn, "MA5671A ", 16))
|
|
@@ -2042,6 +2044,8 @@ static int sfp_sm_mod_probe(struct sfp *
|
|
sfp->tx_fault_ignore = false;
|
|
|
|
sfp->quirk = sfp_lookup_quirk(&id);
|
|
+ if (sfp->quirk && sfp->quirk->fixup)
|
|
+ sfp->quirk->fixup(sfp);
|
|
|
|
return 0;
|
|
}
|
|
--- a/drivers/net/phy/sfp.h
|
|
+++ b/drivers/net/phy/sfp.h
|
|
@@ -10,6 +10,7 @@ struct sfp_quirk {
|
|
const char *vendor;
|
|
const char *part;
|
|
void (*modes)(const struct sfp_eeprom_id *id, unsigned long *modes);
|
|
+ void (*fixup)(struct sfp *sfp);
|
|
};
|
|
|
|
struct sfp_socket_ops {
|