git: fdab50f6f810 - main - if_bnxt: add support for SIOCGI2CPB page/bank i2c requests

From: Sumit Saxena <ssaxena_at_FreeBSD.org>
Date: Fri, 09 Oct 2026 10:13:05 UTC
The branch main has been updated by ssaxena:

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

commit fdab50f6f8107c9d825a7e6d92d7a6b89c417bbb
Author:     Sumit Saxena <sumit.saxena@broadcom.com>
AuthorDate: 2026-09-01 07:55:35 +0000
Commit:     Sumit Saxena <ssaxena@FreeBSD.org>
CommitDate: 2026-10-09 08:24:46 +0000

    if_bnxt: add support for SIOCGI2CPB page/bank i2c requests
    
    Advertise IFLIB_I2C_PAGE_BANK and forward the requested page/bank to
    firmware, so CMIS optics can be read correctly instead of falling
    back to bogus legacy SFF-8472 decoding. Also fix bnxt_i2c_req() to
    return positive errno values.
    
    Signed-off-by:  gallatin
    Reviewed by:    gallatin
    MFC after:      2 weeks
    Sponsored by:   Broadcom Inc.
    Differential Revision:  https://reviews.freebsd.org/D59573
---
 sys/dev/bnxt/bnxt_en/if_bnxt.c | 30 ++++++++++++++++++++++++------
 1 file changed, 24 insertions(+), 6 deletions(-)

diff --git a/sys/dev/bnxt/bnxt_en/if_bnxt.c b/sys/dev/bnxt/bnxt_en/if_bnxt.c
index 759eeff63607..776da70a6d1c 100644
--- a/sys/dev/bnxt/bnxt_en/if_bnxt.c
+++ b/sys/dev/bnxt/bnxt_en/if_bnxt.c
@@ -392,7 +392,11 @@ static struct if_shared_ctx bnxt_sctx_template = {
 	.isc_magic = IFLIB_MAGIC,
 	.isc_driver = &bnxt_iflib_driver,
 	.isc_nfl = 2,
+#ifdef IFLIB_I2C_PAGE_BANK
+	.isc_flags = IFLIB_HAS_RXCQ | IFLIB_HAS_TXCQ | IFLIB_NEED_ETHER_PAD | IFLIB_I2C_PAGE_BANK,
+#else
 	.isc_flags = IFLIB_HAS_RXCQ | IFLIB_HAS_TXCQ | IFLIB_NEED_ETHER_PAD,
+#endif
 	.isc_q_align = PAGE_SIZE,
 	.isc_tx_maxsize = BNXT_TSO_SIZE + sizeof(struct ether_vlan_header),
 	.isc_tx_maxsegsize = BNXT_TSO_SIZE + sizeof(struct ether_vlan_header),
@@ -421,7 +425,11 @@ static struct if_shared_ctx bnxt_sctx_template_p7 = {
 	.isc_magic = IFLIB_MAGIC,
 	.isc_driver = &bnxt_iflib_driver,
 	.isc_nfl = 2,
+#ifdef IFLIB_I2C_PAGE_BANK
+	.isc_flags = IFLIB_HAS_RXCQ | IFLIB_HAS_TXCQ | IFLIB_NEED_ETHER_PAD | IFLIB_I2C_PAGE_BANK,
+#else
 	.isc_flags = IFLIB_HAS_RXCQ | IFLIB_HAS_TXCQ | IFLIB_NEED_ETHER_PAD,
+#endif
 	.isc_q_align = PAGE_SIZE,
 	.isc_tx_maxsize = BNXT_TSO_SIZE + sizeof(struct ether_vlan_header),
 	.isc_tx_maxsegsize = BNXT_TSO_SIZE + sizeof(struct ether_vlan_header),
@@ -5139,16 +5147,26 @@ bnxt_i2c_req(if_ctx_t ctx, struct ifi2creq *i2c)
 	 */
 	if (softc->link_info.module_status >
 		HWRM_PORT_PHY_QCFG_OUTPUT_MODULE_STATUS_WARNINGMSG)
-		return -EOPNOTSUPP;
+		return EOPNOTSUPP;
 
 	/* This feature is not supported in older firmware versions */
 	if (!BNXT_CHIP_P5_PLUS(softc) ||
 	    (softc->hwrm_spec_code < 0x10202))
-		return -EOPNOTSUPP;
-
-
-	rc = bnxt_read_sfp_module_eeprom_info(softc, i2c->dev_addr, 0, 0, 0,
-		i2c->offset, i2c->len, data);
+		return EOPNOTSUPP;
+
+
+#ifdef IFLIB_I2C_PAGE_BANK
+	/* linux/page.h #defines page to vm_page; i2c->page has no such member. */
+#undef page
+	rc = bnxt_read_sfp_module_eeprom_info(softc, i2c->dev_addr,
+	    i2c->page, i2c->bank, i2c->bank != 0,
+	    i2c->offset, i2c->len, data);
+#define page	vm_page
+#else
+	rc = bnxt_read_sfp_module_eeprom_info(softc, i2c->dev_addr,
+	    0, 0, 0,
+	    i2c->offset, i2c->len, data);
+#endif
 
 	return rc;
 }