git: 1bef5535c1f1 - main - cxgbe(4): Updates to the hw and fw headers and config file

From: Navdeep Parhar <np_at_FreeBSD.org>
Date: Fri, 08 May 2026 23:55:14 UTC
The branch main has been updated by np:

URL: https://cgit.FreeBSD.org/src/commit/?id=1bef5535c1f191055e545cad029eabe939d93d24

commit 1bef5535c1f191055e545cad029eabe939d93d24
Author:     Navdeep Parhar <np@FreeBSD.org>
AuthorDate: 2026-03-09 18:19:49 +0000
Commit:     Navdeep Parhar <np@FreeBSD.org>
CommitDate: 2026-05-08 22:26:02 +0000

    cxgbe(4): Updates to the hw and fw headers and config file
    
    MFC after:      1 week
    Sponsored by:   Chelsio Communications
---
 sys/dev/cxgbe/common/t4_regs.h            |  51 ++++++--------
 sys/dev/cxgbe/firmware/t4fw_interface.h   | 107 +++++++++++++++++++++++++++---
 sys/dev/cxgbe/firmware/t7fw_cfg.txt       |  19 +++---
 sys/dev/cxgbe/firmware/t7fw_cfg_uwire.txt |  19 +++---
 sys/dev/cxgbe/t4_main.c                   |  15 +++--
 5 files changed, 154 insertions(+), 57 deletions(-)

diff --git a/sys/dev/cxgbe/common/t4_regs.h b/sys/dev/cxgbe/common/t4_regs.h
index 09d0d4aa2c08..9984461352d0 100644
--- a/sys/dev/cxgbe/common/t4_regs.h
+++ b/sys/dev/cxgbe/common/t4_regs.h
@@ -1465,10 +1465,10 @@
 #define A_SGE_INT_ENABLE3 0x1040
 #define A_SGE_FL_BUFFER_SIZE0 0x1044
 
-#define S_SIZE    4
+#define CXGBE_S_SIZE    4
 #define CXGBE_M_SIZE    0xfffffffU
-#define V_SIZE(x) ((x) << S_SIZE)
-#define G_SIZE(x) (((x) >> S_SIZE) & CXGBE_M_SIZE)
+#define CXGBE_V_SIZE(x) ((x) << S_SIZE)
+#define CXGBE_G_SIZE(x) (((x) >> S_SIZE) & CXGBE_M_SIZE)
 
 #define S_T6_SIZE    4
 #define M_T6_SIZE    0xfffffU
@@ -26578,15 +26578,10 @@
 #define V_CIM_ULP_TX_PKT_ERR_CODE(x) ((x) << S_CIM_ULP_TX_PKT_ERR_CODE)
 #define G_CIM_ULP_TX_PKT_ERR_CODE(x) (((x) >> S_CIM_ULP_TX_PKT_ERR_CODE) & M_CIM_ULP_TX_PKT_ERR_CODE)
 
-#define S_CIM_SGE1_PKT_ERR_CODE    8
-#define M_CIM_SGE1_PKT_ERR_CODE    0xffU
-#define V_CIM_SGE1_PKT_ERR_CODE(x) ((x) << S_CIM_SGE1_PKT_ERR_CODE)
-#define G_CIM_SGE1_PKT_ERR_CODE(x) (((x) >> S_CIM_SGE1_PKT_ERR_CODE) & M_CIM_SGE1_PKT_ERR_CODE)
-
-#define S_CIM_SGE0_PKT_ERR_CODE    0
-#define M_CIM_SGE0_PKT_ERR_CODE    0xffU
-#define V_CIM_SGE0_PKT_ERR_CODE(x) ((x) << S_CIM_SGE0_PKT_ERR_CODE)
-#define G_CIM_SGE0_PKT_ERR_CODE(x) (((x) >> S_CIM_SGE0_PKT_ERR_CODE) & M_CIM_SGE0_PKT_ERR_CODE)
+#define S_CIM_SGE_PKT_ERR_CODE    0
+#define M_CIM_SGE_PKT_ERR_CODE    0xffU
+#define V_CIM_SGE_PKT_ERR_CODE(x) ((x) << S_CIM_SGE_PKT_ERR_CODE)
+#define G_CIM_SGE_PKT_ERR_CODE(x) (((x) >> S_CIM_SGE_PKT_ERR_CODE) & M_CIM_SGE_PKT_ERR_CODE)
 
 #define S_CIM_PCIE_PKT_ERR_CODE    8
 #define M_CIM_PCIE_PKT_ERR_CODE    0xffU
