From: "Pali Rohár" <pali@kernel.org>
To: Russell King - ARM Linux admin <linux@armlinux.org.uk>,
Andrew Lunn <andrew@lunn.ch>,
"David S. Miller" <davem@davemloft.net>,
Jakub Kicinski <kuba@kernel.org>
Cc: "Thomas Schreiber" <tschreibe@gmail.com>,
"Heiner Kallweit" <hkallweit1@gmail.com>,
"Marek Behún" <kabel@kernel.org>,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH v2 2/3] net: sfp: assume that LOS is not implemented if both LOS normal and inverted is set
Date: Wed, 6 Jan 2021 16:37:48 +0100 [thread overview]
Message-ID: <20210106153749.6748-3-pali@kernel.org> (raw)
In-Reply-To: <20210106153749.6748-1-pali@kernel.org>
From: Russell King <rmk+kernel@armlinux.org.uk>
Some GPON SFP modules (e.g. Ubiquiti U-Fiber Instant) have set both
SFP_OPTIONS_LOS_INVERTED and SFP_OPTIONS_LOS_NORMAL bits in their EEPROM.
Such combination of bits is meaningless so assume that LOS signal is not
implemented.
This patch fixes link carrier for GPON SFP module Ubiquiti U-Fiber Instant.
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
Signed-off-by: Pali Rohár <pali@kernel.org>
---
Changes in v2:
* Fix author/signed-off-by lines
---
drivers/net/phy/sfp.c | 36 ++++++++++++++++++++++--------------
1 file changed, 22 insertions(+), 14 deletions(-)
diff --git a/drivers/net/phy/sfp.c b/drivers/net/phy/sfp.c
index c0a891cdcd73..15fb8f7dfe5b 100644
--- a/drivers/net/phy/sfp.c
+++ b/drivers/net/phy/sfp.c
@@ -1488,15 +1488,19 @@ static void sfp_sm_link_down(struct sfp *sfp)
static void sfp_sm_link_check_los(struct sfp *sfp)
{
- unsigned int los = sfp->state & SFP_F_LOS;
+ const __be16 los_inverted = cpu_to_be16(SFP_OPTIONS_LOS_INVERTED);
+ const __be16 los_normal = cpu_to_be16(SFP_OPTIONS_LOS_NORMAL);
+ __be16 los_options = sfp->id.ext.options & (los_inverted | los_normal);
+ bool los = false;
/* If neither SFP_OPTIONS_LOS_INVERTED nor SFP_OPTIONS_LOS_NORMAL
- * are set, we assume that no LOS signal is available.
+ * are set, we assume that no LOS signal is available. If both are
+ * set, we assume LOS is not implemented (and is meaningless.)
*/
- if (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_LOS_INVERTED))
- los ^= SFP_F_LOS;
- else if (!(sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_LOS_NORMAL)))
- los = 0;
+ if (los_options == los_inverted)
+ los = !(sfp->state & SFP_F_LOS);
+ else if (los_options == los_normal)
+ los = !!(sfp->state & SFP_F_LOS);
if (los)
sfp_sm_next(sfp, SFP_S_WAIT_LOS, 0);
@@ -1506,18 +1510,22 @@ static void sfp_sm_link_check_los(struct sfp *sfp)
static bool sfp_los_event_active(struct sfp *sfp, unsigned int event)
{
- return (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_LOS_INVERTED) &&
- event == SFP_E_LOS_LOW) ||
- (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_LOS_NORMAL) &&
- event == SFP_E_LOS_HIGH);
+ const __be16 los_inverted = cpu_to_be16(SFP_OPTIONS_LOS_INVERTED);
+ const __be16 los_normal = cpu_to_be16(SFP_OPTIONS_LOS_NORMAL);
+ __be16 los_options = sfp->id.ext.options & (los_inverted | los_normal);
+
+ return (los_options == los_inverted && event == SFP_E_LOS_LOW) ||
+ (los_options == los_normal && event == SFP_E_LOS_HIGH);
}
static bool sfp_los_event_inactive(struct sfp *sfp, unsigned int event)
{
- return (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_LOS_INVERTED) &&
- event == SFP_E_LOS_HIGH) ||
- (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_LOS_NORMAL) &&
- event == SFP_E_LOS_LOW);
+ const __be16 los_inverted = cpu_to_be16(SFP_OPTIONS_LOS_INVERTED);
+ const __be16 los_normal = cpu_to_be16(SFP_OPTIONS_LOS_NORMAL);
+ __be16 los_options = sfp->id.ext.options & (los_inverted | los_normal);
+
+ return (los_options == los_inverted && event == SFP_E_LOS_HIGH) ||
+ (los_options == los_normal && event == SFP_E_LOS_LOW);
}
static void sfp_sm_fault(struct sfp *sfp, unsigned int next_state, bool warn)
--
2.20.1
next prev parent reply other threads:[~2021-01-06 15:39 UTC|newest]
Thread overview: 78+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-30 15:47 [PATCH 0/4] net: sfp: add support for GPON RTL8672/RTL9601C and Ubiquiti U-Fiber Pali Rohár
2020-12-30 15:47 ` [PATCH 1/4] net: sfp: add workaround for Realtek RTL8672 and RTL9601C chips Pali Rohár
2020-12-30 16:10 ` Russell King - ARM Linux admin
2020-12-30 16:56 ` Pali Rohár
2020-12-30 17:05 ` Russell King - ARM Linux admin
2020-12-30 17:13 ` Andrew Lunn
2020-12-30 17:43 ` Pali Rohár
2020-12-30 19:09 ` Russell King - ARM Linux admin
2020-12-30 19:49 ` Andrew Lunn
2020-12-31 12:14 ` Pali Rohár
2020-12-31 15:09 ` Andrew Lunn
2020-12-31 15:40 ` Pali Rohár
2020-12-31 15:30 ` Andrew Lunn
2020-12-31 17:00 ` Pali Rohár
2020-12-31 17:13 ` Andrew Lunn
2021-01-02 1:49 ` Pali Rohár
2021-01-03 2:25 ` Thomas Schreiber
2021-01-03 2:41 ` Pali Rohár
2021-01-06 14:55 ` Pali Rohár
2021-01-06 15:21 ` Russell King - ARM Linux admin
2021-01-06 15:23 ` Russell King - ARM Linux admin
2021-01-06 15:27 ` Russell King - ARM Linux admin
2021-01-06 15:35 ` Pali Rohár
2020-12-30 19:30 ` Andrew Lunn
2020-12-30 19:39 ` Russell King - ARM Linux admin
2020-12-30 17:31 ` Pali Rohár
2020-12-30 19:18 ` Russell King - ARM Linux admin
2020-12-30 15:47 ` [PATCH 2/4] net: sfp: allow to use also SFP modules which are detected as SFF Pali Rohár
2020-12-30 16:11 ` Russell King - ARM Linux admin
2020-12-30 17:06 ` Pali Rohár
2020-12-30 17:27 ` Marek Behún
2020-12-30 19:12 ` Russell King - ARM Linux admin
2020-12-31 13:52 ` Pali Rohár
2020-12-30 15:47 ` [PATCH 3/4] net: sfp: assume that LOS is not implemented if both LOS normal and inverted is set Pali Rohár
2020-12-30 16:13 ` Russell King - ARM Linux admin
2020-12-30 16:57 ` Pali Rohár
2020-12-30 17:06 ` Russell King - ARM Linux admin
2020-12-30 17:17 ` Andrew Lunn
2020-12-30 17:32 ` Pali Rohár
2020-12-30 15:47 ` [PATCH 4/4] net: sfp: add mode quirk for GPON module Ubiquiti U-Fiber Instant Pali Rohár
2021-01-06 15:37 ` [PATCH v2 0/3] net: sfp: add support for GPON RTL8672/RTL9601C and Ubiquiti U-Fiber Pali Rohár
2021-01-06 15:37 ` [PATCH v2 1/3] net: sfp: add workaround for Realtek RTL8672 and RTL9601C chips Pali Rohár
2021-01-07 2:02 ` Andrew Lunn
2021-01-07 9:08 ` Pali Rohár
2021-01-07 17:19 ` Andrew Lunn
2021-01-07 17:40 ` Russell King - ARM Linux admin
2021-01-07 19:18 ` Pali Rohár
2021-01-07 19:17 ` Pali Rohár
2021-01-07 19:45 ` Russell King - ARM Linux admin
2021-01-07 20:21 ` Marek Behún
2021-01-08 0:49 ` Pali Rohár
2021-01-06 15:37 ` Pali Rohár [this message]
2021-01-07 16:54 ` [PATCH v2 2/3] net: sfp: assume that LOS is not implemented if both LOS normal and inverted is set Andrew Lunn
2021-01-09 15:46 ` Russell King - ARM Linux admin
2021-01-09 15:54 ` Andrew Lunn
2021-01-09 16:27 ` Russell King - ARM Linux admin
2021-01-09 19:14 ` Pali Rohár
2021-01-09 23:19 ` Russell King - ARM Linux admin
2021-01-09 23:50 ` Pali Rohár
2021-01-06 15:37 ` [PATCH v2 3/3] net: sfp: add mode quirk for GPON module Ubiquiti U-Fiber Instant Pali Rohár
2021-01-07 16:51 ` Andrew Lunn
2021-01-11 11:39 ` [PATCH v3 0/2] net: sfp: add support for GPON RTL8672/RTL9601C and Ubiquiti U-Fiber Pali Rohár
2021-01-11 11:39 ` [PATCH v3 1/2] net: sfp: add workaround for Realtek RTL8672 and RTL9601C chips Pali Rohár
2021-01-11 15:28 ` Marek Behún
2021-01-11 11:39 ` [PATCH v3 2/2] net: sfp: add mode quirk for GPON module Ubiquiti U-Fiber Instant Pali Rohár
2021-01-11 15:32 ` Marek Behún
2021-01-12 13:33 ` [PATCH v3 0/2] net: sfp: add support for GPON RTL8672/RTL9601C and Ubiquiti U-Fiber Pali Rohár
2021-01-18 9:34 ` Pali Rohár
2021-01-25 14:09 ` Pali Rohár
2021-01-25 14:16 ` Russell King - ARM Linux admin
2021-01-25 14:23 ` Pali Rohár
2021-01-25 14:42 ` Russell King - ARM Linux admin
2021-01-25 14:47 ` Pali Rohár
2021-01-25 15:41 ` Andrew Lunn
2021-01-25 15:02 ` [PATCH v4 " Pali Rohár
2021-01-25 15:02 ` [PATCH v4 1/2] net: sfp: add workaround for Realtek RTL8672 and RTL9601C chips Pali Rohár
2021-01-25 15:02 ` [PATCH v4 2/2] net: sfp: add mode quirk for GPON module Ubiquiti U-Fiber Instant Pali Rohár
2021-01-28 21:50 ` [PATCH v4 0/2] net: sfp: add support for GPON RTL8672/RTL9601C and Ubiquiti U-Fiber patchwork-bot+netdevbpf
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210106153749.6748-3-pali@kernel.org \
--to=pali@kernel.org \
--cc=andrew@lunn.ch \
--cc=davem@davemloft.net \
--cc=hkallweit1@gmail.com \
--cc=kabel@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=netdev@vger.kernel.org \
--cc=tschreibe@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.