* [PATCH RESEND net-next 0/2] Add support for VSOL V2801F/CarlitoxxPro CPGOS03 GPON module
@ 2020-12-09 11:21 Russell King - ARM Linux admin
2020-12-09 11:22 ` [PATCH net-next 1/2] net: sfp: VSOL V2801F / CarlitoxxPro CPGOS03-0490 v2.0 workaround Russell King
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Russell King - ARM Linux admin @ 2020-12-09 11:21 UTC (permalink / raw)
To: Andrew Lunn, Heiner Kallweit
Cc: David S. Miller, Jakub Kicinski, netdev, Pali Rohár
Hi,
This patch set adds support for the V2801F / CarlitoxxPro module. This
requires two changes:
1) the module only supports single byte reads to the ID EEPROM,
while we need to still permit sequential reads to the diagnostics
EEPROM for atomicity reasons.
2) we need to relax the encoding check when we have no reported
capabilities to allow 1000base-X based on the module bitrate.
Thanks to Pali Rohár for responsive testing over the last two days.
(Resending, dropping the utf-8 characters in Pali's name so the patches
get through vger. Added Andrew's r-b tags.)
drivers/net/phy/sfp-bus.c | 11 ++++-----
drivers/net/phy/sfp.c | 63 +++++++++++++++++++++++++++++++++++++++++++----
2 files changed, 63 insertions(+), 11 deletions(-)
--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH net-next 1/2] net: sfp: VSOL V2801F / CarlitoxxPro CPGOS03-0490 v2.0 workaround
2020-12-09 11:21 [PATCH RESEND net-next 0/2] Add support for VSOL V2801F/CarlitoxxPro CPGOS03 GPON module Russell King - ARM Linux admin
@ 2020-12-09 11:22 ` Russell King
2020-12-09 11:22 ` [PATCH net-next 2/2] net: sfp: relax bitrate-derived mode check Russell King
2020-12-10 3:38 ` [PATCH RESEND net-next 0/2] Add support for VSOL V2801F/CarlitoxxPro CPGOS03 GPON module David Miller
2 siblings, 0 replies; 4+ messages in thread
From: Russell King @ 2020-12-09 11:22 UTC (permalink / raw)
To: Andrew Lunn, Heiner Kallweit
Cc: Pali Rohar, David S. Miller, Jakub Kicinski, netdev
Add a workaround for the detection of VSOL V2801F / CarlitoxxPro
CPGOS03-0490 v2.0 GPON module which CarlitoxxPro states needs single
byte I2C reads to the EEPROM.
Pali Rohár reports that he also has a CarlitoxxPro-based V2801F module,
which reports a manufacturer of "OEM". This manufacturer can't be
matched as it appears in many different modules, so also match the part
number too.
Reported-by: Thomas Schreiber <tschreibe@gmail.com>
Reported-by: Pali Rohár <pali@kernel.org>
Tested-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
---
drivers/net/phy/sfp.c | 63 +++++++++++++++++++++++++++++++++++++++----
1 file changed, 58 insertions(+), 5 deletions(-)
diff --git a/drivers/net/phy/sfp.c b/drivers/net/phy/sfp.c
index 34aa196b7465..91d74c1a920a 100644
--- a/drivers/net/phy/sfp.c
+++ b/drivers/net/phy/sfp.c
@@ -219,6 +219,7 @@ struct sfp {
struct sfp_bus *sfp_bus;
struct phy_device *mod_phy;
const struct sff_data *type;
+ size_t i2c_block_size;
u32 max_power_mW;
unsigned int (*get_state)(struct sfp *);
@@ -335,10 +336,19 @@ static int sfp_i2c_read(struct sfp *sfp, bool a2, u8 dev_addr, void *buf,
size_t len)
{
struct i2c_msg msgs[2];
- u8 bus_addr = a2 ? 0x51 : 0x50;
+ size_t block_size;
size_t this_len;
+ u8 bus_addr;
int ret;
+ if (a2) {
+ block_size = 16;
+ bus_addr = 0x51;
+ } else {
+ block_size = sfp->i2c_block_size;
+ bus_addr = 0x50;
+ }
+
msgs[0].addr = bus_addr;
msgs[0].flags = 0;
msgs[0].len = 1;
@@ -350,8 +360,8 @@ static int sfp_i2c_read(struct sfp *sfp, bool a2, u8 dev_addr, void *buf,
while (len) {
this_len = len;
- if (this_len > 16)
- this_len = 16;
+ if (this_len > block_size)
+ this_len = block_size;
msgs[1].len = this_len;
@@ -1632,6 +1642,28 @@ static int sfp_sm_mod_hpower(struct sfp *sfp, bool enable)
return 0;
}
+/* Some modules (Nokia 3FE46541AA) lock up if byte 0x51 is read as a
+ * single read. Switch back to reading 16 byte blocks unless we have
+ * a CarlitoxxPro module (rebranded VSOL V2801F). Even more annoyingly,
+ * some VSOL V2801F have the vendor name changed to OEM.
+ */
+static int sfp_quirk_i2c_block_size(const struct sfp_eeprom_base *base)
+{
+ if (!memcmp(base->vendor_name, "VSOL ", 16))
+ return 1;
+ if (!memcmp(base->vendor_name, "OEM ", 16) &&
+ !memcmp(base->vendor_pn, "V2801F ", 16))
+ return 1;
+
+ /* Some modules can't cope with long reads */
+ return 16;
+}
+
+static void sfp_quirks_base(struct sfp *sfp, const struct sfp_eeprom_base *base)
+{
+ sfp->i2c_block_size = sfp_quirk_i2c_block_size(base);
+}
+
static int sfp_cotsworks_fixup_check(struct sfp *sfp, struct sfp_eeprom_id *id)
{
u8 check;
@@ -1673,14 +1705,20 @@ static int sfp_sm_mod_probe(struct sfp *sfp, bool report)
u8 check;
int ret;
- ret = sfp_read(sfp, false, 0, &id, sizeof(id));
+ /* Some modules (CarlitoxxPro CPGOS03-0490) do not support multibyte
+ * reads from the EEPROM, so start by reading the base identifying
+ * information one byte at a time.
+ */
+ sfp->i2c_block_size = 1;
+
+ ret = sfp_read(sfp, false, 0, &id.base, sizeof(id.base));
if (ret < 0) {
if (report)
dev_err(sfp->dev, "failed to read EEPROM: %d\n", ret);
return -EAGAIN;
}
- if (ret != sizeof(id)) {
+ if (ret != sizeof(id.base)) {
dev_err(sfp->dev, "EEPROM short read: %d\n", ret);
return -EAGAIN;
}
@@ -1719,6 +1757,21 @@ static int sfp_sm_mod_probe(struct sfp *sfp, bool report)
}
}
+ /* Apply any early module-specific quirks */
+ sfp_quirks_base(sfp, &id.base);
+
+ ret = sfp_read(sfp, false, SFP_CC_BASE + 1, &id.ext, sizeof(id.ext));
+ if (ret < 0) {
+ if (report)
+ dev_err(sfp->dev, "failed to read EEPROM: %d\n", ret);
+ return -EAGAIN;
+ }
+
+ if (ret != sizeof(id.ext)) {
+ dev_err(sfp->dev, "EEPROM short read: %d\n", ret);
+ return -EAGAIN;
+ }
+
check = sfp_check(&id.ext, sizeof(id.ext) - 1);
if (check != id.ext.cc_ext) {
if (cotsworks) {
--
2.20.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH net-next 2/2] net: sfp: relax bitrate-derived mode check
2020-12-09 11:21 [PATCH RESEND net-next 0/2] Add support for VSOL V2801F/CarlitoxxPro CPGOS03 GPON module Russell King - ARM Linux admin
2020-12-09 11:22 ` [PATCH net-next 1/2] net: sfp: VSOL V2801F / CarlitoxxPro CPGOS03-0490 v2.0 workaround Russell King
@ 2020-12-09 11:22 ` Russell King
2020-12-10 3:38 ` [PATCH RESEND net-next 0/2] Add support for VSOL V2801F/CarlitoxxPro CPGOS03 GPON module David Miller
2 siblings, 0 replies; 4+ messages in thread
From: Russell King @ 2020-12-09 11:22 UTC (permalink / raw)
To: Andrew Lunn, Heiner Kallweit
Cc: Pali Rohar, David S. Miller, Jakub Kicinski, netdev
Do not check the encoding when deriving 1000BASE-X from the bitrate
when no other modes are discovered. Some GPON modules (VSOL V2801F
and CarlitoxxPro CPGOS03-0490 v2.0) indicate NRZ encoding with a
1200Mbaud bitrate, but should be driven with 1000BASE-X on the host
side.
Tested-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
---
drivers/net/phy/sfp-bus.c | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/drivers/net/phy/sfp-bus.c b/drivers/net/phy/sfp-bus.c
index 58014feedf6c..20b91f5dfc6e 100644
--- a/drivers/net/phy/sfp-bus.c
+++ b/drivers/net/phy/sfp-bus.c
@@ -334,14 +334,13 @@ void sfp_parse_support(struct sfp_bus *bus, const struct sfp_eeprom_id *id,
}
/* If we haven't discovered any modes that this module supports, try
- * the encoding and bitrate to determine supported modes. Some BiDi
- * modules (eg, 1310nm/1550nm) are not 1000BASE-BX compliant due to
- * the differing wavelengths, so do not set any transceiver bits.
+ * the bitrate to determine supported modes. Some BiDi modules (eg,
+ * 1310nm/1550nm) are not 1000BASE-BX compliant due to the differing
+ * wavelengths, so do not set any transceiver bits.
*/
if (bitmap_empty(modes, __ETHTOOL_LINK_MODE_MASK_NBITS)) {
- /* If the encoding and bit rate allows 1000baseX */
- if (id->base.encoding == SFF8024_ENCODING_8B10B && br_nom &&
- br_min <= 1300 && br_max >= 1200)
+ /* If the bit rate allows 1000baseX */
+ if (br_nom && br_min <= 1300 && br_max >= 1200)
phylink_set(modes, 1000baseX_Full);
}
--
2.20.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH RESEND net-next 0/2] Add support for VSOL V2801F/CarlitoxxPro CPGOS03 GPON module
2020-12-09 11:21 [PATCH RESEND net-next 0/2] Add support for VSOL V2801F/CarlitoxxPro CPGOS03 GPON module Russell King - ARM Linux admin
2020-12-09 11:22 ` [PATCH net-next 1/2] net: sfp: VSOL V2801F / CarlitoxxPro CPGOS03-0490 v2.0 workaround Russell King
2020-12-09 11:22 ` [PATCH net-next 2/2] net: sfp: relax bitrate-derived mode check Russell King
@ 2020-12-10 3:38 ` David Miller
2 siblings, 0 replies; 4+ messages in thread
From: David Miller @ 2020-12-10 3:38 UTC (permalink / raw)
To: linux; +Cc: andrew, hkallweit1, kuba, netdev, pali
From: Russell King - ARM Linux admin <linux@armlinux.org.uk>
Date: Wed, 9 Dec 2020 11:21:52 +0000
> Hi,
>
> This patch set adds support for the V2801F / CarlitoxxPro module. This
> requires two changes:
>
> 1) the module only supports single byte reads to the ID EEPROM,
> while we need to still permit sequential reads to the diagnostics
> EEPROM for atomicity reasons.
>
> 2) we need to relax the encoding check when we have no reported
> capabilities to allow 1000base-X based on the module bitrate.
>
> Thanks to Pali Rohár for responsive testing over the last two days.
>
> (Resending, dropping the utf-8 characters in Pali's name so the patches
> get through vger. Added Andrew's r-b tags.)
Series applied, thanks.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2020-12-10 3:39 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-12-09 11:21 [PATCH RESEND net-next 0/2] Add support for VSOL V2801F/CarlitoxxPro CPGOS03 GPON module Russell King - ARM Linux admin
2020-12-09 11:22 ` [PATCH net-next 1/2] net: sfp: VSOL V2801F / CarlitoxxPro CPGOS03-0490 v2.0 workaround Russell King
2020-12-09 11:22 ` [PATCH net-next 2/2] net: sfp: relax bitrate-derived mode check Russell King
2020-12-10 3:38 ` [PATCH RESEND net-next 0/2] Add support for VSOL V2801F/CarlitoxxPro CPGOS03 GPON module David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).