From: Jiri Pirko <jiri@resnulli.us>
To: "Jagielski, Jedrzej" <jedrzej.jagielski@intel.com>
Cc: "intel-wired-lan@lists.osuosl.org"
<intel-wired-lan@lists.osuosl.org>,
"Nguyen, Anthony L" <anthony.l.nguyen@intel.com>,
"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
"Sokolowski, Jan" <jan.sokolowski@intel.com>
Subject: Re: [PATCH iwl-next v1 2/2] i40e-linux: Add support for reading Trace Buffer
Date: Mon, 15 Jan 2024 15:06:20 +0100 [thread overview]
Message-ID: <ZaU73JvgApp_rAI3@nanopsycho> (raw)
In-Reply-To: <DS0PR11MB77852D91C24051F70ECFBF7BF06C2@DS0PR11MB7785.namprd11.prod.outlook.com>
Mon, Jan 15, 2024 at 11:37:22AM CET, jedrzej.jagielski@intel.com wrote:
>From: Jiri Pirko <jiri@resnulli.us>
>Sent: Friday, January 12, 2024 1:49 PM
>
>>Fri, Jan 12, 2024 at 10:59:45AM CET, jedrzej.jagielski@intel.com wrote:
>>>Currently after entering FW Recovery Mode we have no info in logs
>>>regarding current FW state.
>>>
>>>Add function reading content of the alternate RAM storing that info and
>>>print it into the log. Additionally print state of CSR register.
>>>
>>>Reviewed-by: Jan Sokolowski <jan.sokolowski@intel.com>
>>>Signed-off-by: Jedrzej Jagielski <jedrzej.jagielski@intel.com>
>>>---
>>> drivers/net/ethernet/intel/i40e/i40e.h | 2 ++
>>> drivers/net/ethernet/intel/i40e/i40e_main.c | 35 +++++++++++++++++++
>>> .../net/ethernet/intel/i40e/i40e_register.h | 2 ++
>>> drivers/net/ethernet/intel/i40e/i40e_type.h | 5 +++
>>> 4 files changed, 44 insertions(+)
>>>
>>>diff --git a/drivers/net/ethernet/intel/i40e/i40e.h b/drivers/net/ethernet/intel/i40e/i40e.h
>>>index ba24f3fa92c3..6ebd2fd15e0e 100644
>>>--- a/drivers/net/ethernet/intel/i40e/i40e.h
>>>+++ b/drivers/net/ethernet/intel/i40e/i40e.h
>>>@@ -23,6 +23,8 @@
>>> /* Useful i40e defaults */
>>> #define I40E_MAX_VEB 16
>>>
>>>+#define I40_BYTES_PER_WORD 2
>>>+
>>> #define I40E_MAX_NUM_DESCRIPTORS 4096
>>> #define I40E_MAX_NUM_DESCRIPTORS_XL710 8160
>>> #define I40E_MAX_CSR_SPACE (4 * 1024 * 1024 - 64 * 1024)
>>>diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
>>>index 4977ff391fed..f5abe8c9a88d 100644
>>>--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
>>>+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
>>>@@ -15414,6 +15414,39 @@ static int i40e_handle_resets(struct i40e_pf *pf)
>>> return is_empr ? -EIO : pfr;
>>> }
>>>
>>>+/**
>>>+ * i40e_log_fw_recovery_mode - log current FW state in Recovery Mode
>>>+ * @pf: board private structure
>>>+ *
>>>+ * Read alternate RAM and CSR registers and print them to the log
>>>+ **/
>>>+static void i40e_log_fw_recovery_mode(struct i40e_pf *pf)
>>>+{
>>>+ u8 buf[I40E_FW_STATE_BUFF_SIZE] = {0};
>>>+ struct i40e_hw *hw = &pf->hw;
>>>+ u8 fws0b, fws1b;
>>>+ u32 fwsts;
>>>+ int ret;
>>>+
>>>+ ret = i40e_aq_alternate_read_indirect(hw, I40E_ALT_CANARY,
>>>+ I40E_ALT_BUFF_DWORD_SIZE, buf);
>>>+ if (ret) {
>>>+ dev_warn(&pf->pdev->dev,
>>>+ "Cannot get FW trace buffer due to FW err %d aq_err %s\n",
>>>+ ret, i40e_aq_str(hw, hw->aq.asq_last_status));
>>>+ return;
>>>+ }
>>>+
>>>+ fwsts = rd32(&pf->hw, I40E_GL_FWSTS);
>>>+ fws0b = FIELD_GET(I40E_GL_FWSTS_FWS0B_MASK, fwsts);
>>>+ fws1b = FIELD_GET(I40E_GL_FWSTS_FWS1B_MASK, fwsts);
>>>+
>>>+ print_hex_dump(KERN_DEBUG, "Trace Buffer: ", DUMP_PREFIX_NONE,
>>>+ BITS_PER_BYTE * I40_BYTES_PER_WORD, 1, buf,
>>>+ I40E_FW_STATE_BUFF_SIZE, true);
>>
>>I don't follow. Why exactly you want to pollute dmesg with another
>>messages? Can't you use some other interface? Devlink health reporter
>>looks like a suitable alternative for this kind of operations.
>
>There is no devlink support for the i40e driver at this point.
So add it, what can I say...
>Dumping log in that case happen rather occasionally and debug log lvl is used
>so this should mitigate polluting the dmesg.
Nope, please don't put thing in logs when we have proper interfaces for
them.
pw-bot: cr
>
>>
>>
>>
>>>+ dev_dbg(&pf->pdev->dev, "FWS0B=0x%x, FWS1B=0x%x\n", fws0b, fws1b);
>>>+}
>>>+
>>> /**
>>> * i40e_init_recovery_mode - initialize subsystems needed in recovery mode
>>> * @pf: board private structure
>>>@@ -15497,6 +15530,8 @@ static int i40e_init_recovery_mode(struct i40e_pf *pf, struct i40e_hw *hw)
>>> mod_timer(&pf->service_timer,
>>> round_jiffies(jiffies + pf->service_timer_period));
>>>
>>>+ i40e_log_fw_recovery_mode(pf);
>>>+
>>> return 0;
>>>
>>> err_switch_setup:
>>>diff --git a/drivers/net/ethernet/intel/i40e/i40e_register.h b/drivers/net/ethernet/intel/i40e/i40e_register.h
>>>index 14ab642cafdb..8e254ff9c035 100644
>>>--- a/drivers/net/ethernet/intel/i40e/i40e_register.h
>>>+++ b/drivers/net/ethernet/intel/i40e/i40e_register.h
>>>@@ -169,6 +169,8 @@
>>> #define I40E_PRTDCB_TPFCTS_PFCTIMER_SHIFT 0
>>> #define I40E_PRTDCB_TPFCTS_PFCTIMER_MASK I40E_MASK(0x3FFF, I40E_PRTDCB_TPFCTS_PFCTIMER_SHIFT)
>>> #define I40E_GL_FWSTS 0x00083048 /* Reset: POR */
>>>+#define I40E_GL_FWSTS_FWS0B_SHIFT 0
>>>+#define I40E_GL_FWSTS_FWS0B_MASK I40E_MASK(0xFF, I40E_GL_FWSTS_FWS0B_SHIFT)
>>> #define I40E_GL_FWSTS_FWS1B_SHIFT 16
>>> #define I40E_GL_FWSTS_FWS1B_MASK I40E_MASK(0xFF, I40E_GL_FWSTS_FWS1B_SHIFT)
>>> #define I40E_GL_FWSTS_FWS1B_EMPR_0 I40E_MASK(0x20, I40E_GL_FWSTS_FWS1B_SHIFT)
>>>diff --git a/drivers/net/ethernet/intel/i40e/i40e_type.h b/drivers/net/ethernet/intel/i40e/i40e_type.h
>>>index 725da7edbca3..0372a8d519ad 100644
>>>--- a/drivers/net/ethernet/intel/i40e/i40e_type.h
>>>+++ b/drivers/net/ethernet/intel/i40e/i40e_type.h
>>>@@ -1372,6 +1372,11 @@ struct i40e_lldp_variables {
>>> #define I40E_ALT_BW_VALUE_MASK 0xFF
>>> #define I40E_ALT_BW_VALID_MASK 0x80000000
>>>
>>>+/* Alternate Ram Trace Buffer*/
>>>+#define I40E_ALT_CANARY 0xABCDEFAB
>>>+#define I40E_ALT_BUFF_DWORD_SIZE 0x14 /* in dwords */
>>>+#define I40E_FW_STATE_BUFF_SIZE 80
>>>+
>>> /* RSS Hash Table Size */
>>> #define I40E_PFQF_CTL_0_HASHLUTSIZE_512 0x00010000
>>>
>>>--
>>>2.31.1
>>>
>>>
prev parent reply other threads:[~2024-01-15 14:06 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-12 9:59 [PATCH iwl-next v1 0/2] i40e: Log FW state in recovery mode Jedrzej Jagielski
2024-01-12 9:59 ` [PATCH iwl-next v1 1/2] i40e: Add read alternate indirect command Jedrzej Jagielski
2024-01-13 16:07 ` Simon Horman
2024-01-12 9:59 ` [PATCH iwl-next v1 2/2] i40e-linux: Add support for reading Trace Buffer Jedrzej Jagielski
2024-01-12 12:49 ` Jiri Pirko
2024-01-15 10:37 ` Jagielski, Jedrzej
2024-01-15 14:06 ` Jiri Pirko [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=ZaU73JvgApp_rAI3@nanopsycho \
--to=jiri@resnulli.us \
--cc=anthony.l.nguyen@intel.com \
--cc=intel-wired-lan@lists.osuosl.org \
--cc=jan.sokolowski@intel.com \
--cc=jedrzej.jagielski@intel.com \
--cc=netdev@vger.kernel.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;
as well as URLs for NNTP newsgroup(s).