git: fdab50f6f810 - main - if_bnxt: add support for SIOCGI2CPB page/bank i2c requests
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
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;
}