From: Jakub Kicinski <kuba@kernel.org>
To: Tiernan Hubble <thubble@thubble.ca>
Cc: Igor Russkikh <irusskikh@marvell.com>,
Andrew Lunn <andrew+netdev@lunn.ch>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Paolo Abeni <pabeni@redhat.com>, Lorenz Brun <lorenz@brun.one>,
Andrew Lunn <andrew@lunn.ch>, Simon Horman <horms@kernel.org>,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH net v2] net: atlantic: fix reading SFP module info on some AQC100 cards
Date: Wed, 18 Feb 2026 17:30:00 -0800 [thread overview]
Message-ID: <20260218173000.01a44c80@kernel.org> (raw)
In-Reply-To: <20260216224913.419470-1-thubble@thubble.ca>
On Mon, 16 Feb 2026 16:49:12 -0600 Tiernan Hubble wrote:
> Commit 853a2944aaf3 ("net: atlantic: support reading SFP module info")
> added support for reading SFP module info on AQC100-based cards. However,
> it only supports reading directly from the controller's hardware
> registers, and this does not seem to be supported on certain cards,
> including my TRENDnet TEG-10GECSFP V3. "ethtool -m" times out when reading
> certain registers, even when I increase the read poll timeout values.
>
> The DPDK "atlantic" driver reads module info via firmware calls instead of
> directly reading the hardware registers, provided that the NIC's firmware
> version supports it.
>
> This change adapts the DPDK firmware call code to the kernel driver. It
> preserves the old hardware-based module read code as a fallback when the
> firmware does not support it, to avoid breaking cards that are currently
> working.
>
> Tested on 2 different TRENDnet TEG-10GECSFP V3 cards, both with firmware
> version 3.1.121 (current at the time of this patch). Both cards correctly
> reported module info for a passive DAC cable and 2 different 10G optical
> transceivers.
>
> Fixes: 853a2944aaf3 ("net: atlantic: support reading SFP module info")
> Signed-off-by: Tiernan Hubble <thubble@thubble.ca>
Overall looks quite nice, but I don't think it qualifies as a fix.
Fix means something regressed from previous release, crashes, etc
For the adapters in question IIUC ethtool -m has never worked before.
Please drop the Fixes tag and repost next week for net-next.
Some drive by comments below..
> diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_ethtool.c b/drivers/net/ethernet/aquantia/atlantic/aq_ethtool.c
> index a6e1826dd5d7..5be9e9ee7e9f 100644
> --- a/drivers/net/ethernet/aquantia/atlantic/aq_ethtool.c
> +++ b/drivers/net/ethernet/aquantia/atlantic/aq_ethtool.c
> @@ -983,6 +983,36 @@ static int aq_ethtool_set_phy_tunable(struct net_device *ndev,
> return err;
> }
>
> +static bool aq_ethtool_can_read_module_eeprom(struct aq_nic_s *aq_nic)
> +{
> + return aq_nic->aq_fw_ops->read_module_eeprom ||
> + aq_nic->aq_hw_ops->hw_read_module_eeprom;
> +}
> +
> +static int aq_ethtool_read_module_eeprom(struct aq_nic_s *aq_nic, u8 dev_addr,
> + u8 reg_start_addr, int len, u8 *data)
> +{
> + int err = -EOPNOTSUPP;
maybe add a temp variable:
const struct aq_fw_ops *ops = aq_nic->aq_fw_ops;
> + if (aq_nic->aq_fw_ops->read_module_eeprom) {
> + err = aq_nic->aq_fw_ops->read_module_eeprom(aq_nic->aq_hw,
to avoid the long lines and awkward wrapping ?
> + dev_addr, reg_start_addr, len, data);
> +
> + /* If the only error is that the firmware version doesn't
> + * support reading EEPROM, we can still attempt to read it
> + * directly from the hardware if supported.
> + */
> + if (err != -EOPNOTSUPP)
> + return err;
> + }
> +
> + if (aq_nic->aq_hw_ops->hw_read_module_eeprom)
> + err = aq_nic->aq_hw_ops->hw_read_module_eeprom(aq_nic->aq_hw,
and here
> + dev_addr, reg_start_addr, len, data);
> +
> + return err;
> +}
> +static int aq_fw2x_read_module_eeprom(struct aq_hw_s *self, u8 dev_addr,
> + u8 reg_start_addr, int len, u8 *data)
> +{
> + u32 low_status, orig_low_status, low_req = 0;
> + u32 res_bytes_remain_cnt = len % sizeof(u32);
> + u32 res_dword_cnt = len / sizeof(u32);
> + struct smbus_request request = { 0 };
> + u32 req_dword_cnt;
> + u32 result = 0;
> + u32 caps_lo;
> + u32 offset;
> + int err;
> +
> + caps_lo = aq_fw2x_get_link_capabilities(self);
> + if (!(caps_lo & BIT(CAPS_LO_SMBUS_READ)))
> + return -EOPNOTSUPP;
> +
> + request.msg_id = 0;
> + request.device_id = dev_addr;
> + request.address = reg_start_addr;
> + request.length = len;
> +
> + /* Write SMBUS request to cfg memory */
> + req_dword_cnt = (sizeof(request) + sizeof(u32) - 1) / sizeof(u32);
DIV_ROUND_UP()
> + err = hw_atl_write_fwcfg_dwords(self, (void *)&request, req_dword_cnt);
> + if (err < 0)
> + return err;
> +
> + /* Toggle 0x368.CAPS_LO_SMBUS_READ bit */
> + low_req = aq_hw_read_reg(self, HW_ATL_FW2X_MPI_CONTROL_ADDR);
> + orig_low_status = low_req & BIT(CAPS_LO_SMBUS_READ);
the mixing of BIT(CAPS_LO_SMBUS_READ)..
> + low_req ^= HW_ATL_FW2X_CAP_SMBUS_READ;
.. and HW_ATL_FW2X_CAP_SMBUS_READ which is defined to
+#define HW_ATL_FW2X_CAP_SMBUS_READ BIT(CAPS_LO_SMBUS_READ)
seems unnecessary and confusing?
--
pw-bot: cr
prev parent reply other threads:[~2026-02-19 1:30 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-16 22:49 [PATCH net v2] net: atlantic: fix reading SFP module info on some AQC100 cards Tiernan Hubble
2026-02-19 1:30 ` Jakub Kicinski [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260218173000.01a44c80@kernel.org \
--to=kuba@kernel.org \
--cc=andrew+netdev@lunn.ch \
--cc=andrew@lunn.ch \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=horms@kernel.org \
--cc=irusskikh@marvell.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lorenz@brun.one \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=thubble@thubble.ca \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox