]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
cxgb4: fix eeprom len when diagnostics not implemented
authorRahul Lakkireddy <rahul.lakkireddy@chelsio.com>
Thu, 11 Nov 2021 10:25:16 +0000 (15:55 +0530)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 26 Nov 2021 10:36:16 +0000 (11:36 +0100)
[ Upstream commit 4ca110bf8d9b31a60f8f8ff6706ea147d38ad97c ]

Ensure diagnostics monitoring support is implemented for the SFF 8472
compliant port module and set the correct length for ethtool port
module eeprom read.

Fixes: f56ec6766dcf ("cxgb4: Add support for ethtool i2c dump")
Signed-off-by: Manoj Malviya <manojmalviya@chelsio.com>
Signed-off-by: Rahul Lakkireddy <rahul.lakkireddy@chelsio.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/ethernet/chelsio/cxgb4/cxgb4_ethtool.c
drivers/net/ethernet/chelsio/cxgb4/t4_hw.h

index d07230c892a546d6e2a31f7cddb2f51116cd9035..db0248ab7fe4a6194ea1bebcbb2276ffa5660d70 100644 (file)
@@ -1304,12 +1304,15 @@ static int cxgb4_get_module_info(struct net_device *dev,
                if (ret)
                        return ret;
 
-               if (!sff8472_comp || (sff_diag_type & 4)) {
+               if (!sff8472_comp || (sff_diag_type & SFP_DIAG_ADDRMODE)) {
                        modinfo->type = ETH_MODULE_SFF_8079;
                        modinfo->eeprom_len = ETH_MODULE_SFF_8079_LEN;
                } else {
                        modinfo->type = ETH_MODULE_SFF_8472;
-                       modinfo->eeprom_len = ETH_MODULE_SFF_8472_LEN;
+                       if (sff_diag_type & SFP_DIAG_IMPLEMENTED)
+                               modinfo->eeprom_len = ETH_MODULE_SFF_8472_LEN;
+                       else
+                               modinfo->eeprom_len = ETH_MODULE_SFF_8472_LEN / 2;
                }
                break;
 
index 361d5032c28849ab2fb6350a2e99d7a229eeaa38..91603639ac428a09e0e558ccc7e5301257f46134 100644 (file)
@@ -292,6 +292,8 @@ enum {
 #define I2C_PAGE_SIZE          0x100
 #define SFP_DIAG_TYPE_ADDR     0x5c
 #define SFP_DIAG_TYPE_LEN      0x1
+#define SFP_DIAG_ADDRMODE      BIT(2)
+#define SFP_DIAG_IMPLEMENTED   BIT(6)
 #define SFF_8472_COMP_ADDR     0x5e
 #define SFF_8472_COMP_LEN      0x1
 #define SFF_REV_ADDR           0x1