linux/drivers/net
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
..
appletalk
arcnet arcnet: fix macro name when DEBUG is defined 2021-01-18 20:57:43 -08:00
bonding bonding: add a vlan+srcmac tx hashing option 2021-01-19 19:30:32 -08:00
caif
can can: mcp251xfd: add BQL support 2021-01-27 10:01:47 +01:00
dsa net: dsa: rtl8366rb: standardize init jam tables 2021-01-27 20:21:20 -08:00
ethernet stmmac: intel: Add ADL-S 1Gbps PCI IDs 2021-01-28 13:03:48 -08:00
fddi
fjes
hamradio
hippi
hyperv hv_netvsc: Add (more) validation for untrusted Hyper-V values 2021-01-18 19:47:47 -08:00
ieee802154
ipa net: ipa: disable IEOB interrupts before clearing 2021-01-23 13:16:00 -08:00
ipvlan
mdio mdio-bitbang: Export mdiobb_{read,write}() 2021-01-19 12:02:20 -08:00
netdevsim net: remove ndo_udp_tunnel_* callbacks 2021-01-07 12:53:29 -08:00
pcs
phy net: sfp: add workaround for Realtek RTL8672 and RTL9601C chips 2021-01-28 13:41:17 -08:00
plip
ppp Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2021-01-14 18:34:50 -08:00
slip
team
usb net: usbnet: use new tasklet API 2021-01-26 18:04:26 -08:00
vmxnet3
wan Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2021-01-08 13:28:00 -08:00
wireguard
wireless virt_wifi: fix deadlock on RTNL 2021-01-27 22:05:05 +01:00
xen-netback net: xen-netback: xenbus: Demote nonconformant kernel-doc headers 2021-01-16 18:13:04 -08:00
bareudp.c bareudp: add NETIF_F_FRAGLIST flag for dev features 2021-01-18 19:57:02 -08:00
dummy.c
eql.c
geneve.c geneve: add NETIF_F_FRAGLIST flag for dev features 2021-01-18 19:57:02 -08:00
gtp.c GTP: add support for flow based tunneling API 2021-01-15 20:31:49 -08:00
ifb.c
Kconfig bonding: add TLS dependency 2021-01-26 17:45:55 -08:00
LICENSE.SRC
loopback.c
macsec.c
macvlan.c macvlan: remove redundant null check on data 2021-01-05 16:52:02 -08:00
macvtap.c
Makefile
mdio.c
mhi_net.c net: mhi: Set wwan device type 2021-01-23 21:17:36 -08:00
mii.c
net_failover.c
netconsole.c
nlmon.c
ntb_netdev.c
rionet.c
sb1000.c
Space.c
sungem_phy.c
tap.c net: tap: check vlan with eth_type_vlan() method 2021-01-15 20:13:49 -08:00
thunderbolt.c
tun.c net: tun: fix misspellings using codespell tool 2021-01-19 17:43:56 -08:00
veth.c net, xdp: Introduce xdp_prepare_buff utility routine 2021-01-08 13:39:24 -08:00
virtio_net.c net, xdp: Introduce xdp_prepare_buff utility routine 2021-01-08 13:39:24 -08:00
vrf.c
vsockmon.c
vxlan.c vxlan: add NETIF_F_FRAGLIST flag for dev features 2021-01-18 19:57:02 -08:00
xen-netfront.c net: ethernet: ibm: ibmvnic: Fix some kernel-doc misdemeanours 2021-01-16 18:13:17 -08:00