]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ionic: Report additional media types from firmware
authorEric Joyner <eric.joyner@amd.com>
Fri, 6 Mar 2026 21:56:34 +0000 (13:56 -0800)
committerJakub Kicinski <kuba@kernel.org>
Wed, 11 Mar 2026 02:34:14 +0000 (19:34 -0700)
The device firmware supports reporting more media types than what was
there in the past, so map these new media types to existing ethtool
bits, which appears to be what other drivers do for media types that
match speeds but not physical spec.

And while here, make a very small cleanup in ionic_get_link_ksettings()
to remove some unnecessary code duplication.

Reviewed-by: Brett Creeley <brett.creeley@amd.com>
Signed-off-by: Eric Joyner <eric.joyner@amd.com>
Link: https://patch.msgid.link/20260306215634.64550-1-eric.joyner@amd.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/pensando/ionic/ionic_ethtool.c
drivers/net/ethernet/pensando/ionic/ionic_if.h

index 1514c1019f28ac0d769e4ae742e3dedc96235024..78a802eb159f0ac11557c3f308549c6100cec6cb 100644 (file)
@@ -188,10 +188,9 @@ static int ionic_get_link_ksettings(struct net_device *netdev,
        case IONIC_XCVR_PID_QSFP_100G_CWDM4:
        case IONIC_XCVR_PID_QSFP_100G_PSM4:
        case IONIC_XCVR_PID_QSFP_100G_LR4:
-               ethtool_link_ksettings_add_link_mode(ks, supported,
-                                                    100000baseLR4_ER4_Full);
-               break;
        case IONIC_XCVR_PID_QSFP_100G_ER4:
+       case IONIC_XCVR_PID_QSFP_100G_FR4:
+       case IONIC_XCVR_PID_QSFP_100G_DR4:
                ethtool_link_ksettings_add_link_mode(ks, supported,
                                                     100000baseLR4_ER4_Full);
                break;
@@ -212,6 +211,7 @@ static int ionic_get_link_ksettings(struct net_device *netdev,
                break;
        case IONIC_XCVR_PID_QSFP_200G_AOC:
        case IONIC_XCVR_PID_QSFP_200G_SR4:
+       case IONIC_XCVR_PID_QSFP_200G_AEC:
                ethtool_link_ksettings_add_link_mode(ks, supported,
                                                     200000baseSR4_Full);
                break;
@@ -232,6 +232,9 @@ static int ionic_get_link_ksettings(struct net_device *netdev,
                                                     400000baseDR4_Full);
                break;
        case IONIC_XCVR_PID_QSFP_400G_SR4:
+       case IONIC_XCVR_PID_QSFP_400G_AOC:
+       case IONIC_XCVR_PID_QSFP_400G_AEC:
+       case IONIC_XCVR_PID_QSFP_400G_LPO:
                ethtool_link_ksettings_add_link_mode(ks, supported,
                                                     400000baseSR4_Full);
                break;
index 47559c909c8b409fa6f77ac786ed7fb83e9a1b7c..23d6e2b4791e07c78fcc573244691380a2990cd5 100644 (file)
@@ -1341,6 +1341,12 @@ enum ionic_xcvr_pid {
        IONIC_XCVR_PID_QSFP_400G_DR4    = 80,
        IONIC_XCVR_PID_QSFP_400G_SR4    = 81,
        IONIC_XCVR_PID_QSFP_400G_VR4    = 82,
+       IONIC_XCVR_PID_QSFP_400G_AOC    = 83,
+       IONIC_XCVR_PID_QSFP_400G_AEC    = 84,
+       IONIC_XCVR_PID_QSFP_200G_AEC    = 85,
+       IONIC_XCVR_PID_QSFP_400G_LPO    = 86,
+       IONIC_XCVR_PID_QSFP_100G_FR4    = 87,
+       IONIC_XCVR_PID_QSFP_100G_DR4    = 88,
 };
 
 /**