summaryrefslogtreecommitdiff
path: root/drivers/net/phy/sfp.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/phy/sfp.c')
-rw-r--r--drivers/net/phy/sfp.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/drivers/net/phy/sfp.c b/drivers/net/phy/sfp.c
index 2ec91466acdf..85e57a16bb52 100644
--- a/drivers/net/phy/sfp.c
+++ b/drivers/net/phy/sfp.c
@@ -432,6 +432,19 @@ static void sfp_fixup_rollball_wait4s(struct sfp *sfp)
sfp->module_t_wait = msecs_to_jiffies(4000);
}
+static void sfp_fixup_xikestor_2_5g(struct sfp *sfp)
+{
+ sfp_fixup_rollball(sfp);
+
+ /* This module does not immediately respond to Rollball commands. Add
+ * a small delay to avoid unnecessary PHY access attempts. Note that
+ * the delay should not be too long, as the RTL8221B-VB-CG PHY inside
+ * breaks when reading some registers from MMD 30 if it has already
+ * established a link (which takes about 4 seconds after reset).
+ */
+ sfp->module_t_wait = msecs_to_jiffies(1000);
+}
+
static void sfp_fixup_fs_10gt(struct sfp *sfp)
{
sfp_fixup_10gbaset_30m(sfp);
@@ -581,17 +594,17 @@ static const struct sfp_quirk sfp_quirks[] = {
// can operate at 2500base-X, but reports 1000BASE-LX / 1300MBd in its
// EEPROM
SFP_QUIRK("Hisense-Leox", "LXT-010S-H", sfp_quirk_2500basex,
- sfp_fixup_ignore_tx_fault),
+ sfp_fixup_ignore_tx_fault_and_los),
// Hisense ZNID-GPON-2311NA can operate at 2500base-X, but reports
// 1000BASE-LX / 1300MBd in its EEPROM
SFP_QUIRK("Hisense", "ZNID-GPON-2311NA", sfp_quirk_2500basex,
- sfp_fixup_ignore_tx_fault),
+ sfp_fixup_ignore_tx_fault_and_los),
// HSGQ HSGQ-XPON-Stick can operate at 2500base-X, but reports
// 1000BASE-LX / 1300MBd in its EEPROM
SFP_QUIRK("HSGQ", "HSGQ-XPON-Stick", sfp_quirk_2500basex,
- sfp_fixup_ignore_tx_fault),
+ sfp_fixup_ignore_tx_fault_and_los),
// Lantech 8330-262D-E and 8330-265D can operate at 2500base-X, but
// incorrectly report 2500MBd NRZ in their EEPROM.
@@ -632,10 +645,14 @@ static const struct sfp_quirk sfp_quirks[] = {
// match the part as a prefix.
SFP_QUIRK_F_PREFIX("OEM", "XGSPONST2001", sfp_fixup_potron),
+ SFP_QUIRK_S("TP-LINK", "TL-SM410U", sfp_quirk_oem_2_5g),
+
SFP_QUIRK_F("Turris", "RTSFP-2.5G", sfp_fixup_rollball),
SFP_QUIRK_F("Turris", "RTSFP-10", sfp_fixup_rollball),
SFP_QUIRK_F("Turris", "RTSFP-10G", sfp_fixup_rollball),
+ SFP_QUIRK_F("XikeStor", "SKT-2.5G-100M", sfp_fixup_xikestor_2_5g),
+
SFP_QUIRK_S("ZOERAX", "SFP-2.5G-T", sfp_quirk_oem_2_5g),
};