]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
net/mlx4_en: ethtool, Remove unsupported SFP EEPROM high pages query
authorErez Alfasi <ereza@mellanox.com>
Mon, 20 May 2019 14:42:52 +0000 (17:42 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 11 Jun 2019 10:24:12 +0000 (12:24 +0200)
[ Upstream commit 135dd9594f127c8a82d141c3c8430e9e2143216a ]

Querying EEPROM high pages data for SFP module is currently
not supported by our driver but is still tried, resulting in
invalid FW queries.

Set the EEPROM ethtool data length to 256 for SFP module to
limit the reading for page 0 only and prevent invalid FW queries.

Fixes: 7202da8b7f71 ("ethtool, net/mlx4_en: Cable info, get_module_info/eeprom ethtool support")
Signed-off-by: Erez Alfasi <ereza@mellanox.com>
Signed-off-by: Tariq Toukan <tariqt@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
drivers/net/ethernet/mellanox/mlx4/port.c

index bcfac000199e7410aa9134dee755d7c8ab1d9aa9..fcd1e6b3950d06ee1f655c3eaf02865b25888336 100644 (file)
@@ -1906,6 +1906,8 @@ static int mlx4_en_set_tunable(struct net_device *dev,
        return ret;
 }
 
+#define MLX4_EEPROM_PAGE_LEN 256
+
 static int mlx4_en_get_module_info(struct net_device *dev,
                                   struct ethtool_modinfo *modinfo)
 {
@@ -1940,7 +1942,7 @@ static int mlx4_en_get_module_info(struct net_device *dev,
                break;
        case MLX4_MODULE_ID_SFP:
                modinfo->type = ETH_MODULE_SFF_8472;
-               modinfo->eeprom_len = ETH_MODULE_SFF_8472_LEN;
+               modinfo->eeprom_len = MLX4_EEPROM_PAGE_LEN;
                break;
        default:
                return -ENOSYS;
index c2b21313dba7f64d0e51cff8ca3c601720a848ef..a9c4818448f9d1c9984cbc773f3742d4caabb574 100644 (file)
@@ -1398,11 +1398,6 @@ int mlx4_get_module_info(struct mlx4_dev *dev, u8 port,
                size -= offset + size - I2C_PAGE_SIZE;
 
        i2c_addr = I2C_ADDR_LOW;
-       if (offset >= I2C_PAGE_SIZE) {
-               /* Reset offset to high page */
-               i2c_addr = I2C_ADDR_HIGH;
-               offset -= I2C_PAGE_SIZE;
-       }
 
        cable_info = (struct mlx4_cable_info *)inmad->data;
        cable_info->dev_mem_address = cpu_to_be16(offset);