* [PATCH 0/2] net:ethernet:enic: add VIC ids and link modes
@ 2026-02-21 18:16 Satish Kharat via B4 Relay
2026-02-21 18:16 ` [PATCH 1/2] net:ethernet:enic: add VIC subsystem ids Satish Kharat via B4 Relay
2026-02-21 18:17 ` [PATCH 2/2] net:ethernet:enic: map ethtool link modes by VIC type Satish Kharat via B4 Relay
0 siblings, 2 replies; 4+ messages in thread
From: Satish Kharat via B4 Relay @ 2026-02-21 18:16 UTC (permalink / raw)
To: netdev; +Cc: Satish Kharat, linux-kernel
Add VIC subsystem ids and their supported/advertised media types so ethtool
reflects the hardware capabilities for the VIC variants.
Signed-off-by: Satish Kharat <satishkh@cisco.com>
---
Satish Kharat (2):
net:ethernet:enic: add VIC subsystem ids
net:ethernet:enic: map ethtool link modes by VIC type
drivers/net/ethernet/cisco/enic/enic.h | 39 +++++
drivers/net/ethernet/cisco/enic/enic_ethtool.c | 229 ++++++++++++++++++++++++-
2 files changed, 261 insertions(+), 7 deletions(-)
---
base-commit: 8bf22c33e7a172fbc72464f4cc484d23a6b412ba
change-id: 20260220-enic-cscwi36355-7fd00b59fe10
Best regards,
--
Satish Kharat <satishkh@cisco.com>
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH 1/2] net:ethernet:enic: add VIC subsystem ids
2026-02-21 18:16 [PATCH 0/2] net:ethernet:enic: add VIC ids and link modes Satish Kharat via B4 Relay
@ 2026-02-21 18:16 ` Satish Kharat via B4 Relay
2026-02-21 18:17 ` [PATCH 2/2] net:ethernet:enic: map ethtool link modes by VIC type Satish Kharat via B4 Relay
1 sibling, 0 replies; 4+ messages in thread
From: Satish Kharat via B4 Relay @ 2026-02-21 18:16 UTC (permalink / raw)
To: netdev; +Cc: Satish Kharat, linux-kernel
From: Satish Kharat <satishkh@cisco.com>
Add VIC subsystem id for 12xx, 13xx, 14xx and 15xxx series
Signed-off-by: Satish Kharat <satishkh@cisco.com>
---
drivers/net/ethernet/cisco/enic/enic.h | 39 ++++++++++++++++++++++++++++++++++
1 file changed, 39 insertions(+)
diff --git a/drivers/net/ethernet/cisco/enic/enic.h b/drivers/net/ethernet/cisco/enic/enic.h
index 301b3f311..6959e85ab 100644
--- a/drivers/net/ethernet/cisco/enic/enic.h
+++ b/drivers/net/ethernet/cisco/enic/enic.h
@@ -22,6 +22,45 @@
#define DRV_NAME "enic"
#define DRV_DESCRIPTION "Cisco VIC Ethernet NIC Driver"
+#define PCI_SUBDEV_ID_CISCO_VIC_1225 0x085
+#define PCI_SUBDEV_ID_CISCO_VIC_1225T 0x0CE
+#define PCI_SUBDEV_ID_CISCO_VIC_1227 0x12E
+#define PCI_SUBDEV_ID_CISCO_VIC_1227T 0x139
+#define PCI_SUBDEV_ID_CISCO_VIC_1240 0x084
+#define PCI_SUBDEV_ID_CISCO_VIC_1280 0x04F
+#define PCI_SUBDEV_ID_CISCO_VIC_1285 0x0CD
+
+#define PCI_SUBDEV_ID_CISCO_VIC_1340 0x12C
+#define PCI_SUBDEV_ID_CISCO_VIC_1380 0x137
+#define PCI_SUBDEV_ID_CISCO_VIC_1385 0x14D
+#define PCI_SUBDEV_ID_CISCO_VIC_1387 0x15D
+
+#define PCI_SUBDEV_ID_CISCO_VIC_1440 0x0215
+#define PCI_SUBDEV_ID_CISCO_VIC_1455 0x0217
+#define PCI_SUBDEV_ID_CISCO_VIC_1457 0x0218
+#define PCI_SUBDEV_ID_CISCO_VIC_1467 0x02AF
+#define PCI_SUBDEV_ID_CISCO_VIC_1477 0x2B0
+#define PCI_SUBDEV_ID_CISCO_VIC_1480 0x0216
+#define PCI_SUBDEV_ID_CISCO_VIC_1485 0x0219
+#define PCI_SUBDEV_ID_CISCO_VIC_1487 0x021A
+#define PCI_SUBDEV_ID_CISCO_VIC_1495 0x024A
+#define PCI_SUBDEV_ID_CISCO_VIC_1497 0x024B
+#define PCI_SUBDEV_ID_CISCO_VIC_14425 0x02CF
+#define PCI_SUBDEV_ID_CISCO_VIC_14825 0x02D0
+
+#define PCI_SUBDEV_ID_CISCO_VIC_15230 0x02DF
+#define PCI_SUBDEV_ID_CISCO_VIC_15231 0x02DB
+#define PCI_SUBDEV_ID_CISCO_VIC_15235 0x02E4
+#define PCI_SUBDEV_ID_CISCO_VIC_15237 0x02F3
+#define PCI_SUBDEV_ID_CISCO_VIC_15238 0x02E8
+#define PCI_SUBDEV_ID_CISCO_VIC_15411 0x02DC
+#define PCI_SUBDEV_ID_CISCO_VIC_15412 0x02E2
+#define PCI_SUBDEV_ID_CISCO_VIC_15420 0x02DE
+#define PCI_SUBDEV_ID_CISCO_VIC_15422 0x02E1
+#define PCI_SUBDEV_ID_CISCO_VIC_15425 0x02F2
+#define PCI_SUBDEV_ID_CISCO_VIC_15427 0x02E0
+#define PCI_SUBDEV_ID_CISCO_VIC_15428 0x02DD
+
#define ENIC_BARS_MAX 6
#define ENIC_WQ_MAX 256
--
2.43.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/2] net:ethernet:enic: map ethtool link modes by VIC type
2026-02-21 18:16 [PATCH 0/2] net:ethernet:enic: add VIC ids and link modes Satish Kharat via B4 Relay
2026-02-21 18:16 ` [PATCH 1/2] net:ethernet:enic: add VIC subsystem ids Satish Kharat via B4 Relay
@ 2026-02-21 18:17 ` Satish Kharat via B4 Relay
2026-02-21 19:49 ` Andrew Lunn
1 sibling, 1 reply; 4+ messages in thread
From: Satish Kharat via B4 Relay @ 2026-02-21 18:17 UTC (permalink / raw)
To: netdev; +Cc: Satish Kharat, linux-kernel
From: Satish Kharat <satishkh@cisco.com>
Report supported and advertised media types based on the VIC subsystem
ID so ethtool reflects the hardware capabilities.
Signed-off-by: Satish Kharat <satishkh@cisco.com>
---
drivers/net/ethernet/cisco/enic/enic_ethtool.c | 229 ++++++++++++++++++++++++-
1 file changed, 222 insertions(+), 7 deletions(-)
diff --git a/drivers/net/ethernet/cisco/enic/enic_ethtool.c b/drivers/net/ethernet/cisco/enic/enic_ethtool.c
index 471613899..80fbbb7ef 100644
--- a/drivers/net/ethernet/cisco/enic/enic_ethtool.c
+++ b/drivers/net/ethernet/cisco/enic/enic_ethtool.c
@@ -126,19 +126,234 @@ static void enic_intr_coal_set_rx(struct enic *enic, u32 timer)
}
}
+static void enic_get_supp_adv_media_type(struct net_device *netdev,
+ struct ethtool_link_ksettings *ecmd)
+{
+ struct enic *enic = netdev_priv(netdev);
+ struct ethtool_link_settings *base = &ecmd->base;
+ u16 sub_dev_id = 0;
+
+ base->port = PORT_OTHER;
+
+ if (enic->pdev)
+ sub_dev_id = enic->pdev->subsystem_device;
+
+ switch (sub_dev_id) {
+ case PCI_SUBDEV_ID_CISCO_VIC_1225:
+ case PCI_SUBDEV_ID_CISCO_VIC_1227:
+ ethtool_link_ksettings_add_link_mode(ecmd, supported,
+ 10000baseSR_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising,
+ 10000baseSR_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, supported, FIBRE);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising, FIBRE);
+ base->port = PORT_FIBRE;
+ break;
+ case PCI_SUBDEV_ID_CISCO_VIC_1285:
+ ethtool_link_ksettings_add_link_mode(ecmd, supported,
+ 40000baseSR4_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising,
+ 40000baseSR4_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, supported, FIBRE);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising, FIBRE);
+ base->port = PORT_FIBRE;
+ break;
+ case PCI_SUBDEV_ID_CISCO_VIC_1225T:
+ case PCI_SUBDEV_ID_CISCO_VIC_1227T:
+ ethtool_link_ksettings_add_link_mode(ecmd, supported,
+ 10000baseT_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising,
+ 10000baseT_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, supported, FIBRE);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising, FIBRE);
+ base->port = PORT_FIBRE;
+ break;
+ case PCI_SUBDEV_ID_CISCO_VIC_1385:
+ case PCI_SUBDEV_ID_CISCO_VIC_1387:
+ ethtool_link_ksettings_add_link_mode(ecmd, supported,
+ 10000baseSR_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising,
+ 10000baseSR_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, supported,
+ 10000baseLR_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising,
+ 10000baseLR_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, supported,
+ 40000baseSR4_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising,
+ 40000baseSR4_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, supported,
+ 40000baseLR4_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising,
+ 40000baseLR4_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, supported, FIBRE);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising, FIBRE);
+ base->port = PORT_FIBRE;
+ break;
+ case PCI_SUBDEV_ID_CISCO_VIC_1477:
+ case PCI_SUBDEV_ID_CISCO_VIC_1485:
+ case PCI_SUBDEV_ID_CISCO_VIC_1487:
+ case PCI_SUBDEV_ID_CISCO_VIC_1495:
+ case PCI_SUBDEV_ID_CISCO_VIC_1497:
+ ethtool_link_ksettings_add_link_mode(ecmd, supported,
+ 40000baseCR4_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising,
+ 40000baseCR4_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, supported,
+ 40000baseSR4_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising,
+ 40000baseSR4_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, supported,
+ 40000baseLR4_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising,
+ 40000baseLR4_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, supported,
+ 100000baseSR4_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising,
+ 100000baseSR4_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, supported,
+ 100000baseCR4_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising,
+ 100000baseCR4_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, supported, FIBRE);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising, FIBRE);
+ base->port = PORT_FIBRE;
+ break;
+ case PCI_SUBDEV_ID_CISCO_VIC_15235:
+ case PCI_SUBDEV_ID_CISCO_VIC_15237:
+ case PCI_SUBDEV_ID_CISCO_VIC_15238:
+ ethtool_link_ksettings_add_link_mode(ecmd, supported,
+ 40000baseCR4_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising,
+ 40000baseCR4_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, supported,
+ 40000baseSR4_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising,
+ 40000baseSR4_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, supported,
+ 40000baseLR4_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising,
+ 40000baseLR4_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, supported,
+ 100000baseSR4_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising,
+ 100000baseSR4_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, supported,
+ 100000baseCR4_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising,
+ 100000baseCR4_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, supported,
+ 200000baseSR4_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising,
+ 200000baseSR4_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, supported,
+ 200000baseDR4_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising,
+ 200000baseDR4_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, supported,
+ 200000baseLR4_ER4_FR4_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising,
+ 200000baseLR4_ER4_FR4_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, supported, FIBRE);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising, FIBRE);
+ base->port = PORT_FIBRE;
+ break;
+ case PCI_SUBDEV_ID_CISCO_VIC_1455:
+ case PCI_SUBDEV_ID_CISCO_VIC_1457:
+ case PCI_SUBDEV_ID_CISCO_VIC_1467:
+ ethtool_link_ksettings_add_link_mode(ecmd, supported,
+ 10000baseT_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising,
+ 10000baseT_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, supported,
+ 25000baseSR_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising,
+ 25000baseSR_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, supported, FIBRE);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising, FIBRE);
+ base->port = PORT_FIBRE;
+ break;
+ case PCI_SUBDEV_ID_CISCO_VIC_15428:
+ case PCI_SUBDEV_ID_CISCO_VIC_15427:
+ case PCI_SUBDEV_ID_CISCO_VIC_15425:
+ ethtool_link_ksettings_add_link_mode(ecmd, supported,
+ 10000baseT_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising,
+ 10000baseT_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, supported,
+ 25000baseSR_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising,
+ 25000baseSR_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, supported,
+ 50000baseSR_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising,
+ 50000baseSR_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, supported, FIBRE);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising, FIBRE);
+ base->port = PORT_FIBRE;
+ break;
+ /* Do not mention port type as FIBRE for blade VICs */
+ case PCI_SUBDEV_ID_CISCO_VIC_1240:
+ case PCI_SUBDEV_ID_CISCO_VIC_1280:
+ ethtool_link_ksettings_add_link_mode(ecmd, supported,
+ 10000baseKR_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising,
+ 10000baseKR_Full);
+ break;
+ case PCI_SUBDEV_ID_CISCO_VIC_1340:
+ case PCI_SUBDEV_ID_CISCO_VIC_1380:
+ case PCI_SUBDEV_ID_CISCO_VIC_1440: /* 10G/40G KR */
+ case PCI_SUBDEV_ID_CISCO_VIC_1480: /* 10G/40G KR */
+ ethtool_link_ksettings_add_link_mode(ecmd, supported,
+ 10000baseKR_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising,
+ 10000baseKR_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, supported,
+ 40000baseKR4_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising,
+ 40000baseKR4_Full);
+ break;
+ case PCI_SUBDEV_ID_CISCO_VIC_14425: /* 25G KR */
+ case PCI_SUBDEV_ID_CISCO_VIC_14825: /* 25G KR */
+ case PCI_SUBDEV_ID_CISCO_VIC_15420: /* 25G KR */
+ case PCI_SUBDEV_ID_CISCO_VIC_15422: /* 25G KR */
+ ethtool_link_ksettings_add_link_mode(ecmd, supported,
+ 25000baseKR_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising,
+ 25000baseKR_Full);
+ break;
+ case PCI_SUBDEV_ID_CISCO_VIC_15411: /* 10G KR */
+ case PCI_SUBDEV_ID_CISCO_VIC_15412: /* 10G KR */
+ ethtool_link_ksettings_add_link_mode(ecmd, supported,
+ 10000baseKR_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising,
+ 10000baseKR_Full);
+ break;
+ case PCI_SUBDEV_ID_CISCO_VIC_15231: /* 25G/100G/200G KR */
+ case PCI_SUBDEV_ID_CISCO_VIC_15230: /* 25G/100G/200G KR */
+ ethtool_link_ksettings_add_link_mode(ecmd, supported,
+ 25000baseKR_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising,
+ 25000baseKR_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, supported,
+ 100000baseKR_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising,
+ 100000baseKR_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, supported,
+ 200000baseKR4_Full);
+ ethtool_link_ksettings_add_link_mode(ecmd, advertising,
+ 200000baseKR4_Full);
+ break;
+ }
+}
+
static int enic_get_ksettings(struct net_device *netdev,
struct ethtool_link_ksettings *ecmd)
{
struct enic *enic = netdev_priv(netdev);
struct ethtool_link_settings *base = &ecmd->base;
- ethtool_link_ksettings_add_link_mode(ecmd, supported,
- 10000baseT_Full);
- ethtool_link_ksettings_add_link_mode(ecmd, supported, FIBRE);
- ethtool_link_ksettings_add_link_mode(ecmd, advertising,
- 10000baseT_Full);
- ethtool_link_ksettings_add_link_mode(ecmd, advertising, FIBRE);
- base->port = PORT_FIBRE;
+ enic_get_supp_adv_media_type(netdev, ecmd);
if (netif_carrier_ok(netdev)) {
base->speed = vnic_dev_port_speed(enic->vdev);
--
2.43.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 2/2] net:ethernet:enic: map ethtool link modes by VIC type
2026-02-21 18:17 ` [PATCH 2/2] net:ethernet:enic: map ethtool link modes by VIC type Satish Kharat via B4 Relay
@ 2026-02-21 19:49 ` Andrew Lunn
0 siblings, 0 replies; 4+ messages in thread
From: Andrew Lunn @ 2026-02-21 19:49 UTC (permalink / raw)
To: satishkh; +Cc: netdev, linux-kernel
> + switch (sub_dev_id) {
> + case PCI_SUBDEV_ID_CISCO_VIC_1225:
> + case PCI_SUBDEV_ID_CISCO_VIC_1227:
> + ethtool_link_ksettings_add_link_mode(ecmd, supported,
> + 10000baseSR_Full);
> + ethtool_link_ksettings_add_link_mode(ecmd, advertising,
> + 10000baseSR_Full);
Do these ports support autoneg? Is it really advertising a single link
mode to the link partner for the negotiation process?
> static int enic_get_ksettings(struct net_device *netdev,
> struct ethtool_link_ksettings *ecmd)
> {
> struct enic *enic = netdev_priv(netdev);
> struct ethtool_link_settings *base = &ecmd->base;
>
> - ethtool_link_ksettings_add_link_mode(ecmd, supported,
> - 10000baseT_Full);
> - ethtool_link_ksettings_add_link_mode(ecmd, supported, FIBRE);
> - ethtool_link_ksettings_add_link_mode(ecmd, advertising,
> - 10000baseT_Full);
> - ethtool_link_ksettings_add_link_mode(ecmd, advertising, FIBRE);
> - base->port = PORT_FIBRE;
> + enic_get_supp_adv_media_type(netdev, ecmd);
>
> if (netif_carrier_ok(netdev)) {
> base->speed = vnic_dev_port_speed(enic->vdev);
Ah, if you look at the rest of enic_get_ksettings() you see:
base->autoneg = AUTONEG_DISABLE;
So this hardware does not support autoneg. So all these advertising
values are pointless.
Andrew
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-02-21 19:49 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-02-21 18:16 [PATCH 0/2] net:ethernet:enic: add VIC ids and link modes Satish Kharat via B4 Relay
2026-02-21 18:16 ` [PATCH 1/2] net:ethernet:enic: add VIC subsystem ids Satish Kharat via B4 Relay
2026-02-21 18:17 ` [PATCH 2/2] net:ethernet:enic: map ethtool link modes by VIC type Satish Kharat via B4 Relay
2026-02-21 19:49 ` Andrew Lunn
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox