From nobody Sun Apr 5 21:08:16 2026 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4fplRn3wV8z6Y8JG for ; Sun, 05 Apr 2026 21:08:21 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R12" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4fplRn3LZ5z484h for ; Sun, 05 Apr 2026 21:08:21 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1775423301; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=88+tQe0c2vcf5qtE4MuSV9UYNcssiu/30yJVwKjwiQA=; b=Ls1QOnu5U2qQkJrnuv4tGZmMOgb3PVF0G0h7izVaBrsZKiVgJU0bE+xIFIUngYeIDw6p9k GKn4zD0oNfI7ZQtxOufAusqBgei+XfrgqdHkPvGL2N4H63PFgyGY6xwKVng+pQGDnCPrOo tQUsovsTBz1EXePDsubhFw+RwtQqyKJZV4Nscbj2kblP/qZmvnCdSyYzD9NwzwBmKCRYdL NKfKoQjR2KoXHhPh7WHbJ8nqeWCsUTw4UUWsUg6MWxAoc8n2XymMQBzFyeJWzscNUqyBU3 m8d4jHSPrFs7xJbjY12eMF3NIC6XknzdFjOTS4oNk15JM98PESZKNHdCUfSkWQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1775423301; a=rsa-sha256; cv=none; b=OMqgt6Vu6OdD7W1EE6i4d9MGjPRztqR7poBapeSctKE2rf45nrbEMw6vhEp02cnn6RfSSr CQuGQNEzQEvmcTo/yAs5q9Kma4yiYYCL6HXxcIR9n/t1OWoQKF+jeSGqpuz306SYOSp4T2 SL4fKqJhdgnKFw2mw+YM/Ar/+shZ+bnM7DAsfRDMoyvrng+npW0G/WBBK9L+pxH67vjLke vWNKzs5myVrHrxt7DRfTKctIEap3GDgkZS3GPEcgMkvhi/xHmFRRitCxHTc6Uuv8vmx34a t1hbKCe7Yjl4684oELhQZ7X7pfVr8vA/uLviTMLad1ZOnXTPnx49ag+fBXeCTA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1775423301; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=88+tQe0c2vcf5qtE4MuSV9UYNcssiu/30yJVwKjwiQA=; b=E49Wh4kjkEpGVRXUcg8GbhhR3u35Jg1QrnQfyYJde55zV4rOuBffegK69cIwri4yVKVJJ/ hp6R1sPSl1xp+c3j/Grh17UZ9W2DmAYl45EnsBygdc115eNVMYmdLBZ21Figp9lD1KY00e cKQ9wAfsQ6OJv7q+Hnb3YhSLzqYDDRvFsErcV4hULGJWjC5S6s/xyGzPe6M6EoPdv8YqrH pN51uiaYdHMiTaOaUDWPBLnl8o1tGrsYsOEoVcYmewpkoCQ4ebn014ONb4ijyB8t6xeXRh Hjac5Q8JPzFaIU1uqv36k8gYpsn+LQP6XbZocav6On5i7imlOVirMiOxqEhjqw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fplRn2xzWz7Dr for ; Sun, 05 Apr 2026 21:08:21 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3d30c by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sun, 05 Apr 2026 21:08:16 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Andrew Gallatin Subject: git: cf1f21572897 - main - net: Add SIOCGI2CPB ioctl & add page/bank fields to ifi2creq List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: gallatin X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: cf1f21572897ffc85789fbb1792603967297f6fc Auto-Submitted: auto-generated Date: Sun, 05 Apr 2026 21:08:16 +0000 Message-Id: <69d2cf40.3d30c.21904523@gitrepo.freebsd.org> The branch main has been updated by gallatin: URL: https://cgit.FreeBSD.org/src/commit/?id=cf1f21572897ffc85789fbb1792603967297f6fc commit cf1f21572897ffc85789fbb1792603967297f6fc Author: Andrew Gallatin AuthorDate: 2026-04-05 19:58:10 +0000 Commit: Andrew Gallatin CommitDate: 2026-04-05 21:04:38 +0000 net: Add SIOCGI2CPB ioctl & add page/bank fields to ifi2creq This commit adds page & bank fields to ifi2creq in preparation for adding CMIS support for 400g optics to ifconfig. The new ioctl SIOCGI2CPB is added, so that drivers can distinguish between callers asking for page/bank selection and legacy callers that simply failed to zero out all ifi2creq fields. The mlx5en(4) driver and iflib(4) driver frameork have been updated to use this new SIOCGI2CPB ioctl and support page/bank operations. A follow-on patchset will add support to ifconfig for reporting data from CMIS optics. This has been tested on Nvidia ConnectX-7 and Broadcom Thor2 (using out of tree driver) based NICs. Differential Revision: https://reviews.freebsd.org/D55912 Sponsored by: Netflix Inc. Reviewed by: kib --- sys/dev/mlx5/mlx5_en/mlx5_en_main.c | 18 ++++++++++++++++-- sys/net/if.h | 5 +++-- sys/net/iflib.c | 9 +++++++++ sys/net/iflib.h | 5 ++++- sys/sys/sockio.h | 1 + 5 files changed, 33 insertions(+), 5 deletions(-) diff --git a/sys/dev/mlx5/mlx5_en/mlx5_en_main.c b/sys/dev/mlx5/mlx5_en/mlx5_en_main.c index 0baeab31b100..fb8b79c8f787 100644 --- a/sys/dev/mlx5/mlx5_en/mlx5_en_main.c +++ b/sys/dev/mlx5/mlx5_en/mlx5_en_main.c @@ -3728,6 +3728,8 @@ out: break; case SIOCGI2C: + /* fallthru */ + case SIOCGI2CPB: ifr = (struct ifreq *)data; /* @@ -3737,6 +3739,9 @@ out: error = copyin(ifr_data_get_ptr(ifr), &i2c, sizeof(i2c)); if (error) break; + /* ensure page and bank are 0 for legacy SIOCGI2C ioctls */ + if (command == SIOCGI2C) + i2c.page = i2c.bank = 0; if (i2c.len > sizeof(i2c.data)) { error = EINVAL; @@ -3778,8 +3783,17 @@ out: error = EINVAL; goto err_i2c; } + + if (i2c.bank != 0) { + mlx5_en_err(ifp, + "Query eeprom failed, Invalid Bank: %X\n", + i2c.bank); + error = EINVAL; + goto err_i2c; + } + error = mlx5_query_eeprom(priv->mdev, - read_addr, MLX5_EEPROM_LOW_PAGE, + read_addr, i2c.page, (uint32_t)i2c.offset, (uint32_t)i2c.len, module_num, (uint32_t *)i2c.data, &size_read); if (error) { @@ -3791,7 +3805,7 @@ out: if (i2c.len > MLX5_EEPROM_MAX_BYTES) { error = mlx5_query_eeprom(priv->mdev, - read_addr, MLX5_EEPROM_LOW_PAGE, + read_addr, i2c.page, (uint32_t)(i2c.offset + size_read), (uint32_t)(i2c.len - size_read), module_num, (uint32_t *)(i2c.data + size_read), &size_read); diff --git a/sys/net/if.h b/sys/net/if.h index 7c0a476708d6..1b47237e46bb 100644 --- a/sys/net/if.h +++ b/sys/net/if.h @@ -604,8 +604,9 @@ struct ifi2creq { uint8_t dev_addr; /* i2c address (0xA0, 0xA2) */ uint8_t offset; /* read offset */ uint8_t len; /* read length */ - uint8_t spare0; - uint32_t spare1; + uint8_t page; /* CMIS page number (0 for legacy) */ + uint8_t bank; /* CMIS bank number (0 for legacy) */ + uint8_t spare[3]; /* reserved for future use */ uint8_t data[8]; /* read buffer */ }; diff --git a/sys/net/iflib.c b/sys/net/iflib.c index 08282d1799b8..f9d0b1af0f83 100644 --- a/sys/net/iflib.c +++ b/sys/net/iflib.c @@ -4468,8 +4468,11 @@ iflib_if_ioctl(if_t ifp, u_long command, caddr_t data) err = ifmedia_ioctl(ifp, ifr, ctx->ifc_mediap, command); break; case SIOCGI2C: + /* FALLTHROUGH */ + case SIOCGI2CPB: { struct ifi2creq i2c; + if_shared_ctx_t sctx = ctx->ifc_sctx; err = copyin(ifr_data_get_ptr(ifr), &i2c, sizeof(i2c)); if (err != 0) @@ -4482,6 +4485,12 @@ iflib_if_ioctl(if_t ifp, u_long command, caddr_t data) err = EINVAL; break; } + if (command == SIOCGI2C) { + i2c.page = i2c.bank = 0; + } else if ((sctx->isc_flags & IFLIB_I2C_PAGE_BANK) == 0) { + err = EINVAL; + break; + } if ((err = IFDI_I2C_REQ(ctx, &i2c)) == 0) err = copyout(&i2c, ifr_data_get_ptr(ifr), diff --git a/sys/net/iflib.h b/sys/net/iflib.h index fe70fc5775cd..c73c50e5a3b3 100644 --- a/sys/net/iflib.h +++ b/sys/net/iflib.h @@ -348,7 +348,10 @@ typedef enum { * Driver needs frames padded to some minimum length */ #define IFLIB_NEED_ETHER_PAD 0x100 -#define IFLIB_SPARE7 0x200 +/* + * Driver understands page/bank i2c reads + */ +#define IFLIB_I2C_PAGE_BANK 0x200 #define IFLIB_SPARE6 0x400 #define IFLIB_SPARE5 0x800 #define IFLIB_SPARE4 0x1000 diff --git a/sys/sys/sockio.h b/sys/sys/sockio.h index cf612079c2f3..de2cc236223c 100644 --- a/sys/sys/sockio.h +++ b/sys/sys/sockio.h @@ -150,5 +150,6 @@ #define SIOCGUMBINFO _IOWR('i', 157, struct ifreq) /* get MBIM info */ #define SIOCSUMBPARAM _IOW('i', 158, struct ifreq) /* set MBIM param */ #define SIOCGUMBPARAM _IOWR('i', 159, struct ifreq) /* get MBIM param */ +#define SIOCGI2CPB _IOWR('i', 160, struct ifreq) /* get I2C data */ #endif /* !_SYS_SOCKIO_H_ */