nfp: change eeprom length to max length enumerators
authorJaco Coetzee <jaco.coetzee@corigine.com>
Wed, 9 Nov 2022 20:27:57 +0000 (15:27 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 26 Nov 2022 08:24:38 +0000 (09:24 +0100)
[ Upstream commit f3a72878a3de720661b7ed0d6b7f7c506ddb8a52 ]

Extend the size of QSFP EEPROM for types SSF8436 and SFF8636
from 256 to 640 bytes in order to expose all the EEPROM pages by
ethtool.

For SFF-8636 and SFF-8436 specifications, the driver exposes
256 bytes of EEPROM data for ethtool's get_module_eeprom()
callback, resulting in "netlink error: Invalid argument" when
an EEPROM read with an offset larger than 256 bytes is attempted.

Changing the length enumerators to the _MAX_LEN
variants exposes all 640 bytes of the EEPROM allowing upper
pages 1, 2 and 3 to be read.

Fixes: 96d971e307cc ("ethtool: Add fallback to get_module_eeprom from netlink command")
Signed-off-by: Jaco Coetzee <jaco.coetzee@corigine.com>
Reviewed-by: Louis Peens <louis.peens@corigine.com>
Signed-off-by: Simon Horman <simon.horman@corigine.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c

index 62546d1..865865a 100644 (file)
@@ -1264,15 +1264,15 @@ nfp_port_get_module_info(struct net_device *netdev,
 
                if (data < 0x3) {
                        modinfo->type = ETH_MODULE_SFF_8436;
-                       modinfo->eeprom_len = ETH_MODULE_SFF_8436_LEN;
+                       modinfo->eeprom_len = ETH_MODULE_SFF_8436_MAX_LEN;
                } else {
                        modinfo->type = ETH_MODULE_SFF_8636;
-                       modinfo->eeprom_len = ETH_MODULE_SFF_8636_LEN;
+                       modinfo->eeprom_len = ETH_MODULE_SFF_8636_MAX_LEN;
                }
                break;
        case NFP_INTERFACE_QSFP28:
                modinfo->type = ETH_MODULE_SFF_8636;
-               modinfo->eeprom_len = ETH_MODULE_SFF_8636_LEN;
+               modinfo->eeprom_len = ETH_MODULE_SFF_8636_MAX_LEN;
                break;
        default:
                netdev_err(netdev, "Unsupported module 0x%x detected\n",