linux/drivers/net/phy
Pali Rohár 426c6cbc40 net: sfp: add workaround for Realtek RTL8672 and RTL9601C chips
The workaround for VSOL V2801F brand based GPON SFP modules added in commit
0d035bed2a ("net: sfp: VSOL V2801F / CarlitoxxPro CPGOS03-0490 v2.0
workaround") works only for IDs added explicitly to the list. Since there
are rebranded modules where OEM vendors put different strings into the
vendor name field, we cannot base workaround on IDs only.

Moreover the issue which the above mentioned commit tried to work around is
generic not only to VSOL based modules, but rather to all GPON modules
based on Realtek RTL8672 and RTL9601C chips.

These include at least the following GPON modules:
* V-SOL V2801F
* C-Data FD511GX-RM0
* OPTON GP801R
* BAUDCOM BD-1234-SFM
* CPGOS03-0490 v2.0
* Ubiquiti U-Fiber Instant
* EXOT EGS1

These Realtek chips have broken EEPROM emulator which for N-byte read
operation returns just the first byte of EEPROM data, followed by N-1
zeros.

Introduce a new function, sfp_id_needs_byte_io(), which detects SFP modules
with broken EEPROM emulator based on N-1 zeros and switch to 1 byte EEPROM
reading operation.

Function sfp_i2c_read() now always uses single byte reading when it is
required and when function sfp_hwmon_probe() detects single byte access,
it disables registration of hwmon device, because in this case we cannot
reliably and atomically read 2 bytes as is required by the standard for
retrieving values from diagnostic area.

(These Realtek chips are broken in a way that violates SFP standards for
diagnostic interface. Kernel in this case simply cannot do anything less
of skipping registration of the hwmon interface.)

This patch fixes reading of EEPROM content from SFP modules based on
Realtek RTL8672 and RTL9601C chips. Diagnostic interface of EEPROM stays
broken and cannot be fixed.

Fixes: 0d035bed2a ("net: sfp: VSOL V2801F / CarlitoxxPro CPGOS03-0490 v2.0 workaround")
Co-developed-by: Russell King <rmk+kernel@armlinux.org.uk>
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
Signed-off-by: Pali Rohár <pali@kernel.org>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2021-01-28 13:41:17 -08:00
..
mscc net: phy: mscc: use new PTP_MSGTYPE_* defines 2020-11-25 12:23:21 -08:00
adin.c net: phy: adin: remove the use of the .ack_interrupt() 2020-11-17 11:37:09 -08:00
amd.c net: phy: amd: remove the use of .ack_interrupt() 2020-11-17 11:37:00 -08:00
aquantia_hwmon.c
aquantia_main.c net: phy: aquantia: do not return an error on clearing pending IRQs 2020-11-11 14:09:54 -08:00
aquantia.h
at803x.c net: phy: at803x: add support for configuring SmartEEE 2021-01-15 15:06:07 -08:00
ax88796b.c
bcm7xxx.c net: phy: bcm7xxx: Add an entry for BCM72116 2021-01-07 14:46:09 -08:00
bcm63xx.c net: phy: broadcom: remove use of ack_interrupt() 2020-11-05 16:32:39 -08:00
bcm87xx.c net: phy: broadcom: remove use of ack_interrupt() 2020-11-05 16:32:39 -08:00
bcm54140.c net: phy: broadcom: remove use of ack_interrupt() 2020-11-05 16:32:39 -08:00
bcm84881.c net: phy: bcm84881: clear settings on link down 2020-04-23 15:55:35 -07:00
bcm-cygnus.c net: phy: broadcom: remove use of ack_interrupt() 2020-11-05 16:32:39 -08:00
bcm-phy-lib.c net: phy: broadcom: remove use of ack_interrupt() 2020-11-05 16:32:39 -08:00
bcm-phy-lib.h net: phy: broadcom: implement generic .handle_interrupt() callback 2020-11-05 16:32:27 -08:00
broadcom.c net: phy: broadcom: remove use of ack_interrupt() 2020-11-05 16:32:39 -08:00
cicada.c net: phy: cicada: remove the use of .ack_interrupt() 2020-11-05 16:32:39 -08:00
cortina.c net: mdiobus: add clause 45 mdiobus accessors 2020-05-26 15:31:45 -07:00
davicom.c net: phy: davicom: remove the use of .ack_interrupt() 2020-11-05 16:32:39 -08:00
dp83tc811.c net: phy: ti: remove the use of .ack_interrupt() 2020-11-25 11:18:38 -08:00
dp83640_reg.h
dp83640.c net: phy: dp83640: use new PTP_MSGTYPE_SYNC define 2020-11-25 12:23:06 -08:00
dp83822.c net: phy: ti: remove the use of .ack_interrupt() 2020-11-25 11:18:38 -08:00
dp83848.c net: phy: ti: remove the use of .ack_interrupt() 2020-11-25 11:18:38 -08:00
dp83867.c net: phy: ti: remove the use of .ack_interrupt() 2020-11-25 11:18:38 -08:00
dp83869.c net: phy: ti: remove the use of .ack_interrupt() 2020-11-25 11:18:38 -08:00
et1011c.c
fixed_phy.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
icplus.c net: phy: icplus: remove the use .ack_interrupt() 2020-11-25 11:18:37 -08:00
intel-xway.c net: phy: intel-xway: remove the use of .ack_interrupt() 2020-11-25 11:18:37 -08:00
Kconfig mdio: fix mdio-thunder.c dependency & build error 2020-09-27 13:21:28 -07:00
linkmode.c
lxt.c net: phy: lxt: remove the use of .ack_interrupt() 2020-11-17 11:36:59 -08:00
Makefile net: phy: Sort Kconfig and Makefile 2020-08-27 06:55:51 -07:00
marvell10g.c net: phy: marvell10g: fix null pointer dereference 2020-08-11 15:42:23 -07:00
marvell.c net: phy: marvell: replace phy_modify() 2020-12-01 17:08:07 -08:00
mdio_bus.c net: phy: replace mutex_is_locked with lockdep_assert_held in phylib 2021-01-07 14:53:07 -08:00
mdio_device.c net: mdio device: use flexible sleeping in reset function 2020-08-03 15:01:02 -07:00
mdio_devres.c of: mdio: provide devm_of_mdiobus_register() 2020-06-30 15:57:34 -07:00
mdio-boardinfo.c net: phy: Fixup parameters in kerneldoc 2020-07-07 12:47:10 -07:00
mdio-boardinfo.h
meson-gxl.c net: phy: meson-gxl: remove the use of .ack_callback() 2020-11-25 11:18:37 -08:00
micrel.c net: phy: micrel: Add KS8851 PHY support 2021-01-05 17:05:11 -08:00
microchip_t1.c net: phy: microchip: remove the use of .ack_interrupt() 2020-11-17 11:36:59 -08:00
microchip.c net: phy: microchip: remove the use of .ack_interrupt() 2020-11-17 11:36:59 -08:00
mii_timestamper.c
national.c net: phy: national: remove definition of DEBUG 2021-01-18 20:03:01 -08:00
nxp-tja11xx.c net: phy: nxp-tja11xx: remove the use of .ack_interrupt() 2020-11-17 11:37:00 -08:00
phy_device.c net: phy: replace mutex_is_locked with lockdep_assert_held in phylib 2021-01-07 14:53:07 -08:00
phy_led_triggers.c net: phy: leds: Deduplicate link LED trigger registration 2020-10-30 10:43:37 -07:00
phy-c45.c net: phy: fix kernel-doc markups 2020-11-17 14:15:03 -08:00
phy-core.c net: phy: Document core PHY structures 2020-09-23 18:02:49 -07:00
phy.c net: phy: replace mutex_is_locked with lockdep_assert_held in phylib 2021-01-07 14:53:07 -08:00
phylink.c net: phy: fix kernel-doc markups 2020-11-17 14:15:03 -08:00
qsemi.c net: phy: qsemi: remove the use of .ack_interrupt() 2020-11-25 11:18:38 -08:00
realtek.c net: phy: realtek: Add support for RTL9000AA/AN 2021-01-22 18:06:42 -08:00
rockchip.c
sfp-bus.c sfp: add support for 100 base-x SFPs 2021-01-14 15:40:33 -08:00
sfp.c net: sfp: add workaround for Realtek RTL8672 and RTL9601C chips 2021-01-28 13:41:17 -08:00
sfp.h
smsc.c net: phy: smsc: fix clk error handling 2021-01-12 18:39:19 -08:00
spi_ks8995.c net: Use kobj_to_dev() API 2020-09-28 15:14:42 -07:00
ste10Xp.c net: phy: ste10Xp: remove the use of .ack_interrupt() 2020-11-17 11:37:00 -08:00
swphy.c Update rmk's email address in various drivers 2020-04-21 17:50:09 +01:00
swphy.h
teranetics.c net: phy: remove genphy_no_soft_reset 2020-04-24 16:47:51 -07:00
uPD60620.c
vitesse.c net: phy: vitesse: remove the use of .ack_interrupt() 2020-11-17 11:36:59 -08:00
xilinx_gmii2rgmii.c