@@ -60550,17 +60545,15 @@
 #define A_MAC_PORT_PTP_DRIFT_ADJUST_COUNT 0x9a0
 #define A_MAC_PORT_PTP_OFFSET_ADJUST_FINE 0x9a4
 
-#if 0
-#define S_B    16
-#define M_B    0xffffU
-#define V_B(x) ((x) << S_B)
-#define G_B(x) (((x) >> S_B) & M_B)
-#endif
+#define CXGBE_S_B    16
+#define CXGBE_M_B    0xffffU
+#define CXGBE_V_B(x) ((x) << CXGBE_S_B)
+#define CXGBE_G_B(x) (((x) >> CXGBE_S_B) & CXGBE_M_B)
 
-#define S_A    0
-#define M_A    0xffffU
-#define V_A(x) ((x) << S_A)
-#define G_A(x) (((x) >> S_A) & M_A)
+#define CXGBE_S_A    0
+#define CXGBE_M_A    0xffffU
+#define CXGBE_V_A(x) ((x) << CXGBE_S_A)
+#define CXGBE_G_A(x) (((x) >> CXGBE_S_A) & CXGBE_M_A)
 
 #define A_MAC_PORT_PTP_OFFSET_ADJUST_TOTAL 0x9a8
 #define A_MAC_PORT_PTP_CFG 0x9ac
@@ -62257,10 +62250,10 @@
 
 #define A_MAC_PORT_MTIP_VLAN_TPID_0 0x1a00
 
-#define S_VLANTAG    0
+#define CXGBE_S_VLANTAG    0
 #define CXGBE_M_VLANTAG    0xffffU
-#define V_VLANTAG(x) ((x) << S_VLANTAG)
-#define G_VLANTAG(x) (((x) >> S_VLANTAG) & M_VLANTAG)
+#define CXGBE_V_VLANTAG(x) ((x) << CXGBE_S_VLANTAG)
+#define CXGBE_G_VLANTAG(x) (((x) >> CXGBE_S_VLANTAG) & CXGBE_M_VLANTAG)
 
 #define A_MAC_PORT_MTIP_VLAN_TPID_1 0x1a04
 #define A_MAC_PORT_MTIP_VLAN_TPID_2 0x1a08
@@ -69613,10 +69606,10 @@
 #define V_INIT_ENABLE(x) ((x) << S_INIT_ENABLE)
 #define F_INIT_ENABLE    V_INIT_ENABLE(1U)
 
-#define S_WAIT    16
-#define M_WAIT    0xfffU
-#define CXGBE_V_WAIT(x) ((x) << S_WAIT)
-#define G_WAIT(x) (((x) >> S_WAIT) & M_WAIT)
+#define CXGBE_S_WAIT    16
+#define CXGBE_M_WAIT    0xfffU
+#define CXGBE_V_WAIT(x) ((x) << CXGBE_S_WAIT)
+#define CXGBE_G_WAIT(x) (((x) >> CXGBE_S_WAIT) & CXGBE_M_WAIT)
 
 #define S_EN_MULTI_RANK_SEL    4
 #define V_EN_MULTI_RANK_SEL(x) ((x) << S_EN_MULTI_RANK_SEL)
diff --git a/sys/dev/cxgbe/firmware/t4fw_interface.h b/sys/dev/cxgbe/firmware/t4fw_interface.h
index b11552dce021..6235a2c3fab4 100644
--- a/sys/dev/cxgbe/firmware/t4fw_interface.h
+++ b/sys/dev/cxgbe/firmware/t4fw_interface.h
@@ -2560,6 +2560,22 @@ struct fw_ri_wr {
 			__be32 tpt_offset_t10_config;
 			__be32 r8[2];
 		} nvmet_init;
