git: 6cd16ef19cd2 - stable/15 - ice(4): Add support for 40G maximal PMD speed

From: Krzysztof Galazka <kgalazka_at_FreeBSD.org>
Date: Fri, 10 Jul 2026 19:30:43 UTC
The branch stable/15 has been updated by kgalazka:

URL: https://cgit.FreeBSD.org/src/commit/?id=6cd16ef19cd2ceef6c57b7e21d399165bb05328e

commit 6cd16ef19cd2ceef6c57b7e21d399165bb05328e
Author:     Krzysztof Galazka <kgalazka@FreeBSD.org>
AuthorDate: 2025-12-05 22:02:45 +0000
Commit:     Krzysztof Galazka <kgalazka@FreeBSD.org>
CommitDate: 2026-07-10 19:30:21 +0000

    ice(4): Add support for 40G maximal PMD speed
    
    E823 backplane devices may support 40G as maximal PMD speed.
    Extend port topology reading logic to handle this case.
    While at that fix indentation according to FreeBSD style(9).
    
    Signed-off-by: Krzysztof Galazka <krzysztof.galazka@intel.com>
    
    Tested by:      gowtham.kumar.ks_intel.com
    Approved by:    kbowling (mentor), erj (mentor)
    Sponsored by:   Intel Corporation
    MFC after:      1 week
    Differential Revision:  https://reviews.freebsd.org/D53587
    
    (cherry picked from commit c6212b7da110d82b1d0086ec525deb216993021e)
---
 sys/dev/ice/ice_adminq_cmd.h | 1 +
 sys/dev/ice/ice_lib.c        | 7 ++++---
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/sys/dev/ice/ice_adminq_cmd.h b/sys/dev/ice/ice_adminq_cmd.h
index 6225abc0f38b..b2dde986dd23 100644
--- a/sys/dev/ice/ice_adminq_cmd.h
+++ b/sys/dev/ice/ice_adminq_cmd.h
@@ -2131,6 +2131,7 @@ struct ice_aqc_get_port_options_elem {
 #define ICE_AQC_PORT_OPT_MAX_LANE_50G	6
 #define ICE_AQC_PORT_OPT_MAX_LANE_100G	7
 #define ICE_AQC_PORT_OPT_MAX_LANE_200G	8
+#define ICE_AQC_PORT_OPT_MAX_LANE_40G	9
 	u8 global_scid[2];
 	u8 phy_scid[2];
 	u8 pf2port_cid[2];
diff --git a/sys/dev/ice/ice_lib.c b/sys/dev/ice/ice_lib.c
index cfaa54bc0306..9ae27d7bed87 100644
--- a/sys/dev/ice/ice_lib.c
+++ b/sys/dev/ice/ice_lib.c
@@ -11346,10 +11346,10 @@ ice_get_port_topology(struct ice_hw *hw, u8 lport,
 		return err;
 
 	if (cage_type == 0x11 ||  /* SFP */
-	   cage_type == 0x12) {   /* SFP28 */
+	    cage_type == 0x12) {   /* SFP28 */
 		port_topology->serdes_lane_count = 1;
 	} else if (cage_type == 0x13 ||  /* QSFP */
-		  cage_type == 0x14) {   /* QSFP28 */
+	    cage_type == 0x14) {   /* QSFP28 */
 		u8 max_speed = 0;
 
 		err = ice_get_maxspeed(hw, port_topology->primary_serdes_lane,
@@ -11364,7 +11364,8 @@ ice_get_port_topology(struct ice_hw *hw, u8 lport,
 
 		if (max_speed == ICE_AQC_PORT_OPT_MAX_LANE_100G)
 			port_topology->serdes_lane_count = 4;
-		else if (max_speed == ICE_AQC_PORT_OPT_MAX_LANE_50G)
+		else if (max_speed == ICE_AQC_PORT_OPT_MAX_LANE_50G ||
+		    max_speed == ICE_AQC_PORT_OPT_MAX_LANE_40G)
 			port_topology->serdes_lane_count = 2;
 		else
 			port_topology->serdes_lane_count = 1;