[PATCH net-next 5/6] net: hns3: Add support for some CMIS transceiver modules

Jijie Shao
2023-12-11T02:32:22Z

From: Hao Lan <lanhao@huawei.com>

Add two more SFF-8024 Identifier Values that according to the standard
support the Common Management Interface Specification (CMIS) memory map
so the hns3 driver will be able to dump, parse and print their EEPROM
contents.This two SFF-8024 Identifier Values are SFF8024_ID_QSFP_DD (0x18)
and SFF8024_ID_QSFP_PLUS_CMIS (0x1E).

Signed-off-by: Hao Lan <lanhao@huawei.com>
Signed-off-by: Jijie Shao <shaojijie@huawei.com>
---
drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c | 8 ++++++++
drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.h | 2 ++
2 files changed, 10 insertions(+)

diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c b/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
index 38e796f61475..eed6c6393801 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
@@ -1819,6 +1819,14 @@ static int hns3_get_module_info(struct net_device *netdev,
modinfo->type = ETH_MODULE_SFF_8636;
modinfo->eeprom_len = ETH_MODULE_SFF_8636_MAX_LEN;
break;
+ case SFF8024_ID_QSFP_DD:
+ case SFF8024_ID_QSFP_PLUS_CMIS:
+ modinfo->type = ETH_MODULE_SFF_8636;
+ if (sfp_type.flat_mem & HNS3_CMIS_FLAT_MEMORY)
+ modinfo->eeprom_len = ETH_MODULE_SFF_8636_LEN;
+ else
+ modinfo->eeprom_len = ETH_MODULE_SFF_8472_LEN;
+ break;
default:
netdev_err(netdev, "Optical module unknown: %#x\n",
sfp_type.type);
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.h b/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.h
index da207d1d9aa9..34504ed2c086 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.h
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.h
@@ -12,9 +12,11 @@ struct hns3_stats {
int stats_offset;
};

+#define HNS3_CMIS_FLAT_MEMORY BIT(7)
struct hns3_sfp_type {
u8 type;
u8 ext_type;
+ u8 flat_mem;
};

struct hns3_pflag_desc {
--
2.30.0