+		struct fw_ri_iscsi_init {
+			__u8   type;
+			__u8   dcrc_dis_to_hcrc;
+			__u8   r4[3];
+			__u8   qp_caps;
+			__be16 r5;
+			__be32 pdid;
+			__be32 qpid;
+			__be32 sq_eqid;
+			__be32 r6;
+			__be32 scqid;
+			__be32 rcqid;
+			__be32 r7[4];
+			__be32 r8[2];
+			__be64 r9;
+		} iscsi_init;
 		struct fw_ri_fini {
 			__u8   type;
 			__u8   r3[7];
@@ -2634,6 +2650,37 @@ struct fw_ri_wr {
 #define G_FW_RI_WR_T10_CONFIG(x)	\
     (((x) >> S_FW_RI_WR_T10_CONFIG) & M_FW_RI_WR_T10_CONFIG)
 
+#define S_FW_RI_WR_DCRC_DIS	7
+#define M_FW_RI_WR_DCRC_DIS	0x1
+#define V_FW_RI_WR_DCRC_DIS(x)	((x) << S_FW_RI_WR_DCRC_DIS)
+#define G_FW_RI_WR_DCRC_DIS(x)	\
+    (((x) >> S_FW_RI_WR_DCRC_DIS) & M_FW_RI_WR_DCRC_DIS)
+#define F_FW_RI_WR_DCRC_DIS	V_FW_RI_WR_DCRC_DIS(1U)
+
+#define S_FW_RI_WR_HCRC_DIS	6
+#define M_FW_RI_WR_HCRC_DIS	0x1
+#define V_FW_RI_WR_HCRC_DIS(x)	((x) << S_FW_RI_WR_HCRC_DIS)
+#define G_FW_RI_WR_HCRC_DIS(x)	\
+    (((x) >> S_FW_RI_WR_HCRC_DIS) & M_FW_RI_WR_HCRC_DIS)
+#define F_FW_RI_WR_HCRC_DIS	V_FW_RI_WR_HCRC_DIS(1U)
+
+#define S_FW_RI_WR_PSZ_IDX	4
+#define M_FW_RI_WR_PSZ_IDX	0x3
+#define V_FW_RI_WR_PSZ_IDX(x)	((x) << S_FW_RI_WR_PSZ_IDX)
+#define G_FW_RI_WR_PSZ_IDX(x)	\
+    (((x) >> S_FW_RI_WR_PSZ_IDX) & M_FW_RI_WR_PSZ_IDX)
+
+#define S_FW_RI_WR_DCRC		1
+#define M_FW_RI_WR_DCRC		0x1
+#define V_FW_RI_WR_DCRC(x)	((x) << S_FW_RI_WR_DCRC)
+#define G_FW_RI_WR_DCRC(x)	(((x) >> S_FW_RI_WR_DCRC) & M_FW_RI_WR_DCRC)
+#define F_FW_RI_WR_DCRC	V_FW_RI_WR_DCRC(1U)
+
+#define S_FW_RI_WR_HCRC		0
+#define M_FW_RI_WR_HCRC		0x1
+#define V_FW_RI_WR_HCRC(x)	((x) << S_FW_RI_WR_HCRC)
+#define G_FW_RI_WR_HCRC(x)	(((x) >> S_FW_RI_WR_HCRC) & M_FW_RI_WR_HCRC)
+#define F_FW_RI_WR_HCRC	V_FW_RI_WR_HCRC(1U)
 
 /******************************************************************************
  *   R o C E V 2    W O R K   R E Q U E S T s
@@ -2951,6 +2998,24 @@ struct fw_v2_nvmet_tx_data_wr {
 #endif
 };
 
+#define S_FW_V2_NVMET_TX_DATA_WR_DACK_CHANGE	20
+#define M_FW_V2_NVMET_TX_DATA_WR_DACK_CHANGE	0x1
+#define V_FW_V2_NVMET_TX_DATA_WR_DACK_CHANGE(x)	\
+    ((x) << S_FW_V2_NVMET_TX_DATA_WR_DACK_CHANGE)
+#define G_FW_V2_NVMET_TX_DATA_WR_DACK_CHANGE(x)	\
+    (((x) >> S_FW_V2_NVMET_TX_DATA_WR_DACK_CHANGE) & \
+     M_FW_V2_NVMET_TX_DATA_WR_DACK_CHANGE)
+#define F_FW_V2_NVMET_TX_DATA_WR_DACK_CHANGE	\
+    V_FW_V2_NVMET_TX_DATA_WR_DACK_CHANGE(1U)
+
+#define S_FW_V2_NVMET_TX_DATA_WR_DACK_MODE	18
+#define M_FW_V2_NVMET_TX_DATA_WR_DACK_MODE	0x3
+#define V_FW_V2_NVMET_TX_DATA_WR_DACK_MODE(x)	\
+    ((x) << S_FW_V2_NVMET_TX_DATA_WR_DACK_MODE)
+#define G_FW_V2_NVMET_TX_DATA_WR_DACK_MODE(x)	\
+    (((x) >> S_FW_V2_NVMET_TX_DATA_WR_DACK_MODE) & \
+     M_FW_V2_NVMET_TX_DATA_WR_DACK_MODE)
+
 #define S_FW_V2_NVMET_TX_DATA_WR_FLAGS_HI	10
 #define M_FW_V2_NVMET_TX_DATA_WR_FLAGS_HI	0x3fffff
 #define V_FW_V2_NVMET_TX_DATA_WR_FLAGS_HI(x)	\
@@ -4990,6 +5055,16 @@ struct fw_crypto_update_sa_wr {
 	} key;
 };
 
+#define S_FW_CRYPTO_UPDATE_SA_WR_EG_IPVER       3
+#define M_FW_CRYPTO_UPDATE_SA_WR_EG_IPVER       0x1
+#define V_FW_CRYPTO_UPDATE_SA_WR_EG_IPVER(x)    \
+    ((x) << S_FW_CRYPTO_UPDATE_SA_WR_EG_IPVER)
+#define G_FW_CRYPTO_UPDATE_SA_WR_EG_IPVER(x)    \
+    (((x) >> S_FW_CRYPTO_UPDATE_SA_WR_EG_IPVER) & \
+     M_FW_CRYPTO_UPDATE_SA_WR_EG_IPVER)
+#define F_FW_CRYPTO_UPDATE_SA_WR_EG_IPVER       \
+    V_FW_CRYPTO_UPDATE_SA_WR_EG_IPVER(1U)
+
 #define S_FW_CRYPTO_UPDATE_SA_WR_SAOP		2
 #define M_FW_CRYPTO_UPDATE_SA_WR_SAOP		0x1
 #define V_FW_CRYPTO_UPDATE_SA_WR_SAOP(x)	\
@@ -8952,24 +9027,40 @@ enum fw_port_type {
 	FW_PORT_TYPE_KX4	=  5,	/* No, 4, No, No, Yes, Yes, 10G */
 	FW_PORT_TYPE_CX4	=  6,	/* No, 4, No, No, No, No, 10G */
 	FW_PORT_TYPE_KX		=  7,	/* No, 1, No, No, Yes, No, 1G */
-	FW_PORT_TYPE_KR		=  8,	/* No, 1, No, No, Yes, Yes, 10G */
+	FW_PORT_TYPE_KR		=  8,	/* No, 1, No, No, Yes, Yes, 10G BP AN */
 	FW_PORT_TYPE_SFP	=  9,	/* No, 1, Yes, No, No, No, 10G */
-	FW_PORT_TYPE_BP_AP	= 10,	/* No, 1, No, No, Yes, Yes, 10G, BP ANGE */
-	FW_PORT_TYPE_BP4_AP	= 11,	/* No, 4, No, No, Yes, Yes, 10G, BP ANGE */
+	FW_PORT_TYPE_BP_AP	= 10,	/* No, 1, No, No, Yes, Yes, 10G, BP AN */
+	FW_PORT_TYPE_BP4_AP	= 11,	/* No, 4, No, No, Yes, Yes, 10G, BP AN */
 	FW_PORT_TYPE_QSFP_10G	= 12,	/* No, 1, Yes, No, No, No, 10G */
 	FW_PORT_TYPE_QSA	= 13,	/* No, 1, Yes, No, No, No, 10G */
 	FW_PORT_TYPE_QSFP	= 14,	/* No, 4, Yes, No, No, No, 40G */
-	FW_PORT_TYPE_BP40_BA	= 15,	/* No, 4, No, No, Yes, Yes, 40G/10G/1G, BP ANGE */
-	FW_PORT_TYPE_KR4_100G	= 16,	/* No, 4, 100G/40G/25G, Backplane */
+	FW_PORT_TYPE_BP40_BA	= 15,	/* No, 4, No, No, Yes, Yes, 40G/10G/1G, BP AN */
+	FW_PORT_TYPE_KR4_100G	= 16,	/* No, 4, 100G/40G/50G/25G/10G/1G, BP AN */
 	FW_PORT_TYPE_CR4_QSFP	= 17,	/* No, 4, 100G/40G/25G */
-	FW_PORT_TYPE_CR_QSFP	= 18,	/* No, 1, 25G Spider cable */
-	FW_PORT_TYPE_CR2_QSFP	= 19,	/* No, 2, 50G */
+	FW_PORT_TYPE_CR_QSFP	= 18,	/* No, 1, 25G, Spider cable */
+	FW_PORT_TYPE_CR2_QSFP	= 19,	/* No, 2, 50G, Spider cable  */
 	FW_PORT_TYPE_SFP28	= 20,	/* No, 1, 25G/10G/1G */
 	FW_PORT_TYPE_KR_SFP28	= 21,	/* No, 1, 25G/10G/1G using Backplane */
 	FW_PORT_TYPE_KR_XLAUI	= 22,	/* No, 4, 40G/10G/1G, No AN*/
+	FW_PORT_TYPE_BARE_LINK_50G = 23,  /* No, 1, 50G */
+	FW_PORT_TYPE_BARE_LINK_100G = 24, /* No, 2, 100G/50G */
+	FW_PORT_TYPE_BARE_LINK_200G = 25, /* No, 4, 200G/100G/50G */
 	FW_PORT_TYPE_SFP56	= 26,	/* No, 1, 50G/25G */
 	FW_PORT_TYPE_QSFP56	= 27,	/* No, 4, 200G/100G/50G/25G */
-	FW_PORT_TYPE_QSFPDD	= 34,   /* No, 8, 400G/200G/100G/50G */
+	FW_PORT_TYPE_QSFP56_4_50G = 28,	/* No, 1, 50G, Spider cable */
+	FW_PORT_TYPE_KR_50G	= 29,	/* No, 1, 50G/25G/10G/1G, BP AN  */
+	FW_PORT_TYPE_KR2_100G	= 30,	/* No, 2, 100G/50G/25G/10G/1G, BP AN */
+	FW_PORT_TYPE_KR4_200G	= 31,	/* No, 4, 200G/100G/40G/50G/25G/10G/1G, BP AN */
+	FW_PORT_TYPE_QSFP56_2_50G = 32,	/* No, 1, 50G, Spider cable */
+	FW_PORT_TYPE_OSFP	= 33,	/* No, 8, 400G/200G/100G/50G */
+	FW_PORT_TYPE_QSFPDD	= 34,	/* No, 8, 400G/200G/100G/50G */
+	FW_PORT_TYPE_OSFP_2_200G = 35,	/* No, 4, 200G, Spider cable */
+	FW_PORT_TYPE_QSFPDD_2_200G = 36,/* No, 4, 200G, Spider cable */
+	FW_PORT_TYPE_KR8_400G	= 37,	/* No, 8, 400G/200G/100G/50G/40G/25G/10G/1G, BP AN */
+	FW_PORT_TYPE_QSFP56_2_100G = 38,/* No, 2, 100G, Spider cable */
+	FW_PORT_TYPE_QSFPDD_4_100G = 39,/* No, 2, 100G, Spider cable */
+	FW_PORT_TYPE_KR2_50G	= 40,	/* No, 1, 50G/25G/10G/1G, BP AN  */
+	FW_PORT_TYPE_MAX,
 	FW_PORT_TYPE_NONE = M_FW_PORT_CMD_PORTTYPE32
 };
 
diff --git a/sys/dev/cxgbe/firmware/t7fw_cfg.txt b/sys/dev/cxgbe/firmware/t7fw_cfg.txt
index 70b05da04a23..33c703fdc9d7 100644
--- a/sys/dev/cxgbe/firmware/t7fw_cfg.txt
+++ b/sys/dev/cxgbe/firmware/t7fw_cfg.txt
@@ -175,6 +175,11 @@
 					    # TPT error.
 						# Err2uP = 0
 
+	# ULP_TX_ACCELERATOR_CTL
+	reg[0x8f90] = 0x00000015/0x00000015 # Compression block clock gating
+					    # Dedupe clock gating
+					    # Erasure Coding clock gating
+
 	#ULP_RX_CTL1
 	reg[0x19330] = 0x000000f0/0x000000f0 # RDMA_Invld_Msg_Dis = 3
 	                                     # ROCE_Invld_Msg_Dis = 3
@@ -201,7 +206,7 @@
 				    # default gc enabled.
 
 	# HMA configuration (uncomment following lines to enable HMA)
-	hma_size = 128 			# Size (in MBs) of host memory expected
+	hma_size = 256 			# Size (in MBs) of host memory expected
 	hma_regions = 	iscsi,rrq,tls,ddp,pmrx,stag,pbl,rq	# What all regions to place in host memory
 
     #mc[0]=0
@@ -394,8 +399,7 @@
 	neq = 16		# niqflint + nethctrl Egress Queues
 	nexactf = 8		# number of exact MPSTCAM MAC filters
 	cmask = all		# access to all channels
-	#pmask = 0x4		# access to only one port
-	pmask = 0x1		# access to only one port
+	pmask = 0x4		# access to only one port
 
 [function "3"]
 	nvf = 16		# NVF on this function
@@ -407,7 +411,7 @@
 	neq = 16		# niqflint + nethctrl Egress Queues
 	nexactf = 8		# number of exact MPSTCAM MAC filters
 	cmask = all		# access to all channels
-	#pmask = 0x2		# access to only one port
+	pmask = 0x8		# access to only one port
 
 # Some OS Drivers manage all application functions for all ports via PF4.
 # Thus we need to provide a large number of resources here.  For Egress
@@ -421,7 +425,7 @@
 	r_caps = all		# read permissions for all commands
 	nvi = 28		# NVI_UNIFIED
 	niqflint = 170		# NFLIQ_UNIFIED + NLFIQ_WD
-	nethctrl = 224 		# NETHCTRL_UNIFIED + NETHCTRL_WD
+	nethctrl = 288 		# NETHCTRL_UNIFIED + NETHCTRL_WD
 	neq = 252		# NEQ_UNIFIED + NEQ_WD
 	nqpcq = 12288
 	nexactf = 40		# NMPSTCAM_UNIFIED
@@ -435,8 +439,7 @@
 	nserver = 480		# number of server region entries
 	nhash = 12288		# number of hash region entries
 	nhpfilter = 64		# number of high priority filter region entries
-	#protocol = nic_vm, ofld, rddp, rdmac, iscsi_initiator_pdu, iscsi_target_pdu, iscsi_t10dif, tlskeys, crypto_lookaside, ipsec_inline, rocev2, nic_hashfilter, ofld_sendpath
-	protocol = nic_vm, ofld, rddp, rdmac, iscsi_initiator_pdu, iscsi_target_pdu, iscsi_t10dif, tlskeys, crypto_lookaside, ipsec_inline, rocev2, nic_hashfilter, nvme_tcp
+	protocol = nic_vm, ofld, rddp, rdmac, iscsi_initiator_pdu, iscsi_target_pdu, iscsi_t10dif, tlskeys, crypto_lookaside, ipsec_inline, rocev2, nic_hashfilter, nvme_tcp, ofld_sendpath
 	tp_l2t = 3072
 	tp_ddp = 2
 	tp_ddp_iscsi = 2
@@ -643,7 +646,7 @@
 
 [fini]
 	version = 0x1425001d
-	checksum = 0x3671da3b
+	checksum = 0x2419f987
 
 # Total resources used by above allocations:
 #   Virtual Interfaces: 104
diff --git a/sys/dev/cxgbe/firmware/t7fw_cfg_uwire.txt b/sys/dev/cxgbe/firmware/t7fw_cfg_uwire.txt
index b1f5129238eb..9da841153138 100644
--- a/sys/dev/cxgbe/firmware/t7fw_cfg_uwire.txt
+++ b/sys/dev/cxgbe/firmware/t7fw_cfg_uwire.txt
@@ -175,6 +175,11 @@
 					    # TPT error.
 						# Err2uP = 0
 
+	# ULP_TX_ACCELERATOR_CTL
+	reg[0x8f90] = 0x00000015/0x00000015 # Compression block clock gating
+					    # Dedupe clock gating
+					    # Erasure Coding clock gating
+
 	#ULP_RX_CTL1
 	reg[0x19330] = 0x000000f0/0x000000f0 # RDMA_Invld_Msg_Dis = 3
 	                                     # ROCE_Invld_Msg_Dis = 3
@@ -201,7 +206,7 @@
 				    # default gc enabled.
 
 	# HMA configuration (uncomment following lines to enable HMA)
-	hma_size = 128 			# Size (in MBs) of host memory expected
+	hma_size = 256 			# Size (in MBs) of host memory expected
 	hma_regions = 	iscsi,rrq,tls,ddp,pmrx,stag,pbl,rq	# What all regions to place in host memory
 
     #mc[0]=0
@@ -394,8 +399,7 @@
 	neq = 16		# niqflint + nethctrl Egress Queues
 	nexactf = 8		# number of exact MPSTCAM MAC filters
 	cmask = all		# access to all channels
-	#pmask = 0x4		# access to only one port
-	pmask = 0x1		# access to only one port
+	pmask = 0x4		# access to only one port
 
 [function "3"]
 	nvf = 16		# NVF on this function
@@ -407,7 +411,7 @@
 	neq = 16		# niqflint + nethctrl Egress Queues
 	nexactf = 8		# number of exact MPSTCAM MAC filters
 	cmask = all		# access to all channels
-	#pmask = 0x2		# access to only one port
+	pmask = 0x8		# access to only one port
 
 # Some OS Drivers manage all application functions for all ports via PF4.
 # Thus we need to provide a large number of resources here.  For Egress
@@ -421,7 +425,7 @@
 	r_caps = all		# read permissions for all commands
 	nvi = 28		# NVI_UNIFIED
 	niqflint = 170		# NFLIQ_UNIFIED + NLFIQ_WD
-	nethctrl = 224 		# NETHCTRL_UNIFIED + NETHCTRL_WD
+	nethctrl = 288 		# NETHCTRL_UNIFIED + NETHCTRL_WD
 	neq = 252		# NEQ_UNIFIED + NEQ_WD
 	nqpcq = 12288
 	nexactf = 40		# NMPSTCAM_UNIFIED
@@ -435,8 +439,7 @@
 	nserver = 480		# number of server region entries
 	nhash = 12288		# number of hash region entries
 	nhpfilter = 64		# number of high priority filter region entries
-	#protocol = nic_vm, ofld, rddp, rdmac, iscsi_initiator_pdu, iscsi_target_pdu, iscsi_t10dif, tlskeys, crypto_lookaside, ipsec_inline, rocev2, nic_hashfilter, ofld_sendpath
-	protocol = nic_vm, ofld, rddp, rdmac, iscsi_initiator_pdu, iscsi_target_pdu, iscsi_t10dif, tlskeys, crypto_lookaside, ipsec_inline, rocev2, nic_hashfilter, nvme_tcp
+	protocol = nic_vm, ofld, rddp, rdmac, iscsi_initiator_pdu, iscsi_target_pdu, iscsi_t10dif, tlskeys, crypto_lookaside, ipsec_inline, rocev2, nic_hashfilter, nvme_tcp, ofld_sendpath
 	tp_l2t = 3072
 	tp_ddp = 2
 	tp_ddp_iscsi = 2
@@ -643,7 +646,7 @@
 
 [fini]
 	version = 0x1425001d
-	checksum = 0x96513217
+	checksum = 0x83f95163
 
 # Total resources used by above allocations:
 #   Virtual Interfaces: 104
diff --git a/sys/dev/cxgbe/t4_main.c b/sys/dev/cxgbe/t4_main.c
index 69ecfce1dade..d73204eb808c 100644
--- a/sys/dev/cxgbe/t4_main.c
+++ b/sys/dev/cxgbe/t4_main.c
@@ -3760,10 +3760,17 @@ port_mword(struct port_info *pi, uint32_t speed)
 			return (IFM_NONE);
 		}
 		break;
-	case M_FW_PORT_CMD_PTYPE:	/* FW_PORT_TYPE_NONE for old firmware */
-		if (chip_id(pi->adapter) >= CHELSIO_T7)
-			return (IFM_UNKNOWN);
-		/* fall through */
+	case FW_PORT_TYPE_KR4_200G: {
+		/*
+		 * Pre-T7 firmware used M_FW_PORT_CMD_PTYPE for PORT_TYPE_NONE
+		 * and driver needs to deal with both.
+		 */
+		_Static_assert(M_FW_PORT_CMD_PTYPE == FW_PORT_TYPE_KR4_200G,
+		    "driver/firmware mismatch");
+		if (chip_id(pi->adapter) < CHELSIO_T7)
+			return (IFM_NONE);
+		return (IFM_200G_KR4_PAM4);
+	}
 	case FW_PORT_TYPE_NONE:
 		return (IFM_NONE);
 	}