From: Tony Nguyen <anthony.l.nguyen@intel.com>
To: intel-wired-lan@osuosl.org
Subject: [Intel-wired-lan] [PATCH S58 05/13] ice: Reimplement module reads used by ethtool
Date: Wed, 31 Mar 2021 14:17:00 -0700 [thread overview]
Message-ID: <20210331211708.55205-5-anthony.l.nguyen@intel.com> (raw)
In-Reply-To: <20210331211708.55205-1-anthony.l.nguyen@intel.com>
From: Scott W Taylor <scott.w.taylor@intel.com>
There was an excessive increment of the QSFP page, which is
now fixed. Additionally, this new update now reads 8 bytes
at a time and will retry each request if the module/bus is
busy.
Also, prevent reading from upper pages if module does not
support those pages.
Signed-off-by: Scott W Taylor <scott.w.taylor@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
---
drivers/net/ethernet/intel/ice/ice_ethtool.c | 49 ++++++++++++++++----
1 file changed, 39 insertions(+), 10 deletions(-)
diff --git a/drivers/net/ethernet/intel/ice/ice_ethtool.c b/drivers/net/ethernet/intel/ice/ice_ethtool.c
index 68c8ad8d157e..06cb86746415 100644
--- a/drivers/net/ethernet/intel/ice/ice_ethtool.c
+++ b/drivers/net/ethernet/intel/ice/ice_ethtool.c
@@ -3914,30 +3914,33 @@ ice_get_module_eeprom(struct net_device *netdev,
struct ethtool_eeprom *ee, u8 *data)
{
struct ice_netdev_priv *np = netdev_priv(netdev);
+#define SFF_READ_BLOCK_SIZE 8
+ u8 value[SFF_READ_BLOCK_SIZE] = { 0 };
u8 addr = ICE_I2C_EEPROM_DEV_ADDR;
struct ice_vsi *vsi = np->vsi;
struct ice_pf *pf = vsi->back;
struct ice_hw *hw = &pf->hw;
enum ice_status status;
bool is_sfp = false;
- unsigned int i;
+ unsigned int i, j;
u16 offset = 0;
- u8 value = 0;
u8 page = 0;
if (!ee || !ee->len || !data)
return -EINVAL;
- status = ice_aq_sff_eeprom(hw, 0, addr, offset, page, 0, &value, 1, 0,
+ status = ice_aq_sff_eeprom(hw, 0, addr, offset, page, 0, value, 1, 0,
NULL);
if (status)
return -EIO;
- if (value == ICE_MODULE_TYPE_SFP)
+ if (value[0] == ICE_MODULE_TYPE_SFP)
is_sfp = true;
- for (i = 0; i < ee->len; i++) {
+ memset(data, 0, ee->len);
+ for (i = 0; i < ee->len; i += SFF_READ_BLOCK_SIZE) {
offset = i + ee->offset;
+ page = 0;
/* Check if we need to access the other memory page */
if (is_sfp) {
@@ -3953,11 +3956,37 @@ ice_get_module_eeprom(struct net_device *netdev,
}
}
- status = ice_aq_sff_eeprom(hw, 0, addr, offset, page, !is_sfp,
- &value, 1, 0, NULL);
- if (status)
- value = 0;
- data[i] = value;
+ /* Bit 2 of eeprom address 0x02 declares upper
+ * pages are disabled on QSFP modules.
+ * SFP modules only ever use page 0.
+ */
+ if (page == 0 || !(data[0x2] & 0x4)) {
+ /* If i2c bus is busy due to slow page change or
+ * link management access, call can fail. This is normal.
+ * So we retry this a few times.
+ */
+ for (j = 0; j < 4; j++) {
+ status = ice_aq_sff_eeprom(hw, 0, addr, offset, page,
+ !is_sfp, value,
+ SFF_READ_BLOCK_SIZE,
+ 0, NULL);
+ netdev_dbg(netdev, "SFF %02X %02X %02X %X = %02X%02X%02X%02X.%02X%02X%02X%02X (%X)\n",
+ addr, offset, page, is_sfp,
+ value[0], value[1], value[2], value[3],
+ value[4], value[5], value[6], value[7],
+ status);
+ if (status) {
+ usleep_range(1500, 2500);
+ memset(value, 0, SFF_READ_BLOCK_SIZE);
+ continue;
+ }
+ break;
+ }
+
+ /* Make sure we have enough room for the new block */
+ if ((i + SFF_READ_BLOCK_SIZE) < ee->len)
+ memcpy(data + i, value, SFF_READ_BLOCK_SIZE);
+ }
}
return 0;
}
--
2.20.1
next prev parent reply other threads:[~2021-03-31 21:17 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-31 21:16 [Intel-wired-lan] [PATCH S58 01/13] ice: refactor interrupt moderation writes Tony Nguyen
2021-03-31 21:16 ` [Intel-wired-lan] [PATCH S58 02/13] ice: replace custom AIM algorithm with kernel's DIM library Tony Nguyen
2021-04-14 23:19 ` Brelinski, TonyX
2021-03-31 21:16 ` [Intel-wired-lan] [PATCH S58 03/13] ice: manage interrupts during poll exit Tony Nguyen
2021-04-12 17:27 ` Brelinski, TonyX
2021-03-31 21:16 ` [Intel-wired-lan] [PATCH S58 04/13] ice: refactor ITR data structures Tony Nguyen
2021-04-12 17:18 ` Brelinski, TonyX
2021-03-31 21:17 ` Tony Nguyen [this message]
2021-04-08 21:31 ` [Intel-wired-lan] [PATCH S58 05/13] ice: Reimplement module reads used by ethtool Brelinski, TonyX
2021-03-31 21:17 ` [Intel-wired-lan] [PATCH S58 06/13] ice: print name in /proc/iomem Tony Nguyen
2021-04-08 21:35 ` Brelinski, TonyX
2021-03-31 21:17 ` [Intel-wired-lan] [PATCH S58 07/13] ice: use local for consistency Tony Nguyen
2021-04-08 21:38 ` Brelinski, TonyX
2021-03-31 21:17 ` [Intel-wired-lan] [PATCH S58 08/13] ice: remove unused struct member Tony Nguyen
2021-04-08 21:41 ` Brelinski, TonyX
2021-03-31 21:17 ` [Intel-wired-lan] [PATCH S58 09/13] ice: Set vsi->vf_id as ICE_INVAL_VFID for non VF VSI types Tony Nguyen
2021-04-08 22:24 ` Brelinski, TonyX
2021-03-31 21:17 ` [Intel-wired-lan] [PATCH S58 10/13] ice: suppress false cppcheck issues Tony Nguyen
2021-04-08 22:26 ` Brelinski, TonyX
2021-03-31 21:17 ` [Intel-wired-lan] [PATCH S58 11/13] ice: fix clang warning regarding deadcode.DeadStores Tony Nguyen
2021-04-08 22:30 ` Brelinski, TonyX
2021-03-31 21:17 ` [Intel-wired-lan] [PATCH S58 12/13] ice: remove return variable Tony Nguyen
2021-04-08 22:33 ` Brelinski, TonyX
2021-03-31 21:17 ` [Intel-wired-lan] [PATCH S58 13/13] ice: reduce scope of variable Tony Nguyen
2021-04-08 22:37 ` Brelinski, TonyX
2021-04-08 19:54 ` [Intel-wired-lan] [PATCH S58 01/13] ice: refactor interrupt moderation writes Brelinski, TonyX
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=20210331211708.55205-5-anthony.l.nguyen@intel.com \
--to=anthony.l.nguyen@intel.com \
--cc=intel-wired-lan@osuosl.org \
/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